diff --git a/.travis.yml b/.travis.yml index 2c2fe62d3f4..f9e0528d35d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: cpp -dist: xenial +dist: bionic sudo: required git: depth: 3 @@ -58,7 +58,7 @@ install: - echo "$PWD" - if [ -n "$TRAVIS_PULL_REQUEST_BRANCH" ] && [ "$PACKAGE" != CHECK ]; then DO_IGNORE=FALSE; for ARG in $(echo "$PACKAGE");do if [ "$ARG" = "Maintenance" ]; then continue; fi; . $PWD/.travis/test_package.sh "$PWD" "$ARG"; echo "DO_IGNORE is $DO_IGNORE"; if [ "$DO_IGNORE" = "FALSE" ]; then break; fi; done; if [ "$DO_IGNORE" = "TRUE" ]; then travis_terminate 0; fi;fi - /usr/bin/time -f 'Spend time of %C -- %E (real)' bash .travis/install.sh - - export CXX=clang++ CC=clang; + - export CXX=clang++-10 CC=clang-10; before_script: - wget -O doxygen_exe https://cgal.geometryfactory.com/~mgimeno/doxygen_exe - sudo mv doxygen_exe /usr/bin/doxygen diff --git a/.travis/build_package.sh b/.travis/build_package.sh index 5b68905708e..12f6082c922 100755 --- a/.travis/build_package.sh +++ b/.travis/build_package.sh @@ -11,7 +11,7 @@ function mytime { function build_examples { mkdir -p build-travis cd build-travis - mytime cmake -DCGAL_DIR="/usr/local/lib/cmake/CGAL" -DCMAKE_CXX_FLAGS="${CXX_FLAGS}" -DCGAL_BUILD_THREE_DOC=TRUE .. + mytime cmake -DCGAL_DIR="/usr/local/lib/cmake/CGAL" -DCMAKE_CXX_FLAGS="${CXX_FLAGS}" .. mytime make -j2 VERBOSE=1 } diff --git a/.travis/install.sh b/.travis/install.sh index 507ecd0894e..ec1791b750e 100644 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -2,14 +2,15 @@ [ -n "$CGAL_DEBUG_TRAVIS" ] && set -x DONE=0 +sudo add-apt-repository ppa:mikhailnov/pulseeffects -y sudo apt-get update + while [ $DONE = 0 ] do - DONE=1 && sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install clang zsh \ -flex bison cmake graphviz libgmp-dev libmpfr-dev libmpfi-dev zlib1g-dev libeigen3-dev libboost-dev \ -libboost-system-dev libboost-program-options-dev libboost-thread-dev libboost-iostreams-dev \ + DONE=1 && sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install clang-10 zsh \ +flex bison cmake graphviz libgmp-dev libmpfr-dev libmpfi-dev zlib1g-dev libeigen3-dev \ qtbase5-dev libqt5sql5-sqlite libqt5opengl5-dev qtscript5-dev libqt5svg5-dev qttools5-dev qttools5-dev-tools qml-module-qtgraphicaleffects libopencv-dev mesa-common-dev libmetis-dev libglu1-mesa-dev \ -|| DONE=0 && sudo apt-get update +libboost1.72-dev || DONE=0 && sudo apt-get update done exit 0 diff --git a/.travis/template.txt b/.travis/template.txt index 48d2facb8ce..3b99af1ff13 100644 --- a/.travis/template.txt +++ b/.travis/template.txt @@ -1,5 +1,5 @@ language: cpp -dist: xenial +dist: bionic sudo: required git: depth: 3 @@ -12,7 +12,7 @@ install: - echo "$PWD" - if [ -n "$TRAVIS_PULL_REQUEST_BRANCH" ] && [ "$PACKAGE" != CHECK ]; then DO_IGNORE=FALSE; for ARG in $(echo "$PACKAGE");do if [ "$ARG" = "Maintenance" ]; then continue; fi; . $PWD/.travis/test_package.sh "$PWD" "$ARG"; echo "DO_IGNORE is $DO_IGNORE"; if [ "$DO_IGNORE" = "FALSE" ]; then break; fi; done; if [ "$DO_IGNORE" = "TRUE" ]; then travis_terminate 0; fi;fi - /usr/bin/time -f 'Spend time of %C -- %E (real)' bash .travis/install.sh - - export CXX=clang++ CC=clang; + - export CXX=clang++-10 CC=clang-10; before_script: - wget -O doxygen_exe https://cgal.geometryfactory.com/~mgimeno/doxygen_exe - sudo mv doxygen_exe /usr/bin/doxygen diff --git a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h index 6140647af77..1138376df43 100644 --- a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h @@ -126,7 +126,7 @@ public: /*! Id type: - `boost::graph_traits::%edge_descriptor` if `OneHalfedgeGraphPerTree` is `Tag_true` - - `std::pair::edge_descriptor, const HalfedgeGraph*>` if `OneHalfedgeGraphPerTree` is `Tag_false` + - `std::pair::%edge_descriptor, const HalfedgeGraph*>` if `OneHalfedgeGraphPerTree` is `Tag_false` */ unspecified_type Id; /// @} @@ -202,4 +202,3 @@ public: #include #endif // CGAL_AABB_HALFEDGE_GRAPH_SEGMENT_PRIMITIVE_H - diff --git a/AABB_tree/include/CGAL/AABB_traits.h b/AABB_tree/include/CGAL/AABB_traits.h index 8ff12dfe862..470420162a7 100644 --- a/AABB_tree/include/CGAL/AABB_traits.h +++ b/AABB_tree/include/CGAL/AABB_traits.h @@ -171,9 +171,11 @@ class AABB_tree; /// \sa `AABBPrimitiveWithSharedData` template -class AABB_traits: - public internal::AABB_tree::AABB_traits_base, +class AABB_traits +#ifndef DOXYGEN_RUNNING +: public internal::AABB_tree::AABB_traits_base, public internal::AABB_tree::AABB_traits_base_2 +#endif { typedef typename CGAL::Object Object; public: diff --git a/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_surface_mesh.cpp b/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_surface_mesh.cpp index 80bff330b4d..7fac0628770 100644 --- a/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_surface_mesh.cpp +++ b/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_surface_mesh.cpp @@ -1,10 +1,10 @@ #include #include #include +#include #include #include #include -#include #include typedef std::array Facet; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_cache.h b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_cache.h index 62c7950a028..829f00d2a5f 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_cache.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_cache.h @@ -653,7 +653,7 @@ void _Bezier_cache::_self_intersection_params // II: Y(t) - Y(s) / (t - s) = 0 // Integer *coeffs; - int i, k; + int i; // Consruct the bivariate polynomial that corresponds to Equation I. // Note that we represent a bivariate polynomial as a vector of univariate @@ -667,12 +667,11 @@ void _Bezier_cache::_self_intersection_params coeffs = new Integer [degX]; for (i = 0; i < degX; i++) - { - for (k = i + 1; k < degX; k++) - coeffs[k - i - 1] = nt_traits.get_coefficient (polyX, k); + coeffs[i] = nt_traits.get_coefficient(polyX, i + 1); - coeffsX_st[i] = nt_traits.construct_polynomial (coeffs, degX - i - 1); - } + for (i = 0; i < degX; i++) + coeffsX_st[degX - i - 1] = + nt_traits.construct_polynomial(coeffs + i, degX - i - 1); delete[] coeffs; @@ -685,12 +684,11 @@ void _Bezier_cache::_self_intersection_params coeffs = new Integer [degY]; for (i = 0; i < degY; i++) - { - for (k = i + 1; k < degY; k++) - coeffs[k - i - 1] = nt_traits.get_coefficient (polyY, k); + coeffs[i] = nt_traits.get_coefficient(polyY, i + 1); - coeffsY_st[i] = nt_traits.construct_polynomial (coeffs, degY - i - 1); - } + for (i = 0; i < degY; i++) + coeffsY_st[degY - i - 1] = + nt_traits.construct_polynomial(coeffs + i, degY - i - 1); delete[] coeffs; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_point_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_point_2.h index 62312301940..feb5def190e 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_point_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_point_2.h @@ -1641,17 +1641,43 @@ void _Bezier_point_2_rep::_make_exact const Algebraic t_min = nt_traits.convert (orig2.point_bound().t_min); const Algebraic t_max = nt_traits.convert (orig2.point_bound().t_max); + bool self_intersecting = (org_it1->curve().id() == org_it2->curve().id()); + for (intr_it = intr_list.begin(); intr_it != intr_list.end(); ++intr_it) { - if (CGAL::compare (intr_it->s, s_min) != SMALLER && - CGAL::compare (intr_it->s, s_max) != LARGER && - CGAL::compare (intr_it->t, t_min) != SMALLER && - CGAL::compare (intr_it->t, t_max) != LARGER) + auto in_bounding_interval = + [](const auto& s_, const auto& s_min_, const auto& s_max_) -> bool { + return CGAL::compare(s_, s_min_) != SMALLER && + CGAL::compare(s_, s_max_) != LARGER; + }; + + bool st_in_st_range = in_bounding_interval(intr_it->s, s_min, s_max) && + in_bounding_interval(intr_it->t, t_min, t_max); + bool ts_in_st_range = false; + + if (st_in_st_range) { // Update the originators. - orig1.set_parameter (intr_it->s); - orig2.set_parameter (intr_it->t); + orig1.set_parameter(intr_it->s); + orig2.set_parameter(intr_it->t); + } + else if (self_intersecting) + { + // check whether s is in t range, and t is in s range + // s and t can be interchanged in case of self intersections + ts_in_st_range = in_bounding_interval(intr_it->t, s_min, s_max) && + in_bounding_interval(intr_it->s, t_min, t_max); + if (ts_in_st_range) + { + // Update the originators. + orig1.set_parameter(intr_it->t); + orig2.set_parameter(intr_it->s); + } + } + + if (st_in_st_range || ts_in_st_range) + { // Set the exact point coordinates. p_alg_x = new Algebraic (intr_it->x); p_alg_y = new Algebraic (intr_it->y); diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_x_monotone_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_x_monotone_2.h index 5397a42062f..41594edcc2b 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_x_monotone_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Bezier_x_monotone_2.h @@ -1139,10 +1139,11 @@ _Bezier_x_monotone_2::compare_to_left Originator_iterator org = p.get_originator(_curve, _xid); CGAL_assertion(org != p.originators_end()); - CGAL_assertion(_inc_to_right != cv._inc_to_right); if (org->point_bound().type == Bez_point_bound::VERTICAL_TANGENCY_PT) { + CGAL_assertion(_inc_to_right != cv._inc_to_right); + if (! p.is_exact()) { // Comparison based on the control polygon of the bounded vertical diff --git a/BGL/doc/BGL/Doxyfile.in b/BGL/doc/BGL/Doxyfile.in index 8984e5b8082..8d9f34127c0 100644 --- a/BGL/doc/BGL/Doxyfile.in +++ b/BGL/doc/BGL/Doxyfile.in @@ -27,18 +27,6 @@ EXAMPLE_PATH = ${CGAL_Surface_mesh_skeletonization_EXAMPLE_DIR} \ ALIASES += "bgllink{1}=\1" -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref BGL_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - EXTRACT_ALL=NO HIDE_UNDOC_MEMBERS = YES HIDE_UNDOC_CLASSES = YES diff --git a/BGL/doc/BGL/NamedParameters.txt b/BGL/doc/BGL/NamedParameters.txt index dfcd2c40b8a..9c51ba730b6 100644 --- a/BGL/doc/BGL/NamedParameters.txt +++ b/BGL/doc/BGL/NamedParameters.txt @@ -1,8 +1,8 @@ /*! -\defgroup bgl_namedparameters BGL Named Parameters +\defgroup bgl_namedparameters Named Parameters \ingroup PkgBGLRef -The algorithms of the \sc{Bgl} often have many parameters with default +The algorithms of the Boost Graph Library (\sc{Bgl}) often have many parameters with default values that are appropriate for most cases. In general, when no special treatment is applied, the values of such parameters are passed as a sequence. Deviating from the default for a certain parameter @@ -20,200 +20,26 @@ dijkstra_shortest_paths(g, s, predecessor_map(&p[0]).distance_map(&d[0])); In the \sc{Bgl} manual, this is called named parameters. -The named parameters in the example use the tags `predecessor_map` and `distance_map` -and they are concatenated with the dot operator.
+The named parameters in the snippet use the tags `predecessor_map` and `distance_map` +and they are concatenated using the dot operator.
-In the following, we assume that `PolygonMesh` is a model of the concept `FaceGraph`. -Note that for some functions, the type might be more specific: +A similar mechanism was introduced in \cgal, with the small difference that the named parameters +tag live in the `CGAL::parameters::` namespace and `CGAL::parameters::all_default()` can be used to indicate +that default values of optional named parameters must be used. +As in the \sc{BGL}, named parameters in \cgal are also concatenated using +the dot operator, and a typical usage is thus: -Here is the list of the named parameters available in this package: +\code {.cpp} +Graph g1, g2; +Vertex_point_map_2 vpm_2; // an hypothetical custom property map assigning a Point to the vertices of g2 -\cgalNPTableBegin -\cgalNPBegin{vertex_point_map} \anchor BGL_vertex_point_map -is the property map with the points associated to the vertices of the polygon mesh.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -a \cgal point type as value type. \n -Default: \code boost::get(CGAL::vertex_point, pmesh) \endcode -\cgalNPEnd - -\cgalNPBegin{vertex_index_map} \anchor BGL_vertex_index_map -is the property map associating a unique index to each vertex of a polygon mesh `g`, -between `0` and `num_vertices(g)-1`. -If this parameter is not passed, internal machinery will create and initialize a vertex index -property map, either using the internal property map if it exists or using an external map. The latter -might result in - slightly - worsened performance in case of non-constant complexity for index access.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and the value type -\code typename boost::property_traits::type>::value_type \endcode -Default: an initialized vertex index property map -\cgalNPEnd - -\cgalNPBegin{halfedge_index_map} \anchor BGL_halfedge_index_map -is the property map associating a unique index to each halfedge of a polygon mesh, -between `0` and `num_halfedges(g)-1`. -If this parameter is not passed, internal machinery will create and initialize a halfedge index -property map, either using the internal property map if it exists or using an external map. The latter -might result in - slightly - worsened performance in case of non-constant complexity for index access.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%halfedge_descriptor` as key type and the value type: -\code typename boost::property_traits::type>::value_type \endcode -Default: an initialized halfedge index property map -\cgalNPEnd - -\cgalNPBegin{edge_index_map} \anchor BGL_edge_index_map -is the property map associating a unique index to each edge of a polygon mesh, -between `0` and `num_edges(g)-1`. -If this parameter is not passed, internal machinery will create and initialize a edge index -property map, either using the internal property map if it exists or using an external map. The latter -might result in - slightly - worsened performance in case of non-constant complexity for index access.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%edge_descriptor` as key type and the value type: -\code typename boost::property_traits::type>::value_type \endcode -Default: an initialized edge index property map -\cgalNPEnd - -\cgalNPBegin{face_index_map} \anchor BGL_face_index_map -is the property map associating a unique index to each face of a polygon mesh, -between `0` and `num_faces(g)-1`. -If this parameter is not passed, internal machinery will create and initialize a face index -property map, either using the internal property map if it exists or using an external map. The latter -might result in - slightly - worsened performance in case of non-constant complexity for index access.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and the value type: -\code typename boost::property_traits::type>::value_type \endcode -Default: an initialized face index property map -\cgalNPEnd - -\cgalNPBegin{edge_is_constrained_map} \anchor BGL_edge_is_constrained_map -is the property map containing information about edges of the input polygon mesh -being marked or not.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%edge_descriptor` as key type and -`bool` as value type. It should be default constructible.\n -Default: a default property map where no edge is constrained -\cgalNPEnd - -\cgalNPBegin{use_binary_mode} \anchor BGL_use_binary_mode -is a Boolean indicating whether the binary mode or the ASCII mode should be used -when writing data into a stream.\n -Type: `bool`\n -Default: Function specific. -\cgalNPEnd - -\cgalNPBegin{METIS_options} \anchor BGL_METIS_options -is a parameter used in `partition_graph()` and `partition_dual_graph()` -to pass options to the METIS graph partitioner. The many options of METIS -are not described here. Instead, users should refer to METIS' -documentation.\n -Type: an array of size `METIS_NOPTIONS` with value type `idx_t` - (an integer type defined by METIS). \n -Default: an array of size `METIS_NOPTIONS` with value type `idx_t`, - initialized using the function `METIS_SetDefaultOptions()`. -\cgalNPEnd - -\cgalNPBegin{vertex_partition_id_map} \anchor BGL_vertex_partition_id_map -is the property map storing for each vertex of the mesh the id of the subpart -of the partition that has been assigned to this vertex.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`int` as value type. \n -Default: None: this property map is used to store the partition IDs of the vertices -as result of a partition algorithm; if it is not provided, this information is -simply inaccessible. -\cgalNPEnd - -\cgalNPBegin{face_partition_id_map} \anchor BGL_face_partition_id_map -is the property map storing for each face of the mesh the id of the subpart -of the partition that has been assigned to this face.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and -`int` as value type. \n -Default: None: this property map is used to store the partition IDs of the faces -as result of a partition algorithm; if it is not provided, this information is -simply inaccessible. -\cgalNPEnd - - -\cgalNPBegin{vertex_to_vertex_output_iterator} \anchor BGL_vertex_to_vertex_output_iterator -is a model of `OutputIterator` accepting `std::pair` -A typical use case is mapping the vertices from a source mesh to its copy's after a `copy_face_graph()` -operation.\n -Type:a class model of `OutputIterator` accepting -`std::pair<`boost::graph_traits::%vertex_descriptor, `boost::graph_traits::%vertex_descriptor>`.\n -Default: Emptyset_iterator -\cgalNPEnd - -\cgalNPBegin{halfedge_to_halfedge_output_iterator} \anchor BGL_halfedge_to_halfedge_output_iterator -is a model of `OutputIterator` accepting `std::pair` -A typical use case is mapping the halfedges from a source mesh to its copy's after a `copy_face_graph()` -operation.\n -Type:a class model of `OutputIterator` accepting -`std::pair<`boost::graph_traits::%halfedge_descriptor, `boost::graph_traits::%halfedge_descriptor>`.\n -Default: Emptyset_iterator -\cgalNPEnd - - -\cgalNPBegin{face_to_face_output_iterator} \anchor BGL_face_to_face_output_iterator -is a model of `OutputIterator` accepting `std::pair` -A typical use case is mapping the faces from a source mesh to its copy's after a `copy_face_graph()` -operation.\n -Type:a class model of `OutputIterator` accepting -`std::pair<`boost::graph_traits::%face_descriptor, `boost::graph_traits::%face_descriptor>`.\n -Default: Emptyset_iterator -\cgalNPEnd - -\cgalNPBegin{vertex_to_vertex_map} \anchor BGL_vertex_to_vertex_map -is a property map storing for each vertex of a source mesh the corresponding vertex of another mesh.\n -A typical use case is mapping the vertices from a source mesh to its copy's after a `copy_face_graph()` -operation.\n -Type:a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`boost::graph_traits::%vertex_descriptor` as value type.\n -Default: None. -\cgalNPEnd - -\cgalNPBegin{halfedge_to_halfedge_map} \anchor BGL_halfedge_to_halfedge_map -is a property map storing for each halfedge of a source mesh the corresponding halfedge of another mesh.\n -A typical use case is mapping the vertices from a source mesh to its copy's after a `copy_face_graph()` -operation.\n -Type:a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%halfedge_descriptor` as key type and -`boost::graph_traits::%halfedge_descriptor` as value type.\n -Default: None. -\cgalNPEnd - -\cgalNPBegin{face_to_face_map} \anchor BGL_face_to_face_map -is a property map storing for each face of a source mesh the corresponding face of another mesh.\n -A typical use case is mapping the vertices from a source mesh to its copy's after a `copy_face_graph()` -operation.\n -Type:a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and -`boost::graph_traits::%face_descriptor` as value type.\n -Default: None. -\cgalNPEnd - -\cgalNPBegin{implementation_tag} \anchor BGL_implementation_tag -tag used to select the implementation to be used among an algorithm-specific list.\n -Type:a tag class\n -Default: algorithm-specific. -\cgalNPEnd - -\cgalNPBegin{prevent_unselection} \anchor BGL_prevent_unselection -Boolean used to indicate if selection can be only extended or if it can also be shrinked.\n -Type: `bool`\n -Default: `false`. -\cgalNPEnd - -\cgalNPBegin{geom_traits} \anchor BGL_geom_traits -is the geometric traits instance used.\n -Type: a Geometric traits class.\n -Default: -\code typename CGAL::Kernel_traits< - typename boost::property_traits< - typename boost::property_map::type>::value_type>::Kernel \endcode -\cgalNPEnd - -\cgalNPTableEnd +// without any named parameter (default values are used) +CGAL::copy_face_graph(g1, g2); +// specifying named parameters for the second graph +CGAL::copy_face_graph(g1, g2, + CGAL::parameters::all_default(), + CGAL::parameters::vertex_point_map(vpm_2)); +\endcode */ +˛ diff --git a/BGL/include/CGAL/boost/graph/Dual.h b/BGL/include/CGAL/boost/graph/Dual.h index 0238fb143e8..405a2920a5c 100644 --- a/BGL/include/CGAL/boost/graph/Dual.h +++ b/BGL/include/CGAL/boost/graph/Dual.h @@ -56,18 +56,18 @@ public: /*! The underlying primal type. */ typedef Primal_ Primal; - /*! Construct a Dual from a given primal. */ + /*! constructs a Dual from a given primal. */ Dual(const Primal& primal) : primal_(primal) {} - /*! Returns the underlying primal. */ + /*! returns the underlying primal. */ const Primal& primal() const { return primal_; } }; /*! - Construct a `Dual` from a given `primal`. + constructs a `Dual` from a given `primal`. \relates CGAL::Dual */ template diff --git a/BGL/include/CGAL/boost/graph/Face_filtered_graph.h b/BGL/include/CGAL/boost/graph/Face_filtered_graph.h index ad49cf44394..80cc4c874a9 100644 --- a/BGL/include/CGAL/boost/graph/Face_filtered_graph.h +++ b/BGL/include/CGAL/boost/graph/Face_filtered_graph.h @@ -113,22 +113,44 @@ struct Face_filtered_graph * \tparam FacePatchIndexRange a model of `ConstRange` with `boost::property_traits::%value_type` as value type. * \tparam NamedParameters a sequence of named parameters * - * \param graph the underlying graph. - * \param face_patch_index_map the property_map that assigns a patch index to each face, with - `face_descriptor` as key type and `boost::graph_traits::%faces_size_type` as value type. - * \param selected_face_patch_indices a range of the face patch indices to select. - * \param np optional sequence of named parameters among the ones listed below + * \param graph the underlying graph + * \param face_patch_index_map the property_map that assigns a patch index to each face + * \param selected_face_patch_indices a range of the face patch indices to select + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{face_index_map} - * a property map containing for each face of `graph` a unique index between `0` and `num_faces(graph)-1` - * \cgalParamEnd - * \cgalParamBegin{vertex_index_map} - * a property map containing for each vertex of `graph` a unique index between `0` and `num_vertices(graph)-1` - * \cgalParamEnd - * \cgalParamBegin{halfedge_index_map} - * a property map containing for each halfedge of `graph` a unique index between `0` and `num_halfedges(graph)-1` - * \cgalParamEnd + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `graph` a unique index between `0` and `num_vertices(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd + * + * \cgalParamNBegin{halfedge_index_map} + * \cgalParamDescription{a property map associating to each halfedge of `graph` a unique index between `0` and `num_halfedges(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%halfedge_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `graph` a unique index between `0` and `num_faces(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -172,23 +194,45 @@ struct Face_filtered_graph `face_descriptor` as key type and `graph_traits::%faces_size_type` as value type. * \tparam NamedParameters a sequence of named parameters + * * \param graph the underlying graph. - * \param face_patch_index_map the property_map that assigns a patch index to each face, with - `face_descriptor` as key type and - `graph_traits::%faces_size_type` as value type. - * \param selected_face_patch_index the index of the face patch selected. - * \param np optional sequence of named parameters among the ones listed below + * \param face_patch_index_map the property_map that assigns a patch index to each face + * \param selected_face_patch_index the index of the face patch selected + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{face_index_map} - * a property map containing for each face of `graph` a unique index between `0` and `num_faces(graph)-1` - * \cgalParamEnd - * \cgalParamBegin{vertex_index_map} - * a property map containing for each vertex of `graph` a unique index between `0` and `num_vertices(graph)-1` - * \cgalParamEnd - * \cgalParamBegin{halfedge_index_map} - * a property map containing for each halfedge of `graph` a unique index between `0` and `num_halfedges(graph)-1` - * \cgalParamEnd + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `graph` a unique index between `0` and `num_vertices(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd + * + * \cgalParamNBegin{halfedge_index_map} + * \cgalParamDescription{a property map associating to each halfedge of `graph` a unique index between `0` and `num_halfedges(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%halfedge_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `graph` a unique index between `0` and `num_faces(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -221,20 +265,44 @@ struct Face_filtered_graph * * \tparam FaceRange a model of `ConstRange` with `face_descriptor` as value type. * \tparam NamedParameters a sequence of named parameters - * \param graph the graph containing the wanted patch. - * \param selected_faces the set of selected faces. - * \param np optional sequence of named parameters among the ones listed below + * + * \param graph the graph containing the wanted patch + * \param selected_faces the set of selected faces + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{face_index_map} - * a property map containing an index for each face initialized from 0 to `num_vertices(graph)` - * \cgalParamEnd - * \cgalParamBegin{vertex_index_map} - * a property map containing an index for each vertex initialized 0 to `num_vertices(graph)` - * \cgalParamEnd - * \cgalParamBegin{halfedge_index_map} - * a property map containing an index for each halfedge initialized 0 to `num_halfedges(graph)` - * \cgalParamEnd + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `graph` a unique index between `0` and `num_vertices(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd + * + * \cgalParamNBegin{halfedge_index_map} + * \cgalParamDescription{a property map associating to each halfedge of `graph` a unique index between `0` and `num_halfedges(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%halfedge_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `graph` a unique index between `0` and `num_faces(graph) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + * a face index property map, either using the internal property map if it exists + * or using an external map. The latter might result in - slightly - worsened performance + * in case of non-constant complexity for index access.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template diff --git a/BGL/include/CGAL/boost/graph/METIS/partition_dual_graph.h b/BGL/include/CGAL/boost/graph/METIS/partition_dual_graph.h index d11a426b5e1..ce82306e85e 100644 --- a/BGL/include/CGAL/boost/graph/METIS/partition_dual_graph.h +++ b/BGL/include/CGAL/boost/graph/METIS/partition_dual_graph.h @@ -129,35 +129,56 @@ void partition_dual_graph(const TriangleMesh& tm, int nparts, /// \ingroup PkgBGLPartition /// -/// Computes a partition of the input triangular mesh into `nparts` parts, +/// computes a partition of the input triangular mesh into `nparts` parts, /// based on the mesh's dual graph. The resulting partition is stored in the vertex and/or face /// property maps that are passed as parameters using \ref bgl_namedparameters "Named Parameters". /// /// \param tm a triangle mesh /// \param nparts the number of parts in the final partition -/// \param np optional \ref bgl_namedparameters "Named Parameters" described below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// -/// \tparam TriangleMesh is a model of the `FaceListGraph` concept. +/// \tparam TriangleMesh is a model of the `FaceListGraph` concept /// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_index_map} -/// is a property map containing for each vertex of `tm` a unique index between `0` and `num_vertices(tm)-1`. -/// \cgalParamEnd -/// \cgalParamBegin{METIS_options} -/// is a parameter used in to pass options to the METIS mesh -/// partitioner. The many options of METIS are not described here. Instead, users -/// should refer to the documentation -/// of METIS directly. -/// \cgalParamEnd -/// \cgalParamBegin{vertex_partition_id_map} -/// is a property map that contains (after the function has been run) -/// the ID of the subpart for each vertex of `tm`. -/// \cgalParamEnd -/// \cgalParamBegin{face_partition_id_map} -/// is a property map that contains (after the function has been run) -/// the ID of the subpart for each face of `tm`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_index_map} +/// \cgalParamDescription{a property map associating to each vertex of `tm` a unique index between `0` and `num_vertices(tm) - 1`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `std::size_t` as value type} +/// \cgalParamDefault{an automatically indexed internal map} +/// \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize +/// a face index property map, either using the internal property map if it exists +/// or using an external map. The latter might result in - slightly - worsened performance +/// in case of non-constant complexity for index access.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{METIS_options} +/// \cgalParamDescription{a parameter used in to pass options to the METIS mesh partitioner} +/// \cgalParamType{an array of size `METIS_NOPTIONS` with value type `idx_t` (an integer type defined by METIS)} +/// \cgalParamDefault{an array of size `METIS_NOPTIONS` with value type `idx_t`, +/// initialized using the function `METIS_SetDefaultOptions()`} +/// \cgalParamExtra{The many options of METIS are not described here. Instead, users should refer +/// to the documentation +/// of METIS directly.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{vertex_partition_id_map} +/// \cgalParamDescription{a property map that contains (after the function has been run) +/// the ID of the subpart for each vertex of `tm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with +/// `boost::graph_traits::%vertex_descriptor` as key type and +/// `int` as value type} +/// \cgalParamDefault{unused} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{face_partition_id_map} +/// \cgalParamDescription{a property map that contains (after the function has been run) +/// the ID of the subpart for each face of `tm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with +/// `boost::graph_traits::%face_descriptor` as key type and +/// `int` as value type} +/// \cgalParamDefault{unused} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \pre `tm` is a pure triangular surface mesh: there are no edges diff --git a/BGL/include/CGAL/boost/graph/METIS/partition_graph.h b/BGL/include/CGAL/boost/graph/METIS/partition_graph.h index 4ef813efcc6..c95a8fb7efb 100644 --- a/BGL/include/CGAL/boost/graph/METIS/partition_graph.h +++ b/BGL/include/CGAL/boost/graph/METIS/partition_graph.h @@ -161,35 +161,56 @@ void partition_graph(const TriangleMesh& tm, int nparts, /// \ingroup PkgBGLPartition /// -/// Computes a partition of the input triangular mesh into `nparts` parts, based on the +/// computes a partition of the input triangular mesh into `nparts` parts, based on the /// mesh's nodal graph. The resulting partition is stored in the vertex and/or face /// property maps that are passed as parameters using \ref bgl_namedparameters "Named Parameters". /// /// \param tm a triangle mesh /// \param nparts the number of parts in the final partition -/// \param np optional \ref bgl_namedparameters "Named Parameters" described below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \tparam TriangleMesh is a model of the `FaceListGraph` concept. /// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_index_map} -/// is a property map containing for each vertex of `tm` a unique index between `0` and `num_vertices(tm)-1`. -/// \cgalParamEnd -/// \cgalParamBegin{METIS_options} -/// is a parameter used in to pass options to the METIS mesh -/// partitioner. The many options of METIS are not described here. Instead, users -/// should refer to the documentation -/// of METIS directly. -/// \cgalParamEnd -/// \cgalParamBegin{vertex_partition_id_map} -/// is a property map that contains (after the function has been run) -/// the ID of the subpart for each vertex of `tm`. -/// \cgalParamEnd -/// \cgalParamBegin{face_partition_id_map} -/// is a property map that contains (after the function has been run) -/// the ID of the subpart for each face of `tm`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_index_map} +/// \cgalParamDescription{a property map associating to each vertex of `tm` a unique index between `0` and `num_vertices(tm) - 1`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `std::size_t` as value type} +/// \cgalParamDefault{an automatically indexed internal map} +/// \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize +/// a face index property map, either using the internal property map if it exists +/// or using an external map. The latter might result in - slightly - worsened performance +/// in case of non-constant complexity for index access.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{METIS_options} +/// \cgalParamDescription{a parameter used in to pass options to the METIS mesh partitioner} +/// \cgalParamType{an array of size `METIS_NOPTIONS` with value type `idx_t` (an integer type defined by METIS)} +/// \cgalParamDefault{an array of size `METIS_NOPTIONS` with value type `idx_t`, +/// initialized using the function `METIS_SetDefaultOptions()`} +/// \cgalParamExtra{The many options of METIS are not described here. Instead, users should refer +/// to the documentation +/// of METIS directly.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{vertex_partition_id_map} +/// \cgalParamDescription{a property map that contains (after the function has been run) +/// the ID of the subpart for each vertex of `tm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with +/// `boost::graph_traits::%vertex_descriptor` as key type and +/// `int` as value type} +/// \cgalParamDefault{unused} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{face_partition_id_map} +/// \cgalParamDescription{a property map that contains (after the function has been run) +/// the ID of the subpart for each face of `tm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with +/// `boost::graph_traits::%face_descriptor` as key type and +/// `int` as value type} +/// \cgalParamDefault{unused} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \pre `tm` is a pure triangular surface mesh: there are no edges diff --git a/BGL/include/CGAL/boost/graph/Seam_mesh.h b/BGL/include/CGAL/boost/graph/Seam_mesh.h index 5eade0abdee..4919c73b42c 100644 --- a/BGL/include/CGAL/boost/graph/Seam_mesh.h +++ b/BGL/include/CGAL/boost/graph/Seam_mesh.h @@ -168,7 +168,7 @@ private: mutable vertices_size_type number_of_vertices; public: - /// Returns the underlying mesh. + /// returns the underlying mesh. const TM& mesh() const { return tm; @@ -543,31 +543,31 @@ public: /// \name Seam query functions /// @{ - /// Returns `true` if the vertex is on the seam. + /// returns `true` if the vertex is on the seam. bool has_on_seam(TM_vertex_descriptor vd) const { return get(svm, vd); } - /// Returns `true` if the edge is on the seam. + /// returns `true` if the edge is on the seam. bool has_on_seam(TM_edge_descriptor ed) const { return get(sem, ed); } - /// Returns `true` if the halfedge is on the seam. + /// returns `true` if the halfedge is on the seam. bool has_on_seam(TM_halfedge_descriptor tmhd) const { return get(sem, CGAL::edge(tmhd, tm)); } - /// Returns `true` if the halfedge is on the seam. + /// returns `true` if the halfedge is on the seam. bool has_on_seam(const halfedge_descriptor& hd) const { return has_on_seam(CGAL::edge(hd, tm)); } - /// Return the number of seam edges in the seam mesh. + /// returns the number of seam edges in the seam mesh. edges_size_type number_of_seam_edges() const { return number_of_seams; @@ -601,7 +601,7 @@ public: } /// @endcond - /// Returns the iterator range of the vertices of the mesh. + /// returns the iterator range of the vertices of the mesh. Iterator_range vertices() const { Iterator_range ir = CGAL::halfedges(tm); @@ -627,7 +627,7 @@ public: } /// @endcond - /// Returns the iterator range of the halfedges of the mesh. + /// returns the iterator range of the halfedges of the mesh. Iterator_range halfedges() const { Iterator_range ir = CGAL::halfedges(tm); @@ -652,7 +652,7 @@ public: } /// @endcond - /// Returns the iterator range of the edges of the mesh. + /// returns the iterator range of the edges of the mesh. Iterator_range edges() const { Iterator_range ir = CGAL::halfedges(tm); @@ -675,7 +675,7 @@ public: } /// @endcond - /// Returns the iterator range of the faces of the mesh. + /// returns the iterator range of the faces of the mesh. Iterator_range faces() const { return CGAL::faces(tm); @@ -686,7 +686,7 @@ public: /// \name Memory Management /// @{ - /// Returns the number of vertices in the seam mesh. + /// returns the number of vertices in the seam mesh. vertices_size_type num_vertices() const { if(number_of_vertices == static_cast(-1)) { @@ -696,19 +696,19 @@ public: return number_of_vertices; } - /// Returns the number of halfedges in the seam mesh. + /// returns the number of halfedges in the seam mesh. halfedges_size_type num_halfedges() const { return CGAL::num_halfedges(tm) + 2 * number_of_seams; } - /// Returns the number of edges in the seam mesh. + /// returns the number of edges in the seam mesh. halfedges_size_type num_edges() const { return CGAL::num_edges(tm) + number_of_seams; } - /// Returns the number of faces in the seam mesh. + /// returns the number of faces in the seam mesh. faces_size_type num_faces() const { return CGAL::num_faces(tm); @@ -719,7 +719,7 @@ public: /// \name Degree Functions /// @{ - /// Returns the number of incident halfedges of vertex `v`. + /// returns the number of incident halfedges of vertex `v`. degree_size_type degree(vertex_descriptor v) const { degree_size_type count(0); @@ -743,13 +743,13 @@ public: #ifndef DOXYGEN_RUNNING ///@{ - /// Returns the edge that contains halfedge `h` as one of its two halfedges. + /// returns the edge that contains halfedge `h` as one of its two halfedges. edge_descriptor edge(halfedge_descriptor h) const { return edge_descriptor(h,this); } - /// Returns the halfedge corresponding to the edge `e`. + /// returns the halfedge corresponding to the edge `e`. halfedge_descriptor halfedge(edge_descriptor e) const { return e.hd; @@ -758,7 +758,7 @@ public: ///@{ - /// Returns an incoming halfedge of vertex `v`. + /// returns an incoming halfedge of vertex `v`. /// If `v` is a seam vertex, this will be the halfedge whose target is `v` and /// whose opposite is a virtual border halfedge. /// Otherwise, the rules of the underlying mesh are followed. @@ -769,7 +769,7 @@ public: return halfedge_descriptor(h, false /*not on seam*/); } - /// Finds a halfedge between two vertices. Returns a default constructed + /// finds a halfedge between two vertices. Returns a default constructed /// `halfedge_descriptor`, if `source` and `target` are not connected. std::pair halfedge(vertex_descriptor u, vertex_descriptor v) const @@ -800,7 +800,7 @@ public: return std::make_pair(halfedge_descriptor(), false/*invalid*/); } - /// Finds an edge between two vertices. Returns a default constructed + /// finds an edge between two vertices. Returns a default constructed /// `edge`, if `source` and `target` are not connected. std::pair edge(vertex_descriptor u, vertex_descriptor v) const { @@ -815,7 +815,7 @@ public: return halfedge_descriptor(hd, false/*not on seam*/); } - /// Returns the face incident to halfedge `h`. + /// returns the face incident to halfedge `h`. face_descriptor face(halfedge_descriptor h) const { if(h.seam) @@ -825,7 +825,7 @@ public: } public: - /// Returns the next halfedge within the incident face. + /// returns the next halfedge within the incident face. halfedge_descriptor next(const halfedge_descriptor& hd) const { if((!hd.seam) && (!is_border(hd.tmhd, tm))) @@ -840,7 +840,7 @@ public: !is_border(CGAL::opposite(*hatc, tm), tm)); } - /// Returns the previous halfedge within the incident face. + /// returns the previous halfedge within the incident face. halfedge_descriptor prev(const halfedge_descriptor& hd) const { if((!hd.seam) && (!is_border(hd.tmhd, tm))) @@ -855,7 +855,7 @@ public: !is_border(CGAL::opposite(*hatc, tm), tm)); } - /// Returns the opposite halfedge of `hd`. + /// returns the opposite halfedge of `hd`. halfedge_descriptor opposite(const halfedge_descriptor& hd) const { if(!hd.seam) @@ -864,7 +864,7 @@ public: return halfedge_descriptor(CGAL::opposite(hd.tmhd, tm), false /*not on seam*/); } - /// Returns the vertex the halfedge `h` emanates from. + /// returns the vertex the halfedge `h` emanates from. vertex_descriptor target(halfedge_descriptor hd) const { TM_halfedge_descriptor tmhd(hd); @@ -884,7 +884,7 @@ public: return vertex_descriptor(halfedge_descriptor(tmhd)); } - /// Returns the vertex the halfedge `h` emanates from. + /// returns the vertex the halfedge `h` emanates from. vertex_descriptor source(const halfedge_descriptor& hd) const { return target(opposite(hd)); @@ -922,7 +922,7 @@ public: /// \name Seam selection /// @{ - /// Mark the edge of the underlying mesh that has extremities the vertices + /// marks the edge of the underlying mesh that has extremities the vertices /// `tm_vd_s` and `tm_vd_s` as a seam edge. /// /// \return whether the edge was successfully marked or not. @@ -963,7 +963,7 @@ public: return true; } - /// Create new seams. + /// creates new seams. /// /// The edges to be marked as seams are described by the range [first, last) of /// vertices of the underlying mesh. Each edge to be marked is described @@ -998,7 +998,7 @@ public: return tmhd; } - /// Create new seams. + /// creates new seams. /// /// A seam edge is described by a pair of integers. The integer index /// of a vertex of the underlying mesh is given by its position @@ -1024,7 +1024,7 @@ public: return add_seams(seam_vertices.begin(), seam_vertices.end()); } - /// Create new seams. + /// creates new seams. /// /// A seam edge is described by a pair of integers. The integer /// index of a vertex of the underlying mesh is defined as its position when @@ -1041,7 +1041,7 @@ public: return add_seams(in, tm_vds); } - /// Create new seams. + /// creates new seams. /// /// A seam edge is described by a pair of integers. The integer index /// of a vertex of the underlying mesh is given by its position @@ -1085,7 +1085,7 @@ public: return add_seams(in, tm_vds); } - /// Create new seams. + /// creates new seams. /// /// A seam edge is described by a pair of integers. The integer /// index of a vertex of the underlying mesh is defined as its position when @@ -1104,7 +1104,7 @@ public: /// @} - /// Constructs a seam mesh for a triangle mesh and an edge and vertex property map + /// constructs a seam mesh for a triangle mesh and an edge and vertex property map /// /// \param tm the underlying mesh /// \param sem the edge property map with value `true` for seam edges diff --git a/BGL/include/CGAL/boost/graph/alpha_expansion_graphcut.h b/BGL/include/CGAL/boost/graph/alpha_expansion_graphcut.h index 088c3472201..7fcdf24039a 100644 --- a/BGL/include/CGAL/boost/graph/alpha_expansion_graphcut.h +++ b/BGL/include/CGAL/boost/graph/alpha_expansion_graphcut.h @@ -505,27 +505,33 @@ class Alpha_expansion_MaxFlow_impl; vd)[label_idx]` returns the cost of vertex `vd` to belong to the label `label_idx`. - \param np optional sequence of named parameters among the ones listed below + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_index_map} - a property map providing the index of each vertex - \cgalParamEnd - \cgalParamBegin{implementation_tag} - tag used to select - which implementation of the alpha expansion should be - used. Available implementation tags are: - - `CGAL::Alpha_expansion_boost_adjacency_list` (default) - - `CGAL::Alpha_expansion_boost_compressed_sparse_row_tag` - - `CGAL::Alpha_expansion_MaxFlow_tag` - \cgalParamEnd + \cgalParamNBegin{vertex_index_map} + \cgalParamDescription{a property map associating to each vertex of `input_graph` a unique index between `0` and `num_vertices(input_graph) - 1`} + \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `std::size_t` as value type} + \cgalParamDefault{an automatically indexed internal map} + \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + a face index property map, either using the internal property map if it exists + or using an external map. The latter might result in - slightly - worsened performance + in case of non-constant complexity for index access.} + \cgalParamNEnd + + \cgalParamNBegin{implementation_tag} + \cgalParamDescription{a tag used to select which implementation of the alpha expansion should be used. + Available implementation tags are: + - `CGAL::Alpha_expansion_boost_adjacency_list` + - `CGAL::Alpha_expansion_boost_compressed_sparse_row_tag` + - `CGAL::Alpha_expansion_MaxFlow_tag`} + \cgalParamDefault{`CGAL::Alpha_expansion_boost_adjacency_list`} + \cgalParamNEnd \cgalNamedParamsEnd \note The `MaxFlow` implementation is provided by the \ref PkgSurfaceMeshSegmentationRef - under GPL license. The header - `` + under GPL license. The header `` must be included if users want to use this implementation. - */ template ::%face_descriptor` must be models of `Hashable`. \tparam TargetMesh a model of `FaceListGraph` - \tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - \tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" + \tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + \tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" The types `sm_vertex_descriptor` and `sm_face_descriptor` must be models of the concept `Hashable`. \param sm the source mesh \param tm the target mesh - \param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + \param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} - the property map with the points associated to the vertices of `sm` . - If this parameter is omitted, an internal property map for - `CGAL::vertex_point_t` should be available in `SourceMesh` - \cgalParamEnd - \cgalParamBegin{vertex_to_vertex_output_iterator} an `OutputIterator` containing the - pairs source-vertex, target-vertex. If this parameter is given, then - `vertex_to_vertex_map` cannot be used. - \cgalParamEnd - \cgalParamBegin{halfedge_to_halfedge_output_iterator} an `OutputIterator` containing the - pairs source-halfedge, target-halfedge. If this parameter is given, then - `halfedge_to_halfedge_map` cannot be used. - \cgalParamEnd - \cgalParamBegin{face_to_face_output_iterator} an `OutputIterator` containing the - pairs source-face, target-face. If this parameter is given, then - `face_to_face_map` cannot be used. - \cgalParamEnd - \cgalParamBegin{vertex_to_vertex_map} a `ReadWritePropertyMap` containing the - pairs source-vertex, target-vertex. - \cgalParamEnd - \cgalParamBegin{halfedge_to_halfedge_map} a `ReadWritePropertyMap` containing the - pairs source-halfedge, target-halfedge. - \cgalParamEnd - \cgalParamBegin{face_to_face_map} a `ReadWritePropertyMap` containing the - pairs source-face, target-face. - \cgalParamEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `sm`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, sm)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `SourceMesh`.} + \cgalParamNEnd + + \cgalParamNBegin{vertex_to_vertex_output_iterator} + \cgalParamDescription{an `OutputIterator` containing the pairs source-vertex, target-vertex.} + \cgalParamType{a class model of `OutputIterator` accepting + `std::pair<`boost::graph_traits::%vertex_descriptor, `boost::graph_traits::%vertex_descriptor>`} + \cgalParamDefault{`Emptyset_iterator`} + \cgalParamExtra{If this parameter is given, then `vertex_to_vertex_map` cannot be used.} + \cgalParamNEnd + + \cgalParamNBegin{halfedge_to_halfedge_output_iterator} + \cgalParamDescription{an `OutputIterator` containing the pairs source-halfedge, target-halfedge.} + \cgalParamType{a class model of `OutputIterator` accepting + `std::pair<`boost::graph_traits::%halfedge_descriptor, `boost::graph_traits::%halfedge_descriptor>`} + \cgalParamDefault{`Emptyset_iterator`} + \cgalParamExtra{If this parameter is given, then `halfedge_to_halfedge_map` cannot be used.} + \cgalParamNEnd + + \cgalParamNBegin{face_to_face_output_iterator} + \cgalParamDescription{an `OutputIterator` containing the pairs source-face, target-face.} + \cgalParamType{a class model of `OutputIterator` accepting + `std::pair<`boost::graph_traits::%face_descriptor, `boost::graph_traits::%face_descriptor>`} + \cgalParamDefault{`Emptyset_iterator`} + \cgalParamExtra{If this parameter is given, then `face_to_face_map` cannot be used.} + \cgalParamNEnd + + \cgalParamNBegin{vertex_to_vertex_map} + \cgalParamDescription{a property map storing for each vertex of a source mesh the corresponding vertex of another mesh} + \cgalParamType{a class model of `ReadWritePropertyMap` with + `boost::graph_traits::%vertex_descriptor` as key type and + `boost::graph_traits::%vertex_descriptor` as value type.} + \cgalParamDefault{unused} + \cgalParamExtra{A typical use case is mapping the vertices from a source mesh + to its copy's after a `copy_face_graph()` operation.} + \cgalParamNEnd + + \cgalParamNBegin{halfedge_to_halfedge_map} + \cgalParamDescription{a property map storing for each halfedge of a source mesh the corresponding halfedge of another mesh} + \cgalParamType{a class model of `ReadWritePropertyMap` with + `boost::graph_traits::%halfedge_descriptor` as key type and + `boost::graph_traits::%halfedge_descriptor` as value type} + \cgalParamDefault{unused} + \cgalParamExtra{A typical use case is mapping the halfedges from a source mesh to its copy's + after a `copy_face_graph()`operation.} + \cgalParamNEnd + + \cgalParamNBegin{face_to_face_map} + \cgalParamDescription{a property map storing for each face of a source mesh the corresponding face of another mesh} + \cgalParamType{a class model of `ReadWritePropertyMap` with + `boost::graph_traits::%face_descriptor` as key type and + `boost::graph_traits::%face_descriptor` as value type} + \cgalParamDefault{unused} + \cgalParamExtra{A typical use case is mapping the faces from a source mesh to its copy's + after a `copy_face_graph()` operation} + \cgalParamNEnd \cgalNamedParamsEnd - \param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} - the property map with the points associated to the vertices of `tm`. - If this parameter is omitted, an internal property map for - `CGAL::vertex_point_t` should be available in `TargetMesh` - \cgalParamEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `tm`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `TargetMesh`.} + \cgalParamNEnd \cgalNamedParamsEnd The points from `sm` to `tm` are converted using `CGAL::Cartesian_converter`. `SourceKernel` and `TargetKernel` are deduced using `CGAL::Kernel_traits` - from the value types of the vertex_point_maps. + from the value types of the vertex point maps. Other properties are not copied. */ diff --git a/BGL/include/CGAL/boost/graph/io.h b/BGL/include/CGAL/boost/graph/io.h index 5d5d519de80..ed74ba4aab9 100644 --- a/BGL/include/CGAL/boost/graph/io.h +++ b/BGL/include/CGAL/boost/graph/io.h @@ -27,16 +27,27 @@ #include namespace CGAL { - /*! - \ingroup PkgBGLIOFct - writes the graph `g` in the wrl format (VRML 2.0). - \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `g`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` should be available in `FaceGraph`\cgalParamEnd - * \cgalNamedParamsEnd - */ +/*! + \ingroup PkgBGLIOFct + + writes the graph `g` in the wrl format (VRML 2.0). + + \param os the output stream + \param g the graph to be written + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + + \cgalNamedParamsBegin + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `g`} + \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, g)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `FaceGraph`.} + \cgalParamNEnd + \cgalNamedParamsEnd +*/ template bool write_wrl(std::ostream& os, const FaceGraph& g, @@ -114,18 +125,27 @@ bool write_wrl(std::ostream& os, } /*! - \ingroup PkgBGLIOFct - writes the graph `g` in the OFF format. + \ingroup PkgBGLIOFct - \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `g`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` should be available in `FaceGraph`\cgalParamEnd - * \cgalNamedParamsEnd + writes the graph `g` in the OFF format. - \sa Overloads of this function for specific models of the concept `FaceGraph`. + \param os the output stream + \param g the graph to be written + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - */ + \cgalNamedParamsBegin + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `g`} + \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, g)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `FaceGraph`.} + \cgalParamNEnd + \cgalNamedParamsEnd + + \sa Overloads of this function for specific models of the concept `FaceGraph`. +*/ template bool write_off(std::ostream& os, const FaceGraph& g, @@ -236,19 +256,30 @@ inline std::string next_non_comment(std::istream& is) /*! - \ingroup PkgBGLIOFct - reads the graph `g` from data in the OFF format. Ignores comment lines which start with a hash, and lines with whitespace. + \ingroup PkgBGLIOFct - \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `g`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` should be available in `FaceGraph`\cgalParamEnd - * \cgalNamedParamsEnd - \sa Overloads of this function for specific models of the concept `FaceGraph`. - \pre The data must represent a 2-manifold - \attention The graph `g` is not cleared, and the data from the stream are added. + reads the graph `g` from data in the OFF format. Ignores comment lines which start with a hash, and lines with whitespace. - */ + \param is the input stream + \param g the graph to be read + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + + \cgalNamedParamsBegin + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `g`} + \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, g)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `FaceGraph`.} + \cgalParamNEnd + \cgalNamedParamsEnd + + \sa Overloads of this function for specific models of the concept `FaceGraph`. + \pre The data must represent a 2-manifold + + \attention The graph `g` is not cleared, and the data from the stream are added. +*/ template bool read_off(std::istream& is, FaceGraph& g, @@ -614,24 +645,34 @@ write_polys_points(std::ostream& os, * \brief writes a triangulated surface mesh in the `PolyData` XML format. * * \tparam TriangleMesh a model of `FaceListGraph` with only triangle faces. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param os the stream used for writing. * \param mesh the triangle mesh to be written. - * \param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the - * ones listed below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{use_binary_mode} a Boolean indicating if the - * data should be written in binary (`true`, the default) or in ASCII (`false`). - * \cgalParamEnd - * \cgalParamBegin{vertex_point_map} the property map with the points associated to - * the vertices of `mesh`. If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`. - * \cgalParamEnd - * \cgalParamBegin{vertex_index_map} the property map with the indices associated to - * the vertices of `mesh`. - * \cgalParamEnd + * \cgalParamNBegin{use_binary_mode} + * \cgalParamDescription{Boolean indicating if the data should be written in binary (`true`) or in ASCII (`false`)} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `mesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, mesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `mesh` a unique index between `0` and `num_vertices(mesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `TriangleMesh`.} + \cgalParamNEnd + + \cgalParamNBegin{face_index_map} + \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + as key type and `std::size_t` as value type} + \cgalParamDefault{an automatically indexed internal map} + \cgalParamNEnd + + \cgalParamNBegin{prevent_unselection} + \cgalParamDescription{Boolean used to indicate if selection can be only extended or if it can also be shrinked.} + \cgalParamType{`bool`} + \cgalParamDefault{`false`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a class model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd \cgalNamedParamsEnd */ template @@ -731,7 +749,7 @@ select_incident_faces( /*! \ingroup PkgBGLSelectionFct -Augments a selection with edges of `fg` that are adjacent +augments a selection with edges of `fg` that are adjacent to an edge in `selection`. This process is applied `k` times considering all edges added in the previous steps. Two edges are said to be adjacent if they are incident to the same face or vertex. @@ -798,7 +816,7 @@ expand_edge_selection( /*! \ingroup PkgBGLSelectionFct -Diminishes a selection of edges from edges adjacent to a non-selected edge. +diminishes a selection of edges from edges adjacent to a non-selected edge. This process is applied `k` times considering all edges removed in the previous steps. Two edges are said to be adjacent if they are incident to the same face or vertex. Each edge removed from the selection is added exactly once in `out`. @@ -884,7 +902,7 @@ reduce_edge_selection( /*! \ingroup PkgBGLSelectionFct -Augments a selection with vertices of `fg` that are adjacent +augments a selection with vertices of `fg` that are adjacent to a vertex in `selection`. This process is applied `k` times considering all vertices added in the previous steps. Two vertices are said to be adjacent if they are part of the same face. @@ -939,7 +957,7 @@ expand_vertex_selection( /*! \ingroup PkgBGLSelectionFct -Diminishes a selection of vertices from vertices adjacent to a non-selected vertex. +diminishes a selection of vertices from vertices adjacent to a non-selected vertex. This process is applied `k` times considering all vertices removed in the previous steps. Two vertices are said to be adjacent if they are part of the same face. Each vertex removed from the selection is added exactly once in `out`. diff --git a/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h b/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h index b6f5ea58aa8..5d482204922 100644 --- a/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h +++ b/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h @@ -131,7 +131,7 @@ public: } }; // end class Less_on_G_copy_vertex_descriptors -// Splits a graph at vertices with degree higher than two and at vertices where `is_terminal` returns `true` +// splits a graph at vertices with degree higher than two and at vertices where `is_terminal` returns `true` // The vertices are duplicated, and new incident edges created. // `OrigGraph` must be undirected template #include -#include -#if defined(CGAL_HAS_THREADS) && defined(BOOST_GCC) && BOOST_GCC < 90100 -// Force the use of Boost.Thread with g++ and C++11, because of the PR66944 -// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66944 -// See also CGAL PR #1888 -// https://github.com/CGAL/cgal/pull/1888#issuecomment-278284232 -# include -#endif #include // for placement new #include @@ -85,10 +77,7 @@ public: // Access the corresponding static global allocator. static MemoryPool& global_allocator() { -#if defined(CGAL_HAS_THREADS) && defined(BOOST_GCC) && BOOST_GCC < 90100 - if(memPool_ptr.get() == nullptr) {memPool_ptr.reset(new Self());} - Self& memPool = * memPool_ptr.get(); -#elif defined(CGAL_HAS_THREADS) // use the C++11 implementation +#if defined(CGAL_HAS_THREADS) // use the C++11 implementation static thread_local Self memPool; #else // not CGAL_HAS_THREADS static Self memPool; @@ -99,18 +88,8 @@ public: private: Thunk* head; // next available block in the pool std::vector blocks; - -#if defined(CGAL_HAS_THREADS) && defined(BOOST_GCC) && BOOST_GCC < 90100 - static boost::thread_specific_ptr memPool_ptr; -#endif // not CGAL_HAS_THREADS }; -#if defined(CGAL_HAS_THREADS) && defined(BOOST_GCC) && BOOST_GCC < 90100 -template -boost::thread_specific_ptr > -MemoryPool::memPool_ptr; -#endif - template< class T, int nObjects > void* MemoryPool< T, nObjects >::allocate(std::size_t) { if ( head == 0 ) { // if no more memory in the pool diff --git a/CGAL_Core/include/CGAL/CORE/Real.h b/CGAL_Core/include/CGAL/CORE/Real.h index 35c2f5bc9f6..b79503eb4c2 100644 --- a/CGAL_Core/include/CGAL/CORE/Real.h +++ b/CGAL_Core/include/CGAL/CORE/Real.h @@ -27,7 +27,9 @@ ***************************************************************************/ #ifndef _CORE_REAL_H_ #define _CORE_REAL_H_ + #include "RealRep.h" +#include namespace CORE { // class Real @@ -483,6 +485,12 @@ inline Real RealLong::operator-() const { return ker < -LONG_MAX ? -BigInt(ker) : -ker; } +inline void init_CORE() { + using RealRep = CORE::RealDouble; + CGAL_STATIC_THREAD_LOCAL_VARIABLE(MemoryPool*, pool_real_rep, &MemoryPool::global_allocator()); + CGAL_USE(pool_real_rep); +} + } //namespace CORE #ifdef CGAL_HEADER_ONLY diff --git a/CGAL_Core/include/CGAL/CORE/Real_impl.h b/CGAL_Core/include/CGAL/CORE/Real_impl.h index 00f6e0930c8..ee55ed80891 100644 --- a/CGAL_Core/include/CGAL/CORE/Real_impl.h +++ b/CGAL_Core/include/CGAL/CORE/Real_impl.h @@ -44,6 +44,7 @@ namespace CORE { CGAL_INLINE_FUNCTION const Real& Real::getZero() { + init_CORE(); CGAL_STATIC_THREAD_LOCAL_VARIABLE(Real, Zero, 0); return Zero; } diff --git a/CGAL_Core/include/CGAL/CORE/poly/Poly.h b/CGAL_Core/include/CGAL/CORE/poly/Poly.h index 120ea48f170..bd56376a5b2 100644 --- a/CGAL_Core/include/CGAL/CORE/poly/Poly.h +++ b/CGAL_Core/include/CGAL/CORE/poly/Poly.h @@ -252,6 +252,7 @@ public: template < class NT > CORE_INLINE const Polynomial & Polynomial::polyZero() { + init_CORE(); CGAL_STATIC_THREAD_LOCAL_VARIABLE_0(Polynomial, zeroP); return zeroP; } @@ -259,6 +260,7 @@ const Polynomial & Polynomial::polyZero() { template < class NT > CORE_INLINE const Polynomial & Polynomial::polyUnity() { + init_CORE(); static const NT c[] = {1}; CGAL_STATIC_THREAD_LOCAL_VARIABLE_2(Polynomial, unityP, 0, c); return unityP; diff --git a/CGAL_Core/include/CGAL/CORE/poly/Poly.tcc b/CGAL_Core/include/CGAL/CORE/poly/Poly.tcc index 7c8ab59d2e3..325f64d528c 100644 --- a/CGAL_Core/include/CGAL/CORE/poly/Poly.tcc +++ b/CGAL_Core/include/CGAL/CORE/poly/Poly.tcc @@ -670,19 +670,20 @@ Polynomial Polynomial::pseudoRemainder ( contract(); // Let A = (*this). Contract A. Polynomial tmpB(B); tmpB.contract(); // local copy of B + int bTrueDegree = tmpB.degree; C = NT(1); // Initialized to C=1. - if (B.degree == -1) { + if (bTrueDegree == -1) { core_error("ERROR in Polynomial::pseudoRemainder :\n -- divide by zero polynomial", __FILE__, __LINE__, false); return Polynomial(0); // Unit Polynomial (arbitrary!) } - if (B.degree > degree) { + if (bTrueDegree > degree) { return Polynomial(); // Zero Polynomial // CHECK: 1*THIS = 0*B + THAT, deg(THAT) < deg(B) } Polynomial Quo; // accumulate the return polynomial, Quo Polynomial tmpQuo; - while (degree >= B.degree) { // INVARIANT: C*A = B*Quo + (*this) + while (degree >= bTrueDegree) { // INVARIANT: C*A = B*Quo + (*this) tmpQuo = reduceStep(tmpB); // Let (*this) be (*oldthis), which // is transformed into (*newthis). Then, // c*(*oldthis) = B*m + (*newthis) diff --git a/Convex_hull_3/doc/Convex_hull_3/CGAL/convex_hull_3.h b/Convex_hull_3/doc/Convex_hull_3/CGAL/convex_hull_3.h index e22a0443690..dfcbd7779c4 100644 --- a/Convex_hull_3/doc/Convex_hull_3/CGAL/convex_hull_3.h +++ b/Convex_hull_3/doc/Convex_hull_3/CGAL/convex_hull_3.h @@ -44,19 +44,23 @@ void convex_hull_3(InputIterator first, InputIterator last, PolygonMesh& pm, con * if the convex hull is a point or a segment, endpoints will be added in `pm` as isolated vertices. * * \tparam VertexListGraph a model of `VertexListGraph`. - * \tparam PolygonMesh must be a model of `MutableFaceGraph`. + * \tparam PolygonMesh must be a model of `MutableFaceGraph`. an internal property map for `CGAL::vertex_point_t` must be available. * \tparam NamedParameters a sequence of named parameters * * \param g the graph * \param pm the `PolygonMesh` that will contain the convex hull - * \param np optional sequence of named parameters among the ones listed below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `g`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `VertexListGraph` - * \cgalParamEnd -* \cgalNamedParamsEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `g`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, g)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `VertexListGraph`.} + * \cgalParamNEnd + * \cgalNamedParamsEnd * \attention The user must include the header file of the `PolygonMesh` and `VertexListGraph` types. */ template diff --git a/Convex_hull_3/doc/Convex_hull_3/Doxyfile.in b/Convex_hull_3/doc/Convex_hull_3/Doxyfile.in index 860593ed992..a114b807a2b 100644 --- a/Convex_hull_3/doc/Convex_hull_3/Doxyfile.in +++ b/Convex_hull_3/doc/Convex_hull_3/Doxyfile.in @@ -1,9 +1,3 @@ @INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - 3D Convex Hulls" - -\# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref BGL_\1 \"\1\"" -ALIASES += "cgalParamEnd=" diff --git a/Documentation/doc/Documentation/Developer_manual/Chapter_portability.txt b/Documentation/doc/Documentation/Developer_manual/Chapter_portability.txt index a68d0b4d903..c05737d8e93 100644 --- a/Documentation/doc/Documentation/Developer_manual/Chapter_portability.txt +++ b/Documentation/doc/Documentation/Developer_manual/Chapter_portability.txt @@ -101,70 +101,70 @@ the following table. GNU 3.2.1 -__GNUC__ +`__GNUC__` 3 GNU 3.2.1 -__GNUC_MINOR__ +`__GNUC_MINOR__` 2 GNU 3.2.1 -__GNUC_PATCHLEVEL__ +`__GNUC_PATCHLEVEL__` 1 Microsoft VC7.1 -_MSC_VER +`_MSC_VER` 1310 Microsoft VC8.0 -_MSC_VER +`_MSC_VER` 1400 Intel 11.1 -__INTEL_COMPILER +`__INTEL_COMPILER` 1110 Clang 2.9 -__clang_major__ +`__clang_major__` 2 Clang 2.9 -__clang_minor__ +`__clang_minor__` 9 SUN 5.3 -__SUNPRO_CC +`__SUNPRO_CC` 0x530 SUN 5.10 -__SUNPRO_CC +`__SUNPRO_CC` 0x5100 @@ -178,17 +178,17 @@ There are also flags to identify the architecture. SGI -__sgi +`__sgi` SUN -__sun +`__sun` Linux -__linux +`__linux` diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt index 987958ea147..6019c3057ae 100644 --- a/Documentation/doc/Documentation/Third_party.txt +++ b/Documentation/doc/Documentation/Third_party.txt @@ -56,7 +56,7 @@ or `h The \stl comes with the compiler, and as such no installation is required. \subsection thirdpartyBoost Boost -Version 1.62 or later +Version 1.66 or later The \sc{Boost} libraries are a set of portable C++ source libraries. Most of \sc{Boost} libraries are header-only, but a few of them need to be compiled or @@ -64,10 +64,6 @@ installed as binaries. \cgal only requires the headers of the \sc{Boost} libraries, but some demos and examples depend on the binary library `Boost.Program_options`. -As an exception and because of a bug in the \gcc compiler about the \cpp 11 -keyword `thread_local`, the `CGAL_Core` library always requires -the binary library `Boost.Thread` if the \gcc compiler version 9.0 or -earlier is used. In case the \sc{Boost} libraries are not installed on your system already, you can obtain them from `https://www.boost.org/`. diff --git a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in index 0a5a8ae32c5..85d7742a660 100644 --- a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in @@ -299,7 +299,16 @@ ALIASES = "sc{1}=\1\1" \ "cgalCRPSubsection{1}=

\1

" \ "cgalCite{1}=\cite \1" \ - "cgalPackageSection{2}=\htmlonly[block]
\endhtmlonly \section \1 \2 \n \htmlonly[block]
\endhtmlonly" + "cgalPackageSection{2}=\htmlonly[block]
\endhtmlonly \section \1 \2 \n \htmlonly[block]
\endhtmlonly" \ + "cgalNamedParamsBegin=
Optional Named Parameters
" \ + "cgalNamedParamsBegin{1}=
\1
" \ + "cgalNamedParamsEnd=
" \ + "cgalParamNBegin{1}= \htmlonly[block]
\endhtmlonly
    " \ + "cgalParamDescription{1}=
  • \1
  • " \ + "cgalParamType{1}=
  • Type: \1
  • " \ + "cgalParamDefault{1}=
  • %Default: \1
  • " \ + "cgalParamExtra{1}=
  • Extra: \1
  • " \ + "cgalParamNEnd=
\htmlonly[block]
\endhtmlonly " # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" diff --git a/Documentation/doc/resources/1.8.13/cgal_stylesheet.css b/Documentation/doc/resources/1.8.13/cgal_stylesheet.css index 7311b632554..ea5b102c0b8 100644 --- a/Documentation/doc/resources/1.8.13/cgal_stylesheet.css +++ b/Documentation/doc/resources/1.8.13/cgal_stylesheet.css @@ -345,3 +345,41 @@ div.summary { width: auto; } + +.collapsible { + background-color: white; + color: #602020; + cursor: pointer; + padding: 3px; + width: 100%; + border: none; + text-align: left; + outline: none; + font: 14px Roboto,sans-serif; +} + +.active, .collapsible:hover { + background-color: white; +} + +.collapsible:after { + content: '\25B6'; + color: #7A93C5; + font-weight: bold; + float: left; + margin-left: -20px; + margin-right: 5px; +} + +.active:after { + content: "\25BC"; +} + +.content { + padding: 0 18px; + color: black; + max-height: 0; + overflow: hidden; + transition: max-height 0.2s ease-out; + background-color: white; +} diff --git a/Documentation/doc/resources/1.8.13/hacks.js b/Documentation/doc/resources/1.8.13/hacks.js index 7d81b479149..26d9ae47435 100644 --- a/Documentation/doc/resources/1.8.13/hacks.js +++ b/Documentation/doc/resources/1.8.13/hacks.js @@ -110,3 +110,19 @@ $(document).ready(function() { } })(); +$(document).ready(function() { + var coll = document.getElementsByClassName("collapsible"); + var i; + + for (i = 0; i < coll.length; i++) { + coll[i].addEventListener("click", function() { + this.classList.toggle("active"); + var content = this.nextElementSibling; + if (content.style.maxHeight){ + content.style.maxHeight = null; + } else { + content.style.maxHeight = content.scrollHeight + "px"; + } + }); + } +}); diff --git a/Documentation/doc/resources/1.8.13/menu_version.js b/Documentation/doc/resources/1.8.13/menu_version.js index 780aefa1246..0a354874978 100644 --- a/Documentation/doc/resources/1.8.13/menu_version.js +++ b/Documentation/doc/resources/1.8.13/menu_version.js @@ -1,15 +1,15 @@ (function() { 'use strict'; - var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+))\//; + var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_local = /.*\/doc_output\//; - var current_version_local = '5.1-beta1' + var current_version_local = '5.0.3' var all_versions = [ 'master', 'latest', - '5.1-beta1', - '5.0.2', - '4.14.3', + '5.1-beta2', + '5.0.3', + '4.14.2', '4.13.2', '4.12.2', '4.11.3', diff --git a/Documentation/doc/resources/1.8.13/stylesheet.css b/Documentation/doc/resources/1.8.13/stylesheet.css index 41df79908ef..6138660d112 100644 --- a/Documentation/doc/resources/1.8.13/stylesheet.css +++ b/Documentation/doc/resources/1.8.13/stylesheet.css @@ -1245,10 +1245,12 @@ dl.citelist dt { font-weight:bold; margin-right:10px; padding:5px; + text-align:right; + width:52px; } dl.citelist dd { - margin:2px 0; + margin:2px 0 2px 72px; padding:5px 0; } diff --git a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in index 6b15c31cf9e..aad98822d2f 100644 --- a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in @@ -300,7 +300,16 @@ ALIASES = "sc{1}=\1\1" \ "cgalCRPSubsection{1}=

\1

" \ "cgalCite{1}=\cite \1" \ - "cgalPackageSection{2}=\htmlonly[block]
\endhtmlonly \section \1 \2 ^^ \htmlonly[block]
\endhtmlonly" + "cgalPackageSection{2}=\htmlonly[block]
\endhtmlonly \section \1 \2 ^^ \htmlonly[block]
\endhtmlonly" \ + "cgalNamedParamsBegin=
Optional Named Parameters
" \ + "cgalNamedParamsBegin{1}=
\1
" \ + "cgalNamedParamsEnd=
" \ + "cgalParamNBegin{1}= \htmlonly[block]
\endhtmlonly
    " \ + "cgalParamDescription{1}=
  • \1
  • " \ + "cgalParamType{1}=
  • Type: \1
  • " \ + "cgalParamDefault{1}=
  • %Default: \1
  • " \ + "cgalParamExtra{1}=
  • Extra: \1
  • " \ + "cgalParamNEnd=
\htmlonly[block]
\endhtmlonly " # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For diff --git a/Documentation/doc/resources/1.8.14/cgal_stylesheet.css b/Documentation/doc/resources/1.8.14/cgal_stylesheet.css index c30ec92aa9e..110cf066bcb 100644 --- a/Documentation/doc/resources/1.8.14/cgal_stylesheet.css +++ b/Documentation/doc/resources/1.8.14/cgal_stylesheet.css @@ -345,3 +345,41 @@ div.summary { width: auto; } + +.collapsible { + background-color: white; + color: #602020; + cursor: pointer; + padding: 3px; + width: 100%; + border: none; + text-align: left; + outline: none; + font: 14px Roboto,sans-serif; +} + +.active, .collapsible:hover { + background-color: white; +} + +.collapsible:after { + content: '\25B6'; + color: #7A93C5; + font-weight: bold; + float: left; + margin-left: -20px; + margin-right: 5px; +} + +.active:after { + content: "\25BC"; +} + +.content { + padding: 0 18px; + color: black; + max-height: 0; + overflow: hidden; + transition: max-height 0.2s ease-out; + background-color: white; +} diff --git a/Documentation/doc/resources/1.8.14/hacks.js b/Documentation/doc/resources/1.8.14/hacks.js index 7d81b479149..26d9ae47435 100644 --- a/Documentation/doc/resources/1.8.14/hacks.js +++ b/Documentation/doc/resources/1.8.14/hacks.js @@ -110,3 +110,19 @@ $(document).ready(function() { } })(); +$(document).ready(function() { + var coll = document.getElementsByClassName("collapsible"); + var i; + + for (i = 0; i < coll.length; i++) { + coll[i].addEventListener("click", function() { + this.classList.toggle("active"); + var content = this.nextElementSibling; + if (content.style.maxHeight){ + content.style.maxHeight = null; + } else { + content.style.maxHeight = content.scrollHeight + "px"; + } + }); + } +}); diff --git a/Documentation/doc/resources/1.8.14/menu_version.js b/Documentation/doc/resources/1.8.14/menu_version.js index 780aefa1246..0a354874978 100644 --- a/Documentation/doc/resources/1.8.14/menu_version.js +++ b/Documentation/doc/resources/1.8.14/menu_version.js @@ -1,15 +1,15 @@ (function() { 'use strict'; - var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+))\//; + var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_local = /.*\/doc_output\//; - var current_version_local = '5.1-beta1' + var current_version_local = '5.0.3' var all_versions = [ 'master', 'latest', - '5.1-beta1', - '5.0.2', - '4.14.3', + '5.1-beta2', + '5.0.3', + '4.14.2', '4.13.2', '4.12.2', '4.11.3', diff --git a/Documentation/doc/resources/1.8.14/stylesheet.css b/Documentation/doc/resources/1.8.14/stylesheet.css index 41df79908ef..6138660d112 100644 --- a/Documentation/doc/resources/1.8.14/stylesheet.css +++ b/Documentation/doc/resources/1.8.14/stylesheet.css @@ -1245,10 +1245,12 @@ dl.citelist dt { font-weight:bold; margin-right:10px; padding:5px; + text-align:right; + width:52px; } dl.citelist dd { - margin:2px 0; + margin:2px 0 2px 72px; padding:5px 0; } diff --git a/Documentation/doc/resources/1.8.4/BaseDoxyfile.in b/Documentation/doc/resources/1.8.4/BaseDoxyfile.in index 29f6345b39d..d5b6d350ea7 100644 --- a/Documentation/doc/resources/1.8.4/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.4/BaseDoxyfile.in @@ -305,6 +305,16 @@ ALIASES+= "cgalCite{1}=\cite \1" ALIASES+= "cgalPackageSection{2}=\htmlonly
\endhtmlonly \section \1 \2 \n \htmlonly
\endhtmlonly" +ALIASES+= "cgalNamedParamsBegin=
Optional Named Parameters
" +ALIASES+= "cgalNamedParamsBegin{1}=
\1
" +ALIASES+= "cgalNamedParamsEnd=
" +ALIASES+= "cgalParamNBegin{1}= \htmlonly[block]
\endhtmlonly
    " +ALIASES+= "cgalParamDescription{1}=
  • \1
  • " +ALIASES+= "cgalParamType{1}=
  • Type: \1
  • " +ALIASES+= "cgalParamDefault{1}=
  • %Default: \1
  • " +ALIASES+= "cgalParamExtra{1}=
  • Extra: \1
  • " +ALIASES+= "cgalParamNEnd=
\htmlonly[block]
\endhtmlonly " + # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the diff --git a/Documentation/doc/resources/1.8.4/cgal_stylesheet.css b/Documentation/doc/resources/1.8.4/cgal_stylesheet.css index c49b3c055ac..903855d3625 100644 --- a/Documentation/doc/resources/1.8.4/cgal_stylesheet.css +++ b/Documentation/doc/resources/1.8.4/cgal_stylesheet.css @@ -336,3 +336,41 @@ div.summary { width: auto; } + +.collapsible { + background-color: white; + color: #602020; + cursor: pointer; + padding: 3px; + width: 100%; + border: none; + text-align: left; + outline: none; + font: 14px Roboto,sans-serif; +} + +.active, .collapsible:hover { + background-color: white; +} + +.collapsible:after { + content: '\25B6'; + color: #7A93C5; + font-weight: bold; + float: left; + margin-left: -20px; + margin-right: 5px; +} + +.active:after { + content: "\25BC"; +} + +.content { + padding: 0 18px; + color: black; + max-height: 0; + overflow: hidden; + transition: max-height 0.2s ease-out; + background-color: white; +} diff --git a/Documentation/doc/resources/1.8.4/hacks.js b/Documentation/doc/resources/1.8.4/hacks.js index 4c0436c91d2..d821aa89ca1 100644 --- a/Documentation/doc/resources/1.8.4/hacks.js +++ b/Documentation/doc/resources/1.8.4/hacks.js @@ -106,3 +106,19 @@ $(document).ready(function() { } })(); +$(document).ready(function() { + var coll = document.getElementsByClassName("collapsible"); + var i; + + for (i = 0; i < coll.length; i++) { + coll[i].addEventListener("click", function() { + this.classList.toggle("active"); + var content = this.nextElementSibling; + if (content.style.maxHeight){ + content.style.maxHeight = null; + } else { + content.style.maxHeight = content.scrollHeight + "px"; + } + }); + } +}); diff --git a/Documentation/doc/resources/1.8.4/menu_version.js b/Documentation/doc/resources/1.8.4/menu_version.js index 780aefa1246..0a354874978 100644 --- a/Documentation/doc/resources/1.8.4/menu_version.js +++ b/Documentation/doc/resources/1.8.4/menu_version.js @@ -1,15 +1,15 @@ (function() { 'use strict'; - var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+))\//; + var url_re = /(cgal\.geometryfactory\.com\/CGAL\/doc\/|doc\.cgal\.org\/)(master|latest|(\d\.\d+|\d\.\d+\.\d+)(-beta\d)?)\//; var url_local = /.*\/doc_output\//; - var current_version_local = '5.1-beta1' + var current_version_local = '5.0.3' var all_versions = [ 'master', 'latest', - '5.1-beta1', - '5.0.2', - '4.14.3', + '5.1-beta2', + '5.0.3', + '4.14.2', '4.13.2', '4.12.2', '4.11.3', diff --git a/Documentation/doc/resources/1.8.4/stylesheet.css b/Documentation/doc/resources/1.8.4/stylesheet.css index 688b81b2557..7f98899c634 100644 --- a/Documentation/doc/resources/1.8.4/stylesheet.css +++ b/Documentation/doc/resources/1.8.4/stylesheet.css @@ -1079,10 +1079,12 @@ dl.citelist dt { font-weight:bold; margin-right:10px; padding:5px; + text-align:right; + width:52px; } dl.citelist dd { - margin:2px 0; + margin:2px 0 2px 72px; padding:5px 0; } diff --git a/Documentation/doc/scripts/pkglist_filter b/Documentation/doc/scripts/pkglist_filter index 4c930d5edc9..2ec8ce96c9b 100755 --- a/Documentation/doc/scripts/pkglist_filter +++ b/Documentation/doc/scripts/pkglist_filter @@ -1,9 +1,3 @@ #!/bin/sh -if which python2 2>/dev/null >/dev/null; then - exec python2 ${CMAKE_BINARY_DIR}/pkglist_filter.py "$1" -elif which python2.7 2>/dev/null >/dev/null; then - exec python2.7 ${CMAKE_BINARY_DIR}/pkglist_filter.py "$1" -elif which python2.6 2>/dev/null >/dev/null; then - exec python2.6 ${CMAKE_BINARY_DIR}/pkglist_filter.py "$1" -fi +exec ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/pkglist_filter.py "$1" diff --git a/Documentation/doc/scripts/pkglist_filter.bat b/Documentation/doc/scripts/pkglist_filter.bat index 4d8cccb9524..83dff1aa121 100644 --- a/Documentation/doc/scripts/pkglist_filter.bat +++ b/Documentation/doc/scripts/pkglist_filter.bat @@ -1,18 +1,6 @@ @echo off -@where /q python -if not errorlevel 1 ( set python=python ) - -@where /q python2 -if not errorlevel 1 ( set python=python2 ) - -@where /q python2.6 -if not errorlevel 1 ( set python=python2.6 ) - -@where /q python2.7 -if not errorlevel 1 ( set python=python2.7 ) - :go -%python% ${CMAKE_BINARY_DIR}/pkglist_filter.py %1 +${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/pkglist_filter.py %1 @echo on diff --git a/Documentation/doc/scripts/pkglist_filter.py b/Documentation/doc/scripts/pkglist_filter.py index 3a5e75d4f75..af99777d529 100755 --- a/Documentation/doc/scripts/pkglist_filter.py +++ b/Documentation/doc/scripts/pkglist_filter.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import codecs import re @@ -28,10 +28,16 @@ def main(argv): for l in pkgdesc: do_print = do_print or re.match(".*cgalPkgDescriptionBegin.*", l) if(do_print): - sys.stdout.write(l.encode('utf-8')) + if hasattr(sys.stdout, 'buffer'): + sys.stdout.buffer.write(l.encode('utf-8')) #python3 + else: + sys.stdout.write(l.encode('utf-8')) #python2 do_print = do_print and (not re.match(".*cgalPkgDescriptionEnd.*", l)) else: - sys.stdout.write(line.encode('utf-8')) + if hasattr(sys.stdout, 'buffer'): + sys.stdout.buffer.write(line.encode('utf-8')) #python3 + else: + sys.stdout.write(line.encode('utf-8')) #python2 if __name__ == "__main__": main(sys.argv) diff --git a/GraphicsView/include/CGAL/Qt/camera_impl.h b/GraphicsView/include/CGAL/Qt/camera_impl.h index d422753c08a..6629dd99994 100644 --- a/GraphicsView/include/CGAL/Qt/camera_impl.h +++ b/GraphicsView/include/CGAL/Qt/camera_impl.h @@ -1725,6 +1725,11 @@ CGAL_INLINE_FUNCTION MAT(out, 3, 3) = r3[7]; return 1; } + +#undef MAT +#undef SWAP_ROWS_GLdouble +#undef SWAP_ROWS_DOUBLE + CGAL_INLINE_FUNCTION int unProject(GLdouble winx, GLdouble winy, GLdouble winz, GLdouble *modelview, GLdouble *projection, int *viewport, GLdouble *objX,GLdouble *objY,GLdouble *objZ) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index b6cc3849288..420781a827c 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -4,7 +4,7 @@ Release History [Release 5.1](https://github.com/CGAL/cgal/releases/tag/releases%2FCGAL-5.1) ----------- -Release date: July 2020 +Release date: September 2020 ### [Tetrahedral Remeshing](https://doc.cgal.org/5.1/Manual/packages.html#PkgTetrahedralRemeshing) (new package) @@ -30,6 +30,11 @@ Release date: July 2020 See also the associated [blog entry](https://www.cgal.org/2020/04/20/Optimal_bounding_box/). +### Installation + +- The CGAL\_Core library no longer requires `Boost.Thread`, even if the g++ compiler is used. +- The minimal supported version of Boost is now 1.66.0. + ### [Tutorials](https://doc.cgal.org/5.1/Manual/tutorials.html) - Two new, detailed tutorials have been added: diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 42dfeb8190a..272431c72dc 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -382,8 +382,6 @@ include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) include(${CGAL_MODULES_DIR}/CGAL_enable_end_of_configuration_hook.cmake) cgal_setup_module_path() -message( STATUS "CGAL_REFERENCE_CACHE_DIR=${CGAL_REFERENCE_CACHE_DIR}" ) - if ( RUNNING_CGAL_AUTO_TEST ) message(STATUS "Operating system:") execute_process(COMMAND uname -a @@ -392,41 +390,6 @@ if ( RUNNING_CGAL_AUTO_TEST ) ERROR_VARIABLE uname_a) message(STATUS "${uname_a}") CGAL_display_compiler_version() - if ( NOT "${CGAL_REFERENCE_CACHE_DIR}" STREQUAL "" ) - if ( EXISTS ${CGAL_REFERENCE_CACHE_DIR} ) - if ( EXISTS ${CGAL_REFERENCE_CACHE_DIR}/CMakeCache.txt ) - message( STATUS "Loading reference cache from ${CGAL_REFERENCE_CACHE_DIR}" ) - load_cache( ${CGAL_REFERENCE_CACHE_DIR} - EXCLUDE CGAL_Core_LIBRARY - CGAL_CORE_PACKAGE_DIR - WITH_CGAL_Core - CGAL_INSTALLATION_PACKAGE_DIR - CGAL_MAINTENANCE_PACKAGE_DIR - CGAL_PDB_BINARY_DIR - CGAL_PDB_SOURCE_DIR - CGAL_BINARY_DIR - CGAL_SOURCE_DIR) -# message("List of cache variables:") - - ## The following lines removes nasty loaded cache values. We do not - ## want that the current build tree depends on binaries that were - ## build in the reference build tree. - get_property(cache_variables DIRECTORY PROPERTY CACHE_VARIABLES) - foreach(var ${cache_variables}) -# get_property(var_value CACHE ${var} PROPERTY VALUE) -# get_property(type CACHE ${var} PROPERTY TYPE) - string(REGEX MATCH "^CGAL(_.*_(DEPENDS|BINARY_DIR)|_.*LIBRARY)$" var_name_matches ${var}) - if(var_name_matches) - unset(${var} CACHE) -# else() -# message("${var}:${var_type}=${var_value}") - endif() - endforeach() - - - endif() - endif() - endif() endif() include(CGAL_Common) @@ -916,6 +879,7 @@ if(NOT CGAL_HEADER_ONLY) else() install(FILES ${CMAKE_CURRENT_LIST_DIR}/lib/cmake/CGAL/CGALConfig.cmake + ${CMAKE_CURRENT_LIST_DIR}/lib/cmake/CGAL/CGALConfigBuildVersion.cmake ${CMAKE_CURRENT_LIST_DIR}/lib/cmake/CGAL/CGALConfigVersion.cmake DESTINATION ${CGAL_INSTALL_CMAKE_DIR}) if(NOT CGAL_INSTALL_CMAKE_DIR STREQUAL "${CGAL_INSTALL_LIB_DIR}/cmake/CGAL") diff --git a/Installation/cmake/modules/CGAL_Boost_iostreams_support.cmake b/Installation/cmake/modules/CGAL_Boost_iostreams_support.cmake index 04c8cc5529b..a8d1c4ddd45 100644 --- a/Installation/cmake/modules/CGAL_Boost_iostreams_support.cmake +++ b/Installation/cmake/modules/CGAL_Boost_iostreams_support.cmake @@ -35,7 +35,7 @@ if(Boost_IOSTREAMS_FOUND AND NOT TARGET CGAL::Boost_iostreams_support) if(CMAKE_VERSION VERSION_LESS 3.11) set_target_properties(CGAL::Boost_iostreams_support PROPERTIES INTERFACE_COMPILE_DEFINITIONS "CGAL_LINKED_WITH_BOOST_IOSTREAMS" - INTERFACE_LINK_LIBRARIES ${Boost_LIB} ${ZLIB_LIBS}) + INTERFACE_LINK_LIBRARIES "${Boost_LIB};${ZLIB_LIBS}") else() set_target_properties(CGAL::Boost_iostreams_support PROPERTIES INTERFACE_COMPILE_DEFINITIONS "CGAL_LINKED_WITH_BOOST_IOSTREAMS") diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake index 053c4f6ab67..51c6bc73c4f 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake @@ -53,13 +53,6 @@ endif() # keyword, or ``PUBLIC`` otherwise. # -# See the release notes of CGAL-4.10: CGAL_Core now requires -# Boost.Thread, with GNU G++ < 9.1. -if (CMAKE_CXX_COMPILER_ID STREQUAL GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.1) - include(${CMAKE_CURRENT_LIST_DIR}/CGAL_TweakFindBoost.cmake) - find_package( Boost 1.48 REQUIRED COMPONENTS thread system ) -endif() - function(CGAL_setup_CGAL_Core_dependencies target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) @@ -71,20 +64,4 @@ function(CGAL_setup_CGAL_Core_dependencies target) target_compile_definitions(${target} ${keyword} CGAL_USE_CORE=1) target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) - # See the release notes of CGAL-4.10: CGAL_Core now requires - # Boost.Thread, with GNU G++. - if (CMAKE_CXX_COMPILER_ID STREQUAL GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.1) - if(TARGET Boost::thread) - target_link_libraries( CGAL_Core ${keyword} Boost::thread) - else() - # Note that `find_package( Boost...)` must be called in the - # function `CGAL_setup_CGAL_Core_dependencies()` because the - # calling `CMakeLists.txt` may also call `find_package(Boost)` - # between the inclusion of this module, and the call to this - # function. That resets `Boost_LIBRARIES`. - find_package( Boost 1.48 REQUIRED thread system ) - target_link_libraries( CGAL_Core ${keyword} ${Boost_LIBRARIES}) - endif() - endif() - endfunction() diff --git a/Installation/cmake/modules/CGAL_add_test.cmake b/Installation/cmake/modules/CGAL_add_test.cmake index ea86b4d64f1..f6f0ec7deeb 100644 --- a/Installation/cmake/modules/CGAL_add_test.cmake +++ b/Installation/cmake/modules/CGAL_add_test.cmake @@ -16,6 +16,9 @@ if(NOT POLICY CMP0064) # Add a fake function to avoid CMake errors function(cgal_add_compilation_test) endfunction() + # Add a fake function to avoid CMake errors + function(cgal_setup_test_properties) + endfunction() # Then return, to exit the file return() @@ -213,7 +216,7 @@ function(cgal_setup_test_properties test_name) PROPERTY WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir) endif() - + set_property(TEST "${test_name}" APPEND PROPERTY FIXTURES_REQUIRED "${PROJECT_NAME}") if(exe_name) diff --git a/Installation/cmake/modules/CGAL_parse_version_h.cmake b/Installation/cmake/modules/CGAL_parse_version_h.cmake index fa0b22cd316..0b6a774b734 100644 --- a/Installation/cmake/modules/CGAL_parse_version_h.cmake +++ b/Installation/cmake/modules/CGAL_parse_version_h.cmake @@ -14,5 +14,6 @@ function(cgal_parse_version_h version_h_file name) MATH(EXPR ${ARGV3} "${CMAKE_MATCH_5}") # minor version without leading 0 set(${ARGV3} "${${ARGV3}}" PARENT_SCOPE) set(${ARGV4} "${CMAKE_MATCH_6}" PARENT_SCOPE) # patch number - set(${ARGV5} "${CMAKE_MATCH_7}" PARENT_SCOPE) # build number + MATH(EXPR ${ARGV5} "${CMAKE_MATCH_7}") # build number version without leading 0 + set(${ARGV5} "${${ARGV5}}" PARENT_SCOPE) # build number endfunction() diff --git a/Installation/cmake/modules/FindMPFI.cmake b/Installation/cmake/modules/FindMPFI.cmake index 2b0f903ea2d..d6822ed9579 100644 --- a/Installation/cmake/modules/FindMPFI.cmake +++ b/Installation/cmake/modules/FindMPFI.cmake @@ -1,4 +1,5 @@ find_package( GMP QUIET ) +find_package( MPFR QUIET ) if( GMP_FOUND AND MPFR_FOUND ) diff --git a/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h b/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h new file mode 100644 index 00000000000..2f4705e66d0 --- /dev/null +++ b/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h @@ -0,0 +1,34 @@ +// Copyright (C) 2020 GeometryFactory Sarl +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// + +#ifndef CGAL_MESH_3_MESH_COMPLEX_3_IN_TRIANGULATION_3_FWD_H +#define CGAL_MESH_3_MESH_COMPLEX_3_IN_TRIANGULATION_3_FWD_H + +/// \file Mesh_complex_3_in_triangulation_3_fwd.h +/// Forward declarations of the Mesh_3 package. + +#ifndef DOXYGEN_RUNNING +namespace CGAL { + +// fwdS for the public interface +template +class Mesh_complex_3_in_triangulation_3; + +template +bool build_triangulation_from_file(std::istream& is, + Tr& tr); + +} // CGAL +#endif + +#endif /* CGAL_MESH_3_MESH_COMPLEX_3_IN_TRIANGULATION_3_FWD_H */ + + diff --git a/Installation/include/CGAL/config.h b/Installation/include/CGAL/config.h index 2834f175528..c15f7841a98 100644 --- a/Installation/include/CGAL/config.h +++ b/Installation/include/CGAL/config.h @@ -36,8 +36,9 @@ # define WIN64 #endif -#ifdef BOOST_MSVC +#ifdef _MSC_VER #define _SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING 1 +#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING 1 #endif #ifdef CGAL_INCLUDE_WINDOWS_DOT_H @@ -296,6 +297,10 @@ #if __cplusplus >= 201402L || _MSVC_LANG >= 201402L # define CGAL_CXX14 1 #endif +// Same for C++17 +#if __cplusplus >= 201703L || _MSVC_LANG >= 201703L +# define CGAL_CXX17 1 +#endif #if defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) || BOOST_VERSION < 105000 #define CGAL_CFG_NO_STD_HASH 1 @@ -559,7 +564,7 @@ using std::max; #define CGAL_NORETURN [[noreturn]] // Macro to specify [[no_unique_address]] if supported -#if __has_cpp_attribute(no_unique_address) +#if CGAL_CXX11 && __has_cpp_attribute(no_unique_address) # define CGAL_NO_UNIQUE_ADDRESS [[no_unique_address]] #else # define CGAL_NO_UNIQUE_ADDRESS diff --git a/Installation/include/CGAL/version.h b/Installation/include/CGAL/version.h index 26a92686edd..c9484b891d1 100644 --- a/Installation/include/CGAL/version.h +++ b/Installation/include/CGAL/version.h @@ -17,7 +17,7 @@ #define CGAL_VERSION_H #ifndef SWIG -#define CGAL_VERSION 5.1-beta2 +#define CGAL_VERSION 5.1-beta3 #define CGAL_GIT_HASH abcdef #endif #define CGAL_VERSION_NR 1050100000 diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 11ff7810d31..92f6a884000 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -150,6 +150,7 @@ foreach(cgal_lib ${CGAL_LIBRARIES}) endif() endforeach() +include(${CGAL_CONFIG_DIR}/CGALConfigVersion.cmake) # # @@ -161,15 +162,6 @@ cgal_setup_module_path() set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) include(${CGAL_MODULES_DIR}/CGAL_target_use_TBB.cmake) -include("${CGAL_MODULES_DIR}/CGAL_parse_version_h.cmake") -cgal_parse_version_h( "${CGAL_INSTALLATION_PACKAGE_DIR}/include/CGAL/version.h" - "CGAL_VERSION_NAME" - "CGAL_MAJOR_VERSION" - "CGAL_MINOR_VERSION" - "CGAL_BUGFIX_VERSION" - "CGAL_BUILD_VERSION") -set(CGAL_VERSION "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUGFIX_VERSION}.${CGAL_BUILD_VERSION}") - if( CGAL_DEV_MODE OR RUNNING_CGAL_AUTO_TEST ) # Do not use -isystem for CGAL include paths set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) diff --git a/Installation/lib/cmake/CGAL/CGALConfigBuildVersion.cmake b/Installation/lib/cmake/CGAL/CGALConfigBuildVersion.cmake new file mode 100644 index 00000000000..c6ef85cf991 --- /dev/null +++ b/Installation/lib/cmake/CGAL/CGALConfigBuildVersion.cmake @@ -0,0 +1 @@ +set(CGAL_BUILD_VERSION 0) diff --git a/Installation/lib/cmake/CGAL/CGALConfigVersion.cmake b/Installation/lib/cmake/CGAL/CGALConfigVersion.cmake index e0ff35433ce..62b7f345e81 100644 --- a/Installation/lib/cmake/CGAL/CGALConfigVersion.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfigVersion.cmake @@ -1,7 +1,8 @@ set(CGAL_MAJOR_VERSION 5) set(CGAL_MINOR_VERSION 1) set(CGAL_BUGFIX_VERSION 0) -set(CGAL_VERSION_PUBLIC_RELEASE_VERSION "5.1-beta2") +include(${CMAKE_CURRENT_LIST_DIR}/CGALConfigBuildVersion.cmake) +set(CGAL_VERSION_PUBLIC_RELEASE_VERSION "5.1-beta3") set(CGAL_VERSION_PUBLIC_RELEASE_NAME "CGAL-${CGAL_VERSION_PUBLIC_RELEASE_VERSION}") if (CGAL_BUGFIX_VERSION AND CGAL_BUGFIX_VERSION GREATER 0) diff --git a/Intersections_3/include/CGAL/Intersections_3/internal/Tetrahedron_3_Bounded_3_do_intersect.h b/Intersections_3/include/CGAL/Intersections_3/internal/Tetrahedron_3_Bounded_3_do_intersect.h index 4a10c6b23de..39ac2143812 100644 --- a/Intersections_3/include/CGAL/Intersections_3/internal/Tetrahedron_3_Bounded_3_do_intersect.h +++ b/Intersections_3/include/CGAL/Intersections_3/internal/Tetrahedron_3_Bounded_3_do_intersect.h @@ -153,31 +153,49 @@ do_intersect(const typename K::Sphere_3 &sp, template inline typename K::Boolean -do_intersect(const typename K::Tetrahedron_3 &tet, - const typename K::Tetrahedron_3 &sp, +do_intersect(const typename K::Tetrahedron_3 &lh_tet, + const typename K::Tetrahedron_3 &rh_tet, const K & k) { - return do_intersect_tetrahedron_bounded(sp, tet, tet[0], k); + return do_intersect_tetrahedron_bounded(lh_tet, rh_tet, lh_tet[0], k); } +// BBox_3 specific code since it is ok for BBox_3 to degenerate. +template +inline typename K::Boolean do_intersect(const CGAL::Bbox_3 &aabb, + const typename K::Tetrahedron_3 &tet, + const K &k) { + typename K::Construct_triangle_3 tr = k.construct_triangle_3_object(); + typename K::Boolean result = false; + typename K::Boolean b = false; + + b = do_intersect(aabb, tr(tet[0], tet[1], tet[2]), k); + if (certainly(b)) return b; + if (is_indeterminate(b)) result = b; + b = do_intersect(aabb, tr(tet[1], tet[2], tet[3]), k); + if (certainly(b)) return b; + if (is_indeterminate(b)) result = b; + b = do_intersect(aabb, tr(tet[2], tet[3], tet[0]), k); + if (certainly(b)) return b; + if (is_indeterminate(b)) result = b; + b = do_intersect(aabb, tr(tet[3], tet[0], tet[1]), k); + if (certainly(b)) return b; + if (is_indeterminate(b)) result = b; + + b = k.has_on_bounded_side_3_object()( + tet, k.construct_point_3_object()(aabb.xmin(), aabb.ymin(), aabb.zmin())); + if (certainly(b)) return b; + if (is_indeterminate(b)) result = b; + + return result; +} + + template -inline -typename K::Boolean -do_intersect(const typename K::Tetrahedron_3 &tet, - const CGAL::Bbox_3 &bb, - const K & k) -{ - return do_intersect_tetrahedron_bounded(bb, tet, typename K::Point_3(bb.xmin(), bb.ymin(), bb.zmin()), k); -} - - template -inline -typename K::Boolean -do_intersect(const CGAL::Bbox_3 &bb, - const typename K::Tetrahedron_3 &tet, - const K & k) -{ - return do_intersect_tetrahedron_bounded(bb, tet, typename K::Point_3(bb.xmin(), bb.ymin(), bb.zmin()), k); +inline typename K::Boolean do_intersect(const typename K::Tetrahedron_3 &tet, + const CGAL::Bbox_3 &bb, const K &k) { + // Swap arguments. + return do_intersect(bb, tet, k); } } // namespace internal diff --git a/Kernel_23/test/Kernel_23/test_approximate_dihedral_angle_3.cpp b/Kernel_23/test/Kernel_23/test_approximate_dihedral_angle_3.cpp new file mode 100644 index 00000000000..233656236b2 --- /dev/null +++ b/Kernel_23/test/Kernel_23/test_approximate_dihedral_angle_3.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#include +using K = CGAL::Simple_cartesian; +using Point_3 = K::Point_3; + +struct query { + Point_3 p; + double expected_angle; +}; + +int main() { + Point_3 a = {0, 0, 0}; + Point_3 b = {0, 1, 0}; + Point_3 c = {1, 0, 0}; + + const query queries[] = { + { { 1, 0, 0}, 0.}, + { { 1, 0, 1}, 45.}, + { { 0, 0, 1}, 90.}, + { { -1, 0, 1}, 135.}, + { { -1, 0, 0}, 180.}, + { { -1, 0, -1}, -135.}, + { { 0, 0, -1}, -90.}, + { { 1, 0, -1}, -45.}, + }; + + for(auto query: queries) { + const auto& expected = query.expected_angle; + const auto& p = query.p; + auto approx = CGAL::approximate_dihedral_angle(a, b, c, p); + std::cout << approx << " -- " << expected << '\n'; + assert( std::abs(approx - expected) < 0.1 ); + } +}; diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab index bc9df8cdfa9..2600c39135e 100644 --- a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab @@ -23,9 +23,9 @@ LC_CTYPE=en_US.UTF-8 # The script also updates the manual tools. # "master" alone -0 21 * * Sun cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/master.git --do-it --beta 2 --public || echo ERROR +0 21 * * Sun cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/master.git --do-it --beta 3 --public || echo ERROR # "integration" -0 21 * * Mon,Tue,Wed,Thu cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/integration.git $HOME/CGAL/branches/empty-dir --do-it --beta 2 --public || echo ERROR +0 21 * * Mon,Tue,Wed,Thu cd $HOME/CGAL/create_internal_release && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/integration.git $HOME/CGAL/branches/empty-dir --do-it --beta 3 --public || echo ERROR # from branch 5.0 0 21 * * Sat cd $HOME/CGAL/create_internal_release-5.0-branch && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release $HOME/CGAL/branches/CGAL-5.0-branch.git --public --do-it || echo ERROR # from branch 4.14 diff --git a/Maintenance/public_release/announcement/mailing-beta.eml b/Maintenance/public_release/announcement/mailing-beta.eml index 9234c02b647..e77d4236929 100644 --- a/Maintenance/public_release/announcement/mailing-beta.eml +++ b/Maintenance/public_release/announcement/mailing-beta.eml @@ -1,14 +1,14 @@ -Subject: CGAL 5.1 Beta 1 Released, Computational Geometry Algorithms Library +Subject: CGAL 5.1 Beta 2 Released, Computational Geometry Algorithms Library Content-Type: text/plain; charset="utf-8" Body: -The CGAL Open Source Project is pleased to announce the release 5.1 Beta 1 +The CGAL Open Source Project is pleased to announce the release 5.1 Beta 2 of CGAL, the Computational Geometry Algorithms Library. -CGAL version 5.1 Beta 1 is a public testing release. It should provide a +CGAL version 5.1 Beta 2 is a public testing release. It should provide a solid ground to report bugs that need to be tackled before the release -of the final version of CGAL 5.1 in July. +of the final version of CGAL 5.1 in September. Besides fixes and general enhancement to existing packages, the following @@ -45,6 +45,11 @@ Optimal Bounding Box (new package) See also the associated blog entry: https://www.cgal.org/2020/04/20/Optimal_bounding_box/ +Installation + +- The CGAL_Core library no longer requires Boost.Thread, even if the + g++ compiler is used. + Tutorials - Two new, detailed tutorials have been added: @@ -118,7 +123,7 @@ CGAL and the Boost Graph Library (BGL) uses this alpha expansion graphcut to regularize the borders of a selected faces on a triangle mesh. -See https://www.cgal.org/2020/06/09/cgal51-beta1/ for a complete list of +See https://www.cgal.org/2020/07/28/cgal51-beta2/ for a complete list of changes. diff --git a/Mesh_3/doc/Mesh_3/Doxyfile.in b/Mesh_3/doc/Mesh_3/Doxyfile.in index eafd3c94e7a..5c8e03ccafd 100644 --- a/Mesh_3/doc/Mesh_3/Doxyfile.in +++ b/Mesh_3/doc/Mesh_3/Doxyfile.in @@ -1,19 +1,8 @@ @INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} # macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref PMP_\1 \"\1\"" -ALIASES += "cgalParamEnd=" ALIASES += "cgalDescribePolylineType=A polyline is defined as a sequence of points, each pair of contiguous points defines a segment of the polyline. If the first and last points of the polyline are identical, the polyline is closed." -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - - INPUT += \ ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Polyhedral_complex_mesh_domain_3.h \ ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_domain_with_polyline_features_3.h diff --git a/Mesh_3/examples/Mesh_3/CMakeLists.txt b/Mesh_3/examples/Mesh_3/CMakeLists.txt index 155ac2b00bd..a97ae6fcb26 100644 --- a/Mesh_3/examples/Mesh_3/CMakeLists.txt +++ b/Mesh_3/examples/Mesh_3/CMakeLists.txt @@ -133,23 +133,26 @@ else() message( STATUS "NOTICE: Some examples need the CGAL_ImageIO library, and will not be compiled." ) endif() -if(CGAL_ACTIVATE_CONCURRENT_MESH_3 AND TARGET CGAL::TBB_support AND TARGET ${target}) +if(CGAL_ACTIVATE_CONCURRENT_MESH_3 AND TARGET CGAL::TBB_support) foreach(target - mesh_3D_image_with_features mesh_3D_image - mesh_polyhedral_domain + mesh_3D_image_variable_size mesh_3D_image_with_custom_initialization - mesh_two_implicit_spheres_with_balls - mesh_optimization_lloyd_example - mesh_optimization_example + mesh_3D_image_with_features mesh_implicit_sphere - mesh_polyhedral_complex_sm mesh_implicit_sphere_variable_size - mesh_polyhedral_domain_sm - mesh_polyhedral_domain_with_lipschitz_sizing + mesh_optimization_example + mesh_optimization_lloyd_example mesh_polyhedral_complex + mesh_polyhedral_complex_sm + mesh_polyhedral_domain + mesh_polyhedral_domain_sm mesh_polyhedral_domain_with_features - mesh_3D_image_variable_size) - target_link_libraries(${target} PUBLIC CGAL::TBB_support) + mesh_polyhedral_domain_with_features_sm + mesh_polyhedral_domain_with_lipschitz_sizing + mesh_two_implicit_spheres_with_balls) + if(TARGET ${target}) + target_link_libraries(${target} PUBLIC CGAL::TBB_support) + endif() endforeach() endif() diff --git a/Mesh_3/include/CGAL/IO/File_medit.h b/Mesh_3/include/CGAL/IO/File_medit.h index 42501a7fd63..d8b949fb2c7 100644 --- a/Mesh_3/include/CGAL/IO/File_medit.h +++ b/Mesh_3/include/CGAL/IO/File_medit.h @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -893,6 +894,23 @@ output_to_medit(std::ostream& os, } } + +template +void write_MEDIT(std::ostream& os, const T3& t3) +{ + CGAL::Mesh_complex_3_in_triangulation_3 c3t3; + c3t3.triangulation() = t3; + c3t3.rescan_after_load_of_triangulation(); + output_to_medit(os, c3t3); +} + +template +bool read_MEDIT(std::istream& in, T3& t3) +{ + CGAL_assertion(!(!in)); + return CGAL::build_triangulation_from_file(in, t3); +} + } // end namespace CGAL #endif // CGAL_IO_FILE_MEDIT_H diff --git a/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h b/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h index b56c3793664..2c162e7cc61 100644 --- a/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h @@ -1224,8 +1224,8 @@ private: if(update_c3t3) { // Update status in c3t3 - if(surface != boost::none) - c3t3_.add_to_complex(facet, surface.get()); + if((bool)surface) + c3t3_.add_to_complex(facet, *surface); else c3t3_.remove_from_complex(facet); } @@ -1246,7 +1246,7 @@ private: } } - return surface; + return surface ? surface : Surface_patch(); } @@ -1572,10 +1572,17 @@ private: Cell_vector c3t3_cells(const Cell_vector& cells) const { Cell_vector c3t3_cells; +#ifdef CGAL_CXX17 + std::remove_copy_if(cells.begin(), + cells.end(), + std::back_inserter(c3t3_cells), + std::not_fn(Is_in_c3t3(c3t3_))); +#else std::remove_copy_if(cells.begin(), cells.end(), std::back_inserter(c3t3_cells), std::not1(Is_in_c3t3(c3t3_)) ); +#endif return c3t3_cells; } @@ -2047,7 +2054,7 @@ private: true); /* update surface centers */ // false means "do not update the c3t3" if ( c3t3_.is_in_complex(*fit) != (bool)sp || - ((bool)sp && !(c3t3_.surface_patch_index(*fit) == sp.get()) ) ) + ((bool)sp && !(c3t3_.surface_patch_index(*fit) == *sp) ) ) return false; } diff --git a/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h b/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h index df7a76cb2c2..954909113b6 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h +++ b/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h @@ -1155,6 +1155,7 @@ insert_balls(const Vertex_handle& vp, // n = 2(d-sq) / (sp+sq) // ======================= + const FT d_signF = static_cast(d_sign); int n = static_cast(std::floor(FT(2)*(d-sq) / (sp+sq))+.5); // if( minimal_weight_ != 0 && n == 0 ) return; @@ -1180,7 +1181,7 @@ insert_balls(const Vertex_handle& vp, const Bare_point new_point = domain_.construct_point_on_curve(cp(vp_wp), curve_index, - d_sign * d / 2); + d_signF * d / 2); const int dim = 1; // new_point is on edge const Index index = domain_.index_from_curve_index(curve_index); const FT point_weight = CGAL::square(size_(new_point, dim, index)); @@ -1230,7 +1231,6 @@ insert_balls(const Vertex_handle& vp, FT norm_step_size = dleft_frac * step_size; // Initial distance - FT d_signF = static_cast(d_sign); FT pt_dist = d_signF * norm_step_size; Vertex_handle prev = vp; const Bare_point& p = cp(c3t3_.triangulation().point(vp)); diff --git a/Mesh_3/include/CGAL/Mesh_3/tet_soup_to_c3t3.h b/Mesh_3/include/CGAL/Mesh_3/tet_soup_to_c3t3.h index 632d87a83d8..e7e8c6d87f3 100644 --- a/Mesh_3/include/CGAL/Mesh_3/tet_soup_to_c3t3.h +++ b/Mesh_3/include/CGAL/Mesh_3/tet_soup_to_c3t3.h @@ -105,13 +105,14 @@ bool build_finite_cells(Tr& tr, const std::vector& vertex_handle_vector, boost::unordered_map, std::vector > >& incident_cells_map, - const std::map, int>& border_facets, + const std::map, typename Tr::Cell::Surface_patch_index>& border_facets, const bool verbose) { typedef std::array Tet_with_ref; // 4 ids + 1 reference typedef typename Tr::Vertex_handle Vertex_handle; typedef typename Tr::Cell_handle Cell_handle; + typedef typename Tr::Cell::Surface_patch_index Surface_patch_index; CGAL_assertion_code( typename Tr::Geom_traits::Construct_point_3 cp = @@ -171,7 +172,8 @@ bool build_finite_cells(Tr& tr, ++k; } while(f[0] != n0); - typename std::map, int>::const_iterator it = border_facets.find(f); + typename std::map, Surface_patch_index>::const_iterator + it = border_facets.find(f); if(it != border_facets.end()) { c->set_surface_patch_index(j, it->second); @@ -186,7 +188,7 @@ bool build_finite_cells(Tr& tr, if(it != border_facets.end()) c->set_surface_patch_index(j, it->second); else - c->set_surface_patch_index(j, 0); + c->set_surface_patch_index(j, Surface_patch_index()); } } } @@ -259,6 +261,8 @@ bool build_infinite_cells(Tr& tr, // the only finite facet it->second.push_back(std::make_pair(opp_c, 0)); CGAL_assertion(it->second.size() == 2); + + opp_c->set_surface_patch_index(0, c->surface_patch_index(i)); } #ifdef CGAL_TET_SOUP_TO_C3T3_DEBUG @@ -322,7 +326,7 @@ template bool build_triangulation(Tr& tr, const std::vector& points, const std::vector >& finite_cells, - const std::map, int>& border_facets, + const std::map, typename Tr::Cell::Surface_patch_index>& border_facets, std::vector& vertex_handle_vector, const bool verbose = false) { @@ -389,7 +393,7 @@ bool build_triangulation_from_file(std::istream& is, std::vector finite_cells; std::vector points; - std::map border_facets; + std::map border_facets; // grab the vertices int dim; @@ -420,7 +424,8 @@ bool build_triangulation_from_file(std::istream& is, is >> nf; for(int i=0; i> n1 >> n2 >> n3 >> surface_patch_id; Facet facet; facet[0] = n1 - 1; diff --git a/Mesh_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h b/Mesh_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h index 5440b0c0d52..0eb11a1f3c6 100644 --- a/Mesh_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h +++ b/Mesh_3/include/CGAL/Mesh_complex_3_in_triangulation_3.h @@ -20,6 +20,7 @@ #include +#include #include #include #include @@ -38,8 +39,8 @@ namespace CGAL { template + typename CornerIndex, + typename CurveIndex> class Mesh_complex_3_in_triangulation_3 : public Mesh_3::Mesh_complex_3_in_triangulation_3_base< Tr, typename Tr::Concurrency_tag> diff --git a/Nef_3/include/CGAL/Nef_3/Bounding_box_3.h b/Nef_3/include/CGAL/Nef_3/Bounding_box_3.h index 50fe5ed0a48..cf295b5b8e2 100644 --- a/Nef_3/include/CGAL/Nef_3/Bounding_box_3.h +++ b/Nef_3/include/CGAL/Nef_3/Bounding_box_3.h @@ -73,17 +73,13 @@ public: } void extend(const Point_3& p) { - FT q[3]; - q[0] = p.x(); - q[1] = p.y(); - q[2] = p.z(); + FT q[3] = { p.x(), p.y(), p.z() }; if(initialized) Base::extend(q); else { initialized = true; - std::copy( q, q + 3, Base::lo ); - std::copy( q, q + 3, Base::hi ); + *this = Bounding_box_3(q); } } }; diff --git a/Nef_3/include/CGAL/Nef_3/SNC_constructor.h b/Nef_3/include/CGAL/Nef_3/SNC_constructor.h index 9f33a0991df..f93e584549d 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_constructor.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_constructor.h @@ -229,9 +229,10 @@ public: Vertex_handle v = this->sncp()->new_vertex(p , boundary); CGAL_NEF_TRACEN( v->point()); SM_decorator SD(&*v); - Sphere_point sp[] = { Sphere_point(NT(-x), 0, 0), - Sphere_point(0, NT(-y), 0), - Sphere_point(0, 0, NT(-z)) }; + const NT zero(0); + Sphere_point sp[] = { Sphere_point(NT(-x), zero, zero), + Sphere_point(zero, NT(-y), zero), + Sphere_point(zero, zero, NT(-z)) }; /* create box vertices */ SVertex_handle sv[3]; diff --git a/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h b/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h index 835afa81e99..5eee7528ee7 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h @@ -56,7 +56,8 @@ namespace Nef_3_internal{ BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_Exact_kernel,Exact_kernel,false) -template ::value, class FT = typename R::RT, class Kernel_tag=typename R::Kernel_tag> +template ::value && + !std::is_floating_point::value, class FT = typename R::RT, class Kernel_tag=typename R::Kernel_tag> struct Type_converter{ typedef const CGAL::Point_3& Point_3; typedef const CGAL::Vector_3& Vector_3; @@ -670,8 +671,9 @@ template class Geometry_io; template class Geometry_io { public: - template static - typename EK::Point_3 read_point(std::istream& in) { + + template static + typename EK::Point_3 read_point_impl(std::istream& in, Compose_) { typedef Fraction_traits FracTraits; typename FracTraits::Type hx, hy, hz, hw; typename FracTraits::Numerator_type num; @@ -688,8 +690,8 @@ class Geometry_io { return typename EK::Point_3(hx,hy,hz,hw); } - template static - typename EK::Plane_3 read_plane(std::istream& in) { + template static + typename EK::Plane_3 read_plane_impl(std::istream& in, Compose_) { typedef Fraction_traits FracTraits; typename FracTraits::Type a, b, c, d; typename FracTraits::Numerator_type num; @@ -706,8 +708,32 @@ class Geometry_io { return typename EK::Plane_3(a,b,c,d); } - template static - void print_point_impl(std::ostream& out, const CGAL::Point_3 p) { + template static + typename EK::Point_3 read_point_impl(std::istream& in, Null_functor) { + typename K::FT hx, hy, hz, hw; + in >> hx >> hy >> hz >> hw; + return typename EK::Point_3(hx,hy,hz,hw); + } + + template static + typename EK::Plane_3 read_plane_impl(std::istream& in, Null_functor) { + typename K::FT a, b, c, d; + in >> a >> b >> c >> d; + return typename EK::Plane_3(a,b,c,d); + } + + template static + typename EK::Point_3 read_point(std::istream& in) { + return read_point_impl(in, typename Fraction_traits::Compose()); + } + + template static + typename EK::Plane_3 read_plane(std::istream& in) { + return read_plane_impl(in, typename Fraction_traits::Compose()); + } + + template static + void print_point_impl(std::ostream& out, const CGAL::Point_3 p, Decompose_) { typedef Fraction_traits FracTraits; typedef std::vector NV; @@ -737,8 +763,8 @@ class Geometry_io { << vec[2] << " " << vec[3]; } - template static - void print_vector_impl(std::ostream& out, const CGAL::Vector_3 p) { + template static + void print_vector_impl(std::ostream& out, const CGAL::Vector_3 p, Decompose_) { typedef Fraction_traits FracTraits; typedef typename FracTraits::Numerator_type NumType; typedef std::vector NV; @@ -766,8 +792,8 @@ class Geometry_io { << vec[2] << " " << NumType(1); } - template static - void print_plane_impl(std::ostream& out, const CGAL::Plane_3 p) { + template static + void print_plane_impl(std::ostream& out, const CGAL::Plane_3 p, Decompose_) { typedef Fraction_traits FracTraits; typedef std::vector NV; @@ -803,19 +829,37 @@ class Geometry_io { << vec[2] << " " << vec[3]; } + template static + void print_point_impl(std::ostream& out, const CGAL::Point_3 p, Null_functor) + { + out << p.x() << " " << p.y() << " " << p.z() << " " << 1; + } + + template static + void print_vector_impl(std::ostream& out, const CGAL::Vector_3 v, Null_functor) + { + out << v.x() << " " << v.y() << " " << v.z() << " " << 1; + } + + template static + void print_plane_impl(std::ostream& out, const CGAL::Plane_3 p, Null_functor) + { + out << p.a() << " " << p.b() << " " << p.c() << " " << p.d(); + } + template static void print_point(std::ostream& out, const CGAL::Point_3& p) { - print_point_impl(out, Nef_3_internal::get_point(p) ); + print_point_impl(out, Nef_3_internal::get_point(p), typename Fraction_traits::Decompose() ); } template static void print_vector(std::ostream& out, const CGAL::Vector_3& v) { - print_vector_impl(out, Nef_3_internal::get_vector(v) ); + print_vector_impl(out, Nef_3_internal::get_vector(v), typename Fraction_traits::Decompose() ); } template static void print_plane(std::ostream& out, const CGAL::Plane_3& p) { - print_plane_impl(out, Nef_3_internal::get_plane(p) ); + print_plane_impl(out, Nef_3_internal::get_plane(p), typename Fraction_traits::Decompose() ); } }; diff --git a/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h b/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h index 966ac064b88..3b81b1119c0 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h @@ -563,7 +563,7 @@ public: Partial_facet pf; #endif bool hit = false; - Point_3 eor; // 'end of ray', the latest ray's hit point + Point_3 eor = CGAL::ORIGIN; // 'end of ray', the latest ray's hit point Objects_along_ray objects = candidate_provider->objects_along_ray(ray); Objects_along_ray_iterator objects_iterator = objects.begin(); while( !hit && objects_iterator != objects.end()) { diff --git a/Nef_3/test/Nef_3/CMakeLists.txt b/Nef_3/test/Nef_3/CMakeLists.txt index 2b8b1921f41..3bfee8a90ce 100644 --- a/Nef_3/test/Nef_3/CMakeLists.txt +++ b/Nef_3/test/Nef_3/CMakeLists.txt @@ -24,6 +24,7 @@ if ( CGAL_FOUND ) execution___of__test_nef_3_io_Cartesian execution___of__test_nef_3_io_Cartesian_Lazy execution___of__test_nef_3_io_EPEC + execution___of__test_nef_3_io_EPIC execution___of__test_nef_3_io_Homogeneous execution___of__test_nef_3_io_Homogenoeus_Lazy execution___of__test_with_extended_homogeneous diff --git a/Nef_3/test/Nef_3/test_nef_3_io_EPIC.cpp b/Nef_3/test/Nef_3/test_nef_3_io_EPIC.cpp new file mode 100644 index 00000000000..a5b68f14d17 --- /dev/null +++ b/Nef_3/test/Nef_3/test_nef_3_io_EPIC.cpp @@ -0,0 +1,57 @@ +#include + +#include +#include +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel EPEC; + +template +void test_write_read() +{ + typedef CGAL::Nef_polyhedron_3< Kernel > Nef_polyhedron; + typedef CGAL::Polyhedron_3< Kernel > Polyhedron; + typedef typename Kernel::Point_3 Point; + + typename Kernel::RT n, d; + std::istringstream str_n("5"); + str_n >> n; + std::istringstream str_d("1"); + str_d >> d; + + Point p(n, 0, 0, d); + Point q(0, n, 0, d); + Point r(0, 0, n, d); + Point s(0, 0, 0, 1); + + std::cout << " build...\n"; + Polyhedron P; + P.make_tetrahedron( p, q, r, s); + Nef_polyhedron nef_1( P ); + + std::cout << " write...\n"; + std::ofstream out ("temp.nef"); + out << std::setprecision(17) << nef_1; + out.close(); + + std::cout << " read...\n"; + std::ifstream in ("temp.nef"); + Nef_polyhedron nef_2; + in >> nef_2; + in.close(); + + std::cout << " check...\n"; + assert( nef_1 == nef_2); +} + +int main() +{ + std::cout << "Testing Exact_predicates_inexact_constructions_kernel\n"; + test_write_read(); + std::cout << "Testing Simple_cartesian\n"; + test_write_read>(); + + return 0; +} diff --git a/Number_types/include/CGAL/Exact_algebraic.h b/Number_types/include/CGAL/Exact_algebraic.h index c51b7a9cf23..8d4d1c8031b 100644 --- a/Number_types/include/CGAL/Exact_algebraic.h +++ b/Number_types/include/CGAL/Exact_algebraic.h @@ -49,12 +49,10 @@ typedef unspecified_type Exact_algebraic; #else // not DOXYGEN_RUNNING -#ifdef CGAL_USE_CORE - typedef CORE::Expr Exact_algebraic; -#endif - #ifdef CGAL_USE_LEDA typedef leda_real Exact_algebraic; +#elif defined CGAL_USE_CORE + typedef CORE::Expr Exact_algebraic; #endif #endif diff --git a/Number_types/test/Number_types/CMakeLists.txt b/Number_types/test/Number_types/CMakeLists.txt index 4f4cd1ab3b6..68ff96cb432 100644 --- a/Number_types/test/Number_types/CMakeLists.txt +++ b/Number_types/test/Number_types/CMakeLists.txt @@ -68,6 +68,7 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "to_interval_test.cpp" ) create_single_source_cgal_program( "unsigned.cpp" ) create_single_source_cgal_program( "utilities.cpp" ) + find_package( GMP ) if( GMP_FOUND ) create_single_source_cgal_program( "CORE_Expr_ticket_4296.cpp" ) find_package( MPFI ) diff --git a/Number_types/test/Number_types/Lazy_exact_nt_new.cpp b/Number_types/test/Number_types/Lazy_exact_nt_new.cpp index 7c603ad4b66..0f4d11d73d5 100644 --- a/Number_types/test/Number_types/Lazy_exact_nt_new.cpp +++ b/Number_types/test/Number_types/Lazy_exact_nt_new.cpp @@ -98,7 +98,8 @@ void test_lazy_exact_nt() { #ifdef CGAL_USE_CORE CGAL_assertion_code(typedef CGAL::Lazy_exact_nt T1;) CGAL_assertion_code(typedef CGAL::Lazy_exact_nt T2;) - CGAL_assertion_code(typedef CGAL::Coercion_traits CT;) + typedef CGAL::Coercion_traits CT; + CGAL_USE_TYPE(CT); CGAL_static_assertion((boost::is_same< typename CT::Are_implicit_interoperable,CGAL::Tag_false>::value)); CGAL_static_assertion((boost::is_same< typename CT::Are_explicit_interoperable,CGAL::Tag_false>::value)); #endif @@ -115,4 +116,3 @@ int main() { #endif return 0; } - diff --git a/Optimal_bounding_box/doc/Optimal_bounding_box/Doxyfile.in b/Optimal_bounding_box/doc/Optimal_bounding_box/Doxyfile.in index cdcca39a7c8..01d0768a767 100644 --- a/Optimal_bounding_box/doc/Optimal_bounding_box/Doxyfile.in +++ b/Optimal_bounding_box/doc/Optimal_bounding_box/Doxyfile.in @@ -5,18 +5,6 @@ EXTRACT_ALL = false HIDE_UNDOC_CLASSES = true WARN_IF_UNDOCUMENTED = true -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref OBB_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES EXPAND_AS_DEFINED = CGAL_BGL_NP_TEMPLATE_PARAMETERS \ diff --git a/Optimal_bounding_box/doc/Optimal_bounding_box/NamedParameters.txt b/Optimal_bounding_box/doc/Optimal_bounding_box/NamedParameters.txt deleted file mode 100644 index 9e6b25e2e70..00000000000 --- a/Optimal_bounding_box/doc/Optimal_bounding_box/NamedParameters.txt +++ /dev/null @@ -1,65 +0,0 @@ -/*! -\defgroup obb_namedparameters Named Parameters for the package Optimal Bounding Box -\ingroup PkgOptimalBoundingBoxRef - -In this package, the optional parameters of all functions are implemented as BGL optional -named parameters (see \ref BGLNamedParameters for more information on how to use them). -Since the parameters of the various functions defined in this package are redundant, -their long descriptions are centralized below. -The sequence of named parameters should start with `CGAL::parameters::`. -`CGAL::parameters::all_default()` can be used to indicate -that default values of optional named parameters must be used. - -In the following, we assume that the following types are provided as template parameters -of functions and classes. Note that, for some of these functions, -the type is more specific: -
    -
  • `PolygonMesh` is a model of the concept `FaceGraph`
  • . -
  • `GeomTraits` a geometric traits class in which constructions are performed and - predicates evaluated. Everywhere in this package, a \cgal `Kernel` fulfills the requirements.
  • -
- -The following named parameters, offered by the package \ref PkgBGL -(see \ref bgl_namedparameters), are used in this package: - -\cgalNPTableBegin -\cgalNPBegin{vertex_point_map} \anchor OBB_vertex_point_map -is the property map with the points associated to the vertices of the polygon mesh `pmesh`.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`GeomTraits::Point_3` as value type. \n -Default: \code boost::get(CGAL::vertex_point, pmesh) \endcode -\cgalNPEnd - -\cgalNPBegin{point_map} \anchor OBB_point_map - is the property map containing the points associated to the elements of the point range `points`.\n -Type: a class model of `ReadablePropertyMap` with `PointRange::iterator::value_type` as key type - and `geom_traits::Point_3` as value type. \n -Default: \code CGAL::Identity_property_map\endcode -\cgalNPEnd -\cgalNPTableEnd - -In addition to these named parameters, this package offers the following named parameters: - -\cgalNPTableBegin -\cgalNPBegin{geom_traits} \anchor OBB_geom_traits -is the geometric traits instance in which the mesh processing operation should be performed.\n -Type: a Geometric traits class.\n -Default: -\code typename CGAL::Kernel_traits< - typename boost::property_traits< - typename boost::property_map::type>::value_type>::Kernel \endcode -\cgalNPEnd - -\cgalNPBegin{use_convex_hull} \anchor OBB_use_convex_hull -Parameter used in the construction of oriented bounding box to indicate whether the algorithm should -first extract the extreme points (points that are on the 3D convex hull) of the input data range -to accelerate the computation of the bounding box. -\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPTableEnd - -*/ diff --git a/Optimal_bounding_box/doc/Optimal_bounding_box/Optimal_bounding_box.txt b/Optimal_bounding_box/doc/Optimal_bounding_box/Optimal_bounding_box.txt index 5e7c123b978..ced13ec7f3c 100644 --- a/Optimal_bounding_box/doc/Optimal_bounding_box/Optimal_bounding_box.txt +++ b/Optimal_bounding_box/doc/Optimal_bounding_box/Optimal_bounding_box.txt @@ -94,7 +94,7 @@ and is enabled by default. \subsection OBBInnOut Input and Output -The input can be a range of 3D points, or a mesh, with a variety of \ref obb_namedparameters "Named Parameters" +The input can be a range of 3D points, or a mesh, with a variety of \ref bgl_namedparameters "Named Parameters" enabling using further custom inputs. The result of the algorithm can be retrieved as: @@ -177,7 +177,7 @@ from the eight points. \subsection OBBExampleNP Using Named Parameters -The following example illustrates how to use \ref obb_namedparameters "Named Parameters" +The following example illustrates how to use \ref bgl_namedparameters "Named Parameters" to efficiently compute the oriented bounding box of a mesh whose vertices' positions are modified on the fly. diff --git a/Optimal_bounding_box/doc/Optimal_bounding_box/PackageDescription.txt b/Optimal_bounding_box/doc/Optimal_bounding_box/PackageDescription.txt index d06675df4c7..859f26d645a 100644 --- a/Optimal_bounding_box/doc/Optimal_bounding_box/PackageDescription.txt +++ b/Optimal_bounding_box/doc/Optimal_bounding_box/PackageDescription.txt @@ -35,7 +35,7 @@ \cgalCRPSection{Parameters} Optional parameters of the functions of this package are implemented as \ref BGLNamedParameters. -The page \ref obb_namedparameters describes their usage and provides a list of the parameters +The page \ref bgl_namedparameters describes their usage and provides a list of the parameters that are used in this package. \cgalCRPSection{Concepts} diff --git a/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h b/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h index cea95a73c30..7e78635807e 100644 --- a/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h +++ b/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h @@ -288,27 +288,34 @@ void construct_oriented_bounding_box(const PointRange& points, /// \tparam Output either the type `Aff_transformation_3` of the traits class, /// or `std::array` with `Point` being equivalent to the type `%Point_3` of the traits class, /// or a model of `MutableFaceGraph` -/// \tparam NamedParameters a sequence of \ref obb_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param points the input range /// \param out the resulting array of points or affine transformation -/// \param np an optional sequence of \ref obb_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{point_map} -/// a model of `ReadablePropertyMap` with value type the type `%Point_3` of the traits class. -/// If this parameter is omitted, `CGAL::Identity_property_map<%Point_3>` is used. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of the concept `OrientedBoundingBoxTraits_3`. -/// %Default is a default construction object of type `CGAL::Oriented_bounding_box_traits_3` -/// where `K` is a kernel type deduced from the point type. -/// \cgalParamEnd -/// \cgalParamBegin{use_convex_hull} -/// a Boolean value to indicate whether the algorithm should first extract the so-called extreme -/// points of the data range (i.e. construct the convex hull) to reduce the input data range -/// and accelerate the algorithm. %Default is `true`. -/// \cgalParamEnd +/// \cgalParamNBegin{point_map} +/// \cgalParamDescription{a property map associating points to the elements of the point range} +/// \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`} +/// \cgalParamDefault{`CGAL::Identity_property_map`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a model of `OrientedBoundingBoxTraits_3`} +/// \cgalParamDefault{a default-constructed object of type `CGAL::Oriented_bounding_box_traits_3`, +/// where `K` is a kernel type deduced from the point type.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{use_convex_hull} +/// \cgalParamDescription{Parameter used in the construction of oriented bounding box to indicate +/// whether the algorithm should first extract the extreme points (points +/// that are on the 3D convex hull) of the input data range +/// to accelerate the computation of the bounding box.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`true`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// template ` with `Point` being equivalent to the type `%Point_3` of the traits class, /// or a model of `MutableFaceGraph` -/// \tparam NamedParameters a sequence of \ref obb_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param pmesh the input mesh /// \param out the resulting array of points or affine transformation -/// \param np an optional sequence of \ref obb_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `pmesh`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` must be available in `PolygonMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of the concept `OrientedBoundingBoxTraits_3`. -/// %Default is a default construction object of type `CGAL::Oriented_bounding_box_traits_3` -/// where `K` is a kernel type deduced from the point type. -/// \cgalParamEnd -/// \cgalParamBegin{use_convex_hull} -/// a Boolean value to indicate whether the algorithm should first extract the so-called extreme -/// points of the data range (i.e. construct the convex hull) to reduce the input data range -/// and accelerate the algorithm. %Default is `true`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// should be available for the vertices of `pmesh`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a model of `OrientedBoundingBoxTraits_3`} +/// \cgalParamDefault{a default-constructed object of type `CGAL::Oriented_bounding_box_traits_3`, +/// where `K` is a kernel type deduced from the point type.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{use_convex_hull} +/// \cgalParamDescription{Parameter used in the construction of oriented bounding box to indicate +/// whether the algorithm should first extract the extreme points (points +/// that are on the 3D convex hull) of the input data range +/// to accelerate the computation of the bounding box.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`true`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// template class Construct_circulator_2 { public: + typedef Circulator result_type; Circulator operator()(Circulator p1) const { return p1; } }; diff --git a/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_Delaunay_triangulation_remove_traits_3.h b/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_Delaunay_triangulation_remove_traits_3.h index 1e856c3ade5..fa256044b3f 100644 --- a/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_Delaunay_triangulation_remove_traits_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_Delaunay_triangulation_remove_traits_3.h @@ -40,6 +40,14 @@ public: using Base::operator(); + template + struct result : Base::template result {}; + + template + struct result { + typedef const Point_3& type; + }; + const Point_3& operator()(const Point_3& p) const { return p; } }; diff --git a/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_regular_triangulation_remove_traits_3.h b/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_regular_triangulation_remove_traits_3.h index a3584d7aad1..170736ad58f 100644 --- a/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_regular_triangulation_remove_traits_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/internal/Periodic_3_regular_triangulation_remove_traits_3.h @@ -49,6 +49,14 @@ public: using Base::operator(); // for K::Weighted_point_3 to Point_3 + template + struct result : Base::template result {}; + + template + struct result { + typedef Point_3 type; + }; + Point_3 operator()(const Weighted_point_3& wp) const { return std::make_pair(operator()(wp.first), wp.second /* offset */); } diff --git a/Point_set_3/doc/Point_set_3/Doxyfile.in b/Point_set_3/doc/Point_set_3/Doxyfile.in index f8f68dc613a..7b3039d1612 100644 --- a/Point_set_3/doc/Point_set_3/Doxyfile.in +++ b/Point_set_3/doc/Point_set_3/Doxyfile.in @@ -1,14 +1,2 @@ @INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - 3D Point Set" - -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref PSP_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" diff --git a/Point_set_3/include/CGAL/Point_set_3.h b/Point_set_3/include/CGAL/Point_set_3.h index 571442b64c3..7a006c3d10a 100644 --- a/Point_set_3/include/CGAL/Point_set_3.h +++ b/Point_set_3/include/CGAL/Point_set_3.h @@ -947,13 +947,12 @@ public: /*! - \brief Returns a sequence of \ref psp_namedparameters "Named Parameters" for Point Set Processing algorithms. + \brief Returns a sequence of \ref bgl_namedparameters "Named Parameters" to be used in Point Set Processing algorithms. - \cgalNamedParamsBegin - \cgalParamBegin{point_map} contains the point map (see `point_map()`)\cgalParamEnd - \cgalParamBegin{normal_map} contains the normal map (see `normal_map()`)\cgalParamEnd - \cgalParamBegin{geom_traits} contains the kernel `typename Kernel_traits`::`Kernel`\cgalParamEnd - \cgalNamedParamsEnd + The following named parameters are used: + - `point_map`: contains the point property map (see `point_map()`) + - `normal_map`: contains the normal map (see `normal_map()`) + - `geom_traits`: contains the kernel `typename Kernel_traits`::`Kernel` \warning this method does not check if the normal map was instanciated or not. The normal map named parameter should not be diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Doxyfile.in b/Point_set_processing_3/doc/Point_set_processing_3/Doxyfile.in index 0cb964d6dbb..b29739e4e47 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Doxyfile.in +++ b/Point_set_processing_3/doc/Point_set_processing_3/Doxyfile.in @@ -3,17 +3,5 @@ PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - Point Set Processing" EXCLUDE_PATTERNS += property_map.h -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref PSP_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - EXPAND_AS_DEFINED = CGAL_BGL_NP_TEMPLATE_PARAMETERS \ - CGAL_BGL_NP_CLASS + CGAL_BGL_NP_CLASS diff --git a/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt b/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt deleted file mode 100644 index ba478f86b6f..00000000000 --- a/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt +++ /dev/null @@ -1,280 +0,0 @@ -/*! -\defgroup psp_namedparameters Named Parameters for Point Set Processing -\ingroup PkgPointSetProcessing3Ref - -In this package, all functions optional parameters are implemented as BGL optional named parameters (see \ref BGLNamedParameters for more information on how to use them). - -Since the parameters of the various point set processing functions defined in this -package are redundant, their long descriptions are centralized below. - -In the following, we assume that the following types are provided as template parameters of point set processing functions and classes. Note that, for some of these functions, the type is more specific. - -
    -
  • `PointRange` is a model of `Range`. The value type of its iterator is the key type of the related property maps (see below).
  • -
  • `GeomTraits` a geometric traits class in which constructions are performed and predicates evaluated. Everywhere in this package, a \cgal `Kernel` fulfills the requirements.
  • -
- -`CGAL::parameters::all_default()` can be used to indicate -that default values of optional named parameters must be used. - -Here is the list of the named parameters available in this package: - - -\cgalNPTableBegin -\cgalNPBegin{geom_traits} \anchor PSP_geom_traits - the geometric traits instance in which the point set processing operation should be performed.\n -\b Type: a Geometric traits class.\n -\b Default \b type: is -\code -typename CGAL::Kernel_traits::Kernel -\endcode -\cgalNPEnd - -\cgalNPBegin{point_map} \anchor PSP_point_map - is the property map containing the points associated to the elements of the point range `points`.\n -\b Type: a class model of `ReadablePropertyMap` with -`PointRange::iterator::value_type` as key type and -`geom_traits::Point_3` as value type. \n -Default value: \code CGAL::Identity_property_map\endcode -\cgalNPEnd - -\cgalNPBegin{normal_map} \anchor PSP_normal_map - is the property map containing the normal vectors associated to the elements of the point range `points`.\n -\b Type: a class model of `ReadablePropertyMap` with -`PointRange::iterator::value_type` as key type and -`geom_traits::Vector_3` as value type. \n -No default value. -\cgalNPEnd - -\cgalNPBegin{diagonalize_traits} \anchor PSP_diagonalize_traits - is the solver used for diagonalizing covariance matrices.\n -\b Type: a class model of `DiagonalizeTraits`.\n -\b Default: `CGAL::Eigen_diagonalize_traits` if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined.\n -\cgalNPEnd - -\cgalNPBegin{svd_traits} \anchor PSP_svd_traits - is the linear algebra algorithm required by the jet fitting method. For more information, please refer to the documentation of `CGAL::Monge_via_jet_fitting`.\n -\b Type: a class fitting the requirements of `CGAL::Monge_via_jet_fitting`.\n -\b Default: if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined, then `CGAL::Eigen_svd` is used.\n -\cgalNPEnd - -\cgalNPBegin{callback} \anchor PSP_callback -is a mechanism to get feedback on the advancement of the algorithm while it's running and to interrupt it if needed. It is called regularly when the algorithm is running: the current advancement (between 0. and 1.) is passed as parameter. If it returns `true`, then the algorithm continues its execution normally; if it returns `false`, the algorithm is stopped.\n -The callback will be copied and therefore needs to be lightweight.\n -Note that when a callback is run on a parallelized algorithm with `CGAL::Parallel_tag`, it is called asynchronously on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.\n -\b Type: `std::function`.\n -\b Default: empty function.\n -\cgalNPEnd - -\cgalNPBegin{query_point_map} \anchor PSP_query_point_map - is the property map containing the points associated to the elements of the point range `queries`.\n -\b Type: a class model of `ReadablePropertyMap` with -`PointRange::iterator::value_type` as key type and -`geom_traits::Point_3` as value type. \n -Default value: \code CGAL::Identity_property_map\endcode -\cgalNPEnd - - -\cgalNPBegin{sharpness_angle} \anchor PSP_sharpness_angle - controls the sharpness of the result. The larger the value is, the smoother the result will be. -The range of possible value is [0, 90].\n -\b Type: floating scalar value\n -Default value: `30.` -\cgalNPEnd - -\cgalNPBegin{edge_sensitivity} \anchor PSP_edge_sensitivity -controls the priority of points inserted along sharp features. Larger -values of edge-sensitivity give higher priority to inserting points -along sharp features. The range of possible values is `[0, 1]`. \n -\b Type: floating scalar value\n -Default value: `1`. -\cgalNPEnd - -\cgalNPBegin{neighbor_radius} \anchor PSP_neighbor_radius -is the spherical neighborhood radius.\n -\b Type: floating scalar value\n -Default value: `-1`, in which case it is not used. -\cgalNPEnd - -\cgalNPBegin{number_of_output_points} \anchor PSP_number_of_output_points -is the number of output points to generate.\n -\b Type: \c unsigned \c int \n -Default value: `1000` -\cgalNPEnd - -\cgalNPBegin{size} \anchor PSP_size -maximum cluster size for hierarchical clustering. Must be strictly greather than 0.\n -\b Type: \c unsigned \c int \n -Default value: `10` -\cgalNPEnd - -\cgalNPBegin{maximum_variation} \anchor PSP_maximum_variation -maximum cluster size for hierarchical clustering. Must be strictly greather than 0.\n -\b Type: \c unsigned \c int \n -Default value: `10` -\cgalNPEnd - -\cgalNPBegin{degree_fitting} \anchor PSP_degree_fitting - is the degree of fitting (see `CGAL::Monge_via_jet_fitting`).\n -\b Type: \c unsigned \c int \n -Default value: `2` -\cgalNPEnd - -\cgalNPBegin{degree_monge} \anchor PSP_degree_monge - is the Monge degree (see `CGAL::Monge_via_jet_fitting`).\n -\b Type: \c unsigned \c int \n -Default value: `2` -\cgalNPEnd - -\cgalNPBegin{threshold_distance} \anchor PSP_threshold_distance -is the minimum distance for a point to be considered as outlier -(distance here is the square root of the average squared distance to K nearest neighbors).\n -\b Type: floating scalar value\n -Default value: `0` -\cgalNPEnd - -\cgalNPBegin{threshold_percent} \anchor PSP_threshold_percent - is the maximum percentage (between 0 and 100) of points to remove in `remove_outliers()`.\n -\b Type: floating scalar value\n -Default value: `10` -\cgalNPEnd - -\cgalNPBegin{attraction_factor} \anchor PSP_attraction_factor -multiplication factor used for adjacency computations. -\b Type: floating scalar value\n -Default value: `3` -\cgalNPEnd - -\cgalNPBegin{plane_map} \anchor PSP_plane_map - is the property map containing the planes associated to the elements of the plane range `planes`.\n -\b Type: a class model of `ReadablePropertyMap` with -`PlaneRange::iterator::value_type` as key type and -`geom_traits::Plane_3` as value type. \n -Default value: \code CGAL::Identity_property_map\endcode -\cgalNPEnd - -\cgalNPBegin{plane_index_map} \anchor PSP_plane_index_map -is the property map that associates the index of a point in the input range to the index of plane (-1 if -point is not assigned to a plane).\n -\b Type: a class model of `ReadablePropertyMap` with -`std::size_t` as key type and -`int` as value type. \n -No default value. -\cgalNPEnd - -\cgalNPBegin{select_percentage} \anchor PSP_select_percentage -percentage of points to retain (between 0 and 100) in `wlop_simplify_and_regularize_point_set()`.\n -\b Type: floating scalar value\n -Default value: 5. -\cgalNPEnd - - -\cgalNPBegin{number_of_iterations} \anchor PSP_number_of_iterations -number of iterations to solve the optimsation problem in `wlop_simplify_and_regularize_point_set()`.\n -\b Type: \c unsigned \c int \n -Default value: 35. -\cgalNPEnd - -\cgalNPBegin{require_uniform_sampling} \anchor PSP_require_uniform_sampling -turn on or off an optional preprocessing of `wlop_simplify_and_regularize_point_set()`, which will -give better result if the distribution of the input points is highly non-uniform.\n -\b Type: `bool`\n -Default value: `false` -\cgalNPEnd - -\cgalNPBegin{point_is_constrained_map} \anchor PSP_point_is_constrained_map -is the property map containing information about points being constrained or not. -Constrained points are left unaltered and are used as seeds in `mst_orient_normals()`.\n -\b Type: a class model of `ReadablePropertyMap` with -`PointRange::iterator::value_type` as key type and -`bool` as value type. \n -Default value: a property map with only the highest point constrained. -\cgalNPEnd - -\cgalNPBegin{number_of_samples} \anchor PSP_number_of_samples -is the number of input points used for computation.\n -\b Type: \c unsigned \c int \n -Default value: `200` -\cgalNPEnd - -\cgalNPBegin{accuracy} \anchor PSP_accuracy -is the wanted output accuracy, expressed in scene units.\n -\b Type: floating scalar value\n -Default value: `5.00` -\cgalNPEnd - -\cgalNPBegin{maximum_normal_deviation} \anchor PSP_maximum_normal_deviation -is the maximum angle between the normals of a pair of points, expressed in degrees.\n -\b Type: floating scalar value\n -Default value: `90.00` -\cgalNPEnd - -\cgalNPBegin{overlap} \anchor PSP_overlap -is the expected overlap ratio (between 0 and 1) between two points sets to register.\n -\b Type: floating scalar value\n -Default value: `0.20` -\cgalNPEnd - -\cgalNPBegin{maximum_running_time} \anchor PSP_maximum_running_time -is the maximum time (in seconds) allowed to the function before ending and returning the best solution found so far.\n -\b Type: floating scalar value\n -Default value: `1000` -\cgalNPEnd - -\cgalNPBegin{transformation} \anchor PSP_transformation -is the transformation to be applied to the point set before the function starts to further process.\n -\b Type: Aff_transformation_3\n -No default value. -\cgalNPEnd - -\cgalNPBegin{point_set_filters} \anchor PSP_point_set_filters -is the chain of filters to be applied to the point set.\n -\b Type: a model of `Range` with `CGAL::pointmatcher::ICP_config` as value type.\n -No default value. -\cgalNPEnd - -\cgalNPBegin{matcher} \anchor PSP_matcher -is the method used for matching (linking) the point set to the reference point set.\n -\b Type: a model of `CGAL::pointmatcher::ICP_config`\n -No default value. -\cgalNPEnd - -\cgalNPBegin{outlier_filters} \anchor PSP_outlier_filters -is the chain of filters to be applied to the matched (linked) point set after each processing iteration of the registration to reject the outliers for the next iteration.\n -\b Type: a model of `Range` with `CGAL::pointmatcher::ICP_config` as value type.\n -No default value. -\cgalNPEnd - -\cgalNPBegin{error_minimizer} \anchor PSP_error_minimizer -is the error minimizer that computes a transformation matrix such as to minimize the error between the point sets in registration process.\n -\b Type: a model of `CGAL::pointmatcher::ICP_config`\n -No default value. -\cgalNPEnd - -\cgalNPBegin{transformation_checkers} \anchor PSP_transformation_checkers -is the chain of transformation checkers that can stop the iteration depending on the conditions it defines.\n -\b Type: a model of `Range` with `CGAL::pointmatcher::ICP_config` as value type.\n -No default value. -\cgalNPEnd - -\cgalNPBegin{inspector} \anchor PSP_inspector -is the inspector that allows to log data at different steps of the running algorithm to allow analysis.\n -\b Type: a model of `CGAL::pointmatcher::ICP_config`\n -No default value. -\cgalNPEnd - -\cgalNPBegin{logger} \anchor PSP_logger -is for logging information regarding the process.\n -\b Type: a model of `CGAL::pointmatcher::ICP_config`\n -No default value. - -\cgalNPBegin{adjacencies} \anchor PSP_adjacencies -is an output iterator used to store adjacencies.\n -\b Type: a class model of `OutputIterator` that accepts objects of -type `std::pair`. \n -Default value: `CGAL::Emptyset_iterator`. -\cgalNPEnd - -\cgalNPTableEnd - -*/ diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index 6cb72a014bf..514afa2b06c 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -68,8 +68,7 @@ on how to upgrade from the outdated API. Named parameters are used to deal with optional parameters. The page \ref BGLNamedParameters explains the rationale and API in general. -The page \ref psp_namedparameters describes their usage -and provides a list of the parameters that are used in this package. +The page \ref bgl_namedparameters describes their usage. \subsection Point_set_processing_3PropertyMaps Property Maps @@ -172,8 +171,7 @@ The following functions are available: All of these functions (with the exception of the LAS format) can read and write either points alone or points with normals (depending on -whether the [normal_map](@ref PSP_normal_map) is provided by the user -or not). +whether the `normal_map` named parameter is used by the user or not). Note that the %PLY format handles both ASCII and binary formats. In addition, %PLY and %LAS are extensible formats that can embed additional diff --git a/Point_set_processing_3/include/CGAL/IO/read_las_points.h b/Point_set_processing_3/include/CGAL/IO/read_las_points.h index 34a5daf30b6..0cb5779a65c 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_las_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_las_points.h @@ -428,12 +428,20 @@ bool read_las_points_with_properties (std::istream& stream, \param stream input stream. \param output output iterator over points. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `WritablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `WritablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/IO/read_off_points.h b/Point_set_processing_3/include/CGAL/IO/read_off_points.h index c3f6beab6e7..9a99ce47ae9 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_off_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_off_points.h @@ -45,15 +45,26 @@ namespace CGAL { \param stream input stream. \param output output iterator over points. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `WritablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`. If this parameter is omitted, normals in the input stream are - ignored.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `WritablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing range} + \cgalParamType{a model of `ReadWritePropertyMap` with value type `geom_traits::Vector_3`} + \cgalParamDefault{If this parameter is omitted, normals in the input stream are ignored.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/IO/read_ply_points.h b/Point_set_processing_3/include/CGAL/IO/read_ply_points.h index 2e45e550bdf..5588f2f1cf2 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_ply_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_ply_points.h @@ -201,15 +201,26 @@ bool read_ply_points_with_properties (std::istream& stream, \param stream input stream. \param output output iterator over points. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `WritablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`. If this parameter is omitted, normals in the input stream are - ignored.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `WritablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing range} + \cgalParamType{a model of `ReadWritePropertyMap` with value type `geom_traits::Vector_3`} + \cgalParamDefault{If this parameter is omitted, normals in the input stream are ignored.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h b/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h index 7858e47fdf0..425b5b18b65 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h @@ -44,15 +44,26 @@ namespace CGAL { \param stream input stream. \param output output iterator over points. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `WritablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`. If this parameter is omitted, normals in the input stream are - ignored.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `WritablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing range} + \cgalParamType{a model of `ReadWritePropertyMap` with value type `geom_traits::Vector_3`} + \cgalParamDefault{If this parameter is omitted, normals in the input stream are ignored.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/IO/write_las_points.h b/Point_set_processing_3/include/CGAL/IO/write_las_points.h index d6d19c983d8..92d142d20a8 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_las_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_las_points.h @@ -254,12 +254,19 @@ bool write_las_points_with_properties (std::ostream& stream, ///< output stream \param stream output stream. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/IO/write_off_points.h b/Point_set_processing_3/include/CGAL/IO/write_off_points.h index 06574809fbe..eb27f03740b 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_off_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_off_points.h @@ -40,15 +40,26 @@ namespace CGAL { \param stream output stream. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd If this parameter is omitted, normals are not written to the - output stream.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Vector_3`} + \cgalParamDefault{If this parameter is omitted, normals are not written in the output stream.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return `true` on success. diff --git a/Point_set_processing_3/include/CGAL/IO/write_ply_points.h b/Point_set_processing_3/include/CGAL/IO/write_ply_points.h index de3db9eca9c..1511bd98050 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_ply_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_ply_points.h @@ -159,15 +159,26 @@ write_ply_points_with_properties( \param stream output stream. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd If this parameter is omitted, normals are not written to the - output stream.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Vector_3`} + \cgalParamDefault{If this parameter is omitted, normals are not written in the output stream.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h b/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h index 8db038d78ea..42457b28e33 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h @@ -40,15 +40,26 @@ namespace CGAL { \param stream output stream. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd If this parameter is omitted, normals are not written to the - output stream.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing range} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Vector_3`} + \cgalParamDefault{If this parameter is omitted, normals are not written in the output stream.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return true on success. diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 152f577fdb1..70ae12f7217 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -169,84 +169,117 @@ compute_registration_transformation(const PointRange1& range1, const PointRan \param point_set_1 input point range used as reference. \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. - \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange1` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange1` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd - \cgalParamBegin{number_of_samples} size of the subset of input points used - to compute registration. Input clouds are sub-sampled prior exploration, - to ensure fast computations. Super4PCS has a linear complexity w.r.t. the - number of input samples, allowing to use larger values than 4PCS. Simple - geometry with large overlap can be matched with only 200 samples. However, - with Super4PCS, smaller details can be used during the process by using up - to thousands of points. There is no theoretical limit to this parameter, - however using too large values leads to very a large congruent set, which - requires more time and memory to be explored. Using a large number of - samples is recommended when: geometrical details are required to perform - the matching, for instance to disambiguate between several similar - configurations; the clouds have a very low overlap: using a too sparse - sampling can prevent to have samples in the overlapping area, causing the - algorithm to fail; the clouds are very noisy, and require a dense - sampling. Note that Super4PCS is a global registration algorithm, which - finds a good approximate of the rigid transformation aligning too - clouds. Increasing the number of samples in order to get a fine - registration is not optimal: it is usually faster to use less samples, and - refine the transformation using a local algorithm, like the ICP, or its - variant SparseICP.\cgalParamEnd + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Vector_3`} + \cgalParamDefault{Normals are computed and stored internally.} + \cgalParamNEnd - \cgalParamBegin{maximum_normal_deviation} angle threshold (in - degrees) used to filter pairs of points according to their normal - consistency. Small values decrease computation time but may also - decrease the quality if pairs of points that should match have - a normal deviation higher than the threshold.\cgalParamEnd + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd - \cgalParamBegin{accuracy} registration accuracy (delta in the - paper). Setting a small value means that the two clouds needs to be very - close to be considered as well aligned. It is expressed in scene units. A - simple way to understand its impact is to consider the computation of the - Largest Common Pointset (LCP), the metric used to verify how much the - clouds are aligned. For each transformation matrix produced by Super4PCS, - we compute the LCP measure by considering a shell around the reference - cloud, and count the percentage of points of the target cloud lying in the - shell. The thickness of the shell is defined by the parameter - delta.\cgalParamEnd + \cgalParamNBegin{number_of_samples} + \cgalParamDescription{size of the subset of input points used to compute registration} + \cgalParamType{unsigned int} + \cgalParamDefault{`200`} + \cgalParamExtra{Input clouds are sub-sampled prior exploration, to ensure fast computations. + Super4PCS has a linear complexity w.r.t. the number of input samples, + allowing to use larger values than 4PCS. Simple geometry with large overlap + can be matched with only 200 samples. However, with Super4PCS, smaller details + can be used during the process by using up to thousands of points. + There is no theoretical limit to this parameter, however using too large values + leads to very a large congruent set, which requires more time and memory + to be explored. Using a large number of samples is recommended when: + geometrical details are required to perform the matching, for instance + to disambiguate between several similar configurations; the clouds + have a very low overlap: using a too sparse sampling can prevent + to have samples in the overlapping area, causing the algorithm to fail; + the clouds are very noisy, and require a dense sampling. + Note that Super4PCS is a global registration algorithm, which + finds a good approximate of the rigid transformation aligning too + clouds. Increasing the number of samples in order to get a fine + registration is not optimal: it is usually faster to use less samples, and + refine the transformation using a local algorithm, like the ICP, or its + variant SparseICP.} + \cgalParamNEnd - \cgalParamBegin{overlap} ratio of expected overlap between the two point - sets: it is ranging between 0 (no overlap) to 1 (100% overlap). The - overlap parameter controls the size of the basis used for - registration. Usually, the larger the overlap, the faster the - algorithm. When the overlap is unknown, a simple way to set this parameter - is to start from 100% overlap, and decrease the value until obtaining a - good result. Using too small values will slow down the algorithm, and - reduce the accuracy of the result.\cgalParamEnd + \cgalParamNBegin{maximum_normal_deviation} + \cgalParamDescription{angle threshold (in degrees) used to filter pairs of points + according to their normal consistency} + \cgalParamType{floating scalar value} + \cgalParamDefault{`90.00`} + \cgalParamExtra{Small values decrease computation time but may also decrease the quality + if pairs of points that should match have a normal deviation higher than the threshold.} + \cgalParamNEnd - \cgalParamBegin{maximum_running_time} maximum number of seconds after - which the algorithm stops. Super4PCS explores the transformation space to - align the two input clouds. Since the exploration is performed randomly, - it is recommended to use a large time value to explore the whole space. - \cgalParamEnd + \cgalParamNBegin{accuracy} + \cgalParamDescription{registration accuracy (delta in the paper)} + \cgalParamType{floating scalar value} + \cgalParamDefault{`5.00`} + \cgalParamExtra{Setting a small value means that the two clouds needs to be very + close to be considered as well aligned. It is expressed in scene units. A + simple way to understand its impact is to consider the computation of the + Largest Common Pointset (LCP), the metric used to verify how much the + clouds are aligned. For each transformation matrix produced by Super4PCS, + we compute the LCP measure by considering a shell around the reference + cloud, and count the percentage of points of the target cloud lying in the + shell. The thickness of the shell is defined by the parameter + delta.} + \cgalParamNEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, - model of `Kernel`\cgalParamEnd + \cgalParamNBegin{overlap} + \cgalParamDescription{ratio of expected overlap between the two point sets: + it is ranging between `0` (no overlap) to `1` (100% overlap)} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0.20`} + \cgalParamExtra{The overlap parameter controls the size of the basis used for + registration. Usually, the larger the overlap, the faster the + algorithm. When the overlap is unknown, a simple way to set this parameter + is to start from 100% overlap, and decrease the value until obtaining a + good result. Using too small values will slow down the algorithm, and + reduce the accuracy of the result.} + \cgalParamNEnd + + \cgalParamNBegin{maximum_running_time} + \cgalParamDescription{maximum number of seconds after which the algorithm terminates.} + \cgalParamType{floating scalar value} + \cgalParamDefault{`1000`} + \cgalParamExtra{Super4PCS explores the transformation space to align the two input clouds. + Since the exploration is performed randomly, it is recommended + to use a large time value to explore the whole space.} + \cgalParamNEnd \cgalNamedParamsEnd - \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange2` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange2` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Vector_3`} + \cgalParamDefault{Normals are computed and stored internally.} + \cgalParamNEnd \cgalNamedParamsEnd \return a pair containing the affine transformation that should be applied diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 0fa48a907ba..4fbbb195882 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -90,84 +90,117 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, \param point_set_1 input point range used as reference. \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. - \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange1` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange1` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd - \cgalParamBegin{number_of_samples} size of the subset of input points used - to compute registration. Input clouds are sub-sampled prior exploration, - to ensure fast computations. Super4PCS has a linear complexity w.r.t. the - number of input samples, allowing to use larger values than 4PCS. Simple - geometry with large overlap can be matched with only 200 samples. However, - with Super4PCS, smaller details can be used during the process by using up - to thousands of points. There is no theoretical limit to this parameter, - however using too large values leads to very a large congruent set, which - requires more time and memory to be explored. Using a large number of - samples is recommended when: geometrical details are required to perform - the matching, for instance to disambiguate between several similar - configurations; the clouds have a very low overlap: using a too sparse - sampling can prevent to have samples in the overlapping area, causing the - algorithm to fail; the clouds are very noisy, and require a dense - sampling. Note that Super4PCS is a global registration algorithm, which - finds a good approximate of the rigid transformation aligning too - clouds. Increasing the number of samples in order to get a fine - registration is not optimal: it is usually faster to use less samples, and - refine the transformation using a local algorithm, like the ICP, or its - variant SparseICP.\cgalParamEnd + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Vector_3`} + \cgalParamDefault{Normals are computed and stored internally.} + \cgalParamNEnd - \cgalParamBegin{accuracy} registration accuracy (delta in the - paper). Setting a small value means that the two clouds needs to be very - close to be considered as well aligned. It is expressed in scene units. A - simple way to understand its impact is to consider the computation of the - Largest Common Pointset (LCP), the metric used to verify how much the - clouds are aligned. For each transformation matrix produced by Super4PCS, - we compute the LCP measure by considering a shell around the reference - cloud, and count the percentage of points of the target cloud lying in the - shell. The thickness of the shell is defined by the parameter - delta.\cgalParamEnd + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd - \cgalParamBegin{maximum_normal_deviation} angle threshold (in - degrees) used to filter pairs of points according to their normal - consistency. Small values decrease computation time but may also - decrease the quality if pairs of points that should match have - a normal deviation higher than the threshold.\cgalParamEnd + \cgalParamNBegin{number_of_samples} + \cgalParamDescription{size of the subset of input points used to compute registration} + \cgalParamType{unsigned int} + \cgalParamDefault{`200`} + \cgalParamExtra{Input clouds are sub-sampled prior exploration, to ensure fast computations. + Super4PCS has a linear complexity w.r.t. the number of input samples, + allowing to use larger values than 4PCS. Simple geometry with large overlap + can be matched with only 200 samples. However, with Super4PCS, smaller details + can be used during the process by using up to thousands of points. + There is no theoretical limit to this parameter, however using too large values + leads to very a large congruent set, which requires more time and memory + to be explored. Using a large number of samples is recommended when: + geometrical details are required to perform the matching, for instance + to disambiguate between several similar configurations; the clouds + have a very low overlap: using a too sparse sampling can prevent + to have samples in the overlapping area, causing the algorithm to fail; + the clouds are very noisy, and require a dense sampling. + Note that Super4PCS is a global registration algorithm, which + finds a good approximate of the rigid transformation aligning too + clouds. Increasing the number of samples in order to get a fine + registration is not optimal: it is usually faster to use less samples, and + refine the transformation using a local algorithm, like the ICP, or its + variant SparseICP.} + \cgalParamNEnd - \cgalParamBegin{overlap} ratio of expected overlap between the two point - sets: it is ranging between 0 (no overlap) to 1 (100% overlap). The - overlap parameter controls the size of the basis used for - registration. Usually, the larger the overlap, the faster the - algorithm. When the overlap is unknown, a simple way to set this parameter - is to start from 100% overlap, and decrease the value until obtaining a - good result. Using too small values will slow down the algorithm, and - reduce the accuracy of the result.\cgalParamEnd + \cgalParamNBegin{maximum_normal_deviation} + \cgalParamDescription{angle threshold (in degrees) used to filter pairs of points + according to their normal consistency} + \cgalParamType{floating scalar value} + \cgalParamDefault{`90.00`} + \cgalParamExtra{Small values decrease computation time but may also decrease the quality + if pairs of points that should match have a normal deviation higher than the threshold.} + \cgalParamNEnd - \cgalParamBegin{maximum_running_time} maximum number of seconds after - which the algorithm stops. Super4PCS explores the transformation space to - align the two input clouds. Since the exploration is performed randomly, - it is recommended to use a large time value to explore the whole space. - \cgalParamEnd + \cgalParamNBegin{accuracy} + \cgalParamDescription{registration accuracy (delta in the paper)} + \cgalParamType{floating scalar value} + \cgalParamDefault{`5.00`} + \cgalParamExtra{Setting a small value means that the two clouds needs to be very + close to be considered as well aligned. It is expressed in scene units. A + simple way to understand its impact is to consider the computation of the + Largest Common Pointset (LCP), the metric used to verify how much the + clouds are aligned. For each transformation matrix produced by Super4PCS, + we compute the LCP measure by considering a shell around the reference + cloud, and count the percentage of points of the target cloud lying in the + shell. The thickness of the shell is defined by the parameter + delta.} + \cgalParamNEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, - model of `Kernel`\cgalParamEnd + \cgalParamNBegin{overlap} + \cgalParamDescription{ratio of expected overlap between the two point sets: + it is ranging between `0` (no overlap) to `1` (100% overlap)} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0.20`} + \cgalParamExtra{The overlap parameter controls the size of the basis used for + registration. Usually, the larger the overlap, the faster the + algorithm. When the overlap is unknown, a simple way to set this parameter + is to start from 100% overlap, and decrease the value until obtaining a + good result. Using too small values will slow down the algorithm, and + reduce the accuracy of the result.} + \cgalParamNEnd + + \cgalParamNBegin{maximum_running_time} + \cgalParamDescription{maximum number of seconds after which the algorithm terminates.} + \cgalParamType{floating scalar value} + \cgalParamDefault{`1000`} + \cgalParamExtra{Super4PCS explores the transformation space to align the two input clouds. + Since the exploration is performed randomly, it is recommended + to use a large time value to explore the whole space.} + \cgalParamNEnd \cgalNamedParamsEnd - \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange2` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange2` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the poing set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Vector_3`} + \cgalParamDefault{Normals are computed and stored internally.} + \cgalParamNEnd \cgalNamedParamsEnd \return the registration score. diff --git a/Point_set_processing_3/include/CGAL/bilateral_smooth_point_set.h b/Point_set_processing_3/include/CGAL/bilateral_smooth_point_set.h index cd208ce0b41..420f8ecb833 100644 --- a/Point_set_processing_3/include/CGAL/bilateral_smooth_point_set.h +++ b/Point_set_processing_3/include/CGAL/bilateral_smooth_point_set.h @@ -194,28 +194,62 @@ compute_max_spacing( \param points input point range. \param k size of the neighborhood for the implicit surface patch fitting. The larger the value is, the smoother the result will be. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadWritePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood radius. If - provided, the neighborhood of a query point is computed with a fixed spherical - radius instead of a fixed number of neighbors. In that case, the parameter - `k` is used as a limit on the number of points returned by each spherical - query (to avoid overly large number of points in high density areas). If no - limit is wanted, use `k=0`.\cgalParamEnd - \cgalParamBegin{sharpness_angle} controls the sharpness of the result.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped, all points are left unchanged - and the function return `NaN`.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamDefault{Normals are computed and stored internally.} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{sharpness_angle} + \cgalParamDescription{controls the sharpness of the result} + \cgalParamType{floating scalar value} + \cgalParamDefault{`30`} + \cgalParamExtra{The larger the value is, the smoother the result will be. + The range of possible value is `[0, 90]`} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped, all points are left unchanged + and the function return `NaN`.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamExtra{When `CGAL::Parallel_tag` is used, the `callback` mechanism is called asynchronously + on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return Average point movement error. It's a convergence criterium for the algorithm. diff --git a/Point_set_processing_3/include/CGAL/cluster_point_set.h b/Point_set_processing_3/include/CGAL/cluster_point_set.h index 9e9fbaf3a39..3266398c3ef 100644 --- a/Point_set_processing_3/include/CGAL/cluster_point_set.h +++ b/Point_set_processing_3/include/CGAL/cluster_point_set.h @@ -73,32 +73,57 @@ CGAL::Emptyset_iterator get_adjacencies (const NamedParameters&, CGAL::Emptyset_ \param points input point range. \param cluster_map maps each point to the index of the cluster it belongs to. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below. \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped and the number of already - computed clusters is returned.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood - radius. If no value is provided, the default value is 1% of the - bounding box diagonal.\cgalParamEnd - \cgalParamBegin{attraction_factor} used to compute adjacencies - between clusters. Adjacencies are computed using a nearest - neighbor graph built similarly to the one used for clustering, - using `attraction_factor * neighbor_radius` as - parameter. %Default value is `2`.\cgalParamEnd - \cgalParamBegin{adjacencies} model of `OutputIterator` that - accepts objects of type `std::pair`. Each pair contains the indices of two adjacent - clusters. If this parameter is not used, adjacencies are not - computed at all.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped and the number of already + computed clusters is returned.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`1` percent of the bounding box diagonal} + \cgalParamNEnd + + \cgalParamNBegin{attraction_factor} + \cgalParamDescription{used to compute adjacencies between clusters. + Adjacencies are computed using a nearest neighbor graph built similarly + to the one used for clustering, using `attraction_factor * neighbor_radius` as + parameter.} + \cgalParamType{floating scalar value} + \cgalParamDefault{`2`} + \cgalParamNEnd + + \cgalParamNBegin{adjacencies} + \cgalParamDescription{an output iterator used to output pairs containing the indices of two adjacent clusters.} + \cgalParamType{a model of `OutputIterator` that accepts objects of type `std::pair`} + \cgalParamDefault{`CGAL::Emptyset_iterator`} + \cgalParamExtra{If this parameter is not used, adjacencies are not computed at all.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return the number of clusters identified. diff --git a/Point_set_processing_3/include/CGAL/compute_average_spacing.h b/Point_set_processing_3/include/CGAL/compute_average_spacing.h index 968c60f1242..bb66e4b5ef9 100644 --- a/Point_set_processing_3/include/CGAL/compute_average_spacing.h +++ b/Point_set_processing_3/include/CGAL/compute_average_spacing.h @@ -112,23 +112,41 @@ compute_average_spacing(const typename NeighborQuery::Kernel::Point_3& query, // \param points input point range. \param k number of neighbors. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped and the average spacing value - estimated on the processed subset is returned.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped, the average spacing value estimated + on the processed subset is returned.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamExtra{When `CGAL::Parallel_tag` is used, the `callback` mechanism is called asynchronously + on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return average spacing (scalar). The return type `FT` is a number type. It is - either deduced from the `geom_traits` \ref psp_namedparameters "Named Parameters" if provided, + either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, or the geometric traits class deduced from the point property map of `points`. */ diff --git a/Point_set_processing_3/include/CGAL/edge_aware_upsample_point_set.h b/Point_set_processing_3/include/CGAL/edge_aware_upsample_point_set.h index 40e96a67964..57f0c12154f 100644 --- a/Point_set_processing_3/include/CGAL/edge_aware_upsample_point_set.h +++ b/Point_set_processing_3/include/CGAL/edge_aware_upsample_point_set.h @@ -291,21 +291,61 @@ update_new_point( \param points input point range. \param output iterator where output points and normals are put. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{sharpness_angle} controls the sharpness of the result.\cgalParamEnd - \cgalParamBegin{edge_sensitivity} controls the priority of points inserted along sharp features. See - section \ref Point_set_processing_3Upsample_Parameter1 for an example.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood radius.\cgalParamEnd - \cgalParamBegin{number_of_output_points} is the number of output points to generate.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd - \cgalNamedParamsEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{sharpness_angle} + \cgalParamDescription{controls the sharpness of the result} + \cgalParamType{floating scalar value} + \cgalParamDefault{`30.00`} + \cgalParamExtra{The larger the value is, the smoother the result will be. + The range of possible value is `[0, 90]`} + \cgalParamNEnd + + \cgalParamNBegin{edge_sensitivity} + \cgalParamDescription{controls the priority of points inserted along sharp features} + \cgalParamType{floating scalar value} + \cgalParamDefault{`1`} + \cgalParamExtra{Larger values of edge-sensitivity give higher priority to inserting points + along sharp features. The range of possible values is `[0, 1]`. + See section \ref Point_set_processing_3Upsample_Parameter1 for an example} + \cgalParamNEnd + + \cgalParamNBegin{number_of_output_points} + \cgalParamDescription{the number of output points to generate} + \cgalParamType{unsigned int} + \cgalParamDefault{`1000`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd + \cgalNamedParamsEnd */ template = 0 &&edge_sensitivity <= 1); - CGAL_point_set_processing_precondition(neighbor_radius > 0); edge_sensitivity *= 10; // just project [0, 1] to [0, 10]. diff --git a/Point_set_processing_3/include/CGAL/estimate_scale.h b/Point_set_processing_3/include/CGAL/estimate_scale.h index 235cba83c27..b893795e051 100644 --- a/Point_set_processing_3/include/CGAL/estimate_scale.h +++ b/Point_set_processing_3/include/CGAL/estimate_scale.h @@ -452,22 +452,30 @@ public: \param points input point range. \param queries range of locations where scale must be estimated \param output iterator to store the computed scales - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with - value type `geom_traits::Point_3` (or `geom_traits::Point_2`). - If this parameter is omitted, - `CGAL::Identity_property_map` (or - `CGAL::Identity_property_map`) is - used.\cgalParamEnd - \cgalParamBegin{query_point_map} a model of `ReadablePropertyMap` with - value type `geom_traits::Point_3` (or `geom_traits::Point_2`). - If this parameter is omitted, - `CGAL::Identity_property_map` (or - `CGAL::Identity_property_map`) is - used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3` + (or `geom_traits::Point_2`)} + \cgalParamDefault{`CGAL::Identity_property_map` (or + `CGAL::Identity_property_map`)} + \cgalParamNEnd + + \cgalParamNBegin{query_point_map} + \cgalParamDescription{the property map containing the points associated to the elements of the point range `queries`} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3` (or `geom_traits::Point_2`)} + \cgalParamDefault{`CGAL::Identity_property_map` (or + `CGAL::Identity_property_map`)} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \note This function accepts both 2D and 3D points, but sample @@ -539,16 +547,23 @@ estimate_local_k_neighbor_scales( its iterator is the key type of the named parameter `point_map`. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with - value type `geom_traits::Point_3` (or `geom_traits::Point_2`). - If this parameter is omitted, - `CGAL::Identity_property_map` (or - `CGAL::Identity_property_map`) is - used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3` + (or `geom_traits::Point_2`)} + \cgalParamDefault{`CGAL::Identity_property_map` (or + `CGAL::Identity_property_map`)} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \note This function accepts both 2D and 3D points. @@ -605,22 +620,30 @@ estimate_global_k_neighbor_scale(const PointRange& points) \param points input point range. \param queries range of locations where scale must be estimated \param output iterator to store the computed scales - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with - value type `geom_traits::Point_3` (or `geom_traits::Point_2`). - If this parameter is omitted, - `CGAL::Identity_property_map` (or - `CGAL::Identity_property_map`) is - used.\cgalParamEnd - \cgalParamBegin{query_point_map} a model of `ReadablePropertyMap` with - value type `geom_traits::Point_3` (or `geom_traits::Point_2`). - If this parameter is omitted, - `CGAL::Identity_property_map` (or - `CGAL::Identity_property_map`) is - used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3` + (or `geom_traits::Point_2`)} + \cgalParamDefault{`CGAL::Identity_property_map` (or + `CGAL::Identity_property_map`)} + \cgalParamNEnd + + \cgalParamNBegin{query_point_map} + \cgalParamDescription{the property map containing the points associated to the elements of the point range `queries`} + \cgalParamType{a model of `ReadablePropertyMap` with value type `geom_traits::Point_3` (or `geom_traits::Point_2`)} + \cgalParamDefault{`CGAL::Identity_property_map` (or + `CGAL::Identity_property_map`)} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \note This function accepts both 2D and 3D points, but sample @@ -692,22 +715,29 @@ estimate_local_range_scales( its iterator is the key type of the named parameter `point_map`. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with - value type `geom_traits::Point_3` (or `geom_traits::Point_2`). - If this parameter is omitted, - `CGAL::Identity_property_map` (or - `CGAL::Identity_property_map`) is - used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3` + (or `geom_traits::Point_2`)} + \cgalParamDefault{`CGAL::Identity_property_map` (or + `CGAL::Identity_property_map`)} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \note This function accepts both 2D and 3D points. \return The estimated scale in the range sense. The return type `FT` is a number type. It is - either deduced from the `geom_traits` \ref psp_namedparameters "Named Parameters" if provided, + either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, or the geometric traits class deduced from the point property map of `points`. */ diff --git a/Point_set_processing_3/include/CGAL/grid_simplify_point_set.h b/Point_set_processing_3/include/CGAL/grid_simplify_point_set.h index 38c11505e6d..ab8044a17fd 100644 --- a/Point_set_processing_3/include/CGAL/grid_simplify_point_set.h +++ b/Point_set_processing_3/include/CGAL/grid_simplify_point_set.h @@ -175,19 +175,34 @@ public: \param points input point range. \param epsilon tolerance value when merging 3D points. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadWritePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped and simplification stops with - no guarantee on the output.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped and simplification stops with no guarantee on the output. } + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return iterator over the first point to remove. diff --git a/Point_set_processing_3/include/CGAL/hierarchy_simplify_point_set.h b/Point_set_processing_3/include/CGAL/hierarchy_simplify_point_set.h index 44c81d93758..1c826ec63e2 100644 --- a/Point_set_processing_3/include/CGAL/hierarchy_simplify_point_set.h +++ b/Point_set_processing_3/include/CGAL/hierarchy_simplify_point_set.h @@ -123,25 +123,54 @@ namespace CGAL { its iterator is the key type of the named parameter `point_map`. \param points input point range. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadWritePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{size} maximum cluster size.\cgalParamEnd - \cgalParamBegin{maximum_variation} maximum cluster variation value.\cgalParamEnd - \cgalParamBegin{diagonalize_traits} a model of `DiagonalizeTraits`. It can be omitted: - if Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined then an overload - using `Eigen_diagonalize_traits` is provided. Otherwise, the internal implementation - `CGAL::Diagonalize_traits` is used.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped and simplification stops with - no guarantee on the output.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped and simplification stops with no guarantee on the output.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamNEnd + + \cgalParamNBegin{size} + \cgalParamDescription{a value for cluster size} + \cgalParamType{unsigned int} + \cgalParamDefault{`10`} + \cgalParamNEnd + + \cgalParamNBegin{maximum_variation} + \cgalParamDescription{a value for maximum cluster variation} + \cgalParamType{floating scalar value} + \cgalParamDefault{`1/3`} + \cgalParamNEnd + + \cgalParamNBegin{diagonalize_traits} + \cgalParamDescription{the solver used for diagonalizing covariance matrices} + \cgalParamType{a model of `DiagonalizeTraits`} + \cgalParamDefault{If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined + then an overload using `Eigen_diagonalize_traits` is provided. + Otherwise, the internal implementation `CGAL::Diagonalize_traits` is used.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return iterator over the first point to remove. diff --git a/Point_set_processing_3/include/CGAL/jet_estimate_normals.h b/Point_set_processing_3/include/CGAL/jet_estimate_normals.h index b7e1242a28e..faafcebdfcd 100644 --- a/Point_set_processing_3/include/CGAL/jet_estimate_normals.h +++ b/Point_set_processing_3/include/CGAL/jet_estimate_normals.h @@ -109,31 +109,66 @@ jet_estimate_normal(const typename NeighborQuery::Point_3& query, ///< point to \param points input point range. \param k number of neighbors - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood radius. If - provided, the neighborhood of a query point is computed with a fixed spherical - radius instead of a fixed number of neighbors. In that case, the parameter - `k` is used as a limit on the number of points returned by each spherical - query (to avoid overly large number of points in high density areas). If no - limit is wanted, use `k=0`.\cgalParamEnd - \cgalParamBegin{degree_fitting} degree of jet fitting.\cgalParamEnd - \cgalParamBegin{svd_traits} template parameter for the class `Monge_via_jet_fitting`. If - \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined, - then `CGAL::Eigen_svd` is used.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped and the remaining normals are - left unchanged.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `WritablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{degree_fitting} + \cgalParamDescription{the degree of fitting} + \cgalParamType{unsigned int} + \cgalParamDefault{`2`} + \cgalParamExtra{see `CGAL::Monge_via_jet_fitting`} + \cgalParamNEnd + + \cgalParamNBegin{svd_traits} + \cgalParamDescription{the linear algebra algorithm used in the class `CGAL::Monge_via_jet_fitting`} + \cgalParamType{a class fitting the requirements of `CGAL::Monge_via_jet_fitting`} + \cgalParamDefault{If \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available + and `CGAL_EIGEN3_ENABLED` is defined, then `CGAL::Eigen_svd` is used.} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped and the remaining normals are left unchanged.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamExtra{When `CGAL::Parallel_tag` is used, the `callback` mechanism is called asynchronously + on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd */ template ` is used.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood radius. If - provided, the neighborhood of a query point is computed with a fixed spherical - radius instead of a fixed number of neighbors. In that case, the parameter - `k` is used as a limit on the number of points returned by each spherical - query (to avoid overly large number of points in high density areas). If no - limit is wanted, use `k=0`.\cgalParamEnd - \cgalParamBegin{degree_fitting} degree of jet fitting.\cgalParamEnd - \cgalParamBegin{degree_monge} Monge degree.\cgalParamEnd - \cgalParamBegin{svd_traits} template parameter for the class `Monge_via_jet_fitting`. If - \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined, - then `CGAL::Eigen_svd` is used.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped and the remaining points are - left unchanged.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{degree_fitting} + \cgalParamDescription{the degree of fitting} + \cgalParamType{unsigned int} + \cgalParamDefault{`2`} + \cgalParamExtra{see `CGAL::Monge_via_jet_fitting`} + \cgalParamNEnd + + \cgalParamNBegin{degree_monge} + \cgalParamDescription{the Monge degree} + \cgalParamType{unsigned int} + \cgalParamDefault{`2`} + \cgalParamExtra{see `CGAL::Monge_via_jet_fitting`} + \cgalParamNEnd + + \cgalParamNBegin{svd_traits} + \cgalParamDescription{the linear algebra algorithm used in the class `CGAL::Monge_via_jet_fitting`} + \cgalParamType{a class fitting the requirements of `CGAL::Monge_via_jet_fitting`} + \cgalParamDefault{If \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available + and `CGAL_EIGEN3_ENABLED` is defined, then `CGAL::Eigen_svd` is used.} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped and the remaining points are left unchanged.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamExtra{When `CGAL::Parallel_tag` is used, the `callback` mechanism is called asynchronously + on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd */ diff --git a/Point_set_processing_3/include/CGAL/mst_orient_normals.h b/Point_set_processing_3/include/CGAL/mst_orient_normals.h index 59cd06298a1..280c9271afb 100644 --- a/Point_set_processing_3/include/CGAL/mst_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/mst_orient_normals.h @@ -547,25 +547,48 @@ create_mst_graph( \param points input point range. \param k number of neighbors. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood radius. If - provided, the neighborhood of a query point is computed with a fixed spherical - radius instead of a fixed number of neighbors. In that case, the parameter - `k` is used as a limit on the number of points returned by each spherical - query (to avoid overly large number of points in high density areas). If no - limit is wanted, use `k=0`.\cgalParamEnd - \cgalParamBegin{point_is_constrained_map} a model of `ReadablePropertyMap` with value type - `bool`. Points with a `true` value will be used as seed points: their normal will be considered as already - oriented, it won't be altered and it will be propagated to its neighbors. If this parameter is omitted, - the highest point (highest Z coordinate) will be used as the unique seed with an upward oriented - normal\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `WritablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{point_is_constrained_map} + \cgalParamDescription{a property map containing information about points being constrained or not} + \cgalParamType{a class model of `ReadablePropertyMap` with `PointRange::iterator::value_type` + as key type and `bool` as value type} + \cgalParamDefault{If this parameter is omitted, the highest point (highest Z coordinate) + will be used as the unique seed with an upward oriented.} + \cgalParamExtra{Points with a `true` value will be used as seed points: their normal + will be considered as already oriented, it won't be altered + and it will be propagated to its neighbors.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \return iterator over the first point with an unoriented normal. diff --git a/Point_set_processing_3/include/CGAL/pca_estimate_normals.h b/Point_set_processing_3/include/CGAL/pca_estimate_normals.h index db146e1d94a..fea1180cf23 100644 --- a/Point_set_processing_3/include/CGAL/pca_estimate_normals.h +++ b/Point_set_processing_3/include/CGAL/pca_estimate_normals.h @@ -98,31 +98,53 @@ pca_estimate_normal(const typename NeighborQuery::Kernel::Point_3& query, ///< p \param points input point range. \param k number of neighbors - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below - \cgalNamedParamsBegin \cgalParamBegin{point_map} a model of - `ReadablePropertyMap` with value type `geom_traits::Point_3`. If - this parameter is omitted, - `CGAL::Identity_property_map` is - used.\cgalParamEnd \cgalParamBegin{normal_map} a model of - `WritablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood - radius. If provided, the neighborhood of a query point is - computed with a fixed spherical radius instead of a fixed number - of neighbors. In that case, the parameter `k` is used as a limit - on the number of points returned by each spherical query (to - avoid overly large number of points in high density areas). If no - limit is wanted, use `k=0`.\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and 1.) - is passed as parameter. If it returns `true`, then the algorithm - continues its execution normally; if it returns `false`, the - algorithm is stopped and the remaining normals are left - unchanged.\cgalParamEnd \cgalParamBegin{geom_traits} an instance - of a geometric traits class, model of `Kernel`\cgalParamEnd - \cgalNamedParamsEnd + \cgalNamedParamsBegin + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `WritablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped and the remaining normals are left unchanged.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamExtra{When `CGAL::Parallel_tag` is used, the `callback` mechanism is called asynchronously + on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd + \cgalNamedParamsEnd */ template ` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange1` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd - \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of - its iterator is `ICP_config`. + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd - The chain of filters to be applied to the reference point cloud. The reference - point cloud is processed into an intermediate point cloud with the given chain - of filters to be used in the alignment procedure. The chain is organized with - the forward traversal order of the point set filters range. + \cgalParamNBegin{point_set_filters} + \cgalParamDescription{a chain of filters to be applied to the point set} + \cgalParamType{a class model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`RandomSamplingDataPointsFilter`} + \cgalParamExtra{The chain of filters to be applied to the reference point cloud. The reference + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. - The chain of point set filters are applied only once at the beginning of the - ICP procedure, i.e., before the first iteration of the ICP algorithm. + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of the ICP algorithm. - The filters can have several purposes, including but are not limited to - i) removal of noisy points which render alignment of point clouds difficult, - ii) removal of redundant points so as to speed up alignment, iii) addition - of descriptive information to the points such as a surface normal vector, - or the direction from the point to the sensor. + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor.} + \cgalParamExtra{Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `referenceDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher - library. The filters should be chosen and set from possible components of - the `referenceDataPointsFilters` configuration module. - See libpointmatcher documentation - for possible configurations. + \cgalParamNBegin{matcher} + \cgalParamDescription{a method used for matching (linking) the points from `point_set_2`, + to the points in the reference cloud, `point_set_1`} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`KDTreeMatcher`} + \cgalParamExtra{Corresponds to the `matcher` configuration module of \ref thirdpartylibpointmatcher + library. The matcher should be chosen and set from possible components of + the `matcher` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - If this parameter is omitted, `RandomSamplingDataPointsFilter` is used. - \cgalParamEnd + \cgalParamNBegin{outlier_filters} + \cgalParamDescription{a chain of filters to be applied to the matched (linked) point clouds after + each processing iteration of the ICP algorithm to remove the links which do not + correspond to true point correspondences} + \cgalParamType{a model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`TrimmedDistOutlierFilter`} + \cgalParamExtra{The outliers are rejected. Points with no link are ignored + in the subsequent error minimization step. The chain is organized + with the forward traversal order of the outlier filters range.} + \cgalParamExtra{Corresponds to the `outlierFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `outlierFilters` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - \cgalParamBegin{matcher} is a model of `ICP_config`. - The method used for matching (linking) the points from `point_set_2`, to the - points in the reference cloud, `point_set_1`. + \cgalParamNBegin{error_minimizer} + \cgalParamDescription{an error minimizer that computes a transformation matrix such as to minimize + the error between the point sets} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`PointToPlaneErrorMinimizer`} + \cgalParamExtra{Corresponds to the `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher + library. The error minimizer should be chosen and set from possible components of + the `errorMinimizer` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - Corresponds to `matcher` configuration module of \ref thirdpartylibpointmatcher - library. The matcher should be chosen and set from possible components of - the `matcher` configuration module. - See libpointmatcher documentation - for possible configurations. + \cgalParamNBegin{transformation_checkers} + \cgalParamDescription{a chain of transformation checkers} + \cgalParamType{a class model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`CounterTransformationChecker` and `DifferentialTransformationChecker`} + \cgalParamExtra{The chain is organized with the forward traversal order of the transformation checkers range.} + \cgalParamExtra{A transformation checker can stop the iteration depending on the conditions it defines.} + \cgalParamExtra{Corresponds to the `transformationCheckers` configuration module of \ref thirdpartylibpointmatcher + library. The transformation checkers should be chosen and set from possible components of + the `transformationCheckers` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - If this parameter is omitted, `KDTreeMatcher` is used. - \cgalParamEnd + \cgalParamNBegin{inspector} + \cgalParamDescription{an inspector that enables logging data at different steps for analysis.} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`NullInspector`} + \cgalParamExtra{Inspectors typically provide deeper scrutiny than the logger.} + \cgalParamExtra{Corresponds to the `inspector` configuration module of \ref thirdpartylibpointmatcher + library. The inspector should be chosen and set from possible components of + the `inspector` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd + \cgalParamNBegin{logger} + \cgalParamDescription{a method for logging information regarding the registration process + outputted by \ref thirdpartylibpointmatcher library} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`NullLogger`} + \cgalParamExtra{The logs generated by CGAL library does not get effected by this configuration.} + \cgalParamExtra{Corresponds to the `logger` configuration module of \ref thirdpartylibpointmatcher + library. The logger should be chosen and set from possible components of + the `logger` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - \cgalParamBegin{outlier_filters} is a model of `Range`. The value type of - its iterator is `ICP_config`. - The chain of filters to be applied to the matched (linked) point clouds after - each processing iteration of the ICP algorithm to remove the links which do not - correspond to true point correspondences. The outliers are rejected. Points - with no link are ignored in the subsequent error minimization step. - The chain is organized with the forward traversal order of the outlier filters - range. - - Corresponds to `outlierFilters` configuration module of \ref thirdpartylibpointmatcher - library. The filters should be chosen and set from possible components of - the `outlierFilters` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `TrimmedDistOutlierFilter` is used. - \cgalParamEnd - - \cgalParamBegin{error_minimizer} is a model of `ICP_config`. - The error minimizer that computes a transformation matrix such as to minimize - the error between the point sets. - - Corresponds to `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher - library. The error minimizer should be chosen and set from possible components of - the `errorMinimizer` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `PointToPlaneErrorMinimizer` is used. - \cgalParamEnd - - \cgalParamBegin{transformation_checkers} is a model of `Range`. The value type of - its iterator is `ICP_config`. - The chain of transformation checkers. A transformation checker can stop the - iteration depending on the conditions it defines. - - The chain is organized with the forward traversal order of the transformation - checkers range. - - Corresponds to `transformationCheckers` configuration module of \ref thirdpartylibpointmatcher - library. The transformation checkers should be chosen and set from possible components of - the `transformationCheckers` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, the chain of `CounterTransformationChecker` and - `DifferentialTransformationChecker` is used. - \cgalParamEnd - - \cgalParamBegin{inspector} is a model of `ICP_config`. - The inspector allows to log data at different steps for analysis. Inspectors - typically provide deeper scrutiny than the logger. - - Corresponds to `inspector` configuration module of \ref thirdpartylibpointmatcher - library. The inspector should be chosen and set from possible components of - the `inspector` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `NullInspector` is used. - \cgalParamEnd - - \cgalParamBegin{logger} is a model of `ICP_config`. - The method for logging information regarding the registration process outputted - by \ref thirdpartylibpointmatcher library. The logs generated by CGAL library - does not get effected by this configuration. - - Corresponds to `logger` configuration module of \ref thirdpartylibpointmatcher - library. The logger should be chosen and set from possible components of - the `logger` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `NullLogger` is used. - \cgalParamEnd - - \cgalParamBegin{geom_traits} an instance of a geometric traits class, - model of `Kernel`\cgalParamEnd - + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd - \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange2` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange2` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd - \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of - its iterator is `ICP_config`. + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd - The chain of filters to be applied to the point cloud, `point_set_2`. The - point cloud is processed into an intermediate point cloud with the given chain - of filters to be used in the alignment procedure. The chain is organized with - the forward traversal order of the point set filters range. + \cgalParamNBegin{point_set_filters} + \cgalParamDescription{a chain of filters to be applied to the point set} + \cgalParamType{a class model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`SamplingSurfaceNormalDataPointsFilter`} + \cgalParamExtra{The chain of filters to be applied to the point cloud `point_set_2`. The + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. - The chain of point set filters are applied only once at the beginning of the - ICP procedure, i.e., before the first iteration of ICP algorithm. + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of the ICP algorithm. - The filters can have several purposes, including but are not limited to - i) removal of noisy points which render alignment of point clouds difficult, - ii) removal of redundant points so as to speed up alignment, iii) addition - of descriptive information to the points such as a surface normal vector, - or the direction from the point to the sensor. - - Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher - library. The filters should be chosen and set from possible components of - the `readingDataPointsFilters` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `SamplingSurfaceNormalDataPointsFilter` is used. - \cgalParamEnd - - \cgalParamBegin{transformation} The affine transformation that is used as the - initial transformation for `point_set_2`. - - If this parameter is omitted, identity transformation is used. - \cgalParamEnd + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor.} + \cgalParamExtra{Corresponds to the `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `readingDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd + \cgalParamNBegin{transformation} + \cgalParamDescription{an affine transformation that is used as the initial transformation for `point_set_2`} + \cgalParamType{`CGAL::Aff_transformation_3`} + \cgalParamDefault{the identity transformation} + \cgalParamNEnd \cgalNamedParamsEnd + \return a pair containing the affine transformation that should be applied to `point_set_2` to make it registered w.r.t. `point_set_1` and the boolean value indicating if the registration converged. The second diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 20a9e7e3e77..a9bfe6a75bb 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -49,179 +49,178 @@ namespace pointmatcher { \param point_set_1 input point range used as reference. \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. - \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange1` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange1` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd - \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of - its iterator is `ICP_config`. + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `point_set_1`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange1` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd - The chain of filters to be applied to the reference point cloud. The reference - point cloud is processed into an intermediate point cloud with the given chain - of filters to be used in the alignment procedure. The chain is organized with - the forward traversal order of the point set filters range. + \cgalParamNBegin{point_set_filters} + \cgalParamDescription{a chain of filters to be applied to the point set} + \cgalParamType{a class model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`RandomSamplingDataPointsFilter`} + \cgalParamExtra{The chain of filters to be applied to the reference point cloud. The reference + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. - The chain of point set filters are applied only once at the beginning of the - ICP procedure, i.e., before the first iteration of the ICP algorithm. + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of the ICP algorithm. - The filters can have several purposes, including but are not limited to - i) removal of noisy points which render alignment of point clouds difficult, - ii) removal of redundant points so as to speed up alignment, iii) addition - of descriptive information to the points such as a surface normal vector, - or the direction from the point to the sensor. + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor.} + \cgalParamExtra{Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `referenceDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher - library. The filters should be chosen and set from possible components of - the `referenceDataPointsFilters` configuration module. - See libpointmatcher documentation - for possible configurations. + \cgalParamNBegin{matcher} + \cgalParamDescription{a method used for matching (linking) the points from `point_set_2`, + to the points in the reference cloud, `point_set_1`} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`KDTreeMatcher`} + \cgalParamExtra{Corresponds to the `matcher` configuration module of \ref thirdpartylibpointmatcher + library. The matcher should be chosen and set from possible components of + the `matcher` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - If this parameter is omitted, `RandomSamplingDataPointsFilter` is used. - \cgalParamEnd + \cgalParamNBegin{outlier_filters} + \cgalParamDescription{a chain of filters to be applied to the matched (linked) point clouds after + each processing iteration of the ICP algorithm to remove the links which do not + correspond to true point correspondences} + \cgalParamType{a model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`TrimmedDistOutlierFilter`} + \cgalParamExtra{The outliers are rejected. Points with no link are ignored + in the subsequent error minimization step. The chain is organized + with the forward traversal order of the outlier filters range.} + \cgalParamExtra{Corresponds to the `outlierFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `outlierFilters` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - \cgalParamBegin{matcher} is a model of `ICP_config`. - The method used for matching (linking) the points from `point_set_2`, to the - points in the reference cloud, `point_set_1`. + \cgalParamNBegin{error_minimizer} + \cgalParamDescription{an error minimizer that computes a transformation matrix such as to minimize + the error between the point sets} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`PointToPlaneErrorMinimizer`} + \cgalParamExtra{Corresponds to the `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher + library. The error minimizer should be chosen and set from possible components of + the `errorMinimizer` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - Corresponds to `matcher` configuration module of \ref thirdpartylibpointmatcher - library. The matcher should be chosen and set from possible components of - the `matcher` configuration module. - See libpointmatcher documentation - for possible configurations. + \cgalParamNBegin{transformation_checkers} + \cgalParamDescription{a chain of transformation checkers} + \cgalParamType{a class model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`CounterTransformationChecker` and `DifferentialTransformationChecker`} + \cgalParamExtra{The chain is organized with the forward traversal order of the transformation checkers range.} + \cgalParamExtra{A transformation checker can stop the iteration depending on the conditions it defines.} + \cgalParamExtra{Corresponds to the `transformationCheckers` configuration module of \ref thirdpartylibpointmatcher + library. The transformation checkers should be chosen and set from possible components of + the `transformationCheckers` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - If this parameter is omitted, `KDTreeMatcher` is used. - \cgalParamEnd + \cgalParamNBegin{inspector} + \cgalParamDescription{an inspector that enables logging data at different steps for analysis.} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`NullInspector`} + \cgalParamExtra{Inspectors typically provide deeper scrutiny than the logger.} + \cgalParamExtra{Corresponds to the `inspector` configuration module of \ref thirdpartylibpointmatcher + library. The inspector should be chosen and set from possible components of + the `inspector` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - \cgalParamBegin{outlier_filters} is a model of `Range`. The value type of - its iterator is `ICP_config`. - The chain of filters to be applied to the matched (linked) point clouds after - each processing iteration of the ICP algorithm to remove the links which do not - correspond to true point correspondences. The outliers are rejected. Points - with no link are ignored in the subsequent error minimization step. - The chain is organized with the forward traversal order of the outlier filters - range. + \cgalParamNBegin{logger} + \cgalParamDescription{a method for logging information regarding the registration process + outputted by \ref thirdpartylibpointmatcher library} + \cgalParamType{a class model of `ICP_config`} + \cgalParamDefault{`NullLogger`} + \cgalParamExtra{The logs generated by CGAL library does not get effected by this configuration.} + \cgalParamExtra{Corresponds to the `logger` configuration module of \ref thirdpartylibpointmatcher + library. The logger should be chosen and set from possible components of + the `logger` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd - Corresponds to `outlierFilters` configuration module of \ref thirdpartylibpointmatcher - library. The filters should be chosen and set from possible components of - the `outlierFilters` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `TrimmedDistOutlierFilter` is used. - \cgalParamEnd - - \cgalParamBegin{error_minimizer} is a model of `ICP_config`. - The error minimizer that computes a transformation matrix such as to minimize - the error between the point sets. - - Corresponds to `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher - library. The error minimizer should be chosen and set from possible components of - the `errorMinimizer` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `PointToPlaneErrorMinimizer` is used. - \cgalParamEnd - - \cgalParamBegin{transformation_checkers} is a model of `Range`. The value type of - its iterator is `ICP_config`. - The chain of transformation checkers. A transformation checker can stop the - iteration depending on the conditions it defines. - - The chain is organized with the forward traversal order of the transformation - checkers range. - - Corresponds to `transformationCheckers` configuration module of \ref thirdpartylibpointmatcher - library. The transformation checkers should be chosen and set from possible components of - the `transformationCheckers` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, the chain of `CounterTransformationChecker` and - `DifferentialTransformationChecker` is used. - \cgalParamEnd - - \cgalParamBegin{inspector} is a model of `ICP_config`. - The inspector allows to log data at different steps for analysis. Inspectors - typically provide deeper scrutiny than the logger. - - Corresponds to `inspector` configuration module of \ref thirdpartylibpointmatcher - library. The inspector should be chosen and set from possible components of - the `inspector` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `NullInspector` is used. - \cgalParamEnd - - \cgalParamBegin{logger} is a model of `ICP_config`. - The method for logging information regarding the registration process outputted - by \ref thirdpartylibpointmatcher library. The logs generated by CGAL library - does not get effected by this configuration. - - Corresponds to `logger` configuration module of \ref thirdpartylibpointmatcher - library. The logger should be chosen and set from possible components of - the `logger` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `NullLogger` is used. - \cgalParamEnd - - \cgalParamBegin{geom_traits} an instance of a geometric traits class, - model of `Kernel`\cgalParamEnd + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd - \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type - is the value type of the iterator of `PointRange2` and whose value type is - `geom_traits::Point_3`. If this parameter is omitted, - `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key - type is the value type of the iterator of `PointRange2` and whose value - type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd - \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of - its iterator is `ICP_config`. + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `point_set_2`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange2` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd - The chain of filters to be applied to the point cloud, `point_set_2`. The - point cloud is processed into an intermediate point cloud with the given chain - of filters to be used in the alignment procedure. The chain is organized with - the forward traversal order of the point set filters range. + \cgalParamNBegin{point_set_filters} + \cgalParamDescription{a chain of filters to be applied to the point set} + \cgalParamType{a class model of `Range`. The value type of its iterator must be `ICP_config`.} + \cgalParamDefault{`SamplingSurfaceNormalDataPointsFilter`} + \cgalParamExtra{The chain of filters to be applied to the point cloud `point_set_2`. The + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. - The chain of point set filters are applied only once at the beginning of the - ICP procedure, i.e., before the first iteration of ICP algorithm. + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of the ICP algorithm. - The filters can have several purposes, including but are not limited to - i) removal of noisy points which render alignment of point clouds difficult, - ii) removal of redundant points so as to speed up alignment, iii) addition - of descriptive information to the points such as a surface normal vector, - or the direction from the point to the sensor. - - Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher - library. The filters should be chosen and set from possible components of - the `readingDataPointsFilters` configuration module. - See libpointmatcher documentation - for possible configurations. - - If this parameter is omitted, `SamplingSurfaceNormalDataPointsFilter` is used. - \cgalParamEnd - - \cgalParamBegin{transformation} The affine transformation that is used as the - initial transformation for `point_set_2`. - - If this parameter is omitted, identity transformation is used. - \cgalParamEnd + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor.} + \cgalParamExtra{Corresponds to the `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `readingDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations.} + \cgalParamNEnd + \cgalParamNBegin{transformation} + \cgalParamDescription{an affine transformation that is used as the initial transformation for `point_set_2`} + \cgalParamType{`CGAL::Aff_transformation_3`} + \cgalParamDefault{the identity transformation} + \cgalParamNEnd \cgalNamedParamsEnd + \return `true` if registration is converged, `false` otherwise. A log why it failed to converge is written to `std::cerr` if the registration cannot converge. */ diff --git a/Point_set_processing_3/include/CGAL/remove_outliers.h b/Point_set_processing_3/include/CGAL/remove_outliers.h index ce5b7154879..e4beaf9a6b2 100644 --- a/Point_set_processing_3/include/CGAL/remove_outliers.h +++ b/Point_set_processing_3/include/CGAL/remove_outliers.h @@ -105,30 +105,58 @@ compute_avg_knn_sq_distance_3( \param points input point range. \param k number of neighbors - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood - radius. If provided, the neighborhood of a query point is - computed with a fixed spherical radius instead of a fixed number - of neighbors. In that case, the parameter `k` is used as a limit - on the number of points returned by each spherical query (to - avoid overly large number of points in high density areas). If no - limit is wanted, use `k=0`.\cgalParamEnd - \cgalParamBegin{threshold_percent} maximum percentage of points to remove.\cgalParamEnd - \cgalParamBegin{threshold_distance} minimum distance for a point to be considered as outlier - (distance here is the square root of the average squared distance to K nearest neighbors).\cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped, all points are left unchanged - and the function return `points.end()`.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd - \cgalNamedParamsEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{`0` (no limit)} + \cgalParamExtra{If provided, the neighborhood of a query point is computed with a fixed spherical + radius instead of a fixed number of neighbors. In that case, the parameter + `k` is used as a limit on the number of points returned by each spherical + query (to avoid overly large number of points in high density areas).} + \cgalParamNEnd + + \cgalParamNBegin{threshold_percent} + \cgalParamDescription{the maximum percentage of points to remove} + \cgalParamType{double} + \cgalParamDefault{`10`} + \cgalParamNEnd + + \cgalParamNBegin{threshold_distance} + \cgalParamDescription{the minimum distance for a point to be considered as outlier} + \cgalParamType{double} + \cgalParamDefault{`0`} + \cgalParamExtra{Distance here is the square root of the average squared distance to K-nearest neighbors} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and 1.) + is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped, all points are left unchanged + and the function return `points.size()`.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd\cgalNamedParamsEnd \return iterator over the first point to remove. diff --git a/Point_set_processing_3/include/CGAL/structure_point_set.h b/Point_set_processing_3/include/CGAL/structure_point_set.h index c9f882617df..296028eaff4 100644 --- a/Point_set_processing_3/include/CGAL/structure_point_set.h +++ b/Point_set_processing_3/include/CGAL/structure_point_set.h @@ -164,22 +164,42 @@ public: \param points input point range. \param planes input plane range. \param epsilon size parameter. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `Kernel::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` with value type - `Kernel::Vector_3`.\cgalParamEnd - \cgalParamBegin{plane_index_map} a model of `ReadablePropertyMap` with value type `int`. - Associates the index of a point in the input range to the index of plane (-1 if point does is not assigned to - a plane).\cgalParamEnd - \cgalParamBegin{plane_map} a model of `ReadablePropertyMap` with value type - `Kernel::Plane_3`. If this parameter is omitted, `CGAL::Identity_property_map` - is used.\cgalParamEnd - \cgalParamBegin{attraction_factor} multiple of `epsilon` used to connect simplices.\cgalParamEnd - \cgalNamedParamsEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{plane_index_map} + \cgalParamDescription{a property map associating the index of a point in the input range + to the index of plane (`-1` if the point is not assigned to a plane)} + \cgalParamType{a class model of `ReadablePropertyMap` with `std::size_t` as key type and `int` as value type} + \cgalParamDefault{unused} + \cgalParamNEnd + + \cgalParamNBegin{plane_map} + \cgalParamDescription{a property map containing the planes associated to the elements of the plane range `planes`} + \cgalParamType{a class model of `ReadablePropertyMap` with `PlaneRange::iterator::value_type` + as key type and `geom_traits::Plane_3` as value type} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{attraction_factor} + \cgalParamDescription{multiple of a tolerance `epsilon` used to connect simplices} + \cgalParamType{floating scalar value} + \cgalParamDefault{`3`} + \cgalParamNEnd + \cgalNamedParamsEnd */ template ` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{plane_index_map} a model of `ReadablePropertyMap` with value type `int`. - Associates the index of a point in the input range to the index of plane (-1 if point does is not assigned to - a plane).\cgalParamEnd - \cgalParamBegin{plane_map} a model of `ReadablePropertyMap` with value type - `geom_traits::Plane_3`. If this parameter is omitted, `CGAL::Identity_property_map` - is used.\cgalParamEnd - \cgalParamBegin{attraction_factor} multiple of `epsilon` used to connect simplices.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{plane_index_map} + \cgalParamDescription{a property map associating the index of a point in the input range + to the index of plane (`-1` if the point is not assigned to a plane)} + \cgalParamType{a class model of `ReadablePropertyMap` with `std::size_t` as key type and `int` as value type} + \cgalParamDefault{unused} + \cgalParamNEnd + + \cgalParamNBegin{plane_map} + \cgalParamDescription{a property map containing the planes associated to the elements of the plane range `planes`} + \cgalParamType{a class model of `ReadablePropertyMap` with `PlaneRange::iterator::value_type` + as key type and `geom_traits::Plane_3` as value type} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{attraction_factor} + \cgalParamDescription{multiple of a tolerance `epsilon` used to connect simplices} + \cgalParamType{floating scalar value} + \cgalParamDefault{`3`} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd */ @@ -1557,4 +1603,3 @@ structure_point_set (const PointRange& points, ///< range of points. #include #endif // CGAL_STRUCTURE_POINT_SET_3_H - diff --git a/Point_set_processing_3/include/CGAL/vcm_estimate_normals.h b/Point_set_processing_3/include/CGAL/vcm_estimate_normals.h index 2c2e083793f..3d258b295c3 100644 --- a/Point_set_processing_3/include/CGAL/vcm_estimate_normals.h +++ b/Point_set_processing_3/include/CGAL/vcm_estimate_normals.h @@ -235,12 +235,21 @@ vcm_convolve (ForwardIterator first, \param ccov output range of covariance matrices. \param offset_radius offset_radius. \param convolution_radius convolution_radius. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd \sa `CGAL::vcm_is_on_feature_edge()` @@ -398,20 +407,36 @@ vcm_estimate_normals_internal (PointRange& points, \param points input point range. \param offset_radius offset_radius. \param convolution_radius convolution_radius. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `WritablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{diagonalize_traits} a model of `DiagonalizeTraits`. It can be omitted: - if Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined then an overload - using `Eigen_diagonalize_traits` is provided. Otherwise, the internal implementation - `CGAL::Diagonalize_traits` is used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd - \cgalNamedParamsEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{diagonalize_traits} + \cgalParamDescription{the solver used for diagonalizing covariance matrices} + \cgalParamType{a class model of `DiagonalizeTraits`} + \cgalParamDefault{If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined + then an overload using `Eigen_diagonalize_traits` is provided. + Otherwise, the internal implementation `CGAL::Diagonalize_traits` is used} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd + \cgalNamedParamsEnd */ template ` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `WritablePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{diagonalize_traits} a model of `DiagonalizeTraits`. It can be omitted: - if Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined then an overload - using `Eigen_diagonalize_traits` is provided. Otherwise, the internal implementation - `CGAL::Diagonalize_traits` is used.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{diagonalize_traits} + \cgalParamDescription{the solver used for diagonalizing covariance matrices} + \cgalParamType{a class model of `DiagonalizeTraits`} + \cgalParamDefault{If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined + then an overload using `Eigen_diagonalize_traits` is provided. + Otherwise, the internal implementation `CGAL::Diagonalize_traits` is used} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd */ template < typename PointRange, diff --git a/Point_set_processing_3/include/CGAL/wlop_simplify_and_regularize_point_set.h b/Point_set_processing_3/include/CGAL/wlop_simplify_and_regularize_point_set.h index b586a59a08a..a15bc4ec1ea 100644 --- a/Point_set_processing_3/include/CGAL/wlop_simplify_and_regularize_point_set.h +++ b/Point_set_processing_3/include/CGAL/wlop_simplify_and_regularize_point_set.h @@ -355,32 +355,74 @@ compute_density_weight_for_sample_point( \param points input point range. \param output iterator where output points are put. - \param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{point_map} a model of `ReadWritePropertyMap` with value type `geom_traits::Point_3`. - If this parameter is omitted, `CGAL::Identity_property_map` is used.\cgalParamEnd - \cgalParamBegin{normal_map} a model of `ReadWritePropertyMap` with value type - `geom_traits::Vector_3`.\cgalParamEnd - \cgalParamBegin{select_percentage} percentage of points to retain. The default value is set to - 5 (\%).\cgalParamEnd - \cgalParamBegin{neighbor_radius} spherical neighborhood radius. This is a key parameter that needs to be - finely tuned. The result will be irregular if too small, but a larger value will impact the runtime. In - practice, choosing a radius such that the neighborhood of each sample point includes at least two rings - of neighboring sample points gives satisfactory result. If this parameter is not provided, it is - automatically set to 8 times the average spacing of the point set.\cgalParamEnd - \cgalParamBegin{number_of_iterations} number of iterations to solve the optimsation problem. The default - value is 35. More iterations give a more regular result but increase the runtime.\cgalParamEnd - \cgalParamBegin{require_uniform_sampling} an optional preprocessing, which will give better result if the - distribution of the input points is highly non-uniform. The default value is `false`. \cgalParamEnd - \cgalParamBegin{callback} an instance of - `std::function`. It is called regularly when the - algorithm is running: the current advancement (between 0. and - 1.) is passed as parameter. If it returns `true`, then the - algorithm continues its execution normally; if it returns - `false`, the algorithm is stopped, no output points are - generated.\cgalParamEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{select_percentage} + \cgalParamDescription{percentage of points to retain} + \cgalParamType{floating scalar value} + \cgalParamDefault{`5`} + \cgalParamNEnd + + \cgalParamNBegin{neighbor_radius} + \cgalParamDescription{the spherical neighborhood radius} + \cgalParamType{floating scalar value} + \cgalParamDefault{8 times the average spacing of the point set} + \cgalParamExtra{This is a key parameter that needs to be finely tuned. + The result will be irregular if too small, but a larger value will impact the runtime. + In practice, choosing a radius such that the neighborhood of each sample point + includes at least two rings of neighboring sample points gives satisfactory result.} + \cgalParamNEnd + + \cgalParamNBegin{number_of_iterations} + \cgalParamDescription{number of iterations to solve the optimsation problem} + \cgalParamType{unsigned int} + \cgalParamDefault{`35`} + \cgalParamExtra{More iterations give a more regular result but increase the runtime} + \cgalParamNEnd + + \cgalParamNBegin{require_uniform_sampling} + \cgalParamDescription{If `true`, an optional preprocessing is applied, which will give + better results if the distribution of the input points is highly non-uniform.} + \cgalParamType{Boolean} + \cgalParamDefault{`35`} + \cgalParamExtra{More iterations give a more regular result but increase the runtime} + \cgalParamNEnd + + \cgalParamNBegin{callback} + \cgalParamDescription{a mechanism to get feedback on the advancement of the algorithm + while it's running and to interrupt it if needed} + \cgalParamType{an instance of `std::function`.} + \cgalParamDefault{unused} + \cgalParamExtra{It is called regularly when the + algorithm is running: the current advancement (between 0. and + 1.) is passed as parameter. If it returns `true`, then the + algorithm continues its execution normally; if it returns + `false`, the algorithm is stopped, no output points are + generated.} + \cgalParamExtra{The callback will be copied and therefore needs to be lightweight.} + \cgalParamExtra{When `CGAL::Parallel_tag` is used, the `callback` mechanism is called asynchronously + on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd \cgalNamedParamsEnd */ diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in index a2b73d0f5d2..a846308eca5 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Doxyfile.in @@ -7,18 +7,8 @@ HIDE_UNDOC_CLASSES = true WARN_IF_UNDOCUMENTED = false # macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref PMP_\1 \"\1\"" -ALIASES += "cgalParamEnd=" ALIASES += "cgalDescribePolylineType=A polyline is defined as a sequence of points, each pair of contiguous points defines a segment of the polyline. If the first and last points of the polyline are identical, the polyline is closed." -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - EXAMPLE_PATH += ${CGAL_Poisson_surface_reconstruction_3_EXAMPLE_DIR} MACRO_EXPANSION = YES diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt deleted file mode 100644 index 5fe5a41c38f..00000000000 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt +++ /dev/null @@ -1,610 +0,0 @@ -/*! -\defgroup pmp_namedparameters Named Parameters for Polygon Mesh Processing -\ingroup PkgPolygonMeshProcessingRef - -In this package, all functions optional parameters are implemented as BGL optional -named parameters (see \ref BGLNamedParameters for more information on how to use them). -Since the parameters of the various polygon mesh processing functions defined -in this package are redundant, their long descriptions are centralized below. -The sequence of named parameters starts with `CGAL::parameters::`. -`CGAL::parameters::all_default()` can be used to indicate -that default values of optional named parameters shall be used. - -In the following, we assume that the following types are provided as template parameters -of polygon mesh processing functions and classes. Note that, for some of these functions, -the type is more specific: -
    -
  • `PolygonMesh` is a model of the concept `FaceGraph`
  • . -
  • `GeomTraits` a geometric traits class in which constructions are performed and - predicates evaluated. Everywhere in this package, a \cgal `Kernel` fulfills the requirements.
  • -
- -The following named parameters, offered by the package \ref PkgBGL -(see \ref bgl_namedparameters), are used in this package: - -\cgalNPTableBegin -\cgalNPBegin{vertex_point_map} \anchor PMP_vertex_point_map -is the property map with the points associated to the vertices of the polygon mesh `pmesh`.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`GeomTraits::Point_3` as value type. \n -Default: \code boost::get(CGAL::vertex_point, pmesh) \endcode -\cgalNPEnd - -\cgalNPBegin{vertex_index_map} \anchor PMP_vertex_index_map -is the property map associating a unique index to each vertex of a polygon mesh, -between `0` and `num_vertices(g)-1`. -If this parameter is not passed, internal machinery will create and initialize a vertex index -property map, either using the internal property map if it exists or using an external map. The latter -might result in - slightly - worsened performance in case of non-constant complexity for index access.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and the value type -\code typename boost::property_traits::type>::value_type \endcode -Default: an initialized vertex index property map -\cgalNPEnd - -\cgalNPBegin{face_index_map} \anchor PMP_face_index_map -is the property map associating a unique index to each face of a polygon mesh, -between `0` and `num_faces(g)-1`. -If this parameter is not passed, internal machinery will create and initialize a face index -property map, either using the internal property map if it exists or using an external map. The latter -might result in - slightly - worsened performance in case of non-constant complexity for index access.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and the value type: -\code typename boost::property_traits::type>::value_type \endcode -Default: an initialized face index property map -\cgalNPEnd - -\cgalNPBegin{edge_is_constrained_map} \anchor PMP_edge_is_constrained_map -is the property map containing information about edges of the input polygon mesh -being marked or not. In `isotropic_remeshing()` and `connected_components()`, -the marked edges are constrained.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%edge_descriptor` as key type and -`bool` as value type. It must be default constructible.\n -Default: a default property map where no edge is constrained -\cgalNPEnd -\cgalNPTableEnd - -In addition to these named parameters, this package offers the following named parameters: - -\cgalNPTableBegin -\cgalNPBegin{geom_traits} \anchor PMP_geom_traits -is the geometric traits instance used for the mesh processing operation.\n -Type: a Geometric traits class.\n -Default: -\code typename CGAL::Kernel_traits< - typename boost::property_traits< - typename boost::property_map::type>::value_type>::Kernel \endcode -\cgalNPEnd - -\cgalNPBegin{point_map} \anchor PMP_point_map - is the property map containing the points associated to the elements of the point range `points`.\n -\b Type: a class model of `ReadablePropertyMap` with -`PointRange::iterator::value_type` as key type and -`geom_traits::Point_3` as value type. \n -Default value: \code CGAL::Identity_property_map\endcode -\cgalNPEnd - -\cgalNPBegin{vertex_incident_patches_map} \anchor PMP_vertex_incident_patches_map -is the property map containing the surface patches incident to each vertex of the input polygon mesh.\n -Type: a class model of `LvaluePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type. Its value type -must be a container of `boost::property_traits::%value_type` and have a function `insert()`. -A `std::set` or a `boost::unordered_set` are recommended, as a patch index may be -inserted several times.\n -Default: \code boost::get(CGAL::vertex_incident_patches_t, pmesh)\endcode -\cgalNPEnd - -\cgalNPBegin{vertex_feature_degree_map} \anchor PMP_vertex_feature_degree_map -is the property map containing the number of feature edges being incident to the vertices of the polygon mesh `pmesh`.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`int` as value type. It must be default constructible.\n -Default: \code boost::get(CGAL::vertex_feature_degree_t(), pmesh) \endcode -\cgalNPEnd - -\cgalNPBegin{vertex_is_constrained_map} \anchor PMP_vertex_is_constrained_map -is the property map containing information about vertices of the input polygon mesh being constrained or not. -Constrained vertices may be replaced by new vertices, but the number and location -of vertices remain unchanged.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`bool` as value type. It must be default constructible.\n -Default: a default property map where no vertex is constrained is provided. -\cgalNPEnd - -\cgalNPBegin{face_patch_map} \anchor PMP_face_patch_map -is a property map containing information about faces. -It is particularly well-suited for preserving surface patch IDs, -or face colors. -The edges at the interface between surface patches are treated similarly -to the ones of `edge_is_constrained_map`.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and -the desired property, model of `CopyConstructible` as value type.\n -Default: a default property map where each face is associated with the ID of -the connected component it belongs to. Connected components are -computed with respect to the constrained edges listed in the property map -`edge_is_constrained_map` -\cgalNPEnd - -\cgalNPBegin{first_index} \anchor PMP_first_index -is the index of the first surface patch.\n -Type: `std::size_t`\n -Default: 1 -\cgalNPEnd - -\cgalNPBegin{density_control_factor} \anchor PMP_density_control_factor -controls the density of the mesh generated by refinement, with larger values causing denser refinements. -The density of vertices in the refined region is this factor times higher than before refinement.\n -Type: floating scalar value\n -Default: `CGAL::sqrt(2)` -\cgalNPEnd - -\cgalNPBegin{fairing_continuity} \anchor PMP_fairing_continuity -controls the tangential continuity of the output surface in `fair()`. -The possible values are 0, 1 and 2, refering to the C0, C1 -and C2 continuity.\n -Type: \c unsigned \c int between 0 and 2\n -Default: `1` -\cgalNPEnd - -\cgalNPBegin{sparse_linear_solver} \anchor PMP_sparse_linear_solver -is the solver used.\n -Type: a class model of `SparseLinearAlgebraWithFactorTraits_d`.\n -Default: if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and -`CGAL_EIGEN3_ENABLED` is defined, then the following overload of `Eigen_solver_traits` -is provided as default value:\n -in `fair()`:\n -\code CGAL::Eigen_solver_traits::EigenType, Eigen::COLAMDOrdering > > \endcode -in `smooth_shape()`:\n -\code CGAL::Eigen_solver_traits::EigenType, Eigen::IncompleteLUT > > \endcode -\cgalNPEnd - -\cgalNPBegin{number_of_iterations} \anchor PMP_number_of_iterations -is the number of iterations of the sequence of iterations performed in `isotropic_remeshing()`.\n -Type: \c unsigned \c int \n -Default: `1` -\cgalNPEnd - -\cgalNPBegin{protect_constraints} \anchor PMP_protect_constraints -enables the protection of constraints listed by \ref PMP_edge_is_constrained_map -"edge_is_constrained_map" and boundary edges -in `isotropic_remeshing()`. If `true`, constraint edges cannot be modified at all -during the remeshing process.\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{collapse_constraints} \anchor PMP_collapse_constraints -enables the collapse of constraints listed by \ref PMP_edge_is_constrained_map -"edge_is_constrained_map" and boundary edges -in `isotropic_remeshing()`. If `false`, constraint edges cannot be collapsed -during the remeshing process.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{relax_constraints} \anchor PMP_relax_constraints -enables the tangential relaxation step in `isotropic_remeshing()` -to be performed on vertices that are endpoints of constraints listed -by \ref PMP_edge_is_constrained_map "edge_is_constrained_map", and boundary edges. -The vertices move along the constrained polylines they belong to. -Corners (i.e. vertices incident to more than 2 constraints, and vertices listed in -\ref PMP_vertex_is_constrained_map "vertex_is_constrained_map") are not allowed -to move at all. -If \ref PMP_protect_constraints "protect_constraints" is -set to `true`, this parameter is ignored.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{number_of_relaxation_steps} \anchor PMP_number_of_relaxation_steps -is the number of iterations of tangential relaxation that are performed at each iteration -of `isotropic_remeshing()`. A larger number of relaxation steps lead to -a more isotropic mesh.\n -Type: \c unsigned \c int \n -Default: `1` -\cgalNPEnd - -\cgalNPBegin{use_delaunay_triangulation} \anchor PMP_use_delaunay_triangulation -enables the use of the Delaunay triangulation facet search space for hole filling functions. -If no valid triangulation can be found in this search space, the algorithm falls back to the -non-Delaunay triangulations search space to find a solution.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{use_random_uniform_sampling} \anchor PMP_use_random_uniform_sampling -is a parameter used in `sample_triangle_mesh()` to indicate that the points are picked -in a random uniform way.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{use_grid_sampling} \anchor PMP_use_grid_sampling -is a parameter used in `sample_triangle_mesh()` to indicate that the points are picked -on a grid in each face.\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{use_monte_carlo_sampling} \anchor PMP_use_monte_carlo_sampling -is a parameter used in `sample_triangle_mesh()` to indicate that the points are picked -using a Monte-Carlo approach.\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{sample_edges} \anchor PMP_sample_edges -is a parameter used in `sample_triangle_mesh()` to indicate if a dedicated sampling -of edges is done.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{sample_vertices} \anchor PMP_sample_vertices -is a parameter used in `sample_triangle_mesh()` to indicate that triangle vertices are -copied in the output iterator.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{sample_faces} \anchor PMP_sample_faces -is a parameter used in `sample_triangle_mesh()` to indicate if the interior of faces -is considered for the sampling.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{number_of_points_on_faces} \anchor PMP_number_of_points_on_faces -is a parameter used in `sample_triangle_mesh()` to set the number of points picked -using the random uniform method on faces.\n -Type: `std::size_t` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{number_of_points_on_edges} \anchor PMP_number_of_points_on_edges -is a parameter used in `sample_triangle_mesh()` to set the number of points picked -using the random uniform method on edges.\n -Type: `std::size_t` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{number_of_points_per_face} \anchor PMP_number_of_points_per_face -is a parameter used in `sample_triangle_mesh()` to set the number of points picked -per face using the Monte-Carlo method.\n -Type: `std::size_t` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{number_of_points_per_edge} \anchor PMP_number_of_points_per_edge -is a parameter used in `sample_triangle_mesh()` to set the number of points picked -per edge using the Monte-Carlo method.\n -Type: `std::size_t` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{grid_spacing} \anchor PMP_grid_spacing -is a parameter used in `sample_triangle_mesh()` to set the grid spacing when using -the grid sampling method.\n -Type: `double` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{number_of_points_per_area_unit} \anchor PMP_number_of_points_per_area_unit -is a parameter used in `sample_triangle_mesh()` to set the number of points per -area unit to be picked up in faces for the random uniform sampling and -Monte-Carlo methods.\n -Type: `double` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{number_of_points_per_distance_unit} \anchor PMP_number_of_points_per_distance_unit -is a parameter used in `sample_triangle_mesh()` to set the number of points per -distance unit to be picked up on edges for the random uniform sampling and -Monte-Carlo methods.\n -Type: `double` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{do_project} \anchor PMP_do_project -is a parameter used in `random_perturbation()` to set whether vertices are re-projected -to the input surface after their geometric perturbation.\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{random_seed} \anchor PMP_random_seed -is a parameter used in `random_perturbation()` to choose a seed to initialize -the random number generator `CGAL::Random()`. -If this parameter is not provided, the perturbation is not deterministic -(i.e. not reproducible from one run to the other).\n -Type: `unsigned int` \n -Default: the random number generator is initialized with `CGAL::Random()` -\cgalNPEnd - -\cgalNPBegin{outward_orientation} \anchor PMP_outward_orientation -Parameter used in orientation functions to choose between an outward or inward orientation. -\n -Type: `bool` \n -Default: `true` - -\cgalNPBegin{do_overlap_test_of_bounded_sides} \anchor PMP_do_overlap_test_of_bounded_sides -Parameter used in intersection test functions to indicate whether overlapping tests of bounded sides -of close meshes are done in addition to surface intersection tests. -\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{projection_functor} \anchor PMP_projection_functor -Parameter used in `isotropic_remeshing()` to specify an alternative vertex projection method. -\n -Type: Unary function object with vertex descriptor as argument type. \n -Default: A function object projecting vertices on the input surface. -\cgalNPEnd - -\cgalNPBegin{apply_per_connected_component} \anchor PMP_apply_per_connected_component -Parameter used to indicate whether an algorithm should consider each connected component -of a mesh independently.\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{visitor} \anchor PMP_visitor -Parameter used to pass a visitor class to a function. Its type and behavior depend on the visited function. -\n -Type: `A class` \n -Default: Specific to the function visited -\cgalNPEnd - -\cgalNPBegin{throw_on_self_intersection} \anchor PMP_throw_on_self_intersection -Parameter used in corefinement-related functions to make the functions throw an exception in -case some faces involved in the intersection of the input are self-intersecting -and make the operation impossible with the current version of the code. -\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{clip_volume} \anchor PMP_clip_volume -Parameter used in `clip()` functions to clip a volume rather than a surface. -\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{use_compact_clipper} \anchor PMP_use_compact_clipper -Parameter used in `clip()` functions to indicate whether the boundary of the clipper -should be considered as part of the clipping volume or not. -\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{output_iterator} \anchor PMP_output_iterator -Parameter to pass an output iterator. -\n -\b Type : a model of `OutputIterator` \n -\b Default : `#CGAL::Emptyset_iterator` -\cgalNPEnd - -\cgalNPBegin{erase_all_duplicates} \anchor PMP_erase_all_duplicates -Parameter used in the function `merge_duplicate_polygons_in_polygon_soup()` to indicate, -when multiple faces are duplicates, whether all the duplicate faces should be removed -or if one (arbitrarily chosen) face should be kept. -\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{require_same_orientation} \anchor PMP_require_same_orientation -Parameter used in the function `merge_duplicate_polygons_in_polygon_soup()` to indicate -if orientation should matter when determining whether two faces are duplicates. -\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{snapping_tolerance} \anchor PMP_snapping_tolerance -Parameter used in the function `locate_in_face()` to to snap barycentric coordinates. Depending on the geometric traits used, -the computation of the barycentric coordinates might be an inexact construction, thus leading -to sometimes surprising values (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle -of an edge). The coordinates will be snapped towards `0` and `1` if the difference is smaller than the tolerance value, while -still ensuring that the total sum of the coordinates is `1`. -\n -Type: `Kernel::FT` \n -Default: `0` -\cgalNPEnd - -\cgalNPBegin{use_angle_smoothing} \anchor PMP_use_angle_smoothing -Parameter used in the function `smooth_mesh()` to indicate if angle-based smoothing should be used. -When this type of smoothing is used, the algorithm attempts to equalize angles incident to each vertex. -\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{use_area_smoothing} \anchor PMP_use_area_smoothing -Parameter used in the function `smooth_mesh()` to indicate if area-based smoothing should be used. -When this type of smoothing is used, the algorithm attempts to equalize the areas of the triangles -incident to each vertex. Since this can create elongated triangles, a second phase uses Delaunay-based -flips to recover good shapes, unless specified otherwise (see below). -\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{do_orientation_tests} \anchor PMP_do_orientation_tests -Parameter used in `volume_connected_components()` to indicate if a surface orientation test -must be performed to decide whether a surface connected component belong to a volume or not. -\n -\b Type : `bool` \n -\b Default value is `true` -\cgalNPEnd - -\cgalNPBegin{do_self_intersection_tests} \anchor PMP_do_self_intersection_tests -Parameter used in `volume_connected_components()` to indicate if the input triangle mesh -might contains self-intersections that must be taken into account while detecting volume -connected components. -\n -\b Type : `bool` \n -\b Default value is `false` -\cgalNPEnd - -\cgalNPBegin{error_codes} \anchor PMP_error_codes -a reference to an object that must be a model of the `BackInsertionSequence` concept, -holding the classification of a volume connected component identified by its id. -The size of the container is exactly the number of volume connected components and the -object at position `k` in the container corresponds to the classification of the volume connected component -assigned the id `k`. -\n -\b Type: a `reference_wrapper` (either from `boost` or the standard library) - over an object of type `container` \n -\b Default: None -\cgalNPEnd - -\cgalNPBegin{face_connected_component_map} \anchor PMP_face_connected_component_map -a property map that will contain for each face the id -of its surface connected component in the range -`[0, number of connected components - 1[`. -\n -Type: a class model of `WritablePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and `std::size_t` as value type\n -\b Default: None -\cgalNPEnd - -\cgalNPBegin{volume_inclusions} \anchor PMP_volume_inclusions -a reference to a container holding a container of id of surface connected components. -The container must be a model of the `BackInsertionSequence` concept, -with a value type being a model of `BackInsertionSequence` of ids, -both types having the functions `reserve()` and `push_back()`. -The size of the container is exactly the number of surface connected components of the triangle mesh considered -The container at position `k` contains the id of each surface connected components -that is the first intersected by a ray with source on the surface connected component `k` -and directed outside the finite volume enclosed by the surface connected component `k`. -\n -\b Type: a `reference_wrapper` (either from `boost` or the standard library) - over an object of type `container< container >` \n -\b Default: None -\cgalNPEnd - -\cgalParamBegin{connected_component_id_to_volume_id} \anchor PMP_connected_component_id_to_volume_id -a `reference_wrapper` (either from `boost` or the standard library) containing -a reference to an object that must be a model of the `BackInsertionSequence` concept, -with a value_type being `std::size_t`. -The size of the container is exactly the number of connected components. -For each connected component identified using its id `ccid`, the id of the volume it contributes -to is the value at the position `ccid` in the parameter container. -\n -\b Type: a `reference_wrapper` (either from `boost` or the standard library) - over an object of type `container` \n -\b Default: None -\cgalParamEnd - -\cgalParamBegin{nesting_levels} \anchor PMP_nesting_levels -a `reference_wrapper` (either from `boost` or the standard library) containing -a reference to an object that must be a model of the `BackInsertionSequence` concept, -with a value_type being `std::size_t`. -The size of the container is exactly the number of connected components. -For each connected component identified using its id `ccid`, the container contains the number of -connected components containing on their bounded side this component. -\n -\b Type: a `reference_wrapper` (either from `boost` or the standard library) - over an object of type `container` \n -\b Default: None -\cgalParamEnd - -\cgalParamBegin{is_cc_outward_oriented} \anchor PMP_is_cc_outward_oriented -a `reference_wrapper` (either from `boost` or the standard library) containing -a reference to an object that must be a model of the `BackInsertionSequence` concept, -with a value_type being `bool`. -The size of the container is exactly the number of connected components. -For each connected component identified using its id `ccid`, the output of `is_outward_oriented` -called on the submesh corresponding to this connected component -is the value at the position `ccid` in the parameter container. -\n -\b Type: a `reference_wrapper` (either from `boost` or the standard library) - over an object of type `container` \n -\b Default: None -\cgalParamEnd - -\cgalParamBegin{intersecting_volume_pairs_output_iterator} \anchor PMP_intersecting_volume_pairs_output_iterator -Output iterator into which pairs of ids (id must be convertible to `std::size_t`) can be put. -Each pair of connected components intersecting will be reported using their ids. -If `do_self_intersection_tests` named parameter is set to `false`, nothing will be reported. -\b Type : a model of `OutputIterator` \n -\b Default : `#CGAL::Emptyset_iterator` -\cgalParamEnd - -\cgalNPBegin{use_Delaunay_flips} \anchor PMP_use_Delaunay_flips -Parameter used in the function `smooth_mesh()` to indicate if Delaunay-based flips should be used -after area-based smoothing has been performed. A user wishing to preserve combinatorial information -can set this parameter to `false`, but the mesh might have elongated elements. -\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{use_safety_constraints} \anchor PMP_use_safety_constraints -Parameter used in the function `smooth_mesh()` to indicate if some sanity checks should be used to decide -if the move of a vertex should be applied or rejected. These sanity checks consists of checking that -no face incident to the vertex becomes inverted and that the minimum angle of the incident faces -is not decreased by the move. -\n -Type: `bool` \n -Default: `true` -\cgalNPEnd - -\cgalNPBegin{face_size_map} \anchor PMP_face_size_map -Parameter used in the functions `keep_large_connected_components()` and -`keep_largest_connected_components()` to pass a property map that gives the size of a face when -evaluating the size of a connected component (which is defined as the sum of the sizes of its faces). -\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%face_descriptor` as key type and -a value type supporting construction from `0`, `operator+=()`, and comparison operators. \n -Default: `CGAL::Constant_property_map` with value `1` -\cgalNPEnd - -\cgalNPBegin{area_threshold} \anchor PMP_area_threshold -Parameter used in the function `remove_connected_components_of_negligible_size()` -to pass a threshold value such that all connected components with an area smaller -than this value are removed from the mesh. -\n -Type: `Kernel::FT` \n -Default: The square of one percent of the length of the diagonal of the bounding box of the mesh. -\cgalNPEnd - -\cgalNPBegin{volume_threshold} \anchor PMP_volume_threshold -Parameter used in the function `remove_connected_components_of_negligible_size()` -to pass a threshold value such that all (closed) connected components with a volume smaller -than this value are removed from the mesh. -\n -Type: `Kernel::FT` \n -Default: The third power of one percent of the length of the diagonal of the bounding box of the mesh. -\cgalNPEnd - - -\cgalNPBegin{dry_run} \anchor PMP_dry_run -Parameter that tells a function not to alter the input, but rather to only return the expected result. -It is for example used in the fucntion `keep_large_connected_components()`. -\n -Type: `bool` \n -Default: `false` -\cgalNPEnd - -\cgalNPBegin{maximum_number_of_faces} \anchor PMP_maximum_number_of_faces - -Parameter that specifies the maximum number of faces that a component -of a mesh can have to be considered reversible \n -If it is left default, then it is ignored and all components are considered reversible. \n -Type: `size_type` \n -Default: 0 -\cgalNPEnd - -\cgalNPTableEnd - -*/ diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 2717405f1bc..c5ceac4c28e 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -94,8 +94,7 @@ ranging from basic operations on simplices, to complex geometry processing algor Optional parameters of the functions of this package are implemented as \ref BGLNamedParameters. -The page \ref pmp_namedparameters "Named Parameters" describes their usage -and provides a list of the parameters that are used in this package. +The page \ref bgl_namedparameters "Named Parameters" describes their usage. \cgalCRPSection{Meshing Functions} - `CGAL::Polygon_mesh_processing::fair()` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index f89940c1e37..da098ddb327 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -33,8 +33,7 @@ any class model of the concept `FaceGraph`. Each function or class of this packa details the requirements on the input polygon mesh. \ref BGLNamedParameters are used to deal with optional parameters. -The page \ref pmp_namedparameters describes their usage -and provides a list of the parameters that are used in this package. +The page \ref bgl_namedparameters describes their usage. \subsection PMPOutline Outline The algorithms described in this manual are organized in sections: diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp index 4d9003f0d6a..484abcdefae 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp @@ -5,30 +5,55 @@ #include #include +#include +#include #include #include typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::FT FT; typedef K::Point_3 Point_3; -typedef std::vector CGAL_Polygon; typedef CGAL::Surface_mesh Mesh; +typedef std::array Custom_point; +typedef std::vector CGAL_Polygon; + namespace PMP = CGAL::Polygon_mesh_processing; +struct Array_traits +{ + struct Equal_3 + { + bool operator()(const Custom_point& p, const Custom_point& q) const { + return (p == q); + } + }; + + struct Less_xyz_3 + { + bool operator()(const Custom_point& p, const Custom_point& q) const { + return std::lexicographical_compare(p.begin(), p.end(), q.begin(), q.end()); + } + }; + + Equal_3 equal_3_object() const { return Equal_3(); } + Less_xyz_3 less_xyz_3_object() const { return Less_xyz_3(); } +}; + int main(int, char**) { // First, construct a polygon soup with some problems - std::vector points; + std::vector > points; std::vector polygons; - points.push_back(Point_3(0,0,0)); - points.push_back(Point_3(1,0,0)); - points.push_back(Point_3(0,1,0)); - points.push_back(Point_3(-1,0,0)); - points.push_back(Point_3(0,-1,0)); - points.push_back(Point_3(0,1,0)); // duplicate point - points.push_back(Point_3(0,-2,0)); // unused point + points.push_back(CGAL::make_array(0,0,0)); + points.push_back(CGAL::make_array(1,0,0)); + points.push_back(CGAL::make_array(0,1,0)); + points.push_back(CGAL::make_array(-1,0,0)); + points.push_back(CGAL::make_array(0,-1,0)); + points.push_back(CGAL::make_array(0,1,0)); // duplicate point + points.push_back(CGAL::make_array(0,-2,0)); // unused point CGAL_Polygon p; p.push_back(0); p.push_back(1); p.push_back(2); @@ -67,10 +92,12 @@ int main(int, char**) p.push_back(4); p.push_back(3); p.push_back(2); p.push_back(1); polygons.push_back(p); - PMP::repair_polygon_soup(points, polygons); - PMP::orient_polygon_soup(points, polygons); + std::cout << "Before reparation, the soup has " << points.size() << " vertices and " << polygons.size() << " faces" << std::endl; + PMP::repair_polygon_soup(points, polygons, CGAL::parameters::geom_traits(Array_traits())); + std::cout << "After reparation, the soup has " << points.size() << " vertices and " << polygons.size() << " faces" << std::endl; Mesh mesh; + PMP::orient_polygon_soup(points, polygons); PMP::polygon_soup_to_polygon_mesh(points, polygons, mesh); std::cout << "Mesh has " << num_vertices(mesh) << " vertices and " << num_faces(mesh) << " faces" << std::endl; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h index 3c3789d35d4..5dc96c7cdd3 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h @@ -43,21 +43,27 @@ namespace CGAL { * computes a bounding box of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, - * providing the functor `Construct_bbox_3` and the function - * `Construct_bbox_3 construct_bbox_3_object()`. `Construct_bbox_3` - * must provide `BBox_3 operator()(Point_3)` where `Point_3` is the value type - * of the vertex point map. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class providing the functor `Construct_bbox_3` + * and the function `Construct_bbox_3 construct_bbox_3_object()`. + * `Construct_bbox_3` must provide `Bbox_3 operator()(Point_3)` + * where `%Point_3` is the value type of the vertex point map.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return a bounding box of `pmesh` @@ -92,22 +98,28 @@ namespace CGAL { * computes a bounding box of a vertex of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param vd a descriptor of a vertex in `pmesh` * @param pmesh a polygon mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, - * providing the functor `Construct_bbox_3` and the function - * `Construct_bbox_3 construct_bbox_3_object()`. `Construct_bbox_3` - * must provide `BBox_3 operator()(Point_3)` where `Point_3` is the value type - * of the vertex point map. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class providing the functor `Construct_bbox_3` + * and the function `Construct_bbox_3 construct_bbox_3_object()`. + * `Construct_bbox_3` must provide `Bbox_3 operator()(Point_3)` + * where `%Point_3` is the value type of the vertex point map.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return a bounding box of `pmesh` @@ -135,22 +147,28 @@ namespace CGAL { * computes a bounding box of an edge of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param ed a descriptor of an edge in `pmesh` * @param pmesh a polygon mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, - * providing the functor `Construct_bbox_3` and the function - * `Construct_bbox_3 construct_bbox_3_object()`. `Construct_bbox_3` - * must provide `BBox_3 operator()(Point_3)` where `Point_3` is the value type - * of the vertex point map. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class providing the functor `Construct_bbox_3` + * and the function `Construct_bbox_3 construct_bbox_3_object()`. + * `Construct_bbox_3` must provide `Bbox_3 operator()(Point_3)` + * where `%Point_3` is the value type of the vertex point map.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return a bounding box of `pmesh` @@ -180,22 +198,29 @@ namespace CGAL { * computes a bounding box of a face of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param fd a descriptor of a face in `pmesh` * @param pmesh a polygon mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, - * providing the functor `Construct_bbox_3` and the function - * `Construct_bbox_3 construct_bbox_3_object()`. `Construct_bbox_3` - * must provide `BBox_3 operator()(Point_3)` where `Point_3` is the value type - * of the vertex point map. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `PolygonMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class providing the functor `Construct_bbox_3` + * and the function `Construct_bbox_3 construct_bbox_3_object()`. + * `Construct_bbox_3` must provide `Bbox_3 operator()(Point_3)` + * where `%Point_3` is the value type of the vertex point map.} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return a bounding box of `pmesh` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h index c52695b90cf..609352d5fac 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h @@ -154,18 +154,23 @@ std::size_t border_size(typename boost::graph_traits::halfedge_desc * @tparam HalfedgeOutputIterator model of `OutputIterator` holding `boost::graph_traits::%halfedge_descriptor` for patch border - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh the polygon mesh to which the faces in `face_range` belong * @param face_range the range of faces defining the patch whose border halfedges * are collected * @param out the output iterator that collects the border halfedges of the patch, * seen from outside. - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * \cgalNamedParamsBegin - \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd - \cgalNamedParamsEnd + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * \cgalNamedParamsEnd * * @returns `out` */ diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h index d059c3eb33d..16a42066d03 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h @@ -404,6 +404,7 @@ void split_along_edges(TriangleMesh& tm, /** * \ingroup PMP_corefinement_grp + * * clips `tm` by keeping the part that is inside the volume \link coref_def_subsec bounded \endlink * by `clipper`. * If `tm` is closed, the clipped part can be closed too if the named parameter `clip_volume` is set to `true`. @@ -415,38 +416,63 @@ void split_along_edges(TriangleMesh& tm, * \pre \link CGAL::Polygon_mesh_processing::does_bound_a_volume() `CGAL::Polygon_mesh_processing::does_bound_a_volume(clipper)` \endlink * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm input triangulated surface mesh * @param clipper triangulated surface mesh used to clip `tm` - * @param np_tm optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below - * @param np_c optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np_tm an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * @param np_c an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm` (`clipper`). - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing a unique index for each face of `tm` (`clipper`). - * \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces. - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, - * the set of triangles closed to the intersection of `tm` and `clipper` will be - * checked for self-intersections and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found. Default value is `false`. - * \cgalParamEnd - * \cgalParamBegin{clip_volume} if `true` and `tm` is closed, the clipping will be done on - * the volume \link coref_def_subsec bounded \endlink by `tm` rather than on its surface - * (i.e., `tm` will be kept closed). Default value is `false`. - * \cgalParamEnd - * \cgalParamBegin{use_compact_clipper} if `false`, the parts of `tm` coplanar with `clipper` - * will not be part of the output. Default value is `true`. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm` (resp. `clipper`)} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm (resp. clipper))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` (`clipper`) a unique index between `0` and `num_faces(tm (resp. clipper)) - 1`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{if the property map is writable, the indices of the faces of `tm` and `clipper` + * will be set after refining `tm` with the intersection with `clipper`} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm` and `clipper` will be + * checked for self-intersections and `Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{clip_volume} + * \cgalParamDescription{If `true`, and `tm` is closed, the clipping will be done on the volume + * \link coref_def_subsec bounded \endlink by `tm` rather than on its surface + * (i.e., `tm` will be kept closed).} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_compact_clipper} + * \cgalParamDescription{if `false`, the parts of `tm` coplanar with `clipper` will not be part of the output.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{This option has an effect only if a surface and not a volume is clipped, + * (i.e., if `clip_volume` is `false` or if `tm` is open).} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if the output surface mesh is manifold. @@ -479,33 +505,56 @@ clip(TriangleMesh& tm, * * \note In the current implementation it is not possible to set the vertex point map and the default will be used. `Plane_3` must be * from the same %Kernel as the point of the vertex point map. + * * \pre \link CGAL::Polygon_mesh_processing::does_self_intersect() `!CGAL::Polygon_mesh_processing::does_self_intersect(tm)` \endlink * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. * An internal property map for `CGAL::vertex_point_t` must be available. * - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm input triangulated surface mesh * @param plane plane whose negative side defines the half-space to intersect `tm` with. * `Plane_3` is the plane type for the same CGAL kernel as the point of the vertex point map of `tm`. - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces. - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, - * the set of triangles closed to the intersection of `tm` and `plane` will be - * checked for self-intersections and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found. Default value is `false`. - * \cgalParamEnd - * \cgalParamBegin{clip_volume} if `true` and `tm` is closed, the clipping will be done on - * the volume \link coref_def_subsec bounded \endlink by `tm` rather than on its surface - * (i.e., `tm` will be kept closed). Default value is `false`. - * \cgalParamEnd - * \cgalParamBegin{use_compact_clipper} if `false` the parts of `tm` coplanar with `plane` - * will not be part of the output. Default value is `true`. + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm` + * and `plane` will be checked for self-intersections + * and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{clip_volume} + * \cgalParamDescription{If `true`, and `tm` is closed, the clipping will be done on + * the volume \link coref_def_subsec bounded \endlink by `tm` + * rather than on its surface (i.e., `tm` will be kept closed).} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_compact_clipper} + * \cgalParamDescription{if `false` the parts of `tm` coplanar with `plane` will not be part of the output} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * * \cgalNamedParamsEnd * * @return `true` if the output surface mesh is manifold. @@ -560,27 +609,41 @@ bool clip(TriangleMesh& tm, * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. * An internal property map for `CGAL::vertex_point_t` must be available. * - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm input triangulated surface mesh * @param iso_cuboid iso-cuboid used to clip `tm`. - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces. - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, - * the set of triangles closed to the intersection of `tm` and `iso_cuboid` will be - * checked for self-intersections and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found. - * \cgalParamEnd - * \cgalParamBegin{clip_volume} if `true` and `tm` is closed, the clipping will be done on - * the volume \link coref_def_subsec bounded \endlink by `tm` rather than on its surface - * (i.e., `tm` will be kept closed). - * \cgalParamEnd - * \cgalParamBegin{use_compact_clipper} if `false` and `clip_volume` is `false` and `tm` is open, the parts of `tm` coplanar with `is_cuboid` - * will not be part of the output. + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm` + * and `iso_cuboid` will be checked for self-intersections + * and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{clip_volume} + * \cgalParamDescription{If `true`, and `tm` is closed, the clipping will be done on + * the volume \link coref_def_subsec bounded \endlink by `tm` + * rather than on its surface (i.e., `tm` will be kept closed).} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_compact_clipper} + * \cgalParamDescription{if `false` the parts of `tm` coplanar with `iso_cuboid` will not be part of the output} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if the output surface mesh is manifold. @@ -616,28 +679,39 @@ bool clip(TriangleMesh& tm, * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. * - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm input triangulated surface mesh * @param splitter triangulated surface mesh used to split `tm` - * @param np_tm optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below - * @param np_s optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np_tm an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * @param np_s an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm` (`splitter`). - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces. - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, - * the set of triangles closed to the intersection of `tm` and `splitter` will be - * checked for self-intersections and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm` (`splitter`)} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamDefault{If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm` + * and `splitter` will be checked for self-intersections + * and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * * \cgalNamedParamsEnd */ template ::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm` + * and `plane` will be checked for self-intersections + * and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * * \cgalNamedParamsEnd */ template ::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm` + * and `iso_cuboid` will be checked for self-intersections + * and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{clip_volume} + * \cgalParamDescription{If `true`, and `tm` is closed, the clipping will be done on + * the volume \link coref_def_subsec bounded \endlink by `tm` + * rather than on its surface (i.e., `tm` will be kept closed).} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_compact_clipper} + * \cgalParamDescription{if `false` the parts of `tm` coplanar with `iso_cuboid` will not be part of the output} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * * \cgalNamedParamsEnd */ template ::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @return the computed normal. The return type is a 3D vector type. It is -* either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, +* either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or from the geometric traits class deduced from the point property map * of `pmesh`. * * \warning This function involves a square root computation. -* If `Kernel::FT` does not have a `sqrt()` operation, the square root computation -* will be done approximately. +* If the field type (`FT`) of the traits does not support the `sqrt()` operation, +* the square root computation will be performed approximately. */ template #ifdef DOXYGEN_RUNNING @@ -188,18 +199,29 @@ compute_face_normal(typename boost::graph_traits::face_descriptor f * * @param pmesh the polygon mesh * @param face_normals the property map in which the normals are written -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd -* \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * \warning This function involves a square root computation. -* If `Kernel::FT` does not have a `sqrt()` operation, the square root computation -* will be done approximately. +* If the field type (`FT`) of the traits does not support the `sqrt()` operation, +* the square root computation will be performed approximately. */ template void compute_face_normals(const PolygonMesh& pmesh, @@ -591,25 +613,36 @@ compute_vertex_normal_as_sum_of_weighted_normals(typename boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @return the computed normal. The return type is a 3D vector type. It is -* either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, +* either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `pmesh`. * * \warning This function involves a square root computation. -* If `Kernel::FT` does not have a `sqrt()` operation, the square root computation -* will be done approximately. +* If the field type (`FT`) of the traits does not support the `sqrt()` operation, +* the square root computation will be performed approximately. */ template #ifdef DOXYGEN_RUNNING @@ -712,18 +745,29 @@ compute_vertex_normal(typename boost::graph_traits::vertex_descript * * @param pmesh the polygon mesh * @param vertex_normals the property map in which the normals are written -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd -* \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * \warning This function involves a square root computation. -* If `Kernel::FT` does not have a `sqrt()` operation, the square root computation -* will be done approximately. +* If the field type (`FT`) of the traits does not support the `sqrt()` operation, +* the square root computation will be performed approximately. */ template void compute_vertex_normals(const PolygonMesh& pmesh, @@ -801,18 +845,29 @@ void compute_vertex_normals(const PolygonMesh& pmesh, VertexNormalMap vertex_nor * @param pmesh the polygon mesh * @param vertex_normals the property map in which the vertex normals are written * @param face_normals the property map in which the face normals are written -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd -* \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * \warning This function involves a square root computation. -* If `Kernel::FT` does not have a `sqrt()` operation, the square root computation -* will be done approximately. +* If the field type (`FT`) of the traits does not support the `sqrt()` operation, +* the square root computation will be performed approximately. */ template ::%face_descriptor`. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam FaceOutputIterator a model of `OutputIterator` with value type `boost::graph_traits::%face_descriptor`. + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param seed_face a face of `pmesh` from which exploration starts to detect the connected component that contains it * \param pmesh the polygon mesh * \param out the output iterator that collects faces from the same connected component as `seed_face` - * \param np optional \ref pmp_namedparameters "Named Parameters" described below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge key} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * \returns the output iterator. + * \returns the output iterator. * */ template ::face_descriptor s * \tparam FaceComponentMap a model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type and `boost::graph_traits::%faces_size_type` as value type. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * \param pmesh the polygon mesh * \param fcm the property map with indices of components associated to faces in `pmesh` - * \param np optional \ref pmp_namedparameters "Named Parameters" described below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * \returns the number of connected components. + * \returns the number of connected components. */ template ::%edge_descriptor` +// * as key type and `bool` as value type} +// * \cgalParamDefault{a constant property map returning `false` for any edge} +// * \cgalParamNEnd +// * +// * \cgalParamNBegin{face_index_map} +// * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} +// * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +// * as key type and `std::size_t` as value type} +// * \cgalParamDefault{an automatically indexed internal map} +// * \cgalParamNEnd // * \cgalNamedParamsEnd // * // * \returns the output iterator. @@ -327,33 +352,58 @@ std::size_t number_of_connected_components(const PolygonMesh& pmesh) * of faces it contains), but it is also possible to pass custom sizes, such as the area of the face. * * \tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param pmesh the polygon mesh * \param nb_components_to_keep the number of components to be kept. If this number is larger than * the number of components in the mesh, all components are kept. - * \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd - * \cgalParamBegin{vertex_index_map} a property map containing the index of each vertex of `pmesh` \cgalParamEnd - * \cgalParamBegin{face_size_map} - * a property map containing a size for each face of `pmesh`. The value type of this property map - * is chosen by the user, but must be constructible from `0` and support `operator+=()` and - * comparisons. - * \cgalParamEnd - * \cgalParamBegin{dry_run} - * a Boolean parameter. If set to `true`, the mesh will not be altered, but the number - * of components that would be removed is returned. The default value is `false`. - * \cgalParamEnd - * \cgalParamBegin{output_iterator} a model of `OutputIterator` with value type `face_descriptor`. - * When using the "dry run" mode (see parameter `dry_run`), faces that would be removed by the - * algorithm can be collected with this output iterator. - * \cgalParamEnd + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_size_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a size} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type. + * The value type is chosen by the user, but must be constructible from `0` and support summation and comparisons.} + * \cgalParamDefault{A constant property map returning `1` for any face} + * \cgalParamNEnd + * + * \cgalParamNBegin{dry_run} + * \cgalParamDescription{If set to `true`, the mesh will not be altered, but the number of components + * that would be removed is returned.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{output_iterator} + * \cgalParamDescription{an output iterator to collect the faces that would be removed by the algorithm, + * when using the "dry run" mode (see parameter `dry_run`)} + * \cgalParamType{a model of `OutputIterator` with value type `face_descriptor`} + * \cgalParamDefault{unused} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * \return the number of connected components removed (ignoring isolated vertices). + * \return the number of connected components removed (ignoring isolated vertices). */ template @@ -455,35 +505,60 @@ std::size_t keep_largest_connected_components(PolygonMesh& pmesh, * * \tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` * \tparam ThresholdValueType the type of the threshold value - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param pmesh the polygon mesh * \param threshold_value any connected component with a size (strictly) smaller than this value will be discarded - * \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd - * \cgalParamBegin{vertex_index_map} a property map containing the index of each vertex of `pmesh` \cgalParamEnd - * \cgalParamBegin{face_size_map} - * a property map containing a size for each face of `pmesh`. The value type of this property map - * is chosen by the user, but must be constructible from `0` and support `operator+=()` and - * comparisons. - * \cgalParamEnd - * \cgalParamBegin{dry_run} - * a Boolean parameter. If set to `true`, the mesh will not be altered, but the number - * of components that would be removed is returned. The default value is `false`. - * \cgalParamEnd - * \cgalParamBegin{output_iterator} a model of `OutputIterator` with value type `face_descriptor`. - * When using the "dry run" mode (see parameter `dry_run`), faces that would be removed by the - * algorithm can be collected with this output iterator. - * \cgalParamEnd + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_size_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a size} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type. + * The value type is chosen by the user, but must be constructible from `0` and support summation and comparisons.} + * \cgalParamDefault{A constant property map returning `1` for any face} + * \cgalParamNEnd + * + * \cgalParamNBegin{dry_run} + * \cgalParamDescription{If set to `true`, the mesh will not be altered, but the number of components + * that would be removed is returned.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{output_iterator} + * \cgalParamDescription{an output iterator to collect the faces that would be removed by the algorithm, + * when using the "dry run" mode (see parameter `dry_run`)} + * \cgalParamType{a model of `OutputIterator` with value type `face_descriptor`} + * \cgalParamDefault{unused} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \pre If a face size property map is passed by the user, `ThresholdValueType` must be the same * type as the value type of the property map. Otherwise, `ThresholdValueType` must be `std::size_t`. * - * \return the number of connected components removed (ignoring isolated vertices). + * \return the number of connected components removed (ignoring isolated vertices). */ template ::%face_descriptor` as key type and * `boost::graph_traits::%faces_size_type` as value type. +* \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param components_to_keep the range of ids of connected components to keep * \param pmesh the polygon mesh * \param fcm the property map with indices of components associated to faces in `pmesh`. * After calling this function, the values of `fcm` are undefined. -* \param np optional \ref pmp_namedparameters "Named Parameters" described below +* \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_index_map} a property map containing the index of each vertex of `pmesh` \cgalParamEnd +* \cgalParamNBegin{vertex_index_map} +* \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -741,7 +821,7 @@ void keep_connected_components(PolygonMesh& pmesh /*! * \ingroup keep_connected_components_grp -* Removes in `pmesh` the connected components designated by theirs ids +* removes in `pmesh` the connected components designated by theirs ids * in `components_to_remove` as well as all isolated vertices. * The connected component id of a face is given by `fcm`. * @@ -749,20 +829,25 @@ void keep_connected_components(PolygonMesh& pmesh * then the behavior of this function is undefined. * * \tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -* \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" * \tparam ComponentRange a range of ids convertible to `std::size` * \tparam FaceComponentMap a model of `ReadWritePropertyMap` with * `boost::graph_traits::%face_descriptor` as key type and * `boost::graph_traits::%faces_size_type` as value type. +* \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param components_to_remove the range of ids of connected components to remove * \param pmesh the polygon mesh * \param fcm the property map with indices of components associated to faces in `pmesh`. * After calling this function, the values of `fcm` are undefined. -* \param np optional \ref pmp_namedparameters "Named Parameters" described below +* \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_index_map} a property map containing the index of each vertex of `pmesh` \cgalParamEnd +* \cgalParamNBegin{vertex_index_map} +* \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -788,18 +873,35 @@ void remove_connected_components(PolygonMesh& pmesh * then the behavior of this function is undefined. * * \tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -* \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * \tparam FaceRange a range of `boost::graph_traits::%face_descriptor` * indicating the connected components to be removed. * * \param components_to_remove a face range, including one face or more on each component to be removed * \param pmesh the polygon mesh -* \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +* \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd -* \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd -* \cgalParamBegin{vertex_index_map} a property map containing the index of each vertex of `pmesh` \cgalParamEnd +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` +* as key type and `bool` as value type} +* \cgalParamDefault{a constant property map returning `false` for any edge} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_index_map} +* \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd +* +* \cgalParamNBegin{face_index_map} +* \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -841,18 +943,35 @@ void remove_connected_components(PolygonMesh& pmesh * then the behavior of this function is undefined. * * \tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -* \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * \tparam FaceRange a range of `boost::graph_traits::%face_descriptor` * indicating the connected components to be kept. * * \param pmesh the polygon mesh * \param components_to_keep a face range, including one face or more on each component to be kept -* \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +* \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd -* \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd -* \cgalParamBegin{vertex_index_map} a property map containing the index of each vertex of `pmesh` \cgalParamEnd +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` +* as key type and `bool` as value type} +* \cgalParamDefault{a constant property map returning `false` for any edge} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_index_map} +* \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd +* +* \cgalParamNBegin{face_index_map} +* \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -991,39 +1110,61 @@ void split_connected_components_impl(FIMap fim, /*! * \ingroup keep_connected_components_grp - * identifies the connected components of `pm` and pushes back a new `PolygonMesh` for each connected component in `cc_meshes`. - * + * identifies the connected components of `pmesh` and pushes back a new `PolygonMesh` for each connected component in `cc_meshes`. * * \tparam PolygonMesh a model of `FaceListGraph` * \tparam PolygonMeshRange a model of `SequenceContainer` with `PolygonMesh` as value type. * * \tparam NamedParameters a sequence of Named Parameters * - * \param pm the polygon mesh + * \param pmesh the polygon mesh * \param cc_meshes container that is filled with the extracted connected components. - * \param np an optional sequence of Named Parameters among the ones listed below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pm` \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing a unique index for each face initialized from 0 to `num_faces(pm)` - * \cgalParamEnd - * \cgalParamBegin{vertex_index_map} - * a property map containing a unique index for each vertex initialized 0 to `num_vertices(pm)` - * \cgalParamEnd - * \cgalNPBegin{halfedge_index_map} - * a property map containing a unique index for each halfedge initialized 0 to `num_halfedges(pm)` - * \cgalNPEnd - * \cgalParamBegin{face_patch_map} a property map with the patch id's associated to the - faces of `pm`. Instance of a class model of `ReadPropertyMap`. - If not provided, an internal map will be filled with a call to - `connected_components()` with `edge_is_constrained_map()` (if provided). -* \cgalParamEnd + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_index_map} + * \cgalParamDescription{a property map associating to each vertex of `pmesh` a unique index between `0` and `num_vertices(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{halfedge_index_map} + * \cgalParamDescription{a property map associating to each halfedge of `pmesh` a unique index between `0` and `num_halfedges(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%halfedge_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_patch_map} + * \cgalParamDescription{a property map with the patch id's associated to the faces of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and the desired property, model of `CopyConstructible` as value type.} + * \cgalParamDefault{a default property map where each face is associated with the ID of + * the connected component it belongs to. Connected components are + * computed with respect to the constrained edges listed in the property map + * `edge_is_constrained_map`} + * \cgalParamExtra{The map is updated during the remeshing process while new faces are created.} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ template -void split_connected_components(const PolygonMesh& pm, +void split_connected_components(const PolygonMesh& pmesh, PolygonMeshRange& cc_meshes, const NamedParameters& np) { @@ -1039,17 +1180,17 @@ void split_connected_components(const PolygonMesh& pm, Ecm ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), internal::No_mark()); - internal::split_connected_components_impl(CGAL::get_initialized_face_index_map(pm, np), - CGAL::get_initialized_halfedge_index_map(pm, np), - CGAL::get_initialized_vertex_index_map(pm, np), - ecm, cc_meshes, pm, np); + internal::split_connected_components_impl(CGAL::get_initialized_face_index_map(pmesh, np), + CGAL::get_initialized_halfedge_index_map(pmesh, np), + CGAL::get_initialized_vertex_index_map(pmesh, np), + ecm, cc_meshes, pmesh, np); } template -void split_connected_components(const PolygonMesh& pm, +void split_connected_components(const PolygonMesh& pmesh, PolygonMeshRange& cc_meshes) { - split_connected_components(pm, cc_meshes, parameters::all_default()); + split_connected_components(pmesh, cc_meshes, parameters::all_default()); } } // namespace Polygon_mesh_processing diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h index e0e8c27de2f..a3c64422946 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h @@ -89,56 +89,83 @@ enum Boolean_operation_type {UNION = 0, INTERSECTION=1, * \pre \link CGAL::Polygon_mesh_processing::does_bound_a_volume() `CGAL::Polygon_mesh_processing::does_bound_a_volume(tm2)` \endlink * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph` - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParametersOut0 a sequence of \ref pmp_namedparameters "Named Parameters" for computing the union of the volumes bounded by `tm1` and `tm2` - * @tparam NamedParametersOut1 a sequence of \ref pmp_namedparameters "Named Parameters" for computing the intersection of the volumes bounded by `tm1` and `tm2` - * @tparam NamedParametersOut2 a sequence of \ref pmp_namedparameters "Named Parameters" for computing the difference of the volumes bounded by `tm1` and `tm2` - * @tparam NamedParametersOut3 a sequence of \ref pmp_namedparameters "Named Parameters" for computing the difference of the volumes bounded by `tm2` and `tm1` + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParametersOut0 a sequence of \ref bgl_namedparameters "Named Parameters" for computing the union of the volumes bounded by `tm1` and `tm2` + * @tparam NamedParametersOut1 a sequence of \ref bgl_namedparameters "Named Parameters" for computing the intersection of the volumes bounded by `tm1` and `tm2` + * @tparam NamedParametersOut2 a sequence of \ref bgl_namedparameters "Named Parameters" for computing the difference of the volumes bounded by `tm1` and `tm2` + * @tparam NamedParametersOut3 a sequence of \ref bgl_namedparameters "Named Parameters" for computing the difference of the volumes bounded by `tm2` and `tm1` * * @param tm1 first input triangulated surface mesh * @param tm2 second input triangulated surface mesh * @param output an array of output surface meshes - * @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below - * @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * @param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm1` (`tm2`). - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` should be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm1` (`tm2`). - * \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `tm1` (`tm2`). - * Note that if the property map is writable, the indices of the faces - * of `tm1` and `tm2` will be set after the corefinement is done. - * \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces (`np1` only) - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh, - * the set of triangles close to the intersection of `tm1` and `tm2` will be - * checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found (`np1` only). - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm1` (`tm2`) a unique index + * between `0` and `num_faces(tm1) - 1` (`num_faces(tm2) - 1`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` + * will be set after the corefinement is done.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm1` and `tm2` will be + * checked for self-intersections and `Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * @param nps_out tuple of optional sequences of \ref pmp_namedparameters "Named Parameters" each among the ones listed below + * @param nps_out an optional tuple of sequences of \ref bgl_namedparameters "Named Parameters" each among the ones listed below * (`tm_out` being used to refer to the output surface mesh in `output` corresponding to a given named parameter sequence) * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm_out`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm_out`. An edge of `tm_out` is constrained - * if it is on the intersection of `tm1` and `tm2`, or if the edge corresponds to a - * constrained edge in `tm1` or `tm2`. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm_out`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm_out)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm_out`. + * An edge of `tm_out` is constrained if it is on the intersection of `tm1` and `tm2`, + * or if the edge corresponds to a constrained edge in `tm1` or `tm2`.} + * \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return an array filled as follows: for each operation computed, the position in the array @@ -449,52 +476,79 @@ corefine_and_compute_boolean_operations( * \pre \link CGAL::Polygon_mesh_processing::does_bound_a_volume() `CGAL::Polygon_mesh_processing::does_bound_a_volume(tm2)` \endlink * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph` - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParametersOut a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParametersOut a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm1 first input triangulated surface mesh * @param tm2 second input triangulated surface mesh * @param tm_out output surface mesh - * @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below - * @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * @param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm1` (`tm2`). - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm1` (`tm2`). - * \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `tm1` (`tm2`). - * Note that if the property map is writable, the indices of the faces - * of `tm1` and `tm2` will be set after the corefinement is done. - * \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces (`np1` only) - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh, - * the set of triangles close to the intersection of `tm1` and `tm2` will be - * checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found (`np1` only). - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm1` (`tm2`) a unique index + * between `0` and `num_faces(tm1) - 1` (`num_faces(tm2) - 1`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` + * will be set after the corefinement is done.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true` the set of triangles closed to the intersection of `tm1` and `tm2` will be + * checked for self-intersections and `Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * @param np_out optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np_out an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm_out`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm_out`. An edge of `tm_out` is constrained - * if it is on the intersection of `tm1` and `tm2`, or if the edge corresponds to a - * constrained edge in `tm1` or `tm2`. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm_out`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm_out)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm_out`. + * An edge of `tm_out` is constrained if it is on the intersection of `tm1` and `tm2`, + * or if the edge corresponds to a constrained edge in `tm1` or `tm2`.} + * \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if the output surface mesh is manifold and is put into `tm_out`. @@ -601,31 +655,46 @@ corefine_and_compute_difference( TriangleMesh& tm1, * \pre \link CGAL::Polygon_mesh_processing::does_self_intersect() `!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)` \endlink * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph` - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm1 first input triangulated surface mesh * @param tm2 second input triangulated surface mesh - * @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below - * @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * @param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm1` (`tm2`). - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm1` (`tm2`) - * \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces (`np1` only) - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh, - * the set of triangles close to the intersection of `tm1` and `tm2` will be - * checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found (`np1` only). - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true` the set of triangles closed to the intersection of `tm1` and `tm2` will be + * checked for self-intersections and `Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -716,20 +785,39 @@ namespace experimental { * @tparam NamedParameters a sequence of \ref namedparameters * * @param tm input triangulated surface mesh - * @param np optional sequence of \ref namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm` - * \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm1` and `tm2` + * will be set after the corefinement is done.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -789,21 +877,40 @@ autorefine( TriangleMesh& tm, * @tparam NamedParameters a sequence of \ref namedparameters * * @param tm input triangulated surface mesh - * @param np optional sequence of \ref namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{edge_is_constrained_map} a property map containing the - * constrained-or-not status of each edge of `tm` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `tm` \cgalParamEnd - * \cgalParamBegin{visitor} a class model of `PMPCorefinementVisitor` - * that is used to track the creation of new faces - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{edge_is_constrained_map} + * \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` + * as key type and `bool` as value type} + * \cgalParamDefault{a constant property map returning `false` for any edge} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamExtra{If the property map is writable, the indices of the faces of `tm` will be set + * after the autorefinement is done.} + * \cgalParamNEnd + * + * \cgalParamNBegin{visitor} + * \cgalParamDescription{a visitor used to track the creation of new faces} + * \cgalParamType{a class model of `PMPCorefinementVisitor`} + * \cgalParamDefault{`Corefinement::Default_visitor`} + * \cgalParamNEnd + * * \cgalNamedParamsEnd * */ diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h index 59bdf9db803..d4a32b81183 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h @@ -236,22 +236,31 @@ template::%edge_descriptor` * as key type and `bool` as value type. It must be default constructible. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param pmesh the polygon mesh * \param angle_in_deg the dihedral angle bound * \param edge_is_feature_map the property map that will contain the sharp-or-not status of each edge of `pmesh` - * \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd - * \cgalParamBegin{vertex_feature_degree_map} a property map that will contain the number of adjacent feature edges for - * each vertex of `pmesh` \cgalParamEnd + * \cgalParamNBegin{vertex_feature_degree_map} + * \cgalParamDescription{a property map that will associate to each vertex of `pmesh` the number of incident feature edges} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `int` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_feature_degree_t(), pmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -295,6 +304,7 @@ void detect_sharp_edges(PolygonMesh& pmesh, inserted several times. * \tparam EdgeIsFeatureMap a model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` * as key type and `bool` as value type. + * * \param pmesh the polygon mesh * \param patch_id_map the property map containing the surface patch ids for the faces of `pmesh`. It must be already filled. * \param vertex_incident_patches_map a property map that will contain the patch ids of all the faces incident to each vertex of `pmesh`. @@ -368,31 +378,59 @@ namespace internal * computing a * surface patch id for each face. * - * * \tparam PolygonMesh a model of `FaceGraph` * \tparam FT a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or from the geometric traits class deduced from the point property map * of `PolygonMesh`. * \tparam EdgeIsFeatureMap a model of `ReadWritePropertyMap` with `boost::graph_traits::%edge_descriptor` * \tparam PatchIdMap a model of `ReadWritePropertyMap` with `boost::graph_traits::%face_descriptor` as key type and the desired patch id, model of `CopyConstructible` as value type. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param pmesh the polygon mesh * \param angle_in_deg the dihedral angle bound * \param edge_is_feature_map the property map that will contain the sharp-or-not status of each edge of `pmesh` * \param patch_id_map the property map that will contain the surface patch ids for the faces of `pmesh`. - * \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd - * \cgalParamBegin{vertex_feature_degree_map} a property map that will contain the number of adjacent feature edges for each vertex of `pmesh` \cgalParamEnd - * \cgalParamBegin{first_index} a `std::size_t` containing the index of the first surface patch of `pmesh`. - * The patches will be numbered on [first_index; first_index + num_patches], where num_patches is the number of surface patches \cgalParamEnd - * \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` \cgalParamEnd - * \cgalParamBegin{vertex_incident_patches_map} a property map that will contain the patch ids of all the faces incident to each vertex of `pmesh`. \cgalParamEnd + * \cgalParamNBegin{vertex_feature_degree_map} + * \cgalParamDescription{a property map that will associate to each vertex of `pmesh` the number of incident feature edges} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `int` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_feature_degree_t(), pmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{first_index} + * \cgalParamDescription{the index of the first surface patch of `pmesh`} + * \cgalParamType{`std::size_t`} + * \cgalParamExtra{The patches will be numbered on `[first_index; first_index + num_patches]`, + * where `num_patches` is the number of surface patches.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_incident_patches_map} + * \cgalParamDescription{a property map that will contain the patch ids of all the faces incident to each vertex of `pmesh`} + * \cgalParamType{a model of mutable `LvaluePropertyMap` with + * `boost::graph_traits::%vertex_descriptor` as key type. Its value type + * must be a container of `boost::property_traits::%value_type` and have a function `insert()`.} + * \cgalParamExtra{A `std::set` or a `boost::unordered_set` are recommended, as a patch index may be inserted several times.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * \returns the number of surface patches. * @@ -451,9 +489,6 @@ sharp_edges_segmentation(PolygonMesh& p, parameters::all_default()); } - - - } // end namespace PMP } // end namespace CGAL diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/distance.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/distance.h index 08f6d8c997d..51582e9c861 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/distance.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/distance.h @@ -702,97 +702,138 @@ struct Triangle_structure_sampler_for_triangle_soup * holding objects of the same point type as * the value type of the point type associated to the mesh `tm`, i.e. the value type of the vertex * point map property map, if provided, or the value type of the internal point property map otherwise - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm the triangle mesh to be sampled * @param out output iterator to be filled with sample points - * @param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points - * associated to the vertices of `tm`. If this parameter is omitted, - * an internal property map for `CGAL::vertex_point_t` - * must be available for `TriangleMesh`. - * \cgalParamEnd - * \cgalParamBegin{geom_traits} a model of `PMPDistanceTraits`. \cgalParamEnd - * \cgalParamBegin{use_random_uniform_sampling} - * if `true` (default value), points are generated in a random - * and uniform way on the surface of `tm`, and/or on edges of `tm`. - * For faces, the number of sample points is the value passed to the named - * parameter `number_of_points_on_faces`. If not set, - * the value passed to the named parameter `number_of_points_per_area_unit` - * is multiplied by the area of `tm` to get the number of sample points. - * If none of these parameters is set, the number of points sampled is `num_vertices(tm)`. - * For edges, the number of the number of sample points is the value passed to the named - * parameter `number_of_points_on_edges`. If not set, - * the value passed to the named parameter `number_of_points_per_distance_unit` - * is multiplied by the sum of the length of edges of `tm` to get the number of sample points. - * If none of these parameters is set, the number of points sampled is `num_vertices(tm)`. - * \cgalParamEnd - * \cgalParamBegin{use_grid_sampling} - * if `true`, points are generated on a grid in each triangle, - * with a minimum of one point per triangle. The distance between - * two consecutive points in the grid is that of the length of the - * smallest non-null edge of `tm` or the value passed to - * the named parameter `grid_spacing`. Edges are also split using the - * same distance, if requested. - * \cgalParamEnd - * \cgalParamBegin{use_monte_carlo_sampling} - * if `true`, points are generated randomly in each triangle and/or - * on each edge. - * For faces, the number of points per triangle is the value passed to the named - * parameter `number_of_points_per_face`. If not set, the value passed - * to the named parameter `number_of_points_per_area_unit` is - * used to pick a number of points per face proportional to the triangle - * area with a minimum of one point per face. If none of these parameters - * is set, 2 divided by the square of the length of the smallest non-null - * edge of `tm` is used as if it was passed to - * `number_of_points_per_area_unit`. - * For edges, the number of points per edge is the value passed to the named - * parameter `number_of_points_per_edge`. If not set, the value passed - * to the named parameter `number_of_points_per_distance_unit` is - * used to pick a number of points per edge proportional to the length of - * the edge with a minimum of one point per face. If none of these parameters - * is set, 1 divided by the length of the smallest non-null edge of `tm` - * is used as if it was passed to `number_of_points_per_distance_unit`. - * \cgalParamEnd - * \cgalParamBegin{sample_vertices} - * if `true` (default value), vertices of `tm` are put into `out`. - * \cgalParamEnd - * \cgalParamBegin{sample_edges} - * if `true` (default value), edges of `tm` are sampled. - * \cgalParamEnd - * \cgalParamBegin{sample_faces} - * if `true` (default value), faces of `tm` are sampled. - * \cgalParamEnd - * \cgalParamBegin{grid_spacing} a double value used as the grid spacing - * for the grid sampling method. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_on_edges} an unsigned integral value used - * for the random sampling method as the number of points to pick exclusively - * on edges. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_on_faces} an unsigned integral value used - * for the random sampling method as the number of points to pick on the surface. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_per_distance_unit} a double value - * used for the random sampling and the Monte Carlo sampling methods to - * repectively determine the total number of points on edges and the - * number of points per edge. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_per_edge} an unsigned integral value - * used by the Monte-Carlo sampling method as the number of points per edge - * to pick. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_per_face} an unsigned integral value - * used by the Monte-Carlo sampling method as the number of points per face - * to pick. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_per_area_unit} a double value - * used for the random sampling and the Monte Carlo sampling methods to - * repectively determine the total number of points inside faces - * and the number of points per face. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPDistanceTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_random_uniform_sampling} + * \cgalParamDescription{If `true` is passed, points are generated in a random and uniform way + * on the surface of `tm`, and/or on edges of `tm`.} + * \cgalParamType{Boolean} + * \cgalParamType{`true`} + * \cgalParamExtra{For faces, the number of sample points is the value passed to the named + * parameter `number_of_points_on_faces`. If not set, + * the value passed to the named parameter `number_of_points_per_area_unit` + * is multiplied by the area of `tm` to get the number of sample points. + * If none of these parameters is set, the number of points sampled is `num_vertices(tm)`. + * For edges, the number of the number of sample points is the value passed to the named + * parameter `number_of_points_on_edges`. If not set, + * the value passed to the named parameter `number_of_points_per_distance_unit` + * is multiplied by the sum of the length of edges of `tm` to get the number of sample points. + * If none of these parameters is set, the number of points sampled is `num_vertices(tm)`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_grid_sampling} + * \cgalParamDescription{If `true` is passed, points are generated on a grid in each triangle, + * with a minimum of one point per triangle.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{The distance between two consecutive points in the grid is that of the length + * of the smallest non-null edge of `tm` or the value passed to the named parameter + * `grid_spacing`. Edges are also split using the same distance, if requested.} + * \cgalParamNEnd + * + * \cgalParamNBegin{use_monte_carlo_sampling} + * \cgalParamDescription{if `true` is passed, points are generated randomly in each triangle and/or on each edge.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{For faces, the number of points per triangle is the value passed to the named + * parameter `number_of_points_per_face`. If not set, the value passed + * to the named parameter `number_of_points_per_area_unit` is + * used to pick a number of points per face proportional to the triangle + * area with a minimum of one point per face. If none of these parameters + * is set, 2 divided by the square of the length of the smallest non-null + * edge of `tm` is used as if it was passed to + * `number_of_points_per_area_unit`. + * For edges, the number of points per edge is the value passed to the named + * parameter `number_of_points_per_edge`. If not set, the value passed + * to the named parameter `number_of_points_per_distance_unit` is + * used to pick a number of points per edge proportional to the length of + * the edge with a minimum of one point per face. If none of these parameters + * is set, 1 divided by the length of the smallest non-null edge of `tm` + * is used as if it was passed to `number_of_points_per_distance_unit`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{sample_vertices} + * \cgalParamDescription{If `true` is passed, the vertices of `tm` are part of the sample.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{sample_edges} + * \cgalParamDescription{If `true` is passed, edges of `tm` are sampled.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{sample_faces} + * \cgalParamDescription{If `true` is passed, faces of `tm` are sampled.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{grid_spacing} + * \cgalParamDescription{a value used as the grid spacing for the grid sampling method} + * \cgalParamType{double} + * \cgalParamDefault{the length of the shortest, non-degenerate edge of `tm`} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_on_edges} + * \cgalParamDescription{a value used for the random sampling method as the number of points to pick exclusively on edges} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`num_vertices(tm)` or a value based on `nb_points_per_distance_unit`, if it is defined} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_on_faces} + * \cgalParamDescription{a value used for the random sampling method as the number of points to pick on the surface} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`num_vertices(tm)` or a value based on `nb_points_per_area_unit`, if it is defined} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_per_distance_unit} + * \cgalParamDescription{a value used for the random sampling and the Monte Carlo sampling methods to + * respectively determine the total number of points on edges and the number of points per edge} + * \cgalParamType{double} + * \cgalParamDefault{`1` divided by the length of the shortest, non-degenerate edge of `tm`} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_per_edge} + * \cgalParamDescription{a value used by the Monte-Carlo sampling method as the number of points per edge to pick} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`0`} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_per_area_unit} + * \cgalParamDescription{a value used for the random sampling and the Monte Carlo sampling methods to + * respectively determine the total number of points inside faces and the number of points per face} + * \cgalParamType{double} + * \cgalParamDefault{`2` divided by the squared length of the shortest, non-degenerate edge of `tm`} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_per_face} + * \cgalParamDescription{a value used by the Monte-Carlo sampling method as the number of points per face to pick} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`0`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @see `CGAL::Polygon_mesh_processing::sample_triangle_soup()` @@ -828,69 +869,91 @@ sample_triangle_mesh(const TriangleMesh& tm, * whose value_type is itself a model of the concept `RandomAccessContainer` * whose value_type is an unsigned integral value. * @tparam PointOutputIterator a model of `OutputIterator` holding objects of the same type as `PointRange`'s value type - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param points the points of the soup * @param triangles a `TriangleRange` containing the triangles of the soup to be sampled * @param out output iterator to be filled with sample points - * @param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{geom_traits} a model of `PMPDistanceTraits`, whose `%Point_3` type is the same - * as `PointRange`'s `value_type`. - * \cgalParamEnd - * \cgalParamBegin{use_random_uniform_sampling} - * if `true`, points are generated in a random - * and uniform way over the triangles of the soup. - * The number of sample points is the value passed to the named - * parameter `number_of_points_on_faces`. If not set, - * the value passed to the named parameter `number_of_points_per_area_unit` - * is multiplied by the area of the soup to get the number of sample points. - * If none of these parameters is set, the number of points sampled is `points.size()`. + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPDistanceTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the point range's point type.} + * \cgalParamNEnd * - * %Default is `true`. - * \cgalParamEnd - * \cgalParamBegin{use_grid_sampling} - * if `true`, points are generated on a grid in each triangle, - * with a minimum of one point per triangle. The distance between - * two consecutive points in the grid is that of the length of the - * smallest non-null edge of the soup, or the value passed to - * the named parameter `grid_spacing`. + * \cgalParamNBegin{use_random_uniform_sampling} + * \cgalParamDescription{If `true` is passed, points are generated in a random and uniform way + * over the triangles of the soup.} + * \cgalParamType{Boolean} + * \cgalParamType{`true`} + * \cgalParamExtra{The number of sample points is the value passed to the named + * parameter `number_of_points_on_faces`. If not set, + * the value passed to the named parameter `number_of_points_per_area_unit` + * is multiplied by the area of the soup to get the number of sample points. + * If none of these parameters is set, the number of points sampled is `points.size()`.} + * \cgalParamNEnd * - * %Default is `false`. - * \cgalParamEnd - * \cgalParamBegin{use_monte_carlo_sampling} - * if `true`, points are generated randomly in each triangle. - * The number of points per triangle is the value passed to the named - * parameter `number_of_points_per_face`. If not set, the value passed - * to the named parameter `number_of_points_per_area_unit` is - * used to pick a number of points per face proportional to the triangle - * area with a minimum of one point per face. If none of these parameters - * is set, the number of points per area unit is set to 2 divided - * by the square of the length of the smallest non-null edge of the soup. + * \cgalParamNBegin{use_grid_sampling} + * \cgalParamDescription{If `true` is passed, points are generated on a grid in each triangle, + * with a minimum of one point per triangle.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{The distance between two consecutive points in the grid is that of the length + * of the smallest non-null edge of the soup or the value passed to the named parameter + * `grid_spacing`.} + * \cgalParamNEnd + * * \cgalParamNBegin{use_monte_carlo_sampling} + * \cgalParamDescription{if `true` is passed, points are generated randomly in each triangle.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{The number of points per triangle is the value passed to the named + * parameter `number_of_points_per_face`. If not set, the value passed + * to the named parameter `number_of_points_per_area_unit` is + * used to pick a number of points per face proportional to the triangle + * area with a minimum of one point per face. If none of these parameters + * is set, the number of points per area unit is set to 2 divided + * by the square of the length of the smallest non-null edge of the soup.} + * \cgalParamNEnd * - * %Default is `false`. - * \cgalParamEnd - * \cgalParamBegin{sample_vertices} - * if `true`, the points of `points` are put into `out`. + * \cgalParamNBegin{sample_vertices} + * \cgalParamDescription{If `true` is passed, the points of `points` are part of the sample.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd * - * %Default is `true`. - * \cgalParamEnd - * \cgalParamBegin{grid_spacing} a double value used as the grid spacing - * for the grid sampling method. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_on_faces} an unsigned integral value used - * for the random sampling method as the number of points to pick on the surface. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_per_face} an unsigned integral value - * used by the Monte-Carlo sampling method as the number of points per triangle - * to pick. - * \cgalParamEnd - * \cgalParamBegin{number_of_points_per_area_unit} a double value - * used for the random sampling and the Monte Carlo sampling methods to - * repectively determine the total number of points inside triangles - * and the number of points per triangle. - * \cgalParamEnd + * \cgalParamNBegin{sample_faces} + * \cgalParamDescription{If `true` is passed, faces of the soup are sampled.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{grid_spacing} + * \cgalParamDescription{a value used as the grid spacing for the grid sampling method} + * \cgalParamType{double} + * \cgalParamDefault{the length of the shortest, non-degenerate edge of the soup} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_on_faces} + * \cgalParamDescription{a value used for the random sampling method as the number of points to pick on the surface} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`points.size()` or a value based on `nb_points_per_area_unit`, if it is defined} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_per_face} + * \cgalParamDescription{a value used by the Monte-Carlo sampling method as the number of points per face to pick} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`0`} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_points_per_area_unit} + * \cgalParamDescription{a value used for the random sampling and the Monte Carlo sampling methods to + * respectively determine the total number of points inside faces and the number of points per face} + * \cgalParamType{double} + * \cgalParamDefault{`2` divided by the squared length of the shortest, non-degenerate edge of the soup} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \attention Contrary to `sample_triangle_mesh()`, this method does not allow to sample edges. @@ -1009,24 +1072,28 @@ double approximate_Hausdorff_distance( * @tparam Concurrency_tag enables sequential versus parallel algorithm. * Possible values are `Sequential_tag`, `Parallel_tag`, and `Parallel_if_available_tag`. * @tparam TriangleMesh a model of the concepts `EdgeListGraph` and `FaceListGraph` - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" for `tm1` - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" for `tm2` + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" for `tm1` + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" for `tm2` * * @param tm1 the triangle mesh that will be sampled * @param tm2 the triangle mesh to compute the distance to - * @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" for `tm1` passed to `sample_triangle_mesh()`. + * @param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" forwarded to `sample_triangle_mesh()` * - * @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" for `tm2` among the ones listed below + * @param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm2` - * If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` must be available in `TriangleMesh` - * and in all places where `vertex_point_map` is used. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm2`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm2)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * The function `CGAL::parameters::all_default()` can be used to indicate to use the default values for - * `np1` and specify custom values for `np2`. + * The function `CGAL::parameters::all_default()` can be used to indicate to use the default values + * for `np1` and specify custom values for `np2`. */ template< class Concurrency_tag, class TriangleMesh, @@ -1073,18 +1140,28 @@ double approximate_symmetric_Hausdorff_distance( * * @tparam PointRange a range of `Point_3`, model of `Range`. Its iterator type is `RandomAccessIterator`. * @tparam TriangleMesh a model of the concepts `EdgeListGraph` and `FaceListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param points the range of points of interest * @param tm the triangle mesh to compute the distance to - * @param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. If this parameter is omitted, - * an internal property map for `CGAL::vertex_point_t` must be available for the - vertices of `tm` \cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPDistanceTraits`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPDistanceTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template< class Concurrency_tag, @@ -1109,21 +1186,31 @@ double max_distance_to_triangle_mesh(const PointRange& points, * * @tparam PointRange a range of `Point_3`, model of `Range`. * @tparam TriangleMesh a model of the concept `FaceListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm a triangle mesh * @param points a range of points * @param precision for each triangle of `tm`, the distance of its farthest point from `points` is bounded. * A triangle is subdivided into sub-triangles so that the difference of its distance bounds * is smaller than `precision`. `precision` must be strictly positive to avoid infinite loops. - * @param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. If this parameter is omitted, - * an internal property map for `CGAL::vertex_point_t` must be available for the - vertices of `tm` \cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPDistanceTraits`. \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPDistanceTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template< class TriangleMesh, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/extrude.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/extrude.h index 3fb47d680b8..02a1a096114 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/extrude.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/extrude.h @@ -103,6 +103,7 @@ struct Identity_functor /** * \ingroup PMP_meshing_grp + * * \brief performs a generalized extrusion of `input` and puts it in `output`. * * This function extrudes the open surface mesh `input` and puts the result in `output`. The mesh generated is a closed @@ -112,11 +113,13 @@ struct Identity_functor * vertices of the bottom and top part are first initialized to the same value as the corresponding * vertices of `input`. Then for each vertex, a call to `bot` and `top` is done for the vertices of the * bottom part and the top part, respectively. + * * \attention `output` may be self intersecting. + * * @tparam InputMesh a model of `FaceListGraph` * @tparam OutputMesh a model of `FaceListGraph` and `MutableFaceGraph` - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" for `InputMesh` - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" for `OutputMesh` + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" for `InputMesh` + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" for `OutputMesh` * @tparam BottomFunctor a functor providing * \code {.cpp} * void operator()`(boost::graph_traits::vertex_descriptor input_v,boost::graph_traits::vertex_descriptor output_v) @@ -124,30 +127,36 @@ struct Identity_functor * where `output_v` is the copy of `input_v` from `input` into the bottom part of `output`. * * @tparam TopFunctor a functor providing a similar `operator()` as `BottomFunctor`. + * * @param input an open surface mesh to extrude. * @param output a surface mesh that will contain the result of the extrusion. * @param bot functor that will transform all points copied from * `input` in order to shape the bottom part of the extrusion. * @param top functor that will transform all points copied from * `input` in order to shape the top part of the extrusion. - * @param np_in an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np_in an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map that contains the points associated to the vertices of `input`. - * If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` - * should be available for the vertices of `input` - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `input`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, input)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `input`.} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * @param np_out an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np_out an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map that will contain the points associated to the vertices of `output`. - * If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` - * should be available for the vertices of `output` - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `ouput`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, ouput)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `ouput`.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template ::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, input)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `input`.} + * \cgalParamNEnd * \cgalNamedParamsEnd * - * @param np_out an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np_out an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map that will contain the points associated to the vertices of `output`. - * If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` - * should be available for the vertices of `output` - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `output`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, output)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `output`.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template ::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + should be available for the vertices of `tmesh`.} + \cgalParamNEnd + + \cgalParamNBegin{fairing_continuity} + \cgalParamDescription{A value controling the tangential continuity of the output surface patch. + The possible values are 0, 1 and 2, refering to the C0, C1 + and C2 continuity.} + \cgalParamType{unsigned int} + \cgalParamDefault{`1`} + \cgalParamExtra{The larger `fairing_continuity` gets, the more fixed vertices are required.} + \cgalParamNEnd + + \cgalParamNBegin{sparse_linear_solver} + \cgalParamDescription{an instance of the sparse linear solver used for fairing} + \cgalParamType{a class model of `SparseLinearAlgebraWithFactorTraits_d`} + \cgalParamDefault{If \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and + `CGAL_EIGEN3_ENABLED` is defined, then the following overload of `Eigen_solver_traits` + is provided as default value:\n + `CGAL::Eigen_solver_traits::%EigenType, Eigen::COLAMDOrdering > >`} + \cgalParamNEnd \cgalNamedParamsEnd @return `true` if fairing is successful, otherwise no vertices are relocated diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap.h index edd6f9349e4..db117edbd7a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap.h @@ -927,8 +927,8 @@ std::size_t snap_non_conformal_one_way(const HalfedgeRange& halfedge_range_S, // and value type `GetGeomTraits::type::FT` // \tparam ToleranceMap_B a model of `ReadablePropertyMap` with key type `boost::graph_traits::%vertex_descriptor` // and value type `GetGeomTraits::type::FT` -// \tparam NamedParameters_A a sequence of \ref pmp_namedparameters "Named Parameters" -// \tparam NamedParameters_B a sequence of \ref pmp_namedparameters "Named Parameters" +// \tparam NamedParameters_A a sequence of \ref bgl_namedparameters "Named Parameters" +// \tparam NamedParameters_B a sequence of \ref bgl_namedparameters "Named Parameters" // // \param halfedge_range_A a range of halfedges of the first mesh defining a set of vertices (as targets of the halfeges) // \param tm_A the first mesh to which the vertices in `halfedge_range_A` belong @@ -936,8 +936,7 @@ std::size_t snap_non_conformal_one_way(const HalfedgeRange& halfedge_range_S, // \param halfedge_range_B a range of vertices of the second mesh defining a set of vertices (as targets of the halfeges) // \param tolerance_map_B a tolerance map associating to each vertex of the second range a tolerance value // \param tm_B the target mesh to which the vertices in `halfedge_range_B` belong -// \param np_A optional \ref pmp_namedparameters "Named Parameters" related to the source mesh, -// amongst those described below: +// \param np_A an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below // // \cgalNamedParamsBegin // \cgalParamBegin{vertex_point_map} @@ -950,8 +949,7 @@ std::size_t snap_non_conformal_one_way(const HalfedgeRange& halfedge_range_S, // \cgalParamEnd // \cgalNamedParamsEnd // -// \param np_B optional \ref pmp_namedparameters "Named Parameters" related to the target mesh, -// amongst those described below: +// \param np_B an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below // // \cgalNamedParamsBegin // \cgalParamBegin{vertex_point_map} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap_vertices.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap_vertices.h index 7bdad28de3f..0c2f26134c5 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap_vertices.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Snapping/snap_vertices.h @@ -783,8 +783,8 @@ namespace experimental { // and value type `GetGeomTraits::type::FT` // \tparam ToleranceMap_B a model of `ReadablePropertyMap` with key type `boost::graph_traits::%vertex_descriptor` // and value type `GetGeomTraits::type::FT` -// \tparam NamedParameters_A a sequence of \ref pmp_namedparameters "Named Parameters" -// \tparam NamedParameters_B a sequence of \ref pmp_namedparameters "Named Parameters" +// \tparam NamedParameters_A a sequence of \ref bgl_namedparameters "Named Parameters" +// \tparam NamedParameters_B a sequence of \ref bgl_namedparameters "Named Parameters" // // \param halfedge_range_A a range of halfedges of the first mesh defining a set of vertices (as targets of the halfeges) // \param tm_A the first mesh to which the vertices in `halfedge_range_A` belong @@ -792,8 +792,7 @@ namespace experimental { // \param halfedge_range_B a range of vertices of the second mesh defining a set of vertices (as targets of the halfeges) // \param tolerance_map_B a tolerance map associating to each vertex of the second range a tolerance value // \param tm_B the target mesh to which the vertices in `halfedge_range_B` belong -// \param np_A optional \ref pmp_namedparameters "Named Parameters" related to the source mesh, -// amongst those described below: +// \param np_A an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below // // \cgalNamedParamsBegin // \cgalParamBegin{vertex_point_map} @@ -806,8 +805,7 @@ namespace experimental { // \cgalParamEnd // \cgalNamedParamsEnd // -// \param np_B optional \ref pmp_namedparameters "Named Parameters" related to the target mesh, -// amongst those described below: +// \param np_B an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below // // \cgalNamedParamsBegin // \cgalParamBegin{vertex_point_map} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h index ebaf53ffa92..11e0708e07e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h @@ -50,7 +50,6 @@ template struct Intersect_faces { - // typedefs typedef typename Kernel::Segment_3 Segment; typedef typename Kernel::Triangle_3 Triangle; @@ -68,10 +67,6 @@ struct Intersect_faces typename Kernel::Construct_triangle_3 triangle_functor; typename Kernel::Do_intersect_3 do_intersect_3_functor; - - - - Intersect_faces(const TM& tm1, const TM& tm2, OutputIterator it, VertexPointMap1 vpmap1, VertexPointMap2 vpmap2, @@ -137,9 +132,6 @@ struct Intersect_face_polyline typename Kernel::Construct_triangle_3 triangle_functor; typename Kernel::Do_intersect_3 do_intersect_3_functor; - - - Intersect_face_polyline(const TM& tm, const std::vector& faces, const Polyline& polyline, @@ -193,7 +185,6 @@ struct Intersect_face_polylines typedef typename boost::property_map::const_type Ppmap; typedef typename boost::property_traits::value_type Point; - // members const TM& m_tm; const std::vector& faces; @@ -205,9 +196,6 @@ struct Intersect_face_polylines typename Kernel::Construct_triangle_3 triangle_functor; typename Kernel::Do_intersect_3 do_intersect_3_functor; - - - Intersect_face_polylines(const TM& tm, const std::vector& faces, const PolylineRange& polylines, @@ -249,8 +237,6 @@ template struct Intersect_polylines { - - // typedefs typedef typename Kernel::Segment_3 Segment; typedef typename Kernel::Point_3 Point; @@ -264,9 +250,6 @@ struct Intersect_polylines typename Kernel::Construct_segment_3 segment_functor; typename Kernel::Do_intersect_3 do_intersect_3_functor; - - - Intersect_polylines(const Polyline& polyline1, const Polyline& polyline2, OutputIterator it, @@ -299,8 +282,6 @@ template struct Intersect_polyline_ranges { - - // typedefs typedef typename Kernel::Segment_3 Segment; typedef typename Kernel::Point_3 Point; @@ -314,9 +295,6 @@ struct Intersect_polyline_ranges typename Kernel::Construct_segment_3 segment_functor; typename Kernel::Do_intersect_3 do_intersect_3_functor; - - - Intersect_polyline_ranges(const PolylineRange& polyline1, const PolylineRange& polyline2, OutputIterator it, @@ -367,7 +345,7 @@ struct Throw_at_first_output { * model of `RandomAccessRange`. * \tparam OutputIterator a model of `OutputIterator` holding objects of type * `std::pair::%face_descriptor, boost::graph_traits::%face_descriptor>` - * \tparam NamedParameters a sequence of \ref pmp_namedparameters + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param face_range1 the range of faces of `tm1` to check for intersections. * \param face_range2 the range of faces of `tm2` to check for intersections. @@ -375,15 +353,29 @@ struct Throw_at_first_output { * \param tm2 the second triangulated surface mesh. * \param out output iterator to be filled with all pairs of faces that intersect. * First and second element in the pairs correspond to faces of `tm1` and `tm2` respectively - * \param np1 optional sequence of \ref pmp_namedparameters for `tm1`, among the ones listed below - * \param np2 optional sequence of \ref pmp_namedparameters for `tm2`, among the ones listed below + * \param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm1` (`tm2`)} + * \cgalParamExtra{Both vertex point maps must have the same value type} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamExtra{np1 only} + * \cgalParamNEnd * \cgalNamedParamsEnd + * * \return `out` */ template ::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd + * * \return `out` */ template >`. * Each pair holds the index of the face and a pair containing the index of the polyline in the range and the index of * the first point of the segment in the polyline. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param face_range the range of `tm` faces to check for intersections. * \param polyline_range the range of polylines to check for intersections. * \param tm the triangulated surface mesh to check for intersections. * \param out output iterator to be filled with all pairs of face-segment that intersect - * \param np optional sequence of \ref pmp_namedparameters for `tm`, among the ones listed below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * \return `out` */ @@ -921,20 +935,33 @@ compute_polylines_polylines_intersection(const PolylineRange& polylines1, * \tparam TriangleMesh a model of `FaceListGraph` * \tparam OutputIterator a model of `OutputIterator` holding objects of type * `std::pair::%face_descriptor, boost::graph_traits::%face_descriptor>` - * \tparam NamedParameters a sequence of \ref pmp_namedparameters + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param tm1 the first triangulated surface mesh to check for intersections * \param tm2 the second triangulated surface mesh to check for intersections * \param out output iterator to be filled with all pairs of faces that intersect - * \param np1 optional sequence of \ref pmp_namedparameters for `tm1`, among the ones listed below - * \param np2 optional sequence of \ref pmp_namedparameters for `tm2`, among the ones listed below + * \param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * \param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm1` (`tm2`)} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamExtra{np1 only} + * \cgalParamNEnd * \cgalNamedParamsEnd + * * \return `out` */ template ::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd + * * \return `out` */ template ::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm1` (`tm2`)} + * \cgalParamExtra{Both vertex point maps must have the same value type} + * \cgalParamNEnd * - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd - * \cgalParamBegin{do_overlap_test_of_bounded_sides} if set to `true` tests also the overlap of the bounded sides of `tm1` and `tm2`. - * If `false` (default), only the intersection of surface triangles are tested. - * \cgalParamEnd + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamExtra{np1 only} + * \cgalParamNEnd + * + * \cgalParamNBegin{do_overlap_test_of_bounded_sides} + * \cgalParamDescription{If `true`, also tests the overlap of the bounded sides of `tm1` and `tm2`. + * If `false`, only the intersection of surface triangles is tested.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -1265,17 +1318,27 @@ bool do_intersect(const TriangleMesh& tm1, * \tparam PolylineRange a `RandomAccessRange` of `RandomAccessRange` of points. The point type of the range must be the * same as the value type of the vertex point map. * \cgalDescribePolylineType - * @tparam NamedParameters a sequence of \ref pmp_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters * * @param tm the triangulated surface mesh to check for intersections * @param polylines the range of polylines to check for intersections. - * @param np optional sequence of \ref pmp_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -1320,17 +1383,27 @@ bool do_intersect(const TriangleMesh& tm, * \tparam Polyline a `RandomAccessRange` of points. The point type of the range must be the * same as the value type of the vertex point map. * \cgalDescribePolylineType - * @tparam NamedParameters a sequence of \ref pmp_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm the triangulated surface mesh to check for intersections * @param polyline the polyline to check for intersections. - * @param np optional sequence of \ref pmp_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tn`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -1530,31 +1603,41 @@ struct Mesh_callback * * \tparam TriangleMeshRange a model of `RandomAccessRange` of triangulated surface meshes model of `FaceListGraph`. * \tparam OutputIterator an output iterator in which `std::pair` can be put. - * \tparam NamedParameters a sequence of \ref pmp_namedparameters for the algorithm - * \tparam NamedParametersRange a range of named parameters for the meshes. + * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" for the algorithm + * \tparam NamedParametersRange a range of \ref bgl_namedparameters "Named Parameters" for the meshes. * * \param range the range of triangulated surface meshes to be checked for intersections. * \param out output iterator used to collect pairs of intersecting meshes. - * \param np an optional sequence named parameters among the one listed below + * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits`. - * The default value for `geom_traits` is `CGAL::Kernel_traits::Kernel`, where `Point` is the - * value type of the vertex point map of the meshes. - * \cgalParamEnd - * \cgalParamBegin{do_overlap_test_of_bounded_sides} if set to `true` reports also overlap of bounded sides of meshes. - * If `false` (default), only the intersection of surface triangles are tested. - * \cgalParamEnd + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`, + * where `Point` is the value type of the vertex point map of the meshes} + * \cgalParamNEnd + * + * \cgalParamNBegin{do_overlap_test_of_bounded_sides} + * \cgalParamDescription{If `true`, reports also overlap of bounded sides of meshes. + * If `false`, only the intersection of surface triangles are tested.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd * \cgalNamedParamsEnd - * \param nps an optional range of `vertex_point_map` named parameters containing the `VertexPointMap` of each mesh in `range`, in the same order. - * If this parameter is omitted, then an internal property map for `CGAL::vertex_point_t` must be available for every mesh in the range. - * All the vertex point maps must be of the same type. + * + * \param nps an optional range of sequences of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of a mesh. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in the triangle mesh type used in the range - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of a mesh `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamExtra{All vertex point maps must have the same value type} + * \cgalParamNEnd * \cgalNamedParamsEnd */ @@ -1626,8 +1709,8 @@ OutputIterator intersecting_meshes(const TriangleMeshRange& range, * \pre \link CGAL::Polygon_mesh_processing::does_self_intersect() `!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)` \endlink * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph` - * @tparam NamedParameters1 a sequence of \ref pmp_namedparameters "Named Parameters" - * @tparam NamedParameters2 a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" + * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" * @tparam OutputIterator an output iterator in which `std::vector` of points * can be put. The point type is the one from the * vertex property map @@ -1636,19 +1719,28 @@ OutputIterator intersecting_meshes(const TriangleMeshRange& range, * @param tm2 second input triangulated surface mesh * @param polyline_output output iterator of polylines. Each polyline will be * given as a vector of points - * @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below - * @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np1 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + * @param np2 an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * a property map with the points associated to the vertices of `tm1` - * (`tm2`). The two property map types must be the same. - * \cgalParamEnd - * \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh, - * the set of triangles close to the intersection of `tm1` and `tm2` will be - * checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception` - * will be thrown if at least one is found (`np1` only). - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm1` (`tm2`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm1 (tm2))`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm1` (`tm2`)} + * \cgalParamExtra{Both vertex point maps must have the same value type} + * \cgalParamNEnd + * + * \cgalParamNBegin{throw_on_self_intersection} + * \cgalParamDescription{If `true`, the set of triangles closed to the intersection of `tm1` and `tm2` will be + * checked for self-intersections and `Corefinement::Self_intersection_exception` + * will be thrown if at least one self-intersection is found.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamExtra{`np1` only} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -1688,10 +1780,10 @@ surface_intersection(const TriangleMesh& tm1, namespace experimental { /** * \ingroup PMP_corefinement_grp + * * computes the autointersection of triangles of `tm`. The output is a * set of polylines with all vertices but endpoints being of degree 2. * - * * @tparam TriangleMesh a model of `HalfedgeListGraph` and `FaceListGraph` * @tparam NamedParameters a sequence of \ref namedparameters * @tparam OutputIterator an output iterator in which `std::vector` of points @@ -1701,12 +1793,15 @@ namespace experimental { * @param tm input triangulated surface mesh * @param polyline_output output iterator of polylines. Each polyline will be * given as a vector of points - * @param np optional sequence of \ref namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * a property map with the points associated to the vertices of `tm` - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h index ba96bc612ae..9828eda51ed 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/locate.h @@ -391,7 +391,7 @@ barycentric_coordinates(const Point& p, const Point& q, const Point& r, const Po /// \ingroup PMP_locate_grp /// -/// \brief Returns a random point over the halfedge `hd`, as a location. +/// \brief returns a random point over the halfedge `hd`, as a location. /// /// \details The random point is chosen on the halfedge, meaning that all /// its barycentric coordinates are positive. It is constructed by uniformly generating @@ -426,7 +426,7 @@ random_location_on_halfedge(typename boost::graph_traits::halfedge /// \ingroup PMP_locate_grp /// -/// \brief Returns a random point over the face `fd`, as a location. +/// \brief returns a random point over the face `fd`, as a location. /// /// \details The random point is on the face, meaning that all its barycentric coordinates /// are positive. It is constructed by uniformly picking a value `u` between `0` and `1`, @@ -459,7 +459,7 @@ random_location_on_face(typename boost::graph_traits::face_descrip /// \ingroup PMP_locate_grp /// -/// \brief Returns a random point over the mesh `tm`. +/// \brief returns a random point over the mesh `tm`. /// /// \details The returned location is obtained by choosing a random face of the mesh and /// a random point on that face. The barycentric coordinates of the point in the face @@ -562,22 +562,28 @@ get_descriptor_from_location(const std::pair::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamExtra{If such traits class is provided, its type `FT` must be identical +/// to the template parameter `FT` of this function.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \pre `loc.first` is a face descriptor corresponding to a face of `tm`. @@ -913,7 +919,7 @@ is_on_mesh_border(const std::pair::fa /// \ingroup PMP_locate_grp /// -/// \brief Returns the location of the given vertex `vd` as a location, +/// \brief returns the location of the given vertex `vd` as a location, /// that is an ordered pair specifying a face incident to `vd` /// and the barycentric coordinates of the vertex `vd` in that face. /// @@ -975,7 +981,7 @@ locate_vertex(typename boost::graph_traits::vertex_descriptor vd, /// \ingroup PMP_locate_grp /// -/// \brief Returns the location of a given vertex as a location in `fd`, +/// \brief returns the location of a given vertex as a location in `fd`, /// that is an ordered pair composed of `fd` and of the barycentric coordinates /// of the vertex in `fd`. /// @@ -1066,32 +1072,41 @@ locate_on_halfedge(const typename boost::graph_traits::halfedge_de /// - `w2` corresponds to `target(next(halfedge(f, tm), tm), tm)` /// /// \tparam TriangleMesh must be a model of `FaceGraph` -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param query a point, whose type is equal to the value type of the vertex point property map /// (either user-provided via named parameters or the internal point map of the mesh `tm`) /// \param fd a face of `tm` /// \param tm a triangulated surface mesh -/// \param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `tm`. -/// If this parameter is omitted, an internal property map for -/// `boost::vertex_point_t` must be available in `TriangleMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of `Kernel`. If provided, the types `FT` and `Kernel::FT` -/// must be identical and the traits class must be compatible with the value type of the vertex point -/// property map. -/// \cgalParamEnd -/// \cgalParamBegin{snapping_tolerance} -/// a tolerance value used to snap barycentric coordinates. Depending on the geometric traits used, -/// the computation of the barycentric coordinates might be an inexact construction, thus leading -/// to sometimes surprising values (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle -/// of an edge). The coordinates will be snapped towards `0` and `1` if the difference is smaller than the tolerance value, while -/// still ensuring that the total sum of the coordinates is `1`. By default, the tolerance is `0`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamExtra{If such traits class is provided, its type `FT` must be identical +/// to the template parameter `FT` of this function.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{snapping_tolerance} +/// \cgalParamDescription{a tolerance value used to snap barycentric coordinates} +/// \cgalParamType{double} +/// \cgalParamDefault{`0`} +/// \cgalParamExtra{Depending on the geometric traits used, the computation of the barycentric coordinates +/// might be an inexact construction, thus leading to sometimes surprising values +/// (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle of an edge). +/// The coordinates will be snapped towards `0` and `1` if the difference is smaller +/// than the tolerance value, while still ensuring that the total sum of the coordinates is `1`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \pre `fd` is not the null face @@ -1556,23 +1571,27 @@ void build_AABB_tree(const TriangleMesh& tm, /// \tparam TriangleMesh must be a model of `FaceListGraph` /// \tparam Point3VPM must be a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` /// as key type and the \cgal 3D point type (your traits' `%Point_3`) as value type. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param tm a triangulated surface mesh /// \param outTree output parameter that stores the computed `AABB_tree` -/// \param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `tm`. -/// If this parameter is omitted, an internal property map for -/// `boost::vertex_point_t` must be available in `TriangleMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of `Kernel` compatible with the point type held -/// in the vertex point property map (either user-provided or internal to the mesh). -/// Must be identical to the traits used in the template parameter of the `AABB_traits`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamExtra{Must be identical to the traits used in the template parameter of the `AABB_traits`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// template @@ -1618,31 +1637,39 @@ void build_AABB_tree(const TriangleMesh& tm, AABB_tree& outTree) /// \tparam TriangleMesh must be a model of `FaceListGraph` /// \tparam Point3VPM must be a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` /// as key type and the \cgal 3D point type (your traits' `%Point_3`) as value type. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param p the point to locate on the input triangulated surface mesh /// \param tree an AABB tree containing the triangular faces of the input surface mesh to perform the point location with /// \param tm a triangulated surface mesh -/// \param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `tm`. -/// If this parameter is omitted, an internal property map for -/// `boost::vertex_point_t` must be available in `TriangleMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of `Kernel` compatible with the point type held -/// in the vertex point property map (either user-provided or internal to the mesh). -/// Must be identical to the traits used in the template parameter of the `AABB_traits`. -/// \cgalParamEnd -/// \cgalParamBegin{snapping_tolerance} -/// a tolerance value used to snap barycentric coordinates. Depending on the geometric traits used, -/// the computation of the barycentric coordinates might be an inexact construction, thus leading -/// to sometimes surprising values (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle -/// of an edge). The coordinates will be snapped towards `0` and `1` if the difference is smaller than the tolerance value, while -/// still ensuring that the total sum of the coordinates is `1`. By default, the tolerance is `0`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamExtra{Must be identical to the traits used in the template parameter of the `AABB_traits`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{snapping_tolerance} +/// \cgalParamDescription{a tolerance value used to snap barycentric coordinates} +/// \cgalParamType{double} +/// \cgalParamDefault{`0`} +/// \cgalParamExtra{Depending on the geometric traits used, the computation of the barycentric coordinates +/// might be an inexact construction, thus leading to sometimes surprising values +/// (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle of an edge). +/// The coordinates will be snapped towards `0` and `1` if the difference is smaller +/// than the tolerance value, while still ensuring that the total sum of the coordinates is `1`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns a face location. The type `FT` is deduced from the geometric traits, either provided by @@ -1715,29 +1742,37 @@ locate_with_AABB_tree(const typename internal::Location_traits::Po /// an AABB tree that you can store and use the function `locate_with_AABB_tree()`. /// /// \tparam TriangleMesh must be a model of `FaceListGraph`. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param p the point to locate on the input triangulated surface mesh /// \param tm a triangulated surface mesh -/// \param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `tm`. -/// If this parameter is omitted, an internal property map for -/// `boost::vertex_point_t` must be available in `TriangleMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of `Kernel` compatible with the point type held -/// in the vertex point property map (either user-provided or internal to the mesh). -/// \cgalParamEnd -/// \cgalParamBegin{snapping_tolerance} -/// a tolerance value used to snap barycentric coordinates. Depending on the geometric traits used, -/// the computation of the barycentric coordinates might be an inexact construction, thus leading -/// to sometimes surprising values (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle -/// of an edge). The coordinates will be snapped towards `0` and `1` if the difference is smaller than the tolerance value, while -/// still ensuring that the total sum of the coordinates is `1`. By default, the tolerance is `0`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{snapping_tolerance} +/// \cgalParamDescription{a tolerance value used to snap barycentric coordinates} +/// \cgalParamType{double} +/// \cgalParamDefault{`0`} +/// \cgalParamExtra{Depending on the geometric traits used, the computation of the barycentric coordinates +/// might be an inexact construction, thus leading to sometimes surprising values +/// (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle of an edge). +/// The coordinates will be snapped towards `0` and `1` if the difference is smaller +/// than the tolerance value, while still ensuring that the total sum of the coordinates is `1`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// template @@ -1793,38 +1828,46 @@ locate(const typename property_map_value::t /// \ingroup PMP_locate_grp /// -/// \brief Returns the face location along `ray` nearest to its source point. +/// \brief returns the face location along `ray` nearest to its source point. /// /// If the ray does not intersect the mesh, a default constructed location is returned. /// /// \tparam TriangleMesh must be a model of `FaceListGraph`. /// \tparam Point3VPM must be a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` /// as key type and the \cgal 3D point type (your traits' `%Point_3`) as value type. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param ray a ray to intersect with the input triangulated surface mesh /// \param tree an AABB tree containing the triangular faces of the input surface mesh to perform the point location with /// \param tm a triangulated surface mesh -/// \param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `tm`. -/// If this parameter is omitted, an internal property map for -/// `boost::vertex_point_t` must be available in `TriangleMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of `Kernel` compatible with the point type held -/// in the vertex point property map (either user-provided or internal to the mesh). -/// Must be identical to the traits used in the template parameter of the `AABB_traits`. -/// \cgalParamEnd -/// \cgalParamBegin{snapping_tolerance} -/// a tolerance value used to snap barycentric coordinates. Depending on the geometric traits used, -/// the computation of the barycentric coordinates might be an inexact construction, thus leading -/// to sometimes surprising values (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle -/// of an edge). The coordinates will be snapped towards `0` and `1` if the difference is smaller than the tolerance value, while -/// still ensuring that the total sum of the coordinates is `1`. By default, the tolerance is `0`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamExtra{Must be identical to the traits used in the template parameter of the `AABB_traits`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{snapping_tolerance} +/// \cgalParamDescription{a tolerance value used to snap barycentric coordinates} +/// \cgalParamType{double} +/// \cgalParamDefault{`0`} +/// \cgalParamExtra{Depending on the geometric traits used, the computation of the barycentric coordinates +/// might be an inexact construction, thus leading to sometimes surprising values +/// (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle of an edge). +/// The coordinates will be snapped towards `0` and `1` if the difference is smaller +/// than the tolerance value, while still ensuring that the total sum of the coordinates is `1`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \pre `ray` is an object with the same ambient dimension as the point type (the value type of the vertex point map). @@ -1926,7 +1969,7 @@ locate_with_AABB_tree(const typename internal::Location_traits::Ra /// \ingroup PMP_locate_grp /// -/// \brief Returns the face location along `ray` nearest to its source point. +/// \brief returns the face location along `ray` nearest to its source point. /// /// If the ray does not intersect the mesh, a default constructed location is returned. /// @@ -1936,29 +1979,37 @@ locate_with_AABB_tree(const typename internal::Location_traits::Ra /// that accept a reference to an AABB tree as input. /// /// \tparam TriangleMesh must be a model of `FaceListGraph`. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param ray a ray to intersect with the input triangulated surface mesh /// \param tm the input triangulated surface mesh -/// \param np an optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below: +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `tm`. -/// If this parameter is omitted, an internal property map for -/// `boost::vertex_point_t` must be available in `TriangleMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} -/// a geometric traits class instance, model of `Kernel` compatible with the point type held -/// in the vertex point property map (either user-provided or internal to the mesh). -/// \cgalParamEnd -/// \cgalParamBegin{snapping_tolerance} -/// a tolerance value used to snap barycentric coordinates. Depending on the geometric traits used, -/// the computation of the barycentric coordinates might be an inexact construction, thus leading -/// to sometimes surprising values (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle -/// of an edge). The coordinates will be snapped towards `0` and `1` if the difference is smaller than the tolerance value, while -/// still ensuring that the total sum of the coordinates is `1`. By default, the tolerance is `0`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{snapping_tolerance} +/// \cgalParamDescription{a tolerance value used to snap barycentric coordinates} +/// \cgalParamType{double} +/// \cgalParamDefault{`0`} +/// \cgalParamExtra{Depending on the geometric traits used, the computation of the barycentric coordinates +/// might be an inexact construction, thus leading to sometimes surprising values +/// (e.g. a triplet `[0.5, 0.5, -1-e17]` for a point at the middle of an edge). +/// The coordinates will be snapped towards `0` and `1` if the difference is smaller +/// than the tolerance value, while still ensuring that the total sum of the coordinates is `1`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \pre `ray` is an object with the same ambient dimension as the point type (the value type of the vertex point map). diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/manifoldness.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/manifoldness.h index 5ffa00ffeda..d818c4c4915 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/manifoldness.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/manifoldness.h @@ -34,7 +34,7 @@ namespace CGAL { namespace Polygon_mesh_processing { /// \ingroup PMP_repairing_grp -/// checks whether a vertex of a polygon mesh is non-manifold. +/// returns whether a vertex of a polygon mesh is non-manifold. /// /// @tparam PolygonMesh a model of `HalfedgeListGraph` /// @@ -393,26 +393,37 @@ OutputIterator non_manifold_vertices(const PolygonMesh& pm, /// duplicates all the non-manifold vertices of the input mesh. /// /// @tparam PolygonMesh a model of `HalfedgeListGraph` and `MutableHalfedgeGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param pm the surface mesh to be repaired -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `PolygonMesh` -/// \cgalParamEnd -/// \cgalParamBegin{vertex_is_constrained_map} a writable property map with `vertex_descriptor` -/// as key and `bool` as `value_type`. `put(pmap, v, true)` will be called for each duplicated -/// vertices, as well as the original non-manifold vertex in the input mesh. -/// \cgalParamEnd -/// \cgalParamBegin{output_iterator} a model of `OutputIterator` with value type -/// `std::vector`. The first vertex of each vector is a non-manifold vertex -/// of the input mesh, followed by the new vertices that were created to fix this precise -/// non-manifold configuration. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `PolygonMesh`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{vertex_is_constrained_map} +/// \cgalParamDescription{a property map containing the constrained-or-not status of each vertex of `pm`.} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `bool` as value type. It must be default constructible.} +/// \cgalParamDefault{a default property map where no vertex is constrained} +/// \cgalParamExtra{`put(vcm, v, true)` will be called for each duplicated +/// vertices, as well as the original non-manifold vertex in the input mesh.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{output_iterator} +/// \cgalParamDescription{an output iterator to collect the duplicated vertices} +/// \cgalParamType{a model of `OutputIterator` with value type `std::vector`} +/// \cgalParamDefault{unused} +/// \cgalParamExtra{The first vertex of each vector is a non-manifold vertex of the input mesh, +/// followed by the new vertices that were created to fix the given non-manifold configuration.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \return the number of vertices created. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h index b9e69989521..911087ac7b9 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h @@ -56,21 +56,30 @@ namespace Polygon_mesh_processing { * The edge is given by one of its halfedges, or the edge itself. * * @tparam PolygonMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param h one halfedge of the edge to compute the length * @param pmesh the polygon mesh to which `h` belongs - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return the length of `h`. The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `pmesh`. * @@ -136,22 +145,31 @@ edge_length(typename boost::graph_traits::edge_descriptor e, * that contains a given halfedge. * * @tparam PolygonMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param h a halfedge of the border polyline of which the length is computed * @param pmesh the polygon mesh to which `h` belongs - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return the length of the sequence of border edges of `face(h, pmesh)`. * The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `pmesh`. * @@ -198,16 +216,25 @@ face_border_length(typename boost::graph_traits::halfedge_descripto * a halfedge that is part of this border and the length of this border. * * @tparam PolygonMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh the polygon mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return a pair composed of two members: @@ -216,7 +243,7 @@ face_border_length(typename boost::graph_traits::halfedge_descripto * deduced from the graph traits corresponding to the type `PolygonMesh`. * - `second`: the length of the longest border * The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `pmesh` * @@ -278,24 +305,33 @@ longest_border(const PolygonMesh& pmesh) * triangulated surface mesh. * * @tparam TriangleMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param f the face of which the area is computed * @param tmesh the triangulated surface mesh to which `f` belongs - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @pre `f != boost::graph_traits::%null_face()` * * @return the area of `f`. * The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `tmesh`. * @@ -352,22 +388,31 @@ face_area(typename boost::graph_traits::face_descriptor f, model of `Range`. Its iterator type is `InputIterator`. * @tparam TriangleMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param face_range the range of faces of which the area is computed * @param tmesh the triangulated surface mesh to which the faces of `face_range` belong - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return sum of face areas of `faces`. * The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `tmesh`. * @@ -413,21 +458,30 @@ area(FaceRange face_range, const TriangleMesh& tmesh) * computes the surface area of a triangulated surface mesh. * * @tparam TriangleMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh the triangulated surface mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits}an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return the surface area of `tmesh`. * The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `tmesh`. * @@ -463,23 +517,32 @@ area(const TriangleMesh& tmesh) * a closed triangulated surface mesh. * * @tparam TriangleMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh the closed triangulated surface mesh bounding the volume - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * @pre `tmesh` is closed * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return the volume bounded by `tmesh`. * The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map * of `tmesh`. */ @@ -535,23 +598,32 @@ volume(const TriangleMesh& tmesh) * computes the aspect ratio of a face of a given triangulated surface mesh. * * @tparam TriangleMesh a model of `HalfedgeGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param f the face of which the aspect ratio is computed * @param tmesh the triangulated surface mesh to which `f` belongs - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @pre `f != boost::graph_traits::%null_face()` * * @return the aspect ratio of `f`. The return type `FT` is a number type. It is - * either deduced from the `geom_traits` \ref pmp_namedparameters "Named Parameters" if provided, + * either deduced from the `geom_traits` \ref bgl_namedparameters "Named Parameters" if provided, * or the geometric traits class deduced from the point property map of `tmesh`. * */ @@ -646,18 +718,27 @@ face_aspect_ratio(typename boost::graph_traits::face_descriptor f, * a closed triangulated surface mesh. * * @tparam TriangleMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh the closed triangulated surface mesh bounding the volume - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * @pre `tmesh` is closed * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return the centroid of the domain bounded by `tmesh`. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/merge_border_vertices.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/merge_border_vertices.h index 8fa56070cb1..adaa629a761 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/merge_border_vertices.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/merge_border_vertices.h @@ -9,6 +9,7 @@ // // // Author(s) : Sebastien Loriot +// Mael Rouxel-Labbé #ifndef CGAL_POLYGON_MESH_PROCESSING_MERGE_BORDER_VERTICES_H #define CGAL_POLYGON_MESH_PROCESSING_MERGE_BORDER_VERTICES_H @@ -261,19 +262,21 @@ void merge_vertices_in_range(const HalfedgeRange& sorted_hedges, /// merges identical vertices around a cycle of boundary edges. /// /// @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph`. -/// @tparam NamedParameter a sequence of \ref pmp_namedparameters "Named Parameters". +/// @tparam NamedParameter a sequence of \ref bgl_namedparameters "Named Parameters". /// /// @param h a halfedge that belongs to a boundary cycle. /// @param pm the polygon mesh which contains the boundary cycle. -/// @param np optional parameter of \ref pmp_namedparameters "Named Parameters" listed below. +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `pm`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `PolygonMesh` -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd +/// template void merge_duplicated_vertices_in_boundary_cycle( typename boost::graph_traits::halfedge_descriptor h, @@ -315,17 +318,18 @@ void merge_duplicated_vertices_in_boundary_cycle( /// extracts boundary cycles and merges the duplicated vertices of each cycle. /// /// @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph`. -/// @tparam NamedParameter a sequence of \ref pmp_namedparameters "Named Parameters". +/// @tparam NamedParameter a sequence of \ref bgl_namedparameters "Named Parameters". /// /// @param pm the polygon mesh which contains the cycles. -/// @param np optional parameter of \ref pmp_namedparameters "Named Parameters" listed below. +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `pm`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `PolygonMesh` -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \sa `merge_duplicated_vertices_in_boundary_cycle()` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup_extension.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup_extension.h index f7fee2b3dc7..91712ccfda8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup_extension.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup_extension.h @@ -78,8 +78,10 @@ duplicate_non_manifold_edges_in_polygon_soup(PointRange& points, /*! * \ingroup PMP_orientation_grp + * * orients each triangle of a triangle soup using the orientation of its * closest non degenerate triangle in `tm_ref`. + * * \tparam Concurrency_tag enables sequential versus parallel orientation. Possible values are `Sequential_tag` (the default), `Parallel_if_available_tag`, and `Parallel_tag`. @@ -93,18 +95,22 @@ duplicate_non_manifold_edges_in_polygon_soup(PointRange& points, * \param tm_ref the reference triangle_mesh. * \param points the points of the soup. * \param triangles the triangles of the soup. - * @param np optional sequence of \ref pmp_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm_ref`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{geom_traits} a geometric traits class instance. - * The traits class must provide the nested functor `Collinear_3` - * to check whether three points are collinear. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm_ref`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm_ref)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{The traits class must provide the nested functor `Collinear_3` to check whether three points are collinear. } + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \attention The types of points in `PointRange`, `geom_traits` and `vertex_point_map` must be the same. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orientation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orientation.h index d9131e4a083..6318c23a212 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orientation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orientation.h @@ -153,17 +153,25 @@ namespace internal{ * isolated connected component. * * @tparam TriangleMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm the closed triangle mesh free from self-intersections to be tested - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm` - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \note This function is only doing an orientation test for one connected component of `tm`. @@ -361,26 +369,40 @@ void reverse_face_orientations(const FaceRange& face_range, PolygonMesh& pmesh) * inward or outward oriented. * * @tparam TriangleMesh a model of `FaceListGraph` and `MutableFaceGraph` . -* @tparam NamedParameters a sequence of \ref pmp_namedparameters +* @tparam NamedParameters a sequence of \ref bgl_namedparameters * * @param tm a closed triangulated surface mesh -* @param np optional sequence of \ref pmp_namedparameters among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \pre `CGAL::is_closed(tm)` * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} -* the property map with the points associated to the vertices of `tm`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `TriangleMesh` -* \cgalParamEnd -* \cgalParamBegin{face_index_map} -* a property map containing the index of each face of `tm`. -* \cgalParamEnd -* \cgalParamBegin{outward_orientation} -* if set to `true` (default) indicates that each connected component will be outward oriented, -* (inward oriented if `false`). -* \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `tm`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{face_index_map} +* \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd +* +* \cgalParamNBegin{outward_orientation} +* \cgalParamDescription{If `true`, each connected component will be outward oriented (and inward oriented if `false`).} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -662,94 +684,129 @@ void set_cc_intersecting_pairs( * of the unbounded volume (that has no outer boundary) * * A property map for `CGAL::vertex_point_t` must be either available as an internal property map - * of `tm` or provided as one of the \ref pmp_namedparameters "Named Parameters". + * of `tm` or provided as one of the \ref bgl_namedparameters "Named Parameters". * * @tparam TriangleMesh a model of `FaceListGraph` * @tparam VolumeFaceIndexMap a model of `WritablePropertyMap` with - * `boost::graph_traits::%face_descriptor` as key type and - * `boost::graph_traits::%faces_size_type` as value type. - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * `boost::graph_traits::%face_descriptor` as key type and + * `boost::graph_traits::%faces_size_type` as value type. + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm the input triangle mesh * @param volume_id_map the property map filled by this function with indices of volume components associated to the faces of `tm` - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * @pre `CGAL::is_closed(tm)` * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing a unique id per face of `tm`, in the range `[0, num_faces(tm)[` - * \cgalParamEnd - * \cgalParamBegin{face_connected_component_map} - * a property map filled by this function and that will contain for each face the id - * of its surface component in the range `[0, number of surface components - 1[` - * \cgalParamEnd - * \cgalParamBegin{volume_inclusions} - * a `reference_wrapper` (either from `boost` or the standard library) containing - * a reference to an object that must be a model of the `BackInsertionSequence` concept, - * with a value type being a model of `BackInsertionSequence` of `std::size_t`, - * both types having the functions `reserve()` and `push_back()`. - * The size of the container is exactly the number of surface components of `tm`. - * The container at position `k` contains the ids of all the - * surface components that are the first intersected by any ray with source on - * the surface component `k` and directed outside the volume enclosed by the - * surface component `k`. There is only one such id but when some surface components intersect. - * \cgalParamEnd - * \cgalParamBegin{do_orientation_tests} - * if `true` (the default value), the orientation of the faces of - * each surface components will be taken into account for the definition of the volume. - * If `false`, the face orientation is ignored and the volumes are defined only by the - * nesting of surface components. - * \cgalParamEnd - * \cgalParamBegin{error_codes} - * a `reference_wrapper` (either from `boost` or the standard library) containing - * a reference to a container that must be a model of the `BackInsertionSequence` concept, - * with a `value_type` being \link PMP_orientation_grp `Volume_error_code` \endlink - * The size of the container is exactly the number of volume components. - * The container indicates the status of a volume assigned to a set of faces. - * The description of the value type is given in the documentation of the enumeration type. - * \cgalParamEnd - * \cgalParamBegin{do_self_intersection_tests} - * If `false` (the default value), it is assumed that `tm` does not contains any self-intersections. - * if `true`, the input might contain some self-intersections and a test is done - * prior to the volume decomposition. - * \cgalParamEnd - * \cgalParamBegin{connected_component_id_to_volume_id} - * a `reference_wrapper` (either from `boost` or the standard library) containing - * a reference to a container that must be a model of the `BackInsertionSequence` concept, - * with a value_type being `std::size_t`. - * The size of the container is exactly the number of connected components. - * For each connected component identified using its id `ccid`, the id of the volume it contributes - * to describe is the value at the position `ccid` in the container. - * \cgalParamEnd - * \cgalParamBegin{nesting_levels} - * a `reference_wrapper` (either from `boost` or the standard library) containing - * a reference to a container that must be a model of the `BackInsertionSequence` concept, - * with a `value_type` being `std::size_t`. - * The size of the container is exactly the number of connected components. - * For each connected component identified using its id `ccid`, the container contains the number of - * connected components containing on its bounded side this component. - * \cgalParamEnd - * \cgalParamBegin{is_cc_outward_oriented} - * a `reference_wrapper` (either from `boost` or the standard library) containing - * a reference to a container that must be a model of the `BackInsertionSequence` concept, - * with a `value_type` being `bool`. - * The size of the container is exactly the number of connected components. - * For each connected component identified using its id `ccid`, the output of `is_outward_oriented()` - * called on the triangle mesh corresponding to this connected component - * is the value at the position `ccid` in the container. - * \cgalParamEnd - * \cgalParamBegin{intersecting_volume_pairs_output_iterator} - * Output iterator into which pairs of ids (id must be convertible to `std::size_t`) can be put. - * Each pair of connected components intersecting will be reported using their ids. - * If `do_self_intersection_tests` named parameter is set to `false`, nothing will be reported. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_connected_component_map} + * \cgalParamDescription{a property map filled by this function and that will contain for each face the id + * of its surface component in the range `[0, number of surface components - 1]`} + * \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{volume_inclusions} + * \cgalParamDescription{a container, which contains at position `k` the ids of all the + * surface components that are the first intersected by any ray with source on + * the surface component `k` and directed outside the volume enclosed by the + * surface component `k`. There is only one such id but when some surface components intersect. + * The size of the container is exactly the number of surface components of `tm`.} + * \cgalParamType{a `reference_wrapper` (either from `boost` or the standard library) containing + * a reference to an object that must be a model of the `BackInsertionSequence` concept, + * with a value type being a model of `BackInsertionSequence` of `std::size_t`, + * both types having the functions `reserve()` and `push_back()`} + * \cgalParamDefault{unused} + * \cgalParamNEnd + * + * \cgalParamNBegin{do_orientation_tests} + * \cgalParamDescription{If `true`, the orientation of the faces of each surface components + * will be taken into account for the definition of the volume. + * If `false`, the face orientation is ignored and the volumes are defined + * only by the nesting of surface components.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{error_codes} + * \cgalParamDescription{a container which indicates the status of a volume assigned to a set of faces. + * The description of the value type is given in the documentation of the enumeration type. + * The size of the container is exactly the number of volume components.} + * \cgalParamType{a `reference_wrapper` (either from `boost` or the standard library) containing + * a reference to a container that must be a model of the `BackInsertionSequence` concept, + * with value type \link PMP_orientation_grp `Volume_error_code` \endlink} + * \cgalParamDefault{unused} + * \cgalParamNEnd + * + * \cgalParamNBegin{do_self_intersection_tests} + * \cgalParamDescription{If `false`, it is assumed that `tm` does not contains any self-intersections. + * If `true`, the input might contain some self-intersections and a test is done prior to the volume decomposition.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{connected_component_id_to_volume_id} + * \cgalParamDescription{For each connected component identified using its id `ccid`, the id + * of the volume it contributes to describe is the value at the position + * `ccid` in the container. The size of the container is exactly the number + * of connected components.} + * \cgalParamType{a `reference_wrapper` (either from `boost` or the standard library) containing + * a reference to a container that must be a model of the `BackInsertionSequence` concept, + * with value type `std::size_t`} + * \cgalParamDefault{unused} + * \cgalParamNEnd + * + * + * \cgalParamNBegin{nesting_levels} + * \cgalParamDescription{For each connected component identified using its id `ccid`, the container contains the number of + * connected components containing on its bounded side this component. + * The size of the container is exactly the number of connected components.} + * \cgalParamType{a `reference_wrapper` (either from `boost` or the standard library) containing + * a reference to a container that must be a model of the `BackInsertionSequence` concept, + * with value type `std::size_t`} + * \cgalParamDefault{unused} + * \cgalParamNEnd + * + * \cgalParamNBegin{is_cc_outward_oriented} + * \cgalParamDescription{For each connected component identified using its id `ccid`, the output of `is_outward_oriented()` + * called on the triangle mesh corresponding to this connected component + * is the value at the position `ccid` in the container. + * The size of the container is exactly the number of connected components.} + * \cgalParamType{a `reference_wrapper` (either from `boost` or the standard library) containing + * a reference to a container that must be a model of the `BackInsertionSequence` concept, + * with value type `bool`} + * \cgalParamDefault{unused} + * \cgalParamNEnd + * + * \cgalParamNBegin{intersecting_volume_pairs_output_iterator} + * \cgalParamDescription{Output iterator into which pairs of ids (id must be convertible to `std::size_t`) can be put. + * Each pair of connected components intersecting will be reported using their ids. + * If `do_self_intersection_tests` named parameter is set to `false`, nothing will be reported.} + * \cgalParamType{a model of `OutputIterator`} + * \cgalParamDefault{unused} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \return the number of volume components defined by `tm` @@ -1179,30 +1236,38 @@ volume_connected_components(const TriangleMesh& tm, * See \ref coref_def_subsec for details. * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm a closed triangulated surface mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * @pre `CGAL::is_closed(tm)` * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing the index of each face of `tm`. - * \cgalParamEnd - * \cgalParamBegin{is_cc_outward_oriented} - * a `reference_wrapper` (either from `boost` or the standard library) containing - * a reference to an object of type `std::vector`. - * The size of the vector is exactly the number of connected components. - * For each connected component identified using its id `ccid`, the output of `is_outward_oriented` - * called on the submesh corresponding to this connected component - * is the value at the position `ccid` in the parameter vector. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{is_cc_outward_oriented} + * \cgalParamDescription{For each connected component identified using its id `ccid`, the output of `is_outward_oriented()` + * called on the triangle mesh corresponding to this connected component + * is the value at the position `ccid` in the container. + * The size of the container is exactly the number of connected components.} + * \cgalParamType{a `reference_wrapper` (either from `boost` or the standard library) containing + * a reference to a container that must be a model of the `BackInsertionSequence` concept, + * with value type `bool`} + * \cgalParamDefault{unused} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \see `CGAL::Polygon_mesh_processing::orient_to_bound_a_volume()` @@ -1246,27 +1311,35 @@ std::size_t volume_connected_components(const TriangleMesh& tm, VolumeFaceIndexM * See \ref coref_def_subsec for a precise definition. * * @tparam TriangleMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. - * @tparam NamedParameters a sequence of \ref pmp_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters * * @param tm a closed triangulated surface mesh - * @param np optional sequence of \ref pmp_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * @pre `CGAL::is_closed(tm)` * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing the index of each face of `tm`. - * \cgalParamEnd - * \cgalParamBegin{outward_orientation} - * if set to `true` (default) the outer connected components will be outward oriented (inward oriented if set to `false`). - * If the outer connected components are inward oriented, it means that the infinity will be considered - * as part of the volume bounded by `tm`. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{outward_orientation} + * \cgalParamDescription{If `true`, each connected component will be outward oriented (and inward oriented if `false`).} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamExtra{If the outer connected components are inward oriented, + * it means that the infinity will be considered as part of the volume bounded by `tm`.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \see `CGAL::Polygon_mesh_processing::does_bound_a_volume()` @@ -1348,24 +1421,36 @@ void orient_to_bound_a_volume(TriangleMesh& tm) * Connected components are examined by increasing number of faces. * * @tparam PolygonMesh a model of `MutableFaceGraph`, `HalfedgeListGraph` and `FaceListGraph`. - * @tparam NamedParameters a sequence of \ref pmp_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters * * @param pm a surface mesh - * @param np optional sequence of \ref pmp_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `pm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing an index for each face initialized from 0 to num_faces(pm). - * \cgalParamEnd - * \cgalParamBegin{maximum_number_of_faces} - * if not 0 (default), a connected component is considered reversible only - * if it has no more faces than the value given. Otherwise, it is always considered reversible. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `pm` a unique index + * between `0` and `num_faces(pm) - 1`)} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{maximum_number_of_faces} + * \cgalParamDescription{If not `0`, a connected component is considered reversible only + * if it has no more faces than the value given. + * Otherwise, it is always considered reversible.} + * \cgalParamType{`std::size_t`} + * \cgalParamDefault{`0`} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_mesh_to_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_mesh_to_polygon_soup.h index 44cc24e255b..6436360f8a8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_mesh_to_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_mesh_to_polygon_soup.h @@ -30,7 +30,7 @@ namespace Polygon_mesh_processing { /// \ingroup PMP_repairing_grp /// -/// Adds the vertices and faces of a mesh into a (possibly non-empty) polygon soup. +/// adds the vertices and faces of a mesh into a (possibly non-empty) polygon soup. /// /// \tparam PolygonMesh a model of `FaceListGraph` /// \tparam PointRange a model of the concepts `RandomAccessContainer` and @@ -39,19 +39,20 @@ namespace Polygon_mesh_processing { /// \tparam PolygonRange a model of the concepts `RandomAccessContainer` and `BackInsertionSequence` whose /// value type is itself a model of the concepts `RandomAccessContainer` and /// `BackInsertionSequence` whose value type is `std::size_t` -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param mesh the mesh whose faces are being put in the polygon soup /// \param points points making the polygons of the soup /// \param polygons each element in the vector describes a polygon using the indices of the points in `points` -/// \param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// a model of `ReadablePropertyMap`, the property map with the points associated to the vertices of `mesh`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` must be available in `PolygonMesh`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `mesh`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, mesh)`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \cgalAdvancedBegin diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_soup_to_polygon_mesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_soup_to_polygon_mesh.h index 84fc617c14c..3c4dc37a8a1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_soup_to_polygon_mesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/polygon_soup_to_polygon_mesh.h @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -37,13 +38,26 @@ namespace CGAL { namespace Polygon_mesh_processing { namespace internal { +template +PM_Point convert_to_pm_point(const PS_Point& p) +{ + CGAL_static_assertion((std::is_convertible::value)); + return PM_Point(p); +} + +// just for backward compatibility reasons +template +PM_Point convert_to_pm_point(const std::array& p) +{ + return PM_Point(p[0], p[1], p[2]); +} + template ::const_type> class PS_to_PM_converter { typedef typename boost::range_value::type Polygon; - typedef typename boost::property_traits::value_type Point; public: /** @@ -68,8 +82,6 @@ public: typedef typename boost::property_traits::value_type PM_Point; - CGAL_static_assertion((std::is_convertible::value)); - reserve(pmesh, static_cast::vertices_size_type>(m_points.size()), static_cast::edges_size_type>(2*m_polygons.size()), static_cast::faces_size_type>(m_polygons.size())); @@ -94,7 +106,7 @@ public: continue; vertices[i] = add_vertex(pmesh); - PM_Point pi(get(m_pm, m_points[i])); + PM_Point pi = convert_to_pm_point(get(m_pm, m_points[i])); put(vpm, vertices[i], pi); } @@ -218,29 +230,34 @@ bool is_polygon_soup_a_polygon_mesh(const PolygonRange& polygons) * whose value type is the point type * @tparam PolygonRange a model of the concept `RandomAccessContainer` whose * value type is a model of the concept `RandomAccessContainer` whose value type is `std::size_t` -* @tparam NamedParameters_PS a sequence of \ref pmp_namedparameters "Named Parameters" -* @tparam NamedParameters_PM a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters_PS a sequence of \ref bgl_namedparameters "Named Parameters" +* @tparam NamedParameters_PM a sequence of \ref bgl_namedparameters "Named Parameters" * * @param points points of the soup of polygons * @param polygons each element in the vector describes a polygon using the indices of the points in `points` * @param out the polygon mesh to be built -* @param np_ps optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np_ps an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{point_map} -* a model of `ReadablePropertyMap` whose value type is a point type convertible to the point type -* of the vertex point map associated to the polygon mesh. If this parameter is omitted, `CGAL::Identity_property_map` is used. -* \cgalParamEnd +* \cgalParamNBegin{point_map} +* \cgalParamDescription{a property map associating points to the elements of the range `points`} +* \cgalParamType{a model of `ReadablePropertyMap` whose value type is a point type convertible to the point type +* of the vertex point map associated to the polygon mesh} +* \cgalParamDefault{`CGAL::Identity_property_map`} +* \cgalParamNEnd * \cgalNamedParamsEnd * -* @param np_pm optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np_pm an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} -* a model of `WritablePropertyMap`, the property map with the points associated to the vertices of `out`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`. -* \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `out`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, out)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * \sa `CGAL::Polygon_mesh_processing::orient_polygon_soup()` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/random_perturbation.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/random_perturbation.h index aec54c22b7c..33b8ba7f908 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/random_perturbation.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/random_perturbation.h @@ -106,30 +106,49 @@ namespace internal { * vertices of type `boost::graph_traits::%vertex_descriptor`. * Its iterator type is `ForwardIterator`. * @tparam TriangleMesh model of `MutableFaceGraph`. -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param vertices the range of vertices to be perturbed * @param tmesh the triangulated surface mesh * @param perturbation_max_size the maximal length of moves that can be applied to * vertices of `tmesh`. -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{geom_traits} a geometric traits class instance, model of `Kernel`. -* \cgalParamEnd -* \cgalParamBegin{vertex_point_map} the property map with the points associated -* to the vertices of `tmesh`. Instance of a class model of `ReadWritePropertyMap`. -* \cgalParamEnd -* \cgalParamBegin{vertex_is_constrained_map} a property map containing the -* constrained-or-not status of each vertex of `tmesh`. A constrained vertex -* cannot be modified at all during perturbation -* \cgalParamEnd -* \cgalParamBegin{do_project} a boolean that sets whether vertices are reprojected -* on the input surface after their coordinates random perturbation -* \cgalParamEnd -* \cgalParamBegin{random_seed} a non-negative integer value to seed the random - number generator, and make the perturbation deterministic -* \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `tmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each vertex of `tmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no vertex is constrained} +* \cgalParamExtra{A constrained vertex cannot be modified at all during perturbation} +* \cgalParamNEnd +* +* \cgalParamNBegin{do_project} +* \cgalParamDescription{indicates whether vertices are reprojected on the input surface +* after their coordinates random perturbation} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd +* +* \cgalParamNBegin{random_seed} +* \cgalParamDescription{a value to seed the random number generator, and make the perturbation deterministic} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`unsigned int(-1)`} +* \cgalParamNEnd * \cgalNamedParamsEnd * */ @@ -225,4 +244,3 @@ void random_perturbation(TriangleMesh& tmesh #include #endif //CGAL_POLYGON_MESH_PROCESSING_RANDOM_PERTURBATION_H - diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine.h index d2f0c35a588..5c4742f6b60 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/refine.h @@ -36,25 +36,31 @@ namespace Polygon_mesh_processing { holding `boost::graph_traits::%face_descriptor` for patch faces @tparam VertexOutputIterator model of `OutputIterator` holding `boost::graph_traits::%vertex_descriptor` for patch vertices - @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @param tmesh triangle mesh with patches to be refined @param faces the range of faces defining the patches to refine @param faces_out output iterator into which descriptors of new faces are recorded @param vertices_out output iterator into which descriptors of new vertices are recorded - @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tmesh` - Instance of a class model of `ReadWritePropertyMap`. - If this parameter is omitted, an internal property map for - `CGAL::vertex_point_t` must be available in `TriangleMesh` - \cgalParamEnd - \cgalParamBegin{density_control_factor} factor to control density of the output mesh, - where larger values lead to denser refinements. - The density of vertices of `faces_out` is this factor times higher than the vertices of `faces.` \cgalParamEnd - \cgalNamedParamsEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `TriangleMesh`.} + \cgalParamNEnd + \cgalParamNBegin{density_control_factor} + \cgalParamDescription{a factor to control density of the output mesh, where larger values lead to denser refinements} + \cgalParamType{double} + \cgalParamDefault{\f$ \sqrt{2}\f$} + \cgalParamExtra{The density of vertices of `faces_out` is this factor times higher than the vertices of `faces`.} + \cgalParamNEnd + \cgalNamedParamsEnd @return pair of `faces_out` and `vertices_out` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h index 1c8b004bdd6..78fd29ed683 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh.h @@ -41,75 +41,124 @@ namespace Polygon_mesh_processing { * The descriptor types `boost::graph_traits::%face_descriptor` * and `boost::graph_traits::%halfedge_descriptor` must be * models of `Hashable`. -* * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, model of `Range`. Its iterator type is `ForwardIterator`. -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh with triangulated surface patches to be remeshed * @param faces the range of triangular faces defining one or several surface patches to be remeshed * @param target_edge_length the edge length that is targeted in the remeshed patch. * If `0` is passed then only the edge-flip, tangential relaxation, and projection steps will be done. -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * @pre if constraints protection is activated, the constrained edges must * not be longer than 4/3*`target_edge_length` * * \cgalNamedParamsBegin -* \cgalParamBegin{geom_traits} a geometric traits class instance, model of `Kernel`. -* Exact constructions kernels are not supported by this function. -* \cgalParamEnd -* \cgalParamBegin{vertex_point_map} the property map with the points associated -* to the vertices of `pmesh`. Instance of a class model of `ReadWritePropertyMap`. -* \cgalParamEnd -* \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` -* \cgalParamEnd -* \cgalParamBegin{number_of_iterations} the number of iterations for the -* sequence of atomic operations performed (listed in the above description) -* \cgalParamEnd -* \cgalParamBegin{edge_is_constrained_map} a property map containing the -* constrained-or-not status of each edge of `pmesh`. A constrained edge can be split -* or collapsed, but not flipped, nor its endpoints moved by smoothing. -* Sub-edges generated by splitting are set to be constrained. -* Note that patch boundary edges (i.e. incident to only one face in the range) -* are always considered as constrained edges. -* \cgalParamEnd -* \cgalParamBegin{vertex_is_constrained_map} a property map containing the -* constrained-or-not status of each vertex of `pmesh`. A constrained vertex -* cannot be modified at all during remeshing -* \cgalParamEnd -* \cgalParamBegin{protect_constraints} If `true`, the edges set as constrained -* in `edge_is_constrained_map` (or by default the boundary edges) -* are not split nor collapsed during remeshing. -* Note that around constrained edges that have their length higher than -* twice `target_edge_length`, remeshing will fail to provide -* good quality results. It can even fail to terminate because of cascading vertex -* insertions. -* \cgalParamEnd -* \cgalParamBegin{collapse_constraints} If `true`, the edges set as constrained -* in `edge_is_constrained_map` (or by default the boundary edges) -* are collapsed during remeshing. This value is ignored if `protect_constraints` is true; -* \cgalParamEnd -* \cgalParamBegin{face_patch_map} a property map with the patch id's associated to the - faces of `faces`. Instance of a class model of `ReadWritePropertyMap`. It gets - updated during the remeshing process while new faces are created. -* \cgalParamEnd -* \cgalParamBegin{number_of_relaxation_steps} the number of iterations of tangential -* relaxation that are performed at each iteration of the remeshing process -* \cgalParamEnd -* \cgalParamBegin{relax_constraints} If `true`, the end vertices of the edges set as -* constrained in `edge_is_constrained_map` and boundary edges move along the -* constrained polylines they belong to. -* \cgalParamEnd -* \cgalParamBegin{do_project} a boolean that sets whether vertices should be reprojected -* on the input surface after creation or displacement. -* \cgalParamEnd -* \cgalParamBegin{projection_functor} -* A function object used to project input vertices (moved by the smoothing) and created vertices. -* It must have `%Point_3 operator()(vertex_descriptor)`, `%Point_3` being the value type -* of the vertex point map. -* If not provided, vertices are projected on the input surface mesh. -* \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamExtra{Exact constructions kernels are not supported by this function.} +* \cgalParamNEnd +* +* \cgalParamNBegin{face_index_map} +* \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd +* +* \cgalParamNBegin{number_of_iterations} +* \cgalParamDescription{the number of iterations for the sequence of atomic operations performed (listed in the above description)} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`1`} +* \cgalParamNEnd +* +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%edge_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no edge is constrained} +* \cgalParamExtra{A constrained edge can be split or collapsed, but not flipped, nor its endpoints moved by smoothing.} +* \cgalParamExtra{Sub-edges generated by splitting are set to be constrained.} +* \cgalParamExtra{Patch boundary edges (i.e. incident to only one face in the range) are always considered as constrained edges.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each vertex of `pmesh`.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no vertex is constrained} +* \cgalParamExtra{A constrained vertex cannot be modified during remeshing.} +* \cgalParamNEnd +* +* \cgalParamNBegin{protect_constraints} +* \cgalParamDescription{If `true`, the edges set as constrained in `edge_is_constrained_map` +* (or by default the boundary edges) are not split nor collapsed during remeshing.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`false`} +* \cgalParamExtra{Note that around constrained edges that have their length higher than +* twice `target_edge_length`, remeshing will fail to provide good quality results. +* It can even fail to terminate because of cascading vertex insertions.} +* \cgalParamNEnd +* +* \cgalParamNBegin{collapse_constraints} +* \cgalParamDescription{If `true`, the edges set as constrained in `edge_is_constrained_map` +* (or by default the boundary edges) are collapsed during remeshing.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamExtra{This value is ignored if `protect_constraints` is `true`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{face_patch_map} +* \cgalParamDescription{a property map with the patch id's associated to the faces of `faces`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%face_descriptor` +* as key type and the desired property, model of `CopyConstructible` as value type.} +* \cgalParamDefault{a default property map where each face is associated with the ID of +* the connected component it belongs to. Connected components are +* computed with respect to the constrained edges listed in the property map +* `edge_is_constrained_map`} +* \cgalParamExtra{The map is updated during the remeshing process while new faces are created.} +* \cgalParamNEnd +* +* \cgalParamNBegin{number_of_relaxation_steps} +* \cgalParamDescription{the number of iterations of tangential relaxation that are performed +* at each iteration of the remeshing process} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`1`} +* \cgalParamNEnd +* +* \cgalParamNBegin{relax_constraints} +* \cgalParamDescription{If `true`, the end vertices of the edges set as constrained +* in `edge_is_constrained_map` and boundary edges move along the} +* constrained polylines they belong to.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`false`} +* \cgalParamNEnd +* +* \cgalParamNBegin{do_project} +* \cgalParamDescription{whether vertices should be reprojected on the input surface after creation or displacement} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd +* +* \cgalParamNBegin{projection_functor} +* \cgalParamDescription{A function object used to project input vertices (moved by the smoothing) and created vertices} +* \cgalParamType{Unary functor that provides `%Point_3 operator()(vertex_descriptor)`, `%Point_3` being the value type +* of the vertex point map.} +* \cgalParamDefault{If not provided, vertices are projected on the input surface mesh.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @sa `split_long_edges()` @@ -292,24 +341,38 @@ void isotropic_remeshing( * has an internal property map for `CGAL::vertex_point_t`. * @tparam EdgeRange range of `boost::graph_traits::%edge_descriptor`, * model of `Range`. Its iterator type is `InputIterator`. -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh * @param edges the range of edges to be split if they are longer than given threshold * @param max_length the edge length above which an edge from `edges` is split * into to sub-edges -* @param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated -* to the vertices of `pmesh`. Instance of a class model of `ReadWritePropertyMap`. -* \cgalParamEnd -* \cgalParamBegin{face_index_map} a property map containing the index of each face of `pmesh` -* \cgalParamEnd -* \cgalParamBegin{edge_is_constrained_map} a property map containing the -* constrained-or-not status of each edge of `pmesh`. A constrained edge can be split, -* and the sub-edges are set to be constrained. -* \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{face_index_map} +* \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} +* \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +* as key type and `std::size_t` as value type} +* \cgalParamDefault{an automatically indexed internal map} +* \cgalParamNEnd +* +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%edge_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no edge is constrained} +* \cgalParamExtra{A constrained edge can be split or collapsed, but not flipped, nor its endpoints moved by smoothing.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @sa `isotropic_remeshing()` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair.h index 127f6c1b31c..931858e4170 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair.h @@ -64,7 +64,7 @@ std::size_t remove_isolated_vertices(PolygonMesh& pmesh) /// /// removes connected components whose area or volume is under a certain threshold value. /// -/// Thresholds are provided via \ref pmp_namedparameters "Named Parameters". (see below). +/// Thresholds are provided via \ref bgl_namedparameters "Named Parameters". (see below). /// If thresholds are not provided by the user, default values are computed as follows: /// - the area threshold is taken as the square of one percent of the length of the diagonal /// of the bounding box of the mesh. @@ -78,25 +78,71 @@ std::size_t remove_isolated_vertices(PolygonMesh& pmesh) /// by passing zero (`0`) as threshold value. /// /// \tparam TriangleMesh a model of `FaceListGraph` and `MutableFaceGraph` -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param tmesh the triangulated polygon mesh -/// \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{area_threshold} a fixed value such that only connected components whose area is -/// larger than this value are kept \cgalParamEnd -/// \cgalParamBegin{volume_threshold} a fixed value such that only connected components whose volume is -/// larger than this value are kept (only applies to closed connected components) \cgalParamEnd -/// \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd -/// \cgalParamBegin{face_index_map} a property map containing the index of each face of `tmesh` \cgalParamEnd -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tmesh`. -/// \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel` \cgalParamEnd -/// \cgalParamBegin{dry_run} a Boolean parameter. If set to `true`, the mesh will not be altered, -/// but the number of components that would be removed is returned. The default value is `false`.\cgalParamEnd -/// \cgalParamBegin{output_iterator} a model of `OutputIterator` with value type `face_descriptor`. -/// When using the "dry run" mode (see parameter `dry_run`), faces -/// that would be removed by the algorithm can be collected with this output iterator. \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tmesh`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `TriangleMesh`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{a class model of `Kernel`} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamExtra{Exact constructions kernels are not supported by this function.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{face_index_map} +/// \cgalParamDescription{a property map associating to each face of `tmesh` a unique index between `0` and `num_faces(tmesh) - 1`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +/// as key type and `std::size_t` as value type} +/// \cgalParamDefault{an automatically indexed internal map} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{area_threshold} +/// \cgalParamDescription{a fixed value such that only connected components whose area is larger than this value are kept} +/// \cgalParamType{`geom_traits::FT`} +/// \cgalParamDefault{1\% of the length of the diagonal of the axis-aligned bounding box of the mesh, squared} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{volume_threshold} +/// \cgalParamDescription{a fixed value such that only connected components whose volume is +/// larger than this value are kept (only applies to closed connected components)} +/// \cgalParamType{`geom_traits::FT`} +/// \cgalParamDefault{1\% of the length of the diagonal of the axis-aligned bounding box of the mesh, cubed} +/// \cgalParamExtra{The mesh must be closed.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{edge_is_constrained_map} +/// \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tmesh`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%edge_descriptor` +/// as key type and `bool` as value type. It must be default constructible.} +/// \cgalParamDefault{a default property map where no edge is constrained} +/// \cgalParamExtra{A constrained edge can be split or collapsed, but not flipped, nor its endpoints moved by smoothing.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{dry_run} +/// \cgalParamDescription{If `true`, the mesh will not be altered, but the number of components +/// that would be removed is returned.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`false`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{output_iterator} +/// \cgalParamDescription{An output iterator to collect the faces that would be removed by the algorithm, +/// when using the "dry run" mode (see parameter `dry_run`)} +/// \cgalParamType{a model of `OutputIterator` with value type `face_descriptor`} +/// \cgalParamDefault{unused} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \return the number of connected components removed (ignoring isolated vertices). diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h index 5ef95e053f6..2b23c5db8b2 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h @@ -1514,26 +1514,33 @@ bool remove_degenerate_edges(TriangleMesh& tmesh) // @pre `CGAL::is_triangle_mesh(tmesh)` // // @tparam TriangleMesh a model of `FaceListGraph` and `MutableFaceGraph` -// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" // // @param tmesh the triangulated surface mesh to be repaired -// @param np optional \ref pmp_namedparameters "Named Parameters" described below +// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below // // \cgalNamedParamsBegin -// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -// The type of this map is model of `ReadWritePropertyMap`. -// If this parameter is omitted, an internal property map for -// `CGAL::vertex_point_t` must be available in `TriangleMesh` -// \cgalParamEnd -// \cgalParamBegin{geom_traits} a geometric traits class instance. -// The traits class must provide the nested type `Point_3`, -// and the nested functors: -// - `Compare_distance_3` to compute the distance between 2 points -// - `Collinear_3` to check whether 3 points are collinear -// - `Less_xyz_3` to compare lexicographically two points -// - `Equal_3` to check whether 2 points are identical. -// For each functor Foo, a function `Foo foo_object()` must be provided. -// \cgalParamEnd +// \cgalParamNBegin{vertex_point_map} +// \cgalParamDescription{a property map associating points to the vertices of `tmesh`} +// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +// as key type and `%Point_3` as value type} +// \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} +// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +// must be available in `TriangleMesh`.} +// \cgalParamNEnd +// +// \cgalParamNBegin{geom_traits} +// \cgalParamDescription{an instance of a geometric traits class} +// \cgalParamType{The traits class must provide the nested type `Point_3`, +// and the nested functors: +// - `Compare_distance_3` to compute the distance between 2 points +// - `Collinear_3` to check whether 3 points are collinear +// - `Less_xyz_3` to compare lexicographically two points +// - `Equal_3` to check whether 2 points are identical. +// For each functor Foo, a function `Foo foo_object()` must be provided.} +// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +// \cgalParamNEnd // \cgalNamedParamsEnd // // \todo the function might not be able to remove all degenerate faces. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index b9e255f8a5d..16af031159c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -118,43 +118,21 @@ bool simplify_polygon(PointRange& points, { const std::size_t ini_polygon_size = polygon.size(); - // Start at the last since if two points are identical, the second one gets removed. - // By starting at 'last', we ensure that 'to_remove' is ordered from closest to .begin() - // to closest to .end() - std::size_t last = ini_polygon_size - 1, i = last; - bool stop = false; - std::vector to_remove; - - do + for(std::size_t i=0; i @@ -213,25 +194,28 @@ std::size_t simplify_polygons_in_polygon_soup(PointRange& points, // \ingroup PMP_repairing_grp // -// Splits "pinched" polygons, that is polygons for which a point appears more than once, +// splits "pinched" polygons, that is polygons for which a point appears more than once, // into multiple non-pinched polygons. // // \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. // \tparam PolygonRange a model of the concept `SequenceContainer` // whose value_type is itself a model of the concepts `SequenceContainer` // and `Swappable` whose value_type is `std::size_t`. -// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" // // \param points points of the soup of polygons. // \param polygons a vector of polygons. Each element in the vector describes a polygon // using the indices of the points in `points`. -// \param np optional \ref pmp_namedparameters "Named Parameters" described below +// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below // // \cgalNamedParamsBegin -// \cgalParamBegin{geom_traits} a geometric traits class instance. -// The traits class must provide the nested functor `Less_xyz_3` -// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. -// \cgalParamEnd +// \cgalParamNBegin{geom_traits} +// \cgalParamDescription{an instance of a geometric traits class} +// \cgalParamType{The traits class must provide the nested functor `Less_xyz_3` +// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`.} +// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +// \cgalParamNEnd // \cgalNamedParamsEnd // template @@ -316,13 +300,13 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, // \ingroup PMP_repairing_grp // -// Removes polygons with fewer than 2 points from the soup. +// removes polygons with fewer than 2 points from the soup. // // \tparam PointRange a model of the concept `Container` whose value type is the point type. // \tparam PolygonRange a model of the concept `SequenceContainer` // whose value_type is itself a model of the concept `Container` // whose value_type is `std::size_t`. -// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" // // \param points points of the soup of polygons. // \param polygons a vector of polygons. Each element in the vector describes a polygon @@ -373,7 +357,7 @@ std::size_t remove_degenerate_polygons_in_polygon_soup(PointRange& points, /// \ingroup PMP_repairing_grp /// -/// Removes the isolated points from a polygon soup. +/// removes the isolated points from a polygon soup. /// A point is considered isolated if it does not appear in any polygon of the soup. /// /// \tparam PointRange a model of the concept `SequenceContainer` whose value type is the point type. @@ -475,7 +459,7 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, /// \ingroup PMP_repairing_grp /// -/// Merges the duplicate points in a polygon soup. +/// merges the duplicate points in a polygon soup. /// Note that the index of a point that is merged with another point will thus change /// in all the polygons that the point appears in. /// @@ -484,18 +468,21 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, /// \tparam PolygonRange a model of the concept `RandomAccessContainer` /// whose value_type is itself a model of the concept `RandomAccessContainer` /// whose value_type is `std::size_t`. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param points points of the soup of polygons. /// \param polygons a vector of polygons. Each element in the vector describes a polygon /// using the indices of the points in `points`. -/// \param np optional \ref pmp_namedparameters "Named Parameters" described below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested functor `Less_xyz_3` -/// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. -/// \cgalParamEnd +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested functor `Less_xyz_3` +/// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns the number of removed points @@ -786,7 +773,7 @@ struct Duplicate_collector // \ingroup PMP_repairing_grp // -// Collects duplicate polygons in a polygon soup, that is polygons that share the same vertices in the same +// collects duplicate polygons in a polygon soup, that is polygons that share the same vertices in the same // order. // // \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. @@ -863,7 +850,7 @@ DuplicateOutputIterator collect_duplicate_polygons(const PointRange& points, /// \ingroup PMP_repairing_grp /// -/// Merges the duplicate polygons in a polygon soup. Two polygons are duplicate if they share the same +/// merges the duplicate polygons in a polygon soup. Two polygons are duplicate if they share the same /// vertices in the same order. Note that the first vertex of the polygon does not matter, that is /// the triangle `0,1,2` is a duplicate of the triangle `2,0,1`. /// @@ -871,27 +858,37 @@ DuplicateOutputIterator collect_duplicate_polygons(const PointRange& points, /// \tparam PolygonRange a model of the concept `SequenceContainer` /// whose value_type is itself a model of the concepts `RandomAccessContainer` /// and `ReversibleContainer` whose value_type is `std::size_t`. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param points points of the soup of polygons. /// \param polygons a vector of polygons. Each element in the vector describes a polygon /// using the indices of the points in `points`. -/// \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested functor `Less_xyz_3` -/// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. -/// \cgalParamEnd -/// \cgalParamBegin{erase_all_duplicates} -/// Parameter to indicate, when multiple polygons are duplicates, whether all the duplicate polygons -/// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. -/// \cgalParamEnd -/// \cgalParamBegin{require_same_orientation} -/// Parameter to indicate if polygon orientation should be taken into account when determining -/// whether two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` -/// are duplicates. %Default is `false`. -/// \cgalParamEnd +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested functor `Less_xyz_3` +/// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{erase_all_duplicates} +/// \cgalParamDescription{Parameter to indicate, when multiple polygons are duplicates, +/// whether all the duplicate polygons should be removed +/// or if one (arbitrarily chosen) face should be kept.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`false`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{require_same_orientation} +/// \cgalParamDescription{Parameter to indicate if polygon orientation should be taken +/// into account when determining whether two polygons are duplicates, +/// that is, whether e.g. the triangles `0,1,2` and `0,2,1` are duplicates.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`false`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns the number of removed polygons @@ -1004,7 +1001,7 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(PointRange& points, /// \ingroup PMP_repairing_grp /// -/// Cleans a given polygon soup through various repairing operations. More precisely, this function +/// cleans a given polygon soup through various repairing operations. More precisely, this function /// carries out the following tasks, in the same order as they are listed: /// - merging of duplicate points, using the function /// `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()`; @@ -1025,32 +1022,38 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(PointRange& points, /// \tparam PolygonRange a model of the concept `SequenceContainer`. /// whose value_type is itself a model of the concepts `SequenceContainer`, /// `Swappable`, and `ReversibleContainer` whose value_type is `std::size_t`. -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param points points of the soup of polygons. /// \param polygons a vector of polygons. Each element in the vector describes a polygon /// using the indices of the points in `points`. -/// \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested functors : -/// - `Less_xyz_3` to compare lexicographically two points -/// - `Equal_3` to check whether 2 points are identical +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested functors `Less_xyz_3` and `Equal_3` +/// to respectivelycompare lexicographically two points and to check if 2 points +/// are identical. For each functor `Foo`, a function `Foo foo_object()` must be provided.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// -/// and, for each functor `Foo`, a function `Foo foo_object()`. -/// \cgalParamEnd -/// \cgalParamBegin{erase_all_duplicates} -/// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` to indicate, -/// when multiple polygons are duplicates, whether all the duplicate polygons -/// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. -/// \cgalParamEnd -/// \cgalParamBegin{require_same_orientation} -/// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` -/// to indicate if polygon orientation should be taken into account when determining whether -/// two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` are duplicates. -/// %Default is `false`. -/// \cgalParamEnd +/// \cgalParamNBegin{erase_all_duplicates} +/// \cgalParamDescription{Parameter to indicate, when multiple polygons are duplicates, +/// whether all the duplicate polygons should be removed +/// or if one (arbitrarily chosen) face should be kept.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`false`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{require_same_orientation} +/// \cgalParamDescription{Parameter to indicate if polygon orientation should be taken +/// into account when determining whether two polygons are duplicates, +/// that is, whether e.g. the triangles `0,1,2` and `0,2,1` are duplicates.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`false`} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// template diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h index 46874074c03..17dfd0e0051 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h @@ -337,18 +337,28 @@ self_intersections_impl(const FaceRange& face_range, * @tparam TriangleMesh a model of `FaceListGraph` * @tparam FacePairOutputIterator a model of `OutputIterator` holding objects of type * `std::pair::%face_descriptor, boost::graph_traits::%face_descriptor>` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param face_range the range of faces to check for self-intersection. * @param tmesh the triangulated surface mesh to be checked * @param out output iterator to be filled with all pairs of non-adjacent faces that intersect - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template < class ConcurrencyTag = Sequential_tag, @@ -394,20 +404,30 @@ self_intersections(const FaceRange& face_range, * @tparam TriangleMesh a model of `FaceListGraph` * @tparam FacePairOutputIterator a model of `OutputIterator` holding objects of type * `std::pair::%face_descriptor, boost::graph_traits::%face_descriptor>` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh the triangulated surface mesh to be checked * @param out output iterator to be filled with all pairs of non-adjacent faces that intersect. In case `tmesh` contains some degenerate faces, for each degenerate face `f` a pair `(f,f)` will be put in `out` before any other self intersection between non-degenerate faces. These are the only pairs where degenerate faces will be reported. - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return `out` @@ -443,17 +463,27 @@ self_intersections(const TriangleMesh& tmesh, FacePairOutputIterator out) * Possible values are `Sequential_tag`, `Parallel_tag`, and `Parallel_if_available_tag`. * @tparam FaceRange a range of `face_descriptor` * @tparam TriangleMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param face_range the set of faces to test for self-intersection * @param tmesh the triangulated surface mesh to be tested - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `SelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if the faces in `face_range` self-intersect @@ -490,16 +520,26 @@ bool does_self_intersect(const FaceRange& face_range, * @tparam ConcurrencyTag enables sequential versus parallel algorithm. * Possible values are `Sequential_tag`, `Parallel_tag`, and `Parallel_if_available_tag`. * @tparam TriangleMesh a model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh the triangulated surface mesh to be tested - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh`\cgalParamEnd - * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `PMPSelfIntersectionTraits` \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a class model of `PMPSelfIntersectionTraits`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + * \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if `tmesh` self-intersects diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/shape_predicates.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/shape_predicates.h index 3e43d8fc6d2..94d86cc5572 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/shape_predicates.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/shape_predicates.h @@ -40,22 +40,27 @@ namespace Polygon_mesh_processing { /// An edge is considered degenerate if the geometric positions of its two extremities are identical. /// /// @tparam PolygonMesh a model of `HalfedgeGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param e an edge of `pm` /// @param pm polygon mesh containing `e` -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pm`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `PolygonMesh` -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested type `Point_3`, -/// and the nested functor `Equal_3` to check whether two points are identical. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested type `Point_3`, +/// and the nested functor `Equal_3` to check whether two points are identical.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \sa `degenerate_edges()` @@ -91,23 +96,30 @@ bool is_degenerate_edge(typename boost::graph_traits::edge_descript /// /// @tparam EdgeRange a model of `Range` with value type `boost::graph_traits::%edge_descriptor` /// @tparam TriangleMesh a model of `HalfedgeGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param edges a subset of edges of `tm` /// @param tm a triangle mesh /// @param out an output iterator in which the degenerate edges are written -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `TriangleMesh` -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested type `Point_3`, -/// and the nested functor `Equal_3` to check whether two points are identical. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `TriangleMesh`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested type `Point_3`, +/// and the nested functor `Equal_3` to check whether two points are identical.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd template OutputIterator degenerate_edges(const EdgeRange& edges, @@ -166,22 +178,27 @@ OutputIterator degenerate_edges(const TriangleMesh& tm, OutputIterator out) /// A triangle face is considered degenerate if the geometric positions of its vertices are collinear. /// /// @tparam TriangleMesh a model of `FaceGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param f a triangle face of `tm` /// @param tm a triangle mesh containing `f` -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `TriangleMesh` -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested functor `Collinear_3` -/// to check whether three points are collinear. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested type `Point_3`, +/// and the nested functor `Collinear_3` to check whether three points are aligned.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \sa `degenerate_faces()` @@ -223,23 +240,30 @@ bool is_degenerate_triangle_face(typename boost::graph_traits::fac /// /// @tparam FaceRange a model of `Range` with value type `boost::graph_traits::%face_descriptor` /// @tparam TriangleMesh a model of `FaceGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param faces a subset of faces of `tm` /// @param tm a triangle mesh /// @param out an output iterator in which the degenerate faces are put -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `TriangleMesh` -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested functor `Collinear_3` -/// to check whether three points are collinear. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `TriangleMesh`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested type `Point_3`, +/// and the nested functor `Collinear_3` to check whether three points are collinear.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// template @@ -300,23 +324,28 @@ OutputIterator degenerate_faces(const TriangleMesh& tm, OutputIterator out) /// A triangle is said to be a needle if its longest edge is much longer than its shortest edge. /// /// @tparam TriangleMesh a model of `FaceGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param f a triangle face of `tm` /// @param tm triangle mesh containing `f` /// @param threshold a bound on the ratio of the longest edge length and the shortest edge length -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `TriangleMesh` -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested type `FT` and -/// the nested functor `Compute_squared_distance_3`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested type `FT`, +/// and the nested functor `Compute_squared_distance_3`.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \return the shortest halfedge if the triangle face is a needle, and a null halfedge otherwise. @@ -398,26 +427,31 @@ is_needle_triangle_face(typename boost::graph_traits::face_descrip /// A triangle is said to be a cap if one of the its angles is close to `180` degrees. /// /// @tparam TriangleMesh a model of `FaceGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param f a triangle face of `tm` /// @param tm triangle mesh containing `f` /// @param threshold the cosine of a minimum angle such that if `f` has an angle greater than this bound, /// it is a cap. The threshold is in range `[-1 0]` and corresponds to an angle /// between `90` and `180` degrees. -/// @param np optional \ref pmp_namedparameters "Named Parameters" described below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `tm`. -/// The type of this map is model of `ReadWritePropertyMap`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` should be available in `TriangleMesh` -/// \cgalParamEnd -/// \cgalParamBegin{geom_traits} a geometric traits class instance. -/// The traits class must provide the nested type `Point_3` and -/// the nested functors `Compute_squared_distance_3`, `Construct_vector_3`, -/// and `Compute_scalar_product_3`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `tm`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{geom_traits} +/// \cgalParamDescription{an instance of a geometric traits class} +/// \cgalParamType{The traits class must provide the nested type `Point_3`, +/// the nested functors `Compute_squared_distance_3`, `Construct_vector_3`, +/// and `Compute_scalar_product_3`.} +/// \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +/// \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \return the halfedge opposite of the largest angle if the face is a cap, and a null halfedge otherwise. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_mesh.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_mesh.h index 60cdbf355be..c4965e19051 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_mesh.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_mesh.h @@ -36,7 +36,7 @@ namespace Polygon_mesh_processing { /*! * \ingroup PMP_meshing_grp * -* \short smoothes a triangulated region of a polygon mesh. +* \short smooths a triangulated region of a polygon mesh. * * This function attempts to make the triangle angle and area distributions as uniform as possible * by moving (non-constrained) vertices. @@ -52,45 +52,81 @@ namespace Polygon_mesh_processing { * @tparam TriangleMesh model of `MutableFaceGraph`. * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, model of `Range`. Its iterator type is `ForwardIterator`. -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh a polygon mesh with triangulated surface patches to be smoothed. * @param faces the range of triangular faces defining one or several surface patches to be smoothed. -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{use_angle_smoothing} Boolean value to indicate whether angle-based smoothing should be used. -* %Default is `true`. -* \cgalParamEnd -* \cgalParamBegin{use_area_smoothing} Boolean value to indicate whether area-based smoothing should be used. -* %Default is `true`. -* \cgalParamEnd -* \cgalParamBegin{number_of_iterations} the number of iterations for the -* sequence of the smoothing iterations performed (default is 1). -* \cgalParamEnd -* \cgalParamBegin{use_safety_constraints} if `true`, vertex moves that would worsen the mesh -* are ignored. %Default is `false`. -* \cgalParamEnd -* \cgalParamBegin{use_Delaunay_flips} if `true` (default value), area-based smoothing will be completed -* by a phase of Delaunay-based edge-flips to prevent the creation of elongated triangles. -* \cgalParamEnd -* \cgalParamBegin{do_project} if `true` (default value), points are projected onto the initial surface -* after each iteration. -* \cgalParamEnd -* \cgalParamBegin{vertex_is_constrained_map} a property map containing the -* constrained-or-not status of each vertex of `tmesh`. A constrained vertex -* cannot be modified at all during smoothing. -* \cgalParamEnd -* \cgalParamBegin{edge_is_constrained_map} a property map, model of `ReadWritePropertyMap`, containing the -* constrained-or-not status of each edge of `tmesh`. A constrained edge cannot be flipped and its extremities -* are tagged as constrained vertices. -* \cgalParamEnd -* \cgalParamBegin{vertex_point_map} the property map, model of `ReadWritePropertyMap`, with the points -* associated to the vertices of `tmesh`. -* \cgalParamEnd -* \cgalParamBegin{geom_traits} a geometric traits class instance, model of `Kernel`. -* Exact constructions kernels are not supported by this function. -* \cgalParamEnd +* \cgalParamNBegin{number_of_iterations} +* \cgalParamDescription{the number of iterations for the sequence of the smoothing iterations performed} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`1`} +* \cgalParamNEnd +* +* \cgalParamNBegin{use_angle_smoothing} +* \cgalParamDescription{value to indicate whether angle-based smoothing should be used} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd +* +* \cgalParamNBegin{use_area_smoothing} +* \cgalParamDescription{value to indicate whether area-based smoothing should be used} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `tmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `TriangleMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{use_safety_constraints} +* \cgalParamDescription{If `true`, vertex moves that would worsen the mesh are ignored.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`false`} +* \cgalParamNEnd +* +* \cgalParamNBegin{use_Delaunay_flips} +* \cgalParamDescription{If `true`, area-based smoothing will be completed by a phase of +* Delaunay-based edge-flips to prevent the creation of elongated triangles.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd +* +* \cgalParamNBegin{do_project} +* \cgalParamDescription{If `true`, points are projected onto the initial surface after each iteration.} +* \cgalParamType{Boolean} +* \cgalParamDefault{`true`} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each vertex of `tmesh`.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no vertex is constrained} +* \cgalParamExtra{A constrained vertex cannot be modified at all during smoothing.} +* \cgalParamNEnd +* +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tmesh`.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%edge_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no edge is constrained} +* \cgalParamExtra{A constrained edge cannot be modified at all during smoothing.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @warning The third party library \link thirdpartyCeres Ceres \endlink is required diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_shape.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_shape.h index 608758623a1..6575aae6ef4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_shape.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/smooth_shape.h @@ -48,31 +48,54 @@ namespace Polygon_mesh_processing { * @tparam TriangleMesh model of `MutableFaceGraph`. * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, * model of `Range`. Its iterator type is `ForwardIterator`. -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tmesh a polygon mesh with triangulated surface patches to be smoothed. * @param faces the range of triangular faces defining one or several surface patches to be smoothed. * @param time a time step that corresponds to the speed by which the surface is smoothed. * A larger time step results in faster convergence but details may be distorted to have a larger extent * compared to more iterations with a smaller step. Typical values scale in the interval (1e-6, 1]. -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below. +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated -* to the vertices of `tmesh`. Instance of a class model of `ReadWritePropertyMap`. -* \cgalParamEnd -* \cgalParamBegin{geom_traits} a geometric traits class instance, model of `Kernel`. -* \cgalParamEnd -* \cgalParamBegin{vertex_is_constrained_map} a property map containing the -* constrained-or-not status of each vertex of `tmesh`. A constrained vertex -* cannot be modified at all during smoothing. -* \cgalParamEnd -* \cgalParamBegin{number_of_iterations} the number of iterations for the -* sequence of the smoothing iterations performed. Each iteration is performed -* with the given time step. -* \cgalParamEnd -* \cgalParamBegin{sparse_linear_solver} an instance of the sparse linear solver used for smoothing \cgalParamEnd -* \cgalParamEnd +* \cgalParamNBegin{number_of_iterations} +* \cgalParamDescription{the number of iterations for the sequence of the smoothing iterations performed} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`1`} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `tmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, tmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `TriangleMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd +* +* \cgalParamNBegin{vertex_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each vertex of `tmesh`.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no vertex is constrained} +* \cgalParamExtra{A constrained vertex cannot be modified at all during smoothing.} +* \cgalParamNEnd +* +* \cgalParamNBegin{sparse_linear_solver} +* \cgalParamDescription{an instance of the sparse linear solver used for smoothing} +* \cgalParamType{a class model of `SparseLinearAlgebraWithFactorTraits_d`} +* \cgalParamDefault{if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and +* `CGAL_EIGEN3_ENABLED` is defined, then the following overload of `Eigen_solver_traits` +* is provided as default value: +* `CGAL::Eigen_solver_traits::%EigenType, Eigen::IncompleteLUT > >`} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @warning This function involves linear algebra, that is computed using a non-exact floating-point arithmetic. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index 5f55f794c9e..8f16d4d7bdb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -622,16 +622,21 @@ std::size_t stitch_borders_impl(PolygonMesh& pmesh, /// the same as those of the target and source vertices of `h2` respectively. /// /// \tparam PolygonMesh a model of `MutableFaceGraph` -/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param h a border halfedge of the polygon mesh `pm` /// \param pm the polygon mesh to be stitched -/// \param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +/// \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -/// If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` must be available in `PolygonMesh`. -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pm`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `PolygonMesh`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns the number of pairs of halfedges that were stitched. @@ -820,15 +825,20 @@ std::size_t stitch_boundary_cycle(const typename boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pm)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `PolygonMesh`.} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns the number of pairs of halfedges that were stitched. @@ -916,24 +926,33 @@ std::size_t stitch_borders(PolygonMesh& pmesh, /// the same as those of the target and source vertices of `h2` respectively. /// /// @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -/// @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// @param pmesh the polygon mesh to be modified by stitching -/// @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +/// @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below /// /// \cgalNamedParamsBegin -/// \cgalParamBegin{vertex_point_map} -/// the property map with the points associated to the vertices of `pmesh`. -/// If this parameter is omitted, an internal property map for -/// `CGAL::vertex_point_t` must be available in `PolygonMesh`. -/// \cgalParamEnd -/// \cgalParamBegin{apply_per_connected_component} -/// specifies if the borders should only be stitched inside their own connected component. -/// Default value is `false`. -/// \cgalParamEnd -/// \cgalParamBegin{face_index_map} -/// a property map containing for each face of `pmesh` a unique index between `0` and `num_faces(pmesh)-1` -/// \cgalParamEnd +/// \cgalParamNBegin{vertex_point_map} +/// \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +/// \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +/// as key type and `%Point_3` as value type} +/// \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +/// \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +/// must be available in `PolygonMesh`.} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{apply_per_connected_component} +/// \cgalParamDescription{specifies if the borders should only be stitched only within their own connected component.} +/// \cgalParamType{Boolean} +/// \cgalParamDefault{`false`} +/// \cgalParamNEnd +/// +/// \cgalParamNBegin{face_index_map} +/// \cgalParamDescription{a property map associating to each face of `pmesh` a unique index between `0` and `num_faces(pmesh) - 1`} +/// \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` +/// as key type and `std::size_t` as value type} +/// \cgalParamDefault{an automatically indexed internal map} +/// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// @return the number of pairs of halfedges that were stitched. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h index c27bb94af54..01cf935b924 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h @@ -26,16 +26,21 @@ namespace Polygon_mesh_processing{ * the `value_type` of `vertex_point_map` (see below). Such a functor can be * `CGAL::Aff_transformation_3` for example. * @tparam PolygonMesh a model of `VertexListGraph` - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param transformation the transformation functor to apply to the points of `mesh`. * @param mesh the `PolygonMesh` to transform. - * @param np optional sequence of \ref pmp_namedparameters for `mesh`, among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * - * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `mesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd + * \cgalNamedParamsBegin + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `mesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, mesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `PolygonMesh`.} + * \cgalParamNEnd * \cgalNamedParamsEnd * */ diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h index 8284c79d118..9abbfeadf1c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h @@ -400,18 +400,28 @@ public: * \ingroup PMP_meshing_grp * triangulates a single face of a polygon mesh. This function depends on the package \ref PkgTriangulation2 * @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param f face to be triangulated * @param pmesh the polygon mesh to which the face to be triangulated belongs -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below -* +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd -* \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if the face has been triangulated. @@ -455,20 +465,32 @@ bool triangulate_face(typename boost::graph_traits::face_descriptor model of `Range`. Its iterator type is `InputIterator`. * @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param face_range the range of faces to be triangulated * @param pmesh the polygon mesh to be triangulated -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd -* \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if all the faces have been triangulated. +* * @see triangulate_face() */ template @@ -505,19 +527,31 @@ bool triangulate_faces(FaceRange face_range, PolygonMesh& pmesh) * \ingroup PMP_meshing_grp * triangulates all faces of a polygon mesh. This function depends on the package \ref PkgTriangulation2 * @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` -* @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh the polygon mesh to be triangulated -* @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. -* If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd -* \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd +* \cgalParamNBegin{vertex_point_map} +* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` +* as key type and `%Point_3` as value type} +* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} +* \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` +* must be available in `PolygonMesh`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{geom_traits} +* \cgalParamDescription{an instance of a geometric traits class} +* \cgalParamType{a class model of `Kernel`} +* \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} +* \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} +* \cgalParamNEnd * \cgalNamedParamsEnd * * @return `true` if all the faces have been triangulated. +* * @see triangulate_face() */ template diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h index 350cfec4901..4e57a2f9626 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h @@ -50,21 +50,37 @@ namespace Polygon_mesh_processing { @tparam PolygonMesh a model of `MutableFaceGraph` @tparam OutputIterator a model of `OutputIterator` holding `boost::graph_traits::%face_descriptor` for patch faces. - @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @param pmesh polygon mesh containing the hole @param border_halfedge a border halfedge incident to the hole @param out iterator over patch faces - @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - If this parameter is omitted, an internal property map for - `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - \cgalParamBegin{use_delaunay_triangulation} if `true`, use the Delaunay triangulation facet search space. - If no valid triangulation can be found in this search space, the algorithm falls back to the - non-Delaunay triangulations search space to find a solution \cgalParamEnd - \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `PolygonMesh`.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a class model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd + + \cgalParamNBegin{use_delaunay_triangulation} + \cgalParamDescription{If `true`, use the Delaunay triangulation facet search space.} + \cgalParamType{Boolean} + \cgalParamDefault{`true`} + \cgalParamExtra{If no valid triangulation can be found in this search space, the algorithm + falls back to the non-Delaunay triangulations search space to find a solution.} + \cgalParamNEnd \cgalNamedParamsEnd @return `out` @@ -143,24 +159,45 @@ namespace Polygon_mesh_processing { holding `boost::graph_traits::%face_descriptor` for patch faces. @tparam VertexOutputIterator model of `OutputIterator` holding `boost::graph_traits::%vertex_descriptor` for patch vertices. - @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @param pmesh polygon mesh which has the hole @param border_halfedge a border halfedge incident to the hole @param face_out output iterator over patch faces @param vertex_out output iterator over patch vertices without including the boundary - @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - If this parameter is omitted, an internal property map for - `CGAL::vertex_point_t` should be available in `PolygonMesh`\cgalParamEnd - \cgalParamBegin{density_control_factor} factor to control density of the ouput mesh, where larger values - cause denser refinements, as in `refine()` \cgalParamEnd - \cgalParamBegin{use_delaunay_triangulation} if `true`, use the Delaunay triangulation facet search space. - If no valid triangulation can be found in this search space, the algorithm falls back to the - non-Delaunay triangulations search space to find a solution \cgalParamEnd - \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `PolygonMesh`.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a class model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd + + \cgalParamNBegin{use_delaunay_triangulation} + \cgalParamDescription{If `true`, use the Delaunay triangulation facet search space.} + \cgalParamType{Boolean} + \cgalParamDefault{`true`} + \cgalParamExtra{If no valid triangulation can be found in this search space, the algorithm + falls back to the non-Delaunay triangulations search space to find a solution.} + \cgalParamNEnd + + \cgalParamNBegin{density_control_factor} + \cgalParamDescription{factor to control density of the ouput mesh, + where larger values cause denser refinements, as in `refine()`} + \cgalParamType{double} + \cgalParamDefault{\f$ \sqrt{2}\f$} + \cgalParamNEnd \cgalNamedParamsEnd @return pair of `face_out` and `vertex_out` @@ -213,27 +250,63 @@ namespace Polygon_mesh_processing { holding `boost::graph_traits::%face_descriptor` for patch faces @tparam VertexOutputIterator model of `OutputIterator` holding `boost::graph_traits::%vertex_descriptor` for patch vertices - @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @param pmesh polygon mesh which has the hole @param border_halfedge a border halfedge incident to the hole @param face_out output iterator over patch faces @param vertex_out output iterator over patch vertices without including the boundary - @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - If this parameter is omitted, an internal property map for - `CGAL::vertex_point_t` should be available in `PolygonMesh` - \cgalParamEnd - \cgalParamBegin{use_delaunay_triangulation} if `true`, use the Delaunay triangulation facet search space. - If no valid triangulation can be found in this search space, the algorithm falls back to the - non-Delaunay triangulations search space to find a solution \cgalParamEnd - \cgalParamBegin{density_control_factor} factor to control density of the ouput mesh, where larger values - cause denser refinements, as in `refine()` \cgalParamEnd - \cgalParamBegin{fairing_continuity} tangential continuity of the output surface patch \cgalParamEnd - \cgalParamBegin{sparse_linear_solver} an instance of the sparse linear solver used for fairing \cgalParamEnd - \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + must be available in `PolygonMesh`.} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a class model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd + + \cgalParamNBegin{use_delaunay_triangulation} + \cgalParamDescription{If `true`, use the Delaunay triangulation facet search space.} + \cgalParamType{Boolean} + \cgalParamDefault{`true`} + \cgalParamExtra{If no valid triangulation can be found in this search space, the algorithm + falls back to the non-Delaunay triangulations search space to find a solution.} + \cgalParamNEnd + + \cgalParamNBegin{density_control_factor} + \cgalParamDescription{factor to control density of the ouput mesh, + where larger values cause denser refinements, as in `refine()`} + \cgalParamType{double} + \cgalParamDefault{\f$ \sqrt{2}\f$} + \cgalParamNEnd + + \cgalParamNBegin{fairing_continuity} + \cgalParamDescription{A value controling the tangential continuity of the output surface patch. + The possible values are 0, 1 and 2, refering to the C0, C1 + and C2 continuity.} + \cgalParamType{unsigned int} + \cgalParamDefault{`1`} + \cgalParamExtra{The larger `fairing_continuity` gets, the more fixed vertices are required.} + \cgalParamNEnd + + \cgalParamNBegin{sparse_linear_solver} + \cgalParamDescription{an instance of the sparse linear solver used for fairing} + \cgalParamType{a class model of `SparseLinearAlgebraWithFactorTraits_d`} + \cgalParamDefault{If \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and + `CGAL_EIGEN3_ENABLED` is defined, then the following overload of `Eigen_solver_traits` + is provided as default value:\n + `CGAL::Eigen_solver_traits::%EigenType, Eigen::COLAMDOrdering > >`} + \cgalParamNEnd \cgalNamedParamsEnd @return tuple of @@ -313,19 +386,29 @@ namespace Polygon_mesh_processing { and the corresponding value type `type` must have a constructor `type(int p0, int p1, int p2)` available. The indices correspond to the ones of input points in `points`. - @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" @param points the range of input points @param third_points the range of third points @param out iterator over output patch triangles, described by indices of points in `points` - @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{use_delaunay_triangulation} if `true`, use the Delaunay triangulation facet search space. - If no valid triangulation can be found in this search space, the algorithm falls back to the - non-Delaunay triangulations search space to find a solution \cgalParamEnd - \cgalParamBegin{geom_traits} a geometric traits class instance \cgalParamEnd + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a class model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd + + \cgalParamNBegin{use_delaunay_triangulation} + \cgalParamDescription{If `true`, use the Delaunay triangulation facet search space.} + \cgalParamType{Boolean} + \cgalParamDefault{`true`} + \cgalParamExtra{If no valid triangulation can be found in this search space, the algorithm + falls back to the non-Delaunay triangulations search space to find a solution.} + \cgalParamNEnd \cgalNamedParamsEnd \todo handle islands @@ -388,7 +471,7 @@ namespace Polygon_mesh_processing { /*! \ingroup hole_filling_grp - same as above but the range of third points is omitted. They are not + Same as above but the range of third points is omitted. They are not taken into account in the cost computation that leads the hole filling. */ template ::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{apply_per_connected_component} + * \cgalParamDescription{If `false`, `tm` is assumed to have only one connected component, avoiding the extraction of connected components.} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -244,28 +250,34 @@ public: * adds an instance of a triangulated surface mesh using an external tree of its faces. * \warning The tree is not copied and the lifetime of `tree` must be longer than that of this class. * - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \return the id of `tm` used to refer to that mesh. * * @param tree an AABB-tree of faces of a mesh * @param tm triangulated surface mesh - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing the index of each face of `tm`. It must be initialized - * and the value must be unique per face and in the range `[0, num_faces(tm)[`. - * \cgalParamEnd - * \cgalParamBegin{apply_per_connected_component} - * if `false`, `tm` is assumed to have only one connected component, avoiding - * the extraction of connected components. Default is `true`. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{apply_per_connected_component} + * \cgalParamDescription{If `false`, `tm` is assumed to have only one connected component, avoiding the extraction of connected components} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -487,26 +499,32 @@ public: * intended to be used before calling the `add_mesh()` overload taking an AABB-tree instead of a mesh * as input parameter. * - * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tm input triangulated surface mesh * @param [out] points will contain one point per connected component of `tm` - * @param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} - * the property map with the points associated to the vertices of `tm`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `TriangleMesh` - * \cgalParamEnd - * \cgalParamBegin{face_index_map} - * a property map containing the index of each face of `tm`. It must be initialized - * and the value must be unique per face and in the range `[0, num_faces(tm)[`. - * \cgalParamEnd - * \cgalParamBegin{apply_per_connected_component} - * if `false`, `tm` is assumed to have only one connected component, avoiding - * the extraction of connected components. %Default is `true`. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `tm`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{face_index_map} + * \cgalParamDescription{a property map associating to each face of `tm` a unique index between `0` and `num_faces(tm) - 1`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type and `std::size_t` as value type} + * \cgalParamDefault{an automatically indexed internal map} + * \cgalParamNEnd + * + * \cgalParamNBegin{apply_per_connected_component} + * \cgalParamDescription{If `false`, `tm` is assumed to have only one connected component, avoiding the extraction of connected components} + * \cgalParamType{Boolean} + * \cgalParamDefault{`true`} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index dd1ac38d01a..0a3c01fa52d 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -289,14 +289,24 @@ void test_simplify_polygons(const bool /*verbose*/ = false) points.push_back(Point_3(1,3,0)); // #3 points.push_back(Point_3(0,1,0)); // #4 points.push_back(Point_3(1,1,0)); // #5 - points.push_back(Point_3(0,0,0)); // #6 + points.push_back(Point_3(0,0,0)); // #6 == #0 // ------ CGAL_polygon polygon; - polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); polygon.push_back(0); polygon.push_back(0); polygons.push_back(polygon); std::size_t res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; + assert(res == 1 && polygons.back().size() == 3); + + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 0 && polygons.back().size() == 3); // ------ @@ -305,6 +315,7 @@ void test_simplify_polygons(const bool /*verbose*/ = false) polygons.push_back(polygon); res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 1 && polygons.back().size() == 1); // ------ @@ -313,6 +324,7 @@ void test_simplify_polygons(const bool /*verbose*/ = false) polygons.push_back(polygon); res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 1 && polygons.back().size() == 1); // ------ @@ -321,8 +333,18 @@ void test_simplify_polygons(const bool /*verbose*/ = false) polygons.push_back(polygon); res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 1 && polygons.back().size() == 2); + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(2); polygon.push_back(0); polygon.push_back(4); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; + assert(res == 0 && polygons.back().size() == 4); + // ------ // Now with the same geometric positions, but different combinatorial information polygon.clear(); @@ -330,6 +352,7 @@ void test_simplify_polygons(const bool /*verbose*/ = false) polygons.push_back(polygon); res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 1 && polygons.back().size() == 3); // ------ @@ -338,6 +361,7 @@ void test_simplify_polygons(const bool /*verbose*/ = false) polygons.push_back(polygon); res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 1 && polygons.back().size() == 2); // ------ @@ -346,6 +370,7 @@ void test_simplify_polygons(const bool /*verbose*/ = false) polygons.push_back(polygon); res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + std::cout << "res: " << res << " / size: " << polygons.back().size() << std::endl; assert(res == 1 && polygons.back().size() == 3); } diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp index a5d9cac1b74..53e79a6fca0 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp @@ -95,8 +95,11 @@ int main() else { const std::string& output_file = "data/building_result-0.05.off"; std::ofstream output_stream(output_file.c_str()); - if (output_stream && CGAL::write_off(output_stream, model)) + if (output_stream && CGAL::write_off(output_stream, model)) { + // flush the buffer + output_stream << std::flush; std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; + } else { std::cerr << " Failed saving file." << std::endl; return EXIT_FAILURE; @@ -113,8 +116,11 @@ int main() else { const std::string& output_file = "data/building_result-0.5.off"; std::ofstream output_stream(output_file.c_str()); - if (output_stream && CGAL::write_off(output_stream, model)) + if (output_stream && CGAL::write_off(output_stream, model)) { + // flush the buffer + output_stream << std::flush; std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; + } else { std::cerr << " Failed saving file." << std::endl; return EXIT_FAILURE; @@ -131,8 +137,11 @@ int main() else { const std::string& output_file = "data/building_result-0.7.off"; std::ofstream output_stream(output_file.c_str()); - if (output_stream && CGAL::write_off(output_stream, model)) + if (output_stream && CGAL::write_off(output_stream, model)) { + // flush the buffer + output_stream << std::flush; std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; + } else { std::cerr << " Failed saving file." << std::endl; return EXIT_FAILURE; diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp index faf3425693d..bd8dd6b8fca 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp @@ -94,8 +94,11 @@ int main() // Saves the mesh model const std::string& output_file("data/ball_result.off"); std::ofstream output_stream(output_file.c_str()); - if (output_stream && CGAL::write_off(output_stream, model)) + if (output_stream && CGAL::write_off(output_stream, model)) { + // flush the buffer + output_stream << std::flush; std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; + } else { std::cerr << " Failed saving file." << std::endl; return EXIT_FAILURE; diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp index 8a179c15410..8602fcd4919 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp @@ -178,8 +178,11 @@ int main() t.reset(); const std::string& output_file("data/cube_result.off"); std::ofstream output_stream(output_file.c_str()); - if (output_stream && CGAL::write_off(output_stream, model)) + if (output_stream && CGAL::write_off(output_stream, model)) { + // flush the buffer + output_stream << std::flush; std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; + } else { std::cerr << " Failed saving file." << std::endl; return EXIT_FAILURE; diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp index 3ea369b445b..4aa2bcf4cc1 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp @@ -129,8 +129,11 @@ int main() const std::string& output_file("data/cube_result.off"); std::ofstream output_stream(output_file.c_str()); - if (output_stream && CGAL::write_off(output_stream, model)) + if (output_stream && CGAL::write_off(output_stream, model)) { + // flush the buffer + output_stream << std::flush; std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; + } else { std::cerr << " Failed saving file." << std::endl; return EXIT_FAILURE; @@ -143,8 +146,11 @@ int main() algo.output_candidate_faces(candidate_faces); const std::string& candidate_faces_file("data/cube_candidate_faces.off"); std::ofstream candidate_stream(candidate_faces_file.c_str()); - if (candidate_stream && CGAL::write_off(candidate_stream, candidate_faces)) + if (candidate_stream && CGAL::write_off(candidate_stream, candidate_faces)) { + // flush the buffer + output_stream << std::flush; std::cout << "Candidate faces saved to " << candidate_faces_file << "." << std::endl; + } return EXIT_SUCCESS; } diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 27d4717f955..6f9073421dd 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -409,32 +409,18 @@ MainWindow::MainWindow(const QStringList &keywords, bool verbose, QWidget* paren void addActionToMenu(QAction* action, QMenu* menu) { - bool added = false; - QString atxt = action->text().remove("&"); - if(atxt.isEmpty()) - return; - for(QAction* it : menu->actions()) - { - QString btxt = it->text().remove("&"); - int i = 0; - if(btxt.isEmpty()) - { - continue; - } - while(i < atxt.size() - && i < btxt.size() - && atxt[i] == btxt[i]) - ++i; - bool res = (i == atxt.size() || i == btxt.size() || atxt[i] < btxt[i]); - if (res) - { - menu->insertAction(it, action); - added = true; - break; - } - } - if(!added) + auto actions = menu->actions(); + auto it = std::lower_bound(actions.begin(), actions.end(), + action->text().remove("&"), + [](QAction* a, QString text) { + return a->text().remove("&").compare(text) < 0; + }); + if(it == actions.end()) { menu->addAction(action); + } + else { + menu->insertAction(*it, action); + } } //Recursive function that do a pass over a menu and its sub-menus(etc.) and hide them when they are empty diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt index 2e819fa7124..03ada7360f3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt @@ -22,9 +22,7 @@ if (VTK_FOUND) if(TARGET VTK::IOImage) set(VTK_LIBRARIES VTK::IOImage) endif() - if(VTK_LIBRARIES) - add_definitions(-DCGAL_USE_VTK) - else() + if(NOT VTK_LIBRARIES) message(STATUS "NOTICE : the DICOM files (.dcm) need VTK libraries to be open and will not be able to.") endif() else() @@ -39,6 +37,9 @@ if(Boost_FILESYSTEM_FOUND) qt5_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui) polyhedron_demo_plugin(io_image_plugin Io_image_plugin Volume_plane_intersection.cpp Raw_image_dialog.cpp ${imgUI_FILES} ${VOLUME_MOC_OUTFILES} KEYWORDS IO Mesh_3) target_link_libraries(io_image_plugin PUBLIC scene_image_item ${VTK_LIBRARIES} CGAL::CGAL_ImageIO) + if(VTK_LIBRARIES) + target_compile_definitions(io_image_plugin PRIVATE CGAL_USE_VTK) + endif() if(TARGET Boost::filesystem) target_link_libraries(io_image_plugin PUBLIC Boost::filesystem Boost::system) else() @@ -49,7 +50,7 @@ else() endif() polyhedron_demo_plugin(mesh_3_optimization_plugin Optimization_plugin Optimization_plugin_cgal_code.cpp Optimizer_thread.cpp - ${meshingUI_FILES} KEYWORDS IO Mesh_3) + ${meshingUI_FILES} KEYWORDS Mesh_3) target_link_libraries(mesh_3_optimization_plugin PUBLIC scene_c3t3_item scene_surface_mesh_item scene_image_item scene_implicit_function_item ) # Use Eigen diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp index 5761dc4dab9..4eee5f1aa9f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp @@ -87,6 +87,14 @@ Meshing_thread* cgal_code_mesh_3(QList pMeshes, std::cerr << " done (" << timer.time() * 1000 << " ms)" << std::endl; Scene_c3t3_item* p_new_item = new Scene_c3t3_item(surface_only); + if(polylines.empty()) { + if(protect_features) { + p_new_item->set_sharp_edges_angle(sharp_edges_angle); + } + else if (protect_borders) { + p_new_item->set_detect_borders(true); + } + } QString tooltip = QString("
From \"") + filename + QString("\" with the following mesh parameters" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp index 85cb6ccd1a1..ecddec2f9e4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp @@ -524,10 +524,9 @@ treat_result(Scene_c3t3_item& source_item, static_cast(bbox.ymin() + bbox.ymax())/2.f, static_cast(bbox.zmin() + bbox.zmax())/2.f); - result_item.setColor(QColor(59,74,226)); + result_item.setColor(source_item.color()); result_item.setRenderingMode(source_item.renderingMode()); result_item.set_data_item(source_item.data_item()); - source_item.setVisible(false); const Scene_interface::Item_id index = scene->mainSelectionIndex(); @@ -539,6 +538,7 @@ treat_result(Scene_c3t3_item& source_item, else { result_item.update_histogram(); + result_item.invalidateOpenGLBuffers(); const Scene_interface::Item_id index = scene->mainSelectionIndex(); scene->itemChanged(index); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp index 081ca9df328..627afb7577b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp @@ -141,6 +141,10 @@ Optimizer_thread* cgal_code_optimization(Scene_c3t3_item& c3t3_item, return NULL; } Polyhedral_mesh_domain* sm_domain = new Polyhedral_mesh_domain(*smesh); + if(c3t3_item.get_sharp_edges_angle() != -1 ) + sm_domain->detect_features(c3t3_item.get_sharp_edges_angle()); + else if(c3t3_item.get_detect_borders()) + sm_domain->detect_borders(); // Create thread typedef Optimization_function Opt_function; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_dialog.ui index 351de08c508..0dbb51005b3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_dialog.ui @@ -43,17 +43,7 @@ Tetrahedral remeshing - - - - - Protect boundaries - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - + @@ -70,13 +60,26 @@ - + Protect boundaries false + + + + Number of Main iterations + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + nbIterations_spinbox + + + @@ -93,16 +96,19 @@ - - - - Number of Main iterations + + + + + 110 + 0 + - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 1000.000000000000000 - - nbIterations_spinbox + + 0.100000000000000 @@ -119,19 +125,23 @@ - - - - - 110 - 0 - + + + + - - 1000.000000000000000 + + Smooth constrained edges - - 0.100000000000000 + + + + + + Options : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_plugin.cpp index bbf5dc24de6..05875d4e6ca 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Tetrahedral_remeshing/Tetrahedral_remeshing_plugin.cpp @@ -3,7 +3,6 @@ //#define CGAL_TETRAHEDRAL_REMESHING_DEBUG //#define CGAL_TETRAHEDRAL_REMESHING_VERBOSE_PROGRESS //#define CGAL_TETRAHEDRAL_REMESHING_PROFILE -//#define CGAL_TETRAHEDRAL_REMESHING_SMOOTH_SHARP_EDGES #include @@ -99,6 +98,7 @@ public Q_SLOTS: double target_length = ui.edgeLength_dspinbox->value(); unsigned int nb_iter = ui.nbIterations_spinbox->value(); bool protect = ui.protect_checkbox->isChecked(); + bool smooth_edges = ui.smoothEdges_checkBox->isChecked(); // wait cursor QApplication::setOverrideCursor(Qt::WaitCursor); @@ -110,7 +110,8 @@ public Q_SLOTS: c3t3_item->c3t3(), target_length, CGAL::parameters::remesh_boundaries(!protect) - .number_of_iterations(nb_iter)); + .number_of_iterations(nb_iter) + .smooth_constrained_edges(smooth_edges)); std::cout << "Remeshing done (" << time.elapsed() << " ms)" << std::endl; @@ -204,6 +205,10 @@ private: ui.nbIterations_spinbox->setValue(1); ui.protect_checkbox->setChecked(false); + ui.smoothEdges_checkBox->setChecked(false); + + connect(ui.protect_checkbox, SIGNAL(toggled(bool)), + ui.smoothEdges_checkBox, SLOT(setDisabled(bool))); return ui; } diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp index 9e8beb2e5a7..f350e500775 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp @@ -347,6 +347,8 @@ struct Scene_c3t3_item_priv { cnc_are_shown = false; is_aabb_tree_built = false; alphaSlider = NULL; + sharp_edges_angle = -1; + detect_borders = false; } void computeIntersection(const Primitive& facet); void fill_aabb_tree() { @@ -501,6 +503,9 @@ struct Scene_c3t3_item_priv { bool is_valid; bool is_surface; bool last_intersection; + //only for optimizers + double sharp_edges_angle; + bool detect_borders; void push_normal(std::vector& normals, const EPICK::Vector_3& n) const { @@ -2106,5 +2111,12 @@ Scene_c3t3_item* Scene_c3t3_item::clone() const return new Scene_c3t3_item(d->c3t3, d->is_surface); } +void Scene_c3t3_item::set_sharp_edges_angle(double a) { d->sharp_edges_angle = a; } +double Scene_c3t3_item::get_sharp_edges_angle() { return d->sharp_edges_angle; } + +void Scene_c3t3_item::set_detect_borders(bool b) { d->detect_borders = b;} +bool Scene_c3t3_item::get_detect_borders() { return d->detect_borders; } + + #include "Scene_c3t3_item.moc" diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h index 90b02e87c7b..d71d906fce3 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h @@ -155,6 +155,12 @@ public: QColor get_histogram_color(const double v) const; + void set_sharp_edges_angle(double d); + double get_sharp_edges_angle(); + + void set_detect_borders(bool b); + bool get_detect_borders(); + void itemAboutToBeDestroyed(Scene_item *) Q_DECL_OVERRIDE; void initializeBuffers(Viewer_interface *) const Q_DECL_OVERRIDE; diff --git a/Scripts/developer_scripts/autotest_cgal b/Scripts/developer_scripts/autotest_cgal index a1d82dcc6da..70830eb86c9 100755 --- a/Scripts/developer_scripts/autotest_cgal +++ b/Scripts/developer_scripts/autotest_cgal @@ -490,13 +490,7 @@ build_cgal_on_host() CGAL_BINARY_DIR="${CGAL_BINARY_DIR_BASE}/${PLATFORM}" - if [ -d "${REFERENCE_PLATFORMS_DIR}/${PLATFORM}" ] ; then - CGAL_REFERENCE_CACHE_DIR="${REFERENCE_PLATFORMS_DIR}/${PLATFORM}" - else - CGAL_REFERENCE_CACHE_DIR="" - fi - - log "${ACTUAL_LOGFILE}" "Building cgal libs on host ${HOST} and platform ${PLATFORM}\nUnder ${CGAL_BINARY_DIR}\nUsing reference cache directory ${CGAL_REFERENCE_CACHE_DIR}" + log "${ACTUAL_LOGFILE}" "Building cgal libs on host ${HOST} and platform ${PLATFORM}\nUnder ${CGAL_BINARY_DIR}\n" if [ -f "${CGAL_BINARY_DIR}/localbuildscript" ] ; then log "${ACTUAL_LOGFILE}" "WARNING! Already built on platform ${PLATFORM}." @@ -514,19 +508,12 @@ if [ -z "\$CMAKE_GENERATOR" ]; then CMAKE_GENERATOR='${CMAKE_GENERATOR}'; fi MAKE_CMD='${MAKE_CMD}'; -if [ -n "${IS_CYGWIN}" ]; then - CGAL_REFERENCE_CACHE_DIR=\$( cygpath -w '${CGAL_REFERENCE_CACHE_DIR}' ); -else - CGAL_REFERENCE_CACHE_DIR='${CGAL_REFERENCE_CACHE_DIR}';\ -fi export CMAKE_GENERATOR; export MAKE_CMD; export CGAL_BINARY_DIR; -export CGAL_REFERENCE_CACHE_DIR; cd '${CGAL_BINARY_DIR}'; cmake \${INIT_FILE:+"-C\${INIT_FILE}"} '${CMAKE_GENERATOR}' -DRUNNING_CGAL_AUTO_TEST=TRUE \\ - -DCGAL_REFERENCE_CACHE_DIR="\$CGAL_REFERENCE_CACHE_DIR" \\ VERBOSE=1 \\ ../../..; ${MAKE_CMD} VERBOSE=ON -k -fMakefile ; diff --git a/Scripts/developer_scripts/cgal_create_release_with_cmake.cmake b/Scripts/developer_scripts/cgal_create_release_with_cmake.cmake index 16a584ad6eb..2bcf27c3768 100644 --- a/Scripts/developer_scripts/cgal_create_release_with_cmake.cmake +++ b/Scripts/developer_scripts/cgal_create_release_with_cmake.cmake @@ -3,7 +3,7 @@ # DESTINATION the path where the release is created, default is /tmp # PUBLIC=[ON/OFF] indicates if a public release should be built, default is OFF # VERBOSE=[ON/OFF] makes the script more verbose, default is OFF -# CGAL_VERSION=release id used to update version.h, VERSION and the release directory. Can be 4.12-Ic-33, 4.12-I-32, 4.12, ... +# CGAL_VERSION=release id used to update version.h, VERSION and the release directory. Can be 4.12-Ic-33, 4.12-I-32, 4.12, ... # Must be followed by -beta if the release is a beta. # CGAL_VERSION_NR=release string used to update version.h. Must be something like 1041200033 , or 104120090 # TESTSUITE=indicate if the release is meant to be used by the testsuite, default if OFF @@ -182,6 +182,8 @@ string(REPLACE "CGAL_VERSION ${CGAL_VERSION_INPUT}" "CGAL_VERSION ${CGAL_VERSION # update CGAL_VERSION_NR if (CGAL_VERSION_NR) string(REGEX REPLACE "CGAL_VERSION_NR 10[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" "CGAL_VERSION_NR ${CGAL_VERSION_NR}" file_content "${file_content}") + math(EXPR CGAL_BUILD_VERSION "${CGAL_VERSION_NR} % 10000") + file(WRITE ${release_dir}/lib/cmake/CGAL/CGALConfigBuildVersion.cmake "set(CGAL_BUILD_VERSION ${CGAL_BUILD_VERSION})") endif() file(WRITE ${release_dir}/include/CGAL/version.h "${file_content}") diff --git a/Scripts/developer_scripts/create_new_release b/Scripts/developer_scripts/create_new_release index 4a017ea4281..3add47b0ca2 100755 --- a/Scripts/developer_scripts/create_new_release +++ b/Scripts/developer_scripts/create_new_release @@ -22,7 +22,7 @@ SOURCES_DIR="$PWD" # Directory containing the sources, default is "$PWD" VERBOSE="" # Verbose mode (displays log to standard err) BETA="" #If set, will change the release number and version number accordingly. DESTINATION="$PWD" -IS_MASTER="y" +INTEGRATION="" SOURCES_DIR_HAS_BEEN_SET= @@ -45,10 +45,10 @@ usage() { printerr ' --no-testsuite : when used with --do-it, the tag is made, files are published,' printerr ' but the LATEST file is not updated.' printerr ' --verbose : print log to standard output, instead of the log file' - printerr ' --beta : followed by a number. When used with --public, will modify + printerr ' --beta : followed by a number. When used with --public, will modify the release number and the release version name to include beta' printerr ' --dest : followed by the path to where the release should be created. Default is /tmp.' - printerr ' --is_master : replace the Ic in the name by I.' + printerr ' --integration : replace the I in the name by Ic.' printerr ' : the directory containing the packages [default is trunk]' } @@ -99,26 +99,26 @@ while [ $1 ]; do continue ;; --dest) - shift + shift DESTINATION=$1 shift;continue ;; - --is_master) - IS_MASTER="y" + --integration) + INTEGRATION="y" shift;continue ;; -*) printerr "Unrecognized option : $1" exit ;; - *) + *) if [ -z "$SOURCES_DIR_HAS_BEEN_SET" ]; then SOURCES_DIR="$1" SOURCES_DIR_HAS_BEEN_SET=y shift; continue - elif [ -n "$IS_MASTER" ]; then + elif [ -z "$INTEGRATION" ]; then # Compatibility with the old syntax with candidates - IS_MASTER="" + INTEGRATION="y" shift; continue else printerr "Unrecognized option : $1" @@ -159,7 +159,7 @@ if [ -z "$VERBOSE" ]; then exec 3>&1 >> ${LOGFILE} fi -# Verbose: displays all executed commands +# Verbose: displays all executed commands #PS4='[${LINENO}]+ ' #set -x @@ -189,7 +189,7 @@ else fi # Do not show the bugfix number if it is 0. -if [ x"$BUGFIX_NUMBER" != "x0" ]; then +if [ x"$BUGFIX_NUMBER" != "x0" ]; then BUGFIX_STRING=".$BUGFIX_NUMBER" else BUGFIX_STRING="" @@ -206,7 +206,7 @@ if [ -z "$INTERNAL_NUMBER" ]; then INTERNAL_NUMBER=1 fi -if [ -z "${IS_MASTER}" ]; then +if [ -n "${INTEGRATION}" ]; then INTERNAL_STRING="-Ic-${INTERNAL_NUMBER}" else INTERNAL_STRING="-I-${INTERNAL_NUMBER}" diff --git a/Scripts/developer_scripts/test_merge_of_branch b/Scripts/developer_scripts/test_merge_of_branch index c24420a65d1..1d04726ef5b 100755 --- a/Scripts/developer_scripts/test_merge_of_branch +++ b/Scripts/developer_scripts/test_merge_of_branch @@ -155,7 +155,7 @@ fi #check no file contains non-utf8 characters echo '.. Checking if non utf-8 characters are used...' -txt_not_utf8=$(git ls-files -z --stage | awk -F"\t" 'BEGIN { RS="\0" }; { printf "%s\0", $2; }' | xargs -0 file -N | grep "text" | egrep -v "UTF-8|ASCII|XML|EPS|FIG|assembler source|Perl script|from flex") +txt_not_utf8=$(git ls-files -z --stage | awk -F"\t" 'BEGIN { RS="\0" }; { printf "%s\0", $2; }' | xargs -0 file -N | grep "text" | egrep -v "UTF-8|ASCII|CSV|XML|EPS|FIG|assembler source|Perl script|from flex") if [ -n "${txt_not_utf8}" ]; then echo "The following files have non utf-8 characters:" echo ${txt_not_utf8} diff --git a/Stream_support/include/CGAL/IO/write_vtk.h b/Stream_support/include/CGAL/IO/write_vtk.h index df6be93d2f7..644a505157f 100644 --- a/Stream_support/include/CGAL/IO/write_vtk.h +++ b/Stream_support/include/CGAL/IO/write_vtk.h @@ -13,8 +13,6 @@ #ifndef CGAL_WRITE_VTK_IO_H #define CGAL_WRITE_VTK_IO_H -#include - #include #include template diff --git a/Subdivision_method_3/doc/Subdivision_method_3/Doxyfile.in b/Subdivision_method_3/doc/Subdivision_method_3/Doxyfile.in index 1a9be90d284..22ee8782873 100644 --- a/Subdivision_method_3/doc/Subdivision_method_3/Doxyfile.in +++ b/Subdivision_method_3/doc/Subdivision_method_3/Doxyfile.in @@ -7,19 +7,7 @@ EXTRACT_ALL = false HIDE_UNDOC_CLASSES = true WARN_IF_UNDOCUMENTED = false -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref SM_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES EXPAND_AS_DEFINED = CGAL_Subdiv_NP_TEMPLATE_PARAMETERS \ - CGAL_Subdiv_NP_CLASS + CGAL_Subdiv_NP_CLASS diff --git a/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt b/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt deleted file mode 100644 index 078b3d202ba..00000000000 --- a/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt +++ /dev/null @@ -1,39 +0,0 @@ -/*! -\defgroup sm_namedparameters Named Parameters for Subdivision Methods -\ingroup PkgSurfaceSubdivisionMethod3Ref - -In this package, all functions optional parameters are implemented as BGL optional -named parameters (see \ref BGLNamedParameters for more information on how to use them). -Since the parameters of the various functions defined in this package are redundant, -their long descriptions are centralized below. -The sequence of named parameters should start with `CGAL::parameters::`. -`CGAL::parameters::all_default()` can be used to indicate -that default values of optional named parameters must be used. - -In the following, we assume that the type `PolygonMesh` is passed as template -parameters of the functions, and is a model of the concept `MutableFaceGraph`. - -The following named parameter, offered by the package \ref PkgBGL -(see \ref bgl_namedparameters), is used in this package: - -\cgalNPTableBegin -\cgalNPBegin{vertex_point_map} \anchor SM_vertex_point_map -is the property map with the points associated to the vertices of the polygon mesh `pmesh`.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`GeomTraits::Point_3` as value type. \n -Default: \code boost::get(CGAL::vertex_point, pmesh) \endcode -\cgalNPEnd -\cgalNPTableEnd - -In addition to this named parameter, this package offers the following named parameter: - -\cgalNPTableBegin -\cgalNPBegin{number_of_iterations} \anchor SM_number_of_iterations -is the number of subdivision steps.\n -Type: \c unsigned \c int \n -Default: `1` -\cgalNPEnd -\cgalNPTableEnd - -*/ diff --git a/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt b/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt index 51c881b066c..20a6e93a23c 100644 --- a/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt +++ b/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt @@ -30,8 +30,7 @@ Optional parameters of the functions of this package are implemented as \ref BGLNamedParameters. -The page \ref sm_namedparameters describes their usage -and provides a list of the parameters that are used in this package. +The page \ref bgl_namedparameters describes their usage. \cgalCRPSection{Concepts} - `SubdivisionMask_3` diff --git a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_hosts_3.h b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_hosts_3.h index 468f2cb7d72..9c3e5a269bb 100644 --- a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_hosts_3.h +++ b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_hosts_3.h @@ -58,18 +58,27 @@ void PQQ(PolygonMesh& pmesh, Mask mask, int step = 1) { * * @tparam PolygonMesh a model of `MutableFaceGraph` * @tparam Mask a model of `PQQMask_3` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh * @param mask a geometry policy mask - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd **/ template @@ -105,18 +114,27 @@ void PTQ(PolygonMesh& pmesh, Mask mask, int step = 1) { * * @tparam PolygonMesh a model of `MutableFaceGraph` * @tparam Mask a model of `PTQMask_3` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh * @param mask a geometry policy mask - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd **/ template @@ -153,18 +171,27 @@ void DQQ(PolygonMesh& pmesh, Mask mask, int step = 1) { * * @tparam PolygonMesh a model of `MutableFaceGraph` * @tparam Mask a model of `DQQMask_3` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh * @param mask a geometry policy mask - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \pre `pmesh` must be a triangle mesh. @@ -205,18 +232,27 @@ void Sqrt3(PolygonMesh& pmesh, Mask mask, int step = 1) { * * @tparam PolygonMesh a model of `MutableFaceGraph` * @tparam Mask a model of `Sqrt3Mask_3` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh * @param mask a geometry policy mask - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \pre `pmesh` must be a triangle mesh. diff --git a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h index 3fa1486c3be..831599410d1 100644 --- a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h +++ b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h @@ -102,17 +102,26 @@ void CatmullClark_subdivision(PolygonMesh& pmesh, int step) { * This function overwrites the control mesh `pmesh` with the subdivided mesh. * * @tparam PolygonMesh a model of `MutableFaceGraph` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \pre `pmesh` must be a triangle mesh. @@ -158,17 +167,26 @@ void Loop_subdivision(PolygonMesh& pmesh, int step) { * This function overwrites the control mesh `pmesh` with the subdivided mesh. * @tparam PolygonMesh a model of `MutableFaceGraph` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd **/ template @@ -212,17 +230,26 @@ void DooSabin_subdivision(PolygonMesh& pmesh, int step) { * This function overwrites the control mesh `pmesh` with the subdivided mesh. * @tparam PolygonMesh a model of `MutableFaceGraph` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd **/ template @@ -269,17 +296,26 @@ void Sqrt3_subdivision(PolygonMesh& pmesh, int step) { * during a single call of this function. * * @tparam PolygonMesh a model of `MutableFaceGraph` - * @tparam NamedParameters a sequence of \ref sm_namedparameters "Named Parameters" + * @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param pmesh a polygon mesh - * @param np optional sequence of \ref sm_namedparameters "Named Parameters" among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin - * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. - * If this parameter is omitted, an internal property map for - * `CGAL::vertex_point_t` must be available in `PolygonMesh`\cgalParamEnd - * \cgalParamBegin{number_of_iterations} the number of subdivision steps, by default 1. - * \cgalParamEnd + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `pmesh`} + * \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * should be available for the vertices of `pmesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of subdivision steps} + * \cgalParamType{unsigned int} + * \cgalParamDefault{`1`} + * \cgalParamNEnd * \cgalNamedParamsEnd * * \pre `pmesh` must be a triangle mesh. diff --git a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Doxyfile.in b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Doxyfile.in index 6fe3156e808..522fa384134 100644 --- a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Doxyfile.in +++ b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Doxyfile.in @@ -7,16 +7,4 @@ EXTRACT_ALL = false HIDE_UNDOC_MEMBERS = true HIDE_UNDOC_CLASSES = true -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin{1}=
\1
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref VSA_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - EXCLUDE = ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/internal diff --git a/Surface_mesh_approximation/doc/Surface_mesh_approximation/NamedParameters.txt b/Surface_mesh_approximation/doc/Surface_mesh_approximation/NamedParameters.txt deleted file mode 100644 index 568b7075ec5..00000000000 --- a/Surface_mesh_approximation/doc/Surface_mesh_approximation/NamedParameters.txt +++ /dev/null @@ -1,173 +0,0 @@ -/*! -\defgroup vsa_namedparameters Named Parameters -\ingroup PkgTSMARef - -\cgalHeading{How to use BGL Optional Named Parameters} - -The notion of named parameters was introduced in the BGL. -Details can be found from: https://www.boost.org/libs/graph/doc/bgl_named_params.html. -Named parameters enable the user to specify only those parameters which are really needed, by name, making the parameter ordering not required. -See also \ref bgl_namedparameters. - -The sequence of named parameters should start with `CGAL::parameters::`. -The function `#all_default()` can be used to indicate -that default values of optional named parameters are used. - - -\cgalHeading{Example} - -See below a sample call of a function that uses the optional BGL named parameters. - -\code -// tm: input triangle mesh to be approximated -// method: seeding initialization method -// number_of_proxies: number of proxies used to approximate the input mesh -// number_of_iterations: number of relaxation iterations after initialization -// anchors: output anchor points -// triangles: output triplets of indexed triangles - -CGAL::Surface_mesh_approximation::approximate_triangle_mesh(tm, - CGAL::parameters::seeding_method(method). - max_number_of_proxies(number_of_proxies). - number_of_iterations(number_of_iterations). - anchors(std::back_inserter(anchors)). - triangles(std::back_inserter(triangles))); -\endcode - -\cgalHeading{List of Available Named Parameters} - -In this package, all functions optional parameters are implemented as BGL optional named parameters and listed below. - -In the following, we assume that the following types are provided as template parameters of surface mesh approximation functions and classes. Note that the type is more specific for some of these functions. - -
    -
  • `TriangleMesh` implements a `FaceListGraph` -
  • `GeomTraits` a geometric traits class in which constructions are performed and predicates evaluated. Throughout this package, a \cgal `Kernel` fulfills the requirements. -
- -The named parameters available in this package are categorized into 3 groups below. - -\cgalHeading{1. Parameters for the Approximation Step} -\cgalNPTableBegin - -\cgalNPBegin{geom_traits} \anchor VSA_geom_traits - the geometric traits instance in which the mesh approximation operation should be performed.\n -\b Type: a Geometric traits class.\n -\b Default type is -\code -typename CGAL::Kernel_traits< - typename boost::property_traits< - typename boost::property_map::type>::value_type>::Kernel -\endcode -\cgalNPEnd - -\cgalNPBegin{vertex_point_map} \anchor VSA_vertex_point_map - is the property map with the points associated to the vertices of the polygon mesh `pmesh`.\n -\b Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`GeomTraits::Point_3` as value type. \n -\b Default value is \code boost::get(CGAL::vertex_point, pmesh)\endcode -\cgalNPEnd - -\cgalNPBegin{verbose_level} \anchor VSA_verbose_level -set the verbose level of the function.\n -\b Type : \c CGAL::Surface_mesh_approximation::Verbose_level \n -\b Default value is `CGAL::Surface_mesh_approximation::SILENT` -\cgalNPEnd - -\cgalNPBegin{seeding_method} \anchor VSA_seeding_method -the selection of seeding method.\n -\b Type : \c CGAL::Surface_mesh_approximation::Seeding_method \n -\b Default value is `CGAL::Surface_mesh_approximation::HIERARCHICAL` -\cgalNPEnd - -\cgalNPBegin{max_number_of_proxies} \anchor VSA_max_number_of_proxies -the maximum number of proxies used to approximate the input mesh.\n -\b Type : `std::size_t` \n -\b Default value is `num_faces(tm) / 3`, used when `min_error_drop` is also not provided -\cgalNPEnd - -\cgalNPBegin{min_error_drop} \anchor VSA_min_error_drop -the minimum total error drop to approximate the input mesh.\n -\b Type : `GeomTraits::FT` \n -\b Default value is `0.1`, used when `max_number_of_proxies` is also not provided. -\cgalNPEnd - -\cgalNPBegin{number_of_relaxations} \anchor VSA_number_of_relaxations -the number of relaxation iterations interleaved within seeding.\n -\b Type : `std::size_t` \n -\b Default value is `5` -\cgalNPEnd - -\cgalNPBegin{number_of_iterations} \anchor VSA_number_of_iterations -the number of partitioning and fitting iterations after seeding.\n -\b Type : `std::size_t` \n -\b Default value is `std::min(std::max(number_of_faces / max_number_of_proxies, 20), 60)` -\cgalNPEnd - -\cgalNPTableEnd - -\cgalHeading{2. Parameters for the Meshing Step} -\cgalNPTableBegin - -\cgalNPBegin{subdivision_ratio} \anchor VSA_subdivision_ratio -the chord subdivision ratio threshold used in the meshing step.\n -\b Type : `GeomTraits::FT` \n -\b Default value is `5.0` -\cgalNPEnd - -\cgalNPBegin{relative_to_chord} \anchor VSA_relative_to_chord -set the chord subdivision ratio threshold relative to the chord length.\n -\b Type : `bool` \n -\b Default value is `false` -\cgalNPEnd - -\cgalNPBegin{with_dihedral_angle} \anchor VSA_with_dihedral_angle -set the chord subdivision with dihedral angle weighting.\n -\b Type : `bool` \n -\b Default value is `false` -\cgalNPEnd - -\cgalNPBegin{optimize_anchor_location} \anchor VSA_optimize_anchor_location set if optimize the anchor position in the meshing step.\n -\b Type : `bool` \n -\b Default value is `true` -\cgalNPEnd - -\cgalNPBegin{pca_plane} \anchor VSA_pca_plane -set the plane approximated with the PCA algorithm in the meshing step.\n -\b Type : `bool` \n -\b Default value is `false` -\cgalNPEnd - -\cgalNPTableEnd - -\cgalHeading{3. Parameters for Retrieving the Results} -\cgalNPTableBegin - -\cgalNPBegin{face_proxy_map} \anchor VSA_face_proxy_map -the property map outputs the proxy index of each face of the input polygon mesh.\n -\b Type: a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` as key type and the value type `std::size_t`\n -\b Default : if this parameter is omitted, no output operation is performed -\cgalNPEnd - -\cgalNPBegin{proxies} \anchor VSA_proxies -an `OutputIterator` to put proxies in.\n -\b Type : a class model of `OutputIterator` with `CGAL::Surface_mesh_approximation::L21_metric_vector_proxy_no_area_weighting::Proxy` value type.\n -\b Default : if this parameter is omitted, no output operation is performed -\cgalNPEnd - -\cgalNPBegin{anchors} \anchor VSA_anchors -an `OutputIterator` to put anchor points in.\n -\b Type : a class model of `OutputIterator` with `GeomTraits::%Point_3` value type.\n -\b Default : if this parameter is omitted, no output operation is performed -\cgalNPEnd - -\cgalNPBegin{triangles} \anchor VSA_triangles -an `OutputIterator` to put indexed triangles in.\n -\b Type : a class model of `OutputIterator` with `std::array` value type.\n -\b Default : if this parameter is omitted, no output operation is performed -\cgalNPEnd - -\cgalNPTableEnd - -*/ diff --git a/Surface_mesh_approximation/doc/Surface_mesh_approximation/PackageDescription.txt b/Surface_mesh_approximation/doc/Surface_mesh_approximation/PackageDescription.txt index a3e16c1afd5..99e6602b09a 100644 --- a/Surface_mesh_approximation/doc/Surface_mesh_approximation/PackageDescription.txt +++ b/Surface_mesh_approximation/doc/Surface_mesh_approximation/PackageDescription.txt @@ -29,8 +29,7 @@ The API is flexible and can be extended to user-defined proxies and error metric \cgalCRPSection{Parameters} Optional parameters of the functions of this package are implemented as BGL named parameters. -The page \ref vsa_namedparameters describes their usage -and provides the list of parameters used in this package. +The page \ref bgl_namedparameters describes their usage. \cgalCRPSection{Concepts} - `ErrorMetricProxy` diff --git a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt index 7b2523d22b9..357994e42c8 100644 --- a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt +++ b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt @@ -164,7 +164,7 @@ As there is no guarantee that the output mesh is 2-manifold and oriented, the ma This package can be used with any class model of the concept `FaceListGraph` described in \ref PkgBGL "CGAL and the Boost Graph Library". -Free function with \ref vsa_namedparameters options. +Free function with \ref bgl_namedparameters options. - `CGAL::Surface_mesh_approximation::approximate_triangle_mesh()`: given a triangle mesh, approximate the geometry with default \f$ \mathcal{L}^{2,1} \f$ metric. Class interface: @@ -184,7 +184,7 @@ The following example calls the free function `CGAL::Surface_mesh_approximation: \cgalExample{Surface_mesh_approximation/vsa_approximation_example.cpp} -The function parameters are provided through \ref vsa_namedparameters. Setting the non-default parameter values requires calling the functions with the required parameters, connected by a dot and in an arbitrary order. The following example shows a different configuration of parameters and retrieves the indexed face proxy map and the proxies: +The function parameters are provided through \ref bgl_namedparameters "Named Parameters". Setting the non-default parameter values requires calling the functions with the required parameters, connected by a dot and in an arbitrary order. The following example shows a different configuration of parameters and retrieves the indexed face proxy map and the proxies: \cgalExample{Surface_mesh_approximation/vsa_approximation_2_example.cpp} diff --git a/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h b/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h index 189b9176d50..f7dbb84e459 100644 --- a/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h +++ b/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h @@ -47,7 +47,7 @@ enum Verbose_level { #ifdef DOXYGEN_RUNNING namespace parameters { -/*! \ingroup vsa_namedparameters +/*! \ingroup bgl_namedparameters * This function is used when default parameters are just fine for approximation or meshing. */ unspecified_type all_default(); @@ -62,57 +62,130 @@ unspecified_type all_default(); * to approximate a triangle surface mesh, with indexed triangles as output. * * @tparam TriangleMesh model of `FaceListGraph` - * @tparam NamedParameters a sequence of \ref vsa_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters * * @param tm triangle surface mesh to be approximated - * @param np optional sequence of \ref vsa_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @return `true` if the indexed triangles represent a 2-manifold, oriented surface mesh, and `false` otherwise. * * \cgalNamedParamsBegin{Approximation Named Parameters} - * \cgalParamBegin{geom_traits} a geometric traits class instance, model of Kernel. - * Exact constructions kernels are not supported by this function. - * \cgalParamEnd - * \cgalParamBegin{vertex_point_map} the property map with the points associated - * to the vertices of `tm`. Instance of a class model of `ReadablePropertyMap`. - * \cgalParamEnd - * \cgalParamBegin{verbose_level} set verbose level. - * \cgalParamEnd - * \cgalParamBegin{seeding_method} selection of seeding method. - * \cgalParamEnd - * \cgalParamBegin{max_number_of_proxies} maximum number of proxies to approximate the input mesh. - * \cgalParamEnd - * \cgalParamBegin{min_error_drop} minimum error drop of the approximation, expressed in ratio between two iterations of proxy addition. - * \cgalParamEnd - * \cgalParamBegin{number_of_relaxations} number of relaxation iterations interleaved within seeding. - * \cgalParamEnd - * \cgalParamBegin{number_of_iterations} number of partitioning and fitting iterations after seeding. - * \cgalParamEnd + * \cgalParamNBegin{geom_traits} + * \cgalParamDescription{an instance of a geometric traits class} + * \cgalParamType{a model of `Kernel`} + * \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + * \cgalParamExtra{Exact constructions kernels are not supported by this function.} + * \cgalParamNEnd + * + * \cgalParamNBegin{vertex_point_map} + * \cgalParamDescription{a property map associating points to the vertices of `tm`} + * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` + * as key type and `%Point_3` as value type} + * \cgalParamDefault{`boost::get(CGAL::vertex_point, tm)`} + * \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + * must be available in `TriangleMesh`.} + * \cgalParamNEnd + * + * \cgalParamNBegin{verbose_level} + * \cgalParamDescription{the verbose level} + * \cgalParamType{`CGAL::Surface_mesh_approximation::Verbose_level`} + * \cgalParamDefault{`CGAL::Surface_mesh_approximation::SILENT`} + * \cgalParamNEnd + * + * \cgalParamNBegin{seeding_method} + * \cgalParamDescription{the selection of seeding method} + * \cgalParamType{`CGAL::Surface_mesh_approximation::Seeding_method`} + * \cgalParamDefault{`CGAL::Surface_mesh_approximation::HIERARCHICAL`} + * \cgalParamNEnd + * + * \cgalParamNBegin{max_number_of_proxies} + * \cgalParamDescription{the maximum number of proxies used to approximate the input mesh} + * \cgalParamType{`std::size_t`} + * \cgalParamDefault{`num_faces(tm) / 3`, used when `min_error_drop` is also not provided} + * \cgalParamNEnd + * + * \cgalParamNBegin{min_error_drop} + * \cgalParamDescription{the minimum error drop of the approximation, expressed as + * the ratio between two iterations of proxy addition} + * \cgalParamType{`geom_traits::FT`} + * \cgalParamDefault{`0.1`, used when `max_number_of_proxies` is also not provided} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_relaxations} + * \cgalParamDescription{the number of relaxation iterations interleaved within seeding} + * \cgalParamType{`std::size_t`} + * \cgalParamDefault{`5`} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_iterations} + * \cgalParamDescription{the number of partitioning and fitting iterations after seeding} + * \cgalParamType{`std::size_t`} + * \cgalParamDefault{`std::min(std::max(number_of_faces / max_number_of_proxies, 20), 60)`} + * \cgalParamNEnd * \cgalNamedParamsEnd + * + * * \cgalNamedParamsBegin{Meshing Named Parameters} - * \cgalParamBegin{subdivision_ratio} chord subdivision ratio threshold to the chord length or average edge length. - * \cgalParamEnd - * \cgalParamBegin{relative_to_chord} if `true` the `subdivision_ratio` is the ratio of the - * furthest vertex distance to the chord length, otherwise is the average edge length. - * \cgalParamEnd - * \cgalParamBegin{with_dihedral_angle} if set to `true` the `subdivision_ratio` is weighted by dihedral angle. - * \cgalParamEnd - * \cgalParamBegin{optimize_anchor_location} if set to `true`, optimize the anchor locations. - * \cgalParamEnd - * \cgalParamBegin{pca_plane} set `true` if use PCA plane fitting, otherwise use the default area averaged plane parameters. - * \cgalParamEnd + * \cgalParamNBegin{subdivision_ratio} + * \cgalParamDescription{the chord subdivision ratio threshold to the chord length or average edge length} + * \cgalParamType{`geom_traits::FT`} + * \cgalParamDefault{`5.0`} + * \cgalParamNEnd + * + * \cgalParamNBegin{relative_to_chord} + * \cgalParamDescription{If `true`, the `subdivision_ratio` is the ratio of the furthest vertex distance + * to the chord length, otherwise is the average edge length} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{with_dihedral_angle} + * \cgalParamDescription{If `true`, the `subdivision_ratio` is weighted by dihedral angle} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{optimize_anchor_location} + * \cgalParamDescription{If `true`, optimize the anchor locations} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{pca_plane} + * \cgalParamDescription{If `true`, use PCA plane fitting, otherwise use the default area averaged plane parameters} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`false`} + * \cgalParamNEnd * \cgalNamedParamsEnd + * + * * \cgalNamedParamsBegin{Output Named Parameters} - * \cgalParamBegin{face_proxy_map} a `WritablePropertyMap` with - * `boost::graph_traits::%face_descriptor` as key and `std::size_t` as value type. - * A proxy is a set of connected faces which are placed under the same proxy patch (see \cgalFigureRef{iterations}). - * The proxy-ids are contiguous in range [0, number_of_proxies - 1]. - * \cgalParamEnd - * \cgalParamBegin{proxies} output iterator over proxies. - * \cgalParamEnd - * \cgalParamBegin{anchors} output iterator over anchor points. - * \cgalParamEnd - * \cgalParamBegin{triangles} output iterator over indexed triangles. - * \cgalParamEnd + * \cgalParamNBegin{face_proxy_map} + * \cgalParamDescription{a property map to output the proxy index of each face of the input polygon mesh} + * \cgalParamType{a model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key and `std::size_t` as value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamExtra{A proxy is a set of connected faces which are placed under the same proxy patch (see \cgalFigureRef{iterations})} + * \cgalParamExtra{The proxy-ids are contiguous in range `[0, number_of_proxies - 1]`} + * \cgalParamNEnd + * + * \cgalParamNBegin{proxies} + * \cgalParamDescription{an `OutputIterator` to put proxies in} + * \cgalParamType{a class model of `OutputIterator` with + * `CGAL::Surface_mesh_approximation::L21_metric_vector_proxy_no_area_weighting::Proxy` value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamNEnd + * + * \cgalParamNBegin{anchors} + * \cgalParamDescription{an `OutputIterator` to put anchor points in} + * \cgalParamType{a class model of `OutputIterator` with `geom_traits::%Point_3` value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamNEnd + * + * \cgalParamNBegin{triangles} + * \cgalParamDescription{an `OutputIterator` to put indexed triangles in} + * \cgalParamType{a class model of `OutputIterator` with `std::array` value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index bd229b3fa06..9e5c7b02d63 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -295,20 +295,36 @@ public: * @brief initializes the seeds with both maximum number of proxies and minimum error drop stop criteria. * The first criterion met stops the seeding. * Parameters out of range are ignored. - * @tparam NamedParameters a sequence of \ref vsa_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters - * @param np optional sequence of \ref vsa_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @return number of proxies initialized * \cgalNamedParamsBegin{Seeding Named Parameters} - * \cgalParamBegin{seeding_method} selection of seeding method. - * \cgalParamEnd - * \cgalParamBegin{max_number_of_proxies} maximum number of proxies to approximate the input mesh. - * \cgalParamEnd - * \cgalParamBegin{min_error_drop} minimum error drop of the approximation, expressed in ratio between two iterations of proxy addition. - * \cgalParamEnd - * \cgalParamBegin{number_of_relaxations} number of relaxation iterations interleaved within seeding. - * \cgalParamEnd + * \cgalParamNBegin{seeding_method} + * \cgalParamDescription{the selection of seeding method} + * \cgalParamType{`CGAL::Surface_mesh_approximation::Seeding_method`} + * \cgalParamDefault{`CGAL::Surface_mesh_approximation::HIERARCHICAL`} + * \cgalParamNEnd + * + * \cgalParamNBegin{max_number_of_proxies} + * \cgalParamDescription{the maximum number of proxies used to approximate the input mesh} + * \cgalParamType{`std::size_t`} + * \cgalParamDefault{`num_faces(tm) / 3`, used when `min_error_drop` is also not provided} + * \cgalParamNEnd + * + * \cgalParamNBegin{min_error_drop} + * \cgalParamDescription{the minimum error drop of the approximation, expressed as + * the ratio between two iterations of proxy addition} + * \cgalParamType{`geom_traits::FT`} + * \cgalParamDefault{`0.1`, used when `max_number_of_proxies` is also not provided} + * \cgalParamNEnd + * + * \cgalParamNBegin{number_of_relaxations} + * \cgalParamDescription{the number of relaxation iterations interleaved within seeding} + * \cgalParamType{`std::size_t`} + * \cgalParamDefault{`5`} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -767,23 +783,42 @@ public: /// @{ /*! * @brief extracts the output mesh in the form of an indexed triangle set. - * @tparam NamedParameters a sequence of \ref vsa_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters * - * @param np optional sequence of \ref vsa_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * @return `true` if the extracted surface mesh is manifold, and `false` otherwise. * * \cgalNamedParamsBegin{Meshing Named Parameters} - * \cgalParamBegin{subdivision_ratio} chord subdivision ratio threshold to the chord length or average edge length. - * \cgalParamEnd - * \cgalParamBegin{relative_to_chord} set `true` if the subdivision_ratio is the ratio of the - * furthest vertex distance to the chord length, or to the average edge length otherwise. - * \cgalParamEnd - * \cgalParamBegin{with_dihedral_angle} set `true` if subdivision_ratio is weighted by dihedral angle. - * \cgalParamEnd - * \cgalParamBegin{optimize_anchor_location} if set to `true`, optimize the anchor locations. - * \cgalParamEnd - * \cgalParamBegin{pca_plane} set `true` if use PCA plane fitting, otherwise use the default area averaged plane parameters. - * \cgalParamEnd + * \cgalParamNBegin{subdivision_ratio} + * \cgalParamDescription{the chord subdivision ratio threshold to the chord length or average edge length} + * \cgalParamType{`geom_traits::FT`} + * \cgalParamDefault{`5.0`} + * \cgalParamNEnd + * + * \cgalParamNBegin{relative_to_chord} + * \cgalParamDescription{If `true`, the `subdivision_ratio` is the ratio of the furthest vertex distance + * to the chord length, otherwise is the average edge length} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{with_dihedral_angle} + * \cgalParamDescription{If `true`, the `subdivision_ratio` is weighted by dihedral angle} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`false`} + * \cgalParamNEnd + * + * \cgalParamNBegin{optimize_anchor_location} + * \cgalParamDescription{If `true`, optimize the anchor locations} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`true`} + * \cgalParamNEnd + * + * \cgalParamNBegin{pca_plane} + * \cgalParamDescription{If `true`, use PCA plane fitting, otherwise use the default area averaged plane parameters} + * \cgalParamType{`Boolean`} + * \cgalParamDefault{`false`} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template @@ -831,22 +866,38 @@ public: /// @{ /*! * @brief outputs approximation results. - * @tparam NamedParameters a sequence of \ref vsa_namedparameters + * @tparam NamedParameters a sequence of \ref bgl_namedparameters - * @param np optional sequence of \ref vsa_namedparameters among the ones listed below + * @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * \cgalNamedParamsBegin{Output Named Parameters} - * \cgalParamBegin{face_proxy_map} a `WritePropertyMap` with - * `boost::graph_traits::%face_descriptor` as key and `std::size_t` as value type. - * A proxy is a set of connected faces which are placed under the same proxy patch (see \cgalFigureRef{iterations}). - * The proxy-ids are contiguous in range `[0, number_of_proxies() - 1]`. - * \cgalParamEnd - * \cgalParamBegin{proxies} output iterator over proxies. - * \cgalParamEnd - * \cgalParamBegin{anchors} output iterator over anchor points. - * \cgalParamEnd - * \cgalParamBegin{triangles} output iterator over indexed triangles. - * \cgalParamEnd + * \cgalParamNBegin{face_proxy_map} + * \cgalParamDescription{a property map to output the proxy index of each face of the input polygon mesh} + * \cgalParamType{a model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` + * as key and `std::size_t` as value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamExtra{A proxy is a set of connected faces which are placed under the same proxy patch (see \cgalFigureRef{iterations})} + * \cgalParamExtra{The proxy-ids are contiguous in range `[0, number_of_proxies - 1]`} + * \cgalParamNEnd + * + * \cgalParamNBegin{proxies} + * \cgalParamDescription{an `OutputIterator` to put proxies in} + * \cgalParamType{a class model of `OutputIterator` with + * `CGAL::Surface_mesh_approximation::L21_metric_vector_proxy_no_area_weighting::Proxy` value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamNEnd + * + * \cgalParamNBegin{anchors} + * \cgalParamDescription{an `OutputIterator` to put anchor points in} + * \cgalParamType{a class model of `OutputIterator` with `geom_traits::%Point_3` value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamNEnd + * + * \cgalParamNBegin{triangles} + * \cgalParamDescription{an `OutputIterator` to put indexed triangles in} + * \cgalParamType{a class model of `OutputIterator` with `std::array` value type} + * \cgalParamDefault{no output operation is performed} + * \cgalParamNEnd * \cgalNamedParamsEnd */ template diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h index 2096a04a207..67712c625ed 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h @@ -4,54 +4,83 @@ namespace Surface_mesh_simplification { /*! \ingroup PkgSurfaceMeshSimplificationRef -Simplifies `surface_mesh` in-place by collapsing edges, and returns +Simplifies `tmesh` in-place by collapsing edges, and returns the number of edges effectively removed. @tparam TriangleMesh a model of the `MutableFaceGraph` and `HalfedgeListGraph` concepts. @tparam StopPolicy a model of `StopPredicate` -@tparam NamedParameters a sequence of \ref sms_namedparameters "Named Parameters" +@tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" -@param surface_mesh a triangle mesh +@param tmesh a triangle mesh @param should_stop the stop-condition policy -@param np optional sequence of \ref sms_namedparameters "Named Parameters" among the ones listed below +@param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin - \cgalParamBegin{vertex_point_map} - the property map with the points associated to the vertices of the mesh. - \cgalParamEnd + \cgalParamNBegin{vertex_point_map} + \cgalParamDescription{a property map associating points to the vertices of `tmesh`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `%Point_3` as value type} + \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} + \cgalParamExtra{If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` + should be available for the vertices of `tmesh`.} + \cgalParamNEnd - \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`, - compatible with the value type of the vertex point map. - \cgalParamEnd + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a class model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamExtra{The geometric traits class must be compatible with the vertex point type.} + \cgalParamNEnd - \cgalParamBegin{halfedge_index_map} - the property map containing for each halfedge of `surface_mesh` a unique index between `0` to `num_halfedges(graph)`. - \cgalParamEnd + \cgalParamNBegin{halfedge_index_map} + \cgalParamDescription{a property map associating to each halfedge of `tmesh` a unique index between `0` and `num_halfedges(tmesh) - 1`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%halfedge_descriptor` + as key type and `std::size_t` as value type} + \cgalParamDefault{an automatically indexed internal map} + \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + a face index property map, either using the internal property map if it exists + or using an external map. The latter might result in - slightly - worsened performance + in case of non-constant complexity for index access.} + \cgalParamNEnd - \cgalParamBegin{get_cost} - The policy which returns the collapse cost for an edge. - \cgalParamEnd + \cgalParamNBegin{get_cost} + \cgalParamDescription{a policy which returns the collapse cost for an edge} + \cgalParamType{a model of the concept `GetCost`} + \cgalParamDefault{`CGAL::Surface_mesh_simplification::LindstromTurk_cost`} + \cgalParamNEnd - \cgalParamBegin{get_placement} - The policy which returns the placement (position of the replacemet vertex) for an edge. - \cgalParamEnd + \cgalParamNBegin{get_placement} + \cgalParamDescription{a policy which returns the placement (position of the replacemet vertex) for an edge} + \cgalParamType{a model of the concept `GetPlacement`} + \cgalParamDefault{`CGAL::Surface_mesh_simplification::LindstromTurk_placement`} + \cgalParamNEnd - \cgalParamBegin{edge_is_constrained_map} - The property map containing the constrained-or-not status of each edge of `pmesh`. - \cgalParamEnd + \cgalParamNBegin{edge_is_constrained_map} + \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tmesh`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%edge_descriptor` + as key type and `bool` as value type} + \cgalParamDefault{a constant property map returning `false` for any edge key} + \cgalParamExtra{A constrained edge cannot be collapsed.} + \cgalParamNEnd - \cgalParamBegin{visitor} - The visitor that is called by the `edge_collapse` function - in certain points to allow the user to track the simplification process. - It must be a model of the concept `EdgeCollapseSimplificationVisitor`. - \cgalParamEnd + \cgalParamNBegin{visitor} + \cgalParamDescription{a visitor that is called by the `edge_collapse` function + at certain points to allow the user to track the simplification process} + \cgalParamType{a class model of the concept `EdgeCollapseSimplificationVisitor`} + \cgalParamDefault{unused} + \cgalParamNEnd - \cgalParamBegin{vertex_index_map} - is the property map containing the index of each vertex of the input polygon mesh. - \cgalDebugBegin - This parameter is only used by debug functions and is usually not needed for users. - \cgalDebugEnd - \cgalParamEnd + \cgalParamNBegin{vertex_index_map} + \cgalParamDescription{a property map associating to each vertex of `tmesh` a unique index between `0` and `num_vertices(tmesh) - 1`} + \cgalParamType{a class model of `ReadWritePropertyMap` with `boost::graph_traits::%vertex_descriptor` + as key type and `std::size_t` as value type} + \cgalParamDefault{an automatically indexed internal map} + \cgalParamExtra{If this parameter is not passed, internal machinery will create and initialize + a face index property map, either using the internal property map if it exists + or using an external map. The latter might result in - slightly - worsened performance + in case of non-constant complexity for index access.} + \cgalParamExtra{This parameter is only used by debug functions and is usually not needed for users.} + \cgalParamNEnd \cgalNamedParamsEnd \cgalHeading{Semantics} @@ -67,7 +96,7 @@ and the remaining vertex is re-positioned. are called at certain points in the simplification code. */ template -int edge_collapse(TriangleMesh& surface_mesh, +int edge_collapse(TriangleMesh& tmesh, const StopPolicy& should_stop, const NamedParameters& np); diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Doxyfile.in b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Doxyfile.in index 3063598a017..2ad29a4dd0d 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/Doxyfile.in +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/Doxyfile.in @@ -1,15 +1,3 @@ @INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - Triangulated Surface Mesh Simplification" - -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref SMS_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt deleted file mode 100644 index cfdf1a24976..00000000000 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt +++ /dev/null @@ -1,106 +0,0 @@ -/*! -\defgroup sms_namedparameters Named Parameters for Surface Mesh Simplification -\ingroup PkgSurfaceMeshSimplificationRef - -In this package, some optional parameters are implemented as BGL optional -named parameters (see \ref BGLNamedParameters for more information on how to use them). - -The named parameters list is a composition of function calls separated by a dot (\f$ .\f$) where -the name of each function matches the name of an argument and wraps the actual parameter. -The sequence of named parameters should start with `CGAL::parameters::`. - -This is an example with 2 arguments: - -\code -`CGAL::parameters::get_cost(the_actual_cost).halfedge_index_map(the_actual_halfedge_index_map)` -\endcode - -`the_actual_cost` and `the_actual_halfedge_index_map` are -the actual parameters, while `get_cost()` and `halfedge_index_map()` -are wrapper functions used to designate each formal argument. - -All named parameters have default values so you only need to compose those for which the default -is inappropriate. Furthermore, since each actual parameter is wrapped in a function whose name -designates the formal argument, the order of named parameters in the list is totally irrelevant. - -In the following, we assume that the type `TriangleMesh` is passed as template -parameters of the functions, and is a model of the concept `MutableFaceGraph`. - -The following named parameters, offered by the package \ref PkgBGL -(see \ref bgl_namedparameters), are used in this package: - -\cgalNPTableBegin -\cgalNPBegin{vertex_point_map} \anchor SMS_vertex_point_map -is the property map with the points associated to the vertices of the polygon mesh `pmesh`.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and -`GeomTraits::Point_3` as value type. \n -Default: \code boost::get(CGAL::vertex_point, pmesh) \endcode -\cgalNPEnd - -\cgalNPBegin{geom_traits} \anchor SMS_geom_traits -is the geometric traits instance used for the mesh processing operation.\n -Type: a Geometric traits class.\n -Default: -\code typename CGAL::Kernel_traits< - typename boost::property_traits< - typename boost::property_map::type>::value_type>::Kernel \endcode -\cgalNPEnd - -\cgalNPBegin{vertex_index_map} \anchor SMS_vertex_index_map -is the property map containing the index of each vertex of the input polygon mesh.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%vertex_descriptor` as key type and the value type -\code typename boost::property_traits::type>::value_type \endcode -Default: \code boost::get(CGAL::vertex_index, pmesh)\endcode -\cgalNPEnd - -\cgalNPBegin{halfedge_index_map} \anchor SMS_halfedge_index_map -is the property map containing the index of each halfedge of the input polygon mesh.\n -Type: a class model of `ReadablePropertyMap` with -`boost::graph_traits::%halfedge_descriptor` as key type and the value type: -\code typename boost::property_traits::type>::value_type \endcode -Default: the property map obtained by calling `get(CGAL::halfedge_index,surface_mesh)`, -which requires the surface mesh edges to have an `id()` member properly initialized to the -require value. If the edges don't have such an `id()`, a property map must be passed explicitly. -An external property map can be easily obtained by calling -`get(CGAL::halfedge_external_index,surface_mesh)`. This constructs on the fly, and returns, -a property map which non-intrusively associates a proper id with each edge. -\cgalNPEnd - -\cgalNPBegin{edge_is_constrained_map} \anchor SMS_edge_is_constrained_map -is the property map containing information about edges of the input polygon mesh -being marked or not.\n -Type: a class model of `ReadWritePropertyMap` with -`boost::graph_traits::%edge_descriptor` as key type and -`bool` as value type. It should be default constructible.\n -Default: a default property map where no edge is constrained -\cgalNPEnd -\cgalNPTableEnd - -In addition to these named parameters, this package offers the following named parameters: - -\cgalNPTableBegin -\cgalNPBegin{get_cost} \anchor SMS_get_cost -is the policy which returns the collapse cost for an edge.\n -Type: a model of the concept `GetCost`\n -Default: The cost policy `CGAL::Surface_mesh_simplification::LindstromTurk_cost` -\cgalNPEnd - -\cgalNPBegin{get_placement} \anchor SMS_get_placement -is the policy which returns the placement (position of the replacemet vertex) for an edge.\n -Type: a model of the concept `GetPlacement`\n -Default: The cost policy `CGAL::Surface_mesh_simplification::LindstromTurk_placement` -\cgalNPEnd - -\cgalNPBegin{visitor} \anchor SMS_visitor -is the visitor that is called by the `edge_collapse()` function in certain points -to allow the user to track the simplification process.being marked or not. -If you wish to provide your own visitor, you can derive from: -`CGAL::Surface_mesh_simplification::Edge_collapse_visitor_base` -and override only the callbacks you are interested in.\n -Type: user specific\n -Default: an implementation-defined dummy visitor -\cgalNPEnd -\cgalNPTableEnd -*/ diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Doxyfile.in b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Doxyfile.in index a7812ca0fd3..a0a33b4553f 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Doxyfile.in +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Doxyfile.in @@ -6,18 +6,6 @@ EXTRACT_ALL = false HIDE_UNDOC_CLASSES = true WARN_IF_UNDOCUMENTED = false -# macros to be used inside the code -ALIASES += "cgalNamedParamsBegin=
Named Parameters
" -ALIASES += "cgalNamedParamsEnd=
" -ALIASES += "cgalParamBegin{1}=\ref Remeshing_\1 \"\1\"" -ALIASES += "cgalParamEnd=" - -#macros for NamedParameters.txt -ALIASES += "cgalNPTableBegin=
" -ALIASES += "cgalNPTableEnd=
" -ALIASES += "cgalNPBegin{1}=\1 " -ALIASES += "cgalNPEnd=" - EXAMPLE_PATH += ${CGAL_Tetrahedral_remeshing_EXAMPLE_DIR} EXCLUDE = ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Tetrahedral_remeshing/internal @@ -25,4 +13,4 @@ EXCLUDE = ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Tetrahedral_remeshing/internal #MACRO_EXPANSION = YES #EXPAND_ONLY_PREDEF = YES #EXPAND_AS_DEFINED = CGAL_PMP_NP_TEMPLATE_PARAMETERS \ -# CGAL_PMP_NP_CLASS +# CGAL_PMP_NP_CLASS diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/NamedParameters.txt b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/NamedParameters.txt deleted file mode 100644 index 953042d5f33..00000000000 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/NamedParameters.txt +++ /dev/null @@ -1,100 +0,0 @@ -/*! -\defgroup Remeshing_namedparameters Named Parameters for Tetrahedral Remeshing -\ingroup PkgTetrahedralRemeshingRef - -\cgalHeading{How to use BGL Optional Named Parameters} - -The notion of named parameters was introduced in the BGL. -Details can be found from: https://www.boost.org/libs/graph/doc/bgl_named_params.html. -Named parameters enable the user to specify only those parameters which are really needed, by name, -making the parameter ordering not required. -See \ref BGLNamedParameters for more information on how to use them. - -The sequence of named parameters should start with `CGAL::parameters::`. -The function `CGAL::parameters::all_default()` can be used to indicate -that default values of optional named parameters are used. - - -\cgalHeading{List of Available Named Parameters} - -In this package, functions optional parameters are implemented as BGL optional named parameters and listed below. - -In the following, we assume that the following types are provided as template parameters of tetrahedral remeshing -functions. Note that the type may be more specific for some functions. - -
    -
  • `Triangulation` implements a `Triangulation_3` with specific vertex base and cell base.
  • -
- -\cgalNPTableBegin - -\cgalNPBegin{number_of_iterations} -\anchor Remeshing_number_of_iterations -the number of iterations for the full sequence of atomic operations -(edge splits, edge collapses, edge flips, smoothing and projection to the initial surface) -performed to reach the input target edge length while improving the quality of dihedral angles -in the mesh.\n -\b Type : `std::size_t` \n -\b Default value is `1` -\cgalNPEnd - -\cgalNPBegin{remesh_boundaries} -\anchor Remeshing_remesh_boundaries -a Boolean that states whether the boundaries should be remeshed or -exactly preserved by the remeshing process. -Boundaries are between the exterior and the interior, -between two subdomains, between the areas selected or not for remeshing -(cf \ref Remeshing_cell_is_selected_map), -or defined by \ref Remeshing_edge_is_constrained_map -and \ref Remeshing_facet_is_constrained_map. -If `true`, they are remeshed. Otherwise, they cannot be modified at all by the remeshing process.\n -\b Type : `bool` \n -\b Default value is `true` -\cgalNPEnd - -\cgalNPBegin{edge_is_constrained_map} -\anchor Remeshing_edge_is_constrained_map -is a property map containing information about edges of the input triangulation -being marked as constrained or not.\n -Type: a class model of `ReadWritePropertyMap` with -`std::pair` as key type and -`bool` as value type. -The pairs must be ordered to ensure consistency. -During the meshing process, the set of constrained edges evolves consistently with -edge splits and collapses, so the property map must be writable. -It must be default constructible. -\n -Default: a default property map where no edge is constrained -\cgalNPEnd - -\cgalNPBegin{facet_is_constrained_map} -\anchor Remeshing_facet_is_constrained_map -is a property map containing information about facets of the input triangulation -being marked as constrained or not.\n -Type: a class model of `ReadPropertyMap` with -`Triangulation::%Facet` as key type and `bool` as value type. -It is not updated throughout the remeshing process. -It must be default constructible. -\n -Default: a default property map where no facet is constrained -\cgalNPEnd - -\cgalNPBegin{cell_is_selected_map} -\anchor Remeshing_cell_is_selected_map -is a property map containing information about cells of the input triangulation -being marked as selected or not for tetrahedral remeshing. -Only selected cells are modified (and possibly their neighbors if surfaces are -modified) by the remeshing process. Unselected cells will not be modified.\n -\b Type : a class model of `ReadWritePropertyMap` with -`Triangulation::%Cell_handle` as key type and `bool` as value type. -During the meshing process, the set of selected cells evolves consistently with -the atomic operations that are performed, -so the property map must be writable. -It must be default constructible.\n -Default: a default property map where all cells of the domain -(i.e. with a non-zero `Subdomain_index`) are selected. -\cgalNPEnd - -\cgalNPTableEnd - -*/ diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/PackageDescription.txt b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/PackageDescription.txt index a1558091edb..764ed582390 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/PackageDescription.txt +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/PackageDescription.txt @@ -56,5 +56,6 @@ while preserving the input geometric curve and surface features. \cgalCRPSection{Function Templates} - `CGAL::tetrahedral_isotropic_remeshing()` +- `CGAL::convert_to_triangulation_3()` */ diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt index 2ec434eaa85..6336998d527 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt @@ -39,17 +39,18 @@ The tetrahedral remeshing algorithm improves the quality of dihedral angles, while targeting the user-defined uniform sizing field and preserving the topology of the feature complex, as highlighted by Figure \cgalFigureRef{Remesh_liver}. -\cgalFigureBegin{Remesh_liver, tetrahedral_remeshing_before_after.png} -Tetrahedral mesh, improved by the uniform tetrahedral remeshing algorithm. -(Left) Before remeshing, dihedral angles were in the interval [0.7; 178.9]. -(Right) After remeshing and keeping the same density, -dihedral angles are the interval [12,7; 157.7]. -\cgalFigureEnd - Experimental evidence shows that a higher number of remeshing iterations leads to a mesh with a improved fidelity to the sizing criterion, and higher quality dihedral angles. +\cgalFigureBegin{Remesh_liver, tetrahedral_remeshing_before_after.png} +Tetrahedral mesh, modified by our uniform tetrahedral remeshing method. +(Left) Before remeshing, dihedral angles were in the interval [1.3; 177.8]. +(Right) After remeshing and keeping the same density, +dihedral angles are in the interval [12,7; 157.7]. +\cgalFigureEnd + + \section secTetRemeshingAPI API The tetrahedral remeshing algorithm is implemented as a single free function @@ -58,10 +59,7 @@ takes only two required parameters: the input triangulation, and the desired edg which drives the remeshing process. \ref BGLNamedParameters are used to deal with optional parameters. -The page \ref Remeshing_namedparameters provides a description -of their usage, and of all the available parameters for tuning -the remeshing process and results. - +The page \ref bgl_namedparameters describes their usage. \section secTetRemeshingExamples Examples @@ -97,5 +95,39 @@ setting the named parameter `remesh_boundaries` to `false`. \cgalExample{Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp } + +\subsection ssecEx4 Tetrahedral Remeshing After Mesh Generation + +The tetrahedral remeshing algorithm is designed as a post-processing for +mesh generation algorithms. The API allows to generate a tetrahedral mesh +with the \cgal \ref PkgMesh3 package, and +further improve it with the tetrahedral remeshing algorithm. +This example shows how to use tetrahedral mesh generation and remeshing in sequence, +from a polyhedral domain with features. + +\cgalExample{Tetrahedral_remeshing/mesh_and_remesh_polyhedral_domain_with_features.cpp} + + +\subsection ssecEx5 Tetrahedral Remeshing from Any Tetrahedral Mesh + +The following example shows how to read a mesh from a triangulation stored in a +Medit file, perform tetrahedral remeshing, and save the output triangulation. +The input triangulation should follow the validity requirements of a +`CGAL::Triangulation_3` (valid connectivity, positive orientation of the cells, and +coverage of the convex hull of the vertices). + +\cgalExample{Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp} + + +\section secTetRemeshingHistory Implementation History + +This package implements the uniform version of the "Multi-Material Adaptive Volume Remesher" +algorithm for quality tetrahedral remeshing, described by Noura Faraj et al. in \cgalCite{faraj2016mvr}. + +A first version of the code was written by Noura Faraj, Jean-Marc Thiery, and Tamy Boubekeur. +Jane Tournois worked on the finalization of the code, the API, and documentation. + +It was initially published in CGAL-5.1. + */ } /* namespace CGAL */ diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/examples.txt b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/examples.txt index e8c4a45bee1..018dde26767 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/examples.txt +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/examples.txt @@ -3,5 +3,6 @@ \example Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp \example Tetrahedral_remeshing/tetrahedral_remeshing_of_one_subdomain.cpp \example Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp - +\example Tetrahedral_remeshing/mesh_and_remesh_polyhedral_domain_with_features.cpp +\example Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp */ diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/CMakeLists.txt b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/CMakeLists.txt index ecc37356c72..e14159f08e0 100644 --- a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/CMakeLists.txt +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/CMakeLists.txt @@ -19,9 +19,16 @@ if ( NOT Boost_FOUND ) return() endif() +# Use Eigen for Mesh_3 +find_package(Eigen3 3.1.0 REQUIRED) #(3.1.0 or greater) +include(CGAL_Eigen_support) # Creating entries for all C++ files with "main" routine # ########################################################## create_single_source_cgal_program( "tetrahedral_remeshing_example.cpp" ) create_single_source_cgal_program( "tetrahedral_remeshing_with_features.cpp") create_single_source_cgal_program( "tetrahedral_remeshing_of_one_subdomain.cpp") +create_single_source_cgal_program( "tetrahedral_remeshing_from_mesh.cpp") + +create_single_source_cgal_program( "mesh_and_remesh_polyhedral_domain_with_features.cpp" ) +target_link_libraries(mesh_and_remesh_polyhedral_domain_with_features PUBLIC CGAL::Eigen_support) diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/data/fandisk.off b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/data/fandisk.off new file mode 100644 index 00000000000..8b04c52c15e --- /dev/null +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/data/fandisk.off @@ -0,0 +1,19425 @@ +OFF +6475 12946 0 + +0.1696 0.04095 -0.0471 +0.1809 0.03455 -0.046 +0.1628 0.03455 -0.046 +0.1539 0.04355 -0.0475 +0.1651 0.05375 -0.0494 +0.1811 0.05105 -0.0489 +0.1952 0.04725 -0.0482 +0.1949 0.05065 -0.0275 +0.1813 0.03875 -0.0237 +0.1666 0.02125 -0.0389 +0.1585 0.02595 -0.0412 +0.1446 0.03455 -0.046 +0.1367 0.04495 -0.0478 +0.148 0.05595 -0.0497 +0.1604 0.06725 -0.0517 +0.1778 0.06475 -0.0513 +0.1944 0.06205 -0.0508 +0.2101 0.05925 -0.0503 +0.2105 0.06305 -0.0313 +0.2093 0.06565 -0.011 +0.1945 0.05355 -0.0089 +0.1814 0.04205 -0.0057 +0.1668 0.02495 -0.0191 +0.1527 0.00675 -0.033 +0.142 0.02155 -0.039 +0.1264 0.03455 -0.046 +0.119 0.04605 -0.048 +0.1304 0.05785 -0.0501 +0.1427 0.06965 -0.0522 +0.1557 0.08145 -0.0542 +0.1737 0.07865 -0.0537 +0.1915 0.07585 -0.0532 +0.2089 0.07305 -0.0528 +0.2255 0.07055 -0.0523 +0.2256 0.07405 -0.0334 +0.2248 0.07695 -0.013 +0.2247 0.08035 0.006 +0.2093 0.06895 0.008 +0.1945 0.05685 0.0101 +0.1802 0.04415 0.0124 +0.1673 0.02835 -0.003 +0.1528 0.01005 -0.0147 +0.1396 -0.00875 -0.0287 +0.1156 -0.00185 -0.0304 +0.1199 0.02535 -0.0409 +0.1082 0.03455 -0.046 +0.1011 0.04715 -0.0482 +0.1126 0.05975 -0.0504 +0.1248 0.07225 -0.0526 +0.1376 0.08435 -0.0547 +0.1509 0.09615 -0.0568 +0.1693 0.09285 -0.0562 +0.1878 0.08965 -0.0557 +0.2061 0.08665 -0.0551 +0.2241 0.08375 -0.0546 +0.2415 0.08125 -0.0542 +0.2415 0.08455 -0.0353 +0.2407 0.08765 -0.0149 +0.2407 0.09095 0.0041 +0.2358 0.06555 0.0086 +0.221 0.05475 0.0105 +0.2068 0.04315 0.0125 +0.1932 0.03095 0.0147 +0.1801 0.01815 0.017 +0.1665 0.03065 0.0147 +0.1534 0.01375 0.0015 +0.141 -0.00105 0.0045 +0.1398 -0.00535 -0.0115 +0.1274 -0.02215 -0.0092 +0.127 -0.02565 -0.0261 +0.1081 -0.02565 -0.0261 +0.0866 -0.00565 -0.0294 +0.1038 0.01495 -0.036 +0.11 0.02835 -0.0424 +0.0965 0.02515 -0.0407 +0.09 0.03455 -0.046 +0.083 0.04855 -0.0484 +0.0947 0.06195 -0.0508 +0.1068 0.07505 -0.0531 +0.1194 0.08765 -0.0553 +0.1325 0.09975 -0.0575 +0.146 0.11145 -0.0595 +0.1647 0.10745 -0.0588 +0.1835 0.10375 -0.0582 +0.2024 0.10035 -0.0575 +0.2213 0.09695 -0.057 +0.2398 0.09375 -0.0564 +0.258 0.09105 -0.0559 +0.258 0.09435 -0.037 +0.2572 0.09755 -0.0167 +0.2572 0.10085 0.0024 +0.251 0.07575 0.0068 +0.2467 0.05075 0.0112 +0.2327 0.04045 0.013 +0.2191 0.02945 0.015 +0.2061 0.01785 0.017 +0.1937 0.00565 0.0192 +0.1819 -0.00715 0.0214 +0.1677 0.00475 0.0193 +0.1535 0.01655 0.0172 +0.1412 0.00185 0.0198 +0.1296 -0.01335 0.0225 +0.1283 -0.01805 0.0061 +0.1176 -0.03395 0.0082 +0.1168 -0.03795 -0.0072 +0.1166 -0.04135 -0.0245 +0.0986 -0.04185 -0.0245 +0.0891 -0.02565 -0.0261 +0.0702 -0.02565 -0.0261 +0.0693 -0.00485 -0.0296 +0.0819 0.00935 -0.0339 +0.0793 0.02165 -0.039 +0.0719 0.03455 -0.046 +0.0827 0.04705 -0.0544 +0.0867 0.05215 -0.053 +0.0962 0.06235 -0.0584 +0.1059 0.07215 -0.0641 +0.1173 0.08265 -0.0717 +0.1331 0.09575 -0.0834 +0.1485 0.10995 -0.0798 +0.16 0.12255 -0.0615 +0.179 0.11825 -0.0607 +0.1982 0.11425 -0.06 +0.2176 0.11045 -0.0593 +0.237 0.10665 -0.0587 +0.2561 0.10315 -0.0581 +0.2749 0.10015 -0.0575 +0.2749 0.10345 -0.0386 +0.2741 0.10665 -0.0183 +0.2741 0.10995 0.0008 +0.2668 0.08515 0.0051 +0.2612 0.06045 0.0095 +0.2575 0.03585 0.0138 +0.2442 0.02605 0.0156 +0.2313 0.01565 0.0174 +0.219 0.00455 0.0193 +0.2072 -0.00695 0.0214 +0.196 -0.01915 0.0235 +0.1853 -0.03175 0.0258 +0.1707 -0.02045 0.0238 +0.156 -0.00925 0.0218 +0.1449 -0.02385 0.0244 +0.1345 -0.03885 0.027 +0.1188 -0.02915 0.0253 +0.1087 -0.04545 0.0282 +0.1078 -0.05015 0.0106 +0.1071 -0.05415 -0.0052 +0.1069 -0.05755 -0.0228 +0.0896 -0.05825 -0.0227 +0.0803 -0.04205 -0.0244 +0.0619 -0.04225 -0.0244 +0.0512 -0.02565 -0.0261 +0.0516 -0.00295 -0.0301 +0.0695 0.00915 -0.0339 +0.0703 0.01785 -0.0373 +0.0612 0.02365 -0.04 +0.058 0.04425 -0.0524 +0.0678 0.05475 -0.0607 +0.0785 0.06495 -0.0706 +0.0935 0.05825 -0.0639 +0.1042 0.06845 -0.0744 +0.1149 0.07755 -0.0861 +0.1252 0.08555 -0.0988 +0.1426 0.10095 -0.1024 +0.1505 0.10905 -0.095 +0.1619 0.12065 -0.0807 +0.1743 0.13325 -0.0633 +0.1937 0.12855 -0.0625 +0.2133 0.12415 -0.0617 +0.2332 0.11995 -0.061 +0.2531 0.11575 -0.0603 +0.2728 0.11175 -0.0596 +0.2921 0.10835 -0.059 +0.2921 0.11165 -0.0401 +0.2915 0.11495 -0.0198 +0.2915 0.11835 -0.0007 +0.283 0.09385 0.0036 +0.2762 0.06935 0.0079 +0.2713 0.04505 0.0122 +0.2812 0.02955 0.0149 +0.2682 0.02085 0.0165 +0.2555 0.01155 0.0181 +0.2434 0.00165 0.0199 +0.2317 -0.00875 0.0217 +0.2205 -0.01975 0.0236 +0.2099 -0.03125 0.0257 +0.1998 -0.04325 0.0278 +0.1753 -0.04485 0.0281 +0.1602 -0.03425 0.0262 +0.1503 -0.04865 0.0287 +0.1411 -0.06335 0.0313 +0.1249 -0.05435 0.0297 +0.1161 -0.07035 0.0326 +0.0994 -0.06215 0.0311 +0.0986 -0.06685 0.0132 +0.0975 -0.07185 -0.0021 +0.098 -0.07425 -0.021 +0.0811 -0.07505 -0.0209 +0.0719 -0.05865 -0.0227 +0.0539 -0.05885 -0.0227 +0.0433 -0.04225 -0.0244 +0.0323 -0.02565 -0.0261 +0.028 0.00185 -0.0315 +0.0368 0.01995 -0.0383 +0.0553 0.01275 -0.0352 +0.0467 0.03255 -0.0448 +0.0425 0.05105 -0.0576 +0.0546 0.06165 -0.0671 +0.0657 0.07095 -0.0773 +0.0755 0.07775 -0.0863 +0.089 0.07405 -0.0813 +0.097 0.08095 -0.0911 +0.1062 0.08845 -0.1043 +0.1183 0.09685 -0.1248 +0.135 0.09235 -0.1126 +0.1521 0.10645 -0.117 +0.1623 0.11735 -0.102 +0.1768 0.12855 -0.1002 +0.1743 0.13015 -0.0811 +0.189 0.14335 -0.0651 +0.2088 0.13825 -0.0642 +0.2288 0.13345 -0.0634 +0.2492 0.12875 -0.0626 +0.2696 0.12415 -0.0617 +0.2899 0.11975 -0.061 +0.3098 0.11575 -0.0603 +0.3098 0.11905 -0.0413 +0.3093 0.12245 -0.0211 +0.3093 0.12585 -0.002 +0.2995 0.10175 0.0022 +0.2916 0.07765 0.0064 +0.2855 0.05355 0.0107 +0.2947 0.03765 0.0135 +0.3037 0.02165 0.0164 +0.291 0.01395 0.0177 +0.2786 0.00575 0.0191 +0.2667 -0.00305 0.0207 +0.2552 -0.01235 0.0223 +0.2442 -0.02225 0.0241 +0.2337 -0.03265 0.0259 +0.2237 -0.04345 0.0278 +0.2142 -0.05485 0.0298 +0.1903 -0.05565 0.03 +0.1659 -0.05855 0.0305 +0.1572 -0.07245 0.0329 +0.1492 -0.08695 0.0355 +0.1327 -0.07855 0.034 +0.125 -0.09405 0.0368 +0.108 -0.08665 0.0354 +0.091 -0.07925 0.0341 +0.0902 -0.08415 0.0158 +0.0894 -0.08885 -0.0002 +0.0898 -0.09125 -0.019 +0.0734 -0.09205 -0.0189 +0.0639 -0.07545 -0.0209 +0.0463 -0.07575 -0.0208 +0.0357 -0.05895 -0.0227 +0.0248 -0.04235 -0.0244 +0.0133 -0.02565 -0.0261 +0.0106 -0.00485 -0.0296 +0.0134 0.01495 -0.0361 +0.022 0.02755 -0.042 +0.032 0.04025 -0.0496 +0.0255 0.05775 -0.0634 +0.0384 0.07145 -0.078 +0.0571 0.07685 -0.0851 +0.0677 0.08045 -0.0902 +0.0801 0.08355 -0.0952 +0.085 0.09005 -0.1075 +0.0902 0.09695 -0.1252 +0.1131 0.10145 -0.1436 +0.1324 0.09915 -0.1327 +0.144 0.09775 -0.1275 +0.1607 0.11045 -0.1334 +0.1717 0.12105 -0.1214 +0.1798 0.12855 -0.1127 +0.1891 0.13715 -0.1005 +0.1891 0.14025 -0.0828 +0.2042 0.15295 -0.0668 +0.2242 0.14735 -0.0659 +0.2447 0.14215 -0.0649 +0.2655 0.13695 -0.064 +0.2865 0.13185 -0.0631 +0.3074 0.12685 -0.0622 +0.3278 0.12235 -0.0614 +0.3278 0.12565 -0.0425 +0.3274 0.12915 -0.0223 +0.3274 0.13245 -0.0032 +0.3164 0.10895 0.0009 +0.3074 0.08515 0.0051 +0.3001 0.06135 0.0093 +0.3085 0.04505 0.0122 +0.3168 0.02865 0.0151 +0.3055 0.02605 0.0355 +0.2928 0.01855 0.0368 +0.2805 0.01045 0.0383 +0.2687 0.00185 0.0398 +0.2575 -0.00705 0.0414 +0.2476 -0.01575 0.0429 +0.2404 -0.02245 0.0441 +0.2312 -0.03175 0.0457 +0.2217 -0.04225 0.0476 +0.2126 -0.05345 0.0496 +0.2053 -0.06655 0.0319 +0.1815 -0.06855 0.0322 +0.1733 -0.08175 0.0346 +0.1657 -0.09545 0.037 +0.1419 -0.10165 0.0381 +0.1353 -0.11685 0.0408 +0.118 -0.11005 0.0396 +0.1007 -0.10345 0.0384 +0.0834 -0.09675 0.0372 +0.0834 -0.10015 0.0182 +0.0828 -0.10455 0.0013 +0.0825 -0.10865 -0.0169 +0.0663 -0.10945 -0.0168 +0.0565 -0.09255 -0.0189 +0.0392 -0.09285 -0.0188 +0.0284 -0.07585 -0.0208 +0.0174 -0.05905 -0.0227 +0.0061 -0.04235 -0.0244 +-0.0056 -0.02565 -0.0261 +-0.0056 -0.00605 -0.0293 +0.0059 0.00555 -0.0326 +-0.0025 0.02095 -0.0387 +0.0064 0.03465 -0.046 +0.0162 0.04645 -0.054 +0.0075 0.06325 -0.0688 +0.0125 0.07285 -0.0797 +0.0373 0.08155 -0.092 +0.0543 0.08355 -0.0952 +0.0682 0.08465 -0.0971 +0.0701 0.09075 -0.109 +0.0726 0.09715 -0.1256 +0.0743 0.10145 -0.1436 +0.0937 0.10145 -0.1436 +0.0921 0.10525 -0.1646 +0.1117 0.10635 -0.1713 +0.1324 0.10145 -0.1436 +0.1518 0.10145 -0.1436 +0.1704 0.11485 -0.1511 +0.1867 0.12935 -0.1351 +0.1899 0.13485 -0.1166 +0.2042 0.14665 -0.1022 +0.2042 0.14985 -0.0845 +0.2196 0.16195 -0.0684 +0.24 0.15585 -0.0674 +0.2609 0.15015 -0.0663 +0.2822 0.14455 -0.0653 +0.3037 0.13875 -0.0643 +0.3251 0.13315 -0.0633 +0.3462 0.12815 -0.0625 +0.3461 0.13145 -0.0435 +0.3458 0.13495 -0.0233 +0.3458 0.13825 -0.0042 +0.3337 0.11525 -0.0002 +0.3235 0.09195 0.0039 +0.3151 0.06855 0.0081 +0.3227 0.05185 0.011 +0.3302 0.03505 0.014 +0.3185 0.03295 0.0343 +0.3069 0.03025 0.0548 +0.2943 0.02285 0.0561 +0.282 0.01495 0.0575 +0.2701 0.00635 0.059 +0.2588 -0.00255 0.0606 +0.2483 -0.01165 0.0621 +0.239 -0.02045 0.0637 +0.2295 -0.03025 0.0654 +0.2201 -0.04085 0.0673 +0.211 -0.05205 0.0693 +0.2038 -0.06515 0.0516 +0.1969 -0.07875 0.0341 +0.1891 -0.09125 0.0362 +0.182 -0.10415 0.0385 +0.1587 -0.10945 0.0395 +0.1525 -0.12375 0.042 +0.1294 -0.13225 0.0435 +0.1119 -0.12625 0.0424 +0.0943 -0.12045 0.0414 +0.0766 -0.11465 0.0404 +0.0766 -0.11795 0.0213 +0.0762 -0.12235 0.0033 +0.0759 -0.12645 -0.0146 +0.0601 -0.12705 -0.0145 +0.0497 -0.10985 -0.0167 +0.0327 -0.11015 -0.0167 +0.0217 -0.09305 -0.0188 +0.0105 -0.07595 -0.0208 +-0.0009 -0.05915 -0.0226 +-0.0125 -0.04235 -0.0244 +-0.0245 -0.02565 -0.0261 +-0.0245 -0.00645 -0.0292 +-0.0233 0.00845 -0.0336 +-0.0058 0.00675 -0.033 +-0.0179 0.02615 -0.0413 +-0.0092 0.04275 -0.0513 +0.0004 0.05475 -0.0607 +-0.0028 0.06575 -0.0714 +-0.0047 0.07275 -0.0796 +-0.0052 0.08145 -0.0919 +0.0148 0.08175 -0.0924 +0.0355 0.08975 -0.1069 +0.0549 0.09095 -0.1095 +0.0549 0.09685 -0.1248 +0.0549 0.10145 -0.1436 +0.0565 0.10505 -0.1639 +0.0759 0.10515 -0.1644 +0.0893 0.10735 -0.1766 +0.0987 0.10885 -0.1853 +0.1293 0.11045 -0.1945 +0.1404 0.10535 -0.1653 +0.1594 0.10455 -0.1611 +0.1801 0.11875 -0.1693 +0.1957 0.13095 -0.1607 +0.2083 0.14315 -0.1369 +0.2059 0.14485 -0.1186 +0.2197 0.15575 -0.1038 +0.2197 0.15885 -0.0861 +0.2354 0.17045 -0.0699 +0.2561 0.16385 -0.0688 +0.2774 0.15755 -0.0676 +0.2992 0.15135 -0.0666 +0.3212 0.14495 -0.0654 +0.3431 0.13875 -0.0643 +0.3648 0.13305 -0.0633 +0.3647 0.13635 -0.0444 +0.3645 0.13985 -0.0242 +0.3645 0.14325 -0.0051 +0.3512 0.12075 -0.0011 +0.3399 0.09795 0.0029 +0.3304 0.07495 0.0069 +0.3372 0.05795 0.0099 +0.3439 0.04085 0.013 +0.3318 0.03925 0.0332 +0.3198 0.03705 0.0536 +0.3077 0.03405 0.074 +0.2951 0.02685 0.0753 +0.2829 0.01895 0.0767 +0.271 0.01045 0.0782 +0.2596 0.00145 0.0798 +0.2487 -0.00785 0.0814 +0.2385 -0.01755 0.0831 +0.2287 -0.02765 0.0849 +0.2192 -0.03845 0.0868 +0.2102 -0.04975 0.0888 +0.2024 -0.06365 0.0713 +0.1957 -0.07715 0.0537 +0.1881 -0.08965 0.0559 +0.1811 -0.10245 0.0582 +0.1755 -0.11735 0.0409 +0.1696 -0.13085 0.0432 +0.147 -0.13835 0.0445 +0.1243 -0.14785 0.0462 +0.1065 -0.14275 0.0453 +0.0886 -0.13775 0.0444 +0.0707 -0.13275 0.0436 +0.0707 -0.13605 0.0245 +0.07 -0.14185 0.0066 +0.0702 -0.14445 -0.0122 +0.0546 -0.14505 -0.0121 +0.0437 -0.12755 -0.0145 +0.0269 -0.12775 -0.0144 +0.0155 -0.11035 -0.0167 +0.004 -0.09315 -0.0188 +-0.0075 -0.07605 -0.0208 +-0.0192 -0.05915 -0.0226 +-0.0312 -0.04235 -0.0244 +-0.0435 -0.02565 -0.0261 +-0.0435 -0.00665 -0.0292 +-0.0439 0.00985 -0.0341 +-0.0403 0.03355 -0.0454 +-0.0258 0.04765 -0.0549 +-0.0115 0.06035 -0.0659 +-0.0231 0.06825 -0.0742 +-0.0233 0.08105 -0.0912 +-0.0227 0.09005 -0.1076 +-0.0033 0.08995 -0.1072 +0.0161 0.08985 -0.107 +0.0356 0.09685 -0.1248 +0.0356 0.10145 -0.1436 +0.0341 0.10485 -0.1625 +0.0527 0.10925 -0.1877 +0.078 0.10795 -0.1803 +0.0868 0.11055 -0.1949 +0.0958 0.11325 -0.2099 +0.1112 0.11195 -0.2031 +0.1226 0.11505 -0.2203 +0.1403 0.11335 -0.2109 +0.1498 0.10895 -0.1857 +0.167 0.10755 -0.178 +0.1879 0.12125 -0.1859 +0.202 0.13205 -0.1774 +0.2117 0.14175 -0.1564 +0.2221 0.15125 -0.1374 +0.221 0.15355 -0.1207 +0.2354 0.16415 -0.1053 +0.2354 0.16725 -0.0876 +0.2515 0.17825 -0.0713 +0.2725 0.17115 -0.07 +0.2941 0.16435 -0.0688 +0.3164 0.15755 -0.0676 +0.3388 0.15055 -0.0664 +0.3612 0.14365 -0.0652 +0.3836 0.13705 -0.064 +0.3836 0.14035 -0.0451 +0.3834 0.14395 -0.0249 +0.3834 0.14725 -0.0058 +0.369 0.12545 -0.002 +0.3565 0.10325 0.002 +0.346 0.08065 0.0059 +0.3519 0.06335 0.009 +0.3578 0.04595 0.012 +0.3454 0.04485 0.0322 +0.333 0.04315 0.0525 +0.3206 0.04075 0.0729 +0.308 0.03765 0.0934 +0.2954 0.03045 0.0947 +0.2832 0.02255 0.096 +0.2714 0.01415 0.0975 +0.2599 0.00515 0.0991 +0.2489 -0.00425 0.1008 +0.2385 -0.01415 0.1025 +0.2285 -0.02445 0.1043 +0.219 -0.03535 0.1063 +0.2099 -0.04665 0.1082 +0.2017 -0.06145 0.0909 +0.1944 -0.07575 0.0734 +0.187 -0.08815 0.0756 +0.1802 -0.10085 0.0779 +0.1748 -0.11555 0.0605 +0.1691 -0.12885 0.0629 +0.1644 -0.14465 0.0457 +0.1421 -0.15315 0.0472 +0.12 -0.16383 0.0491 +0.1019 -0.15951 0.0483 +0.0838 -0.15525 0.0475 +0.0657 -0.15115 0.0468 +0.0657 -0.15445 0.0277 +0.0652 -0.15992 0.0091 +0.0654 -0.16264 -0.0097 +0.0498 -0.16313 -0.0096 +0.0383 -0.14535 -0.0121 +0.0217 -0.14565 -0.0121 +0.0099 -0.12795 -0.0144 +-0.0019 -0.11045 -0.0167 +-0.0137 -0.09325 -0.0188 +-0.0256 -0.07615 -0.0208 +-0.0376 -0.05915 -0.0226 +-0.0498 -0.04235 -0.0244 +-0.0624 -0.02565 -0.0261 +-0.0624 -0.00685 -0.0292 +-0.0637 0.00985 -0.0341 +-0.0606 0.03115 -0.044 +-0.047 0.04285 -0.0514 +-0.04 0.05155 -0.058 +-0.048 0.07045 -0.0767 +-0.0447 0.08185 -0.0925 +-0.0422 0.09035 -0.1082 +-0.0226 0.09695 -0.125 +-0.0032 0.09695 -0.1249 +0.0162 0.09685 -0.1248 +0.0162 0.10145 -0.1436 +0.015 0.10485 -0.1629 +0.0293 0.10845 -0.1832 +0.0374 0.11245 -0.2054 +0.067 0.11225 -0.2045 +0.0771 0.11525 -0.2215 +0.105 0.11685 -0.2308 +0.1312 0.11815 -0.2381 +0.1487 0.11645 -0.2283 +0.1661 0.11495 -0.2196 +0.1578 0.11195 -0.2027 +0.1749 0.11055 -0.1947 +0.196 0.12385 -0.2023 +0.2098 0.13395 -0.1937 +0.2169 0.14205 -0.1723 +0.2252 0.14995 -0.1542 +0.2369 0.15905 -0.1387 +0.2355 0.16105 -0.123 +0.2515 0.16895 -0.1243 +0.2515 0.17205 -0.1067 +0.2515 0.17515 -0.089 +0.2679 0.18555 -0.0726 +0.289 0.17795 -0.0713 +0.3108 0.17065 -0.07 +0.3332 0.16345 -0.0687 +0.3559 0.15585 -0.0673 +0.3791 0.14795 -0.0659 +0.4025 0.14015 -0.0646 +0.4025 0.14355 -0.0456 +0.4025 0.14705 -0.0255 +0.4025 0.15045 -0.0064 +0.387 0.12935 -0.0026 +0.3735 0.10765 0.0012 +0.3778 0.08985 0.0043 +0.3618 0.08565 0.0051 +0.3669 0.06805 0.0082 +0.372 0.05045 0.0113 +0.3592 0.04985 0.0313 +0.3465 0.04875 0.0515 +0.3337 0.04685 0.0718 +0.3208 0.04435 0.0922 +0.3208 0.04775 0.1116 +0.308 0.04105 0.1128 +0.2954 0.03385 0.114 +0.2832 0.02595 0.1154 +0.2714 0.01765 0.1169 +0.26 0.00865 0.1185 +0.249 -0.00075 0.1201 +0.2385 -0.01065 0.1219 +0.2285 -0.02105 0.1237 +0.219 -0.03185 0.1256 +0.21 -0.04315 0.1276 +0.2015 -0.05485 0.1296 +0.2014 -0.05835 0.1103 +0.1937 -0.07345 0.093 +0.1864 -0.08585 0.0952 +0.1797 -0.09845 0.0974 +0.174 -0.11385 0.0802 +0.1684 -0.12715 0.0825 +0.164 -0.14255 0.0653 +0.1599 -0.15858 0.0481 +0.1381 -0.16822 0.0498 +0.1165 -0.17977 0.0519 +0.0982 -0.17626 0.0512 +0.0799 -0.17292 0.0507 +0.0616 -0.1697 0.0501 +0.0616 -0.17304 0.031 +0.0613 -0.17819 0.0118 +0.0614 -0.18101 -0.007 +0.0458 -0.18142 -0.0069 +0.0336 -0.16343 -0.0095 +0.017 -0.16364 -0.0095 +0.0048 -0.14575 -0.012 +-0.0074 -0.12805 -0.0144 +-0.0195 -0.11055 -0.0167 +-0.0315 -0.09325 -0.0188 +-0.0437 -0.07615 -0.0208 +-0.056 -0.05925 -0.0226 +-0.0685 -0.04245 -0.0244 +-0.0814 -0.02565 -0.0261 +-0.0814 -0.00685 -0.0291 +-0.0817 0.01025 -0.0343 +-0.0808 0.03045 -0.0436 +-0.08 0.04295 -0.0515 +-0.0591 0.04305 -0.0515 +-0.0561 0.05465 -0.0606 +-0.0701 0.07305 -0.08 +-0.0645 0.08305 -0.0945 +-0.0609 0.09075 -0.109 +-0.0419 0.09695 -0.1252 +-0.0226 0.10145 -0.1436 +-0.0032 0.10145 -0.1436 +-0.0049 0.10485 -0.1629 +0.0136 0.10815 -0.1813 +0.0241 0.11125 -0.1986 +0.0204 0.11295 -0.2085 +0.0267 0.11425 -0.216 +0.0492 0.11455 -0.2176 +0.059 0.11745 -0.234 +0.0873 0.11885 -0.2418 +0.1137 0.12005 -0.249 +0.1401 0.12135 -0.2559 +0.1574 0.11945 -0.2456 +0.1747 0.11785 -0.2364 +0.1916 0.11635 -0.2279 +0.1831 0.11345 -0.2114 +0.2044 0.12635 -0.2185 +0.218 0.13605 -0.2098 +0.2234 0.14335 -0.186 +0.2293 0.14975 -0.168 +0.2382 0.15725 -0.1528 +0.2511 0.16385 -0.1516 +0.2511 0.16605 -0.1394 +0.268 0.17395 -0.1387 +0.2679 0.17625 -0.1255 +0.2679 0.17935 -0.1079 +0.2679 0.18245 -0.0903 +0.2845 0.19225 -0.0738 +0.3054 0.18435 -0.0724 +0.3269 0.17685 -0.071 +0.3491 0.16925 -0.0697 +0.3723 0.16105 -0.0683 +0.3965 0.15195 -0.0667 +0.4216 0.14245 -0.065 +0.4216 0.14575 -0.0461 +0.4216 0.14935 -0.0259 +0.4216 0.15265 -0.0068 +0.4051 0.13235 -0.0032 +0.3906 0.11135 0.0005 +0.3941 0.09335 0.0037 +0.3976 0.07535 0.0069 +0.3822 0.07205 0.0074 +0.3865 0.05425 0.0106 +0.3733 0.05425 0.0306 +0.3603 0.05365 0.0506 +0.3472 0.05235 0.0708 +0.3339 0.05035 0.0911 +0.3339 0.05375 0.1105 +0.3338 0.05715 0.1299 +0.3207 0.05115 0.1309 +0.3079 0.04445 0.1321 +0.2954 0.03725 0.1334 +0.2832 0.02935 0.1348 +0.2714 0.02105 0.1362 +0.26 0.01205 0.1378 +0.2491 0.00265 0.1395 +0.2386 -0.00715 0.1412 +0.2286 -0.01755 0.1431 +0.2191 -0.02835 0.145 +0.2101 -0.03965 0.147 +0.2016 -0.05125 0.149 +0.1937 -0.06335 0.1511 +0.1936 -0.06685 0.1318 +0.1935 -0.07035 0.1124 +0.1862 -0.08275 0.1146 +0.1795 -0.09535 0.1168 +0.1735 -0.11145 0.0997 +0.168 -0.12475 0.102 +0.1634 -0.14075 0.0849 +0.1596 -0.15635 0.0677 +0.1561 -0.17274 0.0506 +0.1347 -0.18339 0.0525 +0.1137 -0.19622 0.0548 +0.0952 -0.19358 0.0543 +0.0768 -0.19097 0.0538 +0.0584 -0.18841 0.0534 +0.0584 -0.19175 0.0344 +0.0582 -0.19659 0.0147 +0.0583 -0.19953 -0.0041 +0.0424 -0.19985 -0.0041 +0.0295 -0.18168 -0.0069 +0.0129 -0.18185 -0.0068 +0.0002 -0.1638 -0.0095 +-0.0123 -0.14585 -0.012 +-0.0247 -0.12815 -0.0144 +-0.037 -0.11065 -0.0167 +-0.0494 -0.09335 -0.0188 +-0.0618 -0.07625 -0.0208 +-0.0743 -0.05925 -0.0226 +-0.0871 -0.04245 -0.0244 +-0.1003 -0.02565 -0.0261 +-0.1003 -0.00695 -0.0291 +-0.1004 0.01055 -0.0344 +-0.1001 0.02845 -0.0425 +-0.1004 0.04265 -0.0512 +-0.0794 0.05635 -0.0621 +-0.0893 0.07535 -0.083 +-0.0841 0.08415 -0.0962 +-0.0813 0.09125 -0.1101 +-0.0613 0.09715 -0.1255 +-0.0419 0.10145 -0.1436 +-0.0235 0.10535 -0.1656 +-0.0062 0.10815 -0.1813 +0.0113 0.11075 -0.1959 +0.0109 0.11335 -0.2107 +0.017 0.11565 -0.2238 +0.0357 0.11675 -0.2299 +0.0442 0.11965 -0.2465 +0.07 0.12085 -0.2535 +0.0964 0.12215 -0.2607 +0.1229 0.12335 -0.2673 +0.1495 0.12445 -0.2736 +0.1665 0.12255 -0.2627 +0.1837 0.12085 -0.2531 +0.2004 0.11925 -0.2442 +0.2131 0.12885 -0.2345 +0.2265 0.13815 -0.2256 +0.2315 0.14505 -0.2018 +0.2349 0.15065 -0.1806 +0.2413 0.15675 -0.1645 +0.2493 0.16125 -0.1617 +0.2571 0.16375 -0.1688 +0.2683 0.17135 -0.1542 +0.2835 0.17905 -0.1461 +0.2834 0.18075 -0.1367 +0.2845 0.18315 -0.1249 +0.2846 0.18595 -0.1091 +0.2846 0.18915 -0.0915 +0.3014 0.19835 -0.0748 +0.3214 0.19045 -0.0734 +0.3421 0.18305 -0.0721 +0.364 0.17545 -0.0708 +0.3874 0.16675 -0.0693 +0.4129 0.15625 -0.0674 +0.4408 0.14375 -0.0652 +0.4407 0.14715 -0.0462 +0.4409 0.15065 -0.0263 +0.4409 0.15405 -0.007 +0.4234 0.13445 -0.0036 +0.4078 0.11415 0 +0.4105 0.09605 0.0032 +0.4131 0.07795 0.0064 +0.4157 0.05985 0.0096 +0.401 0.05735 0.01 +0.3876 0.05795 0.0299 +0.3743 0.05795 0.0499 +0.3609 0.05725 0.07 +0.3473 0.05585 0.0902 +0.3473 0.05925 0.1096 +0.3472 0.06265 0.1289 +0.3471 0.06605 0.1483 +0.3338 0.06055 0.1493 +0.3207 0.05445 0.1503 +0.3078 0.04785 0.1515 +0.2953 0.04055 0.1528 +0.2832 0.03275 0.1542 +0.2714 0.02445 0.1556 +0.26 0.01555 0.1572 +0.2491 0.00615 0.1588 +0.2387 -0.00375 0.1606 +0.2287 -0.01405 0.1624 +0.2191 -0.02485 0.1643 +0.2102 -0.03605 0.1663 +0.2017 -0.04775 0.1683 +0.1938 -0.05975 0.1705 +0.1865 -0.07205 0.1726 +0.1864 -0.07565 0.1533 +0.1863 -0.07925 0.134 +0.1796 -0.09185 0.1362 +0.1735 -0.10475 0.1385 +0.1734 -0.10835 0.1191 +0.1679 -0.12155 0.1215 +0.1631 -0.13825 0.1044 +0.1591 -0.15445 0.0873 +0.1558 -0.17034 0.0702 +0.1529 -0.18707 0.0532 +0.132 -0.19888 0.0552 +0.1117 -0.21255 0.0576 +0.0932 -0.21078 0.0573 +0.0747 -0.20903 0.057 +0.0562 -0.20729 0.0567 +0.0562 -0.21061 0.0377 +0.0561 -0.21507 0.0178 +0.0561 -0.21815 -0.0012 +0.0397 -0.21839 -0.0011 +0.026 -0.20005 -0.0041 +0.0091 -0.20019 -0.004 +-0.0041 -0.18197 -0.0068 +-0.0169 -0.1639 -0.0095 +-0.0295 -0.14595 -0.012 +-0.0421 -0.12825 -0.0144 +-0.0547 -0.11065 -0.0166 +-0.0672 -0.09335 -0.0188 +-0.0799 -0.07625 -0.0208 +-0.0927 -0.05925 -0.0226 +-0.1058 -0.04245 -0.0244 +-0.1193 -0.02565 -0.0261 +-0.1193 -0.00695 -0.0291 +-0.1193 0.01085 -0.0345 +-0.1191 0.02845 -0.0425 +-0.1181 0.04235 -0.051 +-0.1171 0.05215 -0.0584 +-0.1027 0.05785 -0.0635 +-0.1173 0.06825 -0.0742 +-0.1069 0.07905 -0.0881 +-0.1017 0.08585 -0.0993 +-0.0986 0.09145 -0.1106 +-0.0807 0.09725 -0.1261 +-0.0613 0.10145 -0.1436 +-0.0641 0.10485 -0.1625 +-0.047 0.10605 -0.1692 +-0.0383 0.10885 -0.1854 +-0.0245 0.10845 -0.183 +-0.0076 0.11045 -0.1946 +-0.0093 0.11425 -0.2158 +0.0028 0.11775 -0.236 +0.0253 0.11835 -0.2389 +0.0339 0.12105 -0.2547 +0.039 0.12285 -0.2646 +0.0515 0.12295 -0.2652 +0.0692 0.12625 -0.2838 +0.0823 0.12425 -0.2727 +0.106 0.12545 -0.2792 +0.1326 0.12655 -0.2855 +0.1593 0.12755 -0.2912 +0.176 0.12555 -0.2798 +0.193 0.12375 -0.2696 +0.2095 0.12205 -0.2603 +0.2222 0.13135 -0.2504 +0.2355 0.14025 -0.2411 +0.2399 0.14675 -0.2173 +0.2442 0.15275 -0.1953 +0.2466 0.15755 -0.1752 +0.2554 0.15945 -0.1886 +0.2672 0.16625 -0.1802 +0.282 0.17495 -0.1661 +0.2933 0.18175 -0.152 +0.2967 0.18515 -0.1401 +0.299 0.18845 -0.1258 +0.3014 0.19205 -0.1101 +0.3014 0.19515 -0.0925 +0.3186 0.20065 -0.0935 +0.3186 0.20375 -0.0758 +0.337 0.19625 -0.0745 +0.3564 0.18945 -0.0733 +0.3773 0.18235 -0.072 +0.4003 0.17395 -0.0705 +0.4268 0.16245 -0.0685 +0.4603 0.14425 -0.0653 +0.4603 0.14765 -0.0459 +0.4603 0.15105 -0.0265 +0.4603 0.15445 -0.0071 +0.4418 0.13575 -0.0038 +0.4252 0.11625 -0.0003 +0.427 0.09805 0.0029 +0.4288 0.07975 0.0061 +0.4305 0.06155 0.0093 +0.4166 0.06335 0.029 +0.4021 0.06095 0.0294 +0.3886 0.06155 0.0492 +0.3749 0.06155 0.0692 +0.3611 0.06075 0.0893 +0.361 0.06415 0.1087 +0.3609 0.06745 0.128 +0.3608 0.07085 0.1474 +0.3608 0.07425 0.1668 +0.3472 0.06945 0.1677 +0.3338 0.06395 0.1686 +0.3207 0.05795 0.1697 +0.3079 0.05125 0.1708 +0.2954 0.04405 0.1721 +0.2833 0.03625 0.1735 +0.2716 0.02795 0.175 +0.2602 0.01915 0.1765 +0.2493 0.00975 0.1782 +0.2389 -5e-005 0.1799 +0.2289 -0.01035 0.1817 +0.2194 -0.02115 0.1836 +0.2104 -0.03235 0.1856 +0.202 -0.04385 0.1876 +0.1941 -0.05585 0.1897 +0.1868 -0.06815 0.1919 +0.18 -0.08075 0.1941 +0.1797 -0.08465 0.1749 +0.1796 -0.08825 0.1555 +0.1735 -0.10115 0.1578 +0.1681 -0.11435 0.1601 +0.168 -0.11795 0.1408 +0.1631 -0.13145 0.1432 +0.163 -0.13505 0.1238 +0.1589 -0.15185 0.1069 +0.1555 -0.16831 0.0898 +0.1527 -0.18446 0.0726 +0.1504 -0.20156 0.0557 +0.1302 -0.21434 0.058 +0.1105 -0.22895 0.0605 +0.0919 -0.22805 0.0604 +0.0733 -0.22715 0.0602 +0.0548 -0.22622 0.06 +0.0548 -0.22958 0.0409 +0.0548 -0.23361 0.0211 +0.0548 -0.23686 0.002 +0.0376 -0.23696 0.002 +0.0228 -0.21852 -0.0011 +0.0056 -0.21861 -0.0011 +-0.008 -0.20028 -0.004 +-0.0212 -0.18206 -0.0068 +-0.034 -0.16397 -0.0095 +-0.0468 -0.14605 -0.012 +-0.0595 -0.12825 -0.0144 +-0.0723 -0.11075 -0.0166 +-0.0851 -0.09345 -0.0187 +-0.098 -0.07625 -0.0208 +-0.1111 -0.05935 -0.0226 +-0.1244 -0.04245 -0.0244 +-0.1382 -0.02565 -0.0261 +-0.1382 -0.00695 -0.0291 +-0.1382 0.01095 -0.0345 +-0.1381 0.02845 -0.0425 +-0.1348 0.04635 -0.0539 +-0.1272 0.05785 -0.0635 +-0.1414 0.06525 -0.0709 +-0.1289 0.07535 -0.0829 +-0.1198 0.08285 -0.0941 +-0.1158 0.08775 -0.1028 +-0.1148 0.09215 -0.1122 +-0.0989 0.09745 -0.1266 +-0.0807 0.10145 -0.1436 +-0.0799 0.10475 -0.162 +-0.0666 0.10675 -0.1735 +-0.0587 0.10805 -0.1806 +-0.0487 0.10995 -0.1916 +-0.0349 0.11025 -0.1934 +-0.0258 0.11055 -0.1947 +-0.0297 0.11275 -0.2073 +-0.0256 0.11765 -0.2353 +-0.0122 0.12015 -0.2494 +0.0123 0.12045 -0.2513 +0.0238 0.12265 -0.2635 +0.033 0.12425 -0.2728 +0.0427 0.12585 -0.2814 +0.0588 0.12855 -0.2968 +0.0811 0.12875 -0.2982 +0.0921 0.12725 -0.2896 +0.0988 0.12955 -0.3025 +0.1164 0.12815 -0.2949 +0.1263 0.13105 -0.311 +0.1427 0.12965 -0.3034 +0.1695 0.13065 -0.3087 +0.186 0.12845 -0.2967 +0.2026 0.12655 -0.2859 +0.219 0.12495 -0.2763 +0.2317 0.13385 -0.266 +0.2449 0.14235 -0.2565 +0.2488 0.14855 -0.2325 +0.2538 0.15475 -0.2111 +0.2672 0.16205 -0.2041 +0.279 0.16875 -0.1943 +0.2956 0.17815 -0.1774 +0.3069 0.18545 -0.1582 +0.3115 0.18975 -0.1423 +0.3141 0.19335 -0.1269 +0.3168 0.19705 -0.1106 +0.3356 0.20235 -0.1119 +0.3358 0.20545 -0.0943 +0.3358 0.20855 -0.0766 +0.3517 0.20205 -0.0755 +0.369 0.19635 -0.0745 +0.3882 0.19065 -0.0735 +0.4097 0.18395 -0.0723 +0.4336 0.17535 -0.0708 +0.4603 0.16435 -0.0688 +0.4603 0.16705 -0.0493 +0.4603 0.17005 -0.0299 +0.4603 0.17285 -0.0138 +0.4603 0.17635 0.0011 +0.4603 0.15885 0.0093 +0.4603 0.13615 -0.0039 +0.4427 0.11745 -0.0006 +0.4436 0.09915 0.0027 +0.4445 0.08085 0.0059 +0.4454 0.06265 0.0091 +0.4311 0.06505 0.0286 +0.4172 0.06685 0.0483 +0.4029 0.06455 0.0487 +0.389 0.06515 0.0686 +0.375 0.06495 0.0886 +0.3749 0.06835 0.1079 +0.3748 0.07175 0.1273 +0.3747 0.07515 0.1467 +0.3746 0.07855 0.1661 +0.3692 0.09585 0.163 +0.3545 0.09135 0.1638 +0.3402 0.08625 0.1647 +0.326 0.08045 0.1657 +0.3121 0.07395 0.1669 +0.2985 0.06695 0.1681 +0.2853 0.05925 0.1694 +0.2725 0.05095 0.1709 +0.2601 0.04215 0.1725 +0.2481 0.03275 0.1741 +0.2365 0.02285 0.1759 +0.2255 0.01235 0.1777 +0.2149 0.00145 0.1796 +0.2049 -0.00995 0.1817 +0.1954 -0.02185 0.1837 +0.1865 -0.03405 0.1859 +0.1781 -0.04675 0.1881 +0.1704 -0.05975 0.1904 +0.1633 -0.07305 0.1928 +0.1739 -0.09365 0.1964 +0.1736 -0.09755 0.1771 +0.1681 -0.11075 0.1795 +0.1632 -0.12425 0.1818 +0.1632 -0.12785 0.1625 +0.1589 -0.14145 0.1649 +0.1588 -0.14515 0.1456 +0.1588 -0.14865 0.1262 +0.1553 -0.1657 0.1093 +0.1525 -0.18226 0.0922 +0.1504 -0.19863 0.0752 +0.1487 -0.21612 0.0583 +0.129 -0.22985 0.0607 +0.1101 -0.24528 0.0634 +0.0915 -0.24528 0.0634 +0.0729 -0.24528 0.0634 +0.0543 -0.24528 0.0634 +0.0543 -0.248714 0.044 +0.0543 -0.252132 0.0246 +0.0543 -0.25555 0.0052 +0.0359 -0.25555 0.0052 +0.0201 -0.23703 0.002 +0.0023 -0.23707 0.002 +-0.0119 -0.21867 -0.0011 +-0.0253 -0.20034 -0.004 +-0.0384 -0.18212 -0.0068 +-0.0513 -0.16403 -0.0095 +-0.0641 -0.14605 -0.012 +-0.077 -0.12835 -0.0144 +-0.0899 -0.11075 -0.0166 +-0.103 -0.09345 -0.0187 +-0.1161 -0.07635 -0.0208 +-0.1295 -0.05935 -0.0226 +-0.1431 -0.04245 -0.0244 +-0.1572 -0.02565 -0.0261 +-0.1572 -0.00695 -0.0291 +-0.1572 0.01105 -0.0346 +-0.1571 0.02845 -0.0425 +-0.1561 0.05125 -0.0578 +-0.1696 0.06615 -0.0719 +-0.1534 0.07355 -0.0806 +-0.1397 0.08155 -0.092 +-0.1294 0.08625 -0.1 +-0.1238 0.08855 -0.1045 +-0.1263 0.09175 -0.1111 +-0.1164 0.09755 -0.1271 +-0.1001 0.10145 -0.1436 +-0.1042 0.10525 -0.165 +-0.0913 0.10845 -0.1828 +-0.0761 0.10735 -0.1765 +-0.0697 0.10915 -0.1871 +-0.0602 0.11125 -0.1985 +-0.0493 0.11325 -0.2102 +-0.0407 0.11155 -0.2004 +-0.0398 0.11505 -0.2202 +-0.0504 0.11725 -0.2328 +-0.0372 0.11985 -0.2474 +-0.0255 0.12215 -0.2609 +-0.0007 0.12245 -0.2622 +0.0112 0.12465 -0.2747 +0.0233 0.12675 -0.2868 +0.0336 0.12835 -0.2961 +0.0486 0.13085 -0.31 +0.0717 0.13055 -0.3084 +0.0878 0.13005 -0.3056 +0.0841 0.13185 -0.3158 +0.1017 0.13265 -0.3203 +0.1205 0.13625 -0.3408 +0.1388 0.13435 -0.3296 +0.1535 0.13275 -0.321 +0.1803 0.13365 -0.3259 +0.1964 0.13145 -0.3134 +0.2127 0.12945 -0.3021 +0.2288 0.12765 -0.2921 +0.2414 0.13625 -0.2813 +0.2545 0.14435 -0.2715 +0.2581 0.15025 -0.2476 +0.2626 0.15625 -0.2255 +0.2763 0.16355 -0.2179 +0.2919 0.17135 -0.2082 +0.3154 0.18225 -0.1924 +0.326 0.19045 -0.1639 +0.3313 0.19525 -0.1455 +0.3337 0.19895 -0.1283 +0.3523 0.20325 -0.13 +0.3529 0.20655 -0.1126 +0.3532 0.20965 -0.095 +0.3533 0.21275 -0.0774 +0.3646 0.20735 -0.0764 +0.3792 0.20375 -0.0758 +0.3966 0.20015 -0.0752 +0.4162 0.19595 -0.0744 +0.4376 0.19075 -0.0735 +0.4603 0.18435 -0.0724 +0.4603 0.18605 -0.0507 +0.4603 0.18605 -0.0312 +0.4603 0.18405 -0.0178 +0.4603 0.19475 -0.0091 +0.4603 0.20045 0.0156 +0.4603 0.18125 0.02 +0.4603 0.16265 0.0267 +0.4603 0.13945 0.0146 +0.4603 0.11785 -0.0006 +0.4603 0.09955 0.0026 +0.4603 0.08125 0.0058 +0.4603 0.06295 0.009 +0.4457 0.06605 0.0285 +0.4316 0.06845 0.048 +0.4176 0.07035 0.0677 +0.4033 0.06805 0.0681 +0.3891 0.06855 0.0879 +0.389 0.07195 0.1073 +0.3889 0.07535 0.1267 +0.3887 0.07865 0.1461 +0.3885 0.08205 0.1654 +0.3841 0.09965 0.1623 +0.3796 0.11735 0.1592 +0.364 0.11325 0.1599 +0.3485 0.10855 0.1607 +0.3333 0.10305 0.1617 +0.3182 0.09695 0.1628 +0.3036 0.09005 0.164 +0.2893 0.08265 0.1653 +0.2753 0.07445 0.1668 +0.2618 0.06575 0.1683 +0.2487 0.05645 0.1699 +0.236 0.04645 0.1717 +0.2238 0.03595 0.1735 +0.2122 0.02495 0.1755 +0.2011 0.01345 0.1775 +0.1905 0.00135 0.1797 +0.1805 -0.01115 0.1819 +0.1711 -0.02415 0.1841 +0.1623 -0.03745 0.1865 +0.1541 -0.05125 0.1889 +0.1466 -0.06525 0.1914 +0.1568 -0.08675 0.1952 +0.1683 -0.10675 0.1987 +0.1634 -0.12015 0.2011 +0.1592 -0.13375 0.2035 +0.159 -0.13785 0.1842 +0.1554 -0.15165 0.1867 +0.1553 -0.15525 0.1674 +0.1553 -0.15893 0.148 +0.1552 -0.16247 0.1287 +0.1524 -0.17956 0.1117 +0.1502 -0.19624 0.0947 +0.1487 -0.2129 0.0777 +0.1476 -0.23077 0.0608 +0.1287 -0.24528 0.0634 +0.1101 -0.242 0.082 +0.0915 -0.24203 0.0819 +0.0729 -0.24202 0.082 +0.0543 -0.24197 0.0822 +0.035 -0.24528 0.0634 +0.0353 -0.248714 0.044 +0.0359 -0.2523 0.0236 +0.0176 -0.252361 0.0233 +0.0176 -0.25555 0.0052 +-0.0008 -0.25555 0.0052 +-0.0156 -0.2371 0.002 +-0.0294 -0.21871 -0.0011 +-0.0427 -0.2004 -0.004 +-0.0557 -0.18217 -0.0068 +-0.0685 -0.16407 -0.0095 +-0.0814 -0.14615 -0.012 +-0.0944 -0.12835 -0.0144 +-0.1076 -0.11085 -0.0166 +-0.1208 -0.09345 -0.0187 +-0.1342 -0.07635 -0.0208 +-0.1478 -0.05935 -0.0226 +-0.1618 -0.04245 -0.0244 +-0.1761 -0.02565 -0.0261 +-0.1761 -0.00695 -0.0291 +-0.1761 0.01105 -0.0346 +-0.1761 0.02845 -0.0425 +-0.18 0.04425 -0.0524 +-0.1878 0.05815 -0.0638 +-0.1965 0.06915 -0.0753 +-0.1807 0.07605 -0.0839 +-0.165 0.08245 -0.0934 +-0.149 0.08705 -0.1014 +-0.1368 0.09005 -0.1074 +-0.1317 0.09675 -0.1244 +-0.1195 0.10145 -0.1436 +-0.1247 0.10365 -0.156 +-0.1204 0.10765 -0.1784 +-0.1087 0.10985 -0.1909 +-0.0974 0.11215 -0.2038 +-0.083 0.11045 -0.1945 +-0.0725 0.11265 -0.2068 +-0.0607 0.11505 -0.2202 +-0.0742 0.11695 -0.2313 +-0.0626 0.11935 -0.2451 +-0.051 0.12185 -0.2588 +-0.0392 0.12425 -0.2725 +-0.0271 0.12665 -0.286 +-0.0137 0.12445 -0.274 +-0.0015 0.12675 -0.2868 +0.011 0.12895 -0.2992 +0.0238 0.13105 -0.3113 +0.037 0.13315 -0.323 +0.0505 0.13515 -0.3344 +0.0618 0.13285 -0.3211 +0.0751 0.13465 -0.3318 +0.0898 0.13645 -0.3417 +0.106 0.13865 -0.3542 +0.1201 0.14045 -0.3643 +0.1308 0.13865 -0.354 +0.1468 0.13705 -0.3452 +0.1649 0.13545 -0.3361 +0.1769 0.13815 -0.3512 +0.1917 0.13665 -0.3428 +0.2072 0.13435 -0.3299 +0.2233 0.13225 -0.318 +0.2391 0.13045 -0.3076 +0.2516 0.13855 -0.2964 +0.2645 0.14635 -0.2862 +0.2677 0.15195 -0.2623 +0.2718 0.15775 -0.2399 +0.2861 0.16475 -0.2332 +0.3021 0.17215 -0.2245 +0.3215 0.17985 -0.2163 +0.3443 0.19045 -0.192 +0.3479 0.19555 -0.1679 +0.3506 0.19975 -0.1481 +0.3672 0.20285 -0.1505 +0.3695 0.20675 -0.131 +0.3703 0.21005 -0.1132 +0.3707 0.21325 -0.0957 +0.3708 0.21635 -0.078 +0.374 0.21165 -0.0772 +0.3861 0.21125 -0.0771 +0.4025 0.21055 -0.077 +0.4208 0.20925 -0.0768 +0.4403 0.20715 -0.0764 +0.4603 0.20445 -0.0759 +0.4603 0.20295 -0.0523 +0.4603 0.20065 -0.0309 +0.4603 0.21945 -0.0089 +0.4603 0.21865 0.013 +0.4603 0.21825 0.0303 +0.4603 0.20205 0.0327 +0.4603 0.18555 0.0343 +0.4603 0.16895 0.0429 +0.4603 0.14275 0.0331 +0.4603 0.12115 0.0179 +0.4603 0.10285 0.0213 +0.4603 0.08465 0.0248 +0.4603 0.06635 0.0284 +0.4459 0.06945 0.0478 +0.4318 0.07195 0.0674 +0.4318 0.07535 0.0868 +0.4176 0.07375 0.087 +0.4033 0.07145 0.0874 +0.4032 0.07485 0.1068 +0.403 0.07825 0.1262 +0.4029 0.08165 0.1455 +0.4027 0.08505 0.1649 +0.399 0.10285 0.1618 +0.3955 0.12065 0.1586 +0.3921 0.13845 0.1555 +0.3754 0.13495 0.1561 +0.3588 0.13075 0.1568 +0.3425 0.12575 0.1577 +0.3265 0.11995 0.1587 +0.3107 0.11345 0.1599 +0.2953 0.10625 0.1611 +0.2802 0.09845 0.1625 +0.2655 0.08985 0.164 +0.2513 0.08065 0.1657 +0.2375 0.07085 0.1674 +0.2241 0.06035 0.1693 +0.2113 0.04925 0.1712 +0.199 0.03765 0.1733 +0.1873 0.02545 0.1754 +0.1762 0.01285 0.1776 +0.1656 -0.00045 0.18 +0.1557 -0.01405 0.1824 +0.1465 -0.02805 0.1849 +0.1379 -0.04255 0.1874 +0.13 -0.05745 0.19 +0.1398 -0.07975 0.1939 +0.151 -0.10065 0.1976 +0.1458 -0.11475 0.2001 +0.1413 -0.12915 0.2027 +0.1555 -0.14765 0.2059 +0.1526 -0.16157 0.2084 +0.1524 -0.16558 0.1891 +0.1524 -0.16918 0.1698 +0.1524 -0.1728 0.1504 +0.1523 -0.17633 0.1311 +0.1501 -0.19345 0.1142 +0.1486 -0.21023 0.0972 +0.1476 -0.22728 0.0802 +0.1473 -0.24188 0.0828 +0.1473 -0.24528 0.0634 +0.1283 -0.24188 0.0828 +0.128 -0.23846 0.1021 +0.1092 -0.23849 0.1019 +0.0915 -0.23869 0.1008 +0.0731 -0.23867 0.1009 +0.0546 -0.23857 0.1015 +0.0349 -0.24191 0.0826 +0.0153 -0.24198 0.0822 +0.0164 -0.245861 0.0601 +0.0174 -0.24908 0.0419 +-0.0008 -0.249172 0.0414 +-0.0008 -0.252361 0.0233 +-0.0192 -0.252361 0.0233 +-0.0192 -0.25555 0.0052 +-0.0335 -0.23713 0.002 +-0.0471 -0.21875 -0.0011 +-0.0602 -0.20043 -0.004 +-0.073 -0.18222 -0.0068 +-0.0858 -0.1641 -0.0095 +-0.0988 -0.14615 -0.012 +-0.1119 -0.12845 -0.0144 +-0.1252 -0.11085 -0.0166 +-0.1387 -0.09355 -0.0187 +-0.1523 -0.07635 -0.0208 +-0.1662 -0.05935 -0.0226 +-0.1804 -0.04245 -0.0244 +-0.1951 -0.02565 -0.0261 +-0.1951 -0.00695 -0.0291 +-0.1951 0.01115 -0.0346 +-0.1944 0.02735 -0.0419 +-0.1961 0.04025 -0.0496 +-0.2025 0.05045 -0.0571 +-0.2125 0.06185 -0.0674 +-0.2073 0.07875 -0.0877 +-0.1918 0.08455 -0.0969 +-0.1765 0.08975 -0.1069 +-0.1608 0.09325 -0.1147 +-0.1465 0.09565 -0.1212 +-0.1388 0.10145 -0.1436 +-0.1376 0.10275 -0.1509 +-0.1326 0.10555 -0.1664 +-0.1347 0.12425 -0.1652 +-0.1213 0.12685 -0.1784 +-0.1089 0.12875 -0.1915 +-0.0974 0.13005 -0.2046 +-0.0858 0.11455 -0.2176 +-0.0858 0.13215 -0.2183 +-0.0742 0.13425 -0.232 +-0.0626 0.13635 -0.2457 +-0.051 0.13855 -0.2594 +-0.0393 0.14055 -0.273 +-0.0272 0.14265 -0.2865 +-0.0145 0.12895 -0.2991 +-0.0017 0.13115 -0.3119 +0.0115 0.13335 -0.3243 +0.0251 0.13545 -0.3364 +0.039 0.13755 -0.3481 +0.0643 0.13705 -0.3454 +0.0784 0.13895 -0.356 +0.0942 0.14095 -0.3674 +0.1089 0.14265 -0.3772 +0.1224 0.14415 -0.3856 +0.1311 0.14205 -0.3734 +0.1369 0.14035 -0.3641 +0.1534 0.14035 -0.3641 +0.1749 0.14285 -0.3783 +0.1896 0.14075 -0.3664 +0.2039 0.13915 -0.3573 +0.2186 0.13725 -0.3462 +0.2342 0.13505 -0.3337 +0.2498 0.13305 -0.3227 +0.2621 0.14095 -0.3112 +0.2749 0.14835 -0.3006 +0.2776 0.15365 -0.2768 +0.2813 0.15915 -0.2542 +0.2955 0.16585 -0.2469 +0.3091 0.17175 -0.2405 +0.3237 0.17715 -0.2359 +0.3432 0.18285 -0.2333 +0.3441 0.18655 -0.2136 +0.3634 0.19135 -0.2115 +0.3637 0.19485 -0.1921 +0.3643 0.19835 -0.1727 +0.3838 0.20525 -0.154 +0.3869 0.20955 -0.1323 +0.3878 0.21295 -0.114 +0.3883 0.21615 -0.0963 +0.3886 0.21925 -0.0785 +0.4064 0.22155 -0.0789 +0.4243 0.22325 -0.0792 +0.4422 0.22415 -0.0794 +0.4603 0.22455 -0.0794 +0.4603 0.22105 -0.0538 +0.4603 0.22075 -0.0307 +0.4603 0.23675 -0.0114 +0.4603 0.23755 0.0093 +0.4603 0.23715 0.028 +0.4603 0.23675 0.045 +0.4603 0.21785 0.045 +0.4603 0.20225 0.046 +0.4603 0.18955 0.0453 +0.4603 0.17945 0.0596 +0.4603 0.15035 0.0712 +0.4603 0.14635 0.0519 +0.4603 0.12455 0.0366 +0.4603 0.10655 0.0404 +0.4603 0.08895 0.0444 +0.4603 0.06975 0.0478 +0.446 0.07285 0.0672 +0.446 0.07625 0.0866 +0.4459 0.07975 0.1059 +0.4317 0.07875 0.1061 +0.4174 0.07715 0.1064 +0.4173 0.08055 0.1258 +0.4171 0.08395 0.1451 +0.417 0.08735 0.1645 +0.4144 0.10525 0.1613 +0.4118 0.12325 0.1582 +0.4092 0.14125 0.155 +0.3888 0.15635 0.1523 +0.3712 0.15265 0.153 +0.3538 0.14815 0.1538 +0.3367 0.14295 0.1547 +0.3199 0.13695 0.1558 +0.3033 0.13015 0.157 +0.2871 0.12255 0.1583 +0.2712 0.11425 0.1597 +0.2558 0.10535 0.1613 +0.2409 0.09565 0.163 +0.2263 0.08535 0.1649 +0.2123 0.07435 0.1668 +0.1989 0.06265 0.1688 +0.186 0.05045 0.171 +0.1736 0.03775 0.1732 +0.1619 0.02435 0.1756 +0.1509 0.01055 0.1781 +0.1405 -0.00385 0.1806 +0.1307 -0.01865 0.1832 +0.1218 -0.03385 0.1859 +0.1135 -0.04945 0.1886 +0.1228 -0.07265 0.1927 +0.1337 -0.09435 0.1965 +0.1282 -0.10935 0.1992 +0.1235 -0.12455 0.2018 +0.1375 -0.14375 0.2052 +0.1344 -0.15855 0.2079 +0.1502 -0.17561 0.2109 +0.1502 -0.17958 0.1916 +0.1501 -0.18313 0.1723 +0.1501 -0.1867 0.1529 +0.1501 -0.1902 0.1336 +0.1485 -0.2073 0.1166 +0.1476 -0.22428 0.0996 +0.1473 -0.23846 0.1021 +0.1473 -0.23504 0.1215 +0.1278 -0.23504 0.1215 +0.1086 -0.23506 0.1214 +0.0901 -0.23513 0.121 +0.0735 -0.23529 0.1201 +0.0551 -0.23521 0.1206 +0.0352 -0.23523 0.1204 +0.0349 -0.23851 0.1018 +0.0146 -0.23841 0.1024 +-0.0037 -0.23916 0.0981 +-0.0014 -0.24264 0.0784 +-0.0011 -0.245983 0.0595 +-0.0192 -0.249172 0.0414 +-0.0376 -0.249172 0.0414 +-0.0376 -0.252361 0.0233 +-0.0376 -0.25555 0.0052 +-0.0515 -0.23715 0.002 +-0.0648 -0.21878 -0.001 +-0.0777 -0.20046 -0.004 +-0.0904 -0.18225 -0.0068 +-0.1031 -0.16415 -0.0095 +-0.1161 -0.14625 -0.012 +-0.1294 -0.12845 -0.0144 +-0.1429 -0.11085 -0.0166 +-0.1566 -0.09355 -0.0187 +-0.1705 -0.07635 -0.0207 +-0.1846 -0.05935 -0.0226 +-0.1991 -0.04255 -0.0244 +-0.214 -0.02565 -0.0261 +-0.214 -0.00695 -0.0291 +-0.214 0.01115 -0.0346 +-0.2115 0.02715 -0.0418 +-0.2083 0.03735 -0.0477 +-0.2166 0.04435 -0.0525 +-0.2276 0.05535 -0.0613 +-0.223 0.07235 -0.0791 +-0.2332 0.08155 -0.092 +-0.2178 0.08685 -0.1011 +-0.2026 0.09155 -0.1108 +-0.1875 0.09565 -0.1211 +-0.1727 0.09895 -0.132 +-0.1582 0.10145 -0.1436 +-0.1452 0.10345 -0.1547 +-0.1473 0.12155 -0.1538 +-0.1485 0.14115 -0.1535 +-0.1354 0.14405 -0.1653 +-0.1217 0.14675 -0.1788 +-0.1093 0.14845 -0.1918 +-0.0974 0.14795 -0.2053 +-0.0858 0.14975 -0.219 +-0.0742 0.15155 -0.2326 +-0.0626 0.15345 -0.2463 +-0.051 0.15525 -0.26 +-0.0392 0.15695 -0.2737 +-0.027 0.15875 -0.2872 +-0.0146 0.14465 -0.2996 +-0.0016 0.14665 -0.3125 +0.0118 0.14855 -0.3251 +0.0255 0.15045 -0.3373 +0.0396 0.15225 -0.3491 +0.0531 0.13955 -0.3594 +0.0676 0.14145 -0.3703 +0.0824 0.14335 -0.3808 +0.0975 0.14515 -0.391 +0.1129 0.14685 -0.4007 +0.1285 0.14845 -0.41 +0.1377 0.14575 -0.3946 +0.1465 0.14315 -0.3797 +0.1639 0.14505 -0.3904 +0.1772 0.14645 -0.3984 +0.1859 0.14475 -0.3888 +0.1979 0.14335 -0.3811 +0.2151 0.14205 -0.3735 +0.2306 0.14005 -0.3622 +0.2457 0.13775 -0.3491 +0.2609 0.13575 -0.3376 +0.2731 0.14315 -0.3256 +0.2858 0.15025 -0.3148 +0.288 0.15525 -0.2909 +0.2912 0.16055 -0.2682 +0.3052 0.16685 -0.2607 +0.3161 0.17135 -0.2552 +0.3274 0.17525 -0.2525 +0.3422 0.17935 -0.2519 +0.3624 0.18425 -0.2508 +0.3629 0.18785 -0.231 +0.3828 0.19155 -0.2307 +0.383 0.19495 -0.2116 +0.3831 0.19835 -0.1926 +0.3832 0.20175 -0.1734 +0.4024 0.20435 -0.1741 +0.4027 0.20775 -0.1549 +0.4043 0.21155 -0.1341 +0.4054 0.21515 -0.1149 +0.406 0.21835 -0.0969 +0.4237 0.21995 -0.0976 +0.4412 0.22075 -0.0984 +0.4603 0.22115 -0.0985 +0.4603 0.24085 -0.083 +0.4603 0.23945 -0.0729 +0.4603 0.23725 -0.0507 +0.4603 0.23675 -0.0302 +0.4603 0.25555 -0.0114 +0.4603 0.25555 0.0074 +0.4603 0.25555 0.0262 +0.4603 0.25555 0.045 +0.4603 0.25555 0.0638 +0.4603 0.23675 0.0638 +0.4603 0.21785 0.0638 +0.4603 0.19995 0.0642 +0.4603 0.19815 0.0871 +0.4603 0.17695 0.0908 +0.4603 0.15325 0.0952 +0.4603 0.13085 0.0767 +0.4603 0.12875 0.0559 +0.4603 0.11125 0.0603 +0.4603 0.09255 0.0637 +0.4603 0.07315 0.0671 +0.4603 0.07665 0.0865 +0.4603 0.08005 0.1059 +0.4603 0.08345 0.1252 +0.4459 0.08315 0.1253 +0.4316 0.08215 0.1255 +0.4315 0.08555 0.1448 +0.4314 0.08895 0.1642 +0.4296 0.10705 0.161 +0.4279 0.12515 0.1578 +0.4262 0.14315 0.1546 +0.4067 0.15925 0.1518 +0.3858 0.17425 0.1491 +0.3675 0.17045 0.1498 +0.3494 0.16585 0.1506 +0.3315 0.16035 0.1516 +0.3139 0.15415 0.1527 +0.2966 0.14705 0.154 +0.2797 0.13925 0.1553 +0.2631 0.13065 0.1569 +0.247 0.12125 0.1585 +0.2313 0.11125 0.1603 +0.2161 0.10045 0.1622 +0.2014 0.08905 0.1642 +0.1873 0.07695 0.1663 +0.1738 0.06415 0.1686 +0.1608 0.05085 0.1709 +0.1485 0.03695 0.1734 +0.1369 0.02255 0.1759 +0.126 0.00755 0.1786 +0.1158 -0.00795 0.1813 +0.1063 -0.02375 0.1841 +0.0976 -0.04015 0.187 +0.0896 -0.05675 0.1899 +0.1059 -0.06545 0.1914 +0.1164 -0.08805 0.1954 +0.1107 -0.10385 0.1982 +0.1057 -0.11985 0.201 +0.1195 -0.13995 0.2046 +0.1162 -0.15545 0.2073 +0.1319 -0.17336 0.2105 +0.1486 -0.18975 0.2134 +0.1486 -0.1936 0.1941 +0.1485 -0.19708 0.1747 +0.1485 -0.20059 0.1554 +0.1485 -0.20404 0.136 +0.1476 -0.22114 0.119 +0.1476 -0.21783 0.1384 +0.1473 -0.23162 0.1409 +0.1277 -0.23162 0.1409 +0.1083 -0.23164 0.1408 +0.0896 -0.23165 0.1407 +0.0721 -0.23127 0.1429 +0.0544 -0.23101 0.1444 +0.0353 -0.23143 0.142 +0.0132 -0.23555 0.1186 +-0.0049 -0.23617 0.1151 +-0.0216 -0.23632 0.1142 +-0.0196 -0.23959 0.0957 +-0.0192 -0.24278 0.0776 +-0.0192 -0.245983 0.0595 +-0.0376 -0.245983 0.0595 +-0.056 -0.245983 0.0595 +-0.056 -0.249172 0.0414 +-0.056 -0.252361 0.0233 +-0.056 -0.25555 0.0052 +-0.0695 -0.23716 0.002 +-0.0825 -0.21881 -0.001 +-0.0952 -0.2005 -0.004 +-0.1077 -0.18228 -0.0068 +-0.1205 -0.16418 -0.0095 +-0.1335 -0.14625 -0.012 +-0.1469 -0.12845 -0.0144 +-0.1605 -0.11095 -0.0166 +-0.1744 -0.09355 -0.0187 +-0.1886 -0.07645 -0.0207 +-0.203 -0.05945 -0.0226 +-0.2177 -0.04255 -0.0244 +-0.233 -0.02565 -0.0261 +-0.233 -0.00695 -0.0291 +-0.233 0.01115 -0.0346 +-0.2302 0.03265 -0.0448 +-0.2448 0.04825 -0.0554 +-0.2388 0.06565 -0.0713 +-0.2488 0.07585 -0.0836 +-0.2547 0.09365 -0.0817 +-0.2386 0.09955 -0.0902 +-0.2226 0.10495 -0.0993 +-0.2067 0.10975 -0.1091 +-0.1909 0.11375 -0.1196 +-0.1754 0.11685 -0.1309 +-0.1603 0.11905 -0.1427 +-0.1628 0.13745 -0.1415 +-0.1639 0.15985 -0.1414 +-0.1496 0.16245 -0.1533 +-0.1353 0.16455 -0.1662 +-0.1217 0.16655 -0.1794 +-0.1094 0.16625 -0.1923 +-0.0974 0.16585 -0.2059 +-0.0858 0.16735 -0.2195 +-0.0742 0.16885 -0.2332 +-0.0626 0.17045 -0.2468 +-0.051 0.17195 -0.2605 +-0.0391 0.17335 -0.2743 +-0.0268 0.17485 -0.2879 +-0.0143 0.16045 -0.3005 +-0.0012 0.16215 -0.3134 +0.0123 0.16375 -0.3261 +0.0263 0.16545 -0.3384 +0.0405 0.16695 -0.3503 +0.054 0.15395 -0.3605 +0.0688 0.15565 -0.3716 +0.0838 0.15725 -0.3822 +0.099 0.15885 -0.3923 +0.1145 0.16035 -0.4021 +0.1302 0.16175 -0.4113 +0.1444 0.15005 -0.4188 +0.153 0.14725 -0.4033 +0.1687 0.14875 -0.4115 +0.1893 0.14775 -0.4056 +0.1927 0.14615 -0.397 +0.2031 0.14595 -0.3957 +0.2251 0.14565 -0.3938 +0.2434 0.14275 -0.3776 +0.2578 0.14045 -0.3642 +0.2725 0.13825 -0.352 +0.2845 0.14535 -0.3397 +0.297 0.15195 -0.3285 +0.2987 0.15675 -0.3047 +0.3014 0.16175 -0.2819 +0.3129 0.16745 -0.272 +0.3192 0.17065 -0.2649 +0.3281 0.17285 -0.2672 +0.3424 0.17625 -0.2702 +0.3619 0.18055 -0.2709 +0.3823 0.18465 -0.2694 +0.3826 0.18815 -0.25 +0.4022 0.19085 -0.2502 +0.4023 0.19425 -0.2312 +0.4023 0.19755 -0.2122 +0.4024 0.20095 -0.1931 +0.4216 0.20285 -0.1934 +0.4216 0.20625 -0.1744 +0.4216 0.20955 -0.1554 +0.4219 0.21295 -0.1363 +0.423 0.21655 -0.1161 +0.4409 0.21745 -0.1175 +0.4603 0.21775 -0.1175 +0.4603 0.25555 -0.1054 +0.4603 0.25555 -0.0866 +0.4603 0.25555 -0.0678 +0.4603 0.25555 -0.049 +0.4603 0.25555 -0.0302 +0.4415 0.25555 -0.0114 +0.4415 0.25555 0.0074 +0.4415 0.25555 0.0262 +0.4415 0.25555 0.045 +0.4415 0.25555 0.0638 +0.4415 0.25555 0.0826 +0.4603 0.25555 0.0826 +0.4603 0.23675 0.0826 +0.4603 0.21695 0.0849 +0.4603 0.21585 0.1049 +0.4603 0.19775 0.1088 +0.4603 0.17645 0.1129 +0.4603 0.15665 0.1152 +0.4603 0.13515 0.099 +0.4603 0.11465 0.0798 +0.4603 0.09595 0.0831 +0.4603 0.09935 0.1025 +0.4603 0.10245 0.1239 +0.4603 0.08685 0.1446 +0.4458 0.08655 0.1447 +0.4458 0.08995 0.164 +0.4449 0.10805 0.1608 +0.4441 0.12625 0.1576 +0.4432 0.14435 0.1544 +0.4245 0.16125 0.1515 +0.4043 0.17725 0.1486 +0.4043 0.18035 0.1665 +0.3858 0.17745 0.167 +0.3675 0.17365 0.1677 +0.3494 0.16895 0.1685 +0.3315 0.16355 0.1694 +0.3139 0.15725 0.1706 +0.2966 0.15025 0.1718 +0.2797 0.14235 0.1732 +0.2631 0.13375 0.1747 +0.247 0.12445 0.1763 +0.2313 0.11435 0.1781 +0.2161 0.10365 0.18 +0.2014 0.09215 0.182 +0.1873 0.08005 0.1842 +0.1738 0.06735 0.1864 +0.1608 0.05395 0.1888 +0.1485 0.04005 0.1912 +0.1369 0.02565 0.1938 +0.126 0.01065 0.1964 +0.1158 -0.00475 0.1991 +0.1063 -0.02065 0.2019 +0.0976 -0.03695 0.2048 +0.0896 -0.05365 0.2077 +0.0824 -0.07385 0.1929 +0.0991 -0.08165 0.1943 +0.0931 -0.09825 0.1972 +0.0879 -0.11505 0.2002 +0.1015 -0.13605 0.2039 +0.098 -0.15245 0.2068 +0.1136 -0.17115 0.2101 +0.1302 -0.18835 0.2131 +0.1476 -0.20397 0.2159 +0.1476 -0.20762 0.1965 +0.1476 -0.21098 0.1772 +0.1476 -0.21441 0.1578 +0.1473 -0.22821 0.1602 +0.1277 -0.22821 0.1602 +0.1085 -0.22819 0.1603 +0.091 -0.22793 0.1618 +0.0731 -0.22775 0.1628 +0.0549 -0.22766 0.1633 +0.0365 -0.22763 0.1636 +0.0108 -0.22776 0.1628 +0.0055 -0.23111 0.1438 +-0.0102 -0.23255 0.1356 +-0.0249 -0.23353 0.1301 +-0.0376 -0.23643 0.1137 +-0.0376 -0.23959 0.0957 +-0.0376 -0.24278 0.0776 +-0.056 -0.24278 0.0776 +-0.0743 -0.24278 0.0776 +-0.0743 -0.245983 0.0595 +-0.0743 -0.249172 0.0414 +-0.0743 -0.252361 0.0233 +-0.0743 -0.25555 0.0052 +-0.0876 -0.23718 0.002 +-0.1003 -0.21882 -0.001 +-0.1127 -0.20051 -0.004 +-0.1251 -0.18229 -0.0068 +-0.1378 -0.16421 -0.0094 +-0.1508 -0.14625 -0.012 +-0.1644 -0.12855 -0.0144 +-0.1782 -0.11095 -0.0166 +-0.1923 -0.09365 -0.0187 +-0.2067 -0.07645 -0.0207 +-0.2213 -0.05945 -0.0226 +-0.2364 -0.04255 -0.0244 +-0.2519 -0.02565 -0.0261 +-0.2519 -0.00695 -0.0291 +-0.2538 0.01075 -0.0345 +-0.2554 0.02635 -0.0414 +-0.2628 0.03955 -0.0491 +-0.2549 0.05845 -0.0641 +-0.2645 0.06965 -0.0758 +-0.2708 0.08725 -0.0741 +-0.2773 0.10545 -0.0723 +-0.2607 0.11205 -0.0798 +-0.2441 0.11815 -0.0882 +-0.2274 0.12375 -0.0974 +-0.2108 0.12865 -0.1073 +-0.1944 0.13435 -0.1181 +-0.1778 0.13525 -0.1299 +-0.1778 0.15755 -0.1306 +-0.1777 0.18185 -0.1314 +-0.1633 0.18255 -0.1425 +-0.1485 0.18405 -0.1548 +-0.1349 0.18415 -0.167 +-0.1219 0.18425 -0.1797 +-0.1094 0.18415 -0.1927 +-0.0974 0.18385 -0.2063 +-0.0858 0.18505 -0.22 +-0.0742 0.18625 -0.2336 +-0.0626 0.18745 -0.2473 +-0.051 0.18865 -0.2609 +-0.039 0.18975 -0.2748 +-0.0266 0.19095 -0.2885 +-0.014 0.17625 -0.3012 +-0.0007 0.17765 -0.3142 +0.0129 0.17905 -0.327 +0.027 0.18035 -0.3394 +0.0414 0.18165 -0.3514 +0.0552 0.16845 -0.3618 +0.0701 0.16985 -0.3729 +0.0852 0.17125 -0.3836 +0.1006 0.17255 -0.3937 +0.1161 0.17385 -0.4034 +0.1319 0.17505 -0.4127 +0.1461 0.16315 -0.4201 +0.1605 0.15155 -0.4273 +0.1769 0.15295 -0.4353 +0.1847 0.15015 -0.4192 +0.2011 0.14845 -0.4099 +0.2212 0.14965 -0.4168 +0.2477 0.14795 -0.4071 +0.2597 0.14535 -0.3921 +0.2705 0.14305 -0.379 +0.2847 0.14075 -0.3661 +0.2963 0.14735 -0.3532 +0.3085 0.15365 -0.3418 +0.3097 0.15825 -0.3181 +0.3105 0.16285 -0.2937 +0.3223 0.16885 -0.2806 +0.3389 0.17135 -0.2924 +0.3618 0.17695 -0.2914 +0.3821 0.18115 -0.2891 +0.402 0.18405 -0.2886 +0.4021 0.18745 -0.2693 +0.4216 0.18945 -0.2696 +0.4216 0.19275 -0.2506 +0.4216 0.19615 -0.2315 +0.4216 0.19945 -0.2125 +0.4409 0.20395 -0.1936 +0.4409 0.20735 -0.1746 +0.4409 0.21075 -0.1556 +0.4409 0.21405 -0.1365 +0.4603 0.21445 -0.1366 +0.4603 0.23995 -0.144 +0.4603 0.25555 -0.1241 +0.4415 0.25555 -0.1054 +0.4415 0.25555 -0.0866 +0.4415 0.25555 -0.0678 +0.4415 0.25555 -0.049 +0.4415 0.25555 -0.0302 +0.4227 0.25555 -0.0114 +0.4227 0.25555 0.0074 +0.4227 0.25555 0.0262 +0.4227 0.25555 0.045 +0.4227 0.25555 0.0638 +0.4227 0.25555 0.0826 +0.4227 0.25555 0.1014 +0.4415 0.25555 0.1014 +0.4603 0.25555 0.1014 +0.4603 0.23675 0.1014 +0.4603 0.23675 0.1202 +0.4603 0.21675 0.1234 +0.4603 0.19765 0.1271 +0.4603 0.17785 0.13 +0.4603 0.15975 0.1331 +0.4603 0.14155 0.1363 +0.4603 0.13845 0.1183 +0.4603 0.11725 0.1019 +0.4603 0.12035 0.1214 +0.4603 0.10515 0.1424 +0.4603 0.09025 0.164 +0.4603 0.10845 0.1608 +0.4603 0.12655 0.1576 +0.4603 0.14475 0.1544 +0.4423 0.16255 0.1512 +0.4229 0.17935 0.1483 +0.4229 0.18255 0.1661 +0.4229 0.18565 0.1839 +0.4043 0.18355 0.1843 +0.3858 0.18055 0.1848 +0.3675 0.17675 0.1855 +0.3494 0.17215 0.1863 +0.3315 0.16665 0.1873 +0.3139 0.16045 0.1884 +0.2966 0.15335 0.1896 +0.2797 0.14555 0.191 +0.2631 0.13695 0.1925 +0.247 0.12755 0.1942 +0.2313 0.11755 0.1959 +0.2161 0.10675 0.1979 +0.2014 0.09535 0.1999 +0.1873 0.08325 0.202 +0.1738 0.07045 0.2043 +0.1608 0.05715 0.2066 +0.1485 0.04325 0.209 +0.1369 0.02875 0.2116 +0.126 0.01385 0.2142 +0.1158 -0.00165 0.217 +0.1063 -0.01755 0.2198 +0.0976 -0.03385 0.2226 +0.0896 -0.05045 0.2256 +0.0824 -0.07065 0.2108 +0.0761 -0.09115 0.196 +0.0705 -0.10875 0.1991 +0.0658 -0.12665 0.2022 +0.0835 -0.13215 0.2032 +0.0798 -0.14935 0.2062 +0.0953 -0.16894 0.2097 +0.1118 -0.18698 0.2129 +0.1292 -0.20341 0.2158 +0.1473 -0.21797 0.2183 +0.1473 -0.22139 0.199 +0.1473 -0.2248 0.1796 +0.1279 -0.2248 0.1796 +0.1101 -0.22462 0.1806 +0.0918 -0.22451 0.1812 +0.0734 -0.22445 0.1816 +0.055 -0.22441 0.1818 +0.0365 -0.22441 0.1819 +0.0147 -0.22441 0.1818 +-0.0005 -0.22438 0.182 +-0.0029 -0.22776 0.1628 +-0.0043 -0.22972 0.1517 +-0.0137 -0.23036 0.1481 +-0.0268 -0.23117 0.1435 +-0.0392 -0.23399 0.1275 +-0.056 -0.23645 0.1135 +-0.056 -0.23959 0.0957 +-0.0743 -0.2396 0.0957 +-0.0927 -0.2396 0.0956 +-0.0927 -0.24278 0.0776 +-0.0927 -0.245983 0.0595 +-0.0927 -0.249172 0.0414 +-0.0927 -0.252361 0.0233 +-0.0927 -0.25555 0.0052 +-0.1057 -0.23718 0.002 +-0.1181 -0.21884 -0.001 +-0.1302 -0.20054 -0.004 +-0.1425 -0.18232 -0.0068 +-0.1551 -0.16424 -0.0094 +-0.1682 -0.14635 -0.012 +-0.1818 -0.12855 -0.0144 +-0.1958 -0.11105 -0.0166 +-0.2102 -0.09365 -0.0187 +-0.2248 -0.07645 -0.0207 +-0.2397 -0.05945 -0.0226 +-0.2551 -0.04255 -0.0244 +-0.2708 -0.02565 -0.0261 +-0.2708 -0.00695 -0.0291 +-0.2695 0.01075 -0.0345 +-0.2717 0.02205 -0.0392 +-0.2784 0.03305 -0.0451 +-0.271 0.05105 -0.0576 +-0.2803 0.06305 -0.0686 +-0.287 0.08055 -0.0669 +-0.2939 0.09845 -0.0653 +-0.3011 0.11695 -0.0637 +-0.2841 0.12425 -0.0704 +-0.2668 0.13145 -0.078 +-0.2493 0.13795 -0.0865 +-0.2307 0.14465 -0.0964 +-0.2148 0.15245 -0.1058 +-0.1991 0.16205 -0.116 +-0.1942 0.18245 -0.1198 +-0.1911 0.20185 -0.1223 +-0.1765 0.20185 -0.1327 +-0.1624 0.20195 -0.1436 +-0.1487 0.20195 -0.155 +-0.1354 0.20185 -0.1669 +-0.1222 0.20185 -0.1797 +-0.1096 0.20195 -0.1929 +-0.0974 0.20175 -0.2067 +-0.0858 0.20265 -0.2203 +-0.0742 0.20355 -0.2339 +-0.0626 0.20445 -0.2476 +-0.051 0.20535 -0.2612 +-0.0389 0.20625 -0.2752 +-0.0264 0.20715 -0.2889 +-0.0137 0.19215 -0.3018 +-0.0003 0.19325 -0.315 +0.0135 0.19435 -0.3278 +0.0277 0.19535 -0.3402 +0.0422 0.19645 -0.3523 +0.0562 0.18295 -0.363 +0.0713 0.18405 -0.3742 +0.0866 0.18525 -0.3848 +0.1021 0.18635 -0.395 +0.1177 0.18745 -0.4047 +0.1335 0.18845 -0.4138 +0.1478 0.17625 -0.4214 +0.1623 0.16445 -0.4285 +0.1787 0.16565 -0.4365 +0.1934 0.15425 -0.4428 +0.1979 0.15115 -0.425 +0.2171 0.15265 -0.4335 +0.2399 0.15095 -0.4238 +0.2643 0.14995 -0.4185 +0.2733 0.14795 -0.4068 +0.2839 0.14555 -0.3931 +0.2974 0.14315 -0.3797 +0.3086 0.14935 -0.3663 +0.3206 0.15525 -0.3545 +0.3212 0.15955 -0.3311 +0.323 0.16405 -0.3084 +0.348 0.16945 -0.316 +0.3645 0.17375 -0.3126 +0.3829 0.17745 -0.3107 +0.4019 0.18065 -0.308 +0.4216 0.18275 -0.3077 +0.4216 0.18605 -0.2886 +0.4409 0.18715 -0.2889 +0.4409 0.19055 -0.2698 +0.4409 0.19395 -0.2508 +0.4409 0.19725 -0.2317 +0.4409 0.20065 -0.2127 +0.4603 0.20435 -0.1937 +0.4603 0.20775 -0.1747 +0.4603 0.21105 -0.1556 +0.4603 0.22755 -0.1483 +0.4603 0.23915 -0.1606 +0.4603 0.25555 -0.1617 +0.4603 0.25555 -0.1429 +0.4415 0.25555 -0.1241 +0.4227 0.25555 -0.1054 +0.4227 0.25555 -0.0866 +0.4227 0.25555 -0.0678 +0.4227 0.25555 -0.049 +0.4227 0.25555 -0.0302 +0.4039 0.25555 -0.0114 +0.4039 0.25555 0.0074 +0.4039 0.25555 0.0262 +0.4039 0.25555 0.045 +0.4039 0.25555 0.0638 +0.4039 0.25555 0.0826 +0.4039 0.25555 0.1014 +0.4039 0.25555 0.1202 +0.4227 0.25555 0.1202 +0.4415 0.25555 0.1202 +0.4603 0.25555 0.1202 +0.4603 0.25555 0.139 +0.4603 0.23675 0.139 +0.4603 0.21785 0.142 +0.4603 0.19895 0.1448 +0.4603 0.18105 0.148 +0.4603 0.16285 0.1512 +0.4416 0.18065 0.148 +0.4416 0.18375 0.1659 +0.4416 0.18695 0.1837 +0.4416 0.19005 0.2015 +0.4229 0.18875 0.2018 +0.4043 0.18665 0.2021 +0.3858 0.18365 0.2027 +0.3675 0.17985 0.2033 +0.3494 0.17525 0.2042 +0.3315 0.16985 0.2051 +0.3139 0.16355 0.2062 +0.2966 0.15655 0.2075 +0.2797 0.14865 0.2089 +0.2631 0.14005 0.2104 +0.247 0.13075 0.212 +0.2313 0.12065 0.2138 +0.2161 0.10995 0.2157 +0.2014 0.09845 0.2177 +0.1873 0.08635 0.2198 +0.1738 0.07365 0.2221 +0.1608 0.06025 0.2244 +0.1485 0.04635 0.2269 +0.1369 0.03195 0.2294 +0.126 0.01695 0.2321 +0.1158 0.00155 0.2348 +0.1063 -0.01435 0.2376 +0.0976 -0.03065 0.2405 +0.0896 -0.04735 0.2434 +0.0824 -0.06755 0.2286 +0.0761 -0.08805 0.2138 +0.0705 -0.10565 0.2169 +0.0658 -0.12345 0.22 +0.062 -0.14465 0.2054 +0.059 -0.16284 0.2086 +0.077 -0.16673 0.2093 +0.0934 -0.1856 0.2126 +0.1107 -0.20286 0.2157 +0.1288 -0.21797 0.2183 +0.1288 -0.22131 0.1994 +0.1104 -0.22125 0.1997 +0.092 -0.22122 0.1999 +0.0735 -0.2212 0.2 +0.0551 -0.22119 0.2001 +0.0366 -0.22119 0.2001 +0.0181 -0.22117 0.2002 +-0.0005 -0.22116 0.2003 +-0.0191 -0.22438 0.182 +-0.0161 -0.22795 0.1617 +-0.0316 -0.22828 0.1598 +-0.0428 -0.23139 0.1422 +-0.0557 -0.23405 0.1271 +-0.0736 -0.23437 0.1253 +-0.0744 -0.2368 0.1116 +-0.0926 -0.23706 0.1101 +-0.1117 -0.23729 0.1088 +-0.1111 -0.2396 0.0956 +-0.1111 -0.24278 0.0776 +-0.1111 -0.245983 0.0595 +-0.1111 -0.249172 0.0414 +-0.1111 -0.252361 0.0233 +-0.1111 -0.25555 0.0052 +-0.1237 -0.23719 0.002 +-0.1358 -0.21885 -0.001 +-0.1477 -0.20056 -0.004 +-0.1599 -0.18235 -0.0068 +-0.1724 -0.16427 -0.0094 +-0.1856 -0.14635 -0.0119 +-0.1993 -0.12855 -0.0144 +-0.2135 -0.11105 -0.0166 +-0.228 -0.09365 -0.0187 +-0.2429 -0.07655 -0.0207 +-0.2581 -0.05945 -0.0226 +-0.2737 -0.04255 -0.0244 +-0.2898 -0.02565 -0.0261 +-0.2869 -0.00705 -0.0291 +-0.2845 0.00935 -0.0339 +-0.2819 0.01915 -0.0379 +-0.2904 0.02615 -0.0413 +-0.2872 0.04335 -0.0517 +-0.2963 0.05615 -0.0619 +-0.3034 0.07345 -0.0605 +-0.3107 0.09115 -0.059 +-0.3165 0.10875 -0.0581 +-0.3242 0.12635 -0.0565 +-0.307 0.13775 -0.0625 +-0.2916 0.14755 -0.0684 +-0.2745 0.15875 -0.0756 +-0.252 0.15885 -0.0859 +-0.2338 0.16115 -0.0953 +-0.2177 0.16705 -0.1046 +-0.2074 0.17045 -0.1109 +-0.2068 0.18275 -0.1116 +-0.206 0.20185 -0.1125 +-0.2062 0.21975 -0.1127 +-0.1912 0.21975 -0.1225 +-0.1767 0.21975 -0.1329 +-0.1626 0.21975 -0.1437 +-0.1488 0.21975 -0.1552 +-0.1355 0.21975 -0.1671 +-0.1226 0.21975 -0.1795 +-0.1099 0.21985 -0.1928 +-0.0974 0.21965 -0.2069 +-0.0858 0.22025 -0.2205 +-0.0742 0.22085 -0.2342 +-0.0626 0.22145 -0.2478 +-0.051 0.22205 -0.2614 +-0.0388 0.22265 -0.2755 +-0.0263 0.22325 -0.2893 +-0.0134 0.20795 -0.3024 +0 0.20875 -0.3156 +0.0139 0.20965 -0.3284 +0.0281 0.21035 -0.3409 +0.0428 0.21115 -0.353 +0.0571 0.19735 -0.364 +0.0724 0.19835 -0.3752 +0.0878 0.19925 -0.3859 +0.1033 0.20015 -0.3961 +0.119 0.20105 -0.4057 +0.1349 0.20185 -0.4149 +0.1495 0.18945 -0.4226 +0.164 0.17735 -0.4297 +0.1804 0.17845 -0.4376 +0.1953 0.16685 -0.444 +0.2102 0.15555 -0.4499 +0.2272 0.15665 -0.4565 +0.2336 0.15375 -0.4399 +0.2503 0.15485 -0.4459 +0.2579 0.15205 -0.4303 +0.2736 0.15125 -0.4258 +0.2858 0.15065 -0.4224 +0.2981 0.14785 -0.4067 +0.3108 0.14545 -0.3927 +0.3215 0.15125 -0.3788 +0.3331 0.15675 -0.3666 +0.3319 0.15995 -0.3463 +0.342 0.16385 -0.3395 +0.3338 0.16445 -0.3238 +0.3544 0.16755 -0.3356 +0.3695 0.17125 -0.3325 +0.3846 0.17425 -0.3303 +0.4021 0.17725 -0.3275 +0.4216 0.17935 -0.3269 +0.4409 0.18045 -0.3269 +0.4409 0.18385 -0.3079 +0.4603 0.18755 -0.2889 +0.4603 0.19095 -0.2699 +0.4603 0.19425 -0.2509 +0.4603 0.19765 -0.2318 +0.4603 0.20105 -0.2127 +0.4603 0.22235 -0.1969 +0.4603 0.22305 -0.1777 +0.4603 0.22505 -0.1591 +0.4603 0.23805 -0.1794 +0.4603 0.25555 -0.1805 +0.4415 0.25555 -0.1617 +0.4415 0.25555 -0.1429 +0.4227 0.25555 -0.1241 +0.4039 0.25555 -0.1054 +0.4039 0.25555 -0.0866 +0.4039 0.25555 -0.0678 +0.4039 0.25555 -0.049 +0.4039 0.25555 -0.0302 +0.3851 0.25555 -0.0114 +0.3851 0.25555 0.0074 +0.3851 0.25555 0.0262 +0.3851 0.25555 0.045 +0.3851 0.25555 0.0638 +0.3851 0.25555 0.0826 +0.3851 0.25555 0.1014 +0.3851 0.25555 0.1202 +0.4039 0.25555 0.139 +0.4227 0.25555 0.139 +0.4415 0.25555 0.139 +0.4415 0.25555 0.1578 +0.4603 0.25555 0.1578 +0.4603 0.23675 0.1578 +0.4603 0.21925 0.1585 +0.4603 0.20215 0.1626 +0.4603 0.18415 0.1658 +0.4603 0.18735 0.1836 +0.4603 0.19055 0.2015 +0.4603 0.19365 0.2193 +0.4416 0.19325 0.2194 +0.4229 0.19195 0.2196 +0.4043 0.18985 0.22 +0.3858 0.18685 0.2205 +0.3675 0.18305 0.2212 +0.3494 0.17845 0.222 +0.3315 0.17295 0.223 +0.3139 0.16665 0.2241 +0.2966 0.15965 0.2253 +0.2797 0.15185 0.2267 +0.2631 0.14325 0.2282 +0.247 0.13385 0.2299 +0.2313 0.12385 0.2316 +0.2161 0.11305 0.2335 +0.2014 0.10165 0.2355 +0.1873 0.08955 0.2377 +0.1738 0.07675 0.2399 +0.1608 0.06345 0.2423 +0.1485 0.04955 0.2447 +0.1369 0.03505 0.2473 +0.126 0.02015 0.2499 +0.1158 0.00465 0.2526 +0.1063 -0.01125 0.2554 +0.0976 -0.02755 0.2583 +0.0896 -0.04425 0.2613 +0.0824 -0.06435 0.2464 +0.0761 -0.08485 0.2316 +0.0705 -0.10245 0.2348 +0.0658 -0.12035 0.2379 +0.062 -0.14155 0.2232 +0.059 -0.15969 0.2264 +0.0568 -0.18115 0.2118 +0.075 -0.18424 0.2124 +0.0923 -0.20234 0.2156 +0.1104 -0.21797 0.2183 +0.092 -0.21797 0.2183 +0.0735 -0.21797 0.2183 +0.0551 -0.21797 0.2183 +0.0367 -0.21797 0.2183 +0.0182 -0.21795 0.2184 +-0.0004 -0.21792 0.2186 +-0.0191 -0.22114 0.2003 +-0.0397 -0.22113 0.2004 +-0.037 -0.22486 0.1792 +-0.0467 -0.22869 0.1575 +-0.0607 -0.22956 0.1526 +-0.0578 -0.23185 0.1396 +-0.073 -0.23226 0.1373 +-0.0885 -0.2319 0.1393 +-0.0914 -0.23455 0.1242 +-0.1143 -0.2349 0.1223 +-0.1286 -0.23603 0.1159 +-0.1291 -0.23791 0.1052 +-0.1294 -0.24018 0.0924 +-0.1295 -0.24278 0.0776 +-0.1295 -0.245983 0.0595 +-0.1295 -0.249172 0.0414 +-0.1295 -0.252361 0.0233 +-0.1295 -0.25555 0.0052 +-0.1418 -0.23719 0.002 +-0.1536 -0.21887 -0.001 +-0.1653 -0.20057 -0.004 +-0.1772 -0.18238 -0.0068 +-0.1897 -0.1643 -0.0094 +-0.2029 -0.14635 -0.0119 +-0.2168 -0.12865 -0.0144 +-0.2311 -0.11105 -0.0166 +-0.2459 -0.09375 -0.0187 +-0.261 -0.07655 -0.0207 +-0.2765 -0.05955 -0.0226 +-0.2924 -0.04255 -0.0244 +-0.3087 -0.02565 -0.0261 +-0.3064 -0.00775 -0.0289 +-0.3031 0.01405 -0.0357 +-0.3013 0.03725 -0.0476 +-0.3123 0.04895 -0.0559 +-0.3197 0.06605 -0.0547 +-0.3274 0.08355 -0.0534 +-0.3331 0.10085 -0.0528 +-0.3398 0.11585 -0.0517 +-0.3486 0.12705 -0.05 +-0.3353 0.14665 -0.0542 +-0.3121 0.15645 -0.0615 +-0.2971 0.16235 -0.0669 +-0.2855 0.16685 -0.0714 +-0.2708 0.18295 -0.0779 +-0.253 0.18415 -0.0861 +-0.237 0.18405 -0.0942 +-0.2199 0.18295 -0.1037 +-0.2214 0.20185 -0.1032 +-0.2215 0.21975 -0.1034 +-0.2062 0.23765 -0.1128 +-0.1913 0.23765 -0.1226 +-0.1768 0.23765 -0.133 +-0.1626 0.23765 -0.1438 +-0.1489 0.23765 -0.1553 +-0.1356 0.23765 -0.1672 +-0.1227 0.23765 -0.1797 +-0.1103 0.23755 -0.1926 +-0.0974 0.23755 -0.2071 +-0.0858 0.23785 -0.2207 +-0.0742 0.23815 -0.2343 +-0.0626 0.23845 -0.248 +-0.051 0.23875 -0.2616 +-0.0388 0.23905 -0.2757 +-0.0261 0.23935 -0.2895 +-0.0132 0.22375 -0.3028 +0.0002 0.22435 -0.316 +0.0141 0.22485 -0.3288 +0.0284 0.22545 -0.3413 +0.043 0.22595 -0.3533 +0.0578 0.21185 -0.3647 +0.073 0.21265 -0.3759 +0.0885 0.21325 -0.3866 +0.1041 0.21395 -0.3968 +0.1199 0.21465 -0.4064 +0.1358 0.21525 -0.4156 +0.1509 0.20265 -0.4235 +0.1657 0.19035 -0.4308 +0.182 0.19125 -0.4386 +0.197 0.17945 -0.445 +0.2121 0.16795 -0.451 +0.2291 0.16895 -0.4575 +0.2444 0.15775 -0.4627 +0.2672 0.15575 -0.4515 +0.271 0.15305 -0.436 +0.2851 0.15365 -0.4394 +0.305 0.15195 -0.4299 +0.3122 0.14985 -0.4179 +0.3247 0.14755 -0.4049 +0.3349 0.15305 -0.3905 +0.3455 0.15835 -0.3759 +0.341 0.16075 -0.356 +0.3463 0.16335 -0.3487 +0.3561 0.16535 -0.35 +0.371 0.16815 -0.3514 +0.3872 0.17085 -0.3522 +0.4038 0.17365 -0.3488 +0.4218 0.17595 -0.3462 +0.441 0.17715 -0.346 +0.4603 0.18085 -0.327 +0.4603 0.18425 -0.308 +0.4603 0.21065 -0.3029 +0.4603 0.21385 -0.2739 +0.4603 0.21555 -0.2549 +0.4603 0.21635 -0.2351 +0.4603 0.21945 -0.216 +0.4603 0.23675 -0.1993 +0.4603 0.25555 -0.1993 +0.4415 0.25555 -0.1805 +0.4227 0.25555 -0.1617 +0.4227 0.25555 -0.1429 +0.4039 0.25555 -0.1241 +0.3851 0.25555 -0.1054 +0.3851 0.25555 -0.0866 +0.3851 0.25555 -0.0678 +0.3851 0.25555 -0.049 +0.3851 0.25555 -0.0302 +0.3663 0.25555 -0.0114 +0.3663 0.25555 0.0074 +0.3663 0.25555 0.0262 +0.3663 0.25555 0.045 +0.3663 0.25555 0.0638 +0.3663 0.25555 0.0826 +0.3663 0.25555 0.1014 +0.3663 0.25555 0.1201 +0.385 0.25555 0.1389 +0.4038 0.25555 0.1577 +0.4227 0.25555 0.1578 +0.4415 0.25555 0.1765 +0.4603 0.25555 0.1765 +0.4603 0.23675 0.1765 +0.4603 0.22205 0.1778 +0.4603 0.20535 0.1805 +0.4603 0.20855 0.1983 +0.4603 0.20985 0.2166 +0.4603 0.19675 0.2371 +0.4416 0.19635 0.2372 +0.4229 0.19505 0.2375 +0.4043 0.19295 0.2378 +0.3858 0.18995 0.2384 +0.3675 0.18615 0.239 +0.3494 0.18155 0.2398 +0.3315 0.17605 0.2408 +0.3139 0.16985 0.2419 +0.2966 0.16275 0.2431 +0.2797 0.15495 0.2445 +0.2631 0.14635 0.246 +0.247 0.13705 0.2477 +0.2313 0.12695 0.2495 +0.2161 0.11615 0.2514 +0.2014 0.10475 0.2534 +0.1873 0.09265 0.2555 +0.1738 0.07995 0.2578 +0.1608 0.06655 0.2601 +0.1485 0.05265 0.2626 +0.1369 0.03825 0.2651 +0.126 0.02325 0.2678 +0.1158 0.00785 0.2705 +0.1063 -0.00805 0.2733 +0.0976 -0.02435 0.2762 +0.0896 -0.04105 0.2791 +0.0824 -0.06125 0.2642 +0.0761 -0.08175 0.2495 +0.0705 -0.09935 0.2526 +0.0658 -0.11715 0.2557 +0.062 -0.13835 0.2411 +0.059 -0.15655 0.2443 +0.0568 -0.178 0.2297 +0.0555 -0.19953 0.2151 +0.0739 -0.20184 0.2155 +0.0555 -0.19639 0.2329 +0.0551 -0.21482 0.2362 +0.0368 -0.21482 0.2362 +0.0184 -0.21481 0.2363 +0 -0.21476 0.2365 +-0.0185 -0.2147 0.2368 +-0.019 -0.21788 0.2189 +-0.0388 -0.21781 0.2192 +-0.0553 -0.21731 0.222 +-0.056 -0.22161 0.1977 +-0.0514 -0.2257 0.1745 +-0.0684 -0.22712 0.1664 +-0.0722 -0.23049 0.1473 +-0.0815 -0.22937 0.1537 +-0.1031 -0.22752 0.1642 +-0.1191 -0.23179 0.14 +-0.14 -0.23475 0.1232 +-0.1465 -0.23751 0.1075 +-0.1482 -0.24025 0.092 +-0.1479 -0.24278 0.0776 +-0.1479 -0.245983 0.0595 +-0.1479 -0.249172 0.0414 +-0.1479 -0.252361 0.0233 +-0.1479 -0.25555 0.0052 +-0.1598 -0.23721 0.002 +-0.1714 -0.21888 -0.001 +-0.1828 -0.2006 -0.004 +-0.1946 -0.1824 -0.0068 +-0.2071 -0.16433 -0.0094 +-0.2203 -0.14645 -0.0119 +-0.2343 -0.12865 -0.0143 +-0.2488 -0.11115 -0.0166 +-0.2638 -0.09375 -0.0187 +-0.2791 -0.07655 -0.0207 +-0.2949 -0.05955 -0.0226 +-0.311 -0.04255 -0.0244 +-0.3277 -0.02565 -0.0261 +-0.3268 -0.00845 -0.0288 +-0.3285 0.00735 -0.0332 +-0.3183 0.02935 -0.0429 +-0.328 0.04165 -0.0505 +-0.3356 0.05845 -0.0496 +-0.3434 0.07565 -0.0486 +-0.3488 0.09405 -0.0483 +-0.3526 0.10865 -0.0482 +-0.3554 0.11745 -0.048 +-0.36061 0.13385 -0.0475 +-0.3554 0.15435 -0.0495 +-0.3348 0.17545 -0.0552 +-0.317 0.17895 -0.0606 +-0.3007 0.18075 -0.0661 +-0.2857 0.18215 -0.0717 +-0.2857 0.20205 -0.0722 +-0.2693 0.20205 -0.079 +-0.2531 0.20195 -0.0864 +-0.2371 0.20185 -0.0946 +-0.2371 0.21975 -0.0948 +-0.2372 0.23765 -0.0949 +-0.2216 0.23765 -0.1036 +-0.2216 0.25555 -0.1036 +-0.2062 0.25555 -0.1129 +-0.1913 0.25555 -0.1227 +-0.1768 0.25555 -0.133 +-0.1626 0.25555 -0.1439 +-0.1489 0.25555 -0.1553 +-0.1356 0.25555 -0.1672 +-0.1227 0.25555 -0.1797 +-0.1103 0.25555 -0.1926 +-0.0974 0.25555 -0.2071 +-0.0858 0.25555 -0.2208 +-0.0742 0.25555 -0.2344 +-0.0626 0.25555 -0.248 +-0.051 0.25555 -0.2616 +-0.0387 0.25555 -0.2758 +-0.026 0.25555 -0.2897 +-0.0131 0.23965 -0.303 +0.0004 0.23995 -0.3162 +0.0142 0.24025 -0.329 +0.0284 0.24045 -0.3414 +0.043 0.24075 -0.3534 +0.058 0.22645 -0.365 +0.0732 0.22695 -0.3762 +0.0887 0.22735 -0.3869 +0.1044 0.22785 -0.3971 +0.1202 0.22825 -0.4068 +0.1363 0.22865 -0.416 +0.1519 0.21585 -0.4243 +0.1671 0.20335 -0.4318 +0.1835 0.20405 -0.4395 +0.1986 0.19215 -0.446 +0.2138 0.18045 -0.452 +0.2307 0.18125 -0.4585 +0.2462 0.16995 -0.4637 +0.2617 0.15875 -0.4684 +0.2824 0.15665 -0.4563 +0.302 0.15435 -0.4432 +0.3165 0.15285 -0.4349 +0.3265 0.15165 -0.4277 +0.3393 0.14965 -0.4164 +0.3489 0.15465 -0.4015 +0.3594 0.15965 -0.3865 +0.3684 0.16445 -0.3698 +0.3528 0.16245 -0.3624 +0.3877 0.16635 -0.3779 +0.4082 0.17055 -0.3693 +0.4235 0.17235 -0.3672 +0.441 0.17375 -0.365 +0.4603 0.17755 -0.3461 +0.4603 0.19615 -0.3321 +0.4603 0.20085 -0.3178 +0.4603 0.21925 -0.3197 +0.4603 0.23645 -0.2965 +0.4603 0.23675 -0.2745 +0.4603 0.23675 -0.2557 +0.4603 0.23675 -0.2369 +0.4603 0.23675 -0.2181 +0.4603 0.25555 -0.2181 +0.4415 0.25555 -0.1993 +0.4227 0.25555 -0.1805 +0.4039 0.25555 -0.1617 +0.4039 0.25555 -0.1429 +0.3851 0.25555 -0.1241 +0.3663 0.25555 -0.1054 +0.3663 0.25555 -0.0866 +0.3663 0.25555 -0.0678 +0.3663 0.25555 -0.049 +0.3663 0.25555 -0.0302 +0.3475 0.25555 -0.0114 +0.3475 0.25555 0.0074 +0.3475 0.25555 0.0262 +0.3475 0.25555 0.045 +0.3475 0.25555 0.0638 +0.3475 0.25555 0.0826 +0.3475 0.25555 0.1013 +0.3474 0.25555 0.1201 +0.3662 0.25555 0.1389 +0.385 0.25555 0.1577 +0.4038 0.25555 0.1765 +0.4226 0.25555 0.1765 +0.4415 0.25555 0.1953 +0.4603 0.25555 0.1953 +0.4603 0.23845 0.1951 +0.4603 0.22365 0.1961 +0.4603 0.22385 0.2146 +0.4603 0.22585 0.2326 +0.4603 0.21285 0.2345 +0.4603 0.19995 0.255 +0.4416 0.19955 0.2551 +0.4229 0.19825 0.2553 +0.4043 0.19615 0.2557 +0.3858 0.19315 0.2562 +0.3675 0.18935 0.2569 +0.3494 0.18475 0.2577 +0.3315 0.17925 0.2586 +0.3139 0.17295 0.2597 +0.2966 0.16595 0.261 +0.2797 0.15815 0.2624 +0.2631 0.14955 0.2639 +0.247 0.14015 0.2655 +0.2313 0.13015 0.2673 +0.2161 0.11935 0.2692 +0.2014 0.10785 0.2712 +0.1873 0.09575 0.2733 +0.1738 0.08305 0.2756 +0.1608 0.06975 0.2779 +0.1485 0.05585 0.2804 +0.1369 0.04135 0.283 +0.126 0.02645 0.2856 +0.1158 0.01095 0.2883 +0.1063 -0.00495 0.2911 +0.0976 -0.02125 0.294 +0.0896 -0.03795 0.2969 +0.0824 -0.05805 0.2821 +0.0761 -0.07855 0.2673 +0.0705 -0.09615 0.2704 +0.0658 -0.11405 0.2736 +0.062 -0.13525 0.2589 +0.059 -0.15345 0.2621 +0.0568 -0.17486 0.2475 +0.0555 -0.19325 0.2507 +0.0551 -0.21168 0.254 +0.0369 -0.21168 0.254 +0.0186 -0.21167 0.254 +0.0004 -0.21165 0.2542 +-0.0161 -0.2116 0.2545 +-0.0298 -0.21159 0.2545 +-0.0342 -0.2144 0.2386 +-0.0474 -0.21363 0.2429 +-0.0797 -0.21641 0.2272 +-0.0829 -0.22282 0.1908 +-0.1206 -0.21981 0.2079 +-0.1348 -0.22511 0.1778 +-0.1503 -0.22956 0.1526 +-0.1632 -0.23318 0.132 +-0.1774 -0.23773 0.1063 +-0.1712 -0.24093 0.0881 +-0.1678 -0.24336 0.0744 +-0.1662 -0.245983 0.0595 +-0.1662 -0.249172 0.0414 +-0.1662 -0.252361 0.0233 +-0.1662 -0.25555 0.0052 +-0.1779 -0.23721 0.002 +-0.1891 -0.2189 -0.001 +-0.2003 -0.20062 -0.004 +-0.212 -0.18243 -0.0068 +-0.2244 -0.16436 -0.0094 +-0.2377 -0.14645 -0.0119 +-0.2517 -0.12875 -0.0143 +-0.2664 -0.11115 -0.0166 +-0.2816 -0.09375 -0.0187 +-0.2973 -0.07655 -0.0207 +-0.3132 -0.05955 -0.0226 +-0.3297 -0.04265 -0.0244 +-0.3466 -0.02565 -0.0261 +-0.3449 -0.00805 -0.0289 +-0.3415 0.00435 -0.0322 +-0.3352 0.02075 -0.0386 +-0.3442 0.03385 -0.0456 +-0.3545 0.04945 -0.0442 +-0.36859 0.06795 -0.0425 +-0.36566 0.09105 -0.0444 +-0.36476 0.10745 -0.0455 +-0.36452 0.11955 -0.0461 +-0.37624 0.12115 -0.0439 +-0.37393 0.13845 -0.0451 +-0.3701 0.15865 -0.0465 +-0.3523 0.17795 -0.0509 +-0.3361 0.20005 -0.0555 +-0.3194 0.20195 -0.0603 +-0.3023 0.20195 -0.066 +-0.3024 0.21975 -0.0662 +-0.2858 0.21985 -0.0724 +-0.2694 0.21985 -0.0792 +-0.2531 0.21985 -0.0867 +-0.2532 0.23765 -0.0868 +-0.2372 0.25555 -0.0949 +-0.2272 0.25555 -0.0797 +-0.211 0.25555 -0.0887 +-0.1952 0.25555 -0.0984 +-0.1797 0.25555 -0.1086 +-0.1646 0.25555 -0.1194 +-0.15 0.25555 -0.1308 +-0.1358 0.25555 -0.1427 +-0.122 0.25555 -0.1551 +-0.1087 0.25555 -0.1681 +-0.096 0.25555 -0.1816 +-0.0838 0.25555 -0.1954 +-0.0721 0.25555 -0.2091 +-0.0604 0.25555 -0.2226 +-0.0487 0.25555 -0.2361 +-0.0369 0.25555 -0.2495 +-0.0248 0.25555 -0.2635 +-0.0125 0.25555 -0.277 +0.0002 0.25555 -0.2901 +-0.013 0.25555 -0.3032 +0.0005 0.25555 -0.3164 +0.0143 0.25555 -0.3291 +0.0284 0.25555 -0.3414 +0.0429 0.25555 -0.3534 +0.0577 0.25555 -0.3649 +0.0579 0.24095 -0.365 +0.0731 0.24125 -0.3762 +0.0886 0.24145 -0.3869 +0.1043 0.24165 -0.3971 +0.1202 0.24185 -0.4068 +0.1364 0.24205 -0.4161 +0.1525 0.22905 -0.4247 +0.1682 0.21635 -0.4325 +0.1847 0.21695 -0.4402 +0.2001 0.20475 -0.4468 +0.2154 0.19285 -0.4529 +0.2324 0.19365 -0.4593 +0.2479 0.18205 -0.4645 +0.2636 0.17085 -0.4693 +0.2792 0.15965 -0.4736 +0.2996 0.15745 -0.4608 +0.3178 0.15495 -0.4467 +0.3381 0.15445 -0.4438 +0.3547 0.15145 -0.427 +0.3634 0.15605 -0.4116 +0.3752 0.16085 -0.3972 +0.3982 0.16455 -0.3968 +0.4116 0.16735 -0.3898 +0.4255 0.16905 -0.3869 +0.441 0.17045 -0.3841 +0.4603 0.17415 -0.3651 +0.4603 0.19285 -0.3498 +0.4603 0.20825 -0.3342 +0.4603 0.20915 -0.3238 +0.4603 0.22075 -0.3334 +0.4603 0.23675 -0.3309 +0.4603 0.23655 -0.3158 +0.4603 0.25555 -0.3121 +0.4603 0.25555 -0.2933 +0.4603 0.25555 -0.2745 +0.4603 0.25555 -0.2557 +0.4603 0.25555 -0.2369 +0.4415 0.25555 -0.2181 +0.4227 0.25555 -0.1993 +0.4039 0.25555 -0.1805 +0.3851 0.25555 -0.1617 +0.3851 0.25555 -0.1429 +0.3663 0.25555 -0.1241 +0.3475 0.25555 -0.1054 +0.3475 0.25555 -0.0866 +0.3475 0.25555 -0.0678 +0.3475 0.25555 -0.049 +0.3475 0.25555 -0.0302 +0.3287 0.25555 -0.0114 +0.3287 0.25555 0.0074 +0.3287 0.25555 0.0262 +0.3287 0.25555 0.045 +0.3287 0.25555 0.0638 +0.3287 0.25555 0.0825 +0.3286 0.25555 0.1013 +0.3284 0.25555 0.1199 +0.3471 0.25555 0.1387 +0.366 0.25555 0.1576 +0.3848 0.25555 0.1764 +0.4037 0.25555 0.1953 +0.4226 0.25555 0.1953 +0.4414 0.25555 0.2141 +0.4603 0.25555 0.2141 +0.4603 0.23925 0.2143 +0.4603 0.23925 0.2324 +0.4603 0.22835 0.2498 +0.4603 0.21665 0.2519 +0.4603 0.21975 0.2658 +0.4603 0.20305 0.2728 +0.4416 0.20265 0.2729 +0.4229 0.20135 0.2731 +0.4043 0.19925 0.2735 +0.3858 0.19625 0.274 +0.3675 0.19245 0.2747 +0.3494 0.18785 0.2755 +0.3315 0.18235 0.2765 +0.3139 0.17615 0.2776 +0.2966 0.16905 0.2788 +0.2797 0.16125 0.2802 +0.2631 0.15265 0.2817 +0.247 0.14335 0.2834 +0.2313 0.13325 0.2852 +0.2161 0.12245 0.287 +0.2014 0.11105 0.2891 +0.1873 0.09895 0.2912 +0.1738 0.08625 0.2934 +0.1608 0.07285 0.2958 +0.1485 0.05895 0.2982 +0.1369 0.04455 0.3008 +0.126 0.02955 0.3034 +0.1158 0.01415 0.3061 +0.1063 -0.00175 0.3089 +0.0976 -0.01805 0.3118 +0.0896 -0.03475 0.3148 +0.0824 -0.05495 0.2999 +0.0761 -0.07545 0.2852 +0.0705 -0.09305 0.2883 +0.0658 -0.11085 0.2914 +0.062 -0.13205 0.2767 +0.059 -0.15025 0.28 +0.0568 -0.17172 0.2653 +0.0555 -0.1901 0.2686 +0.0551 -0.20854 0.2718 +0.0369 -0.20854 0.2718 +0.0187 -0.20854 0.2719 +0.0006 -0.20851 0.272 +-0.0176 -0.20849 0.2721 +-0.032 -0.20887 0.2699 +-0.0397 -0.21151 0.2549 +-0.0636 -0.21095 0.2581 +-0.1036 -0.21038 0.2614 +-0.1112 -0.21514 0.2344 +-0.1396 -0.21412 0.2401 +-0.1487 -0.21846 0.2156 +-0.1609 -0.22288 0.1905 +-0.1756 -0.22685 0.168 +-0.1907 -0.23051 0.1472 +-0.2158 -0.23576 0.1175 +-0.1963 -0.24108 0.0873 +-0.1844 -0.24218 0.081 +-0.1843 -0.244 0.0707 +-0.1847 -0.246318 0.0575 +-0.1846 -0.249172 0.0414 +-0.1846 -0.252361 0.0233 +-0.1846 -0.25555 0.0052 +-0.196 -0.23722 0.002 +-0.2069 -0.2189 -0.001 +-0.2179 -0.20063 -0.004 +-0.2294 -0.18246 -0.0067 +-0.2417 -0.16439 -0.0094 +-0.255 -0.14645 -0.0119 +-0.2692 -0.12875 -0.0143 +-0.2841 -0.11115 -0.0166 +-0.2995 -0.09385 -0.0187 +-0.3154 -0.07665 -0.0207 +-0.3316 -0.05965 -0.0226 +-0.3483 -0.04265 -0.0244 +-0.36557 -0.02565 -0.0261 +-0.36434 -0.00175 -0.0304 +-0.3505 0.01285 -0.0353 +-0.36046 0.02595 -0.0412 +-0.36955 0.04115 -0.0404 +-0.37964 0.05525 -0.0396 +-0.38359 0.07245 -0.04 +-0.38091 0.08965 -0.0415 +-0.37815 0.10625 -0.0429 +-0.38866 0.12355 -0.042 +-0.38843 0.14065 -0.0427 +-0.38639 0.16115 -0.0438 +-0.36815 0.18005 -0.0475 +-0.3533 0.20175 -0.0512 +-0.3366 0.21975 -0.0556 +-0.3194 0.21975 -0.0606 +-0.3025 0.23765 -0.0663 +-0.2859 0.23765 -0.0725 +-0.2694 0.23765 -0.0794 +-0.2532 0.25555 -0.0869 +-0.2438 0.25555 -0.0712 +-0.2183 0.25555 -0.063 +-0.2015 0.25555 -0.0724 +-0.185 0.25555 -0.0825 +-0.169 0.25555 -0.0931 +-0.1534 0.25555 -0.1043 +-0.1382 0.25555 -0.1161 +-0.1234 0.25555 -0.1285 +-0.1092 0.25555 -0.1416 +-0.0956 0.25555 -0.1551 +-0.0826 0.25555 -0.1693 +-0.0703 0.25555 -0.1836 +-0.0585 0.25555 -0.1974 +-0.0468 0.25555 -0.2109 +-0.0351 0.25555 -0.2243 +-0.0233 0.25555 -0.2377 +-0.0114 0.25555 -0.2515 +0.0006 0.25555 -0.2646 +0.0129 0.25555 -0.2774 +0.0255 0.25555 -0.2898 +0.0133 0.25555 -0.3029 +0.0267 0.25555 -0.3154 +0.0404 0.25555 -0.3273 +0.0545 0.25555 -0.3389 +0.0689 0.25555 -0.3501 +0.0727 0.25555 -0.376 +0.0883 0.25555 -0.3867 +0.104 0.25555 -0.397 +0.12 0.25555 -0.4067 +0.1363 0.25555 -0.4161 +0.1528 0.24225 -0.4249 +0.1689 0.22945 -0.433 +0.1856 0.22975 -0.4407 +0.2014 0.21745 -0.4475 +0.2169 0.20535 -0.4537 +0.2339 0.20595 -0.4601 +0.2495 0.19435 -0.4653 +0.2651 0.18285 -0.4701 +0.281 0.17165 -0.4745 +0.2968 0.16055 -0.4783 +0.3169 0.15815 -0.4648 +0.336 0.15885 -0.4689 +0.3611 0.15675 -0.4571 +0.3708 0.15315 -0.4365 +0.3803 0.15755 -0.4209 +0.3893 0.16135 -0.4079 +0.4059 0.16395 -0.4051 +0.4153 0.16505 -0.4047 +0.428 0.16605 -0.4048 +0.4429 0.16705 -0.4034 +0.4603 0.17075 -0.3841 +0.4603 0.19055 -0.3681 +0.4603 0.20595 -0.3518 +0.4603 0.21985 -0.3517 +0.4603 0.23675 -0.3497 +0.4603 0.25555 -0.3309 +0.4415 0.25555 -0.3121 +0.4415 0.25555 -0.2933 +0.4415 0.25555 -0.2745 +0.4415 0.25555 -0.2557 +0.4415 0.25555 -0.2369 +0.4227 0.25555 -0.2181 +0.4039 0.25555 -0.1993 +0.3851 0.25555 -0.1805 +0.3663 0.25555 -0.1617 +0.3663 0.25555 -0.1429 +0.3475 0.25555 -0.1241 +0.3287 0.25555 -0.1054 +0.3287 0.25555 -0.0866 +0.3287 0.25555 -0.0678 +0.3287 0.25555 -0.049 +0.3287 0.25555 -0.0302 +0.3099 0.25555 -0.0114 +0.31 0.25555 0.0074 +0.31 0.25555 0.0262 +0.31 0.25555 0.045 +0.31 0.25555 0.0638 +0.3098 0.25555 0.0798 +0.3099 0.25555 0.1011 +0.3091 0.25555 0.1189 +0.3278 0.25555 0.1384 +0.3466 0.25555 0.1573 +0.3656 0.25555 0.1762 +0.3846 0.25555 0.1951 +0.4035 0.25555 0.214 +0.4226 0.25555 0.2141 +0.4414 0.25555 0.2329 +0.4603 0.25555 0.2329 +0.4603 0.24085 0.2506 +0.4603 0.22895 0.2596 +0.4603 0.23915 0.2646 +0.4603 0.23095 0.2812 +0.4603 0.20625 0.2907 +0.4416 0.20575 0.2907 +0.4229 0.20455 0.291 +0.4043 0.20245 0.2913 +0.3858 0.19945 0.2919 +0.3675 0.19565 0.2925 +0.3494 0.19095 0.2933 +0.3315 0.18555 0.2943 +0.3139 0.17925 0.2954 +0.2966 0.17225 0.2967 +0.2797 0.16435 0.298 +0.2631 0.15575 0.2996 +0.247 0.14645 0.3012 +0.2313 0.13635 0.303 +0.2161 0.12565 0.3049 +0.2014 0.11415 0.3069 +0.1873 0.10205 0.309 +0.1738 0.08935 0.3113 +0.1608 0.07605 0.3136 +0.1485 0.06215 0.3161 +0.1369 0.04765 0.3186 +0.126 0.03265 0.3213 +0.1158 0.01725 0.324 +0.1063 0.00135 0.3268 +0.0976 -0.01495 0.3297 +0.0896 -0.03165 0.3326 +0.0824 -0.05185 0.3178 +0.0761 -0.07225 0.303 +0.0705 -0.08985 0.3061 +0.0658 -0.10775 0.3092 +0.062 -0.12895 0.2946 +0.059 -0.14715 0.2978 +0.0568 -0.16857 0.2832 +0.0555 -0.18696 0.2864 +0.0551 -0.20539 0.2897 +0.0369 -0.20539 0.2897 +0.0188 -0.20538 0.2897 +0.0007 -0.20538 0.2897 +-0.0174 -0.20536 0.2898 +-0.0341 -0.20558 0.2886 +-0.047 -0.20594 0.2866 +-0.0453 -0.20947 0.2666 +-0.0652 -0.20596 0.2865 +-0.1007 -0.20561 0.2884 +-0.1282 -0.20541 0.2896 +-0.1328 -0.20974 0.265 +-0.1579 -0.20927 0.2677 +-0.165 -0.21327 0.2449 +-0.174 -0.21708 0.2234 +-0.1849 -0.22091 0.2016 +-0.1987 -0.22447 0.1815 +-0.214 -0.22775 0.1629 +-0.2339 -0.2313 0.1427 +-0.2438 -0.23733 0.1085 +-0.2178 -0.24029 0.0917 +-0.1996 -0.24348 0.0736 +-0.2017 -0.246211 0.0582 +-0.203 -0.249172 0.0414 +-0.203 -0.252361 0.0233 +-0.203 -0.25555 0.0052 +-0.214 -0.23722 0.002 +-0.2247 -0.21891 -0.001 +-0.2354 -0.20066 -0.004 +-0.2467 -0.18247 -0.0067 +-0.259 -0.16442 -0.0094 +-0.2724 -0.14655 -0.0119 +-0.2867 -0.12875 -0.0143 +-0.3018 -0.11125 -0.0166 +-0.3174 -0.09385 -0.0187 +-0.3335 -0.07675 -0.0207 +-0.35 -0.05975 -0.0226 +-0.36699 -0.04285 -0.0244 +-0.38452 -0.02565 -0.0261 +-0.38874 -0.00785 -0.0289 +-0.37673 0.01785 -0.0373 +-0.38507 0.03445 -0.0372 +-0.3908 0.04895 -0.0374 +-0.38686 0.06305 -0.0389 +-0.39461 0.07285 -0.0384 +-0.39344 0.08885 -0.0395 +-0.39139 0.10565 -0.0407 +-0.4054 0.12365 -0.0397 +-0.40477 0.14255 -0.0406 +-0.40444 0.16145 -0.0413 +-0.40427 0.18025 -0.0419 +-0.38591 0.18025 -0.0444 +-0.36988 0.20115 -0.0477 +-0.3539 0.21965 -0.0513 +-0.354 0.23765 -0.0515 +-0.3367 0.23765 -0.0558 +-0.3195 0.23765 -0.0607 +-0.3195 0.25555 -0.0608 +-0.3025 0.25555 -0.0664 +-0.2859 0.25555 -0.0726 +-0.2694 0.25555 -0.0794 +-0.2606 0.25555 -0.0634 +-0.253 0.25555 -0.0461 +-0.2355 0.25555 -0.0542 +-0.2091 0.25555 -0.0457 +-0.1916 0.25555 -0.0555 +-0.1745 0.25555 -0.0659 +-0.1579 0.25555 -0.077 +-0.1417 0.25555 -0.0886 +-0.1259 0.25555 -0.101 +-0.1107 0.25555 -0.114 +-0.096 0.25555 -0.1277 +-0.0821 0.25555 -0.1422 +-0.069 0.25555 -0.1572 +-0.0567 0.25555 -0.172 +-0.0452 0.25555 -0.1857 +-0.0336 0.25555 -0.1991 +-0.022 0.25555 -0.2124 +-0.0105 0.25555 -0.2258 +0.0009 0.25555 -0.2392 +0.0125 0.25555 -0.2519 +0.0244 0.25555 -0.2644 +0.0367 0.25555 -0.2765 +0.0493 0.25555 -0.2882 +0.0385 0.25555 -0.3019 +0.0519 0.25555 -0.3135 +0.0656 0.25555 -0.3248 +0.0796 0.25555 -0.3357 +0.094 0.25555 -0.3461 +0.0835 0.25555 -0.3608 +0.0986 0.25555 -0.3713 +0.1139 0.25555 -0.3813 +0.1295 0.25555 -0.3907 +0.1453 0.25555 -0.3998 +0.1614 0.25555 -0.4085 +0.1529 0.25555 -0.425 +0.1694 0.24245 -0.4332 +0.1862 0.24265 -0.4411 +0.2024 0.23015 -0.4481 +0.2183 0.21795 -0.4544 +0.2353 0.21835 -0.4607 +0.251 0.20655 -0.466 +0.2667 0.19495 -0.4708 +0.2826 0.18355 -0.4751 +0.2987 0.17235 -0.4791 +0.3146 0.16125 -0.4826 +0.3324 0.16195 -0.4863 +0.3543 0.15975 -0.4738 +0.3677 0.16085 -0.4799 +0.3811 0.15935 -0.4716 +0.3876 0.15455 -0.4446 +0.3943 0.15845 -0.4283 +0.4015 0.16185 -0.4145 +0.4139 0.16265 -0.4177 +0.4278 0.16325 -0.4204 +0.443 0.16375 -0.4221 +0.4603 0.16405 -0.4222 +0.4603 0.16745 -0.4032 +0.4603 0.18985 -0.3875 +0.4603 0.20405 -0.3697 +0.4603 0.21885 -0.3688 +0.4603 0.23675 -0.3685 +0.4603 0.25555 -0.3497 +0.4415 0.25555 -0.3309 +0.4227 0.25555 -0.3121 +0.4227 0.25555 -0.2933 +0.4227 0.25555 -0.2745 +0.4227 0.25555 -0.2557 +0.4227 0.25555 -0.2369 +0.4039 0.25555 -0.2181 +0.3851 0.25555 -0.1993 +0.3663 0.25555 -0.1805 +0.3475 0.25555 -0.1617 +0.3475 0.25555 -0.1429 +0.3287 0.25555 -0.1241 +0.3099 0.25555 -0.1054 +0.3099 0.25555 -0.0866 +0.3099 0.25555 -0.0678 +0.3099 0.25555 -0.049 +0.3099 0.25555 -0.0302 +0.2912 0.25555 -0.0114 +0.2912 0.25555 0.0074 +0.2913 0.25555 0.0262 +0.2914 0.25555 0.045 +0.2911 0.25555 0.0616 +0.2902 0.25555 0.0766 +0.2885 0.25555 0.0988 +0.2849 0.25555 0.1177 +0.3059 0.25555 0.1375 +0.3263 0.25555 0.1561 +0.3456 0.25555 0.1756 +0.3648 0.25555 0.1947 +0.384 0.25555 0.2138 +0.4032 0.25555 0.2328 +0.4225 0.25555 0.2329 +0.4414 0.25555 0.2517 +0.4603 0.25555 0.2517 +0.4603 0.25555 0.2705 +0.4603 0.25555 0.2893 +0.4603 0.23245 0.3082 +0.4603 0.20935 0.3085 +0.4417 0.20895 0.3086 +0.4231 0.20765 0.3088 +0.4045 0.20555 0.3092 +0.386 0.20265 0.3097 +0.3677 0.19885 0.3104 +0.3496 0.19415 0.3112 +0.3317 0.18875 0.3121 +0.314 0.18245 0.3132 +0.2967 0.17545 0.3145 +0.2797 0.16755 0.3159 +0.2632 0.15895 0.3174 +0.247 0.14965 0.319 +0.2314 0.13955 0.3208 +0.2162 0.12885 0.3227 +0.2015 0.11735 0.3247 +0.1874 0.10525 0.3268 +0.1738 0.09255 0.3291 +0.1609 0.07925 0.3314 +0.1486 0.06535 0.3339 +0.137 0.05085 0.3364 +0.126 0.03595 0.3391 +0.1158 0.02045 0.3418 +0.1063 0.00455 0.3446 +0.0976 -0.01175 0.3475 +0.0897 -0.02845 0.3504 +0.0825 -0.04545 0.3534 +0.0824 -0.04865 0.3356 +0.0761 -0.06915 0.3208 +0.0705 -0.08675 0.3239 +0.0658 -0.10455 0.3271 +0.062 -0.12575 0.3124 +0.059 -0.14395 0.3156 +0.0568 -0.16543 0.301 +0.0555 -0.18382 0.3043 +0.0551 -0.20225 0.3075 +0.0369 -0.20225 0.3075 +0.0188 -0.20224 0.3075 +0.0007 -0.20224 0.3076 +-0.0176 -0.2026 0.3055 +-0.0346 -0.2032 0.3021 +-0.045 -0.20378 0.2989 +-0.0571 -0.20196 0.3092 +-0.0961 -0.20127 0.313 +-0.1245 -0.2014 0.3123 +-0.149 -0.20127 0.313 +-0.1525 -0.20527 0.2903 +-0.1722 -0.20507 0.2915 +-0.1772 -0.20883 0.2702 +-0.1843 -0.21249 0.2494 +-0.1935 -0.21603 0.2293 +-0.2047 -0.21942 0.2101 +-0.2178 -0.22259 0.1921 +-0.2327 -0.22552 0.1755 +-0.2499 -0.22822 0.1601 +-0.2539 -0.23382 0.1284 +-0.2602 -0.23896 0.0992 +-0.2509 -0.24095 0.088 +-0.2385 -0.24052 0.0904 +-0.2196 -0.24311 0.0757 +-0.2214 -0.245983 0.0595 +-0.2214 -0.249172 0.0414 +-0.2214 -0.252361 0.0233 +-0.2214 -0.25555 0.0052 +-0.2321 -0.23724 0.002 +-0.2424 -0.21893 -0.001 +-0.2529 -0.20068 -0.004 +-0.2641 -0.18251 -0.0067 +-0.2764 -0.16445 -0.0094 +-0.2897 -0.14655 -0.0119 +-0.3042 -0.12885 -0.0143 +-0.3194 -0.11135 -0.0166 +-0.3353 -0.09405 -0.0187 +-0.3516 -0.07695 -0.0207 +-0.36838 -0.06005 -0.0225 +-0.38565 -0.04305 -0.0243 +-0.40346 -0.02565 -0.0261 +-0.40535 -0.01225 -0.028 +-0.40946 0.00105 -0.0312 +-0.39308 0.00955 -0.034 +-0.39942 0.02615 -0.0345 +-0.40377 0.04165 -0.0351 +-0.40746 0.05735 -0.0358 +-0.39455 0.06095 -0.0377 +-0.40892 0.07105 -0.0365 +-0.40775 0.08725 -0.0376 +-0.4065 0.10465 -0.0387 +-0.42325 0.12405 -0.038 +-0.42304 0.14285 -0.0388 +-0.42292 0.16155 -0.0395 +-0.42285 0.18035 -0.04 +-0.40456 0.19925 -0.0422 +-0.38622 0.20015 -0.0448 +-0.37134 0.21955 -0.0477 +-0.37142 0.23755 -0.0478 +-0.37142 0.25555 -0.0479 +-0.354 0.25555 -0.0515 +-0.3367 0.25555 -0.0558 +-0.3305 0.25555 -0.0387 +-0.3127 0.25555 -0.0439 +-0.2951 0.25555 -0.0497 +-0.2777 0.25555 -0.0562 +-0.2708 0.25555 -0.0387 +-0.2451 0.25555 -0.0281 +-0.2269 0.25555 -0.0366 +-0.1995 0.25555 -0.0278 +-0.1813 0.25555 -0.0379 +-0.1636 0.25555 -0.0488 +-0.1463 0.25555 -0.0602 +-0.1295 0.25555 -0.0724 +-0.1131 0.25555 -0.0853 +-0.0973 0.25555 -0.0991 +-0.0823 0.25555 -0.1138 +-0.0682 0.25555 -0.1294 +-0.0552 0.25555 -0.1455 +-0.0436 0.25555 -0.1603 +-0.0323 0.25555 -0.1737 +-0.021 0.25555 -0.187 +-0.0097 0.25555 -0.2002 +0.0014 0.25555 -0.2134 +0.0123 0.25555 -0.2263 +0.0235 0.25555 -0.2387 +0.0351 0.25555 -0.2509 +0.047 0.25555 -0.2627 +0.0592 0.25555 -0.2742 +0.0719 0.25555 -0.2852 +0.0623 0.25555 -0.2995 +0.0756 0.25555 -0.3105 +0.0893 0.25555 -0.3211 +0.1032 0.25555 -0.3314 +0.1174 0.25555 -0.3413 +0.1086 0.25555 -0.3563 +0.1234 0.25555 -0.366 +0.1386 0.25555 -0.3752 +0.1541 0.25555 -0.384 +0.1697 0.25555 -0.3925 +0.1856 0.25555 -0.4005 +0.1778 0.25555 -0.4167 +0.1697 0.25555 -0.4334 +0.1868 0.25555 -0.4414 +0.2032 0.24285 -0.4485 +0.2194 0.23045 -0.4549 +0.2366 0.23075 -0.4613 +0.2525 0.21875 -0.4666 +0.2683 0.20705 -0.4714 +0.2841 0.19555 -0.4758 +0.3001 0.18415 -0.4798 +0.3164 0.17295 -0.4833 +0.3342 0.17355 -0.487 +0.3504 0.16255 -0.4896 +0.3685 0.16305 -0.4924 +0.3866 0.16345 -0.4947 +0.4048 0.15995 -0.4753 +0.405 0.15575 -0.4513 +0.4106 0.15935 -0.4346 +0.4258 0.16005 -0.4377 +0.4413 0.16035 -0.4412 +0.4603 0.16075 -0.4413 +0.4603 0.18315 -0.4256 +0.4603 0.18645 -0.4066 +0.4603 0.20335 -0.4069 +0.4603 0.20515 -0.388 +0.4603 0.21975 -0.3874 +0.4603 0.23675 -0.3872 +0.4603 0.25555 -0.3685 +0.4415 0.25555 -0.3497 +0.4227 0.25555 -0.3309 +0.4039 0.25555 -0.3121 +0.4039 0.25555 -0.2933 +0.4039 0.25555 -0.2745 +0.4039 0.25555 -0.2557 +0.4039 0.25555 -0.2369 +0.3851 0.25555 -0.2181 +0.3663 0.25555 -0.1993 +0.3475 0.25555 -0.1805 +0.3287 0.25555 -0.1617 +0.3287 0.25555 -0.1429 +0.3099 0.25555 -0.1241 +0.2911 0.25555 -0.1054 +0.2911 0.25555 -0.0866 +0.2911 0.25555 -0.0678 +0.2911 0.25555 -0.049 +0.2912 0.25555 -0.0302 +0.2724 0.25555 -0.0113 +0.2725 0.25555 0.0075 +0.2725 0.25555 0.0263 +0.2746 0.25555 0.0457 +0.2741 0.25555 0.0596 +0.2718 0.25555 0.0719 +0.2669 0.25555 0.0931 +0.2614 0.25555 0.1174 +0.2823 0.25555 0.1371 +0.3025 0.25555 0.1561 +0.3237 0.25555 0.1757 +0.3436 0.25555 0.1934 +0.3634 0.25555 0.2129 +0.3831 0.25555 0.2323 +0.4027 0.25555 0.2514 +0.4223 0.25555 0.2517 +0.4413 0.25555 0.2705 +0.4412 0.25555 0.2893 +0.4603 0.25555 0.3081 +0.4411 0.25555 0.3082 +0.4424 0.23125 0.3083 +0.4221 0.23065 0.3085 +0.3942 0.22915 0.3091 +0.3785 0.21785 0.3096 +0.3637 0.21405 0.3102 +0.347 0.20905 0.311 +0.3292 0.20425 0.3119 +0.3108 0.19845 0.313 +0.2926 0.19185 0.3143 +0.2713 0.18475 0.3159 +0.254 0.17575 0.3175 +0.2402 0.16695 0.319 +0.2226 0.15505 0.321 +0.2067 0.14405 0.3229 +0.1926 0.13285 0.3248 +0.1747 0.11955 0.3274 +0.1605 0.10625 0.3298 +0.147 0.09225 0.3322 +0.1341 0.07775 0.3348 +0.1219 0.06265 0.3375 +0.1105 0.04695 0.3402 +0.0998 0.03075 0.3431 +0.0899 0.01415 0.346 +0.0809 -0.00155 0.3489 +0.0708 -0.01655 0.3519 +0.0625 -0.03405 0.3551 +0.0761 -0.06285 0.3565 +0.0761 -0.06605 0.3387 +0.0705 -0.08365 0.3418 +0.0658 -0.10145 0.3449 +0.062 -0.12265 0.3303 +0.059 -0.14085 0.3335 +0.0568 -0.16227 0.3189 +0.0555 -0.18067 0.3221 +0.0551 -0.19909 0.3253 +0.037 -0.19909 0.3253 +0.0188 -0.19909 0.3254 +-0.0003 -0.19914 0.3251 +-0.0188 -0.19967 0.3221 +-0.0379 -0.2005 0.3174 +-0.0675 -0.19575 0.3444 +-0.0983 -0.19625 0.3415 +-0.1239 -0.19692 0.3377 +-0.1477 -0.19737 0.3352 +-0.1683 -0.1975 0.3344 +-0.1694 -0.20127 0.313 +-0.1884 -0.20118 0.3135 +-0.1914 -0.20472 0.2934 +-0.1977 -0.20791 0.2754 +-0.2045 -0.21125 0.2564 +-0.213 -0.21447 0.2382 +-0.2234 -0.21752 0.2208 +-0.2355 -0.22039 0.2046 +-0.2491 -0.22303 0.1896 +-0.2643 -0.22544 0.1759 +-0.2677 -0.23059 0.1468 +-0.2734 -0.23574 0.1176 +-0.2934 -0.23747 0.1078 +-0.2754 -0.24169 0.0838 +-0.255 -0.24311 0.0758 +-0.2386 -0.24314 0.0755 +-0.2397 -0.245983 0.0595 +-0.2397 -0.249172 0.0414 +-0.2397 -0.252361 0.0233 +-0.2397 -0.25555 0.0052 +-0.2502 -0.23724 0.002 +-0.2602 -0.21894 -0.001 +-0.2705 -0.20069 -0.0039 +-0.2815 -0.18254 -0.0067 +-0.2937 -0.16448 -0.0094 +-0.3071 -0.14665 -0.0119 +-0.3216 -0.12895 -0.0143 +-0.3371 -0.11145 -0.0165 +-0.3531 -0.09435 -0.0187 +-0.36971 -0.07745 -0.0206 +-0.38677 -0.06055 -0.0225 +-0.40431 -0.04345 -0.0243 +-0.42241 -0.02565 -0.0261 +-0.42231 -0.01615 -0.0273 +-0.42591 -0.00745 -0.029 +-0.43116 0.00555 -0.0298 +-0.41831 0.01525 -0.0315 +-0.4269 0.02865 -0.0319 +-0.42604 0.05385 -0.0338 +-0.42607 0.06935 -0.0349 +-0.42437 0.08635 -0.036 +-0.42366 0.10515 -0.0371 +-0.44165 0.12415 -0.0369 +-0.44159 0.14285 -0.0377 +-0.44156 0.16165 -0.0384 +-0.44155 0.18045 -0.0389 +-0.44153 0.19915 -0.0393 +-0.42282 0.19915 -0.0405 +-0.40619 0.21885 -0.0424 +-0.38893 0.21935 -0.0447 +-0.38904 0.23755 -0.0448 +-0.38904 0.25555 -0.0449 +-0.38486 0.25555 -0.0271 +-0.36659 0.25555 -0.0303 +-0.3485 0.25555 -0.0341 +-0.3256 0.25555 -0.0205 +-0.3071 0.25555 -0.0258 +-0.2888 0.25555 -0.0319 +-0.2673 0.25555 -0.0193 +-0.2406 0.25555 -0.0091 +-0.218 0.25555 -0.0183 +-0.1921 0.25555 -0.0135 +-0.1727 0.25555 -0.0205 +-0.1522 0.25555 -0.031 +-0.1343 0.25555 -0.0428 +-0.1167 0.25555 -0.0554 +-0.0996 0.25555 -0.0692 +-0.0833 0.25555 -0.084 +-0.0679 0.25555 -0.1 +-0.0539 0.25555 -0.1172 +-0.0417 0.25555 -0.1343 +-0.031 0.25555 -0.1483 +-0.0201 0.25555 -0.1615 +-0.0091 0.25555 -0.1745 +0.0018 0.25555 -0.1875 +0.0124 0.25555 -0.2004 +0.023 0.25555 -0.213 +0.0338 0.25555 -0.2251 +0.045 0.25555 -0.237 +0.0565 0.25555 -0.2485 +0.0683 0.25555 -0.2597 +0.0805 0.25555 -0.2705 +0.093 0.25555 -0.281 +0.0848 0.25555 -0.296 +0.098 0.25555 -0.3063 +0.1115 0.25555 -0.3163 +0.1253 0.25555 -0.326 +0.1393 0.25555 -0.3352 +0.1319 0.25555 -0.3507 +0.1466 0.25555 -0.3597 +0.1616 0.25555 -0.3683 +0.1768 0.25555 -0.3766 +0.1923 0.25555 -0.3844 +0.2079 0.25555 -0.3917 +0.2017 0.25555 -0.408 +0.1944 0.25555 -0.4245 +0.2112 0.25555 -0.4317 +0.2041 0.25555 -0.4489 +0.2205 0.24295 -0.4554 +0.2378 0.24315 -0.4618 +0.254 0.23095 -0.4672 +0.2699 0.21915 -0.4721 +0.2857 0.20755 -0.4764 +0.3016 0.19605 -0.4803 +0.3177 0.18475 -0.4839 +0.3354 0.18525 -0.4875 +0.352 0.17405 -0.4902 +0.37 0.17455 -0.4929 +0.388 0.17515 -0.4951 +0.4048 0.16375 -0.4965 +0.4233 0.16055 -0.4782 +0.4231 0.15665 -0.4562 +0.4415 0.15715 -0.4593 +0.4603 0.15735 -0.4603 +0.4603 0.18135 -0.4603 +0.4603 0.18225 -0.4434 +0.4603 0.20085 -0.4446 +0.4603 0.20225 -0.4252 +0.4603 0.21825 -0.4249 +0.4603 0.21805 -0.4061 +0.4603 0.23675 -0.406 +0.4603 0.25555 -0.3872 +0.4415 0.25555 -0.3685 +0.4227 0.25555 -0.3497 +0.4039 0.25555 -0.3309 +0.3851 0.25555 -0.3121 +0.3851 0.25555 -0.2933 +0.3851 0.25555 -0.2745 +0.3851 0.25555 -0.2557 +0.3851 0.25555 -0.2369 +0.3663 0.25555 -0.2181 +0.3475 0.25555 -0.1993 +0.3287 0.25555 -0.1805 +0.3099 0.25555 -0.1617 +0.3099 0.25555 -0.1458 +0.2911 0.25555 -0.1241 +0.2723 0.25555 -0.1054 +0.2723 0.25555 -0.0866 +0.2723 0.25555 -0.0678 +0.2723 0.25555 -0.049 +0.2724 0.25555 -0.0302 +0.2543 0.25555 -0.0113 +0.2554 0.25555 0.0094 +0.2572 0.25555 0.0296 +0.2611 0.25555 0.0476 +0.2643 0.25555 0.0579 +0.2574 0.25555 0.0655 +0.2417 0.25555 0.0826 +0.2365 0.25555 0.1163 +0.2592 0.25555 0.1375 +0.2796 0.25555 0.1562 +0.301 0.25555 0.1757 +0.3221 0.25555 0.1949 +0.3411 0.25555 0.2132 +0.3617 0.25555 0.2322 +0.382 0.25555 0.2512 +0.402 0.25555 0.2703 +0.422 0.25555 0.2704 +0.4217 0.25555 0.2892 +0.422 0.25555 0.3084 +0.4028 0.25555 0.3087 +0.3837 0.25555 0.3092 +0.3773 0.23765 0.3095 +0.3722 0.22715 0.3098 +0.3622 0.22625 0.3101 +0.3451 0.22395 0.3108 +0.3271 0.22075 0.3117 +0.3076 0.21775 0.3129 +0.289 0.21345 0.3141 +0.2614 0.20715 0.3162 +0.2462 0.19215 0.3177 +0.2337 0.18445 0.319 +0.2133 0.17135 0.3212 +0.1969 0.15965 0.3233 +0.1842 0.15015 0.325 +0.1651 0.13525 0.3277 +0.1466 0.12055 0.3307 +0.1324 0.10595 0.3332 +0.119 0.09065 0.3359 +0.1063 0.07485 0.3387 +0.0944 0.05845 0.3416 +0.0833 0.04145 0.3446 +0.0731 0.02395 0.3476 +0.0648 0.01265 0.3499 +0.049 0.00035 0.3536 +0.0428 -0.02265 0.357 +0.0379 -0.03575 0.3593 +0.0485 -0.05145 0.3594 +0.049 -0.07655 0.3625 +0.0705 -0.08045 0.3596 +0.0658 -0.09835 0.3627 +0.062 -0.11635 0.3659 +0.062 -0.11945 0.3481 +0.059 -0.13765 0.3513 +0.0568 -0.15913 0.3367 +0.0555 -0.17753 0.3399 +0.0551 -0.19595 0.3432 +0.037 -0.19595 0.3432 +0.0182 -0.1956 0.3452 +-0.0009 -0.19535 0.3466 +-0.02 -0.19512 0.3479 +-0.0417 -0.19538 0.3464 +-0.0409 -0.19035 0.375 +-0.0683 -0.18913 0.3819 +-0.1001 -0.19132 0.3694 +-0.1248 -0.19229 0.364 +-0.1484 -0.19314 0.3591 +-0.1686 -0.19374 0.3557 +-0.1874 -0.1941 0.3537 +-0.1871 -0.19769 0.3333 +-0.2079 -0.20085 0.3154 +-0.2106 -0.20407 0.2972 +-0.2152 -0.20721 0.2794 +-0.2215 -0.21026 0.262 +-0.2294 -0.21319 0.2454 +-0.239 -0.21598 0.2296 +-0.2502 -0.21859 0.2148 +-0.2627 -0.22099 0.2012 +-0.2765 -0.22317 0.1888 +-0.2805 -0.22757 0.1639 +-0.2865 -0.23263 0.1351 +-0.3063 -0.23439 0.1252 +-0.3138 -0.2391 0.0984 +-0.3057 -0.24269 0.0782 +-0.2765 -0.245983 0.0595 +-0.2581 -0.245983 0.0595 +-0.2581 -0.249172 0.0414 +-0.2581 -0.252361 0.0233 +-0.2581 -0.25555 0.0052 +-0.2682 -0.23725 0.002 +-0.278 -0.21896 -0.001 +-0.288 -0.20072 -0.0039 +-0.2989 -0.18257 -0.0067 +-0.311 -0.16453 -0.0094 +-0.3245 -0.14665 -0.0119 +-0.3391 -0.12915 -0.0143 +-0.3547 -0.11185 -0.0165 +-0.371 -0.09485 -0.0186 +-0.38782 -0.07805 -0.0205 +-0.40514 -0.06115 -0.0224 +-0.42298 -0.04385 -0.0242 +-0.44135 -0.02565 -0.0261 +-0.43531 -0.02015 -0.0267 +-0.44232 -0.01605 -0.0273 +-0.44475 0.00055 -0.0287 +-0.43573 0.01385 -0.0302 +-0.44326 0.03115 -0.0313 +-0.44261 0.05135 -0.0328 +-0.4422 0.06785 -0.0339 +-0.44191 0.08665 -0.035 +-0.44174 0.10535 -0.036 +-0.4603 0.12415 -0.0366 +-0.4603 0.14285 -0.0374 +-0.4603 0.16165 -0.038 +-0.4603 0.18045 -0.0386 +-0.4603 0.19915 -0.039 +-0.4603 0.21795 -0.0393 +-0.44153 0.21795 -0.0397 +-0.42314 0.21805 -0.0407 +-0.40676 0.23735 -0.0425 +-0.40676 0.25555 -0.0425 +-0.40325 0.25555 -0.0247 +-0.38199 0.25555 -0.0085 +-0.36304 0.25555 -0.0118 +-0.3443 0.25555 -0.0157 +-0.3204 0.25555 -0.0015 +-0.3012 0.25555 -0.0071 +-0.2823 0.25555 -0.0134 +-0.264 0.25555 -0.0019 +-0.2617 0.25555 0.0135 +-0.2351 0.25555 0.0145 +-0.2092 0.25555 -0.0013 +-0.1854 0.25555 -0.0005 +-0.1654 0.25555 0.0008 +-0.1384 0.25555 -0.0138 +-0.1191 0.25555 -0.027 +-0.1012 0.25555 -0.041 +-0.0839 0.25555 -0.0559 +-0.0673 0.25555 -0.0699 +-0.0525 0.25555 -0.0875 +-0.0397 0.25555 -0.1061 +-0.0289 0.25555 -0.1208 +-0.0183 0.25555 -0.1344 +-0.0082 0.25555 -0.1472 +0.0021 0.25555 -0.1601 +0.0126 0.25555 -0.1743 +0.0228 0.25555 -0.1868 +0.0329 0.25555 -0.1991 +0.0433 0.25555 -0.211 +0.0541 0.25555 -0.2226 +0.0652 0.25555 -0.2338 +0.0766 0.25555 -0.2448 +0.0884 0.25555 -0.2554 +0.1005 0.25555 -0.2657 +0.1129 0.25555 -0.2756 +0.1059 0.25555 -0.2911 +0.1189 0.25555 -0.3009 +0.1322 0.25555 -0.3104 +0.1458 0.25555 -0.3194 +0.1597 0.25555 -0.328 +0.1536 0.25555 -0.344 +0.1682 0.25555 -0.3524 +0.1829 0.25555 -0.3605 +0.1978 0.25555 -0.3681 +0.213 0.25555 -0.3753 +0.2283 0.25555 -0.3821 +0.2237 0.25555 -0.3986 +0.218 0.25555 -0.4151 +0.2345 0.25555 -0.4216 +0.2281 0.25555 -0.4385 +0.2215 0.25555 -0.4558 +0.2391 0.25555 -0.4623 +0.2554 0.24325 -0.4678 +0.2715 0.23125 -0.4727 +0.2873 0.21945 -0.477 +0.3031 0.20785 -0.4809 +0.3191 0.19645 -0.4844 +0.3367 0.19685 -0.4879 +0.3532 0.18565 -0.4906 +0.3709 0.18615 -0.4933 +0.3888 0.18705 -0.4955 +0.406 0.17615 -0.4969 +0.423 0.16395 -0.4977 +0.4418 0.16085 -0.4805 +0.4603 0.16075 -0.4795 +0.4603 0.18285 -0.4793 +0.4603 0.20025 -0.4614 +0.4603 0.21885 -0.4625 +0.4603 0.21845 -0.4437 +0.4603 0.23675 -0.4248 +0.4603 0.25555 -0.406 +0.4415 0.25555 -0.3872 +0.4227 0.25555 -0.3685 +0.4039 0.25555 -0.3497 +0.3851 0.25555 -0.3309 +0.3663 0.25555 -0.3121 +0.3667 0.25555 -0.2951 +0.3663 0.25555 -0.2745 +0.3663 0.25555 -0.2557 +0.3663 0.25555 -0.2369 +0.3475 0.25555 -0.2181 +0.3287 0.25555 -0.1993 +0.3099 0.25555 -0.1805 +0.2914 0.25555 -0.165 +0.2917 0.25555 -0.1488 +0.2735 0.25555 -0.1274 +0.2536 0.25555 -0.1054 +0.2536 0.25555 -0.0866 +0.2537 0.25555 -0.0677 +0.2538 0.25555 -0.0489 +0.254 0.25555 -0.0301 +0.2338 0.25555 -0.0298 +0.2342 0.25555 -0.0087 +0.2379 0.25555 0.0127 +0.2413 0.25555 0.0331 +0.248 0.25555 0.0517 +0.2285 0.25555 0.0586 +0.2072 0.25555 0.0907 +0.2123 0.25555 0.1157 +0.2151 0.25555 0.1392 +0.2355 0.25555 0.138 +0.2572 0.25555 0.1573 +0.2788 0.25555 0.1763 +0.3001 0.25555 0.1952 +0.3212 0.25555 0.214 +0.3222 0.25555 0.2338 +0.3419 0.25555 0.2329 +0.3428 0.25555 0.2525 +0.3624 0.25555 0.2518 +0.3631 0.25555 0.2713 +0.3825 0.25555 0.2706 +0.3831 0.25555 0.29 +0.4024 0.25555 0.2895 +0.3638 0.25555 0.2906 +0.3645 0.25555 0.3099 +0.3629 0.23905 0.31 +0.3445 0.23785 0.3107 +0.3262 0.23625 0.3116 +0.3071 0.23625 0.3127 +0.2879 0.23635 0.3139 +0.2668 0.23565 0.3154 +0.2439 0.21495 0.3174 +0.2391 0.20185 0.3181 +0.2287 0.20025 0.319 +0.2028 0.19295 0.3217 +0.1883 0.17765 0.3236 +0.1753 0.16985 0.3252 +0.1509 0.16045 0.3284 +0.1321 0.13705 0.3316 +0.1174 0.12005 0.3344 +0.1035 0.10395 0.3372 +0.0904 0.08495 0.3403 +0.0786 0.06945 0.3431 +0.0684 0.05045 0.3461 +0.0602 0.03355 0.3487 +0.056 0.02325 0.3503 +0.0418 0.02205 0.3527 +0.0228 0.00135 0.3579 +0.0235 -0.01855 0.3598 +0.024 -0.03625 0.3617 +0.0246 -0.05395 0.3637 +0.0237 -0.07355 0.3663 +0.0457 -0.09495 0.3655 +0.0436 -0.11245 0.3683 +0.0406 -0.13145 0.3717 +0.059 -0.13455 0.3691 +0.0568 -0.15285 0.3724 +0.0568 -0.15598 0.3545 +0.0555 -0.17437 0.3578 +0.0551 -0.1928 0.361 +0.0375 -0.19248 0.3629 +0.0185 -0.19203 0.3655 +-0.0003 -0.19146 0.3686 +-0.0188 -0.19088 0.3719 +-0.0184 -0.18754 0.3909 +-0.0387 -0.18699 0.394 +-0.0579 -0.186 0.3996 +-0.0807 -0.18618 0.3985 +-0.1016 -0.18739 0.3918 +-0.1256 -0.18843 0.3858 +-0.1494 -0.18945 0.3801 +-0.1695 -0.19023 0.3757 +-0.1879 -0.19061 0.3735 +-0.207 -0.1941 0.3537 +-0.207 -0.19761 0.3338 +-0.2079 -0.18119 0.312 +-0.2106 -0.18428 0.2938 +-0.2152 -0.1873 0.2759 +-0.2215 -0.19023 0.2585 +-0.2295 -0.19303 0.2418 +-0.2391 -0.1957 0.226 +-0.2503 -0.19819 0.2112 +-0.2628 -0.2005 0.1975 +-0.2767 -0.20259 0.1851 +-0.2914 -0.22511 0.1779 +-0.2979 -0.22941 0.1534 +-0.3163 -0.23097 0.1446 +-0.3258 -0.23593 0.1165 +-0.3344 -0.24058 0.0901 +-0.3266 -0.24359 0.073 +-0.3224 -0.246471 0.0567 +-0.3008 -0.246196 0.0583 +-0.2979 -0.249248 0.041 +-0.2765 -0.249172 0.0414 +-0.2765 -0.252361 0.0233 +-0.2765 -0.25555 0.0052 +-0.2863 -0.23725 0.002 +-0.2957 -0.21897 -0.001 +-0.3055 -0.20074 -0.0039 +-0.3162 -0.1826 -0.0067 +-0.3283 -0.16462 -0.0094 +-0.3418 -0.14695 -0.0119 +-0.3566 -0.12955 -0.0142 +-0.37238 -0.11255 -0.0164 +-0.38887 -0.09575 -0.0185 +-0.40595 -0.07905 -0.0204 +-0.42353 -0.06205 -0.0223 +-0.44164 -0.04435 -0.0242 +-0.4603 -0.02565 -0.0261 +-0.4603 -0.00695 -0.0278 +-0.4603 0.01175 -0.0294 +-0.44617 0.01355 -0.0298 +-0.4603 0.03045 -0.0309 +-0.4603 0.04915 -0.0323 +-0.4603 0.06785 -0.0335 +-0.4603 0.08665 -0.0347 +-0.4603 0.10535 -0.0357 +-0.4603 0.10635 -0.017 +-0.4603 0.12495 -0.0178 +-0.4603 0.14365 -0.0186 +-0.4603 0.16225 -0.0192 +-0.4603 0.18095 -0.0196 +-0.4603 0.19955 -0.0199 +-0.4603 0.21825 -0.0199 +-0.4603 0.23675 -0.0395 +-0.44173 0.23675 -0.0398 +-0.42453 0.23715 -0.0408 +-0.42456 0.25555 -0.0409 +-0.42169 0.25555 -0.0228 +-0.40106 0.25555 -0.0059 +-0.39826 0.25555 0.0144 +-0.3763 0.25555 0.0107 +-0.3593 0.25555 0.0074 +-0.3425 0.25555 0.0037 +-0.3415 0.25555 0.0219 +-0.3128 0.25555 0.0232 +-0.2912 0.25555 0.0095 +-0.2777 0.25555 0.0024 +-0.2733 0.25555 0.0124 +-0.267 0.25555 0.0296 +-0.2463 0.25555 0.0403 +-0.2093 0.25555 0.0315 +-0.1948 0.25555 0.0133 +-0.1749 0.25555 0.0258 +-0.1367 0.25555 0.0224 +-0.1207 0.25555 0.0064 +-0.1038 0.25555 -0.0102 +-0.0853 0.25555 -0.025 +-0.0678 0.25555 -0.0412 +-0.0507 0.25555 -0.0572 +-0.0392 0.25555 -0.077 +-0.0263 0.25555 -0.0955 +-0.0165 0.25555 -0.1088 +-0.007 0.25555 -0.1217 +0.0027 0.25555 -0.1341 +0.0128 0.25555 -0.1465 +0.0239 0.25555 -0.1609 +0.0338 0.25555 -0.1732 +0.0437 0.25555 -0.1847 +0.0539 0.25555 -0.1961 +0.0644 0.25555 -0.2074 +0.0751 0.25555 -0.2183 +0.0861 0.25555 -0.229 +0.0975 0.25555 -0.2394 +0.1092 0.25555 -0.2494 +0.121 0.25555 -0.2593 +0.133 0.25555 -0.2683 +0.1255 0.25555 -0.2852 +0.1384 0.25555 -0.2944 +0.1515 0.25555 -0.3033 +0.1665 0.25555 -0.3119 +0.18 0.25555 -0.3195 +0.1738 0.25555 -0.3363 +0.188 0.25555 -0.3442 +0.2024 0.25555 -0.3517 +0.217 0.25555 -0.3587 +0.2328 0.25555 -0.364 +0.2476 0.25555 -0.37 +0.2438 0.25555 -0.3884 +0.2397 0.25555 -0.405 +0.2559 0.25555 -0.4111 +0.2512 0.25555 -0.4278 +0.2453 0.25555 -0.4448 +0.2627 0.25555 -0.4506 +0.257 0.25555 -0.4683 +0.2732 0.24335 -0.4732 +0.2891 0.23145 -0.4776 +0.3048 0.21975 -0.4815 +0.3206 0.20825 -0.4849 +0.3382 0.20855 -0.4884 +0.3543 0.19725 -0.491 +0.372 0.19775 -0.4937 +0.3897 0.19905 -0.4958 +0.4066 0.18885 -0.4972 +0.4241 0.17785 -0.4981 +0.4413 0.16405 -0.4985 +0.4603 0.16415 -0.4988 +0.4603 0.18235 -0.4992 +0.4603 0.20105 -0.4802 +0.4603 0.21915 -0.4809 +0.4603 0.23695 -0.4624 +0.4603 0.23685 -0.4436 +0.4603 0.25555 -0.4248 +0.4415 0.25555 -0.406 +0.4227 0.25555 -0.3872 +0.4039 0.25555 -0.3685 +0.3851 0.25555 -0.3497 +0.3663 0.25555 -0.3309 +0.3494 0.25555 -0.3137 +0.3483 0.25555 -0.2973 +0.3474 0.25555 -0.2771 +0.3475 0.25555 -0.2557 +0.3475 0.25555 -0.2369 +0.3287 0.25555 -0.2181 +0.3099 0.25555 -0.1993 +0.2911 0.25555 -0.1805 +0.2779 0.25555 -0.1673 +0.2761 0.25555 -0.1524 +0.2552 0.25555 -0.1302 +0.2363 0.25555 -0.1282 +0.2356 0.25555 -0.1079 +0.2363 0.25555 -0.0893 +0.2358 0.25555 -0.0704 +0.2361 0.25555 -0.0513 +0.2183 0.25555 -0.0536 +0.2137 0.25555 -0.033 +0.2044 0.25555 -0.0079 +0.2132 0.25555 0.0204 +0.2198 0.25555 0.0385 +0.2004 0.25555 0.0669 +0.1839 0.25555 0.0937 +0.1895 0.25555 0.1175 +0.1947 0.25555 0.1403 +0.1962 0.25555 0.1614 +0.2166 0.25555 0.16 +0.2369 0.25555 0.1586 +0.2385 0.25555 0.1791 +0.2586 0.25555 0.1777 +0.2601 0.25555 0.1978 +0.2801 0.25555 0.1964 +0.2814 0.25555 0.2164 +0.3013 0.25555 0.2151 +0.3025 0.25555 0.2349 +0.3232 0.25555 0.2535 +0.3437 0.25555 0.272 +0.3445 0.25555 0.2914 +0.3454 0.25555 0.3106 +0.3262 0.25555 0.3116 +0.3071 0.25555 0.3126 +0.2879 0.25555 0.3138 +0.2688 0.25555 0.3152 +0.2497 0.25555 0.3166 +0.2476 0.23595 0.3169 +0.2306 0.23635 0.3183 +0.2306 0.21745 0.3186 +0.2081 0.21715 0.3206 +0.1889 0.21725 0.3226 +0.1854 0.19905 0.3233 +0.1809 0.18735 0.3241 +0.171 0.18605 0.3252 +0.1528 0.18415 0.3274 +0.1276 0.16735 0.331 +0.1165 0.15135 0.3331 +0.1006 0.13485 0.336 +0.0862 0.11345 0.3391 +0.0742 0.09395 0.342 +0.0655 0.07875 0.3444 +0.049 0.06405 0.3481 +0.0421 0.03825 0.3512 +0.0228 0.02225 0.3559 +0.0026 0.00455 0.3611 +0.0026 -0.01465 0.3631 +0.0026 -0.03385 0.3652 +0.0026 -0.05305 0.3675 +0.0026 -0.07225 0.3699 +0.0217 -0.09185 0.3691 +0.0217 -0.11105 0.3718 +0.0217 -0.13025 0.3747 +0.0385 -0.15065 0.375 +0.0555 -0.17123 0.3756 +0.0551 -0.18966 0.3789 +0.0376 -0.18917 0.3817 +0.0201 -0.18865 0.3845 +0.0026 -0.18812 0.3876 +0.0026 -0.18428 0.40939 +-0.018 -0.18428 0.40941 +-0.0368 -0.184 0.41095 +-0.0551 -0.18357 0.41337 +-0.0694 -0.18504 0.40512 +-0.0849 -0.18365 0.41301 +-0.1035 -0.18386 0.41176 +-0.1267 -0.18482 0.40632 +-0.1504 -0.18572 0.40123 +-0.1712 -0.18643 0.3972 +-0.1887 -0.1871 0.3934 +-0.207 -0.19059 0.3736 +-0.207 -0.17149 0.3703 +-0.207 -0.17477 0.3503 +-0.207 -0.17805 0.3304 +-0.2079 -0.16152 0.3088 +-0.2106 -0.16445 0.2905 +-0.2152 -0.16734 0.2726 +-0.2215 -0.17013 0.2552 +-0.2295 -0.17282 0.2385 +-0.2391 -0.17536 0.2226 +-0.2503 -0.17774 0.2078 +-0.2628 -0.17996 0.1941 +-0.2767 -0.18194 0.1817 +-0.2917 -0.18371 0.1707 +-0.2917 -0.20443 0.1741 +-0.3075 -0.22677 0.1684 +-0.3244 -0.22818 0.1605 +-0.3351 -0.23222 0.1375 +-0.3458 -0.23742 0.108 +-0.3492 -0.24226 0.0806 +-0.3412 -0.2445 0.0679 +-0.3386 -0.2467 0.0554 +-0.3361 -0.249202 0.0412 +-0.3187 -0.249248 0.0409 +-0.315 -0.252437 0.0229 +-0.2949 -0.252361 0.0233 +-0.2949 -0.25555 0.0052 +-0.3044 -0.23727 0.002 +-0.3135 -0.21899 -0.001 +-0.323 -0.20077 -0.0039 +-0.3336 -0.18267 -0.0067 +-0.3456 -0.16482 -0.0093 +-0.3591 -0.14735 -0.0118 +-0.37403 -0.13025 -0.0141 +-0.39 -0.11355 -0.0163 +-0.40674 -0.09705 -0.0183 +-0.42406 -0.08035 -0.0203 +-0.44191 -0.06305 -0.0222 +-0.4603 -0.04495 -0.0241 +-0.4603 -0.02385 -0.0074 +-0.4603 -0.00535 -0.0091 +-0.4603 0.01325 -0.0107 +-0.4603 0.03185 -0.0122 +-0.4603 0.05045 -0.0136 +-0.4603 0.06905 -0.0148 +-0.4603 0.08775 -0.016 +-0.4603 0.08875 0.0026 +-0.4603 0.10725 0.0017 +-0.4603 0.12575 0.0008 +-0.4603 0.14425 0.0001 +-0.4603 0.16275 -0.0004 +-0.4603 0.18125 -0.0007 +-0.4603 0.19955 -0.0005 +-0.4603 0.21755 0.0003 +-0.4603 0.23535 0.0017 +-0.4603 0.23685 -0.0197 +-0.4603 0.25555 -0.0395 +-0.44242 0.25555 -0.0399 +-0.4402 0.25555 -0.0212 +-0.41986 0.25555 -0.0032 +-0.41959 0.25555 0.018 +-0.39725 0.25555 0.0381 +-0.36826 0.25555 0.0311 +-0.356 0.25555 0.019 +-0.3465 0.25555 0.042 +-0.3255 0.25555 0.0523 +-0.2921 0.25555 0.0383 +-0.2802 0.25555 0.0217 +-0.2755 0.25555 0.0496 +-0.2563 0.25555 0.0639 +-0.2226 0.25555 0.0541 +-0.1851 0.25555 0.0476 +-0.1476 0.25555 0.0432 +-0.1145 0.25555 0.0372 +-0.1047 0.25555 0.0192 +-0.0904 0.25555 0.0016 +-0.0718 0.25555 -0.0126 +-0.0526 0.25555 -0.029 +-0.0362 0.25555 -0.0464 +-0.0245 0.25555 -0.0663 +-0.0134 0.25555 -0.0844 +-0.0048 0.25555 -0.0968 +0.0039 0.25555 -0.1091 +0.0126 0.25555 -0.1218 +0.0226 0.25555 -0.134 +0.0342 0.25555 -0.1484 +0.0438 0.25555 -0.1606 +0.0532 0.25555 -0.1725 +0.0629 0.25555 -0.1837 +0.0729 0.25555 -0.1948 +0.0832 0.25555 -0.2056 +0.0938 0.25555 -0.2161 +0.1049 0.25555 -0.2262 +0.1162 0.25555 -0.2361 +0.1278 0.25555 -0.2456 +0.1395 0.25555 -0.2538 +0.1513 0.25555 -0.262 +0.1452 0.25555 -0.277 +0.1585 0.25555 -0.2858 +0.1729 0.25555 -0.2952 +0.186 0.25555 -0.3031 +0.1992 0.25555 -0.3107 +0.1938 0.25555 -0.327 +0.2077 0.25555 -0.3342 +0.2219 0.25555 -0.3408 +0.2362 0.25555 -0.3472 +0.2511 0.25555 -0.3535 +0.2657 0.25555 -0.3591 +0.2628 0.25555 -0.3757 +0.2594 0.25555 -0.3943 +0.275 0.25555 -0.3998 +0.2721 0.25555 -0.4167 +0.268 0.25555 -0.4335 +0.285 0.25555 -0.4387 +0.2801 0.25555 -0.4559 +0.275 0.25555 -0.4738 +0.291 0.24355 -0.4781 +0.3068 0.23165 -0.482 +0.3224 0.22005 -0.4854 +0.3401 0.22035 -0.4889 +0.3558 0.20895 -0.4915 +0.3734 0.20945 -0.494 +0.3908 0.21085 -0.4961 +0.4073 0.20155 -0.4975 +0.4244 0.19185 -0.4984 +0.4421 0.18005 -0.4989 +0.4423 0.19595 -0.4992 +0.4603 0.20065 -0.4996 +0.4603 0.21895 -0.4998 +0.4603 0.23705 -0.4812 +0.4603 0.25555 -0.4624 +0.4603 0.25555 -0.4436 +0.4415 0.25555 -0.4248 +0.4227 0.25555 -0.406 +0.4039 0.25555 -0.3872 +0.3851 0.25555 -0.3685 +0.3663 0.25555 -0.3497 +0.3505 0.25555 -0.3337 +0.3347 0.25555 -0.3323 +0.333 0.25555 -0.3163 +0.3289 0.25555 -0.3019 +0.3192 0.25555 -0.2823 +0.3247 0.25555 -0.2545 +0.3272 0.25555 -0.2355 +0.3068 0.25555 -0.2185 +0.2911 0.25555 -0.1993 +0.2775 0.25555 -0.1808 +0.2682 0.25555 -0.1694 +0.2587 0.25555 -0.1587 +0.2349 0.25555 -0.1518 +0.217 0.25555 -0.1472 +0.2193 0.25555 -0.126 +0.2186 0.25555 -0.1072 +0.2186 0.25555 -0.089 +0.2185 0.25555 -0.0713 +0.1963 0.25555 -0.0695 +0.1941 0.25555 -0.0535 +0.1902 0.25555 -0.038 +0.1827 0.25555 -0.022 +0.1813 0.25555 0.0082 +0.188 0.25555 0.0257 +0.1937 0.25555 0.044 +0.1783 0.25555 0.07 +0.1598 0.25555 0.0954 +0.165 0.25555 0.1193 +0.1715 0.25555 0.143 +0.1757 0.25555 0.163 +0.1778 0.25555 0.1844 +0.1981 0.25555 0.1825 +0.2183 0.25555 0.1808 +0.2201 0.25555 0.201 +0.2401 0.25555 0.1993 +0.2417 0.25555 0.2193 +0.2616 0.25555 0.2178 +0.2828 0.25555 0.2362 +0.3036 0.25555 0.2546 +0.3242 0.25555 0.273 +0.3252 0.25555 0.2923 +0.3059 0.25555 0.2934 +0.2866 0.25555 0.2946 +0.2674 0.25555 0.296 +0.2481 0.25555 0.2975 +0.2289 0.25555 0.2991 +0.2306 0.25555 0.3183 +0.2115 0.25555 0.32 +0.2115 0.23635 0.3201 +0.1924 0.23635 0.322 +0.1733 0.23635 0.3241 +0.1733 0.21715 0.3243 +0.1725 0.20075 0.3247 +0.1532 0.19995 0.3269 +0.133 0.19915 0.3294 +0.131 0.18395 0.33 +0.1172 0.17255 0.3322 +0.1052 0.16535 0.3341 +0.0808 0.15265 0.338 +0.06 0.12535 0.3425 +0.0575 0.10025 0.3442 +0.0553 0.08795 0.3454 +0.0418 0.08395 0.3478 +0.0217 0.06215 0.3527 +0.0218 0.04085 0.3544 +0.0026 0.02385 0.3593 +0.0026 0.02475 0.3814 +0.0026 0.00565 0.3833 +0.0026 -0.01345 0.3852 +0.0026 -0.03235 0.3873 +0.0026 -0.05145 0.3896 +0.0026 -0.07045 0.392 +0.0026 -0.09145 0.3724 +0.0026 -0.11055 0.3751 +0.0026 -0.12975 0.378 +0.0214 -0.14935 0.3777 +0.0376 -0.17066 0.3784 +0.0201 -0.16947 0.3812 +0.0026 -0.16789 0.3841 +0.0026 -0.16537 0.40613 +0.0026 -0.18043 0.43123 +-0.0186 -0.18043 0.43123 +-0.0385 -0.18051 0.4308 +-0.0545 -0.18043 0.4312 +-0.0697 -0.18322 0.41536 +-0.0872 -0.18008 0.43323 +-0.1043 -0.18034 0.43178 +-0.1308 -0.1795 0.43646 +-0.1561 -0.18151 0.42506 +-0.1742 -0.18252 0.41939 +-0.1905 -0.18315 0.41583 +-0.207 -0.18359 0.4133 +-0.207 -0.1871 0.3934 +-0.207 -0.16821 0.3902 +-0.207 -0.14915 0.387 +-0.207 -0.15225 0.3671 +-0.207 -0.15535 0.3471 +-0.207 -0.1585 0.3272 +-0.2079 -0.14185 0.3057 +-0.2106 -0.14465 0.2874 +-0.2152 -0.14735 0.2695 +-0.2215 -0.15005 0.252 +-0.2295 -0.15255 0.2353 +-0.2391 -0.15505 0.2194 +-0.2503 -0.15728 0.2046 +-0.2628 -0.15937 0.1909 +-0.2767 -0.16128 0.1785 +-0.2917 -0.16296 0.1674 +-0.3078 -0.16442 0.1579 +-0.3078 -0.18524 0.1612 +-0.3078 -0.20603 0.1646 +-0.3247 -0.20736 0.1567 +-0.3419 -0.22927 0.1542 +-0.3549 -0.2331 0.1325 +-0.37509 -0.23399 0.1275 +-0.36817 -0.23913 0.0983 +-0.3792 -0.24292 0.0768 +-0.3591 -0.2443 0.069 +-0.3502 -0.2452 0.0639 +-0.3503 -0.246852 0.0545 +-0.35 -0.249141 0.0416 +-0.35 -0.252346 0.0234 +-0.3333 -0.252483 0.0226 +-0.3317 -0.25555 0.0052 +-0.3133 -0.25555 0.0052 +-0.3224 -0.23727 0.002 +-0.3313 -0.219 -0.001 +-0.3405 -0.20082 -0.0039 +-0.3508 -0.18283 -0.0067 +-0.36275 -0.1652 -0.0093 +-0.37633 -0.14805 -0.0117 +-0.39141 -0.13145 -0.014 +-0.40761 -0.11515 -0.0161 +-0.42459 -0.09875 -0.0181 +-0.44217 -0.08185 -0.0201 +-0.4603 -0.06415 -0.0221 +-0.4603 -0.04295 -0.0053 +-0.4603 -0.02195 0.0111 +-0.4603 -0.00365 0.0094 +-0.4603 0.01485 0.0078 +-0.4603 0.03325 0.0063 +-0.4603 0.05175 0.005 +-0.4603 0.07025 0.0037 +-0.4603 0.08835 0.0235 +-0.4603 0.10675 0.0225 +-0.4603 0.12505 0.0216 +-0.4603 0.14315 0.021 +-0.4603 0.16125 0.0209 +-0.4603 0.17945 0.0216 +-0.4603 0.19825 0.0239 +-0.4603 0.21725 0.024 +-0.4603 0.23515 0.0223 +-0.4603 0.25555 0.0218 +-0.4603 0.25555 0.0013 +-0.4603 0.25555 -0.0191 +-0.44043 0.25555 -0.0008 +-0.43958 0.25555 0.0218 +-0.41814 0.25555 0.0421 +-0.39644 0.25555 0.0619 +-0.37358 0.25555 0.0619 +-0.3525 0.25555 0.0668 +-0.3321 0.25555 0.074 +-0.3027 0.25555 0.0598 +-0.2851 0.25555 0.0719 +-0.2658 0.25555 0.0857 +-0.2365 0.25555 0.0802 +-0.1999 0.25555 0.0708 +-0.1584 0.25555 0.0657 +-0.1221 0.25555 0.0546 +-0.1022 0.25555 0.0587 +-0.0983 0.25555 0.0449 +-0.0909 0.25555 0.0279 +-0.0786 0.25555 0.0122 +-0.0593 0.25555 0 +-0.0392 0.25555 -0.0172 +-0.0227 0.25555 -0.0356 +-0.0107 0.25555 -0.0562 +-0.0007 0.25555 -0.0737 +0.0068 0.25555 -0.085 +0.0148 0.25555 -0.0963 +0.0234 0.25555 -0.1084 +0.0335 0.25555 -0.1208 +0.0455 0.25555 -0.1361 +0.0548 0.25555 -0.1481 +0.0637 0.25555 -0.1598 +0.073 0.25555 -0.1707 +0.0826 0.25555 -0.1816 +0.0926 0.25555 -0.1921 +0.1028 0.25555 -0.2022 +0.1134 0.25555 -0.2121 +0.1243 0.25555 -0.2217 +0.1356 0.25555 -0.2311 +0.1463 0.25555 -0.2384 +0.1579 0.25555 -0.2459 +0.1719 0.25555 -0.2555 +0.1644 0.25555 -0.2716 +0.1784 0.25555 -0.2818 +0.1911 0.25555 -0.2895 +0.2039 0.25555 -0.2969 +0.2169 0.25555 -0.304 +0.2126 0.25555 -0.3178 +0.2262 0.25555 -0.3246 +0.2396 0.25555 -0.3312 +0.2543 0.25555 -0.3377 +0.2685 0.25555 -0.3441 +0.2811 0.25555 -0.3488 +0.2794 0.25555 -0.3639 +0.2774 0.25555 -0.3808 +0.2925 0.25555 -0.3857 +0.2908 0.25555 -0.4048 +0.2885 0.25555 -0.4218 +0.305 0.25555 -0.4264 +0.302 0.25555 -0.4435 +0.2978 0.25555 -0.4608 +0.2931 0.25555 -0.4787 +0.309 0.24365 -0.4826 +0.3246 0.23185 -0.486 +0.3424 0.23205 -0.4894 +0.3577 0.22055 -0.4919 +0.3753 0.22115 -0.4944 +0.3924 0.22235 -0.4964 +0.4078 0.21365 -0.4977 +0.4246 0.20575 -0.4987 +0.4421 0.21175 -0.4995 +0.4413 0.22655 -0.4996 +0.4603 0.23725 -0.4999 +0.4603 0.25555 -0.4812 +0.4415 0.25555 -0.4624 +0.4415 0.25555 -0.4436 +0.4227 0.25555 -0.4248 +0.4039 0.25555 -0.406 +0.3851 0.25555 -0.3872 +0.3675 0.25555 -0.3844 +0.3663 0.25555 -0.3685 +0.3526 0.25555 -0.3662 +0.3518 0.25555 -0.3504 +0.3355 0.25555 -0.3471 +0.3209 0.25555 -0.3442 +0.3203 0.25555 -0.3309 +0.3189 0.25555 -0.3187 +0.3154 0.25555 -0.3079 +0.3055 0.25555 -0.2979 +0.2875 0.25555 -0.2713 +0.2997 0.25555 -0.2495 +0.304 0.25555 -0.2338 +0.2895 0.25555 -0.2191 +0.276 0.25555 -0.1988 +0.2614 0.25555 -0.1949 +0.2647 0.25555 -0.1796 +0.251 0.25555 -0.1732 +0.233 0.25555 -0.1682 +0.2137 0.25555 -0.1645 +0.1994 0.25555 -0.1426 +0.1999 0.25555 -0.1238 +0.199 0.25555 -0.1048 +0.1978 0.25555 -0.0867 +0.1831 0.25555 -0.0852 +0.1815 0.25555 -0.0684 +0.1789 0.25555 -0.0535 +0.1761 0.25555 -0.0426 +0.17 0.25555 -0.0321 +0.1557 0.25555 -0.0187 +0.1698 0.25555 -0.0046 +0.1642 0.25555 0.0176 +0.1682 0.25555 0.0307 +0.1728 0.25555 0.0475 +0.1548 0.25555 0.0718 +0.1364 0.25555 0.1031 +0.1437 0.25555 0.1229 +0.1498 0.25555 0.1465 +0.1545 0.25555 0.1649 +0.1574 0.25555 0.1866 +0.1599 0.25555 0.2072 +0.18 0.25555 0.2049 +0.2001 0.25555 0.2029 +0.202 0.25555 0.2229 +0.2219 0.25555 0.221 +0.2433 0.25555 0.2391 +0.2631 0.25555 0.2375 +0.2841 0.25555 0.2558 +0.3048 0.25555 0.274 +0.2854 0.25555 0.2753 +0.2659 0.25555 0.2766 +0.2465 0.25555 0.2781 +0.2271 0.25555 0.2798 +0.2078 0.25555 0.2816 +0.2096 0.25555 0.3009 +0.1904 0.25555 0.3028 +0.1924 0.25555 0.3219 +0.1733 0.25555 0.324 +0.1543 0.25555 0.3262 +0.1543 0.23635 0.3263 +0.1543 0.21715 0.3265 +0.1353 0.21715 0.3288 +0.1162 0.21715 0.3313 +0.1163 0.19815 0.3316 +0.1164 0.18415 0.332 +0.1003 0.18155 0.3342 +0.0784 0.17935 0.3375 +0.0553 0.15745 0.3418 +0.0494 0.14175 0.3434 +0.0415 0.12195 0.3456 +0.0408 0.10045 0.3469 +0.0217 0.10075 0.3501 +0.0217 0.08145 0.3513 +0.0026 0.06235 0.3561 +0.0026 0.04305 0.3576 +0.0026 0.04395 0.3798 +0.0026 0.02695 0.4035 +0.0026 0.00795 0.40532 +0.0026 -0.01095 0.40726 +0.0026 -0.02975 0.40935 +0.0026 -0.04865 0.41159 +0.0026 -0.06755 0.41395 +0.0026 -0.08645 0.41649 +0.0026 -0.08955 0.3945 +0.0026 -0.10845 0.3972 +0.0026 -0.12745 0.40005 +0.0026 -0.14885 0.381 +0.0026 -0.14645 0.40303 +0.0026 -0.16168 0.42798 +0.0026 -0.17658 0.45306 +-0.0191 -0.17719 0.44955 +-0.0391 -0.17712 0.45001 +-0.0539 -0.17707 0.45027 +-0.0695 -0.18014 0.43284 +-0.0857 -0.177 0.45073 +-0.1033 -0.17738 0.44856 +-0.1222 -0.1766 0.45297 +-0.1344 -0.17581 0.45746 +-0.1445 -0.17694 0.45105 +-0.1615 -0.17828 0.44345 +-0.177 -0.17913 0.43858 +-0.1918 -0.1797 0.43536 +-0.207 -0.18008 0.43317 +-0.207 -0.16165 0.43001 +-0.207 -0.16493 0.41008 +-0.207 -0.14595 0.40697 +-0.207 -0.12705 0.40399 +-0.207 -0.13005 0.384 +-0.207 -0.13295 0.3641 +-0.207 -0.13595 0.3441 +-0.207 -0.13895 0.3242 +-0.2079 -0.12205 0.3027 +-0.2106 -0.12475 0.2844 +-0.2152 -0.12735 0.2665 +-0.2215 -0.12985 0.249 +-0.2295 -0.13235 0.2323 +-0.2391 -0.13465 0.2164 +-0.2503 -0.13675 0.2015 +-0.2628 -0.13875 0.1878 +-0.2767 -0.14055 0.1754 +-0.2917 -0.14215 0.1643 +-0.3078 -0.14355 0.1548 +-0.3247 -0.14475 0.1469 +-0.3247 -0.16563 0.15 +-0.3247 -0.1865 0.1533 +-0.3423 -0.18751 0.1471 +-0.3423 -0.20841 0.1505 +-0.36 -0.23007 0.1497 +-0.37848 -0.23056 0.147 +-0.39716 -0.23416 0.1266 +-0.39757 -0.23823 0.1034 +-0.3998 -0.2418 0.0832 +-0.4029 -0.24543 0.0625 +-0.38387 -0.246059 0.059 +-0.36327 -0.246608 0.0559 +-0.36582 -0.249156 0.0415 +-0.36841 -0.25233 0.0234 +-0.36841 -0.25555 0.0052 +-0.35 -0.25555 0.0052 +-0.3405 -0.23727 0.002 +-0.349 -0.21902 -0.001 +-0.3579 -0.20089 -0.0039 +-0.36791 -0.1831 -0.0066 +-0.3797 -0.16589 -0.0092 +-0.39339 -0.14935 -0.0115 +-0.40871 -0.13315 -0.0137 +-0.42519 -0.11705 -0.0158 +-0.44245 -0.10055 -0.0179 +-0.4603 -0.08335 -0.0199 +-0.4603 -0.06205 -0.0031 +-0.4603 -0.04095 0.0134 +-0.4603 -0.02185 0.0318 +-0.4603 -0.00355 0.0302 +-0.4603 0.01485 0.0286 +-0.4603 0.03325 0.0271 +-0.4603 0.05155 0.0258 +-0.4603 0.06995 0.0246 +-0.4603 0.08905 0.0487 +-0.4603 0.10745 0.0478 +-0.4603 0.12575 0.0471 +-0.4603 0.14415 0.0464 +-0.4603 0.16275 0.0463 +-0.4603 0.18115 0.0462 +-0.4603 0.19915 0.0473 +-0.4603 0.21745 0.046 +-0.4603 0.23545 0.043 +-0.4603 0.25555 0.0422 +-0.43969 0.25555 0.0422 +-0.41863 0.25555 0.0623 +-0.39716 0.25555 0.0827 +-0.377 0.25555 0.0843 +-0.3566 0.25555 0.0876 +-0.3366 0.25555 0.0927 +-0.3109 0.25555 0.0825 +-0.2931 0.25555 0.092 +-0.275 0.25555 0.1043 +-0.2473 0.25555 0.1004 +-0.2168 0.25555 0.0968 +-0.1782 0.25555 0.0905 +-0.1579 0.25555 0.1131 +-0.1281 0.25555 0.0828 +-0.1024 0.25555 0.0786 +-0.0858 0.25555 0.074 +-0.0877 0.25555 0.0601 +-0.0849 0.25555 0.0492 +-0.0786 0.25555 0.0352 +-0.0695 0.25555 0.0234 +-0.0478 0.25555 0.0172 +-0.024 0.25555 -0.0045 +-0.0083 0.25555 -0.0246 +0.004 0.25555 -0.0477 +0.0103 0.25555 -0.0647 +0.0174 0.25555 -0.0736 +0.0253 0.25555 -0.0836 +0.0344 0.25555 -0.0952 +0.0446 0.25555 -0.1078 +0.0563 0.25555 -0.1235 +0.0654 0.25555 -0.1352 +0.0745 0.25555 -0.1457 +0.0839 0.25555 -0.1566 +0.0933 0.25555 -0.1675 +0.1028 0.25555 -0.1783 +0.1114 0.25555 -0.1878 +0.1218 0.25555 -0.1982 +0.1318 0.25555 -0.2068 +0.1431 0.25555 -0.2157 +0.1531 0.25555 -0.2233 +0.1643 0.25555 -0.2313 +0.1807 0.25555 -0.2427 +0.1938 0.25555 -0.2512 +0.186 0.25555 -0.266 +0.198 0.25555 -0.2733 +0.2103 0.25555 -0.2811 +0.222 0.25555 -0.2886 +0.236 0.25555 -0.2969 +0.2301 0.25555 -0.3106 +0.2448 0.25555 -0.3183 +0.2593 0.25555 -0.3255 +0.2718 0.25555 -0.3317 +0.2831 0.25555 -0.3355 +0.2963 0.25555 -0.339 +0.295 0.25555 -0.3533 +0.294 0.25555 -0.3686 +0.3081 0.25555 -0.3727 +0.3075 0.25555 -0.3902 +0.3067 0.25555 -0.4094 +0.3225 0.25555 -0.4136 +0.3216 0.25555 -0.4306 +0.3192 0.25555 -0.4477 +0.3155 0.25555 -0.4651 +0.3114 0.25555 -0.4832 +0.327 0.24365 -0.4865 +0.3451 0.24375 -0.49 +0.3602 0.23225 -0.4924 +0.3779 0.23255 -0.4948 +0.3948 0.23325 -0.4967 +0.4084 0.22475 -0.4978 +0.4243 0.21865 -0.4988 +0.423 0.22935 -0.4989 +0.4384 0.23875 -0.4996 +0.4603 0.25555 -0.5 +0.4415 0.25555 -0.4997 +0.4415 0.25555 -0.4812 +0.4237 0.25555 -0.4805 +0.4229 0.25555 -0.4624 +0.4227 0.25555 -0.4436 +0.4042 0.25555 -0.4437 +0.4039 0.25555 -0.4248 +0.3856 0.25555 -0.425 +0.3851 0.25555 -0.406 +0.3687 0.25555 -0.4033 +0.3536 0.25555 -0.4007 +0.3529 0.25555 -0.3821 +0.337 0.25555 -0.3794 +0.3363 0.25555 -0.3632 +0.3216 0.25555 -0.3596 +0.3083 0.25555 -0.3566 +0.3086 0.25555 -0.3417 +0.3089 0.25555 -0.3299 +0.3084 0.25555 -0.3199 +0.308 0.25555 -0.3125 +0.2999 0.25555 -0.3089 +0.2869 0.25555 -0.3061 +0.2872 0.25555 -0.2893 +0.2765 0.25555 -0.2758 +0.2761 0.25555 -0.2592 +0.2849 0.25555 -0.2444 +0.2884 0.25555 -0.2324 +0.2793 0.25555 -0.2318 +0.2736 0.25555 -0.2205 +0.2562 0.25555 -0.2106 +0.2404 0.25555 -0.2033 +0.2456 0.25555 -0.1878 +0.2291 0.25555 -0.1827 +0.2104 0.25555 -0.1792 +0.1945 0.25555 -0.1633 +0.1816 0.25555 -0.1404 +0.1837 0.25555 -0.1216 +0.1838 0.25555 -0.103 +0.1688 0.25555 -0.1008 +0.1704 0.25555 -0.0837 +0.1697 0.25555 -0.0674 +0.1687 0.25555 -0.0535 +0.1691 0.25555 -0.0462 +0.1618 0.25555 -0.0414 +0.1464 0.25555 -0.0335 +0.1424 0.25555 -0.0087 +0.1563 0.25555 0.0061 +0.1552 0.25555 0.0223 +0.1543 0.25555 0.0327 +0.1541 0.25555 0.0501 +0.1331 0.25555 0.0472 +0.1254 0.25555 0.0747 +0.0977 0.25555 0.0978 +0.1105 0.25555 0.1163 +0.1199 0.25555 0.1331 +0.1256 0.25555 0.1507 +0.1308 0.25555 0.1694 +0.1366 0.25555 0.1894 +0.1397 0.25555 0.21 +0.1624 0.25555 0.2272 +0.1822 0.25555 0.2249 +0.204 0.25555 0.2426 +0.2237 0.25555 0.2408 +0.2449 0.25555 0.2587 +0.2645 0.25555 0.2572 +0.2254 0.25555 0.2604 +0.2059 0.25555 0.2622 +0.1864 0.25555 0.2641 +0.1884 0.25555 0.2836 +0.169 0.25555 0.2856 +0.1712 0.25555 0.3049 +0.152 0.25555 0.3071 +0.1328 0.25555 0.3095 +0.1352 0.25555 0.3285 +0.1352 0.23635 0.3286 +0.1162 0.23635 0.3311 +0.0972 0.23635 0.3337 +0.0972 0.21715 0.3339 +0.0973 0.19805 0.3342 +0.0783 0.19805 0.337 +0.0594 0.19805 0.3399 +0.0596 0.17895 0.3403 +0.0408 0.17795 0.3434 +0.0408 0.15855 0.3441 +0.0382 0.14065 0.3452 +0.0217 0.13935 0.3481 +0.0217 0.12005 0.349 +0.0026 0.10095 0.3534 +0.0026 0.08165 0.3547 +0.0026 0.08215 0.3769 +0.0026 0.06305 0.3782 +0.0026 0.04595 0.40184 +0.0026 0.02915 0.42557 +0.0026 0.01035 0.42735 +0.0026 -0.00845 0.42927 +0.0026 -0.02725 0.43135 +0.0026 -0.04595 0.43356 +0.0026 -0.06465 0.43593 +0.0026 -0.08335 0.43843 +0.0026 -0.10205 0.44108 +0.0026 -0.10525 0.41913 +0.0026 -0.12405 0.42195 +0.0026 -0.14285 0.4249 +0.0026 -0.15798 0.44983 +-0.001 -0.17341 0.47099 +-0.0204 -0.17449 0.46489 +-0.0368 -0.17417 0.4667 +-0.0513 -0.17417 0.46672 +-0.0677 -0.17417 0.4667 +-0.0693 -0.17671 0.45238 +-0.0845 -0.17431 0.46594 +-0.1022 -0.17442 0.46535 +-0.1203 -0.17422 0.4664 +-0.1357 -0.17408 0.46718 +-0.1489 -0.17478 0.46327 +-0.1659 -0.17552 0.45911 +-0.1799 -0.17626 0.45483 +-0.1927 -0.17665 0.45265 +-0.207 -0.17658 0.45306 +-0.207 -0.15797 0.44983 +-0.207 -0.14285 0.42689 +-0.207 -0.12405 0.42393 +-0.207 -0.10525 0.42114 +-0.207 -0.10805 0.40115 +-0.207 -0.11085 0.3812 +-0.207 -0.11375 0.3612 +-0.207 -0.11655 0.3412 +-0.207 -0.11935 0.3212 +-0.2079 -0.10235 0.3 +-0.2106 -0.10485 0.2816 +-0.2152 -0.10735 0.2636 +-0.2215 -0.10975 0.2462 +-0.2295 -0.11205 0.2294 +-0.2391 -0.11425 0.2135 +-0.2503 -0.11625 0.1986 +-0.2628 -0.11815 0.1849 +-0.2767 -0.11985 0.1725 +-0.2917 -0.12135 0.1614 +-0.3078 -0.12275 0.1519 +-0.3247 -0.12375 0.1439 +-0.3423 -0.12465 0.1377 +-0.3423 -0.14565 0.1407 +-0.3423 -0.16657 0.1438 +-0.36046 -0.16726 0.1393 +-0.36046 -0.18823 0.1426 +-0.36046 -0.20916 0.146 +-0.37897 -0.20962 0.1433 +-0.39766 -0.23072 0.146 +-0.41854 -0.23072 0.146 +-0.41854 -0.23426 0.1259 +-0.41878 -0.23783 0.1057 +-0.41905 -0.24137 0.0856 +-0.41989 -0.24496 0.0653 +-0.40489 -0.248943 0.0426 +-0.38664 -0.24905 0.0421 +-0.38678 -0.252315 0.0235 +-0.38678 -0.25555 0.0052 +-0.37636 -0.23725 0.002 +-0.3585 -0.23727 0.002 +-0.36649 -0.21902 -0.001 +-0.3749 -0.201 -0.0039 +-0.38458 -0.18357 -0.0066 +-0.39633 -0.167 -0.009 +-0.41027 -0.15115 -0.0113 +-0.42595 -0.13545 -0.0134 +-0.44275 -0.11935 -0.0156 +-0.4603 -0.10255 -0.0176 +-0.4603 -0.08115 -0.0009 +-0.4603 -0.05995 0.0157 +-0.4603 -0.04005 0.0341 +-0.4603 -0.02105 0.0572 +-0.4603 -0.00295 0.0556 +-0.4603 0.01525 0.054 +-0.4603 0.03365 0.0525 +-0.4603 0.05205 0.0511 +-0.4603 0.07065 0.0499 +-0.4603 0.07235 0.073 +-0.4603 0.09065 0.0718 +-0.4603 0.10895 0.0708 +-0.4603 0.12725 0.07 +-0.4603 0.14555 0.0692 +-0.4603 0.16395 0.0685 +-0.4603 0.18225 0.068 +-0.4603 0.20055 0.0676 +-0.4603 0.21865 0.0667 +-0.4603 0.23615 0.0639 +-0.4603 0.25555 0.0626 +-0.43969 0.25555 0.0626 +-0.41854 0.25555 0.0828 +-0.39766 0.25555 0.1035 +-0.37897 0.25555 0.1044 +-0.36046 0.25555 0.1072 +-0.3423 0.25555 0.1117 +-0.3171 0.25555 0.0998 +-0.3004 0.25555 0.1094 +-0.2828 0.25555 0.1197 +-0.2575 0.25555 0.1175 +-0.23 0.25555 0.1166 +-0.1976 0.25555 0.1148 +-0.1796 0.25555 0.1353 +-0.1394 0.25555 0.1378 +-0.1133 0.25555 0.1188 +-0.0918 0.25555 0.1052 +-0.0748 0.25555 0.0946 +-0.0608 0.25555 0.0828 +-0.0739 0.25555 0.068 +-0.0787 0.25555 0.0601 +-0.0746 0.25555 0.0529 +-0.0685 0.25555 0.0415 +-0.0638 0.25555 0.034 +-0.0516 0.25555 0.0349 +-0.0299 0.25555 0.0448 +-0.0184 0.25555 0.0289 +-0.0041 0.25555 0.0103 +0.0078 0.25555 -0.0118 +0.0222 0.25555 -0.0431 +0.02 0.25555 -0.0597 +0.027 0.25555 -0.0648 +0.035 0.25555 -0.0721 +0.0445 0.25555 -0.0842 +0.0545 0.25555 -0.0972 +0.0658 0.25555 -0.1112 +0.0748 0.25555 -0.1224 +0.084 0.25555 -0.1336 +0.0934 0.25555 -0.1447 +0.1026 0.25555 -0.1554 +0.1119 0.25555 -0.1663 +0.1195 0.25555 -0.1757 +0.1288 0.25555 -0.1854 +0.1381 0.25555 -0.1933 +0.1498 0.25555 -0.2016 +0.1596 0.25555 -0.2086 +0.1743 0.25555 -0.2178 +0.192 0.25555 -0.2304 +0.2043 0.25555 -0.2394 +0.2053 0.25555 -0.2586 +0.2171 0.25555 -0.2656 +0.2286 0.25555 -0.2737 +0.2429 0.25555 -0.2835 +0.2573 0.25555 -0.2929 +0.2499 0.25555 -0.3054 +0.266 0.25555 -0.3149 +0.2761 0.25555 -0.3221 +0.2848 0.25555 -0.3251 +0.2972 0.25555 -0.3283 +0.298 0.25555 -0.3185 +0.2864 0.25555 -0.3158 +0.2799 0.25555 -0.3152 +0.2753 0.25555 -0.305 +0.2754 0.25555 -0.2848 +0.2631 0.25555 -0.2793 +0.2692 0.25555 -0.2695 +0.2584 0.25555 -0.2601 +0.2671 0.25555 -0.2502 +0.274 0.25555 -0.2395 +0.2624 0.25555 -0.2322 +0.2476 0.25555 -0.2238 +0.2339 0.25555 -0.2176 +0.2224 0.25555 -0.2143 +0.2243 0.25555 -0.1976 +0.2084 0.25555 -0.1944 +0.1923 0.25555 -0.1767 +0.1811 0.25555 -0.1751 +0.1762 0.25555 -0.1639 +0.1583 0.25555 -0.1548 +0.1625 0.25555 -0.1393 +0.1669 0.25555 -0.1194 +0.1519 0.25555 -0.0982 +0.1566 0.25555 -0.0818 +0.157 0.25555 -0.0659 +0.1584 0.25555 -0.0522 +0.1427 0.25555 -0.0488 +0.1268 0.25555 -0.0465 +0.1319 0.25555 -0.0274 +0.1286 0.25555 0.0025 +0.1463 0.25555 0.0161 +0.1398 0.25555 0.0298 +0.1172 0.25555 0.0188 +0.1067 0.25555 0.0371 +0.0953 0.25555 0.0568 +0.0788 0.25555 0.0744 +0.0632 0.25555 0.0938 +0.0815 0.25555 0.1155 +0.0934 0.25555 0.13 +0.1016 0.25555 0.1423 +0.1062 0.25555 0.1562 +0.1103 0.25555 0.1725 +0.1153 0.25555 0.1934 +0.1194 0.25555 0.2135 +0.1425 0.25555 0.2297 +0.1646 0.25555 0.2468 +0.1843 0.25555 0.2446 +0.1669 0.25555 0.2663 +0.1474 0.25555 0.2686 +0.1497 0.25555 0.2879 +0.1304 0.25555 0.2903 +0.1111 0.25555 0.2928 +0.1137 0.25555 0.312 +0.1162 0.25555 0.331 +0.0972 0.25555 0.3336 +0.0783 0.23635 0.3364 +0.0783 0.21715 0.3367 +0.0593 0.21715 0.3395 +0.0407 0.19795 0.3429 +0.0217 0.19745 0.3461 +0.0217 0.17805 0.3466 +0.0217 0.15875 0.3472 +0.0026 0.13955 0.3514 +0.0026 0.12025 0.3523 +0.0026 0.12045 0.3745 +0.0026 0.10125 0.3756 +0.0026 0.08385 0.399 +0.0026 0.06485 0.40033 +0.0026 0.04795 0.42392 +-0.0011 0.03095 0.44408 +-0.0011 0.01225 0.44585 +-0.0011 -0.00635 0.44777 +-0.0011 -0.02505 0.44983 +-0.0011 -0.04365 0.45203 +-0.0011 -0.06225 0.45438 +-0.0011 -0.08075 0.45685 +-0.0011 -0.09935 0.45949 +-0.0011 -0.11785 0.46225 +0.0026 -0.12075 0.44385 +0.0026 -0.13935 0.44678 +-0.0011 -0.15485 0.4682 +-0.0113 -0.17074 0.48622 +-0.0231 -0.17257 0.47577 +-0.0346 -0.17192 0.47952 +-0.0484 -0.1713 0.48297 +-0.0655 -0.17112 0.48398 +-0.0837 -0.17114 0.48389 +-0.103 -0.17126 0.48322 +-0.1212 -0.17138 0.48256 +-0.1382 -0.17159 0.48134 +-0.1538 -0.1719 0.47961 +-0.1699 -0.1725 0.47621 +-0.183 -0.17352 0.47037 +-0.1926 -0.17446 0.46507 +-0.2034 -0.17341 0.47104 +-0.2034 -0.15495 0.46779 +-0.2034 -0.13645 0.46475 +-0.207 -0.13935 0.44676 +-0.207 -0.12065 0.44385 +-0.207 -0.10205 0.44107 +-0.207 -0.08635 0.41847 +-0.207 -0.08905 0.3985 +-0.207 -0.09175 0.3785 +-0.207 -0.09435 0.3585 +-0.207 -0.09705 0.3385 +-0.207 -0.09975 0.3185 +-0.2079 -0.08255 0.2973 +-0.2106 -0.08495 0.2789 +-0.2152 -0.08725 0.261 +-0.2215 -0.08955 0.2435 +-0.2295 -0.09175 0.2267 +-0.2391 -0.09385 0.2108 +-0.2503 -0.09575 0.1959 +-0.2628 -0.09755 0.1821 +-0.2767 -0.09915 0.1697 +-0.2917 -0.10055 0.1586 +-0.3078 -0.10185 0.1491 +-0.3247 -0.10285 0.1412 +-0.3423 -0.10365 0.1349 +-0.36046 -0.10425 0.1304 +-0.36046 -0.12525 0.1332 +-0.36046 -0.14625 0.1362 +-0.37897 -0.14665 0.1334 +-0.37897 -0.16767 0.1366 +-0.37897 -0.18867 0.1399 +-0.39766 -0.18881 0.139 +-0.39766 -0.20977 0.1424 +-0.4151 -0.20828 0.1422 +-0.42743 -0.21163 0.1427 +-0.43943 -0.23072 0.146 +-0.43959 -0.23426 0.1259 +-0.43972 -0.23782 0.1058 +-0.43978 -0.24136 0.0857 +-0.43982 -0.2449 0.0655 +-0.42278 -0.248744 0.0438 +-0.42354 -0.252224 0.024 +-0.40517 -0.252285 0.0237 +-0.40517 -0.25555 0.0052 +-0.39403 -0.23715 0.002 +-0.3837 -0.21897 -0.001 +-0.39133 -0.20114 -0.0039 +-0.40064 -0.18437 -0.0064 +-0.41257 -0.16876 -0.0088 +-0.427 -0.15355 -0.0109 +-0.44315 -0.13805 -0.0131 +-0.4603 -0.12175 -0.0153 +-0.4603 -0.10025 0.0014 +-0.4603 -0.07895 0.018 +-0.4603 -0.05855 0.0366 +-0.4603 -0.03915 0.0591 +-0.4603 -0.01915 0.0804 +-0.4603 -0.00085 0.0786 +-0.4603 0.01745 0.0771 +-0.4603 0.03575 0.0756 +-0.4603 0.05405 0.0742 +-0.4603 0.07345 0.0912 +-0.4603 0.09165 0.0901 +-0.4603 0.10985 0.0891 +-0.4603 0.12805 0.0882 +-0.4603 0.14625 0.0875 +-0.4603 0.16445 0.0868 +-0.4603 0.18275 0.0863 +-0.4603 0.20095 0.0859 +-0.4603 0.21915 0.0856 +-0.4603 0.23735 0.0849 +-0.4603 0.25555 0.0831 +-0.43943 0.25555 0.0829 +-0.41854 0.25555 0.1035 +-0.41507 0.23345 0.1036 +-0.39766 0.23425 0.1036 +-0.37897 0.23425 0.1045 +-0.36046 0.23425 0.1072 +-0.3423 0.23435 0.1118 +-0.3247 0.23435 0.1181 +-0.3246 0.25555 0.118 +-0.3077 0.25555 0.126 +-0.2917 0.25555 0.1357 +-0.2663 0.25555 0.1318 +-0.2412 0.25555 0.1322 +-0.2129 0.25555 0.1333 +-0.1968 0.25555 0.1517 +-0.1636 0.25555 0.157 +-0.1275 0.25555 0.1626 +-0.1012 0.25555 0.1434 +-0.0798 0.25555 0.1278 +-0.0627 0.25555 0.1141 +-0.0448 0.25555 0.0984 +-0.0339 0.25555 0.0839 +-0.0496 0.25555 0.071 +-0.065 0.25555 0.0598 +-0.0569 0.25555 0.0483 +-0.0396 0.25555 0.0587 +-0.0237 0.25555 0.0716 +-0.0111 0.25555 0.0545 +-0.0004 0.25555 0.0394 +0.0123 0.25555 0.0217 +0.0243 0.25555 0.0032 +0.04 0.25555 -0.0217 +0.0505 0.25555 -0.0367 +0.0357 0.25555 -0.0517 +0.0465 0.25555 -0.0612 +0.0552 0.25555 -0.0725 +0.0651 0.25555 -0.0862 +0.0753 0.25555 -0.0996 +0.0838 0.25555 -0.1101 +0.0938 0.25555 -0.1215 +0.1032 0.25555 -0.1322 +0.1121 0.25555 -0.143 +0.1214 0.25555 -0.1543 +0.1289 0.25555 -0.1632 +0.1371 0.25555 -0.1709 +0.1459 0.25555 -0.1787 +0.157 0.25555 -0.188 +0.1666 0.25555 -0.1952 +0.1841 0.25555 -0.205 +0.2071 0.25555 -0.2159 +0.2149 0.25555 -0.229 +0.2139 0.25555 -0.246 +0.2248 0.25555 -0.2524 +0.2366 0.25555 -0.2604 +0.2502 0.25555 -0.2702 +0.2456 0.25555 -0.2504 +0.2538 0.25555 -0.2416 +0.2406 0.25555 -0.2334 +0.229 0.25555 -0.2273 +0.2224 0.25555 -0.2239 +0.223 0.25555 -0.2349 +0.234 0.25555 -0.2417 +0.1888 0.25555 -0.19 +0.1752 0.25555 -0.1835 +0.1644 0.25555 -0.1753 +0.1519 0.25555 -0.1665 +0.1475 0.25555 -0.151 +0.1488 0.25555 -0.1387 +0.1451 0.25555 -0.1189 +0.1339 0.25555 -0.1096 +0.1359 0.25555 -0.0951 +0.1379 0.25555 -0.079 +0.1394 0.25555 -0.0632 +0.1233 0.25555 -0.0617 +0.1098 0.25555 -0.0448 +0.1111 0.25555 -0.0203 +0.0983 0.25555 0.003 +0.0874 0.25555 0.022 +0.0748 0.25555 0.0429 +0.0627 0.25555 0.0582 +0.0478 0.25555 0.0769 +0.0343 0.25555 0.0917 +0.0495 0.25555 0.1099 +0.0684 0.25555 0.1318 +0.0817 0.25555 0.1417 +0.0913 0.25555 0.1474 +0.0914 0.25555 0.1587 +0.0927 0.25555 0.1765 +0.0958 0.25555 0.1985 +0.0988 0.25555 0.2183 +0.1226 0.25555 0.2327 +0.145 0.25555 0.2492 +0.1254 0.25555 0.2518 +0.1279 0.25555 0.271 +0.1085 0.25555 0.2737 +0.089 0.25555 0.2767 +0.0918 0.25555 0.2956 +0.0945 0.25555 0.3146 +0.0754 0.25555 0.3174 +0.0783 0.25555 0.3364 +0.0593 0.23635 0.3393 +0.0404 0.23635 0.3423 +0.0405 0.21705 0.3426 +0.0216 0.21675 0.3457 +0.0026 0.19755 0.3494 +0.0026 0.17815 0.3499 +0.0026 0.15885 0.3506 +0.0026 0.15875 0.3728 +0.0026 0.13955 0.3736 +0.0026 0.12175 0.3967 +0.0026 0.10285 0.3977 +0.0026 0.08555 0.42107 +0.0026 0.06675 0.42241 +-0.0011 0.04965 0.44243 +-0.0115 0.03235 0.45929 +-0.0115 0.01375 0.46104 +-0.0115 -0.00475 0.46295 +-0.0115 -0.02325 0.465 +-0.0115 -0.04175 0.46718 +-0.0115 -0.06025 0.46951 +-0.0115 -0.07865 0.47197 +-0.0115 -0.09715 0.47458 +-0.0115 -0.11555 0.47731 +-0.0115 -0.13395 0.48021 +-0.0011 -0.13635 0.46515 +-0.0115 -0.15235 0.48322 +-0.0267 -0.16894 0.496414 +-0.045 -0.1683 0.5 +-0.0641 -0.1683 0.5 +-0.0831 -0.1683 0.5 +-0.1022 -0.1683 0.5 +-0.1212 -0.1683 0.5 +-0.1403 -0.1683 0.5 +-0.1593 -0.1683 0.5 +-0.1775 -0.16894 0.496414 +-0.193 -0.17073 0.4863 +-0.1931 -0.15235 0.48302 +-0.1931 -0.13395 0.47998 +-0.1931 -0.11555 0.4771 +-0.2034 -0.11795 0.46185 +-0.2034 -0.09935 0.45908 +-0.2034 -0.08085 0.45645 +-0.207 -0.08335 0.43843 +-0.207 -0.06745 0.41595 +-0.207 -0.06995 0.3959 +-0.207 -0.07255 0.3759 +-0.207 -0.07505 0.3559 +-0.207 -0.07765 0.3359 +-0.207 -0.08015 0.3158 +-0.2079 -0.06275 0.2948 +-0.2106 -0.06505 0.2765 +-0.2152 -0.06725 0.2584 +-0.2215 -0.06935 0.2409 +-0.2295 -0.07145 0.2241 +-0.2391 -0.07335 0.2082 +-0.2503 -0.07515 0.1933 +-0.2628 -0.07685 0.1795 +-0.2767 -0.07835 0.1671 +-0.2917 -0.07975 0.156 +-0.3078 -0.08085 0.1464 +-0.3247 -0.08185 0.1385 +-0.3423 -0.08265 0.1322 +-0.36046 -0.08315 0.1277 +-0.37897 -0.08355 0.125 +-0.37897 -0.10455 0.1277 +-0.37897 -0.12565 0.1305 +-0.39766 -0.12575 0.1296 +-0.39766 -0.14675 0.1325 +-0.39766 -0.16783 0.1357 +-0.41063 -0.17822 0.1373 +-0.41164 -0.19529 0.14 +-0.42371 -0.19621 0.1402 +-0.43286 -0.19564 0.1401 +-0.44324 -0.2125 0.1429 +-0.4603 -0.23072 0.146 +-0.4603 -0.23426 0.1259 +-0.4603 -0.23782 0.1058 +-0.4603 -0.24136 0.0857 +-0.4603 -0.2449 0.0655 +-0.4403 -0.248455 0.0454 +-0.44191 -0.252132 0.0245 +-0.44193 -0.25555 0.0052 +-0.42354 -0.25555 0.0052 +-0.41115 -0.23683 0.002 +-0.40018 -0.21876 -0.0011 +-0.40676 -0.20135 -0.0038 +-0.41593 -0.18577 -0.0062 +-0.42852 -0.17137 -0.0084 +-0.44368 -0.15666 -0.0105 +-0.4603 -0.14095 -0.0127 +-0.4603 -0.11925 0.0038 +-0.4603 -0.09785 0.0204 +-0.4603 -0.07715 0.0392 +-0.4603 -0.05735 0.0612 +-0.4603 -0.03735 0.0822 +-0.4603 -0.01735 0.0986 +-0.4603 0.00085 0.0969 +-0.4603 0.01895 0.0953 +-0.4603 0.03715 0.0938 +-0.4603 0.05535 0.0924 +-0.4603 0.07465 0.1093 +-0.4603 0.09275 0.1082 +-0.4603 0.11085 0.1072 +-0.4603 0.12895 0.1063 +-0.4603 0.14695 0.1056 +-0.4603 0.16505 0.105 +-0.4603 0.18315 0.1044 +-0.4603 0.20125 0.104 +-0.4603 0.21935 0.1037 +-0.4603 0.23745 0.1035 +-0.4603 0.25555 0.1035 +-0.43943 0.25555 0.1035 +-0.42739 0.23675 0.1035 +-0.42363 0.22145 0.1037 +-0.41161 0.22015 0.1037 +-0.39766 0.21305 0.1038 +-0.37897 0.21305 0.1047 +-0.36046 0.21305 0.1075 +-0.3423 0.21315 0.112 +-0.3247 0.21325 0.1183 +-0.3078 0.21335 0.1263 +-0.3078 0.23445 0.1261 +-0.2917 0.23455 0.1357 +-0.2767 0.23455 0.1468 +-0.2766 0.25555 0.1468 +-0.251 0.25555 0.1455 +-0.2261 0.25555 0.1483 +-0.2123 0.25555 0.1659 +-0.1828 0.25555 0.1716 +-0.1504 0.25555 0.1785 +-0.117 0.25555 0.1862 +-0.0887 0.25555 0.1669 +-0.0673 0.25555 0.1505 +-0.0495 0.25555 0.1349 +-0.03 0.25555 0.1153 +-0.0166 0.25555 0.0982 +-0.008 0.25555 0.0845 +0.005 0.25555 0.0661 +0.0165 0.25555 0.0514 +0.0288 0.25555 0.0341 +0.0405 0.25555 0.0181 +0.0545 0.25555 -0.0063 +0.0651 0.25555 -0.0252 +0.0727 0.25555 -0.0376 +0.0588 0.25555 -0.0484 +0.0675 0.25555 -0.0603 +0.0772 0.25555 -0.0734 +0.0858 0.25555 -0.0865 +0.0933 0.25555 -0.0958 +0.1035 0.25555 -0.1097 +0.1125 0.25555 -0.1225 +0.1207 0.25555 -0.1344 +0.1292 0.25555 -0.1464 +0.1356 0.25555 -0.1544 +0.143 0.25555 -0.16 +0.1403 0.25555 -0.1493 +0.1379 0.25555 -0.1414 +0.1318 0.25555 -0.1275 +0.1234 0.25555 -0.1138 +0.116 0.25555 -0.0947 +0.1203 0.25555 -0.0754 +0.1073 0.25555 -0.0713 +0.1087 0.25555 -0.0604 +0.0976 0.25555 -0.0609 +0.0935 0.25555 -0.0468 +0.0878 0.25555 -0.0299 +0.08 0.25555 -0.013 +0.0689 0.25555 0.0074 +0.0565 0.25555 0.03 +0.0452 0.25555 0.046 +0.033 0.25555 0.0637 +0.0211 0.25555 0.0781 +0.0069 0.25555 0.0953 +0.0216 0.25555 0.106 +0.0348 0.25555 0.1257 +0.0549 0.25555 0.1526 +0.0767 0.25555 0.1572 +0.0766 0.25555 0.1803 +0.0778 0.25555 0.2029 +0.079 0.25555 0.2241 +0.1026 0.25555 0.2364 +0.1057 0.25555 0.2548 +0.0861 0.25555 0.2584 +0.0665 0.25555 0.2627 +0.0696 0.25555 0.2801 +0.0726 0.25555 0.2985 +0.0534 0.25555 0.3017 +0.0564 0.25555 0.3203 +0.0593 0.25555 0.3392 +0.0404 0.25555 0.3423 +0.0215 0.25555 0.3455 +0.0215 0.23635 0.3455 +0.0026 0.23615 0.3488 +0.0026 0.21685 0.349 +0.0026 0.21635 0.3712 +0.0026 0.19715 0.3716 +0.0026 0.17795 0.3721 +0.0026 0.15985 0.3949 +0.0026 0.14075 0.3957 +0.0026 0.12315 0.41875 +0.0026 0.10435 0.41984 +-0.0011 0.08695 0.43959 +-0.0011 0.06825 0.44095 +-0.0115 0.05085 0.45767 +-0.0269 0.03325 0.46945 +-0.0269 0.01475 0.47121 +-0.0269 -0.00365 0.4731 +-0.0269 -0.02215 0.47514 +-0.0269 -0.04055 0.47731 +-0.0269 -0.05895 0.47963 +-0.0269 -0.07735 0.48207 +-0.0269 -0.09565 0.48466 +-0.0269 -0.11405 0.48741 +-0.0269 -0.13235 0.49028 +-0.0269 -0.15065 0.493286 +-0.045 -0.15005 0.496857 +-0.0641 -0.15005 0.496857 +-0.0831 -0.15005 0.496857 +-0.1022 -0.15005 0.496857 +-0.1212 -0.15005 0.496857 +-0.1403 -0.15005 0.496857 +-0.1593 -0.15005 0.496857 +-0.1777 -0.15065 0.493194 +-0.1777 -0.13235 0.490173 +-0.1777 -0.11405 0.4873 +-0.1777 -0.09565 0.48457 +-0.1931 -0.09715 0.47435 +-0.1931 -0.07875 0.47174 +-0.1931 -0.06025 0.46928 +-0.2034 -0.06225 0.45396 +-0.207 -0.06455 0.43591 +-0.207 -0.04855 0.41357 +-0.207 -0.05095 0.3935 +-0.207 -0.05335 0.3735 +-0.207 -0.05575 0.3535 +-0.207 -0.05815 0.3334 +-0.207 -0.06055 0.3134 +-0.2079 -0.04295 0.2925 +-0.2106 -0.04505 0.2741 +-0.2152 -0.04715 0.2561 +-0.2215 -0.04915 0.2386 +-0.2295 -0.05105 0.2218 +-0.2391 -0.05285 0.2058 +-0.2503 -0.05465 0.1909 +-0.2628 -0.05615 0.1771 +-0.2767 -0.05765 0.1646 +-0.2917 -0.05885 0.1535 +-0.3078 -0.05995 0.144 +-0.3247 -0.06085 0.136 +-0.3423 -0.06155 0.1298 +-0.36046 -0.06215 0.1252 +-0.37897 -0.06245 0.1225 +-0.39766 -0.06255 0.1216 +-0.39766 -0.08365 0.1241 +-0.39766 -0.10465 0.1267 +-0.4102 -0.11995 0.1288 +-0.41024 -0.13985 0.1315 +-0.41033 -0.15942 0.1344 +-0.4229 -0.16967 0.136 +-0.42317 -0.18519 0.1384 +-0.43451 -0.18052 0.1376 +-0.44585 -0.19519 0.14 +-0.4603 -0.2129 0.1429 +-0.4603 -0.21615 0.1237 +-0.4603 -0.21815 0.1022 +-0.4603 -0.22135 0.0819 +-0.4603 -0.22512 0.0617 +-0.4603 -0.248455 0.0454 +-0.4603 -0.251995 0.0253 +-0.4603 -0.25555 0.0052 +-0.44008 -0.23288 0.0013 +-0.42705 -0.23587 0.0018 +-0.41529 -0.21818 -0.0012 +-0.42069 -0.20182 -0.0038 +-0.43056 -0.18829 -0.0059 +-0.4444 -0.17497 -0.0079 +-0.4603 -0.16007 -0.01 +-0.4603 -0.13835 0.0064 +-0.4603 -0.11685 0.0228 +-0.4603 -0.09565 0.0417 +-0.4603 -0.07555 0.0635 +-0.4603 -0.05565 0.0842 +-0.4603 -0.03545 0.1004 +-0.4603 -0.01555 0.1166 +-0.4603 0.00245 0.115 +-0.4603 0.02045 0.1134 +-0.4603 0.03855 0.1119 +-0.4603 0.05665 0.1106 +-0.44777 0.05715 0.1105 +-0.44777 0.07545 0.1093 +-0.44777 0.09385 0.1082 +-0.44777 0.11215 0.1072 +-0.44777 0.13055 0.1063 +-0.44776 0.14885 0.1055 +-0.44767 0.16725 0.1049 +-0.44745 0.18525 0.1044 +-0.44696 0.20285 0.104 +-0.44579 0.22005 0.1037 +-0.44323 0.23735 0.1035 +-0.43279 0.22085 0.1037 +-0.4231 0.21025 0.1038 +-0.41059 0.20265 0.104 +-0.39766 0.19175 0.1042 +-0.37897 0.19175 0.1051 +-0.36046 0.19185 0.1079 +-0.3423 0.19195 0.1124 +-0.3247 0.19215 0.1187 +-0.3078 0.19225 0.1267 +-0.2917 0.19255 0.1363 +-0.2917 0.21345 0.1359 +-0.2767 0.21365 0.1471 +-0.2628 0.21385 0.1597 +-0.2628 0.23465 0.1594 +-0.2628 0.25555 0.1594 +-0.2371 0.25555 0.1605 +-0.2248 0.25555 0.177 +-0.1998 0.25555 0.1852 +-0.1711 0.25555 0.1923 +-0.1404 0.25555 0.2016 +-0.1064 0.25555 0.2139 +-0.0754 0.25555 0.1959 +-0.0511 0.25555 0.1784 +-0.0331 0.25555 0.1617 +-0.0103 0.25555 0.136 +-0.0021 0.25555 0.1085 +0.0119 0.25555 0.1141 +0.0158 0.25555 0.1349 +0.0265 0.25555 0.1665 +0.0567 0.25555 0.1863 +0.0591 0.25555 0.2072 +0.0621 0.25555 0.2284 +0.0827 0.25555 0.2412 +0.0654 0.25555 0.2458 +0.0478 0.25555 0.2495 +0.0488 0.25555 0.2669 +0.0503 0.25555 0.2838 +0.0324 0.25555 0.2874 +0.0343 0.25555 0.3051 +0.0373 0.25555 0.3235 +0.0183 0.25555 0.3266 +0.0004 0.25555 0.3292 +0.0026 0.25555 0.3488 +0.0026 0.25555 0.3709 +0.0026 0.23545 0.371 +0.0026 0.21685 0.3934 +0.0026 0.19785 0.3937 +0.0026 0.17885 0.3943 +0.0026 0.16085 0.41704 +0.0026 0.14205 0.41785 +-0.0011 0.12435 0.43733 +-0.0011 0.10565 0.4384 +-0.0115 0.08805 0.45485 +-0.0115 0.06945 0.45618 +-0.0269 0.05175 0.46783 +-0.045 0.03355 0.47302 +-0.045 0.01515 0.47478 +-0.045 -0.00325 0.47668 +-0.045 -0.02175 0.4787 +-0.045 -0.04005 0.48088 +-0.045 -0.05845 0.4832 +-0.045 -0.07685 0.48564 +-0.045 -0.09515 0.48824 +-0.045 -0.11345 0.490967 +-0.045 -0.13175 0.493835 +-0.0641 -0.13175 0.493835 +-0.0831 -0.13175 0.493835 +-0.1022 -0.13175 0.493835 +-0.1212 -0.13175 0.493835 +-0.1403 -0.13175 0.493835 +-0.1593 -0.13175 0.493835 +-0.1593 -0.11345 0.490967 +-0.1593 -0.09515 0.48824 +-0.1593 -0.07685 0.48564 +-0.1777 -0.07735 0.48198 +-0.1777 -0.05895 0.47952 +-0.1777 -0.04055 0.47719 +-0.1931 -0.04175 0.46695 +-0.2034 -0.04365 0.45164 +-0.207 -0.04585 0.43356 +-0.207 -0.02965 0.41131 +-0.207 -0.03185 0.3913 +-0.207 -0.03415 0.3712 +-0.207 -0.03635 0.3512 +-0.207 -0.03865 0.3311 +-0.207 -0.04085 0.311 +-0.2079 -0.02315 0.2903 +-0.2106 -0.02515 0.2719 +-0.2152 -0.02705 0.2538 +-0.2215 -0.02895 0.2363 +-0.2295 -0.03075 0.2195 +-0.2391 -0.03245 0.2035 +-0.2503 -0.03405 0.1886 +-0.2628 -0.03545 0.1748 +-0.2767 -0.03685 0.1623 +-0.2917 -0.03795 0.1512 +-0.3078 -0.03905 0.1417 +-0.3247 -0.03985 0.1337 +-0.3423 -0.04055 0.1274 +-0.36046 -0.04105 0.1229 +-0.37897 -0.04125 0.1202 +-0.39766 -0.04145 0.1193 +-0.41019 -0.05955 0.1213 +-0.41019 -0.07975 0.1236 +-0.41019 -0.09995 0.1261 +-0.42272 -0.11465 0.1281 +-0.42273 -0.13355 0.1307 +-0.42278 -0.15215 0.1333 +-0.43502 -0.16415 0.1351 +-0.44704 -0.17823 0.1373 +-0.4603 -0.19506 0.14 +-0.4603 -0.19812 0.1213 +-0.4603 -0.20034 0.1011 +-0.4603 -0.20335 0.0795 +-0.4603 -0.20623 0.0572 +-0.4603 -0.22908 0.0415 +-0.4603 -0.23323 0.0211 +-0.4603 -0.23649 0.0019 +-0.44539 -0.22326 -0.0003 +-0.42772 -0.21684 -0.0014 +-0.43302 -0.20344 -0.0035 +-0.44527 -0.1927 -0.0052 +-0.4603 -0.17919 -0.0072 +-0.4603 -0.15734 0.009 +-0.4603 -0.13575 0.0254 +-0.4603 -0.13255 0.0465 +-0.4603 -0.11415 0.0441 +-0.4603 -0.09385 0.0658 +-0.4603 -0.07385 0.0862 +-0.4603 -0.05355 0.1023 +-0.4603 -0.03365 0.1185 +-0.44777 -0.01615 0.1167 +-0.44777 0.00215 0.115 +-0.44777 0.02045 0.1134 +-0.44777 0.03875 0.1119 +-0.43524 0.03935 0.1118 +-0.43524 0.05815 0.1105 +-0.43524 0.07695 0.1092 +-0.43524 0.09575 0.108 +-0.43524 0.11455 0.107 +-0.43524 0.13345 0.1062 +-0.43521 0.15225 0.1054 +-0.43512 0.17075 0.1048 +-0.43492 0.18875 0.1043 +-0.43441 0.20555 0.1039 +-0.42281 0.19435 0.1041 +-0.4103 0.18345 0.1044 +-0.39766 0.17055 0.1048 +-0.37897 0.17055 0.1057 +-0.36046 0.17065 0.1085 +-0.3423 0.17075 0.113 +-0.3247 0.17095 0.1193 +-0.3078 0.17125 0.1273 +-0.2917 0.17155 0.1369 +-0.2767 0.17185 0.148 +-0.2767 0.19275 0.1475 +-0.2628 0.19305 0.16 +-0.2503 0.19335 0.1739 +-0.2503 0.21405 0.1735 +-0.2503 0.23475 0.1733 +-0.2502 0.25555 0.1733 +-0.2391 0.25555 0.1883 +-0.2141 0.25555 0.1945 +-0.1899 0.25555 0.2048 +-0.1611 0.25555 0.2136 +-0.1301 0.25555 0.2269 +-0.0948 0.25555 0.247 +-0.0539 0.25555 0.2344 +-0.0311 0.25555 0.2083 +-0.0139 0.25555 0.1926 +0.005 0.25555 0.1771 +0.0348 0.25555 0.1944 +0.04 0.25555 0.2124 +0.0453 0.25555 0.2315 +0.0313 0.25555 0.2507 +0.0321 0.25555 0.2699 +0.0143 0.25555 0.2695 +0.0153 0.25555 0.2896 +0.0161 0.25555 0.3081 +-0.0012 0.25555 0.3095 +-0.0178 0.25555 0.3125 +-0.0186 0.25555 0.3296 +-0.0173 0.25555 0.3499 +-0.016 0.25555 0.3708 +-0.015 0.25555 0.3924 +0.0026 0.25555 0.3931 +0.0026 0.23595 0.3932 +0.0026 0.21745 0.41553 +0.0026 0.19865 0.41589 +0.0026 0.17975 0.4164 +-0.0011 0.16185 0.43561 +-0.0011 0.14315 0.43639 +-0.0115 0.12515 0.45261 +-0.0115 0.10665 0.45364 +-0.0269 0.08875 0.46503 +-0.0269 0.07025 0.46637 +-0.045 0.05205 0.47142 +-0.0641 0.03355 0.47302 +-0.0641 0.01515 0.47478 +-0.0641 -0.00325 0.47668 +-0.0641 -0.02175 0.4787 +-0.0641 -0.04005 0.48088 +-0.0641 -0.05845 0.4832 +-0.0641 -0.07685 0.48564 +-0.0641 -0.09515 0.48824 +-0.0641 -0.11345 0.490967 +-0.0831 -0.11345 0.490967 +-0.1022 -0.11345 0.490967 +-0.1212 -0.11345 0.490967 +-0.1403 -0.11345 0.490967 +-0.1403 -0.09515 0.48824 +-0.1403 -0.07685 0.48564 +-0.1403 -0.05845 0.4832 +-0.1593 -0.05845 0.4832 +-0.1593 -0.04005 0.48088 +-0.1593 -0.02175 0.4787 +-0.1777 -0.02215 0.47502 +-0.1931 -0.02325 0.46477 +-0.2034 -0.02505 0.44943 +-0.207 -0.02715 0.43133 +-0.207 -0.01075 0.40924 +-0.207 -0.01285 0.3892 +-0.207 -0.01485 0.3691 +-0.207 -0.01695 0.349 +-0.207 -0.01905 0.3289 +-0.207 -0.02115 0.3089 +-0.2079 -0.00335 0.2883 +-0.2106 -0.00515 0.2698 +-0.2152 -0.00695 0.2518 +-0.2215 -0.00865 0.2342 +-0.2295 -0.01035 0.2174 +-0.2391 -0.01195 0.2014 +-0.2503 -0.01345 0.1865 +-0.2628 -0.01475 0.1727 +-0.2767 -0.01595 0.1602 +-0.2917 -0.01705 0.1491 +-0.3078 -0.01805 0.1395 +-0.3247 -0.01885 0.1315 +-0.3423 -0.01945 0.1253 +-0.36046 -0.01995 0.1208 +-0.37897 -0.02015 0.118 +-0.39766 -0.02025 0.1171 +-0.41019 -0.03935 0.1191 +-0.42272 -0.05675 0.121 +-0.42272 -0.07615 0.1232 +-0.42272 -0.09545 0.1256 +-0.43523 -0.11035 0.1275 +-0.43521 -0.12875 0.13 +-0.43517 -0.14675 0.1325 +-0.4475 -0.16097 0.1347 +-0.4603 -0.17719 0.1371 +-0.4603 -0.18008 0.1187 +-0.4603 -0.18247 0.0996 +-0.4603 -0.1842 0.0782 +-0.4603 -0.18786 0.0543 +-0.4603 -0.19238 0.0336 +-0.4603 -0.21105 0.037 +-0.4603 -0.2143 0.0178 +-0.4603 -0.2174 -0.0013 +-0.446 -0.20921 -0.0026 +-0.43532 -0.2145 -0.0017 +-0.4603 -0.19831 -0.0043 +-0.4603 -0.17636 0.0118 +-0.4603 -0.15465 0.028 +-0.4603 -0.15095 0.0489 +-0.4603 -0.13015 0.0704 +-0.4603 -0.11205 0.068 +-0.4603 -0.09205 0.0884 +-0.4603 -0.08985 0.1065 +-0.4603 -0.07175 0.1044 +-0.4603 -0.06965 0.1224 +-0.4603 -0.05165 0.1204 +-0.44777 -0.03445 0.1185 +-0.43524 -0.01695 0.1168 +-0.43524 0.00185 0.115 +-0.43524 0.02055 0.1134 +-0.42272 0.02095 0.1133 +-0.42272 0.04035 0.1118 +-0.42272 0.05985 0.1103 +-0.42272 0.07925 0.109 +-0.42272 0.09875 0.1079 +-0.42272 0.11825 0.1069 +-0.42272 0.13775 0.106 +-0.42272 0.15715 0.1052 +-0.42272 0.17625 0.1046 +-0.41022 0.16355 0.105 +-0.39766 0.14935 0.1055 +-0.37897 0.14935 0.1064 +-0.36046 0.14945 0.1092 +-0.3423 0.14965 0.1137 +-0.3247 0.14985 0.12 +-0.3078 0.15015 0.128 +-0.2917 0.15055 0.1376 +-0.2767 0.15095 0.1488 +-0.2628 0.15145 0.1613 +-0.2628 0.17225 0.1606 +-0.2503 0.17265 0.1745 +-0.2391 0.17315 0.1895 +-0.2391 0.19375 0.1889 +-0.2391 0.21435 0.1885 +-0.2391 0.23495 0.1883 +-0.2295 0.23505 0.2044 +-0.2295 0.25555 0.2044 +-0.2052 0.25555 0.2129 +-0.1815 0.25555 0.225 +-0.1524 0.25555 0.2367 +-0.1212 0.25555 0.2556 +-0.0901 0.25555 0.2776 +-0.0578 0.25555 0.2731 +-0.0269 0.25555 0.245 +-0.0149 0.25555 0.227 +-0.0012 0.25555 0.2154 +0.0158 0.25555 0.2044 +0.0218 0.25555 0.22 +0.0272 0.25555 0.2342 +0.0109 0.25555 0.2405 +0.0131 0.25555 0.253 +0.001 0.25555 0.2533 +-0.0001 0.25555 0.2704 +-0.0018 0.25555 0.2898 +-0.0167 0.25555 0.2928 +-0.0351 0.25555 0.2975 +-0.0366 0.25555 0.3162 +-0.0376 0.25555 0.332 +-0.038 0.25555 0.3512 +-0.0365 0.25555 0.3722 +-0.0352 0.25555 0.3918 +-0.0335 0.25555 0.41113 +-0.0149 0.25555 0.41307 +0.0026 0.25555 0.41525 +0.0026 0.23635 0.41533 +-0.0011 0.21805 0.43413 +-0.0011 0.19925 0.43446 +-0.0011 0.18055 0.43497 +-0.0115 0.16245 0.4509 +-0.0115 0.14375 0.45169 +-0.0269 0.12575 0.46278 +-0.0269 0.10725 0.46384 +-0.045 0.08895 0.4686 +-0.045 0.07045 0.46992 +-0.0641 0.05205 0.47142 +-0.0831 0.03355 0.47302 +-0.0831 0.01515 0.47478 +-0.0831 -0.00325 0.47668 +-0.0831 -0.02175 0.4787 +-0.0831 -0.04005 0.48088 +-0.0831 -0.05845 0.4832 +-0.0831 -0.07685 0.48564 +-0.0831 -0.09515 0.48824 +-0.1022 -0.09515 0.48824 +-0.1212 -0.09515 0.48824 +-0.1212 -0.07685 0.48564 +-0.1212 -0.05845 0.4832 +-0.1212 -0.04005 0.48088 +-0.1403 -0.04005 0.48088 +-0.1403 -0.02175 0.4787 +-0.1403 -0.00325 0.47668 +-0.1593 -0.00325 0.47668 +-0.1777 -0.00365 0.47298 +-0.1931 -0.00475 0.46272 +-0.2034 -0.00645 0.44739 +-0.207 -0.00835 0.42927 +-0.207 0.00825 0.40727 +-0.207 0.00635 0.3872 +-0.207 0.00435 0.3671 +-0.207 0.00245 0.347 +-0.207 0.00045 0.3269 +-0.207 -0.00145 0.3069 +-0.2079 0.01655 0.2864 +-0.2106 0.01485 0.2679 +-0.2152 0.01315 0.2499 +-0.2215 0.01155 0.2323 +-0.2295 0.01005 0.2155 +-0.2391 0.00855 0.1995 +-0.2503 0.00725 0.1845 +-0.2628 0.00595 0.1707 +-0.2767 0.00485 0.1582 +-0.2917 0.00385 0.1471 +-0.3078 0.00295 0.1375 +-0.3247 0.00225 0.1295 +-0.3423 0.00165 0.1233 +-0.36046 0.00125 0.1187 +-0.37897 0.00095 0.116 +-0.39766 0.00085 0.1151 +-0.41019 -0.01905 0.117 +-0.42272 -0.03735 0.1188 +-0.43524 -0.05445 0.1207 +-0.43524 -0.07315 0.1228 +-0.43524 -0.09175 0.1251 +-0.44776 -0.10735 0.1271 +-0.44774 -0.12545 0.1295 +-0.44768 -0.14335 0.1321 +-0.4603 -0.15931 0.1344 +-0.4603 -0.16204 0.1162 +-0.4603 -0.16456 0.0976 +-0.4603 -0.16584 0.0758 +-0.4603 -0.16944 0.0513 +-0.4603 -0.17352 0.0308 +-0.4603 -0.19534 0.0147 +-0.4603 -0.14805 0.0729 +-0.4603 -0.12835 0.093 +-0.4603 -0.11025 0.0907 +-0.4603 -0.10785 0.1088 +-0.4603 -0.10555 0.1269 +-0.4603 -0.08755 0.1246 +-0.44777 -0.07095 0.1226 +-0.44777 -0.05275 0.1205 +-0.43524 -0.03565 0.1187 +-0.42272 -0.01795 0.1169 +-0.42272 0.00145 0.115 +-0.41019 0.00115 0.1151 +-0.41019 0.02145 0.1133 +-0.41019 0.04175 0.1117 +-0.41019 0.06205 0.1102 +-0.41019 0.08235 0.1089 +-0.41019 0.10265 0.1077 +-0.41019 0.12295 0.1066 +-0.41019 0.14325 0.1057 +-0.39766 0.12805 0.1064 +-0.37897 0.12815 0.1073 +-0.36046 0.12825 0.1101 +-0.3423 0.12845 0.1146 +-0.3247 0.12875 0.1209 +-0.3078 0.12905 0.1289 +-0.2917 0.12955 0.1385 +-0.2767 0.13005 0.1496 +-0.2628 0.13065 0.1622 +-0.2503 0.13125 0.176 +-0.2503 0.15195 0.1752 +-0.2391 0.15255 0.1902 +-0.2295 0.15315 0.2062 +-0.2295 0.17355 0.2055 +-0.2295 0.19405 0.205 +-0.2295 0.21455 0.2046 +-0.2215 0.21485 0.2215 +-0.2215 0.23515 0.2213 +-0.2215 0.25555 0.2213 +-0.1982 0.25555 0.2322 +-0.1742 0.25555 0.2459 +-0.145 0.25555 0.263 +-0.1174 0.25555 0.2819 +-0.1167 0.25555 0.309 +-0.0806 0.25555 0.312 +-0.057 0.25555 0.3035 +-0.0558 0.25555 0.3202 +-0.056 0.25555 0.3337 +-0.055 0.25555 0.354 +-0.0519 0.25555 0.3743 +-0.0501 0.25555 0.3916 +-0.0487 0.25555 0.40956 +-0.0472 0.25555 0.4261 +-0.0327 0.25555 0.42612 +-0.0183 0.25555 0.42735 +-0.0011 0.25555 0.43384 +-0.0011 0.23675 0.4339 +-0.0115 0.21825 0.44943 +-0.0115 0.19965 0.44978 +-0.0115 0.18105 0.45027 +-0.0269 0.16275 0.46109 +-0.0269 0.14425 0.46187 +-0.045 0.12595 0.46637 +-0.045 0.10745 0.46741 +-0.0641 0.08895 0.4686 +-0.0641 0.07045 0.46992 +-0.0831 0.05205 0.47142 +-0.1022 0.03355 0.47302 +-0.1022 0.01515 0.47478 +-0.1022 -0.00325 0.47668 +-0.1022 -0.02175 0.4787 +-0.1022 -0.04005 0.48088 +-0.1022 -0.05845 0.4832 +-0.1022 -0.07685 0.48564 +-0.1212 -0.02175 0.4787 +-0.1212 -0.00325 0.47668 +-0.1212 0.01515 0.47478 +-0.1403 0.01515 0.47478 +-0.1593 0.01515 0.47478 +-0.1777 0.01475 0.4711 +-0.1931 0.01375 0.46081 +-0.2034 0.01225 0.44546 +-0.207 0.01045 0.42734 +-0.207 0.02725 0.40549 +-0.207 0.02545 0.3854 +-0.207 0.02365 0.3653 +-0.207 0.02185 0.3452 +-0.207 0.02005 0.3251 +-0.207 0.01825 0.305 +-0.2079 0.03645 0.2846 +-0.2106 0.03485 0.2662 +-0.2152 0.03335 0.2481 +-0.2215 0.03185 0.2305 +-0.2295 0.03045 0.2137 +-0.2391 0.02915 0.1977 +-0.2503 0.02785 0.1827 +-0.2628 0.02675 0.1689 +-0.2767 0.02565 0.1564 +-0.2917 0.02475 0.1453 +-0.3078 0.02395 0.1357 +-0.3247 0.02325 0.1277 +-0.3423 0.02275 0.1214 +-0.36046 0.02235 0.1169 +-0.37897 0.02215 0.1141 +-0.39766 0.02205 0.1132 +-0.39766 0.04325 0.1116 +-0.39766 0.06445 0.11 +-0.39766 0.08565 0.1086 +-0.39766 0.10685 0.1074 +-0.37897 0.10685 0.1083 +-0.36046 0.10705 0.1111 +-0.3423 0.10725 0.1156 +-0.3247 0.10765 0.1219 +-0.3078 0.10805 0.1299 +-0.2917 0.10855 0.1395 +-0.2767 0.10915 0.1507 +-0.2628 0.10985 0.1632 +-0.2503 0.11055 0.1771 +-0.2391 0.11135 0.1921 +-0.2391 0.13195 0.1911 +-0.2295 0.13265 0.2071 +-0.2215 0.13345 0.224 +-0.2215 0.15375 0.2231 +-0.2215 0.17405 0.2224 +-0.2215 0.19445 0.2219 +-0.2152 0.19485 0.2395 +-0.2152 0.21505 0.2391 +-0.2152 0.23525 0.2389 +-0.2151 0.25555 0.239 +-0.1929 0.25555 0.2519 +-0.1684 0.25555 0.2689 +-0.1412 0.25555 0.2865 +-0.1413 0.25555 0.3106 +-0.1201 0.25555 0.3336 +-0.0895 0.25555 0.335 +-0.0676 0.25555 0.3232 +-0.07 0.25555 0.3355 +-0.0705 0.25555 0.357 +-0.0683 0.25555 0.3759 +-0.0663 0.25555 0.3924 +-0.0649 0.25555 0.40825 +-0.0645 0.25555 0.42612 +-0.0641 0.25555 0.44463 +-0.0465 0.25555 0.4443 +-0.0327 0.25555 0.44203 +-0.0215 0.25555 0.43901 +-0.0115 0.25555 0.44917 +-0.0115 0.23685 0.44922 +-0.0269 0.21845 0.45961 +-0.0269 0.19985 0.45996 +-0.0269 0.18135 0.46045 +-0.045 0.16295 0.46468 +-0.045 0.14445 0.46545 +-0.0641 0.12595 0.46637 +-0.0641 0.10745 0.46741 +-0.0831 0.08895 0.4686 +-0.0831 0.07045 0.46992 +-0.1022 0.05205 0.47142 +-0.1212 0.03355 0.47302 +-0.1403 0.03355 0.47302 +-0.1593 0.03355 0.47302 +-0.1777 0.03325 0.46934 +-0.1931 0.03225 0.45906 +-0.2034 0.03085 0.44369 +-0.207 0.02925 0.42557 +-0.207 0.04625 0.40381 +-0.207 0.04455 0.3837 +-0.207 0.04295 0.3636 +-0.207 0.04125 0.3435 +-0.207 0.03965 0.3234 +-0.207 0.03795 0.3032 +-0.2079 0.05625 0.283 +-0.2106 0.05485 0.2646 +-0.2152 0.05345 0.2465 +-0.2215 0.05215 0.2289 +-0.2295 0.05085 0.212 +-0.2391 0.04965 0.196 +-0.2503 0.04855 0.1811 +-0.2628 0.04745 0.1672 +-0.2767 0.04655 0.1547 +-0.2917 0.04565 0.1436 +-0.3078 0.04495 0.134 +-0.3247 0.04435 0.126 +-0.3423 0.04385 0.1197 +-0.36046 0.04355 0.1152 +-0.37897 0.04325 0.1125 +-0.37897 0.06445 0.1109 +-0.37897 0.08565 0.1096 +-0.36046 0.08585 0.1123 +-0.3423 0.08615 0.1168 +-0.3247 0.08655 0.1231 +-0.3078 0.08705 0.1311 +-0.2917 0.08755 0.1407 +-0.2767 0.08825 0.1518 +-0.2628 0.08905 0.1644 +-0.2503 0.08985 0.1782 +-0.2391 0.09075 0.1932 +-0.2295 0.09175 0.2093 +-0.2295 0.11215 0.2081 +-0.2215 0.11305 0.225 +-0.2152 0.11405 0.2426 +-0.2152 0.13425 0.2416 +-0.2152 0.15445 0.2407 +-0.2152 0.17465 0.24 +-0.2106 0.17515 0.2582 +-0.2106 0.19525 0.2577 +-0.2106 0.21535 0.2573 +-0.2106 0.23545 0.257 +-0.2106 0.25555 0.2571 +-0.1883 0.25555 0.2737 +-0.1666 0.25555 0.2906 +-0.1655 0.25555 0.3141 +-0.1424 0.25555 0.3334 +-0.1234 0.25555 0.3583 +-0.0987 0.25555 0.365 +-0.0898 0.25555 0.3823 +-0.0852 0.25555 0.3959 +-0.0834 0.25555 0.40962 +-0.0837 0.25555 0.42702 +-0.0831 0.25555 0.44517 +-0.0641 0.25555 0.46292 +-0.045 0.25555 0.46292 +-0.0269 0.25555 0.45933 +-0.0269 0.23695 0.45941 +-0.045 0.21845 0.4632 +-0.045 0.19995 0.46355 +-0.045 0.18145 0.46403 +-0.0641 0.16295 0.46468 +-0.0641 0.14445 0.46545 +-0.0831 0.12595 0.46637 +-0.0831 0.10745 0.46741 +-0.1022 0.08895 0.4686 +-0.1022 0.07045 0.46992 +-0.1212 0.05205 0.47142 +-0.1403 0.05205 0.47142 +-0.1593 0.05205 0.47142 +-0.1777 0.05175 0.46771 +-0.1931 0.05085 0.45743 +-0.2034 0.04955 0.44205 +-0.207 0.04805 0.4239 +-0.207 0.06525 0.4023 +-0.207 0.06375 0.3822 +-0.207 0.06225 0.362 +-0.207 0.06075 0.3419 +-0.207 0.05925 0.3218 +-0.207 0.05775 0.3017 +-0.2079 0.07615 0.2816 +-0.2106 0.07485 0.2631 +-0.2152 0.07365 0.245 +-0.2215 0.07245 0.2274 +-0.2295 0.07125 0.2106 +-0.2391 0.07025 0.1946 +-0.2503 0.06915 0.1796 +-0.2628 0.06825 0.1657 +-0.2767 0.06735 0.1532 +-0.2917 0.06665 0.1421 +-0.3078 0.06595 0.1325 +-0.3247 0.06545 0.1245 +-0.3423 0.06495 0.1182 +-0.36046 0.06465 0.1137 +-0.2215 0.09275 0.2261 +-0.2152 0.09385 0.2437 +-0.2106 0.09495 0.2619 +-0.2106 0.11505 0.2607 +-0.2106 0.13505 0.2597 +-0.2106 0.15515 0.2589 +-0.2079 0.15585 0.2774 +-0.2079 0.17575 0.2767 +-0.2079 0.19565 0.2762 +-0.2079 0.21565 0.2758 +-0.2079 0.23555 0.2756 +-0.2079 0.25555 0.2756 +-0.1874 0.25555 0.2937 +-0.187 0.25555 0.3143 +-0.1658 0.25555 0.3344 +-0.1438 0.25555 0.355 +-0.1449 0.25555 0.375 +-0.1289 0.25555 0.3784 +-0.1137 0.25555 0.384 +-0.1018 0.25555 0.39 +-0.1013 0.25555 0.40031 +-0.1014 0.25555 0.41275 +-0.1019 0.25555 0.42763 +-0.1012 0.25555 0.44583 +-0.0831 0.25555 0.46292 +-0.0831 0.23695 0.463 +-0.0641 0.23695 0.463 +-0.045 0.23695 0.463 +-0.0641 0.21845 0.4632 +-0.0641 0.19995 0.46355 +-0.0641 0.18145 0.46403 +-0.0831 0.16295 0.46468 +-0.0831 0.14445 0.46545 +-0.1022 0.12595 0.46637 +-0.1022 0.10745 0.46741 +-0.1212 0.08895 0.4686 +-0.1212 0.07045 0.46992 +-0.1403 0.07045 0.46992 +-0.1593 0.07045 0.46992 +-0.1777 0.07015 0.46625 +-0.1931 0.06945 0.45595 +-0.2034 0.06825 0.44057 +-0.207 0.06685 0.42241 +-0.207 0.08425 0.40092 +-0.207 0.08285 0.3808 +-0.207 0.08155 0.3607 +-0.207 0.08015 0.3405 +-0.207 0.07885 0.3204 +-0.207 0.07745 0.3002 +-0.2079 0.09605 0.2803 +-0.2079 0.11595 0.2792 +-0.2079 0.13585 0.2782 +-0.207 0.13675 0.2969 +-0.207 0.15655 0.296 +-0.207 0.17635 0.2954 +-0.207 0.19615 0.2948 +-0.207 0.21595 0.2945 +-0.207 0.23575 0.2942 +-0.207 0.25555 0.2942 +-0.207 0.25555 0.3143 +-0.207 0.25555 0.3345 +-0.1869 0.25555 0.3345 +-0.1662 0.25555 0.3547 +-0.1664 0.25555 0.3749 +-0.148 0.25555 0.3958 +-0.1328 0.25555 0.3975 +-0.1164 0.25555 0.3987 +-0.1179 0.25555 0.4137 +-0.119 0.25555 0.42927 +-0.1204 0.25555 0.44653 +-0.1022 0.25555 0.46292 +-0.1022 0.23695 0.463 +-0.1022 0.21845 0.4632 +-0.0831 0.21845 0.4632 +-0.0831 0.19995 0.46355 +-0.0831 0.18145 0.46403 +-0.1022 0.16295 0.46468 +-0.1022 0.14445 0.46545 +-0.1212 0.12595 0.46637 +-0.1212 0.10745 0.46741 +-0.1403 0.08895 0.4686 +-0.1593 0.08895 0.4686 +-0.1777 0.08875 0.46489 +-0.1931 0.08795 0.4546 +-0.2034 0.08695 0.43921 +-0.207 0.08575 0.42103 +-0.207 0.10325 0.3997 +-0.207 0.10205 0.3795 +-0.207 0.10085 0.3594 +-0.207 0.09965 0.3393 +-0.207 0.09845 0.3191 +-0.207 0.09725 0.299 +-0.207 0.11695 0.2978 +-0.207 0.13765 0.317 +-0.207 0.15725 0.3162 +-0.207 0.17695 0.3155 +-0.207 0.19655 0.315 +-0.207 0.21625 0.3146 +-0.207 0.23585 0.3144 +-0.207 0.23605 0.3346 +-0.207 0.23615 0.3548 +-0.207 0.25555 0.3547 +-0.1869 0.25555 0.3547 +-0.1868 0.25555 0.3749 +-0.1665 0.25555 0.395 +-0.1502 0.25555 0.41331 +-0.1348 0.25555 0.41456 +-0.1372 0.25555 0.42998 +-0.139 0.25555 0.44658 +-0.1212 0.25555 0.46292 +-0.1212 0.23695 0.463 +-0.1212 0.21845 0.4632 +-0.1212 0.19995 0.46355 +-0.1022 0.19995 0.46355 +-0.1022 0.18145 0.46403 +-0.1212 0.16295 0.46468 +-0.1212 0.14445 0.46545 +-0.1403 0.12595 0.46637 +-0.1403 0.10745 0.46741 +-0.1593 0.10745 0.46741 +-0.1777 0.10725 0.46371 +-0.1931 0.10655 0.4534 +-0.2034 0.10565 0.43802 +-0.207 0.10455 0.41981 +-0.207 0.12225 0.3986 +-0.207 0.12115 0.3784 +-0.207 0.12015 0.3583 +-0.207 0.11915 0.3381 +-0.207 0.11805 0.318 +-0.207 0.13855 0.3372 +-0.207 0.15805 0.3364 +-0.207 0.17755 0.3357 +-0.207 0.19705 0.3352 +-0.207 0.21655 0.3348 +-0.207 0.21685 0.355 +-0.207 0.23635 0.375 +-0.207 0.25555 0.3749 +-0.207 0.25555 0.3951 +-0.1868 0.25555 0.3951 +-0.1673 0.25555 0.41261 +-0.1516 0.25555 0.42927 +-0.1557 0.25555 0.44553 +-0.1403 0.25555 0.46292 +-0.1403 0.23695 0.463 +-0.1403 0.21845 0.4632 +-0.1403 0.19995 0.46355 +-0.1403 0.18145 0.46403 +-0.1212 0.18145 0.46403 +-0.1403 0.16295 0.46468 +-0.1403 0.14445 0.46545 +-0.1593 0.12595 0.46637 +-0.1777 0.12575 0.46265 +-0.1931 0.12515 0.45235 +-0.2034 0.12435 0.43695 +-0.207 0.12335 0.41875 +-0.207 0.14125 0.3977 +-0.207 0.14035 0.3775 +-0.207 0.13945 0.3573 +-0.207 0.15885 0.3565 +-0.207 0.17815 0.3559 +-0.207 0.19745 0.3554 +-0.207 0.21715 0.3752 +-0.207 0.23645 0.3951 +-0.207 0.23665 0.41533 +-0.207 0.25555 0.41525 +-0.1868 0.25555 0.41327 +-0.1847 0.25555 0.4272 +-0.1675 0.25555 0.42856 +-0.1699 0.25555 0.44197 +-0.1593 0.25555 0.46292 +-0.1593 0.23695 0.463 +-0.1593 0.21845 0.4632 +-0.1593 0.19995 0.46355 +-0.1593 0.18145 0.46403 +-0.1593 0.16295 0.46468 +-0.1593 0.14445 0.46545 +-0.1777 0.14425 0.46173 +-0.1931 0.14375 0.45142 +-0.2034 0.14305 0.43603 +-0.207 0.14225 0.41781 +-0.207 0.16035 0.3969 +-0.207 0.15955 0.3767 +-0.207 0.17875 0.376 +-0.207 0.19795 0.3755 +-0.207 0.21745 0.3954 +-0.207 0.21775 0.41553 +-0.2034 0.23675 0.43355 +-0.2034 0.25555 0.43346 +-0.1818 0.25555 0.43826 +-0.1777 0.25555 0.45921 +-0.1778 0.23695 0.45927 +-0.1778 0.21845 0.45949 +-0.1778 0.19985 0.45984 +-0.1777 0.18135 0.46034 +-0.1777 0.16275 0.46097 +-0.1931 0.16235 0.45065 +-0.2034 0.16185 0.43524 +-0.207 0.16115 0.41704 +-0.207 0.17935 0.3962 +-0.207 0.19835 0.3957 +-0.207 0.19885 0.41589 +-0.2034 0.21805 0.43376 +-0.1931 0.23685 0.44896 +-0.1931 0.25555 0.4489 +-0.1931 0.21825 0.44917 +-0.1931 0.19965 0.44951 +-0.1931 0.18105 0.45001 +-0.2034 0.18055 0.4346 +-0.207 0.17995 0.4164 +-0.2034 0.19925 0.4341 +-0.44777 -0.08915 0.1248 +-0.4603 -0.12345 0.1293 +-0.4603 -0.14145 0.1318 +-0.4603 -0.14405 0.1137 +-0.4603 -0.14655 0.0953 +-0.4603 -0.12595 0.1112 +-0.0327 0.25555 0.2716 +-0.015 0.25555 0.271 +-0.0115 0.25555 0.2503 +-0.0046 0.25555 0.2376 +0.0061 0.25555 0.2295 +0.002 0.25555 0.2437 +0.0806 0.25555 -0.0512 +0.0882 0.25555 -0.0649 +0.0946 0.25555 -0.0743 +0.102 0.25555 -0.0816 +0.0997 0.25555 -0.0689 +0.322 0.25555 -0.376 +0.3222 0.25555 -0.394 +0.3378 0.25555 -0.3977 +0.3384 0.25555 -0.4173 +0.3382 0.25555 -0.4344 +0.3365 0.25555 -0.4515 +0.3333 0.25555 -0.4689 +0.3297 0.25555 -0.4871 +0.3482 0.25555 -0.4905 +0.3633 0.24385 -0.4929 +0.3813 0.24405 -0.4953 +0.3988 0.24425 -0.4972 +0.4099 0.23445 -0.498 +0.4207 0.23565 -0.4988 +0.4289 0.24355 -0.4992 +0.4227 0.25555 -0.4989 +0.404 0.25555 -0.4976 +0.4055 0.25555 -0.4792 +0.4058 0.25555 -0.4615 +0.3868 0.25555 -0.4597 +0.3866 0.25555 -0.4415 +0.3697 0.25555 -0.44 +0.3699 0.25555 -0.4235 +0.3542 0.25555 -0.4207 +0.3539 0.25555 -0.437 +0.3538 0.25555 -0.4548 +0.3513 0.25555 -0.4722 +0.3693 0.25555 -0.4751 +0.3667 0.25555 -0.4934 +0.3854 0.25555 -0.4958 +0.3874 0.25555 -0.4774 +0.3694 0.25555 -0.4574 +0.4151 0.24435 -0.4985 +0.4603 0.12335 0.1394 +3 0 1 2 +3 0 2 3 +3 0 3 4 +3 0 4 5 +3 0 5 1 +3 1 5 6 +3 1 6 7 +3 1 7 8 +3 1 8 9 +3 1 9 2 +3 2 9 10 +3 2 10 11 +3 2 11 3 +3 3 11 12 +3 3 12 13 +3 3 13 4 +3 4 13 14 +3 4 14 15 +3 4 15 5 +3 5 15 16 +3 5 16 6 +3 6 16 17 +3 6 17 18 +3 6 18 7 +3 7 18 19 +3 7 19 20 +3 7 20 8 +3 8 20 21 +3 8 21 22 +3 8 22 9 +3 9 22 23 +3 9 23 10 +3 10 23 24 +3 10 24 11 +3 11 24 25 +3 11 25 12 +3 12 25 26 +3 12 26 27 +3 12 27 13 +3 13 27 28 +3 13 28 14 +3 14 28 29 +3 14 29 30 +3 14 30 15 +3 15 30 31 +3 15 31 16 +3 16 31 32 +3 16 32 17 +3 17 32 33 +3 17 33 18 +3 18 33 34 +3 18 34 35 +3 18 35 19 +3 19 35 36 +3 19 36 37 +3 19 37 20 +3 20 37 38 +3 20 38 21 +3 21 38 39 +3 21 39 40 +3 21 40 22 +3 22 40 41 +3 22 41 23 +3 23 41 42 +3 23 42 24 +3 24 42 43 +3 24 43 44 +3 24 44 25 +3 25 44 45 +3 25 45 26 +3 26 45 46 +3 26 46 47 +3 26 47 27 +3 27 47 48 +3 27 48 28 +3 28 48 49 +3 28 49 29 +3 29 49 50 +3 29 50 51 +3 29 51 30 +3 30 51 52 +3 30 52 31 +3 31 52 53 +3 31 53 32 +3 32 53 54 +3 32 54 33 +3 33 54 55 +3 33 55 34 +3 34 55 56 +3 34 56 57 +3 34 57 35 +3 35 57 58 +3 35 58 36 +3 36 58 59 +3 36 59 60 +3 36 60 37 +3 37 60 61 +3 37 61 38 +3 38 61 62 +3 38 62 39 +3 39 62 63 +3 39 63 64 +3 39 64 40 +3 40 64 65 +3 40 65 41 +3 41 65 66 +3 41 66 67 +3 41 67 42 +3 42 67 68 +3 42 68 69 +3 42 69 43 +3 43 69 70 +3 43 70 71 +3 43 71 72 +3 43 72 44 +3 44 72 73 +3 44 73 45 +3 45 73 74 +3 45 74 75 +3 45 75 46 +3 46 75 76 +3 46 76 77 +3 46 77 47 +3 47 77 78 +3 47 78 48 +3 48 78 79 +3 48 79 49 +3 49 79 80 +3 49 80 50 +3 50 80 81 +3 50 81 82 +3 50 82 51 +3 51 82 83 +3 51 83 52 +3 52 83 84 +3 52 84 53 +3 53 84 85 +3 53 85 54 +3 54 85 86 +3 54 86 55 +3 55 86 87 +3 55 87 56 +3 56 87 88 +3 56 88 89 +3 56 89 57 +3 57 89 90 +3 57 90 58 +3 58 90 91 +3 58 91 59 +3 59 91 92 +3 59 92 93 +3 59 93 60 +3 60 93 94 +3 60 94 61 +3 61 94 95 +3 61 95 62 +3 62 95 96 +3 62 96 63 +3 63 96 97 +3 63 97 98 +3 63 98 64 +3 64 98 99 +3 64 99 65 +3 65 99 100 +3 65 100 66 +3 66 100 101 +3 66 101 102 +3 66 102 67 +3 67 102 68 +3 68 102 103 +3 68 103 104 +3 68 104 69 +3 69 104 105 +3 69 105 70 +3 70 105 106 +3 70 106 107 +3 70 107 71 +3 71 107 108 +3 71 108 109 +3 71 109 110 +3 71 110 72 +3 72 110 74 +3 74 110 111 +3 74 111 75 +3 75 111 112 +3 75 112 76 +3 76 112 113 +3 76 113 114 +3 76 114 77 +3 77 114 115 +3 77 115 78 +3 78 115 116 +3 78 116 79 +3 79 116 117 +3 79 117 80 +3 80 117 118 +3 80 118 119 +3 80 119 81 +3 81 119 120 +3 81 120 82 +3 82 120 121 +3 82 121 83 +3 83 121 122 +3 83 122 84 +3 84 122 123 +3 84 123 85 +3 85 123 124 +3 85 124 86 +3 86 124 125 +3 86 125 87 +3 87 125 126 +3 87 126 127 +3 87 127 88 +3 88 127 128 +3 88 128 89 +3 89 128 129 +3 89 129 90 +3 90 129 130 +3 90 130 91 +3 91 130 131 +3 91 131 92 +3 92 131 132 +3 92 132 133 +3 92 133 93 +3 93 133 134 +3 93 134 94 +3 94 134 135 +3 94 135 95 +3 95 135 136 +3 95 136 96 +3 96 136 137 +3 96 137 97 +3 97 137 138 +3 97 138 139 +3 97 139 98 +3 98 139 140 +3 98 140 99 +3 99 140 100 +3 100 140 141 +3 100 141 101 +3 101 141 142 +3 101 142 143 +3 101 143 102 +3 102 143 103 +3 103 143 144 +3 103 144 145 +3 103 145 104 +3 104 145 146 +3 104 146 105 +3 105 146 147 +3 105 147 106 +3 106 147 148 +3 106 148 149 +3 106 149 107 +3 107 149 108 +3 108 149 150 +3 108 150 151 +3 108 151 109 +3 109 151 152 +3 109 152 153 +3 109 153 110 +3 110 153 154 +3 110 154 111 +3 111 154 155 +3 111 155 112 +3 112 155 156 +3 112 156 113 +3 113 156 157 +3 113 157 158 +3 113 158 159 +3 113 159 114 +3 114 159 115 +3 115 159 116 +3 116 159 160 +3 116 160 117 +3 117 160 161 +3 117 161 118 +3 118 161 162 +3 118 162 163 +3 118 163 164 +3 118 164 119 +3 119 164 165 +3 119 165 120 +3 120 165 166 +3 120 166 121 +3 121 166 167 +3 121 167 122 +3 122 167 168 +3 122 168 123 +3 123 168 169 +3 123 169 124 +3 124 169 170 +3 124 170 125 +3 125 170 171 +3 125 171 126 +3 126 171 172 +3 126 172 173 +3 126 173 127 +3 127 173 174 +3 127 174 128 +3 128 174 175 +3 128 175 129 +3 129 175 176 +3 129 176 130 +3 130 176 177 +3 130 177 131 +3 131 177 178 +3 131 178 132 +3 132 178 179 +3 132 179 180 +3 132 180 133 +3 133 180 181 +3 133 181 134 +3 134 181 182 +3 134 182 135 +3 135 182 183 +3 135 183 136 +3 136 183 184 +3 136 184 137 +3 137 184 185 +3 137 185 138 +3 138 185 186 +3 138 186 187 +3 138 187 139 +3 139 187 188 +3 139 188 140 +3 140 188 141 +3 141 188 189 +3 141 189 142 +3 142 189 190 +3 142 190 191 +3 142 191 143 +3 143 191 144 +3 144 191 192 +3 144 192 193 +3 144 193 145 +3 145 193 194 +3 145 194 146 +3 146 194 195 +3 146 195 147 +3 147 195 196 +3 147 196 148 +3 148 196 197 +3 148 197 198 +3 148 198 149 +3 149 198 150 +3 150 198 199 +3 150 199 200 +3 150 200 151 +3 151 200 201 +3 151 201 152 +3 152 201 202 +3 152 202 203 +3 152 203 204 +3 152 204 153 +3 153 204 154 +3 154 204 155 +3 155 204 205 +3 155 205 156 +3 156 205 206 +3 156 206 207 +3 156 207 157 +3 157 207 208 +3 157 208 158 +3 158 208 209 +3 158 209 210 +3 158 210 159 +3 159 210 160 +3 160 210 211 +3 160 211 161 +3 161 211 212 +3 161 212 162 +3 162 212 213 +3 162 213 214 +3 162 214 163 +3 163 214 215 +3 163 215 164 +3 164 215 216 +3 164 216 165 +3 165 216 217 +3 165 217 218 +3 165 218 166 +3 166 218 219 +3 166 219 167 +3 167 219 220 +3 167 220 168 +3 168 220 221 +3 168 221 169 +3 169 221 222 +3 169 222 170 +3 170 222 223 +3 170 223 171 +3 171 223 224 +3 171 224 172 +3 172 224 225 +3 172 225 173 +3 173 225 226 +3 173 226 227 +3 173 227 174 +3 174 227 228 +3 174 228 175 +3 175 228 229 +3 175 229 176 +3 176 229 230 +3 176 230 177 +3 177 230 231 +3 177 231 178 +3 178 231 232 +3 178 232 179 +3 179 232 233 +3 179 233 234 +3 179 234 180 +3 180 234 235 +3 180 235 181 +3 181 235 236 +3 181 236 182 +3 182 236 237 +3 182 237 183 +3 183 237 238 +3 183 238 184 +3 184 238 239 +3 184 239 185 +3 185 239 240 +3 185 240 186 +3 186 240 241 +3 186 241 242 +3 186 242 187 +3 187 242 243 +3 187 243 188 +3 188 243 189 +3 189 243 244 +3 189 244 190 +3 190 244 245 +3 190 245 246 +3 190 246 191 +3 191 246 192 +3 192 246 247 +3 192 247 248 +3 192 248 193 +3 193 248 249 +3 193 249 194 +3 194 249 250 +3 194 250 195 +3 195 250 251 +3 195 251 252 +3 195 252 196 +3 196 252 197 +3 197 252 253 +3 197 253 254 +3 197 254 198 +3 198 254 199 +3 199 254 255 +3 199 255 256 +3 199 256 200 +3 200 256 257 +3 200 257 201 +3 201 257 258 +3 201 258 259 +3 201 259 202 +3 202 259 260 +3 202 260 203 +3 203 260 261 +3 203 261 262 +3 203 262 205 +3 205 262 206 +3 206 262 263 +3 206 263 264 +3 206 264 207 +3 207 264 265 +3 207 265 208 +3 208 265 266 +3 208 266 209 +3 209 266 267 +3 209 267 210 +3 210 267 211 +3 211 267 268 +3 211 268 212 +3 212 268 269 +3 212 269 213 +3 213 269 270 +3 213 270 271 +3 213 271 214 +3 214 271 272 +3 214 272 215 +3 215 272 273 +3 215 273 274 +3 215 274 216 +3 216 274 217 +3 217 274 275 +3 217 275 276 +3 217 276 277 +3 217 277 218 +3 218 277 219 +3 219 277 278 +3 219 278 220 +3 220 278 279 +3 220 279 221 +3 221 279 280 +3 221 280 222 +3 222 280 281 +3 222 281 223 +3 223 281 282 +3 223 282 224 +3 224 282 283 +3 224 283 225 +3 225 283 284 +3 225 284 226 +3 226 284 285 +3 226 285 286 +3 226 286 227 +3 227 286 287 +3 227 287 228 +3 228 287 288 +3 228 288 229 +3 229 288 289 +3 229 289 230 +3 230 289 290 +3 230 290 231 +3 231 290 291 +3 231 291 232 +3 232 291 292 +3 232 292 233 +3 233 292 293 +3 233 293 294 +3 233 294 234 +3 234 294 295 +3 234 295 235 +3 235 295 296 +3 235 296 236 +3 236 296 297 +3 236 297 237 +3 237 297 298 +3 237 298 238 +3 238 298 299 +3 238 299 239 +3 239 299 300 +3 239 300 240 +3 240 300 301 +3 240 301 241 +3 241 301 302 +3 241 302 303 +3 241 303 242 +3 242 303 304 +3 242 304 243 +3 243 304 244 +3 244 304 305 +3 244 305 245 +3 245 305 306 +3 245 306 307 +3 245 307 246 +3 246 307 247 +3 247 307 308 +3 247 308 309 +3 247 309 248 +3 248 309 310 +3 248 310 249 +3 249 310 311 +3 249 311 250 +3 250 311 312 +3 250 312 251 +3 251 312 313 +3 251 313 252 +3 252 313 314 +3 252 314 253 +3 253 314 315 +3 253 315 316 +3 253 316 254 +3 254 316 255 +3 255 316 317 +3 255 317 318 +3 255 318 256 +3 256 318 319 +3 256 319 257 +3 257 319 320 +3 257 320 258 +3 258 320 321 +3 258 321 259 +3 259 321 322 +3 259 322 323 +3 259 323 260 +3 260 323 324 +3 260 324 325 +3 260 325 261 +3 261 325 326 +3 261 326 262 +3 262 326 263 +3 263 326 327 +3 263 327 328 +3 263 328 264 +3 264 328 329 +3 264 329 265 +3 265 329 330 +3 265 330 266 +3 266 330 331 +3 266 331 267 +3 267 331 332 +3 267 332 268 +3 268 332 333 +3 268 333 269 +3 269 333 334 +3 269 334 335 +3 269 335 270 +3 270 335 336 +3 270 336 337 +3 270 337 338 +3 270 338 271 +3 271 338 272 +3 272 338 339 +3 272 339 273 +3 273 339 340 +3 273 340 274 +3 274 340 341 +3 274 341 342 +3 274 342 275 +3 275 342 276 +3 276 342 343 +3 276 343 344 +3 276 344 277 +3 277 344 278 +3 278 344 345 +3 278 345 279 +3 279 345 346 +3 279 346 280 +3 280 346 347 +3 280 347 281 +3 281 347 348 +3 281 348 282 +3 282 348 349 +3 282 349 283 +3 283 349 350 +3 283 350 284 +3 284 350 351 +3 284 351 352 +3 284 352 285 +3 285 352 353 +3 285 353 286 +3 286 353 354 +3 286 354 287 +3 287 354 355 +3 287 355 288 +3 288 355 356 +3 288 356 289 +3 289 356 357 +3 289 357 290 +3 290 357 358 +3 290 358 291 +3 291 358 359 +3 291 359 292 +3 292 359 360 +3 292 360 293 +3 293 360 361 +3 293 361 362 +3 293 362 294 +3 294 362 363 +3 294 363 295 +3 295 363 364 +3 295 364 296 +3 296 364 365 +3 296 365 297 +3 297 365 366 +3 297 366 298 +3 298 366 299 +3 299 366 367 +3 299 367 300 +3 300 367 368 +3 300 368 301 +3 301 368 369 +3 301 369 302 +3 302 369 370 +3 302 370 371 +3 302 371 303 +3 303 371 372 +3 303 372 304 +3 304 372 305 +3 305 372 373 +3 305 373 306 +3 306 373 374 +3 306 374 375 +3 306 375 307 +3 307 375 308 +3 308 375 376 +3 308 376 377 +3 308 377 309 +3 309 377 378 +3 309 378 310 +3 310 378 379 +3 310 379 311 +3 311 379 380 +3 311 380 381 +3 311 381 312 +3 312 381 313 +3 313 381 382 +3 313 382 314 +3 314 382 383 +3 314 383 315 +3 315 383 384 +3 315 384 385 +3 315 385 316 +3 316 385 317 +3 317 385 386 +3 317 386 387 +3 317 387 318 +3 318 387 388 +3 318 388 319 +3 319 388 389 +3 319 389 320 +3 320 389 390 +3 320 390 321 +3 321 390 391 +3 321 391 392 +3 321 392 322 +3 322 392 393 +3 322 393 394 +3 322 394 323 +3 323 394 324 +3 324 394 395 +3 324 395 396 +3 324 396 325 +3 325 396 397 +3 325 397 326 +3 326 397 327 +3 327 397 398 +3 327 398 328 +3 328 398 399 +3 328 399 400 +3 328 400 401 +3 328 401 329 +3 329 401 402 +3 329 402 330 +3 330 402 403 +3 330 403 331 +3 331 403 332 +3 332 403 404 +3 332 404 333 +3 333 404 405 +3 333 405 334 +3 334 405 406 +3 334 406 407 +3 334 407 335 +3 335 407 336 +3 336 407 408 +3 336 408 409 +3 336 409 337 +3 337 409 410 +3 337 410 411 +3 337 411 338 +3 338 411 339 +3 339 411 412 +3 339 412 340 +3 340 412 413 +3 340 413 414 +3 340 414 341 +3 341 414 415 +3 341 415 342 +3 342 415 416 +3 342 416 343 +3 343 416 417 +3 343 417 344 +3 344 417 418 +3 344 418 345 +3 345 418 419 +3 345 419 346 +3 346 419 420 +3 346 420 347 +3 347 420 421 +3 347 421 348 +3 348 421 422 +3 348 422 349 +3 349 422 423 +3 349 423 350 +3 350 423 424 +3 350 424 351 +3 351 424 425 +3 351 425 426 +3 351 426 352 +3 352 426 427 +3 352 427 353 +3 353 427 428 +3 353 428 354 +3 354 428 429 +3 354 429 355 +3 355 429 430 +3 355 430 356 +3 356 430 431 +3 356 431 357 +3 357 431 432 +3 357 432 358 +3 358 432 433 +3 358 433 359 +3 359 433 434 +3 359 434 360 +3 360 434 435 +3 360 435 361 +3 361 435 436 +3 361 436 437 +3 361 437 362 +3 362 437 438 +3 362 438 363 +3 363 438 439 +3 363 439 364 +3 364 439 440 +3 364 440 365 +3 365 440 441 +3 365 441 366 +3 366 441 367 +3 367 441 442 +3 367 442 368 +3 368 442 443 +3 368 443 369 +3 369 443 444 +3 369 444 370 +3 370 444 445 +3 370 445 446 +3 370 446 371 +3 371 446 447 +3 371 447 372 +3 372 447 373 +3 373 447 448 +3 373 448 374 +3 374 448 449 +3 374 449 450 +3 374 450 375 +3 375 450 376 +3 376 450 451 +3 376 451 452 +3 376 452 377 +3 377 452 453 +3 377 453 378 +3 378 453 454 +3 378 454 379 +3 379 454 455 +3 379 455 380 +3 380 455 456 +3 380 456 457 +3 380 457 381 +3 381 457 382 +3 382 457 458 +3 382 458 383 +3 383 458 459 +3 383 459 384 +3 384 459 460 +3 384 460 461 +3 384 461 385 +3 385 461 386 +3 386 461 462 +3 386 462 463 +3 386 463 387 +3 387 463 464 +3 387 464 388 +3 388 464 465 +3 388 465 389 +3 389 465 466 +3 389 466 390 +3 390 466 467 +3 390 467 391 +3 391 467 468 +3 391 468 469 +3 391 469 392 +3 392 469 393 +3 393 469 470 +3 393 470 395 +3 395 470 471 +3 395 471 472 +3 395 472 396 +3 396 472 473 +3 396 473 397 +3 397 473 398 +3 398 473 399 +3 399 473 474 +3 399 474 475 +3 399 475 400 +3 400 475 476 +3 400 476 477 +3 400 477 401 +3 401 477 478 +3 401 478 402 +3 402 478 479 +3 402 479 403 +3 403 479 404 +3 404 479 405 +3 405 479 480 +3 405 480 481 +3 405 481 406 +3 406 481 482 +3 406 482 483 +3 406 483 407 +3 407 483 408 +3 408 483 484 +3 408 484 409 +3 409 484 485 +3 409 485 486 +3 409 486 410 +3 410 486 487 +3 410 487 488 +3 410 488 489 +3 410 489 411 +3 411 489 412 +3 412 489 490 +3 412 490 413 +3 413 490 491 +3 413 491 492 +3 413 492 414 +3 414 492 493 +3 414 493 415 +3 415 493 494 +3 415 494 495 +3 415 495 416 +3 416 495 417 +3 417 495 496 +3 417 496 497 +3 417 497 418 +3 418 497 419 +3 419 497 498 +3 419 498 420 +3 420 498 499 +3 420 499 421 +3 421 499 500 +3 421 500 422 +3 422 500 501 +3 422 501 423 +3 423 501 502 +3 423 502 424 +3 424 502 503 +3 424 503 425 +3 425 503 504 +3 425 504 505 +3 425 505 426 +3 426 505 506 +3 426 506 427 +3 427 506 507 +3 427 507 428 +3 428 507 508 +3 428 508 429 +3 429 508 509 +3 429 509 430 +3 430 509 510 +3 430 510 431 +3 431 510 511 +3 431 511 432 +3 432 511 512 +3 432 512 433 +3 433 512 513 +3 433 513 434 +3 434 513 514 +3 434 514 435 +3 435 514 515 +3 435 515 436 +3 436 515 516 +3 436 516 517 +3 436 517 437 +3 437 517 518 +3 437 518 438 +3 438 518 519 +3 438 519 439 +3 439 519 520 +3 439 520 440 +3 440 520 521 +3 440 521 441 +3 441 521 522 +3 441 522 442 +3 442 522 443 +3 443 522 523 +3 443 523 444 +3 444 523 524 +3 444 524 445 +3 445 524 525 +3 445 525 526 +3 445 526 446 +3 446 526 527 +3 446 527 447 +3 447 527 448 +3 448 527 528 +3 448 528 449 +3 449 528 529 +3 449 529 530 +3 449 530 450 +3 450 530 451 +3 451 530 531 +3 451 531 532 +3 451 532 452 +3 452 532 533 +3 452 533 453 +3 453 533 534 +3 453 534 454 +3 454 534 535 +3 454 535 455 +3 455 535 536 +3 455 536 456 +3 456 536 537 +3 456 537 538 +3 456 538 457 +3 457 538 458 +3 458 538 539 +3 458 539 540 +3 458 540 459 +3 459 540 460 +3 460 540 541 +3 460 541 542 +3 460 542 461 +3 461 542 462 +3 462 542 543 +3 462 543 544 +3 462 544 463 +3 463 544 545 +3 463 545 464 +3 464 545 546 +3 464 546 465 +3 465 546 547 +3 465 547 466 +3 466 547 548 +3 466 548 467 +3 467 548 549 +3 467 549 468 +3 468 549 550 +3 468 550 551 +3 468 551 469 +3 469 551 470 +3 470 551 552 +3 470 552 553 +3 470 553 471 +3 471 553 554 +3 471 554 472 +3 472 554 555 +3 472 555 474 +3 474 555 556 +3 474 556 475 +3 475 556 557 +3 475 557 558 +3 475 558 476 +3 476 558 559 +3 476 559 560 +3 476 560 477 +3 477 560 561 +3 477 561 478 +3 478 561 479 +3 479 561 480 +3 480 561 562 +3 480 562 481 +3 481 562 563 +3 481 563 564 +3 481 564 482 +3 482 564 565 +3 482 565 566 +3 482 566 483 +3 483 566 484 +3 484 566 567 +3 484 567 485 +3 485 567 568 +3 485 568 486 +3 486 568 487 +3 487 568 569 +3 487 569 570 +3 487 570 488 +3 488 570 571 +3 488 571 572 +3 488 572 489 +3 489 572 573 +3 489 573 490 +3 490 573 491 +3 491 573 574 +3 491 574 575 +3 491 575 492 +3 492 575 576 +3 492 576 493 +3 493 576 577 +3 493 577 494 +3 494 577 578 +3 494 578 579 +3 494 579 495 +3 495 579 496 +3 496 579 580 +3 496 580 581 +3 496 581 497 +3 497 581 582 +3 497 582 498 +3 498 582 583 +3 498 583 499 +3 499 583 584 +3 499 584 500 +3 500 584 585 +3 500 585 501 +3 501 585 586 +3 501 586 502 +3 502 586 587 +3 502 587 503 +3 503 587 588 +3 503 588 504 +3 504 588 589 +3 504 589 590 +3 504 590 505 +3 505 590 591 +3 505 591 506 +3 506 591 592 +3 506 592 507 +3 507 592 593 +3 507 593 508 +3 508 593 594 +3 508 594 509 +3 509 594 595 +3 509 595 596 +3 509 596 510 +3 510 596 597 +3 510 597 511 +3 511 597 598 +3 511 598 512 +3 512 598 599 +3 512 599 513 +3 513 599 600 +3 513 600 514 +3 514 600 601 +3 514 601 515 +3 515 601 602 +3 515 602 516 +3 516 602 603 +3 516 603 604 +3 516 604 605 +3 516 605 517 +3 517 605 606 +3 517 606 518 +3 518 606 607 +3 518 607 519 +3 519 607 608 +3 519 608 520 +3 520 608 609 +3 520 609 521 +3 521 609 610 +3 521 610 522 +3 522 610 611 +3 522 611 523 +3 523 611 612 +3 523 612 524 +3 524 612 613 +3 524 613 525 +3 525 613 614 +3 525 614 615 +3 525 615 526 +3 526 615 616 +3 526 616 527 +3 527 616 528 +3 528 616 617 +3 528 617 529 +3 529 617 618 +3 529 618 619 +3 529 619 530 +3 530 619 531 +3 531 619 620 +3 531 620 621 +3 531 621 532 +3 532 621 622 +3 532 622 533 +3 533 622 623 +3 533 623 534 +3 534 623 624 +3 534 624 625 +3 534 625 535 +3 535 625 536 +3 536 625 626 +3 536 626 537 +3 537 626 627 +3 537 627 628 +3 537 628 538 +3 538 628 539 +3 539 628 629 +3 539 629 630 +3 539 630 540 +3 540 630 541 +3 541 630 631 +3 541 631 632 +3 541 632 542 +3 542 632 543 +3 543 632 633 +3 543 633 634 +3 543 634 544 +3 544 634 635 +3 544 635 545 +3 545 635 636 +3 545 636 546 +3 546 636 637 +3 546 637 547 +3 547 637 638 +3 547 638 548 +3 548 638 639 +3 548 639 549 +3 549 639 640 +3 549 640 550 +3 550 640 641 +3 550 641 642 +3 550 642 551 +3 551 642 552 +3 552 642 643 +3 552 643 644 +3 552 644 553 +3 553 644 645 +3 553 645 646 +3 553 646 554 +3 554 646 647 +3 554 647 555 +3 555 647 556 +3 556 647 648 +3 556 648 649 +3 556 649 557 +3 557 649 650 +3 557 650 558 +3 558 650 651 +3 558 651 559 +3 559 651 652 +3 559 652 653 +3 559 653 560 +3 560 653 562 +3 562 653 563 +3 563 653 654 +3 563 654 655 +3 563 655 564 +3 564 655 656 +3 564 656 565 +3 565 656 657 +3 565 657 658 +3 565 658 659 +3 565 659 566 +3 566 659 567 +3 567 659 660 +3 567 660 661 +3 567 661 568 +3 568 661 662 +3 568 662 569 +3 569 662 663 +3 569 663 664 +3 569 664 570 +3 570 664 665 +3 570 665 571 +3 571 665 666 +3 571 666 667 +3 571 667 572 +3 572 667 573 +3 573 667 574 +3 574 667 668 +3 574 668 669 +3 574 669 575 +3 575 669 670 +3 575 670 576 +3 576 670 671 +3 576 671 577 +3 577 671 672 +3 577 672 578 +3 578 672 673 +3 578 673 674 +3 578 674 580 +3 580 674 675 +3 580 675 676 +3 580 676 581 +3 581 676 677 +3 581 677 582 +3 582 677 678 +3 582 678 583 +3 583 678 679 +3 583 679 584 +3 584 679 680 +3 584 680 585 +3 585 680 681 +3 585 681 586 +3 586 681 682 +3 586 682 587 +3 587 682 683 +3 587 683 588 +3 588 683 684 +3 588 684 589 +3 589 684 685 +3 589 685 686 +3 589 686 590 +3 590 686 687 +3 590 687 591 +3 591 687 688 +3 591 688 592 +3 592 688 689 +3 592 689 593 +3 593 689 690 +3 593 690 594 +3 594 690 595 +3 595 690 691 +3 595 691 692 +3 595 692 693 +3 595 693 596 +3 596 693 597 +3 597 693 694 +3 597 694 598 +3 598 694 695 +3 598 695 599 +3 599 695 696 +3 599 696 600 +3 600 696 697 +3 600 697 601 +3 601 697 698 +3 601 698 602 +3 602 698 699 +3 602 699 603 +3 603 699 700 +3 603 700 701 +3 603 701 604 +3 604 701 702 +3 604 702 605 +3 605 702 703 +3 605 703 606 +3 606 703 704 +3 606 704 607 +3 607 704 705 +3 607 705 706 +3 607 706 608 +3 608 706 707 +3 608 707 609 +3 609 707 708 +3 609 708 610 +3 610 708 709 +3 610 709 611 +3 611 709 710 +3 611 710 612 +3 612 710 711 +3 612 711 613 +3 613 711 712 +3 613 712 614 +3 614 712 713 +3 614 713 714 +3 614 714 615 +3 615 714 715 +3 615 715 616 +3 616 715 617 +3 617 715 716 +3 617 716 618 +3 618 716 717 +3 618 717 718 +3 618 718 619 +3 619 718 620 +3 620 718 719 +3 620 719 720 +3 620 720 621 +3 621 720 721 +3 621 721 622 +3 622 721 722 +3 622 722 623 +3 623 722 723 +3 623 723 624 +3 624 723 724 +3 624 724 725 +3 624 725 625 +3 625 725 626 +3 626 725 726 +3 626 726 627 +3 627 726 727 +3 627 727 728 +3 627 728 628 +3 628 728 629 +3 629 728 729 +3 629 729 730 +3 629 730 630 +3 630 730 631 +3 631 730 731 +3 631 731 732 +3 631 732 632 +3 632 732 633 +3 633 732 733 +3 633 733 734 +3 633 734 634 +3 634 734 735 +3 634 735 635 +3 635 735 736 +3 635 736 636 +3 636 736 737 +3 636 737 637 +3 637 737 738 +3 637 738 638 +3 638 738 739 +3 638 739 639 +3 639 739 740 +3 639 740 640 +3 640 740 741 +3 640 741 641 +3 641 741 742 +3 641 742 743 +3 641 743 642 +3 642 743 643 +3 643 743 744 +3 643 744 745 +3 643 745 644 +3 644 745 746 +3 644 746 645 +3 645 746 747 +3 645 747 646 +3 646 747 647 +3 647 747 648 +3 648 747 748 +3 648 748 749 +3 648 749 649 +3 649 749 750 +3 649 750 650 +3 650 750 751 +3 650 751 651 +3 651 751 752 +3 651 752 652 +3 652 752 753 +3 652 753 654 +3 654 753 754 +3 654 754 655 +3 655 754 755 +3 655 755 656 +3 656 755 657 +3 657 755 756 +3 657 756 757 +3 657 757 658 +3 658 757 758 +3 658 758 659 +3 659 758 660 +3 660 758 759 +3 660 759 760 +3 660 760 661 +3 661 760 761 +3 661 761 662 +3 662 761 762 +3 662 762 663 +3 663 762 763 +3 663 763 764 +3 663 764 664 +3 664 764 765 +3 664 765 665 +3 665 765 766 +3 665 766 666 +3 666 766 767 +3 666 767 668 +3 668 767 768 +3 668 768 669 +3 669 768 769 +3 669 769 670 +3 670 769 770 +3 670 770 671 +3 671 770 771 +3 671 771 672 +3 672 771 772 +3 672 772 673 +3 673 772 773 +3 673 773 774 +3 673 774 674 +3 674 774 675 +3 675 774 775 +3 675 775 776 +3 675 776 676 +3 676 776 777 +3 676 777 677 +3 677 777 778 +3 677 778 678 +3 678 778 779 +3 678 779 679 +3 679 779 780 +3 679 780 680 +3 680 780 781 +3 680 781 681 +3 681 781 782 +3 681 782 682 +3 682 782 783 +3 682 783 683 +3 683 783 784 +3 683 784 684 +3 684 784 785 +3 684 785 685 +3 685 785 786 +3 685 786 686 +3 686 786 787 +3 686 787 687 +3 687 787 788 +3 687 788 789 +3 687 789 688 +3 688 789 790 +3 688 790 689 +3 689 790 791 +3 689 791 690 +3 690 791 691 +3 691 791 792 +3 691 792 793 +3 691 793 692 +3 692 793 794 +3 692 794 795 +3 692 795 693 +3 693 795 694 +3 694 795 796 +3 694 796 695 +3 695 796 797 +3 695 797 696 +3 696 797 798 +3 696 798 697 +3 697 798 799 +3 697 799 698 +3 698 799 800 +3 698 800 699 +3 699 800 801 +3 699 801 700 +3 700 801 802 +3 700 802 803 +3 700 803 701 +3 701 803 804 +3 701 804 702 +3 702 804 805 +3 702 805 703 +3 703 805 806 +3 703 806 704 +3 704 806 807 +3 704 807 705 +3 705 807 808 +3 705 808 809 +3 705 809 706 +3 706 809 810 +3 706 810 707 +3 707 810 811 +3 707 811 708 +3 708 811 812 +3 708 812 709 +3 709 812 813 +3 709 813 710 +3 710 813 814 +3 710 814 711 +3 711 814 815 +3 711 815 712 +3 712 815 816 +3 712 816 713 +3 713 816 817 +3 713 817 818 +3 713 818 714 +3 714 818 819 +3 714 819 715 +3 715 819 716 +3 716 819 820 +3 716 820 717 +3 717 820 821 +3 717 821 822 +3 717 822 718 +3 718 822 719 +3 719 822 823 +3 719 823 824 +3 719 824 720 +3 720 824 825 +3 720 825 721 +3 721 825 826 +3 721 826 722 +3 722 826 827 +3 722 827 723 +3 723 827 828 +3 723 828 724 +3 724 828 829 +3 724 829 830 +3 724 830 725 +3 725 830 831 +3 725 831 726 +3 726 831 727 +3 727 831 832 +3 727 832 833 +3 727 833 728 +3 728 833 729 +3 729 833 834 +3 729 834 835 +3 729 835 730 +3 730 835 731 +3 731 835 836 +3 731 836 837 +3 731 837 732 +3 732 837 733 +3 733 837 838 +3 733 838 839 +3 733 839 734 +3 734 839 840 +3 734 840 735 +3 735 840 841 +3 735 841 736 +3 736 841 842 +3 736 842 737 +3 737 842 843 +3 737 843 738 +3 738 843 844 +3 738 844 739 +3 739 844 845 +3 739 845 740 +3 740 845 846 +3 740 846 741 +3 741 846 847 +3 741 847 742 +3 742 847 848 +3 742 848 849 +3 742 849 743 +3 743 849 744 +3 744 849 850 +3 744 850 851 +3 744 851 745 +3 745 851 852 +3 745 852 746 +3 746 852 853 +3 746 853 854 +3 746 854 747 +3 747 854 748 +3 748 854 855 +3 748 855 856 +3 748 856 857 +3 748 857 749 +3 749 857 858 +3 749 858 750 +3 750 858 859 +3 750 859 751 +3 751 859 860 +3 751 860 752 +3 752 860 861 +3 752 861 862 +3 752 862 753 +3 753 862 863 +3 753 863 864 +3 753 864 754 +3 754 864 865 +3 754 865 755 +3 755 865 756 +3 756 865 866 +3 756 866 867 +3 756 867 757 +3 757 867 868 +3 757 868 758 +3 758 868 759 +3 759 868 869 +3 759 869 870 +3 759 870 871 +3 759 871 760 +3 760 871 872 +3 760 872 873 +3 760 873 761 +3 761 873 874 +3 761 874 762 +3 762 874 875 +3 762 875 763 +3 763 875 876 +3 763 876 877 +3 763 877 764 +3 764 877 878 +3 764 878 765 +3 765 878 879 +3 765 879 766 +3 766 879 880 +3 766 880 767 +3 767 880 881 +3 767 881 768 +3 768 881 882 +3 768 882 769 +3 769 882 883 +3 769 883 770 +3 770 883 884 +3 770 884 771 +3 771 884 772 +3 772 884 773 +3 773 884 885 +3 773 885 886 +3 773 886 774 +3 774 886 887 +3 774 887 775 +3 775 887 888 +3 775 888 889 +3 775 889 776 +3 776 889 777 +3 777 889 890 +3 777 890 778 +3 778 890 891 +3 778 891 779 +3 779 891 892 +3 779 892 780 +3 780 892 893 +3 780 893 894 +3 780 894 781 +3 781 894 895 +3 781 895 782 +3 782 895 896 +3 782 896 783 +3 783 896 897 +3 783 897 784 +3 784 897 898 +3 784 898 785 +3 785 898 899 +3 785 899 786 +3 786 899 900 +3 786 900 787 +3 787 900 901 +3 787 901 788 +3 788 901 902 +3 788 902 903 +3 788 903 789 +3 789 903 904 +3 789 904 790 +3 790 904 905 +3 790 905 791 +3 791 905 792 +3 792 905 906 +3 792 906 907 +3 792 907 793 +3 793 907 908 +3 793 908 794 +3 794 908 909 +3 794 909 910 +3 794 910 795 +3 795 910 796 +3 796 910 911 +3 796 911 797 +3 797 911 912 +3 797 912 798 +3 798 912 913 +3 798 913 799 +3 799 913 914 +3 799 914 800 +3 800 914 915 +3 800 915 801 +3 801 915 916 +3 801 916 802 +3 802 916 917 +3 802 917 918 +3 802 918 919 +3 802 919 803 +3 803 919 920 +3 803 920 804 +3 804 920 921 +3 804 921 805 +3 805 921 922 +3 805 922 806 +3 806 922 923 +3 806 923 807 +3 807 923 924 +3 807 924 808 +3 808 924 925 +3 808 925 809 +3 809 925 926 +3 809 926 810 +3 810 926 927 +3 810 927 811 +3 811 927 928 +3 811 928 812 +3 812 928 929 +3 812 929 813 +3 813 929 930 +3 813 930 814 +3 814 930 931 +3 814 931 815 +3 815 931 932 +3 815 932 816 +3 816 932 933 +3 816 933 817 +3 817 933 934 +3 817 934 935 +3 817 935 818 +3 818 935 936 +3 818 936 819 +3 819 936 820 +3 820 936 937 +3 820 937 821 +3 821 937 938 +3 821 938 939 +3 821 939 822 +3 822 939 823 +3 823 939 940 +3 823 940 941 +3 823 941 824 +3 824 941 942 +3 824 942 825 +3 825 942 943 +3 825 943 826 +3 826 943 944 +3 826 944 827 +3 827 944 945 +3 827 945 828 +3 828 945 946 +3 828 946 829 +3 829 946 947 +3 829 947 948 +3 829 948 830 +3 830 948 949 +3 830 949 831 +3 831 949 950 +3 831 950 832 +3 832 950 833 +3 833 950 951 +3 833 951 834 +3 834 951 952 +3 834 952 953 +3 834 953 835 +3 835 953 836 +3 836 953 954 +3 836 954 955 +3 836 955 837 +3 837 955 838 +3 838 955 956 +3 838 956 957 +3 838 957 839 +3 839 957 958 +3 839 958 840 +3 840 958 959 +3 840 959 841 +3 841 959 960 +3 841 960 842 +3 842 960 961 +3 842 961 843 +3 843 961 962 +3 843 962 844 +3 844 962 963 +3 844 963 845 +3 845 963 964 +3 845 964 846 +3 846 964 965 +3 846 965 847 +3 847 965 966 +3 847 966 848 +3 848 966 967 +3 848 967 968 +3 848 968 849 +3 849 968 850 +3 850 968 969 +3 850 969 970 +3 850 970 851 +3 851 970 852 +3 852 970 971 +3 852 971 853 +3 853 971 972 +3 853 972 855 +3 855 972 973 +3 855 973 974 +3 855 974 856 +3 856 974 975 +3 856 975 857 +3 857 975 976 +3 857 976 858 +3 858 976 977 +3 858 977 978 +3 858 978 859 +3 859 978 979 +3 859 979 860 +3 860 979 861 +3 861 979 980 +3 861 980 981 +3 861 981 982 +3 861 982 862 +3 862 982 863 +3 863 982 983 +3 863 983 984 +3 863 984 864 +3 864 984 985 +3 864 985 865 +3 865 985 986 +3 865 986 866 +3 866 986 987 +3 866 987 867 +3 867 987 988 +3 867 988 989 +3 867 989 868 +3 868 989 869 +3 869 989 990 +3 869 990 870 +3 870 990 991 +3 870 991 992 +3 870 992 871 +3 871 992 872 +3 872 992 993 +3 872 993 994 +3 872 994 995 +3 872 995 873 +3 873 995 874 +3 874 995 996 +3 874 996 997 +3 874 997 875 +3 875 997 998 +3 875 998 999 +3 875 999 876 +3 876 999 1000 +3 876 1000 1001 +3 876 1001 877 +3 877 1001 1002 +3 877 1002 878 +3 878 1002 1003 +3 878 1003 879 +3 879 1003 1004 +3 879 1004 880 +3 880 1004 1005 +3 880 1005 881 +3 881 1005 1006 +3 881 1006 882 +3 882 1006 1007 +3 882 1007 883 +3 883 1007 885 +3 885 1007 1008 +3 885 1008 886 +3 886 1008 1009 +3 886 1009 887 +3 887 1009 1010 +3 887 1010 888 +3 888 1010 1011 +3 888 1011 889 +3 889 1011 1012 +3 889 1012 890 +3 890 1012 1013 +3 890 1013 891 +3 891 1013 1014 +3 891 1014 892 +3 892 1014 893 +3 893 1014 1015 +3 893 1015 1016 +3 893 1016 894 +3 894 1016 1017 +3 894 1017 895 +3 895 1017 1018 +3 895 1018 896 +3 896 1018 1019 +3 896 1019 897 +3 897 1019 1020 +3 897 1020 898 +3 898 1020 1021 +3 898 1021 899 +3 899 1021 1022 +3 899 1022 1023 +3 899 1023 900 +3 900 1023 1024 +3 900 1024 901 +3 901 1024 1025 +3 901 1025 902 +3 902 1025 1026 +3 902 1026 903 +3 903 1026 1027 +3 903 1027 1028 +3 903 1028 1029 +3 903 1029 904 +3 904 1029 1030 +3 904 1030 905 +3 905 1030 906 +3 906 1030 1031 +3 906 1031 1032 +3 906 1032 907 +3 907 1032 1033 +3 907 1033 908 +3 908 1033 1034 +3 908 1034 909 +3 909 1034 1035 +3 909 1035 1036 +3 909 1036 910 +3 910 1036 911 +3 911 1036 1037 +3 911 1037 912 +3 912 1037 1038 +3 912 1038 913 +3 913 1038 1039 +3 913 1039 914 +3 914 1039 1040 +3 914 1040 915 +3 915 1040 1041 +3 915 1041 916 +3 916 1041 1042 +3 916 1042 917 +3 917 1042 1043 +3 917 1043 1044 +3 917 1044 918 +3 918 1044 1045 +3 918 1045 919 +3 919 1045 1046 +3 919 1046 920 +3 920 1046 1047 +3 920 1047 921 +3 921 1047 1048 +3 921 1048 922 +3 922 1048 1049 +3 922 1049 923 +3 923 1049 1050 +3 923 1050 924 +3 924 1050 1051 +3 924 1051 925 +3 925 1051 1052 +3 925 1052 926 +3 926 1052 1053 +3 926 1053 927 +3 927 1053 1054 +3 927 1054 928 +3 928 1054 1055 +3 928 1055 929 +3 929 1055 1056 +3 929 1056 930 +3 930 1056 1057 +3 930 1057 931 +3 931 1057 1058 +3 931 1058 932 +3 932 1058 1059 +3 932 1059 933 +3 933 1059 1060 +3 933 1060 934 +3 934 1060 1061 +3 934 1061 1062 +3 934 1062 935 +3 935 1062 1063 +3 935 1063 936 +3 936 1063 937 +3 937 1063 1064 +3 937 1064 938 +3 938 1064 1065 +3 938 1065 1066 +3 938 1066 939 +3 939 1066 940 +3 940 1066 1067 +3 940 1067 1068 +3 940 1068 941 +3 941 1068 1069 +3 941 1069 942 +3 942 1069 1070 +3 942 1070 943 +3 943 1070 1071 +3 943 1071 944 +3 944 1071 1072 +3 944 1072 945 +3 945 1072 1073 +3 945 1073 946 +3 946 1073 1074 +3 946 1074 947 +3 947 1074 1075 +3 947 1075 1076 +3 947 1076 948 +3 948 1076 1077 +3 948 1077 949 +3 949 1077 1078 +3 949 1078 950 +3 950 1078 951 +3 951 1078 1079 +3 951 1079 952 +3 952 1079 1080 +3 952 1080 1081 +3 952 1081 953 +3 953 1081 954 +3 954 1081 1082 +3 954 1082 1083 +3 954 1083 955 +3 955 1083 956 +3 956 1083 1084 +3 956 1084 1085 +3 956 1085 957 +3 957 1085 1086 +3 957 1086 958 +3 958 1086 1087 +3 958 1087 959 +3 959 1087 1088 +3 959 1088 960 +3 960 1088 1089 +3 960 1089 961 +3 961 1089 1090 +3 961 1090 962 +3 962 1090 1091 +3 962 1091 963 +3 963 1091 1092 +3 963 1092 964 +3 964 1092 1093 +3 964 1093 965 +3 965 1093 1094 +3 965 1094 966 +3 966 1094 1095 +3 966 1095 967 +3 967 1095 1096 +3 967 1096 1097 +3 967 1097 968 +3 968 1097 969 +3 969 1097 1098 +3 969 1098 1099 +3 969 1099 970 +3 970 1099 971 +3 971 1099 1100 +3 971 1100 973 +3 973 1100 1101 +3 973 1101 1102 +3 973 1102 974 +3 974 1102 1103 +3 974 1103 975 +3 975 1103 1104 +3 975 1104 1105 +3 975 1105 976 +3 976 1105 977 +3 977 1105 1106 +3 977 1106 1107 +3 977 1107 978 +3 978 1107 1108 +3 978 1108 979 +3 979 1108 980 +3 980 1108 1109 +3 980 1109 1110 +3 980 1110 1111 +3 980 1111 981 +3 981 1111 1112 +3 981 1112 982 +3 982 1112 1113 +3 982 1113 983 +3 983 1113 1114 +3 983 1114 1115 +3 983 1115 984 +3 984 1115 986 +3 986 1115 1114 +3 986 1114 1116 +3 986 1116 987 +3 987 1116 1117 +3 987 1117 1118 +3 987 1118 988 +3 988 1118 1119 +3 988 1119 1120 +3 988 1120 989 +3 989 1120 1121 +3 989 1121 990 +3 990 1121 991 +3 991 1121 1122 +3 991 1122 992 +3 992 1122 1123 +3 992 1123 993 +3 993 1123 1124 +3 993 1124 1125 +3 993 1125 994 +3 994 1125 1126 +3 994 1126 995 +3 995 1126 996 +3 996 1126 1127 +3 996 1127 1128 +3 996 1128 998 +3 998 1128 1129 +3 998 1129 1130 +3 998 1130 999 +3 999 1130 1131 +3 999 1131 1000 +3 1000 1131 1132 +3 1000 1132 1133 +3 1000 1133 1001 +3 1001 1133 1134 +3 1001 1134 1002 +3 1002 1134 1135 +3 1002 1135 1003 +3 1003 1135 1136 +3 1003 1136 1004 +3 1004 1136 1137 +3 1004 1137 1005 +3 1005 1137 1138 +3 1005 1138 1006 +3 1006 1138 1139 +3 1006 1139 1007 +3 1007 1139 1008 +3 1008 1139 1140 +3 1008 1140 1009 +3 1009 1140 1141 +3 1009 1141 1010 +3 1010 1141 1142 +3 1010 1142 1011 +3 1011 1142 1143 +3 1011 1143 1012 +3 1012 1143 1144 +3 1012 1144 1013 +3 1013 1144 1145 +3 1013 1145 1014 +3 1014 1145 1015 +3 1015 1145 1146 +3 1015 1146 1147 +3 1015 1147 1016 +3 1016 1147 1148 +3 1016 1148 1017 +3 1017 1148 1149 +3 1017 1149 1018 +3 1018 1149 1150 +3 1018 1150 1019 +3 1019 1150 1151 +3 1019 1151 1020 +3 1020 1151 1152 +3 1020 1152 1021 +3 1021 1152 1153 +3 1021 1153 1022 +3 1022 1153 1154 +3 1022 1154 1155 +3 1022 1155 1023 +3 1023 1155 1156 +3 1023 1156 1024 +3 1024 1156 1025 +3 1025 1156 1157 +3 1025 1157 1158 +3 1025 1158 1026 +3 1026 1158 1027 +3 1027 1158 1159 +3 1027 1159 1160 +3 1027 1160 1161 +3 1027 1161 1028 +3 1028 1161 1162 +3 1028 1162 1163 +3 1028 1163 1029 +3 1029 1163 1164 +3 1029 1164 1030 +3 1030 1164 1031 +3 1031 1164 1165 +3 1031 1165 1032 +3 1032 1165 1166 +3 1032 1166 1167 +3 1032 1167 1033 +3 1033 1167 1168 +3 1033 1168 1034 +3 1034 1168 1169 +3 1034 1169 1035 +3 1035 1169 1170 +3 1035 1170 1171 +3 1035 1171 1036 +3 1036 1171 1037 +3 1037 1171 1172 +3 1037 1172 1038 +3 1038 1172 1173 +3 1038 1173 1039 +3 1039 1173 1174 +3 1039 1174 1040 +3 1040 1174 1175 +3 1040 1175 1041 +3 1041 1175 1176 +3 1041 1176 1042 +3 1042 1176 1177 +3 1042 1177 1043 +3 1043 1177 1178 +3 1043 1178 1179 +3 1043 1179 1044 +3 1044 1179 1180 +3 1044 1180 1045 +3 1045 1180 1181 +3 1045 1181 1046 +3 1046 1181 1182 +3 1046 1182 1047 +3 1047 1182 1183 +3 1047 1183 1048 +3 1048 1183 1184 +3 1048 1184 1049 +3 1049 1184 1185 +3 1049 1185 1050 +3 1050 1185 1186 +3 1050 1186 1051 +3 1051 1186 1187 +3 1051 1187 1052 +3 1052 1187 1188 +3 1052 1188 1053 +3 1053 1188 1189 +3 1053 1189 1054 +3 1054 1189 1190 +3 1054 1190 1055 +3 1055 1190 1191 +3 1055 1191 1056 +3 1056 1191 1192 +3 1056 1192 1057 +3 1057 1192 1193 +3 1057 1193 1058 +3 1058 1193 1194 +3 1058 1194 1059 +3 1059 1194 1195 +3 1059 1195 1060 +3 1060 1195 1196 +3 1060 1196 1061 +3 1061 1196 1197 +3 1061 1197 1198 +3 1061 1198 1062 +3 1062 1198 1199 +3 1062 1199 1063 +3 1063 1199 1064 +3 1064 1199 1200 +3 1064 1200 1065 +3 1065 1200 1201 +3 1065 1201 1202 +3 1065 1202 1066 +3 1066 1202 1067 +3 1067 1202 1203 +3 1067 1203 1204 +3 1067 1204 1068 +3 1068 1204 1205 +3 1068 1205 1069 +3 1069 1205 1206 +3 1069 1206 1070 +3 1070 1206 1207 +3 1070 1207 1071 +3 1071 1207 1208 +3 1071 1208 1072 +3 1072 1208 1209 +3 1072 1209 1073 +3 1073 1209 1210 +3 1073 1210 1074 +3 1074 1210 1211 +3 1074 1211 1075 +3 1075 1211 1212 +3 1075 1212 1213 +3 1075 1213 1076 +3 1076 1213 1077 +3 1077 1213 1214 +3 1077 1214 1078 +3 1078 1214 1215 +3 1078 1215 1216 +3 1078 1216 1217 +3 1078 1217 1079 +3 1079 1217 1080 +3 1080 1217 1218 +3 1080 1218 1081 +3 1081 1218 1082 +3 1082 1218 1219 +3 1082 1219 1220 +3 1082 1220 1083 +3 1083 1220 1084 +3 1084 1220 1221 +3 1084 1221 1222 +3 1084 1222 1085 +3 1085 1222 1223 +3 1085 1223 1086 +3 1086 1223 1224 +3 1086 1224 1087 +3 1087 1224 1225 +3 1087 1225 1088 +3 1088 1225 1226 +3 1088 1226 1089 +3 1089 1226 1227 +3 1089 1227 1090 +3 1090 1227 1228 +3 1090 1228 1091 +3 1091 1228 1229 +3 1091 1229 1092 +3 1092 1229 1230 +3 1092 1230 1093 +3 1093 1230 1231 +3 1093 1231 1094 +3 1094 1231 1232 +3 1094 1232 1095 +3 1095 1232 1233 +3 1095 1233 1096 +3 1096 1233 1234 +3 1096 1234 1235 +3 1096 1235 1097 +3 1097 1235 1098 +3 1098 1235 1236 +3 1098 1236 1237 +3 1098 1237 1099 +3 1099 1237 1238 +3 1099 1238 1100 +3 1100 1238 1101 +3 1101 1238 1239 +3 1101 1239 1240 +3 1101 1240 1241 +3 1101 1241 1242 +3 1101 1242 1102 +3 1102 1242 1243 +3 1102 1243 1103 +3 1103 1243 1244 +3 1103 1244 1104 +3 1104 1244 1106 +3 1106 1244 1245 +3 1106 1245 1107 +3 1107 1245 1246 +3 1107 1246 1108 +3 1108 1246 1109 +3 1109 1246 1247 +3 1109 1247 1248 +3 1109 1248 1249 +3 1109 1249 1110 +3 1110 1249 1250 +3 1110 1250 1251 +3 1110 1251 1111 +3 1111 1251 1112 +3 1112 1251 1252 +3 1112 1252 1113 +3 1113 1252 1253 +3 1113 1253 1114 +3 1114 1253 1116 +3 1116 1253 1117 +3 1117 1253 1254 +3 1117 1254 1255 +3 1117 1255 1118 +3 1118 1255 1256 +3 1118 1256 1119 +3 1119 1256 1257 +3 1119 1257 1258 +3 1119 1258 1259 +3 1119 1259 1120 +3 1120 1259 1121 +3 1121 1259 1260 +3 1121 1260 1122 +3 1122 1260 1261 +3 1122 1261 1123 +3 1123 1261 1262 +3 1123 1262 1124 +3 1124 1262 1263 +3 1124 1263 1264 +3 1124 1264 1265 +3 1124 1265 1125 +3 1125 1265 1127 +3 1127 1265 1266 +3 1127 1266 1267 +3 1127 1267 1128 +3 1128 1267 1129 +3 1129 1267 1268 +3 1129 1268 1269 +3 1129 1269 1270 +3 1129 1270 1130 +3 1130 1270 1271 +3 1130 1271 1131 +3 1131 1271 1272 +3 1131 1272 1132 +3 1132 1272 1273 +3 1132 1273 1274 +3 1132 1274 1275 +3 1132 1275 1133 +3 1133 1275 1276 +3 1133 1276 1134 +3 1134 1276 1277 +3 1134 1277 1135 +3 1135 1277 1278 +3 1135 1278 1136 +3 1136 1278 1279 +3 1136 1279 1137 +3 1137 1279 1280 +3 1137 1280 1138 +3 1138 1280 1281 +3 1138 1281 1139 +3 1139 1281 1140 +3 1140 1281 1282 +3 1140 1282 1141 +3 1141 1282 1283 +3 1141 1283 1284 +3 1141 1284 1142 +3 1142 1284 1285 +3 1142 1285 1143 +3 1143 1285 1286 +3 1143 1286 1144 +3 1144 1286 1287 +3 1144 1287 1145 +3 1145 1287 1146 +3 1146 1287 1288 +3 1146 1288 1289 +3 1146 1289 1147 +3 1147 1289 1290 +3 1147 1290 1148 +3 1148 1290 1291 +3 1148 1291 1149 +3 1149 1291 1292 +3 1149 1292 1150 +3 1150 1292 1293 +3 1150 1293 1151 +3 1151 1293 1294 +3 1151 1294 1152 +3 1152 1294 1295 +3 1152 1295 1153 +3 1153 1295 1296 +3 1153 1296 1154 +3 1154 1296 1297 +3 1154 1297 1298 +3 1154 1298 1155 +3 1155 1298 1299 +3 1155 1299 1156 +3 1156 1299 1300 +3 1156 1300 1157 +3 1157 1300 1158 +3 1158 1300 1159 +3 1159 1300 1301 +3 1159 1301 1160 +3 1160 1301 1302 +3 1160 1302 1303 +3 1160 1303 1304 +3 1160 1304 1305 +3 1160 1305 1161 +3 1161 1305 1162 +3 1162 1305 1306 +3 1162 1306 1307 +3 1162 1307 1163 +3 1163 1307 1308 +3 1163 1308 1164 +3 1164 1308 1165 +3 1165 1308 1309 +3 1165 1309 1166 +3 1166 1309 1310 +3 1166 1310 1167 +3 1167 1310 1311 +3 1167 1311 1168 +3 1168 1311 1312 +3 1168 1312 1169 +3 1169 1312 1313 +3 1169 1313 1170 +3 1170 1313 1314 +3 1170 1314 1315 +3 1170 1315 1316 +3 1170 1316 1171 +3 1171 1316 1172 +3 1172 1316 1317 +3 1172 1317 1173 +3 1173 1317 1318 +3 1173 1318 1174 +3 1174 1318 1319 +3 1174 1319 1175 +3 1175 1319 1320 +3 1175 1320 1176 +3 1176 1320 1321 +3 1176 1321 1177 +3 1177 1321 1322 +3 1177 1322 1178 +3 1178 1322 1323 +3 1178 1323 1324 +3 1178 1324 1179 +3 1179 1324 1325 +3 1179 1325 1180 +3 1180 1325 1326 +3 1180 1326 1181 +3 1181 1326 1327 +3 1181 1327 1182 +3 1182 1327 1328 +3 1182 1328 1183 +3 1183 1328 1329 +3 1183 1329 1184 +3 1184 1329 1330 +3 1184 1330 1185 +3 1185 1330 1331 +3 1185 1331 1186 +3 1186 1331 1332 +3 1186 1332 1187 +3 1187 1332 1333 +3 1187 1333 1188 +3 1188 1333 1334 +3 1188 1334 1189 +3 1189 1334 1335 +3 1189 1335 1190 +3 1190 1335 1336 +3 1190 1336 1191 +3 1191 1336 1337 +3 1191 1337 1192 +3 1192 1337 1338 +3 1192 1338 1193 +3 1193 1338 1339 +3 1193 1339 1194 +3 1194 1339 1340 +3 1194 1340 1195 +3 1195 1340 1341 +3 1195 1341 1196 +3 1196 1341 1342 +3 1196 1342 1197 +3 1197 1342 1343 +3 1197 1343 1344 +3 1197 1344 1198 +3 1198 1344 1345 +3 1198 1345 1199 +3 1199 1345 1200 +3 1200 1345 1346 +3 1200 1346 1201 +3 1201 1346 1347 +3 1201 1347 1348 +3 1201 1348 1202 +3 1202 1348 1203 +3 1203 1348 1349 +3 1203 1349 1350 +3 1203 1350 1204 +3 1204 1350 1351 +3 1204 1351 1205 +3 1205 1351 1352 +3 1205 1352 1206 +3 1206 1352 1353 +3 1206 1353 1207 +3 1207 1353 1354 +3 1207 1354 1208 +3 1208 1354 1355 +3 1208 1355 1209 +3 1209 1355 1356 +3 1209 1356 1210 +3 1210 1356 1357 +3 1210 1357 1358 +3 1210 1358 1211 +3 1211 1358 1357 +3 1211 1357 1359 +3 1211 1359 1212 +3 1212 1359 1360 +3 1212 1360 1361 +3 1212 1361 1362 +3 1212 1362 1213 +3 1213 1362 1214 +3 1214 1362 1363 +3 1214 1363 1215 +3 1215 1363 1364 +3 1215 1364 1365 +3 1215 1365 1216 +3 1216 1365 1366 +3 1216 1366 1367 +3 1216 1367 1217 +3 1217 1367 1368 +3 1217 1368 1218 +3 1218 1368 1219 +3 1219 1368 1369 +3 1219 1369 1370 +3 1219 1370 1220 +3 1220 1370 1221 +3 1221 1370 1371 +3 1221 1371 1372 +3 1221 1372 1222 +3 1222 1372 1373 +3 1222 1373 1223 +3 1223 1373 1374 +3 1223 1374 1224 +3 1224 1374 1375 +3 1224 1375 1225 +3 1225 1375 1376 +3 1225 1376 1226 +3 1226 1376 1377 +3 1226 1377 1227 +3 1227 1377 1378 +3 1227 1378 1228 +3 1228 1378 1379 +3 1228 1379 1229 +3 1229 1379 1380 +3 1229 1380 1230 +3 1230 1380 1381 +3 1230 1381 1231 +3 1231 1381 1382 +3 1231 1382 1232 +3 1232 1382 1383 +3 1232 1383 1233 +3 1233 1383 1384 +3 1233 1384 1234 +3 1234 1384 1385 +3 1234 1385 1235 +3 1235 1385 1386 +3 1235 1386 1236 +3 1236 1386 1387 +3 1236 1387 1388 +3 1236 1388 1237 +3 1237 1388 1389 +3 1237 1389 1238 +3 1238 1389 1390 +3 1238 1390 1239 +3 1239 1390 1391 +3 1239 1391 1240 +3 1240 1391 1392 +3 1240 1392 1393 +3 1240 1393 1241 +3 1241 1393 1394 +3 1241 1394 1242 +3 1242 1394 1395 +3 1242 1395 1243 +3 1243 1395 1396 +3 1243 1396 1244 +3 1244 1396 1245 +3 1245 1396 1397 +3 1245 1397 1246 +3 1246 1397 1247 +3 1247 1397 1398 +3 1247 1398 1399 +3 1247 1399 1248 +3 1248 1399 1400 +3 1248 1400 1401 +3 1248 1401 1249 +3 1249 1401 1402 +3 1249 1402 1250 +3 1250 1402 1403 +3 1250 1403 1404 +3 1250 1404 1251 +3 1251 1404 1252 +3 1252 1404 1254 +3 1254 1404 1405 +3 1254 1405 1406 +3 1254 1406 1255 +3 1255 1406 1407 +3 1255 1407 1256 +3 1256 1407 1408 +3 1256 1408 1257 +3 1257 1408 1409 +3 1257 1409 1258 +3 1258 1409 1410 +3 1258 1410 1411 +3 1258 1411 1260 +3 1260 1411 1412 +3 1260 1412 1261 +3 1261 1412 1262 +3 1262 1412 1413 +3 1262 1413 1263 +3 1263 1413 1414 +3 1263 1414 1264 +3 1264 1414 1415 +3 1264 1415 1416 +3 1264 1416 1266 +3 1266 1416 1417 +3 1266 1417 1267 +3 1267 1417 1418 +3 1267 1418 1268 +3 1268 1418 1419 +3 1268 1419 1269 +3 1269 1419 1420 +3 1269 1420 1421 +3 1269 1421 1422 +3 1269 1422 1270 +3 1270 1422 1271 +3 1271 1422 1423 +3 1271 1423 1272 +3 1272 1423 1273 +3 1273 1423 1424 +3 1273 1424 1425 +3 1273 1425 1274 +3 1274 1425 1426 +3 1274 1426 1427 +3 1274 1427 1275 +3 1275 1427 1428 +3 1275 1428 1276 +3 1276 1428 1429 +3 1276 1429 1277 +3 1277 1429 1430 +3 1277 1430 1278 +3 1278 1430 1431 +3 1278 1431 1279 +3 1279 1431 1432 +3 1279 1432 1280 +3 1280 1432 1433 +3 1280 1433 1281 +3 1281 1433 1282 +3 1282 1433 1434 +3 1282 1434 1283 +3 1283 1434 1435 +3 1283 1435 1436 +3 1283 1436 1284 +3 1284 1436 1437 +3 1284 1437 1438 +3 1284 1438 1285 +3 1285 1438 1439 +3 1285 1439 1440 +3 1285 1440 1441 +3 1285 1441 1286 +3 1286 1441 1288 +3 1288 1441 1442 +3 1288 1442 1289 +3 1289 1442 1443 +3 1289 1443 1290 +3 1290 1443 1444 +3 1290 1444 1291 +3 1291 1444 1445 +3 1291 1445 1292 +3 1292 1445 1446 +3 1292 1446 1294 +3 1294 1446 1295 +3 1295 1446 1447 +3 1295 1447 1296 +3 1296 1447 1448 +3 1296 1448 1297 +3 1297 1448 1449 +3 1297 1449 1450 +3 1297 1450 1298 +3 1298 1450 1451 +3 1298 1451 1299 +3 1299 1451 1452 +3 1299 1452 1300 +3 1300 1452 1301 +3 1301 1452 1453 +3 1301 1453 1454 +3 1301 1454 1302 +3 1302 1454 1455 +3 1302 1455 1303 +3 1303 1455 1456 +3 1303 1456 1457 +3 1303 1457 1304 +3 1304 1457 1458 +3 1304 1458 1459 +3 1304 1459 1305 +3 1305 1459 1306 +3 1306 1459 1460 +3 1306 1460 1461 +3 1306 1461 1462 +3 1306 1462 1307 +3 1307 1462 1463 +3 1307 1463 1308 +3 1308 1463 1309 +3 1309 1463 1464 +3 1309 1464 1310 +3 1310 1464 1465 +3 1310 1465 1466 +3 1310 1466 1311 +3 1311 1466 1312 +3 1312 1466 1467 +3 1312 1467 1313 +3 1313 1467 1468 +3 1313 1468 1314 +3 1314 1468 1469 +3 1314 1469 1470 +3 1314 1470 1315 +3 1315 1470 1471 +3 1315 1471 1316 +3 1316 1471 1317 +3 1317 1471 1472 +3 1317 1472 1318 +3 1318 1472 1473 +3 1318 1473 1319 +3 1319 1473 1474 +3 1319 1474 1320 +3 1320 1474 1475 +3 1320 1475 1321 +3 1321 1475 1476 +3 1321 1476 1322 +3 1322 1476 1477 +3 1322 1477 1323 +3 1323 1477 1478 +3 1323 1478 1479 +3 1323 1479 1324 +3 1324 1479 1480 +3 1324 1480 1325 +3 1325 1480 1481 +3 1325 1481 1326 +3 1326 1481 1482 +3 1326 1482 1327 +3 1327 1482 1483 +3 1327 1483 1328 +3 1328 1483 1484 +3 1328 1484 1329 +3 1329 1484 1485 +3 1329 1485 1330 +3 1330 1485 1486 +3 1330 1486 1331 +3 1331 1486 1487 +3 1331 1487 1332 +3 1332 1487 1488 +3 1332 1488 1333 +3 1333 1488 1489 +3 1333 1489 1334 +3 1334 1489 1490 +3 1334 1490 1335 +3 1335 1490 1491 +3 1335 1491 1336 +3 1336 1491 1492 +3 1336 1492 1337 +3 1337 1492 1493 +3 1337 1493 1338 +3 1338 1493 1494 +3 1338 1494 1339 +3 1339 1494 1495 +3 1339 1495 1340 +3 1340 1495 1341 +3 1341 1495 1496 +3 1341 1496 1342 +3 1342 1496 1497 +3 1342 1497 1343 +3 1343 1497 1498 +3 1343 1498 1499 +3 1343 1499 1344 +3 1344 1499 1500 +3 1344 1500 1345 +3 1345 1500 1346 +3 1346 1500 1501 +3 1346 1501 1347 +3 1347 1501 1502 +3 1347 1502 1503 +3 1347 1503 1348 +3 1348 1503 1349 +3 1349 1503 1504 +3 1349 1504 1505 +3 1349 1505 1350 +3 1350 1505 1506 +3 1350 1506 1351 +3 1351 1506 1507 +3 1351 1507 1352 +3 1352 1507 1508 +3 1352 1508 1353 +3 1353 1508 1509 +3 1353 1509 1354 +3 1354 1509 1510 +3 1354 1510 1355 +3 1355 1510 1511 +3 1355 1511 1356 +3 1356 1511 1357 +3 1357 1511 1512 +3 1357 1512 1359 +3 1359 1512 1360 +3 1360 1512 1513 +3 1360 1513 1514 +3 1360 1514 1361 +3 1361 1514 1515 +3 1361 1515 1362 +3 1362 1515 1516 +3 1362 1516 1363 +3 1363 1516 1517 +3 1363 1517 1364 +3 1364 1517 1518 +3 1364 1518 1519 +3 1364 1519 1520 +3 1364 1520 1365 +3 1365 1520 1366 +3 1366 1520 1521 +3 1366 1521 1522 +3 1366 1522 1523 +3 1366 1523 1367 +3 1367 1523 1524 +3 1367 1524 1369 +3 1369 1524 1525 +3 1369 1525 1370 +3 1370 1525 1371 +3 1371 1525 1526 +3 1371 1526 1527 +3 1371 1527 1372 +3 1372 1527 1528 +3 1372 1528 1373 +3 1373 1528 1529 +3 1373 1529 1374 +3 1374 1529 1530 +3 1374 1530 1375 +3 1375 1530 1531 +3 1375 1531 1376 +3 1376 1531 1532 +3 1376 1532 1377 +3 1377 1532 1533 +3 1377 1533 1378 +3 1378 1533 1534 +3 1378 1534 1379 +3 1379 1534 1535 +3 1379 1535 1380 +3 1380 1535 1536 +3 1380 1536 1381 +3 1381 1536 1537 +3 1381 1537 1382 +3 1382 1537 1538 +3 1382 1538 1383 +3 1383 1538 1539 +3 1383 1539 1384 +3 1384 1539 1540 +3 1384 1540 1385 +3 1385 1540 1541 +3 1385 1541 1386 +3 1386 1541 1542 +3 1386 1542 1387 +3 1387 1542 1543 +3 1387 1543 1544 +3 1387 1544 1388 +3 1388 1544 1545 +3 1388 1545 1389 +3 1389 1545 1390 +3 1390 1545 1546 +3 1390 1546 1391 +3 1391 1546 1547 +3 1391 1547 1548 +3 1391 1548 1392 +3 1392 1548 1549 +3 1392 1549 1550 +3 1392 1550 1393 +3 1393 1550 1551 +3 1393 1551 1394 +3 1394 1551 1552 +3 1394 1552 1553 +3 1394 1553 1395 +3 1395 1553 1396 +3 1396 1553 1554 +3 1396 1554 1397 +3 1397 1554 1555 +3 1397 1555 1398 +3 1398 1555 1399 +3 1399 1555 1556 +3 1399 1556 1400 +3 1400 1556 1557 +3 1400 1557 1558 +3 1400 1558 1401 +3 1401 1558 1559 +3 1401 1559 1402 +3 1402 1559 1560 +3 1402 1560 1403 +3 1403 1560 1561 +3 1403 1561 1405 +3 1405 1561 1562 +3 1405 1562 1406 +3 1406 1562 1563 +3 1406 1563 1407 +3 1407 1563 1564 +3 1407 1564 1408 +3 1408 1564 1565 +3 1408 1565 1409 +3 1409 1565 1566 +3 1409 1566 1410 +3 1410 1566 1567 +3 1410 1567 1568 +3 1410 1568 1411 +3 1411 1568 1412 +3 1412 1568 1569 +3 1412 1569 1413 +3 1413 1569 1570 +3 1413 1570 1414 +3 1414 1570 1571 +3 1414 1571 1415 +3 1415 1571 1572 +3 1415 1572 1573 +3 1415 1573 1416 +3 1416 1573 1574 +3 1416 1574 1417 +3 1417 1574 1575 +3 1417 1575 1418 +3 1418 1575 1576 +3 1418 1576 1419 +3 1419 1576 1577 +3 1419 1577 1420 +3 1420 1577 1578 +3 1420 1578 1579 +3 1420 1579 1421 +3 1421 1579 1580 +3 1421 1580 1422 +3 1422 1580 1423 +3 1423 1580 1424 +3 1424 1580 1581 +3 1424 1581 1582 +3 1424 1582 1583 +3 1424 1583 1425 +3 1425 1583 1584 +3 1425 1584 1426 +3 1426 1584 1585 +3 1426 1585 1586 +3 1426 1586 1427 +3 1427 1586 1587 +3 1427 1587 1428 +3 1428 1587 1588 +3 1428 1588 1429 +3 1429 1588 1589 +3 1429 1589 1430 +3 1430 1589 1431 +3 1431 1589 1590 +3 1431 1590 1591 +3 1431 1591 1432 +3 1432 1591 1592 +3 1432 1592 1433 +3 1433 1592 1434 +3 1434 1592 1593 +3 1434 1593 1435 +3 1435 1593 1594 +3 1435 1594 1436 +3 1436 1594 1595 +3 1436 1595 1596 +3 1436 1596 1437 +3 1437 1596 1597 +3 1437 1597 1598 +3 1437 1598 1438 +3 1438 1598 1439 +3 1439 1598 1599 +3 1439 1599 1600 +3 1439 1600 1440 +3 1440 1600 1601 +3 1440 1601 1441 +3 1441 1601 1602 +3 1441 1602 1442 +3 1442 1602 1603 +3 1442 1603 1604 +3 1442 1604 1443 +3 1443 1604 1605 +3 1443 1605 1606 +3 1443 1606 1444 +3 1444 1606 1445 +3 1445 1606 1607 +3 1445 1607 1446 +3 1446 1607 1447 +3 1447 1607 1608 +3 1447 1608 1448 +3 1448 1608 1609 +3 1448 1609 1449 +3 1449 1609 1610 +3 1449 1610 1450 +3 1450 1610 1611 +3 1450 1611 1612 +3 1450 1612 1451 +3 1451 1612 1613 +3 1451 1613 1452 +3 1452 1613 1614 +3 1452 1614 1453 +3 1453 1614 1615 +3 1453 1615 1616 +3 1453 1616 1454 +3 1454 1616 1617 +3 1454 1617 1455 +3 1455 1617 1618 +3 1455 1618 1456 +3 1456 1618 1619 +3 1456 1619 1620 +3 1456 1620 1621 +3 1456 1621 1457 +3 1457 1621 1458 +3 1458 1621 1622 +3 1458 1622 1459 +3 1459 1622 1460 +3 1460 1622 1623 +3 1460 1623 1624 +3 1460 1624 1461 +3 1461 1624 1625 +3 1461 1625 1626 +3 1461 1626 1627 +3 1461 1627 1462 +3 1462 1627 1463 +3 1463 1627 1464 +3 1464 1627 1628 +3 1464 1628 1629 +3 1464 1629 1465 +3 1465 1629 1630 +3 1465 1630 1466 +3 1466 1630 1467 +3 1467 1630 1631 +3 1467 1631 1468 +3 1468 1631 1632 +3 1468 1632 1469 +3 1469 1632 1633 +3 1469 1633 1634 +3 1469 1634 1470 +3 1470 1634 1635 +3 1470 1635 1471 +3 1471 1635 1472 +3 1472 1635 1636 +3 1472 1636 1473 +3 1473 1636 1637 +3 1473 1637 1474 +3 1474 1637 1638 +3 1474 1638 1475 +3 1475 1638 1639 +3 1475 1639 1476 +3 1476 1639 1640 +3 1476 1640 1477 +3 1477 1640 1641 +3 1477 1641 1478 +3 1478 1641 1642 +3 1478 1642 1643 +3 1478 1643 1479 +3 1479 1643 1644 +3 1479 1644 1480 +3 1480 1644 1645 +3 1480 1645 1481 +3 1481 1645 1646 +3 1481 1646 1482 +3 1482 1646 1647 +3 1482 1647 1483 +3 1483 1647 1648 +3 1483 1648 1484 +3 1484 1648 1649 +3 1484 1649 1485 +3 1485 1649 1650 +3 1485 1650 1486 +3 1486 1650 1651 +3 1486 1651 1487 +3 1487 1651 1652 +3 1487 1652 1488 +3 1488 1652 1653 +3 1488 1653 1489 +3 1489 1653 1654 +3 1489 1654 1490 +3 1490 1654 1655 +3 1490 1655 1491 +3 1491 1655 1656 +3 1491 1656 1492 +3 1492 1656 1657 +3 1492 1657 1493 +3 1493 1657 1658 +3 1493 1658 1494 +3 1494 1658 1659 +3 1494 1659 1495 +3 1495 1659 1660 +3 1495 1660 1496 +3 1496 1660 1661 +3 1496 1661 1497 +3 1497 1661 1662 +3 1497 1662 1498 +3 1498 1662 1663 +3 1498 1663 1664 +3 1498 1664 1499 +3 1499 1664 1665 +3 1499 1665 1500 +3 1500 1665 1501 +3 1501 1665 1666 +3 1501 1666 1502 +3 1502 1666 1667 +3 1502 1667 1668 +3 1502 1668 1503 +3 1503 1668 1504 +3 1504 1668 1669 +3 1504 1669 1670 +3 1504 1670 1505 +3 1505 1670 1671 +3 1505 1671 1506 +3 1506 1671 1672 +3 1506 1672 1507 +3 1507 1672 1673 +3 1507 1673 1508 +3 1508 1673 1674 +3 1508 1674 1509 +3 1509 1674 1675 +3 1509 1675 1510 +3 1510 1675 1676 +3 1510 1676 1511 +3 1511 1676 1512 +3 1512 1676 1513 +3 1513 1676 1677 +3 1513 1677 1678 +3 1513 1678 1514 +3 1514 1678 1679 +3 1514 1679 1515 +3 1515 1679 1680 +3 1515 1680 1516 +3 1516 1680 1681 +3 1516 1681 1517 +3 1517 1681 1682 +3 1517 1682 1518 +3 1518 1682 1683 +3 1518 1683 1684 +3 1518 1684 1519 +3 1519 1684 1685 +3 1519 1685 1521 +3 1521 1685 1686 +3 1521 1686 1522 +3 1522 1686 1687 +3 1522 1687 1688 +3 1522 1688 1523 +3 1523 1688 1689 +3 1523 1689 1524 +3 1524 1689 1690 +3 1524 1690 1525 +3 1525 1690 1691 +3 1525 1691 1526 +3 1526 1691 1692 +3 1526 1692 1693 +3 1526 1693 1527 +3 1527 1693 1694 +3 1527 1694 1528 +3 1528 1694 1695 +3 1528 1695 1529 +3 1529 1695 1696 +3 1529 1696 1530 +3 1530 1696 1697 +3 1530 1697 1531 +3 1531 1697 1698 +3 1531 1698 1532 +3 1532 1698 1699 +3 1532 1699 1533 +3 1533 1699 1700 +3 1533 1700 1534 +3 1534 1700 1701 +3 1534 1701 1535 +3 1535 1701 1702 +3 1535 1702 1536 +3 1536 1702 1703 +3 1536 1703 1537 +3 1537 1703 1704 +3 1537 1704 1538 +3 1538 1704 1705 +3 1538 1705 1539 +3 1539 1705 1706 +3 1539 1706 1540 +3 1540 1706 1707 +3 1540 1707 1541 +3 1541 1707 1708 +3 1541 1708 1542 +3 1542 1708 1709 +3 1542 1709 1543 +3 1543 1709 1710 +3 1543 1710 1544 +3 1544 1710 1711 +3 1544 1711 1546 +3 1546 1711 1547 +3 1547 1711 1712 +3 1547 1712 1713 +3 1547 1713 1548 +3 1548 1713 1714 +3 1548 1714 1549 +3 1549 1714 1715 +3 1549 1715 1716 +3 1549 1716 1550 +3 1550 1716 1717 +3 1550 1717 1718 +3 1550 1718 1551 +3 1551 1718 1719 +3 1551 1719 1552 +3 1552 1719 1720 +3 1552 1720 1553 +3 1553 1720 1721 +3 1553 1721 1554 +3 1554 1721 1555 +3 1555 1721 1556 +3 1556 1721 1722 +3 1556 1722 1557 +3 1557 1722 1723 +3 1557 1723 1724 +3 1557 1724 1558 +3 1558 1724 1725 +3 1558 1725 1559 +3 1559 1725 1726 +3 1559 1726 1560 +3 1560 1726 1727 +3 1560 1727 1728 +3 1560 1728 1561 +3 1561 1728 1562 +3 1562 1728 1729 +3 1562 1729 1563 +3 1563 1729 1730 +3 1563 1730 1564 +3 1564 1730 1731 +3 1564 1731 1565 +3 1565 1731 1732 +3 1565 1732 1566 +3 1566 1732 1733 +3 1566 1733 1567 +3 1567 1733 1734 +3 1567 1734 1735 +3 1567 1735 1568 +3 1568 1735 1569 +3 1569 1735 1736 +3 1569 1736 1570 +3 1570 1736 1737 +3 1570 1737 1571 +3 1571 1737 1738 +3 1571 1738 1572 +3 1572 1738 1739 +3 1572 1739 1740 +3 1572 1740 1573 +3 1573 1740 1574 +3 1574 1740 1741 +3 1574 1741 1575 +3 1575 1741 1742 +3 1575 1742 1576 +3 1576 1742 1743 +3 1576 1743 1577 +3 1577 1743 1744 +3 1577 1744 1578 +3 1578 1744 1745 +3 1578 1745 1746 +3 1578 1746 1747 +3 1578 1747 1579 +3 1579 1747 1580 +3 1580 1747 1581 +3 1581 1747 1748 +3 1581 1748 1582 +3 1582 1748 1749 +3 1582 1749 1750 +3 1582 1750 1583 +3 1583 1750 1584 +3 1584 1750 1751 +3 1584 1751 1585 +3 1585 1751 1752 +3 1585 1752 1753 +3 1585 1753 1586 +3 1586 1753 1754 +3 1586 1754 1587 +3 1587 1754 1755 +3 1587 1755 1588 +3 1588 1755 1756 +3 1588 1756 1589 +3 1589 1756 1590 +3 1590 1756 1757 +3 1590 1757 1758 +3 1590 1758 1591 +3 1591 1758 1759 +3 1591 1759 1592 +3 1592 1759 1593 +3 1593 1759 1760 +3 1593 1760 1761 +3 1593 1761 1594 +3 1594 1761 1595 +3 1595 1761 1762 +3 1595 1762 1596 +3 1596 1762 1763 +3 1596 1763 1764 +3 1596 1764 1597 +3 1597 1764 1765 +3 1597 1765 1766 +3 1597 1766 1598 +3 1598 1766 1599 +3 1599 1766 1767 +3 1599 1767 1768 +3 1599 1768 1600 +3 1600 1768 1769 +3 1600 1769 1601 +3 1601 1769 1770 +3 1601 1770 1603 +3 1603 1770 1771 +3 1603 1771 1772 +3 1603 1772 1604 +3 1604 1772 1773 +3 1604 1773 1774 +3 1604 1774 1605 +3 1605 1774 1775 +3 1605 1775 1606 +3 1606 1775 1608 +3 1608 1775 1609 +3 1609 1775 1776 +3 1609 1776 1777 +3 1609 1777 1610 +3 1610 1777 1778 +3 1610 1778 1611 +3 1611 1778 1779 +3 1611 1779 1780 +3 1611 1780 1612 +3 1612 1780 1613 +3 1613 1780 1781 +3 1613 1781 1614 +3 1614 1781 1782 +3 1614 1782 1615 +3 1615 1782 1783 +3 1615 1783 1784 +3 1615 1784 1616 +3 1616 1784 1785 +3 1616 1785 1617 +3 1617 1785 1786 +3 1617 1786 1618 +3 1618 1786 1787 +3 1618 1787 1619 +3 1619 1787 1788 +3 1619 1788 1789 +3 1619 1789 1620 +3 1620 1789 1790 +3 1620 1790 1621 +3 1621 1790 1791 +3 1621 1791 1622 +3 1622 1791 1623 +3 1623 1791 1792 +3 1623 1792 1793 +3 1623 1793 1624 +3 1624 1793 1794 +3 1624 1794 1625 +3 1625 1794 1795 +3 1625 1795 1796 +3 1625 1796 1626 +3 1626 1796 1797 +3 1626 1797 1628 +3 1628 1797 1629 +3 1629 1797 1798 +3 1629 1798 1630 +3 1630 1798 1631 +3 1631 1798 1799 +3 1631 1799 1632 +3 1632 1799 1633 +3 1633 1799 1800 +3 1633 1800 1801 +3 1633 1801 1634 +3 1634 1801 1802 +3 1634 1802 1635 +3 1635 1802 1636 +3 1636 1802 1803 +3 1636 1803 1637 +3 1637 1803 1804 +3 1637 1804 1638 +3 1638 1804 1805 +3 1638 1805 1639 +3 1639 1805 1806 +3 1639 1806 1640 +3 1640 1806 1807 +3 1640 1807 1641 +3 1641 1807 1808 +3 1641 1808 1642 +3 1642 1808 1809 +3 1642 1809 1810 +3 1642 1810 1643 +3 1643 1810 1811 +3 1643 1811 1644 +3 1644 1811 1812 +3 1644 1812 1645 +3 1645 1812 1813 +3 1645 1813 1646 +3 1646 1813 1814 +3 1646 1814 1647 +3 1647 1814 1815 +3 1647 1815 1648 +3 1648 1815 1816 +3 1648 1816 1649 +3 1649 1816 1817 +3 1649 1817 1650 +3 1650 1817 1818 +3 1650 1818 1651 +3 1651 1818 1819 +3 1651 1819 1652 +3 1652 1819 1820 +3 1652 1820 1653 +3 1653 1820 1821 +3 1653 1821 1654 +3 1654 1821 1822 +3 1654 1822 1655 +3 1655 1822 1823 +3 1655 1823 1656 +3 1656 1823 1824 +3 1656 1824 1657 +3 1657 1824 1825 +3 1657 1825 1658 +3 1658 1825 1826 +3 1658 1826 1659 +3 1659 1826 1827 +3 1659 1827 1660 +3 1660 1827 1828 +3 1660 1828 1661 +3 1661 1828 1829 +3 1661 1829 1662 +3 1662 1829 1830 +3 1662 1830 1663 +3 1663 1830 1831 +3 1663 1831 1832 +3 1663 1832 1664 +3 1664 1832 1833 +3 1664 1833 1665 +3 1665 1833 1666 +3 1666 1833 1834 +3 1666 1834 1667 +3 1667 1834 1835 +3 1667 1835 1836 +3 1667 1836 1668 +3 1668 1836 1669 +3 1669 1836 1837 +3 1669 1837 1838 +3 1669 1838 1670 +3 1670 1838 1839 +3 1670 1839 1671 +3 1671 1839 1840 +3 1671 1840 1672 +3 1672 1840 1841 +3 1672 1841 1673 +3 1673 1841 1842 +3 1673 1842 1674 +3 1674 1842 1843 +3 1674 1843 1675 +3 1675 1843 1677 +3 1677 1843 1844 +3 1677 1844 1678 +3 1678 1844 1679 +3 1679 1844 1845 +3 1679 1845 1846 +3 1679 1846 1680 +3 1680 1846 1681 +3 1681 1846 1847 +3 1681 1847 1682 +3 1682 1847 1848 +3 1682 1848 1683 +3 1683 1848 1849 +3 1683 1849 1850 +3 1683 1850 1684 +3 1684 1850 1851 +3 1684 1851 1852 +3 1684 1852 1685 +3 1685 1852 1853 +3 1685 1853 1686 +3 1686 1853 1687 +3 1687 1853 1854 +3 1687 1854 1855 +3 1687 1855 1856 +3 1687 1856 1688 +3 1688 1856 1857 +3 1688 1857 1689 +3 1689 1857 1690 +3 1690 1857 1691 +3 1691 1857 1858 +3 1691 1858 1692 +3 1692 1858 1859 +3 1692 1859 1860 +3 1692 1860 1693 +3 1693 1860 1861 +3 1693 1861 1694 +3 1694 1861 1862 +3 1694 1862 1695 +3 1695 1862 1863 +3 1695 1863 1696 +3 1696 1863 1864 +3 1696 1864 1697 +3 1697 1864 1865 +3 1697 1865 1698 +3 1698 1865 1866 +3 1698 1866 1699 +3 1699 1866 1867 +3 1699 1867 1700 +3 1700 1867 1868 +3 1700 1868 1701 +3 1701 1868 1869 +3 1701 1869 1702 +3 1702 1869 1870 +3 1702 1870 1703 +3 1703 1870 1871 +3 1703 1871 1704 +3 1704 1871 1872 +3 1704 1872 1705 +3 1705 1872 1873 +3 1705 1873 1706 +3 1706 1873 1874 +3 1706 1874 1707 +3 1707 1874 1875 +3 1707 1875 1708 +3 1708 1875 1876 +3 1708 1876 1709 +3 1709 1876 1877 +3 1709 1877 1710 +3 1710 1877 1878 +3 1710 1878 1879 +3 1710 1879 1711 +3 1711 1879 1712 +3 1712 1879 1880 +3 1712 1880 1881 +3 1712 1881 1713 +3 1713 1881 1882 +3 1713 1882 1714 +3 1714 1882 1883 +3 1714 1883 1715 +3 1715 1883 1884 +3 1715 1884 1885 +3 1715 1885 1716 +3 1716 1885 1886 +3 1716 1886 1717 +3 1717 1886 1887 +3 1717 1887 1888 +3 1717 1888 1718 +3 1718 1888 1719 +3 1719 1888 1889 +3 1719 1889 1890 +3 1719 1890 1720 +3 1720 1890 1722 +3 1722 1890 1891 +3 1722 1891 1723 +3 1723 1891 1892 +3 1723 1892 1893 +3 1723 1893 1724 +3 1724 1893 1894 +3 1724 1894 1725 +3 1725 1894 1895 +3 1725 1895 1726 +3 1726 1895 1896 +3 1726 1896 1897 +3 1726 1897 1727 +3 1727 1897 1898 +3 1727 1898 1728 +3 1728 1898 1729 +3 1729 1898 1899 +3 1729 1899 1730 +3 1730 1899 1900 +3 1730 1900 1731 +3 1731 1900 1901 +3 1731 1901 1732 +3 1732 1901 1902 +3 1732 1902 1733 +3 1733 1902 1903 +3 1733 1903 1734 +3 1734 1903 1904 +3 1734 1904 1905 +3 1734 1905 1735 +3 1735 1905 1736 +3 1736 1905 1906 +3 1736 1906 1737 +3 1737 1906 1907 +3 1737 1907 1738 +3 1738 1907 1908 +3 1738 1908 1739 +3 1739 1908 1909 +3 1739 1909 1910 +3 1739 1910 1740 +3 1740 1910 1741 +3 1741 1910 1911 +3 1741 1911 1742 +3 1742 1911 1912 +3 1742 1912 1743 +3 1743 1912 1913 +3 1743 1913 1744 +3 1744 1913 1914 +3 1744 1914 1745 +3 1745 1914 1915 +3 1745 1915 1916 +3 1745 1916 1746 +3 1746 1916 1917 +3 1746 1917 1747 +3 1747 1917 1748 +3 1748 1917 1918 +3 1748 1918 1919 +3 1748 1919 1749 +3 1749 1919 1920 +3 1749 1920 1750 +3 1750 1920 1751 +3 1751 1920 1921 +3 1751 1921 1752 +3 1752 1921 1922 +3 1752 1922 1753 +3 1753 1922 1923 +3 1753 1923 1924 +3 1753 1924 1754 +3 1754 1924 1925 +3 1754 1925 1755 +3 1755 1925 1926 +3 1755 1926 1756 +3 1756 1926 1757 +3 1757 1926 1927 +3 1757 1927 1928 +3 1757 1928 1758 +3 1758 1928 1929 +3 1758 1929 1759 +3 1759 1929 1930 +3 1759 1930 1760 +3 1760 1930 1761 +3 1761 1930 1762 +3 1762 1930 1763 +3 1763 1930 1931 +3 1763 1931 1932 +3 1763 1932 1764 +3 1764 1932 1933 +3 1764 1933 1765 +3 1765 1933 1934 +3 1765 1934 1935 +3 1765 1935 1766 +3 1766 1935 1767 +3 1767 1935 1936 +3 1767 1936 1937 +3 1767 1937 1768 +3 1768 1937 1938 +3 1768 1938 1769 +3 1769 1938 1939 +3 1769 1939 1770 +3 1770 1939 1771 +3 1771 1939 1940 +3 1771 1940 1941 +3 1771 1941 1772 +3 1772 1941 1942 +3 1772 1942 1773 +3 1773 1942 1774 +3 1774 1942 1943 +3 1774 1943 1776 +3 1776 1943 1777 +3 1777 1943 1944 +3 1777 1944 1945 +3 1777 1945 1946 +3 1777 1946 1778 +3 1778 1946 1947 +3 1778 1947 1948 +3 1778 1948 1779 +3 1779 1948 1949 +3 1779 1949 1780 +3 1780 1949 1950 +3 1780 1950 1781 +3 1781 1950 1951 +3 1781 1951 1782 +3 1782 1951 1783 +3 1783 1951 1952 +3 1783 1952 1953 +3 1783 1953 1784 +3 1784 1953 1954 +3 1784 1954 1785 +3 1785 1954 1955 +3 1785 1955 1786 +3 1786 1955 1956 +3 1786 1956 1787 +3 1787 1956 1957 +3 1787 1957 1788 +3 1788 1957 1958 +3 1788 1958 1959 +3 1788 1959 1789 +3 1789 1959 1960 +3 1789 1960 1790 +3 1790 1960 1961 +3 1790 1961 1791 +3 1791 1961 1792 +3 1792 1961 1962 +3 1792 1962 1963 +3 1792 1963 1793 +3 1793 1963 1964 +3 1793 1964 1794 +3 1794 1964 1965 +3 1794 1965 1795 +3 1795 1965 1966 +3 1795 1966 1967 +3 1795 1967 1968 +3 1795 1968 1796 +3 1796 1968 1969 +3 1796 1969 1797 +3 1797 1969 1799 +3 1799 1969 1800 +3 1800 1969 1970 +3 1800 1970 1971 +3 1800 1971 1801 +3 1801 1971 1972 +3 1801 1972 1802 +3 1802 1972 1803 +3 1803 1972 1973 +3 1803 1973 1804 +3 1804 1973 1974 +3 1804 1974 1805 +3 1805 1974 1975 +3 1805 1975 1806 +3 1806 1975 1976 +3 1806 1976 1807 +3 1807 1976 1977 +3 1807 1977 1808 +3 1808 1977 1978 +3 1808 1978 1809 +3 1809 1978 1979 +3 1809 1979 1980 +3 1809 1980 1810 +3 1810 1980 1981 +3 1810 1981 1811 +3 1811 1981 1982 +3 1811 1982 1812 +3 1812 1982 1983 +3 1812 1983 1813 +3 1813 1983 1984 +3 1813 1984 1814 +3 1814 1984 1985 +3 1814 1985 1815 +3 1815 1985 1986 +3 1815 1986 1816 +3 1816 1986 1987 +3 1816 1987 1817 +3 1817 1987 1988 +3 1817 1988 1818 +3 1818 1988 1989 +3 1818 1989 1819 +3 1819 1989 1990 +3 1819 1990 1820 +3 1820 1990 1991 +3 1820 1991 1821 +3 1821 1991 1992 +3 1821 1992 1822 +3 1822 1992 1993 +3 1822 1993 1823 +3 1823 1993 1994 +3 1823 1994 1824 +3 1824 1994 1995 +3 1824 1995 1825 +3 1825 1995 1996 +3 1825 1996 1826 +3 1826 1996 1997 +3 1826 1997 1827 +3 1827 1997 1998 +3 1827 1998 1828 +3 1828 1998 1999 +3 1828 1999 1829 +3 1829 1999 2000 +3 1829 2000 1830 +3 1830 2000 2001 +3 1830 2001 1831 +3 1831 2001 2002 +3 1831 2002 2003 +3 1831 2003 1832 +3 1832 2003 2004 +3 1832 2004 1833 +3 1833 2004 1834 +3 1834 2004 2005 +3 1834 2005 1835 +3 1835 2005 2006 +3 1835 2006 2007 +3 1835 2007 1836 +3 1836 2007 1837 +3 1837 2007 2008 +3 1837 2008 2009 +3 1837 2009 1838 +3 1838 2009 2010 +3 1838 2010 1839 +3 1839 2010 2011 +3 1839 2011 1840 +3 1840 2011 2012 +3 1840 2012 1841 +3 1841 2012 2013 +3 1841 2013 2014 +3 1841 2014 1842 +3 1842 2014 1843 +3 1843 2014 1844 +3 1844 2014 2015 +3 1844 2015 1845 +3 1845 2015 2016 +3 1845 2016 1846 +3 1846 2016 1847 +3 1847 2016 2017 +3 1847 2017 1848 +3 1848 2017 2018 +3 1848 2018 1849 +3 1849 2018 2019 +3 1849 2019 1850 +3 1850 2019 2020 +3 1850 2020 2021 +3 1850 2021 1851 +3 1851 2021 2022 +3 1851 2022 2023 +3 1851 2023 2024 +3 1851 2024 1852 +3 1852 2024 1853 +3 1853 2024 2025 +3 1853 2025 2026 +3 1853 2026 1854 +3 1854 2026 2027 +3 1854 2027 1855 +3 1855 2027 2028 +3 1855 2028 1856 +3 1856 2028 2029 +3 1856 2029 1857 +3 1857 2029 1858 +3 1858 2029 2030 +3 1858 2030 1859 +3 1859 2030 2031 +3 1859 2031 2032 +3 1859 2032 1860 +3 1860 2032 2033 +3 1860 2033 1861 +3 1861 2033 2034 +3 1861 2034 1862 +3 1862 2034 2035 +3 1862 2035 1863 +3 1863 2035 2036 +3 1863 2036 1864 +3 1864 2036 2037 +3 1864 2037 1865 +3 1865 2037 2038 +3 1865 2038 1866 +3 1866 2038 2039 +3 1866 2039 1867 +3 1867 2039 2040 +3 1867 2040 1868 +3 1868 2040 2041 +3 1868 2041 1869 +3 1869 2041 2042 +3 1869 2042 1870 +3 1870 2042 2043 +3 1870 2043 1871 +3 1871 2043 2044 +3 1871 2044 1872 +3 1872 2044 2045 +3 1872 2045 1873 +3 1873 2045 2046 +3 1873 2046 1874 +3 1874 2046 2047 +3 1874 2047 1875 +3 1875 2047 2048 +3 1875 2048 1876 +3 1876 2048 2049 +3 1876 2049 1877 +3 1877 2049 2050 +3 1877 2050 1878 +3 1878 2050 2051 +3 1878 2051 2052 +3 1878 2052 1879 +3 1879 2052 1880 +3 1880 2052 2053 +3 1880 2053 2054 +3 1880 2054 1881 +3 1881 2054 2055 +3 1881 2055 1882 +3 1882 2055 2056 +3 1882 2056 1883 +3 1883 2056 2057 +3 1883 2057 1884 +3 1884 2057 2058 +3 1884 2058 2059 +3 1884 2059 1885 +3 1885 2059 2060 +3 1885 2060 1886 +3 1886 2060 2061 +3 1886 2061 1887 +3 1887 2061 2062 +3 1887 2062 1888 +3 1888 2062 2063 +3 1888 2063 1889 +3 1889 2063 2064 +3 1889 2064 1891 +3 1891 2064 2065 +3 1891 2065 1892 +3 1892 2065 2066 +3 1892 2066 2067 +3 1892 2067 1893 +3 1893 2067 2068 +3 1893 2068 1894 +3 1894 2068 2069 +3 1894 2069 2070 +3 1894 2070 1895 +3 1895 2070 2071 +3 1895 2071 1896 +3 1896 2071 2072 +3 1896 2072 1897 +3 1897 2072 2073 +3 1897 2073 1898 +3 1898 2073 1899 +3 1899 2073 2074 +3 1899 2074 1900 +3 1900 2074 2075 +3 1900 2075 1901 +3 1901 2075 2076 +3 1901 2076 1902 +3 1902 2076 2077 +3 1902 2077 1903 +3 1903 2077 2078 +3 1903 2078 1904 +3 1904 2078 2079 +3 1904 2079 2080 +3 1904 2080 1905 +3 1905 2080 1906 +3 1906 2080 2081 +3 1906 2081 1907 +3 1907 2081 2082 +3 1907 2082 1908 +3 1908 2082 2083 +3 1908 2083 1909 +3 1909 2083 2084 +3 1909 2084 2085 +3 1909 2085 1910 +3 1910 2085 1911 +3 1911 2085 2086 +3 1911 2086 1912 +3 1912 2086 2087 +3 1912 2087 1913 +3 1913 2087 2088 +3 1913 2088 1914 +3 1914 2088 2089 +3 1914 2089 1915 +3 1915 2089 2090 +3 1915 2090 2091 +3 1915 2091 1916 +3 1916 2091 2092 +3 1916 2092 1917 +3 1917 2092 1918 +3 1918 2092 2093 +3 1918 2093 2094 +3 1918 2094 2095 +3 1918 2095 1919 +3 1919 2095 1920 +3 1920 2095 1921 +3 1921 2095 2096 +3 1921 2096 2097 +3 1921 2097 1922 +3 1922 2097 2098 +3 1922 2098 2099 +3 1922 2099 1923 +3 1923 2099 2100 +3 1923 2100 1924 +3 1924 2100 2101 +3 1924 2101 1925 +3 1925 2101 2102 +3 1925 2102 1926 +3 1926 2102 1927 +3 1927 2102 2103 +3 1927 2103 2104 +3 1927 2104 1928 +3 1928 2104 2105 +3 1928 2105 1929 +3 1929 2105 1930 +3 1930 2105 1931 +3 1931 2105 2106 +3 1931 2106 1932 +3 1932 2106 2107 +3 1932 2107 2108 +3 1932 2108 1933 +3 1933 2108 2109 +3 1933 2109 1934 +3 1934 2109 2110 +3 1934 2110 2111 +3 1934 2111 1935 +3 1935 2111 1936 +3 1936 2111 2112 +3 1936 2112 2113 +3 1936 2113 1937 +3 1937 2113 2114 +3 1937 2114 1938 +3 1938 2114 2115 +3 1938 2115 2116 +3 1938 2116 1939 +3 1939 2116 1940 +3 1940 2116 2117 +3 1940 2117 2118 +3 1940 2118 1941 +3 1941 2118 2119 +3 1941 2119 1942 +3 1942 2119 1944 +3 1944 2119 2120 +3 1944 2120 1945 +3 1945 2120 2121 +3 1945 2121 2122 +3 1945 2122 2123 +3 1945 2123 1946 +3 1946 2123 2124 +3 1946 2124 1947 +3 1947 2124 2125 +3 1947 2125 2126 +3 1947 2126 1948 +3 1948 2126 2127 +3 1948 2127 1949 +3 1949 2127 2128 +3 1949 2128 1950 +3 1950 2128 2129 +3 1950 2129 1951 +3 1951 2129 1952 +3 1952 2129 2130 +3 1952 2130 2131 +3 1952 2131 1953 +3 1953 2131 2132 +3 1953 2132 1954 +3 1954 2132 2133 +3 1954 2133 1955 +3 1955 2133 2134 +3 1955 2134 1956 +3 1956 2134 2135 +3 1956 2135 1957 +3 1957 2135 2136 +3 1957 2136 1958 +3 1958 2136 2137 +3 1958 2137 2138 +3 1958 2138 1959 +3 1959 2138 2139 +3 1959 2139 1960 +3 1960 2139 2140 +3 1960 2140 1961 +3 1961 2140 1962 +3 1962 2140 2141 +3 1962 2141 2142 +3 1962 2142 1963 +3 1963 2142 2143 +3 1963 2143 1964 +3 1964 2143 2144 +3 1964 2144 1965 +3 1965 2144 2145 +3 1965 2145 2146 +3 1965 2146 1966 +3 1966 2146 1975 +3 1975 2146 1976 +3 1976 2146 2147 +3 1976 2147 1977 +3 1977 2147 2148 +3 1977 2148 1978 +3 1978 2148 2149 +3 1978 2149 1979 +3 1979 2149 2150 +3 1979 2150 2151 +3 1979 2151 1980 +3 1980 2151 2152 +3 1980 2152 1981 +3 1981 2152 2153 +3 1981 2153 1982 +3 1982 2153 2154 +3 1982 2154 1983 +3 1983 2154 2155 +3 1983 2155 1984 +3 1984 2155 2156 +3 1984 2156 1985 +3 1985 2156 2157 +3 1985 2157 1986 +3 1986 2157 2158 +3 1986 2158 1987 +3 1987 2158 2159 +3 1987 2159 1988 +3 1988 2159 2160 +3 1988 2160 1989 +3 1989 2160 2161 +3 1989 2161 1990 +3 1990 2161 2162 +3 1990 2162 1991 +3 1991 2162 2163 +3 1991 2163 1992 +3 1992 2163 2164 +3 1992 2164 1993 +3 1993 2164 2165 +3 1993 2165 1994 +3 1994 2165 2166 +3 1994 2166 1995 +3 1995 2166 2167 +3 1995 2167 1996 +3 1996 2167 2168 +3 1996 2168 1997 +3 1997 2168 2169 +3 1997 2169 1998 +3 1998 2169 2170 +3 1998 2170 1999 +3 1999 2170 2171 +3 1999 2171 2000 +3 2000 2171 2172 +3 2000 2172 2001 +3 2001 2172 2173 +3 2001 2173 2002 +3 2002 2173 2174 +3 2002 2174 2175 +3 2002 2175 2003 +3 2003 2175 2176 +3 2003 2176 2004 +3 2004 2176 2005 +3 2005 2176 2177 +3 2005 2177 2006 +3 2006 2177 2178 +3 2006 2178 2179 +3 2006 2179 2007 +3 2007 2179 2008 +3 2008 2179 2180 +3 2008 2180 2181 +3 2008 2181 2009 +3 2009 2181 2182 +3 2009 2182 2010 +3 2010 2182 2183 +3 2010 2183 2011 +3 2011 2183 2184 +3 2011 2184 2012 +3 2012 2184 2185 +3 2012 2185 2013 +3 2013 2185 2014 +3 2014 2185 2015 +3 2015 2185 2016 +3 2016 2185 2186 +3 2016 2186 2017 +3 2017 2186 2187 +3 2017 2187 2018 +3 2018 2187 2188 +3 2018 2188 2019 +3 2019 2188 2189 +3 2019 2189 2020 +3 2020 2189 2190 +3 2020 2190 2191 +3 2020 2191 2021 +3 2021 2191 2192 +3 2021 2192 2022 +3 2022 2192 2193 +3 2022 2193 2023 +3 2023 2193 2194 +3 2023 2194 2024 +3 2024 2194 2025 +3 2025 2194 2026 +3 2026 2194 2195 +3 2026 2195 2196 +3 2026 2196 2027 +3 2027 2196 2197 +3 2027 2197 2028 +3 2028 2197 2198 +3 2028 2198 2199 +3 2028 2199 2029 +3 2029 2199 2030 +3 2030 2199 2200 +3 2030 2200 2031 +3 2031 2200 2201 +3 2031 2201 2202 +3 2031 2202 2032 +3 2032 2202 2203 +3 2032 2203 2033 +3 2033 2203 2204 +3 2033 2204 2034 +3 2034 2204 2205 +3 2034 2205 2035 +3 2035 2205 2206 +3 2035 2206 2036 +3 2036 2206 2207 +3 2036 2207 2037 +3 2037 2207 2208 +3 2037 2208 2038 +3 2038 2208 2209 +3 2038 2209 2039 +3 2039 2209 2210 +3 2039 2210 2040 +3 2040 2210 2211 +3 2040 2211 2041 +3 2041 2211 2212 +3 2041 2212 2042 +3 2042 2212 2213 +3 2042 2213 2043 +3 2043 2213 2214 +3 2043 2214 2044 +3 2044 2214 2215 +3 2044 2215 2045 +3 2045 2215 2216 +3 2045 2216 2046 +3 2046 2216 2217 +3 2046 2217 2047 +3 2047 2217 2218 +3 2047 2218 2048 +3 2048 2218 2219 +3 2048 2219 2049 +3 2049 2219 2220 +3 2049 2220 2221 +3 2049 2221 2050 +3 2050 2221 2222 +3 2050 2222 2051 +3 2051 2222 2223 +3 2051 2223 2052 +3 2052 2223 2053 +3 2053 2223 2224 +3 2053 2224 2225 +3 2053 2225 2054 +3 2054 2225 2226 +3 2054 2226 2055 +3 2055 2226 2227 +3 2055 2227 2056 +3 2056 2227 2228 +3 2056 2228 2057 +3 2057 2228 2229 +3 2057 2229 2058 +3 2058 2229 2230 +3 2058 2230 2231 +3 2058 2231 2059 +3 2059 2231 2232 +3 2059 2232 2060 +3 2060 2232 2233 +3 2060 2233 2234 +3 2060 2234 2061 +3 2061 2234 2062 +3 2062 2234 2235 +3 2062 2235 2063 +3 2063 2235 2236 +3 2063 2236 2237 +3 2063 2237 2064 +3 2064 2237 2065 +3 2065 2237 2238 +3 2065 2238 2239 +3 2065 2239 2066 +3 2066 2239 2240 +3 2066 2240 2241 +3 2066 2241 2067 +3 2067 2241 2242 +3 2067 2242 2068 +3 2068 2242 2243 +3 2068 2243 2069 +3 2069 2243 2244 +3 2069 2244 2245 +3 2069 2245 2070 +3 2070 2245 2246 +3 2070 2246 2071 +3 2071 2246 2247 +3 2071 2247 2072 +3 2072 2247 2248 +3 2072 2248 2073 +3 2073 2248 2074 +3 2074 2248 2249 +3 2074 2249 2075 +3 2075 2249 2250 +3 2075 2250 2076 +3 2076 2250 2251 +3 2076 2251 2077 +3 2077 2251 2252 +3 2077 2252 2078 +3 2078 2252 2253 +3 2078 2253 2079 +3 2079 2253 2254 +3 2079 2254 2255 +3 2079 2255 2080 +3 2080 2255 2081 +3 2081 2255 2256 +3 2081 2256 2082 +3 2082 2256 2257 +3 2082 2257 2083 +3 2083 2257 2258 +3 2083 2258 2084 +3 2084 2258 2259 +3 2084 2259 2260 +3 2084 2260 2085 +3 2085 2260 2086 +3 2086 2260 2261 +3 2086 2261 2087 +3 2087 2261 2262 +3 2087 2262 2088 +3 2088 2262 2263 +3 2088 2263 2089 +3 2089 2263 2264 +3 2089 2264 2090 +3 2090 2264 2265 +3 2090 2265 2266 +3 2090 2266 2091 +3 2091 2266 2267 +3 2091 2267 2092 +3 2092 2267 2093 +3 2093 2267 2268 +3 2093 2268 2269 +3 2093 2269 2094 +3 2094 2269 2270 +3 2094 2270 2096 +3 2096 2270 2271 +3 2096 2271 2272 +3 2096 2272 2097 +3 2097 2272 2273 +3 2097 2273 2274 +3 2097 2274 2098 +3 2098 2274 2275 +3 2098 2275 2099 +3 2099 2275 2276 +3 2099 2276 2277 +3 2099 2277 2100 +3 2100 2277 2278 +3 2100 2278 2101 +3 2101 2278 2279 +3 2101 2279 2102 +3 2102 2279 2103 +3 2103 2279 2280 +3 2103 2280 2281 +3 2103 2281 2104 +3 2104 2281 2282 +3 2104 2282 2283 +3 2104 2283 2105 +3 2105 2283 2106 +3 2106 2283 2284 +3 2106 2284 2107 +3 2107 2284 2285 +3 2107 2285 2108 +3 2108 2285 2286 +3 2108 2286 2287 +3 2108 2287 2109 +3 2109 2287 2288 +3 2109 2288 2110 +3 2110 2288 2289 +3 2110 2289 2290 +3 2110 2290 2111 +3 2111 2290 2112 +3 2112 2290 2291 +3 2112 2291 2292 +3 2112 2292 2113 +3 2113 2292 2293 +3 2113 2293 2114 +3 2114 2293 2294 +3 2114 2294 2115 +3 2115 2294 2295 +3 2115 2295 2116 +3 2116 2295 2117 +3 2117 2295 2296 +3 2117 2296 2297 +3 2117 2297 2118 +3 2118 2297 2298 +3 2118 2298 2119 +3 2119 2298 2120 +3 2120 2298 2121 +3 2121 2298 2297 +3 2121 2297 2299 +3 2121 2299 2122 +3 2122 2299 2300 +3 2122 2300 2301 +3 2122 2301 2302 +3 2122 2302 2123 +3 2123 2302 2124 +3 2124 2302 2303 +3 2124 2303 2125 +3 2125 2303 2304 +3 2125 2304 2305 +3 2125 2305 2126 +3 2126 2305 2306 +3 2126 2306 2127 +3 2127 2306 2307 +3 2127 2307 2128 +3 2128 2307 2308 +3 2128 2308 2129 +3 2129 2308 2130 +3 2130 2308 2309 +3 2130 2309 2310 +3 2130 2310 2131 +3 2131 2310 2311 +3 2131 2311 2132 +3 2132 2311 2312 +3 2132 2312 2133 +3 2133 2312 2313 +3 2133 2313 2134 +3 2134 2313 2314 +3 2134 2314 2135 +3 2135 2314 2315 +3 2135 2315 2136 +3 2136 2315 2137 +3 2137 2315 2316 +3 2137 2316 2317 +3 2137 2317 2318 +3 2137 2318 2138 +3 2138 2318 2139 +3 2139 2318 2319 +3 2139 2319 2140 +3 2140 2319 2141 +3 2141 2319 2320 +3 2141 2320 2321 +3 2141 2321 2142 +3 2142 2321 2322 +3 2142 2322 2143 +3 2143 2322 2323 +3 2143 2323 2144 +3 2144 2323 2324 +3 2144 2324 2325 +3 2144 2325 2145 +3 2145 2325 2147 +3 2147 2325 2148 +3 2148 2325 2326 +3 2148 2326 2149 +3 2149 2326 2327 +3 2149 2327 2150 +3 2150 2327 2328 +3 2150 2328 2329 +3 2150 2329 2151 +3 2151 2329 2330 +3 2151 2330 2152 +3 2152 2330 2331 +3 2152 2331 2153 +3 2153 2331 2332 +3 2153 2332 2154 +3 2154 2332 2333 +3 2154 2333 2155 +3 2155 2333 2334 +3 2155 2334 2156 +3 2156 2334 2335 +3 2156 2335 2157 +3 2157 2335 2336 +3 2157 2336 2158 +3 2158 2336 2337 +3 2158 2337 2159 +3 2159 2337 2338 +3 2159 2338 2160 +3 2160 2338 2339 +3 2160 2339 2161 +3 2161 2339 2340 +3 2161 2340 2162 +3 2162 2340 2341 +3 2162 2341 2163 +3 2163 2341 2342 +3 2163 2342 2164 +3 2164 2342 2343 +3 2164 2343 2165 +3 2165 2343 2344 +3 2165 2344 2166 +3 2166 2344 2345 +3 2166 2345 2167 +3 2167 2345 2346 +3 2167 2346 2168 +3 2168 2346 2347 +3 2168 2347 2169 +3 2169 2347 2348 +3 2169 2348 2170 +3 2170 2348 2349 +3 2170 2349 2171 +3 2171 2349 2350 +3 2171 2350 2172 +3 2172 2350 2351 +3 2172 2351 2173 +3 2173 2351 2352 +3 2173 2352 2174 +3 2174 2352 2353 +3 2174 2353 2354 +3 2174 2354 2175 +3 2175 2354 2355 +3 2175 2355 2176 +3 2176 2355 2177 +3 2177 2355 2356 +3 2177 2356 2178 +3 2178 2356 2357 +3 2178 2357 2358 +3 2178 2358 2179 +3 2179 2358 2180 +3 2180 2358 2359 +3 2180 2359 2360 +3 2180 2360 2181 +3 2181 2360 2361 +3 2181 2361 2182 +3 2182 2361 2362 +3 2182 2362 2183 +3 2183 2362 2363 +3 2183 2363 2184 +3 2184 2363 2186 +3 2186 2363 2187 +3 2187 2363 2364 +3 2187 2364 2188 +3 2188 2364 2365 +3 2188 2365 2189 +3 2189 2365 2366 +3 2189 2366 2367 +3 2189 2367 2190 +3 2190 2367 2368 +3 2190 2368 2191 +3 2191 2368 2192 +3 2192 2368 2369 +3 2192 2369 2370 +3 2192 2370 2193 +3 2193 2370 2371 +3 2193 2371 2372 +3 2193 2372 2195 +3 2195 2372 2373 +3 2195 2373 2196 +3 2196 2373 2374 +3 2196 2374 2375 +3 2196 2375 2197 +3 2197 2375 2376 +3 2197 2376 2198 +3 2198 2376 2377 +3 2198 2377 2378 +3 2198 2378 2199 +3 2199 2378 2200 +3 2200 2378 2379 +3 2200 2379 2201 +3 2201 2379 2380 +3 2201 2380 2381 +3 2201 2381 2202 +3 2202 2381 2382 +3 2202 2382 2203 +3 2203 2382 2383 +3 2203 2383 2204 +3 2204 2383 2384 +3 2204 2384 2205 +3 2205 2384 2385 +3 2205 2385 2206 +3 2206 2385 2386 +3 2206 2386 2207 +3 2207 2386 2387 +3 2207 2387 2208 +3 2208 2387 2388 +3 2208 2388 2209 +3 2209 2388 2389 +3 2209 2389 2210 +3 2210 2389 2390 +3 2210 2390 2211 +3 2211 2390 2391 +3 2211 2391 2212 +3 2212 2391 2392 +3 2212 2392 2213 +3 2213 2392 2393 +3 2213 2393 2214 +3 2214 2393 2394 +3 2214 2394 2215 +3 2215 2394 2395 +3 2215 2395 2216 +3 2216 2395 2396 +3 2216 2396 2217 +3 2217 2396 2397 +3 2217 2397 2218 +3 2218 2397 2398 +3 2218 2398 2219 +3 2219 2398 2399 +3 2219 2399 2220 +3 2220 2399 2400 +3 2220 2400 2401 +3 2220 2401 2221 +3 2221 2401 2402 +3 2221 2402 2222 +3 2222 2402 2224 +3 2224 2402 2403 +3 2224 2403 2225 +3 2225 2403 2226 +3 2226 2403 2404 +3 2226 2404 2405 +3 2226 2405 2227 +3 2227 2405 2406 +3 2227 2406 2228 +3 2228 2406 2407 +3 2228 2407 2229 +3 2229 2407 2408 +3 2229 2408 2230 +3 2230 2408 2409 +3 2230 2409 2410 +3 2230 2410 2231 +3 2231 2410 2411 +3 2231 2411 2232 +3 2232 2411 2412 +3 2232 2412 2413 +3 2232 2413 2233 +3 2233 2413 2414 +3 2233 2414 2234 +3 2234 2414 2415 +3 2234 2415 2416 +3 2234 2416 2235 +3 2235 2416 2417 +3 2235 2417 2236 +3 2236 2417 2237 +3 2237 2417 2238 +3 2238 2417 2239 +3 2239 2417 2418 +3 2239 2418 2240 +3 2240 2418 2419 +3 2240 2419 2420 +3 2240 2420 2241 +3 2241 2420 2421 +3 2241 2421 2242 +3 2242 2421 2422 +3 2242 2422 2243 +3 2243 2422 2423 +3 2243 2423 2244 +3 2244 2423 2424 +3 2244 2424 2245 +3 2245 2424 2425 +3 2245 2425 2246 +3 2246 2425 2426 +3 2246 2426 2427 +3 2246 2427 2247 +3 2247 2427 2428 +3 2247 2428 2248 +3 2248 2428 2249 +3 2249 2428 2429 +3 2249 2429 2250 +3 2250 2429 2430 +3 2250 2430 2251 +3 2251 2430 2431 +3 2251 2431 2252 +3 2252 2431 2432 +3 2252 2432 2253 +3 2253 2432 2433 +3 2253 2433 2254 +3 2254 2433 2434 +3 2254 2434 2435 +3 2254 2435 2255 +3 2255 2435 2256 +3 2256 2435 2436 +3 2256 2436 2257 +3 2257 2436 2437 +3 2257 2437 2258 +3 2258 2437 2438 +3 2258 2438 2259 +3 2259 2438 2439 +3 2259 2439 2440 +3 2259 2440 2260 +3 2260 2440 2261 +3 2261 2440 2441 +3 2261 2441 2262 +3 2262 2441 2442 +3 2262 2442 2263 +3 2263 2442 2443 +3 2263 2443 2264 +3 2264 2443 2444 +3 2264 2444 2265 +3 2265 2444 2445 +3 2265 2445 2446 +3 2265 2446 2266 +3 2266 2446 2447 +3 2266 2447 2267 +3 2267 2447 2268 +3 2268 2447 2448 +3 2268 2448 2449 +3 2268 2449 2269 +3 2269 2449 2450 +3 2269 2450 2270 +3 2270 2450 2271 +3 2271 2450 2451 +3 2271 2451 2452 +3 2271 2452 2272 +3 2272 2452 2273 +3 2273 2452 2453 +3 2273 2453 2454 +3 2273 2454 2274 +3 2274 2454 2275 +3 2275 2454 2455 +3 2275 2455 2276 +3 2276 2455 2456 +3 2276 2456 2277 +3 2277 2456 2457 +3 2277 2457 2278 +3 2278 2457 2458 +3 2278 2458 2459 +3 2278 2459 2279 +3 2279 2459 2280 +3 2280 2459 2460 +3 2280 2460 2461 +3 2280 2461 2281 +3 2281 2461 2462 +3 2281 2462 2282 +3 2282 2462 2284 +3 2284 2462 2463 +3 2284 2463 2285 +3 2285 2463 2464 +3 2285 2464 2286 +3 2286 2464 2465 +3 2286 2465 2466 +3 2286 2466 2287 +3 2287 2466 2467 +3 2287 2467 2288 +3 2288 2467 2468 +3 2288 2468 2289 +3 2289 2468 2469 +3 2289 2469 2470 +3 2289 2470 2290 +3 2290 2470 2291 +3 2291 2470 2471 +3 2291 2471 2472 +3 2291 2472 2292 +3 2292 2472 2473 +3 2292 2473 2293 +3 2293 2473 2474 +3 2293 2474 2294 +3 2294 2474 2475 +3 2294 2475 2295 +3 2295 2475 2296 +3 2296 2475 2476 +3 2296 2476 2299 +3 2299 2476 2477 +3 2299 2477 2300 +3 2300 2477 2478 +3 2300 2478 2301 +3 2301 2478 2479 +3 2301 2479 2480 +3 2301 2480 2302 +3 2302 2480 2303 +3 2303 2480 2481 +3 2303 2481 2304 +3 2304 2481 2482 +3 2304 2482 2483 +3 2304 2483 2305 +3 2305 2483 2484 +3 2305 2484 2306 +3 2306 2484 2485 +3 2306 2485 2307 +3 2307 2485 2486 +3 2307 2486 2308 +3 2308 2486 2309 +3 2309 2486 2487 +3 2309 2487 2488 +3 2309 2488 2310 +3 2310 2488 2489 +3 2310 2489 2311 +3 2311 2489 2490 +3 2311 2490 2312 +3 2312 2490 2491 +3 2312 2491 2313 +3 2313 2491 2492 +3 2313 2492 2314 +3 2314 2492 2315 +3 2315 2492 2493 +3 2315 2493 2316 +3 2316 2493 2494 +3 2316 2494 2495 +3 2316 2495 2317 +3 2317 2495 2496 +3 2317 2496 2497 +3 2317 2497 2318 +3 2318 2497 2320 +3 2320 2497 2498 +3 2320 2498 2321 +3 2321 2498 2499 +3 2321 2499 2322 +3 2322 2499 2500 +3 2322 2500 2501 +3 2322 2501 2323 +3 2323 2501 2324 +3 2324 2501 2502 +3 2324 2502 2326 +3 2326 2502 2327 +3 2327 2502 2503 +3 2327 2503 2504 +3 2327 2504 2328 +3 2328 2504 2505 +3 2328 2505 2329 +3 2329 2505 2506 +3 2329 2506 2330 +3 2330 2506 2507 +3 2330 2507 2331 +3 2331 2507 2508 +3 2331 2508 2332 +3 2332 2508 2509 +3 2332 2509 2333 +3 2333 2509 2510 +3 2333 2510 2334 +3 2334 2510 2511 +3 2334 2511 2335 +3 2335 2511 2512 +3 2335 2512 2336 +3 2336 2512 2513 +3 2336 2513 2337 +3 2337 2513 2514 +3 2337 2514 2338 +3 2338 2514 2515 +3 2338 2515 2339 +3 2339 2515 2516 +3 2339 2516 2340 +3 2340 2516 2517 +3 2340 2517 2341 +3 2341 2517 2518 +3 2341 2518 2342 +3 2342 2518 2519 +3 2342 2519 2343 +3 2343 2519 2520 +3 2343 2520 2344 +3 2344 2520 2521 +3 2344 2521 2345 +3 2345 2521 2522 +3 2345 2522 2346 +3 2346 2522 2523 +3 2346 2523 2347 +3 2347 2523 2524 +3 2347 2524 2348 +3 2348 2524 2525 +3 2348 2525 2349 +3 2349 2525 2526 +3 2349 2526 2350 +3 2350 2526 2527 +3 2350 2527 2351 +3 2351 2527 2528 +3 2351 2528 2352 +3 2352 2528 2529 +3 2352 2529 2353 +3 2353 2529 2530 +3 2353 2530 2531 +3 2353 2531 2354 +3 2354 2531 2532 +3 2354 2532 2355 +3 2355 2532 2356 +3 2356 2532 2533 +3 2356 2533 2357 +3 2357 2533 2534 +3 2357 2534 2535 +3 2357 2535 2358 +3 2358 2535 2359 +3 2359 2535 2536 +3 2359 2536 2537 +3 2359 2537 2360 +3 2360 2537 2538 +3 2360 2538 2361 +3 2361 2538 2539 +3 2361 2539 2362 +3 2362 2539 2364 +3 2364 2539 2365 +3 2365 2539 2366 +3 2366 2539 2538 +3 2366 2538 2540 +3 2366 2540 2541 +3 2366 2541 2542 +3 2366 2542 2367 +3 2367 2542 2543 +3 2367 2543 2368 +3 2368 2543 2544 +3 2368 2544 2369 +3 2369 2544 2545 +3 2369 2545 2546 +3 2369 2546 2370 +3 2370 2546 2547 +3 2370 2547 2371 +3 2371 2547 2548 +3 2371 2548 2549 +3 2371 2549 2372 +3 2372 2549 2550 +3 2372 2550 2373 +3 2373 2550 2551 +3 2373 2551 2374 +3 2374 2551 2552 +3 2374 2552 2375 +3 2375 2552 2376 +3 2376 2552 2377 +3 2377 2552 2553 +3 2377 2553 2554 +3 2377 2554 2555 +3 2377 2555 2379 +3 2379 2555 2556 +3 2379 2556 2380 +3 2380 2556 2557 +3 2380 2557 2381 +3 2381 2557 2382 +3 2382 2557 2558 +3 2382 2558 2383 +3 2383 2558 2559 +3 2383 2559 2384 +3 2384 2559 2560 +3 2384 2560 2385 +3 2385 2560 2561 +3 2385 2561 2386 +3 2386 2561 2562 +3 2386 2562 2387 +3 2387 2562 2563 +3 2387 2563 2388 +3 2388 2563 2564 +3 2388 2564 2389 +3 2389 2564 2565 +3 2389 2565 2390 +3 2390 2565 2566 +3 2390 2566 2391 +3 2391 2566 2567 +3 2391 2567 2392 +3 2392 2567 2568 +3 2392 2568 2393 +3 2393 2568 2569 +3 2393 2569 2394 +3 2394 2569 2570 +3 2394 2570 2395 +3 2395 2570 2571 +3 2395 2571 2396 +3 2396 2571 2572 +3 2396 2572 2397 +3 2397 2572 2573 +3 2397 2573 2398 +3 2398 2573 2574 +3 2398 2574 2399 +3 2399 2574 2575 +3 2399 2575 2400 +3 2400 2575 2576 +3 2400 2576 2577 +3 2400 2577 2401 +3 2401 2577 2578 +3 2401 2578 2402 +3 2402 2578 2579 +3 2402 2579 2403 +3 2403 2579 2404 +3 2404 2579 2580 +3 2404 2580 2581 +3 2404 2581 2405 +3 2405 2581 2582 +3 2405 2582 2406 +3 2406 2582 2583 +3 2406 2583 2407 +3 2407 2583 2584 +3 2407 2584 2408 +3 2408 2584 2585 +3 2408 2585 2409 +3 2409 2585 2586 +3 2409 2586 2587 +3 2409 2587 2410 +3 2410 2587 2588 +3 2410 2588 2411 +3 2411 2588 2589 +3 2411 2589 2412 +3 2412 2589 2590 +3 2412 2590 2413 +3 2413 2590 2591 +3 2413 2591 2414 +3 2414 2591 2592 +3 2414 2592 2593 +3 2414 2593 2415 +3 2415 2593 2594 +3 2415 2594 2595 +3 2415 2595 2416 +3 2416 2595 2418 +3 2418 2595 2596 +3 2418 2596 2419 +3 2419 2596 2597 +3 2419 2597 2598 +3 2419 2598 2420 +3 2420 2598 2599 +3 2420 2599 2600 +3 2420 2600 2421 +3 2421 2600 2601 +3 2421 2601 2422 +3 2422 2601 2602 +3 2422 2602 2423 +3 2423 2602 2603 +3 2423 2603 2424 +3 2424 2603 2604 +3 2424 2604 2425 +3 2425 2604 2605 +3 2425 2605 2606 +3 2425 2606 2426 +3 2426 2606 2607 +3 2426 2607 2427 +3 2427 2607 2428 +3 2428 2607 2608 +3 2428 2608 2429 +3 2429 2608 2609 +3 2429 2609 2430 +3 2430 2609 2610 +3 2430 2610 2431 +3 2431 2610 2611 +3 2431 2611 2432 +3 2432 2611 2612 +3 2432 2612 2433 +3 2433 2612 2613 +3 2433 2613 2434 +3 2434 2613 2614 +3 2434 2614 2615 +3 2434 2615 2435 +3 2435 2615 2436 +3 2436 2615 2616 +3 2436 2616 2437 +3 2437 2616 2617 +3 2437 2617 2438 +3 2438 2617 2618 +3 2438 2618 2439 +3 2439 2618 2619 +3 2439 2619 2620 +3 2439 2620 2440 +3 2440 2620 2441 +3 2441 2620 2621 +3 2441 2621 2442 +3 2442 2621 2622 +3 2442 2622 2443 +3 2443 2622 2623 +3 2443 2623 2444 +3 2444 2623 2624 +3 2444 2624 2445 +3 2445 2624 2625 +3 2445 2625 2626 +3 2445 2626 2446 +3 2446 2626 2627 +3 2446 2627 2447 +3 2447 2627 2448 +3 2448 2627 2628 +3 2448 2628 2629 +3 2448 2629 2449 +3 2449 2629 2630 +3 2449 2630 2450 +3 2450 2630 2451 +3 2451 2630 2631 +3 2451 2631 2632 +3 2451 2632 2452 +3 2452 2632 2633 +3 2452 2633 2453 +3 2453 2633 2634 +3 2453 2634 2455 +3 2455 2634 2635 +3 2455 2635 2456 +3 2456 2635 2636 +3 2456 2636 2457 +3 2457 2636 2637 +3 2457 2637 2458 +3 2458 2637 2638 +3 2458 2638 2639 +3 2458 2639 2459 +3 2459 2639 2640 +3 2459 2640 2460 +3 2460 2640 2641 +3 2460 2641 2642 +3 2460 2642 2461 +3 2461 2642 2462 +3 2462 2642 2463 +3 2463 2642 2464 +3 2464 2642 2641 +3 2464 2641 2465 +3 2465 2641 2643 +3 2465 2643 2644 +3 2465 2644 2466 +3 2466 2644 2645 +3 2466 2645 2467 +3 2467 2645 2646 +3 2467 2646 2468 +3 2468 2646 2647 +3 2468 2647 2469 +3 2469 2647 2648 +3 2469 2648 2649 +3 2469 2649 2470 +3 2470 2649 2471 +3 2471 2649 2650 +3 2471 2650 2651 +3 2471 2651 2472 +3 2472 2651 2652 +3 2472 2652 2473 +3 2473 2652 2653 +3 2473 2653 2654 +3 2473 2654 2474 +3 2474 2654 2655 +3 2474 2655 2475 +3 2475 2655 2476 +3 2476 2655 2477 +3 2477 2655 2656 +3 2477 2656 2657 +3 2477 2657 2478 +3 2478 2657 2658 +3 2478 2658 2479 +3 2479 2658 2659 +3 2479 2659 2660 +3 2479 2660 2480 +3 2480 2660 2481 +3 2481 2660 2661 +3 2481 2661 2482 +3 2482 2661 2662 +3 2482 2662 2663 +3 2482 2663 2483 +3 2483 2663 2664 +3 2483 2664 2484 +3 2484 2664 2665 +3 2484 2665 2485 +3 2485 2665 2666 +3 2485 2666 2486 +3 2486 2666 2487 +3 2487 2666 2667 +3 2487 2667 2668 +3 2487 2668 2488 +3 2488 2668 2669 +3 2488 2669 2489 +3 2489 2669 2670 +3 2489 2670 2490 +3 2490 2670 2671 +3 2490 2671 2491 +3 2491 2671 2672 +3 2491 2672 2492 +3 2492 2672 2493 +3 2493 2672 2673 +3 2493 2673 2494 +3 2494 2673 2674 +3 2494 2674 2675 +3 2494 2675 2495 +3 2495 2675 2676 +3 2495 2676 2496 +3 2496 2676 2677 +3 2496 2677 2678 +3 2496 2678 2497 +3 2497 2678 2498 +3 2498 2678 2679 +3 2498 2679 2680 +3 2498 2680 2499 +3 2499 2680 2681 +3 2499 2681 2500 +3 2500 2681 2682 +3 2500 2682 2501 +3 2501 2682 2502 +3 2502 2682 2503 +3 2503 2682 2683 +3 2503 2683 2504 +3 2504 2683 2684 +3 2504 2684 2685 +3 2504 2685 2505 +3 2505 2685 2686 +3 2505 2686 2506 +3 2506 2686 2687 +3 2506 2687 2507 +3 2507 2687 2688 +3 2507 2688 2508 +3 2508 2688 2689 +3 2508 2689 2509 +3 2509 2689 2690 +3 2509 2690 2510 +3 2510 2690 2691 +3 2510 2691 2511 +3 2511 2691 2692 +3 2511 2692 2512 +3 2512 2692 2693 +3 2512 2693 2513 +3 2513 2693 2694 +3 2513 2694 2514 +3 2514 2694 2695 +3 2514 2695 2515 +3 2515 2695 2696 +3 2515 2696 2516 +3 2516 2696 2697 +3 2516 2697 2517 +3 2517 2697 2698 +3 2517 2698 2518 +3 2518 2698 2699 +3 2518 2699 2519 +3 2519 2699 2700 +3 2519 2700 2520 +3 2520 2700 2701 +3 2520 2701 2521 +3 2521 2701 2702 +3 2521 2702 2522 +3 2522 2702 2703 +3 2522 2703 2523 +3 2523 2703 2704 +3 2523 2704 2524 +3 2524 2704 2705 +3 2524 2705 2525 +3 2525 2705 2706 +3 2525 2706 2526 +3 2526 2706 2707 +3 2526 2707 2527 +3 2527 2707 2708 +3 2527 2708 2528 +3 2528 2708 2709 +3 2528 2709 2529 +3 2529 2709 2710 +3 2529 2710 2530 +3 2530 2710 2711 +3 2530 2711 2712 +3 2530 2712 2531 +3 2531 2712 2713 +3 2531 2713 2532 +3 2532 2713 2533 +3 2533 2713 2714 +3 2533 2714 2534 +3 2534 2714 2715 +3 2534 2715 2716 +3 2534 2716 2535 +3 2535 2716 2536 +3 2536 2716 2717 +3 2536 2717 2718 +3 2536 2718 2537 +3 2537 2718 2540 +3 2540 2718 2719 +3 2540 2719 2541 +3 2541 2719 2720 +3 2541 2720 2721 +3 2541 2721 2542 +3 2542 2721 2722 +3 2542 2722 2543 +3 2543 2722 2723 +3 2543 2723 2544 +3 2544 2723 2724 +3 2544 2724 2545 +3 2545 2724 2725 +3 2545 2725 2726 +3 2545 2726 2546 +3 2546 2726 2547 +3 2547 2726 2727 +3 2547 2727 2548 +3 2548 2727 2728 +3 2548 2728 2549 +3 2549 2728 2729 +3 2549 2729 2551 +3 2551 2729 2554 +3 2554 2729 2730 +3 2554 2730 2731 +3 2554 2731 2555 +3 2555 2731 2732 +3 2555 2732 2556 +3 2556 2732 2733 +3 2556 2733 2557 +3 2557 2733 2734 +3 2557 2734 2735 +3 2557 2735 2558 +3 2558 2735 2559 +3 2559 2735 2736 +3 2559 2736 2560 +3 2560 2736 2737 +3 2560 2737 2561 +3 2561 2737 2738 +3 2561 2738 2562 +3 2562 2738 2739 +3 2562 2739 2563 +3 2563 2739 2740 +3 2563 2740 2564 +3 2564 2740 2741 +3 2564 2741 2565 +3 2565 2741 2742 +3 2565 2742 2566 +3 2566 2742 2743 +3 2566 2743 2567 +3 2567 2743 2744 +3 2567 2744 2568 +3 2568 2744 2745 +3 2568 2745 2569 +3 2569 2745 2746 +3 2569 2746 2570 +3 2570 2746 2747 +3 2570 2747 2571 +3 2571 2747 2748 +3 2571 2748 2572 +3 2572 2748 2749 +3 2572 2749 2573 +3 2573 2749 2750 +3 2573 2750 2574 +3 2574 2750 2751 +3 2574 2751 2575 +3 2575 2751 2752 +3 2575 2752 2576 +3 2576 2752 2753 +3 2576 2753 2754 +3 2576 2754 2577 +3 2577 2754 2755 +3 2577 2755 2578 +3 2578 2755 2756 +3 2578 2756 2579 +3 2579 2756 2580 +3 2580 2756 2757 +3 2580 2757 2581 +3 2581 2757 2758 +3 2581 2758 2582 +3 2582 2758 2759 +3 2582 2759 2760 +3 2582 2760 2583 +3 2583 2760 2761 +3 2583 2761 2584 +3 2584 2761 2585 +3 2585 2761 2762 +3 2585 2762 2586 +3 2586 2762 2763 +3 2586 2763 2764 +3 2586 2764 2587 +3 2587 2764 2765 +3 2587 2765 2766 +3 2587 2766 2588 +3 2588 2766 2767 +3 2588 2767 2589 +3 2589 2767 2768 +3 2589 2768 2769 +3 2589 2769 2590 +3 2590 2769 2591 +3 2591 2769 2592 +3 2592 2769 2770 +3 2592 2770 2771 +3 2592 2771 2772 +3 2592 2772 2593 +3 2593 2772 2773 +3 2593 2773 2594 +3 2594 2773 2596 +3 2596 2773 2597 +3 2597 2773 2774 +3 2597 2774 2775 +3 2597 2775 2598 +3 2598 2775 2599 +3 2599 2775 2776 +3 2599 2776 2777 +3 2599 2777 2600 +3 2600 2777 2778 +3 2600 2778 2601 +3 2601 2778 2779 +3 2601 2779 2602 +3 2602 2779 2780 +3 2602 2780 2603 +3 2603 2780 2781 +3 2603 2781 2604 +3 2604 2781 2782 +3 2604 2782 2605 +3 2605 2782 2783 +3 2605 2783 2606 +3 2606 2783 2784 +3 2606 2784 2607 +3 2607 2784 2785 +3 2607 2785 2608 +3 2608 2785 2786 +3 2608 2786 2787 +3 2608 2787 2609 +3 2609 2787 2610 +3 2610 2787 2788 +3 2610 2788 2611 +3 2611 2788 2789 +3 2611 2789 2612 +3 2612 2789 2790 +3 2612 2790 2791 +3 2612 2791 2613 +3 2613 2791 2614 +3 2614 2791 2792 +3 2614 2792 2793 +3 2614 2793 2794 +3 2614 2794 2615 +3 2615 2794 2616 +3 2616 2794 2795 +3 2616 2795 2617 +3 2617 2795 2796 +3 2617 2796 2618 +3 2618 2796 2797 +3 2618 2797 2619 +3 2619 2797 2798 +3 2619 2798 2799 +3 2619 2799 2800 +3 2619 2800 2620 +3 2620 2800 2621 +3 2621 2800 2801 +3 2621 2801 2622 +3 2622 2801 2802 +3 2622 2802 2623 +3 2623 2802 2803 +3 2623 2803 2624 +3 2624 2803 2804 +3 2624 2804 2625 +3 2625 2804 2805 +3 2625 2805 2806 +3 2625 2806 2626 +3 2626 2806 2807 +3 2626 2807 2627 +3 2627 2807 2628 +3 2628 2807 2808 +3 2628 2808 2809 +3 2628 2809 2629 +3 2629 2809 2810 +3 2629 2810 2630 +3 2630 2810 2631 +3 2631 2810 2811 +3 2631 2811 2812 +3 2631 2812 2632 +3 2632 2812 2813 +3 2632 2813 2633 +3 2633 2813 2814 +3 2633 2814 2634 +3 2634 2814 2815 +3 2634 2815 2635 +3 2635 2815 2816 +3 2635 2816 2636 +3 2636 2816 2637 +3 2637 2816 2817 +3 2637 2817 2638 +3 2638 2817 2818 +3 2638 2818 2819 +3 2638 2819 2639 +3 2639 2819 2640 +3 2640 2819 2820 +3 2640 2820 2641 +3 2641 2820 2643 +3 2643 2820 2821 +3 2643 2821 2822 +3 2643 2822 2644 +3 2644 2822 2823 +3 2644 2823 2645 +3 2645 2823 2824 +3 2645 2824 2646 +3 2646 2824 2825 +3 2646 2825 2647 +3 2647 2825 2826 +3 2647 2826 2648 +3 2648 2826 2827 +3 2648 2827 2828 +3 2648 2828 2649 +3 2649 2828 2650 +3 2650 2828 2829 +3 2650 2829 2830 +3 2650 2830 2831 +3 2650 2831 2651 +3 2651 2831 2832 +3 2651 2832 2833 +3 2651 2833 2652 +3 2652 2833 2834 +3 2652 2834 2835 +3 2652 2835 2653 +3 2653 2835 2836 +3 2653 2836 2654 +3 2654 2836 2656 +3 2656 2836 2837 +3 2656 2837 2657 +3 2657 2837 2838 +3 2657 2838 2658 +3 2658 2838 2839 +3 2658 2839 2659 +3 2659 2839 2840 +3 2659 2840 2841 +3 2659 2841 2660 +3 2660 2841 2661 +3 2661 2841 2842 +3 2661 2842 2662 +3 2662 2842 2843 +3 2662 2843 2844 +3 2662 2844 2663 +3 2663 2844 2845 +3 2663 2845 2664 +3 2664 2845 2846 +3 2664 2846 2665 +3 2665 2846 2847 +3 2665 2847 2666 +3 2666 2847 2667 +3 2667 2847 2848 +3 2667 2848 2849 +3 2667 2849 2668 +3 2668 2849 2850 +3 2668 2850 2669 +3 2669 2850 2851 +3 2669 2851 2670 +3 2670 2851 2852 +3 2670 2852 2671 +3 2671 2852 2672 +3 2672 2852 2853 +3 2672 2853 2673 +3 2673 2853 2854 +3 2673 2854 2674 +3 2674 2854 2855 +3 2674 2855 2856 +3 2674 2856 2675 +3 2675 2856 2857 +3 2675 2857 2676 +3 2676 2857 2858 +3 2676 2858 2677 +3 2677 2858 2859 +3 2677 2859 2860 +3 2677 2860 2678 +3 2678 2860 2679 +3 2679 2860 2861 +3 2679 2861 2862 +3 2679 2862 2680 +3 2680 2862 2863 +3 2680 2863 2681 +3 2681 2863 2682 +3 2682 2863 2683 +3 2683 2863 2684 +3 2684 2863 2864 +3 2684 2864 2865 +3 2684 2865 2866 +3 2684 2866 2685 +3 2685 2866 2686 +3 2686 2866 2867 +3 2686 2867 2868 +3 2686 2868 2687 +3 2687 2868 2869 +3 2687 2869 2688 +3 2688 2869 2870 +3 2688 2870 2689 +3 2689 2870 2871 +3 2689 2871 2690 +3 2690 2871 2872 +3 2690 2872 2691 +3 2691 2872 2873 +3 2691 2873 2692 +3 2692 2873 2874 +3 2692 2874 2693 +3 2693 2874 2875 +3 2693 2875 2694 +3 2694 2875 2876 +3 2694 2876 2695 +3 2695 2876 2877 +3 2695 2877 2696 +3 2696 2877 2878 +3 2696 2878 2697 +3 2697 2878 2879 +3 2697 2879 2698 +3 2698 2879 2880 +3 2698 2880 2699 +3 2699 2880 2881 +3 2699 2881 2700 +3 2700 2881 2882 +3 2700 2882 2701 +3 2701 2882 2883 +3 2701 2883 2702 +3 2702 2883 2884 +3 2702 2884 2703 +3 2703 2884 2885 +3 2703 2885 2704 +3 2704 2885 2886 +3 2704 2886 2705 +3 2705 2886 2887 +3 2705 2887 2706 +3 2706 2887 2888 +3 2706 2888 2707 +3 2707 2888 2889 +3 2707 2889 2708 +3 2708 2889 2890 +3 2708 2890 2709 +3 2709 2890 2891 +3 2709 2891 2710 +3 2710 2891 2892 +3 2710 2892 2711 +3 2711 2892 2893 +3 2711 2893 2894 +3 2711 2894 2712 +3 2712 2894 2895 +3 2712 2895 2713 +3 2713 2895 2714 +3 2714 2895 2896 +3 2714 2896 2715 +3 2715 2896 2897 +3 2715 2897 2898 +3 2715 2898 2716 +3 2716 2898 2717 +3 2717 2898 2899 +3 2717 2899 2900 +3 2717 2900 2718 +3 2718 2900 2719 +3 2719 2900 2901 +3 2719 2901 2720 +3 2720 2901 2902 +3 2720 2902 2903 +3 2720 2903 2721 +3 2721 2903 2904 +3 2721 2904 2722 +3 2722 2904 2905 +3 2722 2905 2723 +3 2723 2905 2724 +3 2724 2905 2906 +3 2724 2906 2725 +3 2725 2906 2907 +3 2725 2907 2908 +3 2725 2908 2726 +3 2726 2908 2727 +3 2727 2908 2909 +3 2727 2909 2728 +3 2728 2909 2910 +3 2728 2910 2911 +3 2728 2911 2730 +3 2730 2911 2912 +3 2730 2912 2913 +3 2730 2913 2731 +3 2731 2913 2914 +3 2731 2914 2732 +3 2732 2914 2915 +3 2732 2915 2733 +3 2733 2915 2916 +3 2733 2916 2734 +3 2734 2916 2917 +3 2734 2917 2918 +3 2734 2918 2735 +3 2735 2918 2919 +3 2735 2919 2736 +3 2736 2919 2920 +3 2736 2920 2737 +3 2737 2920 2921 +3 2737 2921 2738 +3 2738 2921 2922 +3 2738 2922 2739 +3 2739 2922 2923 +3 2739 2923 2740 +3 2740 2923 2924 +3 2740 2924 2741 +3 2741 2924 2925 +3 2741 2925 2742 +3 2742 2925 2926 +3 2742 2926 2743 +3 2743 2926 2927 +3 2743 2927 2744 +3 2744 2927 2928 +3 2744 2928 2745 +3 2745 2928 2929 +3 2745 2929 2746 +3 2746 2929 2930 +3 2746 2930 2747 +3 2747 2930 2931 +3 2747 2931 2748 +3 2748 2931 2932 +3 2748 2932 2749 +3 2749 2932 2933 +3 2749 2933 2750 +3 2750 2933 2934 +3 2750 2934 2751 +3 2751 2934 2935 +3 2751 2935 2752 +3 2752 2935 2936 +3 2752 2936 2753 +3 2753 2936 2937 +3 2753 2937 2754 +3 2754 2937 2938 +3 2754 2938 2939 +3 2754 2939 2755 +3 2755 2939 2756 +3 2756 2939 2757 +3 2757 2939 2940 +3 2757 2940 2758 +3 2758 2940 2941 +3 2758 2941 2942 +3 2758 2942 2759 +3 2759 2942 2943 +3 2759 2943 2944 +3 2759 2944 2760 +3 2760 2944 2945 +3 2760 2945 2761 +3 2761 2945 2763 +3 2763 2945 2946 +3 2763 2946 2764 +3 2764 2946 2947 +3 2764 2947 2948 +3 2764 2948 2765 +3 2765 2948 2949 +3 2765 2949 2766 +3 2766 2949 2950 +3 2766 2950 2767 +3 2767 2950 2951 +3 2767 2951 2768 +3 2768 2951 2952 +3 2768 2952 2770 +3 2770 2952 2953 +3 2770 2953 2771 +3 2771 2953 2954 +3 2771 2954 2955 +3 2771 2955 2772 +3 2772 2955 2774 +3 2774 2955 2956 +3 2774 2956 2775 +3 2775 2956 2957 +3 2775 2957 2776 +3 2776 2957 2958 +3 2776 2958 2777 +3 2777 2958 2959 +3 2777 2959 2960 +3 2777 2960 2778 +3 2778 2960 2961 +3 2778 2961 2779 +3 2779 2961 2780 +3 2780 2961 2962 +3 2780 2962 2963 +3 2780 2963 2781 +3 2781 2963 2964 +3 2781 2964 2782 +3 2782 2964 2965 +3 2782 2965 2783 +3 2783 2965 2966 +3 2783 2966 2784 +3 2784 2966 2967 +3 2784 2967 2785 +3 2785 2967 2968 +3 2785 2968 2786 +3 2786 2968 2969 +3 2786 2969 2787 +3 2787 2969 2788 +3 2788 2969 2970 +3 2788 2970 2789 +3 2789 2970 2971 +3 2789 2971 2790 +3 2790 2971 2972 +3 2790 2972 2973 +3 2790 2973 2791 +3 2791 2973 2974 +3 2791 2974 2792 +3 2792 2974 2975 +3 2792 2975 2793 +3 2793 2975 2976 +3 2793 2976 2977 +3 2793 2977 2794 +3 2794 2977 2795 +3 2795 2977 2978 +3 2795 2978 2796 +3 2796 2978 2797 +3 2797 2978 2979 +3 2797 2979 2980 +3 2797 2980 2798 +3 2798 2980 2799 +3 2799 2980 2981 +3 2799 2981 2982 +3 2799 2982 2800 +3 2800 2982 2801 +3 2801 2982 2983 +3 2801 2983 2802 +3 2802 2983 2984 +3 2802 2984 2803 +3 2803 2984 2985 +3 2803 2985 2804 +3 2804 2985 2986 +3 2804 2986 2805 +3 2805 2986 2987 +3 2805 2987 2806 +3 2806 2987 2988 +3 2806 2988 2807 +3 2807 2988 2808 +3 2808 2988 2989 +3 2808 2989 2990 +3 2808 2990 2809 +3 2809 2990 2991 +3 2809 2991 2810 +3 2810 2991 2811 +3 2811 2991 2992 +3 2811 2992 2993 +3 2811 2993 2812 +3 2812 2993 2994 +3 2812 2994 2813 +3 2813 2994 2995 +3 2813 2995 2814 +3 2814 2995 2996 +3 2814 2996 2815 +3 2815 2996 2997 +3 2815 2997 2816 +3 2816 2997 2998 +3 2816 2998 2817 +3 2817 2998 2999 +3 2817 2999 2818 +3 2818 2999 3000 +3 2818 3000 2819 +3 2819 3000 3001 +3 2819 3001 2820 +3 2820 3001 3002 +3 2820 3002 2821 +3 2821 3002 3003 +3 2821 3003 2822 +3 2822 3003 3004 +3 2822 3004 2823 +3 2823 3004 3005 +3 2823 3005 3006 +3 2823 3006 2824 +3 2824 3006 3007 +3 2824 3007 2825 +3 2825 3007 3008 +3 2825 3008 2826 +3 2826 3008 3009 +3 2826 3009 2827 +3 2827 3009 3010 +3 2827 3010 2829 +3 2829 3010 3011 +3 2829 3011 2830 +3 2830 3011 3012 +3 2830 3012 2831 +3 2831 3012 2832 +3 2832 3012 3013 +3 2832 3013 3014 +3 2832 3014 2833 +3 2833 3014 3015 +3 2833 3015 2834 +3 2834 3015 3016 +3 2834 3016 2835 +3 2835 3016 3017 +3 2835 3017 2836 +3 2836 3017 2837 +3 2837 3017 3018 +3 2837 3018 2838 +3 2838 3018 3019 +3 2838 3019 2839 +3 2839 3019 3020 +3 2839 3020 2840 +3 2840 3020 3021 +3 2840 3021 3022 +3 2840 3022 2841 +3 2841 3022 2842 +3 2842 3022 3023 +3 2842 3023 2843 +3 2843 3023 3024 +3 2843 3024 3025 +3 2843 3025 2844 +3 2844 3025 3026 +3 2844 3026 2845 +3 2845 3026 3027 +3 2845 3027 2846 +3 2846 3027 3028 +3 2846 3028 2847 +3 2847 3028 2848 +3 2848 3028 3029 +3 2848 3029 3030 +3 2848 3030 2849 +3 2849 3030 3031 +3 2849 3031 2850 +3 2850 3031 3032 +3 2850 3032 2851 +3 2851 3032 3033 +3 2851 3033 2852 +3 2852 3033 3034 +3 2852 3034 2853 +3 2853 3034 3035 +3 2853 3035 2854 +3 2854 3035 3036 +3 2854 3036 2855 +3 2855 3036 3037 +3 2855 3037 2856 +3 2856 3037 3038 +3 2856 3038 2857 +3 2857 3038 3039 +3 2857 3039 2858 +3 2858 3039 3040 +3 2858 3040 2859 +3 2859 3040 3041 +3 2859 3041 3042 +3 2859 3042 2860 +3 2860 3042 2861 +3 2861 3042 3043 +3 2861 3043 3044 +3 2861 3044 2862 +3 2862 3044 2864 +3 2864 3044 3045 +3 2864 3045 2865 +3 2865 3045 3046 +3 2865 3046 2866 +3 2866 3046 2867 +3 2867 3046 3047 +3 2867 3047 3048 +3 2867 3048 3049 +3 2867 3049 2868 +3 2868 3049 2869 +3 2869 3049 3050 +3 2869 3050 2870 +3 2870 3050 3051 +3 2870 3051 2871 +3 2871 3051 3052 +3 2871 3052 2872 +3 2872 3052 3053 +3 2872 3053 2873 +3 2873 3053 3054 +3 2873 3054 2874 +3 2874 3054 3055 +3 2874 3055 2875 +3 2875 3055 3056 +3 2875 3056 2876 +3 2876 3056 3057 +3 2876 3057 2877 +3 2877 3057 3058 +3 2877 3058 2878 +3 2878 3058 3059 +3 2878 3059 2879 +3 2879 3059 3060 +3 2879 3060 2880 +3 2880 3060 3061 +3 2880 3061 2881 +3 2881 3061 3062 +3 2881 3062 2882 +3 2882 3062 3063 +3 2882 3063 2883 +3 2883 3063 3064 +3 2883 3064 2884 +3 2884 3064 3065 +3 2884 3065 2885 +3 2885 3065 3066 +3 2885 3066 2886 +3 2886 3066 3067 +3 2886 3067 2887 +3 2887 3067 3068 +3 2887 3068 2888 +3 2888 3068 3069 +3 2888 3069 2889 +3 2889 3069 3070 +3 2889 3070 2890 +3 2890 3070 3071 +3 2890 3071 2891 +3 2891 3071 3072 +3 2891 3072 2892 +3 2892 3072 3073 +3 2892 3073 2893 +3 2893 3073 3074 +3 2893 3074 3075 +3 2893 3075 2894 +3 2894 3075 3076 +3 2894 3076 2895 +3 2895 3076 2896 +3 2896 3076 3077 +3 2896 3077 2897 +3 2897 3077 3078 +3 2897 3078 3079 +3 2897 3079 2898 +3 2898 3079 2899 +3 2899 3079 3080 +3 2899 3080 3081 +3 2899 3081 2900 +3 2900 3081 2901 +3 2901 3081 3082 +3 2901 3082 2902 +3 2902 3082 3083 +3 2902 3083 3084 +3 2902 3084 2903 +3 2903 3084 3085 +3 2903 3085 2904 +3 2904 3085 3086 +3 2904 3086 2905 +3 2905 3086 3087 +3 2905 3087 2906 +3 2906 3087 3088 +3 2906 3088 2907 +3 2907 3088 3089 +3 2907 3089 3090 +3 2907 3090 2908 +3 2908 3090 2909 +3 2909 3090 3091 +3 2909 3091 2910 +3 2910 3091 3092 +3 2910 3092 3093 +3 2910 3093 3094 +3 2910 3094 2911 +3 2911 3094 2912 +3 2912 3094 3095 +3 2912 3095 3096 +3 2912 3096 2913 +3 2913 3096 3097 +3 2913 3097 2914 +3 2914 3097 3098 +3 2914 3098 2915 +3 2915 3098 3099 +3 2915 3099 2916 +3 2916 3099 3100 +3 2916 3100 3101 +3 2916 3101 2917 +3 2917 3101 3102 +3 2917 3102 3103 +3 2917 3103 2918 +3 2918 3103 3104 +3 2918 3104 2919 +3 2919 3104 2920 +3 2920 3104 3105 +3 2920 3105 2921 +3 2921 3105 2922 +3 2922 3105 3106 +3 2922 3106 2923 +3 2923 3106 3107 +3 2923 3107 2924 +3 2924 3107 3108 +3 2924 3108 2925 +3 2925 3108 3109 +3 2925 3109 2926 +3 2926 3109 3110 +3 2926 3110 2927 +3 2927 3110 3111 +3 2927 3111 2928 +3 2928 3111 3112 +3 2928 3112 2929 +3 2929 3112 3113 +3 2929 3113 2930 +3 2930 3113 3114 +3 2930 3114 2931 +3 2931 3114 3115 +3 2931 3115 2932 +3 2932 3115 3116 +3 2932 3116 2933 +3 2933 3116 3117 +3 2933 3117 2934 +3 2934 3117 3118 +3 2934 3118 2935 +3 2935 3118 3119 +3 2935 3119 2936 +3 2936 3119 3120 +3 2936 3120 2937 +3 2937 3120 3121 +3 2937 3121 3122 +3 2937 3122 2938 +3 2938 3122 3123 +3 2938 3123 2939 +3 2939 3123 2940 +3 2940 3123 2941 +3 2941 3123 3124 +3 2941 3124 2942 +3 2942 3124 3125 +3 2942 3125 3126 +3 2942 3126 2943 +3 2943 3126 3127 +3 2943 3127 3128 +3 2943 3128 2944 +3 2944 3128 3129 +3 2944 3129 2945 +3 2945 3129 2946 +3 2946 3129 3130 +3 2946 3130 2947 +3 2947 3130 3131 +3 2947 3131 3132 +3 2947 3132 2948 +3 2948 3132 3133 +3 2948 3133 3134 +3 2948 3134 2949 +3 2949 3134 3135 +3 2949 3135 2950 +3 2950 3135 3136 +3 2950 3136 2951 +3 2951 3136 3137 +3 2951 3137 3138 +3 2951 3138 2952 +3 2952 3138 3139 +3 2952 3139 2953 +3 2953 3139 3140 +3 2953 3140 3141 +3 2953 3141 2954 +3 2954 3141 3142 +3 2954 3142 3143 +3 2954 3143 2955 +3 2955 3143 2956 +3 2956 3143 3144 +3 2956 3144 2957 +3 2957 3144 3145 +3 2957 3145 3146 +3 2957 3146 2958 +3 2958 3146 3147 +3 2958 3147 2959 +3 2959 3147 3148 +3 2959 3148 3149 +3 2959 3149 2960 +3 2960 3149 2961 +3 2961 3149 3150 +3 2961 3150 2962 +3 2962 3150 3151 +3 2962 3151 3152 +3 2962 3152 2963 +3 2963 3152 3153 +3 2963 3153 2964 +3 2964 3153 3154 +3 2964 3154 2965 +3 2965 3154 3155 +3 2965 3155 2966 +3 2966 3155 3156 +3 2966 3156 2967 +3 2967 3156 3157 +3 2967 3157 2968 +3 2968 3157 3158 +3 2968 3158 2969 +3 2969 3158 3159 +3 2969 3159 2970 +3 2970 3159 3160 +3 2970 3160 2971 +3 2971 3160 3161 +3 2971 3161 2972 +3 2972 3161 3162 +3 2972 3162 2973 +3 2973 3162 3163 +3 2973 3163 2974 +3 2974 3163 3164 +3 2974 3164 2975 +3 2975 3164 3165 +3 2975 3165 2976 +3 2976 3165 3166 +3 2976 3166 3167 +3 2976 3167 2977 +3 2977 3167 2978 +3 2978 3167 3168 +3 2978 3168 2979 +3 2979 3168 3169 +3 2979 3169 2980 +3 2980 3169 3170 +3 2980 3170 2981 +3 2981 3170 3171 +3 2981 3171 3172 +3 2981 3172 2982 +3 2982 3172 3173 +3 2982 3173 2983 +3 2983 3173 3174 +3 2983 3174 2984 +3 2984 3174 2985 +3 2985 3174 3175 +3 2985 3175 2986 +3 2986 3175 3176 +3 2986 3176 3177 +3 2986 3177 3178 +3 2986 3178 2987 +3 2987 3178 3179 +3 2987 3179 2988 +3 2988 3179 2989 +3 2989 3179 3180 +3 2989 3180 3181 +3 2989 3181 2990 +3 2990 3181 3182 +3 2990 3182 2991 +3 2991 3182 2992 +3 2992 3182 3183 +3 2992 3183 3184 +3 2992 3184 2993 +3 2993 3184 3185 +3 2993 3185 2994 +3 2994 3185 3186 +3 2994 3186 2995 +3 2995 3186 3187 +3 2995 3187 2996 +3 2996 3187 3188 +3 2996 3188 2997 +3 2997 3188 2998 +3 2998 3188 3189 +3 2998 3189 3190 +3 2998 3190 2999 +3 2999 3190 3191 +3 2999 3191 3192 +3 2999 3192 3193 +3 2999 3193 3000 +3 3000 3193 3001 +3 3001 3193 3194 +3 3001 3194 3002 +3 3002 3194 3195 +3 3002 3195 3003 +3 3003 3195 3196 +3 3003 3196 3004 +3 3004 3196 3005 +3 3005 3196 3197 +3 3005 3197 3198 +3 3005 3198 3006 +3 3006 3198 3199 +3 3006 3199 3200 +3 3006 3200 3007 +3 3007 3200 3201 +3 3007 3201 3008 +3 3008 3201 3202 +3 3008 3202 3009 +3 3009 3202 3203 +3 3009 3203 3010 +3 3010 3203 3204 +3 3010 3204 3011 +3 3011 3204 3205 +3 3011 3205 3012 +3 3012 3205 3206 +3 3012 3206 3013 +3 3013 3206 3207 +3 3013 3207 3208 +3 3013 3208 3014 +3 3014 3208 3209 +3 3014 3209 3015 +3 3015 3209 3210 +3 3015 3210 3016 +3 3016 3210 3211 +3 3016 3211 3017 +3 3017 3211 3018 +3 3018 3211 3212 +3 3018 3212 3019 +3 3019 3212 3213 +3 3019 3213 3020 +3 3020 3213 3214 +3 3020 3214 3021 +3 3021 3214 3215 +3 3021 3215 3216 +3 3021 3216 3022 +3 3022 3216 3023 +3 3023 3216 3217 +3 3023 3217 3024 +3 3024 3217 3218 +3 3024 3218 3219 +3 3024 3219 3025 +3 3025 3219 3220 +3 3025 3220 3026 +3 3026 3220 3221 +3 3026 3221 3027 +3 3027 3221 3222 +3 3027 3222 3028 +3 3028 3222 3029 +3 3029 3222 3223 +3 3029 3223 3224 +3 3029 3224 3030 +3 3030 3224 3225 +3 3030 3225 3031 +3 3031 3225 3226 +3 3031 3226 3032 +3 3032 3226 3227 +3 3032 3227 3033 +3 3033 3227 3228 +3 3033 3228 3034 +3 3034 3228 3229 +3 3034 3229 3035 +3 3035 3229 3036 +3 3036 3229 3230 +3 3036 3230 3231 +3 3036 3231 3037 +3 3037 3231 3232 +3 3037 3232 3038 +3 3038 3232 3233 +3 3038 3233 3039 +3 3039 3233 3234 +3 3039 3234 3040 +3 3040 3234 3235 +3 3040 3235 3041 +3 3041 3235 3236 +3 3041 3236 3237 +3 3041 3237 3042 +3 3042 3237 3043 +3 3043 3237 3238 +3 3043 3238 3239 +3 3043 3239 3044 +3 3044 3239 3045 +3 3045 3239 3047 +3 3047 3239 3240 +3 3047 3240 3048 +3 3048 3240 3241 +3 3048 3241 3242 +3 3048 3242 3049 +3 3049 3242 3243 +3 3049 3243 3244 +3 3049 3244 3050 +3 3050 3244 3245 +3 3050 3245 3051 +3 3051 3245 3246 +3 3051 3246 3052 +3 3052 3246 3247 +3 3052 3247 3053 +3 3053 3247 3248 +3 3053 3248 3054 +3 3054 3248 3249 +3 3054 3249 3055 +3 3055 3249 3250 +3 3055 3250 3056 +3 3056 3250 3251 +3 3056 3251 3057 +3 3057 3251 3252 +3 3057 3252 3058 +3 3058 3252 3253 +3 3058 3253 3059 +3 3059 3253 3254 +3 3059 3254 3060 +3 3060 3254 3255 +3 3060 3255 3061 +3 3061 3255 3256 +3 3061 3256 3062 +3 3062 3256 3257 +3 3062 3257 3063 +3 3063 3257 3258 +3 3063 3258 3064 +3 3064 3258 3259 +3 3064 3259 3065 +3 3065 3259 3260 +3 3065 3260 3066 +3 3066 3260 3261 +3 3066 3261 3067 +3 3067 3261 3262 +3 3067 3262 3068 +3 3068 3262 3263 +3 3068 3263 3069 +3 3069 3263 3264 +3 3069 3264 3070 +3 3070 3264 3265 +3 3070 3265 3071 +3 3071 3265 3266 +3 3071 3266 3072 +3 3072 3266 3267 +3 3072 3267 3073 +3 3073 3267 3268 +3 3073 3268 3074 +3 3074 3268 3269 +3 3074 3269 3270 +3 3074 3270 3075 +3 3075 3270 3271 +3 3075 3271 3076 +3 3076 3271 3077 +3 3077 3271 3272 +3 3077 3272 3078 +3 3078 3272 3273 +3 3078 3273 3274 +3 3078 3274 3079 +3 3079 3274 3080 +3 3080 3274 3275 +3 3080 3275 3276 +3 3080 3276 3081 +3 3081 3276 3082 +3 3082 3276 3277 +3 3082 3277 3083 +3 3083 3277 3278 +3 3083 3278 3279 +3 3083 3279 3084 +3 3084 3279 3280 +3 3084 3280 3085 +3 3085 3280 3281 +3 3085 3281 3086 +3 3086 3281 3282 +3 3086 3282 3087 +3 3087 3282 3283 +3 3087 3283 3088 +3 3088 3283 3284 +3 3088 3284 3089 +3 3089 3284 3091 +3 3091 3284 3285 +3 3091 3285 3286 +3 3091 3286 3092 +3 3092 3286 3287 +3 3092 3287 3093 +3 3093 3287 3288 +3 3093 3288 3289 +3 3093 3289 3094 +3 3094 3289 3095 +3 3095 3289 3290 +3 3095 3290 3291 +3 3095 3291 3096 +3 3096 3291 3292 +3 3096 3292 3097 +3 3097 3292 3293 +3 3097 3293 3098 +3 3098 3293 3294 +3 3098 3294 3099 +3 3099 3294 3295 +3 3099 3295 3100 +3 3100 3295 3296 +3 3100 3296 3101 +3 3101 3296 3297 +3 3101 3297 3298 +3 3101 3298 3102 +3 3102 3298 3299 +3 3102 3299 3300 +3 3102 3300 3301 +3 3102 3301 3103 +3 3103 3301 3302 +3 3103 3302 3104 +3 3104 3302 3105 +3 3105 3302 3303 +3 3105 3303 3106 +3 3106 3303 3304 +3 3106 3304 3107 +3 3107 3304 3305 +3 3107 3305 3108 +3 3108 3305 3306 +3 3108 3306 3109 +3 3109 3306 3307 +3 3109 3307 3110 +3 3110 3307 3308 +3 3110 3308 3111 +3 3111 3308 3309 +3 3111 3309 3112 +3 3112 3309 3310 +3 3112 3310 3113 +3 3113 3310 3311 +3 3113 3311 3114 +3 3114 3311 3312 +3 3114 3312 3115 +3 3115 3312 3313 +3 3115 3313 3116 +3 3116 3313 3314 +3 3116 3314 3117 +3 3117 3314 3315 +3 3117 3315 3118 +3 3118 3315 3316 +3 3118 3316 3119 +3 3119 3316 3317 +3 3119 3317 3120 +3 3120 3317 3318 +3 3120 3318 3121 +3 3121 3318 3319 +3 3121 3319 3122 +3 3122 3319 3320 +3 3122 3320 3321 +3 3122 3321 3322 +3 3122 3322 3123 +3 3123 3322 3323 +3 3123 3323 3124 +3 3124 3323 3324 +3 3124 3324 3125 +3 3125 3324 3325 +3 3125 3325 3326 +3 3125 3326 3126 +3 3126 3326 3127 +3 3127 3326 3327 +3 3127 3327 3328 +3 3127 3328 3128 +3 3128 3328 3329 +3 3128 3329 3129 +3 3129 3329 3130 +3 3130 3329 3330 +3 3130 3330 3331 +3 3130 3331 3131 +3 3131 3331 3332 +3 3131 3332 3132 +3 3132 3332 3333 +3 3132 3333 3133 +3 3133 3333 3334 +3 3133 3334 3134 +3 3134 3334 3335 +3 3134 3335 3135 +3 3135 3335 3336 +3 3135 3336 3136 +3 3136 3336 3337 +3 3136 3337 3137 +3 3137 3337 3338 +3 3137 3338 3339 +3 3137 3339 3138 +3 3138 3339 3340 +3 3138 3340 3139 +3 3139 3340 3140 +3 3140 3340 3341 +3 3140 3341 3342 +3 3140 3342 3141 +3 3141 3342 3343 +3 3141 3343 3142 +3 3142 3343 3344 +3 3142 3344 3143 +3 3143 3344 3144 +3 3144 3344 3345 +3 3144 3345 3145 +3 3145 3345 3346 +3 3145 3346 3146 +3 3146 3346 3347 +3 3146 3347 3147 +3 3147 3347 3348 +3 3147 3348 3148 +3 3148 3348 3349 +3 3148 3349 3350 +3 3148 3350 3149 +3 3149 3350 3150 +3 3150 3350 3351 +3 3150 3351 3151 +3 3151 3351 3352 +3 3151 3352 3353 +3 3151 3353 3152 +3 3152 3353 3354 +3 3152 3354 3153 +3 3153 3354 3355 +3 3153 3355 3154 +3 3154 3355 3356 +3 3154 3356 3155 +3 3155 3356 3357 +3 3155 3357 3156 +3 3156 3357 3358 +3 3156 3358 3157 +3 3157 3358 3359 +3 3157 3359 3158 +3 3158 3359 3360 +3 3158 3360 3159 +3 3159 3360 3361 +3 3159 3361 3160 +3 3160 3361 3362 +3 3160 3362 3161 +3 3161 3362 3363 +3 3161 3363 3162 +3 3162 3363 3364 +3 3162 3364 3163 +3 3163 3364 3365 +3 3163 3365 3164 +3 3164 3365 3366 +3 3164 3366 3165 +3 3165 3366 3367 +3 3165 3367 3166 +3 3166 3367 3368 +3 3166 3368 3369 +3 3166 3369 3167 +3 3167 3369 3168 +3 3168 3369 3370 +3 3168 3370 3169 +3 3169 3370 3371 +3 3169 3371 3170 +3 3170 3371 3372 +3 3170 3372 3171 +3 3171 3372 3373 +3 3171 3373 3374 +3 3171 3374 3172 +3 3172 3374 3173 +3 3173 3374 3375 +3 3173 3375 3174 +3 3174 3375 3376 +3 3174 3376 3175 +3 3175 3376 3377 +3 3175 3377 3176 +3 3176 3377 3378 +3 3176 3378 3177 +3 3177 3378 3379 +3 3177 3379 3380 +3 3177 3380 3178 +3 3178 3380 3381 +3 3178 3381 3179 +3 3179 3381 3180 +3 3180 3381 3382 +3 3180 3382 3383 +3 3180 3383 3181 +3 3181 3383 3384 +3 3181 3384 3182 +3 3182 3384 3183 +3 3183 3384 3385 +3 3183 3385 3386 +3 3183 3386 3184 +3 3184 3386 3387 +3 3184 3387 3185 +3 3185 3387 3388 +3 3185 3388 3186 +3 3186 3388 3389 +3 3186 3389 3187 +3 3187 3389 3390 +3 3187 3390 3188 +3 3188 3390 3189 +3 3189 3390 3391 +3 3189 3391 3392 +3 3189 3392 3190 +3 3190 3392 3191 +3 3191 3392 3393 +3 3191 3393 3394 +3 3191 3394 3192 +3 3192 3394 3395 +3 3192 3395 3396 +3 3192 3396 3193 +3 3193 3396 3194 +3 3194 3396 3397 +3 3194 3397 3195 +3 3195 3397 3196 +3 3196 3397 3197 +3 3197 3397 3398 +3 3197 3398 3198 +3 3198 3398 3399 +3 3198 3399 3400 +3 3198 3400 3199 +3 3199 3400 3401 +3 3199 3401 3402 +3 3199 3402 3200 +3 3200 3402 3201 +3 3201 3402 3403 +3 3201 3403 3404 +3 3201 3404 3202 +3 3202 3404 3203 +3 3203 3404 3405 +3 3203 3405 3204 +3 3204 3405 3406 +3 3204 3406 3407 +3 3204 3407 3205 +3 3205 3407 3408 +3 3205 3408 3206 +3 3206 3408 3409 +3 3206 3409 3207 +3 3207 3409 3410 +3 3207 3410 3411 +3 3207 3411 3208 +3 3208 3411 3412 +3 3208 3412 3209 +3 3209 3412 3413 +3 3209 3413 3210 +3 3210 3413 3414 +3 3210 3414 3211 +3 3211 3414 3212 +3 3212 3414 3415 +3 3212 3415 3213 +3 3213 3415 3416 +3 3213 3416 3214 +3 3214 3416 3417 +3 3214 3417 3215 +3 3215 3417 3418 +3 3215 3418 3419 +3 3215 3419 3216 +3 3216 3419 3217 +3 3217 3419 3420 +3 3217 3420 3218 +3 3218 3420 3421 +3 3218 3421 3422 +3 3218 3422 3219 +3 3219 3422 3423 +3 3219 3423 3220 +3 3220 3423 3424 +3 3220 3424 3221 +3 3221 3424 3425 +3 3221 3425 3222 +3 3222 3425 3223 +3 3223 3425 3426 +3 3223 3426 3427 +3 3223 3427 3224 +3 3224 3427 3428 +3 3224 3428 3225 +3 3225 3428 3429 +3 3225 3429 3226 +3 3226 3429 3430 +3 3226 3430 3227 +3 3227 3430 3431 +3 3227 3431 3228 +3 3228 3431 3432 +3 3228 3432 3229 +3 3229 3432 3230 +3 3230 3432 3433 +3 3230 3433 3434 +3 3230 3434 3231 +3 3231 3434 3435 +3 3231 3435 3232 +3 3232 3435 3436 +3 3232 3436 3233 +3 3233 3436 3437 +3 3233 3437 3234 +3 3234 3437 3438 +3 3234 3438 3235 +3 3235 3438 3439 +3 3235 3439 3236 +3 3236 3439 3440 +3 3236 3440 3441 +3 3236 3441 3237 +3 3237 3441 3238 +3 3238 3441 3442 +3 3238 3442 3240 +3 3240 3442 3241 +3 3241 3442 3443 +3 3241 3443 3444 +3 3241 3444 3242 +3 3242 3444 3445 +3 3242 3445 3446 +3 3242 3446 3243 +3 3243 3446 3244 +3 3244 3446 3447 +3 3244 3447 3245 +3 3245 3447 3246 +3 3246 3447 3448 +3 3246 3448 3247 +3 3247 3448 3449 +3 3247 3449 3248 +3 3248 3449 3450 +3 3248 3450 3451 +3 3248 3451 3249 +3 3249 3451 3452 +3 3249 3452 3250 +3 3250 3452 3453 +3 3250 3453 3251 +3 3251 3453 3454 +3 3251 3454 3252 +3 3252 3454 3455 +3 3252 3455 3253 +3 3253 3455 3254 +3 3254 3455 3456 +3 3254 3456 3457 +3 3254 3457 3255 +3 3255 3457 3458 +3 3255 3458 3256 +3 3256 3458 3459 +3 3256 3459 3257 +3 3257 3459 3460 +3 3257 3460 3258 +3 3258 3460 3461 +3 3258 3461 3259 +3 3259 3461 3462 +3 3259 3462 3260 +3 3260 3462 3463 +3 3260 3463 3261 +3 3261 3463 3464 +3 3261 3464 3262 +3 3262 3464 3465 +3 3262 3465 3263 +3 3263 3465 3466 +3 3263 3466 3264 +3 3264 3466 3467 +3 3264 3467 3265 +3 3265 3467 3266 +3 3266 3467 3468 +3 3266 3468 3469 +3 3266 3469 3267 +3 3267 3469 3470 +3 3267 3470 3268 +3 3268 3470 3471 +3 3268 3471 3269 +3 3269 3471 3472 +3 3269 3472 3270 +3 3270 3472 3473 +3 3270 3473 3271 +3 3271 3473 3272 +3 3272 3473 3474 +3 3272 3474 3273 +3 3273 3474 3475 +3 3273 3475 3476 +3 3273 3476 3274 +3 3274 3476 3275 +3 3275 3476 3477 +3 3275 3477 3478 +3 3275 3478 3276 +3 3276 3478 3277 +3 3277 3478 3479 +3 3277 3479 3278 +3 3278 3479 3480 +3 3278 3480 3481 +3 3278 3481 3279 +3 3279 3481 3482 +3 3279 3482 3280 +3 3280 3482 3281 +3 3281 3482 3483 +3 3281 3483 3484 +3 3281 3484 3282 +3 3282 3484 3485 +3 3282 3485 3283 +3 3283 3485 3284 +3 3284 3485 3285 +3 3285 3485 3486 +3 3285 3486 3286 +3 3286 3486 3487 +3 3286 3487 3488 +3 3286 3488 3287 +3 3287 3488 3489 +3 3287 3489 3288 +3 3288 3489 3490 +3 3288 3490 3491 +3 3288 3491 3289 +3 3289 3491 3290 +3 3290 3491 3492 +3 3290 3492 3493 +3 3290 3493 3291 +3 3291 3493 3494 +3 3291 3494 3292 +3 3292 3494 3495 +3 3292 3495 3293 +3 3293 3495 3496 +3 3293 3496 3294 +3 3294 3496 3497 +3 3294 3497 3295 +3 3295 3497 3498 +3 3295 3498 3296 +3 3296 3498 3499 +3 3296 3499 3297 +3 3297 3499 3500 +3 3297 3500 3501 +3 3297 3501 3298 +3 3298 3501 3502 +3 3298 3502 3299 +3 3299 3502 3503 +3 3299 3503 3504 +3 3299 3504 3505 +3 3299 3505 3300 +3 3300 3505 3506 +3 3300 3506 3301 +3 3301 3506 3302 +3 3302 3506 3303 +3 3303 3506 3507 +3 3303 3507 3304 +3 3304 3507 3508 +3 3304 3508 3305 +3 3305 3508 3509 +3 3305 3509 3306 +3 3306 3509 3510 +3 3306 3510 3307 +3 3307 3510 3511 +3 3307 3511 3308 +3 3308 3511 3512 +3 3308 3512 3309 +3 3309 3512 3513 +3 3309 3513 3310 +3 3310 3513 3514 +3 3310 3514 3311 +3 3311 3514 3515 +3 3311 3515 3312 +3 3312 3515 3516 +3 3312 3516 3313 +3 3313 3516 3517 +3 3313 3517 3314 +3 3314 3517 3518 +3 3314 3518 3315 +3 3315 3518 3519 +3 3315 3519 3316 +3 3316 3519 3520 +3 3316 3520 3317 +3 3317 3520 3521 +3 3317 3521 3318 +3 3318 3521 3522 +3 3318 3522 3319 +3 3319 3522 3523 +3 3319 3523 3524 +3 3319 3524 3320 +3 3320 3524 3525 +3 3320 3525 3321 +3 3321 3525 3526 +3 3321 3526 3527 +3 3321 3527 3322 +3 3322 3527 3323 +3 3323 3527 3528 +3 3323 3528 3324 +3 3324 3528 3529 +3 3324 3529 3325 +3 3325 3529 3530 +3 3325 3530 3327 +3 3327 3530 3531 +3 3327 3531 3328 +3 3328 3531 3532 +3 3328 3532 3329 +3 3329 3532 3330 +3 3330 3532 3533 +3 3330 3533 3534 +3 3330 3534 3331 +3 3331 3534 3535 +3 3331 3535 3332 +3 3332 3535 3536 +3 3332 3536 3333 +3 3333 3536 3537 +3 3333 3537 3538 +3 3333 3538 3334 +3 3334 3538 3539 +3 3334 3539 3540 +3 3334 3540 3335 +3 3335 3540 3336 +3 3336 3540 3541 +3 3336 3541 3337 +3 3337 3541 3542 +3 3337 3542 3338 +3 3338 3542 3543 +3 3338 3543 3544 +3 3338 3544 3339 +3 3339 3544 3545 +3 3339 3545 3340 +3 3340 3545 3341 +3 3341 3545 3546 +3 3341 3546 3342 +3 3342 3546 3547 +3 3342 3547 3343 +3 3343 3547 3548 +3 3343 3548 3344 +3 3344 3548 3345 +3 3345 3548 3549 +3 3345 3549 3346 +3 3346 3549 3550 +3 3346 3550 3551 +3 3346 3551 3347 +3 3347 3551 3348 +3 3348 3551 3552 +3 3348 3552 3349 +3 3349 3552 3553 +3 3349 3553 3350 +3 3350 3553 3554 +3 3350 3554 3351 +3 3351 3554 3555 +3 3351 3555 3352 +3 3352 3555 3556 +3 3352 3556 3557 +3 3352 3557 3353 +3 3353 3557 3558 +3 3353 3558 3354 +3 3354 3558 3559 +3 3354 3559 3355 +3 3355 3559 3560 +3 3355 3560 3356 +3 3356 3560 3561 +3 3356 3561 3357 +3 3357 3561 3562 +3 3357 3562 3358 +3 3358 3562 3563 +3 3358 3563 3359 +3 3359 3563 3564 +3 3359 3564 3360 +3 3360 3564 3565 +3 3360 3565 3361 +3 3361 3565 3566 +3 3361 3566 3362 +3 3362 3566 3567 +3 3362 3567 3363 +3 3363 3567 3568 +3 3363 3568 3364 +3 3364 3568 3569 +3 3364 3569 3365 +3 3365 3569 3570 +3 3365 3570 3366 +3 3366 3570 3571 +3 3366 3571 3367 +3 3367 3571 3572 +3 3367 3572 3368 +3 3368 3572 3573 +3 3368 3573 3574 +3 3368 3574 3369 +3 3369 3574 3370 +3 3370 3574 3575 +3 3370 3575 3371 +3 3371 3575 3576 +3 3371 3576 3372 +3 3372 3576 3577 +3 3372 3577 3373 +3 3373 3577 3578 +3 3373 3578 3579 +3 3373 3579 3374 +3 3374 3579 3375 +3 3375 3579 3580 +3 3375 3580 3376 +3 3376 3580 3581 +3 3376 3581 3377 +3 3377 3581 3582 +3 3377 3582 3378 +3 3378 3582 3583 +3 3378 3583 3379 +3 3379 3583 3584 +3 3379 3584 3585 +3 3379 3585 3380 +3 3380 3585 3586 +3 3380 3586 3381 +3 3381 3586 3382 +3 3382 3586 3587 +3 3382 3587 3588 +3 3382 3588 3383 +3 3383 3588 3589 +3 3383 3589 3384 +3 3384 3589 3385 +3 3385 3589 3590 +3 3385 3590 3591 +3 3385 3591 3386 +3 3386 3591 3592 +3 3386 3592 3387 +3 3387 3592 3593 +3 3387 3593 3388 +3 3388 3593 3594 +3 3388 3594 3389 +3 3389 3594 3595 +3 3389 3595 3390 +3 3390 3595 3391 +3 3391 3595 3596 +3 3391 3596 3597 +3 3391 3597 3392 +3 3392 3597 3393 +3 3393 3597 3598 +3 3393 3598 3394 +3 3394 3598 3599 +3 3394 3599 3600 +3 3394 3600 3395 +3 3395 3600 3601 +3 3395 3601 3602 +3 3395 3602 3396 +3 3396 3602 3397 +3 3397 3602 3398 +3 3398 3602 3399 +3 3399 3602 3603 +3 3399 3603 3400 +3 3400 3603 3604 +3 3400 3604 3605 +3 3400 3605 3606 +3 3400 3606 3401 +3 3401 3606 3607 +3 3401 3607 3608 +3 3401 3608 3402 +3 3402 3608 3403 +3 3403 3608 3609 +3 3403 3609 3610 +3 3403 3610 3404 +3 3404 3610 3405 +3 3405 3610 3611 +3 3405 3611 3406 +3 3406 3611 3612 +3 3406 3612 3407 +3 3407 3612 3613 +3 3407 3613 3408 +3 3408 3613 3614 +3 3408 3614 3409 +3 3409 3614 3615 +3 3409 3615 3410 +3 3410 3615 3616 +3 3410 3616 3617 +3 3410 3617 3411 +3 3411 3617 3618 +3 3411 3618 3412 +3 3412 3618 3619 +3 3412 3619 3413 +3 3413 3619 3620 +3 3413 3620 3414 +3 3414 3620 3415 +3 3415 3620 3621 +3 3415 3621 3416 +3 3416 3621 3622 +3 3416 3622 3417 +3 3417 3622 3623 +3 3417 3623 3418 +3 3418 3623 3624 +3 3418 3624 3625 +3 3418 3625 3419 +3 3419 3625 3420 +3 3420 3625 3626 +3 3420 3626 3421 +3 3421 3626 3627 +3 3421 3627 3628 +3 3421 3628 3422 +3 3422 3628 3629 +3 3422 3629 3423 +3 3423 3629 3630 +3 3423 3630 3424 +3 3424 3630 3631 +3 3424 3631 3425 +3 3425 3631 3426 +3 3426 3631 3632 +3 3426 3632 3427 +3 3427 3632 3633 +3 3427 3633 3428 +3 3428 3633 3634 +3 3428 3634 3429 +3 3429 3634 3635 +3 3429 3635 3636 +3 3429 3636 3430 +3 3430 3636 3431 +3 3431 3636 3637 +3 3431 3637 3432 +3 3432 3637 3638 +3 3432 3638 3639 +3 3432 3639 3433 +3 3433 3639 3640 +3 3433 3640 3434 +3 3434 3640 3641 +3 3434 3641 3435 +3 3435 3641 3642 +3 3435 3642 3436 +3 3436 3642 3643 +3 3436 3643 3437 +3 3437 3643 3644 +3 3437 3644 3438 +3 3438 3644 3645 +3 3438 3645 3439 +3 3439 3645 3646 +3 3439 3646 3440 +3 3440 3646 3647 +3 3440 3647 3648 +3 3440 3648 3441 +3 3441 3648 3442 +3 3442 3648 3443 +3 3443 3648 3649 +3 3443 3649 3650 +3 3443 3650 3445 +3 3445 3650 3447 +3 3447 3650 3651 +3 3447 3651 3448 +3 3448 3651 3652 +3 3448 3652 3653 +3 3448 3653 3449 +3 3449 3653 3654 +3 3449 3654 3450 +3 3450 3654 3655 +3 3450 3655 3656 +3 3450 3656 3451 +3 3451 3656 3657 +3 3451 3657 3452 +3 3452 3657 3658 +3 3452 3658 3453 +3 3453 3658 3659 +3 3453 3659 3454 +3 3454 3659 3455 +3 3455 3659 3660 +3 3455 3660 3661 +3 3455 3661 3456 +3 3456 3661 3662 +3 3456 3662 3457 +3 3457 3662 3663 +3 3457 3663 3458 +3 3458 3663 3664 +3 3458 3664 3459 +3 3459 3664 3665 +3 3459 3665 3460 +3 3460 3665 3666 +3 3460 3666 3461 +3 3461 3666 3667 +3 3461 3667 3462 +3 3462 3667 3668 +3 3462 3668 3463 +3 3463 3668 3669 +3 3463 3669 3464 +3 3464 3669 3670 +3 3464 3670 3465 +3 3465 3670 3671 +3 3465 3671 3466 +3 3466 3671 3672 +3 3466 3672 3467 +3 3467 3672 3673 +3 3467 3673 3468 +3 3468 3673 3674 +3 3468 3674 3469 +3 3469 3674 3470 +3 3470 3674 3675 +3 3470 3675 3676 +3 3470 3676 3471 +3 3471 3676 3677 +3 3471 3677 3678 +3 3471 3678 3472 +3 3472 3678 3679 +3 3472 3679 3680 +3 3472 3680 3473 +3 3473 3680 3474 +3 3474 3680 3681 +3 3474 3681 3475 +3 3475 3681 3682 +3 3475 3682 3683 +3 3475 3683 3476 +3 3476 3683 3477 +3 3477 3683 3684 +3 3477 3684 3685 +3 3477 3685 3478 +3 3478 3685 3479 +3 3479 3685 3686 +3 3479 3686 3480 +3 3480 3686 3687 +3 3480 3687 3688 +3 3480 3688 3481 +3 3481 3688 3482 +3 3482 3688 3689 +3 3482 3689 3483 +3 3483 3689 3690 +3 3483 3690 3691 +3 3483 3691 3484 +3 3484 3691 3692 +3 3484 3692 3485 +3 3485 3692 3486 +3 3486 3692 3693 +3 3486 3693 3694 +3 3486 3694 3695 +3 3486 3695 3487 +3 3487 3695 3696 +3 3487 3696 3488 +3 3488 3696 3697 +3 3488 3697 3489 +3 3489 3697 3698 +3 3489 3698 3490 +3 3490 3698 3699 +3 3490 3699 3700 +3 3490 3700 3491 +3 3491 3700 3492 +3 3492 3700 3701 +3 3492 3701 3493 +3 3493 3701 3702 +3 3493 3702 3494 +3 3494 3702 3703 +3 3494 3703 3495 +3 3495 3703 3704 +3 3495 3704 3496 +3 3496 3704 3705 +3 3496 3705 3497 +3 3497 3705 3706 +3 3497 3706 3498 +3 3498 3706 3707 +3 3498 3707 3499 +3 3499 3707 3708 +3 3499 3708 3500 +3 3500 3708 3709 +3 3500 3709 3710 +3 3500 3710 3501 +3 3501 3710 3711 +3 3501 3711 3502 +3 3502 3711 3503 +3 3503 3711 3712 +3 3503 3712 3713 +3 3503 3713 3714 +3 3503 3714 3504 +3 3504 3714 3715 +3 3504 3715 3505 +3 3505 3715 3716 +3 3505 3716 3507 +3 3507 3716 3508 +3 3508 3716 3717 +3 3508 3717 3509 +3 3509 3717 3718 +3 3509 3718 3510 +3 3510 3718 3719 +3 3510 3719 3511 +3 3511 3719 3720 +3 3511 3720 3512 +3 3512 3720 3721 +3 3512 3721 3513 +3 3513 3721 3722 +3 3513 3722 3514 +3 3514 3722 3723 +3 3514 3723 3515 +3 3515 3723 3724 +3 3515 3724 3516 +3 3516 3724 3725 +3 3516 3725 3517 +3 3517 3725 3726 +3 3517 3726 3518 +3 3518 3726 3727 +3 3518 3727 3519 +3 3519 3727 3728 +3 3519 3728 3520 +3 3520 3728 3729 +3 3520 3729 3521 +3 3521 3729 3730 +3 3521 3730 3522 +3 3522 3730 3731 +3 3522 3731 3523 +3 3523 3731 3732 +3 3523 3732 3733 +3 3523 3733 3524 +3 3524 3733 3525 +3 3525 3733 3734 +3 3525 3734 3735 +3 3525 3735 3526 +3 3526 3735 3736 +3 3526 3736 3527 +3 3527 3736 3528 +3 3528 3736 3737 +3 3528 3737 3738 +3 3528 3738 3529 +3 3529 3738 3739 +3 3529 3739 3530 +3 3530 3739 3740 +3 3530 3740 3531 +3 3531 3740 3741 +3 3531 3741 3532 +3 3532 3741 3533 +3 3533 3741 3742 +3 3533 3742 3743 +3 3533 3743 3534 +3 3534 3743 3744 +3 3534 3744 3535 +3 3535 3744 3745 +3 3535 3745 3536 +3 3536 3745 3746 +3 3536 3746 3537 +3 3537 3746 3747 +3 3537 3747 3748 +3 3537 3748 3749 +3 3537 3749 3538 +3 3538 3749 3539 +3 3539 3749 3750 +3 3539 3750 3541 +3 3541 3750 3751 +3 3541 3751 3542 +3 3542 3751 3752 +3 3542 3752 3543 +3 3543 3752 3753 +3 3543 3753 3754 +3 3543 3754 3544 +3 3544 3754 3545 +3 3545 3754 3755 +3 3545 3755 3546 +3 3546 3755 3756 +3 3546 3756 3547 +3 3547 3756 3757 +3 3547 3757 3548 +3 3548 3757 3758 +3 3548 3758 3549 +3 3549 3758 3759 +3 3549 3759 3550 +3 3550 3759 3760 +3 3550 3760 3761 +3 3550 3761 3762 +3 3550 3762 3551 +3 3551 3762 3552 +3 3552 3762 3763 +3 3552 3763 3553 +3 3553 3763 3764 +3 3553 3764 3554 +3 3554 3764 3765 +3 3554 3765 3555 +3 3555 3765 3766 +3 3555 3766 3556 +3 3556 3766 3767 +3 3556 3767 3557 +3 3557 3767 3768 +3 3557 3768 3558 +3 3558 3768 3769 +3 3558 3769 3559 +3 3559 3769 3770 +3 3559 3770 3771 +3 3559 3771 3560 +3 3560 3771 3772 +3 3560 3772 3561 +3 3561 3772 3773 +3 3561 3773 3562 +3 3562 3773 3774 +3 3562 3774 3563 +3 3563 3774 3775 +3 3563 3775 3564 +3 3564 3775 3776 +3 3564 3776 3565 +3 3565 3776 3777 +3 3565 3777 3566 +3 3566 3777 3778 +3 3566 3778 3567 +3 3567 3778 3779 +3 3567 3779 3568 +3 3568 3779 3780 +3 3568 3780 3569 +3 3569 3780 3781 +3 3569 3781 3570 +3 3570 3781 3782 +3 3570 3782 3571 +3 3571 3782 3783 +3 3571 3783 3572 +3 3572 3783 3784 +3 3572 3784 3573 +3 3573 3784 3785 +3 3573 3785 3786 +3 3573 3786 3574 +3 3574 3786 3575 +3 3575 3786 3787 +3 3575 3787 3576 +3 3576 3787 3788 +3 3576 3788 3577 +3 3577 3788 3789 +3 3577 3789 3578 +3 3578 3789 3790 +3 3578 3790 3791 +3 3578 3791 3579 +3 3579 3791 3580 +3 3580 3791 3792 +3 3580 3792 3581 +3 3581 3792 3793 +3 3581 3793 3582 +3 3582 3793 3794 +3 3582 3794 3583 +3 3583 3794 3795 +3 3583 3795 3584 +3 3584 3795 3796 +3 3584 3796 3797 +3 3584 3797 3585 +3 3585 3797 3798 +3 3585 3798 3586 +3 3586 3798 3587 +3 3587 3798 3799 +3 3587 3799 3800 +3 3587 3800 3801 +3 3587 3801 3588 +3 3588 3801 3589 +3 3589 3801 3590 +3 3590 3801 3802 +3 3590 3802 3803 +3 3590 3803 3591 +3 3591 3803 3804 +3 3591 3804 3592 +3 3592 3804 3805 +3 3592 3805 3593 +3 3593 3805 3806 +3 3593 3806 3594 +3 3594 3806 3807 +3 3594 3807 3595 +3 3595 3807 3596 +3 3596 3807 3808 +3 3596 3808 3809 +3 3596 3809 3597 +3 3597 3809 3598 +3 3598 3809 3810 +3 3598 3810 3599 +3 3599 3810 3811 +3 3599 3811 3812 +3 3599 3812 3600 +3 3600 3812 3813 +3 3600 3813 3601 +3 3601 3813 3814 +3 3601 3814 3603 +3 3603 3814 3604 +3 3604 3814 3815 +3 3604 3815 3605 +3 3605 3815 3816 +3 3605 3816 3817 +3 3605 3817 3607 +3 3607 3817 3818 +3 3607 3818 3819 +3 3607 3819 3608 +3 3608 3819 3609 +3 3609 3819 3820 +3 3609 3820 3611 +3 3611 3820 3821 +3 3611 3821 3612 +3 3612 3821 3822 +3 3612 3822 3613 +3 3613 3822 3823 +3 3613 3823 3614 +3 3614 3823 3824 +3 3614 3824 3615 +3 3615 3824 3825 +3 3615 3825 3616 +3 3616 3825 3826 +3 3616 3826 3827 +3 3616 3827 3617 +3 3617 3827 3828 +3 3617 3828 3618 +3 3618 3828 3829 +3 3618 3829 3619 +3 3619 3829 3830 +3 3619 3830 3620 +3 3620 3830 3621 +3 3621 3830 3831 +3 3621 3831 3622 +3 3622 3831 3832 +3 3622 3832 3623 +3 3623 3832 3833 +3 3623 3833 3624 +3 3624 3833 3834 +3 3624 3834 3835 +3 3624 3835 3625 +3 3625 3835 3626 +3 3626 3835 3836 +3 3626 3836 3627 +3 3627 3836 3837 +3 3627 3837 3838 +3 3627 3838 3628 +3 3628 3838 3839 +3 3628 3839 3629 +3 3629 3839 3840 +3 3629 3840 3630 +3 3630 3840 3841 +3 3630 3841 3631 +3 3631 3841 3632 +3 3632 3841 3842 +3 3632 3842 3843 +3 3632 3843 3633 +3 3633 3843 3844 +3 3633 3844 3634 +3 3634 3844 3845 +3 3634 3845 3846 +3 3634 3846 3635 +3 3635 3846 3636 +3 3636 3846 3637 +3 3637 3846 3847 +3 3637 3847 3638 +3 3638 3847 3848 +3 3638 3848 3639 +3 3639 3848 3849 +3 3639 3849 3850 +3 3639 3850 3851 +3 3639 3851 3640 +3 3640 3851 3852 +3 3640 3852 3641 +3 3641 3852 3853 +3 3641 3853 3642 +3 3642 3853 3854 +3 3642 3854 3643 +3 3643 3854 3855 +3 3643 3855 3644 +3 3644 3855 3856 +3 3644 3856 3857 +3 3644 3857 3645 +3 3645 3857 3858 +3 3645 3858 3859 +3 3645 3859 3646 +3 3646 3859 3860 +3 3646 3860 3861 +3 3646 3861 3647 +3 3647 3861 3862 +3 3647 3862 3863 +3 3647 3863 3649 +3 3649 3863 3651 +3 3651 3863 3862 +3 3651 3862 3652 +3 3652 3862 3864 +3 3652 3864 3865 +3 3652 3865 3653 +3 3653 3865 3866 +3 3653 3866 3654 +3 3654 3866 3655 +3 3655 3866 3867 +3 3655 3867 3656 +3 3656 3867 3868 +3 3656 3868 3657 +3 3657 3868 3869 +3 3657 3869 3658 +3 3658 3869 3870 +3 3658 3870 3659 +3 3659 3870 3871 +3 3659 3871 3660 +3 3660 3871 3872 +3 3660 3872 3661 +3 3661 3872 3873 +3 3661 3873 3662 +3 3662 3873 3874 +3 3662 3874 3875 +3 3662 3875 3663 +3 3663 3875 3876 +3 3663 3876 3664 +3 3664 3876 3877 +3 3664 3877 3665 +3 3665 3877 3878 +3 3665 3878 3666 +3 3666 3878 3879 +3 3666 3879 3667 +3 3667 3879 3880 +3 3667 3880 3668 +3 3668 3880 3881 +3 3668 3881 3669 +3 3669 3881 3670 +3 3670 3881 3882 +3 3670 3882 3671 +3 3671 3882 3883 +3 3671 3883 3884 +3 3671 3884 3672 +3 3672 3884 3885 +3 3672 3885 3673 +3 3673 3885 3886 +3 3673 3886 3674 +3 3674 3886 3675 +3 3675 3886 3887 +3 3675 3887 3888 +3 3675 3888 3676 +3 3676 3888 3889 +3 3676 3889 3677 +3 3677 3889 3890 +3 3677 3890 3891 +3 3677 3891 3678 +3 3678 3891 3679 +3 3679 3891 3892 +3 3679 3892 3893 +3 3679 3893 3681 +3 3681 3893 3682 +3 3682 3893 3894 +3 3682 3894 3895 +3 3682 3895 3896 +3 3682 3896 3683 +3 3683 3896 3684 +3 3684 3896 3897 +3 3684 3897 3898 +3 3684 3898 3685 +3 3685 3898 3686 +3 3686 3898 3899 +3 3686 3899 3687 +3 3687 3899 3900 +3 3687 3900 3688 +3 3688 3900 3901 +3 3688 3901 3689 +3 3689 3901 3902 +3 3689 3902 3690 +3 3690 3902 3903 +3 3690 3903 3691 +3 3691 3903 3904 +3 3691 3904 3693 +3 3693 3904 3905 +3 3693 3905 3906 +3 3693 3906 3907 +3 3693 3907 3694 +3 3694 3907 3908 +3 3694 3908 3909 +3 3694 3909 3695 +3 3695 3909 3910 +3 3695 3910 3696 +3 3696 3910 3911 +3 3696 3911 3697 +3 3697 3911 3912 +3 3697 3912 3698 +3 3698 3912 3913 +3 3698 3913 3699 +3 3699 3913 3914 +3 3699 3914 3915 +3 3699 3915 3700 +3 3700 3915 3701 +3 3701 3915 3916 +3 3701 3916 3702 +3 3702 3916 3917 +3 3702 3917 3703 +3 3703 3917 3918 +3 3703 3918 3704 +3 3704 3918 3919 +3 3704 3919 3705 +3 3705 3919 3920 +3 3705 3920 3706 +3 3706 3920 3921 +3 3706 3921 3707 +3 3707 3921 3922 +3 3707 3922 3708 +3 3708 3922 3923 +3 3708 3923 3709 +3 3709 3923 3924 +3 3709 3924 3925 +3 3709 3925 3710 +3 3710 3925 3926 +3 3710 3926 3711 +3 3711 3926 3712 +3 3712 3926 3927 +3 3712 3927 3928 +3 3712 3928 3713 +3 3713 3928 3929 +3 3713 3929 3930 +3 3713 3930 3714 +3 3714 3930 3931 +3 3714 3931 3932 +3 3714 3932 3715 +3 3715 3932 3933 +3 3715 3933 3934 +3 3715 3934 3717 +3 3717 3934 3718 +3 3718 3934 3935 +3 3718 3935 3719 +3 3719 3935 3936 +3 3719 3936 3720 +3 3720 3936 3937 +3 3720 3937 3721 +3 3721 3937 3938 +3 3721 3938 3722 +3 3722 3938 3939 +3 3722 3939 3723 +3 3723 3939 3940 +3 3723 3940 3724 +3 3724 3940 3941 +3 3724 3941 3725 +3 3725 3941 3942 +3 3725 3942 3726 +3 3726 3942 3943 +3 3726 3943 3727 +3 3727 3943 3944 +3 3727 3944 3728 +3 3728 3944 3945 +3 3728 3945 3729 +3 3729 3945 3946 +3 3729 3946 3730 +3 3730 3946 3947 +3 3730 3947 3731 +3 3731 3947 3948 +3 3731 3948 3732 +3 3732 3948 3949 +3 3732 3949 3734 +3 3734 3949 3950 +3 3734 3950 3735 +3 3735 3950 3951 +3 3735 3951 3952 +3 3735 3952 3736 +3 3736 3952 3737 +3 3737 3952 3953 +3 3737 3953 3954 +3 3737 3954 3738 +3 3738 3954 3955 +3 3738 3955 3739 +3 3739 3955 3956 +3 3739 3956 3740 +3 3740 3956 3957 +3 3740 3957 3741 +3 3741 3957 3742 +3 3742 3957 3958 +3 3742 3958 3959 +3 3742 3959 3743 +3 3743 3959 3960 +3 3743 3960 3744 +3 3744 3960 3961 +3 3744 3961 3745 +3 3745 3961 3962 +3 3745 3962 3746 +3 3746 3962 3963 +3 3746 3963 3747 +3 3747 3963 3964 +3 3747 3964 3965 +3 3747 3965 3966 +3 3747 3966 3748 +3 3748 3966 3967 +3 3748 3967 3749 +3 3749 3967 3750 +3 3750 3967 3968 +3 3750 3968 3751 +3 3751 3968 3969 +3 3751 3969 3752 +3 3752 3969 3970 +3 3752 3970 3753 +3 3753 3970 3971 +3 3753 3971 3972 +3 3753 3972 3754 +3 3754 3972 3973 +3 3754 3973 3974 +3 3754 3974 3755 +3 3755 3974 3756 +3 3756 3974 3975 +3 3756 3975 3976 +3 3756 3976 3977 +3 3756 3977 3757 +3 3757 3977 3758 +3 3758 3977 3978 +3 3758 3978 3759 +3 3759 3978 3979 +3 3759 3979 3760 +3 3760 3979 3980 +3 3760 3980 3981 +3 3760 3981 3761 +3 3761 3981 3982 +3 3761 3982 3762 +3 3762 3982 3983 +3 3762 3983 3763 +3 3763 3983 3984 +3 3763 3984 3764 +3 3764 3984 3985 +3 3764 3985 3765 +3 3765 3985 3986 +3 3765 3986 3766 +3 3766 3986 3987 +3 3766 3987 3767 +3 3767 3987 3988 +3 3767 3988 3768 +3 3768 3988 3989 +3 3768 3989 3769 +3 3769 3989 3990 +3 3769 3990 3991 +3 3769 3991 3770 +3 3770 3991 3992 +3 3770 3992 3771 +3 3771 3992 3993 +3 3771 3993 3772 +3 3772 3993 3994 +3 3772 3994 3773 +3 3773 3994 3995 +3 3773 3995 3774 +3 3774 3995 3996 +3 3774 3996 3775 +3 3775 3996 3997 +3 3775 3997 3776 +3 3776 3997 3998 +3 3776 3998 3777 +3 3777 3998 3999 +3 3777 3999 3778 +3 3778 3999 4000 +3 3778 4000 3779 +3 3779 4000 4001 +3 3779 4001 3780 +3 3780 4001 4002 +3 3780 4002 3781 +3 3781 4002 4003 +3 3781 4003 3782 +3 3782 4003 4004 +3 3782 4004 3783 +3 3783 4004 4005 +3 3783 4005 3784 +3 3784 4005 4006 +3 3784 4006 3785 +3 3785 4006 4007 +3 3785 4007 4008 +3 3785 4008 3786 +3 3786 4008 3787 +3 3787 4008 4009 +3 3787 4009 3788 +3 3788 4009 4010 +3 3788 4010 3789 +3 3789 4010 4011 +3 3789 4011 3790 +3 3790 4011 4012 +3 3790 4012 4013 +3 3790 4013 3791 +3 3791 4013 3792 +3 3792 4013 4014 +3 3792 4014 3793 +3 3793 4014 4015 +3 3793 4015 3794 +3 3794 4015 4016 +3 3794 4016 3795 +3 3795 4016 4017 +3 3795 4017 3796 +3 3796 4017 4018 +3 3796 4018 4019 +3 3796 4019 3797 +3 3797 4019 4020 +3 3797 4020 3798 +3 3798 4020 3799 +3 3799 4020 4021 +3 3799 4021 4022 +3 3799 4022 3800 +3 3800 4022 4023 +3 3800 4023 3802 +3 3802 4023 4024 +3 3802 4024 4025 +3 3802 4025 3803 +3 3803 4025 4026 +3 3803 4026 3804 +3 3804 4026 4027 +3 3804 4027 3805 +3 3805 4027 4028 +3 3805 4028 3806 +3 3806 4028 4029 +3 3806 4029 3807 +3 3807 4029 3808 +3 3808 4029 4030 +3 3808 4030 4031 +3 3808 4031 3809 +3 3809 4031 3810 +3 3810 4031 4032 +3 3810 4032 3811 +3 3811 4032 4033 +3 3811 4033 4034 +3 3811 4034 3812 +3 3812 4034 4035 +3 3812 4035 3813 +3 3813 4035 4036 +3 3813 4036 3814 +3 3814 4036 4037 +3 3814 4037 3815 +3 3815 4037 3816 +3 3816 4037 4038 +3 3816 4038 4039 +3 3816 4039 3817 +3 3817 4039 3818 +3 3818 4039 4040 +3 3818 4040 4041 +3 3818 4041 4042 +3 3818 4042 3819 +3 3819 4042 3820 +3 3820 4042 4043 +3 3820 4043 3821 +3 3821 4043 4044 +3 3821 4044 3822 +3 3822 4044 4045 +3 3822 4045 3823 +3 3823 4045 4046 +3 3823 4046 3824 +3 3824 4046 4047 +3 3824 4047 3825 +3 3825 4047 4048 +3 3825 4048 3826 +3 3826 4048 4049 +3 3826 4049 4050 +3 3826 4050 3827 +3 3827 4050 4051 +3 3827 4051 3828 +3 3828 4051 4052 +3 3828 4052 3829 +3 3829 4052 4053 +3 3829 4053 3830 +3 3830 4053 3831 +3 3831 4053 4054 +3 3831 4054 3832 +3 3832 4054 4055 +3 3832 4055 3833 +3 3833 4055 4056 +3 3833 4056 3834 +3 3834 4056 4057 +3 3834 4057 4058 +3 3834 4058 3835 +3 3835 4058 3836 +3 3836 4058 4059 +3 3836 4059 3837 +3 3837 4059 4060 +3 3837 4060 4061 +3 3837 4061 4062 +3 3837 4062 3838 +3 3838 4062 4063 +3 3838 4063 3839 +3 3839 4063 4064 +3 3839 4064 3840 +3 3840 4064 3842 +3 3842 4064 4065 +3 3842 4065 4066 +3 3842 4066 3843 +3 3843 4066 4067 +3 3843 4067 4068 +3 3843 4068 3844 +3 3844 4068 3845 +3 3845 4068 4069 +3 3845 4069 3847 +3 3847 4069 4070 +3 3847 4070 3848 +3 3848 4070 4071 +3 3848 4071 4072 +3 3848 4072 3849 +3 3849 4072 4073 +3 3849 4073 3850 +3 3850 4073 4074 +3 3850 4074 4075 +3 3850 4075 3851 +3 3851 4075 4076 +3 3851 4076 3852 +3 3852 4076 4077 +3 3852 4077 4078 +3 3852 4078 3853 +3 3853 4078 4079 +3 3853 4079 4080 +3 3853 4080 3854 +3 3854 4080 4081 +3 3854 4081 4082 +3 3854 4082 3855 +3 3855 4082 3856 +3 3856 4082 4083 +3 3856 4083 4084 +3 3856 4084 3858 +3 3858 4084 4085 +3 3858 4085 3860 +3 3860 4085 3864 +3 3864 4085 4086 +3 3864 4086 3865 +3 3865 4086 4087 +3 3865 4087 3866 +3 3866 4087 3867 +3 3867 4087 4088 +3 3867 4088 3868 +3 3868 4088 3869 +3 3869 4088 4089 +3 3869 4089 3870 +3 3870 4089 4090 +3 3870 4090 4091 +3 3870 4091 3871 +3 3871 4091 4092 +3 3871 4092 4093 +3 3871 4093 3872 +3 3872 4093 4094 +3 3872 4094 4095 +3 3872 4095 3873 +3 3873 4095 3874 +3 3874 4095 4096 +3 3874 4096 3875 +3 3875 4096 4097 +3 3875 4097 4098 +3 3875 4098 3876 +3 3876 4098 4099 +3 3876 4099 3877 +3 3877 4099 4100 +3 3877 4100 4101 +3 3877 4101 3878 +3 3878 4101 4102 +3 3878 4102 3879 +3 3879 4102 4103 +3 3879 4103 3880 +3 3880 4103 4104 +3 3880 4104 3881 +3 3881 4104 4105 +3 3881 4105 3882 +3 3882 4105 4106 +3 3882 4106 3883 +3 3883 4106 4107 +3 3883 4107 3884 +3 3884 4107 4108 +3 3884 4108 4109 +3 3884 4109 3885 +3 3885 4109 3886 +3 3886 4109 3887 +3 3887 4109 4110 +3 3887 4110 3888 +3 3888 4110 4111 +3 3888 4111 4112 +3 3888 4112 3889 +3 3889 4112 4113 +3 3889 4113 3890 +3 3890 4113 4114 +3 3890 4114 3891 +3 3891 4114 4115 +3 3891 4115 3892 +3 3892 4115 4116 +3 3892 4116 3893 +3 3893 4116 4117 +3 3893 4117 3894 +3 3894 4117 3895 +3 3895 4117 4118 +3 3895 4118 4119 +3 3895 4119 3896 +3 3896 4119 3897 +3 3897 4119 4120 +3 3897 4120 3898 +3 3898 4120 3899 +3 3899 4120 3900 +3 3900 4120 4121 +3 3900 4121 3901 +3 3901 4121 4122 +3 3901 4122 3902 +3 3902 4122 4123 +3 3902 4123 3903 +3 3903 4123 4124 +3 3903 4124 3904 +3 3904 4124 3905 +3 3905 4124 4125 +3 3905 4125 4126 +3 3905 4126 3906 +3 3906 4126 4127 +3 3906 4127 3907 +3 3907 4127 4128 +3 3907 4128 4129 +3 3907 4129 3908 +3 3908 4129 4130 +3 3908 4130 4131 +3 3908 4131 3909 +3 3909 4131 4132 +3 3909 4132 3910 +3 3910 4132 4133 +3 3910 4133 3911 +3 3911 4133 4134 +3 3911 4134 3912 +3 3912 4134 4135 +3 3912 4135 3913 +3 3913 4135 4136 +3 3913 4136 3914 +3 3914 4136 4137 +3 3914 4137 4138 +3 3914 4138 3915 +3 3915 4138 4139 +3 3915 4139 3916 +3 3916 4139 4140 +3 3916 4140 4141 +3 3916 4141 3917 +3 3917 4141 4142 +3 3917 4142 3918 +3 3918 4142 4143 +3 3918 4143 3919 +3 3919 4143 4144 +3 3919 4144 3920 +3 3920 4144 4145 +3 3920 4145 3921 +3 3921 4145 4146 +3 3921 4146 3922 +3 3922 4146 4147 +3 3922 4147 3923 +3 3923 4147 4148 +3 3923 4148 3924 +3 3924 4148 4149 +3 3924 4149 4150 +3 3924 4150 3925 +3 3925 4150 4151 +3 3925 4151 3926 +3 3926 4151 3927 +3 3927 4151 4152 +3 3927 4152 4153 +3 3927 4153 3928 +3 3928 4153 4154 +3 3928 4154 3929 +3 3929 4154 4155 +3 3929 4155 4156 +3 3929 4156 3930 +3 3930 4156 4157 +3 3930 4157 3931 +3 3931 4157 4158 +3 3931 4158 4159 +3 3931 4159 3932 +3 3932 4159 3933 +3 3933 4159 4160 +3 3933 4160 4161 +3 3933 4161 3934 +3 3934 4161 3935 +3 3935 4161 4162 +3 3935 4162 3936 +3 3936 4162 3937 +3 3937 4162 4163 +3 3937 4163 3938 +3 3938 4163 4164 +3 3938 4164 3939 +3 3939 4164 4165 +3 3939 4165 3940 +3 3940 4165 4166 +3 3940 4166 3941 +3 3941 4166 4167 +3 3941 4167 3942 +3 3942 4167 4168 +3 3942 4168 3943 +3 3943 4168 4169 +3 3943 4169 3944 +3 3944 4169 4170 +3 3944 4170 3945 +3 3945 4170 4171 +3 3945 4171 3946 +3 3946 4171 4172 +3 3946 4172 3947 +3 3947 4172 4173 +3 3947 4173 3948 +3 3948 4173 4174 +3 3948 4174 3949 +3 3949 4174 4175 +3 3949 4175 4176 +3 3949 4176 3950 +3 3950 4176 4177 +3 3950 4177 3951 +3 3951 4177 4178 +3 3951 4178 3953 +3 3953 4178 4179 +3 3953 4179 3954 +3 3954 4179 4180 +3 3954 4180 3955 +3 3955 4180 3956 +3 3956 4180 4181 +3 3956 4181 3957 +3 3957 4181 3958 +3 3958 4181 4182 +3 3958 4182 4183 +3 3958 4183 3959 +3 3959 4183 4184 +3 3959 4184 3960 +3 3960 4184 4185 +3 3960 4185 3961 +3 3961 4185 4186 +3 3961 4186 3962 +3 3962 4186 4187 +3 3962 4187 3963 +3 3963 4187 4188 +3 3963 4188 3964 +3 3964 4188 4189 +3 3964 4189 4190 +3 3964 4190 4191 +3 3964 4191 3965 +3 3965 4191 4192 +3 3965 4192 4193 +3 3965 4193 3966 +3 3966 4193 3968 +3 3968 4193 4194 +3 3968 4194 3969 +3 3969 4194 4195 +3 3969 4195 3970 +3 3970 4195 3971 +3 3971 4195 4196 +3 3971 4196 4197 +3 3971 4197 4198 +3 3971 4198 3972 +3 3972 4198 4199 +3 3972 4199 3973 +3 3973 4199 3974 +3 3974 4199 3975 +3 3975 4199 4200 +3 3975 4200 4201 +3 3975 4201 3976 +3 3976 4201 4202 +3 3976 4202 3977 +3 3977 4202 4203 +3 3977 4203 3979 +3 3979 4203 3980 +3 3980 4203 4202 +3 3980 4202 4204 +3 3980 4204 3981 +3 3981 4204 4205 +3 3981 4205 4206 +3 3981 4206 3982 +3 3982 4206 4207 +3 3982 4207 3984 +3 3984 4207 4208 +3 3984 4208 3985 +3 3985 4208 4209 +3 3985 4209 3986 +3 3986 4209 4210 +3 3986 4210 3987 +3 3987 4210 4211 +3 3987 4211 3988 +3 3988 4211 4212 +3 3988 4212 3989 +3 3989 4212 4213 +3 3989 4213 3990 +3 3990 4213 4214 +3 3990 4214 4215 +3 3990 4215 3991 +3 3991 4215 4216 +3 3991 4216 3992 +3 3992 4216 4217 +3 3992 4217 3993 +3 3993 4217 4218 +3 3993 4218 3994 +3 3994 4218 4219 +3 3994 4219 3995 +3 3995 4219 4220 +3 3995 4220 3996 +3 3996 4220 4221 +3 3996 4221 3997 +3 3997 4221 4222 +3 3997 4222 3998 +3 3998 4222 4223 +3 3998 4223 3999 +3 3999 4223 4224 +3 3999 4224 4000 +3 4000 4224 4225 +3 4000 4225 4001 +3 4001 4225 4226 +3 4001 4226 4002 +3 4002 4226 4227 +3 4002 4227 4003 +3 4003 4227 4228 +3 4003 4228 4004 +3 4004 4228 4229 +3 4004 4229 4005 +3 4005 4229 4230 +3 4005 4230 4006 +3 4006 4230 4231 +3 4006 4231 4007 +3 4007 4231 4232 +3 4007 4232 4233 +3 4007 4233 4008 +3 4008 4233 4009 +3 4009 4233 4234 +3 4009 4234 4010 +3 4010 4234 4235 +3 4010 4235 4011 +3 4011 4235 4236 +3 4011 4236 4012 +3 4012 4236 4237 +3 4012 4237 4238 +3 4012 4238 4013 +3 4013 4238 4014 +3 4014 4238 4239 +3 4014 4239 4015 +3 4015 4239 4240 +3 4015 4240 4016 +3 4016 4240 4241 +3 4016 4241 4017 +3 4017 4241 4242 +3 4017 4242 4018 +3 4018 4242 4243 +3 4018 4243 4244 +3 4018 4244 4019 +3 4019 4244 4245 +3 4019 4245 4020 +3 4020 4245 4021 +3 4021 4245 4246 +3 4021 4246 4247 +3 4021 4247 4022 +3 4022 4247 4248 +3 4022 4248 4023 +3 4023 4248 4024 +3 4024 4248 4249 +3 4024 4249 4250 +3 4024 4250 4025 +3 4025 4250 4251 +3 4025 4251 4026 +3 4026 4251 4252 +3 4026 4252 4027 +3 4027 4252 4253 +3 4027 4253 4028 +3 4028 4253 4254 +3 4028 4254 4029 +3 4029 4254 4030 +3 4030 4254 4255 +3 4030 4255 4256 +3 4030 4256 4031 +3 4031 4256 4032 +3 4032 4256 4257 +3 4032 4257 4033 +3 4033 4257 4258 +3 4033 4258 4259 +3 4033 4259 4034 +3 4034 4259 4260 +3 4034 4260 4035 +3 4035 4260 4261 +3 4035 4261 4036 +3 4036 4261 4037 +3 4037 4261 4038 +3 4038 4261 4262 +3 4038 4262 4263 +3 4038 4263 4039 +3 4039 4263 4040 +3 4040 4263 4264 +3 4040 4264 4265 +3 4040 4265 4041 +3 4041 4265 4266 +3 4041 4266 4267 +3 4041 4267 4042 +3 4042 4267 4043 +3 4043 4267 4268 +3 4043 4268 4044 +3 4044 4268 4269 +3 4044 4269 4045 +3 4045 4269 4270 +3 4045 4270 4046 +3 4046 4270 4271 +3 4046 4271 4047 +3 4047 4271 4272 +3 4047 4272 4048 +3 4048 4272 4273 +3 4048 4273 4049 +3 4049 4273 4274 +3 4049 4274 4275 +3 4049 4275 4276 +3 4049 4276 4050 +3 4050 4276 4051 +3 4051 4276 4277 +3 4051 4277 4278 +3 4051 4278 4052 +3 4052 4278 4279 +3 4052 4279 4053 +3 4053 4279 4054 +3 4054 4279 4280 +3 4054 4280 4055 +3 4055 4280 4281 +3 4055 4281 4056 +3 4056 4281 4282 +3 4056 4282 4057 +3 4057 4282 4283 +3 4057 4283 4058 +3 4058 4283 4284 +3 4058 4284 4059 +3 4059 4284 4285 +3 4059 4285 4060 +3 4060 4285 4286 +3 4060 4286 4287 +3 4060 4287 4061 +3 4061 4287 4288 +3 4061 4288 4062 +3 4062 4288 4289 +3 4062 4289 4290 +3 4062 4290 4063 +3 4063 4290 4065 +3 4065 4290 4291 +3 4065 4291 4292 +3 4065 4292 4066 +3 4066 4292 4293 +3 4066 4293 4294 +3 4066 4294 4067 +3 4067 4294 4295 +3 4067 4295 4068 +3 4068 4295 4296 +3 4068 4296 4297 +3 4068 4297 4069 +3 4069 4297 4070 +3 4070 4297 4298 +3 4070 4298 4071 +3 4071 4298 4299 +3 4071 4299 4300 +3 4071 4300 4072 +3 4072 4300 4301 +3 4072 4301 4073 +3 4073 4301 4302 +3 4073 4302 4074 +3 4074 4302 4303 +3 4074 4303 4304 +3 4074 4304 4075 +3 4075 4304 4305 +3 4075 4305 4076 +3 4076 4305 4077 +3 4077 4305 4306 +3 4077 4306 4307 +3 4077 4307 4078 +3 4078 4307 4079 +3 4079 4307 4308 +3 4079 4308 4309 +3 4079 4309 4080 +3 4080 4309 4081 +3 4081 4309 4310 +3 4081 4310 4083 +3 4083 4310 4311 +3 4083 4311 4084 +3 4084 4311 4312 +3 4084 4312 4085 +3 4085 4312 4086 +3 4086 4312 4313 +3 4086 4313 4087 +3 4087 4313 4088 +3 4088 4313 4314 +3 4088 4314 4089 +3 4089 4314 4315 +3 4089 4315 4090 +3 4090 4315 4316 +3 4090 4316 4091 +3 4091 4316 4317 +3 4091 4317 4092 +3 4092 4317 4318 +3 4092 4318 4319 +3 4092 4319 4093 +3 4093 4319 4094 +3 4094 4319 4320 +3 4094 4320 4321 +3 4094 4321 4095 +3 4095 4321 4096 +3 4096 4321 4322 +3 4096 4322 4097 +3 4097 4322 4323 +3 4097 4323 4324 +3 4097 4324 4098 +3 4098 4324 4325 +3 4098 4325 4099 +3 4099 4325 4100 +3 4100 4325 4326 +3 4100 4326 4101 +3 4101 4326 4327 +3 4101 4327 4328 +3 4101 4328 4102 +3 4102 4328 4329 +3 4102 4329 4103 +3 4103 4329 4330 +3 4103 4330 4104 +3 4104 4330 4331 +3 4104 4331 4105 +3 4105 4331 4332 +3 4105 4332 4333 +3 4105 4333 4106 +3 4106 4333 4334 +3 4106 4334 4107 +3 4107 4334 4335 +3 4107 4335 4108 +3 4108 4335 4336 +3 4108 4336 4109 +3 4109 4336 4337 +3 4109 4337 4110 +3 4110 4337 4338 +3 4110 4338 4111 +3 4111 4338 4339 +3 4111 4339 4340 +3 4111 4340 4112 +3 4112 4340 4341 +3 4112 4341 4113 +3 4113 4341 4342 +3 4113 4342 4114 +3 4114 4342 4343 +3 4114 4343 4115 +3 4115 4343 4344 +3 4115 4344 4345 +3 4115 4345 4116 +3 4116 4345 4346 +3 4116 4346 4117 +3 4117 4346 4347 +3 4117 4347 4118 +3 4118 4347 4348 +3 4118 4348 4119 +3 4119 4348 4349 +3 4119 4349 4120 +3 4120 4349 4121 +3 4121 4349 4122 +3 4122 4349 4123 +3 4123 4349 4350 +3 4123 4350 4124 +3 4124 4350 4351 +3 4124 4351 4352 +3 4124 4352 4125 +3 4125 4352 4353 +3 4125 4353 4126 +3 4126 4353 4354 +3 4126 4354 4127 +3 4127 4354 4355 +3 4127 4355 4128 +3 4128 4355 4356 +3 4128 4356 4357 +3 4128 4357 4129 +3 4129 4357 4130 +3 4130 4357 4358 +3 4130 4358 4359 +3 4130 4359 4131 +3 4131 4359 4132 +3 4132 4359 4360 +3 4132 4360 4361 +3 4132 4361 4133 +3 4133 4361 4362 +3 4133 4362 4134 +3 4134 4362 4363 +3 4134 4363 4135 +3 4135 4363 4364 +3 4135 4364 4365 +3 4135 4365 4136 +3 4136 4365 4366 +3 4136 4366 4137 +3 4137 4366 4367 +3 4137 4367 4368 +3 4137 4368 4138 +3 4138 4368 4369 +3 4138 4369 4139 +3 4139 4369 4370 +3 4139 4370 4140 +3 4140 4370 4371 +3 4140 4371 4372 +3 4140 4372 4141 +3 4141 4372 4373 +3 4141 4373 4142 +3 4142 4373 4374 +3 4142 4374 4143 +3 4143 4374 4375 +3 4143 4375 4144 +3 4144 4375 4376 +3 4144 4376 4145 +3 4145 4376 4377 +3 4145 4377 4146 +3 4146 4377 4378 +3 4146 4378 4147 +3 4147 4378 4379 +3 4147 4379 4148 +3 4148 4379 4380 +3 4148 4380 4149 +3 4149 4380 4381 +3 4149 4381 4382 +3 4149 4382 4150 +3 4150 4382 4383 +3 4150 4383 4151 +3 4151 4383 4152 +3 4152 4383 4384 +3 4152 4384 4385 +3 4152 4385 4153 +3 4153 4385 4386 +3 4153 4386 4154 +3 4154 4386 4387 +3 4154 4387 4388 +3 4154 4388 4155 +3 4155 4388 4389 +3 4155 4389 4390 +3 4155 4390 4391 +3 4155 4391 4156 +3 4156 4391 4157 +3 4157 4391 4392 +3 4157 4392 4393 +3 4157 4393 4158 +3 4158 4393 4394 +3 4158 4394 4395 +3 4158 4395 4159 +3 4159 4395 4160 +3 4160 4395 4396 +3 4160 4396 4397 +3 4160 4397 4161 +3 4161 4397 4162 +3 4162 4397 4163 +3 4163 4397 4398 +3 4163 4398 4164 +3 4164 4398 4399 +3 4164 4399 4165 +3 4165 4399 4400 +3 4165 4400 4166 +3 4166 4400 4401 +3 4166 4401 4167 +3 4167 4401 4402 +3 4167 4402 4168 +3 4168 4402 4403 +3 4168 4403 4169 +3 4169 4403 4404 +3 4169 4404 4170 +3 4170 4404 4405 +3 4170 4405 4171 +3 4171 4405 4406 +3 4171 4406 4172 +3 4172 4406 4407 +3 4172 4407 4173 +3 4173 4407 4408 +3 4173 4408 4174 +3 4174 4408 4409 +3 4174 4409 4175 +3 4175 4409 4410 +3 4175 4410 4176 +3 4176 4410 4411 +3 4176 4411 4412 +3 4176 4412 4177 +3 4177 4412 4413 +3 4177 4413 4178 +3 4178 4413 4414 +3 4178 4414 4179 +3 4179 4414 4415 +3 4179 4415 4180 +3 4180 4415 4181 +3 4181 4415 4182 +3 4182 4415 4416 +3 4182 4416 4417 +3 4182 4417 4183 +3 4183 4417 4418 +3 4183 4418 4184 +3 4184 4418 4419 +3 4184 4419 4185 +3 4185 4419 4420 +3 4185 4420 4186 +3 4186 4420 4421 +3 4186 4421 4187 +3 4187 4421 4422 +3 4187 4422 4188 +3 4188 4422 4423 +3 4188 4423 4189 +3 4189 4423 4424 +3 4189 4424 4190 +3 4190 4424 4425 +3 4190 4425 4426 +3 4190 4426 4191 +3 4191 4426 4427 +3 4191 4427 4192 +3 4192 4427 4194 +3 4194 4427 4428 +3 4194 4428 4195 +3 4195 4428 4196 +3 4196 4428 4429 +3 4196 4429 4430 +3 4196 4430 4197 +3 4197 4430 4431 +3 4197 4431 4432 +3 4197 4432 4198 +3 4198 4432 4200 +3 4200 4432 4433 +3 4200 4433 4201 +3 4201 4433 4434 +3 4201 4434 4435 +3 4201 4435 4202 +3 4202 4435 4204 +3 4204 4435 4436 +3 4204 4436 4205 +3 4205 4436 4437 +3 4205 4437 4438 +3 4205 4438 4206 +3 4206 4438 4439 +3 4206 4439 4207 +3 4207 4439 4440 +3 4207 4440 4208 +3 4208 4440 4441 +3 4208 4441 4209 +3 4209 4441 4442 +3 4209 4442 4443 +3 4209 4443 4444 +3 4209 4444 4210 +3 4210 4444 4211 +3 4211 4444 4445 +3 4211 4445 4212 +3 4212 4445 4446 +3 4212 4446 4213 +3 4213 4446 4447 +3 4213 4447 4214 +3 4214 4447 4448 +3 4214 4448 4449 +3 4214 4449 4215 +3 4215 4449 4450 +3 4215 4450 4216 +3 4216 4450 4451 +3 4216 4451 4217 +3 4217 4451 4452 +3 4217 4452 4218 +3 4218 4452 4453 +3 4218 4453 4219 +3 4219 4453 4454 +3 4219 4454 4220 +3 4220 4454 4455 +3 4220 4455 4221 +3 4221 4455 4456 +3 4221 4456 4222 +3 4222 4456 4457 +3 4222 4457 4223 +3 4223 4457 4458 +3 4223 4458 4224 +3 4224 4458 4459 +3 4224 4459 4225 +3 4225 4459 4460 +3 4225 4460 4226 +3 4226 4460 4461 +3 4226 4461 4227 +3 4227 4461 4462 +3 4227 4462 4228 +3 4228 4462 4463 +3 4228 4463 4229 +3 4229 4463 4464 +3 4229 4464 4230 +3 4230 4464 4465 +3 4230 4465 4231 +3 4231 4465 4466 +3 4231 4466 4232 +3 4232 4466 4467 +3 4232 4467 4468 +3 4232 4468 4233 +3 4233 4468 4234 +3 4234 4468 4469 +3 4234 4469 4235 +3 4235 4469 4470 +3 4235 4470 4236 +3 4236 4470 4471 +3 4236 4471 4237 +3 4237 4471 4472 +3 4237 4472 4473 +3 4237 4473 4238 +3 4238 4473 4239 +3 4239 4473 4474 +3 4239 4474 4240 +3 4240 4474 4475 +3 4240 4475 4241 +3 4241 4475 4476 +3 4241 4476 4242 +3 4242 4476 4477 +3 4242 4477 4243 +3 4243 4477 4478 +3 4243 4478 4479 +3 4243 4479 4244 +3 4244 4479 4480 +3 4244 4480 4245 +3 4245 4480 4246 +3 4246 4480 4481 +3 4246 4481 4482 +3 4246 4482 4247 +3 4247 4482 4483 +3 4247 4483 4248 +3 4248 4483 4249 +3 4249 4483 4484 +3 4249 4484 4485 +3 4249 4485 4250 +3 4250 4485 4486 +3 4250 4486 4251 +3 4251 4486 4487 +3 4251 4487 4252 +3 4252 4487 4488 +3 4252 4488 4253 +3 4253 4488 4489 +3 4253 4489 4254 +3 4254 4489 4255 +3 4255 4489 4490 +3 4255 4490 4491 +3 4255 4491 4256 +3 4256 4491 4257 +3 4257 4491 4492 +3 4257 4492 4258 +3 4258 4492 4493 +3 4258 4493 4494 +3 4258 4494 4259 +3 4259 4494 4495 +3 4259 4495 4260 +3 4260 4495 4262 +3 4262 4495 4496 +3 4262 4496 4263 +3 4263 4496 4264 +3 4264 4496 4497 +3 4264 4497 4498 +3 4264 4498 4265 +3 4265 4498 4499 +3 4265 4499 4266 +3 4266 4499 4500 +3 4266 4500 4501 +3 4266 4501 4267 +3 4267 4501 4268 +3 4268 4501 4502 +3 4268 4502 4269 +3 4269 4502 4503 +3 4269 4503 4270 +3 4270 4503 4504 +3 4270 4504 4271 +3 4271 4504 4505 +3 4271 4505 4506 +3 4271 4506 4272 +3 4272 4506 4507 +3 4272 4507 4508 +3 4272 4508 4273 +3 4273 4508 4509 +3 4273 4509 4274 +3 4274 4509 4510 +3 4274 4510 4511 +3 4274 4511 4275 +3 4275 4511 4512 +3 4275 4512 4513 +3 4275 4513 4276 +3 4276 4513 4514 +3 4276 4514 4277 +3 4277 4514 4515 +3 4277 4515 4516 +3 4277 4516 4278 +3 4278 4516 4517 +3 4278 4517 4279 +3 4279 4517 4280 +3 4280 4517 4518 +3 4280 4518 4281 +3 4281 4518 4519 +3 4281 4519 4282 +3 4282 4519 4520 +3 4282 4520 4521 +3 4282 4521 4283 +3 4283 4521 4522 +3 4283 4522 4284 +3 4284 4522 4285 +3 4285 4522 4523 +3 4285 4523 4524 +3 4285 4524 4286 +3 4286 4524 4525 +3 4286 4525 4287 +3 4287 4525 4526 +3 4287 4526 4288 +3 4288 4526 4527 +3 4288 4527 4289 +3 4289 4527 4528 +3 4289 4528 4290 +3 4290 4528 4291 +3 4291 4528 4529 +3 4291 4529 4530 +3 4291 4530 4292 +3 4292 4530 4531 +3 4292 4531 4293 +3 4293 4531 4532 +3 4293 4532 4533 +3 4293 4533 4294 +3 4294 4533 4534 +3 4294 4534 4535 +3 4294 4535 4295 +3 4295 4535 4536 +3 4295 4536 4296 +3 4296 4536 4537 +3 4296 4537 4538 +3 4296 4538 4297 +3 4297 4538 4298 +3 4298 4538 4539 +3 4298 4539 4299 +3 4299 4539 4540 +3 4299 4540 4541 +3 4299 4541 4300 +3 4300 4541 4542 +3 4300 4542 4301 +3 4301 4542 4543 +3 4301 4543 4302 +3 4302 4543 4544 +3 4302 4544 4303 +3 4303 4544 4545 +3 4303 4545 4546 +3 4303 4546 4304 +3 4304 4546 4547 +3 4304 4547 4305 +3 4305 4547 4306 +3 4306 4547 4548 +3 4306 4548 4549 +3 4306 4549 4307 +3 4307 4549 4308 +3 4308 4549 4550 +3 4308 4550 4551 +3 4308 4551 4309 +3 4309 4551 4310 +3 4310 4551 4552 +3 4310 4552 4311 +3 4311 4552 4553 +3 4311 4553 4312 +3 4312 4553 4313 +3 4313 4553 4314 +3 4314 4553 4554 +3 4314 4554 4315 +3 4315 4554 4555 +3 4315 4555 4316 +3 4316 4555 4556 +3 4316 4556 4317 +3 4317 4556 4557 +3 4317 4557 4318 +3 4318 4557 4558 +3 4318 4558 4559 +3 4318 4559 4319 +3 4319 4559 4320 +3 4320 4559 4560 +3 4320 4560 4561 +3 4320 4561 4321 +3 4321 4561 4322 +3 4322 4561 4562 +3 4322 4562 4323 +3 4323 4562 4563 +3 4323 4563 4564 +3 4323 4564 4324 +3 4324 4564 4565 +3 4324 4565 4325 +3 4325 4565 4326 +3 4326 4565 4566 +3 4326 4566 4327 +3 4327 4566 4567 +3 4327 4567 4568 +3 4327 4568 4328 +3 4328 4568 4569 +3 4328 4569 4329 +3 4329 4569 4570 +3 4329 4570 4330 +3 4330 4570 4571 +3 4330 4571 4331 +3 4331 4571 4572 +3 4331 4572 4332 +3 4332 4572 4573 +3 4332 4573 4574 +3 4332 4574 4333 +3 4333 4574 4575 +3 4333 4575 4334 +3 4334 4575 4335 +3 4335 4575 4576 +3 4335 4576 4577 +3 4335 4577 4336 +3 4336 4577 4578 +3 4336 4578 4579 +3 4336 4579 4337 +3 4337 4579 4338 +3 4338 4579 4580 +3 4338 4580 4339 +3 4339 4580 4581 +3 4339 4581 4582 +3 4339 4582 4340 +3 4340 4582 4583 +3 4340 4583 4341 +3 4341 4583 4584 +3 4341 4584 4342 +3 4342 4584 4585 +3 4342 4585 4343 +3 4343 4585 4586 +3 4343 4586 4344 +3 4344 4586 4587 +3 4344 4587 4588 +3 4344 4588 4345 +3 4345 4588 4346 +3 4346 4588 4589 +3 4346 4589 4347 +3 4347 4589 4590 +3 4347 4590 4591 +3 4347 4591 4348 +3 4348 4591 4350 +3 4350 4591 4351 +3 4351 4591 4592 +3 4351 4592 4352 +3 4352 4592 4593 +3 4352 4593 4353 +3 4353 4593 4594 +3 4353 4594 4595 +3 4353 4595 4354 +3 4354 4595 4355 +3 4355 4595 4596 +3 4355 4596 4356 +3 4356 4596 4597 +3 4356 4597 4598 +3 4356 4598 4357 +3 4357 4598 4358 +3 4358 4598 4599 +3 4358 4599 4600 +3 4358 4600 4359 +3 4359 4600 4601 +3 4359 4601 4360 +3 4360 4601 4602 +3 4360 4602 4603 +3 4360 4603 4361 +3 4361 4603 4604 +3 4361 4604 4605 +3 4361 4605 4362 +3 4362 4605 4606 +3 4362 4606 4363 +3 4363 4606 4607 +3 4363 4607 4364 +3 4364 4607 4608 +3 4364 4608 4609 +3 4364 4609 4365 +3 4365 4609 4366 +3 4366 4609 4610 +3 4366 4610 4367 +3 4367 4610 4611 +3 4367 4611 4612 +3 4367 4612 4368 +3 4368 4612 4613 +3 4368 4613 4369 +3 4369 4613 4614 +3 4369 4614 4370 +3 4370 4614 4615 +3 4370 4615 4371 +3 4371 4615 4616 +3 4371 4616 4617 +3 4371 4617 4372 +3 4372 4617 4618 +3 4372 4618 4373 +3 4373 4618 4619 +3 4373 4619 4374 +3 4374 4619 4620 +3 4374 4620 4375 +3 4375 4620 4621 +3 4375 4621 4376 +3 4376 4621 4622 +3 4376 4622 4377 +3 4377 4622 4623 +3 4377 4623 4378 +3 4378 4623 4624 +3 4378 4624 4379 +3 4379 4624 4625 +3 4379 4625 4380 +3 4380 4625 4626 +3 4380 4626 4381 +3 4381 4626 4627 +3 4381 4627 4628 +3 4381 4628 4382 +3 4382 4628 4629 +3 4382 4629 4383 +3 4383 4629 4384 +3 4384 4629 4630 +3 4384 4630 4631 +3 4384 4631 4385 +3 4385 4631 4632 +3 4385 4632 4386 +3 4386 4632 4387 +3 4387 4632 4633 +3 4387 4633 4634 +3 4387 4634 4635 +3 4387 4635 4388 +3 4388 4635 4389 +3 4389 4635 4636 +3 4389 4636 4637 +3 4389 4637 4638 +3 4389 4638 4639 +3 4389 4639 4390 +3 4390 4639 4391 +3 4391 4639 4392 +3 4392 4639 4393 +3 4393 4639 4640 +3 4393 4640 4394 +3 4394 4640 4641 +3 4394 4641 4642 +3 4394 4642 4643 +3 4394 4643 4395 +3 4395 4643 4396 +3 4396 4643 4644 +3 4396 4644 4398 +3 4398 4644 4399 +3 4399 4644 4645 +3 4399 4645 4400 +3 4400 4645 4646 +3 4400 4646 4401 +3 4401 4646 4647 +3 4401 4647 4402 +3 4402 4647 4648 +3 4402 4648 4403 +3 4403 4648 4649 +3 4403 4649 4404 +3 4404 4649 4650 +3 4404 4650 4405 +3 4405 4650 4651 +3 4405 4651 4406 +3 4406 4651 4652 +3 4406 4652 4407 +3 4407 4652 4653 +3 4407 4653 4408 +3 4408 4653 4654 +3 4408 4654 4409 +3 4409 4654 4655 +3 4409 4655 4410 +3 4410 4655 4656 +3 4410 4656 4657 +3 4410 4657 4411 +3 4411 4657 4658 +3 4411 4658 4412 +3 4412 4658 4659 +3 4412 4659 4413 +3 4413 4659 4660 +3 4413 4660 4414 +3 4414 4660 4661 +3 4414 4661 4415 +3 4415 4661 4416 +3 4416 4661 4662 +3 4416 4662 4663 +3 4416 4663 4417 +3 4417 4663 4664 +3 4417 4664 4418 +3 4418 4664 4665 +3 4418 4665 4419 +3 4419 4665 4420 +3 4420 4665 4666 +3 4420 4666 4421 +3 4421 4666 4667 +3 4421 4667 4422 +3 4422 4667 4668 +3 4422 4668 4669 +3 4422 4669 4423 +3 4423 4669 4670 +3 4423 4670 4424 +3 4424 4670 4671 +3 4424 4671 4425 +3 4425 4671 4672 +3 4425 4672 4429 +3 4429 4672 4430 +3 4430 4672 4673 +3 4430 4673 4431 +3 4431 4673 4674 +3 4431 4674 4675 +3 4431 4675 4432 +3 4432 4675 4433 +3 4433 4675 4676 +3 4433 4676 4434 +3 4434 4676 4677 +3 4434 4677 4678 +3 4434 4678 4435 +3 4435 4678 4436 +3 4436 4678 4679 +3 4436 4679 4437 +3 4437 4679 4680 +3 4437 4680 4681 +3 4437 4681 4438 +3 4438 4681 4682 +3 4438 4682 4439 +3 4439 4682 4683 +3 4439 4683 4440 +3 4440 4683 4684 +3 4440 4684 4685 +3 4440 4685 4441 +3 4441 4685 4686 +3 4441 4686 4442 +3 4442 4686 4687 +3 4442 4687 4688 +3 4442 4688 4443 +3 4443 4688 4689 +3 4443 4689 4690 +3 4443 4690 4444 +3 4444 4690 4691 +3 4444 4691 4445 +3 4445 4691 4446 +3 4446 4691 4692 +3 4446 4692 4447 +3 4447 4692 4693 +3 4447 4693 4448 +3 4448 4693 4694 +3 4448 4694 4695 +3 4448 4695 4449 +3 4449 4695 4696 +3 4449 4696 4450 +3 4450 4696 4697 +3 4450 4697 4451 +3 4451 4697 4698 +3 4451 4698 4452 +3 4452 4698 4699 +3 4452 4699 4453 +3 4453 4699 4700 +3 4453 4700 4454 +3 4454 4700 4701 +3 4454 4701 4455 +3 4455 4701 4702 +3 4455 4702 4456 +3 4456 4702 4703 +3 4456 4703 4457 +3 4457 4703 4704 +3 4457 4704 4458 +3 4458 4704 4705 +3 4458 4705 4459 +3 4459 4705 4706 +3 4459 4706 4460 +3 4460 4706 4707 +3 4460 4707 4461 +3 4461 4707 4708 +3 4461 4708 4462 +3 4462 4708 4709 +3 4462 4709 4463 +3 4463 4709 4710 +3 4463 4710 4464 +3 4464 4710 4711 +3 4464 4711 4465 +3 4465 4711 4712 +3 4465 4712 4466 +3 4466 4712 4713 +3 4466 4713 4467 +3 4467 4713 4714 +3 4467 4714 4715 +3 4467 4715 4468 +3 4468 4715 4469 +3 4469 4715 4716 +3 4469 4716 4470 +3 4470 4716 4717 +3 4470 4717 4471 +3 4471 4717 4718 +3 4471 4718 4472 +3 4472 4718 4719 +3 4472 4719 4720 +3 4472 4720 4473 +3 4473 4720 4474 +3 4474 4720 4721 +3 4474 4721 4475 +3 4475 4721 4722 +3 4475 4722 4476 +3 4476 4722 4723 +3 4476 4723 4477 +3 4477 4723 4724 +3 4477 4724 4478 +3 4478 4724 4725 +3 4478 4725 4726 +3 4478 4726 4479 +3 4479 4726 4727 +3 4479 4727 4480 +3 4480 4727 4481 +3 4481 4727 4728 +3 4481 4728 4729 +3 4481 4729 4482 +3 4482 4729 4730 +3 4482 4730 4483 +3 4483 4730 4484 +3 4484 4730 4731 +3 4484 4731 4732 +3 4484 4732 4485 +3 4485 4732 4733 +3 4485 4733 4486 +3 4486 4733 4734 +3 4486 4734 4487 +3 4487 4734 4735 +3 4487 4735 4488 +3 4488 4735 4736 +3 4488 4736 4489 +3 4489 4736 4490 +3 4490 4736 4737 +3 4490 4737 4738 +3 4490 4738 4491 +3 4491 4738 4492 +3 4492 4738 4739 +3 4492 4739 4493 +3 4493 4739 4740 +3 4493 4740 4741 +3 4493 4741 4494 +3 4494 4741 4742 +3 4494 4742 4495 +3 4495 4742 4496 +3 4496 4742 4497 +3 4497 4742 4743 +3 4497 4743 4744 +3 4497 4744 4498 +3 4498 4744 4745 +3 4498 4745 4499 +3 4499 4745 4746 +3 4499 4746 4747 +3 4499 4747 4500 +3 4500 4747 4748 +3 4500 4748 4749 +3 4500 4749 4501 +3 4501 4749 4750 +3 4501 4750 4502 +3 4502 4750 4751 +3 4502 4751 4752 +3 4502 4752 4503 +3 4503 4752 4753 +3 4503 4753 4754 +3 4503 4754 4504 +3 4504 4754 4755 +3 4504 4755 4505 +3 4505 4755 4756 +3 4505 4756 4757 +3 4505 4757 4506 +3 4506 4757 4507 +3 4507 4757 4758 +3 4507 4758 4759 +3 4507 4759 4508 +3 4508 4759 4509 +3 4509 4759 4760 +3 4509 4760 4510 +3 4510 4760 4761 +3 4510 4761 4762 +3 4510 4762 4511 +3 4511 4762 4763 +3 4511 4763 4512 +3 4512 4763 4764 +3 4512 4764 4765 +3 4512 4765 4513 +3 4513 4765 4514 +3 4514 4765 4766 +3 4514 4766 4767 +3 4514 4767 4768 +3 4514 4768 4515 +3 4515 4768 4769 +3 4515 4769 4770 +3 4515 4770 4516 +3 4516 4770 4771 +3 4516 4771 4772 +3 4516 4772 4517 +3 4517 4772 4518 +3 4518 4772 4773 +3 4518 4773 4774 +3 4518 4774 4519 +3 4519 4774 4775 +3 4519 4775 4520 +3 4520 4775 4776 +3 4520 4776 4777 +3 4520 4777 4521 +3 4521 4777 4522 +3 4522 4777 4523 +3 4523 4777 4778 +3 4523 4778 4524 +3 4524 4778 4779 +3 4524 4779 4780 +3 4524 4780 4525 +3 4525 4780 4781 +3 4525 4781 4526 +3 4526 4781 4782 +3 4526 4782 4527 +3 4527 4782 4783 +3 4527 4783 4528 +3 4528 4783 4529 +3 4529 4783 4784 +3 4529 4784 4785 +3 4529 4785 4530 +3 4530 4785 4786 +3 4530 4786 4531 +3 4531 4786 4787 +3 4531 4787 4788 +3 4531 4788 4532 +3 4532 4788 4533 +3 4533 4788 4789 +3 4533 4789 4534 +3 4534 4789 4790 +3 4534 4790 4791 +3 4534 4791 4792 +3 4534 4792 4535 +3 4535 4792 4536 +3 4536 4792 4793 +3 4536 4793 4537 +3 4537 4793 4794 +3 4537 4794 4538 +3 4538 4794 4795 +3 4538 4795 4539 +3 4539 4795 4796 +3 4539 4796 4797 +3 4539 4797 4540 +3 4540 4797 4798 +3 4540 4798 4799 +3 4540 4799 4541 +3 4541 4799 4800 +3 4541 4800 4542 +3 4542 4800 4801 +3 4542 4801 4802 +3 4542 4802 4543 +3 4543 4802 4803 +3 4543 4803 4544 +3 4544 4803 4804 +3 4544 4804 4545 +3 4545 4804 4805 +3 4545 4805 4546 +3 4546 4805 4806 +3 4546 4806 4547 +3 4547 4806 4548 +3 4548 4806 4807 +3 4548 4807 4808 +3 4548 4808 4549 +3 4549 4808 4550 +3 4550 4808 4809 +3 4550 4809 4810 +3 4550 4810 4551 +3 4551 4810 4552 +3 4552 4810 4554 +3 4554 4810 4555 +3 4555 4810 4809 +3 4555 4809 4556 +3 4556 4809 4811 +3 4556 4811 4557 +3 4557 4811 4812 +3 4557 4812 4558 +3 4558 4812 4813 +3 4558 4813 4814 +3 4558 4814 4559 +3 4559 4814 4560 +3 4560 4814 4815 +3 4560 4815 4816 +3 4560 4816 4561 +3 4561 4816 4562 +3 4562 4816 4817 +3 4562 4817 4563 +3 4563 4817 4818 +3 4563 4818 4819 +3 4563 4819 4564 +3 4564 4819 4820 +3 4564 4820 4565 +3 4565 4820 4566 +3 4566 4820 4821 +3 4566 4821 4567 +3 4567 4821 4822 +3 4567 4822 4823 +3 4567 4823 4568 +3 4568 4823 4824 +3 4568 4824 4570 +3 4570 4824 4571 +3 4571 4824 4825 +3 4571 4825 4826 +3 4571 4826 4827 +3 4571 4827 4572 +3 4572 4827 4828 +3 4572 4828 4829 +3 4572 4829 4573 +3 4573 4829 4830 +3 4573 4830 4574 +3 4574 4830 4831 +3 4574 4831 4832 +3 4574 4832 4575 +3 4575 4832 4576 +3 4576 4832 4833 +3 4576 4833 4577 +3 4577 4833 4834 +3 4577 4834 4578 +3 4578 4834 4835 +3 4578 4835 4836 +3 4578 4836 4579 +3 4579 4836 4580 +3 4580 4836 4837 +3 4580 4837 4581 +3 4581 4837 4838 +3 4581 4838 4839 +3 4581 4839 4582 +3 4582 4839 4840 +3 4582 4840 4583 +3 4583 4840 4841 +3 4583 4841 4584 +3 4584 4841 4842 +3 4584 4842 4585 +3 4585 4842 4843 +3 4585 4843 4586 +3 4586 4843 4844 +3 4586 4844 4587 +3 4587 4844 4845 +3 4587 4845 4846 +3 4587 4846 4588 +3 4588 4846 4589 +3 4589 4846 4847 +3 4589 4847 4590 +3 4590 4847 4848 +3 4590 4848 4592 +3 4592 4848 4593 +3 4593 4848 4849 +3 4593 4849 4594 +3 4594 4849 4850 +3 4594 4850 4851 +3 4594 4851 4595 +3 4595 4851 4596 +3 4596 4851 4852 +3 4596 4852 4853 +3 4596 4853 4597 +3 4597 4853 4854 +3 4597 4854 4855 +3 4597 4855 4598 +3 4598 4855 4599 +3 4599 4855 4856 +3 4599 4856 4857 +3 4599 4857 4600 +3 4600 4857 4601 +3 4601 4857 4858 +3 4601 4858 4602 +3 4602 4858 4859 +3 4602 4859 4860 +3 4602 4860 4603 +3 4603 4860 4861 +3 4603 4861 4604 +3 4604 4861 4862 +3 4604 4862 4605 +3 4605 4862 4863 +3 4605 4863 4606 +3 4606 4863 4864 +3 4606 4864 4607 +3 4607 4864 4608 +3 4608 4864 4865 +3 4608 4865 4866 +3 4608 4866 4609 +3 4609 4866 4610 +3 4610 4866 4867 +3 4610 4867 4611 +3 4611 4867 4868 +3 4611 4868 4869 +3 4611 4869 4612 +3 4612 4869 4870 +3 4612 4870 4613 +3 4613 4870 4871 +3 4613 4871 4614 +3 4614 4871 4872 +3 4614 4872 4615 +3 4615 4872 4873 +3 4615 4873 4616 +3 4616 4873 4874 +3 4616 4874 4875 +3 4616 4875 4617 +3 4617 4875 4876 +3 4617 4876 4618 +3 4618 4876 4877 +3 4618 4877 4619 +3 4619 4877 4878 +3 4619 4878 4620 +3 4620 4878 4879 +3 4620 4879 4621 +3 4621 4879 4880 +3 4621 4880 4622 +3 4622 4880 4881 +3 4622 4881 4623 +3 4623 4881 4882 +3 4623 4882 4624 +3 4624 4882 4883 +3 4624 4883 4625 +3 4625 4883 4884 +3 4625 4884 4626 +3 4626 4884 4885 +3 4626 4885 4627 +3 4627 4885 4886 +3 4627 4886 4887 +3 4627 4887 4628 +3 4628 4887 4888 +3 4628 4888 4629 +3 4629 4888 4630 +3 4630 4888 4889 +3 4630 4889 4890 +3 4630 4890 4631 +3 4631 4890 4891 +3 4631 4891 4632 +3 4632 4891 4633 +3 4633 4891 4892 +3 4633 4892 4893 +3 4633 4893 4634 +3 4634 4893 4894 +3 4634 4894 4895 +3 4634 4895 4896 +3 4634 4896 4635 +3 4635 4896 4897 +3 4635 4897 4636 +3 4636 4897 4898 +3 4636 4898 4637 +3 4637 4898 4899 +3 4637 4899 4900 +3 4637 4900 4638 +3 4638 4900 4640 +3 4640 4900 4641 +3 4641 4900 4901 +3 4641 4901 4902 +3 4641 4902 4642 +3 4642 4902 4903 +3 4642 4903 4904 +3 4642 4904 4643 +3 4643 4904 4644 +3 4644 4904 4645 +3 4645 4904 4905 +3 4645 4905 4646 +3 4646 4905 4906 +3 4646 4906 4647 +3 4647 4906 4907 +3 4647 4907 4648 +3 4648 4907 4908 +3 4648 4908 4649 +3 4649 4908 4909 +3 4649 4909 4650 +3 4650 4909 4910 +3 4650 4910 4651 +3 4651 4910 4911 +3 4651 4911 4652 +3 4652 4911 4912 +3 4652 4912 4653 +3 4653 4912 4913 +3 4653 4913 4654 +3 4654 4913 4914 +3 4654 4914 4655 +3 4655 4914 4915 +3 4655 4915 4656 +3 4656 4915 4916 +3 4656 4916 4917 +3 4656 4917 4657 +3 4657 4917 4918 +3 4657 4918 4658 +3 4658 4918 4919 +3 4658 4919 4659 +3 4659 4919 4920 +3 4659 4920 4660 +3 4660 4920 4921 +3 4660 4921 4661 +3 4661 4921 4662 +3 4662 4921 4922 +3 4662 4922 4923 +3 4662 4923 4663 +3 4663 4923 4924 +3 4663 4924 4664 +3 4664 4924 4925 +3 4664 4925 4665 +3 4665 4925 4926 +3 4665 4926 4666 +3 4666 4926 4927 +3 4666 4927 4667 +3 4667 4927 4928 +3 4667 4928 4668 +3 4668 4928 4929 +3 4668 4929 4669 +3 4669 4929 4930 +3 4669 4930 4931 +3 4669 4931 4670 +3 4670 4931 4932 +3 4670 4932 4671 +3 4671 4932 4672 +3 4672 4932 4933 +3 4672 4933 4673 +3 4673 4933 4934 +3 4673 4934 4674 +3 4674 4934 4935 +3 4674 4935 4675 +3 4675 4935 4936 +3 4675 4936 4676 +3 4676 4936 4937 +3 4676 4937 4677 +3 4677 4937 4938 +3 4677 4938 4939 +3 4677 4939 4678 +3 4678 4939 4679 +3 4679 4939 4940 +3 4679 4940 4680 +3 4680 4940 4941 +3 4680 4941 4942 +3 4680 4942 4681 +3 4681 4942 4943 +3 4681 4943 4682 +3 4682 4943 4944 +3 4682 4944 4683 +3 4683 4944 4684 +3 4684 4944 4945 +3 4684 4945 4946 +3 4684 4946 4947 +3 4684 4947 4685 +3 4685 4947 4686 +3 4686 4947 4948 +3 4686 4948 4687 +3 4687 4948 4949 +3 4687 4949 4950 +3 4687 4950 4951 +3 4687 4951 4952 +3 4687 4952 4688 +3 4688 4952 4689 +3 4689 4952 4953 +3 4689 4953 4954 +3 4689 4954 4690 +3 4690 4954 4955 +3 4690 4955 4691 +3 4691 4955 4956 +3 4691 4956 4692 +3 4692 4956 4957 +3 4692 4957 4958 +3 4692 4958 4693 +3 4693 4958 4959 +3 4693 4959 4960 +3 4693 4960 4694 +3 4694 4960 4961 +3 4694 4961 4695 +3 4695 4961 4962 +3 4695 4962 4696 +3 4696 4962 4697 +3 4697 4962 4963 +3 4697 4963 4964 +3 4697 4964 4698 +3 4698 4964 4965 +3 4698 4965 4699 +3 4699 4965 4966 +3 4699 4966 4700 +3 4700 4966 4967 +3 4700 4967 4701 +3 4701 4967 4968 +3 4701 4968 4702 +3 4702 4968 4969 +3 4702 4969 4703 +3 4703 4969 4970 +3 4703 4970 4704 +3 4704 4970 4971 +3 4704 4971 4705 +3 4705 4971 4972 +3 4705 4972 4706 +3 4706 4972 4973 +3 4706 4973 4707 +3 4707 4973 4974 +3 4707 4974 4708 +3 4708 4974 4975 +3 4708 4975 4709 +3 4709 4975 4976 +3 4709 4976 4710 +3 4710 4976 4977 +3 4710 4977 4711 +3 4711 4977 4978 +3 4711 4978 4712 +3 4712 4978 4713 +3 4713 4978 4979 +3 4713 4979 4714 +3 4714 4979 4980 +3 4714 4980 4981 +3 4714 4981 4715 +3 4715 4981 4716 +3 4716 4981 4982 +3 4716 4982 4717 +3 4717 4982 4983 +3 4717 4983 4718 +3 4718 4983 4984 +3 4718 4984 4719 +3 4719 4984 4985 +3 4719 4985 4986 +3 4719 4986 4720 +3 4720 4986 4721 +3 4721 4986 4987 +3 4721 4987 4722 +3 4722 4987 4988 +3 4722 4988 4723 +3 4723 4988 4989 +3 4723 4989 4724 +3 4724 4989 4990 +3 4724 4990 4725 +3 4725 4990 4763 +3 4763 4990 4764 +3 4764 4990 4991 +3 4764 4991 4765 +3 4765 4991 4766 +3 4766 4991 4992 +3 4766 4992 4767 +3 4767 4992 4993 +3 4767 4993 4994 +3 4767 4994 4768 +3 4768 4994 4995 +3 4768 4995 4769 +3 4769 4995 4996 +3 4769 4996 4997 +3 4769 4997 4770 +3 4770 4997 4998 +3 4770 4998 4999 +3 4770 4999 4771 +3 4771 4999 5000 +3 4771 5000 4773 +3 4773 5000 5001 +3 4773 5001 4774 +3 4774 5001 4775 +3 4775 5001 5002 +3 4775 5002 4776 +3 4776 5002 5003 +3 4776 5003 5004 +3 4776 5004 5005 +3 4776 5005 4777 +3 4777 5005 4778 +3 4778 5005 4779 +3 4779 5005 5006 +3 4779 5006 5007 +3 4779 5007 4780 +3 4780 5007 5008 +3 4780 5008 5009 +3 4780 5009 4781 +3 4781 5009 5010 +3 4781 5010 5011 +3 4781 5011 5012 +3 4781 5012 4782 +3 4782 5012 4783 +3 4783 5012 4784 +3 4784 5012 5013 +3 4784 5013 5014 +3 4784 5014 4785 +3 4785 5014 4786 +3 4786 5014 5015 +3 4786 5015 4787 +3 4787 5015 5016 +3 4787 5016 4788 +3 4788 5016 4789 +3 4789 5016 5017 +3 4789 5017 4790 +3 4790 5017 5018 +3 4790 5018 5019 +3 4790 5019 4791 +3 4791 5019 5020 +3 4791 5020 5021 +3 4791 5021 4792 +3 4792 5021 4793 +3 4793 5021 5022 +3 4793 5022 4794 +3 4794 5022 4795 +3 4795 5022 4796 +3 4796 5022 5023 +3 4796 5023 5024 +3 4796 5024 5025 +3 4796 5025 4797 +3 4797 5025 4798 +3 4798 5025 5026 +3 4798 5026 5027 +3 4798 5027 5028 +3 4798 5028 4799 +3 4799 5028 5029 +3 4799 5029 4800 +3 4800 5029 5030 +3 4800 5030 4801 +3 4801 5030 5031 +3 4801 5031 5032 +3 4801 5032 4802 +3 4802 5032 5033 +3 4802 5033 4803 +3 4803 5033 4804 +3 4804 5033 5034 +3 4804 5034 5035 +3 4804 5035 4805 +3 4805 5035 5036 +3 4805 5036 5037 +3 4805 5037 4806 +3 4806 5037 4807 +3 4807 5037 4812 +3 4812 5037 4813 +3 4813 5037 5036 +3 4813 5036 5038 +3 4813 5038 4814 +3 4814 5038 4815 +3 4815 5038 5039 +3 4815 5039 5040 +3 4815 5040 4816 +3 4816 5040 4817 +3 4817 5040 5041 +3 4817 5041 4818 +3 4818 5041 5042 +3 4818 5042 5043 +3 4818 5043 4819 +3 4819 5043 5044 +3 4819 5044 4820 +3 4820 5044 4821 +3 4821 5044 4822 +3 4822 5044 5045 +3 4822 5045 5046 +3 4822 5046 4823 +3 4823 5046 5047 +3 4823 5047 4824 +3 4824 5047 4825 +3 4825 5047 4826 +3 4826 5047 5048 +3 4826 5048 5049 +3 4826 5049 4827 +3 4827 5049 4828 +3 4828 5049 5050 +3 4828 5050 5051 +3 4828 5051 4829 +3 4829 5051 5052 +3 4829 5052 4830 +3 4830 5052 4831 +3 4831 5052 5053 +3 4831 5053 5054 +3 4831 5054 4832 +3 4832 5054 4833 +3 4833 5054 5055 +3 4833 5055 5056 +3 4833 5056 4834 +3 4834 5056 4835 +3 4835 5056 5057 +3 4835 5057 5058 +3 4835 5058 4836 +3 4836 5058 4837 +3 4837 5058 5059 +3 4837 5059 4838 +3 4838 5059 5060 +3 4838 5060 5061 +3 4838 5061 4839 +3 4839 5061 5062 +3 4839 5062 4840 +3 4840 5062 5063 +3 4840 5063 4841 +3 4841 5063 5064 +3 4841 5064 4842 +3 4842 5064 5065 +3 4842 5065 4843 +3 4843 5065 5066 +3 4843 5066 4844 +3 4844 5066 5067 +3 4844 5067 4845 +3 4845 5067 5068 +3 4845 5068 5069 +3 4845 5069 4846 +3 4846 5069 4847 +3 4847 5069 5070 +3 4847 5070 4848 +3 4848 5070 4849 +3 4849 5070 5071 +3 4849 5071 4850 +3 4850 5071 5072 +3 4850 5072 5073 +3 4850 5073 4851 +3 4851 5073 4852 +3 4852 5073 5074 +3 4852 5074 5075 +3 4852 5075 4853 +3 4853 5075 5076 +3 4853 5076 4854 +3 4854 5076 5077 +3 4854 5077 4856 +3 4856 5077 5078 +3 4856 5078 4857 +3 4857 5078 4858 +3 4858 5078 5079 +3 4858 5079 4859 +3 4859 5079 5080 +3 4859 5080 4860 +3 4860 5080 5081 +3 4860 5081 4861 +3 4861 5081 5082 +3 4861 5082 5083 +3 4861 5083 4862 +3 4862 5083 5084 +3 4862 5084 4863 +3 4863 5084 4864 +3 4864 5084 5085 +3 4864 5085 5086 +3 4864 5086 4865 +3 4865 5086 5087 +3 4865 5087 5088 +3 4865 5088 4866 +3 4866 5088 4867 +3 4867 5088 5089 +3 4867 5089 4868 +3 4868 5089 5090 +3 4868 5090 5091 +3 4868 5091 4869 +3 4869 5091 5092 +3 4869 5092 4870 +3 4870 5092 5093 +3 4870 5093 4871 +3 4871 5093 5094 +3 4871 5094 4872 +3 4872 5094 5095 +3 4872 5095 4873 +3 4873 5095 5096 +3 4873 5096 4874 +3 4874 5096 5097 +3 4874 5097 5098 +3 4874 5098 4875 +3 4875 5098 5099 +3 4875 5099 4876 +3 4876 5099 5100 +3 4876 5100 4877 +3 4877 5100 5101 +3 4877 5101 4878 +3 4878 5101 5102 +3 4878 5102 4879 +3 4879 5102 5103 +3 4879 5103 4880 +3 4880 5103 5104 +3 4880 5104 4881 +3 4881 5104 5105 +3 4881 5105 4882 +3 4882 5105 5106 +3 4882 5106 4883 +3 4883 5106 5107 +3 4883 5107 4884 +3 4884 5107 5108 +3 4884 5108 4885 +3 4885 5108 5109 +3 4885 5109 4886 +3 4886 5109 5110 +3 4886 5110 5111 +3 4886 5111 4887 +3 4887 5111 5112 +3 4887 5112 4888 +3 4888 5112 4889 +3 4889 5112 5113 +3 4889 5113 5114 +3 4889 5114 4890 +3 4890 5114 5115 +3 4890 5115 4891 +3 4891 5115 4892 +3 4892 5115 5116 +3 4892 5116 5117 +3 4892 5117 4893 +3 4893 5117 5118 +3 4893 5118 4894 +3 4894 5118 5119 +3 4894 5119 5120 +3 4894 5120 4895 +3 4895 5120 5121 +3 4895 5121 4896 +3 4896 5121 5122 +3 4896 5122 4897 +3 4897 5122 5123 +3 4897 5123 4898 +3 4898 5123 5124 +3 4898 5124 5125 +3 4898 5125 4899 +3 4899 5125 5126 +3 4899 5126 5127 +3 4899 5127 4900 +3 4900 5127 4901 +3 4901 5127 5128 +3 4901 5128 4902 +3 4902 5128 5129 +3 4902 5129 4903 +3 4903 5129 5130 +3 4903 5130 4905 +3 4905 5130 4906 +3 4906 5130 5131 +3 4906 5131 4907 +3 4907 5131 5132 +3 4907 5132 4908 +3 4908 5132 5133 +3 4908 5133 4909 +3 4909 5133 5134 +3 4909 5134 4910 +3 4910 5134 5135 +3 4910 5135 4911 +3 4911 5135 5136 +3 4911 5136 4912 +3 4912 5136 5137 +3 4912 5137 4913 +3 4913 5137 5138 +3 4913 5138 4914 +3 4914 5138 5139 +3 4914 5139 4915 +3 4915 5139 5140 +3 4915 5140 4916 +3 4916 5140 5141 +3 4916 5141 5142 +3 4916 5142 4917 +3 4917 5142 4918 +3 4918 5142 5143 +3 4918 5143 4919 +3 4919 5143 5144 +3 4919 5144 4920 +3 4920 5144 5145 +3 4920 5145 4921 +3 4921 5145 4922 +3 4922 5145 5146 +3 4922 5146 5147 +3 4922 5147 4923 +3 4923 5147 5148 +3 4923 5148 4924 +3 4924 5148 5149 +3 4924 5149 4925 +3 4925 5149 5150 +3 4925 5150 4926 +3 4926 5150 5151 +3 4926 5151 4927 +3 4927 5151 5152 +3 4927 5152 4928 +3 4928 5152 5153 +3 4928 5153 4929 +3 4929 5153 5154 +3 4929 5154 4930 +3 4930 5154 5155 +3 4930 5155 4931 +3 4931 5155 5156 +3 4931 5156 4932 +3 4932 5156 4933 +3 4933 5156 5157 +3 4933 5157 4934 +3 4934 5157 5158 +3 4934 5158 4935 +3 4935 5158 5159 +3 4935 5159 5160 +3 4935 5160 5161 +3 4935 5161 4936 +3 4936 5161 5162 +3 4936 5162 4937 +3 4937 5162 5163 +3 4937 5163 4938 +3 4938 5163 5164 +3 4938 5164 5165 +3 4938 5165 4939 +3 4939 5165 4940 +3 4940 5165 5166 +3 4940 5166 4941 +3 4941 5166 5167 +3 4941 5167 5168 +3 4941 5168 4942 +3 4942 5168 5169 +3 4942 5169 4943 +3 4943 5169 5170 +3 4943 5170 4944 +3 4944 5170 4945 +3 4945 5170 5171 +3 4945 5171 5172 +3 4945 5172 4946 +3 4946 5172 5173 +3 4946 5173 5174 +3 4946 5174 4947 +3 4947 5174 5175 +3 4947 5175 4948 +3 4948 5175 5176 +3 4948 5176 4949 +3 4949 5176 5177 +3 4949 5177 4950 +3 4950 5177 5178 +3 4950 5178 5179 +3 4950 5179 5180 +3 4950 5180 4951 +3 4951 5180 4952 +3 4952 5180 4953 +3 4953 5180 5181 +3 4953 5181 4954 +3 4954 5181 4955 +3 4955 5181 4956 +3 4956 5181 5182 +3 4956 5182 4957 +3 4957 5182 5183 +3 4957 5183 5184 +3 4957 5184 4958 +3 4958 5184 5185 +3 4958 5185 4959 +3 4959 5185 5186 +3 4959 5186 5187 +3 4959 5187 4960 +3 4960 5187 5188 +3 4960 5188 4961 +3 4961 5188 5189 +3 4961 5189 5190 +3 4961 5190 4962 +3 4962 5190 4963 +3 4963 5190 5191 +3 4963 5191 4964 +3 4964 5191 5192 +3 4964 5192 4965 +3 4965 5192 5193 +3 4965 5193 4966 +3 4966 5193 5194 +3 4966 5194 4967 +3 4967 5194 5195 +3 4967 5195 4968 +3 4968 5195 5196 +3 4968 5196 4969 +3 4969 5196 5197 +3 4969 5197 4970 +3 4970 5197 5198 +3 4970 5198 4971 +3 4971 5198 5199 +3 4971 5199 4972 +3 4972 5199 5200 +3 4972 5200 4973 +3 4973 5200 5201 +3 4973 5201 4974 +3 4974 5201 5202 +3 4974 5202 4975 +3 4975 5202 5203 +3 4975 5203 4976 +3 4976 5203 5204 +3 4976 5204 4977 +3 4977 5204 4978 +3 4978 5204 5205 +3 4978 5205 4979 +3 4979 5205 5206 +3 4979 5206 5207 +3 4979 5207 4980 +3 4980 5207 5208 +3 4980 5208 4981 +3 4981 5208 4982 +3 4982 5208 5209 +3 4982 5209 5210 +3 4982 5210 4983 +3 4983 5210 5211 +3 4983 5211 4984 +3 4984 5211 4996 +3 4996 5211 4997 +3 4997 5211 4998 +3 4998 5211 5212 +3 4998 5212 5213 +3 4998 5213 4999 +3 4999 5213 5001 +3 5001 5213 5002 +3 5002 5213 5214 +3 5002 5214 5003 +3 5003 5214 5215 +3 5003 5215 5216 +3 5003 5216 5004 +3 5004 5216 5207 +3 5207 5216 5217 +3 5207 5217 5208 +3 5208 5217 5209 +3 5209 5217 5218 +3 5209 5218 5210 +3 5210 5218 5212 +3 5212 5218 5214 +3 5214 5218 5215 +3 5215 5218 5217 +3 5215 5217 5216 +3 5212 5214 5213 +3 5210 5212 5211 +3 5004 5207 5206 +3 5004 5206 5006 +3 5006 5206 5205 +3 5006 5205 5219 +3 5006 5219 5007 +3 5007 5219 5008 +3 5008 5219 5220 +3 5008 5220 5221 +3 5008 5221 5009 +3 5009 5221 5010 +3 5010 5221 5222 +3 5010 5222 5223 +3 5010 5223 5224 +3 5010 5224 5011 +3 5011 5224 5012 +3 5012 5224 5225 +3 5012 5225 5013 +3 5013 5225 5226 +3 5013 5226 5227 +3 5013 5227 5228 +3 5013 5228 5014 +3 5014 5228 5015 +3 5015 5228 5229 +3 5015 5229 5016 +3 5016 5229 5017 +3 5017 5229 5018 +3 5018 5229 5230 +3 5018 5230 5231 +3 5018 5231 5019 +3 5019 5231 5232 +3 5019 5232 5020 +3 5020 5232 5233 +3 5020 5233 5023 +3 5023 5233 5234 +3 5023 5234 5024 +3 5024 5234 5235 +3 5024 5235 5025 +3 5025 5235 5026 +3 5026 5235 5236 +3 5026 5236 5237 +3 5026 5237 5027 +3 5027 5237 5238 +3 5027 5238 5239 +3 5027 5239 5028 +3 5028 5239 5240 +3 5028 5240 5029 +3 5029 5240 5241 +3 5029 5241 5242 +3 5029 5242 5030 +3 5030 5242 5031 +3 5031 5242 5243 +3 5031 5243 5032 +3 5032 5243 5244 +3 5032 5244 5033 +3 5033 5244 5245 +3 5033 5245 5034 +3 5034 5245 5246 +3 5034 5246 5247 +3 5034 5247 5035 +3 5035 5247 5248 +3 5035 5248 5036 +3 5036 5248 5038 +3 5038 5248 5039 +3 5039 5248 5249 +3 5039 5249 5250 +3 5039 5250 5040 +3 5040 5250 5041 +3 5041 5250 5251 +3 5041 5251 5042 +3 5042 5251 5252 +3 5042 5252 5253 +3 5042 5253 5043 +3 5043 5253 5254 +3 5043 5254 5044 +3 5044 5254 5045 +3 5045 5254 5255 +3 5045 5255 5256 +3 5045 5256 5046 +3 5046 5256 5257 +3 5046 5257 5048 +3 5048 5257 5258 +3 5048 5258 5259 +3 5048 5259 5049 +3 5049 5259 5260 +3 5049 5260 5050 +3 5050 5260 5261 +3 5050 5261 5262 +3 5050 5262 5051 +3 5051 5262 5263 +3 5051 5263 5052 +3 5052 5263 5053 +3 5053 5263 5264 +3 5053 5264 5265 +3 5053 5265 5054 +3 5054 5265 5055 +3 5055 5265 5266 +3 5055 5266 5267 +3 5055 5267 5056 +3 5056 5267 5057 +3 5057 5267 5268 +3 5057 5268 5269 +3 5057 5269 5058 +3 5058 5269 5059 +3 5059 5269 5270 +3 5059 5270 5060 +3 5060 5270 5271 +3 5060 5271 5272 +3 5060 5272 5061 +3 5061 5272 5273 +3 5061 5273 5062 +3 5062 5273 5274 +3 5062 5274 5063 +3 5063 5274 5275 +3 5063 5275 5064 +3 5064 5275 5276 +3 5064 5276 5065 +3 5065 5276 5277 +3 5065 5277 5066 +3 5066 5277 5278 +3 5066 5278 5067 +3 5067 5278 5279 +3 5067 5279 5068 +3 5068 5279 5280 +3 5068 5280 5281 +3 5068 5281 5069 +3 5069 5281 5070 +3 5070 5281 5071 +3 5071 5281 5282 +3 5071 5282 5072 +3 5072 5282 5283 +3 5072 5283 5073 +3 5073 5283 5074 +3 5074 5283 5284 +3 5074 5284 5075 +3 5075 5284 5285 +3 5075 5285 5076 +3 5076 5285 5286 +3 5076 5286 5077 +3 5077 5286 5287 +3 5077 5287 5078 +3 5078 5287 5288 +3 5078 5288 5079 +3 5079 5288 5080 +3 5080 5288 5289 +3 5080 5289 5081 +3 5081 5289 5290 +3 5081 5290 5082 +3 5082 5290 5291 +3 5082 5291 5292 +3 5082 5292 5083 +3 5083 5292 5085 +3 5085 5292 5293 +3 5085 5293 5086 +3 5086 5293 5294 +3 5086 5294 5087 +3 5087 5294 5295 +3 5087 5295 5296 +3 5087 5296 5088 +3 5088 5296 5089 +3 5089 5296 5297 +3 5089 5297 5090 +3 5090 5297 5298 +3 5090 5298 5299 +3 5090 5299 5091 +3 5091 5299 5300 +3 5091 5300 5092 +3 5092 5300 5301 +3 5092 5301 5093 +3 5093 5301 5302 +3 5093 5302 5094 +3 5094 5302 5303 +3 5094 5303 5095 +3 5095 5303 5304 +3 5095 5304 5096 +3 5096 5304 5305 +3 5096 5305 5097 +3 5097 5305 5306 +3 5097 5306 5307 +3 5097 5307 5098 +3 5098 5307 5308 +3 5098 5308 5099 +3 5099 5308 5309 +3 5099 5309 5100 +3 5100 5309 5310 +3 5100 5310 5101 +3 5101 5310 5311 +3 5101 5311 5102 +3 5102 5311 5312 +3 5102 5312 5103 +3 5103 5312 5313 +3 5103 5313 5104 +3 5104 5313 5314 +3 5104 5314 5105 +3 5105 5314 5315 +3 5105 5315 5106 +3 5106 5315 5316 +3 5106 5316 5107 +3 5107 5316 5317 +3 5107 5317 5108 +3 5108 5317 5318 +3 5108 5318 5109 +3 5109 5318 5319 +3 5109 5319 5110 +3 5110 5319 5320 +3 5110 5320 5321 +3 5110 5321 5111 +3 5111 5321 5322 +3 5111 5322 5112 +3 5112 5322 5113 +3 5113 5322 5323 +3 5113 5323 5324 +3 5113 5324 5114 +3 5114 5324 5325 +3 5114 5325 5115 +3 5115 5325 5116 +3 5116 5325 5326 +3 5116 5326 5327 +3 5116 5327 5117 +3 5117 5327 5118 +3 5118 5327 5328 +3 5118 5328 5119 +3 5119 5328 5329 +3 5119 5329 5330 +3 5119 5330 5120 +3 5120 5330 5331 +3 5120 5331 5121 +3 5121 5331 5332 +3 5121 5332 5122 +3 5122 5332 5333 +3 5122 5333 5123 +3 5123 5333 5334 +3 5123 5334 5124 +3 5124 5334 5335 +3 5124 5335 5336 +3 5124 5336 5125 +3 5125 5336 5337 +3 5125 5337 5126 +3 5126 5337 5338 +3 5126 5338 5339 +3 5126 5339 5127 +3 5127 5339 5128 +3 5128 5339 5340 +3 5128 5340 5129 +3 5129 5340 5341 +3 5129 5341 5130 +3 5130 5341 5131 +3 5131 5341 5342 +3 5131 5342 5132 +3 5132 5342 5343 +3 5132 5343 5133 +3 5133 5343 5344 +3 5133 5344 5134 +3 5134 5344 5345 +3 5134 5345 5135 +3 5135 5345 5346 +3 5135 5346 5136 +3 5136 5346 5347 +3 5136 5347 5137 +3 5137 5347 5348 +3 5137 5348 5138 +3 5138 5348 5349 +3 5138 5349 5139 +3 5139 5349 5350 +3 5139 5350 5140 +3 5140 5350 5351 +3 5140 5351 5141 +3 5141 5351 5352 +3 5141 5352 5353 +3 5141 5353 5142 +3 5142 5353 5354 +3 5142 5354 5143 +3 5143 5354 5355 +3 5143 5355 5144 +3 5144 5355 5356 +3 5144 5356 5145 +3 5145 5356 5146 +3 5146 5356 5357 +3 5146 5357 5358 +3 5146 5358 5147 +3 5147 5358 5359 +3 5147 5359 5148 +3 5148 5359 5360 +3 5148 5360 5149 +3 5149 5360 5361 +3 5149 5361 5150 +3 5150 5361 5362 +3 5150 5362 5151 +3 5151 5362 5363 +3 5151 5363 5152 +3 5152 5363 5364 +3 5152 5364 5153 +3 5153 5364 5154 +3 5154 5364 5365 +3 5154 5365 5366 +3 5154 5366 5155 +3 5155 5366 5367 +3 5155 5367 5156 +3 5156 5367 5368 +3 5156 5368 5157 +3 5157 5368 5158 +3 5158 5368 5369 +3 5158 5369 5159 +3 5159 5369 5370 +3 5159 5370 5371 +3 5159 5371 5160 +3 5160 5371 5372 +3 5160 5372 5373 +3 5160 5373 5161 +3 5161 5373 5374 +3 5161 5374 5162 +3 5162 5374 5375 +3 5162 5375 5163 +3 5163 5375 5376 +3 5163 5376 5164 +3 5164 5376 5377 +3 5164 5377 5378 +3 5164 5378 5165 +3 5165 5378 5166 +3 5166 5378 5379 +3 5166 5379 5167 +3 5167 5379 5380 +3 5167 5380 5381 +3 5167 5381 5168 +3 5168 5381 5382 +3 5168 5382 5169 +3 5169 5382 5383 +3 5169 5383 5170 +3 5170 5383 5171 +3 5171 5383 5384 +3 5171 5384 5385 +3 5171 5385 5172 +3 5172 5385 5386 +3 5172 5386 5173 +3 5173 5386 5387 +3 5173 5387 5388 +3 5173 5388 5174 +3 5174 5388 5389 +3 5174 5389 5175 +3 5175 5389 5390 +3 5175 5390 5176 +3 5176 5390 5391 +3 5176 5391 5177 +3 5177 5391 5392 +3 5177 5392 5178 +3 5178 5392 5393 +3 5178 5393 5183 +3 5183 5393 5394 +3 5183 5394 5184 +3 5184 5394 5185 +3 5185 5394 5395 +3 5185 5395 5396 +3 5185 5396 5186 +3 5186 5396 5397 +3 5186 5397 5187 +3 5187 5397 5398 +3 5187 5398 5188 +3 5188 5398 5399 +3 5188 5399 5189 +3 5189 5399 5400 +3 5189 5400 5401 +3 5189 5401 5190 +3 5190 5401 5191 +3 5191 5401 5402 +3 5191 5402 5192 +3 5192 5402 5403 +3 5192 5403 5193 +3 5193 5403 5404 +3 5193 5404 5194 +3 5194 5404 5405 +3 5194 5405 5195 +3 5195 5405 5406 +3 5195 5406 5196 +3 5196 5406 5407 +3 5196 5407 5197 +3 5197 5407 5408 +3 5197 5408 5198 +3 5198 5408 5409 +3 5198 5409 5199 +3 5199 5409 5410 +3 5199 5410 5200 +3 5200 5410 5411 +3 5200 5411 5201 +3 5201 5411 5222 +3 5222 5411 5223 +3 5223 5411 5412 +3 5223 5412 5224 +3 5224 5412 5413 +3 5224 5413 5414 +3 5224 5414 5225 +3 5225 5414 5226 +3 5226 5414 5415 +3 5226 5415 5227 +3 5227 5415 5416 +3 5227 5416 5417 +3 5227 5417 5228 +3 5228 5417 5230 +3 5230 5417 5418 +3 5230 5418 5419 +3 5230 5419 5231 +3 5231 5419 5420 +3 5231 5420 5421 +3 5231 5421 5422 +3 5231 5422 5232 +3 5232 5422 5423 +3 5232 5423 5233 +3 5233 5423 5424 +3 5233 5424 5234 +3 5234 5424 5425 +3 5234 5425 5235 +3 5235 5425 5236 +3 5236 5425 5426 +3 5236 5426 5427 +3 5236 5427 5237 +3 5237 5427 5428 +3 5237 5428 5238 +3 5238 5428 5429 +3 5238 5429 5430 +3 5238 5430 5239 +3 5239 5430 5431 +3 5239 5431 5240 +3 5240 5431 5432 +3 5240 5432 5433 +3 5240 5433 5241 +3 5241 5433 5242 +3 5242 5433 5243 +3 5243 5433 5244 +3 5244 5433 5434 +3 5244 5434 5245 +3 5245 5434 5435 +3 5245 5435 5246 +3 5246 5435 5436 +3 5246 5436 5437 +3 5246 5437 5247 +3 5247 5437 5249 +3 5249 5437 5438 +3 5249 5438 5250 +3 5250 5438 5251 +3 5251 5438 5439 +3 5251 5439 5252 +3 5252 5439 5440 +3 5252 5440 5441 +3 5252 5441 5253 +3 5253 5441 5442 +3 5253 5442 5254 +3 5254 5442 5255 +3 5255 5442 5443 +3 5255 5443 5444 +3 5255 5444 5256 +3 5256 5444 5445 +3 5256 5445 5257 +3 5257 5445 5258 +3 5258 5445 5446 +3 5258 5446 5447 +3 5258 5447 5448 +3 5258 5448 5259 +3 5259 5448 5260 +3 5260 5448 5449 +3 5260 5449 5450 +3 5260 5450 5261 +3 5261 5450 5451 +3 5261 5451 5452 +3 5261 5452 5262 +3 5262 5452 5453 +3 5262 5453 5263 +3 5263 5453 5264 +3 5264 5453 5454 +3 5264 5454 5455 +3 5264 5455 5265 +3 5265 5455 5266 +3 5266 5455 5456 +3 5266 5456 5457 +3 5266 5457 5267 +3 5267 5457 5268 +3 5268 5457 5458 +3 5268 5458 5459 +3 5268 5459 5269 +3 5269 5459 5270 +3 5270 5459 5460 +3 5270 5460 5271 +3 5271 5460 5461 +3 5271 5461 5462 +3 5271 5462 5272 +3 5272 5462 5463 +3 5272 5463 5273 +3 5273 5463 5464 +3 5273 5464 5274 +3 5274 5464 5465 +3 5274 5465 5275 +3 5275 5465 5466 +3 5275 5466 5276 +3 5276 5466 5467 +3 5276 5467 5277 +3 5277 5467 5468 +3 5277 5468 5278 +3 5278 5468 5469 +3 5278 5469 5279 +3 5279 5469 5470 +3 5279 5470 5280 +3 5280 5470 5471 +3 5280 5471 5282 +3 5282 5471 5283 +3 5283 5471 5284 +3 5284 5471 5472 +3 5284 5472 5285 +3 5285 5472 5473 +3 5285 5473 5286 +3 5286 5473 5474 +3 5286 5474 5287 +3 5287 5474 5475 +3 5287 5475 5288 +3 5288 5475 5476 +3 5288 5476 5289 +3 5289 5476 5477 +3 5289 5477 5290 +3 5290 5477 5478 +3 5290 5478 5291 +3 5291 5478 5479 +3 5291 5479 5292 +3 5292 5479 5293 +3 5293 5479 5480 +3 5293 5480 5294 +3 5294 5480 5481 +3 5294 5481 5295 +3 5295 5481 5482 +3 5295 5482 5483 +3 5295 5483 5296 +3 5296 5483 5297 +3 5297 5483 5484 +3 5297 5484 5298 +3 5298 5484 5485 +3 5298 5485 5486 +3 5298 5486 5299 +3 5299 5486 5487 +3 5299 5487 5300 +3 5300 5487 5488 +3 5300 5488 5301 +3 5301 5488 5489 +3 5301 5489 5302 +3 5302 5489 5490 +3 5302 5490 5303 +3 5303 5490 5491 +3 5303 5491 5304 +3 5304 5491 5492 +3 5304 5492 5305 +3 5305 5492 5493 +3 5305 5493 5306 +3 5306 5493 5494 +3 5306 5494 5495 +3 5306 5495 5307 +3 5307 5495 5496 +3 5307 5496 5308 +3 5308 5496 5497 +3 5308 5497 5309 +3 5309 5497 5498 +3 5309 5498 5310 +3 5310 5498 5499 +3 5310 5499 5311 +3 5311 5499 5500 +3 5311 5500 5312 +3 5312 5500 5501 +3 5312 5501 5313 +3 5313 5501 5502 +3 5313 5502 5314 +3 5314 5502 5503 +3 5314 5503 5315 +3 5315 5503 5504 +3 5315 5504 5316 +3 5316 5504 5505 +3 5316 5505 5317 +3 5317 5505 5506 +3 5317 5506 5318 +3 5318 5506 5507 +3 5318 5507 5319 +3 5319 5507 5508 +3 5319 5508 5320 +3 5320 5508 5509 +3 5320 5509 5510 +3 5320 5510 5321 +3 5321 5510 5511 +3 5321 5511 5322 +3 5322 5511 5323 +3 5323 5511 5512 +3 5323 5512 5513 +3 5323 5513 5324 +3 5324 5513 5514 +3 5324 5514 5325 +3 5325 5514 5326 +3 5326 5514 5515 +3 5326 5515 5516 +3 5326 5516 5327 +3 5327 5516 5328 +3 5328 5516 5329 +3 5329 5516 5517 +3 5329 5517 5518 +3 5329 5518 5330 +3 5330 5518 5519 +3 5330 5519 5331 +3 5331 5519 5520 +3 5331 5520 5332 +3 5332 5520 5333 +3 5333 5520 5521 +3 5333 5521 5334 +3 5334 5521 5522 +3 5334 5522 5335 +3 5335 5522 5523 +3 5335 5523 5524 +3 5335 5524 5336 +3 5336 5524 5337 +3 5337 5524 5525 +3 5337 5525 5526 +3 5337 5526 5338 +3 5338 5526 5527 +3 5338 5527 5528 +3 5338 5528 5339 +3 5339 5528 5340 +3 5340 5528 5529 +3 5340 5529 5341 +3 5341 5529 5342 +3 5342 5529 5530 +3 5342 5530 5343 +3 5343 5530 5531 +3 5343 5531 5344 +3 5344 5531 5532 +3 5344 5532 5345 +3 5345 5532 5533 +3 5345 5533 5346 +3 5346 5533 5534 +3 5346 5534 5347 +3 5347 5534 5535 +3 5347 5535 5348 +3 5348 5535 5536 +3 5348 5536 5349 +3 5349 5536 5537 +3 5349 5537 5350 +3 5350 5537 5538 +3 5350 5538 5351 +3 5351 5538 5539 +3 5351 5539 5352 +3 5352 5539 5540 +3 5352 5540 5541 +3 5352 5541 5353 +3 5353 5541 5542 +3 5353 5542 5354 +3 5354 5542 5543 +3 5354 5543 5355 +3 5355 5543 5544 +3 5355 5544 5356 +3 5356 5544 5357 +3 5357 5544 5545 +3 5357 5545 5546 +3 5357 5546 5358 +3 5358 5546 5547 +3 5358 5547 5359 +3 5359 5547 5548 +3 5359 5548 5360 +3 5360 5548 5549 +3 5360 5549 5361 +3 5361 5549 5550 +3 5361 5550 5362 +3 5362 5550 5551 +3 5362 5551 5363 +3 5363 5551 5552 +3 5363 5552 5364 +3 5364 5552 5553 +3 5364 5553 5365 +3 5365 5553 5554 +3 5365 5554 5366 +3 5366 5554 5555 +3 5366 5555 5367 +3 5367 5555 5368 +3 5368 5555 5369 +3 5369 5555 5556 +3 5369 5556 5370 +3 5370 5556 5557 +3 5370 5557 5371 +3 5371 5557 5558 +3 5371 5558 5372 +3 5372 5558 5559 +3 5372 5559 5560 +3 5372 5560 5373 +3 5373 5560 5561 +3 5373 5561 5374 +3 5374 5561 5562 +3 5374 5562 5375 +3 5375 5562 5563 +3 5375 5563 5376 +3 5376 5563 5564 +3 5376 5564 5377 +3 5377 5564 5565 +3 5377 5565 5566 +3 5377 5566 5378 +3 5378 5566 5379 +3 5379 5566 5567 +3 5379 5567 5380 +3 5380 5567 5568 +3 5380 5568 5569 +3 5380 5569 5381 +3 5381 5569 5570 +3 5381 5570 5382 +3 5382 5570 5571 +3 5382 5571 5383 +3 5383 5571 5384 +3 5384 5571 5572 +3 5384 5572 5573 +3 5384 5573 5385 +3 5385 5573 5574 +3 5385 5574 5386 +3 5386 5574 5575 +3 5386 5575 5387 +3 5387 5575 5576 +3 5387 5576 5577 +3 5387 5577 5388 +3 5388 5577 5578 +3 5388 5578 5389 +3 5389 5578 5579 +3 5389 5579 5390 +3 5390 5579 5580 +3 5390 5580 5391 +3 5391 5580 5581 +3 5391 5581 5392 +3 5392 5581 5429 +3 5429 5581 5582 +3 5429 5582 5430 +3 5430 5582 5431 +3 5431 5582 5583 +3 5431 5583 5584 +3 5431 5584 5432 +3 5432 5584 5585 +3 5432 5585 5434 +3 5434 5585 5435 +3 5435 5585 5586 +3 5435 5586 5436 +3 5436 5586 5587 +3 5436 5587 5588 +3 5436 5588 5437 +3 5437 5588 5438 +3 5438 5588 5439 +3 5439 5588 5589 +3 5439 5589 5440 +3 5440 5589 5590 +3 5440 5590 5591 +3 5440 5591 5441 +3 5441 5591 5592 +3 5441 5592 5442 +3 5442 5592 5443 +3 5443 5592 5593 +3 5443 5593 5594 +3 5443 5594 5444 +3 5444 5594 5595 +3 5444 5595 5445 +3 5445 5595 5446 +3 5446 5595 5447 +3 5447 5595 5596 +3 5447 5596 5597 +3 5447 5597 5598 +3 5447 5598 5448 +3 5448 5598 5449 +3 5449 5598 5599 +3 5449 5599 5600 +3 5449 5600 5450 +3 5450 5600 5451 +3 5451 5600 5601 +3 5451 5601 5602 +3 5451 5602 5452 +3 5452 5602 5603 +3 5452 5603 5453 +3 5453 5603 5454 +3 5454 5603 5604 +3 5454 5604 5605 +3 5454 5605 5455 +3 5455 5605 5456 +3 5456 5605 5606 +3 5456 5606 5607 +3 5456 5607 5457 +3 5457 5607 5458 +3 5458 5607 5608 +3 5458 5608 5609 +3 5458 5609 5459 +3 5459 5609 5460 +3 5460 5609 5610 +3 5460 5610 5461 +3 5461 5610 5611 +3 5461 5611 5612 +3 5461 5612 5462 +3 5462 5612 5613 +3 5462 5613 5463 +3 5463 5613 5614 +3 5463 5614 5464 +3 5464 5614 5615 +3 5464 5615 5465 +3 5465 5615 5616 +3 5465 5616 5466 +3 5466 5616 5617 +3 5466 5617 5467 +3 5467 5617 5618 +3 5467 5618 5468 +3 5468 5618 5619 +3 5468 5619 5469 +3 5469 5619 5620 +3 5469 5620 5470 +3 5470 5620 5472 +3 5472 5620 5473 +3 5473 5620 5621 +3 5473 5621 5474 +3 5474 5621 5622 +3 5474 5622 5475 +3 5475 5622 5623 +3 5475 5623 5476 +3 5476 5623 5624 +3 5476 5624 5477 +3 5477 5624 5625 +3 5477 5625 5478 +3 5478 5625 5626 +3 5478 5626 5479 +3 5479 5626 5480 +3 5480 5626 5627 +3 5480 5627 5481 +3 5481 5627 5628 +3 5481 5628 5482 +3 5482 5628 5629 +3 5482 5629 5630 +3 5482 5630 5483 +3 5483 5630 5484 +3 5484 5630 5631 +3 5484 5631 5485 +3 5485 5631 5632 +3 5485 5632 5633 +3 5485 5633 5486 +3 5486 5633 5634 +3 5486 5634 5487 +3 5487 5634 5635 +3 5487 5635 5488 +3 5488 5635 5636 +3 5488 5636 5489 +3 5489 5636 5637 +3 5489 5637 5490 +3 5490 5637 5638 +3 5490 5638 5491 +3 5491 5638 5639 +3 5491 5639 5492 +3 5492 5639 5640 +3 5492 5640 5493 +3 5493 5640 5641 +3 5493 5641 5494 +3 5494 5641 5642 +3 5494 5642 5643 +3 5494 5643 5495 +3 5495 5643 5644 +3 5495 5644 5496 +3 5496 5644 5645 +3 5496 5645 5497 +3 5497 5645 5646 +3 5497 5646 5498 +3 5498 5646 5647 +3 5498 5647 5499 +3 5499 5647 5648 +3 5499 5648 5500 +3 5500 5648 5649 +3 5500 5649 5501 +3 5501 5649 5650 +3 5501 5650 5502 +3 5502 5650 5651 +3 5502 5651 5503 +3 5503 5651 5652 +3 5503 5652 5504 +3 5504 5652 5653 +3 5504 5653 5505 +3 5505 5653 5654 +3 5505 5654 5506 +3 5506 5654 5655 +3 5506 5655 5507 +3 5507 5655 5656 +3 5507 5656 5508 +3 5508 5656 5657 +3 5508 5657 5509 +3 5509 5657 5658 +3 5509 5658 5659 +3 5509 5659 5510 +3 5510 5659 5660 +3 5510 5660 5511 +3 5511 5660 5512 +3 5512 5660 5661 +3 5512 5661 5662 +3 5512 5662 5513 +3 5513 5662 5663 +3 5513 5663 5514 +3 5514 5663 5515 +3 5515 5663 5664 +3 5515 5664 5517 +3 5517 5664 5665 +3 5517 5665 5518 +3 5518 5665 5666 +3 5518 5666 5519 +3 5519 5666 5667 +3 5519 5667 5520 +3 5520 5667 5668 +3 5520 5668 5521 +3 5521 5668 5669 +3 5521 5669 5522 +3 5522 5669 5523 +3 5523 5669 5670 +3 5523 5670 5671 +3 5523 5671 5524 +3 5524 5671 5525 +3 5525 5671 5672 +3 5525 5672 5526 +3 5526 5672 5673 +3 5526 5673 5527 +3 5527 5673 5674 +3 5527 5674 5675 +3 5527 5675 5528 +3 5528 5675 5529 +3 5529 5675 5530 +3 5530 5675 5676 +3 5530 5676 5531 +3 5531 5676 5677 +3 5531 5677 5532 +3 5532 5677 5678 +3 5532 5678 5533 +3 5533 5678 5679 +3 5533 5679 5534 +3 5534 5679 5680 +3 5534 5680 5535 +3 5535 5680 5681 +3 5535 5681 5682 +3 5535 5682 5536 +3 5536 5682 5683 +3 5536 5683 5537 +3 5537 5683 5684 +3 5537 5684 5538 +3 5538 5684 5685 +3 5538 5685 5539 +3 5539 5685 5686 +3 5539 5686 5540 +3 5540 5686 5687 +3 5540 5687 5688 +3 5540 5688 5541 +3 5541 5688 5689 +3 5541 5689 5542 +3 5542 5689 5543 +3 5543 5689 5690 +3 5543 5690 5544 +3 5544 5690 5545 +3 5545 5690 5691 +3 5545 5691 5692 +3 5545 5692 5546 +3 5546 5692 5693 +3 5546 5693 5547 +3 5547 5693 5694 +3 5547 5694 5548 +3 5548 5694 5695 +3 5548 5695 5549 +3 5549 5695 5696 +3 5549 5696 5550 +3 5550 5696 5697 +3 5550 5697 5551 +3 5551 5697 5698 +3 5551 5698 5552 +3 5552 5698 5699 +3 5552 5699 5553 +3 5553 5699 5700 +3 5553 5700 5554 +3 5554 5700 5556 +3 5556 5700 5557 +3 5557 5700 5701 +3 5557 5701 5558 +3 5558 5701 5702 +3 5558 5702 5559 +3 5559 5702 5703 +3 5559 5703 5704 +3 5559 5704 5560 +3 5560 5704 5705 +3 5560 5705 5561 +3 5561 5705 5706 +3 5561 5706 5562 +3 5562 5706 5707 +3 5562 5707 5563 +3 5563 5707 5708 +3 5563 5708 5564 +3 5564 5708 5709 +3 5564 5709 5565 +3 5565 5709 5710 +3 5565 5710 5711 +3 5565 5711 5566 +3 5566 5711 5567 +3 5567 5711 5712 +3 5567 5712 5568 +3 5568 5712 5713 +3 5568 5713 5714 +3 5568 5714 5569 +3 5569 5714 5715 +3 5569 5715 5570 +3 5570 5715 5716 +3 5570 5716 5571 +3 5571 5716 5572 +3 5572 5716 5717 +3 5572 5717 5718 +3 5572 5718 5573 +3 5573 5718 5719 +3 5573 5719 5574 +3 5574 5719 5720 +3 5574 5720 5575 +3 5575 5720 5721 +3 5575 5721 5576 +3 5576 5721 5722 +3 5576 5722 5577 +3 5577 5722 5723 +3 5577 5723 5724 +3 5577 5724 5578 +3 5578 5724 5725 +3 5578 5725 5579 +3 5579 5725 5726 +3 5579 5726 5580 +3 5580 5726 5583 +3 5583 5726 5584 +3 5584 5726 5727 +3 5584 5727 5585 +3 5585 5727 5586 +3 5586 5727 5728 +3 5586 5728 5587 +3 5587 5728 5729 +3 5587 5729 5589 +3 5589 5729 5590 +3 5590 5729 5730 +3 5590 5730 5591 +3 5591 5730 5731 +3 5591 5731 5592 +3 5592 5731 5593 +3 5593 5731 5732 +3 5593 5732 5733 +3 5593 5733 5594 +3 5594 5733 5734 +3 5594 5734 5595 +3 5595 5734 5596 +3 5596 5734 5735 +3 5596 5735 5597 +3 5597 5735 5736 +3 5597 5736 5737 +3 5597 5737 5738 +3 5597 5738 5598 +3 5598 5738 5739 +3 5598 5739 5599 +3 5599 5739 5740 +3 5599 5740 5741 +3 5599 5741 5742 +3 5599 5742 5600 +3 5600 5742 5601 +3 5601 5742 5743 +3 5601 5743 5744 +3 5601 5744 5602 +3 5602 5744 5745 +3 5602 5745 5603 +3 5603 5745 5604 +3 5604 5745 5746 +3 5604 5746 5747 +3 5604 5747 5605 +3 5605 5747 5606 +3 5606 5747 5748 +3 5606 5748 5749 +3 5606 5749 5607 +3 5607 5749 5608 +3 5608 5749 5750 +3 5608 5750 5751 +3 5608 5751 5609 +3 5609 5751 5610 +3 5610 5751 5752 +3 5610 5752 5611 +3 5611 5752 5753 +3 5611 5753 5754 +3 5611 5754 5612 +3 5612 5754 5755 +3 5612 5755 5613 +3 5613 5755 5756 +3 5613 5756 5614 +3 5614 5756 5757 +3 5614 5757 5615 +3 5615 5757 5758 +3 5615 5758 5616 +3 5616 5758 5759 +3 5616 5759 5617 +3 5617 5759 5760 +3 5617 5760 5618 +3 5618 5760 5761 +3 5618 5761 5619 +3 5619 5761 5621 +3 5621 5761 5622 +3 5622 5761 5762 +3 5622 5762 5623 +3 5623 5762 5763 +3 5623 5763 5624 +3 5624 5763 5764 +3 5624 5764 5625 +3 5625 5764 5765 +3 5625 5765 5626 +3 5626 5765 5627 +3 5627 5765 5766 +3 5627 5766 5628 +3 5628 5766 5767 +3 5628 5767 5629 +3 5629 5767 5768 +3 5629 5768 5769 +3 5629 5769 5630 +3 5630 5769 5631 +3 5631 5769 5770 +3 5631 5770 5632 +3 5632 5770 5771 +3 5632 5771 5772 +3 5632 5772 5633 +3 5633 5772 5773 +3 5633 5773 5634 +3 5634 5773 5774 +3 5634 5774 5635 +3 5635 5774 5775 +3 5635 5775 5636 +3 5636 5775 5776 +3 5636 5776 5637 +3 5637 5776 5777 +3 5637 5777 5638 +3 5638 5777 5778 +3 5638 5778 5639 +3 5639 5778 5779 +3 5639 5779 5640 +3 5640 5779 5780 +3 5640 5780 5641 +3 5641 5780 5781 +3 5641 5781 5642 +3 5642 5781 5782 +3 5642 5782 5783 +3 5642 5783 5643 +3 5643 5783 5784 +3 5643 5784 5644 +3 5644 5784 5785 +3 5644 5785 5645 +3 5645 5785 5786 +3 5645 5786 5646 +3 5646 5786 5787 +3 5646 5787 5647 +3 5647 5787 5788 +3 5647 5788 5648 +3 5648 5788 5789 +3 5648 5789 5649 +3 5649 5789 5790 +3 5649 5790 5650 +3 5650 5790 5791 +3 5650 5791 5651 +3 5651 5791 5792 +3 5651 5792 5652 +3 5652 5792 5793 +3 5652 5793 5653 +3 5653 5793 5794 +3 5653 5794 5654 +3 5654 5794 5795 +3 5654 5795 5655 +3 5655 5795 5796 +3 5655 5796 5656 +3 5656 5796 5797 +3 5656 5797 5657 +3 5657 5797 5798 +3 5657 5798 5658 +3 5658 5798 5799 +3 5658 5799 5800 +3 5658 5800 5659 +3 5659 5800 5801 +3 5659 5801 5660 +3 5660 5801 5661 +3 5661 5801 5802 +3 5661 5802 5803 +3 5661 5803 5662 +3 5662 5803 5804 +3 5662 5804 5663 +3 5663 5804 5664 +3 5664 5804 5805 +3 5664 5805 5665 +3 5665 5805 5806 +3 5665 5806 5666 +3 5666 5806 5807 +3 5666 5807 5667 +3 5667 5807 5808 +3 5667 5808 5668 +3 5668 5808 5809 +3 5668 5809 5669 +3 5669 5809 5810 +3 5669 5810 5670 +3 5670 5810 5811 +3 5670 5811 5812 +3 5670 5812 5671 +3 5671 5812 5672 +3 5672 5812 5813 +3 5672 5813 5673 +3 5673 5813 5814 +3 5673 5814 5674 +3 5674 5814 5815 +3 5674 5815 5816 +3 5674 5816 5675 +3 5675 5816 5676 +3 5676 5816 5815 +3 5676 5815 5677 +3 5677 5815 5817 +3 5677 5817 5678 +3 5678 5817 5818 +3 5678 5818 5679 +3 5679 5818 5819 +3 5679 5819 5680 +3 5680 5819 5820 +3 5680 5820 5681 +3 5681 5820 5821 +3 5681 5821 5822 +3 5681 5822 5682 +3 5682 5822 5683 +3 5683 5822 5823 +3 5683 5823 5684 +3 5684 5823 5824 +3 5684 5824 5825 +3 5684 5825 5685 +3 5685 5825 5826 +3 5685 5826 5827 +3 5685 5827 5686 +3 5686 5827 5828 +3 5686 5828 5687 +3 5687 5828 5829 +3 5687 5829 5830 +3 5687 5830 5688 +3 5688 5830 5831 +3 5688 5831 5689 +3 5689 5831 5690 +3 5690 5831 5691 +3 5691 5831 5832 +3 5691 5832 5833 +3 5691 5833 5692 +3 5692 5833 5834 +3 5692 5834 5693 +3 5693 5834 5835 +3 5693 5835 5694 +3 5694 5835 5836 +3 5694 5836 5695 +3 5695 5836 5837 +3 5695 5837 5696 +3 5696 5837 5838 +3 5696 5838 5697 +3 5697 5838 5839 +3 5697 5839 5698 +3 5698 5839 5840 +3 5698 5840 5699 +3 5699 5840 5701 +3 5701 5840 5702 +3 5702 5840 5841 +3 5702 5841 5703 +3 5703 5841 5842 +3 5703 5842 5843 +3 5703 5843 5704 +3 5704 5843 5844 +3 5704 5844 5705 +3 5705 5844 5845 +3 5705 5845 5706 +3 5706 5845 5846 +3 5706 5846 5707 +3 5707 5846 5847 +3 5707 5847 5708 +3 5708 5847 5848 +3 5708 5848 5709 +3 5709 5848 5849 +3 5709 5849 5710 +3 5710 5849 5850 +3 5710 5850 5851 +3 5710 5851 5711 +3 5711 5851 5712 +3 5712 5851 5852 +3 5712 5852 5713 +3 5713 5852 5853 +3 5713 5853 5854 +3 5713 5854 5714 +3 5714 5854 5855 +3 5714 5855 5715 +3 5715 5855 5856 +3 5715 5856 5716 +3 5716 5856 5717 +3 5717 5856 5857 +3 5717 5857 5858 +3 5717 5858 5718 +3 5718 5858 5859 +3 5718 5859 5719 +3 5719 5859 5860 +3 5719 5860 5720 +3 5720 5860 5861 +3 5720 5861 5721 +3 5721 5861 5862 +3 5721 5862 5722 +3 5722 5862 5863 +3 5722 5863 5864 +3 5722 5864 5723 +3 5723 5864 5865 +3 5723 5865 5724 +3 5724 5865 5866 +3 5724 5866 5867 +3 5724 5867 5725 +3 5725 5867 5868 +3 5725 5868 5726 +3 5726 5868 5727 +3 5727 5868 5728 +3 5728 5868 5869 +3 5728 5869 5870 +3 5728 5870 5729 +3 5729 5870 5730 +3 5730 5870 5871 +3 5730 5871 5872 +3 5730 5872 5732 +3 5732 5872 5873 +3 5732 5873 5874 +3 5732 5874 5733 +3 5733 5874 5875 +3 5733 5875 5734 +3 5734 5875 5735 +3 5735 5875 5876 +3 5735 5876 5736 +3 5736 5876 5877 +3 5736 5877 5878 +3 5736 5878 5737 +3 5737 5878 5879 +3 5737 5879 5738 +3 5738 5879 5880 +3 5738 5880 5881 +3 5738 5881 5739 +3 5739 5881 5882 +3 5739 5882 5740 +3 5740 5882 5883 +3 5740 5883 5884 +3 5740 5884 5741 +3 5741 5884 5885 +3 5741 5885 5886 +3 5741 5886 5742 +3 5742 5886 5743 +3 5743 5886 5887 +3 5743 5887 5888 +3 5743 5888 5744 +3 5744 5888 5889 +3 5744 5889 5745 +3 5745 5889 5746 +3 5746 5889 5890 +3 5746 5890 5891 +3 5746 5891 5747 +3 5747 5891 5748 +3 5748 5891 5892 +3 5748 5892 5893 +3 5748 5893 5749 +3 5749 5893 5750 +3 5750 5893 5894 +3 5750 5894 5895 +3 5750 5895 5751 +3 5751 5895 5752 +3 5752 5895 5896 +3 5752 5896 5753 +3 5753 5896 5897 +3 5753 5897 5898 +3 5753 5898 5754 +3 5754 5898 5899 +3 5754 5899 5755 +3 5755 5899 5900 +3 5755 5900 5756 +3 5756 5900 5901 +3 5756 5901 5757 +3 5757 5901 5902 +3 5757 5902 5758 +3 5758 5902 5903 +3 5758 5903 5759 +3 5759 5903 5904 +3 5759 5904 5760 +3 5760 5904 5762 +3 5762 5904 5763 +3 5763 5904 5905 +3 5763 5905 5764 +3 5764 5905 5906 +3 5764 5906 5765 +3 5765 5906 5766 +3 5766 5906 5907 +3 5766 5907 5767 +3 5767 5907 5908 +3 5767 5908 5768 +3 5768 5908 5909 +3 5768 5909 5910 +3 5768 5910 5769 +3 5769 5910 5770 +3 5770 5910 5911 +3 5770 5911 5771 +3 5771 5911 5912 +3 5771 5912 5913 +3 5771 5913 5772 +3 5772 5913 5914 +3 5772 5914 5773 +3 5773 5914 5915 +3 5773 5915 5774 +3 5774 5915 5916 +3 5774 5916 5775 +3 5775 5916 5917 +3 5775 5917 5776 +3 5776 5917 5918 +3 5776 5918 5777 +3 5777 5918 5919 +3 5777 5919 5778 +3 5778 5919 5920 +3 5778 5920 5779 +3 5779 5920 5921 +3 5779 5921 5780 +3 5780 5921 5922 +3 5780 5922 5781 +3 5781 5922 5923 +3 5781 5923 5782 +3 5782 5923 5924 +3 5782 5924 5925 +3 5782 5925 5783 +3 5783 5925 5926 +3 5783 5926 5784 +3 5784 5926 5927 +3 5784 5927 5785 +3 5785 5927 5928 +3 5785 5928 5786 +3 5786 5928 5929 +3 5786 5929 5787 +3 5787 5929 5930 +3 5787 5930 5788 +3 5788 5930 5931 +3 5788 5931 5789 +3 5789 5931 5932 +3 5789 5932 5790 +3 5790 5932 5933 +3 5790 5933 5791 +3 5791 5933 5934 +3 5791 5934 5792 +3 5792 5934 5935 +3 5792 5935 5793 +3 5793 5935 5936 +3 5793 5936 5794 +3 5794 5936 5937 +3 5794 5937 5795 +3 5795 5937 5938 +3 5795 5938 5796 +3 5796 5938 5939 +3 5796 5939 5797 +3 5797 5939 5940 +3 5797 5940 5798 +3 5798 5940 5941 +3 5798 5941 5799 +3 5799 5941 5942 +3 5799 5942 5943 +3 5799 5943 5800 +3 5800 5943 5944 +3 5800 5944 5801 +3 5801 5944 5802 +3 5802 5944 5945 +3 5802 5945 5946 +3 5802 5946 5803 +3 5803 5946 5947 +3 5803 5947 5804 +3 5804 5947 5805 +3 5805 5947 5948 +3 5805 5948 5806 +3 5806 5948 5949 +3 5806 5949 5807 +3 5807 5949 5950 +3 5807 5950 5808 +3 5808 5950 5809 +3 5809 5950 5951 +3 5809 5951 5952 +3 5809 5952 5810 +3 5810 5952 5953 +3 5810 5953 5811 +3 5811 5953 5954 +3 5811 5954 5813 +3 5813 5954 5814 +3 5814 5954 5817 +3 5817 5954 5818 +3 5818 5954 5953 +3 5818 5953 5819 +3 5819 5953 5952 +3 5819 5952 5820 +3 5820 5952 5955 +3 5820 5955 5821 +3 5821 5955 5956 +3 5821 5956 5957 +3 5821 5957 5822 +3 5822 5957 5823 +3 5823 5957 5958 +3 5823 5958 5824 +3 5824 5958 5959 +3 5824 5959 5960 +3 5824 5960 5825 +3 5825 5960 5826 +3 5826 5960 5961 +3 5826 5961 5962 +3 5826 5962 5827 +3 5827 5962 5828 +3 5828 5962 5963 +3 5828 5963 5829 +3 5829 5963 5964 +3 5829 5964 5965 +3 5829 5965 5830 +3 5830 5965 5832 +3 5832 5965 5966 +3 5832 5966 5967 +3 5832 5967 5833 +3 5833 5967 5968 +3 5833 5968 5834 +3 5834 5968 5969 +3 5834 5969 5835 +3 5835 5969 5970 +3 5835 5970 5836 +3 5836 5970 5971 +3 5836 5971 5837 +3 5837 5971 5972 +3 5837 5972 5838 +3 5838 5972 5973 +3 5838 5973 5839 +3 5839 5973 5841 +3 5841 5973 5842 +3 5842 5973 5974 +3 5842 5974 5975 +3 5842 5975 5843 +3 5843 5975 5976 +3 5843 5976 5844 +3 5844 5976 5977 +3 5844 5977 5845 +3 5845 5977 5978 +3 5845 5978 5846 +3 5846 5978 5979 +3 5846 5979 5847 +3 5847 5979 5980 +3 5847 5980 5848 +3 5848 5980 5981 +3 5848 5981 5849 +3 5849 5981 5982 +3 5849 5982 5850 +3 5850 5982 5983 +3 5850 5983 5984 +3 5850 5984 5851 +3 5851 5984 5852 +3 5852 5984 5985 +3 5852 5985 5853 +3 5853 5985 5986 +3 5853 5986 5987 +3 5853 5987 5854 +3 5854 5987 5988 +3 5854 5988 5855 +3 5855 5988 5989 +3 5855 5989 5856 +3 5856 5989 5857 +3 5857 5989 5990 +3 5857 5990 5991 +3 5857 5991 5858 +3 5858 5991 5992 +3 5858 5992 5859 +3 5859 5992 5993 +3 5859 5993 5860 +3 5860 5993 5994 +3 5860 5994 5861 +3 5861 5994 5995 +3 5861 5995 5862 +3 5862 5995 5996 +3 5862 5996 5863 +3 5863 5996 5997 +3 5863 5997 5998 +3 5863 5998 5999 +3 5863 5999 5864 +3 5864 5999 5877 +3 5877 5999 5878 +3 5878 5999 6000 +3 5878 6000 5879 +3 5879 6000 6001 +3 5879 6001 5880 +3 5880 6001 6002 +3 5880 6002 5881 +3 5881 6002 6003 +3 5881 6003 6004 +3 5881 6004 5882 +3 5882 6004 6005 +3 5882 6005 5883 +3 5883 6005 6006 +3 5883 6006 6007 +3 5883 6007 5884 +3 5884 6007 6008 +3 5884 6008 5885 +3 5885 6008 6009 +3 5885 6009 6010 +3 5885 6010 5886 +3 5886 6010 5887 +3 5887 6010 6011 +3 5887 6011 6012 +3 5887 6012 5888 +3 5888 6012 6013 +3 5888 6013 5889 +3 5889 6013 5890 +3 5890 6013 6014 +3 5890 6014 6015 +3 5890 6015 5891 +3 5891 6015 5892 +3 5892 6015 6016 +3 5892 6016 6017 +3 5892 6017 5893 +3 5893 6017 5894 +3 5894 6017 6018 +3 5894 6018 6019 +3 5894 6019 5895 +3 5895 6019 5896 +3 5896 6019 6020 +3 5896 6020 5897 +3 5897 6020 6021 +3 5897 6021 6022 +3 5897 6022 5898 +3 5898 6022 6023 +3 5898 6023 5899 +3 5899 6023 6024 +3 5899 6024 5900 +3 5900 6024 6025 +3 5900 6025 5901 +3 5901 6025 6026 +3 5901 6026 5902 +3 5902 6026 6027 +3 5902 6027 5903 +3 5903 6027 5905 +3 5905 6027 5906 +3 5906 6027 5907 +3 5907 6027 6026 +3 5907 6026 5908 +3 5908 6026 6025 +3 5908 6025 5909 +3 5909 6025 6024 +3 5909 6024 6028 +3 5909 6028 5910 +3 5910 6028 5911 +3 5911 6028 6029 +3 5911 6029 5912 +3 5912 6029 6030 +3 5912 6030 6031 +3 5912 6031 5913 +3 5913 6031 6032 +3 5913 6032 5914 +3 5914 6032 6033 +3 5914 6033 5915 +3 5915 6033 6034 +3 5915 6034 5916 +3 5916 6034 6035 +3 5916 6035 5917 +3 5917 6035 6036 +3 5917 6036 5918 +3 5918 6036 6037 +3 5918 6037 5919 +3 5919 6037 6038 +3 5919 6038 5920 +3 5920 6038 6039 +3 5920 6039 5921 +3 5921 6039 6040 +3 5921 6040 5922 +3 5922 6040 6041 +3 5922 6041 5923 +3 5923 6041 6042 +3 5923 6042 5924 +3 5924 6042 6043 +3 5924 6043 6044 +3 5924 6044 5925 +3 5925 6044 6045 +3 5925 6045 5926 +3 5926 6045 6046 +3 5926 6046 5927 +3 5927 6046 6047 +3 5927 6047 5928 +3 5928 6047 6048 +3 5928 6048 5929 +3 5929 6048 6049 +3 5929 6049 5930 +3 5930 6049 6050 +3 5930 6050 5931 +3 5931 6050 6051 +3 5931 6051 5932 +3 5932 6051 6052 +3 5932 6052 5933 +3 5933 6052 6053 +3 5933 6053 5934 +3 5934 6053 6054 +3 5934 6054 5935 +3 5935 6054 6055 +3 5935 6055 5936 +3 5936 6055 6056 +3 5936 6056 5937 +3 5937 6056 6057 +3 5937 6057 5938 +3 5938 6057 6058 +3 5938 6058 5939 +3 5939 6058 5967 +3 5967 6058 5968 +3 5968 6058 6059 +3 5968 6059 5969 +3 5969 6059 6060 +3 5969 6060 5970 +3 5970 6060 6061 +3 5970 6061 5971 +3 5971 6061 6062 +3 5971 6062 5972 +3 5972 6062 5974 +3 5974 6062 6063 +3 5974 6063 5975 +3 5975 6063 6064 +3 5975 6064 5976 +3 5976 6064 6065 +3 5976 6065 5977 +3 5977 6065 6066 +3 5977 6066 5978 +3 5978 6066 6067 +3 5978 6067 5979 +3 5979 6067 6068 +3 5979 6068 5980 +3 5980 6068 6069 +3 5980 6069 5981 +3 5981 6069 6070 +3 5981 6070 5982 +3 5982 6070 6071 +3 5982 6071 5983 +3 5983 6071 6072 +3 5983 6072 6073 +3 5983 6073 5984 +3 5984 6073 5985 +3 5985 6073 6074 +3 5985 6074 5986 +3 5986 6074 6075 +3 5986 6075 6076 +3 5986 6076 5987 +3 5987 6076 6077 +3 5987 6077 5988 +3 5988 6077 6078 +3 5988 6078 5989 +3 5989 6078 5990 +3 5990 6078 6079 +3 5990 6079 6080 +3 5990 6080 5991 +3 5991 6080 6081 +3 5991 6081 5992 +3 5992 6081 6082 +3 5992 6082 5993 +3 5993 6082 6083 +3 5993 6083 5994 +3 5994 6083 6084 +3 5994 6084 5995 +3 5995 6084 6085 +3 5995 6085 5996 +3 5996 6085 5997 +3 5997 6085 6086 +3 5997 6086 6087 +3 5997 6087 6088 +3 5997 6088 5998 +3 5998 6088 6089 +3 5998 6089 5999 +3 5999 6089 6000 +3 6000 6089 6001 +3 6001 6089 6090 +3 6001 6090 6002 +3 6002 6090 6091 +3 6002 6091 6003 +3 6003 6091 6092 +3 6003 6092 6093 +3 6003 6093 6004 +3 6004 6093 6094 +3 6004 6094 6005 +3 6005 6094 6095 +3 6005 6095 6006 +3 6006 6095 6096 +3 6006 6096 6097 +3 6006 6097 6098 +3 6006 6098 6007 +3 6007 6098 6099 +3 6007 6099 6008 +3 6008 6099 6009 +3 6009 6099 6100 +3 6009 6100 6101 +3 6009 6101 6010 +3 6010 6101 6011 +3 6011 6101 6102 +3 6011 6102 6103 +3 6011 6103 6012 +3 6012 6103 6104 +3 6012 6104 6013 +3 6013 6104 6014 +3 6014 6104 6105 +3 6014 6105 6106 +3 6014 6106 6015 +3 6015 6106 6016 +3 6016 6106 6107 +3 6016 6107 6108 +3 6016 6108 6017 +3 6017 6108 6018 +3 6018 6108 6109 +3 6018 6109 6110 +3 6018 6110 6019 +3 6019 6110 6020 +3 6020 6110 6111 +3 6020 6111 6021 +3 6021 6111 6112 +3 6021 6112 6030 +3 6030 6112 6031 +3 6031 6112 6113 +3 6031 6113 6032 +3 6032 6113 6114 +3 6032 6114 6033 +3 6033 6114 6115 +3 6033 6115 6034 +3 6034 6115 6116 +3 6034 6116 6035 +3 6035 6116 6117 +3 6035 6117 6036 +3 6036 6117 6118 +3 6036 6118 6037 +3 6037 6118 6119 +3 6037 6119 6038 +3 6038 6119 6120 +3 6038 6120 6039 +3 6039 6120 6121 +3 6039 6121 6040 +3 6040 6121 6122 +3 6040 6122 6041 +3 6041 6122 6123 +3 6041 6123 6042 +3 6042 6123 6124 +3 6042 6124 6043 +3 6043 6124 6125 +3 6043 6125 6126 +3 6043 6126 6044 +3 6044 6126 6127 +3 6044 6127 6045 +3 6045 6127 6128 +3 6045 6128 6046 +3 6046 6128 6129 +3 6046 6129 6047 +3 6047 6129 6130 +3 6047 6130 6048 +3 6048 6130 6131 +3 6048 6131 6049 +3 6049 6131 6132 +3 6049 6132 6050 +3 6050 6132 6133 +3 6050 6133 6051 +3 6051 6133 6134 +3 6051 6134 6052 +3 6052 6134 6135 +3 6052 6135 6053 +3 6053 6135 6136 +3 6053 6136 6054 +3 6054 6136 6137 +3 6054 6137 6055 +3 6055 6137 6138 +3 6055 6138 6056 +3 6056 6138 6139 +3 6056 6139 6057 +3 6057 6139 6059 +3 6059 6139 6060 +3 6060 6139 6140 +3 6060 6140 6061 +3 6061 6140 6141 +3 6061 6141 6062 +3 6062 6141 6063 +3 6063 6141 6142 +3 6063 6142 6064 +3 6064 6142 6143 +3 6064 6143 6065 +3 6065 6143 6144 +3 6065 6144 6066 +3 6066 6144 6145 +3 6066 6145 6067 +3 6067 6145 6146 +3 6067 6146 6068 +3 6068 6146 6147 +3 6068 6147 6069 +3 6069 6147 6148 +3 6069 6148 6070 +3 6070 6148 6149 +3 6070 6149 6071 +3 6071 6149 6150 +3 6071 6150 6072 +3 6072 6150 6151 +3 6072 6151 6152 +3 6072 6152 6073 +3 6073 6152 6074 +3 6074 6152 6153 +3 6074 6153 6075 +3 6075 6153 6154 +3 6075 6154 6155 +3 6075 6155 6076 +3 6076 6155 6156 +3 6076 6156 6077 +3 6077 6156 6157 +3 6077 6157 6078 +3 6078 6157 6079 +3 6079 6157 6158 +3 6079 6158 6159 +3 6079 6159 6080 +3 6080 6159 6160 +3 6080 6160 6081 +3 6081 6160 6161 +3 6081 6161 6082 +3 6082 6161 6162 +3 6082 6162 6083 +3 6083 6162 6163 +3 6083 6163 6084 +3 6084 6163 6164 +3 6084 6164 6085 +3 6085 6164 6086 +3 6086 6164 6165 +3 6086 6165 6166 +3 6086 6166 6087 +3 6087 6166 6167 +3 6087 6167 6168 +3 6087 6168 6088 +3 6088 6168 6091 +3 6091 6168 6169 +3 6091 6169 6092 +3 6092 6169 6093 +3 6093 6169 6170 +3 6093 6170 6094 +3 6094 6170 6171 +3 6094 6171 6095 +3 6095 6171 6172 +3 6095 6172 6096 +3 6096 6172 6173 +3 6096 6173 6174 +3 6096 6174 6097 +3 6097 6174 6175 +3 6097 6175 6098 +3 6098 6175 6176 +3 6098 6176 6099 +3 6099 6176 6100 +3 6100 6176 6177 +3 6100 6177 6101 +3 6101 6177 6102 +3 6102 6177 6178 +3 6102 6178 6179 +3 6102 6179 6103 +3 6103 6179 6180 +3 6103 6180 6104 +3 6104 6180 6105 +3 6105 6180 6181 +3 6105 6181 6182 +3 6105 6182 6106 +3 6106 6182 6107 +3 6107 6182 6183 +3 6107 6183 6184 +3 6107 6184 6108 +3 6108 6184 6109 +3 6109 6184 6185 +3 6109 6185 6186 +3 6109 6186 6110 +3 6110 6186 6111 +3 6111 6186 6187 +3 6111 6187 6112 +3 6112 6187 6113 +3 6113 6187 6188 +3 6113 6188 6114 +3 6114 6188 6189 +3 6114 6189 6115 +3 6115 6189 6190 +3 6115 6190 6116 +3 6116 6190 6191 +3 6116 6191 6117 +3 6117 6191 6192 +3 6117 6192 6118 +3 6118 6192 6193 +3 6118 6193 6119 +3 6119 6193 6194 +3 6119 6194 6120 +3 6120 6194 6195 +3 6120 6195 6121 +3 6121 6195 6196 +3 6121 6196 6122 +3 6122 6196 6197 +3 6122 6197 6123 +3 6123 6197 6198 +3 6123 6198 6124 +3 6124 6198 6199 +3 6124 6199 6125 +3 6125 6199 6200 +3 6125 6200 6201 +3 6125 6201 6126 +3 6126 6201 6202 +3 6126 6202 6127 +3 6127 6202 6203 +3 6127 6203 6128 +3 6128 6203 6204 +3 6128 6204 6129 +3 6129 6204 6205 +3 6129 6205 6130 +3 6130 6205 6206 +3 6130 6206 6131 +3 6131 6206 6207 +3 6131 6207 6132 +3 6132 6207 6208 +3 6132 6208 6133 +3 6133 6208 6209 +3 6133 6209 6134 +3 6134 6209 6210 +3 6134 6210 6135 +3 6135 6210 6211 +3 6135 6211 6136 +3 6136 6211 6212 +3 6136 6212 6137 +3 6137 6212 6213 +3 6137 6213 6138 +3 6138 6213 6140 +3 6140 6213 6141 +3 6141 6213 6142 +3 6142 6213 6212 +3 6142 6212 6143 +3 6143 6212 6211 +3 6143 6211 6144 +3 6144 6211 6210 +3 6144 6210 6145 +3 6145 6210 6209 +3 6145 6209 6146 +3 6146 6209 6208 +3 6146 6208 6147 +3 6147 6208 6207 +3 6147 6207 6148 +3 6148 6207 6206 +3 6148 6206 6149 +3 6149 6206 6205 +3 6149 6205 6150 +3 6150 6205 6204 +3 6150 6204 6151 +3 6151 6204 6203 +3 6151 6203 6214 +3 6151 6214 6152 +3 6152 6214 6153 +3 6153 6214 6215 +3 6153 6215 6154 +3 6154 6215 6216 +3 6154 6216 6217 +3 6154 6217 6155 +3 6155 6217 6218 +3 6155 6218 6156 +3 6156 6218 6219 +3 6156 6219 6157 +3 6157 6219 6158 +3 6158 6219 6220 +3 6158 6220 6221 +3 6158 6221 6159 +3 6159 6221 6222 +3 6159 6222 6160 +3 6160 6222 6223 +3 6160 6223 6161 +3 6161 6223 6224 +3 6161 6224 6162 +3 6162 6224 6225 +3 6162 6225 6163 +3 6163 6225 6226 +3 6163 6226 6164 +3 6164 6226 6165 +3 6165 6226 6227 +3 6165 6227 6228 +3 6165 6228 6166 +3 6166 6228 6229 +3 6166 6229 6167 +3 6167 6229 6230 +3 6167 6230 6231 +3 6167 6231 6232 +3 6167 6232 6168 +3 6168 6232 6169 +3 6169 6232 6233 +3 6169 6233 6170 +3 6170 6233 6234 +3 6170 6234 6171 +3 6171 6234 6235 +3 6171 6235 6172 +3 6172 6235 6236 +3 6172 6236 6237 +3 6172 6237 6173 +3 6173 6237 6238 +3 6173 6238 6174 +3 6174 6238 6239 +3 6174 6239 6240 +3 6174 6240 6175 +3 6175 6240 6241 +3 6175 6241 6176 +3 6176 6241 6177 +3 6177 6241 6178 +3 6178 6241 6242 +3 6178 6242 6243 +3 6178 6243 6179 +3 6179 6243 6244 +3 6179 6244 6180 +3 6180 6244 6181 +3 6181 6244 6245 +3 6181 6245 6246 +3 6181 6246 6182 +3 6182 6246 6183 +3 6183 6246 6247 +3 6183 6247 6248 +3 6183 6248 6184 +3 6184 6248 6185 +3 6185 6248 6249 +3 6185 6249 6250 +3 6185 6250 6186 +3 6186 6250 6187 +3 6187 6250 6188 +3 6188 6250 6251 +3 6188 6251 6189 +3 6189 6251 6252 +3 6189 6252 6190 +3 6190 6252 6253 +3 6190 6253 6191 +3 6191 6253 6254 +3 6191 6254 6192 +3 6192 6254 6255 +3 6192 6255 6193 +3 6193 6255 6256 +3 6193 6256 6194 +3 6194 6256 6257 +3 6194 6257 6195 +3 6195 6257 6258 +3 6195 6258 6196 +3 6196 6258 6259 +3 6196 6259 6197 +3 6197 6259 6260 +3 6197 6260 6198 +3 6198 6260 6261 +3 6198 6261 6199 +3 6199 6261 6262 +3 6199 6262 6200 +3 6200 6262 6263 +3 6200 6263 6216 +3 6216 6263 6217 +3 6217 6263 6264 +3 6217 6264 6218 +3 6218 6264 6265 +3 6218 6265 6219 +3 6219 6265 6220 +3 6220 6265 6266 +3 6220 6266 6267 +3 6220 6267 6221 +3 6221 6267 6268 +3 6221 6268 6222 +3 6222 6268 6269 +3 6222 6269 6223 +3 6223 6269 6270 +3 6223 6270 6224 +3 6224 6270 6271 +3 6224 6271 6225 +3 6225 6271 6272 +3 6225 6272 6226 +3 6226 6272 6227 +3 6227 6272 6273 +3 6227 6273 6274 +3 6227 6274 6275 +3 6227 6275 6228 +3 6228 6275 6276 +3 6228 6276 6229 +3 6229 6276 6230 +3 6230 6276 6277 +3 6230 6277 6278 +3 6230 6278 6279 +3 6230 6279 6231 +3 6231 6279 6232 +3 6232 6279 6280 +3 6232 6280 6233 +3 6233 6280 6234 +3 6234 6280 6235 +3 6235 6280 6281 +3 6235 6281 6236 +3 6236 6281 6282 +3 6236 6282 6237 +3 6237 6282 6283 +3 6237 6283 6284 +3 6237 6284 6238 +3 6238 6284 6285 +3 6238 6285 6239 +3 6239 6285 6286 +3 6239 6286 6287 +3 6239 6287 6240 +3 6240 6287 6242 +3 6242 6287 6288 +3 6242 6288 6243 +3 6243 6288 6289 +3 6243 6289 6244 +3 6244 6289 6245 +3 6245 6289 6290 +3 6245 6290 6291 +3 6245 6291 6246 +3 6246 6291 6247 +3 6247 6291 6292 +3 6247 6292 6293 +3 6247 6293 6248 +3 6248 6293 6249 +3 6249 6293 6294 +3 6249 6294 6251 +3 6251 6294 6252 +3 6252 6294 6295 +3 6252 6295 6253 +3 6253 6295 6296 +3 6253 6296 6254 +3 6254 6296 6297 +3 6254 6297 6255 +3 6255 6297 6298 +3 6255 6298 6256 +3 6256 6298 6299 +3 6256 6299 6257 +3 6257 6299 6300 +3 6257 6300 6258 +3 6258 6300 6301 +3 6258 6301 6259 +3 6259 6301 6302 +3 6259 6302 6260 +3 6260 6302 6303 +3 6260 6303 6261 +3 6261 6303 6304 +3 6261 6304 6262 +3 6262 6304 6305 +3 6262 6305 6263 +3 6263 6305 6264 +3 6264 6305 6306 +3 6264 6306 6265 +3 6265 6306 6266 +3 6266 6306 6307 +3 6266 6307 6308 +3 6266 6308 6267 +3 6267 6308 6309 +3 6267 6309 6268 +3 6268 6309 6310 +3 6268 6310 6269 +3 6269 6310 6311 +3 6269 6311 6270 +3 6270 6311 6312 +3 6270 6312 6271 +3 6271 6312 6272 +3 6272 6312 6273 +3 6273 6312 6313 +3 6273 6313 6274 +3 6274 6313 6314 +3 6274 6314 6315 +3 6274 6315 6275 +3 6275 6315 6316 +3 6275 6316 6276 +3 6276 6316 6277 +3 6277 6316 6317 +3 6277 6317 6318 +3 6277 6318 6278 +3 6278 6318 6319 +3 6278 6319 6320 +3 6278 6320 6279 +3 6279 6320 6281 +3 6281 6320 6282 +3 6282 6320 6321 +3 6282 6321 6283 +3 6283 6321 6322 +3 6283 6322 6323 +3 6283 6323 6284 +3 6284 6323 6324 +3 6284 6324 6285 +3 6285 6324 6325 +3 6285 6325 6286 +3 6286 6325 6326 +3 6286 6326 6327 +3 6286 6327 6287 +3 6287 6327 6288 +3 6288 6327 6328 +3 6288 6328 6289 +3 6289 6328 6290 +3 6290 6328 6329 +3 6290 6329 6330 +3 6290 6330 6291 +3 6291 6330 6292 +3 6292 6330 6331 +3 6292 6331 6332 +3 6292 6332 6293 +3 6293 6332 6294 +3 6294 6332 6295 +3 6295 6332 6333 +3 6295 6333 6296 +3 6296 6333 6334 +3 6296 6334 6297 +3 6297 6334 6335 +3 6297 6335 6298 +3 6298 6335 6336 +3 6298 6336 6299 +3 6299 6336 6337 +3 6299 6337 6300 +3 6300 6337 6338 +3 6300 6338 6301 +3 6301 6338 6339 +3 6301 6339 6302 +3 6302 6339 6340 +3 6302 6340 6303 +3 6303 6340 6341 +3 6303 6341 6304 +3 6304 6341 6342 +3 6304 6342 6305 +3 6305 6342 6306 +3 6306 6342 6307 +3 6307 6342 6343 +3 6307 6343 6344 +3 6307 6344 6308 +3 6308 6344 6345 +3 6308 6345 6309 +3 6309 6345 6346 +3 6309 6346 6310 +3 6310 6346 6347 +3 6310 6347 6311 +3 6311 6347 6313 +3 6313 6347 6314 +3 6314 6347 6348 +3 6314 6348 6349 +3 6314 6349 6315 +3 6315 6349 6350 +3 6315 6350 6316 +3 6316 6350 6317 +3 6317 6350 6351 +3 6317 6351 6352 +3 6317 6352 6318 +3 6318 6352 6353 +3 6318 6353 6319 +3 6319 6353 6354 +3 6319 6354 6321 +3 6321 6354 6322 +3 6322 6354 6355 +3 6322 6355 6356 +3 6322 6356 6323 +3 6323 6356 6357 +3 6323 6357 6324 +3 6324 6357 6358 +3 6324 6358 6325 +3 6325 6358 6359 +3 6325 6359 6326 +3 6326 6359 6360 +3 6326 6360 6361 +3 6326 6361 6327 +3 6327 6361 6328 +3 6328 6361 6329 +3 6329 6361 6362 +3 6329 6362 6363 +3 6329 6363 6330 +3 6330 6363 6331 +3 6331 6363 6364 +3 6331 6364 6333 +3 6333 6364 6334 +3 6334 6364 6365 +3 6334 6365 6335 +3 6335 6365 6366 +3 6335 6366 6336 +3 6336 6366 6367 +3 6336 6367 6337 +3 6337 6367 6368 +3 6337 6368 6338 +3 6338 6368 6369 +3 6338 6369 6339 +3 6339 6369 6370 +3 6339 6370 6340 +3 6340 6370 6371 +3 6340 6371 6341 +3 6341 6371 6343 +3 6343 6371 6372 +3 6343 6372 6344 +3 6344 6372 6373 +3 6344 6373 6345 +3 6345 6373 6374 +3 6345 6374 6346 +3 6346 6374 6348 +3 6348 6374 6375 +3 6348 6375 6349 +3 6349 6375 6376 +3 6349 6376 6350 +3 6350 6376 6351 +3 6351 6376 6377 +3 6351 6377 6378 +3 6351 6378 6379 +3 6351 6379 6352 +3 6352 6379 6353 +3 6353 6379 6380 +3 6353 6380 6381 +3 6353 6381 6354 +3 6354 6381 6355 +3 6355 6381 6382 +3 6355 6382 6383 +3 6355 6383 6356 +3 6356 6383 6384 +3 6356 6384 6357 +3 6357 6384 6385 +3 6357 6385 6358 +3 6358 6385 6386 +3 6358 6386 6359 +3 6359 6386 6387 +3 6359 6387 6360 +3 6360 6387 6388 +3 6360 6388 6362 +3 6362 6388 6389 +3 6362 6389 6363 +3 6363 6389 6364 +3 6364 6389 6365 +3 6365 6389 6390 +3 6365 6390 6366 +3 6366 6390 6391 +3 6366 6391 6367 +3 6367 6391 6392 +3 6367 6392 6368 +3 6368 6392 6393 +3 6368 6393 6369 +3 6369 6393 6394 +3 6369 6394 6370 +3 6370 6394 6395 +3 6370 6395 6371 +3 6371 6395 6372 +3 6372 6395 6396 +3 6372 6396 6373 +3 6373 6396 6397 +3 6373 6397 6374 +3 6374 6397 6375 +3 6375 6397 6398 +3 6375 6398 6376 +3 6376 6398 6399 +3 6376 6399 6377 +3 6377 6399 6400 +3 6377 6400 6401 +3 6377 6401 6378 +3 6378 6401 6380 +3 6380 6401 6402 +3 6380 6402 6381 +3 6381 6402 6382 +3 6382 6402 6403 +3 6382 6403 6383 +3 6383 6403 6384 +3 6384 6403 6404 +3 6384 6404 6405 +3 6384 6405 6385 +3 6385 6405 6406 +3 6385 6406 6386 +3 6386 6406 6407 +3 6386 6407 6387 +3 6387 6407 6408 +3 6387 6408 6388 +3 6388 6408 6390 +3 6390 6408 6391 +3 6391 6408 6409 +3 6391 6409 6392 +3 6392 6409 6410 +3 6392 6410 6393 +3 6393 6410 6411 +3 6393 6411 6394 +3 6394 6411 6412 +3 6394 6412 6395 +3 6395 6412 6396 +3 6396 6412 6413 +3 6396 6413 6397 +3 6397 6413 6398 +3 6398 6413 6414 +3 6398 6414 6399 +3 6399 6414 6415 +3 6399 6415 6400 +3 6400 6415 6416 +3 6400 6416 6401 +3 6401 6416 6417 +3 6401 6417 6402 +3 6402 6417 6403 +3 6403 6417 6404 +3 6404 6417 6416 +3 6404 6416 6418 +3 6404 6418 6405 +3 6405 6418 6419 +3 6405 6419 6406 +3 6406 6419 6420 +3 6406 6420 6407 +3 6407 6420 6409 +3 6409 6420 6410 +3 6410 6420 6421 +3 6410 6421 6411 +3 6411 6421 6422 +3 6411 6422 6412 +3 6412 6422 6413 +3 6413 6422 6414 +3 6414 6422 6423 +3 6414 6423 6415 +3 6415 6423 6418 +3 6418 6423 6419 +3 6419 6423 6421 +3 6421 6423 6422 +3 6419 6421 6420 +3 6415 6418 6416 +3 6407 6409 6408 +3 6388 6390 6389 +3 6378 6380 6379 +3 6360 6362 6361 +3 6346 6348 6347 +3 6341 6343 6342 +3 6331 6333 6332 +3 6319 6321 6320 +3 6311 6313 6312 +3 6279 6281 6280 +3 6249 6251 6250 +3 6240 6242 6241 +3 6200 6216 6201 +3 6201 6216 6215 +3 6201 6215 6202 +3 6202 6215 6214 +3 6202 6214 6203 +3 6138 6140 6139 +3 6088 6091 6090 +3 6088 6090 6089 +3 6057 6059 6058 +3 6021 6030 6022 +3 6022 6030 6029 +3 6022 6029 6023 +3 6023 6029 6028 +3 6023 6028 6024 +3 5972 5974 5973 +3 5939 5967 5966 +3 5939 5966 5940 +3 5940 5966 5964 +3 5964 5966 5965 +3 5940 5964 5941 +3 5941 5964 5963 +3 5941 5963 5942 +3 5942 5963 5962 +3 5942 5962 5961 +3 5942 5961 5943 +3 5943 5961 6424 +3 5943 6424 5944 +3 5944 6424 5945 +3 5945 6424 5959 +3 5959 6424 5960 +3 5960 6424 5961 +3 5945 5959 6425 +3 5945 6425 5946 +3 5946 6425 6426 +3 5946 6426 5947 +3 5947 6426 5948 +3 5948 6426 6427 +3 5948 6427 5949 +3 5949 6427 6428 +3 5949 6428 5950 +3 5950 6428 5951 +3 5951 6428 5955 +3 5955 6428 5956 +3 5956 6428 6427 +3 5956 6427 6429 +3 5956 6429 5957 +3 5957 6429 5958 +3 5958 6429 6425 +3 6425 6429 6426 +3 6426 6429 6427 +3 5958 6425 5959 +3 5951 5955 5952 +3 5903 5905 5904 +3 5864 5877 6430 +3 5864 6430 5865 +3 5865 6430 6431 +3 5865 6431 6432 +3 5865 6432 6433 +3 5865 6433 5866 +3 5866 6433 6434 +3 5866 6434 5867 +3 5867 6434 5869 +3 5869 6434 5870 +3 5870 6434 5871 +3 5871 6434 6435 +3 5871 6435 5872 +3 5872 6435 5873 +3 5873 6435 6432 +3 6432 6435 6433 +3 6433 6435 6434 +3 5873 6432 5874 +3 5874 6432 6431 +3 5874 6431 5875 +3 5875 6431 5876 +3 5876 6431 6430 +3 5876 6430 5877 +3 5867 5869 5868 +3 5839 5841 5840 +3 5830 5832 5831 +3 5814 5817 5815 +3 5811 5813 5812 +3 5760 5762 5761 +3 5730 5732 5731 +3 5699 5701 5700 +3 5619 5621 5620 +3 5587 5589 5588 +3 5580 5583 5582 +3 5580 5582 5581 +3 5554 5556 5555 +3 5515 5517 5516 +3 5470 5472 5471 +3 5432 5434 5433 +3 5392 5429 5393 +3 5393 5429 5394 +3 5394 5429 5428 +3 5394 5428 5395 +3 5395 5428 5427 +3 5395 5427 5426 +3 5395 5426 5396 +3 5396 5426 5425 +3 5396 5425 5397 +3 5397 5425 5424 +3 5397 5424 5398 +3 5398 5424 5423 +3 5398 5423 5399 +3 5399 5423 5422 +3 5399 5422 5400 +3 5400 5422 6436 +3 5400 6436 5401 +3 5401 6436 5402 +3 5402 6436 6437 +3 5402 6437 5403 +3 5403 6437 6438 +3 5403 6438 5404 +3 5404 6438 6439 +3 5404 6439 5405 +3 5405 6439 5416 +3 5416 6439 5417 +3 5417 6439 5418 +3 5418 6439 6440 +3 5418 6440 5419 +3 5419 6440 5420 +3 5420 6440 6437 +3 6437 6440 6438 +3 6438 6440 6439 +3 5420 6437 5421 +3 5421 6437 6436 +3 5421 6436 5422 +3 5405 5416 5406 +3 5406 5416 5415 +3 5406 5415 5407 +3 5407 5415 5414 +3 5407 5414 5408 +3 5408 5414 5413 +3 5408 5413 5409 +3 5409 5413 5412 +3 5409 5412 5410 +3 5410 5412 5411 +3 5280 5282 5281 +3 5247 5249 5248 +3 5228 5230 5229 +3 5201 5222 5202 +3 5202 5222 5221 +3 5202 5221 5203 +3 5203 5221 5220 +3 5203 5220 5204 +3 5204 5220 5219 +3 5204 5219 5205 +3 5178 5183 5182 +3 5178 5182 5179 +3 5179 5182 5181 +3 5179 5181 5180 +3 5083 5085 5084 +3 5046 5048 5047 +3 5020 5023 5021 +3 5021 5023 5022 +3 5004 5006 5005 +3 4999 5001 5000 +3 4984 4996 4985 +3 4985 4996 4995 +3 4985 4995 4994 +3 4985 4994 4987 +3 4987 4994 4993 +3 4987 4993 4988 +3 4988 4993 4989 +3 4989 4993 4992 +3 4989 4992 4991 +3 4989 4991 4990 +3 4985 4987 4986 +3 4903 4905 4904 +3 4854 4856 4855 +3 4807 4812 4811 +3 4807 4811 4808 +3 4808 4811 4809 +3 4771 4773 4772 +3 4725 4763 4762 +3 4725 4762 4726 +3 4726 4762 4761 +3 4726 4761 4727 +3 4727 4761 4728 +3 4728 4761 4760 +3 4728 4760 6441 +3 4728 6441 4729 +3 4729 6441 6442 +3 4729 6442 4730 +3 4730 6442 4731 +3 4731 6442 6443 +3 4731 6443 6444 +3 4731 6444 4732 +3 4732 6444 6445 +3 4732 6445 4733 +3 4733 6445 6446 +3 4733 6446 4734 +3 4734 6446 6447 +3 4734 6447 6448 +3 4734 6448 4735 +3 4735 6448 4736 +3 4736 6448 4737 +3 4737 6448 6449 +3 4737 6449 6450 +3 4737 6450 4738 +3 4738 6450 4739 +3 4739 6450 6451 +3 4739 6451 4740 +3 4740 6451 6452 +3 4740 6452 6453 +3 4740 6453 4741 +3 4741 6453 4743 +3 4743 6453 6454 +3 4743 6454 6455 +3 4743 6455 4744 +3 4744 6455 4746 +3 4746 6455 6456 +3 4746 6456 4747 +3 4747 6456 4748 +3 4748 6456 6457 +3 4748 6457 6458 +3 4748 6458 4749 +3 4749 6458 6459 +3 4749 6459 4750 +3 4750 6459 4751 +3 4751 6459 6460 +3 4751 6460 6461 +3 4751 6461 4752 +3 4752 6461 4753 +3 4753 6461 6462 +3 4753 6462 6463 +3 4753 6463 4754 +3 4754 6463 4755 +3 4755 6463 6464 +3 4755 6464 4756 +3 4756 6464 6444 +3 6444 6464 6445 +3 6445 6464 6465 +3 6445 6465 6446 +3 6446 6465 6466 +3 6446 6466 6447 +3 6447 6466 6467 +3 6447 6467 6448 +3 6448 6467 6449 +3 6449 6467 6468 +3 6449 6468 6469 +3 6449 6469 6450 +3 6450 6469 6451 +3 6451 6469 6470 +3 6451 6470 6452 +3 6452 6470 6457 +3 6457 6470 6458 +3 6458 6470 6471 +3 6458 6471 6459 +3 6459 6471 6460 +3 6460 6471 6468 +3 6468 6471 6469 +3 6469 6471 6470 +3 6460 6468 6472 +3 6460 6472 6461 +3 6461 6472 6462 +3 6462 6472 6466 +3 6466 6472 6467 +3 6467 6472 6468 +3 6462 6466 6465 +3 6462 6465 6463 +3 6463 6465 6464 +3 6452 6457 6473 +3 6452 6473 6453 +3 6453 6473 6454 +3 6454 6473 6455 +3 6455 6473 6456 +3 6456 6473 6457 +3 4756 6444 6443 +3 4756 6443 4757 +3 4757 6443 4758 +3 4758 6443 6442 +3 4758 6442 6441 +3 4758 6441 4759 +3 4759 6441 4760 +3 4744 4746 4745 +3 4741 4743 4742 +3 4638 4640 4639 +3 4590 4592 4591 +3 4568 4570 4569 +3 4552 4554 4553 +3 4425 4429 4426 +3 4426 4429 4428 +3 4426 4428 4427 +3 4396 4398 4397 +3 4348 4350 4349 +3 4260 4262 4261 +3 4198 4200 4199 +3 4192 4194 4193 +3 4081 4083 4082 +3 4063 4065 4064 +3 3982 3984 3983 +3 3977 3979 3978 +3 3966 3968 3967 +3 3951 3953 3952 +3 3860 3864 3862 +3 3860 3862 3861 +3 3858 3860 3859 +3 3856 3858 3857 +3 3845 3847 3846 +3 3840 3842 3841 +3 3800 3802 3801 +3 3732 3734 3733 +3 3715 3717 3716 +3 3691 3693 3692 +3 3679 3681 3680 +3 3649 3651 3650 +3 3647 3649 3648 +3 3609 3611 3610 +3 3605 3607 3606 +3 3601 3603 3602 +3 3539 3541 3540 +3 3505 3507 3506 +3 3445 3447 3446 +3 3443 3445 3444 +3 3325 3327 3326 +3 3238 3240 3239 +3 3089 3091 3090 +3 3045 3047 3046 +3 2862 2864 2863 +3 2827 2829 2828 +3 2772 2774 2773 +3 2768 2770 2769 +3 2761 2763 2762 +3 2728 2730 2729 +3 2654 2656 2655 +3 2594 2596 2595 +3 2551 2554 2553 +3 2551 2553 2552 +3 2549 2551 2550 +3 2537 2540 2538 +3 2453 2455 2454 +3 2416 2418 2417 +3 2377 2379 2378 +3 2362 2364 2363 +3 2324 2326 2325 +3 2318 2320 2319 +3 2296 2299 2297 +3 2282 2284 2283 +3 2222 2224 2223 +3 2193 2195 2194 +3 2184 2186 2185 +3 2145 2147 2146 +3 2094 2096 2095 +3 1966 1975 1967 +3 1967 1975 1974 +3 1967 1974 6474 +3 1967 6474 1970 +3 1970 6474 1971 +3 1971 6474 1973 +3 1973 6474 1974 +3 1971 1973 1972 +3 1967 1970 1968 +3 1968 1970 1969 +3 1942 1944 1943 +3 1889 1891 1890 +3 1797 1799 1798 +3 1774 1776 1775 +3 1720 1722 1721 +3 1675 1677 1676 +3 1626 1628 1627 +3 1606 1608 1607 +3 1601 1603 1602 +3 1544 1546 1545 +3 1519 1521 1520 +3 1403 1405 1404 +3 1367 1369 1368 +3 1292 1294 1293 +3 1286 1288 1287 +3 1264 1266 1265 +3 1258 1260 1259 +3 1252 1254 1253 +3 1125 1127 1126 +3 1104 1106 1105 +3 996 998 997 +3 984 986 985 +3 971 973 972 +3 883 885 884 +3 853 855 854 +3 666 668 667 +3 652 654 653 +3 578 580 579 +3 560 562 561 +3 472 474 473 +3 393 395 394 +3 203 205 204 +3 72 74 73 + diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/data/sphere.mesh b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/data/sphere.mesh new file mode 100644 index 00000000000..53df1d838df --- /dev/null +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/data/sphere.mesh @@ -0,0 +1,5046 @@ +MeshVersionFormatted 1 +Dimension 3 +Vertices +757 +-0.00017958008027845786 -0.29158438056560654 -0.3988195263311396 2 +0.33746273152274708 -0.35726277852053662 0.076905488424117915 2 +0.10190320305717479 -0.44537090218944148 0.19023485796529088 2 +-0.22291708884561526 0.24110089782764016 0.3698544290906931 2 +-0.015169005603949674 -0.4920502072817815 -0.053433473242467985 2 +-0.26605755950148613 0.34871795230918606 0.23040729539756138 2 +-0.030951975074221216 0.48125453898639275 -0.1043111632434163 2 +0.059997821745160003 -0.35306497158682226 0.34146470435235443 2 +-0.47842728941771906 -0.11383138831461681 -0.085210684090395519 2 +0.36358525568361316 0.21273180556147436 0.25617337548594726 2 +0.36725408516443148 0.13052845625068488 -0.30523087317317177 2 +-0.22325756200134647 0.14972356892330102 -0.41730303115077449 2 +-0.33402647635257132 -0.1744766427005035 0.31869283771003265 2 +0.093487696703693335 0.02119707361997069 0.48380505033599003 2 +-0.41062731925574825 0.25760949214328016 -0.10699221840973314 2 +0.49505762706510581 -0.028269043401154839 0.005588588618755724 2 +0.34186587730419771 -0.23615312879880351 -0.27171510437341651 2 +0.30887568698642764 0.38011138416438828 -0.055425037144192238 2 +0.081954497410480692 0.43221656346370257 0.23174479064232939 2 +0.080762763732273479 0.30645943468988468 -0.37895869522206083 2 +0.35704674384671609 -0.12142305171818887 0.32188881275214021 2 +-0.31466635484011551 -0.3761124021911264 0.049178927462616873 2 +-0.29949621897948708 -0.16366746550400973 -0.3559360399848972 2 +0.12477546186735991 -0.0009654011072460668 -0.48017447662099233 2 +-0.45489993093049341 0.089486639415368968 0.16934989437353176 2 +-0.21949385855586256 -0.38887603838234641 -0.21249580489705544 2 +-0.17554447746608282 -0.008967119829543662 0.46417052578394857 2 +-0.21596925005035716 0.36305807543520158 -0.25659442404768845 2 +0.21818581779788443 -0.42407361285115364 -0.14318551682223507 2 +0.029500307224903276 0.26282332358153948 0.4193318651156448 2 +-0.41140983700838274 0.055777199004947785 -0.26777152182208963 2 +-0.18318546651083045 -0.37360295143388589 0.26762502445563596 2 +-0.25403346126706278 0.42468917850563082 -0.0072330644157137559 2 +-0.11305983472243486 -0.060902778843192146 -0.47777514755888634 2 +0.44919653003104693 0.20594839867448833 0.031940926454485326 2 +-0.11066913845628298 -0.2262153965428356 0.42803075198822749 2 +-0.43545677914012793 -0.19909033271144083 0.11894257742861167 2 +0.1695993626242438 -0.17935343970708448 0.42607203736875154 2 +0.44458432799815872 -0.051677795976616092 -0.20786699465654979 2 +0.43234224599164228 -0.22486127018578264 -0.071274965547427127 2 +0.26639842732560048 0.32085642363039735 -0.26255407845880468 2 +0.26294920120495924 -0.31175710164257442 0.27584799753054995 2 +0.28532208912927193 0.068229649454114999 0.39636186284206176 2 +-0.34227612327536827 0.063789233931985129 0.35025252357992426 2 +0.13671557462523365 0.47582166858216723 0.029136645926506381 2 +0.30614427994747062 -0.058158535566455949 -0.38363836413890928 2 +0.27804667170978731 0.37888988049526307 0.15488894457208352 2 +-0.079983560189783809 0.47755425170528942 0.10219500715280494 2 +0.44814787431466785 0.027095935407346859 0.20340275687843323 2 +0.43643009646155334 -0.18171607702779971 0.13679244425007148 2 +-0.021047213889092184 0.14820686384301263 -0.46961700869255452 2 +0.03619253272475921 -0.42721740050619039 -0.24476932875897767 2 +-0.37955898467105353 -0.29024182965842682 -0.12706737614326807 2 +-0.40060756364504235 0.27265441281304659 0.096625520813105659 2 +-0.4854705637493073 0.083104466088603279 -0.032289989270033626 2 +0.18733664061540145 -0.21944745392631665 -0.39902475350724975 2 +0.20220985983165063 0.30550901002185649 0.32856225983545018 2 +-0.14260311796152336 -0.46277003604768613 0.095417085459266915 2 +-0.088536490739146129 0.37455894762711039 0.3096149430548682 2 +0.2094668074720448 0.16368187491205238 -0.41638280720002807 2 +0.15113456598618952 0.44235088220955404 -0.16250801345043558 2 +0.40486835137050703 0.24289072279009177 -0.15252766171211285 2 +-0.036177835783256007 0.4078011138562273 -0.27535546612298556 2 +-0.34296523108150667 0.2286131340909362 -0.27799669728182952 2 +-0.10719098758575357 0.28623761047718843 -0.38960924485531329 2 +0.19147451046242708 -0.45501523442130337 0.033189878304607082 2 +-0.17451656340254462 -0.2922859658076577 -0.35675496184109445 2 +-0.054032309386595652 0.11876440286815396 0.47910599326324754 2 +-0.36854633000359827 0.21078255760783893 0.26015365494222453 2 +-0.32895930270343821 -0.30492173388755761 0.20577000320862165 2 +0.47233660066064437 0.089962065069455227 -0.11598350628513786 2 +0.18279236780855426 -0.35559836146202833 -0.29576156364432438 2 +-0.30653064961140419 0.0030393921083115001 -0.39158959558808887 2 +-0.43175645289087117 -0.06856641898074925 0.2281241768759929 2 +-0.41664292297822403 -0.1125349496504639 -0.24369438759577611 2 +0.034215630841900949 -0.14316065841453818 -0.47150453356804722 2 +0.01741918812908615 -0.12866441808574386 0.47673458515849332 2 +-0.4855430365961404 -0.047209142857281922 0.071742419244237965 2 +-0.17664526043497175 -0.45607460135991063 -0.066898790386732021 2 +0.15896257150373266 0.16406638468588108 0.43749429982969956 2 +0.3413309978648793 -0.35180180232942027 -0.079355360895298654 2 +-0.050993390661918936 -0.44023303185605778 0.21930692567953947 2 +-0.1744764647710777 0.44331712473052226 -0.13489506049135713 2 +-0.3060405881569907 0.36310552047656275 -0.13515313949756735 2 +-0.31223156562504195 -0.28062263090874601 -0.26163375513939824 2 +-0.22970278795957924 -0.13870241858074583 0.41755645512950001 2 +0.0024393018078136446 -0.48492697824363451 0.091171312301450952 2 +-0.10287286315024358 -0.19966181605110775 -0.44059088195446339 2 +-0.096592995767797049 -0.39151818968827484 -0.28742421301965626 2 +-0.22843344125151183 -0.26611354901572115 0.35137427683212796 2 +0.38322648327275688 0.28370503187708462 0.13296338549842965 2 +0.23663146930518839 -0.40226297814535272 0.16806272118371773 2 +0.26057820529124903 -0.070791204074534875 0.41330127504314429 2 +-0.21136233974279531 0.43042319754635217 0.12802710612079471 2 +-0.47476981336899093 0.0097871739157582519 -0.15138890370937802 2 +-0.23333367583594972 0.11222027080473665 0.42394265074000254 2 +-0.44085548332912106 -0.22979962226592909 -0.017147875405908862 2 +-0.078239229460793286 -0.33884832180985031 0.35255427151172458 2 +-0.083108225197500205 -0.45674438476313062 -0.16738183558114764 2 +-0.29408537723534212 -0.38852555688047163 -0.085435314425446315 2 +0.48133564768818482 0.083381485363606622 0.083302443947374058 2 +0.14428498543762064 0.37758810641209212 -0.28194428393217741 2 +0.3671246210538302 -0.23121760625314156 0.24258442560276988 2 +0.021926538865993082 -0.25448244851283763 0.42640784569274537 2 +-0.44247951547367903 0.14036749361034515 -0.16673429414803598 2 +-0.23376468875393869 0.26504877262009335 -0.34821691711422748 2 +-0.35704052636532213 0.33794495130243385 -0.012949825968558894 2 +0.37906928942131157 0.011439036263529231 0.31801237398069648 2 +0.27641139205562737 0.19692195103917809 0.3576249551891042 2 +0.092299584758946646 -0.46848280891657568 -0.13014498287023957 2 +-0.10077498621597741 0.23174182723272241 0.42421701501864795 2 +-0.0066485172726347321 0.017976077671047648 -0.49685469073126953 2 +-0.12973470064512721 0.071108805185515739 -0.47051085686132765 2 +-0.045859962509014612 -0.013040570986989755 0.49188107961940719 2 +0.079555876774644596 0.35323065472379733 0.33735822117185454 2 +0.30027051670008725 -0.34103946911028737 -0.20394431470188995 2 +-0.24140984558607992 -0.40111697443685596 0.1541797787531235 2 +-0.12786542956347918 0.47578064354031468 -0.018312676486796277 2 +-0.33073847277519897 0.12310202367120916 -0.35116285886815279 2 +0.19933706144873503 -0.098980558450449771 -0.44274269538406724 2 +0.47513113190649536 -0.10584286330488513 -0.095171214369974694 2 +-0.46194239384718461 0.16413779819561203 0.064816441432120703 2 +0.29292266379811227 0.069478725123429091 -0.39043692971152011 2 +0.4200208818716501 -0.17627342566505305 -0.18940858505931396 2 +0.27141459182530936 -0.21104712412748511 0.35480982777696679 2 +0.16960402134421976 -0.28958411644868443 0.36076483378978291 2 +0.38912037422664431 0.0043887969041679778 -0.3087738216613114 2 +0.011497871488576249 0.49686191298521987 0.015154654283299826 2 +-0.31912896462267604 -0.059707423797282617 0.37238981914980496 2 +-0.22834353192806978 -0.089488394878762173 -0.431392095895892 2 +0.10244600457475248 0.12264851193906079 -0.46898522519895247 2 +-0.31732877963655171 0.36699254715931046 0.1030480292676519 2 +0.43307512121460301 0.17115163575065317 0.15968727323737264 2 +0.20016935386821505 0.27437903049128654 -0.35830063594519002 2 +-0.041789517959002119 0.44443177473295281 0.21678051623622563 2 +0.17151835385992589 0.44389799847661182 0.14506941487236816 2 +0.41566132168029968 -0.26488526360467146 0.045899390071247409 2 +0.37932345247717253 -0.11894828342860483 -0.29251072257759048 2 +0.43222030269315437 -0.094575414878469932 0.22599275674135835 2 +0.46904216524592113 -0.14992640959363651 0.021012576355346015 2 +0.3952129455499247 0.29237028550029098 -0.039039028322742399 2 +0.24880421219055254 0.42474901485888011 0.043448685018998956 2 +0.16091128374421571 -0.38054996657036488 0.27661235401976281 2 +-0.11188857008982331 -0.11203266446059854 0.46872664816830067 2 +0.47601719442122925 -0.055826239046367056 0.12100320850727279 2 +0.036473226508413531 0.48000758276333438 0.13140181756020897 2 +0.2575687962417475 0.38744266403728805 -0.1633963398793602 2 +0.2924747065742927 0.308550488374844 0.25036594764074926 2 +0.28955232447365836 -0.17346831825824974 -0.35852620068112112 2 +0.35057344068321522 0.23769120150981893 -0.25765117551066152 2 +0.038207711976355391 0.45161905671520203 -0.19507142457444865 2 +0.071294318064950041 -0.35796429223310122 -0.33311113633367473 2 +0.43261149596338622 0.074600055933304682 -0.22536433518471577 2 +0.19968372557432726 0.38413167365058842 0.24178225128604081 2 +0.082402113370849905 0.48067521037188088 -0.076219372780585271 2 +-0.42710351472239827 -0.18888456582417157 -0.15710660253181968 2 +0.082794585915315716 -0.48573281898067155 0.0078763594179726056 2 +0.34003460150602732 0.35462961771583879 0.052771194783181721 2 +-0.39194251064962948 -0.29224682205434288 0.066620318060341605 2 +0.21146250325321714 0.44101239252657731 -0.064342207106371507 2 +-0.41615443950919362 0.039237897917599171 0.26542474410989447 2 +-0.38719949065611015 -0.20757979990652833 0.22262834471167253 2 +-0.16531972398455036 0.40347241431094483 0.22951939058533671 2 +0.15690430646234238 -0.071378304166784812 0.46162512212067885 2 +0.35564617300046225 0.12242924091988611 0.32468958401881665 2 +-0.0060320878049794618 0.25341782719601502 -0.42951650890993065 2 +0.32833843158390147 -0.31993134286566782 0.18357902655304531 2 +0.058718163718817197 0.12869283620093092 0.47645626595297297 2 +0.28928152578976907 0.20184091716765834 -0.34578827410991531 2 +0.37948009693020479 -0.27624437622995857 -0.15659643437506138 2 +-0.30776469856566913 0.17092044148401719 0.34618439766473219 2 +-0.19171807981037964 0.33160932280601768 0.31212856210359446 2 +0.25245356334943464 -0.27407538282341692 -0.32669723598210432 2 +-0.12065350122228868 0.18725095194360497 -0.43877633407113148 2 +-0.37745787185773871 -0.0382140383301856 -0.31653800141977029 2 +0.19806397299681111 0.02999004881521776 0.45116075228027064 2 +-0.20568413631753474 -0.19724937765481759 -0.40208796797455137 2 +-0.22649260170964641 -0.43820598329127824 0.029158470237451224 2 +0.26096043287752402 -0.41666063080901283 -0.042482612613948825 2 +-0.42206584927238949 0.1930123558717774 0.16731138331459694 2 +-0.34913096406689792 0.29154108584899463 0.19029074976753513 2 +0.083482542589013012 -0.22935515302358866 -0.42817910407127691 2 +0.14066296993008021 -0.4182454383267602 -0.21834552190506698 2 +-0.019478350744578408 0.34101305701760021 -0.3585398694486942 2 +-0.43280484789178914 0.24358274269801217 -0.0022532636193535009 2 +-0.12477135431295031 0.36024492171819705 -0.31355846705091628 2 +0.45040719996150702 0.1861340898361179 -0.073577552235943366 2 +0.1346615486145373 0.26100651447537548 0.39883943153366519 2 +0.11972325147581214 0.22046309413202625 -0.42926431989465519 2 +0.22358187991859324 0.0050357451443411479 -0.43997309187748174 2 +-0.49347606480783912 -0.023059296478814308 -0.031645682797479362 2 +-0.48381106627964754 0.059240694033084892 0.071452086281896962 2 +-0.084385524716018762 0.45031338330530002 -0.19076516385437436 2 +0.3417736296918108 0.32719202506290757 -0.1410758629516356 2 +-0.36843273055519271 -0.3299393961900482 -0.029516851245006446 2 +-0.30678393175041857 0.31567131428080369 -0.22980892622700838 2 +-0.21503122188279383 0.01476232120403273 -0.44334634529176886 2 +-0.47362727421985362 -0.13617417912168595 0.017268332209693128 2 +-0.28942563338168964 0.26966264140311347 0.29454935861001885 2 +-0.10357320476016603 -0.48541613363165004 0.0014314713936747154 2 +-0.30619487146561236 -0.34275586595504343 -0.17858497629969106 2 +-0.26448962933874209 0.014398478534287336 0.4181714868137163 2 +-0.35906984920527363 -0.1906562517760223 -0.27691736545448375 2 +0.037568593306109448 -0.41524091088866422 0.26360868693250672 2 +-0.052051300777545648 0.3093965001589879 0.37924966574493602 2 +0.48113849982037626 0.107746899060504 -0.015838893941665894 2 +0.41638357000568371 0.11530672961586626 0.24322629330302123 2 +-0.45690946732483273 0.17272070723147723 -0.071277948485328785 2 +-0.1477355042464335 -0.42971918080443861 0.19106483854020784 2 +0.16751071157708736 -0.45977476800289391 -0.064198711623625643 2 +0.47961429128881028 -0.0097851515742015203 -0.12372263022700566 2 +-0.14598560906461117 0.085639494944031613 0.46255018063316672 2 +-0.47143984229194141 -0.0076156197959385248 0.1611981163195744 2 +0.0053565411416260453 0.39866517583218986 0.2905565413733302 2 +0.40942048554799781 0.16977242091374942 -0.2179739168280094 2 +-0.083206338889110512 -0.3281379252895808 -0.36122561072450982 2 +0.11969783099324528 -0.47225074378320681 0.097672505668078863 2 +0.14292055894772571 -0.29980614857725663 -0.36544303656835508 2 +-0.39655583689562229 0.15108355572292786 -0.25229011591254025 2 +-0.26185294212339283 -0.25222346318848121 -0.34014502099352856 2 +-0.45979899142386105 -0.10795554987359728 0.14349074920444599 2 +-0.30365720592299195 -0.26233229751469905 0.28962558083675682 2 +-0.23195364931286058 -0.32859076606665827 -0.28749347484194809 2 +0.051224430272876202 0.38202009786492297 -0.30719009190783275 2 +-0.39207220767833917 0.22819369686113644 -0.19600924853509294 2 +-0.37773388282905052 -0.09086954027691431 0.30368729032030672 2 +0.39467792270053165 -0.26759477350524591 0.13904345645079874 2 +-0.41191482597905649 0.12980389870405051 0.2420918813103799 2 +0.26047083115505809 -0.41041354526291379 0.077956591385467233 2 +0.11177459390251984 -0.092412636589793901 -0.47242915830433518 2 +-0.43591522475224886 -0.023732045318672498 -0.22800657623942089 2 +-0.022261713829573419 -0.072318172300016692 -0.48789704836361258 2 +0.0081395223289316282 -0.46592641407744073 -0.1665013453294038 2 +0.081093397331894718 -0.18798589403991434 0.44810321338320824 2 +-0.37558558819514476 -0.24574358317084224 -0.20636842014191564 2 +-0.096338626192954552 -0.39466883610146292 0.28334605052085349 2 +-0.17708873486102419 0.18311451377670129 0.42210576825870783 2 +-0.013860117340804824 -0.21508084368989178 -0.44509421826479573 2 +0.18239848147210697 0.084697118181986275 -0.45087205027424987 2 +-0.17078960076831395 -0.43897569675787684 -0.15534122833161501 2 +-0.18763982805866186 0.45459829368467236 0.045035969439469983 2 +-0.016291632660891162 -0.37370752214727754 -0.3228929421921421 2 +-0.45558439255106498 -0.086590584353522265 -0.16737299007582934 2 +-0.022718764127191621 0.19781133358246469 0.45152398259708748 2 +0.31848408868533651 -0.01256202942642962 0.378759664305091 2 +-0.13927052507890036 0.29328859855178979 0.37285965701252483 2 +-0.3884619298661216 -0.26700045674280587 0.1517506844967999 2 +0.01152504496571128 0.054784659426273849 0.49077140770710381 2 +0.39344564527600812 -0.29567500239123962 -0.034390428629941142 2 +-0.26081803292429601 -0.33226122531683966 0.25565533811438645 2 +0.22251341765848939 -0.38054017239093424 -0.22041067021106323 2 +-0.31713717236303129 -0.35857571029063873 0.1361112009692359 2 +-0.23659629671011739 0.39734206321507148 -0.17778362562216143 2 +-0.14584093702298123 -0.28664018419369452 0.37434403279067496 2 +0.40321686626675135 0.27922069737849553 0.047493421869457403 2 +-0.14134661646917412 0.40629626664699892 -0.24081507758184034 2 +0.035859571147540806 -0.044279065426086374 0.49067862158384645 2 +-0.32037001354706696 -0.079773173240901274 -0.36780943399441413 2 +-0.29237358412217507 0.20085567941458216 -0.34319618038352179 2 +-0.24601576240771028 0.41634162313809264 -0.093434007278415776 2 +0.23816018360973706 0.13983707246510318 0.4109407503558189 2 +-0.068273343569342407 -0.47092136149196839 0.13980209463711818 2 +0.018801598797916399 -0.46299859053497849 0.17334896426697666 2 +-0.03416076831939252 -0.19390981014461106 0.45259077825678906 2 +-0.1547331916875945 -0.13107618004040195 -0.44933330796862875 2 +-0.094438908877836236 -0.47640015231839816 -0.084018910988347975 2 +-0.35724359501005171 0.29868741054458459 -0.16074154128435605 2 +-0.13364638908971294 0.44598349918207303 0.16167096559856231 2 +-0.27408682777806986 0.082143784286755478 -0.40134550473258368 2 +0.087697484975903461 0.42291710705325825 -0.24992582746355946 2 +0.21454829343853296 0.38156282591278823 -0.23560767118701434 2 +0.12550167434991091 -0.24619716991715462 0.41321139943412383 2 +-0.15104938876688062 0.0014584089104602367 -0.47597596324174679 2 +0.33514719842099605 -0.11676342614616753 -0.35080058024630445 2 +0.34140929106701184 -0.17432465269026692 -0.31177814142542615 2 +-0.47990278250569951 -0.11339875697248844 0.079887112571497526 2 +-0.30962512834722744 0.38356950160675773 -0.058101849310527684 2 +0.03554689615386189 0.48034552633383665 -0.12991041112850576 2 +-0.02709267922225124 0.36247438890288292 0.34097725028864367 2 +0.20848291996620624 -0.11757687601054088 0.43634411921676908 2 +-0.42882400034908141 -0.14350399053844937 0.20590057102758208 2 +-0.090560564339627767 0.13105873777682209 -0.47143063834755128 2 +-0.11090040697797957 0.47505096341799569 -0.097021220812907455 2 +-0.35545535296641972 0.33196185443364101 -0.087854040926861526 2 +0.47105024097298787 -0.12774577332923742 0.094515479810394459 2 +-0.15460594550149334 0.13044361732060336 -0.45085209386903086 2 +-0.074848554765210656 -0.13177409721165256 -0.47382282861169434 2 +0.15101292400278854 -0.0080031878833149023 0.47521043462103896 2 +-0.35736564422440908 -0.12769543239265371 -0.3207034667651314 2 +0.094114109904528578 -0.11570906014409471 0.47388311860317556 2 +0.28535641736280803 0.0030412638087362431 -0.40863291386221512 2 +-0.039990091122710111 -0.48199468786047772 -0.12270610879185923 2 +-0.18853463770583434 -0.43952710870582812 0.1385927951163417 2 +0.13625350025545474 -0.25384962961629476 -0.40660051121768037 2 +0.076403828318303169 -0.29026739247135586 -0.39079336597955455 2 +0.13728432455485556 -0.19414197011251358 -0.43056334484244385 2 +0.42298765123118853 -0.11727360742662864 -0.23329534385311404 2 +0.30420797260019533 0.37562352479984207 -0.11993652420543416 2 +-0.3502334626941026 -0.25676834588920638 0.24429292962306959 2 +0.38807058492308766 -0.17506321357061666 -0.2516437757750114 2 +-0.4334710607829404 0.10192783216805726 -0.22248770476455654 2 +0.40914491750034232 -0.057003079574881294 -0.27052242425340334 2 +0.0091819319799406746 -0.49666255021107453 0.01737846001306019 2 +3.014162351272498e-05 -0.00022412216118153361 0.00023687663445681739 1 +0.052801989430259211 0.23970717573936154 0.056895539019464536 1 +0.14450234786464269 -0.19474901447604212 -0.069052969614780621 1 +-0.17916427332813784 0.025715782501462409 -0.17491934196076869 1 +-0.094315748745573691 -0.1049186313862833 0.20842808898403417 1 +0.2028455816993574 -0.032721226494168885 0.14467222002492844 1 +-0.11961709481342205 -0.20932670315450266 -0.068932502351132449 1 +0.18154163452546179 0.031730055037039656 -0.16932814806384502 1 +-0.19142561708366748 0.1138767024163574 0.11305167457083386 1 +-0.001473790868043362 0.18871183238848396 -0.17245421855316698 1 +0.028830209928174921 0.094933596521697028 0.24343604928426632 1 +0.00445678131695941 -0.10545364547208048 -0.23862990061537631 1 +0.083937504337175992 -0.22041685542625192 0.14318288917914965 1 +-0.26084484777752204 -0.084924861365920409 0.046567197308790775 1 +0.24072617665983023 0.13728163083605013 0.012659213366990968 1 +-0.18328211734473712 0.20703285866735111 -0.07286245033855264 1 +0.29050347659524578 -0.063745480233620366 -0.031980568377714735 1 +0.081285632368155863 -0.085380926800716406 0.28373794642767847 1 +-0.096583387241615679 -0.26654065258928961 0.10998932892936106 1 +-0.04719957583257596 0.062530421018024848 -0.30281668858126498 1 +0.19645413834244752 0.15931720652006937 0.19260664679725728 1 +-0.076079067615941798 0.23616026396562506 0.18857037620037154 1 +-0.30229839132862157 0.069289308586842888 -0.045123575222269438 1 +0.1746994390040173 0.22574465843704122 -0.13452130698459194 1 +0.018790113036324302 -0.31664520595790835 -0.020976598390514467 1 +-0.14425146477183853 0.054707135099594573 0.27736998815826319 1 +-0.17029299303790246 -0.14528482679334123 -0.22878116705187657 1 +0.24566480433886223 -0.19641479873476103 0.075925501417087884 1 +0.17748833700630379 -0.13286378257956177 -0.22983460624370367 1 +-0.047773565441192503 0.31415600317739373 -0.062623118520660589 1 +-0.0068340816863229417 -0.26949598878753778 -0.18529913609387003 1 +-0.29131727265500779 -0.091219267782148672 -0.12125383672688822 1 +0.10750821452013629 0.1282916389194351 -0.2864660752012067 1 +-0.27344320558630231 -0.014901787152823198 0.19765697923321177 1 +-0.15459676992893528 0.17817758116580687 -0.23261792930941644 1 +-0.18299147861248341 0.2794439735685183 0.073269565509758133 1 +-0.22576517276420693 -0.18779410440076966 0.16560020829646344 1 +0.0087367713580315202 -0.16014075378076173 0.014482767898634712 1 +0.02166937950933422 0.030821587360851471 -0.15569200149497292 1 +0.10416721025013662 0.090115232451198596 0.081606705957980669 1 +-0.067724231557979284 0.14324655796362867 0.016712147417071811 1 +-0.0068808023839113941 -0.22059458984402644 0.27372687504858612 1 +0.11043443124615403 -0.025263791341274933 -0.32449021017160729 1 +-0.15634747002974614 0.014235725496882193 -0.018800570528364813 1 +0.33273455404191438 0.032392020270790335 0.08489051290760373 1 +0.077557837652741934 0.26039794514439762 0.21064194760877653 1 +-0.24932450725818317 -0.23792265115648828 0.014355512766715366 1 +0.16779116883852999 0.044701666713052791 0.29548740805949181 1 +0.31575259435477893 0.09399522491339185 -0.11786154416048142 1 +0.051109009578189674 -0.066547638567894724 0.13185951628960896 1 +0.19280950303903735 0.28465046570209951 0.0077455433522710115 1 +0.20543592423973955 -0.16649638529616964 0.2222244118011279 1 +0.14147121840903676 -0.060593393920313841 0.0063129913528785359 1 +-0.066668144025147216 0.030475814304770879 0.1427894834947423 1 +-0.053342746902161536 -0.047652654695166191 0.34386322870563746 1 +0.08280059069911061 0.13129665268237911 -0.061652604676741274 1 +-0.080890803084922636 -0.071920152617245853 -0.1163127959139466 1 +0.15321807762093834 -0.31048652461961324 0.04527565972171714 1 +0.27730652027962055 -0.17358936258398658 -0.12934685199851487 1 +-0.29575415255273296 0.19811115028253887 0.02544424014218119 1 +-0.11594462289123944 -0.1003298772972976 0.063416305732725525 1 +-0.16453093569200922 -0.02467014850318244 -0.31165181888248822 1 +-0.32992845318152686 0.073441695008099939 0.097303171396798366 1 +-0.050590078854345299 0.33650480258096455 0.087263062342506803 1 +-0.27909076718019299 0.14205013356346963 -0.1681282101913823 1 +0.093643905047351469 0.33473719934111179 -0.084850635899742316 1 +0.1365239106386455 -0.26572413696193398 -0.19369272959981307 1 +0.30579586459250829 -0.039832176647313075 -0.17256885252520576 1 +-0.12107511502677282 -0.33847608452377875 -0.0099517616438331291 1 +0.28807479052278323 0.053966727407861501 0.21781336000382234 1 +-0.24325839346969885 -0.22340575839088872 -0.13616182431928803 1 +-0.19605855379734358 0.18006794204638638 0.2378006126850809 1 +0.24262572115639683 0.14439754208748706 -0.22653499049722928 1 +-0.21374383143570785 -0.1099605652536701 0.28141428517341038 1 +0.055838347132006666 -0.09165768297793575 -0.098981075271938807 1 +0.32536668354276843 -0.097853682623521454 0.1334779603578797 1 +-0.069607517133508434 -0.20161380987089875 -0.30588629293096281 1 +-0.037992256595614907 0.20068997990658471 -0.30550684354217372 1 +-0.069883019615067571 0.16656432158083861 0.30707360056768007 1 +0.020221814841485362 -0.33876987985287055 0.11463516103966132 1 +0.095112459804220423 0.25670232489504585 -0.24126307771534589 1 +-0.090351576153363491 0.29057069730420337 -0.1899468271782144 1 +-0.085771491224872862 0.10131329866839714 -0.11133497642330889 1 +-0.1356134596047664 -0.24931697767483774 0.24502582019785868 1 +-0.14014341150326934 -0.28056116803993503 -0.20137551252303879 1 +-0.043055607684475763 -0.060656661150435005 -0.35585010276686074 1 +-0.27898679140235272 0.035739763062450192 -0.26373725595802683 1 +0.12196930650670011 0.16964660742462959 0.30264007452684843 1 +0.081466052102798017 -0.19851378729903479 -0.29451536740227535 1 +0.18864200228449263 0.28147737267882583 0.14062997857195028 1 +0.23548246919943949 -0.0029127207663287996 -0.28566493689687922 1 +0.051510065226324356 0.032472449480436719 0.3583650570682278 1 +0.084047659205297276 0.36619489627271401 0.082345773170841685 1 +0.22057270245230437 -0.29979009662294809 -0.096890920350708759 1 +0.30651207484667292 0.17635977393943134 0.12082800154917915 1 +0.2935085375499632 0.21769740288806988 -0.077671326675799554 1 +-0.36431048669079091 -0.04414505302889548 -0.022970448508646157 1 +0.2490734023486208 -0.055997172011154006 0.27682372524595567 1 +-0.0027720154490750992 0.14722434378837171 0.12896792856686445 1 +0.38427923619976989 0.024627473125503771 -0.033608726736941097 1 +0.19618479811608763 -0.28022204855520977 0.16273309474366399 1 +-0.29217712036934773 0.18281679758375746 0.1528123312776547 1 +0.18941981895892393 -0.082062422506531035 -0.11068868674041099 1 +-0.34203047890473742 0.019961039355569699 -0.15491427763962118 1 +-0.17130406611996379 0.32870589590726007 -0.042170692256760595 1 +-0.1859801112964658 -0.10335399169545155 -0.053130397606924826 1 +0.20925354190654583 0.031039983537490969 -0.046713072711011647 1 +0.34316257935580979 -0.17305233972043019 0.00033628785594420896 1 +0.10585438212623531 -0.27068000967665412 0.25522470003309389 1 +0.10570601475333902 -0.34728880042335131 -0.10475567263392008 1 +-0.10737487496542224 -0.15785160692915554 0.32429126121625373 1 +-0.28942329711923143 0.098899368336733351 0.24387548669130543 1 +-0.18600538017573232 -0.0097165410864480765 0.11024835660358068 1 +-0.33700909228305376 -0.16440212684772157 -0.032615861308760478 1 +-0.35754796563725394 -0.045926152248843527 0.11272604512623377 1 +0.040439522622158219 0.052995831021695201 -0.38868361297404813 1 +-0.1627994660789196 0.097276470891627137 -0.3244017063735235 1 +-0.27503765461948215 -0.084196368023144799 -0.24192559305495548 1 +-0.026027040635067243 -0.16944540002448633 0.13087314993656254 1 +-0.20907905584250255 0.26967368522422452 -0.1738677949369267 1 +-0.054707311001315637 -0.35288645455937306 -0.11083771311146649 1 +-0.0079051269417109576 -0.019815464014738576 0.23551126727341776 1 +0.022414870924025512 0.33271787709186629 -0.1821910464244727 1 +0.35850841308377668 0.1399296416829249 -0.011329108742475343 1 +-0.32012272906753891 -0.17921166014651391 0.091689120891368547 1 +-0.081159267539283056 -0.02258826290625289 -0.22555567818167405 1 +0.10708411622202758 0.017795180136314259 0.19583537139940682 1 +-0.19308381251986259 -0.32740631883353943 -0.10485224870297609 1 +-0.069656435928420329 0.066957246422228889 0.37276360757684202 1 +0.15016047438977465 -0.13052573208833282 0.1021457130615888 1 +-0.21237097053697102 -0.29348949150614301 0.1127809144233278 1 +-0.042776646964407375 -0.31581483089999418 0.21259701644815598 1 +0.28174334907322024 -0.28288909613825791 0.0032659077871620146 1 +0.10038569069270485 -0.048618048372519103 -0.19958184701886453 1 +0.029291712945843311 -0.20652559834069623 -0.092156251936651362 1 +0.22805496052133986 0.077988805449757809 0.11357146320614143 1 +-0.29822637932689999 0.22674577075059674 -0.088682957886754801 1 +0.38538230783394484 -0.06920137199531573 0.036820948221615454 1 +0.012587257164439321 -0.14285071010234318 0.3586003143792359 1 +-0.069234065681228973 -0.17125441163822883 -0.17647764920933623 1 +0.15789088244738314 0.19268689578488629 0.072338732863710217 1 +-0.20601399684411509 0.11784763250974534 -0.0020719494738760252 1 +-0.01215928598363232 0.33268402163839006 0.19670344264770664 1 +0.096144947117105473 0.016204821808735136 -0.067923735806303481 1 +-0.0054554378407597054 0.20634708000879021 -0.05796204423258542 1 +0.12039083155079047 0.13017578933584079 -0.17129088773129522 1 +0.012747854871683756 0.24767855708034087 0.3057576437926483 1 +-0.30789349699463731 -0.12375268876932422 0.21577078494474838 1 +-0.16720437603028054 -0.03083908758531357 0.35123858918745399 1 +-0.18128081866335391 0.2830487056717238 0.1883784304214256 1 +-0.10436502357698049 0.12509187236227029 0.19585659946239731 1 +0.31901916410525533 0.058808598066358339 -0.22972424345691189 1 +0.027769095322753831 0.14464675957004966 0.36323507776810504 1 +0.13960116785223819 -0.17898415571113385 0.31534230524128104 1 +0.023568426965540581 0.38692355277584711 -0.011858440788303823 1 +0.23985837710368524 -0.22766093610137156 -0.22213533463966978 1 +0.15778991217941379 -0.12673816359074469 -0.34115248458186781 1 +0.29625857514519732 0.24566730561158784 0.031953158536357829 1 +0.080656448812452167 -0.16841296531297367 -0.18478003237880164 1 +0.16496489167827175 -0.052783274797780409 0.35116768097441575 1 +-0.036474157223670325 -0.39535327705576773 0.036384073815337016 1 +0.36371164785207277 -0.10708387179365877 -0.10454864078898034 1 +-0.087048809320665527 0.25316102697845128 0.022369237421085028 1 +0.20897227862757828 0.099018777264479663 -0.3229107295199839 1 +0.043871234042261342 0.16303775916229074 -0.37115051312375918 1 +0.10637190794209886 -0.20995542498124597 0.034538474900766614 1 +0.20987672192604165 0.12455653007105925 -0.10616667532416831 1 +0.050145833646477067 -0.11927746362871103 -0.36483038374168059 1 +-0.2569589135759463 0.011876919793466743 0.30339559661531923 1 +-0.14553415621357807 -0.12941862681585642 -0.33965282644394962 1 +-0.38045926172758571 0.13381294154801746 -0.0024935828596186829 1 +-0.14786565736419174 -0.20218619506824634 0.037078655502300446 1 +0.27185960596773107 0.24683992968871024 -0.18144502724386516 1 +0.10624225261503392 0.23598317618805897 -0.038815416384184613 1 +0.20207022106946587 0.32360756219858922 -0.094044676976052274 1 +0.27731456915564023 -0.10000774304333798 -0.2589370471696687 1 +0.23834487210314695 -0.15931874140263813 -0.026333756732376437 1 +0.050413814320079887 0.039243068358821825 -0.2604303190974549 1 +0.24065670405888243 0.12440863007856787 0.28530892422349785 1 +0.24131817164355052 -0.089363242825941602 0.060911262413372344 1 +-0.2364719245809476 -0.004270508769169068 -0.088600013049095899 1 +0.28515263160773274 -0.22023725186962631 0.1733951527718868 1 +0.34009321243624258 -0.039735948062104037 0.22243245385186622 1 +0.08984024346625695 0.15791205654876458 0.18182196119615981 1 +-0.24638507448744487 0.13757586356258628 -0.27002689226946663 1 +-0.16857571095821844 -0.02812365115043744 0.21418353376682697 1 +-0.1731917451426222 0.2364117398325114 -0.39729462373902957 2 +0.12336966796224377 -0.35454250264062137 0.13803251821307455 1 +-0.19775114308164371 0.10713396961444183 -0.10814111302044851 1 +0.19857233363919352 0.23634253201295671 -0.25847400182932251 1 +-0.11478742160567977 0.18739418423886112 0.10180484691975492 1 +-0.053611188785143718 -0.24671323997391675 0.014373748327959429 1 +0.006763757672023106 -0.27457303434908686 -0.29097458896782502 1 +0.13236190385685356 0.33815344006019898 -0.183870581840652 1 +-0.10242343439746388 0.087166834030478577 -0.21537745486588183 1 +-0.2583766411997464 0.021032172749625697 0.03875788400968589 1 +0.076945048663832172 -0.38384722380040015 0.037063846680694387 1 +-0.26113960503705214 0.29588945218951068 0.0035529301492612936 1 +0.041284901195559109 -0.15059551548257941 0.21046777203360834 1 +0.17819004744153116 0.25123110214993383 0.24124469073292951 1 +-0.21817168097492304 0.11711712038934805 0.3195954816265269 1 +-0.23396064679188577 -0.33983934322570641 -0.008348234341521682 1 +-0.096390153856920888 -0.37138062730386218 0.11998934286889619 1 +-0.089740354549113041 0.21183842613184775 -0.1204125200007857 1 +-0.1315348553333206 0.25354532785257095 0.27599901609419952 1 +-0.47309049000944725 0.083917611539784609 -0.11427548002999455 2 +-0.10232075630902869 0.021751408944293536 -0.3821508088222666 1 +0.14926503561707283 0.37861796383415519 -0.0077371296117765553 1 +-0.19306479566447415 -0.075852084128277375 -0.1538589796531375 1 +-0.26369421911518526 -0.19216976823655502 -0.23391148886092913 1 +0.12020736222706946 0.35044000592900432 0.17911686727626699 1 +0.3048115684889941 -0.13717734716591962 0.23313392161126517 1 +-0.1230622188165649 0.25876006525325701 -0.2904721485393742 1 +-0.093393508717123319 0.38020496232867673 0.0033071108055348006 1 +-0.36027962609956549 0.1449760584656708 -0.10362940598672385 1 +0.38469283098921392 0.02319611420450559 -0.14916372426046942 1 +0.13749184053910829 -0.092794069634492327 0.19742968657155993 1 +0.074797661013089226 0.25012545596594921 -0.1404934926198349 1 +-0.054477938391975539 -0.085628442065833837 -0.017799871366431477 1 +0.024806284611034665 0.098272052066470883 0.016645819433334985 1 +-0.022061313749070353 0.2946354401931443 -0.26676223580777092 1 +0.024946442360908885 0.0263042580677295 0.096367363640021172 1 +-0.12866014902766865 -0.17232468112762231 0.13566497641610362 1 +-0.28146278773699562 0.27081314138547607 0.10101636941299799 1 +0.36011527425244588 0.097685548130398842 0.15920693658319554 1 +0.066187236726057849 -0.34026801549245778 -0.19922030279276431 1 +0.07022159834384252 -0.063623002441841325 0.38885282067455429 1 +-0.11758927070462714 0.065467038838721014 0.06103679065767291 1 +-0.10199424288607814 0.37130749604407531 -0.12804351163479197 1 +-0.045794287223631047 -0.4324557833521423 -0.23687521773595907 2 +0.13954101029359572 0.087691825752021196 0.46423620151461575 2 +-0.39476624440822194 0.038136393518752726 0.027823555675558567 1 +0.042775402298076214 -0.40900634810064485 -0.054889459858675979 1 +-0.056154878290525095 0.1311062337485458 -0.37645110033906548 1 +0.32857963727660389 0.32088575127821412 0.1792588089484089 2 +0.27611524808374921 0.2192909383500975 0.20670216949263528 1 +-0.30793708451359386 -0.25493837901738242 -0.065728746169034485 1 +0.17340100444749926 0.025669119720247442 0.047186460674716942 1 +-0.36289506615087352 0.027981941147756248 0.18079850569588596 1 +-0.20657734755208726 0.063754151458302072 0.19893688931836873 1 +-0.34094180928632267 -0.14757967407118869 -0.18786326339274695 1 +-0.23553097831014172 -0.090399560703751214 0.14351157136500015 1 +-0.10738296764579104 0.34812174360645026 0.16914638577466848 1 +0.12295950646474089 0.21757928211552441 -0.32918054547200276 1 +0.012981378463993831 0.13186935449453266 -0.25361598352399589 1 +-0.18282846177641854 -0.23173302295590589 -0.2775513473831005 1 +0.0052481079377969496 0.19020502243444401 0.22426672589204605 1 +-0.39541077193317081 0.037156530734504901 -0.072147206050796608 1 +0.34431029335123825 -0.18967359339033504 0.098873723612798434 1 +-0.22440434312429891 -0.20757435375880903 0.26343757447756794 1 +0.17560792936664665 -0.36448846737671531 -0.035620747830156084 1 +-0.048532728179369017 -0.066526068312505363 0.12862283474273536 1 +-0.38032248306506256 -0.11517674900610347 0.044923628284516896 1 +0.14986287173910431 0.041731457075121423 -0.26282606340174863 1 +0.29507169567874758 0.055981517478235029 -0.0037521482767681157 1 +0.3099538909046799 -0.25775877376865519 -0.088388609139942564 1 +0.18306476248019357 0.36453429163376155 0.086802054568749953 1 +-0.070403421397669072 0.013740322100972452 -0.067869860279548375 1 +0.1791412793429773 -0.21367260721022319 -0.29899955568168235 1 +-0.36614232797971086 0.16937465922964734 0.088622907414423815 1 +-0.15448089410822588 -0.32615429828064552 0.18586659724105453 1 +0.052324108742054357 -0.038351248529848364 -0.48856124210133045 2 +0.27339126238480399 -0.28705305917821577 0.10218477312054483 1 +0.12554562290815949 0.096164566717367839 0.36751961870386074 1 +-0.021181431807494128 -0.10907330839819857 0.27324381903867717 1 +0.052550146099273894 -0.33695348472230824 0.20692692556226724 1 +-0.28494321772920805 0.27677228364487483 -0.29224974361019257 2 +0.10772611365430303 -0.27870879909125396 -0.035165389045932201 1 +-0.14856308449960456 0.37033969772799641 0.083357807780090915 1 +0.025831712627652915 -0.2515063025023635 0.071048621658933692 1 +0.073182083123299962 -0.29466437179154648 0.38780511575873033 2 +0.0080333500708874642 0.25411677277280265 0.14242338431531035 1 +-0.0017606887646237808 0.38831694465959848 -0.10592558893991103 1 +0.26398114212563917 -0.14381701618748871 0.39063091979078446 2 +-0.38326706137033695 -0.11875831278201833 -0.10508308432111768 1 +0.46034682268860305 0.15676767565379729 0.089581324608377158 2 +0.13578306781534899 0.056437373500978286 -0.37048711030225778 1 +-0.052966710537569503 -0.27929443321811831 0.40328721189090194 2 +0.192560991004216 0.063008277917616262 0.20350548147513242 1 +0.050258612180519122 -0.075186495631741901 0.03540413824808368 1 +0.10777834999410811 0.26611091895884736 0.30598558072669596 1 +-0.066278520399229893 -0.34290151563057464 -0.2064101834937612 1 +0.19685886776352077 0.2027080197434461 -0.043322649523488271 1 +0.0015847901613452037 0.080830144016209665 -0.075502012245031377 1 +0.26368489950477669 0.033773895863873762 0.30891554526250792 1 +-0.23299918759270005 -0.090432163829179152 -0.32846528987419321 1 +-0.088108143022930407 -0.11027631435176584 -0.26475408611063156 1 +0.38973726098737016 -0.019243022032469914 0.14264304566481822 1 +-0.01289473966910289 0.48606046903305394 0.08085761591040605 2 +0.33463968548109069 0.17827648066868423 -0.15894998183293146 1 +0.15134385076449164 0.10581068340528867 -5.9750900477974211e-05 1 +-0.17405379599508039 -0.36653139572584437 0.064489678375509452 1 +-0.048854911632127768 0.053711968379438257 0.2805493974584623 1 +0.21655805777292733 -0.049594875144037723 -0.20470694456379607 1 +-0.20231826270209063 0.20805349381289187 0.13341602539504827 1 +0.092366405386281519 -0.1059266853010145 -0.27518724745635098 1 +-0.16707682968160315 0.20164704292262747 0.020780910447402774 1 +0.19524860317316997 -0.24489588806719859 0.27517702750751011 1 +-0.3039111084610352 -0.27281812486539642 0.097065124694635241 1 +0.19626955570096213 -0.24183875140106834 -0.0045910103775962108 1 +0.19582217433086202 -0.042336659338486862 -0.36245467861757791 1 +0.1868752064317967 -0.18873558420146364 -0.15372957291117345 1 +-0.045633180489322724 -0.15147108696986303 -0.38255403163522023 1 +0.48770423858475598 0.0061209045436740276 0.075154425503095423 2 +0.47672175612571999 0.0094806422807550209 0.14315724795141693 2 +0.033436062702507333 0.29305660163602409 -0.018840324986662348 1 +0.26197014702976135 0.31243594682877091 0.089519958804874414 1 +-0.043673796350527663 -0.26494914974355055 -0.077875466162947674 1 +-0.16399744816910741 0.061074557863654004 0.3730679880969614 1 +-0.16874774479793608 -0.16542383351305237 -0.13655358726981978 1 +0.10558920218023279 -0.2883522675688806 -0.27973042458712222 1 +0.28759948121919943 0.0075922568669945789 -0.093321899493478105 1 +-0.29486701362731427 0.23302861539801364 -0.18637025878136035 1 +-0.3754764128643342 -0.0084805563105020514 0.32194621216299329 2 +-0.24651850149330784 -0.17519194055264725 -0.055562192344838009 1 +-0.22751710255401345 -0.16845076940402859 0.073697384148184594 1 +-0.24536469437509145 0.30414389962752025 -0.094414445157329593 1 +-0.23350857302408798 -0.28870963842640884 -0.20268635756650838 1 +0.33355094667626339 -0.12994863842172816 -0.19024905887558033 1 +-0.046583807889072994 -0.15241831865196193 -0.082961453490844869 1 +-0.074611879123396452 -0.017134658095282806 0.05376761501253928 1 +-0.26578688709696846 0.38360878439230706 0.159993866467324 2 +-0.06913794883377869 -0.19458616531484274 0.20951642194864953 1 +0.089498950171411212 -0.13494631779164529 -0.023959860311300797 1 +-0.18558142756911827 0.18711832187159916 -0.31964230522062342 1 +0.23634040692314512 -0.11916228796852599 0.14864364771349806 1 +-0.088210793990276731 -0.2879883344945246 -0.27781252700893333 1 +-0.26086854777577478 -0.017830342079347795 -0.1788234347614589 1 +-0.33787933076748999 0.089161001111497051 -0.21629255429682587 1 +-0.082238342689786859 -0.24671853062405819 0.32044664884209845 1 +-0.0054062426620777558 -0.32672003076719502 0.36865108381055367 2 +-0.0056290036019684894 -0.38106105636912002 0.31574290758864998 2 +0.22220628949086949 -0.13840275692162152 0.30851771391391392 1 +0.059753767986784327 -0.14859920887922184 0.090513805315648982 1 +-0.2667268431609312 0.25334447042736447 0.20660573212278818 1 +0.38480762928955115 0.10723688934594511 0.070832461234396973 1 +-0.15677184091914464 0.18482085016455907 0.33213232709257567 1 +-0.00064705198299440381 -0.25340022477919039 0.15936372413060598 1 +-0.11020620758406793 0.022836216030780593 0.48067896906982044 2 +-0.0032908640424136838 -0.19714476189659899 -0.242153776325925 1 +0.0093998308755075255 0.39201559930573759 0.12966967049431224 1 +-0.35410381558087078 -0.057697060927998811 -0.20288559066945844 1 +0.059673730534753888 -0.21897248874357986 0.33725101689325682 1 +-0.17838054976210899 -0.27075414553594135 -0.033985269742722632 1 +0.27111033575769367 0.29800247292168042 -0.039183813111945853 1 +0.037693459566387935 0.25035362521103288 -0.32050439627600708 1 +-0.26377566706920014 0.40474764330518331 0.097782864651467877 2 +-0.0022521275033995578 -0.057420856046653486 -0.16094826021995451 1 +-0.26724669473642121 -0.19316209606505375 0.36593332465911249 2 +0.085499007306107461 0.023008571003886057 0.022531195875965832 1 +0.098844449635862128 0.28069945194991636 0.12422379247805743 1 +0.31655333775702299 0.14012618136656779 0.22720581707510407 1 +-0.36004573663529021 0.12360063255151099 0.16730063077305124 1 +0.019555949360480052 -0.21128114961576963 -0.36029218479847658 1 +0.024318355975380859 -0.039456773514895682 -0.2982578166862066 1 +-0.053302970875965923 0.29993165832454888 0.27107195243223825 1 +0.11074740663859059 -0.0023209238812337309 0.10707812100084599 1 +-0.23369222637748979 0.026076224351167233 -0.34209863262360352 1 +-0.093658627887151527 -0.024119861366794414 0.26572354640586565 1 +0.033069219405781114 -0.037001826242540892 -0.39966811891681564 1 +0.062480776161146667 0.3415433860776525 0.24881093986055752 1 +-0.19006710051136508 -0.21182820767376392 0.40334880581212612 2 +-0.15117658436565384 -0.057729665999662422 -0.39529041860225311 1 +0.21096164409808271 0.2411647762236705 0.3779204346949695 2 +0.26151083986578794 0.26282880113491397 0.32980393996530022 2 +0.29009947850455003 -0.0095043136026206898 0.15308083393387206 1 +-0.3098285643626284 -0.22121496989046627 0.17135381975820951 1 +-0.0030745485663673938 -0.015807326101892019 0.41212024611049008 1 +-0.14172327018728048 0.28556847263614998 -0.11581586672608517 1 +-0.22499271278891853 -0.27147465929726566 0.199387037696865 1 +0.33344952423229235 -0.19635668104034432 0.30633731184840085 2 +-0.021396171792294139 0.26879464592372543 -0.13600674659771203 1 +0.41451092319956245 -0.059018811645844285 -0.047794195950891169 1 +0.11862227866704492 0.10064040959043494 0.24498147812342444 1 +0.086230367737865965 0.16375703761964155 0.022170312114837873 1 +0.17954953571185736 -0.02124783317111862 0.23179488813310006 1 +-0.33908504237729525 -0.23921603457248902 0.017026141102442993 1 +-0.1049325276446455 -0.045180241355882306 0.48040953182320123 2 +0.16385903817559577 -0.22218965562641499 0.10237333185805998 1 +-0.29305831491827128 -0.068099933139374097 0.28458839114693735 1 +-0.20092482262250835 0.10964844962442945 -0.19791334687654147 1 +0.068942202224407514 0.0029955069730034645 0.27555875309342848 1 +-0.16236711227235467 -0.15510138526654288 0.43923281716767948 2 +0.41976828002296784 -0.22321200687821596 -0.13898651814964413 2 +-0.26376459679853714 0.14801102106046626 -0.063514948655925496 1 +-0.043707734836280182 -0.087160102933500516 0.48560279250516092 2 +-0.15802654231952018 -0.16653664499584497 0.21988342840539676 1 +0.024331064489864926 -0.31125973494592851 -0.11271876604229143 1 +-0.11559571688941267 0.15387999526142576 0.45400156595678642 2 +-0.07167740472751119 0.20992098201559808 -0.22335335036418605 1 +-0.1491917475325466 -0.016357705696806901 -0.10224485743117828 1 +-0.2306497953749824 0.22228666588434001 -0.24723041022010697 1 +-0.13144693740742314 0.14002434622071488 -0.04541299504574707 1 +-0.28141787556258735 0.18558837696116509 0.26243372199734821 1 +0.13054785106683886 0.14479124561273679 -0.37983066967241486 1 +0.25769984113159344 -0.0023623980042580817 0.052061446411661758 1 +-0.26494850649782675 0.12426101634281547 0.064172013322501803 1 +0.12005227946995625 -0.1908756192412181 0.2188096871298075 1 +-0.27887316288322439 -0.06352253435650923 -0.037757109208955322 1 +-0.065960876300959509 -0.12031833421810569 0.39323461699135742 1 +-0.48122871014891949 -0.042584193588204991 -0.10092600199458213 2 +0.36491740070743223 0.1957270440341696 0.057139964805739601 1 +-0.024962087819082851 0.10339693677256825 -0.17566633837899109 1 +0.44619912765057934 0.12464786437614742 -0.17434519797785047 2 +-0.36430451916850232 -0.12690065910547679 0.14770022129768121 1 +0.054790863636619912 0.079625420499855021 0.16029551450519436 1 +-0.02776712276609326 0.20451529123961837 0.066410880598844022 1 +-0.19092551559039672 0.042667425444435254 -0.26085762257038858 1 +0.10833714071521103 0.30163084998123035 0.0271809783016701 1 +0.20541729434062569 -0.34740715594795879 0.10618042678623019 1 +0.2373618104996971 0.22434971528213393 0.094176968625838686 1 +0.32334197254079833 -0.024750104564432576 -0.25770646780151452 1 +0.17342445445381852 -0.33853545638595112 -0.16047221364995759 1 +-0.040852174876646268 0.080635219182546541 -0.48576716949190768 2 +-0.066215788508568144 0.027311811889385303 -0.15467671760363408 1 +-0.10575010161414924 0.2738638707643401 0.11489477718290128 1 +-0.25612470755483285 0.039226722898682218 0.13060064002721536 1 +0.39443774579235996 0.12024045120312925 -0.089008472404216388 1 +0.018961428251670451 -0.30418817632757017 0.28114984423349887 1 +-0.1481399319006777 -0.081857618651120068 0.14299434933456259 1 +-0.16588969726651318 0.34558034965027851 -0.18240870654409286 1 +0.23118384919793089 0.21683538121308274 -0.37893771963620582 2 +-0.26587874704060482 0.06032356944427035 -0.13978542303404215 1 +-0.39731996266264513 0.28851976009431118 -0.044378308977794788 2 +-0.18099553473653571 -0.059027555211072211 0.022079614876154771 1 +-0.096793182622928298 0.13922916786611267 -0.28536628352287036 1 +-0.42524424938196426 -0.23557187749304304 -0.093936862140836422 2 +-0.34981351324110294 -0.1984420378206895 -0.11746291563394778 1 +0.083518890584546424 0.20195189593146817 0.44228024589446685 2 +-0.35934001074403754 0.04370741166802089 -0.33503702749383063 2 +0.38112499666258443 -0.23380860756053309 -0.21304072467703439 2 +0.011336598332309364 -0.018148889418823255 -0.084319480306515843 1 +-0.11968030805226781 -0.28209895052106987 -0.11675099546023027 1 +-0.20458476828247013 0.18494194933765132 -0.15434296098837028 1 +0.21573732351322028 0.31334177075713721 -0.18160115611199051 1 +-0.072809298939057521 -0.40323032259712421 -0.042252898590777778 1 +0.16455498969273469 -0.14747803469444665 0.018095161482380974 1 +0.12845642537231569 0.013435188001823466 0.39404504012287489 1 +0.093422144597508638 -0.25888403351035577 -0.11855113815612503 1 +-0.19890103708578824 -0.043197668884905158 -0.23409956778195812 1 +-0.064668727888912508 0.48885627077083871 0.023828543054009343 2 +0.089472047390780046 0.4591033498031909 -0.15731063262053824 2 +-0.054289356976667952 0.36862767534947127 -0.20027274759484467 1 +-0.067122760381802288 -0.17129596311335374 0.0546918314881501 1 +-0.035150278326154444 0.085603549601096771 0.077659853514379512 1 +0.46415485128801681 -0.16255780555360716 -0.050651028921335488 2 +0.099192903888102618 0.048407584042190067 -0.18965444786829586 1 +-0.13000412853418764 -0.36299846990813228 -0.15178608549358752 1 +0.17459221562564242 -0.06392336467034504 -0.28165033671196693 1 +0.41129153200093671 -0.17107995715116933 0.21247928509905528 2 +0.41493340733122097 0.046065397327095713 0.26516695791897971 2 +0.31510700428231037 0.1330607061829582 -0.3584498307402415 2 +-0.39744303830165573 -0.035047204920095415 -0.11884051728647897 1 +-0.037935830376490232 0.25699347244871928 0.42226421765882671 2 +Triangles +694 +166 189 20 2 +138 300 297 2 +674 103 753 2 +264 104 234 2 +59 172 163 2 +151 278 7 2 +7 193 151 2 +122 55 192 2 +152 295 1 2 +268 241 48 2 +241 268 94 2 +70 222 250 2 +222 70 299 2 +231 95 301 2 +145 607 608 2 +94 650 625 2 +263 217 87 2 +131 60 189 2 +745 270 151 2 +42 674 125 2 +242 52 152 2 +234 264 77 2 +201 26 223 2 +71 211 206 2 +206 211 16 2 +533 233 52 2 +21 577 674 2 +225 219 105 2 +75 156 203 2 +156 235 203 2 +96 202 44 2 +29 116 251 2 +745 278 151 2 +131 239 60 2 +178 58 200 2 +10 91 133 2 +233 533 99 2 +99 292 233 2 +58 209 293 2 +249 137 40 2 +169 11 150 2 +120 230 24 2 +88 177 67 2 +269 73 197 2 +189 166 51 2 +51 131 189 2 +110 183 52 2 +164 176 93 2 +288 176 164 2 +128 155 45 2 +727 185 107 2 +160 298 18 2 +108 21 245 2 +17 116 173 2 +150 11 215 2 +54 180 122 2 +61 147 160 2 +157 110 5 2 +126 143 8 2 +82 635 236 2 +160 147 298 2 +135 146 19 2 +55 122 208 2 +233 110 52 2 +12 286 174 2 +247 299 70 2 +34 265 287 2 +255 141 35 2 +146 136 19 2 +220 85 203 2 +67 89 216 2 +217 92 66 2 +118 241 33 2 +109 165 10 2 +217 66 157 2 +117 209 32 2 +150 62 194 2 +251 72 173 2 +207 133 10 2 +534 261 176 2 +104 264 581 2 +37 97 159 2 +19 154 115 2 +262 200 58 2 +96 27 202 2 +252 22 117 2 +161 617 74 2 +303 157 5 2 +19 214 115 2 +237 4 246 2 +193 63 151 2 +175 75 289 2 +296 294 56 2 +165 754 108 2 +2 92 229 2 +37 162 281 2 +212 692 68 2 +267 15 225 2 +155 160 45 2 +146 592 48 2 +127 291 46 2 +248 168 14 2 +32 236 98 2 +110 29 183 2 +134 169 41 2 +117 178 22 2 +170 734 687 2 +91 538 10 2 +78 191 198 2 +169 150 41 2 +180 69 228 2 +187 707 71 2 +92 143 42 2 +146 45 136 2 +63 224 270 2 +144 689 264 2 +222 13 652 2 +141 62 187 2 +278 155 7 2 +7 155 128 2 +161 213 25 2 +128 45 146 2 +160 45 142 2 +81 249 170 2 +119 269 12 2 +155 61 160 2 +225 15 105 2 +23 289 203 2 +203 220 23 2 +72 173 218 2 +215 62 707 2 +263 82 204 2 +689 257 114 2 +184 166 20 2 +251 29 183 2 +181 69 180 2 +24 120 190 2 +100 240 26 2 +126 42 143 2 +216 67 88 2 +197 73 130 2 +240 266 99 2 +266 292 99 2 +96 44 171 2 +50 137 227 2 +4 172 246 2 +138 297 302 2 +41 150 194 2 +152 218 295 2 +215 11 153 2 +38 125 126 2 +126 272 38 2 +236 209 32 2 +102 20 134 2 +115 188 30 2 +109 165 43 2 +43 261 109 2 +191 9 198 2 +581 98 634 2 +192 213 78 2 +263 262 82 2 +83 118 283 2 +163 268 135 2 +107 284 277 2 +154 47 148 2 +136 45 142 2 +12 269 197 2 +4 96 171 2 +167 92 42 2 +120 56 296 2 +172 6 163 2 +84 284 267 2 +261 667 80 2 +194 62 141 2 +56 120 149 2 +91 255 35 2 +80 261 534 2 +251 72 183 2 +10 668 109 2 +159 22 195 2 +203 235 85 2 +652 222 90 2 +258 23 130 2 +276 221 78 2 +196 267 225 2 +210 110 157 2 +86 665 686 2 +165 108 43 2 +108 245 43 2 +608 101 49 2 +201 223 85 2 +141 187 35 2 +41 147 194 2 +201 100 53 2 +85 223 220 2 +33 277 260 2 +176 245 93 2 +166 174 65 2 +61 270 745 2 +50 285 139 2 +275 17 149 2 +54 132 181 2 +686 36 665 2 +142 160 18 2 +92 3 143 2 +186 106 28 2 +72 218 152 2 +189 725 134 2 +681 642 114 2 +82 262 209 2 +148 47 538 2 +100 22 178 2 +227 2 167 2 +68 244 168 2 +121 297 124 2 +161 74 213 2 +28 570 106 2 +163 94 268 2 +224 102 270 2 +211 39 121 2 +253 28 256 2 +260 253 83 2 +172 59 246 2 +59 163 135 2 +755 60 169 2 +9 156 243 2 +30 279 115 2 +31 301 231 2 +238 88 1 2 +217 157 87 2 +87 157 303 2 +214 135 19 2 +281 221 74 2 +221 213 74 2 +287 34 232 2 +98 634 635 2 +29 81 116 2 +84 267 196 2 +130 23 177 2 +291 123 127 2 +34 130 265 2 +111 205 246 2 +100 178 79 2 +79 200 266 2 +92 3 217 2 +100 79 240 2 +282 51 174 2 +174 51 166 2 +112 232 34 2 +11 127 123 2 +185 54 122 2 +27 642 681 2 +81 170 116 2 +54 181 180 2 +41 271 102 2 +102 134 41 2 +63 186 184 2 +122 180 25 2 +114 248 257 2 +35 187 206 2 +252 159 247 2 +119 259 12 2 +83 256 193 2 +261 43 176 2 +285 16 140 2 +158 18 141 2 +142 18 158 2 +57 154 115 2 +105 15 208 2 +179 2 81 2 +257 288 164 2 +164 290 257 2 +178 200 79 2 +127 302 153 2 +302 39 153 2 +66 210 157 2 +182 296 294 2 +107 132 54 2 +176 43 245 2 +175 31 733 2 +139 21 108 2 +169 11 755 2 +44 129 617 2 +82 209 236 2 +245 21 93 2 +47 142 158 2 +179 229 66 2 +189 60 725 2 +125 42 126 2 +254 581 98 2 +12 197 286 2 +69 171 228 2 +171 44 228 2 +89 242 216 2 +76 230 296 2 +131 112 24 2 +490 106 12 2 +180 25 228 2 +121 39 297 2 +53 195 100 2 +136 47 154 2 +254 36 665 2 +87 200 262 2 +200 87 303 2 +73 175 733 2 +136 142 47 2 +202 44 129 2 +115 57 188 2 +123 755 11 2 +147 271 61 2 +57 667 668 2 +185 122 208 2 +234 290 77 2 +20 189 134 2 +48 146 135 2 +175 31 231 2 +132 650 33 2 +275 300 138 2 +138 274 275 2 +279 214 115 2 +96 4 237 2 +170 687 40 2 +195 22 100 2 +193 283 7 2 +83 253 256 2 +193 256 63 2 +210 179 66 2 +199 171 69 2 +149 56 173 2 +50 137 140 2 +247 162 299 2 +224 102 20 2 +97 9 198 2 +19 136 154 2 +153 127 11 2 +687 121 124 2 +298 194 147 2 +303 5 200 2 +15 185 208 2 +227 167 103 2 +53 201 235 2 +266 79 240 2 +202 86 129 2 +55 192 191 2 +159 37 247 2 +149 173 17 2 +105 509 208 2 +78 198 276 2 +192 25 213 2 +24 565 112 2 +186 65 184 2 +186 106 65 2 +181 199 69 2 +181 6 199 2 +196 225 64 2 +744 241 118 2 +150 215 62 2 +103 167 42 2 +224 184 63 2 +129 13 226 2 +2 92 167 2 +88 216 1 2 +243 156 75 2 +215 153 707 2 +237 246 111 2 +221 78 213 2 +119 31 733 2 +490 106 65 2 +116 734 170 2 +277 284 84 2 +182 76 296 2 +107 54 185 2 +177 23 220 2 +177 220 67 2 +290 164 38 2 +164 280 38 2 +159 195 97 2 +238 287 88 2 +217 3 263 2 +81 2 249 2 +140 121 16 2 +179 81 29 2 +22 159 252 2 +10 207 165 2 +725 169 134 2 +30 205 279 2 +205 30 757 2 +184 65 166 2 +300 275 17 2 +131 24 239 2 +253 84 196 2 +71 153 211 2 +93 280 164 2 +297 39 302 2 +117 252 250 2 +28 253 196 2 +299 13 222 2 +108 139 754 2 +210 29 110 2 +252 247 70 2 +27 86 202 2 +509 95 704 2 +231 95 243 2 +52 183 152 2 +183 72 152 2 +64 219 119 2 +231 243 75 2 +235 201 85 2 +143 204 8 2 +143 3 204 2 +210 179 29 2 +32 250 117 2 +26 240 89 2 +175 231 75 2 +286 113 197 2 +248 168 68 2 +100 26 201 2 +192 78 191 2 +122 25 192 2 +692 68 244 2 +211 121 16 2 +128 744 7 2 +211 153 39 2 +262 209 58 2 +283 118 7 2 +4 171 199 2 +4 199 172 2 +187 71 206 2 +178 117 293 2 +199 6 172 2 +47 158 538 2 +270 102 61 2 +102 271 61 2 +581 36 264 2 +42 103 674 2 +749 121 687 2 +15 185 727 2 +162 13 299 2 +650 625 132 2 +113 282 717 2 +120 230 296 2 +106 259 12 2 +203 75 289 2 +133 91 579 2 +254 665 90 2 +252 70 250 2 +119 733 269 2 +733 73 269 2 +3 263 204 2 +717 273 113 2 +273 717 112 2 +99 240 89 2 +168 80 534 2 +137 2 227 2 +57 148 154 2 +263 87 262 2 +650 94 241 2 +258 289 175 2 +76 238 182 2 +238 1 182 2 +27 96 212 2 +138 302 127 2 +127 274 138 2 +260 83 118 2 +118 33 260 2 +220 223 67 2 +223 89 67 2 +26 89 223 2 +153 707 71 2 +184 20 224 2 +107 132 33 2 +509 208 55 2 +257 248 14 2 +64 225 219 2 +717 282 51 2 +44 161 228 2 +161 25 228 2 +141 158 255 2 +509 704 191 2 +92 229 66 2 +77 689 257 2 +229 2 179 2 +239 190 123 2 +190 291 123 2 +21 93 577 2 +63 270 151 2 +226 281 74 2 +91 158 255 2 +105 301 219 2 +73 175 258 2 +239 24 190 2 +60 239 123 2 +242 152 1 2 +216 242 1 2 +73 258 130 2 +249 2 137 2 +250 90 32 2 +222 90 250 2 +574 126 8 2 +272 126 574 2 +251 116 173 2 +689 77 264 2 +254 98 32 2 +90 254 32 2 +40 249 170 2 +293 209 117 2 +273 130 197 2 +256 28 186 2 +256 186 63 2 +617 129 226 2 +260 84 253 2 +148 10 668 2 +285 16 145 2 +104 234 272 2 +744 592 128 2 +259 64 119 2 +135 268 48 2 +144 264 36 2 +277 260 84 2 +196 64 570 2 +88 265 177 2 +265 130 177 2 +293 58 178 2 +674 753 21 2 +76 232 287 2 +76 287 238 2 +198 37 276 2 +273 130 34 2 +273 34 112 2 +127 46 274 2 +120 149 46 2 +149 274 46 2 +301 31 219 2 +219 31 119 2 +538 148 10 2 +274 149 275 2 +37 97 198 2 +139 145 285 2 +107 277 33 2 +214 59 135 2 +59 214 279 2 +246 59 205 2 +205 59 279 2 +258 289 23 2 +281 37 221 2 +37 276 221 2 +37 162 247 2 +124 297 300 2 +13 162 226 2 +226 162 281 2 +283 83 193 2 +284 15 267 2 +50 285 140 2 +286 282 174 2 +286 113 282 2 +197 273 113 2 +287 265 88 2 +257 14 288 2 +234 38 272 2 +290 38 234 2 +77 257 290 2 +46 291 190 2 +190 120 46 2 +200 5 266 2 +5 292 266 2 +292 5 233 2 +233 5 110 2 +56 294 218 2 +218 173 56 2 +744 48 592 2 +298 194 18 2 +18 194 141 2 +570 196 28 2 +147 271 41 2 +295 218 294 2 +294 182 295 2 +295 182 1 2 +93 577 280 2 +12 174 490 2 +634 581 104 2 +607 101 608 2 +86 129 652 2 +732 188 80 2 +717 112 131 2 +82 635 204 2 +95 704 243 2 +704 9 243 2 +104 272 574 2 +230 565 76 2 +125 577 674 2 +668 667 109 2 +174 490 65 2 +21 139 753 2 +288 534 176 2 +8 634 574 2 +634 104 574 2 +248 642 114 2 +144 27 686 2 +107 727 284 2 +30 757 244 2 +33 650 241 2 +49 608 139 2 +133 207 49 2 +509 105 301 2 +533 52 242 2 +97 9 730 2 +635 634 8 2 +116 17 734 2 +236 635 98 2 +592 128 146 2 +608 145 139 2 +89 533 242 2 +686 144 36 2 +48 744 241 2 +80 732 168 2 +123 60 755 2 +191 509 55 2 +204 635 8 2 +730 156 53 2 +565 232 76 2 +99 533 89 2 +132 625 181 2 +625 6 181 2 +744 118 7 2 +111 205 757 2 +565 232 112 2 +625 163 94 2 +95 509 301 2 +137 40 140 2 +74 226 617 2 +652 665 90 2 +86 665 652 2 +35 206 579 2 +579 91 35 2 +30 732 244 2 +244 732 168 2 +44 617 161 2 +248 68 642 2 +106 570 259 2 +570 64 259 2 +704 191 9 2 +254 36 581 2 +288 534 14 2 +16 607 145 2 +96 237 212 2 +237 692 212 2 +206 579 101 2 +577 125 38 2 +38 280 577 2 +163 6 625 2 +749 40 140 2 +206 101 607 2 +206 607 16 2 +667 188 80 2 +129 652 13 2 +27 681 144 2 +757 111 244 2 +53 156 235 2 +57 188 667 2 +538 158 91 2 +707 62 187 2 +207 49 754 2 +121 749 140 2 +101 579 133 2 +101 133 49 2 +169 60 725 2 +686 27 86 2 +14 534 168 2 +732 30 188 2 +730 9 156 2 +24 565 230 2 +692 111 244 2 +50 139 753 2 +745 278 155 2 +753 227 103 2 +261 667 109 2 +687 749 40 2 +284 727 15 2 +212 68 642 2 +27 642 212 2 +668 148 57 2 +681 689 144 2 +689 114 681 2 +111 237 692 2 +51 717 131 2 +195 730 97 2 +53 195 730 2 +687 734 124 2 +734 124 300 2 +734 300 17 2 +61 745 155 2 +753 227 50 2 +165 207 754 2 +49 139 754 2 +Tetrahedra +3586 +669 309 483 629 1 +510 420 537 286 1 +475 372 495 322 1 +103 753 515 674 1 +264 234 104 442 1 +531 357 748 454 1 +314 382 454 596 1 +122 192 55 474 1 +328 495 611 372 1 +425 357 314 709 1 +594 359 586 470 1 +145 591 139 49 1 +407 231 95 301 1 +591 145 607 608 1 +94 625 650 572 1 +497 745 270 151 1 +674 125 601 42 1 +335 702 756 400 1 +594 653 541 343 1 +393 514 654 349 1 +440 688 518 368 1 +486 401 21 108 1 +37 428 708 670 1 +477 586 354 444 1 +352 455 615 311 1 +405 638 697 375 1 +586 354 461 648 1 +624 531 347 416 1 +680 428 602 350 1 +21 674 577 636 1 +219 105 518 225 1 +406 410 311 447 1 +346 580 481 557 1 +688 726 518 368 1 +347 492 484 445 1 +646 502 701 345 1 +723 364 526 619 1 +375 4 508 199 1 +397 459 362 559 1 +232 663 112 510 1 +58 293 209 506 1 +610 91 538 398 1 +137 436 411 249 1 +583 555 341 637 1 +642 432 671 358 1 +230 604 120 24 1 +409 623 310 613 1 +376 467 394 557 1 +428 670 247 602 1 +386 307 694 492 1 +717 51 537 419 1 +486 754 373 108 1 +727 107 185 363 1 +308 662 377 414 1 +433 682 316 637 1 +728 545 416 317 1 +17 173 116 459 1 +337 617 472 542 1 +596 329 454 357 1 +305 678 710 448 1 +736 431 647 374 1 +519 455 371 352 1 +635 435 82 236 1 +122 474 55 208 1 +143 412 569 8 1 +503 324 539 482 1 +734 362 459 170 1 +583 660 653 525 1 +523 344 448 587 1 +580 336 698 419 1 +85 513 220 203 1 +202 129 472 452 1 +391 324 503 482 1 +109 10 165 655 1 +209 32 564 117 1 +447 356 410 541 1 +459 251 72 173 1 +133 655 207 10 1 +264 442 104 581 1 +438 378 341 627 1 +97 680 37 159 1 +347 694 484 492 1 +560 396 45 511 1 +680 556 428 417 1 +491 263 3 383 1 +683 617 472 337 1 +495 464 383 322 1 +317 728 545 619 1 +434 252 22 117 1 +261 351 588 43 1 +578 335 756 400 1 +664 19 214 115 1 +25 656 366 563 1 +330 473 380 549 1 +475 522 747 310 1 +472 337 415 543 1 +624 357 531 416 1 +427 558 352 403 1 +429 365 389 590 1 +454 375 543 329 1 +2 229 92 566 1 +544 203 513 235 1 +584 450 456 30 1 +37 281 162 708 1 +384 224 524 426 1 +678 305 477 448 1 +709 677 314 430 1 +471 346 663 658 1 +644 146 592 48 1 +387 32 236 98 1 +636 321 520 457 1 +447 359 470 449 1 +514 19 136 146 1 +734 362 170 687 1 +651 437 481 342 1 +539 91 538 10 1 +191 198 400 78 1 +45 511 396 458 1 +9 704 400 756 1 +478 477 354 369 1 +41 194 738 476 1 +587 448 313 386 1 +726 390 632 684 1 +755 467 376 169 1 +528 591 608 49 1 +712 477 609 369 1 +160 142 45 511 1 +425 525 709 430 1 +245 108 21 401 1 +135 644 446 546 1 +658 481 346 419 1 +440 267 616 225 1 +705 639 35 579 1 +451 299 553 222 1 +582 487 324 343 1 +627 356 378 583 1 +427 399 352 318 1 +215 707 62 593 1 +637 627 469 341 1 +689 114 257 671 1 +489 543 416 337 1 +548 381 693 313 1 +251 183 29 716 1 +347 531 561 696 1 +560 610 393 354 1 +363 600 688 319 1 +516 106 695 28 1 +344 531 748 494 1 +568 703 414 442 1 +448 305 477 609 1 +459 149 562 479 1 +747 623 495 310 1 +551 191 535 55 1 +542 451 337 74 1 +541 660 343 653 1 +67 380 216 88 1 +45 396 128 458 1 +602 670 247 70 1 +396 514 136 146 1 +511 648 160 18 1 +382 456 757 244 1 +353 520 430 321 1 +230 460 604 346 1 +669 679 373 582 1 +378 438 462 306 1 +441 140 676 16 1 +313 384 524 426 1 +472 683 337 489 1 +380 630 549 67 1 +66 217 500 157 1 +695 628 338 488 1 +542 418 213 535 1 +527 363 501 339 1 +131 419 468 51 1 +537 729 628 420 1 +539 668 482 109 1 +9 400 191 198 1 +98 633 581 634 1 +659 279 205 450 1 +680 428 37 159 1 +530 234 442 457 1 +513 330 549 589 1 +441 411 379 483 1 +708 281 162 451 1 +434 595 117 22 1 +5 110 536 157 1 +731 540 730 53 1 +550 575 446 349 1 +83 283 118 408 1 +39 371 465 519 1 +713 361 554 66 1 +485 566 167 404 1 +545 723 526 619 1 +56 460 120 296 1 +726 492 688 326 1 +696 507 319 466 1 +376 336 467 557 1 +510 112 273 113 1 +261 80 667 391 1 +471 658 663 389 1 +365 666 589 661 1 +56 149 120 460 1 +526 475 322 434 1 +657 606 643 471 1 +594 318 586 444 1 +668 539 10 109 1 +703 358 671 442 1 +618 374 540 731 1 +550 349 450 391 1 +470 359 327 449 1 +614 334 496 529 1 +752 604 460 346 1 +652 90 222 553 1 +418 276 221 78 1 +453 598 527 339 1 +536 554 413 500 1 +323 510 419 389 1 +239 60 131 698 1 +436 2 566 229 1 +718 429 694 307 1 +86 686 665 414 1 +440 319 363 688 1 +638 405 527 598 1 +382 432 596 456 1 +653 304 523 587 1 +528 608 101 49 1 +415 504 171 44 1 +41 194 147 738 1 +500 554 361 66 1 +463 321 636 457 1 +386 313 507 448 1 +356 740 433 583 1 +540 201 100 53 1 +412 646 345 722 1 +384 449 548 336 1 +174 381 166 65 1 +701 520 316 502 1 +523 402 710 748 1 +497 61 270 745 1 +379 50 285 139 1 +519 71 707 721 1 +334 643 630 443 1 +314 402 357 454 1 +707 455 519 352 1 +431 26 240 100 1 +464 262 506 58 1 +17 149 459 275 1 +545 720 317 418 1 +397 116 29 716 1 +666 34 273 510 1 +495 573 328 341 1 +516 186 106 28 1 +136 560 45 142 1 +437 599 462 315 1 +530 321 358 685 1 +467 725 547 493 1 +720 416 317 499 1 +518 551 407 326 1 +359 523 448 587 1 +210 554 29 413 1 +456 432 244 382 1 +313 649 381 524 1 +313 359 521 448 1 +501 727 440 363 1 +498 706 693 386 1 +409 522 360 694 1 +496 1 216 380 1 +675 369 576 333 1 +45 511 458 155 1 +576 369 458 609 1 +261 567 482 351 1 +548 384 649 313 1 +755 169 60 467 1 +321 568 358 425 1 +461 91 610 398 1 +716 183 72 251 1 +346 481 437 557 1 +412 641 569 722 1 +539 503 482 668 1 +339 572 453 719 1 +447 523 359 587 1 +747 573 495 341 1 +287 232 34 389 1 +334 736 443 388 1 +446 325 659 546 1 +378 437 447 406 1 +518 726 632 368 1 +627 306 740 469 1 +400 326 535 499 1 +453 94 625 546 1 +481 342 429 651 1 +685 596 395 314 1 +640 246 382 508 1 +485 753 515 103 1 +123 715 291 127 1 +672 737 423 507 1 +518 326 407 726 1 +210 536 110 157 1 +644 367 446 546 1 +658 481 323 429 1 +632 518 368 225 1 +500 571 328 361 1 +575 402 305 487 1 +501 440 284 620 1 +111 246 205 382 1 +324 439 373 582 1 +187 141 62 399 1 +342 735 718 651 1 +569 316 383 641 1 +380 177 88 67 1 +92 217 3 491 1 +317 416 728 499 1 +381 649 184 524 1 +419 510 112 663 1 +232 510 112 34 1 +644 592 458 367 1 +455 11 127 123 1 +701 502 412 345 1 +426 497 270 151 1 +434 595 506 564 1 +710 494 719 466 1 +39 465 121 211 1 +374 621 431 201 1 +526 364 723 555 1 +259 12 269 119 1 +401 679 309 629 1 +148 503 539 668 1 +484 512 409 335 1 +154 584 57 115 1 +647 374 540 618 1 +314 677 391 456 1 +5 464 536 739 1 +296 392 182 294 1 +31 390 175 733 1 +619 475 526 434 1 +639 607 101 591 1 +11 755 376 169 1 +669 309 629 401 1 +658 389 590 429 1 +544 374 335 731 1 +620 423 724 672 1 +675 426 524 385 1 +399 318 427 461 1 +630 216 89 67 1 +313 524 381 693 1 +683 617 337 542 1 +694 512 360 409 1 +31 632 390 733 1 +394 455 715 123 1 +229 554 179 66 1 +451 299 670 553 1 +483 379 699 669 1 +590 473 380 330 1 +189 468 166 51 1 +626 568 414 345 1 +604 190 120 24 1 +698 547 189 468 1 +230 471 76 296 1 +398 427 705 639 1 +497 738 271 147 1 +706 342 718 481 1 +428 708 670 451 1 +484 407 326 726 1 +517 458 367 333 1 +618 475 647 310 1 +626 308 422 526 1 +25 228 656 180 1 +540 731 374 53 1 +425 596 314 357 1 +66 500 713 361 1 +440 616 267 620 1 +633 254 36 665 1 +536 233 292 424 1 +399 141 62 194 1 +482 324 373 582 1 +580 336 481 557 1 +309 699 669 483 1 +505 100 195 540 1 +418 78 213 535 1 +440 363 185 474 1 +175 390 73 733 1 +393 712 560 354 1 +586 648 461 399 1 +426 151 746 576 1 +249 559 81 436 1 +465 622 297 124 1 +318 639 427 398 1 +202 129 44 472 1 +495 438 623 341 1 +685 463 321 679 1 +755 11 455 123 1 +634 345 646 722 1 +497 147 271 61 1 +667 503 57 668 1 +102 738 271 497 1 +290 77 442 234 1 +437 447 311 750 1 +557 750 437 311 1 +310 522 623 409 1 +150 593 476 376 1 +486 669 629 401 1 +437 447 750 342 1 +159 247 602 428 1 +650 501 132 33 1 +748 357 402 454 1 +307 429 512 743 1 +408 532 724 83 1 +143 92 3 491 1 +398 539 655 10 1 +387 690 626 526 1 +537 381 166 174 1 +12 420 286 628 1 +687 559 170 40 1 +380 630 388 549 1 +513 23 220 203 1 +507 338 423 385 1 +86 414 377 452 1 +481 750 706 342 1 +532 193 283 7 1 +552 331 379 483 1 +206 639 35 427 1 +672 319 507 466 1 +554 210 179 66 1 +74 213 542 418 1 +597 479 362 332 1 +643 380 657 496 1 +431 79 505 100 1 +548 649 381 313 1 +325 494 719 710 1 +413 183 29 110 1 +537 729 420 323 1 +165 655 373 482 1 +16 140 285 441 1 +552 50 137 140 1 +613 623 310 443 1 +504 96 171 44 1 +501 107 440 727 1 +386 561 347 694 1 +102 384 224 20 1 +597 455 371 394 1 +517 744 592 458 1 +176 463 588 93 1 +684 737 695 488 1 +78 556 535 418 1 +369 160 61 511 1 +153 11 127 455 1 +366 700 499 326 1 +390 661 73 733 1 +587 344 448 386 1 +194 738 298 147 1 +18 158 142 648 1 +498 429 718 307 1 +137 436 552 411 1 +714 610 393 539 1 +217 263 500 87 1 +79 751 266 240 1 +657 238 380 606 1 +610 538 393 539 1 +308 414 377 690 1 +382 246 205 508 1 +352 519 721 403 1 +333 532 517 576 1 +540 100 195 53 1 +674 125 636 601 1 +644 664 446 514 1 +444 712 654 393 1 +457 502 701 646 1 +747 526 475 322 1 +546 453 508 163 1 +611 443 623 438 1 +486 528 591 373 1 +509 208 518 105 1 +442 321 457 646 1 +198 276 556 78 1 +356 483 699 541 1 +337 418 542 720 1 +736 374 388 431 1 +565 419 24 112 1 +588 463 401 93 1 +638 508 199 375 1 +359 447 653 523 1 +37 708 162 670 1 +679 520 309 629 1 +681 358 671 703 1 +359 586 678 594 1 +311 371 615 597 1 +524 224 184 63 1 +440 727 185 363 1 +536 303 464 5 1 +137 40 249 411 1 +328 464 383 495 1 +516 693 524 385 1 +406 356 740 480 1 +715 302 622 138 1 +735 304 561 522 1 +688 600 445 319 1 +514 349 503 664 1 +265 666 130 473 1 +21 674 636 515 1 +347 484 499 445 1 +435 641 626 345 1 +487 550 575 402 1 +490 65 106 516 1 +327 376 493 476 1 +261 482 109 43 1 +314 395 567 456 1 +734 459 116 170 1 +648 461 610 354 1 +399 586 478 327 1 +454 494 312 598 1 +182 296 76 471 1 +462 332 437 406 1 +112 510 717 113 1 +640 4 375 697 1 +217 263 3 491 1 +614 392 370 562 1 +359 653 594 523 1 +447 437 311 406 1 +702 499 400 317 1 +417 556 702 400 1 +676 140 121 16 1 +405 54 180 181 1 +546 508 659 163 1 +548 468 381 649 1 +98 254 581 633 1 +682 566 404 713 1 +376 11 455 755 1 +473 130 589 666 1 +478 147 497 61 1 +434 564 673 117 1 +643 380 630 443 1 +405 563 527 363 1 +376 311 352 470 1 +374 621 201 235 1 +375 405 638 598 1 +678 523 359 594 1 +578 335 417 731 1 +575 710 305 402 1 +623 651 360 378 1 +246 4 172 508 1 +39 519 302 715 1 +397 370 605 459 1 +471 663 76 606 1 +382 329 596 432 1 +502 316 701 641 1 +139 754 486 108 1 +551 509 95 704 1 +489 545 723 690 1 +747 341 495 623 1 +732 168 456 567 1 +507 693 675 313 1 +469 573 361 316 1 +564 32 250 117 1 +521 359 477 448 1 +321 502 568 425 1 +485 355 404 601 1 +449 706 587 359 1 +501 527 132 107 1 +422 573 747 341 1 +724 385 516 186 1 +286 197 113 420 1 +549 67 220 177 1 +527 650 625 339 1 +168 68 456 248 1 +211 16 206 403 1 +552 50 285 379 1 +658 389 471 315 1 +688 445 700 326 1 +486 754 528 373 1 +68 432 692 244 1 +388 736 443 613 1 +529 242 152 52 1 +631 743 307 512 1 +542 213 161 25 1 +45 146 128 396 1 +523 561 344 587 1 +494 748 402 454 1 +81 397 436 559 1 +369 478 497 61 1 +176 351 43 588 1 +664 279 450 115 1 +493 41 738 476 1 +256 63 193 746 1 +400 535 418 499 1 +600 696 344 445 1 +137 50 552 227 1 +494 466 710 344 1 +41 134 493 102 1 +12 488 269 420 1 +353 583 555 525 1 +15 518 185 208 1 +370 529 614 716 1 +209 58 506 262 1 +457 701 412 646 1 +141 187 427 399 1 +517 283 118 7 1 +409 364 475 522 1 +536 413 691 328 1 +634 633 722 98 1 +586 359 327 470 1 +418 451 542 74 1 +636 457 125 38 1 +103 674 485 42 1 +15 727 185 518 1 +479 362 332 459 1 +604 467 190 580 1 +102 493 497 384 1 +539 655 10 109 1 +138 300 297 622 1 +385 693 338 516 1 +406 597 362 332 1 +318 558 427 639 1 +631 645 407 390 1 +397 370 742 605 1 +113 717 282 537 1 +333 408 532 672 1 +507 696 319 737 1 +75 544 203 289 1 +440 225 616 518 1 +210 413 110 536 1 +398 91 539 10 1 +418 213 221 74 1 +414 254 665 90 1 +685 395 677 314 1 +483 356 433 309 1 +366 535 474 326 1 +273 112 717 113 1 +500 464 328 536 1 +99 89 240 751 1 +363 54 527 107 1 +662 452 377 414 1 +623 522 360 409 1 +731 235 374 53 1 +503 57 148 154 1 +602 505 434 22 1 +576 609 458 333 1 +393 538 47 148 1 +47 393 148 154 1 +94 241 572 650 1 +418 556 428 708 1 +289 175 421 258 1 +601 126 412 143 1 +210 413 29 110 1 +245 176 43 93 1 +314 567 677 456 1 +462 643 370 334 1 +643 462 443 438 1 +513 621 374 235 1 +174 381 490 628 1 +552 436 566 331 1 +687 465 559 40 1 +74 213 161 542 1 +179 554 29 210 1 +350 647 540 618 1 +237 692 612 640 1 +576 283 517 7 1 +352 376 455 311 1 +333 517 466 367 1 +648 461 158 610 1 +621 85 201 235 1 +416 357 531 312 1 +153 71 707 519 1 +370 334 614 529 1 +501 107 284 440 1 +549 330 513 374 1 +501 107 132 33 1 +260 408 118 33 1 +479 715 622 138 1 +717 51 282 537 1 +429 743 590 330 1 +186 524 184 63 1 +555 502 568 308 1 +230 460 120 604 1 +81 116 397 559 1 +548 313 706 449 1 +727 440 185 518 1 +421 175 390 258 1 +684 368 737 488 1 +640 697 375 504 1 +572 408 339 501 1 +103 485 167 42 1 +614 152 72 183 1 +461 141 158 255 1 +551 509 704 191 1 +613 360 623 443 1 +625 339 650 572 1 +380 1 216 88 1 +66 217 491 500 1 +202 504 472 44 1 +536 210 413 554 1 +39 124 297 121 1 +146 514 644 396 1 +573 383 491 316 1 +515 636 355 674 1 +489 723 308 690 1 +21 577 93 401 1 +492 445 688 326 1 +600 445 531 312 1 +168 456 395 248 1 +421 743 512 330 1 +15 225 518 105 1 +396 514 644 654 1 +521 609 477 369 1 +361 573 328 500 1 +751 26 240 431 1 +288 741 176 164 1 +439 558 348 699 1 +331 411 436 480 1 +230 296 120 460 1 +478 369 511 160 1 +569 641 383 435 1 +151 745 576 426 1 +296 56 392 294 1 +185 563 122 474 1 +328 571 341 573 1 +485 682 404 355 1 +439 318 348 558 1 +541 439 318 594 1 +476 470 399 327 1 +157 217 500 87 1 +380 216 630 67 1 +581 633 36 264 1 +462 370 605 742 1 +110 52 529 183 1 +501 363 440 319 1 +200 262 87 464 1 +249 2 436 81 1 +508 4 375 640 1 +99 751 585 533 1 +382 456 450 757 1 +487 550 349 575 1 +626 422 641 322 1 +313 426 524 675 1 +655 528 373 439 1 +575 446 367 719 1 +143 126 412 8 1 +663 658 419 389 1 +45 458 128 155 1 +45 396 136 146 1 +645 175 390 421 1 +485 552 629 379 1 +442 321 358 530 1 +662 596 425 357 1 +460 332 392 562 1 +143 92 404 42 1 +493 169 134 41 1 +590 360 443 651 1 +619 364 526 475 1 +527 54 132 107 1 +519 211 71 403 1 +450 30 205 757 1 +716 614 72 183 1 +564 387 435 322 1 +188 115 57 584 1 +684 498 386 492 1 +511 160 61 155 1 +569 641 435 722 1 +23 513 549 589 1 +81 116 559 170 1 +246 4 640 237 1 +321 685 430 425 1 +185 563 474 363 1 +652 13 377 553 1 +167 404 92 42 1 +633 442 646 345 1 +695 106 570 28 1 +102 493 738 497 1 +494 600 531 312 1 +536 691 424 328 1 +31 390 645 175 1 +318 399 352 470 1 +352 615 519 403 1 +31 632 645 390 1 +530 463 164 38 1 +359 678 477 448 1 +682 331 629 485 1 +573 316 469 637 1 +40 170 249 559 1 +318 439 444 594 1 +649 20 166 184 1 +316 569 491 412 1 +194 478 738 476 1 +527 501 132 650 1 +397 605 306 362 1 +741 567 176 351 1 +430 685 677 314 1 +564 293 209 117 1 +603 740 480 306 1 +407 509 95 551 1 +130 666 273 197 1 +411 749 676 140 1 +324 503 539 393 1 +397 459 605 362 1 +542 617 472 415 1 +333 517 458 576 1 +409 512 613 335 1 +694 522 561 347 1 +23 177 130 589 1 +16 441 285 145 1 +729 693 498 706 1 +148 539 10 668 1 +526 555 308 422 1 +627 583 378 341 1 +369 478 61 160 1 +744 128 592 458 1 +413 691 742 529 1 +489 555 308 723 1 +560 511 45 142 1 +336 548 468 419 1 +206 71 403 721 1 +511 369 458 155 1 +456 432 596 395 1 +350 428 602 619 1 +516 65 106 186 1 +245 588 401 93 1 +481 323 548 419 1 +589 473 549 177 1 +81 397 29 179 1 +308 414 690 626 1 +133 91 398 10 1 +410 356 406 320 1 +277 84 260 620 1 +102 61 270 497 1 +292 233 99 424 1 +113 510 717 537 1 +659 508 59 163 1 +536 210 554 500 1 +461 610 714 398 1 +532 283 576 7 1 +584 115 450 30 1 +382 659 205 450 1 +636 463 457 38 1 +440 688 363 474 1 +180 69 228 656 1 +153 39 211 519 1 +372 505 595 647 1 +534 168 567 395 1 +452 703 414 358 1 +483 309 433 629 1 +636 355 601 457 1 +374 201 540 53 1 +382 596 314 456 1 +753 21 515 674 1 +544 335 513 421 1 +401 629 515 355 1 +198 276 37 556 1 +197 666 510 661 1 +725 547 189 698 1 +461 158 91 255 1 +102 497 271 61 1 +336 481 548 419 1 +672 319 737 507 1 +666 365 510 661 1 +469 438 341 627 1 +558 320 615 403 1 +539 538 148 10 1 +39 715 302 371 1 +372 611 647 310 1 +424 736 585 751 1 +122 535 474 563 1 +165 373 754 108 1 +746 426 524 63 1 +5 200 464 739 1 +385 426 524 746 1 +523 304 561 587 1 +141 705 35 255 1 +9 198 578 400 1 +578 198 556 400 1 +658 323 481 419 1 +587 718 706 342 1 +498 706 386 718 1 +498 718 386 307 1 +745 497 426 151 1 +702 728 499 317 1 +153 715 302 519 1 +314 550 402 454 1 +112 24 131 419 1 +484 728 499 702 1 +149 562 173 459 1 +466 448 710 344 1 +340 602 434 670 1 +617 161 542 74 1 +530 685 358 395 1 +487 349 550 391 1 +499 531 347 445 1 +552 436 331 411 1 +535 78 213 192 1 +405 543 312 375 1 +388 89 585 751 1 +474 363 700 326 1 +506 434 322 595 1 +566 404 92 167 1 +555 522 747 364 1 +395 168 248 14 1 +672 385 423 724 1 +365 323 389 510 1 +744 592 48 517 1 +249 170 81 559 1 +447 587 359 342 1 +695 570 196 28 1 +113 510 537 286 1 +391 584 349 450 1 +232 389 663 510 1 +648 610 142 354 1 +378 462 406 306 1 +606 238 287 76 1 +396 644 458 367 1 +314 550 454 382 1 +376 449 470 327 1 +693 706 507 386 1 +469 438 627 306 1 +375 4 199 697 1 +284 620 267 84 1 +702 556 317 400 1 +33 277 408 501 1 +495 310 611 372 1 +472 377 683 489 1 +493 725 547 134 1 +25 542 366 656 1 +311 455 597 394 1 +590 365 389 473 1 +378 462 437 406 1 +362 559 480 397 1 +591 607 101 608 1 +266 79 200 739 1 +489 329 662 357 1 +602 247 252 70 1 +590 365 473 330 1 +550 659 382 450 1 +391 677 487 324 1 +60 123 467 239 1 +573 316 422 641 1 +542 161 415 228 1 +415 161 44 228 1 +70 252 673 250 1 +354 477 712 369 1 +394 467 604 580 1 +90 250 387 32 1 +90 387 254 32 1 +118 260 83 408 1 +465 676 121 211 1 +594 439 444 343 1 +165 10 207 655 1 +684 695 338 488 1 +203 513 289 421 1 +157 210 536 500 1 +336 467 547 493 1 +318 558 352 427 1 +13 377 553 451 1 +487 677 314 709 1 +497 327 478 369 1 +500 210 554 66 1 +87 262 263 383 1 +618 475 350 647 1 +261 588 482 43 1 +626 641 435 322 1 +459 173 116 251 1 +165 482 588 43 1 +179 397 29 554 1 +619 428 545 317 1 +680 505 195 540 1 +527 501 650 339 1 +706 313 587 359 1 +280 164 463 38 1 +600 445 344 531 1 +335 421 512 513 1 +713 500 491 361 1 +563 700 363 405 1 +674 601 355 485 1 +581 442 646 633 1 +214 279 664 115 1 +258 589 73 661 1 +129 652 377 86 1 +591 669 379 486 1 +739 372 328 424 1 +420 488 338 628 1 +131 468 189 51 1 +77 264 442 234 1 +465 124 121 687 1 +596 358 395 432 1 +702 326 400 499 1 +633 665 36 414 1 +527 132 625 650 1 +686 144 703 452 1 +42 601 404 143 1 +33 408 572 501 1 +530 457 463 38 1 +583 522 341 555 1 +368 492 688 726 1 +377 690 553 340 1 +591 379 139 486 1 +349 503 393 514 1 +168 68 244 456 1 +310 647 618 374 1 +474 700 363 563 1 +369 155 745 576 1 +655 324 373 482 1 +142 354 511 648 1 +437 599 332 462 1 +717 419 537 510 1 +438 462 623 378 1 +615 455 371 311 1 +378 735 623 522 1 +1 182 657 295 1 +532 283 517 576 1 +11 593 150 376 1 +648 158 142 610 1 +79 431 751 240 1 +411 331 552 483 1 +464 262 87 383 1 +521 477 327 369 1 +582 351 677 430 1 +356 627 740 583 1 +443 549 388 330 1 +349 514 446 664 1 +401 520 679 355 1 +185 54 122 563 1 +485 404 167 42 1 +580 419 663 346 1 +638 69 199 181 1 +102 493 271 738 1 +719 572 453 546 1 +684 737 338 695 1 +667 482 503 668 1 +487 582 677 709 1 +486 629 515 401 1 +176 164 463 93 1 +135 546 268 644 1 +382 508 375 640 1 +530 671 395 358 1 +561 522 304 624 1 +662 596 358 425 1 +378 583 522 341 1 +500 464 383 328 1 +629 433 331 682 1 +425 709 314 430 1 +594 586 678 444 1 +5 739 292 266 1 +345 633 722 634 1 +382 375 454 329 1 +630 380 388 443 1 +578 156 243 544 1 +227 566 2 167 1 +381 184 166 65 1 +142 511 160 18 1 +456 68 244 432 1 +404 713 92 491 1 +512 335 631 421 1 +403 320 441 558 1 +410 594 470 447 1 +667 482 668 109 1 +537 381 729 323 1 +545 526 340 619 1 +540 431 647 505 1 +320 362 465 480 1 +658 346 481 437 1 +174 65 490 381 1 +495 372 464 322 1 +576 517 458 7 1 +688 326 518 726 1 +557 467 580 336 1 +723 340 690 545 1 +378 522 623 341 1 +473 177 130 265 1 +466 517 572 367 1 +426 151 270 63 1 +136 19 514 154 1 +512 360 590 429 1 +572 241 408 33 1 +740 637 433 583 1 +658 437 481 651 1 +396 592 128 458 1 +306 627 406 378 1 +290 530 164 38 1 +471 663 606 389 1 +557 376 336 449 1 +449 706 342 587 1 +642 114 432 248 1 +611 310 443 736 1 +593 399 352 721 1 +109 482 165 43 1 +176 588 43 93 1 +483 356 480 740 1 +479 604 460 752 1 +328 372 464 495 1 +449 587 342 359 1 +712 305 396 609 1 +383 641 322 435 1 +187 399 593 721 1 +198 556 400 78 1 +495 611 310 623 1 +554 716 29 413 1 +406 356 480 320 1 +594 359 470 447 1 +517 592 48 367 1 +543 312 357 416 1 +398 318 348 439 1 +666 510 273 197 1 +64 616 196 225 1 +463 530 321 457 1 +681 358 703 452 1 +391 567 677 351 1 +89 388 223 26 1 +202 96 612 504 1 +550 325 454 382 1 +409 522 694 347 1 +428 556 37 708 1 +290 77 530 442 1 +539 324 655 482 1 +614 370 72 562 1 +539 482 655 109 1 +408 532 517 333 1 +89 67 223 630 1 +402 325 550 575 1 +13 299 162 451 1 +506 564 435 322 1 +560 514 393 154 1 +435 209 82 236 1 +591 348 379 669 1 +432 671 358 395 1 +254 32 387 98 1 +136 396 560 514 1 +550 325 402 454 1 +438 742 462 306 1 +563 405 656 366 1 +123 394 291 715 1 +644 367 546 48 1 +356 309 483 541 1 +260 408 724 83 1 +27 452 144 686 1 +606 88 287 238 1 +256 746 186 63 1 +516 184 65 186 1 +386 344 696 561 1 +154 19 664 115 1 +194 478 298 738 1 +511 354 478 648 1 +185 54 363 107 1 +403 558 441 348 1 +459 562 332 479 1 +490 65 516 381 1 +512 360 330 590 1 +652 377 665 553 1 +757 456 30 244 1 +636 520 355 457 1 +321 442 358 568 1 +544 421 203 289 1 +502 641 412 345 1 +183 529 152 52 1 +326 551 407 400 1 +498 729 338 693 1 +91 705 579 133 1 +13 652 222 553 1 +694 307 484 492 1 +489 543 357 416 1 +615 371 406 597 1 +454 598 312 375 1 +650 241 572 33 1 +409 522 475 310 1 +59 659 446 214 1 +396 644 367 575 1 +644 446 367 575 1 +573 328 571 361 1 +133 49 207 528 1 +105 407 509 301 1 +548 323 468 419 1 +666 130 661 197 1 +206 71 721 187 1 +670 299 247 70 1 +384 493 547 134 1 +374 235 201 53 1 +9 578 97 730 1 +218 562 72 173 1 +519 615 676 403 1 +257 671 14 530 1 +352 707 593 721 1 +12 197 286 420 1 +674 601 485 42 1 +180 69 405 181 1 +412 569 491 143 1 +224 426 270 63 1 +633 345 646 634 1 +738 41 271 147 1 +739 536 292 424 1 +17 459 116 734 1 +640 4 504 237 1 +505 79 178 100 1 +665 377 414 553 1 +560 654 393 514 1 +535 366 418 499 1 +180 69 656 405 1 +451 418 337 545 1 +314 550 487 402 1 +611 443 310 623 1 +413 529 536 691 1 +546 659 59 163 1 +206 403 639 427 1 +698 467 725 547 1 +398 324 655 539 1 +438 378 627 306 1 +673 252 117 250 1 +425 357 709 525 1 +384 493 336 547 1 +681 703 144 452 1 +635 435 236 98 1 +125 457 601 126 1 +624 531 304 561 1 +555 502 425 568 1 +645 231 407 31 1 +118 241 517 744 1 +647 505 434 350 1 +426 224 524 63 1 +5 200 739 266 1 +409 475 618 310 1 +201 26 431 100 1 +490 381 516 628 1 +219 632 368 225 1 +462 392 332 370 1 +408 501 620 319 1 +5 536 292 739 1 +654 396 305 575 1 +603 469 740 306 1 +597 622 362 479 1 +661 365 510 420 1 +78 213 221 418 1 +442 502 646 345 1 +327 477 586 478 1 +745 369 576 426 1 +535 326 366 499 1 +409 360 623 613 1 +258 390 73 175 1 +403 639 427 558 1 +187 206 35 427 1 +664 349 503 584 1 +478 18 298 160 1 +320 441 676 403 1 +86 377 414 665 1 +11 376 150 169 1 +366 720 656 542 1 +295 1 496 657 1 +720 415 656 542 1 +744 241 517 48 1 +480 362 465 411 1 +80 168 732 567 1 +456 68 432 248 1 +406 356 447 378 1 +370 459 72 562 1 +338 628 695 516 1 +701 316 412 641 1 +334 643 443 438 1 +135 546 163 268 1 +25 161 542 228 1 +695 338 423 737 1 +585 630 89 388 1 +345 414 633 442 1 +338 488 420 684 1 +123 755 60 467 1 +696 386 507 448 1 +406 356 410 447 1 +226 13 162 451 1 +558 615 352 403 1 +675 369 333 609 1 +136 396 45 560 1 +331 566 485 404 1 +691 611 424 328 1 +421 743 631 512 1 +139 486 379 515 1 +345 633 435 722 1 +649 547 189 20 1 +447 304 653 587 1 +512 421 330 513 1 +84 620 253 260 1 +362 406 480 320 1 +522 623 747 310 1 +449 313 706 359 1 +462 605 406 306 1 +500 383 491 361 1 +563 535 474 366 1 +185 122 208 474 1 +677 582 487 324 1 +141 399 427 461 1 +149 479 460 562 1 +334 611 443 736 1 +527 363 339 598 1 +320 411 676 441 1 +754 655 207 373 1 +663 346 419 658 1 +411 749 465 676 1 +379 515 629 485 1 +411 140 676 441 1 +160 511 45 155 1 +513 85 621 235 1 +307 484 631 512 1 +646 701 412 345 1 +245 401 21 93 1 +465 749 121 676 1 +519 676 465 211 1 +520 637 316 502 1 +417 350 428 680 1 +519 403 676 211 1 +684 390 711 307 1 +601 412 404 143 1 +513 23 289 421 1 +498 507 338 386 1 +123 239 190 467 1 +12 259 488 628 1 +328 495 438 611 1 +631 407 484 726 1 +497 369 426 521 1 +432 671 395 248 1 +245 43 588 93 1 +496 216 630 380 1 +202 96 504 44 1 +504 96 4 171 1 +156 731 730 53 1 +437 597 311 406 1 +425 662 357 555 1 +151 745 278 576 1 +383 573 322 641 1 +34 112 273 510 1 +420 729 498 323 1 +741 351 588 463 1 +743 365 590 330 1 +66 500 491 713 1 +434 252 117 673 1 +686 703 36 414 1 +589 743 421 330 1 +411 552 379 483 1 +388 330 549 374 1 +618 409 335 702 1 +573 571 341 469 1 +197 420 510 113 1 +154 664 503 584 1 +366 418 542 535 1 +375 638 697 199 1 +556 276 418 78 1 +367 517 572 48 1 +584 115 664 450 1 +227 485 167 103 1 +537 381 628 729 1 +512 590 330 429 1 +475 647 434 350 1 +135 546 59 163 1 +139 486 21 108 1 +469 573 571 361 1 +499 484 326 445 1 +462 332 406 605 1 +554 397 716 413 1 +678 402 710 523 1 +415 228 44 171 1 +661 269 73 733 1 +78 400 535 556 1 +683 542 337 74 1 +526 723 308 555 1 +459 479 362 622 1 +496 242 152 529 1 +353 555 583 637 1 +81 116 29 397 1 +477 359 327 586 1 +560 396 654 514 1 +406 371 320 362 1 +563 54 527 363 1 +258 130 73 589 1 +75 243 156 544 1 +450 456 30 757 1 +493 134 384 102 1 +633 414 36 703 1 +488 695 616 368 1 +641 626 502 422 1 +397 436 179 81 1 +458 128 155 7 1 +277 107 284 501 1 +217 383 491 500 1 +392 332 370 562 1 +548 693 729 706 1 +539 538 393 148 1 +436 2 179 81 1 +493 376 150 476 1 +640 432 612 382 1 +154 19 514 664 1 +320 480 465 411 1 +188 115 584 30 1 +384 521 313 449 1 +420 729 338 498 1 +99 89 751 533 1 +423 385 338 516 1 +411 40 465 749 1 +585 242 496 529 1 +336 649 548 384 1 +698 468 189 131 1 +488 390 711 684 1 +375 405 598 312 1 +443 380 549 330 1 +63 151 193 746 1 +277 620 260 408 1 +492 484 445 326 1 +640 382 692 432 1 +425 358 395 596 1 +99 585 751 424 1 +559 436 603 397 1 +462 370 332 605 1 +373 669 486 401 1 +125 636 601 457 1 +596 382 454 329 1 +591 486 139 49 1 +79 431 240 100 1 +75 231 243 645 1 +42 126 601 143 1 +347 484 694 409 1 +143 569 204 8 1 +400 191 535 551 1 +721 519 71 403 1 +480 603 306 397 1 +17 149 173 459 1 +536 110 233 413 1 +393 503 148 154 1 +523 748 343 402 1 +464 303 87 200 1 +110 529 413 183 1 +410 615 352 558 1 +392 295 294 218 1 +466 448 507 333 1 +182 295 294 392 1 +520 353 502 321 1 +1 238 88 380 1 +440 616 368 518 1 +125 601 42 126 1 +731 374 335 618 1 +408 241 118 33 1 +692 212 432 68 1 +594 410 318 541 1 +214 659 446 664 1 +725 134 189 547 1 +158 91 610 461 1 +488 711 420 684 1 +405 69 638 181 1 +203 23 289 513 1 +677 567 391 456 1 +311 376 455 394 1 +514 503 393 154 1 +614 295 152 496 1 +245 43 108 588 1 +75 544 156 203 1 +557 481 437 750 1 +370 251 72 459 1 +334 462 643 438 1 +371 362 465 320 1 +372 736 431 647 1 +47 136 560 154 1 +724 256 253 83 1 +605 332 362 459 1 +468 649 166 381 1 +311 376 557 449 1 +670 602 673 70 1 +456 432 395 248 1 +546 325 508 453 1 +206 721 403 427 1 +189 20 166 649 1 +384 649 524 224 1 +583 624 522 555 1 +323 729 498 548 1 +207 528 754 373 1 +318 398 461 714 1 +206 721 427 187 1 +406 627 306 740 1 +589 177 130 473 1 +5 303 464 200 1 +223 621 85 201 1 +530 442 321 457 1 +23 589 549 177 1 +508 4 172 199 1 +550 325 446 575 1 +383 569 3 491 1 +391 677 314 487 1 +498 684 420 711 1 +575 654 446 349 1 +578 335 702 417 1 +403 211 71 206 1 +565 232 76 663 1 +232 663 565 112 1 +614 392 496 643 1 +306 603 571 397 1 +499 312 531 445 1 +15 518 208 105 1 +625 94 163 546 1 +531 357 454 312 1 +334 585 496 529 1 +520 433 316 637 1 +150 215 62 593 1 +415 472 504 44 1 +670 708 162 451 1 +290 234 530 38 1 +328 438 495 341 1 +643 657 392 496 1 +209 564 435 506 1 +673 564 250 117 1 +486 629 379 515 1 +446 659 59 546 1 +426 521 675 313 1 +605 406 306 480 1 +246 4 508 640 1 +391 503 324 487 1 +393 487 324 503 1 +277 408 501 620 1 +60 725 189 698 1 +272 104 646 574 1 +137 2 436 249 1 +526 340 723 545 1 +416 545 723 489 1 +407 231 301 31 1 +113 420 510 286 1 +452 612 432 329 1 +537 174 282 286 1 +316 641 502 422 1 +33 277 260 408 1 +693 729 338 516 1 +604 580 346 557 1 +401 520 355 636 1 +353 660 430 520 1 +509 407 95 301 1 +471 296 460 392 1 +230 460 471 296 1 +343 660 709 525 1 +327 738 497 478 1 +219 616 64 225 1 +40 411 137 140 1 +77 671 530 442 1 +451 377 553 340 1 +97 556 37 680 1 +627 637 740 583 1 +226 617 683 74 1 +13 553 222 451 1 +413 691 571 742 1 +408 600 466 339 1 +610 560 142 354 1 +147 478 298 160 1 +518 440 185 474 1 +187 399 62 593 1 +280 93 577 463 1 +350 505 434 602 1 +547 20 649 384 1 +489 357 308 555 1 +383 573 328 495 1 +555 422 502 308 1 +329 504 375 543 1 +657 471 643 392 1 +228 69 171 415 1 +543 504 375 415 1 +217 263 491 383 1 +644 514 446 654 1 +688 326 363 474 1 +350 602 434 619 1 +340 428 545 619 1 +340 619 526 434 1 +619 428 602 340 1 +707 721 62 593 1 +721 187 62 593 1 +153 519 211 71 1 +618 731 540 417 1 +425 353 430 321 1 +384 521 426 313 1 +654 575 305 487 1 +434 602 252 673 1 +543 312 416 720 1 +562 459 72 173 1 +384 493 497 738 1 +589 330 549 473 1 +665 686 36 414 1 +389 429 323 365 1 +400 499 418 317 1 +638 625 527 181 1 +559 603 480 397 1 +308 489 662 357 1 +393 654 560 712 1 +638 625 453 527 1 +157 303 536 5 1 +452 489 472 329 1 +663 232 76 606 1 +696 531 561 344 1 +662 329 596 357 1 +12 197 420 269 1 +369 511 61 155 1 +646 234 457 442 1 +646 104 234 442 1 +77 703 671 442 1 +684 307 498 492 1 +472 129 44 617 1 +565 663 419 112 1 +425 596 395 685 1 +386 696 347 561 1 +720 418 542 366 1 +452 377 472 489 1 +394 604 346 557 1 +604 580 24 346 1 +423 196 253 28 1 +84 196 253 423 1 +621 513 549 85 1 +223 621 549 85 1 +431 621 26 201 1 +374 431 647 540 1 +46 715 274 127 1 +292 424 99 266 1 +406 356 627 740 1 +629 433 355 520 1 +309 433 629 520 1 +540 680 350 417 1 +530 234 457 38 1 +290 234 442 530 1 +629 515 355 485 1 +685 358 395 425 1 +321 358 685 425 1 +353 555 637 422 1 +351 463 685 679 1 +583 624 555 525 1 +615 320 676 403 1 +654 514 446 349 1 +583 627 637 341 1 +425 685 430 314 1 +528 639 398 133 1 +498 307 386 492 1 +693 675 524 385 1 +559 116 459 170 1 +141 187 35 427 1 +483 433 331 629 1 +682 469 316 637 1 +553 690 673 340 1 +545 340 690 377 1 +37 159 428 247 1 +331 436 566 603 1 +671 358 530 442 1 +553 387 673 690 1 +525 709 343 402 1 +736 388 585 751 1 +376 557 394 311 1 +751 89 240 26 1 +620 423 616 84 1 +25 535 542 192 1 +68 642 432 248 1 +546 94 163 268 1 +493 41 271 738 1 +504 96 612 237 1 +507 385 675 693 1 +586 399 470 327 1 +752 394 346 557 1 +483 356 740 433 1 +516 381 524 693 1 +313 675 524 693 1 +372 79 178 505 1 +372 79 505 431 1 +22 100 195 505 1 +406 371 362 597 1 +597 394 557 311 1 +311 455 371 597 1 +6 172 453 163 1 +22 505 178 100 1 +573 422 322 641 1 +391 503 349 584 1 +638 69 697 199 1 +415 504 375 697 1 +493 476 738 327 1 +697 4 199 171 1 +27 612 642 452 1 +554 436 179 397 1 +671 395 248 14 1 +603 436 554 397 1 +571 397 603 554 1 +741 395 567 351 1 +337 451 683 74 1 +567 741 534 395 1 +683 377 451 337 1 +559 436 480 603 1 +603 436 566 361 1 +480 331 603 436 1 +324 398 714 539 1 +697 504 4 171 1 +379 483 331 629 1 +437 481 342 750 1 +694 484 512 409 1 +229 2 179 436 1 +567 168 456 395 1 +23 549 220 177 1 +472 612 452 329 1 +612 432 329 382 1 +334 496 630 643 1 +432 382 692 244 1 +433 583 637 353 1 +403 441 676 16 1 +367 644 592 48 1 +133 398 528 655 1 +280 164 93 463 1 +390 589 421 258 1 +222 299 553 670 1 +370 716 72 251 1 +15 267 440 225 1 +617 161 44 415 1 +15 440 267 284 1 +621 549 513 374 1 +542 161 617 415 1 +437 752 346 557 1 +355 682 629 485 1 +310 372 495 647 1 +540 647 350 505 1 +484 347 499 728 1 +728 416 347 499 1 +728 624 347 416 1 +709 660 430 525 1 +647 372 495 475 1 +621 223 26 201 1 +516 729 338 628 1 +284 440 267 620 1 +647 372 505 431 1 +690 414 553 387 1 +690 387 673 340 1 +705 427 35 639 1 +680 556 37 428 1 +662 308 357 555 1 +569 204 3 143 1 +491 569 3 143 1 +494 531 454 312 1 +485 601 404 42 1 +444 439 324 343 1 +506 595 322 372 1 +715 138 274 127 1 +479 138 274 715 1 +478 147 61 160 1 +578 417 97 730 1 +637 422 502 353 1 +515 636 401 355 1 +405 697 415 375 1 +550 325 382 659 1 +701 412 316 404 1 +86 377 665 652 1 +288 14 534 741 1 +660 583 433 353 1 +135 214 59 446 1 +726 390 407 632 1 +683 617 542 74 1 +162 281 226 451 1 +451 281 226 74 1 +13 299 451 222 1 +446 19 135 214 1 +165 655 754 373 1 +553 90 222 250 1 +645 632 407 390 1 +641 345 502 626 1 +237 612 504 640 1 +529 152 614 183 1 +471 392 599 315 1 +466 600 344 494 1 +348 441 607 591 1 +339 600 466 494 1 +599 346 658 437 1 +441 607 591 145 1 +598 600 494 312 1 +441 16 607 145 1 +486 49 528 754 1 +140 50 285 552 1 +583 353 660 525 1 +205 279 30 450 1 +450 279 30 115 1 +15 440 727 518 1 +646 321 457 502 1 +652 553 665 90 1 +665 553 414 90 1 +660 353 433 520 1 +309 660 433 520 1 +639 705 398 133 1 +568 308 662 425 1 +512 360 613 330 1 +614 643 496 334 1 +613 360 443 330 1 +388 443 330 613 1 +27 202 452 86 1 +202 129 452 86 1 +452 129 377 86 1 +640 612 329 382 1 +314 487 550 391 1 +628 106 695 516 1 +314 550 456 391 1 +451 670 340 553 1 +639 591 101 608 1 +206 403 101 639 1 +651 378 437 342 1 +528 101 639 133 1 +206 101 579 639 1 +679 520 629 355 1 +11 455 153 215 1 +422 637 573 341 1 +417 618 335 702 1 +31 632 733 119 1 +733 632 390 119 1 +484 335 631 512 1 +639 579 705 133 1 +398 705 91 133 1 +84 616 196 423 1 +437 332 597 406 1 +712 609 396 458 1 +440 423 616 620 1 +642 432 114 671 1 +125 38 457 126 1 +272 457 38 126 1 +272 234 38 457 1 +465 687 121 749 1 +406 740 306 480 1 +200 262 464 58 1 +731 618 335 417 1 +386 694 347 492 1 +663 232 606 389 1 +483 480 331 740 1 +420 174 537 286 1 +573 637 469 341 1 +739 424 292 266 1 +614 496 152 529 1 +47 560 393 154 1 +47 136 142 560 1 +378 735 342 651 1 +389 323 658 419 1 +389 658 323 429 1 +394 580 604 557 1 +315 599 658 437 1 +122 25 563 180 1 +185 54 563 363 1 +325 710 719 575 1 +715 46 291 127 1 +380 88 606 238 1 +511 478 160 648 1 +277 620 284 84 1 +405 415 543 375 1 +1 657 380 496 1 +563 25 192 366 1 +657 182 392 295 1 +54 180 122 563 1 +295 657 496 392 1 +12 488 420 628 1 +232 606 287 76 1 +362 480 306 397 1 +190 580 24 604 1 +502 701 412 641 1 +539 503 148 393 1 +523 304 344 561 1 +601 457 701 412 1 +489 308 662 377 1 +633 646 581 634 1 +255 35 91 705 1 +23 130 258 589 1 +589 23 289 258 1 +421 589 289 258 1 +555 568 425 308 1 +453 625 163 546 1 +416 531 347 499 1 +462 742 605 306 1 +321 502 442 568 1 +149 56 173 562 1 +39 465 297 124 1 +39 124 121 465 1 +438 462 443 623 1 +560 511 142 354 1 +741 685 530 395 1 +518 474 185 208 1 +601 126 457 412 1 +669 309 679 582 1 +376 455 394 467 1 +467 455 394 123 1 +467 394 291 123 1 +190 467 291 123 1 +605 332 406 362 1 +704 756 95 551 1 +9 756 400 578 1 +756 551 191 400 1 +704 551 191 756 1 +756 407 95 551 1 +439 582 324 343 1 +737 696 319 492 1 +595 505 434 647 1 +452 129 683 377 1 +452 683 472 377 1 +129 683 377 652 1 +683 377 337 489 1 +531 696 347 445 1 +410 470 311 447 1 +447 470 311 449 1 +376 311 470 449 1 +135 644 268 48 1 +403 441 607 348 1 +481 651 429 658 1 +182 296 471 392 1 +145 139 608 49 1 +403 16 607 441 1 +450 659 446 550 1 +227 485 566 167 1 +227 552 566 485 1 +552 566 485 331 1 +2 566 92 167 1 +230 346 471 460 1 +714 444 439 324 1 +456 596 314 395 1 +550 450 456 391 1 +380 473 88 177 1 +473 265 88 177 1 +206 607 101 403 1 +206 16 607 403 1 +188 80 391 667 1 +313 384 649 524 1 +521 448 477 609 1 +486 49 591 528 1 +591 145 608 49 1 +382 375 329 640 1 +674 125 577 636 1 +616 225 368 518 1 +531 344 696 445 1 +696 492 445 319 1 +708 556 37 221 1 +197 510 273 113 1 +615 371 320 406 1 +363 527 501 107 1 +494 402 325 454 1 +720 542 337 415 1 +458 155 576 7 1 +720 415 543 405 1 +720 543 312 405 1 +747 364 522 475 1 +109 655 165 482 1 +599 392 332 462 1 +150 476 194 41 1 +150 476 62 194 1 +476 399 62 194 1 +495 438 611 623 1 +318 594 586 470 1 +460 392 332 599 1 +376 470 476 327 1 +588 582 679 351 1 +92 713 229 66 1 +371 302 622 715 1 +430 520 309 679 1 +587 561 344 386 1 +712 369 609 458 1 +327 477 478 369 1 +511 369 712 458 1 +511 712 396 458 1 +634 722 635 98 1 +476 399 478 327 1 +649 20 184 224 1 +536 739 328 424 1 +384 20 649 224 1 +381 649 166 184 1 +336 468 548 649 1 +378 623 438 341 1 +17 275 459 479 1 +459 149 479 275 1 +149 275 274 479 1 +479 275 274 138 1 +716 413 370 529 1 +183 413 716 529 1 +716 183 29 413 1 +370 459 397 716 1 +554 397 29 716 1 +370 614 72 716 1 +459 116 397 716 1 +716 529 614 183 1 +605 332 459 370 1 +512 429 330 743 1 +46 149 274 479 1 +549 177 380 67 1 +549 513 220 85 1 +654 487 305 444 1 +388 613 330 374 1 +512 513 330 613 1 +331 483 411 480 1 +483 320 411 480 1 +320 356 480 483 1 +176 741 588 463 1 +700 445 499 326 1 +188 732 391 80 1 +441 411 483 320 1 +616 695 196 423 1 +550 450 382 456 1 +314 550 382 456 1 +261 351 43 567 1 +567 351 43 176 1 +567 391 482 351 1 +77 671 257 530 1 +653 525 343 523 1 +711 661 743 390 1 +223 630 549 388 1 +430 679 309 582 1 +387 90 553 250 1 +661 197 73 269 1 +257 671 248 14 1 +103 674 515 485 1 +500 554 571 361 1 +678 402 305 710 1 +674 636 355 601 1 +517 458 592 367 1 +631 421 645 390 1 +736 310 443 613 1 +6 625 638 181 1 +12 628 286 174 1 +324 487 444 343 1 +393 444 324 487 1 +356 583 447 378 1 +474 55 551 535 1 +12 259 269 488 1 +269 488 259 119 1 +488 119 64 259 1 +219 119 64 488 1 +581 254 36 633 1 +568 662 358 425 1 +419 510 663 389 1 +706 313 507 386 1 +702 326 407 400 1 +544 513 203 421 1 +156 203 544 235 1 +75 175 231 645 1 +324 714 393 539 1 +33 277 501 107 1 +444 714 393 324 1 +444 714 354 393 1 +683 13 451 377 1 +316 491 404 412 1 +404 412 491 143 1 +143 92 491 404 1 +398 714 439 324 1 +398 538 714 539 1 +493 476 150 41 1 +169 493 150 41 1 +169 376 150 493 1 +376 169 467 493 1 +722 641 435 345 1 +384 449 313 548 1 +376 467 336 493 1 +449 376 336 493 1 +449 493 336 384 1 +327 493 449 384 1 +327 376 449 493 1 +444 354 712 393 1 +102 41 271 493 1 +576 155 278 7 1 +151 576 278 7 1 +576 151 193 7 1 +637 353 502 520 1 +111 382 757 244 1 +612 96 212 237 1 +202 504 612 472 1 +202 612 452 472 1 +472 504 612 329 1 +494 710 402 748 1 +304 748 523 344 1 +561 531 748 344 1 +561 531 304 748 1 +574 412 126 8 1 +644 546 268 48 1 +295 1 152 496 1 +496 1 152 242 1 +242 1 216 496 1 +318 399 470 586 1 +322 595 434 475 1 +318 586 461 399 1 +524 649 184 224 1 +410 615 320 406 1 +555 624 522 364 1 +583 304 522 624 1 +497 384 426 224 1 +497 426 270 224 1 +102 497 270 224 1 +102 384 497 224 1 +739 79 200 372 1 +464 200 372 739 1 +536 464 328 739 1 +464 372 328 739 1 +581 442 104 646 1 +403 721 352 427 1 +601 412 701 404 1 +626 345 502 568 1 +686 703 414 452 1 +500 263 383 87 1 +500 464 87 383 1 +500 303 87 464 1 +323 718 498 429 1 +419 537 468 51 1 +113 537 282 286 1 +51 537 166 174 1 +157 210 500 66 1 +157 303 87 500 1 +217 263 383 500 1 +409 728 522 347 1 +542 415 656 228 1 +398 348 528 439 1 +25 656 563 180 1 +433 469 682 637 1 +180 405 656 563 1 +322 573 383 495 1 +156 235 731 53 1 +638 405 181 527 1 +521 327 497 369 1 +610 538 47 393 1 +449 521 313 359 1 +353 502 321 425 1 +393 487 503 349 1 +391 349 503 487 1 +737 319 688 492 1 +233 585 99 424 1 +479 394 604 752 1 +529 585 233 424 1 +139 21 486 515 1 +401 486 21 515 1 +39 519 465 211 1 +237 96 4 504 1 +335 513 512 613 1 +335 513 613 374 1 +640 375 329 504 1 +613 513 330 374 1 +409 360 613 512 1 +372 464 322 506 1 +383 506 322 464 1 +383 262 506 464 1 +383 262 263 506 1 +506 262 263 82 1 +383 506 263 82 1 +435 506 383 82 1 +209 506 435 82 1 +209 262 506 82 1 +664 659 446 450 1 +154 514 503 664 1 +664 19 446 214 1 +435 506 322 383 1 +384 738 497 327 1 +673 602 252 70 1 +356 660 541 653 1 +660 525 343 653 1 +660 309 582 430 1 +726 684 632 368 1 +453 508 375 325 1 +508 375 325 454 1 +382 508 325 454 1 +382 375 508 454 1 +204 435 82 635 1 +508 172 163 453 1 +59 172 163 508 1 +518 407 632 726 1 +660 430 582 343 1 +59 246 172 508 1 +420 365 510 323 1 +425 308 662 555 1 +584 503 57 667 1 +188 584 57 667 1 +261 391 667 482 1 +391 482 503 667 1 +700 600 312 445 1 +232 389 510 34 1 +478 369 354 511 1 +715 455 127 123 1 +411 40 749 140 1 +640 4 697 504 1 +338 695 423 516 1 +738 478 298 147 1 +478 738 497 147 1 +423 695 196 28 1 +516 695 423 28 1 +219 632 64 368 1 +632 488 64 368 1 +219 518 632 225 1 +105 518 632 219 1 +340 428 451 545 1 +597 371 622 479 1 +203 85 513 235 1 +337 545 416 489 1 +707 187 62 721 1 +532 256 724 83 1 +721 71 707 187 1 +622 302 297 138 1 +622 300 297 124 1 +522 341 747 623 1 +532 576 193 7 1 +560 610 47 393 1 +223 67 549 630 1 +328 691 571 413 1 +587 386 313 706 1 +425 525 430 353 1 +25 542 213 192 1 +704 756 191 400 1 +150 593 62 476 1 +11 215 150 593 1 +399 476 62 593 1 +118 241 408 517 1 +453 638 527 598 1 +561 748 304 344 1 +547 134 189 20 1 +466 408 339 517 1 +333 408 466 517 1 +522 728 624 347 1 +15 225 440 518 1 +472 617 44 415 1 +89 630 223 388 1 +77 689 257 671 1 +442 633 581 264 1 +459 116 716 251 1 +716 116 29 251 1 +370 459 716 251 1 +39 153 302 519 1 +637 555 341 422 1 +730 731 417 540 1 +195 159 680 97 1 +258 661 73 390 1 +258 589 661 390 1 +6 199 181 638 1 +521 327 477 359 1 +449 327 521 359 1 +384 327 521 449 1 +384 327 497 521 1 +497 521 426 384 1 +562 479 460 332 1 +422 316 573 637 1 +548 381 729 693 1 +556 400 535 418 1 +562 332 370 459 1 +494 531 748 454 1 +672 507 423 385 1 +556 276 37 221 1 +627 356 406 378 1 +56 562 218 173 1 +648 478 160 18 1 +322 372 595 475 1 +373 582 679 588 1 +401 679 629 355 1 +186 385 516 524 1 +186 516 184 524 1 +524 184 65 516 1 +381 524 65 516 1 +381 184 65 524 1 +572 339 650 501 1 +678 523 710 448 1 +325 494 710 402 1 +676 749 121 140 1 +542 535 213 192 1 +556 418 317 400 1 +25 366 542 535 1 +31 645 231 175 1 +361 573 491 316 1 +473 365 743 330 1 +181 54 132 527 1 +308 626 502 568 1 +639 101 579 133 1 +403 607 101 639 1 +181 54 527 405 1 +308 568 414 626 1 +390 743 421 589 1 +489 545 690 377 1 +362 605 306 480 1 +133 528 101 49 1 +396 146 128 592 1 +644 19 664 514 1 +567 395 314 677 1 +110 529 233 413 1 +468 537 166 51 1 +6 625 453 638 1 +568 442 414 345 1 +692 612 212 237 1 +642 612 432 452 1 +110 52 233 529 1 +86 686 414 452 1 +384 493 738 327 1 +408 319 672 466 1 +467 169 60 725 1 +290 77 257 530 1 +290 530 257 164 1 +288 257 530 164 1 +397 742 306 605 1 +691 334 438 742 1 +27 452 686 86 1 +413 742 370 529 1 +672 507 333 466 1 +288 257 14 530 1 +408 672 333 466 1 +416 312 531 499 1 +625 94 453 572 1 +418 276 556 221 1 +429 360 590 651 1 +339 625 453 572 1 +625 132 527 181 1 +698 467 60 725 1 +83 283 408 532 1 +408 283 118 532 1 +532 283 118 517 1 +408 532 118 517 1 +83 193 283 532 1 +83 256 193 532 1 +223 388 549 621 1 +316 422 502 637 1 +555 522 341 747 1 +586 477 354 478 1 +534 168 395 14 1 +568 345 502 442 1 +25 366 535 192 1 +122 192 474 535 1 +474 192 55 535 1 +535 191 192 55 1 +227 552 485 103 1 +411 552 137 140 1 +678 359 523 448 1 +78 191 535 400 1 +78 191 192 535 1 +454 312 357 543 1 +454 375 312 543 1 +413 529 233 536 1 +5 110 233 536 1 +5 233 292 536 1 +157 303 500 536 1 +500 303 464 536 1 +510 323 537 420 1 +473 177 380 549 1 +468 381 166 537 1 +419 323 468 537 1 +419 537 510 323 1 +323 706 718 429 1 +706 718 429 481 1 +718 342 429 481 1 +718 694 386 307 1 +537 51 282 174 1 +486 669 379 629 1 +379 669 483 629 1 +398 91 538 539 1 +25 542 656 228 1 +228 69 415 656 1 +377 340 451 545 1 +201 431 374 540 1 +399 648 478 586 1 +648 141 461 399 1 +540 431 505 100 1 +201 431 540 100 1 +595 293 506 564 1 +595 293 564 117 1 +397 116 459 559 1 +559 459 362 170 1 +515 674 355 485 1 +589 130 73 661 1 +661 390 488 119 1 +595 178 117 22 1 +505 178 595 22 1 +434 595 564 117 1 +661 130 73 197 1 +418 451 337 542 1 +80 732 391 567 1 +442 414 633 703 1 +618 613 374 335 1 +337 542 472 415 1 +519 721 707 352 1 +380 606 643 657 1 +472 504 543 415 1 +472 504 329 543 1 +472 489 543 329 1 +329 543 357 489 1 +329 454 357 543 1 +472 489 337 543 1 +732 584 456 30 1 +456 168 732 244 1 +456 732 30 244 1 +111 246 640 237 1 +111 246 382 640 1 +619 602 434 340 1 +335 513 374 544 1 +260 724 253 83 1 +691 334 424 611 1 +377 545 451 337 1 +377 489 545 337 1 +356 660 653 583 1 +660 309 430 520 1 +135 446 59 546 1 +748 525 343 402 1 +102 134 384 547 1 +102 547 384 20 1 +102 134 547 20 1 +572 501 650 33 1 +468 548 381 537 1 +548 323 381 537 1 +468 323 548 537 1 +9 578 730 156 1 +223 549 220 85 1 +223 67 220 549 1 +23 513 220 549 1 +590 360 330 443 1 +590 380 443 330 1 +443 380 388 549 1 +746 151 193 576 1 +450 550 446 349 1 +660 353 430 525 1 +474 535 551 326 1 +326 535 551 400 1 +518 474 551 326 1 +551 208 474 518 1 +509 208 551 518 1 +105 509 551 518 1 +105 551 407 518 1 +105 509 407 551 1 +55 208 551 509 1 +551 55 509 191 1 +55 208 474 551 1 +441 552 285 379 1 +411 552 441 379 1 +140 411 552 441 1 +140 552 285 441 1 +207 528 49 754 1 +485 552 379 515 1 +571 742 397 413 1 +691 334 742 529 1 +594 653 343 523 1 +447 653 523 587 1 +229 436 179 554 1 +398 538 610 714 1 +230 346 604 24 1 +387 626 345 435 1 +337 720 545 418 1 +572 94 453 546 1 +28 256 724 186 1 +724 256 385 186 1 +425 357 525 555 1 +425 555 525 353 1 +353 502 425 555 1 +353 422 502 555 1 +584 450 391 456 1 +523 748 710 344 1 +526 364 555 422 1 +494 710 748 344 1 +206 579 35 639 1 +390 661 733 119 1 +661 269 733 119 1 +97 198 556 417 1 +690 414 387 626 1 +417 428 317 556 1 +428 418 317 556 1 +690 414 377 553 1 +97 198 37 556 1 +563 366 700 405 1 +474 366 700 563 1 +187 399 721 427 1 +721 399 352 427 1 +688 700 363 326 1 +616 267 196 225 1 +352 558 470 410 1 +558 318 470 410 1 +541 318 558 410 1 +474 700 366 326 1 +352 318 470 558 1 +249 411 559 436 1 +436 411 559 480 1 +559 411 362 480 1 +411 362 465 559 1 +440 518 688 474 1 +518 326 688 474 1 +411 559 465 40 1 +411 40 249 559 1 +560 136 514 154 1 +328 611 424 372 1 +142 648 511 18 1 +616 695 423 737 1 +623 443 360 651 1 +597 752 394 479 1 +666 130 589 661 1 +165 588 108 43 1 +149 56 562 460 1 +56 562 460 296 1 +562 392 460 296 1 +56 392 562 296 1 +56 392 294 562 1 +562 392 294 218 1 +56 562 294 218 1 +311 615 406 597 1 +410 320 615 558 1 +563 192 535 366 1 +122 192 535 563 1 +122 25 192 563 1 +563 54 180 405 1 +405 54 527 563 1 +209 32 236 564 1 +564 32 236 387 1 +435 564 236 387 1 +209 564 236 435 1 +506 293 209 564 1 +596 454 314 357 1 +506 564 322 434 1 +683 451 226 74 1 +566 137 2 436 1 +552 137 566 436 1 +227 137 566 552 1 +227 137 2 566 1 +261 567 43 176 1 +261 534 567 176 1 +742 462 370 334 1 +438 462 742 334 1 +571 438 306 742 1 +742 334 370 529 1 +261 80 567 534 1 +80 168 567 534 1 +261 80 391 567 1 +261 391 482 567 1 +642 432 358 452 1 +435 383 569 82 1 +569 383 263 82 1 +204 569 263 82 1 +204 435 569 82 1 +204 569 3 263 1 +569 383 3 263 1 +316 383 491 569 1 +485 552 331 629 1 +629 552 331 379 1 +571 397 554 413 1 +500 413 571 554 1 +536 413 571 500 1 +536 571 328 500 1 +536 413 328 571 1 +692 382 111 244 1 +589 743 661 390 1 +571 438 469 306 1 +571 438 341 469 1 +340 670 428 602 1 +328 438 341 571 1 +517 241 572 48 1 +572 241 268 48 1 +546 572 268 48 1 +546 367 572 48 1 +572 94 546 268 1 +241 94 572 268 1 +408 241 572 517 1 +408 572 339 517 1 +466 517 339 572 1 +573 383 328 500 1 +361 383 573 500 1 +361 383 491 573 1 +680 505 602 22 1 +498 684 711 307 1 +498 711 429 307 1 +396 575 367 305 1 +133 398 655 10 1 +398 528 655 439 1 +31 632 407 645 1 +757 382 205 450 1 +532 256 193 746 1 +746 576 193 532 1 +63 151 746 426 1 +369 155 576 458 1 +186 746 524 63 1 +433 353 637 520 1 +578 556 417 400 1 +568 358 414 703 1 +581 646 104 634 1 +578 198 417 556 1 +578 198 97 417 1 +730 578 417 731 1 +156 731 578 730 1 +9 156 243 578 1 +91 35 579 705 1 +9 198 97 578 1 +541 410 558 699 1 +356 699 410 541 1 +669 439 348 699 1 +558 699 441 348 1 +580 131 24 419 1 +239 131 24 580 1 +190 239 24 580 1 +467 239 190 580 1 +362 406 605 480 1 +394 467 580 557 1 +699 379 348 669 1 +441 699 379 348 1 +309 541 699 483 1 +336 419 580 481 1 +580 419 346 481 1 +710 523 344 448 1 +678 586 477 444 1 +678 444 477 305 1 +390 711 307 631 1 +118 744 517 7 1 +97 556 680 417 1 +494 339 719 466 1 +453 527 625 339 1 +346 460 752 599 1 +239 698 131 580 1 +698 336 468 419 1 +560 712 511 354 1 +349 575 654 487 1 +600 319 696 445 1 +375 638 453 598 1 +453 508 638 375 1 +12 628 174 490 1 +628 420 286 174 1 +154 503 57 584 1 +139 379 50 753 1 +139 379 753 515 1 +368 737 688 492 1 +437 597 752 557 1 +597 332 752 479 1 +597 394 752 557 1 +425 596 685 314 1 +501 107 727 363 1 +533 242 89 585 1 +332 597 752 437 1 +233 533 99 585 1 +585 52 233 533 1 +533 242 585 52 1 +585 242 529 52 1 +529 52 233 585 1 +479 752 460 332 1 +359 448 313 587 1 +691 438 571 742 1 +588 351 401 463 1 +159 428 602 680 1 +482 582 588 351 1 +261 351 482 588 1 +482 582 373 588 1 +22 680 159 602 1 +486 373 401 588 1 +486 588 401 108 1 +245 108 401 588 1 +486 373 588 108 1 +165 373 108 588 1 +165 482 373 588 1 +513 589 421 330 1 +23 589 421 513 1 +421 23 289 589 1 +517 744 458 7 1 +441 591 285 145 1 +145 591 285 139 1 +591 379 285 139 1 +441 379 285 591 1 +441 348 379 591 1 +745 155 278 576 1 +376 593 476 470 1 +476 593 399 470 1 +593 352 399 470 1 +376 352 593 470 1 +455 593 376 352 1 +37 281 708 221 1 +418 556 708 221 1 +221 281 708 74 1 +11 215 593 455 1 +11 593 376 455 1 +221 708 418 74 1 +418 708 451 74 1 +708 281 451 74 1 +412 641 722 345 1 +722 435 635 98 1 +722 633 435 98 1 +644 654 446 575 1 +541 439 594 343 1 +396 654 644 575 1 +566 713 92 404 1 +401 520 636 679 1 +318 594 470 410 1 +351 430 582 679 1 +505 595 434 22 1 +372 178 595 505 1 +372 79 595 178 1 +595 79 200 178 1 +58 595 200 178 1 +58 293 595 178 1 +595 293 117 178 1 +58 293 506 595 1 +595 464 506 58 1 +200 464 595 58 1 +200 464 372 595 1 +372 464 506 595 1 +372 79 200 595 1 +437 597 557 311 1 +485 552 753 103 1 +494 600 344 531 1 +405 363 527 598 1 +446 325 546 719 1 +453 325 375 598 1 +454 325 598 375 1 +454 325 494 598 1 +720 312 416 499 1 +139 21 515 753 1 +346 471 460 599 1 +471 392 460 599 1 +659 325 446 550 1 +405 69 697 638 1 +415 504 697 171 1 +415 69 171 697 1 +408 319 466 600 1 +600 408 319 501 1 +600 501 319 363 1 +339 501 600 363 1 +363 339 598 600 1 +339 600 494 598 1 +339 408 600 501 1 +697 69 171 199 1 +333 672 675 507 1 +675 672 385 507 1 +448 507 333 675 1 +602 252 22 434 1 +159 252 22 602 1 +27 642 681 452 1 +642 671 114 681 1 +642 671 681 358 1 +642 358 681 452 1 +27 681 144 452 1 +159 247 252 602 1 +469 571 603 361 1 +571 603 361 554 1 +361 436 554 603 1 +469 571 306 603 1 +149 604 120 460 1 +604 149 479 460 1 +227 753 552 103 1 +485 552 515 753 1 +46 604 479 394 1 +604 46 291 394 1 +604 394 291 467 1 +190 604 291 467 1 +190 46 291 604 1 +604 46 120 190 1 +149 46 120 604 1 +46 149 479 604 1 +146 644 135 48 1 +606 389 315 471 1 +154 664 584 115 1 +232 389 287 606 1 +188 584 667 391 1 +261 667 109 482 1 +88 606 287 265 1 +88 473 606 265 1 +584 503 667 391 1 +590 389 606 473 1 +590 606 380 473 1 +88 380 606 473 1 +315 606 380 590 1 +315 389 606 590 1 +504 612 329 640 1 +458 609 367 333 1 +367 333 609 466 1 +466 333 609 448 1 +211 676 121 16 1 +211 403 676 16 1 +576 369 609 333 1 +744 128 458 7 1 +367 609 305 466 1 +396 305 367 609 1 +396 609 367 458 1 +404 713 491 361 1 +682 713 404 361 1 +229 713 554 66 1 +682 566 713 361 1 +158 91 538 610 1 +158 538 47 610 1 +158 47 142 610 1 +610 47 142 560 1 +336 547 649 384 1 +684 492 737 368 1 +737 368 695 488 1 +692 432 612 640 1 +465 687 749 40 1 +334 443 611 438 1 +27 612 452 202 1 +27 96 612 202 1 +27 96 212 612 1 +643 496 630 380 1 +525 624 555 357 1 +737 338 423 507 1 +218 614 72 562 1 +218 392 614 562 1 +218 295 614 392 1 +614 295 496 392 1 +218 295 152 614 1 +218 152 72 614 1 +352 615 470 311 1 +615 410 470 311 1 +311 615 410 406 1 +352 410 470 615 1 +352 455 371 615 1 +352 371 519 615 1 +371 615 465 519 1 +371 320 465 615 1 +219 368 616 225 1 +219 368 64 616 1 +64 488 616 368 1 +696 492 347 445 1 +64 570 196 616 1 +84 267 196 616 1 +388 549 621 374 1 +374 388 431 621 1 +350 618 540 417 1 +620 616 267 84 1 +620 501 440 319 1 +732 456 391 567 1 +648 354 478 586 1 +310 613 374 618 1 +310 613 618 409 1 +409 613 618 335 1 +619 350 475 434 1 +619 475 350 618 1 +350 618 417 619 1 +619 618 417 317 1 +417 317 428 619 1 +417 619 428 350 1 +317 619 618 409 1 +619 475 618 409 1 +548 729 498 706 1 +693 381 729 516 1 +277 501 284 620 1 +673 299 670 70 1 +222 299 673 70 1 +250 222 673 70 1 +467 169 725 493 1 +84 423 253 620 1 +388 223 26 621 1 +735 360 623 522 1 +17 275 622 300 1 +138 300 622 275 1 +138 622 479 275 1 +17 275 479 622 1 +17 479 459 622 1 +651 735 718 360 1 +735 561 360 522 1 +362 622 371 465 1 +39 371 622 465 1 +39 622 297 465 1 +39 302 297 622 1 +39 302 622 371 1 +597 371 362 622 1 +583 304 624 525 1 +561 522 624 347 1 +347 531 624 561 1 +28 724 516 186 1 +6 453 625 163 1 +626 526 422 322 1 +578 702 400 417 1 +387 626 435 322 1 +387 526 626 322 1 +629 433 682 355 1 +422 626 502 308 1 +741 530 463 164 1 +671 395 741 530 1 +288 530 741 164 1 +741 463 176 164 1 +176 351 588 741 1 +732 584 391 456 1 +730 680 417 97 1 +540 680 417 730 1 +174 537 628 420 1 +174 381 628 537 1 +600 696 319 466 1 +344 696 600 466 1 +696 448 507 466 1 +490 516 106 628 1 +12 628 490 106 1 +12 259 628 106 1 +344 386 696 448 1 +344 448 696 466 1 +334 630 388 443 1 +334 630 585 388 1 +334 496 585 630 1 +242 630 585 496 1 +242 216 630 496 1 +242 216 89 630 1 +242 630 89 585 1 +484 335 407 631 1 +105 632 301 219 1 +632 31 301 219 1 +31 219 632 119 1 +632 219 488 119 1 +390 632 488 119 1 +634 646 104 574 1 +407 31 301 632 1 +105 407 301 632 1 +105 407 632 518 1 +219 488 64 632 1 +435 633 236 98 1 +633 387 236 98 1 +254 387 633 98 1 +90 633 254 387 1 +90 553 633 387 1 +633 553 414 387 1 +626 414 387 633 1 +626 633 387 345 1 +345 387 435 633 1 +435 387 236 633 1 +626 414 633 345 1 +90 553 414 633 1 +90 414 254 633 1 +310 647 495 475 1 +280 636 577 38 1 +577 636 125 38 1 +280 463 636 38 1 +628 729 338 420 1 +723 624 555 364 1 +416 624 723 364 1 +463 93 636 401 1 +636 93 577 401 1 +21 577 401 636 1 +21 636 401 515 1 +475 747 495 310 1 +675 609 333 448 1 +333 675 532 576 1 +747 364 475 526 1 +463 93 577 636 1 +280 463 577 636 1 +463 685 530 741 1 +131 698 468 419 1 +131 580 698 419 1 +60 698 189 131 1 +638 172 199 508 1 +453 172 638 508 1 +6 172 638 453 1 +6 172 199 638 1 +528 639 101 608 1 +528 591 639 608 1 +528 348 639 591 1 +348 607 639 591 1 +403 607 639 348 1 +403 348 639 558 1 +318 348 558 639 1 +318 348 639 398 1 +348 639 398 528 1 +383 316 573 641 1 +412 316 569 641 1 +335 409 484 702 1 +68 642 212 432 1 +642 212 432 612 1 +27 212 642 612 1 +370 643 614 334 1 +370 392 614 643 1 +462 392 370 643 1 +599 392 462 643 1 +599 643 462 315 1 +643 315 443 462 1 +315 643 443 590 1 +643 380 443 590 1 +315 380 643 590 1 +380 606 315 643 1 +643 606 315 471 1 +643 471 315 392 1 +599 392 643 315 1 +315 658 590 429 1 +658 651 429 315 1 +644 19 135 446 1 +146 19 644 514 1 +146 19 135 644 1 +396 146 592 644 1 +396 592 458 644 1 +75 645 243 544 1 +544 645 243 578 1 +111 382 205 757 1 +544 645 578 335 1 +544 421 645 335 1 +631 335 645 421 1 +631 335 407 645 1 +645 421 544 289 1 +75 645 544 289 1 +75 175 645 289 1 +645 175 421 289 1 +442 321 646 502 1 +646 412 457 126 1 +272 646 457 126 1 +272 574 646 126 1 +574 412 646 126 1 +272 234 457 646 1 +272 104 234 646 1 +475 595 434 647 1 +475 372 595 647 1 +648 141 158 461 1 +18 141 158 648 1 +648 141 194 18 1 +194 18 298 648 1 +648 18 298 478 1 +194 648 298 478 1 +194 648 478 476 1 +648 399 478 476 1 +194 399 648 476 1 +399 141 194 648 1 +336 468 649 547 1 +468 547 189 649 1 +189 649 166 468 1 +736 585 388 334 1 +424 585 736 334 1 +623 462 651 378 1 +651 462 437 378 1 +315 462 437 651 1 +659 325 508 546 1 +382 508 659 325 1 +429 651 590 315 1 +590 651 443 315 1 +462 315 443 651 1 +623 462 443 651 1 +653 304 447 583 1 +356 653 447 583 1 +354 712 511 369 1 +269 661 420 488 1 +350 505 602 680 1 +269 661 488 119 1 +447 356 541 653 1 +653 447 410 541 1 +594 653 410 541 1 +594 447 410 653 1 +359 447 594 653 1 +583 525 653 304 1 +304 525 653 523 1 +713 217 491 66 1 +92 217 491 713 1 +92 217 713 66 1 +393 444 487 654 1 +393 654 487 349 1 +655 439 373 324 1 +398 439 655 324 1 +528 373 207 655 1 +467 755 455 123 1 +133 528 207 655 1 +1 238 380 657 1 +1 238 657 182 1 +238 76 657 182 1 +657 76 471 182 1 +657 471 392 182 1 +471 657 606 76 1 +657 238 606 76 1 +599 658 471 315 1 +346 658 471 599 1 +315 389 590 658 1 +315 437 658 651 1 +59 279 659 214 1 +59 279 205 659 1 +59 246 659 205 1 +659 246 508 205 1 +382 508 205 659 1 +59 246 508 659 1 +439 660 582 343 1 +541 660 439 343 1 +309 660 439 541 1 +309 660 541 356 1 +356 660 433 309 1 +356 583 433 660 1 +439 309 582 660 1 +197 661 510 420 1 +420 197 661 269 1 +439 669 373 582 1 +662 358 452 414 1 +662 358 414 568 1 +308 662 414 568 1 +452 432 358 662 1 +358 662 432 596 1 +662 329 432 596 1 +452 432 662 329 1 +329 489 662 452 1 +489 662 452 377 1 +580 663 24 346 1 +230 346 24 663 1 +230 663 24 565 1 +565 663 24 419 1 +580 419 24 663 1 +230 565 76 663 1 +230 663 76 471 1 +230 346 663 471 1 +446 450 349 664 1 +584 664 349 450 1 +664 279 659 450 1 +214 279 659 664 1 +644 19 446 664 1 +633 254 665 414 1 +389 510 34 666 1 +287 389 34 666 1 +287 666 34 265 1 +265 34 130 666 1 +130 34 273 666 1 +287 606 666 265 1 +473 666 606 265 1 +473 389 606 666 1 +287 389 666 606 1 +389 365 666 473 1 +473 666 589 365 1 +389 365 510 666 1 +148 57 503 668 1 +439 309 669 582 1 +405 363 598 700 1 +363 598 700 600 1 +700 312 499 445 1 +700 598 312 600 1 +528 348 669 439 1 +528 669 373 439 1 +591 528 669 373 1 +486 591 669 373 1 +591 528 348 669 1 +451 299 162 670 1 +162 299 247 670 1 +37 670 162 247 1 +37 428 670 247 1 +709 487 343 402 1 +709 314 487 402 1 +357 314 709 402 1 +428 451 670 340 1 +432 114 671 248 1 +257 114 248 671 1 +489 690 308 377 1 +672 319 620 423 1 +493 169 725 134 1 +408 319 620 672 1 +564 322 434 673 1 +673 322 434 526 1 +673 526 434 340 1 +673 340 434 670 1 +670 602 434 673 1 +673 553 340 670 1 +673 222 553 670 1 +222 299 670 673 1 +250 222 553 673 1 +250 387 673 553 1 +473 743 589 330 1 +387 526 673 340 1 +387 322 673 526 1 +387 322 564 673 1 +387 32 673 564 1 +673 32 250 564 1 +387 32 250 673 1 +521 448 675 313 1 +448 507 675 313 1 +521 609 675 448 1 +521 369 675 609 1 +426 369 675 521 1 +426 369 576 675 1 +675 532 385 672 1 +333 532 675 672 1 +750 359 449 342 1 +750 706 342 449 1 +320 411 465 676 1 +615 320 465 676 1 +519 615 465 676 1 +447 359 750 342 1 +677 391 482 324 1 +582 677 482 324 1 +351 677 482 582 1 +351 391 482 677 1 +343 402 678 523 1 +523 343 594 678 1 +678 343 594 444 1 +444 487 678 343 1 +487 402 678 343 1 +487 402 305 678 1 +444 487 305 678 1 +359 586 477 678 1 +679 321 520 636 1 +463 321 679 636 1 +401 679 636 463 1 +351 463 679 401 1 +588 679 401 351 1 +373 679 401 588 1 +373 679 669 401 1 +679 309 669 401 1 +350 505 680 540 1 +22 505 195 680 1 +22 195 159 680 1 +469 316 361 682 1 +361 491 682 316 1 +682 491 404 316 1 +361 491 404 682 1 +714 538 610 539 1 +682 603 566 361 1 +361 469 682 603 1 +741 14 534 395 1 +331 603 566 682 1 +331 566 404 682 1 +485 331 404 682 1 +683 13 377 652 1 +129 13 683 652 1 +129 13 226 683 1 +226 13 451 683 1 +683 129 617 226 1 +472 129 617 683 1 +452 129 472 683 1 +727 107 440 284 1 +15 727 440 284 1 +390 632 684 488 1 +684 632 368 488 1 +338 498 386 684 1 +338 684 420 498 1 +679 321 685 520 1 +685 321 430 520 1 +679 685 430 520 1 +351 685 430 679 1 +430 685 351 677 1 +567 685 677 351 1 +567 395 685 351 1 +567 395 677 685 1 +463 321 530 685 1 +583 304 447 735 1 +447 304 587 735 1 +587 561 718 735 1 +587 304 561 735 1 +735 304 522 583 1 +378 735 522 583 1 +687 622 465 124 1 +362 622 465 687 1 +687 362 559 465 1 +687 362 170 559 1 +735 561 718 360 1 +492 319 688 445 1 +327 476 738 478 1 +363 600 445 688 1 +9 704 191 400 1 +114 671 689 681 1 +690 308 626 526 1 +28 724 423 516 1 +724 28 253 256 1 +724 385 423 516 1 +340 690 387 526 1 +536 529 233 691 1 +691 529 233 424 1 +536 691 233 424 1 +529 585 424 691 1 +691 585 424 334 1 +529 585 691 334 1 +611 334 438 691 1 +328 611 438 691 1 +328 438 571 691 1 +640 382 111 692 1 +237 640 111 692 1 +432 612 212 692 1 +455 593 707 215 1 +153 455 519 707 1 +455 707 153 215 1 +498 693 507 386 1 +498 693 338 507 1 +507 338 385 693 1 +360 522 561 694 1 +325 719 453 546 1 +694 360 512 429 1 +307 694 512 429 1 +572 546 719 367 1 +446 719 546 367 1 +719 710 367 575 1 +466 572 339 719 1 +484 307 694 512 1 +616 570 196 695 1 +64 695 570 616 1 +64 488 695 616 1 +64 695 488 259 1 +695 628 488 259 1 +695 106 628 259 1 +570 106 695 259 1 +64 570 695 259 1 +507 386 696 492 1 +386 492 347 696 1 +656 697 415 405 1 +656 69 697 405 1 +656 69 415 697 1 +698 336 547 468 1 +336 467 698 547 1 +336 467 580 698 1 +698 467 580 239 1 +60 467 698 239 1 +699 410 558 320 1 +558 320 441 699 1 +441 320 483 699 1 +483 356 699 320 1 +699 356 410 320 1 +441 483 379 699 1 +699 318 558 541 1 +439 318 699 541 1 +309 439 699 541 1 +309 439 669 699 1 +439 318 558 699 1 +405 700 598 312 1 +363 600 700 445 1 +688 445 363 700 1 +682 316 404 701 1 +682 701 404 355 1 +601 701 355 404 1 +601 457 355 701 1 +520 701 355 457 1 +321 701 520 457 1 +321 502 701 457 1 +321 502 520 701 1 +355 433 701 520 1 +701 433 316 520 1 +433 316 682 701 1 +433 701 682 355 1 +516 381 729 628 1 +618 409 702 317 1 +417 618 702 317 1 +417 556 317 702 1 +484 326 702 499 1 +484 326 407 702 1 +335 484 407 702 1 +578 335 400 702 1 +442 264 77 703 1 +703 264 77 689 1 +77 689 671 703 1 +681 703 671 689 1 +681 703 689 144 1 +703 264 689 144 1 +703 144 36 264 1 +633 703 36 264 1 +442 703 633 264 1 +686 144 36 703 1 +568 358 703 442 1 +141 427 35 705 1 +141 461 427 705 1 +461 318 427 705 1 +705 318 427 398 1 +461 318 705 398 1 +398 461 91 705 1 +705 461 91 255 1 +141 461 705 255 1 +323 706 429 481 1 +575 446 719 325 1 +751 89 585 533 1 +481 548 323 706 1 +706 548 323 498 1 +548 693 706 313 1 +693 313 507 706 1 +455 352 707 593 1 +428 418 708 317 1 +708 418 545 317 1 +428 708 545 317 1 +428 708 451 545 1 +708 418 451 545 1 +709 582 677 430 1 +430 709 582 343 1 +709 487 582 343 1 +343 660 430 709 1 +325 710 575 402 1 +720 499 317 418 1 +575 367 305 710 1 +710 367 305 466 1 +466 609 305 710 1 +710 609 305 448 1 +466 609 710 448 1 +337 543 416 720 1 +720 337 543 415 1 +420 711 323 498 1 +498 711 323 429 1 +711 365 323 429 1 +420 365 323 711 1 +420 661 365 711 1 +661 711 420 488 1 +661 390 711 488 1 +654 396 560 712 1 +560 396 511 712 1 +712 396 305 654 1 +444 712 305 654 1 +477 444 712 305 1 +712 305 609 477 1 +477 444 354 712 1 +361 436 566 713 1 +713 436 566 229 1 +566 229 92 713 1 +229 436 554 713 1 +713 436 554 361 1 +714 610 354 393 1 +714 461 354 610 1 +586 461 354 714 1 +586 714 354 444 1 +318 714 586 444 1 +714 318 439 444 1 +398 318 439 714 1 +318 461 586 714 1 +394 46 291 715 1 +46 394 479 715 1 +715 597 394 479 1 +371 597 715 479 1 +371 715 622 479 1 +371 597 394 715 1 +371 455 715 394 1 +519 455 715 371 1 +39 519 715 371 1 +153 715 519 455 1 +153 127 715 455 1 +153 127 302 715 1 +138 127 715 302 1 +46 479 274 715 1 +717 419 131 51 1 +112 419 131 717 1 +112 419 717 510 1 +587 386 706 718 1 +587 561 386 718 1 +718 386 694 561 1 +718 561 694 360 1 +429 718 694 360 1 +651 718 429 360 1 +310 736 647 374 1 +736 310 613 374 1 +342 718 429 651 1 +388 736 613 374 1 +323 706 498 718 1 +453 598 339 719 1 +719 598 339 494 1 +719 325 598 494 1 +453 325 598 719 1 +466 572 719 367 1 +710 719 367 466 1 +312 700 720 405 1 +720 700 366 405 1 +366 720 405 656 1 +720 415 405 656 1 +366 720 499 700 1 +720 312 499 700 1 +720 499 418 366 1 +337 416 545 720 1 +545 416 317 720 1 +569 435 204 722 1 +722 435 204 635 1 +722 635 204 8 1 +569 722 204 8 1 +412 722 569 8 1 +412 574 722 8 1 +634 722 574 8 1 +722 634 635 8 1 +634 646 574 722 1 +412 574 646 722 1 +526 690 308 723 1 +526 340 690 723 1 +489 357 555 723 1 +723 357 555 624 1 +416 357 723 624 1 +489 357 723 416 1 +555 747 341 422 1 +672 385 724 532 1 +408 672 724 532 1 +408 672 620 724 1 +620 408 724 260 1 +620 724 253 260 1 +620 423 253 724 1 +423 28 253 724 1 +726 484 492 326 1 +726 307 492 484 1 +631 307 726 484 1 +307 390 631 726 1 +631 390 407 726 1 +307 390 726 684 1 +684 307 492 726 1 +368 684 492 726 1 +545 728 723 619 1 +728 364 723 619 1 +619 364 475 728 1 +728 364 475 409 1 +619 728 475 409 1 +317 728 619 409 1 +409 728 702 317 1 +409 728 484 702 1 +409 347 484 728 1 +409 364 522 728 1 +522 364 624 728 1 +364 624 728 416 1 +364 723 416 728 1 +723 545 416 728 1 +323 381 729 548 1 +195 680 730 97 1 +195 680 540 730 1 +195 540 53 730 1 +188 584 732 30 1 +188 584 391 732 1 +578 335 731 544 1 +156 544 578 731 1 +156 235 544 731 1 +544 513 731 235 1 +731 513 374 235 1 +544 513 374 731 1 +622 362 734 687 1 +622 687 734 124 1 +17 622 734 300 1 +300 622 734 124 1 +17 459 734 622 1 +734 459 362 622 1 +587 735 718 342 1 +447 735 587 342 1 +437 735 447 342 1 +437 378 735 342 1 +437 378 447 735 1 +583 735 447 378 1 +378 360 623 735 1 +378 735 651 360 1 +424 334 736 611 1 +372 424 736 611 1 +372 611 736 647 1 +647 611 736 310 1 +440 616 423 737 1 +620 737 440 423 1 +620 319 737 423 1 +672 319 423 737 1 +620 319 440 737 1 +737 319 440 688 1 +368 737 440 688 1 +440 616 737 368 1 +616 695 737 368 1 +338 684 386 737 1 +737 684 386 492 1 +737 386 507 492 1 +507 696 737 492 1 +338 386 507 737 1 +79 372 739 431 1 +752 394 604 346 1 +552 753 379 515 1 +599 752 346 437 1 +332 752 599 437 1 +752 460 332 599 1 +603 740 331 480 1 +682 740 331 603 1 +682 469 740 603 1 +469 682 740 433 1 +740 682 331 433 1 +483 740 331 433 1 +740 469 433 637 1 +627 469 740 637 1 +671 741 14 530 1 +288 14 741 530 1 +671 395 14 741 1 +395 685 351 741 1 +741 685 351 463 1 +288 534 176 741 1 +741 534 176 567 1 +742 397 413 716 1 +370 742 413 716 1 +370 397 742 716 1 +306 742 397 571 1 +390 711 631 743 1 +631 711 307 743 1 +711 743 429 307 1 +711 365 429 743 1 +429 365 590 743 1 +711 661 365 743 1 +589 365 661 743 1 +473 365 589 743 1 +390 743 631 421 1 +369 61 497 745 1 +369 497 426 745 1 +369 61 745 155 1 +186 385 524 746 1 +256 385 186 746 1 +385 724 746 256 1 +746 724 532 256 1 +385 724 532 746 1 +385 746 532 675 1 +675 746 532 576 1 +675 426 746 576 1 +385 426 746 675 1 +747 475 495 322 1 +322 747 573 495 1 +322 422 573 747 1 +422 526 747 322 1 +422 364 747 526 1 +555 364 747 422 1 +304 624 748 531 1 +624 357 748 531 1 +624 357 525 748 1 +357 709 525 748 1 +748 709 525 402 1 +357 709 748 402 1 +304 525 748 624 1 +304 525 523 748 1 +523 525 343 748 1 +447 449 311 750 1 +750 557 449 311 1 +750 336 449 557 1 +481 336 750 557 1 +336 548 481 750 1 +481 548 706 750 1 +548 706 750 449 1 +336 548 750 449 1 +447 359 449 750 1 +751 99 266 240 1 +424 99 266 751 1 +739 424 266 751 1 +79 739 266 751 1 +79 431 739 751 1 +739 372 751 431 1 +372 751 431 736 1 +736 388 751 431 1 +431 388 751 621 1 +751 388 26 621 1 +431 751 26 621 1 +388 89 751 26 1 +372 424 751 736 1 +739 372 424 751 1 +552 50 379 753 1 +227 50 552 753 1 +165 655 207 754 1 +139 49 486 754 1 +376 755 455 467 1 +756 702 407 400 1 +756 407 551 400 1 +335 702 407 756 1 +645 407 756 335 1 +645 756 578 335 1 +645 756 243 578 1 +9 756 578 243 1 +9 704 756 243 1 +243 756 95 704 1 +231 756 95 243 1 +231 645 756 243 1 +231 407 756 645 1 +231 407 95 756 1 +End diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/mesh_and_remesh_polyhedral_domain_with_features.cpp b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/mesh_and_remesh_polyhedral_domain_with_features.cpp new file mode 100644 index 00000000000..d8ae3c79401 --- /dev/null +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/mesh_and_remesh_polyhedral_domain_with_features.cpp @@ -0,0 +1,75 @@ +#include + +#include +#include +#include + +#include +#include + +#include + +// Domain +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef CGAL::Mesh_polyhedron_3::type Polyhedron; +typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; + +// Triangulation for Meshing +typedef CGAL::Mesh_triangulation_3::type Tr; +typedef CGAL::Mesh_complex_3_in_triangulation_3< + Tr, Mesh_domain::Corner_index, Mesh_domain::Curve_index> C3t3; + +// Criteria +typedef CGAL::Mesh_criteria_3 Mesh_criteria; + +// Triangulation for Remeshing +typedef CGAL::Triangulation_3 Triangulation_3; + +// To avoid verbose function and named parameters call +using namespace CGAL::parameters; + +int main(int argc, char* argv[]) +{ + const char* fname = (argc > 1) ? argv[1] : "data/fandisk.off"; + std::ifstream input(fname); + Polyhedron polyhedron; + input >> polyhedron; + if (input.fail()) { + std::cerr << "Error: Cannot read file " << fname << std::endl; + return EXIT_FAILURE; + } + + if (!CGAL::is_triangle_mesh(polyhedron)) { + std::cerr << "Input geometry is not triangulated." << std::endl; + return EXIT_FAILURE; + } + + // Create domain + Mesh_domain domain(polyhedron); + + // Get sharp features + domain.detect_features(); + + // Mesh criteria + Mesh_criteria criteria(edge_size = 0.025, + facet_angle = 25, facet_size = 0.05, facet_distance = 0.005, + cell_radius_edge_ratio = 3, cell_size = 0.05); + + // Mesh generation + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria); + + Triangulation_3 tr = CGAL::convert_to_triangulation_3(std::move(c3t3)); + //note we use the move semantic, with std::move(c3t3), + // to avoid a copy of the triangulation by the function + // `CGAL::convert_to_triangulation_3()` + // After the call to this function, c3t3 is an empty and valid C3t3. + //It is possible to use : CGAL::convert_to_triangulation_3(c3t3), + // Then the triangulation is copied and duplicated, and c3t3 remains as is. + + const double target_edge_length = 0.1;//coarsen the mesh + CGAL::tetrahedral_isotropic_remeshing(tr, target_edge_length, + CGAL::parameters::number_of_iterations(3)); + + return EXIT_SUCCESS; +} diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp index da292fe7d0a..dc67ae6fa67 100644 --- a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp @@ -3,7 +3,6 @@ #include #include -#include #include "tetrahedral_remeshing_generate_input.h" #include @@ -14,7 +13,6 @@ typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Tetrahedral_remeshing::Remeshing_triangulation_3 Remeshing_triangulation; - int main(int argc, char* argv[]) { const double target_edge_length = (argc > 1) ? atof(argv[1]) : 0.1; diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp new file mode 100644 index 00000000000..83565e56341 --- /dev/null +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp @@ -0,0 +1,30 @@ +#include + +#include +#include + +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; + +typedef CGAL::Tetrahedral_remeshing::Remeshing_triangulation_3 Remeshing_triangulation; + +int main(int argc, char* argv[]) +{ + const char* filename = (argc > 1) ? argv[1] : "data/sphere.mesh"; + const double target_edge_length = (argc > 2) ? atof(argv[2]) : 0.1; + + Remeshing_triangulation tr; + + std::ifstream is(filename, std::ios_base::in); + CGAL::read_MEDIT(is, tr); + + CGAL::tetrahedral_isotropic_remeshing(tr, target_edge_length); + + std::ofstream os("after_remeshing.mesh"); + CGAL::write_MEDIT(os, tr); + + return EXIT_SUCCESS; +} diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp index 581dd0a85db..9135cf65a15 100644 --- a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp @@ -79,9 +79,7 @@ int main(int argc, char* argv[]) boost::unordered_set > constraints; CGAL::Tetrahedral_remeshing::generate_input_cube(nbv, t3, constraints); - make_constraints_from_cube_edges(t3, constraints); - CGAL_assertion(t3.is_valid()); CGAL::tetrahedral_isotropic_remeshing(t3, target_edge_length, diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/collapse_short_edges.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/collapse_short_edges.h index 7ccc110d4fe..5f7f34dfb7e 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/collapse_short_edges.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/collapse_short_edges.h @@ -54,12 +54,13 @@ class CollapseTriangulation typedef typename C3t3::Cell_handle Cell_handle; typedef typename C3t3::Vertex_handle Vertex_handle; typedef typename C3t3::Subdomain_index Subdomain_index; + typedef typename C3t3::Surface_patch_index Surface_patch_index; typedef typename C3t3::Triangulation::Point Point_3; typedef typename C3t3::Triangulation::Geom_traits::Vector_3 Vector_3; public: - CollapseTriangulation(C3t3& c3t3, - const Edge& e, + CollapseTriangulation(const Edge& e, + const std::unordered_set& cells_to_insert, Collapse_type _collapse_type) : collapse_type(_collapse_type) , v0_init(e.first->vertex(e.second)) @@ -68,14 +69,6 @@ public: typedef std::array Facet; // 3 = id typedef std::array Tet_with_ref; // first 4 = id, fifth = reference - std::unordered_set cells_to_insert; - c3t3.triangulation().finite_incident_cells(v0_init, - std::inserter(cells_to_insert, cells_to_insert.end())); - c3t3.triangulation().finite_incident_cells(v1_init, - std::inserter(cells_to_insert, cells_to_insert.end())); - - make_cells_set_manifold(c3t3, cells_to_insert); - std::unordered_set vertices_to_insert; for (Cell_handle ch : cells_to_insert) { @@ -115,7 +108,7 @@ public: // finished std::vector new_vertices; - std::map border_facets; + std::map border_facets; if (CGAL::build_triangulation(triangulation, points, finite_cells, border_facets, new_vertices, false/*verbose*/)) @@ -144,58 +137,6 @@ public: #endif } - void make_cells_set_manifold(const C3t3& c3t3, - std::unordered_set& cells) - { - typedef Vertex_handle Vh; - typedef std::array FV; - typedef std::pair EV; - - boost::unordered_map facets; - for (Cell_handle c : cells) - { - for (int i = 0; i < 4; ++i) - { - const FV fvi = make_vertex_array(c->vertex((i + 1) % 4), - c->vertex((i + 2) % 4), - c->vertex((i + 3) % 4)); - typename boost::unordered_map::iterator fit = facets.find(fvi); - if(fit == facets.end()) - facets.insert(std::make_pair(fvi, 1)); - else - fit->second++; - } - } - - boost::unordered_map edges; - for (const std::pair& fvv : facets) - { - if(fvv.second != 1) - continue; - - for (int i = 0; i < 3; ++i) - { - const EV evi = make_vertex_pair(fvv.first[i], fvv.first[(i + 1) % 3]); - typename boost::unordered_map::iterator eit = edges.find(evi); - if (eit == edges.end()) - edges.insert(std::make_pair(evi, 1)); - else - eit->second++; - } - } - - for (const std::pair& evv : edges) - { - if (evv.second != 2) - { - c3t3.triangulation().finite_incident_cells(evv.first.first, - std::inserter(cells, cells.begin())); - c3t3.triangulation().finite_incident_cells(evv.first.second, - std::inserter(cells, cells.begin())); - } - } - } - Result_type collapse() { if (not_an_edge) @@ -1038,6 +979,55 @@ typename C3t3::Vertex_handle collapse(typename C3t3::Edge& edge, return vh; } +template +bool is_cells_set_manifold(const C3t3&, + std::unordered_set& cells) +{ + typedef typename C3t3::Cell_handle Cell_handle; + typedef typename C3t3::Vertex_handle Vh; + typedef std::array FV; + typedef std::pair EV; + + boost::unordered_map facets; + for (Cell_handle c : cells) + { + for (int i = 0; i < 4; ++i) + { + const FV fvi = make_vertex_array(c->vertex((i + 1) % 4), + c->vertex((i + 2) % 4), + c->vertex((i + 3) % 4)); + typename boost::unordered_map::iterator fit = facets.find(fvi); + if (fit == facets.end()) + facets.insert(std::make_pair(fvi, 1)); + else + fit->second++; + } + } + + boost::unordered_map edges; + for (const std::pair& fvv : facets) + { + if (fvv.second != 1) + continue; + + for (int i = 0; i < 3; ++i) + { + const EV evi = make_vertex_pair(fvv.first[i], fvv.first[(i + 1) % 3]); + typename boost::unordered_map::iterator eit = edges.find(evi); + if (eit == edges.end()) + edges.insert(std::make_pair(evi, 1)); + else + eit->second++; + } + } + + for (const std::pair& evv : edges) + if (evv.second != 2) + return false; + + return true; +} + template typename C3t3::Vertex_handle collapse_edge(typename C3t3::Edge& edge, C3t3& c3t3, @@ -1049,6 +1039,7 @@ typename C3t3::Vertex_handle collapse_edge(typename C3t3::Edge& edge, typedef typename C3t3::Triangulation Tr; typedef typename Tr::Point Point; typedef typename Tr::Vertex_handle Vertex_handle; + typedef typename Tr::Cell_handle Cell_handle; const Vertex_handle v0 = edge.first->vertex(edge.second); const Vertex_handle v1 = edge.first->vertex(edge.third); @@ -1121,7 +1112,19 @@ typename C3t3::Vertex_handle collapse_edge(typename C3t3::Edge& edge, CGAL_assertion(c3t3.triangulation().is_edge(edge.first->vertex(edge.second), edge.first->vertex(edge.third), dc, di, dj)); - CollapseTriangulation local_tri(c3t3, edge, collapse_type); + Vertex_handle v0_init = edge.first->vertex(edge.second); + Vertex_handle v1_init = edge.first->vertex(edge.third); + + std::unordered_set cells_to_insert; + c3t3.triangulation().finite_incident_cells(v0_init, + std::inserter(cells_to_insert, cells_to_insert.end())); + c3t3.triangulation().finite_incident_cells(v1_init, + std::inserter(cells_to_insert, cells_to_insert.end())); + + if(!is_cells_set_manifold(c3t3, cells_to_insert)) + return Vertex_handle(); + + CollapseTriangulation local_tri(edge, cells_to_insert, collapse_type); Result_type res = local_tri.collapse(); if (res == VALID) diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/smooth_vertices.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/smooth_vertices.h index 947123166e0..fc9cf93d1dc 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/smooth_vertices.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/smooth_vertices.h @@ -51,10 +51,13 @@ private: typedef CGAL::Tetrahedral_remeshing::internal::FMLS FMLS; std::vector subdomain_FMLS; boost::unordered_map subdomain_FMLS_indices; + bool m_smooth_constrained_edges; public: template - void init(const C3t3& c3t3, const CellSelector& cell_selector) + void init(const C3t3& c3t3, + const CellSelector& cell_selector, + const bool smooth_constrained_edges) { //collect a map of vertices surface indices boost::unordered_map > vertices_surface_indices; @@ -71,6 +74,8 @@ public: vertices_normals, vertices_surface_indices, c3t3); + + m_smooth_constrained_edges = smooth_constrained_edges; } private: @@ -320,7 +325,7 @@ private: } template - void check_inversion_and_move(const typename Tr::Vertex_handle v, + bool check_inversion_and_move(const typename Tr::Vertex_handle v, const typename Tr::Point& final_pos, const CellRange& inc_cells, const Tr& /* tr */) @@ -357,6 +362,8 @@ private: if (!valid_orientation) //move failed v->set_point(backup); + + return valid_orientation; } void collect_vertices_surface_indices( @@ -399,16 +406,16 @@ public: #ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE std::cout << "Smooth vertices..."; std::cout.flush(); - std::size_t nb_done = 0; #endif + std::size_t nb_done = 0; Tr& tr = c3t3.triangulation(); -#ifdef CGAL_TETRAHEDRAL_REMESHING_SMOOTH_SHARP_EDGES //collect a map of vertices surface indices boost::unordered_map > vertices_surface_indices; - collect_vertices_surface_indices(c3t3, vertices_surface_indices); -#endif + if(m_smooth_constrained_edges) + collect_vertices_surface_indices(c3t3, vertices_surface_indices); + //collect a map of normals at surface vertices boost::unordered_map > vertices_normals; @@ -439,9 +446,8 @@ public: } } - if (!protect_boundaries) + if (!protect_boundaries && m_smooth_constrained_edges) { -#ifdef CGAL_TETRAHEDRAL_REMESHING_SMOOTH_SHARP_EDGES /////////////// EDGES IN COMPLEX ////////////////// //collect neighbors for (const Edge& e : tr.finite_edges()) @@ -511,11 +517,12 @@ public: final_position = smoothed_position; #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG - os_surf << "2 " << current_pos << " " << final_position << std::endl, + os_surf << "2 " << current_pos << " " << final_position << std::endl; #endif - // move vertex - v->set_point(typename Tr::Point( - final_position.x(), final_position.y(), final_position.z())); + // move vertex + const typename Tr::Point new_pos(final_position.x(), final_position.y(), final_position.z()); + if(check_inversion_and_move(v, new_pos, inc_cells[vid], tr)) + nb_done++; } else if (neighbors[vid] > 0) { @@ -544,19 +551,22 @@ public: final_position = current_pos; #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG - os_surf << "2 " << current_pos << " " << final_position << std::endl, + os_surf << "2 " << current_pos << " " << final_position << std::endl; #endif - // move vertex - v->set_point( - typename Tr::Point(final_position.x(), final_position.y(), final_position.z())); + // move vertex + const typename Tr::Point new_pos(final_position.x(), final_position.y(), final_position.z()); + if(check_inversion_and_move(v, new_pos, inc_cells[vid], tr)) + nb_done++; } } -#endif //CGAL_TETRAHEDRAL_REMESHING_SMOOTH_SHARP_EDGES + } - smoothed_positions.assign(nbv, CGAL::NULL_VECTOR); - neighbors.assign(nbv, -1); + smoothed_positions.assign(nbv, CGAL::NULL_VECTOR); + neighbors.assign(nbv, -1); - /////////////// EDGES ON SURFACE, BUT NOT IN COMPLEX ////////////////// + /////////////// EDGES ON SURFACE, BUT NOT IN COMPLEX ////////////////// + if (!protect_boundaries) + { for (const Edge& e : tr.finite_edges()) { if (is_boundary(c3t3, e, cell_selector) && !c3t3.is_in_complex(e)) @@ -615,12 +625,11 @@ public: final_position = smoothed_position; #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG - os_surf << "2 " << current_pos << " " << final_position << std::endl, + os_surf << "2 " << current_pos << " " << final_position << std::endl; #endif - check_inversion_and_move(v, typename Tr::Point( - final_position.x(), final_position.y(), final_position.z()), - inc_cells[vid], - tr); + const typename Tr::Point new_pos(final_position.x(), final_position.y(), final_position.z()); + if(check_inversion_and_move(v, new_pos, inc_cells[vid], tr)) + nb_done++; } else if (neighbors[vid] > 0) { @@ -632,7 +641,8 @@ public: if (boost::optional mls_projection = project(si, current_pos)) { const typename Tr::Point new_pos(CGAL::ORIGIN + *mls_projection); - check_inversion_and_move(v, new_pos, inc_cells[vid], tr); + if(check_inversion_and_move(v, new_pos, inc_cells[vid], tr)) + nb_done++; #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG os_surf0 << "2 " << current_pos << " " << new_pos << std::endl; @@ -678,14 +688,13 @@ public: const std::size_t& vid = vertex_id.at(v); if (c3t3.in_dimension(v) == 3 && neighbors[vid] > 1) { -#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE - ++nb_done; -#endif #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG os_vol << "2 " << point(v->point()); #endif const Vector_3 p = smoothed_positions[vid] / static_cast(neighbors[vid]); - check_inversion_and_move(v, typename Tr::Point(p.x(), p.y(), p.z()), inc_cells[vid], tr); + typename Tr::Point new_pos(p.x(), p.y(), p.z()); + if(check_inversion_and_move(v, new_pos, inc_cells[vid], tr)) + nb_done++; #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG os_vol << " " << point(v->point()) << std::endl; diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/split_long_edges.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/split_long_edges.h index 0c6f19a30c9..e00d896bf39 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/split_long_edges.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/split_long_edges.h @@ -53,7 +53,7 @@ typename C3t3::Vertex_handle split_edge(const typename C3t3::Edge& e, (point(v1->point()), point(v2->point())); //backup subdomain info of incident cells before making changes - short dimension = (c3t3.is_in_complex(e)) ? 1 : 3; + short dimension = (std::max)((std::max)(1, c3t3.in_dimension(v1)), c3t3.in_dimension(v2)); boost::unordered_map cells_info; boost::unordered_map > facets_info; @@ -110,11 +110,6 @@ typename C3t3::Vertex_handle split_edge(const typename C3t3::Edge& e, // surface data for facets of the cells to be split const int findex = CGAL::Triangulation_utils_3::next_around_edge(index_v1, index_v2); - if (c3t3.is_in_complex(c, findex)) - { - if (dimension == 3) - dimension = 2; - } Surface_patch_index patch = c3t3.surface_patch_index(c, findex); Vertex_handle opp_vertex = c->vertex(findex); facets_info.insert(std::make_pair(opp_facet1, @@ -179,6 +174,8 @@ typename C3t3::Vertex_handle split_edge(const typename C3t3::Edge& e, // will have its patch tagged from the other side, if needed } + set_index(new_v, c3t3); + return new_v; } diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h index 8197843eda7..fb942deddcf 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h @@ -30,6 +30,7 @@ #include #include +#include namespace CGAL { @@ -103,6 +104,8 @@ class Adaptive_remesher typedef typename C3t3::Vertex_handle Vertex_handle; typedef typename C3t3::Subdomain_index Subdomain_index; typedef typename C3t3::Surface_patch_index Surface_patch_index; + typedef typename C3t3::Curve_index Curve_index; + typedef typename C3t3::Corner_index Corner_index; typedef Tetrahedral_remeshing_smoother Smoother; @@ -123,6 +126,7 @@ public: , const bool protect_boundaries , EdgeIsConstrainedMap ecmap , FacetIsConstrainedMap fcmap + , bool smooth_constrained_edges , CellSelector cell_selector , Visitor& visitor ) @@ -137,10 +141,12 @@ public: m_c3t3.triangulation().swap(tr); init_c3t3(ecmap, fcmap); - m_vertex_smoother.init(m_c3t3, m_cell_selector); + m_vertex_smoother.init(m_c3t3, m_cell_selector, smooth_constrained_edges); #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "00-init"); + CGAL::Tetrahedral_remeshing::debug::dump_facets_in_complex(m_c3t3, + "00-facets_in_complex_after_init.off"); #endif } @@ -149,6 +155,7 @@ public: , const bool protect_boundaries , EdgeIsConstrainedMap ecmap , FacetIsConstrainedMap fcmap + , bool smooth_constrained_edges , CellSelector cell_selector , Visitor& visitor ) @@ -163,10 +170,12 @@ public: m_c3t3.swap(c3t3); init_c3t3(ecmap, fcmap); - m_vertex_smoother.init(m_c3t3, m_cell_selector); + m_vertex_smoother.init(m_c3t3, m_cell_selector, smooth_constrained_edges); #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "00-init"); + CGAL::Tetrahedral_remeshing::debug::dump_facets_in_complex(m_c3t3, + "00-facets_in_complex_after_init.off"); #endif } @@ -184,8 +193,14 @@ public: split_long_edges(m_c3t3, emax, m_protect_boundaries, m_cell_selector, m_visitor); +#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG CGAL_assertion(tr().tds().is_valid(true)); CGAL_assertion(debug::are_cell_orientations_valid(tr())); + CGAL::Tetrahedral_remeshing::debug::dump_facets_in_complex(m_c3t3, + "1-facets_in_complex_after_split.off"); + CGAL::Tetrahedral_remeshing::debug::dump_vertices_by_dimension( + m_c3t3.triangulation(), "1-c3t3_vertices_after_split"); +#endif #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "1-split"); #endif @@ -201,8 +216,12 @@ public: collapse_short_edges(m_c3t3, emin, emax, m_protect_boundaries, m_cell_selector, m_visitor); +#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG CGAL_assertion(tr().tds().is_valid(true)); CGAL_assertion(debug::are_cell_orientations_valid(tr())); + CGAL::Tetrahedral_remeshing::debug::dump_vertices_by_dimension( + m_c3t3.triangulation(), "2-c3t3_vertices_after_collapse"); +#endif #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "2-collapse"); #endif @@ -213,8 +232,12 @@ public: flip_edges(m_c3t3, m_protect_boundaries, m_cell_selector, m_visitor); +#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG CGAL_assertion(tr().tds().is_valid(true)); CGAL_assertion(debug::are_cell_orientations_valid(tr())); + CGAL::Tetrahedral_remeshing::debug::dump_vertices_by_dimension( + m_c3t3.triangulation(), "3-c3t3_vertices_after_flip"); +#endif #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "3-flip"); #endif @@ -224,8 +247,12 @@ public: { m_vertex_smoother.smooth_vertices(m_c3t3, m_protect_boundaries, m_cell_selector); +#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG CGAL_assertion(tr().tds().is_valid(true)); CGAL_assertion(debug::are_cell_orientations_valid(tr())); + CGAL::Tetrahedral_remeshing::debug::dump_vertices_by_dimension( + m_c3t3.triangulation(), "4-c3t3_vertices_after_smooth"); +#endif #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "4-smooth"); #endif @@ -261,7 +288,7 @@ public: } //peel off slivers - std::size_t postprocess(const double sliver_angle = 0.1) + std::size_t postprocess(const double sliver_angle = 2.) { if (m_protect_boundaries) return 0; @@ -273,52 +300,52 @@ public: std::size_t nb_slivers_peel = 0; std::vector > > peelable_cells; +#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE + double mindh = 180.; +#endif for (Cell_handle cit : tr().finite_cell_handles()) { std::array facets_on_surface; - short count = 0; - if(m_c3t3.is_in_complex(cit) && min_dihedral_angle(tr(), cit) < sliver_angle) + if (m_c3t3.is_in_complex(cit)) { - for (int i = 0; i < 4; ++i) - { - if (!m_c3t3.is_in_complex(cit->neighbor(i))) - { - facets_on_surface[i] = true; - ++count; - } - else - facets_on_surface[i] = false; - } - if(count > 1) + const double dh = min_dihedral_angle(tr(), cit); + if(dh < sliver_angle && is_peelable(m_c3t3, cit, facets_on_surface)) peelable_cells.push_back(std::make_pair(cit, facets_on_surface)); + +#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE + mindh = (std::min)(dh, mindh); +#endif } } +#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE + std::cout << "Min dihedral angle : " << mindh << std::endl; + std::cout << "Peelable cells : " << peelable_cells.size() << std::endl; +#endif + for (auto c_i : peelable_cells) { Cell_handle c = c_i.first; - std::array f_on_surface = c_i.second; + const std::array& f_on_surface = c_i.second; - bool found = false; - Surface_patch_index patch; + boost::optional patch; for (int i = 0; i < 4; ++i) { if (f_on_surface[i]) { Surface_patch_index spi = m_c3t3.surface_patch_index(c, i); - if (found && patch != spi) + if (patch != boost::none && patch != spi) { - found = false; + patch = boost::none; break; } else { - found = true; patch = spi; } } } - if(!found) + if(patch == boost::none) continue; for (int i = 0; i < 4; ++i) @@ -326,16 +353,17 @@ public: if(f_on_surface[i]) m_c3t3.remove_from_complex(c, i); else - m_c3t3.add_to_complex(c, i, patch); + m_c3t3.add_to_complex(c, i, patch.get()); } m_c3t3.remove_from_complex(c); ++nb_slivers_peel; } +#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG CGAL_assertion(tr().tds().is_valid(true)); CGAL_assertion(debug::are_cell_orientations_valid(tr())); - +#endif #ifdef CGAL_DUMP_REMESHING_STEPS CGAL::Tetrahedral_remeshing::debug::dump_c3t3(m_c3t3, "99-postprocess"); #endif @@ -359,6 +387,7 @@ private: const FacetIsConstrainedMap& fcmap) { #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG + debug_c3t3(); std::size_t nbc = 0; std::size_t nbf = 0; std::size_t nbe = 0; @@ -466,7 +495,7 @@ private: #endif //tag vertices - unsigned int corner_id = 0; + Corner_index corner_id = 0; for (Vertex_handle vit : tr().finite_vertex_handles()) { if ( vit->in_dimension() == 0 @@ -478,12 +507,17 @@ private: if (vit->in_dimension() == -1 || vit->in_dimension() > 0) vit->set_dimension(0); + vit->set_index(corner_id); + #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG ++nbv; #endif } } + for (Vertex_handle v : tr().finite_vertex_handles()) + set_index(v, m_c3t3); + #ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG std::cout << "C3t3 ready :" << std::endl; std::cout << "\t cells = " << nbc << std::endl; @@ -508,6 +542,14 @@ private: } return true; } + void debug_c3t3() + { + for (typename Tr::Facet f : tr().finite_facets()) + { + typename Tr::Facet mf = tr().mirror_facet(f); + CGAL_assertion(m_c3t3.is_in_complex(f) == m_c3t3.is_in_complex(mf)); + } + } template void set_surface_patch_index_to_default(const Subdomain_index&, diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h index e76d4adfe26..ca81c66489d 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -25,6 +26,9 @@ #include +#include +#include + namespace CGAL { namespace Tetrahedral_remeshing @@ -137,6 +141,41 @@ typename Tr::Geom_traits::FT min_dihedral_angle(const Tr& tr, c->vertex(3)); } +template +bool is_peelable(const C3t3& c3t3, + const typename C3t3::Cell_handle ch, + std::array& facets_on_surface) +{ + typedef typename C3t3::Triangulation::Geom_traits::FT FT; + typedef typename C3t3::Facet Facet; + + if(!c3t3.is_in_complex(ch)) + return false; + + bool on_surface = false; + for (int i = 0; i < 4; ++i) + { + facets_on_surface[i] = !c3t3.is_in_complex(ch->neighbor(i)); + on_surface = on_surface || facets_on_surface[i]; + } + if(!on_surface) + return false; + + FT area_on_surface = 0.; + FT area_inside = 0.; + for (int i = 0; i < 4; ++i) + { + Facet f(ch, i); + const FT facet_area = CGAL::approximate_sqrt(c3t3.triangulation().triangle(f).squared_area()); + if(facets_on_surface[i]) + area_on_surface += facet_area; + else + area_inside += facet_area; + } + + return (area_inside < 1.5 * area_on_surface); +} + template typename Tr::Geom_traits::Vector_3 facet_normal(const Tr& tr, const typename Tr::Facet& f) @@ -307,6 +346,28 @@ typename C3t3::Surface_patch_index surface_patch_index(const typename C3t3::Vert return Surface_patch_index(); } +template +void set_index(typename C3t3::Vertex_handle v, const C3t3& c3t3) +{ + switch (v->in_dimension()) + { + case 3: + v->set_index(v->cell()->subdomain_index()); + break; + case 2: + v->set_index(surface_patch_index(v, c3t3)); + break; + case 1: + v->set_index(typename C3t3::Curve_index(1)); + break; + case 0: + v->set_index(boost::get(v->index())); + break; + default: + CGAL_assertion(false); + } +} + template bool is_edge_in_complex(const typename C3t3::Vertex_handle& v0, const typename C3t3::Vertex_handle& v1, @@ -703,31 +764,35 @@ Subdomain_relation compare_subdomains(const typename C3t3::Vertex_handle v0, const C3t3& c3t3) { typedef typename C3t3::Subdomain_index Subdomain_index; + typedef boost::container::flat_set, + boost::container::small_vector > Set_of_subdomains; - std::vector subdomains_v0; - incident_subdomains(v0, c3t3, std::back_inserter(subdomains_v0)); - std::sort(subdomains_v0.begin(), subdomains_v0.end()); + Set_of_subdomains subdomains_v0; + incident_subdomains(v0, c3t3, + std::inserter(subdomains_v0, subdomains_v0.begin())); - std::vector subdomains_v1; - incident_subdomains(v1, c3t3, std::back_inserter(subdomains_v1)); - std::sort(subdomains_v1.begin(), subdomains_v1.end()); + Set_of_subdomains subdomains_v1; + incident_subdomains(v1, c3t3, + std::inserter(subdomains_v1, subdomains_v1.begin())); if (subdomains_v0.size() == subdomains_v1.size()) { - for (unsigned int i = 0; i < subdomains_v0.size(); i++) - if (subdomains_v0[i] != subdomains_v1[i]) - return DIFFERENT; - return EQUAL; + if(std::equal(subdomains_v0.begin(), subdomains_v0.end(), subdomains_v1.begin())) + return EQUAL; + else + return DIFFERENT; } else { - std::vector - intersection((std::min)(subdomains_v0.size(), subdomains_v1.size()), -1); - typename std::vector::iterator + boost::container::small_vector + intersection((std::min)(subdomains_v0.size(), subdomains_v1.size()), -1); + typename boost::container::small_vector::iterator end_it = std::set_intersection(subdomains_v0.begin(), subdomains_v0.end(), subdomains_v1.begin(), subdomains_v1.end(), intersection.begin()); - std::ptrdiff_t intersection_size = (end_it - intersection.begin()); + std::ptrdiff_t intersection_size = + std::distance(intersection.begin(), end_it); if (subdomains_v0.size() > subdomains_v1.size() && intersection_size == std::ptrdiff_t(subdomains_v1.size())) @@ -784,15 +849,16 @@ void get_edge_info(const typename C3t3::Edge& edge, //feature edges and feature vertices if (dim0 < 2 || dim1 < 2) { + if (!topology_test(edge, c3t3, cell_selector)) + { +#ifdef CGAL_DEBUG_TET_REMESHING_IN_PLUGIN + nb_topology_test++; +#endif + return; + } + if (c3t3.is_in_complex(edge)) { - if (!topology_test(edge, c3t3, cell_selector)) - { -#ifdef CGAL_DEBUG_TET_REMESHING_IN_PLUGIN - nb_topology_test++; -#endif - return; - } const std::size_t nb_si_v0 = nb_incident_subdomains(v0, c3t3); const std::size_t nb_si_v1 = nb_incident_subdomains(v1, c3t3); @@ -811,6 +877,19 @@ void get_edge_info(const typename C3t3::Edge& edge, update_v1 = true; } } + else + { + if (dim0 == 2 && is_boundary_edge(v0, v1, c3t3, cell_selector)) + { + update_v0 = true; + return; + } + else if(dim1 == 2 && is_boundary_edge(v0, v1, c3t3, cell_selector)) + { + update_v1 = true; + return; + } + } return; } @@ -1312,17 +1391,19 @@ void dump_cells_with_small_dihedral_angle(const Tr& tr, cit != tr.finite_cells_end(); ++cit) { Cell_handle c = cit; - if ( c->subdomain_index() != Subdomain_index() - && cell_select(c) - && min_dihedral_angle(tr, c) < angle_bound) + if (c->subdomain_index() != Subdomain_index() && cell_select(c)) { - - cells.push_back(c); - indices.push_back(c->subdomain_index()); + double dh = min_dihedral_angle(tr, c); + if (dh < angle_bound) + { + cells.push_back(c); + indices.push_back(c->subdomain_index()); + } } } std::cout << "bad cells : " << cells.size() << std::endl; dump_cells(cells, indices, filename); + dump_cells_off(cells, tr, "bad_cells.off"); } template diff --git a/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h b/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h index b59f055e585..115f735f128 100644 --- a/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h +++ b/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h @@ -74,41 +74,85 @@ namespace CGAL * and vertex base model of `RemeshingVertexBase_3`. * @tparam SLDS is an optional parameter for `Triangulation_3`, that * specifies the type of the spatial lock data structure. -* @tparam NamedParameters a sequence of \ref Remeshing_namedparameters "Named Parameters" +* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * @param tr the triangulation to be remeshed, of type `Triangulation_3`. * `Remeshing_triangulation` is a helper class that satisfies all the requirements * of its template parameters. * @param target_edge_length the uniform target edge length. This parameter provides a * mesh density target for the remeshing algorithm. -* @param np optional sequence of \ref Remeshing_namedparameters "Named Parameters" +* @param np optional sequence of \ref bgl_namedparameters "Named Parameters" * among the ones listed below * * \cgalNamedParamsBegin -* \cgalParamBegin{number_of_iterations} the number of iterations for the full -* sequence of atomic operations -* performed (listed in the above description) -* \cgalParamEnd -* \cgalParamBegin{remesh_boundaries} If `false`, none of the input volume boundaries -* can be modified. -* Otherwise, the topology is preserved, but atomic operations can be performed on the -* surfaces, and along feature polylines, such that boundaries are remeshed. -* \cgalParamEnd -* \cgalParamBegin{edge_is_constrained_map} a property map containing the -* constrained - or - not status of each edge of `tr`. A constrained edge can be split -* or collapsed, but not flipped. -* \cgalParamEnd -* \cgalParamBegin{facet_is_constrained_map} a property map containing the -* constrained - or - not status of each facet of `tr`. A constrained facet can be split -* or collapsed, but not flipped. -* \cgalParamEnd -* \cgalParamBegin{cell_is_selected_map} a property map containing the -* selected - or - not status for each cell of `tr` for remeshing. -* Only selected cells are modified (and possibly their neighbors if surfaces are -* modified) by remeshing. -* By default, all cells with a non-zero `Subdomain_index` are selected. -* \cgalParamEnd -* \cgalNamedParamsEnd +* \cgalParamNBegin{number_of_iterations} +* \cgalParamDescription{the number of iterations for the full sequence of atomic operations +* performed (listed in the above description)} +* \cgalParamType{unsigned int} +* \cgalParamDefault{`1`} +* \cgalParamNEnd +* +* \cgalParamNBegin{remesh_boundaries} +* \cgalParamDescription{If `false`, none of the input volume boundaries can be modified. +* Otherwise, the topology is preserved, but atomic operations +* can be performed on the surfaces, and along feature polylines, +* such that boundaries are remeshed.} +* \cgalParamType{`bool`} +* \cgalParamDefault{`true`} +* \cgalParamExtra{Boundaries are between the exterior and the interior, +* between two subdomains, between the areas selected or not for remeshing +* (cf `Remeshing_cell_is_selected_map`), or defined +* by `Remeshing_edge_is_constrained_map` and `Remeshing_facet_is_constrained_map`.} +* \cgalParamNEnd +* +* \cgalParamNBegin{edge_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each edge of `tr`.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `std::pair` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no edge is constrained} +* \cgalParamExtra{A constrained edge can be split or collapsed, but not flipped.} +* \cgalParamExtra{The pairs must be ordered to ensure consistency.} +* \cgalParamExtra{During the meshing process, the set of constrained edges evolves consistently +* with edge splits and collapses, so the property map must be writable.} +* \cgalParamNEnd +* +* \cgalParamNBegin{facet_is_constrained_map} +* \cgalParamDescription{a property map containing the constrained-or-not status of each facet of `tr`.} +* \cgalParamType{a class model of `ReadablePropertyMap` with `Triangulation_3::Facet` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where no facet is constrained} +* \cgalParamExtra{A constrained facet can be split or collapsed, but not flipped.} +* \cgalParamExtra{This map, contrary to the others, is not updated throughout the remeshing process.} +* \cgalParamNEnd +* +* \cgalParamNBegin{cell_is_selected_map} +* \cgalParamDescription{a property map containing the selected - or - not status for each cell of `tr` for remeshing. +* Only selected cells are modified (and possibly their neighbors if surfaces are modified) by remeshing.} +* \cgalParamType{a class model of `ReadWritePropertyMap` with `Triangulation_3::Cell_handle` +* as key type and `bool` as value type. It must be default constructible.} +* \cgalParamDefault{a default property map where all cells of the domain +* (i.e. with a non-zero `Subdomain_index`) are selected.} +* \cgalParamExtra{During the meshing process, the set of selected cells evolves consistently with +* the atomic operations that are performed, so the property map must be writable.} +* \cgalParamNEnd +* +* \cgalParamNBegin{smooth_constrained_edges} +* \cgalParamDescription{If `true`, the end vertices of the edges set as +* constrained in `edge_is_constrained_map` move along the +* constrained polylines they belong to.} +* \cgalParamType{`bool`} +* \cgalParamDefault{`false`} +* \cgalParamExtra{The endvertices of constraints listed +* by `edge_is_constrained_map`, and edges incident to at least three subdomains +* are made eligible to one dimensional smoothing, along the constrained polylines they belong to. +* Corners (i.e. vertices incident to more than 2 constrained edges) are not allowed +* to move at all.\n +* Note that activating the smoothing step on polyline constraints tends to reduce +* the quality of the minimal dihedral angle in the mesh.\n +* If `remesh_boundaries` is set to `false`, this parameter is ignored.} +* \cgalParamNEnd +* +* \cgalNamedParamsEnd * * \sa `CGAL::Tetrahedral_remeshing::Remeshing_triangulation_3` * @@ -166,6 +210,9 @@ void tetrahedral_isotropic_remeshing( // false); std::size_t max_it = choose_parameter(get_parameter(np, internal_np::number_of_iterations), 1); + bool smooth_constrained_edges + = choose_parameter(get_parameter(np, internal_np::smooth_constrained_edges), + false); typedef typename internal_np::Lookup_named_param_def < internal_np::cell_selector_t, @@ -219,6 +266,7 @@ void tetrahedral_isotropic_remeshing( Tr, SizingFunction, ECMap, FCMap, SelectionFunctor, Visitor> Remesher; Remesher remesher(tr, sizing, protect , ecmap, fcmap + , smooth_constrained_edges , cell_select , visitor); @@ -232,12 +280,10 @@ void tetrahedral_isotropic_remeshing( std::size_t nb_extra_iterations = 3; remesher.remesh(max_it, nb_extra_iterations); -#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG +#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE const double angle_bound = 5.0; Tetrahedral_remeshing::debug::dump_cells_with_small_dihedral_angle(tr, angle_bound, cell_select, "bad_cells.mesh"); -#endif -#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE Tetrahedral_remeshing::internal::compute_statistics(tr, cell_select, "statistics_end.txt"); #endif @@ -252,10 +298,54 @@ void tetrahedral_isotropic_remeshing( CGAL::parameters::all_default()); } +/*! +* \ingroup PkgTetrahedralRemeshingRef +* converts the triangulation contained in the input to a `Triangulation_3`. +* +* This function should be used to generate a valid triangulation +* for tetrahedral remeshing, when the input triangulation is generated with the +* tetrahedral mesh generation package. +* +* @tparam Tr is the underlying triangulation for `Mesh_complex_3_in_triangulation_3`. +* It can be instantiated with any 3D regular triangulation of CGAL provided +* that its vertex and cell base classes are models of the concepts +* `MeshVertexBase_3` (refined by `RemeshingCellBase_3`) +* and `MeshCellBase_3` (refined by `RemeshingVertexBase_3`), respectively. +* @tparam CornerIndex is the type of the indices for feature corners. +* If `c3t3` has been generated using `CGAL::make_mesh_3()`, it must match +* the `Corner_index` type of the model of the `MeshDomainWithFeatures_3` concept used for mesh generation. +* @tparam CurveIndex is the type of the indices for feature curves. +* If `c3t3` has been generated using `CGAL::make_mesh_3()`, it must match +* the `Curve_index` type of the model of the `MeshDomainWithFeatures_3` concept used for mesh generation. +* +* @param c3t3 the complex containing the triangulation to be remeshed. +*/ + +template +CGAL::Triangulation_3 +convert_to_triangulation_3( + CGAL::Mesh_complex_3_in_triangulation_3 c3t3) +{ + using GT = typename Tr::Geom_traits; + using TDS = typename Tr::Triangulation_data_structure; + + CGAL::Triangulation_3 tr; + tr.swap(c3t3.triangulation()); + return tr; +} + /////////////////////////////////////////////////// /////// MESH_COMPLEX_3_IN_TRIANGULATION_3 ///////// /////////////////////////////////////////////////// +/////// +////// Warning with using this version : +////// the triangulation after remeshing is not regular anymore +////// the empty-sphere property is not respected +/////// template @@ -315,6 +405,10 @@ void tetrahedral_isotropic_remeshing( bool protect = !remesh_surfaces; std::size_t max_it = choose_parameter(get_parameter(np, internal_np::number_of_iterations), 1); + bool smooth_constrained_edges + = choose_parameter(get_parameter(np, internal_np::smooth_constrained_edges), + false); + typedef typename internal_np::Lookup_named_param_def < internal_np::cell_selector_t, NamedParameters, @@ -370,6 +464,7 @@ void tetrahedral_isotropic_remeshing( > Remesher; Remesher remesher(c3t3, sizing, protect , ecmap, fcmap + , smooth_constrained_edges , cell_select , visitor); @@ -384,7 +479,7 @@ void tetrahedral_isotropic_remeshing( std::size_t nb_extra_iterations = 3; remesher.remesh(max_it, nb_extra_iterations); -#ifdef CGAL_TETRAHEDRAL_REMESHING_DEBUG +#ifdef CGAL_TETRAHEDRAL_REMESHING_VERBOSE const double angle_bound = 5.0; Tetrahedral_remeshing::debug::dump_cells_with_small_dihedral_angle( c3t3.triangulation(), diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/CMakeLists.txt b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/CMakeLists.txt index 46119c8c74f..3f39456eee7 100644 --- a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/CMakeLists.txt +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.1...3.14) project( Tetrahedral_remeshing_Tests ) # CGAL and its components -find_package( CGAL REQUIRED ) +find_package(CGAL COMPONENTS ImageIO) if ( NOT CGAL_FOUND ) message(STATUS "This project requires the CGAL library, and will not be compiled.") return() @@ -19,10 +19,26 @@ if ( NOT Boost_FOUND ) return() endif() - # Creating entries for all C++ files with "main" routine # ########################################################## create_single_source_cgal_program( "test_tetrahedral_remeshing.cpp" ) create_single_source_cgal_program( "test_tetrahedral_remeshing_with_features.cpp") create_single_source_cgal_program( "test_tetrahedral_remeshing_of_one_subdomain.cpp") create_single_source_cgal_program( "test_tetrahedral_remeshing_io.cpp") +create_single_source_cgal_program( "test_tetrahedral_remeshing_from_mesh_file.cpp") + +# Tests using Mesh_3 require Eigen +find_package(Eigen3 3.1.0 REQUIRED) #(3.1.0 or greater) +include(CGAL_Eigen_support) +if (NOT TARGET CGAL::Eigen_support) + message(STATUS "This project requires the Eigen library, and will not be compiled.") + return() +endif() + +create_single_source_cgal_program("test_mesh_and_remesh_polyhedral_domain_with_features.cpp") +target_link_libraries(test_mesh_and_remesh_polyhedral_domain_with_features PUBLIC CGAL::Eigen_support) + +if( CGAL_ImageIO_USE_ZLIB ) + create_single_source_cgal_program( "test_mesh_and_remesh_image.cpp") + target_link_libraries(test_mesh_and_remesh_image PUBLIC CGAL::Eigen_support) +endif() diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/fandisk.off b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/fandisk.off new file mode 100644 index 00000000000..8b04c52c15e --- /dev/null +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/fandisk.off @@ -0,0 +1,19425 @@ +OFF +6475 12946 0 + +0.1696 0.04095 -0.0471 +0.1809 0.03455 -0.046 +0.1628 0.03455 -0.046 +0.1539 0.04355 -0.0475 +0.1651 0.05375 -0.0494 +0.1811 0.05105 -0.0489 +0.1952 0.04725 -0.0482 +0.1949 0.05065 -0.0275 +0.1813 0.03875 -0.0237 +0.1666 0.02125 -0.0389 +0.1585 0.02595 -0.0412 +0.1446 0.03455 -0.046 +0.1367 0.04495 -0.0478 +0.148 0.05595 -0.0497 +0.1604 0.06725 -0.0517 +0.1778 0.06475 -0.0513 +0.1944 0.06205 -0.0508 +0.2101 0.05925 -0.0503 +0.2105 0.06305 -0.0313 +0.2093 0.06565 -0.011 +0.1945 0.05355 -0.0089 +0.1814 0.04205 -0.0057 +0.1668 0.02495 -0.0191 +0.1527 0.00675 -0.033 +0.142 0.02155 -0.039 +0.1264 0.03455 -0.046 +0.119 0.04605 -0.048 +0.1304 0.05785 -0.0501 +0.1427 0.06965 -0.0522 +0.1557 0.08145 -0.0542 +0.1737 0.07865 -0.0537 +0.1915 0.07585 -0.0532 +0.2089 0.07305 -0.0528 +0.2255 0.07055 -0.0523 +0.2256 0.07405 -0.0334 +0.2248 0.07695 -0.013 +0.2247 0.08035 0.006 +0.2093 0.06895 0.008 +0.1945 0.05685 0.0101 +0.1802 0.04415 0.0124 +0.1673 0.02835 -0.003 +0.1528 0.01005 -0.0147 +0.1396 -0.00875 -0.0287 +0.1156 -0.00185 -0.0304 +0.1199 0.02535 -0.0409 +0.1082 0.03455 -0.046 +0.1011 0.04715 -0.0482 +0.1126 0.05975 -0.0504 +0.1248 0.07225 -0.0526 +0.1376 0.08435 -0.0547 +0.1509 0.09615 -0.0568 +0.1693 0.09285 -0.0562 +0.1878 0.08965 -0.0557 +0.2061 0.08665 -0.0551 +0.2241 0.08375 -0.0546 +0.2415 0.08125 -0.0542 +0.2415 0.08455 -0.0353 +0.2407 0.08765 -0.0149 +0.2407 0.09095 0.0041 +0.2358 0.06555 0.0086 +0.221 0.05475 0.0105 +0.2068 0.04315 0.0125 +0.1932 0.03095 0.0147 +0.1801 0.01815 0.017 +0.1665 0.03065 0.0147 +0.1534 0.01375 0.0015 +0.141 -0.00105 0.0045 +0.1398 -0.00535 -0.0115 +0.1274 -0.02215 -0.0092 +0.127 -0.02565 -0.0261 +0.1081 -0.02565 -0.0261 +0.0866 -0.00565 -0.0294 +0.1038 0.01495 -0.036 +0.11 0.02835 -0.0424 +0.0965 0.02515 -0.0407 +0.09 0.03455 -0.046 +0.083 0.04855 -0.0484 +0.0947 0.06195 -0.0508 +0.1068 0.07505 -0.0531 +0.1194 0.08765 -0.0553 +0.1325 0.09975 -0.0575 +0.146 0.11145 -0.0595 +0.1647 0.10745 -0.0588 +0.1835 0.10375 -0.0582 +0.2024 0.10035 -0.0575 +0.2213 0.09695 -0.057 +0.2398 0.09375 -0.0564 +0.258 0.09105 -0.0559 +0.258 0.09435 -0.037 +0.2572 0.09755 -0.0167 +0.2572 0.10085 0.0024 +0.251 0.07575 0.0068 +0.2467 0.05075 0.0112 +0.2327 0.04045 0.013 +0.2191 0.02945 0.015 +0.2061 0.01785 0.017 +0.1937 0.00565 0.0192 +0.1819 -0.00715 0.0214 +0.1677 0.00475 0.0193 +0.1535 0.01655 0.0172 +0.1412 0.00185 0.0198 +0.1296 -0.01335 0.0225 +0.1283 -0.01805 0.0061 +0.1176 -0.03395 0.0082 +0.1168 -0.03795 -0.0072 +0.1166 -0.04135 -0.0245 +0.0986 -0.04185 -0.0245 +0.0891 -0.02565 -0.0261 +0.0702 -0.02565 -0.0261 +0.0693 -0.00485 -0.0296 +0.0819 0.00935 -0.0339 +0.0793 0.02165 -0.039 +0.0719 0.03455 -0.046 +0.0827 0.04705 -0.0544 +0.0867 0.05215 -0.053 +0.0962 0.06235 -0.0584 +0.1059 0.07215 -0.0641 +0.1173 0.08265 -0.0717 +0.1331 0.09575 -0.0834 +0.1485 0.10995 -0.0798 +0.16 0.12255 -0.0615 +0.179 0.11825 -0.0607 +0.1982 0.11425 -0.06 +0.2176 0.11045 -0.0593 +0.237 0.10665 -0.0587 +0.2561 0.10315 -0.0581 +0.2749 0.10015 -0.0575 +0.2749 0.10345 -0.0386 +0.2741 0.10665 -0.0183 +0.2741 0.10995 0.0008 +0.2668 0.08515 0.0051 +0.2612 0.06045 0.0095 +0.2575 0.03585 0.0138 +0.2442 0.02605 0.0156 +0.2313 0.01565 0.0174 +0.219 0.00455 0.0193 +0.2072 -0.00695 0.0214 +0.196 -0.01915 0.0235 +0.1853 -0.03175 0.0258 +0.1707 -0.02045 0.0238 +0.156 -0.00925 0.0218 +0.1449 -0.02385 0.0244 +0.1345 -0.03885 0.027 +0.1188 -0.02915 0.0253 +0.1087 -0.04545 0.0282 +0.1078 -0.05015 0.0106 +0.1071 -0.05415 -0.0052 +0.1069 -0.05755 -0.0228 +0.0896 -0.05825 -0.0227 +0.0803 -0.04205 -0.0244 +0.0619 -0.04225 -0.0244 +0.0512 -0.02565 -0.0261 +0.0516 -0.00295 -0.0301 +0.0695 0.00915 -0.0339 +0.0703 0.01785 -0.0373 +0.0612 0.02365 -0.04 +0.058 0.04425 -0.0524 +0.0678 0.05475 -0.0607 +0.0785 0.06495 -0.0706 +0.0935 0.05825 -0.0639 +0.1042 0.06845 -0.0744 +0.1149 0.07755 -0.0861 +0.1252 0.08555 -0.0988 +0.1426 0.10095 -0.1024 +0.1505 0.10905 -0.095 +0.1619 0.12065 -0.0807 +0.1743 0.13325 -0.0633 +0.1937 0.12855 -0.0625 +0.2133 0.12415 -0.0617 +0.2332 0.11995 -0.061 +0.2531 0.11575 -0.0603 +0.2728 0.11175 -0.0596 +0.2921 0.10835 -0.059 +0.2921 0.11165 -0.0401 +0.2915 0.11495 -0.0198 +0.2915 0.11835 -0.0007 +0.283 0.09385 0.0036 +0.2762 0.06935 0.0079 +0.2713 0.04505 0.0122 +0.2812 0.02955 0.0149 +0.2682 0.02085 0.0165 +0.2555 0.01155 0.0181 +0.2434 0.00165 0.0199 +0.2317 -0.00875 0.0217 +0.2205 -0.01975 0.0236 +0.2099 -0.03125 0.0257 +0.1998 -0.04325 0.0278 +0.1753 -0.04485 0.0281 +0.1602 -0.03425 0.0262 +0.1503 -0.04865 0.0287 +0.1411 -0.06335 0.0313 +0.1249 -0.05435 0.0297 +0.1161 -0.07035 0.0326 +0.0994 -0.06215 0.0311 +0.0986 -0.06685 0.0132 +0.0975 -0.07185 -0.0021 +0.098 -0.07425 -0.021 +0.0811 -0.07505 -0.0209 +0.0719 -0.05865 -0.0227 +0.0539 -0.05885 -0.0227 +0.0433 -0.04225 -0.0244 +0.0323 -0.02565 -0.0261 +0.028 0.00185 -0.0315 +0.0368 0.01995 -0.0383 +0.0553 0.01275 -0.0352 +0.0467 0.03255 -0.0448 +0.0425 0.05105 -0.0576 +0.0546 0.06165 -0.0671 +0.0657 0.07095 -0.0773 +0.0755 0.07775 -0.0863 +0.089 0.07405 -0.0813 +0.097 0.08095 -0.0911 +0.1062 0.08845 -0.1043 +0.1183 0.09685 -0.1248 +0.135 0.09235 -0.1126 +0.1521 0.10645 -0.117 +0.1623 0.11735 -0.102 +0.1768 0.12855 -0.1002 +0.1743 0.13015 -0.0811 +0.189 0.14335 -0.0651 +0.2088 0.13825 -0.0642 +0.2288 0.13345 -0.0634 +0.2492 0.12875 -0.0626 +0.2696 0.12415 -0.0617 +0.2899 0.11975 -0.061 +0.3098 0.11575 -0.0603 +0.3098 0.11905 -0.0413 +0.3093 0.12245 -0.0211 +0.3093 0.12585 -0.002 +0.2995 0.10175 0.0022 +0.2916 0.07765 0.0064 +0.2855 0.05355 0.0107 +0.2947 0.03765 0.0135 +0.3037 0.02165 0.0164 +0.291 0.01395 0.0177 +0.2786 0.00575 0.0191 +0.2667 -0.00305 0.0207 +0.2552 -0.01235 0.0223 +0.2442 -0.02225 0.0241 +0.2337 -0.03265 0.0259 +0.2237 -0.04345 0.0278 +0.2142 -0.05485 0.0298 +0.1903 -0.05565 0.03 +0.1659 -0.05855 0.0305 +0.1572 -0.07245 0.0329 +0.1492 -0.08695 0.0355 +0.1327 -0.07855 0.034 +0.125 -0.09405 0.0368 +0.108 -0.08665 0.0354 +0.091 -0.07925 0.0341 +0.0902 -0.08415 0.0158 +0.0894 -0.08885 -0.0002 +0.0898 -0.09125 -0.019 +0.0734 -0.09205 -0.0189 +0.0639 -0.07545 -0.0209 +0.0463 -0.07575 -0.0208 +0.0357 -0.05895 -0.0227 +0.0248 -0.04235 -0.0244 +0.0133 -0.02565 -0.0261 +0.0106 -0.00485 -0.0296 +0.0134 0.01495 -0.0361 +0.022 0.02755 -0.042 +0.032 0.04025 -0.0496 +0.0255 0.05775 -0.0634 +0.0384 0.07145 -0.078 +0.0571 0.07685 -0.0851 +0.0677 0.08045 -0.0902 +0.0801 0.08355 -0.0952 +0.085 0.09005 -0.1075 +0.0902 0.09695 -0.1252 +0.1131 0.10145 -0.1436 +0.1324 0.09915 -0.1327 +0.144 0.09775 -0.1275 +0.1607 0.11045 -0.1334 +0.1717 0.12105 -0.1214 +0.1798 0.12855 -0.1127 +0.1891 0.13715 -0.1005 +0.1891 0.14025 -0.0828 +0.2042 0.15295 -0.0668 +0.2242 0.14735 -0.0659 +0.2447 0.14215 -0.0649 +0.2655 0.13695 -0.064 +0.2865 0.13185 -0.0631 +0.3074 0.12685 -0.0622 +0.3278 0.12235 -0.0614 +0.3278 0.12565 -0.0425 +0.3274 0.12915 -0.0223 +0.3274 0.13245 -0.0032 +0.3164 0.10895 0.0009 +0.3074 0.08515 0.0051 +0.3001 0.06135 0.0093 +0.3085 0.04505 0.0122 +0.3168 0.02865 0.0151 +0.3055 0.02605 0.0355 +0.2928 0.01855 0.0368 +0.2805 0.01045 0.0383 +0.2687 0.00185 0.0398 +0.2575 -0.00705 0.0414 +0.2476 -0.01575 0.0429 +0.2404 -0.02245 0.0441 +0.2312 -0.03175 0.0457 +0.2217 -0.04225 0.0476 +0.2126 -0.05345 0.0496 +0.2053 -0.06655 0.0319 +0.1815 -0.06855 0.0322 +0.1733 -0.08175 0.0346 +0.1657 -0.09545 0.037 +0.1419 -0.10165 0.0381 +0.1353 -0.11685 0.0408 +0.118 -0.11005 0.0396 +0.1007 -0.10345 0.0384 +0.0834 -0.09675 0.0372 +0.0834 -0.10015 0.0182 +0.0828 -0.10455 0.0013 +0.0825 -0.10865 -0.0169 +0.0663 -0.10945 -0.0168 +0.0565 -0.09255 -0.0189 +0.0392 -0.09285 -0.0188 +0.0284 -0.07585 -0.0208 +0.0174 -0.05905 -0.0227 +0.0061 -0.04235 -0.0244 +-0.0056 -0.02565 -0.0261 +-0.0056 -0.00605 -0.0293 +0.0059 0.00555 -0.0326 +-0.0025 0.02095 -0.0387 +0.0064 0.03465 -0.046 +0.0162 0.04645 -0.054 +0.0075 0.06325 -0.0688 +0.0125 0.07285 -0.0797 +0.0373 0.08155 -0.092 +0.0543 0.08355 -0.0952 +0.0682 0.08465 -0.0971 +0.0701 0.09075 -0.109 +0.0726 0.09715 -0.1256 +0.0743 0.10145 -0.1436 +0.0937 0.10145 -0.1436 +0.0921 0.10525 -0.1646 +0.1117 0.10635 -0.1713 +0.1324 0.10145 -0.1436 +0.1518 0.10145 -0.1436 +0.1704 0.11485 -0.1511 +0.1867 0.12935 -0.1351 +0.1899 0.13485 -0.1166 +0.2042 0.14665 -0.1022 +0.2042 0.14985 -0.0845 +0.2196 0.16195 -0.0684 +0.24 0.15585 -0.0674 +0.2609 0.15015 -0.0663 +0.2822 0.14455 -0.0653 +0.3037 0.13875 -0.0643 +0.3251 0.13315 -0.0633 +0.3462 0.12815 -0.0625 +0.3461 0.13145 -0.0435 +0.3458 0.13495 -0.0233 +0.3458 0.13825 -0.0042 +0.3337 0.11525 -0.0002 +0.3235 0.09195 0.0039 +0.3151 0.06855 0.0081 +0.3227 0.05185 0.011 +0.3302 0.03505 0.014 +0.3185 0.03295 0.0343 +0.3069 0.03025 0.0548 +0.2943 0.02285 0.0561 +0.282 0.01495 0.0575 +0.2701 0.00635 0.059 +0.2588 -0.00255 0.0606 +0.2483 -0.01165 0.0621 +0.239 -0.02045 0.0637 +0.2295 -0.03025 0.0654 +0.2201 -0.04085 0.0673 +0.211 -0.05205 0.0693 +0.2038 -0.06515 0.0516 +0.1969 -0.07875 0.0341 +0.1891 -0.09125 0.0362 +0.182 -0.10415 0.0385 +0.1587 -0.10945 0.0395 +0.1525 -0.12375 0.042 +0.1294 -0.13225 0.0435 +0.1119 -0.12625 0.0424 +0.0943 -0.12045 0.0414 +0.0766 -0.11465 0.0404 +0.0766 -0.11795 0.0213 +0.0762 -0.12235 0.0033 +0.0759 -0.12645 -0.0146 +0.0601 -0.12705 -0.0145 +0.0497 -0.10985 -0.0167 +0.0327 -0.11015 -0.0167 +0.0217 -0.09305 -0.0188 +0.0105 -0.07595 -0.0208 +-0.0009 -0.05915 -0.0226 +-0.0125 -0.04235 -0.0244 +-0.0245 -0.02565 -0.0261 +-0.0245 -0.00645 -0.0292 +-0.0233 0.00845 -0.0336 +-0.0058 0.00675 -0.033 +-0.0179 0.02615 -0.0413 +-0.0092 0.04275 -0.0513 +0.0004 0.05475 -0.0607 +-0.0028 0.06575 -0.0714 +-0.0047 0.07275 -0.0796 +-0.0052 0.08145 -0.0919 +0.0148 0.08175 -0.0924 +0.0355 0.08975 -0.1069 +0.0549 0.09095 -0.1095 +0.0549 0.09685 -0.1248 +0.0549 0.10145 -0.1436 +0.0565 0.10505 -0.1639 +0.0759 0.10515 -0.1644 +0.0893 0.10735 -0.1766 +0.0987 0.10885 -0.1853 +0.1293 0.11045 -0.1945 +0.1404 0.10535 -0.1653 +0.1594 0.10455 -0.1611 +0.1801 0.11875 -0.1693 +0.1957 0.13095 -0.1607 +0.2083 0.14315 -0.1369 +0.2059 0.14485 -0.1186 +0.2197 0.15575 -0.1038 +0.2197 0.15885 -0.0861 +0.2354 0.17045 -0.0699 +0.2561 0.16385 -0.0688 +0.2774 0.15755 -0.0676 +0.2992 0.15135 -0.0666 +0.3212 0.14495 -0.0654 +0.3431 0.13875 -0.0643 +0.3648 0.13305 -0.0633 +0.3647 0.13635 -0.0444 +0.3645 0.13985 -0.0242 +0.3645 0.14325 -0.0051 +0.3512 0.12075 -0.0011 +0.3399 0.09795 0.0029 +0.3304 0.07495 0.0069 +0.3372 0.05795 0.0099 +0.3439 0.04085 0.013 +0.3318 0.03925 0.0332 +0.3198 0.03705 0.0536 +0.3077 0.03405 0.074 +0.2951 0.02685 0.0753 +0.2829 0.01895 0.0767 +0.271 0.01045 0.0782 +0.2596 0.00145 0.0798 +0.2487 -0.00785 0.0814 +0.2385 -0.01755 0.0831 +0.2287 -0.02765 0.0849 +0.2192 -0.03845 0.0868 +0.2102 -0.04975 0.0888 +0.2024 -0.06365 0.0713 +0.1957 -0.07715 0.0537 +0.1881 -0.08965 0.0559 +0.1811 -0.10245 0.0582 +0.1755 -0.11735 0.0409 +0.1696 -0.13085 0.0432 +0.147 -0.13835 0.0445 +0.1243 -0.14785 0.0462 +0.1065 -0.14275 0.0453 +0.0886 -0.13775 0.0444 +0.0707 -0.13275 0.0436 +0.0707 -0.13605 0.0245 +0.07 -0.14185 0.0066 +0.0702 -0.14445 -0.0122 +0.0546 -0.14505 -0.0121 +0.0437 -0.12755 -0.0145 +0.0269 -0.12775 -0.0144 +0.0155 -0.11035 -0.0167 +0.004 -0.09315 -0.0188 +-0.0075 -0.07605 -0.0208 +-0.0192 -0.05915 -0.0226 +-0.0312 -0.04235 -0.0244 +-0.0435 -0.02565 -0.0261 +-0.0435 -0.00665 -0.0292 +-0.0439 0.00985 -0.0341 +-0.0403 0.03355 -0.0454 +-0.0258 0.04765 -0.0549 +-0.0115 0.06035 -0.0659 +-0.0231 0.06825 -0.0742 +-0.0233 0.08105 -0.0912 +-0.0227 0.09005 -0.1076 +-0.0033 0.08995 -0.1072 +0.0161 0.08985 -0.107 +0.0356 0.09685 -0.1248 +0.0356 0.10145 -0.1436 +0.0341 0.10485 -0.1625 +0.0527 0.10925 -0.1877 +0.078 0.10795 -0.1803 +0.0868 0.11055 -0.1949 +0.0958 0.11325 -0.2099 +0.1112 0.11195 -0.2031 +0.1226 0.11505 -0.2203 +0.1403 0.11335 -0.2109 +0.1498 0.10895 -0.1857 +0.167 0.10755 -0.178 +0.1879 0.12125 -0.1859 +0.202 0.13205 -0.1774 +0.2117 0.14175 -0.1564 +0.2221 0.15125 -0.1374 +0.221 0.15355 -0.1207 +0.2354 0.16415 -0.1053 +0.2354 0.16725 -0.0876 +0.2515 0.17825 -0.0713 +0.2725 0.17115 -0.07 +0.2941 0.16435 -0.0688 +0.3164 0.15755 -0.0676 +0.3388 0.15055 -0.0664 +0.3612 0.14365 -0.0652 +0.3836 0.13705 -0.064 +0.3836 0.14035 -0.0451 +0.3834 0.14395 -0.0249 +0.3834 0.14725 -0.0058 +0.369 0.12545 -0.002 +0.3565 0.10325 0.002 +0.346 0.08065 0.0059 +0.3519 0.06335 0.009 +0.3578 0.04595 0.012 +0.3454 0.04485 0.0322 +0.333 0.04315 0.0525 +0.3206 0.04075 0.0729 +0.308 0.03765 0.0934 +0.2954 0.03045 0.0947 +0.2832 0.02255 0.096 +0.2714 0.01415 0.0975 +0.2599 0.00515 0.0991 +0.2489 -0.00425 0.1008 +0.2385 -0.01415 0.1025 +0.2285 -0.02445 0.1043 +0.219 -0.03535 0.1063 +0.2099 -0.04665 0.1082 +0.2017 -0.06145 0.0909 +0.1944 -0.07575 0.0734 +0.187 -0.08815 0.0756 +0.1802 -0.10085 0.0779 +0.1748 -0.11555 0.0605 +0.1691 -0.12885 0.0629 +0.1644 -0.14465 0.0457 +0.1421 -0.15315 0.0472 +0.12 -0.16383 0.0491 +0.1019 -0.15951 0.0483 +0.0838 -0.15525 0.0475 +0.0657 -0.15115 0.0468 +0.0657 -0.15445 0.0277 +0.0652 -0.15992 0.0091 +0.0654 -0.16264 -0.0097 +0.0498 -0.16313 -0.0096 +0.0383 -0.14535 -0.0121 +0.0217 -0.14565 -0.0121 +0.0099 -0.12795 -0.0144 +-0.0019 -0.11045 -0.0167 +-0.0137 -0.09325 -0.0188 +-0.0256 -0.07615 -0.0208 +-0.0376 -0.05915 -0.0226 +-0.0498 -0.04235 -0.0244 +-0.0624 -0.02565 -0.0261 +-0.0624 -0.00685 -0.0292 +-0.0637 0.00985 -0.0341 +-0.0606 0.03115 -0.044 +-0.047 0.04285 -0.0514 +-0.04 0.05155 -0.058 +-0.048 0.07045 -0.0767 +-0.0447 0.08185 -0.0925 +-0.0422 0.09035 -0.1082 +-0.0226 0.09695 -0.125 +-0.0032 0.09695 -0.1249 +0.0162 0.09685 -0.1248 +0.0162 0.10145 -0.1436 +0.015 0.10485 -0.1629 +0.0293 0.10845 -0.1832 +0.0374 0.11245 -0.2054 +0.067 0.11225 -0.2045 +0.0771 0.11525 -0.2215 +0.105 0.11685 -0.2308 +0.1312 0.11815 -0.2381 +0.1487 0.11645 -0.2283 +0.1661 0.11495 -0.2196 +0.1578 0.11195 -0.2027 +0.1749 0.11055 -0.1947 +0.196 0.12385 -0.2023 +0.2098 0.13395 -0.1937 +0.2169 0.14205 -0.1723 +0.2252 0.14995 -0.1542 +0.2369 0.15905 -0.1387 +0.2355 0.16105 -0.123 +0.2515 0.16895 -0.1243 +0.2515 0.17205 -0.1067 +0.2515 0.17515 -0.089 +0.2679 0.18555 -0.0726 +0.289 0.17795 -0.0713 +0.3108 0.17065 -0.07 +0.3332 0.16345 -0.0687 +0.3559 0.15585 -0.0673 +0.3791 0.14795 -0.0659 +0.4025 0.14015 -0.0646 +0.4025 0.14355 -0.0456 +0.4025 0.14705 -0.0255 +0.4025 0.15045 -0.0064 +0.387 0.12935 -0.0026 +0.3735 0.10765 0.0012 +0.3778 0.08985 0.0043 +0.3618 0.08565 0.0051 +0.3669 0.06805 0.0082 +0.372 0.05045 0.0113 +0.3592 0.04985 0.0313 +0.3465 0.04875 0.0515 +0.3337 0.04685 0.0718 +0.3208 0.04435 0.0922 +0.3208 0.04775 0.1116 +0.308 0.04105 0.1128 +0.2954 0.03385 0.114 +0.2832 0.02595 0.1154 +0.2714 0.01765 0.1169 +0.26 0.00865 0.1185 +0.249 -0.00075 0.1201 +0.2385 -0.01065 0.1219 +0.2285 -0.02105 0.1237 +0.219 -0.03185 0.1256 +0.21 -0.04315 0.1276 +0.2015 -0.05485 0.1296 +0.2014 -0.05835 0.1103 +0.1937 -0.07345 0.093 +0.1864 -0.08585 0.0952 +0.1797 -0.09845 0.0974 +0.174 -0.11385 0.0802 +0.1684 -0.12715 0.0825 +0.164 -0.14255 0.0653 +0.1599 -0.15858 0.0481 +0.1381 -0.16822 0.0498 +0.1165 -0.17977 0.0519 +0.0982 -0.17626 0.0512 +0.0799 -0.17292 0.0507 +0.0616 -0.1697 0.0501 +0.0616 -0.17304 0.031 +0.0613 -0.17819 0.0118 +0.0614 -0.18101 -0.007 +0.0458 -0.18142 -0.0069 +0.0336 -0.16343 -0.0095 +0.017 -0.16364 -0.0095 +0.0048 -0.14575 -0.012 +-0.0074 -0.12805 -0.0144 +-0.0195 -0.11055 -0.0167 +-0.0315 -0.09325 -0.0188 +-0.0437 -0.07615 -0.0208 +-0.056 -0.05925 -0.0226 +-0.0685 -0.04245 -0.0244 +-0.0814 -0.02565 -0.0261 +-0.0814 -0.00685 -0.0291 +-0.0817 0.01025 -0.0343 +-0.0808 0.03045 -0.0436 +-0.08 0.04295 -0.0515 +-0.0591 0.04305 -0.0515 +-0.0561 0.05465 -0.0606 +-0.0701 0.07305 -0.08 +-0.0645 0.08305 -0.0945 +-0.0609 0.09075 -0.109 +-0.0419 0.09695 -0.1252 +-0.0226 0.10145 -0.1436 +-0.0032 0.10145 -0.1436 +-0.0049 0.10485 -0.1629 +0.0136 0.10815 -0.1813 +0.0241 0.11125 -0.1986 +0.0204 0.11295 -0.2085 +0.0267 0.11425 -0.216 +0.0492 0.11455 -0.2176 +0.059 0.11745 -0.234 +0.0873 0.11885 -0.2418 +0.1137 0.12005 -0.249 +0.1401 0.12135 -0.2559 +0.1574 0.11945 -0.2456 +0.1747 0.11785 -0.2364 +0.1916 0.11635 -0.2279 +0.1831 0.11345 -0.2114 +0.2044 0.12635 -0.2185 +0.218 0.13605 -0.2098 +0.2234 0.14335 -0.186 +0.2293 0.14975 -0.168 +0.2382 0.15725 -0.1528 +0.2511 0.16385 -0.1516 +0.2511 0.16605 -0.1394 +0.268 0.17395 -0.1387 +0.2679 0.17625 -0.1255 +0.2679 0.17935 -0.1079 +0.2679 0.18245 -0.0903 +0.2845 0.19225 -0.0738 +0.3054 0.18435 -0.0724 +0.3269 0.17685 -0.071 +0.3491 0.16925 -0.0697 +0.3723 0.16105 -0.0683 +0.3965 0.15195 -0.0667 +0.4216 0.14245 -0.065 +0.4216 0.14575 -0.0461 +0.4216 0.14935 -0.0259 +0.4216 0.15265 -0.0068 +0.4051 0.13235 -0.0032 +0.3906 0.11135 0.0005 +0.3941 0.09335 0.0037 +0.3976 0.07535 0.0069 +0.3822 0.07205 0.0074 +0.3865 0.05425 0.0106 +0.3733 0.05425 0.0306 +0.3603 0.05365 0.0506 +0.3472 0.05235 0.0708 +0.3339 0.05035 0.0911 +0.3339 0.05375 0.1105 +0.3338 0.05715 0.1299 +0.3207 0.05115 0.1309 +0.3079 0.04445 0.1321 +0.2954 0.03725 0.1334 +0.2832 0.02935 0.1348 +0.2714 0.02105 0.1362 +0.26 0.01205 0.1378 +0.2491 0.00265 0.1395 +0.2386 -0.00715 0.1412 +0.2286 -0.01755 0.1431 +0.2191 -0.02835 0.145 +0.2101 -0.03965 0.147 +0.2016 -0.05125 0.149 +0.1937 -0.06335 0.1511 +0.1936 -0.06685 0.1318 +0.1935 -0.07035 0.1124 +0.1862 -0.08275 0.1146 +0.1795 -0.09535 0.1168 +0.1735 -0.11145 0.0997 +0.168 -0.12475 0.102 +0.1634 -0.14075 0.0849 +0.1596 -0.15635 0.0677 +0.1561 -0.17274 0.0506 +0.1347 -0.18339 0.0525 +0.1137 -0.19622 0.0548 +0.0952 -0.19358 0.0543 +0.0768 -0.19097 0.0538 +0.0584 -0.18841 0.0534 +0.0584 -0.19175 0.0344 +0.0582 -0.19659 0.0147 +0.0583 -0.19953 -0.0041 +0.0424 -0.19985 -0.0041 +0.0295 -0.18168 -0.0069 +0.0129 -0.18185 -0.0068 +0.0002 -0.1638 -0.0095 +-0.0123 -0.14585 -0.012 +-0.0247 -0.12815 -0.0144 +-0.037 -0.11065 -0.0167 +-0.0494 -0.09335 -0.0188 +-0.0618 -0.07625 -0.0208 +-0.0743 -0.05925 -0.0226 +-0.0871 -0.04245 -0.0244 +-0.1003 -0.02565 -0.0261 +-0.1003 -0.00695 -0.0291 +-0.1004 0.01055 -0.0344 +-0.1001 0.02845 -0.0425 +-0.1004 0.04265 -0.0512 +-0.0794 0.05635 -0.0621 +-0.0893 0.07535 -0.083 +-0.0841 0.08415 -0.0962 +-0.0813 0.09125 -0.1101 +-0.0613 0.09715 -0.1255 +-0.0419 0.10145 -0.1436 +-0.0235 0.10535 -0.1656 +-0.0062 0.10815 -0.1813 +0.0113 0.11075 -0.1959 +0.0109 0.11335 -0.2107 +0.017 0.11565 -0.2238 +0.0357 0.11675 -0.2299 +0.0442 0.11965 -0.2465 +0.07 0.12085 -0.2535 +0.0964 0.12215 -0.2607 +0.1229 0.12335 -0.2673 +0.1495 0.12445 -0.2736 +0.1665 0.12255 -0.2627 +0.1837 0.12085 -0.2531 +0.2004 0.11925 -0.2442 +0.2131 0.12885 -0.2345 +0.2265 0.13815 -0.2256 +0.2315 0.14505 -0.2018 +0.2349 0.15065 -0.1806 +0.2413 0.15675 -0.1645 +0.2493 0.16125 -0.1617 +0.2571 0.16375 -0.1688 +0.2683 0.17135 -0.1542 +0.2835 0.17905 -0.1461 +0.2834 0.18075 -0.1367 +0.2845 0.18315 -0.1249 +0.2846 0.18595 -0.1091 +0.2846 0.18915 -0.0915 +0.3014 0.19835 -0.0748 +0.3214 0.19045 -0.0734 +0.3421 0.18305 -0.0721 +0.364 0.17545 -0.0708 +0.3874 0.16675 -0.0693 +0.4129 0.15625 -0.0674 +0.4408 0.14375 -0.0652 +0.4407 0.14715 -0.0462 +0.4409 0.15065 -0.0263 +0.4409 0.15405 -0.007 +0.4234 0.13445 -0.0036 +0.4078 0.11415 0 +0.4105 0.09605 0.0032 +0.4131 0.07795 0.0064 +0.4157 0.05985 0.0096 +0.401 0.05735 0.01 +0.3876 0.05795 0.0299 +0.3743 0.05795 0.0499 +0.3609 0.05725 0.07 +0.3473 0.05585 0.0902 +0.3473 0.05925 0.1096 +0.3472 0.06265 0.1289 +0.3471 0.06605 0.1483 +0.3338 0.06055 0.1493 +0.3207 0.05445 0.1503 +0.3078 0.04785 0.1515 +0.2953 0.04055 0.1528 +0.2832 0.03275 0.1542 +0.2714 0.02445 0.1556 +0.26 0.01555 0.1572 +0.2491 0.00615 0.1588 +0.2387 -0.00375 0.1606 +0.2287 -0.01405 0.1624 +0.2191 -0.02485 0.1643 +0.2102 -0.03605 0.1663 +0.2017 -0.04775 0.1683 +0.1938 -0.05975 0.1705 +0.1865 -0.07205 0.1726 +0.1864 -0.07565 0.1533 +0.1863 -0.07925 0.134 +0.1796 -0.09185 0.1362 +0.1735 -0.10475 0.1385 +0.1734 -0.10835 0.1191 +0.1679 -0.12155 0.1215 +0.1631 -0.13825 0.1044 +0.1591 -0.15445 0.0873 +0.1558 -0.17034 0.0702 +0.1529 -0.18707 0.0532 +0.132 -0.19888 0.0552 +0.1117 -0.21255 0.0576 +0.0932 -0.21078 0.0573 +0.0747 -0.20903 0.057 +0.0562 -0.20729 0.0567 +0.0562 -0.21061 0.0377 +0.0561 -0.21507 0.0178 +0.0561 -0.21815 -0.0012 +0.0397 -0.21839 -0.0011 +0.026 -0.20005 -0.0041 +0.0091 -0.20019 -0.004 +-0.0041 -0.18197 -0.0068 +-0.0169 -0.1639 -0.0095 +-0.0295 -0.14595 -0.012 +-0.0421 -0.12825 -0.0144 +-0.0547 -0.11065 -0.0166 +-0.0672 -0.09335 -0.0188 +-0.0799 -0.07625 -0.0208 +-0.0927 -0.05925 -0.0226 +-0.1058 -0.04245 -0.0244 +-0.1193 -0.02565 -0.0261 +-0.1193 -0.00695 -0.0291 +-0.1193 0.01085 -0.0345 +-0.1191 0.02845 -0.0425 +-0.1181 0.04235 -0.051 +-0.1171 0.05215 -0.0584 +-0.1027 0.05785 -0.0635 +-0.1173 0.06825 -0.0742 +-0.1069 0.07905 -0.0881 +-0.1017 0.08585 -0.0993 +-0.0986 0.09145 -0.1106 +-0.0807 0.09725 -0.1261 +-0.0613 0.10145 -0.1436 +-0.0641 0.10485 -0.1625 +-0.047 0.10605 -0.1692 +-0.0383 0.10885 -0.1854 +-0.0245 0.10845 -0.183 +-0.0076 0.11045 -0.1946 +-0.0093 0.11425 -0.2158 +0.0028 0.11775 -0.236 +0.0253 0.11835 -0.2389 +0.0339 0.12105 -0.2547 +0.039 0.12285 -0.2646 +0.0515 0.12295 -0.2652 +0.0692 0.12625 -0.2838 +0.0823 0.12425 -0.2727 +0.106 0.12545 -0.2792 +0.1326 0.12655 -0.2855 +0.1593 0.12755 -0.2912 +0.176 0.12555 -0.2798 +0.193 0.12375 -0.2696 +0.2095 0.12205 -0.2603 +0.2222 0.13135 -0.2504 +0.2355 0.14025 -0.2411 +0.2399 0.14675 -0.2173 +0.2442 0.15275 -0.1953 +0.2466 0.15755 -0.1752 +0.2554 0.15945 -0.1886 +0.2672 0.16625 -0.1802 +0.282 0.17495 -0.1661 +0.2933 0.18175 -0.152 +0.2967 0.18515 -0.1401 +0.299 0.18845 -0.1258 +0.3014 0.19205 -0.1101 +0.3014 0.19515 -0.0925 +0.3186 0.20065 -0.0935 +0.3186 0.20375 -0.0758 +0.337 0.19625 -0.0745 +0.3564 0.18945 -0.0733 +0.3773 0.18235 -0.072 +0.4003 0.17395 -0.0705 +0.4268 0.16245 -0.0685 +0.4603 0.14425 -0.0653 +0.4603 0.14765 -0.0459 +0.4603 0.15105 -0.0265 +0.4603 0.15445 -0.0071 +0.4418 0.13575 -0.0038 +0.4252 0.11625 -0.0003 +0.427 0.09805 0.0029 +0.4288 0.07975 0.0061 +0.4305 0.06155 0.0093 +0.4166 0.06335 0.029 +0.4021 0.06095 0.0294 +0.3886 0.06155 0.0492 +0.3749 0.06155 0.0692 +0.3611 0.06075 0.0893 +0.361 0.06415 0.1087 +0.3609 0.06745 0.128 +0.3608 0.07085 0.1474 +0.3608 0.07425 0.1668 +0.3472 0.06945 0.1677 +0.3338 0.06395 0.1686 +0.3207 0.05795 0.1697 +0.3079 0.05125 0.1708 +0.2954 0.04405 0.1721 +0.2833 0.03625 0.1735 +0.2716 0.02795 0.175 +0.2602 0.01915 0.1765 +0.2493 0.00975 0.1782 +0.2389 -5e-005 0.1799 +0.2289 -0.01035 0.1817 +0.2194 -0.02115 0.1836 +0.2104 -0.03235 0.1856 +0.202 -0.04385 0.1876 +0.1941 -0.05585 0.1897 +0.1868 -0.06815 0.1919 +0.18 -0.08075 0.1941 +0.1797 -0.08465 0.1749 +0.1796 -0.08825 0.1555 +0.1735 -0.10115 0.1578 +0.1681 -0.11435 0.1601 +0.168 -0.11795 0.1408 +0.1631 -0.13145 0.1432 +0.163 -0.13505 0.1238 +0.1589 -0.15185 0.1069 +0.1555 -0.16831 0.0898 +0.1527 -0.18446 0.0726 +0.1504 -0.20156 0.0557 +0.1302 -0.21434 0.058 +0.1105 -0.22895 0.0605 +0.0919 -0.22805 0.0604 +0.0733 -0.22715 0.0602 +0.0548 -0.22622 0.06 +0.0548 -0.22958 0.0409 +0.0548 -0.23361 0.0211 +0.0548 -0.23686 0.002 +0.0376 -0.23696 0.002 +0.0228 -0.21852 -0.0011 +0.0056 -0.21861 -0.0011 +-0.008 -0.20028 -0.004 +-0.0212 -0.18206 -0.0068 +-0.034 -0.16397 -0.0095 +-0.0468 -0.14605 -0.012 +-0.0595 -0.12825 -0.0144 +-0.0723 -0.11075 -0.0166 +-0.0851 -0.09345 -0.0187 +-0.098 -0.07625 -0.0208 +-0.1111 -0.05935 -0.0226 +-0.1244 -0.04245 -0.0244 +-0.1382 -0.02565 -0.0261 +-0.1382 -0.00695 -0.0291 +-0.1382 0.01095 -0.0345 +-0.1381 0.02845 -0.0425 +-0.1348 0.04635 -0.0539 +-0.1272 0.05785 -0.0635 +-0.1414 0.06525 -0.0709 +-0.1289 0.07535 -0.0829 +-0.1198 0.08285 -0.0941 +-0.1158 0.08775 -0.1028 +-0.1148 0.09215 -0.1122 +-0.0989 0.09745 -0.1266 +-0.0807 0.10145 -0.1436 +-0.0799 0.10475 -0.162 +-0.0666 0.10675 -0.1735 +-0.0587 0.10805 -0.1806 +-0.0487 0.10995 -0.1916 +-0.0349 0.11025 -0.1934 +-0.0258 0.11055 -0.1947 +-0.0297 0.11275 -0.2073 +-0.0256 0.11765 -0.2353 +-0.0122 0.12015 -0.2494 +0.0123 0.12045 -0.2513 +0.0238 0.12265 -0.2635 +0.033 0.12425 -0.2728 +0.0427 0.12585 -0.2814 +0.0588 0.12855 -0.2968 +0.0811 0.12875 -0.2982 +0.0921 0.12725 -0.2896 +0.0988 0.12955 -0.3025 +0.1164 0.12815 -0.2949 +0.1263 0.13105 -0.311 +0.1427 0.12965 -0.3034 +0.1695 0.13065 -0.3087 +0.186 0.12845 -0.2967 +0.2026 0.12655 -0.2859 +0.219 0.12495 -0.2763 +0.2317 0.13385 -0.266 +0.2449 0.14235 -0.2565 +0.2488 0.14855 -0.2325 +0.2538 0.15475 -0.2111 +0.2672 0.16205 -0.2041 +0.279 0.16875 -0.1943 +0.2956 0.17815 -0.1774 +0.3069 0.18545 -0.1582 +0.3115 0.18975 -0.1423 +0.3141 0.19335 -0.1269 +0.3168 0.19705 -0.1106 +0.3356 0.20235 -0.1119 +0.3358 0.20545 -0.0943 +0.3358 0.20855 -0.0766 +0.3517 0.20205 -0.0755 +0.369 0.19635 -0.0745 +0.3882 0.19065 -0.0735 +0.4097 0.18395 -0.0723 +0.4336 0.17535 -0.0708 +0.4603 0.16435 -0.0688 +0.4603 0.16705 -0.0493 +0.4603 0.17005 -0.0299 +0.4603 0.17285 -0.0138 +0.4603 0.17635 0.0011 +0.4603 0.15885 0.0093 +0.4603 0.13615 -0.0039 +0.4427 0.11745 -0.0006 +0.4436 0.09915 0.0027 +0.4445 0.08085 0.0059 +0.4454 0.06265 0.0091 +0.4311 0.06505 0.0286 +0.4172 0.06685 0.0483 +0.4029 0.06455 0.0487 +0.389 0.06515 0.0686 +0.375 0.06495 0.0886 +0.3749 0.06835 0.1079 +0.3748 0.07175 0.1273 +0.3747 0.07515 0.1467 +0.3746 0.07855 0.1661 +0.3692 0.09585 0.163 +0.3545 0.09135 0.1638 +0.3402 0.08625 0.1647 +0.326 0.08045 0.1657 +0.3121 0.07395 0.1669 +0.2985 0.06695 0.1681 +0.2853 0.05925 0.1694 +0.2725 0.05095 0.1709 +0.2601 0.04215 0.1725 +0.2481 0.03275 0.1741 +0.2365 0.02285 0.1759 +0.2255 0.01235 0.1777 +0.2149 0.00145 0.1796 +0.2049 -0.00995 0.1817 +0.1954 -0.02185 0.1837 +0.1865 -0.03405 0.1859 +0.1781 -0.04675 0.1881 +0.1704 -0.05975 0.1904 +0.1633 -0.07305 0.1928 +0.1739 -0.09365 0.1964 +0.1736 -0.09755 0.1771 +0.1681 -0.11075 0.1795 +0.1632 -0.12425 0.1818 +0.1632 -0.12785 0.1625 +0.1589 -0.14145 0.1649 +0.1588 -0.14515 0.1456 +0.1588 -0.14865 0.1262 +0.1553 -0.1657 0.1093 +0.1525 -0.18226 0.0922 +0.1504 -0.19863 0.0752 +0.1487 -0.21612 0.0583 +0.129 -0.22985 0.0607 +0.1101 -0.24528 0.0634 +0.0915 -0.24528 0.0634 +0.0729 -0.24528 0.0634 +0.0543 -0.24528 0.0634 +0.0543 -0.248714 0.044 +0.0543 -0.252132 0.0246 +0.0543 -0.25555 0.0052 +0.0359 -0.25555 0.0052 +0.0201 -0.23703 0.002 +0.0023 -0.23707 0.002 +-0.0119 -0.21867 -0.0011 +-0.0253 -0.20034 -0.004 +-0.0384 -0.18212 -0.0068 +-0.0513 -0.16403 -0.0095 +-0.0641 -0.14605 -0.012 +-0.077 -0.12835 -0.0144 +-0.0899 -0.11075 -0.0166 +-0.103 -0.09345 -0.0187 +-0.1161 -0.07635 -0.0208 +-0.1295 -0.05935 -0.0226 +-0.1431 -0.04245 -0.0244 +-0.1572 -0.02565 -0.0261 +-0.1572 -0.00695 -0.0291 +-0.1572 0.01105 -0.0346 +-0.1571 0.02845 -0.0425 +-0.1561 0.05125 -0.0578 +-0.1696 0.06615 -0.0719 +-0.1534 0.07355 -0.0806 +-0.1397 0.08155 -0.092 +-0.1294 0.08625 -0.1 +-0.1238 0.08855 -0.1045 +-0.1263 0.09175 -0.1111 +-0.1164 0.09755 -0.1271 +-0.1001 0.10145 -0.1436 +-0.1042 0.10525 -0.165 +-0.0913 0.10845 -0.1828 +-0.0761 0.10735 -0.1765 +-0.0697 0.10915 -0.1871 +-0.0602 0.11125 -0.1985 +-0.0493 0.11325 -0.2102 +-0.0407 0.11155 -0.2004 +-0.0398 0.11505 -0.2202 +-0.0504 0.11725 -0.2328 +-0.0372 0.11985 -0.2474 +-0.0255 0.12215 -0.2609 +-0.0007 0.12245 -0.2622 +0.0112 0.12465 -0.2747 +0.0233 0.12675 -0.2868 +0.0336 0.12835 -0.2961 +0.0486 0.13085 -0.31 +0.0717 0.13055 -0.3084 +0.0878 0.13005 -0.3056 +0.0841 0.13185 -0.3158 +0.1017 0.13265 -0.3203 +0.1205 0.13625 -0.3408 +0.1388 0.13435 -0.3296 +0.1535 0.13275 -0.321 +0.1803 0.13365 -0.3259 +0.1964 0.13145 -0.3134 +0.2127 0.12945 -0.3021 +0.2288 0.12765 -0.2921 +0.2414 0.13625 -0.2813 +0.2545 0.14435 -0.2715 +0.2581 0.15025 -0.2476 +0.2626 0.15625 -0.2255 +0.2763 0.16355 -0.2179 +0.2919 0.17135 -0.2082 +0.3154 0.18225 -0.1924 +0.326 0.19045 -0.1639 +0.3313 0.19525 -0.1455 +0.3337 0.19895 -0.1283 +0.3523 0.20325 -0.13 +0.3529 0.20655 -0.1126 +0.3532 0.20965 -0.095 +0.3533 0.21275 -0.0774 +0.3646 0.20735 -0.0764 +0.3792 0.20375 -0.0758 +0.3966 0.20015 -0.0752 +0.4162 0.19595 -0.0744 +0.4376 0.19075 -0.0735 +0.4603 0.18435 -0.0724 +0.4603 0.18605 -0.0507 +0.4603 0.18605 -0.0312 +0.4603 0.18405 -0.0178 +0.4603 0.19475 -0.0091 +0.4603 0.20045 0.0156 +0.4603 0.18125 0.02 +0.4603 0.16265 0.0267 +0.4603 0.13945 0.0146 +0.4603 0.11785 -0.0006 +0.4603 0.09955 0.0026 +0.4603 0.08125 0.0058 +0.4603 0.06295 0.009 +0.4457 0.06605 0.0285 +0.4316 0.06845 0.048 +0.4176 0.07035 0.0677 +0.4033 0.06805 0.0681 +0.3891 0.06855 0.0879 +0.389 0.07195 0.1073 +0.3889 0.07535 0.1267 +0.3887 0.07865 0.1461 +0.3885 0.08205 0.1654 +0.3841 0.09965 0.1623 +0.3796 0.11735 0.1592 +0.364 0.11325 0.1599 +0.3485 0.10855 0.1607 +0.3333 0.10305 0.1617 +0.3182 0.09695 0.1628 +0.3036 0.09005 0.164 +0.2893 0.08265 0.1653 +0.2753 0.07445 0.1668 +0.2618 0.06575 0.1683 +0.2487 0.05645 0.1699 +0.236 0.04645 0.1717 +0.2238 0.03595 0.1735 +0.2122 0.02495 0.1755 +0.2011 0.01345 0.1775 +0.1905 0.00135 0.1797 +0.1805 -0.01115 0.1819 +0.1711 -0.02415 0.1841 +0.1623 -0.03745 0.1865 +0.1541 -0.05125 0.1889 +0.1466 -0.06525 0.1914 +0.1568 -0.08675 0.1952 +0.1683 -0.10675 0.1987 +0.1634 -0.12015 0.2011 +0.1592 -0.13375 0.2035 +0.159 -0.13785 0.1842 +0.1554 -0.15165 0.1867 +0.1553 -0.15525 0.1674 +0.1553 -0.15893 0.148 +0.1552 -0.16247 0.1287 +0.1524 -0.17956 0.1117 +0.1502 -0.19624 0.0947 +0.1487 -0.2129 0.0777 +0.1476 -0.23077 0.0608 +0.1287 -0.24528 0.0634 +0.1101 -0.242 0.082 +0.0915 -0.24203 0.0819 +0.0729 -0.24202 0.082 +0.0543 -0.24197 0.0822 +0.035 -0.24528 0.0634 +0.0353 -0.248714 0.044 +0.0359 -0.2523 0.0236 +0.0176 -0.252361 0.0233 +0.0176 -0.25555 0.0052 +-0.0008 -0.25555 0.0052 +-0.0156 -0.2371 0.002 +-0.0294 -0.21871 -0.0011 +-0.0427 -0.2004 -0.004 +-0.0557 -0.18217 -0.0068 +-0.0685 -0.16407 -0.0095 +-0.0814 -0.14615 -0.012 +-0.0944 -0.12835 -0.0144 +-0.1076 -0.11085 -0.0166 +-0.1208 -0.09345 -0.0187 +-0.1342 -0.07635 -0.0208 +-0.1478 -0.05935 -0.0226 +-0.1618 -0.04245 -0.0244 +-0.1761 -0.02565 -0.0261 +-0.1761 -0.00695 -0.0291 +-0.1761 0.01105 -0.0346 +-0.1761 0.02845 -0.0425 +-0.18 0.04425 -0.0524 +-0.1878 0.05815 -0.0638 +-0.1965 0.06915 -0.0753 +-0.1807 0.07605 -0.0839 +-0.165 0.08245 -0.0934 +-0.149 0.08705 -0.1014 +-0.1368 0.09005 -0.1074 +-0.1317 0.09675 -0.1244 +-0.1195 0.10145 -0.1436 +-0.1247 0.10365 -0.156 +-0.1204 0.10765 -0.1784 +-0.1087 0.10985 -0.1909 +-0.0974 0.11215 -0.2038 +-0.083 0.11045 -0.1945 +-0.0725 0.11265 -0.2068 +-0.0607 0.11505 -0.2202 +-0.0742 0.11695 -0.2313 +-0.0626 0.11935 -0.2451 +-0.051 0.12185 -0.2588 +-0.0392 0.12425 -0.2725 +-0.0271 0.12665 -0.286 +-0.0137 0.12445 -0.274 +-0.0015 0.12675 -0.2868 +0.011 0.12895 -0.2992 +0.0238 0.13105 -0.3113 +0.037 0.13315 -0.323 +0.0505 0.13515 -0.3344 +0.0618 0.13285 -0.3211 +0.0751 0.13465 -0.3318 +0.0898 0.13645 -0.3417 +0.106 0.13865 -0.3542 +0.1201 0.14045 -0.3643 +0.1308 0.13865 -0.354 +0.1468 0.13705 -0.3452 +0.1649 0.13545 -0.3361 +0.1769 0.13815 -0.3512 +0.1917 0.13665 -0.3428 +0.2072 0.13435 -0.3299 +0.2233 0.13225 -0.318 +0.2391 0.13045 -0.3076 +0.2516 0.13855 -0.2964 +0.2645 0.14635 -0.2862 +0.2677 0.15195 -0.2623 +0.2718 0.15775 -0.2399 +0.2861 0.16475 -0.2332 +0.3021 0.17215 -0.2245 +0.3215 0.17985 -0.2163 +0.3443 0.19045 -0.192 +0.3479 0.19555 -0.1679 +0.3506 0.19975 -0.1481 +0.3672 0.20285 -0.1505 +0.3695 0.20675 -0.131 +0.3703 0.21005 -0.1132 +0.3707 0.21325 -0.0957 +0.3708 0.21635 -0.078 +0.374 0.21165 -0.0772 +0.3861 0.21125 -0.0771 +0.4025 0.21055 -0.077 +0.4208 0.20925 -0.0768 +0.4403 0.20715 -0.0764 +0.4603 0.20445 -0.0759 +0.4603 0.20295 -0.0523 +0.4603 0.20065 -0.0309 +0.4603 0.21945 -0.0089 +0.4603 0.21865 0.013 +0.4603 0.21825 0.0303 +0.4603 0.20205 0.0327 +0.4603 0.18555 0.0343 +0.4603 0.16895 0.0429 +0.4603 0.14275 0.0331 +0.4603 0.12115 0.0179 +0.4603 0.10285 0.0213 +0.4603 0.08465 0.0248 +0.4603 0.06635 0.0284 +0.4459 0.06945 0.0478 +0.4318 0.07195 0.0674 +0.4318 0.07535 0.0868 +0.4176 0.07375 0.087 +0.4033 0.07145 0.0874 +0.4032 0.07485 0.1068 +0.403 0.07825 0.1262 +0.4029 0.08165 0.1455 +0.4027 0.08505 0.1649 +0.399 0.10285 0.1618 +0.3955 0.12065 0.1586 +0.3921 0.13845 0.1555 +0.3754 0.13495 0.1561 +0.3588 0.13075 0.1568 +0.3425 0.12575 0.1577 +0.3265 0.11995 0.1587 +0.3107 0.11345 0.1599 +0.2953 0.10625 0.1611 +0.2802 0.09845 0.1625 +0.2655 0.08985 0.164 +0.2513 0.08065 0.1657 +0.2375 0.07085 0.1674 +0.2241 0.06035 0.1693 +0.2113 0.04925 0.1712 +0.199 0.03765 0.1733 +0.1873 0.02545 0.1754 +0.1762 0.01285 0.1776 +0.1656 -0.00045 0.18 +0.1557 -0.01405 0.1824 +0.1465 -0.02805 0.1849 +0.1379 -0.04255 0.1874 +0.13 -0.05745 0.19 +0.1398 -0.07975 0.1939 +0.151 -0.10065 0.1976 +0.1458 -0.11475 0.2001 +0.1413 -0.12915 0.2027 +0.1555 -0.14765 0.2059 +0.1526 -0.16157 0.2084 +0.1524 -0.16558 0.1891 +0.1524 -0.16918 0.1698 +0.1524 -0.1728 0.1504 +0.1523 -0.17633 0.1311 +0.1501 -0.19345 0.1142 +0.1486 -0.21023 0.0972 +0.1476 -0.22728 0.0802 +0.1473 -0.24188 0.0828 +0.1473 -0.24528 0.0634 +0.1283 -0.24188 0.0828 +0.128 -0.23846 0.1021 +0.1092 -0.23849 0.1019 +0.0915 -0.23869 0.1008 +0.0731 -0.23867 0.1009 +0.0546 -0.23857 0.1015 +0.0349 -0.24191 0.0826 +0.0153 -0.24198 0.0822 +0.0164 -0.245861 0.0601 +0.0174 -0.24908 0.0419 +-0.0008 -0.249172 0.0414 +-0.0008 -0.252361 0.0233 +-0.0192 -0.252361 0.0233 +-0.0192 -0.25555 0.0052 +-0.0335 -0.23713 0.002 +-0.0471 -0.21875 -0.0011 +-0.0602 -0.20043 -0.004 +-0.073 -0.18222 -0.0068 +-0.0858 -0.1641 -0.0095 +-0.0988 -0.14615 -0.012 +-0.1119 -0.12845 -0.0144 +-0.1252 -0.11085 -0.0166 +-0.1387 -0.09355 -0.0187 +-0.1523 -0.07635 -0.0208 +-0.1662 -0.05935 -0.0226 +-0.1804 -0.04245 -0.0244 +-0.1951 -0.02565 -0.0261 +-0.1951 -0.00695 -0.0291 +-0.1951 0.01115 -0.0346 +-0.1944 0.02735 -0.0419 +-0.1961 0.04025 -0.0496 +-0.2025 0.05045 -0.0571 +-0.2125 0.06185 -0.0674 +-0.2073 0.07875 -0.0877 +-0.1918 0.08455 -0.0969 +-0.1765 0.08975 -0.1069 +-0.1608 0.09325 -0.1147 +-0.1465 0.09565 -0.1212 +-0.1388 0.10145 -0.1436 +-0.1376 0.10275 -0.1509 +-0.1326 0.10555 -0.1664 +-0.1347 0.12425 -0.1652 +-0.1213 0.12685 -0.1784 +-0.1089 0.12875 -0.1915 +-0.0974 0.13005 -0.2046 +-0.0858 0.11455 -0.2176 +-0.0858 0.13215 -0.2183 +-0.0742 0.13425 -0.232 +-0.0626 0.13635 -0.2457 +-0.051 0.13855 -0.2594 +-0.0393 0.14055 -0.273 +-0.0272 0.14265 -0.2865 +-0.0145 0.12895 -0.2991 +-0.0017 0.13115 -0.3119 +0.0115 0.13335 -0.3243 +0.0251 0.13545 -0.3364 +0.039 0.13755 -0.3481 +0.0643 0.13705 -0.3454 +0.0784 0.13895 -0.356 +0.0942 0.14095 -0.3674 +0.1089 0.14265 -0.3772 +0.1224 0.14415 -0.3856 +0.1311 0.14205 -0.3734 +0.1369 0.14035 -0.3641 +0.1534 0.14035 -0.3641 +0.1749 0.14285 -0.3783 +0.1896 0.14075 -0.3664 +0.2039 0.13915 -0.3573 +0.2186 0.13725 -0.3462 +0.2342 0.13505 -0.3337 +0.2498 0.13305 -0.3227 +0.2621 0.14095 -0.3112 +0.2749 0.14835 -0.3006 +0.2776 0.15365 -0.2768 +0.2813 0.15915 -0.2542 +0.2955 0.16585 -0.2469 +0.3091 0.17175 -0.2405 +0.3237 0.17715 -0.2359 +0.3432 0.18285 -0.2333 +0.3441 0.18655 -0.2136 +0.3634 0.19135 -0.2115 +0.3637 0.19485 -0.1921 +0.3643 0.19835 -0.1727 +0.3838 0.20525 -0.154 +0.3869 0.20955 -0.1323 +0.3878 0.21295 -0.114 +0.3883 0.21615 -0.0963 +0.3886 0.21925 -0.0785 +0.4064 0.22155 -0.0789 +0.4243 0.22325 -0.0792 +0.4422 0.22415 -0.0794 +0.4603 0.22455 -0.0794 +0.4603 0.22105 -0.0538 +0.4603 0.22075 -0.0307 +0.4603 0.23675 -0.0114 +0.4603 0.23755 0.0093 +0.4603 0.23715 0.028 +0.4603 0.23675 0.045 +0.4603 0.21785 0.045 +0.4603 0.20225 0.046 +0.4603 0.18955 0.0453 +0.4603 0.17945 0.0596 +0.4603 0.15035 0.0712 +0.4603 0.14635 0.0519 +0.4603 0.12455 0.0366 +0.4603 0.10655 0.0404 +0.4603 0.08895 0.0444 +0.4603 0.06975 0.0478 +0.446 0.07285 0.0672 +0.446 0.07625 0.0866 +0.4459 0.07975 0.1059 +0.4317 0.07875 0.1061 +0.4174 0.07715 0.1064 +0.4173 0.08055 0.1258 +0.4171 0.08395 0.1451 +0.417 0.08735 0.1645 +0.4144 0.10525 0.1613 +0.4118 0.12325 0.1582 +0.4092 0.14125 0.155 +0.3888 0.15635 0.1523 +0.3712 0.15265 0.153 +0.3538 0.14815 0.1538 +0.3367 0.14295 0.1547 +0.3199 0.13695 0.1558 +0.3033 0.13015 0.157 +0.2871 0.12255 0.1583 +0.2712 0.11425 0.1597 +0.2558 0.10535 0.1613 +0.2409 0.09565 0.163 +0.2263 0.08535 0.1649 +0.2123 0.07435 0.1668 +0.1989 0.06265 0.1688 +0.186 0.05045 0.171 +0.1736 0.03775 0.1732 +0.1619 0.02435 0.1756 +0.1509 0.01055 0.1781 +0.1405 -0.00385 0.1806 +0.1307 -0.01865 0.1832 +0.1218 -0.03385 0.1859 +0.1135 -0.04945 0.1886 +0.1228 -0.07265 0.1927 +0.1337 -0.09435 0.1965 +0.1282 -0.10935 0.1992 +0.1235 -0.12455 0.2018 +0.1375 -0.14375 0.2052 +0.1344 -0.15855 0.2079 +0.1502 -0.17561 0.2109 +0.1502 -0.17958 0.1916 +0.1501 -0.18313 0.1723 +0.1501 -0.1867 0.1529 +0.1501 -0.1902 0.1336 +0.1485 -0.2073 0.1166 +0.1476 -0.22428 0.0996 +0.1473 -0.23846 0.1021 +0.1473 -0.23504 0.1215 +0.1278 -0.23504 0.1215 +0.1086 -0.23506 0.1214 +0.0901 -0.23513 0.121 +0.0735 -0.23529 0.1201 +0.0551 -0.23521 0.1206 +0.0352 -0.23523 0.1204 +0.0349 -0.23851 0.1018 +0.0146 -0.23841 0.1024 +-0.0037 -0.23916 0.0981 +-0.0014 -0.24264 0.0784 +-0.0011 -0.245983 0.0595 +-0.0192 -0.249172 0.0414 +-0.0376 -0.249172 0.0414 +-0.0376 -0.252361 0.0233 +-0.0376 -0.25555 0.0052 +-0.0515 -0.23715 0.002 +-0.0648 -0.21878 -0.001 +-0.0777 -0.20046 -0.004 +-0.0904 -0.18225 -0.0068 +-0.1031 -0.16415 -0.0095 +-0.1161 -0.14625 -0.012 +-0.1294 -0.12845 -0.0144 +-0.1429 -0.11085 -0.0166 +-0.1566 -0.09355 -0.0187 +-0.1705 -0.07635 -0.0207 +-0.1846 -0.05935 -0.0226 +-0.1991 -0.04255 -0.0244 +-0.214 -0.02565 -0.0261 +-0.214 -0.00695 -0.0291 +-0.214 0.01115 -0.0346 +-0.2115 0.02715 -0.0418 +-0.2083 0.03735 -0.0477 +-0.2166 0.04435 -0.0525 +-0.2276 0.05535 -0.0613 +-0.223 0.07235 -0.0791 +-0.2332 0.08155 -0.092 +-0.2178 0.08685 -0.1011 +-0.2026 0.09155 -0.1108 +-0.1875 0.09565 -0.1211 +-0.1727 0.09895 -0.132 +-0.1582 0.10145 -0.1436 +-0.1452 0.10345 -0.1547 +-0.1473 0.12155 -0.1538 +-0.1485 0.14115 -0.1535 +-0.1354 0.14405 -0.1653 +-0.1217 0.14675 -0.1788 +-0.1093 0.14845 -0.1918 +-0.0974 0.14795 -0.2053 +-0.0858 0.14975 -0.219 +-0.0742 0.15155 -0.2326 +-0.0626 0.15345 -0.2463 +-0.051 0.15525 -0.26 +-0.0392 0.15695 -0.2737 +-0.027 0.15875 -0.2872 +-0.0146 0.14465 -0.2996 +-0.0016 0.14665 -0.3125 +0.0118 0.14855 -0.3251 +0.0255 0.15045 -0.3373 +0.0396 0.15225 -0.3491 +0.0531 0.13955 -0.3594 +0.0676 0.14145 -0.3703 +0.0824 0.14335 -0.3808 +0.0975 0.14515 -0.391 +0.1129 0.14685 -0.4007 +0.1285 0.14845 -0.41 +0.1377 0.14575 -0.3946 +0.1465 0.14315 -0.3797 +0.1639 0.14505 -0.3904 +0.1772 0.14645 -0.3984 +0.1859 0.14475 -0.3888 +0.1979 0.14335 -0.3811 +0.2151 0.14205 -0.3735 +0.2306 0.14005 -0.3622 +0.2457 0.13775 -0.3491 +0.2609 0.13575 -0.3376 +0.2731 0.14315 -0.3256 +0.2858 0.15025 -0.3148 +0.288 0.15525 -0.2909 +0.2912 0.16055 -0.2682 +0.3052 0.16685 -0.2607 +0.3161 0.17135 -0.2552 +0.3274 0.17525 -0.2525 +0.3422 0.17935 -0.2519 +0.3624 0.18425 -0.2508 +0.3629 0.18785 -0.231 +0.3828 0.19155 -0.2307 +0.383 0.19495 -0.2116 +0.3831 0.19835 -0.1926 +0.3832 0.20175 -0.1734 +0.4024 0.20435 -0.1741 +0.4027 0.20775 -0.1549 +0.4043 0.21155 -0.1341 +0.4054 0.21515 -0.1149 +0.406 0.21835 -0.0969 +0.4237 0.21995 -0.0976 +0.4412 0.22075 -0.0984 +0.4603 0.22115 -0.0985 +0.4603 0.24085 -0.083 +0.4603 0.23945 -0.0729 +0.4603 0.23725 -0.0507 +0.4603 0.23675 -0.0302 +0.4603 0.25555 -0.0114 +0.4603 0.25555 0.0074 +0.4603 0.25555 0.0262 +0.4603 0.25555 0.045 +0.4603 0.25555 0.0638 +0.4603 0.23675 0.0638 +0.4603 0.21785 0.0638 +0.4603 0.19995 0.0642 +0.4603 0.19815 0.0871 +0.4603 0.17695 0.0908 +0.4603 0.15325 0.0952 +0.4603 0.13085 0.0767 +0.4603 0.12875 0.0559 +0.4603 0.11125 0.0603 +0.4603 0.09255 0.0637 +0.4603 0.07315 0.0671 +0.4603 0.07665 0.0865 +0.4603 0.08005 0.1059 +0.4603 0.08345 0.1252 +0.4459 0.08315 0.1253 +0.4316 0.08215 0.1255 +0.4315 0.08555 0.1448 +0.4314 0.08895 0.1642 +0.4296 0.10705 0.161 +0.4279 0.12515 0.1578 +0.4262 0.14315 0.1546 +0.4067 0.15925 0.1518 +0.3858 0.17425 0.1491 +0.3675 0.17045 0.1498 +0.3494 0.16585 0.1506 +0.3315 0.16035 0.1516 +0.3139 0.15415 0.1527 +0.2966 0.14705 0.154 +0.2797 0.13925 0.1553 +0.2631 0.13065 0.1569 +0.247 0.12125 0.1585 +0.2313 0.11125 0.1603 +0.2161 0.10045 0.1622 +0.2014 0.08905 0.1642 +0.1873 0.07695 0.1663 +0.1738 0.06415 0.1686 +0.1608 0.05085 0.1709 +0.1485 0.03695 0.1734 +0.1369 0.02255 0.1759 +0.126 0.00755 0.1786 +0.1158 -0.00795 0.1813 +0.1063 -0.02375 0.1841 +0.0976 -0.04015 0.187 +0.0896 -0.05675 0.1899 +0.1059 -0.06545 0.1914 +0.1164 -0.08805 0.1954 +0.1107 -0.10385 0.1982 +0.1057 -0.11985 0.201 +0.1195 -0.13995 0.2046 +0.1162 -0.15545 0.2073 +0.1319 -0.17336 0.2105 +0.1486 -0.18975 0.2134 +0.1486 -0.1936 0.1941 +0.1485 -0.19708 0.1747 +0.1485 -0.20059 0.1554 +0.1485 -0.20404 0.136 +0.1476 -0.22114 0.119 +0.1476 -0.21783 0.1384 +0.1473 -0.23162 0.1409 +0.1277 -0.23162 0.1409 +0.1083 -0.23164 0.1408 +0.0896 -0.23165 0.1407 +0.0721 -0.23127 0.1429 +0.0544 -0.23101 0.1444 +0.0353 -0.23143 0.142 +0.0132 -0.23555 0.1186 +-0.0049 -0.23617 0.1151 +-0.0216 -0.23632 0.1142 +-0.0196 -0.23959 0.0957 +-0.0192 -0.24278 0.0776 +-0.0192 -0.245983 0.0595 +-0.0376 -0.245983 0.0595 +-0.056 -0.245983 0.0595 +-0.056 -0.249172 0.0414 +-0.056 -0.252361 0.0233 +-0.056 -0.25555 0.0052 +-0.0695 -0.23716 0.002 +-0.0825 -0.21881 -0.001 +-0.0952 -0.2005 -0.004 +-0.1077 -0.18228 -0.0068 +-0.1205 -0.16418 -0.0095 +-0.1335 -0.14625 -0.012 +-0.1469 -0.12845 -0.0144 +-0.1605 -0.11095 -0.0166 +-0.1744 -0.09355 -0.0187 +-0.1886 -0.07645 -0.0207 +-0.203 -0.05945 -0.0226 +-0.2177 -0.04255 -0.0244 +-0.233 -0.02565 -0.0261 +-0.233 -0.00695 -0.0291 +-0.233 0.01115 -0.0346 +-0.2302 0.03265 -0.0448 +-0.2448 0.04825 -0.0554 +-0.2388 0.06565 -0.0713 +-0.2488 0.07585 -0.0836 +-0.2547 0.09365 -0.0817 +-0.2386 0.09955 -0.0902 +-0.2226 0.10495 -0.0993 +-0.2067 0.10975 -0.1091 +-0.1909 0.11375 -0.1196 +-0.1754 0.11685 -0.1309 +-0.1603 0.11905 -0.1427 +-0.1628 0.13745 -0.1415 +-0.1639 0.15985 -0.1414 +-0.1496 0.16245 -0.1533 +-0.1353 0.16455 -0.1662 +-0.1217 0.16655 -0.1794 +-0.1094 0.16625 -0.1923 +-0.0974 0.16585 -0.2059 +-0.0858 0.16735 -0.2195 +-0.0742 0.16885 -0.2332 +-0.0626 0.17045 -0.2468 +-0.051 0.17195 -0.2605 +-0.0391 0.17335 -0.2743 +-0.0268 0.17485 -0.2879 +-0.0143 0.16045 -0.3005 +-0.0012 0.16215 -0.3134 +0.0123 0.16375 -0.3261 +0.0263 0.16545 -0.3384 +0.0405 0.16695 -0.3503 +0.054 0.15395 -0.3605 +0.0688 0.15565 -0.3716 +0.0838 0.15725 -0.3822 +0.099 0.15885 -0.3923 +0.1145 0.16035 -0.4021 +0.1302 0.16175 -0.4113 +0.1444 0.15005 -0.4188 +0.153 0.14725 -0.4033 +0.1687 0.14875 -0.4115 +0.1893 0.14775 -0.4056 +0.1927 0.14615 -0.397 +0.2031 0.14595 -0.3957 +0.2251 0.14565 -0.3938 +0.2434 0.14275 -0.3776 +0.2578 0.14045 -0.3642 +0.2725 0.13825 -0.352 +0.2845 0.14535 -0.3397 +0.297 0.15195 -0.3285 +0.2987 0.15675 -0.3047 +0.3014 0.16175 -0.2819 +0.3129 0.16745 -0.272 +0.3192 0.17065 -0.2649 +0.3281 0.17285 -0.2672 +0.3424 0.17625 -0.2702 +0.3619 0.18055 -0.2709 +0.3823 0.18465 -0.2694 +0.3826 0.18815 -0.25 +0.4022 0.19085 -0.2502 +0.4023 0.19425 -0.2312 +0.4023 0.19755 -0.2122 +0.4024 0.20095 -0.1931 +0.4216 0.20285 -0.1934 +0.4216 0.20625 -0.1744 +0.4216 0.20955 -0.1554 +0.4219 0.21295 -0.1363 +0.423 0.21655 -0.1161 +0.4409 0.21745 -0.1175 +0.4603 0.21775 -0.1175 +0.4603 0.25555 -0.1054 +0.4603 0.25555 -0.0866 +0.4603 0.25555 -0.0678 +0.4603 0.25555 -0.049 +0.4603 0.25555 -0.0302 +0.4415 0.25555 -0.0114 +0.4415 0.25555 0.0074 +0.4415 0.25555 0.0262 +0.4415 0.25555 0.045 +0.4415 0.25555 0.0638 +0.4415 0.25555 0.0826 +0.4603 0.25555 0.0826 +0.4603 0.23675 0.0826 +0.4603 0.21695 0.0849 +0.4603 0.21585 0.1049 +0.4603 0.19775 0.1088 +0.4603 0.17645 0.1129 +0.4603 0.15665 0.1152 +0.4603 0.13515 0.099 +0.4603 0.11465 0.0798 +0.4603 0.09595 0.0831 +0.4603 0.09935 0.1025 +0.4603 0.10245 0.1239 +0.4603 0.08685 0.1446 +0.4458 0.08655 0.1447 +0.4458 0.08995 0.164 +0.4449 0.10805 0.1608 +0.4441 0.12625 0.1576 +0.4432 0.14435 0.1544 +0.4245 0.16125 0.1515 +0.4043 0.17725 0.1486 +0.4043 0.18035 0.1665 +0.3858 0.17745 0.167 +0.3675 0.17365 0.1677 +0.3494 0.16895 0.1685 +0.3315 0.16355 0.1694 +0.3139 0.15725 0.1706 +0.2966 0.15025 0.1718 +0.2797 0.14235 0.1732 +0.2631 0.13375 0.1747 +0.247 0.12445 0.1763 +0.2313 0.11435 0.1781 +0.2161 0.10365 0.18 +0.2014 0.09215 0.182 +0.1873 0.08005 0.1842 +0.1738 0.06735 0.1864 +0.1608 0.05395 0.1888 +0.1485 0.04005 0.1912 +0.1369 0.02565 0.1938 +0.126 0.01065 0.1964 +0.1158 -0.00475 0.1991 +0.1063 -0.02065 0.2019 +0.0976 -0.03695 0.2048 +0.0896 -0.05365 0.2077 +0.0824 -0.07385 0.1929 +0.0991 -0.08165 0.1943 +0.0931 -0.09825 0.1972 +0.0879 -0.11505 0.2002 +0.1015 -0.13605 0.2039 +0.098 -0.15245 0.2068 +0.1136 -0.17115 0.2101 +0.1302 -0.18835 0.2131 +0.1476 -0.20397 0.2159 +0.1476 -0.20762 0.1965 +0.1476 -0.21098 0.1772 +0.1476 -0.21441 0.1578 +0.1473 -0.22821 0.1602 +0.1277 -0.22821 0.1602 +0.1085 -0.22819 0.1603 +0.091 -0.22793 0.1618 +0.0731 -0.22775 0.1628 +0.0549 -0.22766 0.1633 +0.0365 -0.22763 0.1636 +0.0108 -0.22776 0.1628 +0.0055 -0.23111 0.1438 +-0.0102 -0.23255 0.1356 +-0.0249 -0.23353 0.1301 +-0.0376 -0.23643 0.1137 +-0.0376 -0.23959 0.0957 +-0.0376 -0.24278 0.0776 +-0.056 -0.24278 0.0776 +-0.0743 -0.24278 0.0776 +-0.0743 -0.245983 0.0595 +-0.0743 -0.249172 0.0414 +-0.0743 -0.252361 0.0233 +-0.0743 -0.25555 0.0052 +-0.0876 -0.23718 0.002 +-0.1003 -0.21882 -0.001 +-0.1127 -0.20051 -0.004 +-0.1251 -0.18229 -0.0068 +-0.1378 -0.16421 -0.0094 +-0.1508 -0.14625 -0.012 +-0.1644 -0.12855 -0.0144 +-0.1782 -0.11095 -0.0166 +-0.1923 -0.09365 -0.0187 +-0.2067 -0.07645 -0.0207 +-0.2213 -0.05945 -0.0226 +-0.2364 -0.04255 -0.0244 +-0.2519 -0.02565 -0.0261 +-0.2519 -0.00695 -0.0291 +-0.2538 0.01075 -0.0345 +-0.2554 0.02635 -0.0414 +-0.2628 0.03955 -0.0491 +-0.2549 0.05845 -0.0641 +-0.2645 0.06965 -0.0758 +-0.2708 0.08725 -0.0741 +-0.2773 0.10545 -0.0723 +-0.2607 0.11205 -0.0798 +-0.2441 0.11815 -0.0882 +-0.2274 0.12375 -0.0974 +-0.2108 0.12865 -0.1073 +-0.1944 0.13435 -0.1181 +-0.1778 0.13525 -0.1299 +-0.1778 0.15755 -0.1306 +-0.1777 0.18185 -0.1314 +-0.1633 0.18255 -0.1425 +-0.1485 0.18405 -0.1548 +-0.1349 0.18415 -0.167 +-0.1219 0.18425 -0.1797 +-0.1094 0.18415 -0.1927 +-0.0974 0.18385 -0.2063 +-0.0858 0.18505 -0.22 +-0.0742 0.18625 -0.2336 +-0.0626 0.18745 -0.2473 +-0.051 0.18865 -0.2609 +-0.039 0.18975 -0.2748 +-0.0266 0.19095 -0.2885 +-0.014 0.17625 -0.3012 +-0.0007 0.17765 -0.3142 +0.0129 0.17905 -0.327 +0.027 0.18035 -0.3394 +0.0414 0.18165 -0.3514 +0.0552 0.16845 -0.3618 +0.0701 0.16985 -0.3729 +0.0852 0.17125 -0.3836 +0.1006 0.17255 -0.3937 +0.1161 0.17385 -0.4034 +0.1319 0.17505 -0.4127 +0.1461 0.16315 -0.4201 +0.1605 0.15155 -0.4273 +0.1769 0.15295 -0.4353 +0.1847 0.15015 -0.4192 +0.2011 0.14845 -0.4099 +0.2212 0.14965 -0.4168 +0.2477 0.14795 -0.4071 +0.2597 0.14535 -0.3921 +0.2705 0.14305 -0.379 +0.2847 0.14075 -0.3661 +0.2963 0.14735 -0.3532 +0.3085 0.15365 -0.3418 +0.3097 0.15825 -0.3181 +0.3105 0.16285 -0.2937 +0.3223 0.16885 -0.2806 +0.3389 0.17135 -0.2924 +0.3618 0.17695 -0.2914 +0.3821 0.18115 -0.2891 +0.402 0.18405 -0.2886 +0.4021 0.18745 -0.2693 +0.4216 0.18945 -0.2696 +0.4216 0.19275 -0.2506 +0.4216 0.19615 -0.2315 +0.4216 0.19945 -0.2125 +0.4409 0.20395 -0.1936 +0.4409 0.20735 -0.1746 +0.4409 0.21075 -0.1556 +0.4409 0.21405 -0.1365 +0.4603 0.21445 -0.1366 +0.4603 0.23995 -0.144 +0.4603 0.25555 -0.1241 +0.4415 0.25555 -0.1054 +0.4415 0.25555 -0.0866 +0.4415 0.25555 -0.0678 +0.4415 0.25555 -0.049 +0.4415 0.25555 -0.0302 +0.4227 0.25555 -0.0114 +0.4227 0.25555 0.0074 +0.4227 0.25555 0.0262 +0.4227 0.25555 0.045 +0.4227 0.25555 0.0638 +0.4227 0.25555 0.0826 +0.4227 0.25555 0.1014 +0.4415 0.25555 0.1014 +0.4603 0.25555 0.1014 +0.4603 0.23675 0.1014 +0.4603 0.23675 0.1202 +0.4603 0.21675 0.1234 +0.4603 0.19765 0.1271 +0.4603 0.17785 0.13 +0.4603 0.15975 0.1331 +0.4603 0.14155 0.1363 +0.4603 0.13845 0.1183 +0.4603 0.11725 0.1019 +0.4603 0.12035 0.1214 +0.4603 0.10515 0.1424 +0.4603 0.09025 0.164 +0.4603 0.10845 0.1608 +0.4603 0.12655 0.1576 +0.4603 0.14475 0.1544 +0.4423 0.16255 0.1512 +0.4229 0.17935 0.1483 +0.4229 0.18255 0.1661 +0.4229 0.18565 0.1839 +0.4043 0.18355 0.1843 +0.3858 0.18055 0.1848 +0.3675 0.17675 0.1855 +0.3494 0.17215 0.1863 +0.3315 0.16665 0.1873 +0.3139 0.16045 0.1884 +0.2966 0.15335 0.1896 +0.2797 0.14555 0.191 +0.2631 0.13695 0.1925 +0.247 0.12755 0.1942 +0.2313 0.11755 0.1959 +0.2161 0.10675 0.1979 +0.2014 0.09535 0.1999 +0.1873 0.08325 0.202 +0.1738 0.07045 0.2043 +0.1608 0.05715 0.2066 +0.1485 0.04325 0.209 +0.1369 0.02875 0.2116 +0.126 0.01385 0.2142 +0.1158 -0.00165 0.217 +0.1063 -0.01755 0.2198 +0.0976 -0.03385 0.2226 +0.0896 -0.05045 0.2256 +0.0824 -0.07065 0.2108 +0.0761 -0.09115 0.196 +0.0705 -0.10875 0.1991 +0.0658 -0.12665 0.2022 +0.0835 -0.13215 0.2032 +0.0798 -0.14935 0.2062 +0.0953 -0.16894 0.2097 +0.1118 -0.18698 0.2129 +0.1292 -0.20341 0.2158 +0.1473 -0.21797 0.2183 +0.1473 -0.22139 0.199 +0.1473 -0.2248 0.1796 +0.1279 -0.2248 0.1796 +0.1101 -0.22462 0.1806 +0.0918 -0.22451 0.1812 +0.0734 -0.22445 0.1816 +0.055 -0.22441 0.1818 +0.0365 -0.22441 0.1819 +0.0147 -0.22441 0.1818 +-0.0005 -0.22438 0.182 +-0.0029 -0.22776 0.1628 +-0.0043 -0.22972 0.1517 +-0.0137 -0.23036 0.1481 +-0.0268 -0.23117 0.1435 +-0.0392 -0.23399 0.1275 +-0.056 -0.23645 0.1135 +-0.056 -0.23959 0.0957 +-0.0743 -0.2396 0.0957 +-0.0927 -0.2396 0.0956 +-0.0927 -0.24278 0.0776 +-0.0927 -0.245983 0.0595 +-0.0927 -0.249172 0.0414 +-0.0927 -0.252361 0.0233 +-0.0927 -0.25555 0.0052 +-0.1057 -0.23718 0.002 +-0.1181 -0.21884 -0.001 +-0.1302 -0.20054 -0.004 +-0.1425 -0.18232 -0.0068 +-0.1551 -0.16424 -0.0094 +-0.1682 -0.14635 -0.012 +-0.1818 -0.12855 -0.0144 +-0.1958 -0.11105 -0.0166 +-0.2102 -0.09365 -0.0187 +-0.2248 -0.07645 -0.0207 +-0.2397 -0.05945 -0.0226 +-0.2551 -0.04255 -0.0244 +-0.2708 -0.02565 -0.0261 +-0.2708 -0.00695 -0.0291 +-0.2695 0.01075 -0.0345 +-0.2717 0.02205 -0.0392 +-0.2784 0.03305 -0.0451 +-0.271 0.05105 -0.0576 +-0.2803 0.06305 -0.0686 +-0.287 0.08055 -0.0669 +-0.2939 0.09845 -0.0653 +-0.3011 0.11695 -0.0637 +-0.2841 0.12425 -0.0704 +-0.2668 0.13145 -0.078 +-0.2493 0.13795 -0.0865 +-0.2307 0.14465 -0.0964 +-0.2148 0.15245 -0.1058 +-0.1991 0.16205 -0.116 +-0.1942 0.18245 -0.1198 +-0.1911 0.20185 -0.1223 +-0.1765 0.20185 -0.1327 +-0.1624 0.20195 -0.1436 +-0.1487 0.20195 -0.155 +-0.1354 0.20185 -0.1669 +-0.1222 0.20185 -0.1797 +-0.1096 0.20195 -0.1929 +-0.0974 0.20175 -0.2067 +-0.0858 0.20265 -0.2203 +-0.0742 0.20355 -0.2339 +-0.0626 0.20445 -0.2476 +-0.051 0.20535 -0.2612 +-0.0389 0.20625 -0.2752 +-0.0264 0.20715 -0.2889 +-0.0137 0.19215 -0.3018 +-0.0003 0.19325 -0.315 +0.0135 0.19435 -0.3278 +0.0277 0.19535 -0.3402 +0.0422 0.19645 -0.3523 +0.0562 0.18295 -0.363 +0.0713 0.18405 -0.3742 +0.0866 0.18525 -0.3848 +0.1021 0.18635 -0.395 +0.1177 0.18745 -0.4047 +0.1335 0.18845 -0.4138 +0.1478 0.17625 -0.4214 +0.1623 0.16445 -0.4285 +0.1787 0.16565 -0.4365 +0.1934 0.15425 -0.4428 +0.1979 0.15115 -0.425 +0.2171 0.15265 -0.4335 +0.2399 0.15095 -0.4238 +0.2643 0.14995 -0.4185 +0.2733 0.14795 -0.4068 +0.2839 0.14555 -0.3931 +0.2974 0.14315 -0.3797 +0.3086 0.14935 -0.3663 +0.3206 0.15525 -0.3545 +0.3212 0.15955 -0.3311 +0.323 0.16405 -0.3084 +0.348 0.16945 -0.316 +0.3645 0.17375 -0.3126 +0.3829 0.17745 -0.3107 +0.4019 0.18065 -0.308 +0.4216 0.18275 -0.3077 +0.4216 0.18605 -0.2886 +0.4409 0.18715 -0.2889 +0.4409 0.19055 -0.2698 +0.4409 0.19395 -0.2508 +0.4409 0.19725 -0.2317 +0.4409 0.20065 -0.2127 +0.4603 0.20435 -0.1937 +0.4603 0.20775 -0.1747 +0.4603 0.21105 -0.1556 +0.4603 0.22755 -0.1483 +0.4603 0.23915 -0.1606 +0.4603 0.25555 -0.1617 +0.4603 0.25555 -0.1429 +0.4415 0.25555 -0.1241 +0.4227 0.25555 -0.1054 +0.4227 0.25555 -0.0866 +0.4227 0.25555 -0.0678 +0.4227 0.25555 -0.049 +0.4227 0.25555 -0.0302 +0.4039 0.25555 -0.0114 +0.4039 0.25555 0.0074 +0.4039 0.25555 0.0262 +0.4039 0.25555 0.045 +0.4039 0.25555 0.0638 +0.4039 0.25555 0.0826 +0.4039 0.25555 0.1014 +0.4039 0.25555 0.1202 +0.4227 0.25555 0.1202 +0.4415 0.25555 0.1202 +0.4603 0.25555 0.1202 +0.4603 0.25555 0.139 +0.4603 0.23675 0.139 +0.4603 0.21785 0.142 +0.4603 0.19895 0.1448 +0.4603 0.18105 0.148 +0.4603 0.16285 0.1512 +0.4416 0.18065 0.148 +0.4416 0.18375 0.1659 +0.4416 0.18695 0.1837 +0.4416 0.19005 0.2015 +0.4229 0.18875 0.2018 +0.4043 0.18665 0.2021 +0.3858 0.18365 0.2027 +0.3675 0.17985 0.2033 +0.3494 0.17525 0.2042 +0.3315 0.16985 0.2051 +0.3139 0.16355 0.2062 +0.2966 0.15655 0.2075 +0.2797 0.14865 0.2089 +0.2631 0.14005 0.2104 +0.247 0.13075 0.212 +0.2313 0.12065 0.2138 +0.2161 0.10995 0.2157 +0.2014 0.09845 0.2177 +0.1873 0.08635 0.2198 +0.1738 0.07365 0.2221 +0.1608 0.06025 0.2244 +0.1485 0.04635 0.2269 +0.1369 0.03195 0.2294 +0.126 0.01695 0.2321 +0.1158 0.00155 0.2348 +0.1063 -0.01435 0.2376 +0.0976 -0.03065 0.2405 +0.0896 -0.04735 0.2434 +0.0824 -0.06755 0.2286 +0.0761 -0.08805 0.2138 +0.0705 -0.10565 0.2169 +0.0658 -0.12345 0.22 +0.062 -0.14465 0.2054 +0.059 -0.16284 0.2086 +0.077 -0.16673 0.2093 +0.0934 -0.1856 0.2126 +0.1107 -0.20286 0.2157 +0.1288 -0.21797 0.2183 +0.1288 -0.22131 0.1994 +0.1104 -0.22125 0.1997 +0.092 -0.22122 0.1999 +0.0735 -0.2212 0.2 +0.0551 -0.22119 0.2001 +0.0366 -0.22119 0.2001 +0.0181 -0.22117 0.2002 +-0.0005 -0.22116 0.2003 +-0.0191 -0.22438 0.182 +-0.0161 -0.22795 0.1617 +-0.0316 -0.22828 0.1598 +-0.0428 -0.23139 0.1422 +-0.0557 -0.23405 0.1271 +-0.0736 -0.23437 0.1253 +-0.0744 -0.2368 0.1116 +-0.0926 -0.23706 0.1101 +-0.1117 -0.23729 0.1088 +-0.1111 -0.2396 0.0956 +-0.1111 -0.24278 0.0776 +-0.1111 -0.245983 0.0595 +-0.1111 -0.249172 0.0414 +-0.1111 -0.252361 0.0233 +-0.1111 -0.25555 0.0052 +-0.1237 -0.23719 0.002 +-0.1358 -0.21885 -0.001 +-0.1477 -0.20056 -0.004 +-0.1599 -0.18235 -0.0068 +-0.1724 -0.16427 -0.0094 +-0.1856 -0.14635 -0.0119 +-0.1993 -0.12855 -0.0144 +-0.2135 -0.11105 -0.0166 +-0.228 -0.09365 -0.0187 +-0.2429 -0.07655 -0.0207 +-0.2581 -0.05945 -0.0226 +-0.2737 -0.04255 -0.0244 +-0.2898 -0.02565 -0.0261 +-0.2869 -0.00705 -0.0291 +-0.2845 0.00935 -0.0339 +-0.2819 0.01915 -0.0379 +-0.2904 0.02615 -0.0413 +-0.2872 0.04335 -0.0517 +-0.2963 0.05615 -0.0619 +-0.3034 0.07345 -0.0605 +-0.3107 0.09115 -0.059 +-0.3165 0.10875 -0.0581 +-0.3242 0.12635 -0.0565 +-0.307 0.13775 -0.0625 +-0.2916 0.14755 -0.0684 +-0.2745 0.15875 -0.0756 +-0.252 0.15885 -0.0859 +-0.2338 0.16115 -0.0953 +-0.2177 0.16705 -0.1046 +-0.2074 0.17045 -0.1109 +-0.2068 0.18275 -0.1116 +-0.206 0.20185 -0.1125 +-0.2062 0.21975 -0.1127 +-0.1912 0.21975 -0.1225 +-0.1767 0.21975 -0.1329 +-0.1626 0.21975 -0.1437 +-0.1488 0.21975 -0.1552 +-0.1355 0.21975 -0.1671 +-0.1226 0.21975 -0.1795 +-0.1099 0.21985 -0.1928 +-0.0974 0.21965 -0.2069 +-0.0858 0.22025 -0.2205 +-0.0742 0.22085 -0.2342 +-0.0626 0.22145 -0.2478 +-0.051 0.22205 -0.2614 +-0.0388 0.22265 -0.2755 +-0.0263 0.22325 -0.2893 +-0.0134 0.20795 -0.3024 +0 0.20875 -0.3156 +0.0139 0.20965 -0.3284 +0.0281 0.21035 -0.3409 +0.0428 0.21115 -0.353 +0.0571 0.19735 -0.364 +0.0724 0.19835 -0.3752 +0.0878 0.19925 -0.3859 +0.1033 0.20015 -0.3961 +0.119 0.20105 -0.4057 +0.1349 0.20185 -0.4149 +0.1495 0.18945 -0.4226 +0.164 0.17735 -0.4297 +0.1804 0.17845 -0.4376 +0.1953 0.16685 -0.444 +0.2102 0.15555 -0.4499 +0.2272 0.15665 -0.4565 +0.2336 0.15375 -0.4399 +0.2503 0.15485 -0.4459 +0.2579 0.15205 -0.4303 +0.2736 0.15125 -0.4258 +0.2858 0.15065 -0.4224 +0.2981 0.14785 -0.4067 +0.3108 0.14545 -0.3927 +0.3215 0.15125 -0.3788 +0.3331 0.15675 -0.3666 +0.3319 0.15995 -0.3463 +0.342 0.16385 -0.3395 +0.3338 0.16445 -0.3238 +0.3544 0.16755 -0.3356 +0.3695 0.17125 -0.3325 +0.3846 0.17425 -0.3303 +0.4021 0.17725 -0.3275 +0.4216 0.17935 -0.3269 +0.4409 0.18045 -0.3269 +0.4409 0.18385 -0.3079 +0.4603 0.18755 -0.2889 +0.4603 0.19095 -0.2699 +0.4603 0.19425 -0.2509 +0.4603 0.19765 -0.2318 +0.4603 0.20105 -0.2127 +0.4603 0.22235 -0.1969 +0.4603 0.22305 -0.1777 +0.4603 0.22505 -0.1591 +0.4603 0.23805 -0.1794 +0.4603 0.25555 -0.1805 +0.4415 0.25555 -0.1617 +0.4415 0.25555 -0.1429 +0.4227 0.25555 -0.1241 +0.4039 0.25555 -0.1054 +0.4039 0.25555 -0.0866 +0.4039 0.25555 -0.0678 +0.4039 0.25555 -0.049 +0.4039 0.25555 -0.0302 +0.3851 0.25555 -0.0114 +0.3851 0.25555 0.0074 +0.3851 0.25555 0.0262 +0.3851 0.25555 0.045 +0.3851 0.25555 0.0638 +0.3851 0.25555 0.0826 +0.3851 0.25555 0.1014 +0.3851 0.25555 0.1202 +0.4039 0.25555 0.139 +0.4227 0.25555 0.139 +0.4415 0.25555 0.139 +0.4415 0.25555 0.1578 +0.4603 0.25555 0.1578 +0.4603 0.23675 0.1578 +0.4603 0.21925 0.1585 +0.4603 0.20215 0.1626 +0.4603 0.18415 0.1658 +0.4603 0.18735 0.1836 +0.4603 0.19055 0.2015 +0.4603 0.19365 0.2193 +0.4416 0.19325 0.2194 +0.4229 0.19195 0.2196 +0.4043 0.18985 0.22 +0.3858 0.18685 0.2205 +0.3675 0.18305 0.2212 +0.3494 0.17845 0.222 +0.3315 0.17295 0.223 +0.3139 0.16665 0.2241 +0.2966 0.15965 0.2253 +0.2797 0.15185 0.2267 +0.2631 0.14325 0.2282 +0.247 0.13385 0.2299 +0.2313 0.12385 0.2316 +0.2161 0.11305 0.2335 +0.2014 0.10165 0.2355 +0.1873 0.08955 0.2377 +0.1738 0.07675 0.2399 +0.1608 0.06345 0.2423 +0.1485 0.04955 0.2447 +0.1369 0.03505 0.2473 +0.126 0.02015 0.2499 +0.1158 0.00465 0.2526 +0.1063 -0.01125 0.2554 +0.0976 -0.02755 0.2583 +0.0896 -0.04425 0.2613 +0.0824 -0.06435 0.2464 +0.0761 -0.08485 0.2316 +0.0705 -0.10245 0.2348 +0.0658 -0.12035 0.2379 +0.062 -0.14155 0.2232 +0.059 -0.15969 0.2264 +0.0568 -0.18115 0.2118 +0.075 -0.18424 0.2124 +0.0923 -0.20234 0.2156 +0.1104 -0.21797 0.2183 +0.092 -0.21797 0.2183 +0.0735 -0.21797 0.2183 +0.0551 -0.21797 0.2183 +0.0367 -0.21797 0.2183 +0.0182 -0.21795 0.2184 +-0.0004 -0.21792 0.2186 +-0.0191 -0.22114 0.2003 +-0.0397 -0.22113 0.2004 +-0.037 -0.22486 0.1792 +-0.0467 -0.22869 0.1575 +-0.0607 -0.22956 0.1526 +-0.0578 -0.23185 0.1396 +-0.073 -0.23226 0.1373 +-0.0885 -0.2319 0.1393 +-0.0914 -0.23455 0.1242 +-0.1143 -0.2349 0.1223 +-0.1286 -0.23603 0.1159 +-0.1291 -0.23791 0.1052 +-0.1294 -0.24018 0.0924 +-0.1295 -0.24278 0.0776 +-0.1295 -0.245983 0.0595 +-0.1295 -0.249172 0.0414 +-0.1295 -0.252361 0.0233 +-0.1295 -0.25555 0.0052 +-0.1418 -0.23719 0.002 +-0.1536 -0.21887 -0.001 +-0.1653 -0.20057 -0.004 +-0.1772 -0.18238 -0.0068 +-0.1897 -0.1643 -0.0094 +-0.2029 -0.14635 -0.0119 +-0.2168 -0.12865 -0.0144 +-0.2311 -0.11105 -0.0166 +-0.2459 -0.09375 -0.0187 +-0.261 -0.07655 -0.0207 +-0.2765 -0.05955 -0.0226 +-0.2924 -0.04255 -0.0244 +-0.3087 -0.02565 -0.0261 +-0.3064 -0.00775 -0.0289 +-0.3031 0.01405 -0.0357 +-0.3013 0.03725 -0.0476 +-0.3123 0.04895 -0.0559 +-0.3197 0.06605 -0.0547 +-0.3274 0.08355 -0.0534 +-0.3331 0.10085 -0.0528 +-0.3398 0.11585 -0.0517 +-0.3486 0.12705 -0.05 +-0.3353 0.14665 -0.0542 +-0.3121 0.15645 -0.0615 +-0.2971 0.16235 -0.0669 +-0.2855 0.16685 -0.0714 +-0.2708 0.18295 -0.0779 +-0.253 0.18415 -0.0861 +-0.237 0.18405 -0.0942 +-0.2199 0.18295 -0.1037 +-0.2214 0.20185 -0.1032 +-0.2215 0.21975 -0.1034 +-0.2062 0.23765 -0.1128 +-0.1913 0.23765 -0.1226 +-0.1768 0.23765 -0.133 +-0.1626 0.23765 -0.1438 +-0.1489 0.23765 -0.1553 +-0.1356 0.23765 -0.1672 +-0.1227 0.23765 -0.1797 +-0.1103 0.23755 -0.1926 +-0.0974 0.23755 -0.2071 +-0.0858 0.23785 -0.2207 +-0.0742 0.23815 -0.2343 +-0.0626 0.23845 -0.248 +-0.051 0.23875 -0.2616 +-0.0388 0.23905 -0.2757 +-0.0261 0.23935 -0.2895 +-0.0132 0.22375 -0.3028 +0.0002 0.22435 -0.316 +0.0141 0.22485 -0.3288 +0.0284 0.22545 -0.3413 +0.043 0.22595 -0.3533 +0.0578 0.21185 -0.3647 +0.073 0.21265 -0.3759 +0.0885 0.21325 -0.3866 +0.1041 0.21395 -0.3968 +0.1199 0.21465 -0.4064 +0.1358 0.21525 -0.4156 +0.1509 0.20265 -0.4235 +0.1657 0.19035 -0.4308 +0.182 0.19125 -0.4386 +0.197 0.17945 -0.445 +0.2121 0.16795 -0.451 +0.2291 0.16895 -0.4575 +0.2444 0.15775 -0.4627 +0.2672 0.15575 -0.4515 +0.271 0.15305 -0.436 +0.2851 0.15365 -0.4394 +0.305 0.15195 -0.4299 +0.3122 0.14985 -0.4179 +0.3247 0.14755 -0.4049 +0.3349 0.15305 -0.3905 +0.3455 0.15835 -0.3759 +0.341 0.16075 -0.356 +0.3463 0.16335 -0.3487 +0.3561 0.16535 -0.35 +0.371 0.16815 -0.3514 +0.3872 0.17085 -0.3522 +0.4038 0.17365 -0.3488 +0.4218 0.17595 -0.3462 +0.441 0.17715 -0.346 +0.4603 0.18085 -0.327 +0.4603 0.18425 -0.308 +0.4603 0.21065 -0.3029 +0.4603 0.21385 -0.2739 +0.4603 0.21555 -0.2549 +0.4603 0.21635 -0.2351 +0.4603 0.21945 -0.216 +0.4603 0.23675 -0.1993 +0.4603 0.25555 -0.1993 +0.4415 0.25555 -0.1805 +0.4227 0.25555 -0.1617 +0.4227 0.25555 -0.1429 +0.4039 0.25555 -0.1241 +0.3851 0.25555 -0.1054 +0.3851 0.25555 -0.0866 +0.3851 0.25555 -0.0678 +0.3851 0.25555 -0.049 +0.3851 0.25555 -0.0302 +0.3663 0.25555 -0.0114 +0.3663 0.25555 0.0074 +0.3663 0.25555 0.0262 +0.3663 0.25555 0.045 +0.3663 0.25555 0.0638 +0.3663 0.25555 0.0826 +0.3663 0.25555 0.1014 +0.3663 0.25555 0.1201 +0.385 0.25555 0.1389 +0.4038 0.25555 0.1577 +0.4227 0.25555 0.1578 +0.4415 0.25555 0.1765 +0.4603 0.25555 0.1765 +0.4603 0.23675 0.1765 +0.4603 0.22205 0.1778 +0.4603 0.20535 0.1805 +0.4603 0.20855 0.1983 +0.4603 0.20985 0.2166 +0.4603 0.19675 0.2371 +0.4416 0.19635 0.2372 +0.4229 0.19505 0.2375 +0.4043 0.19295 0.2378 +0.3858 0.18995 0.2384 +0.3675 0.18615 0.239 +0.3494 0.18155 0.2398 +0.3315 0.17605 0.2408 +0.3139 0.16985 0.2419 +0.2966 0.16275 0.2431 +0.2797 0.15495 0.2445 +0.2631 0.14635 0.246 +0.247 0.13705 0.2477 +0.2313 0.12695 0.2495 +0.2161 0.11615 0.2514 +0.2014 0.10475 0.2534 +0.1873 0.09265 0.2555 +0.1738 0.07995 0.2578 +0.1608 0.06655 0.2601 +0.1485 0.05265 0.2626 +0.1369 0.03825 0.2651 +0.126 0.02325 0.2678 +0.1158 0.00785 0.2705 +0.1063 -0.00805 0.2733 +0.0976 -0.02435 0.2762 +0.0896 -0.04105 0.2791 +0.0824 -0.06125 0.2642 +0.0761 -0.08175 0.2495 +0.0705 -0.09935 0.2526 +0.0658 -0.11715 0.2557 +0.062 -0.13835 0.2411 +0.059 -0.15655 0.2443 +0.0568 -0.178 0.2297 +0.0555 -0.19953 0.2151 +0.0739 -0.20184 0.2155 +0.0555 -0.19639 0.2329 +0.0551 -0.21482 0.2362 +0.0368 -0.21482 0.2362 +0.0184 -0.21481 0.2363 +0 -0.21476 0.2365 +-0.0185 -0.2147 0.2368 +-0.019 -0.21788 0.2189 +-0.0388 -0.21781 0.2192 +-0.0553 -0.21731 0.222 +-0.056 -0.22161 0.1977 +-0.0514 -0.2257 0.1745 +-0.0684 -0.22712 0.1664 +-0.0722 -0.23049 0.1473 +-0.0815 -0.22937 0.1537 +-0.1031 -0.22752 0.1642 +-0.1191 -0.23179 0.14 +-0.14 -0.23475 0.1232 +-0.1465 -0.23751 0.1075 +-0.1482 -0.24025 0.092 +-0.1479 -0.24278 0.0776 +-0.1479 -0.245983 0.0595 +-0.1479 -0.249172 0.0414 +-0.1479 -0.252361 0.0233 +-0.1479 -0.25555 0.0052 +-0.1598 -0.23721 0.002 +-0.1714 -0.21888 -0.001 +-0.1828 -0.2006 -0.004 +-0.1946 -0.1824 -0.0068 +-0.2071 -0.16433 -0.0094 +-0.2203 -0.14645 -0.0119 +-0.2343 -0.12865 -0.0143 +-0.2488 -0.11115 -0.0166 +-0.2638 -0.09375 -0.0187 +-0.2791 -0.07655 -0.0207 +-0.2949 -0.05955 -0.0226 +-0.311 -0.04255 -0.0244 +-0.3277 -0.02565 -0.0261 +-0.3268 -0.00845 -0.0288 +-0.3285 0.00735 -0.0332 +-0.3183 0.02935 -0.0429 +-0.328 0.04165 -0.0505 +-0.3356 0.05845 -0.0496 +-0.3434 0.07565 -0.0486 +-0.3488 0.09405 -0.0483 +-0.3526 0.10865 -0.0482 +-0.3554 0.11745 -0.048 +-0.36061 0.13385 -0.0475 +-0.3554 0.15435 -0.0495 +-0.3348 0.17545 -0.0552 +-0.317 0.17895 -0.0606 +-0.3007 0.18075 -0.0661 +-0.2857 0.18215 -0.0717 +-0.2857 0.20205 -0.0722 +-0.2693 0.20205 -0.079 +-0.2531 0.20195 -0.0864 +-0.2371 0.20185 -0.0946 +-0.2371 0.21975 -0.0948 +-0.2372 0.23765 -0.0949 +-0.2216 0.23765 -0.1036 +-0.2216 0.25555 -0.1036 +-0.2062 0.25555 -0.1129 +-0.1913 0.25555 -0.1227 +-0.1768 0.25555 -0.133 +-0.1626 0.25555 -0.1439 +-0.1489 0.25555 -0.1553 +-0.1356 0.25555 -0.1672 +-0.1227 0.25555 -0.1797 +-0.1103 0.25555 -0.1926 +-0.0974 0.25555 -0.2071 +-0.0858 0.25555 -0.2208 +-0.0742 0.25555 -0.2344 +-0.0626 0.25555 -0.248 +-0.051 0.25555 -0.2616 +-0.0387 0.25555 -0.2758 +-0.026 0.25555 -0.2897 +-0.0131 0.23965 -0.303 +0.0004 0.23995 -0.3162 +0.0142 0.24025 -0.329 +0.0284 0.24045 -0.3414 +0.043 0.24075 -0.3534 +0.058 0.22645 -0.365 +0.0732 0.22695 -0.3762 +0.0887 0.22735 -0.3869 +0.1044 0.22785 -0.3971 +0.1202 0.22825 -0.4068 +0.1363 0.22865 -0.416 +0.1519 0.21585 -0.4243 +0.1671 0.20335 -0.4318 +0.1835 0.20405 -0.4395 +0.1986 0.19215 -0.446 +0.2138 0.18045 -0.452 +0.2307 0.18125 -0.4585 +0.2462 0.16995 -0.4637 +0.2617 0.15875 -0.4684 +0.2824 0.15665 -0.4563 +0.302 0.15435 -0.4432 +0.3165 0.15285 -0.4349 +0.3265 0.15165 -0.4277 +0.3393 0.14965 -0.4164 +0.3489 0.15465 -0.4015 +0.3594 0.15965 -0.3865 +0.3684 0.16445 -0.3698 +0.3528 0.16245 -0.3624 +0.3877 0.16635 -0.3779 +0.4082 0.17055 -0.3693 +0.4235 0.17235 -0.3672 +0.441 0.17375 -0.365 +0.4603 0.17755 -0.3461 +0.4603 0.19615 -0.3321 +0.4603 0.20085 -0.3178 +0.4603 0.21925 -0.3197 +0.4603 0.23645 -0.2965 +0.4603 0.23675 -0.2745 +0.4603 0.23675 -0.2557 +0.4603 0.23675 -0.2369 +0.4603 0.23675 -0.2181 +0.4603 0.25555 -0.2181 +0.4415 0.25555 -0.1993 +0.4227 0.25555 -0.1805 +0.4039 0.25555 -0.1617 +0.4039 0.25555 -0.1429 +0.3851 0.25555 -0.1241 +0.3663 0.25555 -0.1054 +0.3663 0.25555 -0.0866 +0.3663 0.25555 -0.0678 +0.3663 0.25555 -0.049 +0.3663 0.25555 -0.0302 +0.3475 0.25555 -0.0114 +0.3475 0.25555 0.0074 +0.3475 0.25555 0.0262 +0.3475 0.25555 0.045 +0.3475 0.25555 0.0638 +0.3475 0.25555 0.0826 +0.3475 0.25555 0.1013 +0.3474 0.25555 0.1201 +0.3662 0.25555 0.1389 +0.385 0.25555 0.1577 +0.4038 0.25555 0.1765 +0.4226 0.25555 0.1765 +0.4415 0.25555 0.1953 +0.4603 0.25555 0.1953 +0.4603 0.23845 0.1951 +0.4603 0.22365 0.1961 +0.4603 0.22385 0.2146 +0.4603 0.22585 0.2326 +0.4603 0.21285 0.2345 +0.4603 0.19995 0.255 +0.4416 0.19955 0.2551 +0.4229 0.19825 0.2553 +0.4043 0.19615 0.2557 +0.3858 0.19315 0.2562 +0.3675 0.18935 0.2569 +0.3494 0.18475 0.2577 +0.3315 0.17925 0.2586 +0.3139 0.17295 0.2597 +0.2966 0.16595 0.261 +0.2797 0.15815 0.2624 +0.2631 0.14955 0.2639 +0.247 0.14015 0.2655 +0.2313 0.13015 0.2673 +0.2161 0.11935 0.2692 +0.2014 0.10785 0.2712 +0.1873 0.09575 0.2733 +0.1738 0.08305 0.2756 +0.1608 0.06975 0.2779 +0.1485 0.05585 0.2804 +0.1369 0.04135 0.283 +0.126 0.02645 0.2856 +0.1158 0.01095 0.2883 +0.1063 -0.00495 0.2911 +0.0976 -0.02125 0.294 +0.0896 -0.03795 0.2969 +0.0824 -0.05805 0.2821 +0.0761 -0.07855 0.2673 +0.0705 -0.09615 0.2704 +0.0658 -0.11405 0.2736 +0.062 -0.13525 0.2589 +0.059 -0.15345 0.2621 +0.0568 -0.17486 0.2475 +0.0555 -0.19325 0.2507 +0.0551 -0.21168 0.254 +0.0369 -0.21168 0.254 +0.0186 -0.21167 0.254 +0.0004 -0.21165 0.2542 +-0.0161 -0.2116 0.2545 +-0.0298 -0.21159 0.2545 +-0.0342 -0.2144 0.2386 +-0.0474 -0.21363 0.2429 +-0.0797 -0.21641 0.2272 +-0.0829 -0.22282 0.1908 +-0.1206 -0.21981 0.2079 +-0.1348 -0.22511 0.1778 +-0.1503 -0.22956 0.1526 +-0.1632 -0.23318 0.132 +-0.1774 -0.23773 0.1063 +-0.1712 -0.24093 0.0881 +-0.1678 -0.24336 0.0744 +-0.1662 -0.245983 0.0595 +-0.1662 -0.249172 0.0414 +-0.1662 -0.252361 0.0233 +-0.1662 -0.25555 0.0052 +-0.1779 -0.23721 0.002 +-0.1891 -0.2189 -0.001 +-0.2003 -0.20062 -0.004 +-0.212 -0.18243 -0.0068 +-0.2244 -0.16436 -0.0094 +-0.2377 -0.14645 -0.0119 +-0.2517 -0.12875 -0.0143 +-0.2664 -0.11115 -0.0166 +-0.2816 -0.09375 -0.0187 +-0.2973 -0.07655 -0.0207 +-0.3132 -0.05955 -0.0226 +-0.3297 -0.04265 -0.0244 +-0.3466 -0.02565 -0.0261 +-0.3449 -0.00805 -0.0289 +-0.3415 0.00435 -0.0322 +-0.3352 0.02075 -0.0386 +-0.3442 0.03385 -0.0456 +-0.3545 0.04945 -0.0442 +-0.36859 0.06795 -0.0425 +-0.36566 0.09105 -0.0444 +-0.36476 0.10745 -0.0455 +-0.36452 0.11955 -0.0461 +-0.37624 0.12115 -0.0439 +-0.37393 0.13845 -0.0451 +-0.3701 0.15865 -0.0465 +-0.3523 0.17795 -0.0509 +-0.3361 0.20005 -0.0555 +-0.3194 0.20195 -0.0603 +-0.3023 0.20195 -0.066 +-0.3024 0.21975 -0.0662 +-0.2858 0.21985 -0.0724 +-0.2694 0.21985 -0.0792 +-0.2531 0.21985 -0.0867 +-0.2532 0.23765 -0.0868 +-0.2372 0.25555 -0.0949 +-0.2272 0.25555 -0.0797 +-0.211 0.25555 -0.0887 +-0.1952 0.25555 -0.0984 +-0.1797 0.25555 -0.1086 +-0.1646 0.25555 -0.1194 +-0.15 0.25555 -0.1308 +-0.1358 0.25555 -0.1427 +-0.122 0.25555 -0.1551 +-0.1087 0.25555 -0.1681 +-0.096 0.25555 -0.1816 +-0.0838 0.25555 -0.1954 +-0.0721 0.25555 -0.2091 +-0.0604 0.25555 -0.2226 +-0.0487 0.25555 -0.2361 +-0.0369 0.25555 -0.2495 +-0.0248 0.25555 -0.2635 +-0.0125 0.25555 -0.277 +0.0002 0.25555 -0.2901 +-0.013 0.25555 -0.3032 +0.0005 0.25555 -0.3164 +0.0143 0.25555 -0.3291 +0.0284 0.25555 -0.3414 +0.0429 0.25555 -0.3534 +0.0577 0.25555 -0.3649 +0.0579 0.24095 -0.365 +0.0731 0.24125 -0.3762 +0.0886 0.24145 -0.3869 +0.1043 0.24165 -0.3971 +0.1202 0.24185 -0.4068 +0.1364 0.24205 -0.4161 +0.1525 0.22905 -0.4247 +0.1682 0.21635 -0.4325 +0.1847 0.21695 -0.4402 +0.2001 0.20475 -0.4468 +0.2154 0.19285 -0.4529 +0.2324 0.19365 -0.4593 +0.2479 0.18205 -0.4645 +0.2636 0.17085 -0.4693 +0.2792 0.15965 -0.4736 +0.2996 0.15745 -0.4608 +0.3178 0.15495 -0.4467 +0.3381 0.15445 -0.4438 +0.3547 0.15145 -0.427 +0.3634 0.15605 -0.4116 +0.3752 0.16085 -0.3972 +0.3982 0.16455 -0.3968 +0.4116 0.16735 -0.3898 +0.4255 0.16905 -0.3869 +0.441 0.17045 -0.3841 +0.4603 0.17415 -0.3651 +0.4603 0.19285 -0.3498 +0.4603 0.20825 -0.3342 +0.4603 0.20915 -0.3238 +0.4603 0.22075 -0.3334 +0.4603 0.23675 -0.3309 +0.4603 0.23655 -0.3158 +0.4603 0.25555 -0.3121 +0.4603 0.25555 -0.2933 +0.4603 0.25555 -0.2745 +0.4603 0.25555 -0.2557 +0.4603 0.25555 -0.2369 +0.4415 0.25555 -0.2181 +0.4227 0.25555 -0.1993 +0.4039 0.25555 -0.1805 +0.3851 0.25555 -0.1617 +0.3851 0.25555 -0.1429 +0.3663 0.25555 -0.1241 +0.3475 0.25555 -0.1054 +0.3475 0.25555 -0.0866 +0.3475 0.25555 -0.0678 +0.3475 0.25555 -0.049 +0.3475 0.25555 -0.0302 +0.3287 0.25555 -0.0114 +0.3287 0.25555 0.0074 +0.3287 0.25555 0.0262 +0.3287 0.25555 0.045 +0.3287 0.25555 0.0638 +0.3287 0.25555 0.0825 +0.3286 0.25555 0.1013 +0.3284 0.25555 0.1199 +0.3471 0.25555 0.1387 +0.366 0.25555 0.1576 +0.3848 0.25555 0.1764 +0.4037 0.25555 0.1953 +0.4226 0.25555 0.1953 +0.4414 0.25555 0.2141 +0.4603 0.25555 0.2141 +0.4603 0.23925 0.2143 +0.4603 0.23925 0.2324 +0.4603 0.22835 0.2498 +0.4603 0.21665 0.2519 +0.4603 0.21975 0.2658 +0.4603 0.20305 0.2728 +0.4416 0.20265 0.2729 +0.4229 0.20135 0.2731 +0.4043 0.19925 0.2735 +0.3858 0.19625 0.274 +0.3675 0.19245 0.2747 +0.3494 0.18785 0.2755 +0.3315 0.18235 0.2765 +0.3139 0.17615 0.2776 +0.2966 0.16905 0.2788 +0.2797 0.16125 0.2802 +0.2631 0.15265 0.2817 +0.247 0.14335 0.2834 +0.2313 0.13325 0.2852 +0.2161 0.12245 0.287 +0.2014 0.11105 0.2891 +0.1873 0.09895 0.2912 +0.1738 0.08625 0.2934 +0.1608 0.07285 0.2958 +0.1485 0.05895 0.2982 +0.1369 0.04455 0.3008 +0.126 0.02955 0.3034 +0.1158 0.01415 0.3061 +0.1063 -0.00175 0.3089 +0.0976 -0.01805 0.3118 +0.0896 -0.03475 0.3148 +0.0824 -0.05495 0.2999 +0.0761 -0.07545 0.2852 +0.0705 -0.09305 0.2883 +0.0658 -0.11085 0.2914 +0.062 -0.13205 0.2767 +0.059 -0.15025 0.28 +0.0568 -0.17172 0.2653 +0.0555 -0.1901 0.2686 +0.0551 -0.20854 0.2718 +0.0369 -0.20854 0.2718 +0.0187 -0.20854 0.2719 +0.0006 -0.20851 0.272 +-0.0176 -0.20849 0.2721 +-0.032 -0.20887 0.2699 +-0.0397 -0.21151 0.2549 +-0.0636 -0.21095 0.2581 +-0.1036 -0.21038 0.2614 +-0.1112 -0.21514 0.2344 +-0.1396 -0.21412 0.2401 +-0.1487 -0.21846 0.2156 +-0.1609 -0.22288 0.1905 +-0.1756 -0.22685 0.168 +-0.1907 -0.23051 0.1472 +-0.2158 -0.23576 0.1175 +-0.1963 -0.24108 0.0873 +-0.1844 -0.24218 0.081 +-0.1843 -0.244 0.0707 +-0.1847 -0.246318 0.0575 +-0.1846 -0.249172 0.0414 +-0.1846 -0.252361 0.0233 +-0.1846 -0.25555 0.0052 +-0.196 -0.23722 0.002 +-0.2069 -0.2189 -0.001 +-0.2179 -0.20063 -0.004 +-0.2294 -0.18246 -0.0067 +-0.2417 -0.16439 -0.0094 +-0.255 -0.14645 -0.0119 +-0.2692 -0.12875 -0.0143 +-0.2841 -0.11115 -0.0166 +-0.2995 -0.09385 -0.0187 +-0.3154 -0.07665 -0.0207 +-0.3316 -0.05965 -0.0226 +-0.3483 -0.04265 -0.0244 +-0.36557 -0.02565 -0.0261 +-0.36434 -0.00175 -0.0304 +-0.3505 0.01285 -0.0353 +-0.36046 0.02595 -0.0412 +-0.36955 0.04115 -0.0404 +-0.37964 0.05525 -0.0396 +-0.38359 0.07245 -0.04 +-0.38091 0.08965 -0.0415 +-0.37815 0.10625 -0.0429 +-0.38866 0.12355 -0.042 +-0.38843 0.14065 -0.0427 +-0.38639 0.16115 -0.0438 +-0.36815 0.18005 -0.0475 +-0.3533 0.20175 -0.0512 +-0.3366 0.21975 -0.0556 +-0.3194 0.21975 -0.0606 +-0.3025 0.23765 -0.0663 +-0.2859 0.23765 -0.0725 +-0.2694 0.23765 -0.0794 +-0.2532 0.25555 -0.0869 +-0.2438 0.25555 -0.0712 +-0.2183 0.25555 -0.063 +-0.2015 0.25555 -0.0724 +-0.185 0.25555 -0.0825 +-0.169 0.25555 -0.0931 +-0.1534 0.25555 -0.1043 +-0.1382 0.25555 -0.1161 +-0.1234 0.25555 -0.1285 +-0.1092 0.25555 -0.1416 +-0.0956 0.25555 -0.1551 +-0.0826 0.25555 -0.1693 +-0.0703 0.25555 -0.1836 +-0.0585 0.25555 -0.1974 +-0.0468 0.25555 -0.2109 +-0.0351 0.25555 -0.2243 +-0.0233 0.25555 -0.2377 +-0.0114 0.25555 -0.2515 +0.0006 0.25555 -0.2646 +0.0129 0.25555 -0.2774 +0.0255 0.25555 -0.2898 +0.0133 0.25555 -0.3029 +0.0267 0.25555 -0.3154 +0.0404 0.25555 -0.3273 +0.0545 0.25555 -0.3389 +0.0689 0.25555 -0.3501 +0.0727 0.25555 -0.376 +0.0883 0.25555 -0.3867 +0.104 0.25555 -0.397 +0.12 0.25555 -0.4067 +0.1363 0.25555 -0.4161 +0.1528 0.24225 -0.4249 +0.1689 0.22945 -0.433 +0.1856 0.22975 -0.4407 +0.2014 0.21745 -0.4475 +0.2169 0.20535 -0.4537 +0.2339 0.20595 -0.4601 +0.2495 0.19435 -0.4653 +0.2651 0.18285 -0.4701 +0.281 0.17165 -0.4745 +0.2968 0.16055 -0.4783 +0.3169 0.15815 -0.4648 +0.336 0.15885 -0.4689 +0.3611 0.15675 -0.4571 +0.3708 0.15315 -0.4365 +0.3803 0.15755 -0.4209 +0.3893 0.16135 -0.4079 +0.4059 0.16395 -0.4051 +0.4153 0.16505 -0.4047 +0.428 0.16605 -0.4048 +0.4429 0.16705 -0.4034 +0.4603 0.17075 -0.3841 +0.4603 0.19055 -0.3681 +0.4603 0.20595 -0.3518 +0.4603 0.21985 -0.3517 +0.4603 0.23675 -0.3497 +0.4603 0.25555 -0.3309 +0.4415 0.25555 -0.3121 +0.4415 0.25555 -0.2933 +0.4415 0.25555 -0.2745 +0.4415 0.25555 -0.2557 +0.4415 0.25555 -0.2369 +0.4227 0.25555 -0.2181 +0.4039 0.25555 -0.1993 +0.3851 0.25555 -0.1805 +0.3663 0.25555 -0.1617 +0.3663 0.25555 -0.1429 +0.3475 0.25555 -0.1241 +0.3287 0.25555 -0.1054 +0.3287 0.25555 -0.0866 +0.3287 0.25555 -0.0678 +0.3287 0.25555 -0.049 +0.3287 0.25555 -0.0302 +0.3099 0.25555 -0.0114 +0.31 0.25555 0.0074 +0.31 0.25555 0.0262 +0.31 0.25555 0.045 +0.31 0.25555 0.0638 +0.3098 0.25555 0.0798 +0.3099 0.25555 0.1011 +0.3091 0.25555 0.1189 +0.3278 0.25555 0.1384 +0.3466 0.25555 0.1573 +0.3656 0.25555 0.1762 +0.3846 0.25555 0.1951 +0.4035 0.25555 0.214 +0.4226 0.25555 0.2141 +0.4414 0.25555 0.2329 +0.4603 0.25555 0.2329 +0.4603 0.24085 0.2506 +0.4603 0.22895 0.2596 +0.4603 0.23915 0.2646 +0.4603 0.23095 0.2812 +0.4603 0.20625 0.2907 +0.4416 0.20575 0.2907 +0.4229 0.20455 0.291 +0.4043 0.20245 0.2913 +0.3858 0.19945 0.2919 +0.3675 0.19565 0.2925 +0.3494 0.19095 0.2933 +0.3315 0.18555 0.2943 +0.3139 0.17925 0.2954 +0.2966 0.17225 0.2967 +0.2797 0.16435 0.298 +0.2631 0.15575 0.2996 +0.247 0.14645 0.3012 +0.2313 0.13635 0.303 +0.2161 0.12565 0.3049 +0.2014 0.11415 0.3069 +0.1873 0.10205 0.309 +0.1738 0.08935 0.3113 +0.1608 0.07605 0.3136 +0.1485 0.06215 0.3161 +0.1369 0.04765 0.3186 +0.126 0.03265 0.3213 +0.1158 0.01725 0.324 +0.1063 0.00135 0.3268 +0.0976 -0.01495 0.3297 +0.0896 -0.03165 0.3326 +0.0824 -0.05185 0.3178 +0.0761 -0.07225 0.303 +0.0705 -0.08985 0.3061 +0.0658 -0.10775 0.3092 +0.062 -0.12895 0.2946 +0.059 -0.14715 0.2978 +0.0568 -0.16857 0.2832 +0.0555 -0.18696 0.2864 +0.0551 -0.20539 0.2897 +0.0369 -0.20539 0.2897 +0.0188 -0.20538 0.2897 +0.0007 -0.20538 0.2897 +-0.0174 -0.20536 0.2898 +-0.0341 -0.20558 0.2886 +-0.047 -0.20594 0.2866 +-0.0453 -0.20947 0.2666 +-0.0652 -0.20596 0.2865 +-0.1007 -0.20561 0.2884 +-0.1282 -0.20541 0.2896 +-0.1328 -0.20974 0.265 +-0.1579 -0.20927 0.2677 +-0.165 -0.21327 0.2449 +-0.174 -0.21708 0.2234 +-0.1849 -0.22091 0.2016 +-0.1987 -0.22447 0.1815 +-0.214 -0.22775 0.1629 +-0.2339 -0.2313 0.1427 +-0.2438 -0.23733 0.1085 +-0.2178 -0.24029 0.0917 +-0.1996 -0.24348 0.0736 +-0.2017 -0.246211 0.0582 +-0.203 -0.249172 0.0414 +-0.203 -0.252361 0.0233 +-0.203 -0.25555 0.0052 +-0.214 -0.23722 0.002 +-0.2247 -0.21891 -0.001 +-0.2354 -0.20066 -0.004 +-0.2467 -0.18247 -0.0067 +-0.259 -0.16442 -0.0094 +-0.2724 -0.14655 -0.0119 +-0.2867 -0.12875 -0.0143 +-0.3018 -0.11125 -0.0166 +-0.3174 -0.09385 -0.0187 +-0.3335 -0.07675 -0.0207 +-0.35 -0.05975 -0.0226 +-0.36699 -0.04285 -0.0244 +-0.38452 -0.02565 -0.0261 +-0.38874 -0.00785 -0.0289 +-0.37673 0.01785 -0.0373 +-0.38507 0.03445 -0.0372 +-0.3908 0.04895 -0.0374 +-0.38686 0.06305 -0.0389 +-0.39461 0.07285 -0.0384 +-0.39344 0.08885 -0.0395 +-0.39139 0.10565 -0.0407 +-0.4054 0.12365 -0.0397 +-0.40477 0.14255 -0.0406 +-0.40444 0.16145 -0.0413 +-0.40427 0.18025 -0.0419 +-0.38591 0.18025 -0.0444 +-0.36988 0.20115 -0.0477 +-0.3539 0.21965 -0.0513 +-0.354 0.23765 -0.0515 +-0.3367 0.23765 -0.0558 +-0.3195 0.23765 -0.0607 +-0.3195 0.25555 -0.0608 +-0.3025 0.25555 -0.0664 +-0.2859 0.25555 -0.0726 +-0.2694 0.25555 -0.0794 +-0.2606 0.25555 -0.0634 +-0.253 0.25555 -0.0461 +-0.2355 0.25555 -0.0542 +-0.2091 0.25555 -0.0457 +-0.1916 0.25555 -0.0555 +-0.1745 0.25555 -0.0659 +-0.1579 0.25555 -0.077 +-0.1417 0.25555 -0.0886 +-0.1259 0.25555 -0.101 +-0.1107 0.25555 -0.114 +-0.096 0.25555 -0.1277 +-0.0821 0.25555 -0.1422 +-0.069 0.25555 -0.1572 +-0.0567 0.25555 -0.172 +-0.0452 0.25555 -0.1857 +-0.0336 0.25555 -0.1991 +-0.022 0.25555 -0.2124 +-0.0105 0.25555 -0.2258 +0.0009 0.25555 -0.2392 +0.0125 0.25555 -0.2519 +0.0244 0.25555 -0.2644 +0.0367 0.25555 -0.2765 +0.0493 0.25555 -0.2882 +0.0385 0.25555 -0.3019 +0.0519 0.25555 -0.3135 +0.0656 0.25555 -0.3248 +0.0796 0.25555 -0.3357 +0.094 0.25555 -0.3461 +0.0835 0.25555 -0.3608 +0.0986 0.25555 -0.3713 +0.1139 0.25555 -0.3813 +0.1295 0.25555 -0.3907 +0.1453 0.25555 -0.3998 +0.1614 0.25555 -0.4085 +0.1529 0.25555 -0.425 +0.1694 0.24245 -0.4332 +0.1862 0.24265 -0.4411 +0.2024 0.23015 -0.4481 +0.2183 0.21795 -0.4544 +0.2353 0.21835 -0.4607 +0.251 0.20655 -0.466 +0.2667 0.19495 -0.4708 +0.2826 0.18355 -0.4751 +0.2987 0.17235 -0.4791 +0.3146 0.16125 -0.4826 +0.3324 0.16195 -0.4863 +0.3543 0.15975 -0.4738 +0.3677 0.16085 -0.4799 +0.3811 0.15935 -0.4716 +0.3876 0.15455 -0.4446 +0.3943 0.15845 -0.4283 +0.4015 0.16185 -0.4145 +0.4139 0.16265 -0.4177 +0.4278 0.16325 -0.4204 +0.443 0.16375 -0.4221 +0.4603 0.16405 -0.4222 +0.4603 0.16745 -0.4032 +0.4603 0.18985 -0.3875 +0.4603 0.20405 -0.3697 +0.4603 0.21885 -0.3688 +0.4603 0.23675 -0.3685 +0.4603 0.25555 -0.3497 +0.4415 0.25555 -0.3309 +0.4227 0.25555 -0.3121 +0.4227 0.25555 -0.2933 +0.4227 0.25555 -0.2745 +0.4227 0.25555 -0.2557 +0.4227 0.25555 -0.2369 +0.4039 0.25555 -0.2181 +0.3851 0.25555 -0.1993 +0.3663 0.25555 -0.1805 +0.3475 0.25555 -0.1617 +0.3475 0.25555 -0.1429 +0.3287 0.25555 -0.1241 +0.3099 0.25555 -0.1054 +0.3099 0.25555 -0.0866 +0.3099 0.25555 -0.0678 +0.3099 0.25555 -0.049 +0.3099 0.25555 -0.0302 +0.2912 0.25555 -0.0114 +0.2912 0.25555 0.0074 +0.2913 0.25555 0.0262 +0.2914 0.25555 0.045 +0.2911 0.25555 0.0616 +0.2902 0.25555 0.0766 +0.2885 0.25555 0.0988 +0.2849 0.25555 0.1177 +0.3059 0.25555 0.1375 +0.3263 0.25555 0.1561 +0.3456 0.25555 0.1756 +0.3648 0.25555 0.1947 +0.384 0.25555 0.2138 +0.4032 0.25555 0.2328 +0.4225 0.25555 0.2329 +0.4414 0.25555 0.2517 +0.4603 0.25555 0.2517 +0.4603 0.25555 0.2705 +0.4603 0.25555 0.2893 +0.4603 0.23245 0.3082 +0.4603 0.20935 0.3085 +0.4417 0.20895 0.3086 +0.4231 0.20765 0.3088 +0.4045 0.20555 0.3092 +0.386 0.20265 0.3097 +0.3677 0.19885 0.3104 +0.3496 0.19415 0.3112 +0.3317 0.18875 0.3121 +0.314 0.18245 0.3132 +0.2967 0.17545 0.3145 +0.2797 0.16755 0.3159 +0.2632 0.15895 0.3174 +0.247 0.14965 0.319 +0.2314 0.13955 0.3208 +0.2162 0.12885 0.3227 +0.2015 0.11735 0.3247 +0.1874 0.10525 0.3268 +0.1738 0.09255 0.3291 +0.1609 0.07925 0.3314 +0.1486 0.06535 0.3339 +0.137 0.05085 0.3364 +0.126 0.03595 0.3391 +0.1158 0.02045 0.3418 +0.1063 0.00455 0.3446 +0.0976 -0.01175 0.3475 +0.0897 -0.02845 0.3504 +0.0825 -0.04545 0.3534 +0.0824 -0.04865 0.3356 +0.0761 -0.06915 0.3208 +0.0705 -0.08675 0.3239 +0.0658 -0.10455 0.3271 +0.062 -0.12575 0.3124 +0.059 -0.14395 0.3156 +0.0568 -0.16543 0.301 +0.0555 -0.18382 0.3043 +0.0551 -0.20225 0.3075 +0.0369 -0.20225 0.3075 +0.0188 -0.20224 0.3075 +0.0007 -0.20224 0.3076 +-0.0176 -0.2026 0.3055 +-0.0346 -0.2032 0.3021 +-0.045 -0.20378 0.2989 +-0.0571 -0.20196 0.3092 +-0.0961 -0.20127 0.313 +-0.1245 -0.2014 0.3123 +-0.149 -0.20127 0.313 +-0.1525 -0.20527 0.2903 +-0.1722 -0.20507 0.2915 +-0.1772 -0.20883 0.2702 +-0.1843 -0.21249 0.2494 +-0.1935 -0.21603 0.2293 +-0.2047 -0.21942 0.2101 +-0.2178 -0.22259 0.1921 +-0.2327 -0.22552 0.1755 +-0.2499 -0.22822 0.1601 +-0.2539 -0.23382 0.1284 +-0.2602 -0.23896 0.0992 +-0.2509 -0.24095 0.088 +-0.2385 -0.24052 0.0904 +-0.2196 -0.24311 0.0757 +-0.2214 -0.245983 0.0595 +-0.2214 -0.249172 0.0414 +-0.2214 -0.252361 0.0233 +-0.2214 -0.25555 0.0052 +-0.2321 -0.23724 0.002 +-0.2424 -0.21893 -0.001 +-0.2529 -0.20068 -0.004 +-0.2641 -0.18251 -0.0067 +-0.2764 -0.16445 -0.0094 +-0.2897 -0.14655 -0.0119 +-0.3042 -0.12885 -0.0143 +-0.3194 -0.11135 -0.0166 +-0.3353 -0.09405 -0.0187 +-0.3516 -0.07695 -0.0207 +-0.36838 -0.06005 -0.0225 +-0.38565 -0.04305 -0.0243 +-0.40346 -0.02565 -0.0261 +-0.40535 -0.01225 -0.028 +-0.40946 0.00105 -0.0312 +-0.39308 0.00955 -0.034 +-0.39942 0.02615 -0.0345 +-0.40377 0.04165 -0.0351 +-0.40746 0.05735 -0.0358 +-0.39455 0.06095 -0.0377 +-0.40892 0.07105 -0.0365 +-0.40775 0.08725 -0.0376 +-0.4065 0.10465 -0.0387 +-0.42325 0.12405 -0.038 +-0.42304 0.14285 -0.0388 +-0.42292 0.16155 -0.0395 +-0.42285 0.18035 -0.04 +-0.40456 0.19925 -0.0422 +-0.38622 0.20015 -0.0448 +-0.37134 0.21955 -0.0477 +-0.37142 0.23755 -0.0478 +-0.37142 0.25555 -0.0479 +-0.354 0.25555 -0.0515 +-0.3367 0.25555 -0.0558 +-0.3305 0.25555 -0.0387 +-0.3127 0.25555 -0.0439 +-0.2951 0.25555 -0.0497 +-0.2777 0.25555 -0.0562 +-0.2708 0.25555 -0.0387 +-0.2451 0.25555 -0.0281 +-0.2269 0.25555 -0.0366 +-0.1995 0.25555 -0.0278 +-0.1813 0.25555 -0.0379 +-0.1636 0.25555 -0.0488 +-0.1463 0.25555 -0.0602 +-0.1295 0.25555 -0.0724 +-0.1131 0.25555 -0.0853 +-0.0973 0.25555 -0.0991 +-0.0823 0.25555 -0.1138 +-0.0682 0.25555 -0.1294 +-0.0552 0.25555 -0.1455 +-0.0436 0.25555 -0.1603 +-0.0323 0.25555 -0.1737 +-0.021 0.25555 -0.187 +-0.0097 0.25555 -0.2002 +0.0014 0.25555 -0.2134 +0.0123 0.25555 -0.2263 +0.0235 0.25555 -0.2387 +0.0351 0.25555 -0.2509 +0.047 0.25555 -0.2627 +0.0592 0.25555 -0.2742 +0.0719 0.25555 -0.2852 +0.0623 0.25555 -0.2995 +0.0756 0.25555 -0.3105 +0.0893 0.25555 -0.3211 +0.1032 0.25555 -0.3314 +0.1174 0.25555 -0.3413 +0.1086 0.25555 -0.3563 +0.1234 0.25555 -0.366 +0.1386 0.25555 -0.3752 +0.1541 0.25555 -0.384 +0.1697 0.25555 -0.3925 +0.1856 0.25555 -0.4005 +0.1778 0.25555 -0.4167 +0.1697 0.25555 -0.4334 +0.1868 0.25555 -0.4414 +0.2032 0.24285 -0.4485 +0.2194 0.23045 -0.4549 +0.2366 0.23075 -0.4613 +0.2525 0.21875 -0.4666 +0.2683 0.20705 -0.4714 +0.2841 0.19555 -0.4758 +0.3001 0.18415 -0.4798 +0.3164 0.17295 -0.4833 +0.3342 0.17355 -0.487 +0.3504 0.16255 -0.4896 +0.3685 0.16305 -0.4924 +0.3866 0.16345 -0.4947 +0.4048 0.15995 -0.4753 +0.405 0.15575 -0.4513 +0.4106 0.15935 -0.4346 +0.4258 0.16005 -0.4377 +0.4413 0.16035 -0.4412 +0.4603 0.16075 -0.4413 +0.4603 0.18315 -0.4256 +0.4603 0.18645 -0.4066 +0.4603 0.20335 -0.4069 +0.4603 0.20515 -0.388 +0.4603 0.21975 -0.3874 +0.4603 0.23675 -0.3872 +0.4603 0.25555 -0.3685 +0.4415 0.25555 -0.3497 +0.4227 0.25555 -0.3309 +0.4039 0.25555 -0.3121 +0.4039 0.25555 -0.2933 +0.4039 0.25555 -0.2745 +0.4039 0.25555 -0.2557 +0.4039 0.25555 -0.2369 +0.3851 0.25555 -0.2181 +0.3663 0.25555 -0.1993 +0.3475 0.25555 -0.1805 +0.3287 0.25555 -0.1617 +0.3287 0.25555 -0.1429 +0.3099 0.25555 -0.1241 +0.2911 0.25555 -0.1054 +0.2911 0.25555 -0.0866 +0.2911 0.25555 -0.0678 +0.2911 0.25555 -0.049 +0.2912 0.25555 -0.0302 +0.2724 0.25555 -0.0113 +0.2725 0.25555 0.0075 +0.2725 0.25555 0.0263 +0.2746 0.25555 0.0457 +0.2741 0.25555 0.0596 +0.2718 0.25555 0.0719 +0.2669 0.25555 0.0931 +0.2614 0.25555 0.1174 +0.2823 0.25555 0.1371 +0.3025 0.25555 0.1561 +0.3237 0.25555 0.1757 +0.3436 0.25555 0.1934 +0.3634 0.25555 0.2129 +0.3831 0.25555 0.2323 +0.4027 0.25555 0.2514 +0.4223 0.25555 0.2517 +0.4413 0.25555 0.2705 +0.4412 0.25555 0.2893 +0.4603 0.25555 0.3081 +0.4411 0.25555 0.3082 +0.4424 0.23125 0.3083 +0.4221 0.23065 0.3085 +0.3942 0.22915 0.3091 +0.3785 0.21785 0.3096 +0.3637 0.21405 0.3102 +0.347 0.20905 0.311 +0.3292 0.20425 0.3119 +0.3108 0.19845 0.313 +0.2926 0.19185 0.3143 +0.2713 0.18475 0.3159 +0.254 0.17575 0.3175 +0.2402 0.16695 0.319 +0.2226 0.15505 0.321 +0.2067 0.14405 0.3229 +0.1926 0.13285 0.3248 +0.1747 0.11955 0.3274 +0.1605 0.10625 0.3298 +0.147 0.09225 0.3322 +0.1341 0.07775 0.3348 +0.1219 0.06265 0.3375 +0.1105 0.04695 0.3402 +0.0998 0.03075 0.3431 +0.0899 0.01415 0.346 +0.0809 -0.00155 0.3489 +0.0708 -0.01655 0.3519 +0.0625 -0.03405 0.3551 +0.0761 -0.06285 0.3565 +0.0761 -0.06605 0.3387 +0.0705 -0.08365 0.3418 +0.0658 -0.10145 0.3449 +0.062 -0.12265 0.3303 +0.059 -0.14085 0.3335 +0.0568 -0.16227 0.3189 +0.0555 -0.18067 0.3221 +0.0551 -0.19909 0.3253 +0.037 -0.19909 0.3253 +0.0188 -0.19909 0.3254 +-0.0003 -0.19914 0.3251 +-0.0188 -0.19967 0.3221 +-0.0379 -0.2005 0.3174 +-0.0675 -0.19575 0.3444 +-0.0983 -0.19625 0.3415 +-0.1239 -0.19692 0.3377 +-0.1477 -0.19737 0.3352 +-0.1683 -0.1975 0.3344 +-0.1694 -0.20127 0.313 +-0.1884 -0.20118 0.3135 +-0.1914 -0.20472 0.2934 +-0.1977 -0.20791 0.2754 +-0.2045 -0.21125 0.2564 +-0.213 -0.21447 0.2382 +-0.2234 -0.21752 0.2208 +-0.2355 -0.22039 0.2046 +-0.2491 -0.22303 0.1896 +-0.2643 -0.22544 0.1759 +-0.2677 -0.23059 0.1468 +-0.2734 -0.23574 0.1176 +-0.2934 -0.23747 0.1078 +-0.2754 -0.24169 0.0838 +-0.255 -0.24311 0.0758 +-0.2386 -0.24314 0.0755 +-0.2397 -0.245983 0.0595 +-0.2397 -0.249172 0.0414 +-0.2397 -0.252361 0.0233 +-0.2397 -0.25555 0.0052 +-0.2502 -0.23724 0.002 +-0.2602 -0.21894 -0.001 +-0.2705 -0.20069 -0.0039 +-0.2815 -0.18254 -0.0067 +-0.2937 -0.16448 -0.0094 +-0.3071 -0.14665 -0.0119 +-0.3216 -0.12895 -0.0143 +-0.3371 -0.11145 -0.0165 +-0.3531 -0.09435 -0.0187 +-0.36971 -0.07745 -0.0206 +-0.38677 -0.06055 -0.0225 +-0.40431 -0.04345 -0.0243 +-0.42241 -0.02565 -0.0261 +-0.42231 -0.01615 -0.0273 +-0.42591 -0.00745 -0.029 +-0.43116 0.00555 -0.0298 +-0.41831 0.01525 -0.0315 +-0.4269 0.02865 -0.0319 +-0.42604 0.05385 -0.0338 +-0.42607 0.06935 -0.0349 +-0.42437 0.08635 -0.036 +-0.42366 0.10515 -0.0371 +-0.44165 0.12415 -0.0369 +-0.44159 0.14285 -0.0377 +-0.44156 0.16165 -0.0384 +-0.44155 0.18045 -0.0389 +-0.44153 0.19915 -0.0393 +-0.42282 0.19915 -0.0405 +-0.40619 0.21885 -0.0424 +-0.38893 0.21935 -0.0447 +-0.38904 0.23755 -0.0448 +-0.38904 0.25555 -0.0449 +-0.38486 0.25555 -0.0271 +-0.36659 0.25555 -0.0303 +-0.3485 0.25555 -0.0341 +-0.3256 0.25555 -0.0205 +-0.3071 0.25555 -0.0258 +-0.2888 0.25555 -0.0319 +-0.2673 0.25555 -0.0193 +-0.2406 0.25555 -0.0091 +-0.218 0.25555 -0.0183 +-0.1921 0.25555 -0.0135 +-0.1727 0.25555 -0.0205 +-0.1522 0.25555 -0.031 +-0.1343 0.25555 -0.0428 +-0.1167 0.25555 -0.0554 +-0.0996 0.25555 -0.0692 +-0.0833 0.25555 -0.084 +-0.0679 0.25555 -0.1 +-0.0539 0.25555 -0.1172 +-0.0417 0.25555 -0.1343 +-0.031 0.25555 -0.1483 +-0.0201 0.25555 -0.1615 +-0.0091 0.25555 -0.1745 +0.0018 0.25555 -0.1875 +0.0124 0.25555 -0.2004 +0.023 0.25555 -0.213 +0.0338 0.25555 -0.2251 +0.045 0.25555 -0.237 +0.0565 0.25555 -0.2485 +0.0683 0.25555 -0.2597 +0.0805 0.25555 -0.2705 +0.093 0.25555 -0.281 +0.0848 0.25555 -0.296 +0.098 0.25555 -0.3063 +0.1115 0.25555 -0.3163 +0.1253 0.25555 -0.326 +0.1393 0.25555 -0.3352 +0.1319 0.25555 -0.3507 +0.1466 0.25555 -0.3597 +0.1616 0.25555 -0.3683 +0.1768 0.25555 -0.3766 +0.1923 0.25555 -0.3844 +0.2079 0.25555 -0.3917 +0.2017 0.25555 -0.408 +0.1944 0.25555 -0.4245 +0.2112 0.25555 -0.4317 +0.2041 0.25555 -0.4489 +0.2205 0.24295 -0.4554 +0.2378 0.24315 -0.4618 +0.254 0.23095 -0.4672 +0.2699 0.21915 -0.4721 +0.2857 0.20755 -0.4764 +0.3016 0.19605 -0.4803 +0.3177 0.18475 -0.4839 +0.3354 0.18525 -0.4875 +0.352 0.17405 -0.4902 +0.37 0.17455 -0.4929 +0.388 0.17515 -0.4951 +0.4048 0.16375 -0.4965 +0.4233 0.16055 -0.4782 +0.4231 0.15665 -0.4562 +0.4415 0.15715 -0.4593 +0.4603 0.15735 -0.4603 +0.4603 0.18135 -0.4603 +0.4603 0.18225 -0.4434 +0.4603 0.20085 -0.4446 +0.4603 0.20225 -0.4252 +0.4603 0.21825 -0.4249 +0.4603 0.21805 -0.4061 +0.4603 0.23675 -0.406 +0.4603 0.25555 -0.3872 +0.4415 0.25555 -0.3685 +0.4227 0.25555 -0.3497 +0.4039 0.25555 -0.3309 +0.3851 0.25555 -0.3121 +0.3851 0.25555 -0.2933 +0.3851 0.25555 -0.2745 +0.3851 0.25555 -0.2557 +0.3851 0.25555 -0.2369 +0.3663 0.25555 -0.2181 +0.3475 0.25555 -0.1993 +0.3287 0.25555 -0.1805 +0.3099 0.25555 -0.1617 +0.3099 0.25555 -0.1458 +0.2911 0.25555 -0.1241 +0.2723 0.25555 -0.1054 +0.2723 0.25555 -0.0866 +0.2723 0.25555 -0.0678 +0.2723 0.25555 -0.049 +0.2724 0.25555 -0.0302 +0.2543 0.25555 -0.0113 +0.2554 0.25555 0.0094 +0.2572 0.25555 0.0296 +0.2611 0.25555 0.0476 +0.2643 0.25555 0.0579 +0.2574 0.25555 0.0655 +0.2417 0.25555 0.0826 +0.2365 0.25555 0.1163 +0.2592 0.25555 0.1375 +0.2796 0.25555 0.1562 +0.301 0.25555 0.1757 +0.3221 0.25555 0.1949 +0.3411 0.25555 0.2132 +0.3617 0.25555 0.2322 +0.382 0.25555 0.2512 +0.402 0.25555 0.2703 +0.422 0.25555 0.2704 +0.4217 0.25555 0.2892 +0.422 0.25555 0.3084 +0.4028 0.25555 0.3087 +0.3837 0.25555 0.3092 +0.3773 0.23765 0.3095 +0.3722 0.22715 0.3098 +0.3622 0.22625 0.3101 +0.3451 0.22395 0.3108 +0.3271 0.22075 0.3117 +0.3076 0.21775 0.3129 +0.289 0.21345 0.3141 +0.2614 0.20715 0.3162 +0.2462 0.19215 0.3177 +0.2337 0.18445 0.319 +0.2133 0.17135 0.3212 +0.1969 0.15965 0.3233 +0.1842 0.15015 0.325 +0.1651 0.13525 0.3277 +0.1466 0.12055 0.3307 +0.1324 0.10595 0.3332 +0.119 0.09065 0.3359 +0.1063 0.07485 0.3387 +0.0944 0.05845 0.3416 +0.0833 0.04145 0.3446 +0.0731 0.02395 0.3476 +0.0648 0.01265 0.3499 +0.049 0.00035 0.3536 +0.0428 -0.02265 0.357 +0.0379 -0.03575 0.3593 +0.0485 -0.05145 0.3594 +0.049 -0.07655 0.3625 +0.0705 -0.08045 0.3596 +0.0658 -0.09835 0.3627 +0.062 -0.11635 0.3659 +0.062 -0.11945 0.3481 +0.059 -0.13765 0.3513 +0.0568 -0.15913 0.3367 +0.0555 -0.17753 0.3399 +0.0551 -0.19595 0.3432 +0.037 -0.19595 0.3432 +0.0182 -0.1956 0.3452 +-0.0009 -0.19535 0.3466 +-0.02 -0.19512 0.3479 +-0.0417 -0.19538 0.3464 +-0.0409 -0.19035 0.375 +-0.0683 -0.18913 0.3819 +-0.1001 -0.19132 0.3694 +-0.1248 -0.19229 0.364 +-0.1484 -0.19314 0.3591 +-0.1686 -0.19374 0.3557 +-0.1874 -0.1941 0.3537 +-0.1871 -0.19769 0.3333 +-0.2079 -0.20085 0.3154 +-0.2106 -0.20407 0.2972 +-0.2152 -0.20721 0.2794 +-0.2215 -0.21026 0.262 +-0.2294 -0.21319 0.2454 +-0.239 -0.21598 0.2296 +-0.2502 -0.21859 0.2148 +-0.2627 -0.22099 0.2012 +-0.2765 -0.22317 0.1888 +-0.2805 -0.22757 0.1639 +-0.2865 -0.23263 0.1351 +-0.3063 -0.23439 0.1252 +-0.3138 -0.2391 0.0984 +-0.3057 -0.24269 0.0782 +-0.2765 -0.245983 0.0595 +-0.2581 -0.245983 0.0595 +-0.2581 -0.249172 0.0414 +-0.2581 -0.252361 0.0233 +-0.2581 -0.25555 0.0052 +-0.2682 -0.23725 0.002 +-0.278 -0.21896 -0.001 +-0.288 -0.20072 -0.0039 +-0.2989 -0.18257 -0.0067 +-0.311 -0.16453 -0.0094 +-0.3245 -0.14665 -0.0119 +-0.3391 -0.12915 -0.0143 +-0.3547 -0.11185 -0.0165 +-0.371 -0.09485 -0.0186 +-0.38782 -0.07805 -0.0205 +-0.40514 -0.06115 -0.0224 +-0.42298 -0.04385 -0.0242 +-0.44135 -0.02565 -0.0261 +-0.43531 -0.02015 -0.0267 +-0.44232 -0.01605 -0.0273 +-0.44475 0.00055 -0.0287 +-0.43573 0.01385 -0.0302 +-0.44326 0.03115 -0.0313 +-0.44261 0.05135 -0.0328 +-0.4422 0.06785 -0.0339 +-0.44191 0.08665 -0.035 +-0.44174 0.10535 -0.036 +-0.4603 0.12415 -0.0366 +-0.4603 0.14285 -0.0374 +-0.4603 0.16165 -0.038 +-0.4603 0.18045 -0.0386 +-0.4603 0.19915 -0.039 +-0.4603 0.21795 -0.0393 +-0.44153 0.21795 -0.0397 +-0.42314 0.21805 -0.0407 +-0.40676 0.23735 -0.0425 +-0.40676 0.25555 -0.0425 +-0.40325 0.25555 -0.0247 +-0.38199 0.25555 -0.0085 +-0.36304 0.25555 -0.0118 +-0.3443 0.25555 -0.0157 +-0.3204 0.25555 -0.0015 +-0.3012 0.25555 -0.0071 +-0.2823 0.25555 -0.0134 +-0.264 0.25555 -0.0019 +-0.2617 0.25555 0.0135 +-0.2351 0.25555 0.0145 +-0.2092 0.25555 -0.0013 +-0.1854 0.25555 -0.0005 +-0.1654 0.25555 0.0008 +-0.1384 0.25555 -0.0138 +-0.1191 0.25555 -0.027 +-0.1012 0.25555 -0.041 +-0.0839 0.25555 -0.0559 +-0.0673 0.25555 -0.0699 +-0.0525 0.25555 -0.0875 +-0.0397 0.25555 -0.1061 +-0.0289 0.25555 -0.1208 +-0.0183 0.25555 -0.1344 +-0.0082 0.25555 -0.1472 +0.0021 0.25555 -0.1601 +0.0126 0.25555 -0.1743 +0.0228 0.25555 -0.1868 +0.0329 0.25555 -0.1991 +0.0433 0.25555 -0.211 +0.0541 0.25555 -0.2226 +0.0652 0.25555 -0.2338 +0.0766 0.25555 -0.2448 +0.0884 0.25555 -0.2554 +0.1005 0.25555 -0.2657 +0.1129 0.25555 -0.2756 +0.1059 0.25555 -0.2911 +0.1189 0.25555 -0.3009 +0.1322 0.25555 -0.3104 +0.1458 0.25555 -0.3194 +0.1597 0.25555 -0.328 +0.1536 0.25555 -0.344 +0.1682 0.25555 -0.3524 +0.1829 0.25555 -0.3605 +0.1978 0.25555 -0.3681 +0.213 0.25555 -0.3753 +0.2283 0.25555 -0.3821 +0.2237 0.25555 -0.3986 +0.218 0.25555 -0.4151 +0.2345 0.25555 -0.4216 +0.2281 0.25555 -0.4385 +0.2215 0.25555 -0.4558 +0.2391 0.25555 -0.4623 +0.2554 0.24325 -0.4678 +0.2715 0.23125 -0.4727 +0.2873 0.21945 -0.477 +0.3031 0.20785 -0.4809 +0.3191 0.19645 -0.4844 +0.3367 0.19685 -0.4879 +0.3532 0.18565 -0.4906 +0.3709 0.18615 -0.4933 +0.3888 0.18705 -0.4955 +0.406 0.17615 -0.4969 +0.423 0.16395 -0.4977 +0.4418 0.16085 -0.4805 +0.4603 0.16075 -0.4795 +0.4603 0.18285 -0.4793 +0.4603 0.20025 -0.4614 +0.4603 0.21885 -0.4625 +0.4603 0.21845 -0.4437 +0.4603 0.23675 -0.4248 +0.4603 0.25555 -0.406 +0.4415 0.25555 -0.3872 +0.4227 0.25555 -0.3685 +0.4039 0.25555 -0.3497 +0.3851 0.25555 -0.3309 +0.3663 0.25555 -0.3121 +0.3667 0.25555 -0.2951 +0.3663 0.25555 -0.2745 +0.3663 0.25555 -0.2557 +0.3663 0.25555 -0.2369 +0.3475 0.25555 -0.2181 +0.3287 0.25555 -0.1993 +0.3099 0.25555 -0.1805 +0.2914 0.25555 -0.165 +0.2917 0.25555 -0.1488 +0.2735 0.25555 -0.1274 +0.2536 0.25555 -0.1054 +0.2536 0.25555 -0.0866 +0.2537 0.25555 -0.0677 +0.2538 0.25555 -0.0489 +0.254 0.25555 -0.0301 +0.2338 0.25555 -0.0298 +0.2342 0.25555 -0.0087 +0.2379 0.25555 0.0127 +0.2413 0.25555 0.0331 +0.248 0.25555 0.0517 +0.2285 0.25555 0.0586 +0.2072 0.25555 0.0907 +0.2123 0.25555 0.1157 +0.2151 0.25555 0.1392 +0.2355 0.25555 0.138 +0.2572 0.25555 0.1573 +0.2788 0.25555 0.1763 +0.3001 0.25555 0.1952 +0.3212 0.25555 0.214 +0.3222 0.25555 0.2338 +0.3419 0.25555 0.2329 +0.3428 0.25555 0.2525 +0.3624 0.25555 0.2518 +0.3631 0.25555 0.2713 +0.3825 0.25555 0.2706 +0.3831 0.25555 0.29 +0.4024 0.25555 0.2895 +0.3638 0.25555 0.2906 +0.3645 0.25555 0.3099 +0.3629 0.23905 0.31 +0.3445 0.23785 0.3107 +0.3262 0.23625 0.3116 +0.3071 0.23625 0.3127 +0.2879 0.23635 0.3139 +0.2668 0.23565 0.3154 +0.2439 0.21495 0.3174 +0.2391 0.20185 0.3181 +0.2287 0.20025 0.319 +0.2028 0.19295 0.3217 +0.1883 0.17765 0.3236 +0.1753 0.16985 0.3252 +0.1509 0.16045 0.3284 +0.1321 0.13705 0.3316 +0.1174 0.12005 0.3344 +0.1035 0.10395 0.3372 +0.0904 0.08495 0.3403 +0.0786 0.06945 0.3431 +0.0684 0.05045 0.3461 +0.0602 0.03355 0.3487 +0.056 0.02325 0.3503 +0.0418 0.02205 0.3527 +0.0228 0.00135 0.3579 +0.0235 -0.01855 0.3598 +0.024 -0.03625 0.3617 +0.0246 -0.05395 0.3637 +0.0237 -0.07355 0.3663 +0.0457 -0.09495 0.3655 +0.0436 -0.11245 0.3683 +0.0406 -0.13145 0.3717 +0.059 -0.13455 0.3691 +0.0568 -0.15285 0.3724 +0.0568 -0.15598 0.3545 +0.0555 -0.17437 0.3578 +0.0551 -0.1928 0.361 +0.0375 -0.19248 0.3629 +0.0185 -0.19203 0.3655 +-0.0003 -0.19146 0.3686 +-0.0188 -0.19088 0.3719 +-0.0184 -0.18754 0.3909 +-0.0387 -0.18699 0.394 +-0.0579 -0.186 0.3996 +-0.0807 -0.18618 0.3985 +-0.1016 -0.18739 0.3918 +-0.1256 -0.18843 0.3858 +-0.1494 -0.18945 0.3801 +-0.1695 -0.19023 0.3757 +-0.1879 -0.19061 0.3735 +-0.207 -0.1941 0.3537 +-0.207 -0.19761 0.3338 +-0.2079 -0.18119 0.312 +-0.2106 -0.18428 0.2938 +-0.2152 -0.1873 0.2759 +-0.2215 -0.19023 0.2585 +-0.2295 -0.19303 0.2418 +-0.2391 -0.1957 0.226 +-0.2503 -0.19819 0.2112 +-0.2628 -0.2005 0.1975 +-0.2767 -0.20259 0.1851 +-0.2914 -0.22511 0.1779 +-0.2979 -0.22941 0.1534 +-0.3163 -0.23097 0.1446 +-0.3258 -0.23593 0.1165 +-0.3344 -0.24058 0.0901 +-0.3266 -0.24359 0.073 +-0.3224 -0.246471 0.0567 +-0.3008 -0.246196 0.0583 +-0.2979 -0.249248 0.041 +-0.2765 -0.249172 0.0414 +-0.2765 -0.252361 0.0233 +-0.2765 -0.25555 0.0052 +-0.2863 -0.23725 0.002 +-0.2957 -0.21897 -0.001 +-0.3055 -0.20074 -0.0039 +-0.3162 -0.1826 -0.0067 +-0.3283 -0.16462 -0.0094 +-0.3418 -0.14695 -0.0119 +-0.3566 -0.12955 -0.0142 +-0.37238 -0.11255 -0.0164 +-0.38887 -0.09575 -0.0185 +-0.40595 -0.07905 -0.0204 +-0.42353 -0.06205 -0.0223 +-0.44164 -0.04435 -0.0242 +-0.4603 -0.02565 -0.0261 +-0.4603 -0.00695 -0.0278 +-0.4603 0.01175 -0.0294 +-0.44617 0.01355 -0.0298 +-0.4603 0.03045 -0.0309 +-0.4603 0.04915 -0.0323 +-0.4603 0.06785 -0.0335 +-0.4603 0.08665 -0.0347 +-0.4603 0.10535 -0.0357 +-0.4603 0.10635 -0.017 +-0.4603 0.12495 -0.0178 +-0.4603 0.14365 -0.0186 +-0.4603 0.16225 -0.0192 +-0.4603 0.18095 -0.0196 +-0.4603 0.19955 -0.0199 +-0.4603 0.21825 -0.0199 +-0.4603 0.23675 -0.0395 +-0.44173 0.23675 -0.0398 +-0.42453 0.23715 -0.0408 +-0.42456 0.25555 -0.0409 +-0.42169 0.25555 -0.0228 +-0.40106 0.25555 -0.0059 +-0.39826 0.25555 0.0144 +-0.3763 0.25555 0.0107 +-0.3593 0.25555 0.0074 +-0.3425 0.25555 0.0037 +-0.3415 0.25555 0.0219 +-0.3128 0.25555 0.0232 +-0.2912 0.25555 0.0095 +-0.2777 0.25555 0.0024 +-0.2733 0.25555 0.0124 +-0.267 0.25555 0.0296 +-0.2463 0.25555 0.0403 +-0.2093 0.25555 0.0315 +-0.1948 0.25555 0.0133 +-0.1749 0.25555 0.0258 +-0.1367 0.25555 0.0224 +-0.1207 0.25555 0.0064 +-0.1038 0.25555 -0.0102 +-0.0853 0.25555 -0.025 +-0.0678 0.25555 -0.0412 +-0.0507 0.25555 -0.0572 +-0.0392 0.25555 -0.077 +-0.0263 0.25555 -0.0955 +-0.0165 0.25555 -0.1088 +-0.007 0.25555 -0.1217 +0.0027 0.25555 -0.1341 +0.0128 0.25555 -0.1465 +0.0239 0.25555 -0.1609 +0.0338 0.25555 -0.1732 +0.0437 0.25555 -0.1847 +0.0539 0.25555 -0.1961 +0.0644 0.25555 -0.2074 +0.0751 0.25555 -0.2183 +0.0861 0.25555 -0.229 +0.0975 0.25555 -0.2394 +0.1092 0.25555 -0.2494 +0.121 0.25555 -0.2593 +0.133 0.25555 -0.2683 +0.1255 0.25555 -0.2852 +0.1384 0.25555 -0.2944 +0.1515 0.25555 -0.3033 +0.1665 0.25555 -0.3119 +0.18 0.25555 -0.3195 +0.1738 0.25555 -0.3363 +0.188 0.25555 -0.3442 +0.2024 0.25555 -0.3517 +0.217 0.25555 -0.3587 +0.2328 0.25555 -0.364 +0.2476 0.25555 -0.37 +0.2438 0.25555 -0.3884 +0.2397 0.25555 -0.405 +0.2559 0.25555 -0.4111 +0.2512 0.25555 -0.4278 +0.2453 0.25555 -0.4448 +0.2627 0.25555 -0.4506 +0.257 0.25555 -0.4683 +0.2732 0.24335 -0.4732 +0.2891 0.23145 -0.4776 +0.3048 0.21975 -0.4815 +0.3206 0.20825 -0.4849 +0.3382 0.20855 -0.4884 +0.3543 0.19725 -0.491 +0.372 0.19775 -0.4937 +0.3897 0.19905 -0.4958 +0.4066 0.18885 -0.4972 +0.4241 0.17785 -0.4981 +0.4413 0.16405 -0.4985 +0.4603 0.16415 -0.4988 +0.4603 0.18235 -0.4992 +0.4603 0.20105 -0.4802 +0.4603 0.21915 -0.4809 +0.4603 0.23695 -0.4624 +0.4603 0.23685 -0.4436 +0.4603 0.25555 -0.4248 +0.4415 0.25555 -0.406 +0.4227 0.25555 -0.3872 +0.4039 0.25555 -0.3685 +0.3851 0.25555 -0.3497 +0.3663 0.25555 -0.3309 +0.3494 0.25555 -0.3137 +0.3483 0.25555 -0.2973 +0.3474 0.25555 -0.2771 +0.3475 0.25555 -0.2557 +0.3475 0.25555 -0.2369 +0.3287 0.25555 -0.2181 +0.3099 0.25555 -0.1993 +0.2911 0.25555 -0.1805 +0.2779 0.25555 -0.1673 +0.2761 0.25555 -0.1524 +0.2552 0.25555 -0.1302 +0.2363 0.25555 -0.1282 +0.2356 0.25555 -0.1079 +0.2363 0.25555 -0.0893 +0.2358 0.25555 -0.0704 +0.2361 0.25555 -0.0513 +0.2183 0.25555 -0.0536 +0.2137 0.25555 -0.033 +0.2044 0.25555 -0.0079 +0.2132 0.25555 0.0204 +0.2198 0.25555 0.0385 +0.2004 0.25555 0.0669 +0.1839 0.25555 0.0937 +0.1895 0.25555 0.1175 +0.1947 0.25555 0.1403 +0.1962 0.25555 0.1614 +0.2166 0.25555 0.16 +0.2369 0.25555 0.1586 +0.2385 0.25555 0.1791 +0.2586 0.25555 0.1777 +0.2601 0.25555 0.1978 +0.2801 0.25555 0.1964 +0.2814 0.25555 0.2164 +0.3013 0.25555 0.2151 +0.3025 0.25555 0.2349 +0.3232 0.25555 0.2535 +0.3437 0.25555 0.272 +0.3445 0.25555 0.2914 +0.3454 0.25555 0.3106 +0.3262 0.25555 0.3116 +0.3071 0.25555 0.3126 +0.2879 0.25555 0.3138 +0.2688 0.25555 0.3152 +0.2497 0.25555 0.3166 +0.2476 0.23595 0.3169 +0.2306 0.23635 0.3183 +0.2306 0.21745 0.3186 +0.2081 0.21715 0.3206 +0.1889 0.21725 0.3226 +0.1854 0.19905 0.3233 +0.1809 0.18735 0.3241 +0.171 0.18605 0.3252 +0.1528 0.18415 0.3274 +0.1276 0.16735 0.331 +0.1165 0.15135 0.3331 +0.1006 0.13485 0.336 +0.0862 0.11345 0.3391 +0.0742 0.09395 0.342 +0.0655 0.07875 0.3444 +0.049 0.06405 0.3481 +0.0421 0.03825 0.3512 +0.0228 0.02225 0.3559 +0.0026 0.00455 0.3611 +0.0026 -0.01465 0.3631 +0.0026 -0.03385 0.3652 +0.0026 -0.05305 0.3675 +0.0026 -0.07225 0.3699 +0.0217 -0.09185 0.3691 +0.0217 -0.11105 0.3718 +0.0217 -0.13025 0.3747 +0.0385 -0.15065 0.375 +0.0555 -0.17123 0.3756 +0.0551 -0.18966 0.3789 +0.0376 -0.18917 0.3817 +0.0201 -0.18865 0.3845 +0.0026 -0.18812 0.3876 +0.0026 -0.18428 0.40939 +-0.018 -0.18428 0.40941 +-0.0368 -0.184 0.41095 +-0.0551 -0.18357 0.41337 +-0.0694 -0.18504 0.40512 +-0.0849 -0.18365 0.41301 +-0.1035 -0.18386 0.41176 +-0.1267 -0.18482 0.40632 +-0.1504 -0.18572 0.40123 +-0.1712 -0.18643 0.3972 +-0.1887 -0.1871 0.3934 +-0.207 -0.19059 0.3736 +-0.207 -0.17149 0.3703 +-0.207 -0.17477 0.3503 +-0.207 -0.17805 0.3304 +-0.2079 -0.16152 0.3088 +-0.2106 -0.16445 0.2905 +-0.2152 -0.16734 0.2726 +-0.2215 -0.17013 0.2552 +-0.2295 -0.17282 0.2385 +-0.2391 -0.17536 0.2226 +-0.2503 -0.17774 0.2078 +-0.2628 -0.17996 0.1941 +-0.2767 -0.18194 0.1817 +-0.2917 -0.18371 0.1707 +-0.2917 -0.20443 0.1741 +-0.3075 -0.22677 0.1684 +-0.3244 -0.22818 0.1605 +-0.3351 -0.23222 0.1375 +-0.3458 -0.23742 0.108 +-0.3492 -0.24226 0.0806 +-0.3412 -0.2445 0.0679 +-0.3386 -0.2467 0.0554 +-0.3361 -0.249202 0.0412 +-0.3187 -0.249248 0.0409 +-0.315 -0.252437 0.0229 +-0.2949 -0.252361 0.0233 +-0.2949 -0.25555 0.0052 +-0.3044 -0.23727 0.002 +-0.3135 -0.21899 -0.001 +-0.323 -0.20077 -0.0039 +-0.3336 -0.18267 -0.0067 +-0.3456 -0.16482 -0.0093 +-0.3591 -0.14735 -0.0118 +-0.37403 -0.13025 -0.0141 +-0.39 -0.11355 -0.0163 +-0.40674 -0.09705 -0.0183 +-0.42406 -0.08035 -0.0203 +-0.44191 -0.06305 -0.0222 +-0.4603 -0.04495 -0.0241 +-0.4603 -0.02385 -0.0074 +-0.4603 -0.00535 -0.0091 +-0.4603 0.01325 -0.0107 +-0.4603 0.03185 -0.0122 +-0.4603 0.05045 -0.0136 +-0.4603 0.06905 -0.0148 +-0.4603 0.08775 -0.016 +-0.4603 0.08875 0.0026 +-0.4603 0.10725 0.0017 +-0.4603 0.12575 0.0008 +-0.4603 0.14425 0.0001 +-0.4603 0.16275 -0.0004 +-0.4603 0.18125 -0.0007 +-0.4603 0.19955 -0.0005 +-0.4603 0.21755 0.0003 +-0.4603 0.23535 0.0017 +-0.4603 0.23685 -0.0197 +-0.4603 0.25555 -0.0395 +-0.44242 0.25555 -0.0399 +-0.4402 0.25555 -0.0212 +-0.41986 0.25555 -0.0032 +-0.41959 0.25555 0.018 +-0.39725 0.25555 0.0381 +-0.36826 0.25555 0.0311 +-0.356 0.25555 0.019 +-0.3465 0.25555 0.042 +-0.3255 0.25555 0.0523 +-0.2921 0.25555 0.0383 +-0.2802 0.25555 0.0217 +-0.2755 0.25555 0.0496 +-0.2563 0.25555 0.0639 +-0.2226 0.25555 0.0541 +-0.1851 0.25555 0.0476 +-0.1476 0.25555 0.0432 +-0.1145 0.25555 0.0372 +-0.1047 0.25555 0.0192 +-0.0904 0.25555 0.0016 +-0.0718 0.25555 -0.0126 +-0.0526 0.25555 -0.029 +-0.0362 0.25555 -0.0464 +-0.0245 0.25555 -0.0663 +-0.0134 0.25555 -0.0844 +-0.0048 0.25555 -0.0968 +0.0039 0.25555 -0.1091 +0.0126 0.25555 -0.1218 +0.0226 0.25555 -0.134 +0.0342 0.25555 -0.1484 +0.0438 0.25555 -0.1606 +0.0532 0.25555 -0.1725 +0.0629 0.25555 -0.1837 +0.0729 0.25555 -0.1948 +0.0832 0.25555 -0.2056 +0.0938 0.25555 -0.2161 +0.1049 0.25555 -0.2262 +0.1162 0.25555 -0.2361 +0.1278 0.25555 -0.2456 +0.1395 0.25555 -0.2538 +0.1513 0.25555 -0.262 +0.1452 0.25555 -0.277 +0.1585 0.25555 -0.2858 +0.1729 0.25555 -0.2952 +0.186 0.25555 -0.3031 +0.1992 0.25555 -0.3107 +0.1938 0.25555 -0.327 +0.2077 0.25555 -0.3342 +0.2219 0.25555 -0.3408 +0.2362 0.25555 -0.3472 +0.2511 0.25555 -0.3535 +0.2657 0.25555 -0.3591 +0.2628 0.25555 -0.3757 +0.2594 0.25555 -0.3943 +0.275 0.25555 -0.3998 +0.2721 0.25555 -0.4167 +0.268 0.25555 -0.4335 +0.285 0.25555 -0.4387 +0.2801 0.25555 -0.4559 +0.275 0.25555 -0.4738 +0.291 0.24355 -0.4781 +0.3068 0.23165 -0.482 +0.3224 0.22005 -0.4854 +0.3401 0.22035 -0.4889 +0.3558 0.20895 -0.4915 +0.3734 0.20945 -0.494 +0.3908 0.21085 -0.4961 +0.4073 0.20155 -0.4975 +0.4244 0.19185 -0.4984 +0.4421 0.18005 -0.4989 +0.4423 0.19595 -0.4992 +0.4603 0.20065 -0.4996 +0.4603 0.21895 -0.4998 +0.4603 0.23705 -0.4812 +0.4603 0.25555 -0.4624 +0.4603 0.25555 -0.4436 +0.4415 0.25555 -0.4248 +0.4227 0.25555 -0.406 +0.4039 0.25555 -0.3872 +0.3851 0.25555 -0.3685 +0.3663 0.25555 -0.3497 +0.3505 0.25555 -0.3337 +0.3347 0.25555 -0.3323 +0.333 0.25555 -0.3163 +0.3289 0.25555 -0.3019 +0.3192 0.25555 -0.2823 +0.3247 0.25555 -0.2545 +0.3272 0.25555 -0.2355 +0.3068 0.25555 -0.2185 +0.2911 0.25555 -0.1993 +0.2775 0.25555 -0.1808 +0.2682 0.25555 -0.1694 +0.2587 0.25555 -0.1587 +0.2349 0.25555 -0.1518 +0.217 0.25555 -0.1472 +0.2193 0.25555 -0.126 +0.2186 0.25555 -0.1072 +0.2186 0.25555 -0.089 +0.2185 0.25555 -0.0713 +0.1963 0.25555 -0.0695 +0.1941 0.25555 -0.0535 +0.1902 0.25555 -0.038 +0.1827 0.25555 -0.022 +0.1813 0.25555 0.0082 +0.188 0.25555 0.0257 +0.1937 0.25555 0.044 +0.1783 0.25555 0.07 +0.1598 0.25555 0.0954 +0.165 0.25555 0.1193 +0.1715 0.25555 0.143 +0.1757 0.25555 0.163 +0.1778 0.25555 0.1844 +0.1981 0.25555 0.1825 +0.2183 0.25555 0.1808 +0.2201 0.25555 0.201 +0.2401 0.25555 0.1993 +0.2417 0.25555 0.2193 +0.2616 0.25555 0.2178 +0.2828 0.25555 0.2362 +0.3036 0.25555 0.2546 +0.3242 0.25555 0.273 +0.3252 0.25555 0.2923 +0.3059 0.25555 0.2934 +0.2866 0.25555 0.2946 +0.2674 0.25555 0.296 +0.2481 0.25555 0.2975 +0.2289 0.25555 0.2991 +0.2306 0.25555 0.3183 +0.2115 0.25555 0.32 +0.2115 0.23635 0.3201 +0.1924 0.23635 0.322 +0.1733 0.23635 0.3241 +0.1733 0.21715 0.3243 +0.1725 0.20075 0.3247 +0.1532 0.19995 0.3269 +0.133 0.19915 0.3294 +0.131 0.18395 0.33 +0.1172 0.17255 0.3322 +0.1052 0.16535 0.3341 +0.0808 0.15265 0.338 +0.06 0.12535 0.3425 +0.0575 0.10025 0.3442 +0.0553 0.08795 0.3454 +0.0418 0.08395 0.3478 +0.0217 0.06215 0.3527 +0.0218 0.04085 0.3544 +0.0026 0.02385 0.3593 +0.0026 0.02475 0.3814 +0.0026 0.00565 0.3833 +0.0026 -0.01345 0.3852 +0.0026 -0.03235 0.3873 +0.0026 -0.05145 0.3896 +0.0026 -0.07045 0.392 +0.0026 -0.09145 0.3724 +0.0026 -0.11055 0.3751 +0.0026 -0.12975 0.378 +0.0214 -0.14935 0.3777 +0.0376 -0.17066 0.3784 +0.0201 -0.16947 0.3812 +0.0026 -0.16789 0.3841 +0.0026 -0.16537 0.40613 +0.0026 -0.18043 0.43123 +-0.0186 -0.18043 0.43123 +-0.0385 -0.18051 0.4308 +-0.0545 -0.18043 0.4312 +-0.0697 -0.18322 0.41536 +-0.0872 -0.18008 0.43323 +-0.1043 -0.18034 0.43178 +-0.1308 -0.1795 0.43646 +-0.1561 -0.18151 0.42506 +-0.1742 -0.18252 0.41939 +-0.1905 -0.18315 0.41583 +-0.207 -0.18359 0.4133 +-0.207 -0.1871 0.3934 +-0.207 -0.16821 0.3902 +-0.207 -0.14915 0.387 +-0.207 -0.15225 0.3671 +-0.207 -0.15535 0.3471 +-0.207 -0.1585 0.3272 +-0.2079 -0.14185 0.3057 +-0.2106 -0.14465 0.2874 +-0.2152 -0.14735 0.2695 +-0.2215 -0.15005 0.252 +-0.2295 -0.15255 0.2353 +-0.2391 -0.15505 0.2194 +-0.2503 -0.15728 0.2046 +-0.2628 -0.15937 0.1909 +-0.2767 -0.16128 0.1785 +-0.2917 -0.16296 0.1674 +-0.3078 -0.16442 0.1579 +-0.3078 -0.18524 0.1612 +-0.3078 -0.20603 0.1646 +-0.3247 -0.20736 0.1567 +-0.3419 -0.22927 0.1542 +-0.3549 -0.2331 0.1325 +-0.37509 -0.23399 0.1275 +-0.36817 -0.23913 0.0983 +-0.3792 -0.24292 0.0768 +-0.3591 -0.2443 0.069 +-0.3502 -0.2452 0.0639 +-0.3503 -0.246852 0.0545 +-0.35 -0.249141 0.0416 +-0.35 -0.252346 0.0234 +-0.3333 -0.252483 0.0226 +-0.3317 -0.25555 0.0052 +-0.3133 -0.25555 0.0052 +-0.3224 -0.23727 0.002 +-0.3313 -0.219 -0.001 +-0.3405 -0.20082 -0.0039 +-0.3508 -0.18283 -0.0067 +-0.36275 -0.1652 -0.0093 +-0.37633 -0.14805 -0.0117 +-0.39141 -0.13145 -0.014 +-0.40761 -0.11515 -0.0161 +-0.42459 -0.09875 -0.0181 +-0.44217 -0.08185 -0.0201 +-0.4603 -0.06415 -0.0221 +-0.4603 -0.04295 -0.0053 +-0.4603 -0.02195 0.0111 +-0.4603 -0.00365 0.0094 +-0.4603 0.01485 0.0078 +-0.4603 0.03325 0.0063 +-0.4603 0.05175 0.005 +-0.4603 0.07025 0.0037 +-0.4603 0.08835 0.0235 +-0.4603 0.10675 0.0225 +-0.4603 0.12505 0.0216 +-0.4603 0.14315 0.021 +-0.4603 0.16125 0.0209 +-0.4603 0.17945 0.0216 +-0.4603 0.19825 0.0239 +-0.4603 0.21725 0.024 +-0.4603 0.23515 0.0223 +-0.4603 0.25555 0.0218 +-0.4603 0.25555 0.0013 +-0.4603 0.25555 -0.0191 +-0.44043 0.25555 -0.0008 +-0.43958 0.25555 0.0218 +-0.41814 0.25555 0.0421 +-0.39644 0.25555 0.0619 +-0.37358 0.25555 0.0619 +-0.3525 0.25555 0.0668 +-0.3321 0.25555 0.074 +-0.3027 0.25555 0.0598 +-0.2851 0.25555 0.0719 +-0.2658 0.25555 0.0857 +-0.2365 0.25555 0.0802 +-0.1999 0.25555 0.0708 +-0.1584 0.25555 0.0657 +-0.1221 0.25555 0.0546 +-0.1022 0.25555 0.0587 +-0.0983 0.25555 0.0449 +-0.0909 0.25555 0.0279 +-0.0786 0.25555 0.0122 +-0.0593 0.25555 0 +-0.0392 0.25555 -0.0172 +-0.0227 0.25555 -0.0356 +-0.0107 0.25555 -0.0562 +-0.0007 0.25555 -0.0737 +0.0068 0.25555 -0.085 +0.0148 0.25555 -0.0963 +0.0234 0.25555 -0.1084 +0.0335 0.25555 -0.1208 +0.0455 0.25555 -0.1361 +0.0548 0.25555 -0.1481 +0.0637 0.25555 -0.1598 +0.073 0.25555 -0.1707 +0.0826 0.25555 -0.1816 +0.0926 0.25555 -0.1921 +0.1028 0.25555 -0.2022 +0.1134 0.25555 -0.2121 +0.1243 0.25555 -0.2217 +0.1356 0.25555 -0.2311 +0.1463 0.25555 -0.2384 +0.1579 0.25555 -0.2459 +0.1719 0.25555 -0.2555 +0.1644 0.25555 -0.2716 +0.1784 0.25555 -0.2818 +0.1911 0.25555 -0.2895 +0.2039 0.25555 -0.2969 +0.2169 0.25555 -0.304 +0.2126 0.25555 -0.3178 +0.2262 0.25555 -0.3246 +0.2396 0.25555 -0.3312 +0.2543 0.25555 -0.3377 +0.2685 0.25555 -0.3441 +0.2811 0.25555 -0.3488 +0.2794 0.25555 -0.3639 +0.2774 0.25555 -0.3808 +0.2925 0.25555 -0.3857 +0.2908 0.25555 -0.4048 +0.2885 0.25555 -0.4218 +0.305 0.25555 -0.4264 +0.302 0.25555 -0.4435 +0.2978 0.25555 -0.4608 +0.2931 0.25555 -0.4787 +0.309 0.24365 -0.4826 +0.3246 0.23185 -0.486 +0.3424 0.23205 -0.4894 +0.3577 0.22055 -0.4919 +0.3753 0.22115 -0.4944 +0.3924 0.22235 -0.4964 +0.4078 0.21365 -0.4977 +0.4246 0.20575 -0.4987 +0.4421 0.21175 -0.4995 +0.4413 0.22655 -0.4996 +0.4603 0.23725 -0.4999 +0.4603 0.25555 -0.4812 +0.4415 0.25555 -0.4624 +0.4415 0.25555 -0.4436 +0.4227 0.25555 -0.4248 +0.4039 0.25555 -0.406 +0.3851 0.25555 -0.3872 +0.3675 0.25555 -0.3844 +0.3663 0.25555 -0.3685 +0.3526 0.25555 -0.3662 +0.3518 0.25555 -0.3504 +0.3355 0.25555 -0.3471 +0.3209 0.25555 -0.3442 +0.3203 0.25555 -0.3309 +0.3189 0.25555 -0.3187 +0.3154 0.25555 -0.3079 +0.3055 0.25555 -0.2979 +0.2875 0.25555 -0.2713 +0.2997 0.25555 -0.2495 +0.304 0.25555 -0.2338 +0.2895 0.25555 -0.2191 +0.276 0.25555 -0.1988 +0.2614 0.25555 -0.1949 +0.2647 0.25555 -0.1796 +0.251 0.25555 -0.1732 +0.233 0.25555 -0.1682 +0.2137 0.25555 -0.1645 +0.1994 0.25555 -0.1426 +0.1999 0.25555 -0.1238 +0.199 0.25555 -0.1048 +0.1978 0.25555 -0.0867 +0.1831 0.25555 -0.0852 +0.1815 0.25555 -0.0684 +0.1789 0.25555 -0.0535 +0.1761 0.25555 -0.0426 +0.17 0.25555 -0.0321 +0.1557 0.25555 -0.0187 +0.1698 0.25555 -0.0046 +0.1642 0.25555 0.0176 +0.1682 0.25555 0.0307 +0.1728 0.25555 0.0475 +0.1548 0.25555 0.0718 +0.1364 0.25555 0.1031 +0.1437 0.25555 0.1229 +0.1498 0.25555 0.1465 +0.1545 0.25555 0.1649 +0.1574 0.25555 0.1866 +0.1599 0.25555 0.2072 +0.18 0.25555 0.2049 +0.2001 0.25555 0.2029 +0.202 0.25555 0.2229 +0.2219 0.25555 0.221 +0.2433 0.25555 0.2391 +0.2631 0.25555 0.2375 +0.2841 0.25555 0.2558 +0.3048 0.25555 0.274 +0.2854 0.25555 0.2753 +0.2659 0.25555 0.2766 +0.2465 0.25555 0.2781 +0.2271 0.25555 0.2798 +0.2078 0.25555 0.2816 +0.2096 0.25555 0.3009 +0.1904 0.25555 0.3028 +0.1924 0.25555 0.3219 +0.1733 0.25555 0.324 +0.1543 0.25555 0.3262 +0.1543 0.23635 0.3263 +0.1543 0.21715 0.3265 +0.1353 0.21715 0.3288 +0.1162 0.21715 0.3313 +0.1163 0.19815 0.3316 +0.1164 0.18415 0.332 +0.1003 0.18155 0.3342 +0.0784 0.17935 0.3375 +0.0553 0.15745 0.3418 +0.0494 0.14175 0.3434 +0.0415 0.12195 0.3456 +0.0408 0.10045 0.3469 +0.0217 0.10075 0.3501 +0.0217 0.08145 0.3513 +0.0026 0.06235 0.3561 +0.0026 0.04305 0.3576 +0.0026 0.04395 0.3798 +0.0026 0.02695 0.4035 +0.0026 0.00795 0.40532 +0.0026 -0.01095 0.40726 +0.0026 -0.02975 0.40935 +0.0026 -0.04865 0.41159 +0.0026 -0.06755 0.41395 +0.0026 -0.08645 0.41649 +0.0026 -0.08955 0.3945 +0.0026 -0.10845 0.3972 +0.0026 -0.12745 0.40005 +0.0026 -0.14885 0.381 +0.0026 -0.14645 0.40303 +0.0026 -0.16168 0.42798 +0.0026 -0.17658 0.45306 +-0.0191 -0.17719 0.44955 +-0.0391 -0.17712 0.45001 +-0.0539 -0.17707 0.45027 +-0.0695 -0.18014 0.43284 +-0.0857 -0.177 0.45073 +-0.1033 -0.17738 0.44856 +-0.1222 -0.1766 0.45297 +-0.1344 -0.17581 0.45746 +-0.1445 -0.17694 0.45105 +-0.1615 -0.17828 0.44345 +-0.177 -0.17913 0.43858 +-0.1918 -0.1797 0.43536 +-0.207 -0.18008 0.43317 +-0.207 -0.16165 0.43001 +-0.207 -0.16493 0.41008 +-0.207 -0.14595 0.40697 +-0.207 -0.12705 0.40399 +-0.207 -0.13005 0.384 +-0.207 -0.13295 0.3641 +-0.207 -0.13595 0.3441 +-0.207 -0.13895 0.3242 +-0.2079 -0.12205 0.3027 +-0.2106 -0.12475 0.2844 +-0.2152 -0.12735 0.2665 +-0.2215 -0.12985 0.249 +-0.2295 -0.13235 0.2323 +-0.2391 -0.13465 0.2164 +-0.2503 -0.13675 0.2015 +-0.2628 -0.13875 0.1878 +-0.2767 -0.14055 0.1754 +-0.2917 -0.14215 0.1643 +-0.3078 -0.14355 0.1548 +-0.3247 -0.14475 0.1469 +-0.3247 -0.16563 0.15 +-0.3247 -0.1865 0.1533 +-0.3423 -0.18751 0.1471 +-0.3423 -0.20841 0.1505 +-0.36 -0.23007 0.1497 +-0.37848 -0.23056 0.147 +-0.39716 -0.23416 0.1266 +-0.39757 -0.23823 0.1034 +-0.3998 -0.2418 0.0832 +-0.4029 -0.24543 0.0625 +-0.38387 -0.246059 0.059 +-0.36327 -0.246608 0.0559 +-0.36582 -0.249156 0.0415 +-0.36841 -0.25233 0.0234 +-0.36841 -0.25555 0.0052 +-0.35 -0.25555 0.0052 +-0.3405 -0.23727 0.002 +-0.349 -0.21902 -0.001 +-0.3579 -0.20089 -0.0039 +-0.36791 -0.1831 -0.0066 +-0.3797 -0.16589 -0.0092 +-0.39339 -0.14935 -0.0115 +-0.40871 -0.13315 -0.0137 +-0.42519 -0.11705 -0.0158 +-0.44245 -0.10055 -0.0179 +-0.4603 -0.08335 -0.0199 +-0.4603 -0.06205 -0.0031 +-0.4603 -0.04095 0.0134 +-0.4603 -0.02185 0.0318 +-0.4603 -0.00355 0.0302 +-0.4603 0.01485 0.0286 +-0.4603 0.03325 0.0271 +-0.4603 0.05155 0.0258 +-0.4603 0.06995 0.0246 +-0.4603 0.08905 0.0487 +-0.4603 0.10745 0.0478 +-0.4603 0.12575 0.0471 +-0.4603 0.14415 0.0464 +-0.4603 0.16275 0.0463 +-0.4603 0.18115 0.0462 +-0.4603 0.19915 0.0473 +-0.4603 0.21745 0.046 +-0.4603 0.23545 0.043 +-0.4603 0.25555 0.0422 +-0.43969 0.25555 0.0422 +-0.41863 0.25555 0.0623 +-0.39716 0.25555 0.0827 +-0.377 0.25555 0.0843 +-0.3566 0.25555 0.0876 +-0.3366 0.25555 0.0927 +-0.3109 0.25555 0.0825 +-0.2931 0.25555 0.092 +-0.275 0.25555 0.1043 +-0.2473 0.25555 0.1004 +-0.2168 0.25555 0.0968 +-0.1782 0.25555 0.0905 +-0.1579 0.25555 0.1131 +-0.1281 0.25555 0.0828 +-0.1024 0.25555 0.0786 +-0.0858 0.25555 0.074 +-0.0877 0.25555 0.0601 +-0.0849 0.25555 0.0492 +-0.0786 0.25555 0.0352 +-0.0695 0.25555 0.0234 +-0.0478 0.25555 0.0172 +-0.024 0.25555 -0.0045 +-0.0083 0.25555 -0.0246 +0.004 0.25555 -0.0477 +0.0103 0.25555 -0.0647 +0.0174 0.25555 -0.0736 +0.0253 0.25555 -0.0836 +0.0344 0.25555 -0.0952 +0.0446 0.25555 -0.1078 +0.0563 0.25555 -0.1235 +0.0654 0.25555 -0.1352 +0.0745 0.25555 -0.1457 +0.0839 0.25555 -0.1566 +0.0933 0.25555 -0.1675 +0.1028 0.25555 -0.1783 +0.1114 0.25555 -0.1878 +0.1218 0.25555 -0.1982 +0.1318 0.25555 -0.2068 +0.1431 0.25555 -0.2157 +0.1531 0.25555 -0.2233 +0.1643 0.25555 -0.2313 +0.1807 0.25555 -0.2427 +0.1938 0.25555 -0.2512 +0.186 0.25555 -0.266 +0.198 0.25555 -0.2733 +0.2103 0.25555 -0.2811 +0.222 0.25555 -0.2886 +0.236 0.25555 -0.2969 +0.2301 0.25555 -0.3106 +0.2448 0.25555 -0.3183 +0.2593 0.25555 -0.3255 +0.2718 0.25555 -0.3317 +0.2831 0.25555 -0.3355 +0.2963 0.25555 -0.339 +0.295 0.25555 -0.3533 +0.294 0.25555 -0.3686 +0.3081 0.25555 -0.3727 +0.3075 0.25555 -0.3902 +0.3067 0.25555 -0.4094 +0.3225 0.25555 -0.4136 +0.3216 0.25555 -0.4306 +0.3192 0.25555 -0.4477 +0.3155 0.25555 -0.4651 +0.3114 0.25555 -0.4832 +0.327 0.24365 -0.4865 +0.3451 0.24375 -0.49 +0.3602 0.23225 -0.4924 +0.3779 0.23255 -0.4948 +0.3948 0.23325 -0.4967 +0.4084 0.22475 -0.4978 +0.4243 0.21865 -0.4988 +0.423 0.22935 -0.4989 +0.4384 0.23875 -0.4996 +0.4603 0.25555 -0.5 +0.4415 0.25555 -0.4997 +0.4415 0.25555 -0.4812 +0.4237 0.25555 -0.4805 +0.4229 0.25555 -0.4624 +0.4227 0.25555 -0.4436 +0.4042 0.25555 -0.4437 +0.4039 0.25555 -0.4248 +0.3856 0.25555 -0.425 +0.3851 0.25555 -0.406 +0.3687 0.25555 -0.4033 +0.3536 0.25555 -0.4007 +0.3529 0.25555 -0.3821 +0.337 0.25555 -0.3794 +0.3363 0.25555 -0.3632 +0.3216 0.25555 -0.3596 +0.3083 0.25555 -0.3566 +0.3086 0.25555 -0.3417 +0.3089 0.25555 -0.3299 +0.3084 0.25555 -0.3199 +0.308 0.25555 -0.3125 +0.2999 0.25555 -0.3089 +0.2869 0.25555 -0.3061 +0.2872 0.25555 -0.2893 +0.2765 0.25555 -0.2758 +0.2761 0.25555 -0.2592 +0.2849 0.25555 -0.2444 +0.2884 0.25555 -0.2324 +0.2793 0.25555 -0.2318 +0.2736 0.25555 -0.2205 +0.2562 0.25555 -0.2106 +0.2404 0.25555 -0.2033 +0.2456 0.25555 -0.1878 +0.2291 0.25555 -0.1827 +0.2104 0.25555 -0.1792 +0.1945 0.25555 -0.1633 +0.1816 0.25555 -0.1404 +0.1837 0.25555 -0.1216 +0.1838 0.25555 -0.103 +0.1688 0.25555 -0.1008 +0.1704 0.25555 -0.0837 +0.1697 0.25555 -0.0674 +0.1687 0.25555 -0.0535 +0.1691 0.25555 -0.0462 +0.1618 0.25555 -0.0414 +0.1464 0.25555 -0.0335 +0.1424 0.25555 -0.0087 +0.1563 0.25555 0.0061 +0.1552 0.25555 0.0223 +0.1543 0.25555 0.0327 +0.1541 0.25555 0.0501 +0.1331 0.25555 0.0472 +0.1254 0.25555 0.0747 +0.0977 0.25555 0.0978 +0.1105 0.25555 0.1163 +0.1199 0.25555 0.1331 +0.1256 0.25555 0.1507 +0.1308 0.25555 0.1694 +0.1366 0.25555 0.1894 +0.1397 0.25555 0.21 +0.1624 0.25555 0.2272 +0.1822 0.25555 0.2249 +0.204 0.25555 0.2426 +0.2237 0.25555 0.2408 +0.2449 0.25555 0.2587 +0.2645 0.25555 0.2572 +0.2254 0.25555 0.2604 +0.2059 0.25555 0.2622 +0.1864 0.25555 0.2641 +0.1884 0.25555 0.2836 +0.169 0.25555 0.2856 +0.1712 0.25555 0.3049 +0.152 0.25555 0.3071 +0.1328 0.25555 0.3095 +0.1352 0.25555 0.3285 +0.1352 0.23635 0.3286 +0.1162 0.23635 0.3311 +0.0972 0.23635 0.3337 +0.0972 0.21715 0.3339 +0.0973 0.19805 0.3342 +0.0783 0.19805 0.337 +0.0594 0.19805 0.3399 +0.0596 0.17895 0.3403 +0.0408 0.17795 0.3434 +0.0408 0.15855 0.3441 +0.0382 0.14065 0.3452 +0.0217 0.13935 0.3481 +0.0217 0.12005 0.349 +0.0026 0.10095 0.3534 +0.0026 0.08165 0.3547 +0.0026 0.08215 0.3769 +0.0026 0.06305 0.3782 +0.0026 0.04595 0.40184 +0.0026 0.02915 0.42557 +0.0026 0.01035 0.42735 +0.0026 -0.00845 0.42927 +0.0026 -0.02725 0.43135 +0.0026 -0.04595 0.43356 +0.0026 -0.06465 0.43593 +0.0026 -0.08335 0.43843 +0.0026 -0.10205 0.44108 +0.0026 -0.10525 0.41913 +0.0026 -0.12405 0.42195 +0.0026 -0.14285 0.4249 +0.0026 -0.15798 0.44983 +-0.001 -0.17341 0.47099 +-0.0204 -0.17449 0.46489 +-0.0368 -0.17417 0.4667 +-0.0513 -0.17417 0.46672 +-0.0677 -0.17417 0.4667 +-0.0693 -0.17671 0.45238 +-0.0845 -0.17431 0.46594 +-0.1022 -0.17442 0.46535 +-0.1203 -0.17422 0.4664 +-0.1357 -0.17408 0.46718 +-0.1489 -0.17478 0.46327 +-0.1659 -0.17552 0.45911 +-0.1799 -0.17626 0.45483 +-0.1927 -0.17665 0.45265 +-0.207 -0.17658 0.45306 +-0.207 -0.15797 0.44983 +-0.207 -0.14285 0.42689 +-0.207 -0.12405 0.42393 +-0.207 -0.10525 0.42114 +-0.207 -0.10805 0.40115 +-0.207 -0.11085 0.3812 +-0.207 -0.11375 0.3612 +-0.207 -0.11655 0.3412 +-0.207 -0.11935 0.3212 +-0.2079 -0.10235 0.3 +-0.2106 -0.10485 0.2816 +-0.2152 -0.10735 0.2636 +-0.2215 -0.10975 0.2462 +-0.2295 -0.11205 0.2294 +-0.2391 -0.11425 0.2135 +-0.2503 -0.11625 0.1986 +-0.2628 -0.11815 0.1849 +-0.2767 -0.11985 0.1725 +-0.2917 -0.12135 0.1614 +-0.3078 -0.12275 0.1519 +-0.3247 -0.12375 0.1439 +-0.3423 -0.12465 0.1377 +-0.3423 -0.14565 0.1407 +-0.3423 -0.16657 0.1438 +-0.36046 -0.16726 0.1393 +-0.36046 -0.18823 0.1426 +-0.36046 -0.20916 0.146 +-0.37897 -0.20962 0.1433 +-0.39766 -0.23072 0.146 +-0.41854 -0.23072 0.146 +-0.41854 -0.23426 0.1259 +-0.41878 -0.23783 0.1057 +-0.41905 -0.24137 0.0856 +-0.41989 -0.24496 0.0653 +-0.40489 -0.248943 0.0426 +-0.38664 -0.24905 0.0421 +-0.38678 -0.252315 0.0235 +-0.38678 -0.25555 0.0052 +-0.37636 -0.23725 0.002 +-0.3585 -0.23727 0.002 +-0.36649 -0.21902 -0.001 +-0.3749 -0.201 -0.0039 +-0.38458 -0.18357 -0.0066 +-0.39633 -0.167 -0.009 +-0.41027 -0.15115 -0.0113 +-0.42595 -0.13545 -0.0134 +-0.44275 -0.11935 -0.0156 +-0.4603 -0.10255 -0.0176 +-0.4603 -0.08115 -0.0009 +-0.4603 -0.05995 0.0157 +-0.4603 -0.04005 0.0341 +-0.4603 -0.02105 0.0572 +-0.4603 -0.00295 0.0556 +-0.4603 0.01525 0.054 +-0.4603 0.03365 0.0525 +-0.4603 0.05205 0.0511 +-0.4603 0.07065 0.0499 +-0.4603 0.07235 0.073 +-0.4603 0.09065 0.0718 +-0.4603 0.10895 0.0708 +-0.4603 0.12725 0.07 +-0.4603 0.14555 0.0692 +-0.4603 0.16395 0.0685 +-0.4603 0.18225 0.068 +-0.4603 0.20055 0.0676 +-0.4603 0.21865 0.0667 +-0.4603 0.23615 0.0639 +-0.4603 0.25555 0.0626 +-0.43969 0.25555 0.0626 +-0.41854 0.25555 0.0828 +-0.39766 0.25555 0.1035 +-0.37897 0.25555 0.1044 +-0.36046 0.25555 0.1072 +-0.3423 0.25555 0.1117 +-0.3171 0.25555 0.0998 +-0.3004 0.25555 0.1094 +-0.2828 0.25555 0.1197 +-0.2575 0.25555 0.1175 +-0.23 0.25555 0.1166 +-0.1976 0.25555 0.1148 +-0.1796 0.25555 0.1353 +-0.1394 0.25555 0.1378 +-0.1133 0.25555 0.1188 +-0.0918 0.25555 0.1052 +-0.0748 0.25555 0.0946 +-0.0608 0.25555 0.0828 +-0.0739 0.25555 0.068 +-0.0787 0.25555 0.0601 +-0.0746 0.25555 0.0529 +-0.0685 0.25555 0.0415 +-0.0638 0.25555 0.034 +-0.0516 0.25555 0.0349 +-0.0299 0.25555 0.0448 +-0.0184 0.25555 0.0289 +-0.0041 0.25555 0.0103 +0.0078 0.25555 -0.0118 +0.0222 0.25555 -0.0431 +0.02 0.25555 -0.0597 +0.027 0.25555 -0.0648 +0.035 0.25555 -0.0721 +0.0445 0.25555 -0.0842 +0.0545 0.25555 -0.0972 +0.0658 0.25555 -0.1112 +0.0748 0.25555 -0.1224 +0.084 0.25555 -0.1336 +0.0934 0.25555 -0.1447 +0.1026 0.25555 -0.1554 +0.1119 0.25555 -0.1663 +0.1195 0.25555 -0.1757 +0.1288 0.25555 -0.1854 +0.1381 0.25555 -0.1933 +0.1498 0.25555 -0.2016 +0.1596 0.25555 -0.2086 +0.1743 0.25555 -0.2178 +0.192 0.25555 -0.2304 +0.2043 0.25555 -0.2394 +0.2053 0.25555 -0.2586 +0.2171 0.25555 -0.2656 +0.2286 0.25555 -0.2737 +0.2429 0.25555 -0.2835 +0.2573 0.25555 -0.2929 +0.2499 0.25555 -0.3054 +0.266 0.25555 -0.3149 +0.2761 0.25555 -0.3221 +0.2848 0.25555 -0.3251 +0.2972 0.25555 -0.3283 +0.298 0.25555 -0.3185 +0.2864 0.25555 -0.3158 +0.2799 0.25555 -0.3152 +0.2753 0.25555 -0.305 +0.2754 0.25555 -0.2848 +0.2631 0.25555 -0.2793 +0.2692 0.25555 -0.2695 +0.2584 0.25555 -0.2601 +0.2671 0.25555 -0.2502 +0.274 0.25555 -0.2395 +0.2624 0.25555 -0.2322 +0.2476 0.25555 -0.2238 +0.2339 0.25555 -0.2176 +0.2224 0.25555 -0.2143 +0.2243 0.25555 -0.1976 +0.2084 0.25555 -0.1944 +0.1923 0.25555 -0.1767 +0.1811 0.25555 -0.1751 +0.1762 0.25555 -0.1639 +0.1583 0.25555 -0.1548 +0.1625 0.25555 -0.1393 +0.1669 0.25555 -0.1194 +0.1519 0.25555 -0.0982 +0.1566 0.25555 -0.0818 +0.157 0.25555 -0.0659 +0.1584 0.25555 -0.0522 +0.1427 0.25555 -0.0488 +0.1268 0.25555 -0.0465 +0.1319 0.25555 -0.0274 +0.1286 0.25555 0.0025 +0.1463 0.25555 0.0161 +0.1398 0.25555 0.0298 +0.1172 0.25555 0.0188 +0.1067 0.25555 0.0371 +0.0953 0.25555 0.0568 +0.0788 0.25555 0.0744 +0.0632 0.25555 0.0938 +0.0815 0.25555 0.1155 +0.0934 0.25555 0.13 +0.1016 0.25555 0.1423 +0.1062 0.25555 0.1562 +0.1103 0.25555 0.1725 +0.1153 0.25555 0.1934 +0.1194 0.25555 0.2135 +0.1425 0.25555 0.2297 +0.1646 0.25555 0.2468 +0.1843 0.25555 0.2446 +0.1669 0.25555 0.2663 +0.1474 0.25555 0.2686 +0.1497 0.25555 0.2879 +0.1304 0.25555 0.2903 +0.1111 0.25555 0.2928 +0.1137 0.25555 0.312 +0.1162 0.25555 0.331 +0.0972 0.25555 0.3336 +0.0783 0.23635 0.3364 +0.0783 0.21715 0.3367 +0.0593 0.21715 0.3395 +0.0407 0.19795 0.3429 +0.0217 0.19745 0.3461 +0.0217 0.17805 0.3466 +0.0217 0.15875 0.3472 +0.0026 0.13955 0.3514 +0.0026 0.12025 0.3523 +0.0026 0.12045 0.3745 +0.0026 0.10125 0.3756 +0.0026 0.08385 0.399 +0.0026 0.06485 0.40033 +0.0026 0.04795 0.42392 +-0.0011 0.03095 0.44408 +-0.0011 0.01225 0.44585 +-0.0011 -0.00635 0.44777 +-0.0011 -0.02505 0.44983 +-0.0011 -0.04365 0.45203 +-0.0011 -0.06225 0.45438 +-0.0011 -0.08075 0.45685 +-0.0011 -0.09935 0.45949 +-0.0011 -0.11785 0.46225 +0.0026 -0.12075 0.44385 +0.0026 -0.13935 0.44678 +-0.0011 -0.15485 0.4682 +-0.0113 -0.17074 0.48622 +-0.0231 -0.17257 0.47577 +-0.0346 -0.17192 0.47952 +-0.0484 -0.1713 0.48297 +-0.0655 -0.17112 0.48398 +-0.0837 -0.17114 0.48389 +-0.103 -0.17126 0.48322 +-0.1212 -0.17138 0.48256 +-0.1382 -0.17159 0.48134 +-0.1538 -0.1719 0.47961 +-0.1699 -0.1725 0.47621 +-0.183 -0.17352 0.47037 +-0.1926 -0.17446 0.46507 +-0.2034 -0.17341 0.47104 +-0.2034 -0.15495 0.46779 +-0.2034 -0.13645 0.46475 +-0.207 -0.13935 0.44676 +-0.207 -0.12065 0.44385 +-0.207 -0.10205 0.44107 +-0.207 -0.08635 0.41847 +-0.207 -0.08905 0.3985 +-0.207 -0.09175 0.3785 +-0.207 -0.09435 0.3585 +-0.207 -0.09705 0.3385 +-0.207 -0.09975 0.3185 +-0.2079 -0.08255 0.2973 +-0.2106 -0.08495 0.2789 +-0.2152 -0.08725 0.261 +-0.2215 -0.08955 0.2435 +-0.2295 -0.09175 0.2267 +-0.2391 -0.09385 0.2108 +-0.2503 -0.09575 0.1959 +-0.2628 -0.09755 0.1821 +-0.2767 -0.09915 0.1697 +-0.2917 -0.10055 0.1586 +-0.3078 -0.10185 0.1491 +-0.3247 -0.10285 0.1412 +-0.3423 -0.10365 0.1349 +-0.36046 -0.10425 0.1304 +-0.36046 -0.12525 0.1332 +-0.36046 -0.14625 0.1362 +-0.37897 -0.14665 0.1334 +-0.37897 -0.16767 0.1366 +-0.37897 -0.18867 0.1399 +-0.39766 -0.18881 0.139 +-0.39766 -0.20977 0.1424 +-0.4151 -0.20828 0.1422 +-0.42743 -0.21163 0.1427 +-0.43943 -0.23072 0.146 +-0.43959 -0.23426 0.1259 +-0.43972 -0.23782 0.1058 +-0.43978 -0.24136 0.0857 +-0.43982 -0.2449 0.0655 +-0.42278 -0.248744 0.0438 +-0.42354 -0.252224 0.024 +-0.40517 -0.252285 0.0237 +-0.40517 -0.25555 0.0052 +-0.39403 -0.23715 0.002 +-0.3837 -0.21897 -0.001 +-0.39133 -0.20114 -0.0039 +-0.40064 -0.18437 -0.0064 +-0.41257 -0.16876 -0.0088 +-0.427 -0.15355 -0.0109 +-0.44315 -0.13805 -0.0131 +-0.4603 -0.12175 -0.0153 +-0.4603 -0.10025 0.0014 +-0.4603 -0.07895 0.018 +-0.4603 -0.05855 0.0366 +-0.4603 -0.03915 0.0591 +-0.4603 -0.01915 0.0804 +-0.4603 -0.00085 0.0786 +-0.4603 0.01745 0.0771 +-0.4603 0.03575 0.0756 +-0.4603 0.05405 0.0742 +-0.4603 0.07345 0.0912 +-0.4603 0.09165 0.0901 +-0.4603 0.10985 0.0891 +-0.4603 0.12805 0.0882 +-0.4603 0.14625 0.0875 +-0.4603 0.16445 0.0868 +-0.4603 0.18275 0.0863 +-0.4603 0.20095 0.0859 +-0.4603 0.21915 0.0856 +-0.4603 0.23735 0.0849 +-0.4603 0.25555 0.0831 +-0.43943 0.25555 0.0829 +-0.41854 0.25555 0.1035 +-0.41507 0.23345 0.1036 +-0.39766 0.23425 0.1036 +-0.37897 0.23425 0.1045 +-0.36046 0.23425 0.1072 +-0.3423 0.23435 0.1118 +-0.3247 0.23435 0.1181 +-0.3246 0.25555 0.118 +-0.3077 0.25555 0.126 +-0.2917 0.25555 0.1357 +-0.2663 0.25555 0.1318 +-0.2412 0.25555 0.1322 +-0.2129 0.25555 0.1333 +-0.1968 0.25555 0.1517 +-0.1636 0.25555 0.157 +-0.1275 0.25555 0.1626 +-0.1012 0.25555 0.1434 +-0.0798 0.25555 0.1278 +-0.0627 0.25555 0.1141 +-0.0448 0.25555 0.0984 +-0.0339 0.25555 0.0839 +-0.0496 0.25555 0.071 +-0.065 0.25555 0.0598 +-0.0569 0.25555 0.0483 +-0.0396 0.25555 0.0587 +-0.0237 0.25555 0.0716 +-0.0111 0.25555 0.0545 +-0.0004 0.25555 0.0394 +0.0123 0.25555 0.0217 +0.0243 0.25555 0.0032 +0.04 0.25555 -0.0217 +0.0505 0.25555 -0.0367 +0.0357 0.25555 -0.0517 +0.0465 0.25555 -0.0612 +0.0552 0.25555 -0.0725 +0.0651 0.25555 -0.0862 +0.0753 0.25555 -0.0996 +0.0838 0.25555 -0.1101 +0.0938 0.25555 -0.1215 +0.1032 0.25555 -0.1322 +0.1121 0.25555 -0.143 +0.1214 0.25555 -0.1543 +0.1289 0.25555 -0.1632 +0.1371 0.25555 -0.1709 +0.1459 0.25555 -0.1787 +0.157 0.25555 -0.188 +0.1666 0.25555 -0.1952 +0.1841 0.25555 -0.205 +0.2071 0.25555 -0.2159 +0.2149 0.25555 -0.229 +0.2139 0.25555 -0.246 +0.2248 0.25555 -0.2524 +0.2366 0.25555 -0.2604 +0.2502 0.25555 -0.2702 +0.2456 0.25555 -0.2504 +0.2538 0.25555 -0.2416 +0.2406 0.25555 -0.2334 +0.229 0.25555 -0.2273 +0.2224 0.25555 -0.2239 +0.223 0.25555 -0.2349 +0.234 0.25555 -0.2417 +0.1888 0.25555 -0.19 +0.1752 0.25555 -0.1835 +0.1644 0.25555 -0.1753 +0.1519 0.25555 -0.1665 +0.1475 0.25555 -0.151 +0.1488 0.25555 -0.1387 +0.1451 0.25555 -0.1189 +0.1339 0.25555 -0.1096 +0.1359 0.25555 -0.0951 +0.1379 0.25555 -0.079 +0.1394 0.25555 -0.0632 +0.1233 0.25555 -0.0617 +0.1098 0.25555 -0.0448 +0.1111 0.25555 -0.0203 +0.0983 0.25555 0.003 +0.0874 0.25555 0.022 +0.0748 0.25555 0.0429 +0.0627 0.25555 0.0582 +0.0478 0.25555 0.0769 +0.0343 0.25555 0.0917 +0.0495 0.25555 0.1099 +0.0684 0.25555 0.1318 +0.0817 0.25555 0.1417 +0.0913 0.25555 0.1474 +0.0914 0.25555 0.1587 +0.0927 0.25555 0.1765 +0.0958 0.25555 0.1985 +0.0988 0.25555 0.2183 +0.1226 0.25555 0.2327 +0.145 0.25555 0.2492 +0.1254 0.25555 0.2518 +0.1279 0.25555 0.271 +0.1085 0.25555 0.2737 +0.089 0.25555 0.2767 +0.0918 0.25555 0.2956 +0.0945 0.25555 0.3146 +0.0754 0.25555 0.3174 +0.0783 0.25555 0.3364 +0.0593 0.23635 0.3393 +0.0404 0.23635 0.3423 +0.0405 0.21705 0.3426 +0.0216 0.21675 0.3457 +0.0026 0.19755 0.3494 +0.0026 0.17815 0.3499 +0.0026 0.15885 0.3506 +0.0026 0.15875 0.3728 +0.0026 0.13955 0.3736 +0.0026 0.12175 0.3967 +0.0026 0.10285 0.3977 +0.0026 0.08555 0.42107 +0.0026 0.06675 0.42241 +-0.0011 0.04965 0.44243 +-0.0115 0.03235 0.45929 +-0.0115 0.01375 0.46104 +-0.0115 -0.00475 0.46295 +-0.0115 -0.02325 0.465 +-0.0115 -0.04175 0.46718 +-0.0115 -0.06025 0.46951 +-0.0115 -0.07865 0.47197 +-0.0115 -0.09715 0.47458 +-0.0115 -0.11555 0.47731 +-0.0115 -0.13395 0.48021 +-0.0011 -0.13635 0.46515 +-0.0115 -0.15235 0.48322 +-0.0267 -0.16894 0.496414 +-0.045 -0.1683 0.5 +-0.0641 -0.1683 0.5 +-0.0831 -0.1683 0.5 +-0.1022 -0.1683 0.5 +-0.1212 -0.1683 0.5 +-0.1403 -0.1683 0.5 +-0.1593 -0.1683 0.5 +-0.1775 -0.16894 0.496414 +-0.193 -0.17073 0.4863 +-0.1931 -0.15235 0.48302 +-0.1931 -0.13395 0.47998 +-0.1931 -0.11555 0.4771 +-0.2034 -0.11795 0.46185 +-0.2034 -0.09935 0.45908 +-0.2034 -0.08085 0.45645 +-0.207 -0.08335 0.43843 +-0.207 -0.06745 0.41595 +-0.207 -0.06995 0.3959 +-0.207 -0.07255 0.3759 +-0.207 -0.07505 0.3559 +-0.207 -0.07765 0.3359 +-0.207 -0.08015 0.3158 +-0.2079 -0.06275 0.2948 +-0.2106 -0.06505 0.2765 +-0.2152 -0.06725 0.2584 +-0.2215 -0.06935 0.2409 +-0.2295 -0.07145 0.2241 +-0.2391 -0.07335 0.2082 +-0.2503 -0.07515 0.1933 +-0.2628 -0.07685 0.1795 +-0.2767 -0.07835 0.1671 +-0.2917 -0.07975 0.156 +-0.3078 -0.08085 0.1464 +-0.3247 -0.08185 0.1385 +-0.3423 -0.08265 0.1322 +-0.36046 -0.08315 0.1277 +-0.37897 -0.08355 0.125 +-0.37897 -0.10455 0.1277 +-0.37897 -0.12565 0.1305 +-0.39766 -0.12575 0.1296 +-0.39766 -0.14675 0.1325 +-0.39766 -0.16783 0.1357 +-0.41063 -0.17822 0.1373 +-0.41164 -0.19529 0.14 +-0.42371 -0.19621 0.1402 +-0.43286 -0.19564 0.1401 +-0.44324 -0.2125 0.1429 +-0.4603 -0.23072 0.146 +-0.4603 -0.23426 0.1259 +-0.4603 -0.23782 0.1058 +-0.4603 -0.24136 0.0857 +-0.4603 -0.2449 0.0655 +-0.4403 -0.248455 0.0454 +-0.44191 -0.252132 0.0245 +-0.44193 -0.25555 0.0052 +-0.42354 -0.25555 0.0052 +-0.41115 -0.23683 0.002 +-0.40018 -0.21876 -0.0011 +-0.40676 -0.20135 -0.0038 +-0.41593 -0.18577 -0.0062 +-0.42852 -0.17137 -0.0084 +-0.44368 -0.15666 -0.0105 +-0.4603 -0.14095 -0.0127 +-0.4603 -0.11925 0.0038 +-0.4603 -0.09785 0.0204 +-0.4603 -0.07715 0.0392 +-0.4603 -0.05735 0.0612 +-0.4603 -0.03735 0.0822 +-0.4603 -0.01735 0.0986 +-0.4603 0.00085 0.0969 +-0.4603 0.01895 0.0953 +-0.4603 0.03715 0.0938 +-0.4603 0.05535 0.0924 +-0.4603 0.07465 0.1093 +-0.4603 0.09275 0.1082 +-0.4603 0.11085 0.1072 +-0.4603 0.12895 0.1063 +-0.4603 0.14695 0.1056 +-0.4603 0.16505 0.105 +-0.4603 0.18315 0.1044 +-0.4603 0.20125 0.104 +-0.4603 0.21935 0.1037 +-0.4603 0.23745 0.1035 +-0.4603 0.25555 0.1035 +-0.43943 0.25555 0.1035 +-0.42739 0.23675 0.1035 +-0.42363 0.22145 0.1037 +-0.41161 0.22015 0.1037 +-0.39766 0.21305 0.1038 +-0.37897 0.21305 0.1047 +-0.36046 0.21305 0.1075 +-0.3423 0.21315 0.112 +-0.3247 0.21325 0.1183 +-0.3078 0.21335 0.1263 +-0.3078 0.23445 0.1261 +-0.2917 0.23455 0.1357 +-0.2767 0.23455 0.1468 +-0.2766 0.25555 0.1468 +-0.251 0.25555 0.1455 +-0.2261 0.25555 0.1483 +-0.2123 0.25555 0.1659 +-0.1828 0.25555 0.1716 +-0.1504 0.25555 0.1785 +-0.117 0.25555 0.1862 +-0.0887 0.25555 0.1669 +-0.0673 0.25555 0.1505 +-0.0495 0.25555 0.1349 +-0.03 0.25555 0.1153 +-0.0166 0.25555 0.0982 +-0.008 0.25555 0.0845 +0.005 0.25555 0.0661 +0.0165 0.25555 0.0514 +0.0288 0.25555 0.0341 +0.0405 0.25555 0.0181 +0.0545 0.25555 -0.0063 +0.0651 0.25555 -0.0252 +0.0727 0.25555 -0.0376 +0.0588 0.25555 -0.0484 +0.0675 0.25555 -0.0603 +0.0772 0.25555 -0.0734 +0.0858 0.25555 -0.0865 +0.0933 0.25555 -0.0958 +0.1035 0.25555 -0.1097 +0.1125 0.25555 -0.1225 +0.1207 0.25555 -0.1344 +0.1292 0.25555 -0.1464 +0.1356 0.25555 -0.1544 +0.143 0.25555 -0.16 +0.1403 0.25555 -0.1493 +0.1379 0.25555 -0.1414 +0.1318 0.25555 -0.1275 +0.1234 0.25555 -0.1138 +0.116 0.25555 -0.0947 +0.1203 0.25555 -0.0754 +0.1073 0.25555 -0.0713 +0.1087 0.25555 -0.0604 +0.0976 0.25555 -0.0609 +0.0935 0.25555 -0.0468 +0.0878 0.25555 -0.0299 +0.08 0.25555 -0.013 +0.0689 0.25555 0.0074 +0.0565 0.25555 0.03 +0.0452 0.25555 0.046 +0.033 0.25555 0.0637 +0.0211 0.25555 0.0781 +0.0069 0.25555 0.0953 +0.0216 0.25555 0.106 +0.0348 0.25555 0.1257 +0.0549 0.25555 0.1526 +0.0767 0.25555 0.1572 +0.0766 0.25555 0.1803 +0.0778 0.25555 0.2029 +0.079 0.25555 0.2241 +0.1026 0.25555 0.2364 +0.1057 0.25555 0.2548 +0.0861 0.25555 0.2584 +0.0665 0.25555 0.2627 +0.0696 0.25555 0.2801 +0.0726 0.25555 0.2985 +0.0534 0.25555 0.3017 +0.0564 0.25555 0.3203 +0.0593 0.25555 0.3392 +0.0404 0.25555 0.3423 +0.0215 0.25555 0.3455 +0.0215 0.23635 0.3455 +0.0026 0.23615 0.3488 +0.0026 0.21685 0.349 +0.0026 0.21635 0.3712 +0.0026 0.19715 0.3716 +0.0026 0.17795 0.3721 +0.0026 0.15985 0.3949 +0.0026 0.14075 0.3957 +0.0026 0.12315 0.41875 +0.0026 0.10435 0.41984 +-0.0011 0.08695 0.43959 +-0.0011 0.06825 0.44095 +-0.0115 0.05085 0.45767 +-0.0269 0.03325 0.46945 +-0.0269 0.01475 0.47121 +-0.0269 -0.00365 0.4731 +-0.0269 -0.02215 0.47514 +-0.0269 -0.04055 0.47731 +-0.0269 -0.05895 0.47963 +-0.0269 -0.07735 0.48207 +-0.0269 -0.09565 0.48466 +-0.0269 -0.11405 0.48741 +-0.0269 -0.13235 0.49028 +-0.0269 -0.15065 0.493286 +-0.045 -0.15005 0.496857 +-0.0641 -0.15005 0.496857 +-0.0831 -0.15005 0.496857 +-0.1022 -0.15005 0.496857 +-0.1212 -0.15005 0.496857 +-0.1403 -0.15005 0.496857 +-0.1593 -0.15005 0.496857 +-0.1777 -0.15065 0.493194 +-0.1777 -0.13235 0.490173 +-0.1777 -0.11405 0.4873 +-0.1777 -0.09565 0.48457 +-0.1931 -0.09715 0.47435 +-0.1931 -0.07875 0.47174 +-0.1931 -0.06025 0.46928 +-0.2034 -0.06225 0.45396 +-0.207 -0.06455 0.43591 +-0.207 -0.04855 0.41357 +-0.207 -0.05095 0.3935 +-0.207 -0.05335 0.3735 +-0.207 -0.05575 0.3535 +-0.207 -0.05815 0.3334 +-0.207 -0.06055 0.3134 +-0.2079 -0.04295 0.2925 +-0.2106 -0.04505 0.2741 +-0.2152 -0.04715 0.2561 +-0.2215 -0.04915 0.2386 +-0.2295 -0.05105 0.2218 +-0.2391 -0.05285 0.2058 +-0.2503 -0.05465 0.1909 +-0.2628 -0.05615 0.1771 +-0.2767 -0.05765 0.1646 +-0.2917 -0.05885 0.1535 +-0.3078 -0.05995 0.144 +-0.3247 -0.06085 0.136 +-0.3423 -0.06155 0.1298 +-0.36046 -0.06215 0.1252 +-0.37897 -0.06245 0.1225 +-0.39766 -0.06255 0.1216 +-0.39766 -0.08365 0.1241 +-0.39766 -0.10465 0.1267 +-0.4102 -0.11995 0.1288 +-0.41024 -0.13985 0.1315 +-0.41033 -0.15942 0.1344 +-0.4229 -0.16967 0.136 +-0.42317 -0.18519 0.1384 +-0.43451 -0.18052 0.1376 +-0.44585 -0.19519 0.14 +-0.4603 -0.2129 0.1429 +-0.4603 -0.21615 0.1237 +-0.4603 -0.21815 0.1022 +-0.4603 -0.22135 0.0819 +-0.4603 -0.22512 0.0617 +-0.4603 -0.248455 0.0454 +-0.4603 -0.251995 0.0253 +-0.4603 -0.25555 0.0052 +-0.44008 -0.23288 0.0013 +-0.42705 -0.23587 0.0018 +-0.41529 -0.21818 -0.0012 +-0.42069 -0.20182 -0.0038 +-0.43056 -0.18829 -0.0059 +-0.4444 -0.17497 -0.0079 +-0.4603 -0.16007 -0.01 +-0.4603 -0.13835 0.0064 +-0.4603 -0.11685 0.0228 +-0.4603 -0.09565 0.0417 +-0.4603 -0.07555 0.0635 +-0.4603 -0.05565 0.0842 +-0.4603 -0.03545 0.1004 +-0.4603 -0.01555 0.1166 +-0.4603 0.00245 0.115 +-0.4603 0.02045 0.1134 +-0.4603 0.03855 0.1119 +-0.4603 0.05665 0.1106 +-0.44777 0.05715 0.1105 +-0.44777 0.07545 0.1093 +-0.44777 0.09385 0.1082 +-0.44777 0.11215 0.1072 +-0.44777 0.13055 0.1063 +-0.44776 0.14885 0.1055 +-0.44767 0.16725 0.1049 +-0.44745 0.18525 0.1044 +-0.44696 0.20285 0.104 +-0.44579 0.22005 0.1037 +-0.44323 0.23735 0.1035 +-0.43279 0.22085 0.1037 +-0.4231 0.21025 0.1038 +-0.41059 0.20265 0.104 +-0.39766 0.19175 0.1042 +-0.37897 0.19175 0.1051 +-0.36046 0.19185 0.1079 +-0.3423 0.19195 0.1124 +-0.3247 0.19215 0.1187 +-0.3078 0.19225 0.1267 +-0.2917 0.19255 0.1363 +-0.2917 0.21345 0.1359 +-0.2767 0.21365 0.1471 +-0.2628 0.21385 0.1597 +-0.2628 0.23465 0.1594 +-0.2628 0.25555 0.1594 +-0.2371 0.25555 0.1605 +-0.2248 0.25555 0.177 +-0.1998 0.25555 0.1852 +-0.1711 0.25555 0.1923 +-0.1404 0.25555 0.2016 +-0.1064 0.25555 0.2139 +-0.0754 0.25555 0.1959 +-0.0511 0.25555 0.1784 +-0.0331 0.25555 0.1617 +-0.0103 0.25555 0.136 +-0.0021 0.25555 0.1085 +0.0119 0.25555 0.1141 +0.0158 0.25555 0.1349 +0.0265 0.25555 0.1665 +0.0567 0.25555 0.1863 +0.0591 0.25555 0.2072 +0.0621 0.25555 0.2284 +0.0827 0.25555 0.2412 +0.0654 0.25555 0.2458 +0.0478 0.25555 0.2495 +0.0488 0.25555 0.2669 +0.0503 0.25555 0.2838 +0.0324 0.25555 0.2874 +0.0343 0.25555 0.3051 +0.0373 0.25555 0.3235 +0.0183 0.25555 0.3266 +0.0004 0.25555 0.3292 +0.0026 0.25555 0.3488 +0.0026 0.25555 0.3709 +0.0026 0.23545 0.371 +0.0026 0.21685 0.3934 +0.0026 0.19785 0.3937 +0.0026 0.17885 0.3943 +0.0026 0.16085 0.41704 +0.0026 0.14205 0.41785 +-0.0011 0.12435 0.43733 +-0.0011 0.10565 0.4384 +-0.0115 0.08805 0.45485 +-0.0115 0.06945 0.45618 +-0.0269 0.05175 0.46783 +-0.045 0.03355 0.47302 +-0.045 0.01515 0.47478 +-0.045 -0.00325 0.47668 +-0.045 -0.02175 0.4787 +-0.045 -0.04005 0.48088 +-0.045 -0.05845 0.4832 +-0.045 -0.07685 0.48564 +-0.045 -0.09515 0.48824 +-0.045 -0.11345 0.490967 +-0.045 -0.13175 0.493835 +-0.0641 -0.13175 0.493835 +-0.0831 -0.13175 0.493835 +-0.1022 -0.13175 0.493835 +-0.1212 -0.13175 0.493835 +-0.1403 -0.13175 0.493835 +-0.1593 -0.13175 0.493835 +-0.1593 -0.11345 0.490967 +-0.1593 -0.09515 0.48824 +-0.1593 -0.07685 0.48564 +-0.1777 -0.07735 0.48198 +-0.1777 -0.05895 0.47952 +-0.1777 -0.04055 0.47719 +-0.1931 -0.04175 0.46695 +-0.2034 -0.04365 0.45164 +-0.207 -0.04585 0.43356 +-0.207 -0.02965 0.41131 +-0.207 -0.03185 0.3913 +-0.207 -0.03415 0.3712 +-0.207 -0.03635 0.3512 +-0.207 -0.03865 0.3311 +-0.207 -0.04085 0.311 +-0.2079 -0.02315 0.2903 +-0.2106 -0.02515 0.2719 +-0.2152 -0.02705 0.2538 +-0.2215 -0.02895 0.2363 +-0.2295 -0.03075 0.2195 +-0.2391 -0.03245 0.2035 +-0.2503 -0.03405 0.1886 +-0.2628 -0.03545 0.1748 +-0.2767 -0.03685 0.1623 +-0.2917 -0.03795 0.1512 +-0.3078 -0.03905 0.1417 +-0.3247 -0.03985 0.1337 +-0.3423 -0.04055 0.1274 +-0.36046 -0.04105 0.1229 +-0.37897 -0.04125 0.1202 +-0.39766 -0.04145 0.1193 +-0.41019 -0.05955 0.1213 +-0.41019 -0.07975 0.1236 +-0.41019 -0.09995 0.1261 +-0.42272 -0.11465 0.1281 +-0.42273 -0.13355 0.1307 +-0.42278 -0.15215 0.1333 +-0.43502 -0.16415 0.1351 +-0.44704 -0.17823 0.1373 +-0.4603 -0.19506 0.14 +-0.4603 -0.19812 0.1213 +-0.4603 -0.20034 0.1011 +-0.4603 -0.20335 0.0795 +-0.4603 -0.20623 0.0572 +-0.4603 -0.22908 0.0415 +-0.4603 -0.23323 0.0211 +-0.4603 -0.23649 0.0019 +-0.44539 -0.22326 -0.0003 +-0.42772 -0.21684 -0.0014 +-0.43302 -0.20344 -0.0035 +-0.44527 -0.1927 -0.0052 +-0.4603 -0.17919 -0.0072 +-0.4603 -0.15734 0.009 +-0.4603 -0.13575 0.0254 +-0.4603 -0.13255 0.0465 +-0.4603 -0.11415 0.0441 +-0.4603 -0.09385 0.0658 +-0.4603 -0.07385 0.0862 +-0.4603 -0.05355 0.1023 +-0.4603 -0.03365 0.1185 +-0.44777 -0.01615 0.1167 +-0.44777 0.00215 0.115 +-0.44777 0.02045 0.1134 +-0.44777 0.03875 0.1119 +-0.43524 0.03935 0.1118 +-0.43524 0.05815 0.1105 +-0.43524 0.07695 0.1092 +-0.43524 0.09575 0.108 +-0.43524 0.11455 0.107 +-0.43524 0.13345 0.1062 +-0.43521 0.15225 0.1054 +-0.43512 0.17075 0.1048 +-0.43492 0.18875 0.1043 +-0.43441 0.20555 0.1039 +-0.42281 0.19435 0.1041 +-0.4103 0.18345 0.1044 +-0.39766 0.17055 0.1048 +-0.37897 0.17055 0.1057 +-0.36046 0.17065 0.1085 +-0.3423 0.17075 0.113 +-0.3247 0.17095 0.1193 +-0.3078 0.17125 0.1273 +-0.2917 0.17155 0.1369 +-0.2767 0.17185 0.148 +-0.2767 0.19275 0.1475 +-0.2628 0.19305 0.16 +-0.2503 0.19335 0.1739 +-0.2503 0.21405 0.1735 +-0.2503 0.23475 0.1733 +-0.2502 0.25555 0.1733 +-0.2391 0.25555 0.1883 +-0.2141 0.25555 0.1945 +-0.1899 0.25555 0.2048 +-0.1611 0.25555 0.2136 +-0.1301 0.25555 0.2269 +-0.0948 0.25555 0.247 +-0.0539 0.25555 0.2344 +-0.0311 0.25555 0.2083 +-0.0139 0.25555 0.1926 +0.005 0.25555 0.1771 +0.0348 0.25555 0.1944 +0.04 0.25555 0.2124 +0.0453 0.25555 0.2315 +0.0313 0.25555 0.2507 +0.0321 0.25555 0.2699 +0.0143 0.25555 0.2695 +0.0153 0.25555 0.2896 +0.0161 0.25555 0.3081 +-0.0012 0.25555 0.3095 +-0.0178 0.25555 0.3125 +-0.0186 0.25555 0.3296 +-0.0173 0.25555 0.3499 +-0.016 0.25555 0.3708 +-0.015 0.25555 0.3924 +0.0026 0.25555 0.3931 +0.0026 0.23595 0.3932 +0.0026 0.21745 0.41553 +0.0026 0.19865 0.41589 +0.0026 0.17975 0.4164 +-0.0011 0.16185 0.43561 +-0.0011 0.14315 0.43639 +-0.0115 0.12515 0.45261 +-0.0115 0.10665 0.45364 +-0.0269 0.08875 0.46503 +-0.0269 0.07025 0.46637 +-0.045 0.05205 0.47142 +-0.0641 0.03355 0.47302 +-0.0641 0.01515 0.47478 +-0.0641 -0.00325 0.47668 +-0.0641 -0.02175 0.4787 +-0.0641 -0.04005 0.48088 +-0.0641 -0.05845 0.4832 +-0.0641 -0.07685 0.48564 +-0.0641 -0.09515 0.48824 +-0.0641 -0.11345 0.490967 +-0.0831 -0.11345 0.490967 +-0.1022 -0.11345 0.490967 +-0.1212 -0.11345 0.490967 +-0.1403 -0.11345 0.490967 +-0.1403 -0.09515 0.48824 +-0.1403 -0.07685 0.48564 +-0.1403 -0.05845 0.4832 +-0.1593 -0.05845 0.4832 +-0.1593 -0.04005 0.48088 +-0.1593 -0.02175 0.4787 +-0.1777 -0.02215 0.47502 +-0.1931 -0.02325 0.46477 +-0.2034 -0.02505 0.44943 +-0.207 -0.02715 0.43133 +-0.207 -0.01075 0.40924 +-0.207 -0.01285 0.3892 +-0.207 -0.01485 0.3691 +-0.207 -0.01695 0.349 +-0.207 -0.01905 0.3289 +-0.207 -0.02115 0.3089 +-0.2079 -0.00335 0.2883 +-0.2106 -0.00515 0.2698 +-0.2152 -0.00695 0.2518 +-0.2215 -0.00865 0.2342 +-0.2295 -0.01035 0.2174 +-0.2391 -0.01195 0.2014 +-0.2503 -0.01345 0.1865 +-0.2628 -0.01475 0.1727 +-0.2767 -0.01595 0.1602 +-0.2917 -0.01705 0.1491 +-0.3078 -0.01805 0.1395 +-0.3247 -0.01885 0.1315 +-0.3423 -0.01945 0.1253 +-0.36046 -0.01995 0.1208 +-0.37897 -0.02015 0.118 +-0.39766 -0.02025 0.1171 +-0.41019 -0.03935 0.1191 +-0.42272 -0.05675 0.121 +-0.42272 -0.07615 0.1232 +-0.42272 -0.09545 0.1256 +-0.43523 -0.11035 0.1275 +-0.43521 -0.12875 0.13 +-0.43517 -0.14675 0.1325 +-0.4475 -0.16097 0.1347 +-0.4603 -0.17719 0.1371 +-0.4603 -0.18008 0.1187 +-0.4603 -0.18247 0.0996 +-0.4603 -0.1842 0.0782 +-0.4603 -0.18786 0.0543 +-0.4603 -0.19238 0.0336 +-0.4603 -0.21105 0.037 +-0.4603 -0.2143 0.0178 +-0.4603 -0.2174 -0.0013 +-0.446 -0.20921 -0.0026 +-0.43532 -0.2145 -0.0017 +-0.4603 -0.19831 -0.0043 +-0.4603 -0.17636 0.0118 +-0.4603 -0.15465 0.028 +-0.4603 -0.15095 0.0489 +-0.4603 -0.13015 0.0704 +-0.4603 -0.11205 0.068 +-0.4603 -0.09205 0.0884 +-0.4603 -0.08985 0.1065 +-0.4603 -0.07175 0.1044 +-0.4603 -0.06965 0.1224 +-0.4603 -0.05165 0.1204 +-0.44777 -0.03445 0.1185 +-0.43524 -0.01695 0.1168 +-0.43524 0.00185 0.115 +-0.43524 0.02055 0.1134 +-0.42272 0.02095 0.1133 +-0.42272 0.04035 0.1118 +-0.42272 0.05985 0.1103 +-0.42272 0.07925 0.109 +-0.42272 0.09875 0.1079 +-0.42272 0.11825 0.1069 +-0.42272 0.13775 0.106 +-0.42272 0.15715 0.1052 +-0.42272 0.17625 0.1046 +-0.41022 0.16355 0.105 +-0.39766 0.14935 0.1055 +-0.37897 0.14935 0.1064 +-0.36046 0.14945 0.1092 +-0.3423 0.14965 0.1137 +-0.3247 0.14985 0.12 +-0.3078 0.15015 0.128 +-0.2917 0.15055 0.1376 +-0.2767 0.15095 0.1488 +-0.2628 0.15145 0.1613 +-0.2628 0.17225 0.1606 +-0.2503 0.17265 0.1745 +-0.2391 0.17315 0.1895 +-0.2391 0.19375 0.1889 +-0.2391 0.21435 0.1885 +-0.2391 0.23495 0.1883 +-0.2295 0.23505 0.2044 +-0.2295 0.25555 0.2044 +-0.2052 0.25555 0.2129 +-0.1815 0.25555 0.225 +-0.1524 0.25555 0.2367 +-0.1212 0.25555 0.2556 +-0.0901 0.25555 0.2776 +-0.0578 0.25555 0.2731 +-0.0269 0.25555 0.245 +-0.0149 0.25555 0.227 +-0.0012 0.25555 0.2154 +0.0158 0.25555 0.2044 +0.0218 0.25555 0.22 +0.0272 0.25555 0.2342 +0.0109 0.25555 0.2405 +0.0131 0.25555 0.253 +0.001 0.25555 0.2533 +-0.0001 0.25555 0.2704 +-0.0018 0.25555 0.2898 +-0.0167 0.25555 0.2928 +-0.0351 0.25555 0.2975 +-0.0366 0.25555 0.3162 +-0.0376 0.25555 0.332 +-0.038 0.25555 0.3512 +-0.0365 0.25555 0.3722 +-0.0352 0.25555 0.3918 +-0.0335 0.25555 0.41113 +-0.0149 0.25555 0.41307 +0.0026 0.25555 0.41525 +0.0026 0.23635 0.41533 +-0.0011 0.21805 0.43413 +-0.0011 0.19925 0.43446 +-0.0011 0.18055 0.43497 +-0.0115 0.16245 0.4509 +-0.0115 0.14375 0.45169 +-0.0269 0.12575 0.46278 +-0.0269 0.10725 0.46384 +-0.045 0.08895 0.4686 +-0.045 0.07045 0.46992 +-0.0641 0.05205 0.47142 +-0.0831 0.03355 0.47302 +-0.0831 0.01515 0.47478 +-0.0831 -0.00325 0.47668 +-0.0831 -0.02175 0.4787 +-0.0831 -0.04005 0.48088 +-0.0831 -0.05845 0.4832 +-0.0831 -0.07685 0.48564 +-0.0831 -0.09515 0.48824 +-0.1022 -0.09515 0.48824 +-0.1212 -0.09515 0.48824 +-0.1212 -0.07685 0.48564 +-0.1212 -0.05845 0.4832 +-0.1212 -0.04005 0.48088 +-0.1403 -0.04005 0.48088 +-0.1403 -0.02175 0.4787 +-0.1403 -0.00325 0.47668 +-0.1593 -0.00325 0.47668 +-0.1777 -0.00365 0.47298 +-0.1931 -0.00475 0.46272 +-0.2034 -0.00645 0.44739 +-0.207 -0.00835 0.42927 +-0.207 0.00825 0.40727 +-0.207 0.00635 0.3872 +-0.207 0.00435 0.3671 +-0.207 0.00245 0.347 +-0.207 0.00045 0.3269 +-0.207 -0.00145 0.3069 +-0.2079 0.01655 0.2864 +-0.2106 0.01485 0.2679 +-0.2152 0.01315 0.2499 +-0.2215 0.01155 0.2323 +-0.2295 0.01005 0.2155 +-0.2391 0.00855 0.1995 +-0.2503 0.00725 0.1845 +-0.2628 0.00595 0.1707 +-0.2767 0.00485 0.1582 +-0.2917 0.00385 0.1471 +-0.3078 0.00295 0.1375 +-0.3247 0.00225 0.1295 +-0.3423 0.00165 0.1233 +-0.36046 0.00125 0.1187 +-0.37897 0.00095 0.116 +-0.39766 0.00085 0.1151 +-0.41019 -0.01905 0.117 +-0.42272 -0.03735 0.1188 +-0.43524 -0.05445 0.1207 +-0.43524 -0.07315 0.1228 +-0.43524 -0.09175 0.1251 +-0.44776 -0.10735 0.1271 +-0.44774 -0.12545 0.1295 +-0.44768 -0.14335 0.1321 +-0.4603 -0.15931 0.1344 +-0.4603 -0.16204 0.1162 +-0.4603 -0.16456 0.0976 +-0.4603 -0.16584 0.0758 +-0.4603 -0.16944 0.0513 +-0.4603 -0.17352 0.0308 +-0.4603 -0.19534 0.0147 +-0.4603 -0.14805 0.0729 +-0.4603 -0.12835 0.093 +-0.4603 -0.11025 0.0907 +-0.4603 -0.10785 0.1088 +-0.4603 -0.10555 0.1269 +-0.4603 -0.08755 0.1246 +-0.44777 -0.07095 0.1226 +-0.44777 -0.05275 0.1205 +-0.43524 -0.03565 0.1187 +-0.42272 -0.01795 0.1169 +-0.42272 0.00145 0.115 +-0.41019 0.00115 0.1151 +-0.41019 0.02145 0.1133 +-0.41019 0.04175 0.1117 +-0.41019 0.06205 0.1102 +-0.41019 0.08235 0.1089 +-0.41019 0.10265 0.1077 +-0.41019 0.12295 0.1066 +-0.41019 0.14325 0.1057 +-0.39766 0.12805 0.1064 +-0.37897 0.12815 0.1073 +-0.36046 0.12825 0.1101 +-0.3423 0.12845 0.1146 +-0.3247 0.12875 0.1209 +-0.3078 0.12905 0.1289 +-0.2917 0.12955 0.1385 +-0.2767 0.13005 0.1496 +-0.2628 0.13065 0.1622 +-0.2503 0.13125 0.176 +-0.2503 0.15195 0.1752 +-0.2391 0.15255 0.1902 +-0.2295 0.15315 0.2062 +-0.2295 0.17355 0.2055 +-0.2295 0.19405 0.205 +-0.2295 0.21455 0.2046 +-0.2215 0.21485 0.2215 +-0.2215 0.23515 0.2213 +-0.2215 0.25555 0.2213 +-0.1982 0.25555 0.2322 +-0.1742 0.25555 0.2459 +-0.145 0.25555 0.263 +-0.1174 0.25555 0.2819 +-0.1167 0.25555 0.309 +-0.0806 0.25555 0.312 +-0.057 0.25555 0.3035 +-0.0558 0.25555 0.3202 +-0.056 0.25555 0.3337 +-0.055 0.25555 0.354 +-0.0519 0.25555 0.3743 +-0.0501 0.25555 0.3916 +-0.0487 0.25555 0.40956 +-0.0472 0.25555 0.4261 +-0.0327 0.25555 0.42612 +-0.0183 0.25555 0.42735 +-0.0011 0.25555 0.43384 +-0.0011 0.23675 0.4339 +-0.0115 0.21825 0.44943 +-0.0115 0.19965 0.44978 +-0.0115 0.18105 0.45027 +-0.0269 0.16275 0.46109 +-0.0269 0.14425 0.46187 +-0.045 0.12595 0.46637 +-0.045 0.10745 0.46741 +-0.0641 0.08895 0.4686 +-0.0641 0.07045 0.46992 +-0.0831 0.05205 0.47142 +-0.1022 0.03355 0.47302 +-0.1022 0.01515 0.47478 +-0.1022 -0.00325 0.47668 +-0.1022 -0.02175 0.4787 +-0.1022 -0.04005 0.48088 +-0.1022 -0.05845 0.4832 +-0.1022 -0.07685 0.48564 +-0.1212 -0.02175 0.4787 +-0.1212 -0.00325 0.47668 +-0.1212 0.01515 0.47478 +-0.1403 0.01515 0.47478 +-0.1593 0.01515 0.47478 +-0.1777 0.01475 0.4711 +-0.1931 0.01375 0.46081 +-0.2034 0.01225 0.44546 +-0.207 0.01045 0.42734 +-0.207 0.02725 0.40549 +-0.207 0.02545 0.3854 +-0.207 0.02365 0.3653 +-0.207 0.02185 0.3452 +-0.207 0.02005 0.3251 +-0.207 0.01825 0.305 +-0.2079 0.03645 0.2846 +-0.2106 0.03485 0.2662 +-0.2152 0.03335 0.2481 +-0.2215 0.03185 0.2305 +-0.2295 0.03045 0.2137 +-0.2391 0.02915 0.1977 +-0.2503 0.02785 0.1827 +-0.2628 0.02675 0.1689 +-0.2767 0.02565 0.1564 +-0.2917 0.02475 0.1453 +-0.3078 0.02395 0.1357 +-0.3247 0.02325 0.1277 +-0.3423 0.02275 0.1214 +-0.36046 0.02235 0.1169 +-0.37897 0.02215 0.1141 +-0.39766 0.02205 0.1132 +-0.39766 0.04325 0.1116 +-0.39766 0.06445 0.11 +-0.39766 0.08565 0.1086 +-0.39766 0.10685 0.1074 +-0.37897 0.10685 0.1083 +-0.36046 0.10705 0.1111 +-0.3423 0.10725 0.1156 +-0.3247 0.10765 0.1219 +-0.3078 0.10805 0.1299 +-0.2917 0.10855 0.1395 +-0.2767 0.10915 0.1507 +-0.2628 0.10985 0.1632 +-0.2503 0.11055 0.1771 +-0.2391 0.11135 0.1921 +-0.2391 0.13195 0.1911 +-0.2295 0.13265 0.2071 +-0.2215 0.13345 0.224 +-0.2215 0.15375 0.2231 +-0.2215 0.17405 0.2224 +-0.2215 0.19445 0.2219 +-0.2152 0.19485 0.2395 +-0.2152 0.21505 0.2391 +-0.2152 0.23525 0.2389 +-0.2151 0.25555 0.239 +-0.1929 0.25555 0.2519 +-0.1684 0.25555 0.2689 +-0.1412 0.25555 0.2865 +-0.1413 0.25555 0.3106 +-0.1201 0.25555 0.3336 +-0.0895 0.25555 0.335 +-0.0676 0.25555 0.3232 +-0.07 0.25555 0.3355 +-0.0705 0.25555 0.357 +-0.0683 0.25555 0.3759 +-0.0663 0.25555 0.3924 +-0.0649 0.25555 0.40825 +-0.0645 0.25555 0.42612 +-0.0641 0.25555 0.44463 +-0.0465 0.25555 0.4443 +-0.0327 0.25555 0.44203 +-0.0215 0.25555 0.43901 +-0.0115 0.25555 0.44917 +-0.0115 0.23685 0.44922 +-0.0269 0.21845 0.45961 +-0.0269 0.19985 0.45996 +-0.0269 0.18135 0.46045 +-0.045 0.16295 0.46468 +-0.045 0.14445 0.46545 +-0.0641 0.12595 0.46637 +-0.0641 0.10745 0.46741 +-0.0831 0.08895 0.4686 +-0.0831 0.07045 0.46992 +-0.1022 0.05205 0.47142 +-0.1212 0.03355 0.47302 +-0.1403 0.03355 0.47302 +-0.1593 0.03355 0.47302 +-0.1777 0.03325 0.46934 +-0.1931 0.03225 0.45906 +-0.2034 0.03085 0.44369 +-0.207 0.02925 0.42557 +-0.207 0.04625 0.40381 +-0.207 0.04455 0.3837 +-0.207 0.04295 0.3636 +-0.207 0.04125 0.3435 +-0.207 0.03965 0.3234 +-0.207 0.03795 0.3032 +-0.2079 0.05625 0.283 +-0.2106 0.05485 0.2646 +-0.2152 0.05345 0.2465 +-0.2215 0.05215 0.2289 +-0.2295 0.05085 0.212 +-0.2391 0.04965 0.196 +-0.2503 0.04855 0.1811 +-0.2628 0.04745 0.1672 +-0.2767 0.04655 0.1547 +-0.2917 0.04565 0.1436 +-0.3078 0.04495 0.134 +-0.3247 0.04435 0.126 +-0.3423 0.04385 0.1197 +-0.36046 0.04355 0.1152 +-0.37897 0.04325 0.1125 +-0.37897 0.06445 0.1109 +-0.37897 0.08565 0.1096 +-0.36046 0.08585 0.1123 +-0.3423 0.08615 0.1168 +-0.3247 0.08655 0.1231 +-0.3078 0.08705 0.1311 +-0.2917 0.08755 0.1407 +-0.2767 0.08825 0.1518 +-0.2628 0.08905 0.1644 +-0.2503 0.08985 0.1782 +-0.2391 0.09075 0.1932 +-0.2295 0.09175 0.2093 +-0.2295 0.11215 0.2081 +-0.2215 0.11305 0.225 +-0.2152 0.11405 0.2426 +-0.2152 0.13425 0.2416 +-0.2152 0.15445 0.2407 +-0.2152 0.17465 0.24 +-0.2106 0.17515 0.2582 +-0.2106 0.19525 0.2577 +-0.2106 0.21535 0.2573 +-0.2106 0.23545 0.257 +-0.2106 0.25555 0.2571 +-0.1883 0.25555 0.2737 +-0.1666 0.25555 0.2906 +-0.1655 0.25555 0.3141 +-0.1424 0.25555 0.3334 +-0.1234 0.25555 0.3583 +-0.0987 0.25555 0.365 +-0.0898 0.25555 0.3823 +-0.0852 0.25555 0.3959 +-0.0834 0.25555 0.40962 +-0.0837 0.25555 0.42702 +-0.0831 0.25555 0.44517 +-0.0641 0.25555 0.46292 +-0.045 0.25555 0.46292 +-0.0269 0.25555 0.45933 +-0.0269 0.23695 0.45941 +-0.045 0.21845 0.4632 +-0.045 0.19995 0.46355 +-0.045 0.18145 0.46403 +-0.0641 0.16295 0.46468 +-0.0641 0.14445 0.46545 +-0.0831 0.12595 0.46637 +-0.0831 0.10745 0.46741 +-0.1022 0.08895 0.4686 +-0.1022 0.07045 0.46992 +-0.1212 0.05205 0.47142 +-0.1403 0.05205 0.47142 +-0.1593 0.05205 0.47142 +-0.1777 0.05175 0.46771 +-0.1931 0.05085 0.45743 +-0.2034 0.04955 0.44205 +-0.207 0.04805 0.4239 +-0.207 0.06525 0.4023 +-0.207 0.06375 0.3822 +-0.207 0.06225 0.362 +-0.207 0.06075 0.3419 +-0.207 0.05925 0.3218 +-0.207 0.05775 0.3017 +-0.2079 0.07615 0.2816 +-0.2106 0.07485 0.2631 +-0.2152 0.07365 0.245 +-0.2215 0.07245 0.2274 +-0.2295 0.07125 0.2106 +-0.2391 0.07025 0.1946 +-0.2503 0.06915 0.1796 +-0.2628 0.06825 0.1657 +-0.2767 0.06735 0.1532 +-0.2917 0.06665 0.1421 +-0.3078 0.06595 0.1325 +-0.3247 0.06545 0.1245 +-0.3423 0.06495 0.1182 +-0.36046 0.06465 0.1137 +-0.2215 0.09275 0.2261 +-0.2152 0.09385 0.2437 +-0.2106 0.09495 0.2619 +-0.2106 0.11505 0.2607 +-0.2106 0.13505 0.2597 +-0.2106 0.15515 0.2589 +-0.2079 0.15585 0.2774 +-0.2079 0.17575 0.2767 +-0.2079 0.19565 0.2762 +-0.2079 0.21565 0.2758 +-0.2079 0.23555 0.2756 +-0.2079 0.25555 0.2756 +-0.1874 0.25555 0.2937 +-0.187 0.25555 0.3143 +-0.1658 0.25555 0.3344 +-0.1438 0.25555 0.355 +-0.1449 0.25555 0.375 +-0.1289 0.25555 0.3784 +-0.1137 0.25555 0.384 +-0.1018 0.25555 0.39 +-0.1013 0.25555 0.40031 +-0.1014 0.25555 0.41275 +-0.1019 0.25555 0.42763 +-0.1012 0.25555 0.44583 +-0.0831 0.25555 0.46292 +-0.0831 0.23695 0.463 +-0.0641 0.23695 0.463 +-0.045 0.23695 0.463 +-0.0641 0.21845 0.4632 +-0.0641 0.19995 0.46355 +-0.0641 0.18145 0.46403 +-0.0831 0.16295 0.46468 +-0.0831 0.14445 0.46545 +-0.1022 0.12595 0.46637 +-0.1022 0.10745 0.46741 +-0.1212 0.08895 0.4686 +-0.1212 0.07045 0.46992 +-0.1403 0.07045 0.46992 +-0.1593 0.07045 0.46992 +-0.1777 0.07015 0.46625 +-0.1931 0.06945 0.45595 +-0.2034 0.06825 0.44057 +-0.207 0.06685 0.42241 +-0.207 0.08425 0.40092 +-0.207 0.08285 0.3808 +-0.207 0.08155 0.3607 +-0.207 0.08015 0.3405 +-0.207 0.07885 0.3204 +-0.207 0.07745 0.3002 +-0.2079 0.09605 0.2803 +-0.2079 0.11595 0.2792 +-0.2079 0.13585 0.2782 +-0.207 0.13675 0.2969 +-0.207 0.15655 0.296 +-0.207 0.17635 0.2954 +-0.207 0.19615 0.2948 +-0.207 0.21595 0.2945 +-0.207 0.23575 0.2942 +-0.207 0.25555 0.2942 +-0.207 0.25555 0.3143 +-0.207 0.25555 0.3345 +-0.1869 0.25555 0.3345 +-0.1662 0.25555 0.3547 +-0.1664 0.25555 0.3749 +-0.148 0.25555 0.3958 +-0.1328 0.25555 0.3975 +-0.1164 0.25555 0.3987 +-0.1179 0.25555 0.4137 +-0.119 0.25555 0.42927 +-0.1204 0.25555 0.44653 +-0.1022 0.25555 0.46292 +-0.1022 0.23695 0.463 +-0.1022 0.21845 0.4632 +-0.0831 0.21845 0.4632 +-0.0831 0.19995 0.46355 +-0.0831 0.18145 0.46403 +-0.1022 0.16295 0.46468 +-0.1022 0.14445 0.46545 +-0.1212 0.12595 0.46637 +-0.1212 0.10745 0.46741 +-0.1403 0.08895 0.4686 +-0.1593 0.08895 0.4686 +-0.1777 0.08875 0.46489 +-0.1931 0.08795 0.4546 +-0.2034 0.08695 0.43921 +-0.207 0.08575 0.42103 +-0.207 0.10325 0.3997 +-0.207 0.10205 0.3795 +-0.207 0.10085 0.3594 +-0.207 0.09965 0.3393 +-0.207 0.09845 0.3191 +-0.207 0.09725 0.299 +-0.207 0.11695 0.2978 +-0.207 0.13765 0.317 +-0.207 0.15725 0.3162 +-0.207 0.17695 0.3155 +-0.207 0.19655 0.315 +-0.207 0.21625 0.3146 +-0.207 0.23585 0.3144 +-0.207 0.23605 0.3346 +-0.207 0.23615 0.3548 +-0.207 0.25555 0.3547 +-0.1869 0.25555 0.3547 +-0.1868 0.25555 0.3749 +-0.1665 0.25555 0.395 +-0.1502 0.25555 0.41331 +-0.1348 0.25555 0.41456 +-0.1372 0.25555 0.42998 +-0.139 0.25555 0.44658 +-0.1212 0.25555 0.46292 +-0.1212 0.23695 0.463 +-0.1212 0.21845 0.4632 +-0.1212 0.19995 0.46355 +-0.1022 0.19995 0.46355 +-0.1022 0.18145 0.46403 +-0.1212 0.16295 0.46468 +-0.1212 0.14445 0.46545 +-0.1403 0.12595 0.46637 +-0.1403 0.10745 0.46741 +-0.1593 0.10745 0.46741 +-0.1777 0.10725 0.46371 +-0.1931 0.10655 0.4534 +-0.2034 0.10565 0.43802 +-0.207 0.10455 0.41981 +-0.207 0.12225 0.3986 +-0.207 0.12115 0.3784 +-0.207 0.12015 0.3583 +-0.207 0.11915 0.3381 +-0.207 0.11805 0.318 +-0.207 0.13855 0.3372 +-0.207 0.15805 0.3364 +-0.207 0.17755 0.3357 +-0.207 0.19705 0.3352 +-0.207 0.21655 0.3348 +-0.207 0.21685 0.355 +-0.207 0.23635 0.375 +-0.207 0.25555 0.3749 +-0.207 0.25555 0.3951 +-0.1868 0.25555 0.3951 +-0.1673 0.25555 0.41261 +-0.1516 0.25555 0.42927 +-0.1557 0.25555 0.44553 +-0.1403 0.25555 0.46292 +-0.1403 0.23695 0.463 +-0.1403 0.21845 0.4632 +-0.1403 0.19995 0.46355 +-0.1403 0.18145 0.46403 +-0.1212 0.18145 0.46403 +-0.1403 0.16295 0.46468 +-0.1403 0.14445 0.46545 +-0.1593 0.12595 0.46637 +-0.1777 0.12575 0.46265 +-0.1931 0.12515 0.45235 +-0.2034 0.12435 0.43695 +-0.207 0.12335 0.41875 +-0.207 0.14125 0.3977 +-0.207 0.14035 0.3775 +-0.207 0.13945 0.3573 +-0.207 0.15885 0.3565 +-0.207 0.17815 0.3559 +-0.207 0.19745 0.3554 +-0.207 0.21715 0.3752 +-0.207 0.23645 0.3951 +-0.207 0.23665 0.41533 +-0.207 0.25555 0.41525 +-0.1868 0.25555 0.41327 +-0.1847 0.25555 0.4272 +-0.1675 0.25555 0.42856 +-0.1699 0.25555 0.44197 +-0.1593 0.25555 0.46292 +-0.1593 0.23695 0.463 +-0.1593 0.21845 0.4632 +-0.1593 0.19995 0.46355 +-0.1593 0.18145 0.46403 +-0.1593 0.16295 0.46468 +-0.1593 0.14445 0.46545 +-0.1777 0.14425 0.46173 +-0.1931 0.14375 0.45142 +-0.2034 0.14305 0.43603 +-0.207 0.14225 0.41781 +-0.207 0.16035 0.3969 +-0.207 0.15955 0.3767 +-0.207 0.17875 0.376 +-0.207 0.19795 0.3755 +-0.207 0.21745 0.3954 +-0.207 0.21775 0.41553 +-0.2034 0.23675 0.43355 +-0.2034 0.25555 0.43346 +-0.1818 0.25555 0.43826 +-0.1777 0.25555 0.45921 +-0.1778 0.23695 0.45927 +-0.1778 0.21845 0.45949 +-0.1778 0.19985 0.45984 +-0.1777 0.18135 0.46034 +-0.1777 0.16275 0.46097 +-0.1931 0.16235 0.45065 +-0.2034 0.16185 0.43524 +-0.207 0.16115 0.41704 +-0.207 0.17935 0.3962 +-0.207 0.19835 0.3957 +-0.207 0.19885 0.41589 +-0.2034 0.21805 0.43376 +-0.1931 0.23685 0.44896 +-0.1931 0.25555 0.4489 +-0.1931 0.21825 0.44917 +-0.1931 0.19965 0.44951 +-0.1931 0.18105 0.45001 +-0.2034 0.18055 0.4346 +-0.207 0.17995 0.4164 +-0.2034 0.19925 0.4341 +-0.44777 -0.08915 0.1248 +-0.4603 -0.12345 0.1293 +-0.4603 -0.14145 0.1318 +-0.4603 -0.14405 0.1137 +-0.4603 -0.14655 0.0953 +-0.4603 -0.12595 0.1112 +-0.0327 0.25555 0.2716 +-0.015 0.25555 0.271 +-0.0115 0.25555 0.2503 +-0.0046 0.25555 0.2376 +0.0061 0.25555 0.2295 +0.002 0.25555 0.2437 +0.0806 0.25555 -0.0512 +0.0882 0.25555 -0.0649 +0.0946 0.25555 -0.0743 +0.102 0.25555 -0.0816 +0.0997 0.25555 -0.0689 +0.322 0.25555 -0.376 +0.3222 0.25555 -0.394 +0.3378 0.25555 -0.3977 +0.3384 0.25555 -0.4173 +0.3382 0.25555 -0.4344 +0.3365 0.25555 -0.4515 +0.3333 0.25555 -0.4689 +0.3297 0.25555 -0.4871 +0.3482 0.25555 -0.4905 +0.3633 0.24385 -0.4929 +0.3813 0.24405 -0.4953 +0.3988 0.24425 -0.4972 +0.4099 0.23445 -0.498 +0.4207 0.23565 -0.4988 +0.4289 0.24355 -0.4992 +0.4227 0.25555 -0.4989 +0.404 0.25555 -0.4976 +0.4055 0.25555 -0.4792 +0.4058 0.25555 -0.4615 +0.3868 0.25555 -0.4597 +0.3866 0.25555 -0.4415 +0.3697 0.25555 -0.44 +0.3699 0.25555 -0.4235 +0.3542 0.25555 -0.4207 +0.3539 0.25555 -0.437 +0.3538 0.25555 -0.4548 +0.3513 0.25555 -0.4722 +0.3693 0.25555 -0.4751 +0.3667 0.25555 -0.4934 +0.3854 0.25555 -0.4958 +0.3874 0.25555 -0.4774 +0.3694 0.25555 -0.4574 +0.4151 0.24435 -0.4985 +0.4603 0.12335 0.1394 +3 0 1 2 +3 0 2 3 +3 0 3 4 +3 0 4 5 +3 0 5 1 +3 1 5 6 +3 1 6 7 +3 1 7 8 +3 1 8 9 +3 1 9 2 +3 2 9 10 +3 2 10 11 +3 2 11 3 +3 3 11 12 +3 3 12 13 +3 3 13 4 +3 4 13 14 +3 4 14 15 +3 4 15 5 +3 5 15 16 +3 5 16 6 +3 6 16 17 +3 6 17 18 +3 6 18 7 +3 7 18 19 +3 7 19 20 +3 7 20 8 +3 8 20 21 +3 8 21 22 +3 8 22 9 +3 9 22 23 +3 9 23 10 +3 10 23 24 +3 10 24 11 +3 11 24 25 +3 11 25 12 +3 12 25 26 +3 12 26 27 +3 12 27 13 +3 13 27 28 +3 13 28 14 +3 14 28 29 +3 14 29 30 +3 14 30 15 +3 15 30 31 +3 15 31 16 +3 16 31 32 +3 16 32 17 +3 17 32 33 +3 17 33 18 +3 18 33 34 +3 18 34 35 +3 18 35 19 +3 19 35 36 +3 19 36 37 +3 19 37 20 +3 20 37 38 +3 20 38 21 +3 21 38 39 +3 21 39 40 +3 21 40 22 +3 22 40 41 +3 22 41 23 +3 23 41 42 +3 23 42 24 +3 24 42 43 +3 24 43 44 +3 24 44 25 +3 25 44 45 +3 25 45 26 +3 26 45 46 +3 26 46 47 +3 26 47 27 +3 27 47 48 +3 27 48 28 +3 28 48 49 +3 28 49 29 +3 29 49 50 +3 29 50 51 +3 29 51 30 +3 30 51 52 +3 30 52 31 +3 31 52 53 +3 31 53 32 +3 32 53 54 +3 32 54 33 +3 33 54 55 +3 33 55 34 +3 34 55 56 +3 34 56 57 +3 34 57 35 +3 35 57 58 +3 35 58 36 +3 36 58 59 +3 36 59 60 +3 36 60 37 +3 37 60 61 +3 37 61 38 +3 38 61 62 +3 38 62 39 +3 39 62 63 +3 39 63 64 +3 39 64 40 +3 40 64 65 +3 40 65 41 +3 41 65 66 +3 41 66 67 +3 41 67 42 +3 42 67 68 +3 42 68 69 +3 42 69 43 +3 43 69 70 +3 43 70 71 +3 43 71 72 +3 43 72 44 +3 44 72 73 +3 44 73 45 +3 45 73 74 +3 45 74 75 +3 45 75 46 +3 46 75 76 +3 46 76 77 +3 46 77 47 +3 47 77 78 +3 47 78 48 +3 48 78 79 +3 48 79 49 +3 49 79 80 +3 49 80 50 +3 50 80 81 +3 50 81 82 +3 50 82 51 +3 51 82 83 +3 51 83 52 +3 52 83 84 +3 52 84 53 +3 53 84 85 +3 53 85 54 +3 54 85 86 +3 54 86 55 +3 55 86 87 +3 55 87 56 +3 56 87 88 +3 56 88 89 +3 56 89 57 +3 57 89 90 +3 57 90 58 +3 58 90 91 +3 58 91 59 +3 59 91 92 +3 59 92 93 +3 59 93 60 +3 60 93 94 +3 60 94 61 +3 61 94 95 +3 61 95 62 +3 62 95 96 +3 62 96 63 +3 63 96 97 +3 63 97 98 +3 63 98 64 +3 64 98 99 +3 64 99 65 +3 65 99 100 +3 65 100 66 +3 66 100 101 +3 66 101 102 +3 66 102 67 +3 67 102 68 +3 68 102 103 +3 68 103 104 +3 68 104 69 +3 69 104 105 +3 69 105 70 +3 70 105 106 +3 70 106 107 +3 70 107 71 +3 71 107 108 +3 71 108 109 +3 71 109 110 +3 71 110 72 +3 72 110 74 +3 74 110 111 +3 74 111 75 +3 75 111 112 +3 75 112 76 +3 76 112 113 +3 76 113 114 +3 76 114 77 +3 77 114 115 +3 77 115 78 +3 78 115 116 +3 78 116 79 +3 79 116 117 +3 79 117 80 +3 80 117 118 +3 80 118 119 +3 80 119 81 +3 81 119 120 +3 81 120 82 +3 82 120 121 +3 82 121 83 +3 83 121 122 +3 83 122 84 +3 84 122 123 +3 84 123 85 +3 85 123 124 +3 85 124 86 +3 86 124 125 +3 86 125 87 +3 87 125 126 +3 87 126 127 +3 87 127 88 +3 88 127 128 +3 88 128 89 +3 89 128 129 +3 89 129 90 +3 90 129 130 +3 90 130 91 +3 91 130 131 +3 91 131 92 +3 92 131 132 +3 92 132 133 +3 92 133 93 +3 93 133 134 +3 93 134 94 +3 94 134 135 +3 94 135 95 +3 95 135 136 +3 95 136 96 +3 96 136 137 +3 96 137 97 +3 97 137 138 +3 97 138 139 +3 97 139 98 +3 98 139 140 +3 98 140 99 +3 99 140 100 +3 100 140 141 +3 100 141 101 +3 101 141 142 +3 101 142 143 +3 101 143 102 +3 102 143 103 +3 103 143 144 +3 103 144 145 +3 103 145 104 +3 104 145 146 +3 104 146 105 +3 105 146 147 +3 105 147 106 +3 106 147 148 +3 106 148 149 +3 106 149 107 +3 107 149 108 +3 108 149 150 +3 108 150 151 +3 108 151 109 +3 109 151 152 +3 109 152 153 +3 109 153 110 +3 110 153 154 +3 110 154 111 +3 111 154 155 +3 111 155 112 +3 112 155 156 +3 112 156 113 +3 113 156 157 +3 113 157 158 +3 113 158 159 +3 113 159 114 +3 114 159 115 +3 115 159 116 +3 116 159 160 +3 116 160 117 +3 117 160 161 +3 117 161 118 +3 118 161 162 +3 118 162 163 +3 118 163 164 +3 118 164 119 +3 119 164 165 +3 119 165 120 +3 120 165 166 +3 120 166 121 +3 121 166 167 +3 121 167 122 +3 122 167 168 +3 122 168 123 +3 123 168 169 +3 123 169 124 +3 124 169 170 +3 124 170 125 +3 125 170 171 +3 125 171 126 +3 126 171 172 +3 126 172 173 +3 126 173 127 +3 127 173 174 +3 127 174 128 +3 128 174 175 +3 128 175 129 +3 129 175 176 +3 129 176 130 +3 130 176 177 +3 130 177 131 +3 131 177 178 +3 131 178 132 +3 132 178 179 +3 132 179 180 +3 132 180 133 +3 133 180 181 +3 133 181 134 +3 134 181 182 +3 134 182 135 +3 135 182 183 +3 135 183 136 +3 136 183 184 +3 136 184 137 +3 137 184 185 +3 137 185 138 +3 138 185 186 +3 138 186 187 +3 138 187 139 +3 139 187 188 +3 139 188 140 +3 140 188 141 +3 141 188 189 +3 141 189 142 +3 142 189 190 +3 142 190 191 +3 142 191 143 +3 143 191 144 +3 144 191 192 +3 144 192 193 +3 144 193 145 +3 145 193 194 +3 145 194 146 +3 146 194 195 +3 146 195 147 +3 147 195 196 +3 147 196 148 +3 148 196 197 +3 148 197 198 +3 148 198 149 +3 149 198 150 +3 150 198 199 +3 150 199 200 +3 150 200 151 +3 151 200 201 +3 151 201 152 +3 152 201 202 +3 152 202 203 +3 152 203 204 +3 152 204 153 +3 153 204 154 +3 154 204 155 +3 155 204 205 +3 155 205 156 +3 156 205 206 +3 156 206 207 +3 156 207 157 +3 157 207 208 +3 157 208 158 +3 158 208 209 +3 158 209 210 +3 158 210 159 +3 159 210 160 +3 160 210 211 +3 160 211 161 +3 161 211 212 +3 161 212 162 +3 162 212 213 +3 162 213 214 +3 162 214 163 +3 163 214 215 +3 163 215 164 +3 164 215 216 +3 164 216 165 +3 165 216 217 +3 165 217 218 +3 165 218 166 +3 166 218 219 +3 166 219 167 +3 167 219 220 +3 167 220 168 +3 168 220 221 +3 168 221 169 +3 169 221 222 +3 169 222 170 +3 170 222 223 +3 170 223 171 +3 171 223 224 +3 171 224 172 +3 172 224 225 +3 172 225 173 +3 173 225 226 +3 173 226 227 +3 173 227 174 +3 174 227 228 +3 174 228 175 +3 175 228 229 +3 175 229 176 +3 176 229 230 +3 176 230 177 +3 177 230 231 +3 177 231 178 +3 178 231 232 +3 178 232 179 +3 179 232 233 +3 179 233 234 +3 179 234 180 +3 180 234 235 +3 180 235 181 +3 181 235 236 +3 181 236 182 +3 182 236 237 +3 182 237 183 +3 183 237 238 +3 183 238 184 +3 184 238 239 +3 184 239 185 +3 185 239 240 +3 185 240 186 +3 186 240 241 +3 186 241 242 +3 186 242 187 +3 187 242 243 +3 187 243 188 +3 188 243 189 +3 189 243 244 +3 189 244 190 +3 190 244 245 +3 190 245 246 +3 190 246 191 +3 191 246 192 +3 192 246 247 +3 192 247 248 +3 192 248 193 +3 193 248 249 +3 193 249 194 +3 194 249 250 +3 194 250 195 +3 195 250 251 +3 195 251 252 +3 195 252 196 +3 196 252 197 +3 197 252 253 +3 197 253 254 +3 197 254 198 +3 198 254 199 +3 199 254 255 +3 199 255 256 +3 199 256 200 +3 200 256 257 +3 200 257 201 +3 201 257 258 +3 201 258 259 +3 201 259 202 +3 202 259 260 +3 202 260 203 +3 203 260 261 +3 203 261 262 +3 203 262 205 +3 205 262 206 +3 206 262 263 +3 206 263 264 +3 206 264 207 +3 207 264 265 +3 207 265 208 +3 208 265 266 +3 208 266 209 +3 209 266 267 +3 209 267 210 +3 210 267 211 +3 211 267 268 +3 211 268 212 +3 212 268 269 +3 212 269 213 +3 213 269 270 +3 213 270 271 +3 213 271 214 +3 214 271 272 +3 214 272 215 +3 215 272 273 +3 215 273 274 +3 215 274 216 +3 216 274 217 +3 217 274 275 +3 217 275 276 +3 217 276 277 +3 217 277 218 +3 218 277 219 +3 219 277 278 +3 219 278 220 +3 220 278 279 +3 220 279 221 +3 221 279 280 +3 221 280 222 +3 222 280 281 +3 222 281 223 +3 223 281 282 +3 223 282 224 +3 224 282 283 +3 224 283 225 +3 225 283 284 +3 225 284 226 +3 226 284 285 +3 226 285 286 +3 226 286 227 +3 227 286 287 +3 227 287 228 +3 228 287 288 +3 228 288 229 +3 229 288 289 +3 229 289 230 +3 230 289 290 +3 230 290 231 +3 231 290 291 +3 231 291 232 +3 232 291 292 +3 232 292 233 +3 233 292 293 +3 233 293 294 +3 233 294 234 +3 234 294 295 +3 234 295 235 +3 235 295 296 +3 235 296 236 +3 236 296 297 +3 236 297 237 +3 237 297 298 +3 237 298 238 +3 238 298 299 +3 238 299 239 +3 239 299 300 +3 239 300 240 +3 240 300 301 +3 240 301 241 +3 241 301 302 +3 241 302 303 +3 241 303 242 +3 242 303 304 +3 242 304 243 +3 243 304 244 +3 244 304 305 +3 244 305 245 +3 245 305 306 +3 245 306 307 +3 245 307 246 +3 246 307 247 +3 247 307 308 +3 247 308 309 +3 247 309 248 +3 248 309 310 +3 248 310 249 +3 249 310 311 +3 249 311 250 +3 250 311 312 +3 250 312 251 +3 251 312 313 +3 251 313 252 +3 252 313 314 +3 252 314 253 +3 253 314 315 +3 253 315 316 +3 253 316 254 +3 254 316 255 +3 255 316 317 +3 255 317 318 +3 255 318 256 +3 256 318 319 +3 256 319 257 +3 257 319 320 +3 257 320 258 +3 258 320 321 +3 258 321 259 +3 259 321 322 +3 259 322 323 +3 259 323 260 +3 260 323 324 +3 260 324 325 +3 260 325 261 +3 261 325 326 +3 261 326 262 +3 262 326 263 +3 263 326 327 +3 263 327 328 +3 263 328 264 +3 264 328 329 +3 264 329 265 +3 265 329 330 +3 265 330 266 +3 266 330 331 +3 266 331 267 +3 267 331 332 +3 267 332 268 +3 268 332 333 +3 268 333 269 +3 269 333 334 +3 269 334 335 +3 269 335 270 +3 270 335 336 +3 270 336 337 +3 270 337 338 +3 270 338 271 +3 271 338 272 +3 272 338 339 +3 272 339 273 +3 273 339 340 +3 273 340 274 +3 274 340 341 +3 274 341 342 +3 274 342 275 +3 275 342 276 +3 276 342 343 +3 276 343 344 +3 276 344 277 +3 277 344 278 +3 278 344 345 +3 278 345 279 +3 279 345 346 +3 279 346 280 +3 280 346 347 +3 280 347 281 +3 281 347 348 +3 281 348 282 +3 282 348 349 +3 282 349 283 +3 283 349 350 +3 283 350 284 +3 284 350 351 +3 284 351 352 +3 284 352 285 +3 285 352 353 +3 285 353 286 +3 286 353 354 +3 286 354 287 +3 287 354 355 +3 287 355 288 +3 288 355 356 +3 288 356 289 +3 289 356 357 +3 289 357 290 +3 290 357 358 +3 290 358 291 +3 291 358 359 +3 291 359 292 +3 292 359 360 +3 292 360 293 +3 293 360 361 +3 293 361 362 +3 293 362 294 +3 294 362 363 +3 294 363 295 +3 295 363 364 +3 295 364 296 +3 296 364 365 +3 296 365 297 +3 297 365 366 +3 297 366 298 +3 298 366 299 +3 299 366 367 +3 299 367 300 +3 300 367 368 +3 300 368 301 +3 301 368 369 +3 301 369 302 +3 302 369 370 +3 302 370 371 +3 302 371 303 +3 303 371 372 +3 303 372 304 +3 304 372 305 +3 305 372 373 +3 305 373 306 +3 306 373 374 +3 306 374 375 +3 306 375 307 +3 307 375 308 +3 308 375 376 +3 308 376 377 +3 308 377 309 +3 309 377 378 +3 309 378 310 +3 310 378 379 +3 310 379 311 +3 311 379 380 +3 311 380 381 +3 311 381 312 +3 312 381 313 +3 313 381 382 +3 313 382 314 +3 314 382 383 +3 314 383 315 +3 315 383 384 +3 315 384 385 +3 315 385 316 +3 316 385 317 +3 317 385 386 +3 317 386 387 +3 317 387 318 +3 318 387 388 +3 318 388 319 +3 319 388 389 +3 319 389 320 +3 320 389 390 +3 320 390 321 +3 321 390 391 +3 321 391 392 +3 321 392 322 +3 322 392 393 +3 322 393 394 +3 322 394 323 +3 323 394 324 +3 324 394 395 +3 324 395 396 +3 324 396 325 +3 325 396 397 +3 325 397 326 +3 326 397 327 +3 327 397 398 +3 327 398 328 +3 328 398 399 +3 328 399 400 +3 328 400 401 +3 328 401 329 +3 329 401 402 +3 329 402 330 +3 330 402 403 +3 330 403 331 +3 331 403 332 +3 332 403 404 +3 332 404 333 +3 333 404 405 +3 333 405 334 +3 334 405 406 +3 334 406 407 +3 334 407 335 +3 335 407 336 +3 336 407 408 +3 336 408 409 +3 336 409 337 +3 337 409 410 +3 337 410 411 +3 337 411 338 +3 338 411 339 +3 339 411 412 +3 339 412 340 +3 340 412 413 +3 340 413 414 +3 340 414 341 +3 341 414 415 +3 341 415 342 +3 342 415 416 +3 342 416 343 +3 343 416 417 +3 343 417 344 +3 344 417 418 +3 344 418 345 +3 345 418 419 +3 345 419 346 +3 346 419 420 +3 346 420 347 +3 347 420 421 +3 347 421 348 +3 348 421 422 +3 348 422 349 +3 349 422 423 +3 349 423 350 +3 350 423 424 +3 350 424 351 +3 351 424 425 +3 351 425 426 +3 351 426 352 +3 352 426 427 +3 352 427 353 +3 353 427 428 +3 353 428 354 +3 354 428 429 +3 354 429 355 +3 355 429 430 +3 355 430 356 +3 356 430 431 +3 356 431 357 +3 357 431 432 +3 357 432 358 +3 358 432 433 +3 358 433 359 +3 359 433 434 +3 359 434 360 +3 360 434 435 +3 360 435 361 +3 361 435 436 +3 361 436 437 +3 361 437 362 +3 362 437 438 +3 362 438 363 +3 363 438 439 +3 363 439 364 +3 364 439 440 +3 364 440 365 +3 365 440 441 +3 365 441 366 +3 366 441 367 +3 367 441 442 +3 367 442 368 +3 368 442 443 +3 368 443 369 +3 369 443 444 +3 369 444 370 +3 370 444 445 +3 370 445 446 +3 370 446 371 +3 371 446 447 +3 371 447 372 +3 372 447 373 +3 373 447 448 +3 373 448 374 +3 374 448 449 +3 374 449 450 +3 374 450 375 +3 375 450 376 +3 376 450 451 +3 376 451 452 +3 376 452 377 +3 377 452 453 +3 377 453 378 +3 378 453 454 +3 378 454 379 +3 379 454 455 +3 379 455 380 +3 380 455 456 +3 380 456 457 +3 380 457 381 +3 381 457 382 +3 382 457 458 +3 382 458 383 +3 383 458 459 +3 383 459 384 +3 384 459 460 +3 384 460 461 +3 384 461 385 +3 385 461 386 +3 386 461 462 +3 386 462 463 +3 386 463 387 +3 387 463 464 +3 387 464 388 +3 388 464 465 +3 388 465 389 +3 389 465 466 +3 389 466 390 +3 390 466 467 +3 390 467 391 +3 391 467 468 +3 391 468 469 +3 391 469 392 +3 392 469 393 +3 393 469 470 +3 393 470 395 +3 395 470 471 +3 395 471 472 +3 395 472 396 +3 396 472 473 +3 396 473 397 +3 397 473 398 +3 398 473 399 +3 399 473 474 +3 399 474 475 +3 399 475 400 +3 400 475 476 +3 400 476 477 +3 400 477 401 +3 401 477 478 +3 401 478 402 +3 402 478 479 +3 402 479 403 +3 403 479 404 +3 404 479 405 +3 405 479 480 +3 405 480 481 +3 405 481 406 +3 406 481 482 +3 406 482 483 +3 406 483 407 +3 407 483 408 +3 408 483 484 +3 408 484 409 +3 409 484 485 +3 409 485 486 +3 409 486 410 +3 410 486 487 +3 410 487 488 +3 410 488 489 +3 410 489 411 +3 411 489 412 +3 412 489 490 +3 412 490 413 +3 413 490 491 +3 413 491 492 +3 413 492 414 +3 414 492 493 +3 414 493 415 +3 415 493 494 +3 415 494 495 +3 415 495 416 +3 416 495 417 +3 417 495 496 +3 417 496 497 +3 417 497 418 +3 418 497 419 +3 419 497 498 +3 419 498 420 +3 420 498 499 +3 420 499 421 +3 421 499 500 +3 421 500 422 +3 422 500 501 +3 422 501 423 +3 423 501 502 +3 423 502 424 +3 424 502 503 +3 424 503 425 +3 425 503 504 +3 425 504 505 +3 425 505 426 +3 426 505 506 +3 426 506 427 +3 427 506 507 +3 427 507 428 +3 428 507 508 +3 428 508 429 +3 429 508 509 +3 429 509 430 +3 430 509 510 +3 430 510 431 +3 431 510 511 +3 431 511 432 +3 432 511 512 +3 432 512 433 +3 433 512 513 +3 433 513 434 +3 434 513 514 +3 434 514 435 +3 435 514 515 +3 435 515 436 +3 436 515 516 +3 436 516 517 +3 436 517 437 +3 437 517 518 +3 437 518 438 +3 438 518 519 +3 438 519 439 +3 439 519 520 +3 439 520 440 +3 440 520 521 +3 440 521 441 +3 441 521 522 +3 441 522 442 +3 442 522 443 +3 443 522 523 +3 443 523 444 +3 444 523 524 +3 444 524 445 +3 445 524 525 +3 445 525 526 +3 445 526 446 +3 446 526 527 +3 446 527 447 +3 447 527 448 +3 448 527 528 +3 448 528 449 +3 449 528 529 +3 449 529 530 +3 449 530 450 +3 450 530 451 +3 451 530 531 +3 451 531 532 +3 451 532 452 +3 452 532 533 +3 452 533 453 +3 453 533 534 +3 453 534 454 +3 454 534 535 +3 454 535 455 +3 455 535 536 +3 455 536 456 +3 456 536 537 +3 456 537 538 +3 456 538 457 +3 457 538 458 +3 458 538 539 +3 458 539 540 +3 458 540 459 +3 459 540 460 +3 460 540 541 +3 460 541 542 +3 460 542 461 +3 461 542 462 +3 462 542 543 +3 462 543 544 +3 462 544 463 +3 463 544 545 +3 463 545 464 +3 464 545 546 +3 464 546 465 +3 465 546 547 +3 465 547 466 +3 466 547 548 +3 466 548 467 +3 467 548 549 +3 467 549 468 +3 468 549 550 +3 468 550 551 +3 468 551 469 +3 469 551 470 +3 470 551 552 +3 470 552 553 +3 470 553 471 +3 471 553 554 +3 471 554 472 +3 472 554 555 +3 472 555 474 +3 474 555 556 +3 474 556 475 +3 475 556 557 +3 475 557 558 +3 475 558 476 +3 476 558 559 +3 476 559 560 +3 476 560 477 +3 477 560 561 +3 477 561 478 +3 478 561 479 +3 479 561 480 +3 480 561 562 +3 480 562 481 +3 481 562 563 +3 481 563 564 +3 481 564 482 +3 482 564 565 +3 482 565 566 +3 482 566 483 +3 483 566 484 +3 484 566 567 +3 484 567 485 +3 485 567 568 +3 485 568 486 +3 486 568 487 +3 487 568 569 +3 487 569 570 +3 487 570 488 +3 488 570 571 +3 488 571 572 +3 488 572 489 +3 489 572 573 +3 489 573 490 +3 490 573 491 +3 491 573 574 +3 491 574 575 +3 491 575 492 +3 492 575 576 +3 492 576 493 +3 493 576 577 +3 493 577 494 +3 494 577 578 +3 494 578 579 +3 494 579 495 +3 495 579 496 +3 496 579 580 +3 496 580 581 +3 496 581 497 +3 497 581 582 +3 497 582 498 +3 498 582 583 +3 498 583 499 +3 499 583 584 +3 499 584 500 +3 500 584 585 +3 500 585 501 +3 501 585 586 +3 501 586 502 +3 502 586 587 +3 502 587 503 +3 503 587 588 +3 503 588 504 +3 504 588 589 +3 504 589 590 +3 504 590 505 +3 505 590 591 +3 505 591 506 +3 506 591 592 +3 506 592 507 +3 507 592 593 +3 507 593 508 +3 508 593 594 +3 508 594 509 +3 509 594 595 +3 509 595 596 +3 509 596 510 +3 510 596 597 +3 510 597 511 +3 511 597 598 +3 511 598 512 +3 512 598 599 +3 512 599 513 +3 513 599 600 +3 513 600 514 +3 514 600 601 +3 514 601 515 +3 515 601 602 +3 515 602 516 +3 516 602 603 +3 516 603 604 +3 516 604 605 +3 516 605 517 +3 517 605 606 +3 517 606 518 +3 518 606 607 +3 518 607 519 +3 519 607 608 +3 519 608 520 +3 520 608 609 +3 520 609 521 +3 521 609 610 +3 521 610 522 +3 522 610 611 +3 522 611 523 +3 523 611 612 +3 523 612 524 +3 524 612 613 +3 524 613 525 +3 525 613 614 +3 525 614 615 +3 525 615 526 +3 526 615 616 +3 526 616 527 +3 527 616 528 +3 528 616 617 +3 528 617 529 +3 529 617 618 +3 529 618 619 +3 529 619 530 +3 530 619 531 +3 531 619 620 +3 531 620 621 +3 531 621 532 +3 532 621 622 +3 532 622 533 +3 533 622 623 +3 533 623 534 +3 534 623 624 +3 534 624 625 +3 534 625 535 +3 535 625 536 +3 536 625 626 +3 536 626 537 +3 537 626 627 +3 537 627 628 +3 537 628 538 +3 538 628 539 +3 539 628 629 +3 539 629 630 +3 539 630 540 +3 540 630 541 +3 541 630 631 +3 541 631 632 +3 541 632 542 +3 542 632 543 +3 543 632 633 +3 543 633 634 +3 543 634 544 +3 544 634 635 +3 544 635 545 +3 545 635 636 +3 545 636 546 +3 546 636 637 +3 546 637 547 +3 547 637 638 +3 547 638 548 +3 548 638 639 +3 548 639 549 +3 549 639 640 +3 549 640 550 +3 550 640 641 +3 550 641 642 +3 550 642 551 +3 551 642 552 +3 552 642 643 +3 552 643 644 +3 552 644 553 +3 553 644 645 +3 553 645 646 +3 553 646 554 +3 554 646 647 +3 554 647 555 +3 555 647 556 +3 556 647 648 +3 556 648 649 +3 556 649 557 +3 557 649 650 +3 557 650 558 +3 558 650 651 +3 558 651 559 +3 559 651 652 +3 559 652 653 +3 559 653 560 +3 560 653 562 +3 562 653 563 +3 563 653 654 +3 563 654 655 +3 563 655 564 +3 564 655 656 +3 564 656 565 +3 565 656 657 +3 565 657 658 +3 565 658 659 +3 565 659 566 +3 566 659 567 +3 567 659 660 +3 567 660 661 +3 567 661 568 +3 568 661 662 +3 568 662 569 +3 569 662 663 +3 569 663 664 +3 569 664 570 +3 570 664 665 +3 570 665 571 +3 571 665 666 +3 571 666 667 +3 571 667 572 +3 572 667 573 +3 573 667 574 +3 574 667 668 +3 574 668 669 +3 574 669 575 +3 575 669 670 +3 575 670 576 +3 576 670 671 +3 576 671 577 +3 577 671 672 +3 577 672 578 +3 578 672 673 +3 578 673 674 +3 578 674 580 +3 580 674 675 +3 580 675 676 +3 580 676 581 +3 581 676 677 +3 581 677 582 +3 582 677 678 +3 582 678 583 +3 583 678 679 +3 583 679 584 +3 584 679 680 +3 584 680 585 +3 585 680 681 +3 585 681 586 +3 586 681 682 +3 586 682 587 +3 587 682 683 +3 587 683 588 +3 588 683 684 +3 588 684 589 +3 589 684 685 +3 589 685 686 +3 589 686 590 +3 590 686 687 +3 590 687 591 +3 591 687 688 +3 591 688 592 +3 592 688 689 +3 592 689 593 +3 593 689 690 +3 593 690 594 +3 594 690 595 +3 595 690 691 +3 595 691 692 +3 595 692 693 +3 595 693 596 +3 596 693 597 +3 597 693 694 +3 597 694 598 +3 598 694 695 +3 598 695 599 +3 599 695 696 +3 599 696 600 +3 600 696 697 +3 600 697 601 +3 601 697 698 +3 601 698 602 +3 602 698 699 +3 602 699 603 +3 603 699 700 +3 603 700 701 +3 603 701 604 +3 604 701 702 +3 604 702 605 +3 605 702 703 +3 605 703 606 +3 606 703 704 +3 606 704 607 +3 607 704 705 +3 607 705 706 +3 607 706 608 +3 608 706 707 +3 608 707 609 +3 609 707 708 +3 609 708 610 +3 610 708 709 +3 610 709 611 +3 611 709 710 +3 611 710 612 +3 612 710 711 +3 612 711 613 +3 613 711 712 +3 613 712 614 +3 614 712 713 +3 614 713 714 +3 614 714 615 +3 615 714 715 +3 615 715 616 +3 616 715 617 +3 617 715 716 +3 617 716 618 +3 618 716 717 +3 618 717 718 +3 618 718 619 +3 619 718 620 +3 620 718 719 +3 620 719 720 +3 620 720 621 +3 621 720 721 +3 621 721 622 +3 622 721 722 +3 622 722 623 +3 623 722 723 +3 623 723 624 +3 624 723 724 +3 624 724 725 +3 624 725 625 +3 625 725 626 +3 626 725 726 +3 626 726 627 +3 627 726 727 +3 627 727 728 +3 627 728 628 +3 628 728 629 +3 629 728 729 +3 629 729 730 +3 629 730 630 +3 630 730 631 +3 631 730 731 +3 631 731 732 +3 631 732 632 +3 632 732 633 +3 633 732 733 +3 633 733 734 +3 633 734 634 +3 634 734 735 +3 634 735 635 +3 635 735 736 +3 635 736 636 +3 636 736 737 +3 636 737 637 +3 637 737 738 +3 637 738 638 +3 638 738 739 +3 638 739 639 +3 639 739 740 +3 639 740 640 +3 640 740 741 +3 640 741 641 +3 641 741 742 +3 641 742 743 +3 641 743 642 +3 642 743 643 +3 643 743 744 +3 643 744 745 +3 643 745 644 +3 644 745 746 +3 644 746 645 +3 645 746 747 +3 645 747 646 +3 646 747 647 +3 647 747 648 +3 648 747 748 +3 648 748 749 +3 648 749 649 +3 649 749 750 +3 649 750 650 +3 650 750 751 +3 650 751 651 +3 651 751 752 +3 651 752 652 +3 652 752 753 +3 652 753 654 +3 654 753 754 +3 654 754 655 +3 655 754 755 +3 655 755 656 +3 656 755 657 +3 657 755 756 +3 657 756 757 +3 657 757 658 +3 658 757 758 +3 658 758 659 +3 659 758 660 +3 660 758 759 +3 660 759 760 +3 660 760 661 +3 661 760 761 +3 661 761 662 +3 662 761 762 +3 662 762 663 +3 663 762 763 +3 663 763 764 +3 663 764 664 +3 664 764 765 +3 664 765 665 +3 665 765 766 +3 665 766 666 +3 666 766 767 +3 666 767 668 +3 668 767 768 +3 668 768 669 +3 669 768 769 +3 669 769 670 +3 670 769 770 +3 670 770 671 +3 671 770 771 +3 671 771 672 +3 672 771 772 +3 672 772 673 +3 673 772 773 +3 673 773 774 +3 673 774 674 +3 674 774 675 +3 675 774 775 +3 675 775 776 +3 675 776 676 +3 676 776 777 +3 676 777 677 +3 677 777 778 +3 677 778 678 +3 678 778 779 +3 678 779 679 +3 679 779 780 +3 679 780 680 +3 680 780 781 +3 680 781 681 +3 681 781 782 +3 681 782 682 +3 682 782 783 +3 682 783 683 +3 683 783 784 +3 683 784 684 +3 684 784 785 +3 684 785 685 +3 685 785 786 +3 685 786 686 +3 686 786 787 +3 686 787 687 +3 687 787 788 +3 687 788 789 +3 687 789 688 +3 688 789 790 +3 688 790 689 +3 689 790 791 +3 689 791 690 +3 690 791 691 +3 691 791 792 +3 691 792 793 +3 691 793 692 +3 692 793 794 +3 692 794 795 +3 692 795 693 +3 693 795 694 +3 694 795 796 +3 694 796 695 +3 695 796 797 +3 695 797 696 +3 696 797 798 +3 696 798 697 +3 697 798 799 +3 697 799 698 +3 698 799 800 +3 698 800 699 +3 699 800 801 +3 699 801 700 +3 700 801 802 +3 700 802 803 +3 700 803 701 +3 701 803 804 +3 701 804 702 +3 702 804 805 +3 702 805 703 +3 703 805 806 +3 703 806 704 +3 704 806 807 +3 704 807 705 +3 705 807 808 +3 705 808 809 +3 705 809 706 +3 706 809 810 +3 706 810 707 +3 707 810 811 +3 707 811 708 +3 708 811 812 +3 708 812 709 +3 709 812 813 +3 709 813 710 +3 710 813 814 +3 710 814 711 +3 711 814 815 +3 711 815 712 +3 712 815 816 +3 712 816 713 +3 713 816 817 +3 713 817 818 +3 713 818 714 +3 714 818 819 +3 714 819 715 +3 715 819 716 +3 716 819 820 +3 716 820 717 +3 717 820 821 +3 717 821 822 +3 717 822 718 +3 718 822 719 +3 719 822 823 +3 719 823 824 +3 719 824 720 +3 720 824 825 +3 720 825 721 +3 721 825 826 +3 721 826 722 +3 722 826 827 +3 722 827 723 +3 723 827 828 +3 723 828 724 +3 724 828 829 +3 724 829 830 +3 724 830 725 +3 725 830 831 +3 725 831 726 +3 726 831 727 +3 727 831 832 +3 727 832 833 +3 727 833 728 +3 728 833 729 +3 729 833 834 +3 729 834 835 +3 729 835 730 +3 730 835 731 +3 731 835 836 +3 731 836 837 +3 731 837 732 +3 732 837 733 +3 733 837 838 +3 733 838 839 +3 733 839 734 +3 734 839 840 +3 734 840 735 +3 735 840 841 +3 735 841 736 +3 736 841 842 +3 736 842 737 +3 737 842 843 +3 737 843 738 +3 738 843 844 +3 738 844 739 +3 739 844 845 +3 739 845 740 +3 740 845 846 +3 740 846 741 +3 741 846 847 +3 741 847 742 +3 742 847 848 +3 742 848 849 +3 742 849 743 +3 743 849 744 +3 744 849 850 +3 744 850 851 +3 744 851 745 +3 745 851 852 +3 745 852 746 +3 746 852 853 +3 746 853 854 +3 746 854 747 +3 747 854 748 +3 748 854 855 +3 748 855 856 +3 748 856 857 +3 748 857 749 +3 749 857 858 +3 749 858 750 +3 750 858 859 +3 750 859 751 +3 751 859 860 +3 751 860 752 +3 752 860 861 +3 752 861 862 +3 752 862 753 +3 753 862 863 +3 753 863 864 +3 753 864 754 +3 754 864 865 +3 754 865 755 +3 755 865 756 +3 756 865 866 +3 756 866 867 +3 756 867 757 +3 757 867 868 +3 757 868 758 +3 758 868 759 +3 759 868 869 +3 759 869 870 +3 759 870 871 +3 759 871 760 +3 760 871 872 +3 760 872 873 +3 760 873 761 +3 761 873 874 +3 761 874 762 +3 762 874 875 +3 762 875 763 +3 763 875 876 +3 763 876 877 +3 763 877 764 +3 764 877 878 +3 764 878 765 +3 765 878 879 +3 765 879 766 +3 766 879 880 +3 766 880 767 +3 767 880 881 +3 767 881 768 +3 768 881 882 +3 768 882 769 +3 769 882 883 +3 769 883 770 +3 770 883 884 +3 770 884 771 +3 771 884 772 +3 772 884 773 +3 773 884 885 +3 773 885 886 +3 773 886 774 +3 774 886 887 +3 774 887 775 +3 775 887 888 +3 775 888 889 +3 775 889 776 +3 776 889 777 +3 777 889 890 +3 777 890 778 +3 778 890 891 +3 778 891 779 +3 779 891 892 +3 779 892 780 +3 780 892 893 +3 780 893 894 +3 780 894 781 +3 781 894 895 +3 781 895 782 +3 782 895 896 +3 782 896 783 +3 783 896 897 +3 783 897 784 +3 784 897 898 +3 784 898 785 +3 785 898 899 +3 785 899 786 +3 786 899 900 +3 786 900 787 +3 787 900 901 +3 787 901 788 +3 788 901 902 +3 788 902 903 +3 788 903 789 +3 789 903 904 +3 789 904 790 +3 790 904 905 +3 790 905 791 +3 791 905 792 +3 792 905 906 +3 792 906 907 +3 792 907 793 +3 793 907 908 +3 793 908 794 +3 794 908 909 +3 794 909 910 +3 794 910 795 +3 795 910 796 +3 796 910 911 +3 796 911 797 +3 797 911 912 +3 797 912 798 +3 798 912 913 +3 798 913 799 +3 799 913 914 +3 799 914 800 +3 800 914 915 +3 800 915 801 +3 801 915 916 +3 801 916 802 +3 802 916 917 +3 802 917 918 +3 802 918 919 +3 802 919 803 +3 803 919 920 +3 803 920 804 +3 804 920 921 +3 804 921 805 +3 805 921 922 +3 805 922 806 +3 806 922 923 +3 806 923 807 +3 807 923 924 +3 807 924 808 +3 808 924 925 +3 808 925 809 +3 809 925 926 +3 809 926 810 +3 810 926 927 +3 810 927 811 +3 811 927 928 +3 811 928 812 +3 812 928 929 +3 812 929 813 +3 813 929 930 +3 813 930 814 +3 814 930 931 +3 814 931 815 +3 815 931 932 +3 815 932 816 +3 816 932 933 +3 816 933 817 +3 817 933 934 +3 817 934 935 +3 817 935 818 +3 818 935 936 +3 818 936 819 +3 819 936 820 +3 820 936 937 +3 820 937 821 +3 821 937 938 +3 821 938 939 +3 821 939 822 +3 822 939 823 +3 823 939 940 +3 823 940 941 +3 823 941 824 +3 824 941 942 +3 824 942 825 +3 825 942 943 +3 825 943 826 +3 826 943 944 +3 826 944 827 +3 827 944 945 +3 827 945 828 +3 828 945 946 +3 828 946 829 +3 829 946 947 +3 829 947 948 +3 829 948 830 +3 830 948 949 +3 830 949 831 +3 831 949 950 +3 831 950 832 +3 832 950 833 +3 833 950 951 +3 833 951 834 +3 834 951 952 +3 834 952 953 +3 834 953 835 +3 835 953 836 +3 836 953 954 +3 836 954 955 +3 836 955 837 +3 837 955 838 +3 838 955 956 +3 838 956 957 +3 838 957 839 +3 839 957 958 +3 839 958 840 +3 840 958 959 +3 840 959 841 +3 841 959 960 +3 841 960 842 +3 842 960 961 +3 842 961 843 +3 843 961 962 +3 843 962 844 +3 844 962 963 +3 844 963 845 +3 845 963 964 +3 845 964 846 +3 846 964 965 +3 846 965 847 +3 847 965 966 +3 847 966 848 +3 848 966 967 +3 848 967 968 +3 848 968 849 +3 849 968 850 +3 850 968 969 +3 850 969 970 +3 850 970 851 +3 851 970 852 +3 852 970 971 +3 852 971 853 +3 853 971 972 +3 853 972 855 +3 855 972 973 +3 855 973 974 +3 855 974 856 +3 856 974 975 +3 856 975 857 +3 857 975 976 +3 857 976 858 +3 858 976 977 +3 858 977 978 +3 858 978 859 +3 859 978 979 +3 859 979 860 +3 860 979 861 +3 861 979 980 +3 861 980 981 +3 861 981 982 +3 861 982 862 +3 862 982 863 +3 863 982 983 +3 863 983 984 +3 863 984 864 +3 864 984 985 +3 864 985 865 +3 865 985 986 +3 865 986 866 +3 866 986 987 +3 866 987 867 +3 867 987 988 +3 867 988 989 +3 867 989 868 +3 868 989 869 +3 869 989 990 +3 869 990 870 +3 870 990 991 +3 870 991 992 +3 870 992 871 +3 871 992 872 +3 872 992 993 +3 872 993 994 +3 872 994 995 +3 872 995 873 +3 873 995 874 +3 874 995 996 +3 874 996 997 +3 874 997 875 +3 875 997 998 +3 875 998 999 +3 875 999 876 +3 876 999 1000 +3 876 1000 1001 +3 876 1001 877 +3 877 1001 1002 +3 877 1002 878 +3 878 1002 1003 +3 878 1003 879 +3 879 1003 1004 +3 879 1004 880 +3 880 1004 1005 +3 880 1005 881 +3 881 1005 1006 +3 881 1006 882 +3 882 1006 1007 +3 882 1007 883 +3 883 1007 885 +3 885 1007 1008 +3 885 1008 886 +3 886 1008 1009 +3 886 1009 887 +3 887 1009 1010 +3 887 1010 888 +3 888 1010 1011 +3 888 1011 889 +3 889 1011 1012 +3 889 1012 890 +3 890 1012 1013 +3 890 1013 891 +3 891 1013 1014 +3 891 1014 892 +3 892 1014 893 +3 893 1014 1015 +3 893 1015 1016 +3 893 1016 894 +3 894 1016 1017 +3 894 1017 895 +3 895 1017 1018 +3 895 1018 896 +3 896 1018 1019 +3 896 1019 897 +3 897 1019 1020 +3 897 1020 898 +3 898 1020 1021 +3 898 1021 899 +3 899 1021 1022 +3 899 1022 1023 +3 899 1023 900 +3 900 1023 1024 +3 900 1024 901 +3 901 1024 1025 +3 901 1025 902 +3 902 1025 1026 +3 902 1026 903 +3 903 1026 1027 +3 903 1027 1028 +3 903 1028 1029 +3 903 1029 904 +3 904 1029 1030 +3 904 1030 905 +3 905 1030 906 +3 906 1030 1031 +3 906 1031 1032 +3 906 1032 907 +3 907 1032 1033 +3 907 1033 908 +3 908 1033 1034 +3 908 1034 909 +3 909 1034 1035 +3 909 1035 1036 +3 909 1036 910 +3 910 1036 911 +3 911 1036 1037 +3 911 1037 912 +3 912 1037 1038 +3 912 1038 913 +3 913 1038 1039 +3 913 1039 914 +3 914 1039 1040 +3 914 1040 915 +3 915 1040 1041 +3 915 1041 916 +3 916 1041 1042 +3 916 1042 917 +3 917 1042 1043 +3 917 1043 1044 +3 917 1044 918 +3 918 1044 1045 +3 918 1045 919 +3 919 1045 1046 +3 919 1046 920 +3 920 1046 1047 +3 920 1047 921 +3 921 1047 1048 +3 921 1048 922 +3 922 1048 1049 +3 922 1049 923 +3 923 1049 1050 +3 923 1050 924 +3 924 1050 1051 +3 924 1051 925 +3 925 1051 1052 +3 925 1052 926 +3 926 1052 1053 +3 926 1053 927 +3 927 1053 1054 +3 927 1054 928 +3 928 1054 1055 +3 928 1055 929 +3 929 1055 1056 +3 929 1056 930 +3 930 1056 1057 +3 930 1057 931 +3 931 1057 1058 +3 931 1058 932 +3 932 1058 1059 +3 932 1059 933 +3 933 1059 1060 +3 933 1060 934 +3 934 1060 1061 +3 934 1061 1062 +3 934 1062 935 +3 935 1062 1063 +3 935 1063 936 +3 936 1063 937 +3 937 1063 1064 +3 937 1064 938 +3 938 1064 1065 +3 938 1065 1066 +3 938 1066 939 +3 939 1066 940 +3 940 1066 1067 +3 940 1067 1068 +3 940 1068 941 +3 941 1068 1069 +3 941 1069 942 +3 942 1069 1070 +3 942 1070 943 +3 943 1070 1071 +3 943 1071 944 +3 944 1071 1072 +3 944 1072 945 +3 945 1072 1073 +3 945 1073 946 +3 946 1073 1074 +3 946 1074 947 +3 947 1074 1075 +3 947 1075 1076 +3 947 1076 948 +3 948 1076 1077 +3 948 1077 949 +3 949 1077 1078 +3 949 1078 950 +3 950 1078 951 +3 951 1078 1079 +3 951 1079 952 +3 952 1079 1080 +3 952 1080 1081 +3 952 1081 953 +3 953 1081 954 +3 954 1081 1082 +3 954 1082 1083 +3 954 1083 955 +3 955 1083 956 +3 956 1083 1084 +3 956 1084 1085 +3 956 1085 957 +3 957 1085 1086 +3 957 1086 958 +3 958 1086 1087 +3 958 1087 959 +3 959 1087 1088 +3 959 1088 960 +3 960 1088 1089 +3 960 1089 961 +3 961 1089 1090 +3 961 1090 962 +3 962 1090 1091 +3 962 1091 963 +3 963 1091 1092 +3 963 1092 964 +3 964 1092 1093 +3 964 1093 965 +3 965 1093 1094 +3 965 1094 966 +3 966 1094 1095 +3 966 1095 967 +3 967 1095 1096 +3 967 1096 1097 +3 967 1097 968 +3 968 1097 969 +3 969 1097 1098 +3 969 1098 1099 +3 969 1099 970 +3 970 1099 971 +3 971 1099 1100 +3 971 1100 973 +3 973 1100 1101 +3 973 1101 1102 +3 973 1102 974 +3 974 1102 1103 +3 974 1103 975 +3 975 1103 1104 +3 975 1104 1105 +3 975 1105 976 +3 976 1105 977 +3 977 1105 1106 +3 977 1106 1107 +3 977 1107 978 +3 978 1107 1108 +3 978 1108 979 +3 979 1108 980 +3 980 1108 1109 +3 980 1109 1110 +3 980 1110 1111 +3 980 1111 981 +3 981 1111 1112 +3 981 1112 982 +3 982 1112 1113 +3 982 1113 983 +3 983 1113 1114 +3 983 1114 1115 +3 983 1115 984 +3 984 1115 986 +3 986 1115 1114 +3 986 1114 1116 +3 986 1116 987 +3 987 1116 1117 +3 987 1117 1118 +3 987 1118 988 +3 988 1118 1119 +3 988 1119 1120 +3 988 1120 989 +3 989 1120 1121 +3 989 1121 990 +3 990 1121 991 +3 991 1121 1122 +3 991 1122 992 +3 992 1122 1123 +3 992 1123 993 +3 993 1123 1124 +3 993 1124 1125 +3 993 1125 994 +3 994 1125 1126 +3 994 1126 995 +3 995 1126 996 +3 996 1126 1127 +3 996 1127 1128 +3 996 1128 998 +3 998 1128 1129 +3 998 1129 1130 +3 998 1130 999 +3 999 1130 1131 +3 999 1131 1000 +3 1000 1131 1132 +3 1000 1132 1133 +3 1000 1133 1001 +3 1001 1133 1134 +3 1001 1134 1002 +3 1002 1134 1135 +3 1002 1135 1003 +3 1003 1135 1136 +3 1003 1136 1004 +3 1004 1136 1137 +3 1004 1137 1005 +3 1005 1137 1138 +3 1005 1138 1006 +3 1006 1138 1139 +3 1006 1139 1007 +3 1007 1139 1008 +3 1008 1139 1140 +3 1008 1140 1009 +3 1009 1140 1141 +3 1009 1141 1010 +3 1010 1141 1142 +3 1010 1142 1011 +3 1011 1142 1143 +3 1011 1143 1012 +3 1012 1143 1144 +3 1012 1144 1013 +3 1013 1144 1145 +3 1013 1145 1014 +3 1014 1145 1015 +3 1015 1145 1146 +3 1015 1146 1147 +3 1015 1147 1016 +3 1016 1147 1148 +3 1016 1148 1017 +3 1017 1148 1149 +3 1017 1149 1018 +3 1018 1149 1150 +3 1018 1150 1019 +3 1019 1150 1151 +3 1019 1151 1020 +3 1020 1151 1152 +3 1020 1152 1021 +3 1021 1152 1153 +3 1021 1153 1022 +3 1022 1153 1154 +3 1022 1154 1155 +3 1022 1155 1023 +3 1023 1155 1156 +3 1023 1156 1024 +3 1024 1156 1025 +3 1025 1156 1157 +3 1025 1157 1158 +3 1025 1158 1026 +3 1026 1158 1027 +3 1027 1158 1159 +3 1027 1159 1160 +3 1027 1160 1161 +3 1027 1161 1028 +3 1028 1161 1162 +3 1028 1162 1163 +3 1028 1163 1029 +3 1029 1163 1164 +3 1029 1164 1030 +3 1030 1164 1031 +3 1031 1164 1165 +3 1031 1165 1032 +3 1032 1165 1166 +3 1032 1166 1167 +3 1032 1167 1033 +3 1033 1167 1168 +3 1033 1168 1034 +3 1034 1168 1169 +3 1034 1169 1035 +3 1035 1169 1170 +3 1035 1170 1171 +3 1035 1171 1036 +3 1036 1171 1037 +3 1037 1171 1172 +3 1037 1172 1038 +3 1038 1172 1173 +3 1038 1173 1039 +3 1039 1173 1174 +3 1039 1174 1040 +3 1040 1174 1175 +3 1040 1175 1041 +3 1041 1175 1176 +3 1041 1176 1042 +3 1042 1176 1177 +3 1042 1177 1043 +3 1043 1177 1178 +3 1043 1178 1179 +3 1043 1179 1044 +3 1044 1179 1180 +3 1044 1180 1045 +3 1045 1180 1181 +3 1045 1181 1046 +3 1046 1181 1182 +3 1046 1182 1047 +3 1047 1182 1183 +3 1047 1183 1048 +3 1048 1183 1184 +3 1048 1184 1049 +3 1049 1184 1185 +3 1049 1185 1050 +3 1050 1185 1186 +3 1050 1186 1051 +3 1051 1186 1187 +3 1051 1187 1052 +3 1052 1187 1188 +3 1052 1188 1053 +3 1053 1188 1189 +3 1053 1189 1054 +3 1054 1189 1190 +3 1054 1190 1055 +3 1055 1190 1191 +3 1055 1191 1056 +3 1056 1191 1192 +3 1056 1192 1057 +3 1057 1192 1193 +3 1057 1193 1058 +3 1058 1193 1194 +3 1058 1194 1059 +3 1059 1194 1195 +3 1059 1195 1060 +3 1060 1195 1196 +3 1060 1196 1061 +3 1061 1196 1197 +3 1061 1197 1198 +3 1061 1198 1062 +3 1062 1198 1199 +3 1062 1199 1063 +3 1063 1199 1064 +3 1064 1199 1200 +3 1064 1200 1065 +3 1065 1200 1201 +3 1065 1201 1202 +3 1065 1202 1066 +3 1066 1202 1067 +3 1067 1202 1203 +3 1067 1203 1204 +3 1067 1204 1068 +3 1068 1204 1205 +3 1068 1205 1069 +3 1069 1205 1206 +3 1069 1206 1070 +3 1070 1206 1207 +3 1070 1207 1071 +3 1071 1207 1208 +3 1071 1208 1072 +3 1072 1208 1209 +3 1072 1209 1073 +3 1073 1209 1210 +3 1073 1210 1074 +3 1074 1210 1211 +3 1074 1211 1075 +3 1075 1211 1212 +3 1075 1212 1213 +3 1075 1213 1076 +3 1076 1213 1077 +3 1077 1213 1214 +3 1077 1214 1078 +3 1078 1214 1215 +3 1078 1215 1216 +3 1078 1216 1217 +3 1078 1217 1079 +3 1079 1217 1080 +3 1080 1217 1218 +3 1080 1218 1081 +3 1081 1218 1082 +3 1082 1218 1219 +3 1082 1219 1220 +3 1082 1220 1083 +3 1083 1220 1084 +3 1084 1220 1221 +3 1084 1221 1222 +3 1084 1222 1085 +3 1085 1222 1223 +3 1085 1223 1086 +3 1086 1223 1224 +3 1086 1224 1087 +3 1087 1224 1225 +3 1087 1225 1088 +3 1088 1225 1226 +3 1088 1226 1089 +3 1089 1226 1227 +3 1089 1227 1090 +3 1090 1227 1228 +3 1090 1228 1091 +3 1091 1228 1229 +3 1091 1229 1092 +3 1092 1229 1230 +3 1092 1230 1093 +3 1093 1230 1231 +3 1093 1231 1094 +3 1094 1231 1232 +3 1094 1232 1095 +3 1095 1232 1233 +3 1095 1233 1096 +3 1096 1233 1234 +3 1096 1234 1235 +3 1096 1235 1097 +3 1097 1235 1098 +3 1098 1235 1236 +3 1098 1236 1237 +3 1098 1237 1099 +3 1099 1237 1238 +3 1099 1238 1100 +3 1100 1238 1101 +3 1101 1238 1239 +3 1101 1239 1240 +3 1101 1240 1241 +3 1101 1241 1242 +3 1101 1242 1102 +3 1102 1242 1243 +3 1102 1243 1103 +3 1103 1243 1244 +3 1103 1244 1104 +3 1104 1244 1106 +3 1106 1244 1245 +3 1106 1245 1107 +3 1107 1245 1246 +3 1107 1246 1108 +3 1108 1246 1109 +3 1109 1246 1247 +3 1109 1247 1248 +3 1109 1248 1249 +3 1109 1249 1110 +3 1110 1249 1250 +3 1110 1250 1251 +3 1110 1251 1111 +3 1111 1251 1112 +3 1112 1251 1252 +3 1112 1252 1113 +3 1113 1252 1253 +3 1113 1253 1114 +3 1114 1253 1116 +3 1116 1253 1117 +3 1117 1253 1254 +3 1117 1254 1255 +3 1117 1255 1118 +3 1118 1255 1256 +3 1118 1256 1119 +3 1119 1256 1257 +3 1119 1257 1258 +3 1119 1258 1259 +3 1119 1259 1120 +3 1120 1259 1121 +3 1121 1259 1260 +3 1121 1260 1122 +3 1122 1260 1261 +3 1122 1261 1123 +3 1123 1261 1262 +3 1123 1262 1124 +3 1124 1262 1263 +3 1124 1263 1264 +3 1124 1264 1265 +3 1124 1265 1125 +3 1125 1265 1127 +3 1127 1265 1266 +3 1127 1266 1267 +3 1127 1267 1128 +3 1128 1267 1129 +3 1129 1267 1268 +3 1129 1268 1269 +3 1129 1269 1270 +3 1129 1270 1130 +3 1130 1270 1271 +3 1130 1271 1131 +3 1131 1271 1272 +3 1131 1272 1132 +3 1132 1272 1273 +3 1132 1273 1274 +3 1132 1274 1275 +3 1132 1275 1133 +3 1133 1275 1276 +3 1133 1276 1134 +3 1134 1276 1277 +3 1134 1277 1135 +3 1135 1277 1278 +3 1135 1278 1136 +3 1136 1278 1279 +3 1136 1279 1137 +3 1137 1279 1280 +3 1137 1280 1138 +3 1138 1280 1281 +3 1138 1281 1139 +3 1139 1281 1140 +3 1140 1281 1282 +3 1140 1282 1141 +3 1141 1282 1283 +3 1141 1283 1284 +3 1141 1284 1142 +3 1142 1284 1285 +3 1142 1285 1143 +3 1143 1285 1286 +3 1143 1286 1144 +3 1144 1286 1287 +3 1144 1287 1145 +3 1145 1287 1146 +3 1146 1287 1288 +3 1146 1288 1289 +3 1146 1289 1147 +3 1147 1289 1290 +3 1147 1290 1148 +3 1148 1290 1291 +3 1148 1291 1149 +3 1149 1291 1292 +3 1149 1292 1150 +3 1150 1292 1293 +3 1150 1293 1151 +3 1151 1293 1294 +3 1151 1294 1152 +3 1152 1294 1295 +3 1152 1295 1153 +3 1153 1295 1296 +3 1153 1296 1154 +3 1154 1296 1297 +3 1154 1297 1298 +3 1154 1298 1155 +3 1155 1298 1299 +3 1155 1299 1156 +3 1156 1299 1300 +3 1156 1300 1157 +3 1157 1300 1158 +3 1158 1300 1159 +3 1159 1300 1301 +3 1159 1301 1160 +3 1160 1301 1302 +3 1160 1302 1303 +3 1160 1303 1304 +3 1160 1304 1305 +3 1160 1305 1161 +3 1161 1305 1162 +3 1162 1305 1306 +3 1162 1306 1307 +3 1162 1307 1163 +3 1163 1307 1308 +3 1163 1308 1164 +3 1164 1308 1165 +3 1165 1308 1309 +3 1165 1309 1166 +3 1166 1309 1310 +3 1166 1310 1167 +3 1167 1310 1311 +3 1167 1311 1168 +3 1168 1311 1312 +3 1168 1312 1169 +3 1169 1312 1313 +3 1169 1313 1170 +3 1170 1313 1314 +3 1170 1314 1315 +3 1170 1315 1316 +3 1170 1316 1171 +3 1171 1316 1172 +3 1172 1316 1317 +3 1172 1317 1173 +3 1173 1317 1318 +3 1173 1318 1174 +3 1174 1318 1319 +3 1174 1319 1175 +3 1175 1319 1320 +3 1175 1320 1176 +3 1176 1320 1321 +3 1176 1321 1177 +3 1177 1321 1322 +3 1177 1322 1178 +3 1178 1322 1323 +3 1178 1323 1324 +3 1178 1324 1179 +3 1179 1324 1325 +3 1179 1325 1180 +3 1180 1325 1326 +3 1180 1326 1181 +3 1181 1326 1327 +3 1181 1327 1182 +3 1182 1327 1328 +3 1182 1328 1183 +3 1183 1328 1329 +3 1183 1329 1184 +3 1184 1329 1330 +3 1184 1330 1185 +3 1185 1330 1331 +3 1185 1331 1186 +3 1186 1331 1332 +3 1186 1332 1187 +3 1187 1332 1333 +3 1187 1333 1188 +3 1188 1333 1334 +3 1188 1334 1189 +3 1189 1334 1335 +3 1189 1335 1190 +3 1190 1335 1336 +3 1190 1336 1191 +3 1191 1336 1337 +3 1191 1337 1192 +3 1192 1337 1338 +3 1192 1338 1193 +3 1193 1338 1339 +3 1193 1339 1194 +3 1194 1339 1340 +3 1194 1340 1195 +3 1195 1340 1341 +3 1195 1341 1196 +3 1196 1341 1342 +3 1196 1342 1197 +3 1197 1342 1343 +3 1197 1343 1344 +3 1197 1344 1198 +3 1198 1344 1345 +3 1198 1345 1199 +3 1199 1345 1200 +3 1200 1345 1346 +3 1200 1346 1201 +3 1201 1346 1347 +3 1201 1347 1348 +3 1201 1348 1202 +3 1202 1348 1203 +3 1203 1348 1349 +3 1203 1349 1350 +3 1203 1350 1204 +3 1204 1350 1351 +3 1204 1351 1205 +3 1205 1351 1352 +3 1205 1352 1206 +3 1206 1352 1353 +3 1206 1353 1207 +3 1207 1353 1354 +3 1207 1354 1208 +3 1208 1354 1355 +3 1208 1355 1209 +3 1209 1355 1356 +3 1209 1356 1210 +3 1210 1356 1357 +3 1210 1357 1358 +3 1210 1358 1211 +3 1211 1358 1357 +3 1211 1357 1359 +3 1211 1359 1212 +3 1212 1359 1360 +3 1212 1360 1361 +3 1212 1361 1362 +3 1212 1362 1213 +3 1213 1362 1214 +3 1214 1362 1363 +3 1214 1363 1215 +3 1215 1363 1364 +3 1215 1364 1365 +3 1215 1365 1216 +3 1216 1365 1366 +3 1216 1366 1367 +3 1216 1367 1217 +3 1217 1367 1368 +3 1217 1368 1218 +3 1218 1368 1219 +3 1219 1368 1369 +3 1219 1369 1370 +3 1219 1370 1220 +3 1220 1370 1221 +3 1221 1370 1371 +3 1221 1371 1372 +3 1221 1372 1222 +3 1222 1372 1373 +3 1222 1373 1223 +3 1223 1373 1374 +3 1223 1374 1224 +3 1224 1374 1375 +3 1224 1375 1225 +3 1225 1375 1376 +3 1225 1376 1226 +3 1226 1376 1377 +3 1226 1377 1227 +3 1227 1377 1378 +3 1227 1378 1228 +3 1228 1378 1379 +3 1228 1379 1229 +3 1229 1379 1380 +3 1229 1380 1230 +3 1230 1380 1381 +3 1230 1381 1231 +3 1231 1381 1382 +3 1231 1382 1232 +3 1232 1382 1383 +3 1232 1383 1233 +3 1233 1383 1384 +3 1233 1384 1234 +3 1234 1384 1385 +3 1234 1385 1235 +3 1235 1385 1386 +3 1235 1386 1236 +3 1236 1386 1387 +3 1236 1387 1388 +3 1236 1388 1237 +3 1237 1388 1389 +3 1237 1389 1238 +3 1238 1389 1390 +3 1238 1390 1239 +3 1239 1390 1391 +3 1239 1391 1240 +3 1240 1391 1392 +3 1240 1392 1393 +3 1240 1393 1241 +3 1241 1393 1394 +3 1241 1394 1242 +3 1242 1394 1395 +3 1242 1395 1243 +3 1243 1395 1396 +3 1243 1396 1244 +3 1244 1396 1245 +3 1245 1396 1397 +3 1245 1397 1246 +3 1246 1397 1247 +3 1247 1397 1398 +3 1247 1398 1399 +3 1247 1399 1248 +3 1248 1399 1400 +3 1248 1400 1401 +3 1248 1401 1249 +3 1249 1401 1402 +3 1249 1402 1250 +3 1250 1402 1403 +3 1250 1403 1404 +3 1250 1404 1251 +3 1251 1404 1252 +3 1252 1404 1254 +3 1254 1404 1405 +3 1254 1405 1406 +3 1254 1406 1255 +3 1255 1406 1407 +3 1255 1407 1256 +3 1256 1407 1408 +3 1256 1408 1257 +3 1257 1408 1409 +3 1257 1409 1258 +3 1258 1409 1410 +3 1258 1410 1411 +3 1258 1411 1260 +3 1260 1411 1412 +3 1260 1412 1261 +3 1261 1412 1262 +3 1262 1412 1413 +3 1262 1413 1263 +3 1263 1413 1414 +3 1263 1414 1264 +3 1264 1414 1415 +3 1264 1415 1416 +3 1264 1416 1266 +3 1266 1416 1417 +3 1266 1417 1267 +3 1267 1417 1418 +3 1267 1418 1268 +3 1268 1418 1419 +3 1268 1419 1269 +3 1269 1419 1420 +3 1269 1420 1421 +3 1269 1421 1422 +3 1269 1422 1270 +3 1270 1422 1271 +3 1271 1422 1423 +3 1271 1423 1272 +3 1272 1423 1273 +3 1273 1423 1424 +3 1273 1424 1425 +3 1273 1425 1274 +3 1274 1425 1426 +3 1274 1426 1427 +3 1274 1427 1275 +3 1275 1427 1428 +3 1275 1428 1276 +3 1276 1428 1429 +3 1276 1429 1277 +3 1277 1429 1430 +3 1277 1430 1278 +3 1278 1430 1431 +3 1278 1431 1279 +3 1279 1431 1432 +3 1279 1432 1280 +3 1280 1432 1433 +3 1280 1433 1281 +3 1281 1433 1282 +3 1282 1433 1434 +3 1282 1434 1283 +3 1283 1434 1435 +3 1283 1435 1436 +3 1283 1436 1284 +3 1284 1436 1437 +3 1284 1437 1438 +3 1284 1438 1285 +3 1285 1438 1439 +3 1285 1439 1440 +3 1285 1440 1441 +3 1285 1441 1286 +3 1286 1441 1288 +3 1288 1441 1442 +3 1288 1442 1289 +3 1289 1442 1443 +3 1289 1443 1290 +3 1290 1443 1444 +3 1290 1444 1291 +3 1291 1444 1445 +3 1291 1445 1292 +3 1292 1445 1446 +3 1292 1446 1294 +3 1294 1446 1295 +3 1295 1446 1447 +3 1295 1447 1296 +3 1296 1447 1448 +3 1296 1448 1297 +3 1297 1448 1449 +3 1297 1449 1450 +3 1297 1450 1298 +3 1298 1450 1451 +3 1298 1451 1299 +3 1299 1451 1452 +3 1299 1452 1300 +3 1300 1452 1301 +3 1301 1452 1453 +3 1301 1453 1454 +3 1301 1454 1302 +3 1302 1454 1455 +3 1302 1455 1303 +3 1303 1455 1456 +3 1303 1456 1457 +3 1303 1457 1304 +3 1304 1457 1458 +3 1304 1458 1459 +3 1304 1459 1305 +3 1305 1459 1306 +3 1306 1459 1460 +3 1306 1460 1461 +3 1306 1461 1462 +3 1306 1462 1307 +3 1307 1462 1463 +3 1307 1463 1308 +3 1308 1463 1309 +3 1309 1463 1464 +3 1309 1464 1310 +3 1310 1464 1465 +3 1310 1465 1466 +3 1310 1466 1311 +3 1311 1466 1312 +3 1312 1466 1467 +3 1312 1467 1313 +3 1313 1467 1468 +3 1313 1468 1314 +3 1314 1468 1469 +3 1314 1469 1470 +3 1314 1470 1315 +3 1315 1470 1471 +3 1315 1471 1316 +3 1316 1471 1317 +3 1317 1471 1472 +3 1317 1472 1318 +3 1318 1472 1473 +3 1318 1473 1319 +3 1319 1473 1474 +3 1319 1474 1320 +3 1320 1474 1475 +3 1320 1475 1321 +3 1321 1475 1476 +3 1321 1476 1322 +3 1322 1476 1477 +3 1322 1477 1323 +3 1323 1477 1478 +3 1323 1478 1479 +3 1323 1479 1324 +3 1324 1479 1480 +3 1324 1480 1325 +3 1325 1480 1481 +3 1325 1481 1326 +3 1326 1481 1482 +3 1326 1482 1327 +3 1327 1482 1483 +3 1327 1483 1328 +3 1328 1483 1484 +3 1328 1484 1329 +3 1329 1484 1485 +3 1329 1485 1330 +3 1330 1485 1486 +3 1330 1486 1331 +3 1331 1486 1487 +3 1331 1487 1332 +3 1332 1487 1488 +3 1332 1488 1333 +3 1333 1488 1489 +3 1333 1489 1334 +3 1334 1489 1490 +3 1334 1490 1335 +3 1335 1490 1491 +3 1335 1491 1336 +3 1336 1491 1492 +3 1336 1492 1337 +3 1337 1492 1493 +3 1337 1493 1338 +3 1338 1493 1494 +3 1338 1494 1339 +3 1339 1494 1495 +3 1339 1495 1340 +3 1340 1495 1341 +3 1341 1495 1496 +3 1341 1496 1342 +3 1342 1496 1497 +3 1342 1497 1343 +3 1343 1497 1498 +3 1343 1498 1499 +3 1343 1499 1344 +3 1344 1499 1500 +3 1344 1500 1345 +3 1345 1500 1346 +3 1346 1500 1501 +3 1346 1501 1347 +3 1347 1501 1502 +3 1347 1502 1503 +3 1347 1503 1348 +3 1348 1503 1349 +3 1349 1503 1504 +3 1349 1504 1505 +3 1349 1505 1350 +3 1350 1505 1506 +3 1350 1506 1351 +3 1351 1506 1507 +3 1351 1507 1352 +3 1352 1507 1508 +3 1352 1508 1353 +3 1353 1508 1509 +3 1353 1509 1354 +3 1354 1509 1510 +3 1354 1510 1355 +3 1355 1510 1511 +3 1355 1511 1356 +3 1356 1511 1357 +3 1357 1511 1512 +3 1357 1512 1359 +3 1359 1512 1360 +3 1360 1512 1513 +3 1360 1513 1514 +3 1360 1514 1361 +3 1361 1514 1515 +3 1361 1515 1362 +3 1362 1515 1516 +3 1362 1516 1363 +3 1363 1516 1517 +3 1363 1517 1364 +3 1364 1517 1518 +3 1364 1518 1519 +3 1364 1519 1520 +3 1364 1520 1365 +3 1365 1520 1366 +3 1366 1520 1521 +3 1366 1521 1522 +3 1366 1522 1523 +3 1366 1523 1367 +3 1367 1523 1524 +3 1367 1524 1369 +3 1369 1524 1525 +3 1369 1525 1370 +3 1370 1525 1371 +3 1371 1525 1526 +3 1371 1526 1527 +3 1371 1527 1372 +3 1372 1527 1528 +3 1372 1528 1373 +3 1373 1528 1529 +3 1373 1529 1374 +3 1374 1529 1530 +3 1374 1530 1375 +3 1375 1530 1531 +3 1375 1531 1376 +3 1376 1531 1532 +3 1376 1532 1377 +3 1377 1532 1533 +3 1377 1533 1378 +3 1378 1533 1534 +3 1378 1534 1379 +3 1379 1534 1535 +3 1379 1535 1380 +3 1380 1535 1536 +3 1380 1536 1381 +3 1381 1536 1537 +3 1381 1537 1382 +3 1382 1537 1538 +3 1382 1538 1383 +3 1383 1538 1539 +3 1383 1539 1384 +3 1384 1539 1540 +3 1384 1540 1385 +3 1385 1540 1541 +3 1385 1541 1386 +3 1386 1541 1542 +3 1386 1542 1387 +3 1387 1542 1543 +3 1387 1543 1544 +3 1387 1544 1388 +3 1388 1544 1545 +3 1388 1545 1389 +3 1389 1545 1390 +3 1390 1545 1546 +3 1390 1546 1391 +3 1391 1546 1547 +3 1391 1547 1548 +3 1391 1548 1392 +3 1392 1548 1549 +3 1392 1549 1550 +3 1392 1550 1393 +3 1393 1550 1551 +3 1393 1551 1394 +3 1394 1551 1552 +3 1394 1552 1553 +3 1394 1553 1395 +3 1395 1553 1396 +3 1396 1553 1554 +3 1396 1554 1397 +3 1397 1554 1555 +3 1397 1555 1398 +3 1398 1555 1399 +3 1399 1555 1556 +3 1399 1556 1400 +3 1400 1556 1557 +3 1400 1557 1558 +3 1400 1558 1401 +3 1401 1558 1559 +3 1401 1559 1402 +3 1402 1559 1560 +3 1402 1560 1403 +3 1403 1560 1561 +3 1403 1561 1405 +3 1405 1561 1562 +3 1405 1562 1406 +3 1406 1562 1563 +3 1406 1563 1407 +3 1407 1563 1564 +3 1407 1564 1408 +3 1408 1564 1565 +3 1408 1565 1409 +3 1409 1565 1566 +3 1409 1566 1410 +3 1410 1566 1567 +3 1410 1567 1568 +3 1410 1568 1411 +3 1411 1568 1412 +3 1412 1568 1569 +3 1412 1569 1413 +3 1413 1569 1570 +3 1413 1570 1414 +3 1414 1570 1571 +3 1414 1571 1415 +3 1415 1571 1572 +3 1415 1572 1573 +3 1415 1573 1416 +3 1416 1573 1574 +3 1416 1574 1417 +3 1417 1574 1575 +3 1417 1575 1418 +3 1418 1575 1576 +3 1418 1576 1419 +3 1419 1576 1577 +3 1419 1577 1420 +3 1420 1577 1578 +3 1420 1578 1579 +3 1420 1579 1421 +3 1421 1579 1580 +3 1421 1580 1422 +3 1422 1580 1423 +3 1423 1580 1424 +3 1424 1580 1581 +3 1424 1581 1582 +3 1424 1582 1583 +3 1424 1583 1425 +3 1425 1583 1584 +3 1425 1584 1426 +3 1426 1584 1585 +3 1426 1585 1586 +3 1426 1586 1427 +3 1427 1586 1587 +3 1427 1587 1428 +3 1428 1587 1588 +3 1428 1588 1429 +3 1429 1588 1589 +3 1429 1589 1430 +3 1430 1589 1431 +3 1431 1589 1590 +3 1431 1590 1591 +3 1431 1591 1432 +3 1432 1591 1592 +3 1432 1592 1433 +3 1433 1592 1434 +3 1434 1592 1593 +3 1434 1593 1435 +3 1435 1593 1594 +3 1435 1594 1436 +3 1436 1594 1595 +3 1436 1595 1596 +3 1436 1596 1437 +3 1437 1596 1597 +3 1437 1597 1598 +3 1437 1598 1438 +3 1438 1598 1439 +3 1439 1598 1599 +3 1439 1599 1600 +3 1439 1600 1440 +3 1440 1600 1601 +3 1440 1601 1441 +3 1441 1601 1602 +3 1441 1602 1442 +3 1442 1602 1603 +3 1442 1603 1604 +3 1442 1604 1443 +3 1443 1604 1605 +3 1443 1605 1606 +3 1443 1606 1444 +3 1444 1606 1445 +3 1445 1606 1607 +3 1445 1607 1446 +3 1446 1607 1447 +3 1447 1607 1608 +3 1447 1608 1448 +3 1448 1608 1609 +3 1448 1609 1449 +3 1449 1609 1610 +3 1449 1610 1450 +3 1450 1610 1611 +3 1450 1611 1612 +3 1450 1612 1451 +3 1451 1612 1613 +3 1451 1613 1452 +3 1452 1613 1614 +3 1452 1614 1453 +3 1453 1614 1615 +3 1453 1615 1616 +3 1453 1616 1454 +3 1454 1616 1617 +3 1454 1617 1455 +3 1455 1617 1618 +3 1455 1618 1456 +3 1456 1618 1619 +3 1456 1619 1620 +3 1456 1620 1621 +3 1456 1621 1457 +3 1457 1621 1458 +3 1458 1621 1622 +3 1458 1622 1459 +3 1459 1622 1460 +3 1460 1622 1623 +3 1460 1623 1624 +3 1460 1624 1461 +3 1461 1624 1625 +3 1461 1625 1626 +3 1461 1626 1627 +3 1461 1627 1462 +3 1462 1627 1463 +3 1463 1627 1464 +3 1464 1627 1628 +3 1464 1628 1629 +3 1464 1629 1465 +3 1465 1629 1630 +3 1465 1630 1466 +3 1466 1630 1467 +3 1467 1630 1631 +3 1467 1631 1468 +3 1468 1631 1632 +3 1468 1632 1469 +3 1469 1632 1633 +3 1469 1633 1634 +3 1469 1634 1470 +3 1470 1634 1635 +3 1470 1635 1471 +3 1471 1635 1472 +3 1472 1635 1636 +3 1472 1636 1473 +3 1473 1636 1637 +3 1473 1637 1474 +3 1474 1637 1638 +3 1474 1638 1475 +3 1475 1638 1639 +3 1475 1639 1476 +3 1476 1639 1640 +3 1476 1640 1477 +3 1477 1640 1641 +3 1477 1641 1478 +3 1478 1641 1642 +3 1478 1642 1643 +3 1478 1643 1479 +3 1479 1643 1644 +3 1479 1644 1480 +3 1480 1644 1645 +3 1480 1645 1481 +3 1481 1645 1646 +3 1481 1646 1482 +3 1482 1646 1647 +3 1482 1647 1483 +3 1483 1647 1648 +3 1483 1648 1484 +3 1484 1648 1649 +3 1484 1649 1485 +3 1485 1649 1650 +3 1485 1650 1486 +3 1486 1650 1651 +3 1486 1651 1487 +3 1487 1651 1652 +3 1487 1652 1488 +3 1488 1652 1653 +3 1488 1653 1489 +3 1489 1653 1654 +3 1489 1654 1490 +3 1490 1654 1655 +3 1490 1655 1491 +3 1491 1655 1656 +3 1491 1656 1492 +3 1492 1656 1657 +3 1492 1657 1493 +3 1493 1657 1658 +3 1493 1658 1494 +3 1494 1658 1659 +3 1494 1659 1495 +3 1495 1659 1660 +3 1495 1660 1496 +3 1496 1660 1661 +3 1496 1661 1497 +3 1497 1661 1662 +3 1497 1662 1498 +3 1498 1662 1663 +3 1498 1663 1664 +3 1498 1664 1499 +3 1499 1664 1665 +3 1499 1665 1500 +3 1500 1665 1501 +3 1501 1665 1666 +3 1501 1666 1502 +3 1502 1666 1667 +3 1502 1667 1668 +3 1502 1668 1503 +3 1503 1668 1504 +3 1504 1668 1669 +3 1504 1669 1670 +3 1504 1670 1505 +3 1505 1670 1671 +3 1505 1671 1506 +3 1506 1671 1672 +3 1506 1672 1507 +3 1507 1672 1673 +3 1507 1673 1508 +3 1508 1673 1674 +3 1508 1674 1509 +3 1509 1674 1675 +3 1509 1675 1510 +3 1510 1675 1676 +3 1510 1676 1511 +3 1511 1676 1512 +3 1512 1676 1513 +3 1513 1676 1677 +3 1513 1677 1678 +3 1513 1678 1514 +3 1514 1678 1679 +3 1514 1679 1515 +3 1515 1679 1680 +3 1515 1680 1516 +3 1516 1680 1681 +3 1516 1681 1517 +3 1517 1681 1682 +3 1517 1682 1518 +3 1518 1682 1683 +3 1518 1683 1684 +3 1518 1684 1519 +3 1519 1684 1685 +3 1519 1685 1521 +3 1521 1685 1686 +3 1521 1686 1522 +3 1522 1686 1687 +3 1522 1687 1688 +3 1522 1688 1523 +3 1523 1688 1689 +3 1523 1689 1524 +3 1524 1689 1690 +3 1524 1690 1525 +3 1525 1690 1691 +3 1525 1691 1526 +3 1526 1691 1692 +3 1526 1692 1693 +3 1526 1693 1527 +3 1527 1693 1694 +3 1527 1694 1528 +3 1528 1694 1695 +3 1528 1695 1529 +3 1529 1695 1696 +3 1529 1696 1530 +3 1530 1696 1697 +3 1530 1697 1531 +3 1531 1697 1698 +3 1531 1698 1532 +3 1532 1698 1699 +3 1532 1699 1533 +3 1533 1699 1700 +3 1533 1700 1534 +3 1534 1700 1701 +3 1534 1701 1535 +3 1535 1701 1702 +3 1535 1702 1536 +3 1536 1702 1703 +3 1536 1703 1537 +3 1537 1703 1704 +3 1537 1704 1538 +3 1538 1704 1705 +3 1538 1705 1539 +3 1539 1705 1706 +3 1539 1706 1540 +3 1540 1706 1707 +3 1540 1707 1541 +3 1541 1707 1708 +3 1541 1708 1542 +3 1542 1708 1709 +3 1542 1709 1543 +3 1543 1709 1710 +3 1543 1710 1544 +3 1544 1710 1711 +3 1544 1711 1546 +3 1546 1711 1547 +3 1547 1711 1712 +3 1547 1712 1713 +3 1547 1713 1548 +3 1548 1713 1714 +3 1548 1714 1549 +3 1549 1714 1715 +3 1549 1715 1716 +3 1549 1716 1550 +3 1550 1716 1717 +3 1550 1717 1718 +3 1550 1718 1551 +3 1551 1718 1719 +3 1551 1719 1552 +3 1552 1719 1720 +3 1552 1720 1553 +3 1553 1720 1721 +3 1553 1721 1554 +3 1554 1721 1555 +3 1555 1721 1556 +3 1556 1721 1722 +3 1556 1722 1557 +3 1557 1722 1723 +3 1557 1723 1724 +3 1557 1724 1558 +3 1558 1724 1725 +3 1558 1725 1559 +3 1559 1725 1726 +3 1559 1726 1560 +3 1560 1726 1727 +3 1560 1727 1728 +3 1560 1728 1561 +3 1561 1728 1562 +3 1562 1728 1729 +3 1562 1729 1563 +3 1563 1729 1730 +3 1563 1730 1564 +3 1564 1730 1731 +3 1564 1731 1565 +3 1565 1731 1732 +3 1565 1732 1566 +3 1566 1732 1733 +3 1566 1733 1567 +3 1567 1733 1734 +3 1567 1734 1735 +3 1567 1735 1568 +3 1568 1735 1569 +3 1569 1735 1736 +3 1569 1736 1570 +3 1570 1736 1737 +3 1570 1737 1571 +3 1571 1737 1738 +3 1571 1738 1572 +3 1572 1738 1739 +3 1572 1739 1740 +3 1572 1740 1573 +3 1573 1740 1574 +3 1574 1740 1741 +3 1574 1741 1575 +3 1575 1741 1742 +3 1575 1742 1576 +3 1576 1742 1743 +3 1576 1743 1577 +3 1577 1743 1744 +3 1577 1744 1578 +3 1578 1744 1745 +3 1578 1745 1746 +3 1578 1746 1747 +3 1578 1747 1579 +3 1579 1747 1580 +3 1580 1747 1581 +3 1581 1747 1748 +3 1581 1748 1582 +3 1582 1748 1749 +3 1582 1749 1750 +3 1582 1750 1583 +3 1583 1750 1584 +3 1584 1750 1751 +3 1584 1751 1585 +3 1585 1751 1752 +3 1585 1752 1753 +3 1585 1753 1586 +3 1586 1753 1754 +3 1586 1754 1587 +3 1587 1754 1755 +3 1587 1755 1588 +3 1588 1755 1756 +3 1588 1756 1589 +3 1589 1756 1590 +3 1590 1756 1757 +3 1590 1757 1758 +3 1590 1758 1591 +3 1591 1758 1759 +3 1591 1759 1592 +3 1592 1759 1593 +3 1593 1759 1760 +3 1593 1760 1761 +3 1593 1761 1594 +3 1594 1761 1595 +3 1595 1761 1762 +3 1595 1762 1596 +3 1596 1762 1763 +3 1596 1763 1764 +3 1596 1764 1597 +3 1597 1764 1765 +3 1597 1765 1766 +3 1597 1766 1598 +3 1598 1766 1599 +3 1599 1766 1767 +3 1599 1767 1768 +3 1599 1768 1600 +3 1600 1768 1769 +3 1600 1769 1601 +3 1601 1769 1770 +3 1601 1770 1603 +3 1603 1770 1771 +3 1603 1771 1772 +3 1603 1772 1604 +3 1604 1772 1773 +3 1604 1773 1774 +3 1604 1774 1605 +3 1605 1774 1775 +3 1605 1775 1606 +3 1606 1775 1608 +3 1608 1775 1609 +3 1609 1775 1776 +3 1609 1776 1777 +3 1609 1777 1610 +3 1610 1777 1778 +3 1610 1778 1611 +3 1611 1778 1779 +3 1611 1779 1780 +3 1611 1780 1612 +3 1612 1780 1613 +3 1613 1780 1781 +3 1613 1781 1614 +3 1614 1781 1782 +3 1614 1782 1615 +3 1615 1782 1783 +3 1615 1783 1784 +3 1615 1784 1616 +3 1616 1784 1785 +3 1616 1785 1617 +3 1617 1785 1786 +3 1617 1786 1618 +3 1618 1786 1787 +3 1618 1787 1619 +3 1619 1787 1788 +3 1619 1788 1789 +3 1619 1789 1620 +3 1620 1789 1790 +3 1620 1790 1621 +3 1621 1790 1791 +3 1621 1791 1622 +3 1622 1791 1623 +3 1623 1791 1792 +3 1623 1792 1793 +3 1623 1793 1624 +3 1624 1793 1794 +3 1624 1794 1625 +3 1625 1794 1795 +3 1625 1795 1796 +3 1625 1796 1626 +3 1626 1796 1797 +3 1626 1797 1628 +3 1628 1797 1629 +3 1629 1797 1798 +3 1629 1798 1630 +3 1630 1798 1631 +3 1631 1798 1799 +3 1631 1799 1632 +3 1632 1799 1633 +3 1633 1799 1800 +3 1633 1800 1801 +3 1633 1801 1634 +3 1634 1801 1802 +3 1634 1802 1635 +3 1635 1802 1636 +3 1636 1802 1803 +3 1636 1803 1637 +3 1637 1803 1804 +3 1637 1804 1638 +3 1638 1804 1805 +3 1638 1805 1639 +3 1639 1805 1806 +3 1639 1806 1640 +3 1640 1806 1807 +3 1640 1807 1641 +3 1641 1807 1808 +3 1641 1808 1642 +3 1642 1808 1809 +3 1642 1809 1810 +3 1642 1810 1643 +3 1643 1810 1811 +3 1643 1811 1644 +3 1644 1811 1812 +3 1644 1812 1645 +3 1645 1812 1813 +3 1645 1813 1646 +3 1646 1813 1814 +3 1646 1814 1647 +3 1647 1814 1815 +3 1647 1815 1648 +3 1648 1815 1816 +3 1648 1816 1649 +3 1649 1816 1817 +3 1649 1817 1650 +3 1650 1817 1818 +3 1650 1818 1651 +3 1651 1818 1819 +3 1651 1819 1652 +3 1652 1819 1820 +3 1652 1820 1653 +3 1653 1820 1821 +3 1653 1821 1654 +3 1654 1821 1822 +3 1654 1822 1655 +3 1655 1822 1823 +3 1655 1823 1656 +3 1656 1823 1824 +3 1656 1824 1657 +3 1657 1824 1825 +3 1657 1825 1658 +3 1658 1825 1826 +3 1658 1826 1659 +3 1659 1826 1827 +3 1659 1827 1660 +3 1660 1827 1828 +3 1660 1828 1661 +3 1661 1828 1829 +3 1661 1829 1662 +3 1662 1829 1830 +3 1662 1830 1663 +3 1663 1830 1831 +3 1663 1831 1832 +3 1663 1832 1664 +3 1664 1832 1833 +3 1664 1833 1665 +3 1665 1833 1666 +3 1666 1833 1834 +3 1666 1834 1667 +3 1667 1834 1835 +3 1667 1835 1836 +3 1667 1836 1668 +3 1668 1836 1669 +3 1669 1836 1837 +3 1669 1837 1838 +3 1669 1838 1670 +3 1670 1838 1839 +3 1670 1839 1671 +3 1671 1839 1840 +3 1671 1840 1672 +3 1672 1840 1841 +3 1672 1841 1673 +3 1673 1841 1842 +3 1673 1842 1674 +3 1674 1842 1843 +3 1674 1843 1675 +3 1675 1843 1677 +3 1677 1843 1844 +3 1677 1844 1678 +3 1678 1844 1679 +3 1679 1844 1845 +3 1679 1845 1846 +3 1679 1846 1680 +3 1680 1846 1681 +3 1681 1846 1847 +3 1681 1847 1682 +3 1682 1847 1848 +3 1682 1848 1683 +3 1683 1848 1849 +3 1683 1849 1850 +3 1683 1850 1684 +3 1684 1850 1851 +3 1684 1851 1852 +3 1684 1852 1685 +3 1685 1852 1853 +3 1685 1853 1686 +3 1686 1853 1687 +3 1687 1853 1854 +3 1687 1854 1855 +3 1687 1855 1856 +3 1687 1856 1688 +3 1688 1856 1857 +3 1688 1857 1689 +3 1689 1857 1690 +3 1690 1857 1691 +3 1691 1857 1858 +3 1691 1858 1692 +3 1692 1858 1859 +3 1692 1859 1860 +3 1692 1860 1693 +3 1693 1860 1861 +3 1693 1861 1694 +3 1694 1861 1862 +3 1694 1862 1695 +3 1695 1862 1863 +3 1695 1863 1696 +3 1696 1863 1864 +3 1696 1864 1697 +3 1697 1864 1865 +3 1697 1865 1698 +3 1698 1865 1866 +3 1698 1866 1699 +3 1699 1866 1867 +3 1699 1867 1700 +3 1700 1867 1868 +3 1700 1868 1701 +3 1701 1868 1869 +3 1701 1869 1702 +3 1702 1869 1870 +3 1702 1870 1703 +3 1703 1870 1871 +3 1703 1871 1704 +3 1704 1871 1872 +3 1704 1872 1705 +3 1705 1872 1873 +3 1705 1873 1706 +3 1706 1873 1874 +3 1706 1874 1707 +3 1707 1874 1875 +3 1707 1875 1708 +3 1708 1875 1876 +3 1708 1876 1709 +3 1709 1876 1877 +3 1709 1877 1710 +3 1710 1877 1878 +3 1710 1878 1879 +3 1710 1879 1711 +3 1711 1879 1712 +3 1712 1879 1880 +3 1712 1880 1881 +3 1712 1881 1713 +3 1713 1881 1882 +3 1713 1882 1714 +3 1714 1882 1883 +3 1714 1883 1715 +3 1715 1883 1884 +3 1715 1884 1885 +3 1715 1885 1716 +3 1716 1885 1886 +3 1716 1886 1717 +3 1717 1886 1887 +3 1717 1887 1888 +3 1717 1888 1718 +3 1718 1888 1719 +3 1719 1888 1889 +3 1719 1889 1890 +3 1719 1890 1720 +3 1720 1890 1722 +3 1722 1890 1891 +3 1722 1891 1723 +3 1723 1891 1892 +3 1723 1892 1893 +3 1723 1893 1724 +3 1724 1893 1894 +3 1724 1894 1725 +3 1725 1894 1895 +3 1725 1895 1726 +3 1726 1895 1896 +3 1726 1896 1897 +3 1726 1897 1727 +3 1727 1897 1898 +3 1727 1898 1728 +3 1728 1898 1729 +3 1729 1898 1899 +3 1729 1899 1730 +3 1730 1899 1900 +3 1730 1900 1731 +3 1731 1900 1901 +3 1731 1901 1732 +3 1732 1901 1902 +3 1732 1902 1733 +3 1733 1902 1903 +3 1733 1903 1734 +3 1734 1903 1904 +3 1734 1904 1905 +3 1734 1905 1735 +3 1735 1905 1736 +3 1736 1905 1906 +3 1736 1906 1737 +3 1737 1906 1907 +3 1737 1907 1738 +3 1738 1907 1908 +3 1738 1908 1739 +3 1739 1908 1909 +3 1739 1909 1910 +3 1739 1910 1740 +3 1740 1910 1741 +3 1741 1910 1911 +3 1741 1911 1742 +3 1742 1911 1912 +3 1742 1912 1743 +3 1743 1912 1913 +3 1743 1913 1744 +3 1744 1913 1914 +3 1744 1914 1745 +3 1745 1914 1915 +3 1745 1915 1916 +3 1745 1916 1746 +3 1746 1916 1917 +3 1746 1917 1747 +3 1747 1917 1748 +3 1748 1917 1918 +3 1748 1918 1919 +3 1748 1919 1749 +3 1749 1919 1920 +3 1749 1920 1750 +3 1750 1920 1751 +3 1751 1920 1921 +3 1751 1921 1752 +3 1752 1921 1922 +3 1752 1922 1753 +3 1753 1922 1923 +3 1753 1923 1924 +3 1753 1924 1754 +3 1754 1924 1925 +3 1754 1925 1755 +3 1755 1925 1926 +3 1755 1926 1756 +3 1756 1926 1757 +3 1757 1926 1927 +3 1757 1927 1928 +3 1757 1928 1758 +3 1758 1928 1929 +3 1758 1929 1759 +3 1759 1929 1930 +3 1759 1930 1760 +3 1760 1930 1761 +3 1761 1930 1762 +3 1762 1930 1763 +3 1763 1930 1931 +3 1763 1931 1932 +3 1763 1932 1764 +3 1764 1932 1933 +3 1764 1933 1765 +3 1765 1933 1934 +3 1765 1934 1935 +3 1765 1935 1766 +3 1766 1935 1767 +3 1767 1935 1936 +3 1767 1936 1937 +3 1767 1937 1768 +3 1768 1937 1938 +3 1768 1938 1769 +3 1769 1938 1939 +3 1769 1939 1770 +3 1770 1939 1771 +3 1771 1939 1940 +3 1771 1940 1941 +3 1771 1941 1772 +3 1772 1941 1942 +3 1772 1942 1773 +3 1773 1942 1774 +3 1774 1942 1943 +3 1774 1943 1776 +3 1776 1943 1777 +3 1777 1943 1944 +3 1777 1944 1945 +3 1777 1945 1946 +3 1777 1946 1778 +3 1778 1946 1947 +3 1778 1947 1948 +3 1778 1948 1779 +3 1779 1948 1949 +3 1779 1949 1780 +3 1780 1949 1950 +3 1780 1950 1781 +3 1781 1950 1951 +3 1781 1951 1782 +3 1782 1951 1783 +3 1783 1951 1952 +3 1783 1952 1953 +3 1783 1953 1784 +3 1784 1953 1954 +3 1784 1954 1785 +3 1785 1954 1955 +3 1785 1955 1786 +3 1786 1955 1956 +3 1786 1956 1787 +3 1787 1956 1957 +3 1787 1957 1788 +3 1788 1957 1958 +3 1788 1958 1959 +3 1788 1959 1789 +3 1789 1959 1960 +3 1789 1960 1790 +3 1790 1960 1961 +3 1790 1961 1791 +3 1791 1961 1792 +3 1792 1961 1962 +3 1792 1962 1963 +3 1792 1963 1793 +3 1793 1963 1964 +3 1793 1964 1794 +3 1794 1964 1965 +3 1794 1965 1795 +3 1795 1965 1966 +3 1795 1966 1967 +3 1795 1967 1968 +3 1795 1968 1796 +3 1796 1968 1969 +3 1796 1969 1797 +3 1797 1969 1799 +3 1799 1969 1800 +3 1800 1969 1970 +3 1800 1970 1971 +3 1800 1971 1801 +3 1801 1971 1972 +3 1801 1972 1802 +3 1802 1972 1803 +3 1803 1972 1973 +3 1803 1973 1804 +3 1804 1973 1974 +3 1804 1974 1805 +3 1805 1974 1975 +3 1805 1975 1806 +3 1806 1975 1976 +3 1806 1976 1807 +3 1807 1976 1977 +3 1807 1977 1808 +3 1808 1977 1978 +3 1808 1978 1809 +3 1809 1978 1979 +3 1809 1979 1980 +3 1809 1980 1810 +3 1810 1980 1981 +3 1810 1981 1811 +3 1811 1981 1982 +3 1811 1982 1812 +3 1812 1982 1983 +3 1812 1983 1813 +3 1813 1983 1984 +3 1813 1984 1814 +3 1814 1984 1985 +3 1814 1985 1815 +3 1815 1985 1986 +3 1815 1986 1816 +3 1816 1986 1987 +3 1816 1987 1817 +3 1817 1987 1988 +3 1817 1988 1818 +3 1818 1988 1989 +3 1818 1989 1819 +3 1819 1989 1990 +3 1819 1990 1820 +3 1820 1990 1991 +3 1820 1991 1821 +3 1821 1991 1992 +3 1821 1992 1822 +3 1822 1992 1993 +3 1822 1993 1823 +3 1823 1993 1994 +3 1823 1994 1824 +3 1824 1994 1995 +3 1824 1995 1825 +3 1825 1995 1996 +3 1825 1996 1826 +3 1826 1996 1997 +3 1826 1997 1827 +3 1827 1997 1998 +3 1827 1998 1828 +3 1828 1998 1999 +3 1828 1999 1829 +3 1829 1999 2000 +3 1829 2000 1830 +3 1830 2000 2001 +3 1830 2001 1831 +3 1831 2001 2002 +3 1831 2002 2003 +3 1831 2003 1832 +3 1832 2003 2004 +3 1832 2004 1833 +3 1833 2004 1834 +3 1834 2004 2005 +3 1834 2005 1835 +3 1835 2005 2006 +3 1835 2006 2007 +3 1835 2007 1836 +3 1836 2007 1837 +3 1837 2007 2008 +3 1837 2008 2009 +3 1837 2009 1838 +3 1838 2009 2010 +3 1838 2010 1839 +3 1839 2010 2011 +3 1839 2011 1840 +3 1840 2011 2012 +3 1840 2012 1841 +3 1841 2012 2013 +3 1841 2013 2014 +3 1841 2014 1842 +3 1842 2014 1843 +3 1843 2014 1844 +3 1844 2014 2015 +3 1844 2015 1845 +3 1845 2015 2016 +3 1845 2016 1846 +3 1846 2016 1847 +3 1847 2016 2017 +3 1847 2017 1848 +3 1848 2017 2018 +3 1848 2018 1849 +3 1849 2018 2019 +3 1849 2019 1850 +3 1850 2019 2020 +3 1850 2020 2021 +3 1850 2021 1851 +3 1851 2021 2022 +3 1851 2022 2023 +3 1851 2023 2024 +3 1851 2024 1852 +3 1852 2024 1853 +3 1853 2024 2025 +3 1853 2025 2026 +3 1853 2026 1854 +3 1854 2026 2027 +3 1854 2027 1855 +3 1855 2027 2028 +3 1855 2028 1856 +3 1856 2028 2029 +3 1856 2029 1857 +3 1857 2029 1858 +3 1858 2029 2030 +3 1858 2030 1859 +3 1859 2030 2031 +3 1859 2031 2032 +3 1859 2032 1860 +3 1860 2032 2033 +3 1860 2033 1861 +3 1861 2033 2034 +3 1861 2034 1862 +3 1862 2034 2035 +3 1862 2035 1863 +3 1863 2035 2036 +3 1863 2036 1864 +3 1864 2036 2037 +3 1864 2037 1865 +3 1865 2037 2038 +3 1865 2038 1866 +3 1866 2038 2039 +3 1866 2039 1867 +3 1867 2039 2040 +3 1867 2040 1868 +3 1868 2040 2041 +3 1868 2041 1869 +3 1869 2041 2042 +3 1869 2042 1870 +3 1870 2042 2043 +3 1870 2043 1871 +3 1871 2043 2044 +3 1871 2044 1872 +3 1872 2044 2045 +3 1872 2045 1873 +3 1873 2045 2046 +3 1873 2046 1874 +3 1874 2046 2047 +3 1874 2047 1875 +3 1875 2047 2048 +3 1875 2048 1876 +3 1876 2048 2049 +3 1876 2049 1877 +3 1877 2049 2050 +3 1877 2050 1878 +3 1878 2050 2051 +3 1878 2051 2052 +3 1878 2052 1879 +3 1879 2052 1880 +3 1880 2052 2053 +3 1880 2053 2054 +3 1880 2054 1881 +3 1881 2054 2055 +3 1881 2055 1882 +3 1882 2055 2056 +3 1882 2056 1883 +3 1883 2056 2057 +3 1883 2057 1884 +3 1884 2057 2058 +3 1884 2058 2059 +3 1884 2059 1885 +3 1885 2059 2060 +3 1885 2060 1886 +3 1886 2060 2061 +3 1886 2061 1887 +3 1887 2061 2062 +3 1887 2062 1888 +3 1888 2062 2063 +3 1888 2063 1889 +3 1889 2063 2064 +3 1889 2064 1891 +3 1891 2064 2065 +3 1891 2065 1892 +3 1892 2065 2066 +3 1892 2066 2067 +3 1892 2067 1893 +3 1893 2067 2068 +3 1893 2068 1894 +3 1894 2068 2069 +3 1894 2069 2070 +3 1894 2070 1895 +3 1895 2070 2071 +3 1895 2071 1896 +3 1896 2071 2072 +3 1896 2072 1897 +3 1897 2072 2073 +3 1897 2073 1898 +3 1898 2073 1899 +3 1899 2073 2074 +3 1899 2074 1900 +3 1900 2074 2075 +3 1900 2075 1901 +3 1901 2075 2076 +3 1901 2076 1902 +3 1902 2076 2077 +3 1902 2077 1903 +3 1903 2077 2078 +3 1903 2078 1904 +3 1904 2078 2079 +3 1904 2079 2080 +3 1904 2080 1905 +3 1905 2080 1906 +3 1906 2080 2081 +3 1906 2081 1907 +3 1907 2081 2082 +3 1907 2082 1908 +3 1908 2082 2083 +3 1908 2083 1909 +3 1909 2083 2084 +3 1909 2084 2085 +3 1909 2085 1910 +3 1910 2085 1911 +3 1911 2085 2086 +3 1911 2086 1912 +3 1912 2086 2087 +3 1912 2087 1913 +3 1913 2087 2088 +3 1913 2088 1914 +3 1914 2088 2089 +3 1914 2089 1915 +3 1915 2089 2090 +3 1915 2090 2091 +3 1915 2091 1916 +3 1916 2091 2092 +3 1916 2092 1917 +3 1917 2092 1918 +3 1918 2092 2093 +3 1918 2093 2094 +3 1918 2094 2095 +3 1918 2095 1919 +3 1919 2095 1920 +3 1920 2095 1921 +3 1921 2095 2096 +3 1921 2096 2097 +3 1921 2097 1922 +3 1922 2097 2098 +3 1922 2098 2099 +3 1922 2099 1923 +3 1923 2099 2100 +3 1923 2100 1924 +3 1924 2100 2101 +3 1924 2101 1925 +3 1925 2101 2102 +3 1925 2102 1926 +3 1926 2102 1927 +3 1927 2102 2103 +3 1927 2103 2104 +3 1927 2104 1928 +3 1928 2104 2105 +3 1928 2105 1929 +3 1929 2105 1930 +3 1930 2105 1931 +3 1931 2105 2106 +3 1931 2106 1932 +3 1932 2106 2107 +3 1932 2107 2108 +3 1932 2108 1933 +3 1933 2108 2109 +3 1933 2109 1934 +3 1934 2109 2110 +3 1934 2110 2111 +3 1934 2111 1935 +3 1935 2111 1936 +3 1936 2111 2112 +3 1936 2112 2113 +3 1936 2113 1937 +3 1937 2113 2114 +3 1937 2114 1938 +3 1938 2114 2115 +3 1938 2115 2116 +3 1938 2116 1939 +3 1939 2116 1940 +3 1940 2116 2117 +3 1940 2117 2118 +3 1940 2118 1941 +3 1941 2118 2119 +3 1941 2119 1942 +3 1942 2119 1944 +3 1944 2119 2120 +3 1944 2120 1945 +3 1945 2120 2121 +3 1945 2121 2122 +3 1945 2122 2123 +3 1945 2123 1946 +3 1946 2123 2124 +3 1946 2124 1947 +3 1947 2124 2125 +3 1947 2125 2126 +3 1947 2126 1948 +3 1948 2126 2127 +3 1948 2127 1949 +3 1949 2127 2128 +3 1949 2128 1950 +3 1950 2128 2129 +3 1950 2129 1951 +3 1951 2129 1952 +3 1952 2129 2130 +3 1952 2130 2131 +3 1952 2131 1953 +3 1953 2131 2132 +3 1953 2132 1954 +3 1954 2132 2133 +3 1954 2133 1955 +3 1955 2133 2134 +3 1955 2134 1956 +3 1956 2134 2135 +3 1956 2135 1957 +3 1957 2135 2136 +3 1957 2136 1958 +3 1958 2136 2137 +3 1958 2137 2138 +3 1958 2138 1959 +3 1959 2138 2139 +3 1959 2139 1960 +3 1960 2139 2140 +3 1960 2140 1961 +3 1961 2140 1962 +3 1962 2140 2141 +3 1962 2141 2142 +3 1962 2142 1963 +3 1963 2142 2143 +3 1963 2143 1964 +3 1964 2143 2144 +3 1964 2144 1965 +3 1965 2144 2145 +3 1965 2145 2146 +3 1965 2146 1966 +3 1966 2146 1975 +3 1975 2146 1976 +3 1976 2146 2147 +3 1976 2147 1977 +3 1977 2147 2148 +3 1977 2148 1978 +3 1978 2148 2149 +3 1978 2149 1979 +3 1979 2149 2150 +3 1979 2150 2151 +3 1979 2151 1980 +3 1980 2151 2152 +3 1980 2152 1981 +3 1981 2152 2153 +3 1981 2153 1982 +3 1982 2153 2154 +3 1982 2154 1983 +3 1983 2154 2155 +3 1983 2155 1984 +3 1984 2155 2156 +3 1984 2156 1985 +3 1985 2156 2157 +3 1985 2157 1986 +3 1986 2157 2158 +3 1986 2158 1987 +3 1987 2158 2159 +3 1987 2159 1988 +3 1988 2159 2160 +3 1988 2160 1989 +3 1989 2160 2161 +3 1989 2161 1990 +3 1990 2161 2162 +3 1990 2162 1991 +3 1991 2162 2163 +3 1991 2163 1992 +3 1992 2163 2164 +3 1992 2164 1993 +3 1993 2164 2165 +3 1993 2165 1994 +3 1994 2165 2166 +3 1994 2166 1995 +3 1995 2166 2167 +3 1995 2167 1996 +3 1996 2167 2168 +3 1996 2168 1997 +3 1997 2168 2169 +3 1997 2169 1998 +3 1998 2169 2170 +3 1998 2170 1999 +3 1999 2170 2171 +3 1999 2171 2000 +3 2000 2171 2172 +3 2000 2172 2001 +3 2001 2172 2173 +3 2001 2173 2002 +3 2002 2173 2174 +3 2002 2174 2175 +3 2002 2175 2003 +3 2003 2175 2176 +3 2003 2176 2004 +3 2004 2176 2005 +3 2005 2176 2177 +3 2005 2177 2006 +3 2006 2177 2178 +3 2006 2178 2179 +3 2006 2179 2007 +3 2007 2179 2008 +3 2008 2179 2180 +3 2008 2180 2181 +3 2008 2181 2009 +3 2009 2181 2182 +3 2009 2182 2010 +3 2010 2182 2183 +3 2010 2183 2011 +3 2011 2183 2184 +3 2011 2184 2012 +3 2012 2184 2185 +3 2012 2185 2013 +3 2013 2185 2014 +3 2014 2185 2015 +3 2015 2185 2016 +3 2016 2185 2186 +3 2016 2186 2017 +3 2017 2186 2187 +3 2017 2187 2018 +3 2018 2187 2188 +3 2018 2188 2019 +3 2019 2188 2189 +3 2019 2189 2020 +3 2020 2189 2190 +3 2020 2190 2191 +3 2020 2191 2021 +3 2021 2191 2192 +3 2021 2192 2022 +3 2022 2192 2193 +3 2022 2193 2023 +3 2023 2193 2194 +3 2023 2194 2024 +3 2024 2194 2025 +3 2025 2194 2026 +3 2026 2194 2195 +3 2026 2195 2196 +3 2026 2196 2027 +3 2027 2196 2197 +3 2027 2197 2028 +3 2028 2197 2198 +3 2028 2198 2199 +3 2028 2199 2029 +3 2029 2199 2030 +3 2030 2199 2200 +3 2030 2200 2031 +3 2031 2200 2201 +3 2031 2201 2202 +3 2031 2202 2032 +3 2032 2202 2203 +3 2032 2203 2033 +3 2033 2203 2204 +3 2033 2204 2034 +3 2034 2204 2205 +3 2034 2205 2035 +3 2035 2205 2206 +3 2035 2206 2036 +3 2036 2206 2207 +3 2036 2207 2037 +3 2037 2207 2208 +3 2037 2208 2038 +3 2038 2208 2209 +3 2038 2209 2039 +3 2039 2209 2210 +3 2039 2210 2040 +3 2040 2210 2211 +3 2040 2211 2041 +3 2041 2211 2212 +3 2041 2212 2042 +3 2042 2212 2213 +3 2042 2213 2043 +3 2043 2213 2214 +3 2043 2214 2044 +3 2044 2214 2215 +3 2044 2215 2045 +3 2045 2215 2216 +3 2045 2216 2046 +3 2046 2216 2217 +3 2046 2217 2047 +3 2047 2217 2218 +3 2047 2218 2048 +3 2048 2218 2219 +3 2048 2219 2049 +3 2049 2219 2220 +3 2049 2220 2221 +3 2049 2221 2050 +3 2050 2221 2222 +3 2050 2222 2051 +3 2051 2222 2223 +3 2051 2223 2052 +3 2052 2223 2053 +3 2053 2223 2224 +3 2053 2224 2225 +3 2053 2225 2054 +3 2054 2225 2226 +3 2054 2226 2055 +3 2055 2226 2227 +3 2055 2227 2056 +3 2056 2227 2228 +3 2056 2228 2057 +3 2057 2228 2229 +3 2057 2229 2058 +3 2058 2229 2230 +3 2058 2230 2231 +3 2058 2231 2059 +3 2059 2231 2232 +3 2059 2232 2060 +3 2060 2232 2233 +3 2060 2233 2234 +3 2060 2234 2061 +3 2061 2234 2062 +3 2062 2234 2235 +3 2062 2235 2063 +3 2063 2235 2236 +3 2063 2236 2237 +3 2063 2237 2064 +3 2064 2237 2065 +3 2065 2237 2238 +3 2065 2238 2239 +3 2065 2239 2066 +3 2066 2239 2240 +3 2066 2240 2241 +3 2066 2241 2067 +3 2067 2241 2242 +3 2067 2242 2068 +3 2068 2242 2243 +3 2068 2243 2069 +3 2069 2243 2244 +3 2069 2244 2245 +3 2069 2245 2070 +3 2070 2245 2246 +3 2070 2246 2071 +3 2071 2246 2247 +3 2071 2247 2072 +3 2072 2247 2248 +3 2072 2248 2073 +3 2073 2248 2074 +3 2074 2248 2249 +3 2074 2249 2075 +3 2075 2249 2250 +3 2075 2250 2076 +3 2076 2250 2251 +3 2076 2251 2077 +3 2077 2251 2252 +3 2077 2252 2078 +3 2078 2252 2253 +3 2078 2253 2079 +3 2079 2253 2254 +3 2079 2254 2255 +3 2079 2255 2080 +3 2080 2255 2081 +3 2081 2255 2256 +3 2081 2256 2082 +3 2082 2256 2257 +3 2082 2257 2083 +3 2083 2257 2258 +3 2083 2258 2084 +3 2084 2258 2259 +3 2084 2259 2260 +3 2084 2260 2085 +3 2085 2260 2086 +3 2086 2260 2261 +3 2086 2261 2087 +3 2087 2261 2262 +3 2087 2262 2088 +3 2088 2262 2263 +3 2088 2263 2089 +3 2089 2263 2264 +3 2089 2264 2090 +3 2090 2264 2265 +3 2090 2265 2266 +3 2090 2266 2091 +3 2091 2266 2267 +3 2091 2267 2092 +3 2092 2267 2093 +3 2093 2267 2268 +3 2093 2268 2269 +3 2093 2269 2094 +3 2094 2269 2270 +3 2094 2270 2096 +3 2096 2270 2271 +3 2096 2271 2272 +3 2096 2272 2097 +3 2097 2272 2273 +3 2097 2273 2274 +3 2097 2274 2098 +3 2098 2274 2275 +3 2098 2275 2099 +3 2099 2275 2276 +3 2099 2276 2277 +3 2099 2277 2100 +3 2100 2277 2278 +3 2100 2278 2101 +3 2101 2278 2279 +3 2101 2279 2102 +3 2102 2279 2103 +3 2103 2279 2280 +3 2103 2280 2281 +3 2103 2281 2104 +3 2104 2281 2282 +3 2104 2282 2283 +3 2104 2283 2105 +3 2105 2283 2106 +3 2106 2283 2284 +3 2106 2284 2107 +3 2107 2284 2285 +3 2107 2285 2108 +3 2108 2285 2286 +3 2108 2286 2287 +3 2108 2287 2109 +3 2109 2287 2288 +3 2109 2288 2110 +3 2110 2288 2289 +3 2110 2289 2290 +3 2110 2290 2111 +3 2111 2290 2112 +3 2112 2290 2291 +3 2112 2291 2292 +3 2112 2292 2113 +3 2113 2292 2293 +3 2113 2293 2114 +3 2114 2293 2294 +3 2114 2294 2115 +3 2115 2294 2295 +3 2115 2295 2116 +3 2116 2295 2117 +3 2117 2295 2296 +3 2117 2296 2297 +3 2117 2297 2118 +3 2118 2297 2298 +3 2118 2298 2119 +3 2119 2298 2120 +3 2120 2298 2121 +3 2121 2298 2297 +3 2121 2297 2299 +3 2121 2299 2122 +3 2122 2299 2300 +3 2122 2300 2301 +3 2122 2301 2302 +3 2122 2302 2123 +3 2123 2302 2124 +3 2124 2302 2303 +3 2124 2303 2125 +3 2125 2303 2304 +3 2125 2304 2305 +3 2125 2305 2126 +3 2126 2305 2306 +3 2126 2306 2127 +3 2127 2306 2307 +3 2127 2307 2128 +3 2128 2307 2308 +3 2128 2308 2129 +3 2129 2308 2130 +3 2130 2308 2309 +3 2130 2309 2310 +3 2130 2310 2131 +3 2131 2310 2311 +3 2131 2311 2132 +3 2132 2311 2312 +3 2132 2312 2133 +3 2133 2312 2313 +3 2133 2313 2134 +3 2134 2313 2314 +3 2134 2314 2135 +3 2135 2314 2315 +3 2135 2315 2136 +3 2136 2315 2137 +3 2137 2315 2316 +3 2137 2316 2317 +3 2137 2317 2318 +3 2137 2318 2138 +3 2138 2318 2139 +3 2139 2318 2319 +3 2139 2319 2140 +3 2140 2319 2141 +3 2141 2319 2320 +3 2141 2320 2321 +3 2141 2321 2142 +3 2142 2321 2322 +3 2142 2322 2143 +3 2143 2322 2323 +3 2143 2323 2144 +3 2144 2323 2324 +3 2144 2324 2325 +3 2144 2325 2145 +3 2145 2325 2147 +3 2147 2325 2148 +3 2148 2325 2326 +3 2148 2326 2149 +3 2149 2326 2327 +3 2149 2327 2150 +3 2150 2327 2328 +3 2150 2328 2329 +3 2150 2329 2151 +3 2151 2329 2330 +3 2151 2330 2152 +3 2152 2330 2331 +3 2152 2331 2153 +3 2153 2331 2332 +3 2153 2332 2154 +3 2154 2332 2333 +3 2154 2333 2155 +3 2155 2333 2334 +3 2155 2334 2156 +3 2156 2334 2335 +3 2156 2335 2157 +3 2157 2335 2336 +3 2157 2336 2158 +3 2158 2336 2337 +3 2158 2337 2159 +3 2159 2337 2338 +3 2159 2338 2160 +3 2160 2338 2339 +3 2160 2339 2161 +3 2161 2339 2340 +3 2161 2340 2162 +3 2162 2340 2341 +3 2162 2341 2163 +3 2163 2341 2342 +3 2163 2342 2164 +3 2164 2342 2343 +3 2164 2343 2165 +3 2165 2343 2344 +3 2165 2344 2166 +3 2166 2344 2345 +3 2166 2345 2167 +3 2167 2345 2346 +3 2167 2346 2168 +3 2168 2346 2347 +3 2168 2347 2169 +3 2169 2347 2348 +3 2169 2348 2170 +3 2170 2348 2349 +3 2170 2349 2171 +3 2171 2349 2350 +3 2171 2350 2172 +3 2172 2350 2351 +3 2172 2351 2173 +3 2173 2351 2352 +3 2173 2352 2174 +3 2174 2352 2353 +3 2174 2353 2354 +3 2174 2354 2175 +3 2175 2354 2355 +3 2175 2355 2176 +3 2176 2355 2177 +3 2177 2355 2356 +3 2177 2356 2178 +3 2178 2356 2357 +3 2178 2357 2358 +3 2178 2358 2179 +3 2179 2358 2180 +3 2180 2358 2359 +3 2180 2359 2360 +3 2180 2360 2181 +3 2181 2360 2361 +3 2181 2361 2182 +3 2182 2361 2362 +3 2182 2362 2183 +3 2183 2362 2363 +3 2183 2363 2184 +3 2184 2363 2186 +3 2186 2363 2187 +3 2187 2363 2364 +3 2187 2364 2188 +3 2188 2364 2365 +3 2188 2365 2189 +3 2189 2365 2366 +3 2189 2366 2367 +3 2189 2367 2190 +3 2190 2367 2368 +3 2190 2368 2191 +3 2191 2368 2192 +3 2192 2368 2369 +3 2192 2369 2370 +3 2192 2370 2193 +3 2193 2370 2371 +3 2193 2371 2372 +3 2193 2372 2195 +3 2195 2372 2373 +3 2195 2373 2196 +3 2196 2373 2374 +3 2196 2374 2375 +3 2196 2375 2197 +3 2197 2375 2376 +3 2197 2376 2198 +3 2198 2376 2377 +3 2198 2377 2378 +3 2198 2378 2199 +3 2199 2378 2200 +3 2200 2378 2379 +3 2200 2379 2201 +3 2201 2379 2380 +3 2201 2380 2381 +3 2201 2381 2202 +3 2202 2381 2382 +3 2202 2382 2203 +3 2203 2382 2383 +3 2203 2383 2204 +3 2204 2383 2384 +3 2204 2384 2205 +3 2205 2384 2385 +3 2205 2385 2206 +3 2206 2385 2386 +3 2206 2386 2207 +3 2207 2386 2387 +3 2207 2387 2208 +3 2208 2387 2388 +3 2208 2388 2209 +3 2209 2388 2389 +3 2209 2389 2210 +3 2210 2389 2390 +3 2210 2390 2211 +3 2211 2390 2391 +3 2211 2391 2212 +3 2212 2391 2392 +3 2212 2392 2213 +3 2213 2392 2393 +3 2213 2393 2214 +3 2214 2393 2394 +3 2214 2394 2215 +3 2215 2394 2395 +3 2215 2395 2216 +3 2216 2395 2396 +3 2216 2396 2217 +3 2217 2396 2397 +3 2217 2397 2218 +3 2218 2397 2398 +3 2218 2398 2219 +3 2219 2398 2399 +3 2219 2399 2220 +3 2220 2399 2400 +3 2220 2400 2401 +3 2220 2401 2221 +3 2221 2401 2402 +3 2221 2402 2222 +3 2222 2402 2224 +3 2224 2402 2403 +3 2224 2403 2225 +3 2225 2403 2226 +3 2226 2403 2404 +3 2226 2404 2405 +3 2226 2405 2227 +3 2227 2405 2406 +3 2227 2406 2228 +3 2228 2406 2407 +3 2228 2407 2229 +3 2229 2407 2408 +3 2229 2408 2230 +3 2230 2408 2409 +3 2230 2409 2410 +3 2230 2410 2231 +3 2231 2410 2411 +3 2231 2411 2232 +3 2232 2411 2412 +3 2232 2412 2413 +3 2232 2413 2233 +3 2233 2413 2414 +3 2233 2414 2234 +3 2234 2414 2415 +3 2234 2415 2416 +3 2234 2416 2235 +3 2235 2416 2417 +3 2235 2417 2236 +3 2236 2417 2237 +3 2237 2417 2238 +3 2238 2417 2239 +3 2239 2417 2418 +3 2239 2418 2240 +3 2240 2418 2419 +3 2240 2419 2420 +3 2240 2420 2241 +3 2241 2420 2421 +3 2241 2421 2242 +3 2242 2421 2422 +3 2242 2422 2243 +3 2243 2422 2423 +3 2243 2423 2244 +3 2244 2423 2424 +3 2244 2424 2245 +3 2245 2424 2425 +3 2245 2425 2246 +3 2246 2425 2426 +3 2246 2426 2427 +3 2246 2427 2247 +3 2247 2427 2428 +3 2247 2428 2248 +3 2248 2428 2249 +3 2249 2428 2429 +3 2249 2429 2250 +3 2250 2429 2430 +3 2250 2430 2251 +3 2251 2430 2431 +3 2251 2431 2252 +3 2252 2431 2432 +3 2252 2432 2253 +3 2253 2432 2433 +3 2253 2433 2254 +3 2254 2433 2434 +3 2254 2434 2435 +3 2254 2435 2255 +3 2255 2435 2256 +3 2256 2435 2436 +3 2256 2436 2257 +3 2257 2436 2437 +3 2257 2437 2258 +3 2258 2437 2438 +3 2258 2438 2259 +3 2259 2438 2439 +3 2259 2439 2440 +3 2259 2440 2260 +3 2260 2440 2261 +3 2261 2440 2441 +3 2261 2441 2262 +3 2262 2441 2442 +3 2262 2442 2263 +3 2263 2442 2443 +3 2263 2443 2264 +3 2264 2443 2444 +3 2264 2444 2265 +3 2265 2444 2445 +3 2265 2445 2446 +3 2265 2446 2266 +3 2266 2446 2447 +3 2266 2447 2267 +3 2267 2447 2268 +3 2268 2447 2448 +3 2268 2448 2449 +3 2268 2449 2269 +3 2269 2449 2450 +3 2269 2450 2270 +3 2270 2450 2271 +3 2271 2450 2451 +3 2271 2451 2452 +3 2271 2452 2272 +3 2272 2452 2273 +3 2273 2452 2453 +3 2273 2453 2454 +3 2273 2454 2274 +3 2274 2454 2275 +3 2275 2454 2455 +3 2275 2455 2276 +3 2276 2455 2456 +3 2276 2456 2277 +3 2277 2456 2457 +3 2277 2457 2278 +3 2278 2457 2458 +3 2278 2458 2459 +3 2278 2459 2279 +3 2279 2459 2280 +3 2280 2459 2460 +3 2280 2460 2461 +3 2280 2461 2281 +3 2281 2461 2462 +3 2281 2462 2282 +3 2282 2462 2284 +3 2284 2462 2463 +3 2284 2463 2285 +3 2285 2463 2464 +3 2285 2464 2286 +3 2286 2464 2465 +3 2286 2465 2466 +3 2286 2466 2287 +3 2287 2466 2467 +3 2287 2467 2288 +3 2288 2467 2468 +3 2288 2468 2289 +3 2289 2468 2469 +3 2289 2469 2470 +3 2289 2470 2290 +3 2290 2470 2291 +3 2291 2470 2471 +3 2291 2471 2472 +3 2291 2472 2292 +3 2292 2472 2473 +3 2292 2473 2293 +3 2293 2473 2474 +3 2293 2474 2294 +3 2294 2474 2475 +3 2294 2475 2295 +3 2295 2475 2296 +3 2296 2475 2476 +3 2296 2476 2299 +3 2299 2476 2477 +3 2299 2477 2300 +3 2300 2477 2478 +3 2300 2478 2301 +3 2301 2478 2479 +3 2301 2479 2480 +3 2301 2480 2302 +3 2302 2480 2303 +3 2303 2480 2481 +3 2303 2481 2304 +3 2304 2481 2482 +3 2304 2482 2483 +3 2304 2483 2305 +3 2305 2483 2484 +3 2305 2484 2306 +3 2306 2484 2485 +3 2306 2485 2307 +3 2307 2485 2486 +3 2307 2486 2308 +3 2308 2486 2309 +3 2309 2486 2487 +3 2309 2487 2488 +3 2309 2488 2310 +3 2310 2488 2489 +3 2310 2489 2311 +3 2311 2489 2490 +3 2311 2490 2312 +3 2312 2490 2491 +3 2312 2491 2313 +3 2313 2491 2492 +3 2313 2492 2314 +3 2314 2492 2315 +3 2315 2492 2493 +3 2315 2493 2316 +3 2316 2493 2494 +3 2316 2494 2495 +3 2316 2495 2317 +3 2317 2495 2496 +3 2317 2496 2497 +3 2317 2497 2318 +3 2318 2497 2320 +3 2320 2497 2498 +3 2320 2498 2321 +3 2321 2498 2499 +3 2321 2499 2322 +3 2322 2499 2500 +3 2322 2500 2501 +3 2322 2501 2323 +3 2323 2501 2324 +3 2324 2501 2502 +3 2324 2502 2326 +3 2326 2502 2327 +3 2327 2502 2503 +3 2327 2503 2504 +3 2327 2504 2328 +3 2328 2504 2505 +3 2328 2505 2329 +3 2329 2505 2506 +3 2329 2506 2330 +3 2330 2506 2507 +3 2330 2507 2331 +3 2331 2507 2508 +3 2331 2508 2332 +3 2332 2508 2509 +3 2332 2509 2333 +3 2333 2509 2510 +3 2333 2510 2334 +3 2334 2510 2511 +3 2334 2511 2335 +3 2335 2511 2512 +3 2335 2512 2336 +3 2336 2512 2513 +3 2336 2513 2337 +3 2337 2513 2514 +3 2337 2514 2338 +3 2338 2514 2515 +3 2338 2515 2339 +3 2339 2515 2516 +3 2339 2516 2340 +3 2340 2516 2517 +3 2340 2517 2341 +3 2341 2517 2518 +3 2341 2518 2342 +3 2342 2518 2519 +3 2342 2519 2343 +3 2343 2519 2520 +3 2343 2520 2344 +3 2344 2520 2521 +3 2344 2521 2345 +3 2345 2521 2522 +3 2345 2522 2346 +3 2346 2522 2523 +3 2346 2523 2347 +3 2347 2523 2524 +3 2347 2524 2348 +3 2348 2524 2525 +3 2348 2525 2349 +3 2349 2525 2526 +3 2349 2526 2350 +3 2350 2526 2527 +3 2350 2527 2351 +3 2351 2527 2528 +3 2351 2528 2352 +3 2352 2528 2529 +3 2352 2529 2353 +3 2353 2529 2530 +3 2353 2530 2531 +3 2353 2531 2354 +3 2354 2531 2532 +3 2354 2532 2355 +3 2355 2532 2356 +3 2356 2532 2533 +3 2356 2533 2357 +3 2357 2533 2534 +3 2357 2534 2535 +3 2357 2535 2358 +3 2358 2535 2359 +3 2359 2535 2536 +3 2359 2536 2537 +3 2359 2537 2360 +3 2360 2537 2538 +3 2360 2538 2361 +3 2361 2538 2539 +3 2361 2539 2362 +3 2362 2539 2364 +3 2364 2539 2365 +3 2365 2539 2366 +3 2366 2539 2538 +3 2366 2538 2540 +3 2366 2540 2541 +3 2366 2541 2542 +3 2366 2542 2367 +3 2367 2542 2543 +3 2367 2543 2368 +3 2368 2543 2544 +3 2368 2544 2369 +3 2369 2544 2545 +3 2369 2545 2546 +3 2369 2546 2370 +3 2370 2546 2547 +3 2370 2547 2371 +3 2371 2547 2548 +3 2371 2548 2549 +3 2371 2549 2372 +3 2372 2549 2550 +3 2372 2550 2373 +3 2373 2550 2551 +3 2373 2551 2374 +3 2374 2551 2552 +3 2374 2552 2375 +3 2375 2552 2376 +3 2376 2552 2377 +3 2377 2552 2553 +3 2377 2553 2554 +3 2377 2554 2555 +3 2377 2555 2379 +3 2379 2555 2556 +3 2379 2556 2380 +3 2380 2556 2557 +3 2380 2557 2381 +3 2381 2557 2382 +3 2382 2557 2558 +3 2382 2558 2383 +3 2383 2558 2559 +3 2383 2559 2384 +3 2384 2559 2560 +3 2384 2560 2385 +3 2385 2560 2561 +3 2385 2561 2386 +3 2386 2561 2562 +3 2386 2562 2387 +3 2387 2562 2563 +3 2387 2563 2388 +3 2388 2563 2564 +3 2388 2564 2389 +3 2389 2564 2565 +3 2389 2565 2390 +3 2390 2565 2566 +3 2390 2566 2391 +3 2391 2566 2567 +3 2391 2567 2392 +3 2392 2567 2568 +3 2392 2568 2393 +3 2393 2568 2569 +3 2393 2569 2394 +3 2394 2569 2570 +3 2394 2570 2395 +3 2395 2570 2571 +3 2395 2571 2396 +3 2396 2571 2572 +3 2396 2572 2397 +3 2397 2572 2573 +3 2397 2573 2398 +3 2398 2573 2574 +3 2398 2574 2399 +3 2399 2574 2575 +3 2399 2575 2400 +3 2400 2575 2576 +3 2400 2576 2577 +3 2400 2577 2401 +3 2401 2577 2578 +3 2401 2578 2402 +3 2402 2578 2579 +3 2402 2579 2403 +3 2403 2579 2404 +3 2404 2579 2580 +3 2404 2580 2581 +3 2404 2581 2405 +3 2405 2581 2582 +3 2405 2582 2406 +3 2406 2582 2583 +3 2406 2583 2407 +3 2407 2583 2584 +3 2407 2584 2408 +3 2408 2584 2585 +3 2408 2585 2409 +3 2409 2585 2586 +3 2409 2586 2587 +3 2409 2587 2410 +3 2410 2587 2588 +3 2410 2588 2411 +3 2411 2588 2589 +3 2411 2589 2412 +3 2412 2589 2590 +3 2412 2590 2413 +3 2413 2590 2591 +3 2413 2591 2414 +3 2414 2591 2592 +3 2414 2592 2593 +3 2414 2593 2415 +3 2415 2593 2594 +3 2415 2594 2595 +3 2415 2595 2416 +3 2416 2595 2418 +3 2418 2595 2596 +3 2418 2596 2419 +3 2419 2596 2597 +3 2419 2597 2598 +3 2419 2598 2420 +3 2420 2598 2599 +3 2420 2599 2600 +3 2420 2600 2421 +3 2421 2600 2601 +3 2421 2601 2422 +3 2422 2601 2602 +3 2422 2602 2423 +3 2423 2602 2603 +3 2423 2603 2424 +3 2424 2603 2604 +3 2424 2604 2425 +3 2425 2604 2605 +3 2425 2605 2606 +3 2425 2606 2426 +3 2426 2606 2607 +3 2426 2607 2427 +3 2427 2607 2428 +3 2428 2607 2608 +3 2428 2608 2429 +3 2429 2608 2609 +3 2429 2609 2430 +3 2430 2609 2610 +3 2430 2610 2431 +3 2431 2610 2611 +3 2431 2611 2432 +3 2432 2611 2612 +3 2432 2612 2433 +3 2433 2612 2613 +3 2433 2613 2434 +3 2434 2613 2614 +3 2434 2614 2615 +3 2434 2615 2435 +3 2435 2615 2436 +3 2436 2615 2616 +3 2436 2616 2437 +3 2437 2616 2617 +3 2437 2617 2438 +3 2438 2617 2618 +3 2438 2618 2439 +3 2439 2618 2619 +3 2439 2619 2620 +3 2439 2620 2440 +3 2440 2620 2441 +3 2441 2620 2621 +3 2441 2621 2442 +3 2442 2621 2622 +3 2442 2622 2443 +3 2443 2622 2623 +3 2443 2623 2444 +3 2444 2623 2624 +3 2444 2624 2445 +3 2445 2624 2625 +3 2445 2625 2626 +3 2445 2626 2446 +3 2446 2626 2627 +3 2446 2627 2447 +3 2447 2627 2448 +3 2448 2627 2628 +3 2448 2628 2629 +3 2448 2629 2449 +3 2449 2629 2630 +3 2449 2630 2450 +3 2450 2630 2451 +3 2451 2630 2631 +3 2451 2631 2632 +3 2451 2632 2452 +3 2452 2632 2633 +3 2452 2633 2453 +3 2453 2633 2634 +3 2453 2634 2455 +3 2455 2634 2635 +3 2455 2635 2456 +3 2456 2635 2636 +3 2456 2636 2457 +3 2457 2636 2637 +3 2457 2637 2458 +3 2458 2637 2638 +3 2458 2638 2639 +3 2458 2639 2459 +3 2459 2639 2640 +3 2459 2640 2460 +3 2460 2640 2641 +3 2460 2641 2642 +3 2460 2642 2461 +3 2461 2642 2462 +3 2462 2642 2463 +3 2463 2642 2464 +3 2464 2642 2641 +3 2464 2641 2465 +3 2465 2641 2643 +3 2465 2643 2644 +3 2465 2644 2466 +3 2466 2644 2645 +3 2466 2645 2467 +3 2467 2645 2646 +3 2467 2646 2468 +3 2468 2646 2647 +3 2468 2647 2469 +3 2469 2647 2648 +3 2469 2648 2649 +3 2469 2649 2470 +3 2470 2649 2471 +3 2471 2649 2650 +3 2471 2650 2651 +3 2471 2651 2472 +3 2472 2651 2652 +3 2472 2652 2473 +3 2473 2652 2653 +3 2473 2653 2654 +3 2473 2654 2474 +3 2474 2654 2655 +3 2474 2655 2475 +3 2475 2655 2476 +3 2476 2655 2477 +3 2477 2655 2656 +3 2477 2656 2657 +3 2477 2657 2478 +3 2478 2657 2658 +3 2478 2658 2479 +3 2479 2658 2659 +3 2479 2659 2660 +3 2479 2660 2480 +3 2480 2660 2481 +3 2481 2660 2661 +3 2481 2661 2482 +3 2482 2661 2662 +3 2482 2662 2663 +3 2482 2663 2483 +3 2483 2663 2664 +3 2483 2664 2484 +3 2484 2664 2665 +3 2484 2665 2485 +3 2485 2665 2666 +3 2485 2666 2486 +3 2486 2666 2487 +3 2487 2666 2667 +3 2487 2667 2668 +3 2487 2668 2488 +3 2488 2668 2669 +3 2488 2669 2489 +3 2489 2669 2670 +3 2489 2670 2490 +3 2490 2670 2671 +3 2490 2671 2491 +3 2491 2671 2672 +3 2491 2672 2492 +3 2492 2672 2493 +3 2493 2672 2673 +3 2493 2673 2494 +3 2494 2673 2674 +3 2494 2674 2675 +3 2494 2675 2495 +3 2495 2675 2676 +3 2495 2676 2496 +3 2496 2676 2677 +3 2496 2677 2678 +3 2496 2678 2497 +3 2497 2678 2498 +3 2498 2678 2679 +3 2498 2679 2680 +3 2498 2680 2499 +3 2499 2680 2681 +3 2499 2681 2500 +3 2500 2681 2682 +3 2500 2682 2501 +3 2501 2682 2502 +3 2502 2682 2503 +3 2503 2682 2683 +3 2503 2683 2504 +3 2504 2683 2684 +3 2504 2684 2685 +3 2504 2685 2505 +3 2505 2685 2686 +3 2505 2686 2506 +3 2506 2686 2687 +3 2506 2687 2507 +3 2507 2687 2688 +3 2507 2688 2508 +3 2508 2688 2689 +3 2508 2689 2509 +3 2509 2689 2690 +3 2509 2690 2510 +3 2510 2690 2691 +3 2510 2691 2511 +3 2511 2691 2692 +3 2511 2692 2512 +3 2512 2692 2693 +3 2512 2693 2513 +3 2513 2693 2694 +3 2513 2694 2514 +3 2514 2694 2695 +3 2514 2695 2515 +3 2515 2695 2696 +3 2515 2696 2516 +3 2516 2696 2697 +3 2516 2697 2517 +3 2517 2697 2698 +3 2517 2698 2518 +3 2518 2698 2699 +3 2518 2699 2519 +3 2519 2699 2700 +3 2519 2700 2520 +3 2520 2700 2701 +3 2520 2701 2521 +3 2521 2701 2702 +3 2521 2702 2522 +3 2522 2702 2703 +3 2522 2703 2523 +3 2523 2703 2704 +3 2523 2704 2524 +3 2524 2704 2705 +3 2524 2705 2525 +3 2525 2705 2706 +3 2525 2706 2526 +3 2526 2706 2707 +3 2526 2707 2527 +3 2527 2707 2708 +3 2527 2708 2528 +3 2528 2708 2709 +3 2528 2709 2529 +3 2529 2709 2710 +3 2529 2710 2530 +3 2530 2710 2711 +3 2530 2711 2712 +3 2530 2712 2531 +3 2531 2712 2713 +3 2531 2713 2532 +3 2532 2713 2533 +3 2533 2713 2714 +3 2533 2714 2534 +3 2534 2714 2715 +3 2534 2715 2716 +3 2534 2716 2535 +3 2535 2716 2536 +3 2536 2716 2717 +3 2536 2717 2718 +3 2536 2718 2537 +3 2537 2718 2540 +3 2540 2718 2719 +3 2540 2719 2541 +3 2541 2719 2720 +3 2541 2720 2721 +3 2541 2721 2542 +3 2542 2721 2722 +3 2542 2722 2543 +3 2543 2722 2723 +3 2543 2723 2544 +3 2544 2723 2724 +3 2544 2724 2545 +3 2545 2724 2725 +3 2545 2725 2726 +3 2545 2726 2546 +3 2546 2726 2547 +3 2547 2726 2727 +3 2547 2727 2548 +3 2548 2727 2728 +3 2548 2728 2549 +3 2549 2728 2729 +3 2549 2729 2551 +3 2551 2729 2554 +3 2554 2729 2730 +3 2554 2730 2731 +3 2554 2731 2555 +3 2555 2731 2732 +3 2555 2732 2556 +3 2556 2732 2733 +3 2556 2733 2557 +3 2557 2733 2734 +3 2557 2734 2735 +3 2557 2735 2558 +3 2558 2735 2559 +3 2559 2735 2736 +3 2559 2736 2560 +3 2560 2736 2737 +3 2560 2737 2561 +3 2561 2737 2738 +3 2561 2738 2562 +3 2562 2738 2739 +3 2562 2739 2563 +3 2563 2739 2740 +3 2563 2740 2564 +3 2564 2740 2741 +3 2564 2741 2565 +3 2565 2741 2742 +3 2565 2742 2566 +3 2566 2742 2743 +3 2566 2743 2567 +3 2567 2743 2744 +3 2567 2744 2568 +3 2568 2744 2745 +3 2568 2745 2569 +3 2569 2745 2746 +3 2569 2746 2570 +3 2570 2746 2747 +3 2570 2747 2571 +3 2571 2747 2748 +3 2571 2748 2572 +3 2572 2748 2749 +3 2572 2749 2573 +3 2573 2749 2750 +3 2573 2750 2574 +3 2574 2750 2751 +3 2574 2751 2575 +3 2575 2751 2752 +3 2575 2752 2576 +3 2576 2752 2753 +3 2576 2753 2754 +3 2576 2754 2577 +3 2577 2754 2755 +3 2577 2755 2578 +3 2578 2755 2756 +3 2578 2756 2579 +3 2579 2756 2580 +3 2580 2756 2757 +3 2580 2757 2581 +3 2581 2757 2758 +3 2581 2758 2582 +3 2582 2758 2759 +3 2582 2759 2760 +3 2582 2760 2583 +3 2583 2760 2761 +3 2583 2761 2584 +3 2584 2761 2585 +3 2585 2761 2762 +3 2585 2762 2586 +3 2586 2762 2763 +3 2586 2763 2764 +3 2586 2764 2587 +3 2587 2764 2765 +3 2587 2765 2766 +3 2587 2766 2588 +3 2588 2766 2767 +3 2588 2767 2589 +3 2589 2767 2768 +3 2589 2768 2769 +3 2589 2769 2590 +3 2590 2769 2591 +3 2591 2769 2592 +3 2592 2769 2770 +3 2592 2770 2771 +3 2592 2771 2772 +3 2592 2772 2593 +3 2593 2772 2773 +3 2593 2773 2594 +3 2594 2773 2596 +3 2596 2773 2597 +3 2597 2773 2774 +3 2597 2774 2775 +3 2597 2775 2598 +3 2598 2775 2599 +3 2599 2775 2776 +3 2599 2776 2777 +3 2599 2777 2600 +3 2600 2777 2778 +3 2600 2778 2601 +3 2601 2778 2779 +3 2601 2779 2602 +3 2602 2779 2780 +3 2602 2780 2603 +3 2603 2780 2781 +3 2603 2781 2604 +3 2604 2781 2782 +3 2604 2782 2605 +3 2605 2782 2783 +3 2605 2783 2606 +3 2606 2783 2784 +3 2606 2784 2607 +3 2607 2784 2785 +3 2607 2785 2608 +3 2608 2785 2786 +3 2608 2786 2787 +3 2608 2787 2609 +3 2609 2787 2610 +3 2610 2787 2788 +3 2610 2788 2611 +3 2611 2788 2789 +3 2611 2789 2612 +3 2612 2789 2790 +3 2612 2790 2791 +3 2612 2791 2613 +3 2613 2791 2614 +3 2614 2791 2792 +3 2614 2792 2793 +3 2614 2793 2794 +3 2614 2794 2615 +3 2615 2794 2616 +3 2616 2794 2795 +3 2616 2795 2617 +3 2617 2795 2796 +3 2617 2796 2618 +3 2618 2796 2797 +3 2618 2797 2619 +3 2619 2797 2798 +3 2619 2798 2799 +3 2619 2799 2800 +3 2619 2800 2620 +3 2620 2800 2621 +3 2621 2800 2801 +3 2621 2801 2622 +3 2622 2801 2802 +3 2622 2802 2623 +3 2623 2802 2803 +3 2623 2803 2624 +3 2624 2803 2804 +3 2624 2804 2625 +3 2625 2804 2805 +3 2625 2805 2806 +3 2625 2806 2626 +3 2626 2806 2807 +3 2626 2807 2627 +3 2627 2807 2628 +3 2628 2807 2808 +3 2628 2808 2809 +3 2628 2809 2629 +3 2629 2809 2810 +3 2629 2810 2630 +3 2630 2810 2631 +3 2631 2810 2811 +3 2631 2811 2812 +3 2631 2812 2632 +3 2632 2812 2813 +3 2632 2813 2633 +3 2633 2813 2814 +3 2633 2814 2634 +3 2634 2814 2815 +3 2634 2815 2635 +3 2635 2815 2816 +3 2635 2816 2636 +3 2636 2816 2637 +3 2637 2816 2817 +3 2637 2817 2638 +3 2638 2817 2818 +3 2638 2818 2819 +3 2638 2819 2639 +3 2639 2819 2640 +3 2640 2819 2820 +3 2640 2820 2641 +3 2641 2820 2643 +3 2643 2820 2821 +3 2643 2821 2822 +3 2643 2822 2644 +3 2644 2822 2823 +3 2644 2823 2645 +3 2645 2823 2824 +3 2645 2824 2646 +3 2646 2824 2825 +3 2646 2825 2647 +3 2647 2825 2826 +3 2647 2826 2648 +3 2648 2826 2827 +3 2648 2827 2828 +3 2648 2828 2649 +3 2649 2828 2650 +3 2650 2828 2829 +3 2650 2829 2830 +3 2650 2830 2831 +3 2650 2831 2651 +3 2651 2831 2832 +3 2651 2832 2833 +3 2651 2833 2652 +3 2652 2833 2834 +3 2652 2834 2835 +3 2652 2835 2653 +3 2653 2835 2836 +3 2653 2836 2654 +3 2654 2836 2656 +3 2656 2836 2837 +3 2656 2837 2657 +3 2657 2837 2838 +3 2657 2838 2658 +3 2658 2838 2839 +3 2658 2839 2659 +3 2659 2839 2840 +3 2659 2840 2841 +3 2659 2841 2660 +3 2660 2841 2661 +3 2661 2841 2842 +3 2661 2842 2662 +3 2662 2842 2843 +3 2662 2843 2844 +3 2662 2844 2663 +3 2663 2844 2845 +3 2663 2845 2664 +3 2664 2845 2846 +3 2664 2846 2665 +3 2665 2846 2847 +3 2665 2847 2666 +3 2666 2847 2667 +3 2667 2847 2848 +3 2667 2848 2849 +3 2667 2849 2668 +3 2668 2849 2850 +3 2668 2850 2669 +3 2669 2850 2851 +3 2669 2851 2670 +3 2670 2851 2852 +3 2670 2852 2671 +3 2671 2852 2672 +3 2672 2852 2853 +3 2672 2853 2673 +3 2673 2853 2854 +3 2673 2854 2674 +3 2674 2854 2855 +3 2674 2855 2856 +3 2674 2856 2675 +3 2675 2856 2857 +3 2675 2857 2676 +3 2676 2857 2858 +3 2676 2858 2677 +3 2677 2858 2859 +3 2677 2859 2860 +3 2677 2860 2678 +3 2678 2860 2679 +3 2679 2860 2861 +3 2679 2861 2862 +3 2679 2862 2680 +3 2680 2862 2863 +3 2680 2863 2681 +3 2681 2863 2682 +3 2682 2863 2683 +3 2683 2863 2684 +3 2684 2863 2864 +3 2684 2864 2865 +3 2684 2865 2866 +3 2684 2866 2685 +3 2685 2866 2686 +3 2686 2866 2867 +3 2686 2867 2868 +3 2686 2868 2687 +3 2687 2868 2869 +3 2687 2869 2688 +3 2688 2869 2870 +3 2688 2870 2689 +3 2689 2870 2871 +3 2689 2871 2690 +3 2690 2871 2872 +3 2690 2872 2691 +3 2691 2872 2873 +3 2691 2873 2692 +3 2692 2873 2874 +3 2692 2874 2693 +3 2693 2874 2875 +3 2693 2875 2694 +3 2694 2875 2876 +3 2694 2876 2695 +3 2695 2876 2877 +3 2695 2877 2696 +3 2696 2877 2878 +3 2696 2878 2697 +3 2697 2878 2879 +3 2697 2879 2698 +3 2698 2879 2880 +3 2698 2880 2699 +3 2699 2880 2881 +3 2699 2881 2700 +3 2700 2881 2882 +3 2700 2882 2701 +3 2701 2882 2883 +3 2701 2883 2702 +3 2702 2883 2884 +3 2702 2884 2703 +3 2703 2884 2885 +3 2703 2885 2704 +3 2704 2885 2886 +3 2704 2886 2705 +3 2705 2886 2887 +3 2705 2887 2706 +3 2706 2887 2888 +3 2706 2888 2707 +3 2707 2888 2889 +3 2707 2889 2708 +3 2708 2889 2890 +3 2708 2890 2709 +3 2709 2890 2891 +3 2709 2891 2710 +3 2710 2891 2892 +3 2710 2892 2711 +3 2711 2892 2893 +3 2711 2893 2894 +3 2711 2894 2712 +3 2712 2894 2895 +3 2712 2895 2713 +3 2713 2895 2714 +3 2714 2895 2896 +3 2714 2896 2715 +3 2715 2896 2897 +3 2715 2897 2898 +3 2715 2898 2716 +3 2716 2898 2717 +3 2717 2898 2899 +3 2717 2899 2900 +3 2717 2900 2718 +3 2718 2900 2719 +3 2719 2900 2901 +3 2719 2901 2720 +3 2720 2901 2902 +3 2720 2902 2903 +3 2720 2903 2721 +3 2721 2903 2904 +3 2721 2904 2722 +3 2722 2904 2905 +3 2722 2905 2723 +3 2723 2905 2724 +3 2724 2905 2906 +3 2724 2906 2725 +3 2725 2906 2907 +3 2725 2907 2908 +3 2725 2908 2726 +3 2726 2908 2727 +3 2727 2908 2909 +3 2727 2909 2728 +3 2728 2909 2910 +3 2728 2910 2911 +3 2728 2911 2730 +3 2730 2911 2912 +3 2730 2912 2913 +3 2730 2913 2731 +3 2731 2913 2914 +3 2731 2914 2732 +3 2732 2914 2915 +3 2732 2915 2733 +3 2733 2915 2916 +3 2733 2916 2734 +3 2734 2916 2917 +3 2734 2917 2918 +3 2734 2918 2735 +3 2735 2918 2919 +3 2735 2919 2736 +3 2736 2919 2920 +3 2736 2920 2737 +3 2737 2920 2921 +3 2737 2921 2738 +3 2738 2921 2922 +3 2738 2922 2739 +3 2739 2922 2923 +3 2739 2923 2740 +3 2740 2923 2924 +3 2740 2924 2741 +3 2741 2924 2925 +3 2741 2925 2742 +3 2742 2925 2926 +3 2742 2926 2743 +3 2743 2926 2927 +3 2743 2927 2744 +3 2744 2927 2928 +3 2744 2928 2745 +3 2745 2928 2929 +3 2745 2929 2746 +3 2746 2929 2930 +3 2746 2930 2747 +3 2747 2930 2931 +3 2747 2931 2748 +3 2748 2931 2932 +3 2748 2932 2749 +3 2749 2932 2933 +3 2749 2933 2750 +3 2750 2933 2934 +3 2750 2934 2751 +3 2751 2934 2935 +3 2751 2935 2752 +3 2752 2935 2936 +3 2752 2936 2753 +3 2753 2936 2937 +3 2753 2937 2754 +3 2754 2937 2938 +3 2754 2938 2939 +3 2754 2939 2755 +3 2755 2939 2756 +3 2756 2939 2757 +3 2757 2939 2940 +3 2757 2940 2758 +3 2758 2940 2941 +3 2758 2941 2942 +3 2758 2942 2759 +3 2759 2942 2943 +3 2759 2943 2944 +3 2759 2944 2760 +3 2760 2944 2945 +3 2760 2945 2761 +3 2761 2945 2763 +3 2763 2945 2946 +3 2763 2946 2764 +3 2764 2946 2947 +3 2764 2947 2948 +3 2764 2948 2765 +3 2765 2948 2949 +3 2765 2949 2766 +3 2766 2949 2950 +3 2766 2950 2767 +3 2767 2950 2951 +3 2767 2951 2768 +3 2768 2951 2952 +3 2768 2952 2770 +3 2770 2952 2953 +3 2770 2953 2771 +3 2771 2953 2954 +3 2771 2954 2955 +3 2771 2955 2772 +3 2772 2955 2774 +3 2774 2955 2956 +3 2774 2956 2775 +3 2775 2956 2957 +3 2775 2957 2776 +3 2776 2957 2958 +3 2776 2958 2777 +3 2777 2958 2959 +3 2777 2959 2960 +3 2777 2960 2778 +3 2778 2960 2961 +3 2778 2961 2779 +3 2779 2961 2780 +3 2780 2961 2962 +3 2780 2962 2963 +3 2780 2963 2781 +3 2781 2963 2964 +3 2781 2964 2782 +3 2782 2964 2965 +3 2782 2965 2783 +3 2783 2965 2966 +3 2783 2966 2784 +3 2784 2966 2967 +3 2784 2967 2785 +3 2785 2967 2968 +3 2785 2968 2786 +3 2786 2968 2969 +3 2786 2969 2787 +3 2787 2969 2788 +3 2788 2969 2970 +3 2788 2970 2789 +3 2789 2970 2971 +3 2789 2971 2790 +3 2790 2971 2972 +3 2790 2972 2973 +3 2790 2973 2791 +3 2791 2973 2974 +3 2791 2974 2792 +3 2792 2974 2975 +3 2792 2975 2793 +3 2793 2975 2976 +3 2793 2976 2977 +3 2793 2977 2794 +3 2794 2977 2795 +3 2795 2977 2978 +3 2795 2978 2796 +3 2796 2978 2797 +3 2797 2978 2979 +3 2797 2979 2980 +3 2797 2980 2798 +3 2798 2980 2799 +3 2799 2980 2981 +3 2799 2981 2982 +3 2799 2982 2800 +3 2800 2982 2801 +3 2801 2982 2983 +3 2801 2983 2802 +3 2802 2983 2984 +3 2802 2984 2803 +3 2803 2984 2985 +3 2803 2985 2804 +3 2804 2985 2986 +3 2804 2986 2805 +3 2805 2986 2987 +3 2805 2987 2806 +3 2806 2987 2988 +3 2806 2988 2807 +3 2807 2988 2808 +3 2808 2988 2989 +3 2808 2989 2990 +3 2808 2990 2809 +3 2809 2990 2991 +3 2809 2991 2810 +3 2810 2991 2811 +3 2811 2991 2992 +3 2811 2992 2993 +3 2811 2993 2812 +3 2812 2993 2994 +3 2812 2994 2813 +3 2813 2994 2995 +3 2813 2995 2814 +3 2814 2995 2996 +3 2814 2996 2815 +3 2815 2996 2997 +3 2815 2997 2816 +3 2816 2997 2998 +3 2816 2998 2817 +3 2817 2998 2999 +3 2817 2999 2818 +3 2818 2999 3000 +3 2818 3000 2819 +3 2819 3000 3001 +3 2819 3001 2820 +3 2820 3001 3002 +3 2820 3002 2821 +3 2821 3002 3003 +3 2821 3003 2822 +3 2822 3003 3004 +3 2822 3004 2823 +3 2823 3004 3005 +3 2823 3005 3006 +3 2823 3006 2824 +3 2824 3006 3007 +3 2824 3007 2825 +3 2825 3007 3008 +3 2825 3008 2826 +3 2826 3008 3009 +3 2826 3009 2827 +3 2827 3009 3010 +3 2827 3010 2829 +3 2829 3010 3011 +3 2829 3011 2830 +3 2830 3011 3012 +3 2830 3012 2831 +3 2831 3012 2832 +3 2832 3012 3013 +3 2832 3013 3014 +3 2832 3014 2833 +3 2833 3014 3015 +3 2833 3015 2834 +3 2834 3015 3016 +3 2834 3016 2835 +3 2835 3016 3017 +3 2835 3017 2836 +3 2836 3017 2837 +3 2837 3017 3018 +3 2837 3018 2838 +3 2838 3018 3019 +3 2838 3019 2839 +3 2839 3019 3020 +3 2839 3020 2840 +3 2840 3020 3021 +3 2840 3021 3022 +3 2840 3022 2841 +3 2841 3022 2842 +3 2842 3022 3023 +3 2842 3023 2843 +3 2843 3023 3024 +3 2843 3024 3025 +3 2843 3025 2844 +3 2844 3025 3026 +3 2844 3026 2845 +3 2845 3026 3027 +3 2845 3027 2846 +3 2846 3027 3028 +3 2846 3028 2847 +3 2847 3028 2848 +3 2848 3028 3029 +3 2848 3029 3030 +3 2848 3030 2849 +3 2849 3030 3031 +3 2849 3031 2850 +3 2850 3031 3032 +3 2850 3032 2851 +3 2851 3032 3033 +3 2851 3033 2852 +3 2852 3033 3034 +3 2852 3034 2853 +3 2853 3034 3035 +3 2853 3035 2854 +3 2854 3035 3036 +3 2854 3036 2855 +3 2855 3036 3037 +3 2855 3037 2856 +3 2856 3037 3038 +3 2856 3038 2857 +3 2857 3038 3039 +3 2857 3039 2858 +3 2858 3039 3040 +3 2858 3040 2859 +3 2859 3040 3041 +3 2859 3041 3042 +3 2859 3042 2860 +3 2860 3042 2861 +3 2861 3042 3043 +3 2861 3043 3044 +3 2861 3044 2862 +3 2862 3044 2864 +3 2864 3044 3045 +3 2864 3045 2865 +3 2865 3045 3046 +3 2865 3046 2866 +3 2866 3046 2867 +3 2867 3046 3047 +3 2867 3047 3048 +3 2867 3048 3049 +3 2867 3049 2868 +3 2868 3049 2869 +3 2869 3049 3050 +3 2869 3050 2870 +3 2870 3050 3051 +3 2870 3051 2871 +3 2871 3051 3052 +3 2871 3052 2872 +3 2872 3052 3053 +3 2872 3053 2873 +3 2873 3053 3054 +3 2873 3054 2874 +3 2874 3054 3055 +3 2874 3055 2875 +3 2875 3055 3056 +3 2875 3056 2876 +3 2876 3056 3057 +3 2876 3057 2877 +3 2877 3057 3058 +3 2877 3058 2878 +3 2878 3058 3059 +3 2878 3059 2879 +3 2879 3059 3060 +3 2879 3060 2880 +3 2880 3060 3061 +3 2880 3061 2881 +3 2881 3061 3062 +3 2881 3062 2882 +3 2882 3062 3063 +3 2882 3063 2883 +3 2883 3063 3064 +3 2883 3064 2884 +3 2884 3064 3065 +3 2884 3065 2885 +3 2885 3065 3066 +3 2885 3066 2886 +3 2886 3066 3067 +3 2886 3067 2887 +3 2887 3067 3068 +3 2887 3068 2888 +3 2888 3068 3069 +3 2888 3069 2889 +3 2889 3069 3070 +3 2889 3070 2890 +3 2890 3070 3071 +3 2890 3071 2891 +3 2891 3071 3072 +3 2891 3072 2892 +3 2892 3072 3073 +3 2892 3073 2893 +3 2893 3073 3074 +3 2893 3074 3075 +3 2893 3075 2894 +3 2894 3075 3076 +3 2894 3076 2895 +3 2895 3076 2896 +3 2896 3076 3077 +3 2896 3077 2897 +3 2897 3077 3078 +3 2897 3078 3079 +3 2897 3079 2898 +3 2898 3079 2899 +3 2899 3079 3080 +3 2899 3080 3081 +3 2899 3081 2900 +3 2900 3081 2901 +3 2901 3081 3082 +3 2901 3082 2902 +3 2902 3082 3083 +3 2902 3083 3084 +3 2902 3084 2903 +3 2903 3084 3085 +3 2903 3085 2904 +3 2904 3085 3086 +3 2904 3086 2905 +3 2905 3086 3087 +3 2905 3087 2906 +3 2906 3087 3088 +3 2906 3088 2907 +3 2907 3088 3089 +3 2907 3089 3090 +3 2907 3090 2908 +3 2908 3090 2909 +3 2909 3090 3091 +3 2909 3091 2910 +3 2910 3091 3092 +3 2910 3092 3093 +3 2910 3093 3094 +3 2910 3094 2911 +3 2911 3094 2912 +3 2912 3094 3095 +3 2912 3095 3096 +3 2912 3096 2913 +3 2913 3096 3097 +3 2913 3097 2914 +3 2914 3097 3098 +3 2914 3098 2915 +3 2915 3098 3099 +3 2915 3099 2916 +3 2916 3099 3100 +3 2916 3100 3101 +3 2916 3101 2917 +3 2917 3101 3102 +3 2917 3102 3103 +3 2917 3103 2918 +3 2918 3103 3104 +3 2918 3104 2919 +3 2919 3104 2920 +3 2920 3104 3105 +3 2920 3105 2921 +3 2921 3105 2922 +3 2922 3105 3106 +3 2922 3106 2923 +3 2923 3106 3107 +3 2923 3107 2924 +3 2924 3107 3108 +3 2924 3108 2925 +3 2925 3108 3109 +3 2925 3109 2926 +3 2926 3109 3110 +3 2926 3110 2927 +3 2927 3110 3111 +3 2927 3111 2928 +3 2928 3111 3112 +3 2928 3112 2929 +3 2929 3112 3113 +3 2929 3113 2930 +3 2930 3113 3114 +3 2930 3114 2931 +3 2931 3114 3115 +3 2931 3115 2932 +3 2932 3115 3116 +3 2932 3116 2933 +3 2933 3116 3117 +3 2933 3117 2934 +3 2934 3117 3118 +3 2934 3118 2935 +3 2935 3118 3119 +3 2935 3119 2936 +3 2936 3119 3120 +3 2936 3120 2937 +3 2937 3120 3121 +3 2937 3121 3122 +3 2937 3122 2938 +3 2938 3122 3123 +3 2938 3123 2939 +3 2939 3123 2940 +3 2940 3123 2941 +3 2941 3123 3124 +3 2941 3124 2942 +3 2942 3124 3125 +3 2942 3125 3126 +3 2942 3126 2943 +3 2943 3126 3127 +3 2943 3127 3128 +3 2943 3128 2944 +3 2944 3128 3129 +3 2944 3129 2945 +3 2945 3129 2946 +3 2946 3129 3130 +3 2946 3130 2947 +3 2947 3130 3131 +3 2947 3131 3132 +3 2947 3132 2948 +3 2948 3132 3133 +3 2948 3133 3134 +3 2948 3134 2949 +3 2949 3134 3135 +3 2949 3135 2950 +3 2950 3135 3136 +3 2950 3136 2951 +3 2951 3136 3137 +3 2951 3137 3138 +3 2951 3138 2952 +3 2952 3138 3139 +3 2952 3139 2953 +3 2953 3139 3140 +3 2953 3140 3141 +3 2953 3141 2954 +3 2954 3141 3142 +3 2954 3142 3143 +3 2954 3143 2955 +3 2955 3143 2956 +3 2956 3143 3144 +3 2956 3144 2957 +3 2957 3144 3145 +3 2957 3145 3146 +3 2957 3146 2958 +3 2958 3146 3147 +3 2958 3147 2959 +3 2959 3147 3148 +3 2959 3148 3149 +3 2959 3149 2960 +3 2960 3149 2961 +3 2961 3149 3150 +3 2961 3150 2962 +3 2962 3150 3151 +3 2962 3151 3152 +3 2962 3152 2963 +3 2963 3152 3153 +3 2963 3153 2964 +3 2964 3153 3154 +3 2964 3154 2965 +3 2965 3154 3155 +3 2965 3155 2966 +3 2966 3155 3156 +3 2966 3156 2967 +3 2967 3156 3157 +3 2967 3157 2968 +3 2968 3157 3158 +3 2968 3158 2969 +3 2969 3158 3159 +3 2969 3159 2970 +3 2970 3159 3160 +3 2970 3160 2971 +3 2971 3160 3161 +3 2971 3161 2972 +3 2972 3161 3162 +3 2972 3162 2973 +3 2973 3162 3163 +3 2973 3163 2974 +3 2974 3163 3164 +3 2974 3164 2975 +3 2975 3164 3165 +3 2975 3165 2976 +3 2976 3165 3166 +3 2976 3166 3167 +3 2976 3167 2977 +3 2977 3167 2978 +3 2978 3167 3168 +3 2978 3168 2979 +3 2979 3168 3169 +3 2979 3169 2980 +3 2980 3169 3170 +3 2980 3170 2981 +3 2981 3170 3171 +3 2981 3171 3172 +3 2981 3172 2982 +3 2982 3172 3173 +3 2982 3173 2983 +3 2983 3173 3174 +3 2983 3174 2984 +3 2984 3174 2985 +3 2985 3174 3175 +3 2985 3175 2986 +3 2986 3175 3176 +3 2986 3176 3177 +3 2986 3177 3178 +3 2986 3178 2987 +3 2987 3178 3179 +3 2987 3179 2988 +3 2988 3179 2989 +3 2989 3179 3180 +3 2989 3180 3181 +3 2989 3181 2990 +3 2990 3181 3182 +3 2990 3182 2991 +3 2991 3182 2992 +3 2992 3182 3183 +3 2992 3183 3184 +3 2992 3184 2993 +3 2993 3184 3185 +3 2993 3185 2994 +3 2994 3185 3186 +3 2994 3186 2995 +3 2995 3186 3187 +3 2995 3187 2996 +3 2996 3187 3188 +3 2996 3188 2997 +3 2997 3188 2998 +3 2998 3188 3189 +3 2998 3189 3190 +3 2998 3190 2999 +3 2999 3190 3191 +3 2999 3191 3192 +3 2999 3192 3193 +3 2999 3193 3000 +3 3000 3193 3001 +3 3001 3193 3194 +3 3001 3194 3002 +3 3002 3194 3195 +3 3002 3195 3003 +3 3003 3195 3196 +3 3003 3196 3004 +3 3004 3196 3005 +3 3005 3196 3197 +3 3005 3197 3198 +3 3005 3198 3006 +3 3006 3198 3199 +3 3006 3199 3200 +3 3006 3200 3007 +3 3007 3200 3201 +3 3007 3201 3008 +3 3008 3201 3202 +3 3008 3202 3009 +3 3009 3202 3203 +3 3009 3203 3010 +3 3010 3203 3204 +3 3010 3204 3011 +3 3011 3204 3205 +3 3011 3205 3012 +3 3012 3205 3206 +3 3012 3206 3013 +3 3013 3206 3207 +3 3013 3207 3208 +3 3013 3208 3014 +3 3014 3208 3209 +3 3014 3209 3015 +3 3015 3209 3210 +3 3015 3210 3016 +3 3016 3210 3211 +3 3016 3211 3017 +3 3017 3211 3018 +3 3018 3211 3212 +3 3018 3212 3019 +3 3019 3212 3213 +3 3019 3213 3020 +3 3020 3213 3214 +3 3020 3214 3021 +3 3021 3214 3215 +3 3021 3215 3216 +3 3021 3216 3022 +3 3022 3216 3023 +3 3023 3216 3217 +3 3023 3217 3024 +3 3024 3217 3218 +3 3024 3218 3219 +3 3024 3219 3025 +3 3025 3219 3220 +3 3025 3220 3026 +3 3026 3220 3221 +3 3026 3221 3027 +3 3027 3221 3222 +3 3027 3222 3028 +3 3028 3222 3029 +3 3029 3222 3223 +3 3029 3223 3224 +3 3029 3224 3030 +3 3030 3224 3225 +3 3030 3225 3031 +3 3031 3225 3226 +3 3031 3226 3032 +3 3032 3226 3227 +3 3032 3227 3033 +3 3033 3227 3228 +3 3033 3228 3034 +3 3034 3228 3229 +3 3034 3229 3035 +3 3035 3229 3036 +3 3036 3229 3230 +3 3036 3230 3231 +3 3036 3231 3037 +3 3037 3231 3232 +3 3037 3232 3038 +3 3038 3232 3233 +3 3038 3233 3039 +3 3039 3233 3234 +3 3039 3234 3040 +3 3040 3234 3235 +3 3040 3235 3041 +3 3041 3235 3236 +3 3041 3236 3237 +3 3041 3237 3042 +3 3042 3237 3043 +3 3043 3237 3238 +3 3043 3238 3239 +3 3043 3239 3044 +3 3044 3239 3045 +3 3045 3239 3047 +3 3047 3239 3240 +3 3047 3240 3048 +3 3048 3240 3241 +3 3048 3241 3242 +3 3048 3242 3049 +3 3049 3242 3243 +3 3049 3243 3244 +3 3049 3244 3050 +3 3050 3244 3245 +3 3050 3245 3051 +3 3051 3245 3246 +3 3051 3246 3052 +3 3052 3246 3247 +3 3052 3247 3053 +3 3053 3247 3248 +3 3053 3248 3054 +3 3054 3248 3249 +3 3054 3249 3055 +3 3055 3249 3250 +3 3055 3250 3056 +3 3056 3250 3251 +3 3056 3251 3057 +3 3057 3251 3252 +3 3057 3252 3058 +3 3058 3252 3253 +3 3058 3253 3059 +3 3059 3253 3254 +3 3059 3254 3060 +3 3060 3254 3255 +3 3060 3255 3061 +3 3061 3255 3256 +3 3061 3256 3062 +3 3062 3256 3257 +3 3062 3257 3063 +3 3063 3257 3258 +3 3063 3258 3064 +3 3064 3258 3259 +3 3064 3259 3065 +3 3065 3259 3260 +3 3065 3260 3066 +3 3066 3260 3261 +3 3066 3261 3067 +3 3067 3261 3262 +3 3067 3262 3068 +3 3068 3262 3263 +3 3068 3263 3069 +3 3069 3263 3264 +3 3069 3264 3070 +3 3070 3264 3265 +3 3070 3265 3071 +3 3071 3265 3266 +3 3071 3266 3072 +3 3072 3266 3267 +3 3072 3267 3073 +3 3073 3267 3268 +3 3073 3268 3074 +3 3074 3268 3269 +3 3074 3269 3270 +3 3074 3270 3075 +3 3075 3270 3271 +3 3075 3271 3076 +3 3076 3271 3077 +3 3077 3271 3272 +3 3077 3272 3078 +3 3078 3272 3273 +3 3078 3273 3274 +3 3078 3274 3079 +3 3079 3274 3080 +3 3080 3274 3275 +3 3080 3275 3276 +3 3080 3276 3081 +3 3081 3276 3082 +3 3082 3276 3277 +3 3082 3277 3083 +3 3083 3277 3278 +3 3083 3278 3279 +3 3083 3279 3084 +3 3084 3279 3280 +3 3084 3280 3085 +3 3085 3280 3281 +3 3085 3281 3086 +3 3086 3281 3282 +3 3086 3282 3087 +3 3087 3282 3283 +3 3087 3283 3088 +3 3088 3283 3284 +3 3088 3284 3089 +3 3089 3284 3091 +3 3091 3284 3285 +3 3091 3285 3286 +3 3091 3286 3092 +3 3092 3286 3287 +3 3092 3287 3093 +3 3093 3287 3288 +3 3093 3288 3289 +3 3093 3289 3094 +3 3094 3289 3095 +3 3095 3289 3290 +3 3095 3290 3291 +3 3095 3291 3096 +3 3096 3291 3292 +3 3096 3292 3097 +3 3097 3292 3293 +3 3097 3293 3098 +3 3098 3293 3294 +3 3098 3294 3099 +3 3099 3294 3295 +3 3099 3295 3100 +3 3100 3295 3296 +3 3100 3296 3101 +3 3101 3296 3297 +3 3101 3297 3298 +3 3101 3298 3102 +3 3102 3298 3299 +3 3102 3299 3300 +3 3102 3300 3301 +3 3102 3301 3103 +3 3103 3301 3302 +3 3103 3302 3104 +3 3104 3302 3105 +3 3105 3302 3303 +3 3105 3303 3106 +3 3106 3303 3304 +3 3106 3304 3107 +3 3107 3304 3305 +3 3107 3305 3108 +3 3108 3305 3306 +3 3108 3306 3109 +3 3109 3306 3307 +3 3109 3307 3110 +3 3110 3307 3308 +3 3110 3308 3111 +3 3111 3308 3309 +3 3111 3309 3112 +3 3112 3309 3310 +3 3112 3310 3113 +3 3113 3310 3311 +3 3113 3311 3114 +3 3114 3311 3312 +3 3114 3312 3115 +3 3115 3312 3313 +3 3115 3313 3116 +3 3116 3313 3314 +3 3116 3314 3117 +3 3117 3314 3315 +3 3117 3315 3118 +3 3118 3315 3316 +3 3118 3316 3119 +3 3119 3316 3317 +3 3119 3317 3120 +3 3120 3317 3318 +3 3120 3318 3121 +3 3121 3318 3319 +3 3121 3319 3122 +3 3122 3319 3320 +3 3122 3320 3321 +3 3122 3321 3322 +3 3122 3322 3123 +3 3123 3322 3323 +3 3123 3323 3124 +3 3124 3323 3324 +3 3124 3324 3125 +3 3125 3324 3325 +3 3125 3325 3326 +3 3125 3326 3126 +3 3126 3326 3127 +3 3127 3326 3327 +3 3127 3327 3328 +3 3127 3328 3128 +3 3128 3328 3329 +3 3128 3329 3129 +3 3129 3329 3130 +3 3130 3329 3330 +3 3130 3330 3331 +3 3130 3331 3131 +3 3131 3331 3332 +3 3131 3332 3132 +3 3132 3332 3333 +3 3132 3333 3133 +3 3133 3333 3334 +3 3133 3334 3134 +3 3134 3334 3335 +3 3134 3335 3135 +3 3135 3335 3336 +3 3135 3336 3136 +3 3136 3336 3337 +3 3136 3337 3137 +3 3137 3337 3338 +3 3137 3338 3339 +3 3137 3339 3138 +3 3138 3339 3340 +3 3138 3340 3139 +3 3139 3340 3140 +3 3140 3340 3341 +3 3140 3341 3342 +3 3140 3342 3141 +3 3141 3342 3343 +3 3141 3343 3142 +3 3142 3343 3344 +3 3142 3344 3143 +3 3143 3344 3144 +3 3144 3344 3345 +3 3144 3345 3145 +3 3145 3345 3346 +3 3145 3346 3146 +3 3146 3346 3347 +3 3146 3347 3147 +3 3147 3347 3348 +3 3147 3348 3148 +3 3148 3348 3349 +3 3148 3349 3350 +3 3148 3350 3149 +3 3149 3350 3150 +3 3150 3350 3351 +3 3150 3351 3151 +3 3151 3351 3352 +3 3151 3352 3353 +3 3151 3353 3152 +3 3152 3353 3354 +3 3152 3354 3153 +3 3153 3354 3355 +3 3153 3355 3154 +3 3154 3355 3356 +3 3154 3356 3155 +3 3155 3356 3357 +3 3155 3357 3156 +3 3156 3357 3358 +3 3156 3358 3157 +3 3157 3358 3359 +3 3157 3359 3158 +3 3158 3359 3360 +3 3158 3360 3159 +3 3159 3360 3361 +3 3159 3361 3160 +3 3160 3361 3362 +3 3160 3362 3161 +3 3161 3362 3363 +3 3161 3363 3162 +3 3162 3363 3364 +3 3162 3364 3163 +3 3163 3364 3365 +3 3163 3365 3164 +3 3164 3365 3366 +3 3164 3366 3165 +3 3165 3366 3367 +3 3165 3367 3166 +3 3166 3367 3368 +3 3166 3368 3369 +3 3166 3369 3167 +3 3167 3369 3168 +3 3168 3369 3370 +3 3168 3370 3169 +3 3169 3370 3371 +3 3169 3371 3170 +3 3170 3371 3372 +3 3170 3372 3171 +3 3171 3372 3373 +3 3171 3373 3374 +3 3171 3374 3172 +3 3172 3374 3173 +3 3173 3374 3375 +3 3173 3375 3174 +3 3174 3375 3376 +3 3174 3376 3175 +3 3175 3376 3377 +3 3175 3377 3176 +3 3176 3377 3378 +3 3176 3378 3177 +3 3177 3378 3379 +3 3177 3379 3380 +3 3177 3380 3178 +3 3178 3380 3381 +3 3178 3381 3179 +3 3179 3381 3180 +3 3180 3381 3382 +3 3180 3382 3383 +3 3180 3383 3181 +3 3181 3383 3384 +3 3181 3384 3182 +3 3182 3384 3183 +3 3183 3384 3385 +3 3183 3385 3386 +3 3183 3386 3184 +3 3184 3386 3387 +3 3184 3387 3185 +3 3185 3387 3388 +3 3185 3388 3186 +3 3186 3388 3389 +3 3186 3389 3187 +3 3187 3389 3390 +3 3187 3390 3188 +3 3188 3390 3189 +3 3189 3390 3391 +3 3189 3391 3392 +3 3189 3392 3190 +3 3190 3392 3191 +3 3191 3392 3393 +3 3191 3393 3394 +3 3191 3394 3192 +3 3192 3394 3395 +3 3192 3395 3396 +3 3192 3396 3193 +3 3193 3396 3194 +3 3194 3396 3397 +3 3194 3397 3195 +3 3195 3397 3196 +3 3196 3397 3197 +3 3197 3397 3398 +3 3197 3398 3198 +3 3198 3398 3399 +3 3198 3399 3400 +3 3198 3400 3199 +3 3199 3400 3401 +3 3199 3401 3402 +3 3199 3402 3200 +3 3200 3402 3201 +3 3201 3402 3403 +3 3201 3403 3404 +3 3201 3404 3202 +3 3202 3404 3203 +3 3203 3404 3405 +3 3203 3405 3204 +3 3204 3405 3406 +3 3204 3406 3407 +3 3204 3407 3205 +3 3205 3407 3408 +3 3205 3408 3206 +3 3206 3408 3409 +3 3206 3409 3207 +3 3207 3409 3410 +3 3207 3410 3411 +3 3207 3411 3208 +3 3208 3411 3412 +3 3208 3412 3209 +3 3209 3412 3413 +3 3209 3413 3210 +3 3210 3413 3414 +3 3210 3414 3211 +3 3211 3414 3212 +3 3212 3414 3415 +3 3212 3415 3213 +3 3213 3415 3416 +3 3213 3416 3214 +3 3214 3416 3417 +3 3214 3417 3215 +3 3215 3417 3418 +3 3215 3418 3419 +3 3215 3419 3216 +3 3216 3419 3217 +3 3217 3419 3420 +3 3217 3420 3218 +3 3218 3420 3421 +3 3218 3421 3422 +3 3218 3422 3219 +3 3219 3422 3423 +3 3219 3423 3220 +3 3220 3423 3424 +3 3220 3424 3221 +3 3221 3424 3425 +3 3221 3425 3222 +3 3222 3425 3223 +3 3223 3425 3426 +3 3223 3426 3427 +3 3223 3427 3224 +3 3224 3427 3428 +3 3224 3428 3225 +3 3225 3428 3429 +3 3225 3429 3226 +3 3226 3429 3430 +3 3226 3430 3227 +3 3227 3430 3431 +3 3227 3431 3228 +3 3228 3431 3432 +3 3228 3432 3229 +3 3229 3432 3230 +3 3230 3432 3433 +3 3230 3433 3434 +3 3230 3434 3231 +3 3231 3434 3435 +3 3231 3435 3232 +3 3232 3435 3436 +3 3232 3436 3233 +3 3233 3436 3437 +3 3233 3437 3234 +3 3234 3437 3438 +3 3234 3438 3235 +3 3235 3438 3439 +3 3235 3439 3236 +3 3236 3439 3440 +3 3236 3440 3441 +3 3236 3441 3237 +3 3237 3441 3238 +3 3238 3441 3442 +3 3238 3442 3240 +3 3240 3442 3241 +3 3241 3442 3443 +3 3241 3443 3444 +3 3241 3444 3242 +3 3242 3444 3445 +3 3242 3445 3446 +3 3242 3446 3243 +3 3243 3446 3244 +3 3244 3446 3447 +3 3244 3447 3245 +3 3245 3447 3246 +3 3246 3447 3448 +3 3246 3448 3247 +3 3247 3448 3449 +3 3247 3449 3248 +3 3248 3449 3450 +3 3248 3450 3451 +3 3248 3451 3249 +3 3249 3451 3452 +3 3249 3452 3250 +3 3250 3452 3453 +3 3250 3453 3251 +3 3251 3453 3454 +3 3251 3454 3252 +3 3252 3454 3455 +3 3252 3455 3253 +3 3253 3455 3254 +3 3254 3455 3456 +3 3254 3456 3457 +3 3254 3457 3255 +3 3255 3457 3458 +3 3255 3458 3256 +3 3256 3458 3459 +3 3256 3459 3257 +3 3257 3459 3460 +3 3257 3460 3258 +3 3258 3460 3461 +3 3258 3461 3259 +3 3259 3461 3462 +3 3259 3462 3260 +3 3260 3462 3463 +3 3260 3463 3261 +3 3261 3463 3464 +3 3261 3464 3262 +3 3262 3464 3465 +3 3262 3465 3263 +3 3263 3465 3466 +3 3263 3466 3264 +3 3264 3466 3467 +3 3264 3467 3265 +3 3265 3467 3266 +3 3266 3467 3468 +3 3266 3468 3469 +3 3266 3469 3267 +3 3267 3469 3470 +3 3267 3470 3268 +3 3268 3470 3471 +3 3268 3471 3269 +3 3269 3471 3472 +3 3269 3472 3270 +3 3270 3472 3473 +3 3270 3473 3271 +3 3271 3473 3272 +3 3272 3473 3474 +3 3272 3474 3273 +3 3273 3474 3475 +3 3273 3475 3476 +3 3273 3476 3274 +3 3274 3476 3275 +3 3275 3476 3477 +3 3275 3477 3478 +3 3275 3478 3276 +3 3276 3478 3277 +3 3277 3478 3479 +3 3277 3479 3278 +3 3278 3479 3480 +3 3278 3480 3481 +3 3278 3481 3279 +3 3279 3481 3482 +3 3279 3482 3280 +3 3280 3482 3281 +3 3281 3482 3483 +3 3281 3483 3484 +3 3281 3484 3282 +3 3282 3484 3485 +3 3282 3485 3283 +3 3283 3485 3284 +3 3284 3485 3285 +3 3285 3485 3486 +3 3285 3486 3286 +3 3286 3486 3487 +3 3286 3487 3488 +3 3286 3488 3287 +3 3287 3488 3489 +3 3287 3489 3288 +3 3288 3489 3490 +3 3288 3490 3491 +3 3288 3491 3289 +3 3289 3491 3290 +3 3290 3491 3492 +3 3290 3492 3493 +3 3290 3493 3291 +3 3291 3493 3494 +3 3291 3494 3292 +3 3292 3494 3495 +3 3292 3495 3293 +3 3293 3495 3496 +3 3293 3496 3294 +3 3294 3496 3497 +3 3294 3497 3295 +3 3295 3497 3498 +3 3295 3498 3296 +3 3296 3498 3499 +3 3296 3499 3297 +3 3297 3499 3500 +3 3297 3500 3501 +3 3297 3501 3298 +3 3298 3501 3502 +3 3298 3502 3299 +3 3299 3502 3503 +3 3299 3503 3504 +3 3299 3504 3505 +3 3299 3505 3300 +3 3300 3505 3506 +3 3300 3506 3301 +3 3301 3506 3302 +3 3302 3506 3303 +3 3303 3506 3507 +3 3303 3507 3304 +3 3304 3507 3508 +3 3304 3508 3305 +3 3305 3508 3509 +3 3305 3509 3306 +3 3306 3509 3510 +3 3306 3510 3307 +3 3307 3510 3511 +3 3307 3511 3308 +3 3308 3511 3512 +3 3308 3512 3309 +3 3309 3512 3513 +3 3309 3513 3310 +3 3310 3513 3514 +3 3310 3514 3311 +3 3311 3514 3515 +3 3311 3515 3312 +3 3312 3515 3516 +3 3312 3516 3313 +3 3313 3516 3517 +3 3313 3517 3314 +3 3314 3517 3518 +3 3314 3518 3315 +3 3315 3518 3519 +3 3315 3519 3316 +3 3316 3519 3520 +3 3316 3520 3317 +3 3317 3520 3521 +3 3317 3521 3318 +3 3318 3521 3522 +3 3318 3522 3319 +3 3319 3522 3523 +3 3319 3523 3524 +3 3319 3524 3320 +3 3320 3524 3525 +3 3320 3525 3321 +3 3321 3525 3526 +3 3321 3526 3527 +3 3321 3527 3322 +3 3322 3527 3323 +3 3323 3527 3528 +3 3323 3528 3324 +3 3324 3528 3529 +3 3324 3529 3325 +3 3325 3529 3530 +3 3325 3530 3327 +3 3327 3530 3531 +3 3327 3531 3328 +3 3328 3531 3532 +3 3328 3532 3329 +3 3329 3532 3330 +3 3330 3532 3533 +3 3330 3533 3534 +3 3330 3534 3331 +3 3331 3534 3535 +3 3331 3535 3332 +3 3332 3535 3536 +3 3332 3536 3333 +3 3333 3536 3537 +3 3333 3537 3538 +3 3333 3538 3334 +3 3334 3538 3539 +3 3334 3539 3540 +3 3334 3540 3335 +3 3335 3540 3336 +3 3336 3540 3541 +3 3336 3541 3337 +3 3337 3541 3542 +3 3337 3542 3338 +3 3338 3542 3543 +3 3338 3543 3544 +3 3338 3544 3339 +3 3339 3544 3545 +3 3339 3545 3340 +3 3340 3545 3341 +3 3341 3545 3546 +3 3341 3546 3342 +3 3342 3546 3547 +3 3342 3547 3343 +3 3343 3547 3548 +3 3343 3548 3344 +3 3344 3548 3345 +3 3345 3548 3549 +3 3345 3549 3346 +3 3346 3549 3550 +3 3346 3550 3551 +3 3346 3551 3347 +3 3347 3551 3348 +3 3348 3551 3552 +3 3348 3552 3349 +3 3349 3552 3553 +3 3349 3553 3350 +3 3350 3553 3554 +3 3350 3554 3351 +3 3351 3554 3555 +3 3351 3555 3352 +3 3352 3555 3556 +3 3352 3556 3557 +3 3352 3557 3353 +3 3353 3557 3558 +3 3353 3558 3354 +3 3354 3558 3559 +3 3354 3559 3355 +3 3355 3559 3560 +3 3355 3560 3356 +3 3356 3560 3561 +3 3356 3561 3357 +3 3357 3561 3562 +3 3357 3562 3358 +3 3358 3562 3563 +3 3358 3563 3359 +3 3359 3563 3564 +3 3359 3564 3360 +3 3360 3564 3565 +3 3360 3565 3361 +3 3361 3565 3566 +3 3361 3566 3362 +3 3362 3566 3567 +3 3362 3567 3363 +3 3363 3567 3568 +3 3363 3568 3364 +3 3364 3568 3569 +3 3364 3569 3365 +3 3365 3569 3570 +3 3365 3570 3366 +3 3366 3570 3571 +3 3366 3571 3367 +3 3367 3571 3572 +3 3367 3572 3368 +3 3368 3572 3573 +3 3368 3573 3574 +3 3368 3574 3369 +3 3369 3574 3370 +3 3370 3574 3575 +3 3370 3575 3371 +3 3371 3575 3576 +3 3371 3576 3372 +3 3372 3576 3577 +3 3372 3577 3373 +3 3373 3577 3578 +3 3373 3578 3579 +3 3373 3579 3374 +3 3374 3579 3375 +3 3375 3579 3580 +3 3375 3580 3376 +3 3376 3580 3581 +3 3376 3581 3377 +3 3377 3581 3582 +3 3377 3582 3378 +3 3378 3582 3583 +3 3378 3583 3379 +3 3379 3583 3584 +3 3379 3584 3585 +3 3379 3585 3380 +3 3380 3585 3586 +3 3380 3586 3381 +3 3381 3586 3382 +3 3382 3586 3587 +3 3382 3587 3588 +3 3382 3588 3383 +3 3383 3588 3589 +3 3383 3589 3384 +3 3384 3589 3385 +3 3385 3589 3590 +3 3385 3590 3591 +3 3385 3591 3386 +3 3386 3591 3592 +3 3386 3592 3387 +3 3387 3592 3593 +3 3387 3593 3388 +3 3388 3593 3594 +3 3388 3594 3389 +3 3389 3594 3595 +3 3389 3595 3390 +3 3390 3595 3391 +3 3391 3595 3596 +3 3391 3596 3597 +3 3391 3597 3392 +3 3392 3597 3393 +3 3393 3597 3598 +3 3393 3598 3394 +3 3394 3598 3599 +3 3394 3599 3600 +3 3394 3600 3395 +3 3395 3600 3601 +3 3395 3601 3602 +3 3395 3602 3396 +3 3396 3602 3397 +3 3397 3602 3398 +3 3398 3602 3399 +3 3399 3602 3603 +3 3399 3603 3400 +3 3400 3603 3604 +3 3400 3604 3605 +3 3400 3605 3606 +3 3400 3606 3401 +3 3401 3606 3607 +3 3401 3607 3608 +3 3401 3608 3402 +3 3402 3608 3403 +3 3403 3608 3609 +3 3403 3609 3610 +3 3403 3610 3404 +3 3404 3610 3405 +3 3405 3610 3611 +3 3405 3611 3406 +3 3406 3611 3612 +3 3406 3612 3407 +3 3407 3612 3613 +3 3407 3613 3408 +3 3408 3613 3614 +3 3408 3614 3409 +3 3409 3614 3615 +3 3409 3615 3410 +3 3410 3615 3616 +3 3410 3616 3617 +3 3410 3617 3411 +3 3411 3617 3618 +3 3411 3618 3412 +3 3412 3618 3619 +3 3412 3619 3413 +3 3413 3619 3620 +3 3413 3620 3414 +3 3414 3620 3415 +3 3415 3620 3621 +3 3415 3621 3416 +3 3416 3621 3622 +3 3416 3622 3417 +3 3417 3622 3623 +3 3417 3623 3418 +3 3418 3623 3624 +3 3418 3624 3625 +3 3418 3625 3419 +3 3419 3625 3420 +3 3420 3625 3626 +3 3420 3626 3421 +3 3421 3626 3627 +3 3421 3627 3628 +3 3421 3628 3422 +3 3422 3628 3629 +3 3422 3629 3423 +3 3423 3629 3630 +3 3423 3630 3424 +3 3424 3630 3631 +3 3424 3631 3425 +3 3425 3631 3426 +3 3426 3631 3632 +3 3426 3632 3427 +3 3427 3632 3633 +3 3427 3633 3428 +3 3428 3633 3634 +3 3428 3634 3429 +3 3429 3634 3635 +3 3429 3635 3636 +3 3429 3636 3430 +3 3430 3636 3431 +3 3431 3636 3637 +3 3431 3637 3432 +3 3432 3637 3638 +3 3432 3638 3639 +3 3432 3639 3433 +3 3433 3639 3640 +3 3433 3640 3434 +3 3434 3640 3641 +3 3434 3641 3435 +3 3435 3641 3642 +3 3435 3642 3436 +3 3436 3642 3643 +3 3436 3643 3437 +3 3437 3643 3644 +3 3437 3644 3438 +3 3438 3644 3645 +3 3438 3645 3439 +3 3439 3645 3646 +3 3439 3646 3440 +3 3440 3646 3647 +3 3440 3647 3648 +3 3440 3648 3441 +3 3441 3648 3442 +3 3442 3648 3443 +3 3443 3648 3649 +3 3443 3649 3650 +3 3443 3650 3445 +3 3445 3650 3447 +3 3447 3650 3651 +3 3447 3651 3448 +3 3448 3651 3652 +3 3448 3652 3653 +3 3448 3653 3449 +3 3449 3653 3654 +3 3449 3654 3450 +3 3450 3654 3655 +3 3450 3655 3656 +3 3450 3656 3451 +3 3451 3656 3657 +3 3451 3657 3452 +3 3452 3657 3658 +3 3452 3658 3453 +3 3453 3658 3659 +3 3453 3659 3454 +3 3454 3659 3455 +3 3455 3659 3660 +3 3455 3660 3661 +3 3455 3661 3456 +3 3456 3661 3662 +3 3456 3662 3457 +3 3457 3662 3663 +3 3457 3663 3458 +3 3458 3663 3664 +3 3458 3664 3459 +3 3459 3664 3665 +3 3459 3665 3460 +3 3460 3665 3666 +3 3460 3666 3461 +3 3461 3666 3667 +3 3461 3667 3462 +3 3462 3667 3668 +3 3462 3668 3463 +3 3463 3668 3669 +3 3463 3669 3464 +3 3464 3669 3670 +3 3464 3670 3465 +3 3465 3670 3671 +3 3465 3671 3466 +3 3466 3671 3672 +3 3466 3672 3467 +3 3467 3672 3673 +3 3467 3673 3468 +3 3468 3673 3674 +3 3468 3674 3469 +3 3469 3674 3470 +3 3470 3674 3675 +3 3470 3675 3676 +3 3470 3676 3471 +3 3471 3676 3677 +3 3471 3677 3678 +3 3471 3678 3472 +3 3472 3678 3679 +3 3472 3679 3680 +3 3472 3680 3473 +3 3473 3680 3474 +3 3474 3680 3681 +3 3474 3681 3475 +3 3475 3681 3682 +3 3475 3682 3683 +3 3475 3683 3476 +3 3476 3683 3477 +3 3477 3683 3684 +3 3477 3684 3685 +3 3477 3685 3478 +3 3478 3685 3479 +3 3479 3685 3686 +3 3479 3686 3480 +3 3480 3686 3687 +3 3480 3687 3688 +3 3480 3688 3481 +3 3481 3688 3482 +3 3482 3688 3689 +3 3482 3689 3483 +3 3483 3689 3690 +3 3483 3690 3691 +3 3483 3691 3484 +3 3484 3691 3692 +3 3484 3692 3485 +3 3485 3692 3486 +3 3486 3692 3693 +3 3486 3693 3694 +3 3486 3694 3695 +3 3486 3695 3487 +3 3487 3695 3696 +3 3487 3696 3488 +3 3488 3696 3697 +3 3488 3697 3489 +3 3489 3697 3698 +3 3489 3698 3490 +3 3490 3698 3699 +3 3490 3699 3700 +3 3490 3700 3491 +3 3491 3700 3492 +3 3492 3700 3701 +3 3492 3701 3493 +3 3493 3701 3702 +3 3493 3702 3494 +3 3494 3702 3703 +3 3494 3703 3495 +3 3495 3703 3704 +3 3495 3704 3496 +3 3496 3704 3705 +3 3496 3705 3497 +3 3497 3705 3706 +3 3497 3706 3498 +3 3498 3706 3707 +3 3498 3707 3499 +3 3499 3707 3708 +3 3499 3708 3500 +3 3500 3708 3709 +3 3500 3709 3710 +3 3500 3710 3501 +3 3501 3710 3711 +3 3501 3711 3502 +3 3502 3711 3503 +3 3503 3711 3712 +3 3503 3712 3713 +3 3503 3713 3714 +3 3503 3714 3504 +3 3504 3714 3715 +3 3504 3715 3505 +3 3505 3715 3716 +3 3505 3716 3507 +3 3507 3716 3508 +3 3508 3716 3717 +3 3508 3717 3509 +3 3509 3717 3718 +3 3509 3718 3510 +3 3510 3718 3719 +3 3510 3719 3511 +3 3511 3719 3720 +3 3511 3720 3512 +3 3512 3720 3721 +3 3512 3721 3513 +3 3513 3721 3722 +3 3513 3722 3514 +3 3514 3722 3723 +3 3514 3723 3515 +3 3515 3723 3724 +3 3515 3724 3516 +3 3516 3724 3725 +3 3516 3725 3517 +3 3517 3725 3726 +3 3517 3726 3518 +3 3518 3726 3727 +3 3518 3727 3519 +3 3519 3727 3728 +3 3519 3728 3520 +3 3520 3728 3729 +3 3520 3729 3521 +3 3521 3729 3730 +3 3521 3730 3522 +3 3522 3730 3731 +3 3522 3731 3523 +3 3523 3731 3732 +3 3523 3732 3733 +3 3523 3733 3524 +3 3524 3733 3525 +3 3525 3733 3734 +3 3525 3734 3735 +3 3525 3735 3526 +3 3526 3735 3736 +3 3526 3736 3527 +3 3527 3736 3528 +3 3528 3736 3737 +3 3528 3737 3738 +3 3528 3738 3529 +3 3529 3738 3739 +3 3529 3739 3530 +3 3530 3739 3740 +3 3530 3740 3531 +3 3531 3740 3741 +3 3531 3741 3532 +3 3532 3741 3533 +3 3533 3741 3742 +3 3533 3742 3743 +3 3533 3743 3534 +3 3534 3743 3744 +3 3534 3744 3535 +3 3535 3744 3745 +3 3535 3745 3536 +3 3536 3745 3746 +3 3536 3746 3537 +3 3537 3746 3747 +3 3537 3747 3748 +3 3537 3748 3749 +3 3537 3749 3538 +3 3538 3749 3539 +3 3539 3749 3750 +3 3539 3750 3541 +3 3541 3750 3751 +3 3541 3751 3542 +3 3542 3751 3752 +3 3542 3752 3543 +3 3543 3752 3753 +3 3543 3753 3754 +3 3543 3754 3544 +3 3544 3754 3545 +3 3545 3754 3755 +3 3545 3755 3546 +3 3546 3755 3756 +3 3546 3756 3547 +3 3547 3756 3757 +3 3547 3757 3548 +3 3548 3757 3758 +3 3548 3758 3549 +3 3549 3758 3759 +3 3549 3759 3550 +3 3550 3759 3760 +3 3550 3760 3761 +3 3550 3761 3762 +3 3550 3762 3551 +3 3551 3762 3552 +3 3552 3762 3763 +3 3552 3763 3553 +3 3553 3763 3764 +3 3553 3764 3554 +3 3554 3764 3765 +3 3554 3765 3555 +3 3555 3765 3766 +3 3555 3766 3556 +3 3556 3766 3767 +3 3556 3767 3557 +3 3557 3767 3768 +3 3557 3768 3558 +3 3558 3768 3769 +3 3558 3769 3559 +3 3559 3769 3770 +3 3559 3770 3771 +3 3559 3771 3560 +3 3560 3771 3772 +3 3560 3772 3561 +3 3561 3772 3773 +3 3561 3773 3562 +3 3562 3773 3774 +3 3562 3774 3563 +3 3563 3774 3775 +3 3563 3775 3564 +3 3564 3775 3776 +3 3564 3776 3565 +3 3565 3776 3777 +3 3565 3777 3566 +3 3566 3777 3778 +3 3566 3778 3567 +3 3567 3778 3779 +3 3567 3779 3568 +3 3568 3779 3780 +3 3568 3780 3569 +3 3569 3780 3781 +3 3569 3781 3570 +3 3570 3781 3782 +3 3570 3782 3571 +3 3571 3782 3783 +3 3571 3783 3572 +3 3572 3783 3784 +3 3572 3784 3573 +3 3573 3784 3785 +3 3573 3785 3786 +3 3573 3786 3574 +3 3574 3786 3575 +3 3575 3786 3787 +3 3575 3787 3576 +3 3576 3787 3788 +3 3576 3788 3577 +3 3577 3788 3789 +3 3577 3789 3578 +3 3578 3789 3790 +3 3578 3790 3791 +3 3578 3791 3579 +3 3579 3791 3580 +3 3580 3791 3792 +3 3580 3792 3581 +3 3581 3792 3793 +3 3581 3793 3582 +3 3582 3793 3794 +3 3582 3794 3583 +3 3583 3794 3795 +3 3583 3795 3584 +3 3584 3795 3796 +3 3584 3796 3797 +3 3584 3797 3585 +3 3585 3797 3798 +3 3585 3798 3586 +3 3586 3798 3587 +3 3587 3798 3799 +3 3587 3799 3800 +3 3587 3800 3801 +3 3587 3801 3588 +3 3588 3801 3589 +3 3589 3801 3590 +3 3590 3801 3802 +3 3590 3802 3803 +3 3590 3803 3591 +3 3591 3803 3804 +3 3591 3804 3592 +3 3592 3804 3805 +3 3592 3805 3593 +3 3593 3805 3806 +3 3593 3806 3594 +3 3594 3806 3807 +3 3594 3807 3595 +3 3595 3807 3596 +3 3596 3807 3808 +3 3596 3808 3809 +3 3596 3809 3597 +3 3597 3809 3598 +3 3598 3809 3810 +3 3598 3810 3599 +3 3599 3810 3811 +3 3599 3811 3812 +3 3599 3812 3600 +3 3600 3812 3813 +3 3600 3813 3601 +3 3601 3813 3814 +3 3601 3814 3603 +3 3603 3814 3604 +3 3604 3814 3815 +3 3604 3815 3605 +3 3605 3815 3816 +3 3605 3816 3817 +3 3605 3817 3607 +3 3607 3817 3818 +3 3607 3818 3819 +3 3607 3819 3608 +3 3608 3819 3609 +3 3609 3819 3820 +3 3609 3820 3611 +3 3611 3820 3821 +3 3611 3821 3612 +3 3612 3821 3822 +3 3612 3822 3613 +3 3613 3822 3823 +3 3613 3823 3614 +3 3614 3823 3824 +3 3614 3824 3615 +3 3615 3824 3825 +3 3615 3825 3616 +3 3616 3825 3826 +3 3616 3826 3827 +3 3616 3827 3617 +3 3617 3827 3828 +3 3617 3828 3618 +3 3618 3828 3829 +3 3618 3829 3619 +3 3619 3829 3830 +3 3619 3830 3620 +3 3620 3830 3621 +3 3621 3830 3831 +3 3621 3831 3622 +3 3622 3831 3832 +3 3622 3832 3623 +3 3623 3832 3833 +3 3623 3833 3624 +3 3624 3833 3834 +3 3624 3834 3835 +3 3624 3835 3625 +3 3625 3835 3626 +3 3626 3835 3836 +3 3626 3836 3627 +3 3627 3836 3837 +3 3627 3837 3838 +3 3627 3838 3628 +3 3628 3838 3839 +3 3628 3839 3629 +3 3629 3839 3840 +3 3629 3840 3630 +3 3630 3840 3841 +3 3630 3841 3631 +3 3631 3841 3632 +3 3632 3841 3842 +3 3632 3842 3843 +3 3632 3843 3633 +3 3633 3843 3844 +3 3633 3844 3634 +3 3634 3844 3845 +3 3634 3845 3846 +3 3634 3846 3635 +3 3635 3846 3636 +3 3636 3846 3637 +3 3637 3846 3847 +3 3637 3847 3638 +3 3638 3847 3848 +3 3638 3848 3639 +3 3639 3848 3849 +3 3639 3849 3850 +3 3639 3850 3851 +3 3639 3851 3640 +3 3640 3851 3852 +3 3640 3852 3641 +3 3641 3852 3853 +3 3641 3853 3642 +3 3642 3853 3854 +3 3642 3854 3643 +3 3643 3854 3855 +3 3643 3855 3644 +3 3644 3855 3856 +3 3644 3856 3857 +3 3644 3857 3645 +3 3645 3857 3858 +3 3645 3858 3859 +3 3645 3859 3646 +3 3646 3859 3860 +3 3646 3860 3861 +3 3646 3861 3647 +3 3647 3861 3862 +3 3647 3862 3863 +3 3647 3863 3649 +3 3649 3863 3651 +3 3651 3863 3862 +3 3651 3862 3652 +3 3652 3862 3864 +3 3652 3864 3865 +3 3652 3865 3653 +3 3653 3865 3866 +3 3653 3866 3654 +3 3654 3866 3655 +3 3655 3866 3867 +3 3655 3867 3656 +3 3656 3867 3868 +3 3656 3868 3657 +3 3657 3868 3869 +3 3657 3869 3658 +3 3658 3869 3870 +3 3658 3870 3659 +3 3659 3870 3871 +3 3659 3871 3660 +3 3660 3871 3872 +3 3660 3872 3661 +3 3661 3872 3873 +3 3661 3873 3662 +3 3662 3873 3874 +3 3662 3874 3875 +3 3662 3875 3663 +3 3663 3875 3876 +3 3663 3876 3664 +3 3664 3876 3877 +3 3664 3877 3665 +3 3665 3877 3878 +3 3665 3878 3666 +3 3666 3878 3879 +3 3666 3879 3667 +3 3667 3879 3880 +3 3667 3880 3668 +3 3668 3880 3881 +3 3668 3881 3669 +3 3669 3881 3670 +3 3670 3881 3882 +3 3670 3882 3671 +3 3671 3882 3883 +3 3671 3883 3884 +3 3671 3884 3672 +3 3672 3884 3885 +3 3672 3885 3673 +3 3673 3885 3886 +3 3673 3886 3674 +3 3674 3886 3675 +3 3675 3886 3887 +3 3675 3887 3888 +3 3675 3888 3676 +3 3676 3888 3889 +3 3676 3889 3677 +3 3677 3889 3890 +3 3677 3890 3891 +3 3677 3891 3678 +3 3678 3891 3679 +3 3679 3891 3892 +3 3679 3892 3893 +3 3679 3893 3681 +3 3681 3893 3682 +3 3682 3893 3894 +3 3682 3894 3895 +3 3682 3895 3896 +3 3682 3896 3683 +3 3683 3896 3684 +3 3684 3896 3897 +3 3684 3897 3898 +3 3684 3898 3685 +3 3685 3898 3686 +3 3686 3898 3899 +3 3686 3899 3687 +3 3687 3899 3900 +3 3687 3900 3688 +3 3688 3900 3901 +3 3688 3901 3689 +3 3689 3901 3902 +3 3689 3902 3690 +3 3690 3902 3903 +3 3690 3903 3691 +3 3691 3903 3904 +3 3691 3904 3693 +3 3693 3904 3905 +3 3693 3905 3906 +3 3693 3906 3907 +3 3693 3907 3694 +3 3694 3907 3908 +3 3694 3908 3909 +3 3694 3909 3695 +3 3695 3909 3910 +3 3695 3910 3696 +3 3696 3910 3911 +3 3696 3911 3697 +3 3697 3911 3912 +3 3697 3912 3698 +3 3698 3912 3913 +3 3698 3913 3699 +3 3699 3913 3914 +3 3699 3914 3915 +3 3699 3915 3700 +3 3700 3915 3701 +3 3701 3915 3916 +3 3701 3916 3702 +3 3702 3916 3917 +3 3702 3917 3703 +3 3703 3917 3918 +3 3703 3918 3704 +3 3704 3918 3919 +3 3704 3919 3705 +3 3705 3919 3920 +3 3705 3920 3706 +3 3706 3920 3921 +3 3706 3921 3707 +3 3707 3921 3922 +3 3707 3922 3708 +3 3708 3922 3923 +3 3708 3923 3709 +3 3709 3923 3924 +3 3709 3924 3925 +3 3709 3925 3710 +3 3710 3925 3926 +3 3710 3926 3711 +3 3711 3926 3712 +3 3712 3926 3927 +3 3712 3927 3928 +3 3712 3928 3713 +3 3713 3928 3929 +3 3713 3929 3930 +3 3713 3930 3714 +3 3714 3930 3931 +3 3714 3931 3932 +3 3714 3932 3715 +3 3715 3932 3933 +3 3715 3933 3934 +3 3715 3934 3717 +3 3717 3934 3718 +3 3718 3934 3935 +3 3718 3935 3719 +3 3719 3935 3936 +3 3719 3936 3720 +3 3720 3936 3937 +3 3720 3937 3721 +3 3721 3937 3938 +3 3721 3938 3722 +3 3722 3938 3939 +3 3722 3939 3723 +3 3723 3939 3940 +3 3723 3940 3724 +3 3724 3940 3941 +3 3724 3941 3725 +3 3725 3941 3942 +3 3725 3942 3726 +3 3726 3942 3943 +3 3726 3943 3727 +3 3727 3943 3944 +3 3727 3944 3728 +3 3728 3944 3945 +3 3728 3945 3729 +3 3729 3945 3946 +3 3729 3946 3730 +3 3730 3946 3947 +3 3730 3947 3731 +3 3731 3947 3948 +3 3731 3948 3732 +3 3732 3948 3949 +3 3732 3949 3734 +3 3734 3949 3950 +3 3734 3950 3735 +3 3735 3950 3951 +3 3735 3951 3952 +3 3735 3952 3736 +3 3736 3952 3737 +3 3737 3952 3953 +3 3737 3953 3954 +3 3737 3954 3738 +3 3738 3954 3955 +3 3738 3955 3739 +3 3739 3955 3956 +3 3739 3956 3740 +3 3740 3956 3957 +3 3740 3957 3741 +3 3741 3957 3742 +3 3742 3957 3958 +3 3742 3958 3959 +3 3742 3959 3743 +3 3743 3959 3960 +3 3743 3960 3744 +3 3744 3960 3961 +3 3744 3961 3745 +3 3745 3961 3962 +3 3745 3962 3746 +3 3746 3962 3963 +3 3746 3963 3747 +3 3747 3963 3964 +3 3747 3964 3965 +3 3747 3965 3966 +3 3747 3966 3748 +3 3748 3966 3967 +3 3748 3967 3749 +3 3749 3967 3750 +3 3750 3967 3968 +3 3750 3968 3751 +3 3751 3968 3969 +3 3751 3969 3752 +3 3752 3969 3970 +3 3752 3970 3753 +3 3753 3970 3971 +3 3753 3971 3972 +3 3753 3972 3754 +3 3754 3972 3973 +3 3754 3973 3974 +3 3754 3974 3755 +3 3755 3974 3756 +3 3756 3974 3975 +3 3756 3975 3976 +3 3756 3976 3977 +3 3756 3977 3757 +3 3757 3977 3758 +3 3758 3977 3978 +3 3758 3978 3759 +3 3759 3978 3979 +3 3759 3979 3760 +3 3760 3979 3980 +3 3760 3980 3981 +3 3760 3981 3761 +3 3761 3981 3982 +3 3761 3982 3762 +3 3762 3982 3983 +3 3762 3983 3763 +3 3763 3983 3984 +3 3763 3984 3764 +3 3764 3984 3985 +3 3764 3985 3765 +3 3765 3985 3986 +3 3765 3986 3766 +3 3766 3986 3987 +3 3766 3987 3767 +3 3767 3987 3988 +3 3767 3988 3768 +3 3768 3988 3989 +3 3768 3989 3769 +3 3769 3989 3990 +3 3769 3990 3991 +3 3769 3991 3770 +3 3770 3991 3992 +3 3770 3992 3771 +3 3771 3992 3993 +3 3771 3993 3772 +3 3772 3993 3994 +3 3772 3994 3773 +3 3773 3994 3995 +3 3773 3995 3774 +3 3774 3995 3996 +3 3774 3996 3775 +3 3775 3996 3997 +3 3775 3997 3776 +3 3776 3997 3998 +3 3776 3998 3777 +3 3777 3998 3999 +3 3777 3999 3778 +3 3778 3999 4000 +3 3778 4000 3779 +3 3779 4000 4001 +3 3779 4001 3780 +3 3780 4001 4002 +3 3780 4002 3781 +3 3781 4002 4003 +3 3781 4003 3782 +3 3782 4003 4004 +3 3782 4004 3783 +3 3783 4004 4005 +3 3783 4005 3784 +3 3784 4005 4006 +3 3784 4006 3785 +3 3785 4006 4007 +3 3785 4007 4008 +3 3785 4008 3786 +3 3786 4008 3787 +3 3787 4008 4009 +3 3787 4009 3788 +3 3788 4009 4010 +3 3788 4010 3789 +3 3789 4010 4011 +3 3789 4011 3790 +3 3790 4011 4012 +3 3790 4012 4013 +3 3790 4013 3791 +3 3791 4013 3792 +3 3792 4013 4014 +3 3792 4014 3793 +3 3793 4014 4015 +3 3793 4015 3794 +3 3794 4015 4016 +3 3794 4016 3795 +3 3795 4016 4017 +3 3795 4017 3796 +3 3796 4017 4018 +3 3796 4018 4019 +3 3796 4019 3797 +3 3797 4019 4020 +3 3797 4020 3798 +3 3798 4020 3799 +3 3799 4020 4021 +3 3799 4021 4022 +3 3799 4022 3800 +3 3800 4022 4023 +3 3800 4023 3802 +3 3802 4023 4024 +3 3802 4024 4025 +3 3802 4025 3803 +3 3803 4025 4026 +3 3803 4026 3804 +3 3804 4026 4027 +3 3804 4027 3805 +3 3805 4027 4028 +3 3805 4028 3806 +3 3806 4028 4029 +3 3806 4029 3807 +3 3807 4029 3808 +3 3808 4029 4030 +3 3808 4030 4031 +3 3808 4031 3809 +3 3809 4031 3810 +3 3810 4031 4032 +3 3810 4032 3811 +3 3811 4032 4033 +3 3811 4033 4034 +3 3811 4034 3812 +3 3812 4034 4035 +3 3812 4035 3813 +3 3813 4035 4036 +3 3813 4036 3814 +3 3814 4036 4037 +3 3814 4037 3815 +3 3815 4037 3816 +3 3816 4037 4038 +3 3816 4038 4039 +3 3816 4039 3817 +3 3817 4039 3818 +3 3818 4039 4040 +3 3818 4040 4041 +3 3818 4041 4042 +3 3818 4042 3819 +3 3819 4042 3820 +3 3820 4042 4043 +3 3820 4043 3821 +3 3821 4043 4044 +3 3821 4044 3822 +3 3822 4044 4045 +3 3822 4045 3823 +3 3823 4045 4046 +3 3823 4046 3824 +3 3824 4046 4047 +3 3824 4047 3825 +3 3825 4047 4048 +3 3825 4048 3826 +3 3826 4048 4049 +3 3826 4049 4050 +3 3826 4050 3827 +3 3827 4050 4051 +3 3827 4051 3828 +3 3828 4051 4052 +3 3828 4052 3829 +3 3829 4052 4053 +3 3829 4053 3830 +3 3830 4053 3831 +3 3831 4053 4054 +3 3831 4054 3832 +3 3832 4054 4055 +3 3832 4055 3833 +3 3833 4055 4056 +3 3833 4056 3834 +3 3834 4056 4057 +3 3834 4057 4058 +3 3834 4058 3835 +3 3835 4058 3836 +3 3836 4058 4059 +3 3836 4059 3837 +3 3837 4059 4060 +3 3837 4060 4061 +3 3837 4061 4062 +3 3837 4062 3838 +3 3838 4062 4063 +3 3838 4063 3839 +3 3839 4063 4064 +3 3839 4064 3840 +3 3840 4064 3842 +3 3842 4064 4065 +3 3842 4065 4066 +3 3842 4066 3843 +3 3843 4066 4067 +3 3843 4067 4068 +3 3843 4068 3844 +3 3844 4068 3845 +3 3845 4068 4069 +3 3845 4069 3847 +3 3847 4069 4070 +3 3847 4070 3848 +3 3848 4070 4071 +3 3848 4071 4072 +3 3848 4072 3849 +3 3849 4072 4073 +3 3849 4073 3850 +3 3850 4073 4074 +3 3850 4074 4075 +3 3850 4075 3851 +3 3851 4075 4076 +3 3851 4076 3852 +3 3852 4076 4077 +3 3852 4077 4078 +3 3852 4078 3853 +3 3853 4078 4079 +3 3853 4079 4080 +3 3853 4080 3854 +3 3854 4080 4081 +3 3854 4081 4082 +3 3854 4082 3855 +3 3855 4082 3856 +3 3856 4082 4083 +3 3856 4083 4084 +3 3856 4084 3858 +3 3858 4084 4085 +3 3858 4085 3860 +3 3860 4085 3864 +3 3864 4085 4086 +3 3864 4086 3865 +3 3865 4086 4087 +3 3865 4087 3866 +3 3866 4087 3867 +3 3867 4087 4088 +3 3867 4088 3868 +3 3868 4088 3869 +3 3869 4088 4089 +3 3869 4089 3870 +3 3870 4089 4090 +3 3870 4090 4091 +3 3870 4091 3871 +3 3871 4091 4092 +3 3871 4092 4093 +3 3871 4093 3872 +3 3872 4093 4094 +3 3872 4094 4095 +3 3872 4095 3873 +3 3873 4095 3874 +3 3874 4095 4096 +3 3874 4096 3875 +3 3875 4096 4097 +3 3875 4097 4098 +3 3875 4098 3876 +3 3876 4098 4099 +3 3876 4099 3877 +3 3877 4099 4100 +3 3877 4100 4101 +3 3877 4101 3878 +3 3878 4101 4102 +3 3878 4102 3879 +3 3879 4102 4103 +3 3879 4103 3880 +3 3880 4103 4104 +3 3880 4104 3881 +3 3881 4104 4105 +3 3881 4105 3882 +3 3882 4105 4106 +3 3882 4106 3883 +3 3883 4106 4107 +3 3883 4107 3884 +3 3884 4107 4108 +3 3884 4108 4109 +3 3884 4109 3885 +3 3885 4109 3886 +3 3886 4109 3887 +3 3887 4109 4110 +3 3887 4110 3888 +3 3888 4110 4111 +3 3888 4111 4112 +3 3888 4112 3889 +3 3889 4112 4113 +3 3889 4113 3890 +3 3890 4113 4114 +3 3890 4114 3891 +3 3891 4114 4115 +3 3891 4115 3892 +3 3892 4115 4116 +3 3892 4116 3893 +3 3893 4116 4117 +3 3893 4117 3894 +3 3894 4117 3895 +3 3895 4117 4118 +3 3895 4118 4119 +3 3895 4119 3896 +3 3896 4119 3897 +3 3897 4119 4120 +3 3897 4120 3898 +3 3898 4120 3899 +3 3899 4120 3900 +3 3900 4120 4121 +3 3900 4121 3901 +3 3901 4121 4122 +3 3901 4122 3902 +3 3902 4122 4123 +3 3902 4123 3903 +3 3903 4123 4124 +3 3903 4124 3904 +3 3904 4124 3905 +3 3905 4124 4125 +3 3905 4125 4126 +3 3905 4126 3906 +3 3906 4126 4127 +3 3906 4127 3907 +3 3907 4127 4128 +3 3907 4128 4129 +3 3907 4129 3908 +3 3908 4129 4130 +3 3908 4130 4131 +3 3908 4131 3909 +3 3909 4131 4132 +3 3909 4132 3910 +3 3910 4132 4133 +3 3910 4133 3911 +3 3911 4133 4134 +3 3911 4134 3912 +3 3912 4134 4135 +3 3912 4135 3913 +3 3913 4135 4136 +3 3913 4136 3914 +3 3914 4136 4137 +3 3914 4137 4138 +3 3914 4138 3915 +3 3915 4138 4139 +3 3915 4139 3916 +3 3916 4139 4140 +3 3916 4140 4141 +3 3916 4141 3917 +3 3917 4141 4142 +3 3917 4142 3918 +3 3918 4142 4143 +3 3918 4143 3919 +3 3919 4143 4144 +3 3919 4144 3920 +3 3920 4144 4145 +3 3920 4145 3921 +3 3921 4145 4146 +3 3921 4146 3922 +3 3922 4146 4147 +3 3922 4147 3923 +3 3923 4147 4148 +3 3923 4148 3924 +3 3924 4148 4149 +3 3924 4149 4150 +3 3924 4150 3925 +3 3925 4150 4151 +3 3925 4151 3926 +3 3926 4151 3927 +3 3927 4151 4152 +3 3927 4152 4153 +3 3927 4153 3928 +3 3928 4153 4154 +3 3928 4154 3929 +3 3929 4154 4155 +3 3929 4155 4156 +3 3929 4156 3930 +3 3930 4156 4157 +3 3930 4157 3931 +3 3931 4157 4158 +3 3931 4158 4159 +3 3931 4159 3932 +3 3932 4159 3933 +3 3933 4159 4160 +3 3933 4160 4161 +3 3933 4161 3934 +3 3934 4161 3935 +3 3935 4161 4162 +3 3935 4162 3936 +3 3936 4162 3937 +3 3937 4162 4163 +3 3937 4163 3938 +3 3938 4163 4164 +3 3938 4164 3939 +3 3939 4164 4165 +3 3939 4165 3940 +3 3940 4165 4166 +3 3940 4166 3941 +3 3941 4166 4167 +3 3941 4167 3942 +3 3942 4167 4168 +3 3942 4168 3943 +3 3943 4168 4169 +3 3943 4169 3944 +3 3944 4169 4170 +3 3944 4170 3945 +3 3945 4170 4171 +3 3945 4171 3946 +3 3946 4171 4172 +3 3946 4172 3947 +3 3947 4172 4173 +3 3947 4173 3948 +3 3948 4173 4174 +3 3948 4174 3949 +3 3949 4174 4175 +3 3949 4175 4176 +3 3949 4176 3950 +3 3950 4176 4177 +3 3950 4177 3951 +3 3951 4177 4178 +3 3951 4178 3953 +3 3953 4178 4179 +3 3953 4179 3954 +3 3954 4179 4180 +3 3954 4180 3955 +3 3955 4180 3956 +3 3956 4180 4181 +3 3956 4181 3957 +3 3957 4181 3958 +3 3958 4181 4182 +3 3958 4182 4183 +3 3958 4183 3959 +3 3959 4183 4184 +3 3959 4184 3960 +3 3960 4184 4185 +3 3960 4185 3961 +3 3961 4185 4186 +3 3961 4186 3962 +3 3962 4186 4187 +3 3962 4187 3963 +3 3963 4187 4188 +3 3963 4188 3964 +3 3964 4188 4189 +3 3964 4189 4190 +3 3964 4190 4191 +3 3964 4191 3965 +3 3965 4191 4192 +3 3965 4192 4193 +3 3965 4193 3966 +3 3966 4193 3968 +3 3968 4193 4194 +3 3968 4194 3969 +3 3969 4194 4195 +3 3969 4195 3970 +3 3970 4195 3971 +3 3971 4195 4196 +3 3971 4196 4197 +3 3971 4197 4198 +3 3971 4198 3972 +3 3972 4198 4199 +3 3972 4199 3973 +3 3973 4199 3974 +3 3974 4199 3975 +3 3975 4199 4200 +3 3975 4200 4201 +3 3975 4201 3976 +3 3976 4201 4202 +3 3976 4202 3977 +3 3977 4202 4203 +3 3977 4203 3979 +3 3979 4203 3980 +3 3980 4203 4202 +3 3980 4202 4204 +3 3980 4204 3981 +3 3981 4204 4205 +3 3981 4205 4206 +3 3981 4206 3982 +3 3982 4206 4207 +3 3982 4207 3984 +3 3984 4207 4208 +3 3984 4208 3985 +3 3985 4208 4209 +3 3985 4209 3986 +3 3986 4209 4210 +3 3986 4210 3987 +3 3987 4210 4211 +3 3987 4211 3988 +3 3988 4211 4212 +3 3988 4212 3989 +3 3989 4212 4213 +3 3989 4213 3990 +3 3990 4213 4214 +3 3990 4214 4215 +3 3990 4215 3991 +3 3991 4215 4216 +3 3991 4216 3992 +3 3992 4216 4217 +3 3992 4217 3993 +3 3993 4217 4218 +3 3993 4218 3994 +3 3994 4218 4219 +3 3994 4219 3995 +3 3995 4219 4220 +3 3995 4220 3996 +3 3996 4220 4221 +3 3996 4221 3997 +3 3997 4221 4222 +3 3997 4222 3998 +3 3998 4222 4223 +3 3998 4223 3999 +3 3999 4223 4224 +3 3999 4224 4000 +3 4000 4224 4225 +3 4000 4225 4001 +3 4001 4225 4226 +3 4001 4226 4002 +3 4002 4226 4227 +3 4002 4227 4003 +3 4003 4227 4228 +3 4003 4228 4004 +3 4004 4228 4229 +3 4004 4229 4005 +3 4005 4229 4230 +3 4005 4230 4006 +3 4006 4230 4231 +3 4006 4231 4007 +3 4007 4231 4232 +3 4007 4232 4233 +3 4007 4233 4008 +3 4008 4233 4009 +3 4009 4233 4234 +3 4009 4234 4010 +3 4010 4234 4235 +3 4010 4235 4011 +3 4011 4235 4236 +3 4011 4236 4012 +3 4012 4236 4237 +3 4012 4237 4238 +3 4012 4238 4013 +3 4013 4238 4014 +3 4014 4238 4239 +3 4014 4239 4015 +3 4015 4239 4240 +3 4015 4240 4016 +3 4016 4240 4241 +3 4016 4241 4017 +3 4017 4241 4242 +3 4017 4242 4018 +3 4018 4242 4243 +3 4018 4243 4244 +3 4018 4244 4019 +3 4019 4244 4245 +3 4019 4245 4020 +3 4020 4245 4021 +3 4021 4245 4246 +3 4021 4246 4247 +3 4021 4247 4022 +3 4022 4247 4248 +3 4022 4248 4023 +3 4023 4248 4024 +3 4024 4248 4249 +3 4024 4249 4250 +3 4024 4250 4025 +3 4025 4250 4251 +3 4025 4251 4026 +3 4026 4251 4252 +3 4026 4252 4027 +3 4027 4252 4253 +3 4027 4253 4028 +3 4028 4253 4254 +3 4028 4254 4029 +3 4029 4254 4030 +3 4030 4254 4255 +3 4030 4255 4256 +3 4030 4256 4031 +3 4031 4256 4032 +3 4032 4256 4257 +3 4032 4257 4033 +3 4033 4257 4258 +3 4033 4258 4259 +3 4033 4259 4034 +3 4034 4259 4260 +3 4034 4260 4035 +3 4035 4260 4261 +3 4035 4261 4036 +3 4036 4261 4037 +3 4037 4261 4038 +3 4038 4261 4262 +3 4038 4262 4263 +3 4038 4263 4039 +3 4039 4263 4040 +3 4040 4263 4264 +3 4040 4264 4265 +3 4040 4265 4041 +3 4041 4265 4266 +3 4041 4266 4267 +3 4041 4267 4042 +3 4042 4267 4043 +3 4043 4267 4268 +3 4043 4268 4044 +3 4044 4268 4269 +3 4044 4269 4045 +3 4045 4269 4270 +3 4045 4270 4046 +3 4046 4270 4271 +3 4046 4271 4047 +3 4047 4271 4272 +3 4047 4272 4048 +3 4048 4272 4273 +3 4048 4273 4049 +3 4049 4273 4274 +3 4049 4274 4275 +3 4049 4275 4276 +3 4049 4276 4050 +3 4050 4276 4051 +3 4051 4276 4277 +3 4051 4277 4278 +3 4051 4278 4052 +3 4052 4278 4279 +3 4052 4279 4053 +3 4053 4279 4054 +3 4054 4279 4280 +3 4054 4280 4055 +3 4055 4280 4281 +3 4055 4281 4056 +3 4056 4281 4282 +3 4056 4282 4057 +3 4057 4282 4283 +3 4057 4283 4058 +3 4058 4283 4284 +3 4058 4284 4059 +3 4059 4284 4285 +3 4059 4285 4060 +3 4060 4285 4286 +3 4060 4286 4287 +3 4060 4287 4061 +3 4061 4287 4288 +3 4061 4288 4062 +3 4062 4288 4289 +3 4062 4289 4290 +3 4062 4290 4063 +3 4063 4290 4065 +3 4065 4290 4291 +3 4065 4291 4292 +3 4065 4292 4066 +3 4066 4292 4293 +3 4066 4293 4294 +3 4066 4294 4067 +3 4067 4294 4295 +3 4067 4295 4068 +3 4068 4295 4296 +3 4068 4296 4297 +3 4068 4297 4069 +3 4069 4297 4070 +3 4070 4297 4298 +3 4070 4298 4071 +3 4071 4298 4299 +3 4071 4299 4300 +3 4071 4300 4072 +3 4072 4300 4301 +3 4072 4301 4073 +3 4073 4301 4302 +3 4073 4302 4074 +3 4074 4302 4303 +3 4074 4303 4304 +3 4074 4304 4075 +3 4075 4304 4305 +3 4075 4305 4076 +3 4076 4305 4077 +3 4077 4305 4306 +3 4077 4306 4307 +3 4077 4307 4078 +3 4078 4307 4079 +3 4079 4307 4308 +3 4079 4308 4309 +3 4079 4309 4080 +3 4080 4309 4081 +3 4081 4309 4310 +3 4081 4310 4083 +3 4083 4310 4311 +3 4083 4311 4084 +3 4084 4311 4312 +3 4084 4312 4085 +3 4085 4312 4086 +3 4086 4312 4313 +3 4086 4313 4087 +3 4087 4313 4088 +3 4088 4313 4314 +3 4088 4314 4089 +3 4089 4314 4315 +3 4089 4315 4090 +3 4090 4315 4316 +3 4090 4316 4091 +3 4091 4316 4317 +3 4091 4317 4092 +3 4092 4317 4318 +3 4092 4318 4319 +3 4092 4319 4093 +3 4093 4319 4094 +3 4094 4319 4320 +3 4094 4320 4321 +3 4094 4321 4095 +3 4095 4321 4096 +3 4096 4321 4322 +3 4096 4322 4097 +3 4097 4322 4323 +3 4097 4323 4324 +3 4097 4324 4098 +3 4098 4324 4325 +3 4098 4325 4099 +3 4099 4325 4100 +3 4100 4325 4326 +3 4100 4326 4101 +3 4101 4326 4327 +3 4101 4327 4328 +3 4101 4328 4102 +3 4102 4328 4329 +3 4102 4329 4103 +3 4103 4329 4330 +3 4103 4330 4104 +3 4104 4330 4331 +3 4104 4331 4105 +3 4105 4331 4332 +3 4105 4332 4333 +3 4105 4333 4106 +3 4106 4333 4334 +3 4106 4334 4107 +3 4107 4334 4335 +3 4107 4335 4108 +3 4108 4335 4336 +3 4108 4336 4109 +3 4109 4336 4337 +3 4109 4337 4110 +3 4110 4337 4338 +3 4110 4338 4111 +3 4111 4338 4339 +3 4111 4339 4340 +3 4111 4340 4112 +3 4112 4340 4341 +3 4112 4341 4113 +3 4113 4341 4342 +3 4113 4342 4114 +3 4114 4342 4343 +3 4114 4343 4115 +3 4115 4343 4344 +3 4115 4344 4345 +3 4115 4345 4116 +3 4116 4345 4346 +3 4116 4346 4117 +3 4117 4346 4347 +3 4117 4347 4118 +3 4118 4347 4348 +3 4118 4348 4119 +3 4119 4348 4349 +3 4119 4349 4120 +3 4120 4349 4121 +3 4121 4349 4122 +3 4122 4349 4123 +3 4123 4349 4350 +3 4123 4350 4124 +3 4124 4350 4351 +3 4124 4351 4352 +3 4124 4352 4125 +3 4125 4352 4353 +3 4125 4353 4126 +3 4126 4353 4354 +3 4126 4354 4127 +3 4127 4354 4355 +3 4127 4355 4128 +3 4128 4355 4356 +3 4128 4356 4357 +3 4128 4357 4129 +3 4129 4357 4130 +3 4130 4357 4358 +3 4130 4358 4359 +3 4130 4359 4131 +3 4131 4359 4132 +3 4132 4359 4360 +3 4132 4360 4361 +3 4132 4361 4133 +3 4133 4361 4362 +3 4133 4362 4134 +3 4134 4362 4363 +3 4134 4363 4135 +3 4135 4363 4364 +3 4135 4364 4365 +3 4135 4365 4136 +3 4136 4365 4366 +3 4136 4366 4137 +3 4137 4366 4367 +3 4137 4367 4368 +3 4137 4368 4138 +3 4138 4368 4369 +3 4138 4369 4139 +3 4139 4369 4370 +3 4139 4370 4140 +3 4140 4370 4371 +3 4140 4371 4372 +3 4140 4372 4141 +3 4141 4372 4373 +3 4141 4373 4142 +3 4142 4373 4374 +3 4142 4374 4143 +3 4143 4374 4375 +3 4143 4375 4144 +3 4144 4375 4376 +3 4144 4376 4145 +3 4145 4376 4377 +3 4145 4377 4146 +3 4146 4377 4378 +3 4146 4378 4147 +3 4147 4378 4379 +3 4147 4379 4148 +3 4148 4379 4380 +3 4148 4380 4149 +3 4149 4380 4381 +3 4149 4381 4382 +3 4149 4382 4150 +3 4150 4382 4383 +3 4150 4383 4151 +3 4151 4383 4152 +3 4152 4383 4384 +3 4152 4384 4385 +3 4152 4385 4153 +3 4153 4385 4386 +3 4153 4386 4154 +3 4154 4386 4387 +3 4154 4387 4388 +3 4154 4388 4155 +3 4155 4388 4389 +3 4155 4389 4390 +3 4155 4390 4391 +3 4155 4391 4156 +3 4156 4391 4157 +3 4157 4391 4392 +3 4157 4392 4393 +3 4157 4393 4158 +3 4158 4393 4394 +3 4158 4394 4395 +3 4158 4395 4159 +3 4159 4395 4160 +3 4160 4395 4396 +3 4160 4396 4397 +3 4160 4397 4161 +3 4161 4397 4162 +3 4162 4397 4163 +3 4163 4397 4398 +3 4163 4398 4164 +3 4164 4398 4399 +3 4164 4399 4165 +3 4165 4399 4400 +3 4165 4400 4166 +3 4166 4400 4401 +3 4166 4401 4167 +3 4167 4401 4402 +3 4167 4402 4168 +3 4168 4402 4403 +3 4168 4403 4169 +3 4169 4403 4404 +3 4169 4404 4170 +3 4170 4404 4405 +3 4170 4405 4171 +3 4171 4405 4406 +3 4171 4406 4172 +3 4172 4406 4407 +3 4172 4407 4173 +3 4173 4407 4408 +3 4173 4408 4174 +3 4174 4408 4409 +3 4174 4409 4175 +3 4175 4409 4410 +3 4175 4410 4176 +3 4176 4410 4411 +3 4176 4411 4412 +3 4176 4412 4177 +3 4177 4412 4413 +3 4177 4413 4178 +3 4178 4413 4414 +3 4178 4414 4179 +3 4179 4414 4415 +3 4179 4415 4180 +3 4180 4415 4181 +3 4181 4415 4182 +3 4182 4415 4416 +3 4182 4416 4417 +3 4182 4417 4183 +3 4183 4417 4418 +3 4183 4418 4184 +3 4184 4418 4419 +3 4184 4419 4185 +3 4185 4419 4420 +3 4185 4420 4186 +3 4186 4420 4421 +3 4186 4421 4187 +3 4187 4421 4422 +3 4187 4422 4188 +3 4188 4422 4423 +3 4188 4423 4189 +3 4189 4423 4424 +3 4189 4424 4190 +3 4190 4424 4425 +3 4190 4425 4426 +3 4190 4426 4191 +3 4191 4426 4427 +3 4191 4427 4192 +3 4192 4427 4194 +3 4194 4427 4428 +3 4194 4428 4195 +3 4195 4428 4196 +3 4196 4428 4429 +3 4196 4429 4430 +3 4196 4430 4197 +3 4197 4430 4431 +3 4197 4431 4432 +3 4197 4432 4198 +3 4198 4432 4200 +3 4200 4432 4433 +3 4200 4433 4201 +3 4201 4433 4434 +3 4201 4434 4435 +3 4201 4435 4202 +3 4202 4435 4204 +3 4204 4435 4436 +3 4204 4436 4205 +3 4205 4436 4437 +3 4205 4437 4438 +3 4205 4438 4206 +3 4206 4438 4439 +3 4206 4439 4207 +3 4207 4439 4440 +3 4207 4440 4208 +3 4208 4440 4441 +3 4208 4441 4209 +3 4209 4441 4442 +3 4209 4442 4443 +3 4209 4443 4444 +3 4209 4444 4210 +3 4210 4444 4211 +3 4211 4444 4445 +3 4211 4445 4212 +3 4212 4445 4446 +3 4212 4446 4213 +3 4213 4446 4447 +3 4213 4447 4214 +3 4214 4447 4448 +3 4214 4448 4449 +3 4214 4449 4215 +3 4215 4449 4450 +3 4215 4450 4216 +3 4216 4450 4451 +3 4216 4451 4217 +3 4217 4451 4452 +3 4217 4452 4218 +3 4218 4452 4453 +3 4218 4453 4219 +3 4219 4453 4454 +3 4219 4454 4220 +3 4220 4454 4455 +3 4220 4455 4221 +3 4221 4455 4456 +3 4221 4456 4222 +3 4222 4456 4457 +3 4222 4457 4223 +3 4223 4457 4458 +3 4223 4458 4224 +3 4224 4458 4459 +3 4224 4459 4225 +3 4225 4459 4460 +3 4225 4460 4226 +3 4226 4460 4461 +3 4226 4461 4227 +3 4227 4461 4462 +3 4227 4462 4228 +3 4228 4462 4463 +3 4228 4463 4229 +3 4229 4463 4464 +3 4229 4464 4230 +3 4230 4464 4465 +3 4230 4465 4231 +3 4231 4465 4466 +3 4231 4466 4232 +3 4232 4466 4467 +3 4232 4467 4468 +3 4232 4468 4233 +3 4233 4468 4234 +3 4234 4468 4469 +3 4234 4469 4235 +3 4235 4469 4470 +3 4235 4470 4236 +3 4236 4470 4471 +3 4236 4471 4237 +3 4237 4471 4472 +3 4237 4472 4473 +3 4237 4473 4238 +3 4238 4473 4239 +3 4239 4473 4474 +3 4239 4474 4240 +3 4240 4474 4475 +3 4240 4475 4241 +3 4241 4475 4476 +3 4241 4476 4242 +3 4242 4476 4477 +3 4242 4477 4243 +3 4243 4477 4478 +3 4243 4478 4479 +3 4243 4479 4244 +3 4244 4479 4480 +3 4244 4480 4245 +3 4245 4480 4246 +3 4246 4480 4481 +3 4246 4481 4482 +3 4246 4482 4247 +3 4247 4482 4483 +3 4247 4483 4248 +3 4248 4483 4249 +3 4249 4483 4484 +3 4249 4484 4485 +3 4249 4485 4250 +3 4250 4485 4486 +3 4250 4486 4251 +3 4251 4486 4487 +3 4251 4487 4252 +3 4252 4487 4488 +3 4252 4488 4253 +3 4253 4488 4489 +3 4253 4489 4254 +3 4254 4489 4255 +3 4255 4489 4490 +3 4255 4490 4491 +3 4255 4491 4256 +3 4256 4491 4257 +3 4257 4491 4492 +3 4257 4492 4258 +3 4258 4492 4493 +3 4258 4493 4494 +3 4258 4494 4259 +3 4259 4494 4495 +3 4259 4495 4260 +3 4260 4495 4262 +3 4262 4495 4496 +3 4262 4496 4263 +3 4263 4496 4264 +3 4264 4496 4497 +3 4264 4497 4498 +3 4264 4498 4265 +3 4265 4498 4499 +3 4265 4499 4266 +3 4266 4499 4500 +3 4266 4500 4501 +3 4266 4501 4267 +3 4267 4501 4268 +3 4268 4501 4502 +3 4268 4502 4269 +3 4269 4502 4503 +3 4269 4503 4270 +3 4270 4503 4504 +3 4270 4504 4271 +3 4271 4504 4505 +3 4271 4505 4506 +3 4271 4506 4272 +3 4272 4506 4507 +3 4272 4507 4508 +3 4272 4508 4273 +3 4273 4508 4509 +3 4273 4509 4274 +3 4274 4509 4510 +3 4274 4510 4511 +3 4274 4511 4275 +3 4275 4511 4512 +3 4275 4512 4513 +3 4275 4513 4276 +3 4276 4513 4514 +3 4276 4514 4277 +3 4277 4514 4515 +3 4277 4515 4516 +3 4277 4516 4278 +3 4278 4516 4517 +3 4278 4517 4279 +3 4279 4517 4280 +3 4280 4517 4518 +3 4280 4518 4281 +3 4281 4518 4519 +3 4281 4519 4282 +3 4282 4519 4520 +3 4282 4520 4521 +3 4282 4521 4283 +3 4283 4521 4522 +3 4283 4522 4284 +3 4284 4522 4285 +3 4285 4522 4523 +3 4285 4523 4524 +3 4285 4524 4286 +3 4286 4524 4525 +3 4286 4525 4287 +3 4287 4525 4526 +3 4287 4526 4288 +3 4288 4526 4527 +3 4288 4527 4289 +3 4289 4527 4528 +3 4289 4528 4290 +3 4290 4528 4291 +3 4291 4528 4529 +3 4291 4529 4530 +3 4291 4530 4292 +3 4292 4530 4531 +3 4292 4531 4293 +3 4293 4531 4532 +3 4293 4532 4533 +3 4293 4533 4294 +3 4294 4533 4534 +3 4294 4534 4535 +3 4294 4535 4295 +3 4295 4535 4536 +3 4295 4536 4296 +3 4296 4536 4537 +3 4296 4537 4538 +3 4296 4538 4297 +3 4297 4538 4298 +3 4298 4538 4539 +3 4298 4539 4299 +3 4299 4539 4540 +3 4299 4540 4541 +3 4299 4541 4300 +3 4300 4541 4542 +3 4300 4542 4301 +3 4301 4542 4543 +3 4301 4543 4302 +3 4302 4543 4544 +3 4302 4544 4303 +3 4303 4544 4545 +3 4303 4545 4546 +3 4303 4546 4304 +3 4304 4546 4547 +3 4304 4547 4305 +3 4305 4547 4306 +3 4306 4547 4548 +3 4306 4548 4549 +3 4306 4549 4307 +3 4307 4549 4308 +3 4308 4549 4550 +3 4308 4550 4551 +3 4308 4551 4309 +3 4309 4551 4310 +3 4310 4551 4552 +3 4310 4552 4311 +3 4311 4552 4553 +3 4311 4553 4312 +3 4312 4553 4313 +3 4313 4553 4314 +3 4314 4553 4554 +3 4314 4554 4315 +3 4315 4554 4555 +3 4315 4555 4316 +3 4316 4555 4556 +3 4316 4556 4317 +3 4317 4556 4557 +3 4317 4557 4318 +3 4318 4557 4558 +3 4318 4558 4559 +3 4318 4559 4319 +3 4319 4559 4320 +3 4320 4559 4560 +3 4320 4560 4561 +3 4320 4561 4321 +3 4321 4561 4322 +3 4322 4561 4562 +3 4322 4562 4323 +3 4323 4562 4563 +3 4323 4563 4564 +3 4323 4564 4324 +3 4324 4564 4565 +3 4324 4565 4325 +3 4325 4565 4326 +3 4326 4565 4566 +3 4326 4566 4327 +3 4327 4566 4567 +3 4327 4567 4568 +3 4327 4568 4328 +3 4328 4568 4569 +3 4328 4569 4329 +3 4329 4569 4570 +3 4329 4570 4330 +3 4330 4570 4571 +3 4330 4571 4331 +3 4331 4571 4572 +3 4331 4572 4332 +3 4332 4572 4573 +3 4332 4573 4574 +3 4332 4574 4333 +3 4333 4574 4575 +3 4333 4575 4334 +3 4334 4575 4335 +3 4335 4575 4576 +3 4335 4576 4577 +3 4335 4577 4336 +3 4336 4577 4578 +3 4336 4578 4579 +3 4336 4579 4337 +3 4337 4579 4338 +3 4338 4579 4580 +3 4338 4580 4339 +3 4339 4580 4581 +3 4339 4581 4582 +3 4339 4582 4340 +3 4340 4582 4583 +3 4340 4583 4341 +3 4341 4583 4584 +3 4341 4584 4342 +3 4342 4584 4585 +3 4342 4585 4343 +3 4343 4585 4586 +3 4343 4586 4344 +3 4344 4586 4587 +3 4344 4587 4588 +3 4344 4588 4345 +3 4345 4588 4346 +3 4346 4588 4589 +3 4346 4589 4347 +3 4347 4589 4590 +3 4347 4590 4591 +3 4347 4591 4348 +3 4348 4591 4350 +3 4350 4591 4351 +3 4351 4591 4592 +3 4351 4592 4352 +3 4352 4592 4593 +3 4352 4593 4353 +3 4353 4593 4594 +3 4353 4594 4595 +3 4353 4595 4354 +3 4354 4595 4355 +3 4355 4595 4596 +3 4355 4596 4356 +3 4356 4596 4597 +3 4356 4597 4598 +3 4356 4598 4357 +3 4357 4598 4358 +3 4358 4598 4599 +3 4358 4599 4600 +3 4358 4600 4359 +3 4359 4600 4601 +3 4359 4601 4360 +3 4360 4601 4602 +3 4360 4602 4603 +3 4360 4603 4361 +3 4361 4603 4604 +3 4361 4604 4605 +3 4361 4605 4362 +3 4362 4605 4606 +3 4362 4606 4363 +3 4363 4606 4607 +3 4363 4607 4364 +3 4364 4607 4608 +3 4364 4608 4609 +3 4364 4609 4365 +3 4365 4609 4366 +3 4366 4609 4610 +3 4366 4610 4367 +3 4367 4610 4611 +3 4367 4611 4612 +3 4367 4612 4368 +3 4368 4612 4613 +3 4368 4613 4369 +3 4369 4613 4614 +3 4369 4614 4370 +3 4370 4614 4615 +3 4370 4615 4371 +3 4371 4615 4616 +3 4371 4616 4617 +3 4371 4617 4372 +3 4372 4617 4618 +3 4372 4618 4373 +3 4373 4618 4619 +3 4373 4619 4374 +3 4374 4619 4620 +3 4374 4620 4375 +3 4375 4620 4621 +3 4375 4621 4376 +3 4376 4621 4622 +3 4376 4622 4377 +3 4377 4622 4623 +3 4377 4623 4378 +3 4378 4623 4624 +3 4378 4624 4379 +3 4379 4624 4625 +3 4379 4625 4380 +3 4380 4625 4626 +3 4380 4626 4381 +3 4381 4626 4627 +3 4381 4627 4628 +3 4381 4628 4382 +3 4382 4628 4629 +3 4382 4629 4383 +3 4383 4629 4384 +3 4384 4629 4630 +3 4384 4630 4631 +3 4384 4631 4385 +3 4385 4631 4632 +3 4385 4632 4386 +3 4386 4632 4387 +3 4387 4632 4633 +3 4387 4633 4634 +3 4387 4634 4635 +3 4387 4635 4388 +3 4388 4635 4389 +3 4389 4635 4636 +3 4389 4636 4637 +3 4389 4637 4638 +3 4389 4638 4639 +3 4389 4639 4390 +3 4390 4639 4391 +3 4391 4639 4392 +3 4392 4639 4393 +3 4393 4639 4640 +3 4393 4640 4394 +3 4394 4640 4641 +3 4394 4641 4642 +3 4394 4642 4643 +3 4394 4643 4395 +3 4395 4643 4396 +3 4396 4643 4644 +3 4396 4644 4398 +3 4398 4644 4399 +3 4399 4644 4645 +3 4399 4645 4400 +3 4400 4645 4646 +3 4400 4646 4401 +3 4401 4646 4647 +3 4401 4647 4402 +3 4402 4647 4648 +3 4402 4648 4403 +3 4403 4648 4649 +3 4403 4649 4404 +3 4404 4649 4650 +3 4404 4650 4405 +3 4405 4650 4651 +3 4405 4651 4406 +3 4406 4651 4652 +3 4406 4652 4407 +3 4407 4652 4653 +3 4407 4653 4408 +3 4408 4653 4654 +3 4408 4654 4409 +3 4409 4654 4655 +3 4409 4655 4410 +3 4410 4655 4656 +3 4410 4656 4657 +3 4410 4657 4411 +3 4411 4657 4658 +3 4411 4658 4412 +3 4412 4658 4659 +3 4412 4659 4413 +3 4413 4659 4660 +3 4413 4660 4414 +3 4414 4660 4661 +3 4414 4661 4415 +3 4415 4661 4416 +3 4416 4661 4662 +3 4416 4662 4663 +3 4416 4663 4417 +3 4417 4663 4664 +3 4417 4664 4418 +3 4418 4664 4665 +3 4418 4665 4419 +3 4419 4665 4420 +3 4420 4665 4666 +3 4420 4666 4421 +3 4421 4666 4667 +3 4421 4667 4422 +3 4422 4667 4668 +3 4422 4668 4669 +3 4422 4669 4423 +3 4423 4669 4670 +3 4423 4670 4424 +3 4424 4670 4671 +3 4424 4671 4425 +3 4425 4671 4672 +3 4425 4672 4429 +3 4429 4672 4430 +3 4430 4672 4673 +3 4430 4673 4431 +3 4431 4673 4674 +3 4431 4674 4675 +3 4431 4675 4432 +3 4432 4675 4433 +3 4433 4675 4676 +3 4433 4676 4434 +3 4434 4676 4677 +3 4434 4677 4678 +3 4434 4678 4435 +3 4435 4678 4436 +3 4436 4678 4679 +3 4436 4679 4437 +3 4437 4679 4680 +3 4437 4680 4681 +3 4437 4681 4438 +3 4438 4681 4682 +3 4438 4682 4439 +3 4439 4682 4683 +3 4439 4683 4440 +3 4440 4683 4684 +3 4440 4684 4685 +3 4440 4685 4441 +3 4441 4685 4686 +3 4441 4686 4442 +3 4442 4686 4687 +3 4442 4687 4688 +3 4442 4688 4443 +3 4443 4688 4689 +3 4443 4689 4690 +3 4443 4690 4444 +3 4444 4690 4691 +3 4444 4691 4445 +3 4445 4691 4446 +3 4446 4691 4692 +3 4446 4692 4447 +3 4447 4692 4693 +3 4447 4693 4448 +3 4448 4693 4694 +3 4448 4694 4695 +3 4448 4695 4449 +3 4449 4695 4696 +3 4449 4696 4450 +3 4450 4696 4697 +3 4450 4697 4451 +3 4451 4697 4698 +3 4451 4698 4452 +3 4452 4698 4699 +3 4452 4699 4453 +3 4453 4699 4700 +3 4453 4700 4454 +3 4454 4700 4701 +3 4454 4701 4455 +3 4455 4701 4702 +3 4455 4702 4456 +3 4456 4702 4703 +3 4456 4703 4457 +3 4457 4703 4704 +3 4457 4704 4458 +3 4458 4704 4705 +3 4458 4705 4459 +3 4459 4705 4706 +3 4459 4706 4460 +3 4460 4706 4707 +3 4460 4707 4461 +3 4461 4707 4708 +3 4461 4708 4462 +3 4462 4708 4709 +3 4462 4709 4463 +3 4463 4709 4710 +3 4463 4710 4464 +3 4464 4710 4711 +3 4464 4711 4465 +3 4465 4711 4712 +3 4465 4712 4466 +3 4466 4712 4713 +3 4466 4713 4467 +3 4467 4713 4714 +3 4467 4714 4715 +3 4467 4715 4468 +3 4468 4715 4469 +3 4469 4715 4716 +3 4469 4716 4470 +3 4470 4716 4717 +3 4470 4717 4471 +3 4471 4717 4718 +3 4471 4718 4472 +3 4472 4718 4719 +3 4472 4719 4720 +3 4472 4720 4473 +3 4473 4720 4474 +3 4474 4720 4721 +3 4474 4721 4475 +3 4475 4721 4722 +3 4475 4722 4476 +3 4476 4722 4723 +3 4476 4723 4477 +3 4477 4723 4724 +3 4477 4724 4478 +3 4478 4724 4725 +3 4478 4725 4726 +3 4478 4726 4479 +3 4479 4726 4727 +3 4479 4727 4480 +3 4480 4727 4481 +3 4481 4727 4728 +3 4481 4728 4729 +3 4481 4729 4482 +3 4482 4729 4730 +3 4482 4730 4483 +3 4483 4730 4484 +3 4484 4730 4731 +3 4484 4731 4732 +3 4484 4732 4485 +3 4485 4732 4733 +3 4485 4733 4486 +3 4486 4733 4734 +3 4486 4734 4487 +3 4487 4734 4735 +3 4487 4735 4488 +3 4488 4735 4736 +3 4488 4736 4489 +3 4489 4736 4490 +3 4490 4736 4737 +3 4490 4737 4738 +3 4490 4738 4491 +3 4491 4738 4492 +3 4492 4738 4739 +3 4492 4739 4493 +3 4493 4739 4740 +3 4493 4740 4741 +3 4493 4741 4494 +3 4494 4741 4742 +3 4494 4742 4495 +3 4495 4742 4496 +3 4496 4742 4497 +3 4497 4742 4743 +3 4497 4743 4744 +3 4497 4744 4498 +3 4498 4744 4745 +3 4498 4745 4499 +3 4499 4745 4746 +3 4499 4746 4747 +3 4499 4747 4500 +3 4500 4747 4748 +3 4500 4748 4749 +3 4500 4749 4501 +3 4501 4749 4750 +3 4501 4750 4502 +3 4502 4750 4751 +3 4502 4751 4752 +3 4502 4752 4503 +3 4503 4752 4753 +3 4503 4753 4754 +3 4503 4754 4504 +3 4504 4754 4755 +3 4504 4755 4505 +3 4505 4755 4756 +3 4505 4756 4757 +3 4505 4757 4506 +3 4506 4757 4507 +3 4507 4757 4758 +3 4507 4758 4759 +3 4507 4759 4508 +3 4508 4759 4509 +3 4509 4759 4760 +3 4509 4760 4510 +3 4510 4760 4761 +3 4510 4761 4762 +3 4510 4762 4511 +3 4511 4762 4763 +3 4511 4763 4512 +3 4512 4763 4764 +3 4512 4764 4765 +3 4512 4765 4513 +3 4513 4765 4514 +3 4514 4765 4766 +3 4514 4766 4767 +3 4514 4767 4768 +3 4514 4768 4515 +3 4515 4768 4769 +3 4515 4769 4770 +3 4515 4770 4516 +3 4516 4770 4771 +3 4516 4771 4772 +3 4516 4772 4517 +3 4517 4772 4518 +3 4518 4772 4773 +3 4518 4773 4774 +3 4518 4774 4519 +3 4519 4774 4775 +3 4519 4775 4520 +3 4520 4775 4776 +3 4520 4776 4777 +3 4520 4777 4521 +3 4521 4777 4522 +3 4522 4777 4523 +3 4523 4777 4778 +3 4523 4778 4524 +3 4524 4778 4779 +3 4524 4779 4780 +3 4524 4780 4525 +3 4525 4780 4781 +3 4525 4781 4526 +3 4526 4781 4782 +3 4526 4782 4527 +3 4527 4782 4783 +3 4527 4783 4528 +3 4528 4783 4529 +3 4529 4783 4784 +3 4529 4784 4785 +3 4529 4785 4530 +3 4530 4785 4786 +3 4530 4786 4531 +3 4531 4786 4787 +3 4531 4787 4788 +3 4531 4788 4532 +3 4532 4788 4533 +3 4533 4788 4789 +3 4533 4789 4534 +3 4534 4789 4790 +3 4534 4790 4791 +3 4534 4791 4792 +3 4534 4792 4535 +3 4535 4792 4536 +3 4536 4792 4793 +3 4536 4793 4537 +3 4537 4793 4794 +3 4537 4794 4538 +3 4538 4794 4795 +3 4538 4795 4539 +3 4539 4795 4796 +3 4539 4796 4797 +3 4539 4797 4540 +3 4540 4797 4798 +3 4540 4798 4799 +3 4540 4799 4541 +3 4541 4799 4800 +3 4541 4800 4542 +3 4542 4800 4801 +3 4542 4801 4802 +3 4542 4802 4543 +3 4543 4802 4803 +3 4543 4803 4544 +3 4544 4803 4804 +3 4544 4804 4545 +3 4545 4804 4805 +3 4545 4805 4546 +3 4546 4805 4806 +3 4546 4806 4547 +3 4547 4806 4548 +3 4548 4806 4807 +3 4548 4807 4808 +3 4548 4808 4549 +3 4549 4808 4550 +3 4550 4808 4809 +3 4550 4809 4810 +3 4550 4810 4551 +3 4551 4810 4552 +3 4552 4810 4554 +3 4554 4810 4555 +3 4555 4810 4809 +3 4555 4809 4556 +3 4556 4809 4811 +3 4556 4811 4557 +3 4557 4811 4812 +3 4557 4812 4558 +3 4558 4812 4813 +3 4558 4813 4814 +3 4558 4814 4559 +3 4559 4814 4560 +3 4560 4814 4815 +3 4560 4815 4816 +3 4560 4816 4561 +3 4561 4816 4562 +3 4562 4816 4817 +3 4562 4817 4563 +3 4563 4817 4818 +3 4563 4818 4819 +3 4563 4819 4564 +3 4564 4819 4820 +3 4564 4820 4565 +3 4565 4820 4566 +3 4566 4820 4821 +3 4566 4821 4567 +3 4567 4821 4822 +3 4567 4822 4823 +3 4567 4823 4568 +3 4568 4823 4824 +3 4568 4824 4570 +3 4570 4824 4571 +3 4571 4824 4825 +3 4571 4825 4826 +3 4571 4826 4827 +3 4571 4827 4572 +3 4572 4827 4828 +3 4572 4828 4829 +3 4572 4829 4573 +3 4573 4829 4830 +3 4573 4830 4574 +3 4574 4830 4831 +3 4574 4831 4832 +3 4574 4832 4575 +3 4575 4832 4576 +3 4576 4832 4833 +3 4576 4833 4577 +3 4577 4833 4834 +3 4577 4834 4578 +3 4578 4834 4835 +3 4578 4835 4836 +3 4578 4836 4579 +3 4579 4836 4580 +3 4580 4836 4837 +3 4580 4837 4581 +3 4581 4837 4838 +3 4581 4838 4839 +3 4581 4839 4582 +3 4582 4839 4840 +3 4582 4840 4583 +3 4583 4840 4841 +3 4583 4841 4584 +3 4584 4841 4842 +3 4584 4842 4585 +3 4585 4842 4843 +3 4585 4843 4586 +3 4586 4843 4844 +3 4586 4844 4587 +3 4587 4844 4845 +3 4587 4845 4846 +3 4587 4846 4588 +3 4588 4846 4589 +3 4589 4846 4847 +3 4589 4847 4590 +3 4590 4847 4848 +3 4590 4848 4592 +3 4592 4848 4593 +3 4593 4848 4849 +3 4593 4849 4594 +3 4594 4849 4850 +3 4594 4850 4851 +3 4594 4851 4595 +3 4595 4851 4596 +3 4596 4851 4852 +3 4596 4852 4853 +3 4596 4853 4597 +3 4597 4853 4854 +3 4597 4854 4855 +3 4597 4855 4598 +3 4598 4855 4599 +3 4599 4855 4856 +3 4599 4856 4857 +3 4599 4857 4600 +3 4600 4857 4601 +3 4601 4857 4858 +3 4601 4858 4602 +3 4602 4858 4859 +3 4602 4859 4860 +3 4602 4860 4603 +3 4603 4860 4861 +3 4603 4861 4604 +3 4604 4861 4862 +3 4604 4862 4605 +3 4605 4862 4863 +3 4605 4863 4606 +3 4606 4863 4864 +3 4606 4864 4607 +3 4607 4864 4608 +3 4608 4864 4865 +3 4608 4865 4866 +3 4608 4866 4609 +3 4609 4866 4610 +3 4610 4866 4867 +3 4610 4867 4611 +3 4611 4867 4868 +3 4611 4868 4869 +3 4611 4869 4612 +3 4612 4869 4870 +3 4612 4870 4613 +3 4613 4870 4871 +3 4613 4871 4614 +3 4614 4871 4872 +3 4614 4872 4615 +3 4615 4872 4873 +3 4615 4873 4616 +3 4616 4873 4874 +3 4616 4874 4875 +3 4616 4875 4617 +3 4617 4875 4876 +3 4617 4876 4618 +3 4618 4876 4877 +3 4618 4877 4619 +3 4619 4877 4878 +3 4619 4878 4620 +3 4620 4878 4879 +3 4620 4879 4621 +3 4621 4879 4880 +3 4621 4880 4622 +3 4622 4880 4881 +3 4622 4881 4623 +3 4623 4881 4882 +3 4623 4882 4624 +3 4624 4882 4883 +3 4624 4883 4625 +3 4625 4883 4884 +3 4625 4884 4626 +3 4626 4884 4885 +3 4626 4885 4627 +3 4627 4885 4886 +3 4627 4886 4887 +3 4627 4887 4628 +3 4628 4887 4888 +3 4628 4888 4629 +3 4629 4888 4630 +3 4630 4888 4889 +3 4630 4889 4890 +3 4630 4890 4631 +3 4631 4890 4891 +3 4631 4891 4632 +3 4632 4891 4633 +3 4633 4891 4892 +3 4633 4892 4893 +3 4633 4893 4634 +3 4634 4893 4894 +3 4634 4894 4895 +3 4634 4895 4896 +3 4634 4896 4635 +3 4635 4896 4897 +3 4635 4897 4636 +3 4636 4897 4898 +3 4636 4898 4637 +3 4637 4898 4899 +3 4637 4899 4900 +3 4637 4900 4638 +3 4638 4900 4640 +3 4640 4900 4641 +3 4641 4900 4901 +3 4641 4901 4902 +3 4641 4902 4642 +3 4642 4902 4903 +3 4642 4903 4904 +3 4642 4904 4643 +3 4643 4904 4644 +3 4644 4904 4645 +3 4645 4904 4905 +3 4645 4905 4646 +3 4646 4905 4906 +3 4646 4906 4647 +3 4647 4906 4907 +3 4647 4907 4648 +3 4648 4907 4908 +3 4648 4908 4649 +3 4649 4908 4909 +3 4649 4909 4650 +3 4650 4909 4910 +3 4650 4910 4651 +3 4651 4910 4911 +3 4651 4911 4652 +3 4652 4911 4912 +3 4652 4912 4653 +3 4653 4912 4913 +3 4653 4913 4654 +3 4654 4913 4914 +3 4654 4914 4655 +3 4655 4914 4915 +3 4655 4915 4656 +3 4656 4915 4916 +3 4656 4916 4917 +3 4656 4917 4657 +3 4657 4917 4918 +3 4657 4918 4658 +3 4658 4918 4919 +3 4658 4919 4659 +3 4659 4919 4920 +3 4659 4920 4660 +3 4660 4920 4921 +3 4660 4921 4661 +3 4661 4921 4662 +3 4662 4921 4922 +3 4662 4922 4923 +3 4662 4923 4663 +3 4663 4923 4924 +3 4663 4924 4664 +3 4664 4924 4925 +3 4664 4925 4665 +3 4665 4925 4926 +3 4665 4926 4666 +3 4666 4926 4927 +3 4666 4927 4667 +3 4667 4927 4928 +3 4667 4928 4668 +3 4668 4928 4929 +3 4668 4929 4669 +3 4669 4929 4930 +3 4669 4930 4931 +3 4669 4931 4670 +3 4670 4931 4932 +3 4670 4932 4671 +3 4671 4932 4672 +3 4672 4932 4933 +3 4672 4933 4673 +3 4673 4933 4934 +3 4673 4934 4674 +3 4674 4934 4935 +3 4674 4935 4675 +3 4675 4935 4936 +3 4675 4936 4676 +3 4676 4936 4937 +3 4676 4937 4677 +3 4677 4937 4938 +3 4677 4938 4939 +3 4677 4939 4678 +3 4678 4939 4679 +3 4679 4939 4940 +3 4679 4940 4680 +3 4680 4940 4941 +3 4680 4941 4942 +3 4680 4942 4681 +3 4681 4942 4943 +3 4681 4943 4682 +3 4682 4943 4944 +3 4682 4944 4683 +3 4683 4944 4684 +3 4684 4944 4945 +3 4684 4945 4946 +3 4684 4946 4947 +3 4684 4947 4685 +3 4685 4947 4686 +3 4686 4947 4948 +3 4686 4948 4687 +3 4687 4948 4949 +3 4687 4949 4950 +3 4687 4950 4951 +3 4687 4951 4952 +3 4687 4952 4688 +3 4688 4952 4689 +3 4689 4952 4953 +3 4689 4953 4954 +3 4689 4954 4690 +3 4690 4954 4955 +3 4690 4955 4691 +3 4691 4955 4956 +3 4691 4956 4692 +3 4692 4956 4957 +3 4692 4957 4958 +3 4692 4958 4693 +3 4693 4958 4959 +3 4693 4959 4960 +3 4693 4960 4694 +3 4694 4960 4961 +3 4694 4961 4695 +3 4695 4961 4962 +3 4695 4962 4696 +3 4696 4962 4697 +3 4697 4962 4963 +3 4697 4963 4964 +3 4697 4964 4698 +3 4698 4964 4965 +3 4698 4965 4699 +3 4699 4965 4966 +3 4699 4966 4700 +3 4700 4966 4967 +3 4700 4967 4701 +3 4701 4967 4968 +3 4701 4968 4702 +3 4702 4968 4969 +3 4702 4969 4703 +3 4703 4969 4970 +3 4703 4970 4704 +3 4704 4970 4971 +3 4704 4971 4705 +3 4705 4971 4972 +3 4705 4972 4706 +3 4706 4972 4973 +3 4706 4973 4707 +3 4707 4973 4974 +3 4707 4974 4708 +3 4708 4974 4975 +3 4708 4975 4709 +3 4709 4975 4976 +3 4709 4976 4710 +3 4710 4976 4977 +3 4710 4977 4711 +3 4711 4977 4978 +3 4711 4978 4712 +3 4712 4978 4713 +3 4713 4978 4979 +3 4713 4979 4714 +3 4714 4979 4980 +3 4714 4980 4981 +3 4714 4981 4715 +3 4715 4981 4716 +3 4716 4981 4982 +3 4716 4982 4717 +3 4717 4982 4983 +3 4717 4983 4718 +3 4718 4983 4984 +3 4718 4984 4719 +3 4719 4984 4985 +3 4719 4985 4986 +3 4719 4986 4720 +3 4720 4986 4721 +3 4721 4986 4987 +3 4721 4987 4722 +3 4722 4987 4988 +3 4722 4988 4723 +3 4723 4988 4989 +3 4723 4989 4724 +3 4724 4989 4990 +3 4724 4990 4725 +3 4725 4990 4763 +3 4763 4990 4764 +3 4764 4990 4991 +3 4764 4991 4765 +3 4765 4991 4766 +3 4766 4991 4992 +3 4766 4992 4767 +3 4767 4992 4993 +3 4767 4993 4994 +3 4767 4994 4768 +3 4768 4994 4995 +3 4768 4995 4769 +3 4769 4995 4996 +3 4769 4996 4997 +3 4769 4997 4770 +3 4770 4997 4998 +3 4770 4998 4999 +3 4770 4999 4771 +3 4771 4999 5000 +3 4771 5000 4773 +3 4773 5000 5001 +3 4773 5001 4774 +3 4774 5001 4775 +3 4775 5001 5002 +3 4775 5002 4776 +3 4776 5002 5003 +3 4776 5003 5004 +3 4776 5004 5005 +3 4776 5005 4777 +3 4777 5005 4778 +3 4778 5005 4779 +3 4779 5005 5006 +3 4779 5006 5007 +3 4779 5007 4780 +3 4780 5007 5008 +3 4780 5008 5009 +3 4780 5009 4781 +3 4781 5009 5010 +3 4781 5010 5011 +3 4781 5011 5012 +3 4781 5012 4782 +3 4782 5012 4783 +3 4783 5012 4784 +3 4784 5012 5013 +3 4784 5013 5014 +3 4784 5014 4785 +3 4785 5014 4786 +3 4786 5014 5015 +3 4786 5015 4787 +3 4787 5015 5016 +3 4787 5016 4788 +3 4788 5016 4789 +3 4789 5016 5017 +3 4789 5017 4790 +3 4790 5017 5018 +3 4790 5018 5019 +3 4790 5019 4791 +3 4791 5019 5020 +3 4791 5020 5021 +3 4791 5021 4792 +3 4792 5021 4793 +3 4793 5021 5022 +3 4793 5022 4794 +3 4794 5022 4795 +3 4795 5022 4796 +3 4796 5022 5023 +3 4796 5023 5024 +3 4796 5024 5025 +3 4796 5025 4797 +3 4797 5025 4798 +3 4798 5025 5026 +3 4798 5026 5027 +3 4798 5027 5028 +3 4798 5028 4799 +3 4799 5028 5029 +3 4799 5029 4800 +3 4800 5029 5030 +3 4800 5030 4801 +3 4801 5030 5031 +3 4801 5031 5032 +3 4801 5032 4802 +3 4802 5032 5033 +3 4802 5033 4803 +3 4803 5033 4804 +3 4804 5033 5034 +3 4804 5034 5035 +3 4804 5035 4805 +3 4805 5035 5036 +3 4805 5036 5037 +3 4805 5037 4806 +3 4806 5037 4807 +3 4807 5037 4812 +3 4812 5037 4813 +3 4813 5037 5036 +3 4813 5036 5038 +3 4813 5038 4814 +3 4814 5038 4815 +3 4815 5038 5039 +3 4815 5039 5040 +3 4815 5040 4816 +3 4816 5040 4817 +3 4817 5040 5041 +3 4817 5041 4818 +3 4818 5041 5042 +3 4818 5042 5043 +3 4818 5043 4819 +3 4819 5043 5044 +3 4819 5044 4820 +3 4820 5044 4821 +3 4821 5044 4822 +3 4822 5044 5045 +3 4822 5045 5046 +3 4822 5046 4823 +3 4823 5046 5047 +3 4823 5047 4824 +3 4824 5047 4825 +3 4825 5047 4826 +3 4826 5047 5048 +3 4826 5048 5049 +3 4826 5049 4827 +3 4827 5049 4828 +3 4828 5049 5050 +3 4828 5050 5051 +3 4828 5051 4829 +3 4829 5051 5052 +3 4829 5052 4830 +3 4830 5052 4831 +3 4831 5052 5053 +3 4831 5053 5054 +3 4831 5054 4832 +3 4832 5054 4833 +3 4833 5054 5055 +3 4833 5055 5056 +3 4833 5056 4834 +3 4834 5056 4835 +3 4835 5056 5057 +3 4835 5057 5058 +3 4835 5058 4836 +3 4836 5058 4837 +3 4837 5058 5059 +3 4837 5059 4838 +3 4838 5059 5060 +3 4838 5060 5061 +3 4838 5061 4839 +3 4839 5061 5062 +3 4839 5062 4840 +3 4840 5062 5063 +3 4840 5063 4841 +3 4841 5063 5064 +3 4841 5064 4842 +3 4842 5064 5065 +3 4842 5065 4843 +3 4843 5065 5066 +3 4843 5066 4844 +3 4844 5066 5067 +3 4844 5067 4845 +3 4845 5067 5068 +3 4845 5068 5069 +3 4845 5069 4846 +3 4846 5069 4847 +3 4847 5069 5070 +3 4847 5070 4848 +3 4848 5070 4849 +3 4849 5070 5071 +3 4849 5071 4850 +3 4850 5071 5072 +3 4850 5072 5073 +3 4850 5073 4851 +3 4851 5073 4852 +3 4852 5073 5074 +3 4852 5074 5075 +3 4852 5075 4853 +3 4853 5075 5076 +3 4853 5076 4854 +3 4854 5076 5077 +3 4854 5077 4856 +3 4856 5077 5078 +3 4856 5078 4857 +3 4857 5078 4858 +3 4858 5078 5079 +3 4858 5079 4859 +3 4859 5079 5080 +3 4859 5080 4860 +3 4860 5080 5081 +3 4860 5081 4861 +3 4861 5081 5082 +3 4861 5082 5083 +3 4861 5083 4862 +3 4862 5083 5084 +3 4862 5084 4863 +3 4863 5084 4864 +3 4864 5084 5085 +3 4864 5085 5086 +3 4864 5086 4865 +3 4865 5086 5087 +3 4865 5087 5088 +3 4865 5088 4866 +3 4866 5088 4867 +3 4867 5088 5089 +3 4867 5089 4868 +3 4868 5089 5090 +3 4868 5090 5091 +3 4868 5091 4869 +3 4869 5091 5092 +3 4869 5092 4870 +3 4870 5092 5093 +3 4870 5093 4871 +3 4871 5093 5094 +3 4871 5094 4872 +3 4872 5094 5095 +3 4872 5095 4873 +3 4873 5095 5096 +3 4873 5096 4874 +3 4874 5096 5097 +3 4874 5097 5098 +3 4874 5098 4875 +3 4875 5098 5099 +3 4875 5099 4876 +3 4876 5099 5100 +3 4876 5100 4877 +3 4877 5100 5101 +3 4877 5101 4878 +3 4878 5101 5102 +3 4878 5102 4879 +3 4879 5102 5103 +3 4879 5103 4880 +3 4880 5103 5104 +3 4880 5104 4881 +3 4881 5104 5105 +3 4881 5105 4882 +3 4882 5105 5106 +3 4882 5106 4883 +3 4883 5106 5107 +3 4883 5107 4884 +3 4884 5107 5108 +3 4884 5108 4885 +3 4885 5108 5109 +3 4885 5109 4886 +3 4886 5109 5110 +3 4886 5110 5111 +3 4886 5111 4887 +3 4887 5111 5112 +3 4887 5112 4888 +3 4888 5112 4889 +3 4889 5112 5113 +3 4889 5113 5114 +3 4889 5114 4890 +3 4890 5114 5115 +3 4890 5115 4891 +3 4891 5115 4892 +3 4892 5115 5116 +3 4892 5116 5117 +3 4892 5117 4893 +3 4893 5117 5118 +3 4893 5118 4894 +3 4894 5118 5119 +3 4894 5119 5120 +3 4894 5120 4895 +3 4895 5120 5121 +3 4895 5121 4896 +3 4896 5121 5122 +3 4896 5122 4897 +3 4897 5122 5123 +3 4897 5123 4898 +3 4898 5123 5124 +3 4898 5124 5125 +3 4898 5125 4899 +3 4899 5125 5126 +3 4899 5126 5127 +3 4899 5127 4900 +3 4900 5127 4901 +3 4901 5127 5128 +3 4901 5128 4902 +3 4902 5128 5129 +3 4902 5129 4903 +3 4903 5129 5130 +3 4903 5130 4905 +3 4905 5130 4906 +3 4906 5130 5131 +3 4906 5131 4907 +3 4907 5131 5132 +3 4907 5132 4908 +3 4908 5132 5133 +3 4908 5133 4909 +3 4909 5133 5134 +3 4909 5134 4910 +3 4910 5134 5135 +3 4910 5135 4911 +3 4911 5135 5136 +3 4911 5136 4912 +3 4912 5136 5137 +3 4912 5137 4913 +3 4913 5137 5138 +3 4913 5138 4914 +3 4914 5138 5139 +3 4914 5139 4915 +3 4915 5139 5140 +3 4915 5140 4916 +3 4916 5140 5141 +3 4916 5141 5142 +3 4916 5142 4917 +3 4917 5142 4918 +3 4918 5142 5143 +3 4918 5143 4919 +3 4919 5143 5144 +3 4919 5144 4920 +3 4920 5144 5145 +3 4920 5145 4921 +3 4921 5145 4922 +3 4922 5145 5146 +3 4922 5146 5147 +3 4922 5147 4923 +3 4923 5147 5148 +3 4923 5148 4924 +3 4924 5148 5149 +3 4924 5149 4925 +3 4925 5149 5150 +3 4925 5150 4926 +3 4926 5150 5151 +3 4926 5151 4927 +3 4927 5151 5152 +3 4927 5152 4928 +3 4928 5152 5153 +3 4928 5153 4929 +3 4929 5153 5154 +3 4929 5154 4930 +3 4930 5154 5155 +3 4930 5155 4931 +3 4931 5155 5156 +3 4931 5156 4932 +3 4932 5156 4933 +3 4933 5156 5157 +3 4933 5157 4934 +3 4934 5157 5158 +3 4934 5158 4935 +3 4935 5158 5159 +3 4935 5159 5160 +3 4935 5160 5161 +3 4935 5161 4936 +3 4936 5161 5162 +3 4936 5162 4937 +3 4937 5162 5163 +3 4937 5163 4938 +3 4938 5163 5164 +3 4938 5164 5165 +3 4938 5165 4939 +3 4939 5165 4940 +3 4940 5165 5166 +3 4940 5166 4941 +3 4941 5166 5167 +3 4941 5167 5168 +3 4941 5168 4942 +3 4942 5168 5169 +3 4942 5169 4943 +3 4943 5169 5170 +3 4943 5170 4944 +3 4944 5170 4945 +3 4945 5170 5171 +3 4945 5171 5172 +3 4945 5172 4946 +3 4946 5172 5173 +3 4946 5173 5174 +3 4946 5174 4947 +3 4947 5174 5175 +3 4947 5175 4948 +3 4948 5175 5176 +3 4948 5176 4949 +3 4949 5176 5177 +3 4949 5177 4950 +3 4950 5177 5178 +3 4950 5178 5179 +3 4950 5179 5180 +3 4950 5180 4951 +3 4951 5180 4952 +3 4952 5180 4953 +3 4953 5180 5181 +3 4953 5181 4954 +3 4954 5181 4955 +3 4955 5181 4956 +3 4956 5181 5182 +3 4956 5182 4957 +3 4957 5182 5183 +3 4957 5183 5184 +3 4957 5184 4958 +3 4958 5184 5185 +3 4958 5185 4959 +3 4959 5185 5186 +3 4959 5186 5187 +3 4959 5187 4960 +3 4960 5187 5188 +3 4960 5188 4961 +3 4961 5188 5189 +3 4961 5189 5190 +3 4961 5190 4962 +3 4962 5190 4963 +3 4963 5190 5191 +3 4963 5191 4964 +3 4964 5191 5192 +3 4964 5192 4965 +3 4965 5192 5193 +3 4965 5193 4966 +3 4966 5193 5194 +3 4966 5194 4967 +3 4967 5194 5195 +3 4967 5195 4968 +3 4968 5195 5196 +3 4968 5196 4969 +3 4969 5196 5197 +3 4969 5197 4970 +3 4970 5197 5198 +3 4970 5198 4971 +3 4971 5198 5199 +3 4971 5199 4972 +3 4972 5199 5200 +3 4972 5200 4973 +3 4973 5200 5201 +3 4973 5201 4974 +3 4974 5201 5202 +3 4974 5202 4975 +3 4975 5202 5203 +3 4975 5203 4976 +3 4976 5203 5204 +3 4976 5204 4977 +3 4977 5204 4978 +3 4978 5204 5205 +3 4978 5205 4979 +3 4979 5205 5206 +3 4979 5206 5207 +3 4979 5207 4980 +3 4980 5207 5208 +3 4980 5208 4981 +3 4981 5208 4982 +3 4982 5208 5209 +3 4982 5209 5210 +3 4982 5210 4983 +3 4983 5210 5211 +3 4983 5211 4984 +3 4984 5211 4996 +3 4996 5211 4997 +3 4997 5211 4998 +3 4998 5211 5212 +3 4998 5212 5213 +3 4998 5213 4999 +3 4999 5213 5001 +3 5001 5213 5002 +3 5002 5213 5214 +3 5002 5214 5003 +3 5003 5214 5215 +3 5003 5215 5216 +3 5003 5216 5004 +3 5004 5216 5207 +3 5207 5216 5217 +3 5207 5217 5208 +3 5208 5217 5209 +3 5209 5217 5218 +3 5209 5218 5210 +3 5210 5218 5212 +3 5212 5218 5214 +3 5214 5218 5215 +3 5215 5218 5217 +3 5215 5217 5216 +3 5212 5214 5213 +3 5210 5212 5211 +3 5004 5207 5206 +3 5004 5206 5006 +3 5006 5206 5205 +3 5006 5205 5219 +3 5006 5219 5007 +3 5007 5219 5008 +3 5008 5219 5220 +3 5008 5220 5221 +3 5008 5221 5009 +3 5009 5221 5010 +3 5010 5221 5222 +3 5010 5222 5223 +3 5010 5223 5224 +3 5010 5224 5011 +3 5011 5224 5012 +3 5012 5224 5225 +3 5012 5225 5013 +3 5013 5225 5226 +3 5013 5226 5227 +3 5013 5227 5228 +3 5013 5228 5014 +3 5014 5228 5015 +3 5015 5228 5229 +3 5015 5229 5016 +3 5016 5229 5017 +3 5017 5229 5018 +3 5018 5229 5230 +3 5018 5230 5231 +3 5018 5231 5019 +3 5019 5231 5232 +3 5019 5232 5020 +3 5020 5232 5233 +3 5020 5233 5023 +3 5023 5233 5234 +3 5023 5234 5024 +3 5024 5234 5235 +3 5024 5235 5025 +3 5025 5235 5026 +3 5026 5235 5236 +3 5026 5236 5237 +3 5026 5237 5027 +3 5027 5237 5238 +3 5027 5238 5239 +3 5027 5239 5028 +3 5028 5239 5240 +3 5028 5240 5029 +3 5029 5240 5241 +3 5029 5241 5242 +3 5029 5242 5030 +3 5030 5242 5031 +3 5031 5242 5243 +3 5031 5243 5032 +3 5032 5243 5244 +3 5032 5244 5033 +3 5033 5244 5245 +3 5033 5245 5034 +3 5034 5245 5246 +3 5034 5246 5247 +3 5034 5247 5035 +3 5035 5247 5248 +3 5035 5248 5036 +3 5036 5248 5038 +3 5038 5248 5039 +3 5039 5248 5249 +3 5039 5249 5250 +3 5039 5250 5040 +3 5040 5250 5041 +3 5041 5250 5251 +3 5041 5251 5042 +3 5042 5251 5252 +3 5042 5252 5253 +3 5042 5253 5043 +3 5043 5253 5254 +3 5043 5254 5044 +3 5044 5254 5045 +3 5045 5254 5255 +3 5045 5255 5256 +3 5045 5256 5046 +3 5046 5256 5257 +3 5046 5257 5048 +3 5048 5257 5258 +3 5048 5258 5259 +3 5048 5259 5049 +3 5049 5259 5260 +3 5049 5260 5050 +3 5050 5260 5261 +3 5050 5261 5262 +3 5050 5262 5051 +3 5051 5262 5263 +3 5051 5263 5052 +3 5052 5263 5053 +3 5053 5263 5264 +3 5053 5264 5265 +3 5053 5265 5054 +3 5054 5265 5055 +3 5055 5265 5266 +3 5055 5266 5267 +3 5055 5267 5056 +3 5056 5267 5057 +3 5057 5267 5268 +3 5057 5268 5269 +3 5057 5269 5058 +3 5058 5269 5059 +3 5059 5269 5270 +3 5059 5270 5060 +3 5060 5270 5271 +3 5060 5271 5272 +3 5060 5272 5061 +3 5061 5272 5273 +3 5061 5273 5062 +3 5062 5273 5274 +3 5062 5274 5063 +3 5063 5274 5275 +3 5063 5275 5064 +3 5064 5275 5276 +3 5064 5276 5065 +3 5065 5276 5277 +3 5065 5277 5066 +3 5066 5277 5278 +3 5066 5278 5067 +3 5067 5278 5279 +3 5067 5279 5068 +3 5068 5279 5280 +3 5068 5280 5281 +3 5068 5281 5069 +3 5069 5281 5070 +3 5070 5281 5071 +3 5071 5281 5282 +3 5071 5282 5072 +3 5072 5282 5283 +3 5072 5283 5073 +3 5073 5283 5074 +3 5074 5283 5284 +3 5074 5284 5075 +3 5075 5284 5285 +3 5075 5285 5076 +3 5076 5285 5286 +3 5076 5286 5077 +3 5077 5286 5287 +3 5077 5287 5078 +3 5078 5287 5288 +3 5078 5288 5079 +3 5079 5288 5080 +3 5080 5288 5289 +3 5080 5289 5081 +3 5081 5289 5290 +3 5081 5290 5082 +3 5082 5290 5291 +3 5082 5291 5292 +3 5082 5292 5083 +3 5083 5292 5085 +3 5085 5292 5293 +3 5085 5293 5086 +3 5086 5293 5294 +3 5086 5294 5087 +3 5087 5294 5295 +3 5087 5295 5296 +3 5087 5296 5088 +3 5088 5296 5089 +3 5089 5296 5297 +3 5089 5297 5090 +3 5090 5297 5298 +3 5090 5298 5299 +3 5090 5299 5091 +3 5091 5299 5300 +3 5091 5300 5092 +3 5092 5300 5301 +3 5092 5301 5093 +3 5093 5301 5302 +3 5093 5302 5094 +3 5094 5302 5303 +3 5094 5303 5095 +3 5095 5303 5304 +3 5095 5304 5096 +3 5096 5304 5305 +3 5096 5305 5097 +3 5097 5305 5306 +3 5097 5306 5307 +3 5097 5307 5098 +3 5098 5307 5308 +3 5098 5308 5099 +3 5099 5308 5309 +3 5099 5309 5100 +3 5100 5309 5310 +3 5100 5310 5101 +3 5101 5310 5311 +3 5101 5311 5102 +3 5102 5311 5312 +3 5102 5312 5103 +3 5103 5312 5313 +3 5103 5313 5104 +3 5104 5313 5314 +3 5104 5314 5105 +3 5105 5314 5315 +3 5105 5315 5106 +3 5106 5315 5316 +3 5106 5316 5107 +3 5107 5316 5317 +3 5107 5317 5108 +3 5108 5317 5318 +3 5108 5318 5109 +3 5109 5318 5319 +3 5109 5319 5110 +3 5110 5319 5320 +3 5110 5320 5321 +3 5110 5321 5111 +3 5111 5321 5322 +3 5111 5322 5112 +3 5112 5322 5113 +3 5113 5322 5323 +3 5113 5323 5324 +3 5113 5324 5114 +3 5114 5324 5325 +3 5114 5325 5115 +3 5115 5325 5116 +3 5116 5325 5326 +3 5116 5326 5327 +3 5116 5327 5117 +3 5117 5327 5118 +3 5118 5327 5328 +3 5118 5328 5119 +3 5119 5328 5329 +3 5119 5329 5330 +3 5119 5330 5120 +3 5120 5330 5331 +3 5120 5331 5121 +3 5121 5331 5332 +3 5121 5332 5122 +3 5122 5332 5333 +3 5122 5333 5123 +3 5123 5333 5334 +3 5123 5334 5124 +3 5124 5334 5335 +3 5124 5335 5336 +3 5124 5336 5125 +3 5125 5336 5337 +3 5125 5337 5126 +3 5126 5337 5338 +3 5126 5338 5339 +3 5126 5339 5127 +3 5127 5339 5128 +3 5128 5339 5340 +3 5128 5340 5129 +3 5129 5340 5341 +3 5129 5341 5130 +3 5130 5341 5131 +3 5131 5341 5342 +3 5131 5342 5132 +3 5132 5342 5343 +3 5132 5343 5133 +3 5133 5343 5344 +3 5133 5344 5134 +3 5134 5344 5345 +3 5134 5345 5135 +3 5135 5345 5346 +3 5135 5346 5136 +3 5136 5346 5347 +3 5136 5347 5137 +3 5137 5347 5348 +3 5137 5348 5138 +3 5138 5348 5349 +3 5138 5349 5139 +3 5139 5349 5350 +3 5139 5350 5140 +3 5140 5350 5351 +3 5140 5351 5141 +3 5141 5351 5352 +3 5141 5352 5353 +3 5141 5353 5142 +3 5142 5353 5354 +3 5142 5354 5143 +3 5143 5354 5355 +3 5143 5355 5144 +3 5144 5355 5356 +3 5144 5356 5145 +3 5145 5356 5146 +3 5146 5356 5357 +3 5146 5357 5358 +3 5146 5358 5147 +3 5147 5358 5359 +3 5147 5359 5148 +3 5148 5359 5360 +3 5148 5360 5149 +3 5149 5360 5361 +3 5149 5361 5150 +3 5150 5361 5362 +3 5150 5362 5151 +3 5151 5362 5363 +3 5151 5363 5152 +3 5152 5363 5364 +3 5152 5364 5153 +3 5153 5364 5154 +3 5154 5364 5365 +3 5154 5365 5366 +3 5154 5366 5155 +3 5155 5366 5367 +3 5155 5367 5156 +3 5156 5367 5368 +3 5156 5368 5157 +3 5157 5368 5158 +3 5158 5368 5369 +3 5158 5369 5159 +3 5159 5369 5370 +3 5159 5370 5371 +3 5159 5371 5160 +3 5160 5371 5372 +3 5160 5372 5373 +3 5160 5373 5161 +3 5161 5373 5374 +3 5161 5374 5162 +3 5162 5374 5375 +3 5162 5375 5163 +3 5163 5375 5376 +3 5163 5376 5164 +3 5164 5376 5377 +3 5164 5377 5378 +3 5164 5378 5165 +3 5165 5378 5166 +3 5166 5378 5379 +3 5166 5379 5167 +3 5167 5379 5380 +3 5167 5380 5381 +3 5167 5381 5168 +3 5168 5381 5382 +3 5168 5382 5169 +3 5169 5382 5383 +3 5169 5383 5170 +3 5170 5383 5171 +3 5171 5383 5384 +3 5171 5384 5385 +3 5171 5385 5172 +3 5172 5385 5386 +3 5172 5386 5173 +3 5173 5386 5387 +3 5173 5387 5388 +3 5173 5388 5174 +3 5174 5388 5389 +3 5174 5389 5175 +3 5175 5389 5390 +3 5175 5390 5176 +3 5176 5390 5391 +3 5176 5391 5177 +3 5177 5391 5392 +3 5177 5392 5178 +3 5178 5392 5393 +3 5178 5393 5183 +3 5183 5393 5394 +3 5183 5394 5184 +3 5184 5394 5185 +3 5185 5394 5395 +3 5185 5395 5396 +3 5185 5396 5186 +3 5186 5396 5397 +3 5186 5397 5187 +3 5187 5397 5398 +3 5187 5398 5188 +3 5188 5398 5399 +3 5188 5399 5189 +3 5189 5399 5400 +3 5189 5400 5401 +3 5189 5401 5190 +3 5190 5401 5191 +3 5191 5401 5402 +3 5191 5402 5192 +3 5192 5402 5403 +3 5192 5403 5193 +3 5193 5403 5404 +3 5193 5404 5194 +3 5194 5404 5405 +3 5194 5405 5195 +3 5195 5405 5406 +3 5195 5406 5196 +3 5196 5406 5407 +3 5196 5407 5197 +3 5197 5407 5408 +3 5197 5408 5198 +3 5198 5408 5409 +3 5198 5409 5199 +3 5199 5409 5410 +3 5199 5410 5200 +3 5200 5410 5411 +3 5200 5411 5201 +3 5201 5411 5222 +3 5222 5411 5223 +3 5223 5411 5412 +3 5223 5412 5224 +3 5224 5412 5413 +3 5224 5413 5414 +3 5224 5414 5225 +3 5225 5414 5226 +3 5226 5414 5415 +3 5226 5415 5227 +3 5227 5415 5416 +3 5227 5416 5417 +3 5227 5417 5228 +3 5228 5417 5230 +3 5230 5417 5418 +3 5230 5418 5419 +3 5230 5419 5231 +3 5231 5419 5420 +3 5231 5420 5421 +3 5231 5421 5422 +3 5231 5422 5232 +3 5232 5422 5423 +3 5232 5423 5233 +3 5233 5423 5424 +3 5233 5424 5234 +3 5234 5424 5425 +3 5234 5425 5235 +3 5235 5425 5236 +3 5236 5425 5426 +3 5236 5426 5427 +3 5236 5427 5237 +3 5237 5427 5428 +3 5237 5428 5238 +3 5238 5428 5429 +3 5238 5429 5430 +3 5238 5430 5239 +3 5239 5430 5431 +3 5239 5431 5240 +3 5240 5431 5432 +3 5240 5432 5433 +3 5240 5433 5241 +3 5241 5433 5242 +3 5242 5433 5243 +3 5243 5433 5244 +3 5244 5433 5434 +3 5244 5434 5245 +3 5245 5434 5435 +3 5245 5435 5246 +3 5246 5435 5436 +3 5246 5436 5437 +3 5246 5437 5247 +3 5247 5437 5249 +3 5249 5437 5438 +3 5249 5438 5250 +3 5250 5438 5251 +3 5251 5438 5439 +3 5251 5439 5252 +3 5252 5439 5440 +3 5252 5440 5441 +3 5252 5441 5253 +3 5253 5441 5442 +3 5253 5442 5254 +3 5254 5442 5255 +3 5255 5442 5443 +3 5255 5443 5444 +3 5255 5444 5256 +3 5256 5444 5445 +3 5256 5445 5257 +3 5257 5445 5258 +3 5258 5445 5446 +3 5258 5446 5447 +3 5258 5447 5448 +3 5258 5448 5259 +3 5259 5448 5260 +3 5260 5448 5449 +3 5260 5449 5450 +3 5260 5450 5261 +3 5261 5450 5451 +3 5261 5451 5452 +3 5261 5452 5262 +3 5262 5452 5453 +3 5262 5453 5263 +3 5263 5453 5264 +3 5264 5453 5454 +3 5264 5454 5455 +3 5264 5455 5265 +3 5265 5455 5266 +3 5266 5455 5456 +3 5266 5456 5457 +3 5266 5457 5267 +3 5267 5457 5268 +3 5268 5457 5458 +3 5268 5458 5459 +3 5268 5459 5269 +3 5269 5459 5270 +3 5270 5459 5460 +3 5270 5460 5271 +3 5271 5460 5461 +3 5271 5461 5462 +3 5271 5462 5272 +3 5272 5462 5463 +3 5272 5463 5273 +3 5273 5463 5464 +3 5273 5464 5274 +3 5274 5464 5465 +3 5274 5465 5275 +3 5275 5465 5466 +3 5275 5466 5276 +3 5276 5466 5467 +3 5276 5467 5277 +3 5277 5467 5468 +3 5277 5468 5278 +3 5278 5468 5469 +3 5278 5469 5279 +3 5279 5469 5470 +3 5279 5470 5280 +3 5280 5470 5471 +3 5280 5471 5282 +3 5282 5471 5283 +3 5283 5471 5284 +3 5284 5471 5472 +3 5284 5472 5285 +3 5285 5472 5473 +3 5285 5473 5286 +3 5286 5473 5474 +3 5286 5474 5287 +3 5287 5474 5475 +3 5287 5475 5288 +3 5288 5475 5476 +3 5288 5476 5289 +3 5289 5476 5477 +3 5289 5477 5290 +3 5290 5477 5478 +3 5290 5478 5291 +3 5291 5478 5479 +3 5291 5479 5292 +3 5292 5479 5293 +3 5293 5479 5480 +3 5293 5480 5294 +3 5294 5480 5481 +3 5294 5481 5295 +3 5295 5481 5482 +3 5295 5482 5483 +3 5295 5483 5296 +3 5296 5483 5297 +3 5297 5483 5484 +3 5297 5484 5298 +3 5298 5484 5485 +3 5298 5485 5486 +3 5298 5486 5299 +3 5299 5486 5487 +3 5299 5487 5300 +3 5300 5487 5488 +3 5300 5488 5301 +3 5301 5488 5489 +3 5301 5489 5302 +3 5302 5489 5490 +3 5302 5490 5303 +3 5303 5490 5491 +3 5303 5491 5304 +3 5304 5491 5492 +3 5304 5492 5305 +3 5305 5492 5493 +3 5305 5493 5306 +3 5306 5493 5494 +3 5306 5494 5495 +3 5306 5495 5307 +3 5307 5495 5496 +3 5307 5496 5308 +3 5308 5496 5497 +3 5308 5497 5309 +3 5309 5497 5498 +3 5309 5498 5310 +3 5310 5498 5499 +3 5310 5499 5311 +3 5311 5499 5500 +3 5311 5500 5312 +3 5312 5500 5501 +3 5312 5501 5313 +3 5313 5501 5502 +3 5313 5502 5314 +3 5314 5502 5503 +3 5314 5503 5315 +3 5315 5503 5504 +3 5315 5504 5316 +3 5316 5504 5505 +3 5316 5505 5317 +3 5317 5505 5506 +3 5317 5506 5318 +3 5318 5506 5507 +3 5318 5507 5319 +3 5319 5507 5508 +3 5319 5508 5320 +3 5320 5508 5509 +3 5320 5509 5510 +3 5320 5510 5321 +3 5321 5510 5511 +3 5321 5511 5322 +3 5322 5511 5323 +3 5323 5511 5512 +3 5323 5512 5513 +3 5323 5513 5324 +3 5324 5513 5514 +3 5324 5514 5325 +3 5325 5514 5326 +3 5326 5514 5515 +3 5326 5515 5516 +3 5326 5516 5327 +3 5327 5516 5328 +3 5328 5516 5329 +3 5329 5516 5517 +3 5329 5517 5518 +3 5329 5518 5330 +3 5330 5518 5519 +3 5330 5519 5331 +3 5331 5519 5520 +3 5331 5520 5332 +3 5332 5520 5333 +3 5333 5520 5521 +3 5333 5521 5334 +3 5334 5521 5522 +3 5334 5522 5335 +3 5335 5522 5523 +3 5335 5523 5524 +3 5335 5524 5336 +3 5336 5524 5337 +3 5337 5524 5525 +3 5337 5525 5526 +3 5337 5526 5338 +3 5338 5526 5527 +3 5338 5527 5528 +3 5338 5528 5339 +3 5339 5528 5340 +3 5340 5528 5529 +3 5340 5529 5341 +3 5341 5529 5342 +3 5342 5529 5530 +3 5342 5530 5343 +3 5343 5530 5531 +3 5343 5531 5344 +3 5344 5531 5532 +3 5344 5532 5345 +3 5345 5532 5533 +3 5345 5533 5346 +3 5346 5533 5534 +3 5346 5534 5347 +3 5347 5534 5535 +3 5347 5535 5348 +3 5348 5535 5536 +3 5348 5536 5349 +3 5349 5536 5537 +3 5349 5537 5350 +3 5350 5537 5538 +3 5350 5538 5351 +3 5351 5538 5539 +3 5351 5539 5352 +3 5352 5539 5540 +3 5352 5540 5541 +3 5352 5541 5353 +3 5353 5541 5542 +3 5353 5542 5354 +3 5354 5542 5543 +3 5354 5543 5355 +3 5355 5543 5544 +3 5355 5544 5356 +3 5356 5544 5357 +3 5357 5544 5545 +3 5357 5545 5546 +3 5357 5546 5358 +3 5358 5546 5547 +3 5358 5547 5359 +3 5359 5547 5548 +3 5359 5548 5360 +3 5360 5548 5549 +3 5360 5549 5361 +3 5361 5549 5550 +3 5361 5550 5362 +3 5362 5550 5551 +3 5362 5551 5363 +3 5363 5551 5552 +3 5363 5552 5364 +3 5364 5552 5553 +3 5364 5553 5365 +3 5365 5553 5554 +3 5365 5554 5366 +3 5366 5554 5555 +3 5366 5555 5367 +3 5367 5555 5368 +3 5368 5555 5369 +3 5369 5555 5556 +3 5369 5556 5370 +3 5370 5556 5557 +3 5370 5557 5371 +3 5371 5557 5558 +3 5371 5558 5372 +3 5372 5558 5559 +3 5372 5559 5560 +3 5372 5560 5373 +3 5373 5560 5561 +3 5373 5561 5374 +3 5374 5561 5562 +3 5374 5562 5375 +3 5375 5562 5563 +3 5375 5563 5376 +3 5376 5563 5564 +3 5376 5564 5377 +3 5377 5564 5565 +3 5377 5565 5566 +3 5377 5566 5378 +3 5378 5566 5379 +3 5379 5566 5567 +3 5379 5567 5380 +3 5380 5567 5568 +3 5380 5568 5569 +3 5380 5569 5381 +3 5381 5569 5570 +3 5381 5570 5382 +3 5382 5570 5571 +3 5382 5571 5383 +3 5383 5571 5384 +3 5384 5571 5572 +3 5384 5572 5573 +3 5384 5573 5385 +3 5385 5573 5574 +3 5385 5574 5386 +3 5386 5574 5575 +3 5386 5575 5387 +3 5387 5575 5576 +3 5387 5576 5577 +3 5387 5577 5388 +3 5388 5577 5578 +3 5388 5578 5389 +3 5389 5578 5579 +3 5389 5579 5390 +3 5390 5579 5580 +3 5390 5580 5391 +3 5391 5580 5581 +3 5391 5581 5392 +3 5392 5581 5429 +3 5429 5581 5582 +3 5429 5582 5430 +3 5430 5582 5431 +3 5431 5582 5583 +3 5431 5583 5584 +3 5431 5584 5432 +3 5432 5584 5585 +3 5432 5585 5434 +3 5434 5585 5435 +3 5435 5585 5586 +3 5435 5586 5436 +3 5436 5586 5587 +3 5436 5587 5588 +3 5436 5588 5437 +3 5437 5588 5438 +3 5438 5588 5439 +3 5439 5588 5589 +3 5439 5589 5440 +3 5440 5589 5590 +3 5440 5590 5591 +3 5440 5591 5441 +3 5441 5591 5592 +3 5441 5592 5442 +3 5442 5592 5443 +3 5443 5592 5593 +3 5443 5593 5594 +3 5443 5594 5444 +3 5444 5594 5595 +3 5444 5595 5445 +3 5445 5595 5446 +3 5446 5595 5447 +3 5447 5595 5596 +3 5447 5596 5597 +3 5447 5597 5598 +3 5447 5598 5448 +3 5448 5598 5449 +3 5449 5598 5599 +3 5449 5599 5600 +3 5449 5600 5450 +3 5450 5600 5451 +3 5451 5600 5601 +3 5451 5601 5602 +3 5451 5602 5452 +3 5452 5602 5603 +3 5452 5603 5453 +3 5453 5603 5454 +3 5454 5603 5604 +3 5454 5604 5605 +3 5454 5605 5455 +3 5455 5605 5456 +3 5456 5605 5606 +3 5456 5606 5607 +3 5456 5607 5457 +3 5457 5607 5458 +3 5458 5607 5608 +3 5458 5608 5609 +3 5458 5609 5459 +3 5459 5609 5460 +3 5460 5609 5610 +3 5460 5610 5461 +3 5461 5610 5611 +3 5461 5611 5612 +3 5461 5612 5462 +3 5462 5612 5613 +3 5462 5613 5463 +3 5463 5613 5614 +3 5463 5614 5464 +3 5464 5614 5615 +3 5464 5615 5465 +3 5465 5615 5616 +3 5465 5616 5466 +3 5466 5616 5617 +3 5466 5617 5467 +3 5467 5617 5618 +3 5467 5618 5468 +3 5468 5618 5619 +3 5468 5619 5469 +3 5469 5619 5620 +3 5469 5620 5470 +3 5470 5620 5472 +3 5472 5620 5473 +3 5473 5620 5621 +3 5473 5621 5474 +3 5474 5621 5622 +3 5474 5622 5475 +3 5475 5622 5623 +3 5475 5623 5476 +3 5476 5623 5624 +3 5476 5624 5477 +3 5477 5624 5625 +3 5477 5625 5478 +3 5478 5625 5626 +3 5478 5626 5479 +3 5479 5626 5480 +3 5480 5626 5627 +3 5480 5627 5481 +3 5481 5627 5628 +3 5481 5628 5482 +3 5482 5628 5629 +3 5482 5629 5630 +3 5482 5630 5483 +3 5483 5630 5484 +3 5484 5630 5631 +3 5484 5631 5485 +3 5485 5631 5632 +3 5485 5632 5633 +3 5485 5633 5486 +3 5486 5633 5634 +3 5486 5634 5487 +3 5487 5634 5635 +3 5487 5635 5488 +3 5488 5635 5636 +3 5488 5636 5489 +3 5489 5636 5637 +3 5489 5637 5490 +3 5490 5637 5638 +3 5490 5638 5491 +3 5491 5638 5639 +3 5491 5639 5492 +3 5492 5639 5640 +3 5492 5640 5493 +3 5493 5640 5641 +3 5493 5641 5494 +3 5494 5641 5642 +3 5494 5642 5643 +3 5494 5643 5495 +3 5495 5643 5644 +3 5495 5644 5496 +3 5496 5644 5645 +3 5496 5645 5497 +3 5497 5645 5646 +3 5497 5646 5498 +3 5498 5646 5647 +3 5498 5647 5499 +3 5499 5647 5648 +3 5499 5648 5500 +3 5500 5648 5649 +3 5500 5649 5501 +3 5501 5649 5650 +3 5501 5650 5502 +3 5502 5650 5651 +3 5502 5651 5503 +3 5503 5651 5652 +3 5503 5652 5504 +3 5504 5652 5653 +3 5504 5653 5505 +3 5505 5653 5654 +3 5505 5654 5506 +3 5506 5654 5655 +3 5506 5655 5507 +3 5507 5655 5656 +3 5507 5656 5508 +3 5508 5656 5657 +3 5508 5657 5509 +3 5509 5657 5658 +3 5509 5658 5659 +3 5509 5659 5510 +3 5510 5659 5660 +3 5510 5660 5511 +3 5511 5660 5512 +3 5512 5660 5661 +3 5512 5661 5662 +3 5512 5662 5513 +3 5513 5662 5663 +3 5513 5663 5514 +3 5514 5663 5515 +3 5515 5663 5664 +3 5515 5664 5517 +3 5517 5664 5665 +3 5517 5665 5518 +3 5518 5665 5666 +3 5518 5666 5519 +3 5519 5666 5667 +3 5519 5667 5520 +3 5520 5667 5668 +3 5520 5668 5521 +3 5521 5668 5669 +3 5521 5669 5522 +3 5522 5669 5523 +3 5523 5669 5670 +3 5523 5670 5671 +3 5523 5671 5524 +3 5524 5671 5525 +3 5525 5671 5672 +3 5525 5672 5526 +3 5526 5672 5673 +3 5526 5673 5527 +3 5527 5673 5674 +3 5527 5674 5675 +3 5527 5675 5528 +3 5528 5675 5529 +3 5529 5675 5530 +3 5530 5675 5676 +3 5530 5676 5531 +3 5531 5676 5677 +3 5531 5677 5532 +3 5532 5677 5678 +3 5532 5678 5533 +3 5533 5678 5679 +3 5533 5679 5534 +3 5534 5679 5680 +3 5534 5680 5535 +3 5535 5680 5681 +3 5535 5681 5682 +3 5535 5682 5536 +3 5536 5682 5683 +3 5536 5683 5537 +3 5537 5683 5684 +3 5537 5684 5538 +3 5538 5684 5685 +3 5538 5685 5539 +3 5539 5685 5686 +3 5539 5686 5540 +3 5540 5686 5687 +3 5540 5687 5688 +3 5540 5688 5541 +3 5541 5688 5689 +3 5541 5689 5542 +3 5542 5689 5543 +3 5543 5689 5690 +3 5543 5690 5544 +3 5544 5690 5545 +3 5545 5690 5691 +3 5545 5691 5692 +3 5545 5692 5546 +3 5546 5692 5693 +3 5546 5693 5547 +3 5547 5693 5694 +3 5547 5694 5548 +3 5548 5694 5695 +3 5548 5695 5549 +3 5549 5695 5696 +3 5549 5696 5550 +3 5550 5696 5697 +3 5550 5697 5551 +3 5551 5697 5698 +3 5551 5698 5552 +3 5552 5698 5699 +3 5552 5699 5553 +3 5553 5699 5700 +3 5553 5700 5554 +3 5554 5700 5556 +3 5556 5700 5557 +3 5557 5700 5701 +3 5557 5701 5558 +3 5558 5701 5702 +3 5558 5702 5559 +3 5559 5702 5703 +3 5559 5703 5704 +3 5559 5704 5560 +3 5560 5704 5705 +3 5560 5705 5561 +3 5561 5705 5706 +3 5561 5706 5562 +3 5562 5706 5707 +3 5562 5707 5563 +3 5563 5707 5708 +3 5563 5708 5564 +3 5564 5708 5709 +3 5564 5709 5565 +3 5565 5709 5710 +3 5565 5710 5711 +3 5565 5711 5566 +3 5566 5711 5567 +3 5567 5711 5712 +3 5567 5712 5568 +3 5568 5712 5713 +3 5568 5713 5714 +3 5568 5714 5569 +3 5569 5714 5715 +3 5569 5715 5570 +3 5570 5715 5716 +3 5570 5716 5571 +3 5571 5716 5572 +3 5572 5716 5717 +3 5572 5717 5718 +3 5572 5718 5573 +3 5573 5718 5719 +3 5573 5719 5574 +3 5574 5719 5720 +3 5574 5720 5575 +3 5575 5720 5721 +3 5575 5721 5576 +3 5576 5721 5722 +3 5576 5722 5577 +3 5577 5722 5723 +3 5577 5723 5724 +3 5577 5724 5578 +3 5578 5724 5725 +3 5578 5725 5579 +3 5579 5725 5726 +3 5579 5726 5580 +3 5580 5726 5583 +3 5583 5726 5584 +3 5584 5726 5727 +3 5584 5727 5585 +3 5585 5727 5586 +3 5586 5727 5728 +3 5586 5728 5587 +3 5587 5728 5729 +3 5587 5729 5589 +3 5589 5729 5590 +3 5590 5729 5730 +3 5590 5730 5591 +3 5591 5730 5731 +3 5591 5731 5592 +3 5592 5731 5593 +3 5593 5731 5732 +3 5593 5732 5733 +3 5593 5733 5594 +3 5594 5733 5734 +3 5594 5734 5595 +3 5595 5734 5596 +3 5596 5734 5735 +3 5596 5735 5597 +3 5597 5735 5736 +3 5597 5736 5737 +3 5597 5737 5738 +3 5597 5738 5598 +3 5598 5738 5739 +3 5598 5739 5599 +3 5599 5739 5740 +3 5599 5740 5741 +3 5599 5741 5742 +3 5599 5742 5600 +3 5600 5742 5601 +3 5601 5742 5743 +3 5601 5743 5744 +3 5601 5744 5602 +3 5602 5744 5745 +3 5602 5745 5603 +3 5603 5745 5604 +3 5604 5745 5746 +3 5604 5746 5747 +3 5604 5747 5605 +3 5605 5747 5606 +3 5606 5747 5748 +3 5606 5748 5749 +3 5606 5749 5607 +3 5607 5749 5608 +3 5608 5749 5750 +3 5608 5750 5751 +3 5608 5751 5609 +3 5609 5751 5610 +3 5610 5751 5752 +3 5610 5752 5611 +3 5611 5752 5753 +3 5611 5753 5754 +3 5611 5754 5612 +3 5612 5754 5755 +3 5612 5755 5613 +3 5613 5755 5756 +3 5613 5756 5614 +3 5614 5756 5757 +3 5614 5757 5615 +3 5615 5757 5758 +3 5615 5758 5616 +3 5616 5758 5759 +3 5616 5759 5617 +3 5617 5759 5760 +3 5617 5760 5618 +3 5618 5760 5761 +3 5618 5761 5619 +3 5619 5761 5621 +3 5621 5761 5622 +3 5622 5761 5762 +3 5622 5762 5623 +3 5623 5762 5763 +3 5623 5763 5624 +3 5624 5763 5764 +3 5624 5764 5625 +3 5625 5764 5765 +3 5625 5765 5626 +3 5626 5765 5627 +3 5627 5765 5766 +3 5627 5766 5628 +3 5628 5766 5767 +3 5628 5767 5629 +3 5629 5767 5768 +3 5629 5768 5769 +3 5629 5769 5630 +3 5630 5769 5631 +3 5631 5769 5770 +3 5631 5770 5632 +3 5632 5770 5771 +3 5632 5771 5772 +3 5632 5772 5633 +3 5633 5772 5773 +3 5633 5773 5634 +3 5634 5773 5774 +3 5634 5774 5635 +3 5635 5774 5775 +3 5635 5775 5636 +3 5636 5775 5776 +3 5636 5776 5637 +3 5637 5776 5777 +3 5637 5777 5638 +3 5638 5777 5778 +3 5638 5778 5639 +3 5639 5778 5779 +3 5639 5779 5640 +3 5640 5779 5780 +3 5640 5780 5641 +3 5641 5780 5781 +3 5641 5781 5642 +3 5642 5781 5782 +3 5642 5782 5783 +3 5642 5783 5643 +3 5643 5783 5784 +3 5643 5784 5644 +3 5644 5784 5785 +3 5644 5785 5645 +3 5645 5785 5786 +3 5645 5786 5646 +3 5646 5786 5787 +3 5646 5787 5647 +3 5647 5787 5788 +3 5647 5788 5648 +3 5648 5788 5789 +3 5648 5789 5649 +3 5649 5789 5790 +3 5649 5790 5650 +3 5650 5790 5791 +3 5650 5791 5651 +3 5651 5791 5792 +3 5651 5792 5652 +3 5652 5792 5793 +3 5652 5793 5653 +3 5653 5793 5794 +3 5653 5794 5654 +3 5654 5794 5795 +3 5654 5795 5655 +3 5655 5795 5796 +3 5655 5796 5656 +3 5656 5796 5797 +3 5656 5797 5657 +3 5657 5797 5798 +3 5657 5798 5658 +3 5658 5798 5799 +3 5658 5799 5800 +3 5658 5800 5659 +3 5659 5800 5801 +3 5659 5801 5660 +3 5660 5801 5661 +3 5661 5801 5802 +3 5661 5802 5803 +3 5661 5803 5662 +3 5662 5803 5804 +3 5662 5804 5663 +3 5663 5804 5664 +3 5664 5804 5805 +3 5664 5805 5665 +3 5665 5805 5806 +3 5665 5806 5666 +3 5666 5806 5807 +3 5666 5807 5667 +3 5667 5807 5808 +3 5667 5808 5668 +3 5668 5808 5809 +3 5668 5809 5669 +3 5669 5809 5810 +3 5669 5810 5670 +3 5670 5810 5811 +3 5670 5811 5812 +3 5670 5812 5671 +3 5671 5812 5672 +3 5672 5812 5813 +3 5672 5813 5673 +3 5673 5813 5814 +3 5673 5814 5674 +3 5674 5814 5815 +3 5674 5815 5816 +3 5674 5816 5675 +3 5675 5816 5676 +3 5676 5816 5815 +3 5676 5815 5677 +3 5677 5815 5817 +3 5677 5817 5678 +3 5678 5817 5818 +3 5678 5818 5679 +3 5679 5818 5819 +3 5679 5819 5680 +3 5680 5819 5820 +3 5680 5820 5681 +3 5681 5820 5821 +3 5681 5821 5822 +3 5681 5822 5682 +3 5682 5822 5683 +3 5683 5822 5823 +3 5683 5823 5684 +3 5684 5823 5824 +3 5684 5824 5825 +3 5684 5825 5685 +3 5685 5825 5826 +3 5685 5826 5827 +3 5685 5827 5686 +3 5686 5827 5828 +3 5686 5828 5687 +3 5687 5828 5829 +3 5687 5829 5830 +3 5687 5830 5688 +3 5688 5830 5831 +3 5688 5831 5689 +3 5689 5831 5690 +3 5690 5831 5691 +3 5691 5831 5832 +3 5691 5832 5833 +3 5691 5833 5692 +3 5692 5833 5834 +3 5692 5834 5693 +3 5693 5834 5835 +3 5693 5835 5694 +3 5694 5835 5836 +3 5694 5836 5695 +3 5695 5836 5837 +3 5695 5837 5696 +3 5696 5837 5838 +3 5696 5838 5697 +3 5697 5838 5839 +3 5697 5839 5698 +3 5698 5839 5840 +3 5698 5840 5699 +3 5699 5840 5701 +3 5701 5840 5702 +3 5702 5840 5841 +3 5702 5841 5703 +3 5703 5841 5842 +3 5703 5842 5843 +3 5703 5843 5704 +3 5704 5843 5844 +3 5704 5844 5705 +3 5705 5844 5845 +3 5705 5845 5706 +3 5706 5845 5846 +3 5706 5846 5707 +3 5707 5846 5847 +3 5707 5847 5708 +3 5708 5847 5848 +3 5708 5848 5709 +3 5709 5848 5849 +3 5709 5849 5710 +3 5710 5849 5850 +3 5710 5850 5851 +3 5710 5851 5711 +3 5711 5851 5712 +3 5712 5851 5852 +3 5712 5852 5713 +3 5713 5852 5853 +3 5713 5853 5854 +3 5713 5854 5714 +3 5714 5854 5855 +3 5714 5855 5715 +3 5715 5855 5856 +3 5715 5856 5716 +3 5716 5856 5717 +3 5717 5856 5857 +3 5717 5857 5858 +3 5717 5858 5718 +3 5718 5858 5859 +3 5718 5859 5719 +3 5719 5859 5860 +3 5719 5860 5720 +3 5720 5860 5861 +3 5720 5861 5721 +3 5721 5861 5862 +3 5721 5862 5722 +3 5722 5862 5863 +3 5722 5863 5864 +3 5722 5864 5723 +3 5723 5864 5865 +3 5723 5865 5724 +3 5724 5865 5866 +3 5724 5866 5867 +3 5724 5867 5725 +3 5725 5867 5868 +3 5725 5868 5726 +3 5726 5868 5727 +3 5727 5868 5728 +3 5728 5868 5869 +3 5728 5869 5870 +3 5728 5870 5729 +3 5729 5870 5730 +3 5730 5870 5871 +3 5730 5871 5872 +3 5730 5872 5732 +3 5732 5872 5873 +3 5732 5873 5874 +3 5732 5874 5733 +3 5733 5874 5875 +3 5733 5875 5734 +3 5734 5875 5735 +3 5735 5875 5876 +3 5735 5876 5736 +3 5736 5876 5877 +3 5736 5877 5878 +3 5736 5878 5737 +3 5737 5878 5879 +3 5737 5879 5738 +3 5738 5879 5880 +3 5738 5880 5881 +3 5738 5881 5739 +3 5739 5881 5882 +3 5739 5882 5740 +3 5740 5882 5883 +3 5740 5883 5884 +3 5740 5884 5741 +3 5741 5884 5885 +3 5741 5885 5886 +3 5741 5886 5742 +3 5742 5886 5743 +3 5743 5886 5887 +3 5743 5887 5888 +3 5743 5888 5744 +3 5744 5888 5889 +3 5744 5889 5745 +3 5745 5889 5746 +3 5746 5889 5890 +3 5746 5890 5891 +3 5746 5891 5747 +3 5747 5891 5748 +3 5748 5891 5892 +3 5748 5892 5893 +3 5748 5893 5749 +3 5749 5893 5750 +3 5750 5893 5894 +3 5750 5894 5895 +3 5750 5895 5751 +3 5751 5895 5752 +3 5752 5895 5896 +3 5752 5896 5753 +3 5753 5896 5897 +3 5753 5897 5898 +3 5753 5898 5754 +3 5754 5898 5899 +3 5754 5899 5755 +3 5755 5899 5900 +3 5755 5900 5756 +3 5756 5900 5901 +3 5756 5901 5757 +3 5757 5901 5902 +3 5757 5902 5758 +3 5758 5902 5903 +3 5758 5903 5759 +3 5759 5903 5904 +3 5759 5904 5760 +3 5760 5904 5762 +3 5762 5904 5763 +3 5763 5904 5905 +3 5763 5905 5764 +3 5764 5905 5906 +3 5764 5906 5765 +3 5765 5906 5766 +3 5766 5906 5907 +3 5766 5907 5767 +3 5767 5907 5908 +3 5767 5908 5768 +3 5768 5908 5909 +3 5768 5909 5910 +3 5768 5910 5769 +3 5769 5910 5770 +3 5770 5910 5911 +3 5770 5911 5771 +3 5771 5911 5912 +3 5771 5912 5913 +3 5771 5913 5772 +3 5772 5913 5914 +3 5772 5914 5773 +3 5773 5914 5915 +3 5773 5915 5774 +3 5774 5915 5916 +3 5774 5916 5775 +3 5775 5916 5917 +3 5775 5917 5776 +3 5776 5917 5918 +3 5776 5918 5777 +3 5777 5918 5919 +3 5777 5919 5778 +3 5778 5919 5920 +3 5778 5920 5779 +3 5779 5920 5921 +3 5779 5921 5780 +3 5780 5921 5922 +3 5780 5922 5781 +3 5781 5922 5923 +3 5781 5923 5782 +3 5782 5923 5924 +3 5782 5924 5925 +3 5782 5925 5783 +3 5783 5925 5926 +3 5783 5926 5784 +3 5784 5926 5927 +3 5784 5927 5785 +3 5785 5927 5928 +3 5785 5928 5786 +3 5786 5928 5929 +3 5786 5929 5787 +3 5787 5929 5930 +3 5787 5930 5788 +3 5788 5930 5931 +3 5788 5931 5789 +3 5789 5931 5932 +3 5789 5932 5790 +3 5790 5932 5933 +3 5790 5933 5791 +3 5791 5933 5934 +3 5791 5934 5792 +3 5792 5934 5935 +3 5792 5935 5793 +3 5793 5935 5936 +3 5793 5936 5794 +3 5794 5936 5937 +3 5794 5937 5795 +3 5795 5937 5938 +3 5795 5938 5796 +3 5796 5938 5939 +3 5796 5939 5797 +3 5797 5939 5940 +3 5797 5940 5798 +3 5798 5940 5941 +3 5798 5941 5799 +3 5799 5941 5942 +3 5799 5942 5943 +3 5799 5943 5800 +3 5800 5943 5944 +3 5800 5944 5801 +3 5801 5944 5802 +3 5802 5944 5945 +3 5802 5945 5946 +3 5802 5946 5803 +3 5803 5946 5947 +3 5803 5947 5804 +3 5804 5947 5805 +3 5805 5947 5948 +3 5805 5948 5806 +3 5806 5948 5949 +3 5806 5949 5807 +3 5807 5949 5950 +3 5807 5950 5808 +3 5808 5950 5809 +3 5809 5950 5951 +3 5809 5951 5952 +3 5809 5952 5810 +3 5810 5952 5953 +3 5810 5953 5811 +3 5811 5953 5954 +3 5811 5954 5813 +3 5813 5954 5814 +3 5814 5954 5817 +3 5817 5954 5818 +3 5818 5954 5953 +3 5818 5953 5819 +3 5819 5953 5952 +3 5819 5952 5820 +3 5820 5952 5955 +3 5820 5955 5821 +3 5821 5955 5956 +3 5821 5956 5957 +3 5821 5957 5822 +3 5822 5957 5823 +3 5823 5957 5958 +3 5823 5958 5824 +3 5824 5958 5959 +3 5824 5959 5960 +3 5824 5960 5825 +3 5825 5960 5826 +3 5826 5960 5961 +3 5826 5961 5962 +3 5826 5962 5827 +3 5827 5962 5828 +3 5828 5962 5963 +3 5828 5963 5829 +3 5829 5963 5964 +3 5829 5964 5965 +3 5829 5965 5830 +3 5830 5965 5832 +3 5832 5965 5966 +3 5832 5966 5967 +3 5832 5967 5833 +3 5833 5967 5968 +3 5833 5968 5834 +3 5834 5968 5969 +3 5834 5969 5835 +3 5835 5969 5970 +3 5835 5970 5836 +3 5836 5970 5971 +3 5836 5971 5837 +3 5837 5971 5972 +3 5837 5972 5838 +3 5838 5972 5973 +3 5838 5973 5839 +3 5839 5973 5841 +3 5841 5973 5842 +3 5842 5973 5974 +3 5842 5974 5975 +3 5842 5975 5843 +3 5843 5975 5976 +3 5843 5976 5844 +3 5844 5976 5977 +3 5844 5977 5845 +3 5845 5977 5978 +3 5845 5978 5846 +3 5846 5978 5979 +3 5846 5979 5847 +3 5847 5979 5980 +3 5847 5980 5848 +3 5848 5980 5981 +3 5848 5981 5849 +3 5849 5981 5982 +3 5849 5982 5850 +3 5850 5982 5983 +3 5850 5983 5984 +3 5850 5984 5851 +3 5851 5984 5852 +3 5852 5984 5985 +3 5852 5985 5853 +3 5853 5985 5986 +3 5853 5986 5987 +3 5853 5987 5854 +3 5854 5987 5988 +3 5854 5988 5855 +3 5855 5988 5989 +3 5855 5989 5856 +3 5856 5989 5857 +3 5857 5989 5990 +3 5857 5990 5991 +3 5857 5991 5858 +3 5858 5991 5992 +3 5858 5992 5859 +3 5859 5992 5993 +3 5859 5993 5860 +3 5860 5993 5994 +3 5860 5994 5861 +3 5861 5994 5995 +3 5861 5995 5862 +3 5862 5995 5996 +3 5862 5996 5863 +3 5863 5996 5997 +3 5863 5997 5998 +3 5863 5998 5999 +3 5863 5999 5864 +3 5864 5999 5877 +3 5877 5999 5878 +3 5878 5999 6000 +3 5878 6000 5879 +3 5879 6000 6001 +3 5879 6001 5880 +3 5880 6001 6002 +3 5880 6002 5881 +3 5881 6002 6003 +3 5881 6003 6004 +3 5881 6004 5882 +3 5882 6004 6005 +3 5882 6005 5883 +3 5883 6005 6006 +3 5883 6006 6007 +3 5883 6007 5884 +3 5884 6007 6008 +3 5884 6008 5885 +3 5885 6008 6009 +3 5885 6009 6010 +3 5885 6010 5886 +3 5886 6010 5887 +3 5887 6010 6011 +3 5887 6011 6012 +3 5887 6012 5888 +3 5888 6012 6013 +3 5888 6013 5889 +3 5889 6013 5890 +3 5890 6013 6014 +3 5890 6014 6015 +3 5890 6015 5891 +3 5891 6015 5892 +3 5892 6015 6016 +3 5892 6016 6017 +3 5892 6017 5893 +3 5893 6017 5894 +3 5894 6017 6018 +3 5894 6018 6019 +3 5894 6019 5895 +3 5895 6019 5896 +3 5896 6019 6020 +3 5896 6020 5897 +3 5897 6020 6021 +3 5897 6021 6022 +3 5897 6022 5898 +3 5898 6022 6023 +3 5898 6023 5899 +3 5899 6023 6024 +3 5899 6024 5900 +3 5900 6024 6025 +3 5900 6025 5901 +3 5901 6025 6026 +3 5901 6026 5902 +3 5902 6026 6027 +3 5902 6027 5903 +3 5903 6027 5905 +3 5905 6027 5906 +3 5906 6027 5907 +3 5907 6027 6026 +3 5907 6026 5908 +3 5908 6026 6025 +3 5908 6025 5909 +3 5909 6025 6024 +3 5909 6024 6028 +3 5909 6028 5910 +3 5910 6028 5911 +3 5911 6028 6029 +3 5911 6029 5912 +3 5912 6029 6030 +3 5912 6030 6031 +3 5912 6031 5913 +3 5913 6031 6032 +3 5913 6032 5914 +3 5914 6032 6033 +3 5914 6033 5915 +3 5915 6033 6034 +3 5915 6034 5916 +3 5916 6034 6035 +3 5916 6035 5917 +3 5917 6035 6036 +3 5917 6036 5918 +3 5918 6036 6037 +3 5918 6037 5919 +3 5919 6037 6038 +3 5919 6038 5920 +3 5920 6038 6039 +3 5920 6039 5921 +3 5921 6039 6040 +3 5921 6040 5922 +3 5922 6040 6041 +3 5922 6041 5923 +3 5923 6041 6042 +3 5923 6042 5924 +3 5924 6042 6043 +3 5924 6043 6044 +3 5924 6044 5925 +3 5925 6044 6045 +3 5925 6045 5926 +3 5926 6045 6046 +3 5926 6046 5927 +3 5927 6046 6047 +3 5927 6047 5928 +3 5928 6047 6048 +3 5928 6048 5929 +3 5929 6048 6049 +3 5929 6049 5930 +3 5930 6049 6050 +3 5930 6050 5931 +3 5931 6050 6051 +3 5931 6051 5932 +3 5932 6051 6052 +3 5932 6052 5933 +3 5933 6052 6053 +3 5933 6053 5934 +3 5934 6053 6054 +3 5934 6054 5935 +3 5935 6054 6055 +3 5935 6055 5936 +3 5936 6055 6056 +3 5936 6056 5937 +3 5937 6056 6057 +3 5937 6057 5938 +3 5938 6057 6058 +3 5938 6058 5939 +3 5939 6058 5967 +3 5967 6058 5968 +3 5968 6058 6059 +3 5968 6059 5969 +3 5969 6059 6060 +3 5969 6060 5970 +3 5970 6060 6061 +3 5970 6061 5971 +3 5971 6061 6062 +3 5971 6062 5972 +3 5972 6062 5974 +3 5974 6062 6063 +3 5974 6063 5975 +3 5975 6063 6064 +3 5975 6064 5976 +3 5976 6064 6065 +3 5976 6065 5977 +3 5977 6065 6066 +3 5977 6066 5978 +3 5978 6066 6067 +3 5978 6067 5979 +3 5979 6067 6068 +3 5979 6068 5980 +3 5980 6068 6069 +3 5980 6069 5981 +3 5981 6069 6070 +3 5981 6070 5982 +3 5982 6070 6071 +3 5982 6071 5983 +3 5983 6071 6072 +3 5983 6072 6073 +3 5983 6073 5984 +3 5984 6073 5985 +3 5985 6073 6074 +3 5985 6074 5986 +3 5986 6074 6075 +3 5986 6075 6076 +3 5986 6076 5987 +3 5987 6076 6077 +3 5987 6077 5988 +3 5988 6077 6078 +3 5988 6078 5989 +3 5989 6078 5990 +3 5990 6078 6079 +3 5990 6079 6080 +3 5990 6080 5991 +3 5991 6080 6081 +3 5991 6081 5992 +3 5992 6081 6082 +3 5992 6082 5993 +3 5993 6082 6083 +3 5993 6083 5994 +3 5994 6083 6084 +3 5994 6084 5995 +3 5995 6084 6085 +3 5995 6085 5996 +3 5996 6085 5997 +3 5997 6085 6086 +3 5997 6086 6087 +3 5997 6087 6088 +3 5997 6088 5998 +3 5998 6088 6089 +3 5998 6089 5999 +3 5999 6089 6000 +3 6000 6089 6001 +3 6001 6089 6090 +3 6001 6090 6002 +3 6002 6090 6091 +3 6002 6091 6003 +3 6003 6091 6092 +3 6003 6092 6093 +3 6003 6093 6004 +3 6004 6093 6094 +3 6004 6094 6005 +3 6005 6094 6095 +3 6005 6095 6006 +3 6006 6095 6096 +3 6006 6096 6097 +3 6006 6097 6098 +3 6006 6098 6007 +3 6007 6098 6099 +3 6007 6099 6008 +3 6008 6099 6009 +3 6009 6099 6100 +3 6009 6100 6101 +3 6009 6101 6010 +3 6010 6101 6011 +3 6011 6101 6102 +3 6011 6102 6103 +3 6011 6103 6012 +3 6012 6103 6104 +3 6012 6104 6013 +3 6013 6104 6014 +3 6014 6104 6105 +3 6014 6105 6106 +3 6014 6106 6015 +3 6015 6106 6016 +3 6016 6106 6107 +3 6016 6107 6108 +3 6016 6108 6017 +3 6017 6108 6018 +3 6018 6108 6109 +3 6018 6109 6110 +3 6018 6110 6019 +3 6019 6110 6020 +3 6020 6110 6111 +3 6020 6111 6021 +3 6021 6111 6112 +3 6021 6112 6030 +3 6030 6112 6031 +3 6031 6112 6113 +3 6031 6113 6032 +3 6032 6113 6114 +3 6032 6114 6033 +3 6033 6114 6115 +3 6033 6115 6034 +3 6034 6115 6116 +3 6034 6116 6035 +3 6035 6116 6117 +3 6035 6117 6036 +3 6036 6117 6118 +3 6036 6118 6037 +3 6037 6118 6119 +3 6037 6119 6038 +3 6038 6119 6120 +3 6038 6120 6039 +3 6039 6120 6121 +3 6039 6121 6040 +3 6040 6121 6122 +3 6040 6122 6041 +3 6041 6122 6123 +3 6041 6123 6042 +3 6042 6123 6124 +3 6042 6124 6043 +3 6043 6124 6125 +3 6043 6125 6126 +3 6043 6126 6044 +3 6044 6126 6127 +3 6044 6127 6045 +3 6045 6127 6128 +3 6045 6128 6046 +3 6046 6128 6129 +3 6046 6129 6047 +3 6047 6129 6130 +3 6047 6130 6048 +3 6048 6130 6131 +3 6048 6131 6049 +3 6049 6131 6132 +3 6049 6132 6050 +3 6050 6132 6133 +3 6050 6133 6051 +3 6051 6133 6134 +3 6051 6134 6052 +3 6052 6134 6135 +3 6052 6135 6053 +3 6053 6135 6136 +3 6053 6136 6054 +3 6054 6136 6137 +3 6054 6137 6055 +3 6055 6137 6138 +3 6055 6138 6056 +3 6056 6138 6139 +3 6056 6139 6057 +3 6057 6139 6059 +3 6059 6139 6060 +3 6060 6139 6140 +3 6060 6140 6061 +3 6061 6140 6141 +3 6061 6141 6062 +3 6062 6141 6063 +3 6063 6141 6142 +3 6063 6142 6064 +3 6064 6142 6143 +3 6064 6143 6065 +3 6065 6143 6144 +3 6065 6144 6066 +3 6066 6144 6145 +3 6066 6145 6067 +3 6067 6145 6146 +3 6067 6146 6068 +3 6068 6146 6147 +3 6068 6147 6069 +3 6069 6147 6148 +3 6069 6148 6070 +3 6070 6148 6149 +3 6070 6149 6071 +3 6071 6149 6150 +3 6071 6150 6072 +3 6072 6150 6151 +3 6072 6151 6152 +3 6072 6152 6073 +3 6073 6152 6074 +3 6074 6152 6153 +3 6074 6153 6075 +3 6075 6153 6154 +3 6075 6154 6155 +3 6075 6155 6076 +3 6076 6155 6156 +3 6076 6156 6077 +3 6077 6156 6157 +3 6077 6157 6078 +3 6078 6157 6079 +3 6079 6157 6158 +3 6079 6158 6159 +3 6079 6159 6080 +3 6080 6159 6160 +3 6080 6160 6081 +3 6081 6160 6161 +3 6081 6161 6082 +3 6082 6161 6162 +3 6082 6162 6083 +3 6083 6162 6163 +3 6083 6163 6084 +3 6084 6163 6164 +3 6084 6164 6085 +3 6085 6164 6086 +3 6086 6164 6165 +3 6086 6165 6166 +3 6086 6166 6087 +3 6087 6166 6167 +3 6087 6167 6168 +3 6087 6168 6088 +3 6088 6168 6091 +3 6091 6168 6169 +3 6091 6169 6092 +3 6092 6169 6093 +3 6093 6169 6170 +3 6093 6170 6094 +3 6094 6170 6171 +3 6094 6171 6095 +3 6095 6171 6172 +3 6095 6172 6096 +3 6096 6172 6173 +3 6096 6173 6174 +3 6096 6174 6097 +3 6097 6174 6175 +3 6097 6175 6098 +3 6098 6175 6176 +3 6098 6176 6099 +3 6099 6176 6100 +3 6100 6176 6177 +3 6100 6177 6101 +3 6101 6177 6102 +3 6102 6177 6178 +3 6102 6178 6179 +3 6102 6179 6103 +3 6103 6179 6180 +3 6103 6180 6104 +3 6104 6180 6105 +3 6105 6180 6181 +3 6105 6181 6182 +3 6105 6182 6106 +3 6106 6182 6107 +3 6107 6182 6183 +3 6107 6183 6184 +3 6107 6184 6108 +3 6108 6184 6109 +3 6109 6184 6185 +3 6109 6185 6186 +3 6109 6186 6110 +3 6110 6186 6111 +3 6111 6186 6187 +3 6111 6187 6112 +3 6112 6187 6113 +3 6113 6187 6188 +3 6113 6188 6114 +3 6114 6188 6189 +3 6114 6189 6115 +3 6115 6189 6190 +3 6115 6190 6116 +3 6116 6190 6191 +3 6116 6191 6117 +3 6117 6191 6192 +3 6117 6192 6118 +3 6118 6192 6193 +3 6118 6193 6119 +3 6119 6193 6194 +3 6119 6194 6120 +3 6120 6194 6195 +3 6120 6195 6121 +3 6121 6195 6196 +3 6121 6196 6122 +3 6122 6196 6197 +3 6122 6197 6123 +3 6123 6197 6198 +3 6123 6198 6124 +3 6124 6198 6199 +3 6124 6199 6125 +3 6125 6199 6200 +3 6125 6200 6201 +3 6125 6201 6126 +3 6126 6201 6202 +3 6126 6202 6127 +3 6127 6202 6203 +3 6127 6203 6128 +3 6128 6203 6204 +3 6128 6204 6129 +3 6129 6204 6205 +3 6129 6205 6130 +3 6130 6205 6206 +3 6130 6206 6131 +3 6131 6206 6207 +3 6131 6207 6132 +3 6132 6207 6208 +3 6132 6208 6133 +3 6133 6208 6209 +3 6133 6209 6134 +3 6134 6209 6210 +3 6134 6210 6135 +3 6135 6210 6211 +3 6135 6211 6136 +3 6136 6211 6212 +3 6136 6212 6137 +3 6137 6212 6213 +3 6137 6213 6138 +3 6138 6213 6140 +3 6140 6213 6141 +3 6141 6213 6142 +3 6142 6213 6212 +3 6142 6212 6143 +3 6143 6212 6211 +3 6143 6211 6144 +3 6144 6211 6210 +3 6144 6210 6145 +3 6145 6210 6209 +3 6145 6209 6146 +3 6146 6209 6208 +3 6146 6208 6147 +3 6147 6208 6207 +3 6147 6207 6148 +3 6148 6207 6206 +3 6148 6206 6149 +3 6149 6206 6205 +3 6149 6205 6150 +3 6150 6205 6204 +3 6150 6204 6151 +3 6151 6204 6203 +3 6151 6203 6214 +3 6151 6214 6152 +3 6152 6214 6153 +3 6153 6214 6215 +3 6153 6215 6154 +3 6154 6215 6216 +3 6154 6216 6217 +3 6154 6217 6155 +3 6155 6217 6218 +3 6155 6218 6156 +3 6156 6218 6219 +3 6156 6219 6157 +3 6157 6219 6158 +3 6158 6219 6220 +3 6158 6220 6221 +3 6158 6221 6159 +3 6159 6221 6222 +3 6159 6222 6160 +3 6160 6222 6223 +3 6160 6223 6161 +3 6161 6223 6224 +3 6161 6224 6162 +3 6162 6224 6225 +3 6162 6225 6163 +3 6163 6225 6226 +3 6163 6226 6164 +3 6164 6226 6165 +3 6165 6226 6227 +3 6165 6227 6228 +3 6165 6228 6166 +3 6166 6228 6229 +3 6166 6229 6167 +3 6167 6229 6230 +3 6167 6230 6231 +3 6167 6231 6232 +3 6167 6232 6168 +3 6168 6232 6169 +3 6169 6232 6233 +3 6169 6233 6170 +3 6170 6233 6234 +3 6170 6234 6171 +3 6171 6234 6235 +3 6171 6235 6172 +3 6172 6235 6236 +3 6172 6236 6237 +3 6172 6237 6173 +3 6173 6237 6238 +3 6173 6238 6174 +3 6174 6238 6239 +3 6174 6239 6240 +3 6174 6240 6175 +3 6175 6240 6241 +3 6175 6241 6176 +3 6176 6241 6177 +3 6177 6241 6178 +3 6178 6241 6242 +3 6178 6242 6243 +3 6178 6243 6179 +3 6179 6243 6244 +3 6179 6244 6180 +3 6180 6244 6181 +3 6181 6244 6245 +3 6181 6245 6246 +3 6181 6246 6182 +3 6182 6246 6183 +3 6183 6246 6247 +3 6183 6247 6248 +3 6183 6248 6184 +3 6184 6248 6185 +3 6185 6248 6249 +3 6185 6249 6250 +3 6185 6250 6186 +3 6186 6250 6187 +3 6187 6250 6188 +3 6188 6250 6251 +3 6188 6251 6189 +3 6189 6251 6252 +3 6189 6252 6190 +3 6190 6252 6253 +3 6190 6253 6191 +3 6191 6253 6254 +3 6191 6254 6192 +3 6192 6254 6255 +3 6192 6255 6193 +3 6193 6255 6256 +3 6193 6256 6194 +3 6194 6256 6257 +3 6194 6257 6195 +3 6195 6257 6258 +3 6195 6258 6196 +3 6196 6258 6259 +3 6196 6259 6197 +3 6197 6259 6260 +3 6197 6260 6198 +3 6198 6260 6261 +3 6198 6261 6199 +3 6199 6261 6262 +3 6199 6262 6200 +3 6200 6262 6263 +3 6200 6263 6216 +3 6216 6263 6217 +3 6217 6263 6264 +3 6217 6264 6218 +3 6218 6264 6265 +3 6218 6265 6219 +3 6219 6265 6220 +3 6220 6265 6266 +3 6220 6266 6267 +3 6220 6267 6221 +3 6221 6267 6268 +3 6221 6268 6222 +3 6222 6268 6269 +3 6222 6269 6223 +3 6223 6269 6270 +3 6223 6270 6224 +3 6224 6270 6271 +3 6224 6271 6225 +3 6225 6271 6272 +3 6225 6272 6226 +3 6226 6272 6227 +3 6227 6272 6273 +3 6227 6273 6274 +3 6227 6274 6275 +3 6227 6275 6228 +3 6228 6275 6276 +3 6228 6276 6229 +3 6229 6276 6230 +3 6230 6276 6277 +3 6230 6277 6278 +3 6230 6278 6279 +3 6230 6279 6231 +3 6231 6279 6232 +3 6232 6279 6280 +3 6232 6280 6233 +3 6233 6280 6234 +3 6234 6280 6235 +3 6235 6280 6281 +3 6235 6281 6236 +3 6236 6281 6282 +3 6236 6282 6237 +3 6237 6282 6283 +3 6237 6283 6284 +3 6237 6284 6238 +3 6238 6284 6285 +3 6238 6285 6239 +3 6239 6285 6286 +3 6239 6286 6287 +3 6239 6287 6240 +3 6240 6287 6242 +3 6242 6287 6288 +3 6242 6288 6243 +3 6243 6288 6289 +3 6243 6289 6244 +3 6244 6289 6245 +3 6245 6289 6290 +3 6245 6290 6291 +3 6245 6291 6246 +3 6246 6291 6247 +3 6247 6291 6292 +3 6247 6292 6293 +3 6247 6293 6248 +3 6248 6293 6249 +3 6249 6293 6294 +3 6249 6294 6251 +3 6251 6294 6252 +3 6252 6294 6295 +3 6252 6295 6253 +3 6253 6295 6296 +3 6253 6296 6254 +3 6254 6296 6297 +3 6254 6297 6255 +3 6255 6297 6298 +3 6255 6298 6256 +3 6256 6298 6299 +3 6256 6299 6257 +3 6257 6299 6300 +3 6257 6300 6258 +3 6258 6300 6301 +3 6258 6301 6259 +3 6259 6301 6302 +3 6259 6302 6260 +3 6260 6302 6303 +3 6260 6303 6261 +3 6261 6303 6304 +3 6261 6304 6262 +3 6262 6304 6305 +3 6262 6305 6263 +3 6263 6305 6264 +3 6264 6305 6306 +3 6264 6306 6265 +3 6265 6306 6266 +3 6266 6306 6307 +3 6266 6307 6308 +3 6266 6308 6267 +3 6267 6308 6309 +3 6267 6309 6268 +3 6268 6309 6310 +3 6268 6310 6269 +3 6269 6310 6311 +3 6269 6311 6270 +3 6270 6311 6312 +3 6270 6312 6271 +3 6271 6312 6272 +3 6272 6312 6273 +3 6273 6312 6313 +3 6273 6313 6274 +3 6274 6313 6314 +3 6274 6314 6315 +3 6274 6315 6275 +3 6275 6315 6316 +3 6275 6316 6276 +3 6276 6316 6277 +3 6277 6316 6317 +3 6277 6317 6318 +3 6277 6318 6278 +3 6278 6318 6319 +3 6278 6319 6320 +3 6278 6320 6279 +3 6279 6320 6281 +3 6281 6320 6282 +3 6282 6320 6321 +3 6282 6321 6283 +3 6283 6321 6322 +3 6283 6322 6323 +3 6283 6323 6284 +3 6284 6323 6324 +3 6284 6324 6285 +3 6285 6324 6325 +3 6285 6325 6286 +3 6286 6325 6326 +3 6286 6326 6327 +3 6286 6327 6287 +3 6287 6327 6288 +3 6288 6327 6328 +3 6288 6328 6289 +3 6289 6328 6290 +3 6290 6328 6329 +3 6290 6329 6330 +3 6290 6330 6291 +3 6291 6330 6292 +3 6292 6330 6331 +3 6292 6331 6332 +3 6292 6332 6293 +3 6293 6332 6294 +3 6294 6332 6295 +3 6295 6332 6333 +3 6295 6333 6296 +3 6296 6333 6334 +3 6296 6334 6297 +3 6297 6334 6335 +3 6297 6335 6298 +3 6298 6335 6336 +3 6298 6336 6299 +3 6299 6336 6337 +3 6299 6337 6300 +3 6300 6337 6338 +3 6300 6338 6301 +3 6301 6338 6339 +3 6301 6339 6302 +3 6302 6339 6340 +3 6302 6340 6303 +3 6303 6340 6341 +3 6303 6341 6304 +3 6304 6341 6342 +3 6304 6342 6305 +3 6305 6342 6306 +3 6306 6342 6307 +3 6307 6342 6343 +3 6307 6343 6344 +3 6307 6344 6308 +3 6308 6344 6345 +3 6308 6345 6309 +3 6309 6345 6346 +3 6309 6346 6310 +3 6310 6346 6347 +3 6310 6347 6311 +3 6311 6347 6313 +3 6313 6347 6314 +3 6314 6347 6348 +3 6314 6348 6349 +3 6314 6349 6315 +3 6315 6349 6350 +3 6315 6350 6316 +3 6316 6350 6317 +3 6317 6350 6351 +3 6317 6351 6352 +3 6317 6352 6318 +3 6318 6352 6353 +3 6318 6353 6319 +3 6319 6353 6354 +3 6319 6354 6321 +3 6321 6354 6322 +3 6322 6354 6355 +3 6322 6355 6356 +3 6322 6356 6323 +3 6323 6356 6357 +3 6323 6357 6324 +3 6324 6357 6358 +3 6324 6358 6325 +3 6325 6358 6359 +3 6325 6359 6326 +3 6326 6359 6360 +3 6326 6360 6361 +3 6326 6361 6327 +3 6327 6361 6328 +3 6328 6361 6329 +3 6329 6361 6362 +3 6329 6362 6363 +3 6329 6363 6330 +3 6330 6363 6331 +3 6331 6363 6364 +3 6331 6364 6333 +3 6333 6364 6334 +3 6334 6364 6365 +3 6334 6365 6335 +3 6335 6365 6366 +3 6335 6366 6336 +3 6336 6366 6367 +3 6336 6367 6337 +3 6337 6367 6368 +3 6337 6368 6338 +3 6338 6368 6369 +3 6338 6369 6339 +3 6339 6369 6370 +3 6339 6370 6340 +3 6340 6370 6371 +3 6340 6371 6341 +3 6341 6371 6343 +3 6343 6371 6372 +3 6343 6372 6344 +3 6344 6372 6373 +3 6344 6373 6345 +3 6345 6373 6374 +3 6345 6374 6346 +3 6346 6374 6348 +3 6348 6374 6375 +3 6348 6375 6349 +3 6349 6375 6376 +3 6349 6376 6350 +3 6350 6376 6351 +3 6351 6376 6377 +3 6351 6377 6378 +3 6351 6378 6379 +3 6351 6379 6352 +3 6352 6379 6353 +3 6353 6379 6380 +3 6353 6380 6381 +3 6353 6381 6354 +3 6354 6381 6355 +3 6355 6381 6382 +3 6355 6382 6383 +3 6355 6383 6356 +3 6356 6383 6384 +3 6356 6384 6357 +3 6357 6384 6385 +3 6357 6385 6358 +3 6358 6385 6386 +3 6358 6386 6359 +3 6359 6386 6387 +3 6359 6387 6360 +3 6360 6387 6388 +3 6360 6388 6362 +3 6362 6388 6389 +3 6362 6389 6363 +3 6363 6389 6364 +3 6364 6389 6365 +3 6365 6389 6390 +3 6365 6390 6366 +3 6366 6390 6391 +3 6366 6391 6367 +3 6367 6391 6392 +3 6367 6392 6368 +3 6368 6392 6393 +3 6368 6393 6369 +3 6369 6393 6394 +3 6369 6394 6370 +3 6370 6394 6395 +3 6370 6395 6371 +3 6371 6395 6372 +3 6372 6395 6396 +3 6372 6396 6373 +3 6373 6396 6397 +3 6373 6397 6374 +3 6374 6397 6375 +3 6375 6397 6398 +3 6375 6398 6376 +3 6376 6398 6399 +3 6376 6399 6377 +3 6377 6399 6400 +3 6377 6400 6401 +3 6377 6401 6378 +3 6378 6401 6380 +3 6380 6401 6402 +3 6380 6402 6381 +3 6381 6402 6382 +3 6382 6402 6403 +3 6382 6403 6383 +3 6383 6403 6384 +3 6384 6403 6404 +3 6384 6404 6405 +3 6384 6405 6385 +3 6385 6405 6406 +3 6385 6406 6386 +3 6386 6406 6407 +3 6386 6407 6387 +3 6387 6407 6408 +3 6387 6408 6388 +3 6388 6408 6390 +3 6390 6408 6391 +3 6391 6408 6409 +3 6391 6409 6392 +3 6392 6409 6410 +3 6392 6410 6393 +3 6393 6410 6411 +3 6393 6411 6394 +3 6394 6411 6412 +3 6394 6412 6395 +3 6395 6412 6396 +3 6396 6412 6413 +3 6396 6413 6397 +3 6397 6413 6398 +3 6398 6413 6414 +3 6398 6414 6399 +3 6399 6414 6415 +3 6399 6415 6400 +3 6400 6415 6416 +3 6400 6416 6401 +3 6401 6416 6417 +3 6401 6417 6402 +3 6402 6417 6403 +3 6403 6417 6404 +3 6404 6417 6416 +3 6404 6416 6418 +3 6404 6418 6405 +3 6405 6418 6419 +3 6405 6419 6406 +3 6406 6419 6420 +3 6406 6420 6407 +3 6407 6420 6409 +3 6409 6420 6410 +3 6410 6420 6421 +3 6410 6421 6411 +3 6411 6421 6422 +3 6411 6422 6412 +3 6412 6422 6413 +3 6413 6422 6414 +3 6414 6422 6423 +3 6414 6423 6415 +3 6415 6423 6418 +3 6418 6423 6419 +3 6419 6423 6421 +3 6421 6423 6422 +3 6419 6421 6420 +3 6415 6418 6416 +3 6407 6409 6408 +3 6388 6390 6389 +3 6378 6380 6379 +3 6360 6362 6361 +3 6346 6348 6347 +3 6341 6343 6342 +3 6331 6333 6332 +3 6319 6321 6320 +3 6311 6313 6312 +3 6279 6281 6280 +3 6249 6251 6250 +3 6240 6242 6241 +3 6200 6216 6201 +3 6201 6216 6215 +3 6201 6215 6202 +3 6202 6215 6214 +3 6202 6214 6203 +3 6138 6140 6139 +3 6088 6091 6090 +3 6088 6090 6089 +3 6057 6059 6058 +3 6021 6030 6022 +3 6022 6030 6029 +3 6022 6029 6023 +3 6023 6029 6028 +3 6023 6028 6024 +3 5972 5974 5973 +3 5939 5967 5966 +3 5939 5966 5940 +3 5940 5966 5964 +3 5964 5966 5965 +3 5940 5964 5941 +3 5941 5964 5963 +3 5941 5963 5942 +3 5942 5963 5962 +3 5942 5962 5961 +3 5942 5961 5943 +3 5943 5961 6424 +3 5943 6424 5944 +3 5944 6424 5945 +3 5945 6424 5959 +3 5959 6424 5960 +3 5960 6424 5961 +3 5945 5959 6425 +3 5945 6425 5946 +3 5946 6425 6426 +3 5946 6426 5947 +3 5947 6426 5948 +3 5948 6426 6427 +3 5948 6427 5949 +3 5949 6427 6428 +3 5949 6428 5950 +3 5950 6428 5951 +3 5951 6428 5955 +3 5955 6428 5956 +3 5956 6428 6427 +3 5956 6427 6429 +3 5956 6429 5957 +3 5957 6429 5958 +3 5958 6429 6425 +3 6425 6429 6426 +3 6426 6429 6427 +3 5958 6425 5959 +3 5951 5955 5952 +3 5903 5905 5904 +3 5864 5877 6430 +3 5864 6430 5865 +3 5865 6430 6431 +3 5865 6431 6432 +3 5865 6432 6433 +3 5865 6433 5866 +3 5866 6433 6434 +3 5866 6434 5867 +3 5867 6434 5869 +3 5869 6434 5870 +3 5870 6434 5871 +3 5871 6434 6435 +3 5871 6435 5872 +3 5872 6435 5873 +3 5873 6435 6432 +3 6432 6435 6433 +3 6433 6435 6434 +3 5873 6432 5874 +3 5874 6432 6431 +3 5874 6431 5875 +3 5875 6431 5876 +3 5876 6431 6430 +3 5876 6430 5877 +3 5867 5869 5868 +3 5839 5841 5840 +3 5830 5832 5831 +3 5814 5817 5815 +3 5811 5813 5812 +3 5760 5762 5761 +3 5730 5732 5731 +3 5699 5701 5700 +3 5619 5621 5620 +3 5587 5589 5588 +3 5580 5583 5582 +3 5580 5582 5581 +3 5554 5556 5555 +3 5515 5517 5516 +3 5470 5472 5471 +3 5432 5434 5433 +3 5392 5429 5393 +3 5393 5429 5394 +3 5394 5429 5428 +3 5394 5428 5395 +3 5395 5428 5427 +3 5395 5427 5426 +3 5395 5426 5396 +3 5396 5426 5425 +3 5396 5425 5397 +3 5397 5425 5424 +3 5397 5424 5398 +3 5398 5424 5423 +3 5398 5423 5399 +3 5399 5423 5422 +3 5399 5422 5400 +3 5400 5422 6436 +3 5400 6436 5401 +3 5401 6436 5402 +3 5402 6436 6437 +3 5402 6437 5403 +3 5403 6437 6438 +3 5403 6438 5404 +3 5404 6438 6439 +3 5404 6439 5405 +3 5405 6439 5416 +3 5416 6439 5417 +3 5417 6439 5418 +3 5418 6439 6440 +3 5418 6440 5419 +3 5419 6440 5420 +3 5420 6440 6437 +3 6437 6440 6438 +3 6438 6440 6439 +3 5420 6437 5421 +3 5421 6437 6436 +3 5421 6436 5422 +3 5405 5416 5406 +3 5406 5416 5415 +3 5406 5415 5407 +3 5407 5415 5414 +3 5407 5414 5408 +3 5408 5414 5413 +3 5408 5413 5409 +3 5409 5413 5412 +3 5409 5412 5410 +3 5410 5412 5411 +3 5280 5282 5281 +3 5247 5249 5248 +3 5228 5230 5229 +3 5201 5222 5202 +3 5202 5222 5221 +3 5202 5221 5203 +3 5203 5221 5220 +3 5203 5220 5204 +3 5204 5220 5219 +3 5204 5219 5205 +3 5178 5183 5182 +3 5178 5182 5179 +3 5179 5182 5181 +3 5179 5181 5180 +3 5083 5085 5084 +3 5046 5048 5047 +3 5020 5023 5021 +3 5021 5023 5022 +3 5004 5006 5005 +3 4999 5001 5000 +3 4984 4996 4985 +3 4985 4996 4995 +3 4985 4995 4994 +3 4985 4994 4987 +3 4987 4994 4993 +3 4987 4993 4988 +3 4988 4993 4989 +3 4989 4993 4992 +3 4989 4992 4991 +3 4989 4991 4990 +3 4985 4987 4986 +3 4903 4905 4904 +3 4854 4856 4855 +3 4807 4812 4811 +3 4807 4811 4808 +3 4808 4811 4809 +3 4771 4773 4772 +3 4725 4763 4762 +3 4725 4762 4726 +3 4726 4762 4761 +3 4726 4761 4727 +3 4727 4761 4728 +3 4728 4761 4760 +3 4728 4760 6441 +3 4728 6441 4729 +3 4729 6441 6442 +3 4729 6442 4730 +3 4730 6442 4731 +3 4731 6442 6443 +3 4731 6443 6444 +3 4731 6444 4732 +3 4732 6444 6445 +3 4732 6445 4733 +3 4733 6445 6446 +3 4733 6446 4734 +3 4734 6446 6447 +3 4734 6447 6448 +3 4734 6448 4735 +3 4735 6448 4736 +3 4736 6448 4737 +3 4737 6448 6449 +3 4737 6449 6450 +3 4737 6450 4738 +3 4738 6450 4739 +3 4739 6450 6451 +3 4739 6451 4740 +3 4740 6451 6452 +3 4740 6452 6453 +3 4740 6453 4741 +3 4741 6453 4743 +3 4743 6453 6454 +3 4743 6454 6455 +3 4743 6455 4744 +3 4744 6455 4746 +3 4746 6455 6456 +3 4746 6456 4747 +3 4747 6456 4748 +3 4748 6456 6457 +3 4748 6457 6458 +3 4748 6458 4749 +3 4749 6458 6459 +3 4749 6459 4750 +3 4750 6459 4751 +3 4751 6459 6460 +3 4751 6460 6461 +3 4751 6461 4752 +3 4752 6461 4753 +3 4753 6461 6462 +3 4753 6462 6463 +3 4753 6463 4754 +3 4754 6463 4755 +3 4755 6463 6464 +3 4755 6464 4756 +3 4756 6464 6444 +3 6444 6464 6445 +3 6445 6464 6465 +3 6445 6465 6446 +3 6446 6465 6466 +3 6446 6466 6447 +3 6447 6466 6467 +3 6447 6467 6448 +3 6448 6467 6449 +3 6449 6467 6468 +3 6449 6468 6469 +3 6449 6469 6450 +3 6450 6469 6451 +3 6451 6469 6470 +3 6451 6470 6452 +3 6452 6470 6457 +3 6457 6470 6458 +3 6458 6470 6471 +3 6458 6471 6459 +3 6459 6471 6460 +3 6460 6471 6468 +3 6468 6471 6469 +3 6469 6471 6470 +3 6460 6468 6472 +3 6460 6472 6461 +3 6461 6472 6462 +3 6462 6472 6466 +3 6466 6472 6467 +3 6467 6472 6468 +3 6462 6466 6465 +3 6462 6465 6463 +3 6463 6465 6464 +3 6452 6457 6473 +3 6452 6473 6453 +3 6453 6473 6454 +3 6454 6473 6455 +3 6455 6473 6456 +3 6456 6473 6457 +3 4756 6444 6443 +3 4756 6443 4757 +3 4757 6443 4758 +3 4758 6443 6442 +3 4758 6442 6441 +3 4758 6441 4759 +3 4759 6441 4760 +3 4744 4746 4745 +3 4741 4743 4742 +3 4638 4640 4639 +3 4590 4592 4591 +3 4568 4570 4569 +3 4552 4554 4553 +3 4425 4429 4426 +3 4426 4429 4428 +3 4426 4428 4427 +3 4396 4398 4397 +3 4348 4350 4349 +3 4260 4262 4261 +3 4198 4200 4199 +3 4192 4194 4193 +3 4081 4083 4082 +3 4063 4065 4064 +3 3982 3984 3983 +3 3977 3979 3978 +3 3966 3968 3967 +3 3951 3953 3952 +3 3860 3864 3862 +3 3860 3862 3861 +3 3858 3860 3859 +3 3856 3858 3857 +3 3845 3847 3846 +3 3840 3842 3841 +3 3800 3802 3801 +3 3732 3734 3733 +3 3715 3717 3716 +3 3691 3693 3692 +3 3679 3681 3680 +3 3649 3651 3650 +3 3647 3649 3648 +3 3609 3611 3610 +3 3605 3607 3606 +3 3601 3603 3602 +3 3539 3541 3540 +3 3505 3507 3506 +3 3445 3447 3446 +3 3443 3445 3444 +3 3325 3327 3326 +3 3238 3240 3239 +3 3089 3091 3090 +3 3045 3047 3046 +3 2862 2864 2863 +3 2827 2829 2828 +3 2772 2774 2773 +3 2768 2770 2769 +3 2761 2763 2762 +3 2728 2730 2729 +3 2654 2656 2655 +3 2594 2596 2595 +3 2551 2554 2553 +3 2551 2553 2552 +3 2549 2551 2550 +3 2537 2540 2538 +3 2453 2455 2454 +3 2416 2418 2417 +3 2377 2379 2378 +3 2362 2364 2363 +3 2324 2326 2325 +3 2318 2320 2319 +3 2296 2299 2297 +3 2282 2284 2283 +3 2222 2224 2223 +3 2193 2195 2194 +3 2184 2186 2185 +3 2145 2147 2146 +3 2094 2096 2095 +3 1966 1975 1967 +3 1967 1975 1974 +3 1967 1974 6474 +3 1967 6474 1970 +3 1970 6474 1971 +3 1971 6474 1973 +3 1973 6474 1974 +3 1971 1973 1972 +3 1967 1970 1968 +3 1968 1970 1969 +3 1942 1944 1943 +3 1889 1891 1890 +3 1797 1799 1798 +3 1774 1776 1775 +3 1720 1722 1721 +3 1675 1677 1676 +3 1626 1628 1627 +3 1606 1608 1607 +3 1601 1603 1602 +3 1544 1546 1545 +3 1519 1521 1520 +3 1403 1405 1404 +3 1367 1369 1368 +3 1292 1294 1293 +3 1286 1288 1287 +3 1264 1266 1265 +3 1258 1260 1259 +3 1252 1254 1253 +3 1125 1127 1126 +3 1104 1106 1105 +3 996 998 997 +3 984 986 985 +3 971 973 972 +3 883 885 884 +3 853 855 854 +3 666 668 667 +3 652 654 653 +3 578 580 579 +3 560 562 561 +3 472 474 473 +3 393 395 394 +3 203 205 204 +3 72 74 73 + diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/liver.inr.gz b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/liver.inr.gz new file mode 100644 index 00000000000..1b711130c11 Binary files /dev/null and b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/liver.inr.gz differ diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/sphere.mesh b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/sphere.mesh new file mode 100644 index 00000000000..53df1d838df --- /dev/null +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/data/sphere.mesh @@ -0,0 +1,5046 @@ +MeshVersionFormatted 1 +Dimension 3 +Vertices +757 +-0.00017958008027845786 -0.29158438056560654 -0.3988195263311396 2 +0.33746273152274708 -0.35726277852053662 0.076905488424117915 2 +0.10190320305717479 -0.44537090218944148 0.19023485796529088 2 +-0.22291708884561526 0.24110089782764016 0.3698544290906931 2 +-0.015169005603949674 -0.4920502072817815 -0.053433473242467985 2 +-0.26605755950148613 0.34871795230918606 0.23040729539756138 2 +-0.030951975074221216 0.48125453898639275 -0.1043111632434163 2 +0.059997821745160003 -0.35306497158682226 0.34146470435235443 2 +-0.47842728941771906 -0.11383138831461681 -0.085210684090395519 2 +0.36358525568361316 0.21273180556147436 0.25617337548594726 2 +0.36725408516443148 0.13052845625068488 -0.30523087317317177 2 +-0.22325756200134647 0.14972356892330102 -0.41730303115077449 2 +-0.33402647635257132 -0.1744766427005035 0.31869283771003265 2 +0.093487696703693335 0.02119707361997069 0.48380505033599003 2 +-0.41062731925574825 0.25760949214328016 -0.10699221840973314 2 +0.49505762706510581 -0.028269043401154839 0.005588588618755724 2 +0.34186587730419771 -0.23615312879880351 -0.27171510437341651 2 +0.30887568698642764 0.38011138416438828 -0.055425037144192238 2 +0.081954497410480692 0.43221656346370257 0.23174479064232939 2 +0.080762763732273479 0.30645943468988468 -0.37895869522206083 2 +0.35704674384671609 -0.12142305171818887 0.32188881275214021 2 +-0.31466635484011551 -0.3761124021911264 0.049178927462616873 2 +-0.29949621897948708 -0.16366746550400973 -0.3559360399848972 2 +0.12477546186735991 -0.0009654011072460668 -0.48017447662099233 2 +-0.45489993093049341 0.089486639415368968 0.16934989437353176 2 +-0.21949385855586256 -0.38887603838234641 -0.21249580489705544 2 +-0.17554447746608282 -0.008967119829543662 0.46417052578394857 2 +-0.21596925005035716 0.36305807543520158 -0.25659442404768845 2 +0.21818581779788443 -0.42407361285115364 -0.14318551682223507 2 +0.029500307224903276 0.26282332358153948 0.4193318651156448 2 +-0.41140983700838274 0.055777199004947785 -0.26777152182208963 2 +-0.18318546651083045 -0.37360295143388589 0.26762502445563596 2 +-0.25403346126706278 0.42468917850563082 -0.0072330644157137559 2 +-0.11305983472243486 -0.060902778843192146 -0.47777514755888634 2 +0.44919653003104693 0.20594839867448833 0.031940926454485326 2 +-0.11066913845628298 -0.2262153965428356 0.42803075198822749 2 +-0.43545677914012793 -0.19909033271144083 0.11894257742861167 2 +0.1695993626242438 -0.17935343970708448 0.42607203736875154 2 +0.44458432799815872 -0.051677795976616092 -0.20786699465654979 2 +0.43234224599164228 -0.22486127018578264 -0.071274965547427127 2 +0.26639842732560048 0.32085642363039735 -0.26255407845880468 2 +0.26294920120495924 -0.31175710164257442 0.27584799753054995 2 +0.28532208912927193 0.068229649454114999 0.39636186284206176 2 +-0.34227612327536827 0.063789233931985129 0.35025252357992426 2 +0.13671557462523365 0.47582166858216723 0.029136645926506381 2 +0.30614427994747062 -0.058158535566455949 -0.38363836413890928 2 +0.27804667170978731 0.37888988049526307 0.15488894457208352 2 +-0.079983560189783809 0.47755425170528942 0.10219500715280494 2 +0.44814787431466785 0.027095935407346859 0.20340275687843323 2 +0.43643009646155334 -0.18171607702779971 0.13679244425007148 2 +-0.021047213889092184 0.14820686384301263 -0.46961700869255452 2 +0.03619253272475921 -0.42721740050619039 -0.24476932875897767 2 +-0.37955898467105353 -0.29024182965842682 -0.12706737614326807 2 +-0.40060756364504235 0.27265441281304659 0.096625520813105659 2 +-0.4854705637493073 0.083104466088603279 -0.032289989270033626 2 +0.18733664061540145 -0.21944745392631665 -0.39902475350724975 2 +0.20220985983165063 0.30550901002185649 0.32856225983545018 2 +-0.14260311796152336 -0.46277003604768613 0.095417085459266915 2 +-0.088536490739146129 0.37455894762711039 0.3096149430548682 2 +0.2094668074720448 0.16368187491205238 -0.41638280720002807 2 +0.15113456598618952 0.44235088220955404 -0.16250801345043558 2 +0.40486835137050703 0.24289072279009177 -0.15252766171211285 2 +-0.036177835783256007 0.4078011138562273 -0.27535546612298556 2 +-0.34296523108150667 0.2286131340909362 -0.27799669728182952 2 +-0.10719098758575357 0.28623761047718843 -0.38960924485531329 2 +0.19147451046242708 -0.45501523442130337 0.033189878304607082 2 +-0.17451656340254462 -0.2922859658076577 -0.35675496184109445 2 +-0.054032309386595652 0.11876440286815396 0.47910599326324754 2 +-0.36854633000359827 0.21078255760783893 0.26015365494222453 2 +-0.32895930270343821 -0.30492173388755761 0.20577000320862165 2 +0.47233660066064437 0.089962065069455227 -0.11598350628513786 2 +0.18279236780855426 -0.35559836146202833 -0.29576156364432438 2 +-0.30653064961140419 0.0030393921083115001 -0.39158959558808887 2 +-0.43175645289087117 -0.06856641898074925 0.2281241768759929 2 +-0.41664292297822403 -0.1125349496504639 -0.24369438759577611 2 +0.034215630841900949 -0.14316065841453818 -0.47150453356804722 2 +0.01741918812908615 -0.12866441808574386 0.47673458515849332 2 +-0.4855430365961404 -0.047209142857281922 0.071742419244237965 2 +-0.17664526043497175 -0.45607460135991063 -0.066898790386732021 2 +0.15896257150373266 0.16406638468588108 0.43749429982969956 2 +0.3413309978648793 -0.35180180232942027 -0.079355360895298654 2 +-0.050993390661918936 -0.44023303185605778 0.21930692567953947 2 +-0.1744764647710777 0.44331712473052226 -0.13489506049135713 2 +-0.3060405881569907 0.36310552047656275 -0.13515313949756735 2 +-0.31223156562504195 -0.28062263090874601 -0.26163375513939824 2 +-0.22970278795957924 -0.13870241858074583 0.41755645512950001 2 +0.0024393018078136446 -0.48492697824363451 0.091171312301450952 2 +-0.10287286315024358 -0.19966181605110775 -0.44059088195446339 2 +-0.096592995767797049 -0.39151818968827484 -0.28742421301965626 2 +-0.22843344125151183 -0.26611354901572115 0.35137427683212796 2 +0.38322648327275688 0.28370503187708462 0.13296338549842965 2 +0.23663146930518839 -0.40226297814535272 0.16806272118371773 2 +0.26057820529124903 -0.070791204074534875 0.41330127504314429 2 +-0.21136233974279531 0.43042319754635217 0.12802710612079471 2 +-0.47476981336899093 0.0097871739157582519 -0.15138890370937802 2 +-0.23333367583594972 0.11222027080473665 0.42394265074000254 2 +-0.44085548332912106 -0.22979962226592909 -0.017147875405908862 2 +-0.078239229460793286 -0.33884832180985031 0.35255427151172458 2 +-0.083108225197500205 -0.45674438476313062 -0.16738183558114764 2 +-0.29408537723534212 -0.38852555688047163 -0.085435314425446315 2 +0.48133564768818482 0.083381485363606622 0.083302443947374058 2 +0.14428498543762064 0.37758810641209212 -0.28194428393217741 2 +0.3671246210538302 -0.23121760625314156 0.24258442560276988 2 +0.021926538865993082 -0.25448244851283763 0.42640784569274537 2 +-0.44247951547367903 0.14036749361034515 -0.16673429414803598 2 +-0.23376468875393869 0.26504877262009335 -0.34821691711422748 2 +-0.35704052636532213 0.33794495130243385 -0.012949825968558894 2 +0.37906928942131157 0.011439036263529231 0.31801237398069648 2 +0.27641139205562737 0.19692195103917809 0.3576249551891042 2 +0.092299584758946646 -0.46848280891657568 -0.13014498287023957 2 +-0.10077498621597741 0.23174182723272241 0.42421701501864795 2 +-0.0066485172726347321 0.017976077671047648 -0.49685469073126953 2 +-0.12973470064512721 0.071108805185515739 -0.47051085686132765 2 +-0.045859962509014612 -0.013040570986989755 0.49188107961940719 2 +0.079555876774644596 0.35323065472379733 0.33735822117185454 2 +0.30027051670008725 -0.34103946911028737 -0.20394431470188995 2 +-0.24140984558607992 -0.40111697443685596 0.1541797787531235 2 +-0.12786542956347918 0.47578064354031468 -0.018312676486796277 2 +-0.33073847277519897 0.12310202367120916 -0.35116285886815279 2 +0.19933706144873503 -0.098980558450449771 -0.44274269538406724 2 +0.47513113190649536 -0.10584286330488513 -0.095171214369974694 2 +-0.46194239384718461 0.16413779819561203 0.064816441432120703 2 +0.29292266379811227 0.069478725123429091 -0.39043692971152011 2 +0.4200208818716501 -0.17627342566505305 -0.18940858505931396 2 +0.27141459182530936 -0.21104712412748511 0.35480982777696679 2 +0.16960402134421976 -0.28958411644868443 0.36076483378978291 2 +0.38912037422664431 0.0043887969041679778 -0.3087738216613114 2 +0.011497871488576249 0.49686191298521987 0.015154654283299826 2 +-0.31912896462267604 -0.059707423797282617 0.37238981914980496 2 +-0.22834353192806978 -0.089488394878762173 -0.431392095895892 2 +0.10244600457475248 0.12264851193906079 -0.46898522519895247 2 +-0.31732877963655171 0.36699254715931046 0.1030480292676519 2 +0.43307512121460301 0.17115163575065317 0.15968727323737264 2 +0.20016935386821505 0.27437903049128654 -0.35830063594519002 2 +-0.041789517959002119 0.44443177473295281 0.21678051623622563 2 +0.17151835385992589 0.44389799847661182 0.14506941487236816 2 +0.41566132168029968 -0.26488526360467146 0.045899390071247409 2 +0.37932345247717253 -0.11894828342860483 -0.29251072257759048 2 +0.43222030269315437 -0.094575414878469932 0.22599275674135835 2 +0.46904216524592113 -0.14992640959363651 0.021012576355346015 2 +0.3952129455499247 0.29237028550029098 -0.039039028322742399 2 +0.24880421219055254 0.42474901485888011 0.043448685018998956 2 +0.16091128374421571 -0.38054996657036488 0.27661235401976281 2 +-0.11188857008982331 -0.11203266446059854 0.46872664816830067 2 +0.47601719442122925 -0.055826239046367056 0.12100320850727279 2 +0.036473226508413531 0.48000758276333438 0.13140181756020897 2 +0.2575687962417475 0.38744266403728805 -0.1633963398793602 2 +0.2924747065742927 0.308550488374844 0.25036594764074926 2 +0.28955232447365836 -0.17346831825824974 -0.35852620068112112 2 +0.35057344068321522 0.23769120150981893 -0.25765117551066152 2 +0.038207711976355391 0.45161905671520203 -0.19507142457444865 2 +0.071294318064950041 -0.35796429223310122 -0.33311113633367473 2 +0.43261149596338622 0.074600055933304682 -0.22536433518471577 2 +0.19968372557432726 0.38413167365058842 0.24178225128604081 2 +0.082402113370849905 0.48067521037188088 -0.076219372780585271 2 +-0.42710351472239827 -0.18888456582417157 -0.15710660253181968 2 +0.082794585915315716 -0.48573281898067155 0.0078763594179726056 2 +0.34003460150602732 0.35462961771583879 0.052771194783181721 2 +-0.39194251064962948 -0.29224682205434288 0.066620318060341605 2 +0.21146250325321714 0.44101239252657731 -0.064342207106371507 2 +-0.41615443950919362 0.039237897917599171 0.26542474410989447 2 +-0.38719949065611015 -0.20757979990652833 0.22262834471167253 2 +-0.16531972398455036 0.40347241431094483 0.22951939058533671 2 +0.15690430646234238 -0.071378304166784812 0.46162512212067885 2 +0.35564617300046225 0.12242924091988611 0.32468958401881665 2 +-0.0060320878049794618 0.25341782719601502 -0.42951650890993065 2 +0.32833843158390147 -0.31993134286566782 0.18357902655304531 2 +0.058718163718817197 0.12869283620093092 0.47645626595297297 2 +0.28928152578976907 0.20184091716765834 -0.34578827410991531 2 +0.37948009693020479 -0.27624437622995857 -0.15659643437506138 2 +-0.30776469856566913 0.17092044148401719 0.34618439766473219 2 +-0.19171807981037964 0.33160932280601768 0.31212856210359446 2 +0.25245356334943464 -0.27407538282341692 -0.32669723598210432 2 +-0.12065350122228868 0.18725095194360497 -0.43877633407113148 2 +-0.37745787185773871 -0.0382140383301856 -0.31653800141977029 2 +0.19806397299681111 0.02999004881521776 0.45116075228027064 2 +-0.20568413631753474 -0.19724937765481759 -0.40208796797455137 2 +-0.22649260170964641 -0.43820598329127824 0.029158470237451224 2 +0.26096043287752402 -0.41666063080901283 -0.042482612613948825 2 +-0.42206584927238949 0.1930123558717774 0.16731138331459694 2 +-0.34913096406689792 0.29154108584899463 0.19029074976753513 2 +0.083482542589013012 -0.22935515302358866 -0.42817910407127691 2 +0.14066296993008021 -0.4182454383267602 -0.21834552190506698 2 +-0.019478350744578408 0.34101305701760021 -0.3585398694486942 2 +-0.43280484789178914 0.24358274269801217 -0.0022532636193535009 2 +-0.12477135431295031 0.36024492171819705 -0.31355846705091628 2 +0.45040719996150702 0.1861340898361179 -0.073577552235943366 2 +0.1346615486145373 0.26100651447537548 0.39883943153366519 2 +0.11972325147581214 0.22046309413202625 -0.42926431989465519 2 +0.22358187991859324 0.0050357451443411479 -0.43997309187748174 2 +-0.49347606480783912 -0.023059296478814308 -0.031645682797479362 2 +-0.48381106627964754 0.059240694033084892 0.071452086281896962 2 +-0.084385524716018762 0.45031338330530002 -0.19076516385437436 2 +0.3417736296918108 0.32719202506290757 -0.1410758629516356 2 +-0.36843273055519271 -0.3299393961900482 -0.029516851245006446 2 +-0.30678393175041857 0.31567131428080369 -0.22980892622700838 2 +-0.21503122188279383 0.01476232120403273 -0.44334634529176886 2 +-0.47362727421985362 -0.13617417912168595 0.017268332209693128 2 +-0.28942563338168964 0.26966264140311347 0.29454935861001885 2 +-0.10357320476016603 -0.48541613363165004 0.0014314713936747154 2 +-0.30619487146561236 -0.34275586595504343 -0.17858497629969106 2 +-0.26448962933874209 0.014398478534287336 0.4181714868137163 2 +-0.35906984920527363 -0.1906562517760223 -0.27691736545448375 2 +0.037568593306109448 -0.41524091088866422 0.26360868693250672 2 +-0.052051300777545648 0.3093965001589879 0.37924966574493602 2 +0.48113849982037626 0.107746899060504 -0.015838893941665894 2 +0.41638357000568371 0.11530672961586626 0.24322629330302123 2 +-0.45690946732483273 0.17272070723147723 -0.071277948485328785 2 +-0.1477355042464335 -0.42971918080443861 0.19106483854020784 2 +0.16751071157708736 -0.45977476800289391 -0.064198711623625643 2 +0.47961429128881028 -0.0097851515742015203 -0.12372263022700566 2 +-0.14598560906461117 0.085639494944031613 0.46255018063316672 2 +-0.47143984229194141 -0.0076156197959385248 0.1611981163195744 2 +0.0053565411416260453 0.39866517583218986 0.2905565413733302 2 +0.40942048554799781 0.16977242091374942 -0.2179739168280094 2 +-0.083206338889110512 -0.3281379252895808 -0.36122561072450982 2 +0.11969783099324528 -0.47225074378320681 0.097672505668078863 2 +0.14292055894772571 -0.29980614857725663 -0.36544303656835508 2 +-0.39655583689562229 0.15108355572292786 -0.25229011591254025 2 +-0.26185294212339283 -0.25222346318848121 -0.34014502099352856 2 +-0.45979899142386105 -0.10795554987359728 0.14349074920444599 2 +-0.30365720592299195 -0.26233229751469905 0.28962558083675682 2 +-0.23195364931286058 -0.32859076606665827 -0.28749347484194809 2 +0.051224430272876202 0.38202009786492297 -0.30719009190783275 2 +-0.39207220767833917 0.22819369686113644 -0.19600924853509294 2 +-0.37773388282905052 -0.09086954027691431 0.30368729032030672 2 +0.39467792270053165 -0.26759477350524591 0.13904345645079874 2 +-0.41191482597905649 0.12980389870405051 0.2420918813103799 2 +0.26047083115505809 -0.41041354526291379 0.077956591385467233 2 +0.11177459390251984 -0.092412636589793901 -0.47242915830433518 2 +-0.43591522475224886 -0.023732045318672498 -0.22800657623942089 2 +-0.022261713829573419 -0.072318172300016692 -0.48789704836361258 2 +0.0081395223289316282 -0.46592641407744073 -0.1665013453294038 2 +0.081093397331894718 -0.18798589403991434 0.44810321338320824 2 +-0.37558558819514476 -0.24574358317084224 -0.20636842014191564 2 +-0.096338626192954552 -0.39466883610146292 0.28334605052085349 2 +-0.17708873486102419 0.18311451377670129 0.42210576825870783 2 +-0.013860117340804824 -0.21508084368989178 -0.44509421826479573 2 +0.18239848147210697 0.084697118181986275 -0.45087205027424987 2 +-0.17078960076831395 -0.43897569675787684 -0.15534122833161501 2 +-0.18763982805866186 0.45459829368467236 0.045035969439469983 2 +-0.016291632660891162 -0.37370752214727754 -0.3228929421921421 2 +-0.45558439255106498 -0.086590584353522265 -0.16737299007582934 2 +-0.022718764127191621 0.19781133358246469 0.45152398259708748 2 +0.31848408868533651 -0.01256202942642962 0.378759664305091 2 +-0.13927052507890036 0.29328859855178979 0.37285965701252483 2 +-0.3884619298661216 -0.26700045674280587 0.1517506844967999 2 +0.01152504496571128 0.054784659426273849 0.49077140770710381 2 +0.39344564527600812 -0.29567500239123962 -0.034390428629941142 2 +-0.26081803292429601 -0.33226122531683966 0.25565533811438645 2 +0.22251341765848939 -0.38054017239093424 -0.22041067021106323 2 +-0.31713717236303129 -0.35857571029063873 0.1361112009692359 2 +-0.23659629671011739 0.39734206321507148 -0.17778362562216143 2 +-0.14584093702298123 -0.28664018419369452 0.37434403279067496 2 +0.40321686626675135 0.27922069737849553 0.047493421869457403 2 +-0.14134661646917412 0.40629626664699892 -0.24081507758184034 2 +0.035859571147540806 -0.044279065426086374 0.49067862158384645 2 +-0.32037001354706696 -0.079773173240901274 -0.36780943399441413 2 +-0.29237358412217507 0.20085567941458216 -0.34319618038352179 2 +-0.24601576240771028 0.41634162313809264 -0.093434007278415776 2 +0.23816018360973706 0.13983707246510318 0.4109407503558189 2 +-0.068273343569342407 -0.47092136149196839 0.13980209463711818 2 +0.018801598797916399 -0.46299859053497849 0.17334896426697666 2 +-0.03416076831939252 -0.19390981014461106 0.45259077825678906 2 +-0.1547331916875945 -0.13107618004040195 -0.44933330796862875 2 +-0.094438908877836236 -0.47640015231839816 -0.084018910988347975 2 +-0.35724359501005171 0.29868741054458459 -0.16074154128435605 2 +-0.13364638908971294 0.44598349918207303 0.16167096559856231 2 +-0.27408682777806986 0.082143784286755478 -0.40134550473258368 2 +0.087697484975903461 0.42291710705325825 -0.24992582746355946 2 +0.21454829343853296 0.38156282591278823 -0.23560767118701434 2 +0.12550167434991091 -0.24619716991715462 0.41321139943412383 2 +-0.15104938876688062 0.0014584089104602367 -0.47597596324174679 2 +0.33514719842099605 -0.11676342614616753 -0.35080058024630445 2 +0.34140929106701184 -0.17432465269026692 -0.31177814142542615 2 +-0.47990278250569951 -0.11339875697248844 0.079887112571497526 2 +-0.30962512834722744 0.38356950160675773 -0.058101849310527684 2 +0.03554689615386189 0.48034552633383665 -0.12991041112850576 2 +-0.02709267922225124 0.36247438890288292 0.34097725028864367 2 +0.20848291996620624 -0.11757687601054088 0.43634411921676908 2 +-0.42882400034908141 -0.14350399053844937 0.20590057102758208 2 +-0.090560564339627767 0.13105873777682209 -0.47143063834755128 2 +-0.11090040697797957 0.47505096341799569 -0.097021220812907455 2 +-0.35545535296641972 0.33196185443364101 -0.087854040926861526 2 +0.47105024097298787 -0.12774577332923742 0.094515479810394459 2 +-0.15460594550149334 0.13044361732060336 -0.45085209386903086 2 +-0.074848554765210656 -0.13177409721165256 -0.47382282861169434 2 +0.15101292400278854 -0.0080031878833149023 0.47521043462103896 2 +-0.35736564422440908 -0.12769543239265371 -0.3207034667651314 2 +0.094114109904528578 -0.11570906014409471 0.47388311860317556 2 +0.28535641736280803 0.0030412638087362431 -0.40863291386221512 2 +-0.039990091122710111 -0.48199468786047772 -0.12270610879185923 2 +-0.18853463770583434 -0.43952710870582812 0.1385927951163417 2 +0.13625350025545474 -0.25384962961629476 -0.40660051121768037 2 +0.076403828318303169 -0.29026739247135586 -0.39079336597955455 2 +0.13728432455485556 -0.19414197011251358 -0.43056334484244385 2 +0.42298765123118853 -0.11727360742662864 -0.23329534385311404 2 +0.30420797260019533 0.37562352479984207 -0.11993652420543416 2 +-0.3502334626941026 -0.25676834588920638 0.24429292962306959 2 +0.38807058492308766 -0.17506321357061666 -0.2516437757750114 2 +-0.4334710607829404 0.10192783216805726 -0.22248770476455654 2 +0.40914491750034232 -0.057003079574881294 -0.27052242425340334 2 +0.0091819319799406746 -0.49666255021107453 0.01737846001306019 2 +3.014162351272498e-05 -0.00022412216118153361 0.00023687663445681739 1 +0.052801989430259211 0.23970717573936154 0.056895539019464536 1 +0.14450234786464269 -0.19474901447604212 -0.069052969614780621 1 +-0.17916427332813784 0.025715782501462409 -0.17491934196076869 1 +-0.094315748745573691 -0.1049186313862833 0.20842808898403417 1 +0.2028455816993574 -0.032721226494168885 0.14467222002492844 1 +-0.11961709481342205 -0.20932670315450266 -0.068932502351132449 1 +0.18154163452546179 0.031730055037039656 -0.16932814806384502 1 +-0.19142561708366748 0.1138767024163574 0.11305167457083386 1 +-0.001473790868043362 0.18871183238848396 -0.17245421855316698 1 +0.028830209928174921 0.094933596521697028 0.24343604928426632 1 +0.00445678131695941 -0.10545364547208048 -0.23862990061537631 1 +0.083937504337175992 -0.22041685542625192 0.14318288917914965 1 +-0.26084484777752204 -0.084924861365920409 0.046567197308790775 1 +0.24072617665983023 0.13728163083605013 0.012659213366990968 1 +-0.18328211734473712 0.20703285866735111 -0.07286245033855264 1 +0.29050347659524578 -0.063745480233620366 -0.031980568377714735 1 +0.081285632368155863 -0.085380926800716406 0.28373794642767847 1 +-0.096583387241615679 -0.26654065258928961 0.10998932892936106 1 +-0.04719957583257596 0.062530421018024848 -0.30281668858126498 1 +0.19645413834244752 0.15931720652006937 0.19260664679725728 1 +-0.076079067615941798 0.23616026396562506 0.18857037620037154 1 +-0.30229839132862157 0.069289308586842888 -0.045123575222269438 1 +0.1746994390040173 0.22574465843704122 -0.13452130698459194 1 +0.018790113036324302 -0.31664520595790835 -0.020976598390514467 1 +-0.14425146477183853 0.054707135099594573 0.27736998815826319 1 +-0.17029299303790246 -0.14528482679334123 -0.22878116705187657 1 +0.24566480433886223 -0.19641479873476103 0.075925501417087884 1 +0.17748833700630379 -0.13286378257956177 -0.22983460624370367 1 +-0.047773565441192503 0.31415600317739373 -0.062623118520660589 1 +-0.0068340816863229417 -0.26949598878753778 -0.18529913609387003 1 +-0.29131727265500779 -0.091219267782148672 -0.12125383672688822 1 +0.10750821452013629 0.1282916389194351 -0.2864660752012067 1 +-0.27344320558630231 -0.014901787152823198 0.19765697923321177 1 +-0.15459676992893528 0.17817758116580687 -0.23261792930941644 1 +-0.18299147861248341 0.2794439735685183 0.073269565509758133 1 +-0.22576517276420693 -0.18779410440076966 0.16560020829646344 1 +0.0087367713580315202 -0.16014075378076173 0.014482767898634712 1 +0.02166937950933422 0.030821587360851471 -0.15569200149497292 1 +0.10416721025013662 0.090115232451198596 0.081606705957980669 1 +-0.067724231557979284 0.14324655796362867 0.016712147417071811 1 +-0.0068808023839113941 -0.22059458984402644 0.27372687504858612 1 +0.11043443124615403 -0.025263791341274933 -0.32449021017160729 1 +-0.15634747002974614 0.014235725496882193 -0.018800570528364813 1 +0.33273455404191438 0.032392020270790335 0.08489051290760373 1 +0.077557837652741934 0.26039794514439762 0.21064194760877653 1 +-0.24932450725818317 -0.23792265115648828 0.014355512766715366 1 +0.16779116883852999 0.044701666713052791 0.29548740805949181 1 +0.31575259435477893 0.09399522491339185 -0.11786154416048142 1 +0.051109009578189674 -0.066547638567894724 0.13185951628960896 1 +0.19280950303903735 0.28465046570209951 0.0077455433522710115 1 +0.20543592423973955 -0.16649638529616964 0.2222244118011279 1 +0.14147121840903676 -0.060593393920313841 0.0063129913528785359 1 +-0.066668144025147216 0.030475814304770879 0.1427894834947423 1 +-0.053342746902161536 -0.047652654695166191 0.34386322870563746 1 +0.08280059069911061 0.13129665268237911 -0.061652604676741274 1 +-0.080890803084922636 -0.071920152617245853 -0.1163127959139466 1 +0.15321807762093834 -0.31048652461961324 0.04527565972171714 1 +0.27730652027962055 -0.17358936258398658 -0.12934685199851487 1 +-0.29575415255273296 0.19811115028253887 0.02544424014218119 1 +-0.11594462289123944 -0.1003298772972976 0.063416305732725525 1 +-0.16453093569200922 -0.02467014850318244 -0.31165181888248822 1 +-0.32992845318152686 0.073441695008099939 0.097303171396798366 1 +-0.050590078854345299 0.33650480258096455 0.087263062342506803 1 +-0.27909076718019299 0.14205013356346963 -0.1681282101913823 1 +0.093643905047351469 0.33473719934111179 -0.084850635899742316 1 +0.1365239106386455 -0.26572413696193398 -0.19369272959981307 1 +0.30579586459250829 -0.039832176647313075 -0.17256885252520576 1 +-0.12107511502677282 -0.33847608452377875 -0.0099517616438331291 1 +0.28807479052278323 0.053966727407861501 0.21781336000382234 1 +-0.24325839346969885 -0.22340575839088872 -0.13616182431928803 1 +-0.19605855379734358 0.18006794204638638 0.2378006126850809 1 +0.24262572115639683 0.14439754208748706 -0.22653499049722928 1 +-0.21374383143570785 -0.1099605652536701 0.28141428517341038 1 +0.055838347132006666 -0.09165768297793575 -0.098981075271938807 1 +0.32536668354276843 -0.097853682623521454 0.1334779603578797 1 +-0.069607517133508434 -0.20161380987089875 -0.30588629293096281 1 +-0.037992256595614907 0.20068997990658471 -0.30550684354217372 1 +-0.069883019615067571 0.16656432158083861 0.30707360056768007 1 +0.020221814841485362 -0.33876987985287055 0.11463516103966132 1 +0.095112459804220423 0.25670232489504585 -0.24126307771534589 1 +-0.090351576153363491 0.29057069730420337 -0.1899468271782144 1 +-0.085771491224872862 0.10131329866839714 -0.11133497642330889 1 +-0.1356134596047664 -0.24931697767483774 0.24502582019785868 1 +-0.14014341150326934 -0.28056116803993503 -0.20137551252303879 1 +-0.043055607684475763 -0.060656661150435005 -0.35585010276686074 1 +-0.27898679140235272 0.035739763062450192 -0.26373725595802683 1 +0.12196930650670011 0.16964660742462959 0.30264007452684843 1 +0.081466052102798017 -0.19851378729903479 -0.29451536740227535 1 +0.18864200228449263 0.28147737267882583 0.14062997857195028 1 +0.23548246919943949 -0.0029127207663287996 -0.28566493689687922 1 +0.051510065226324356 0.032472449480436719 0.3583650570682278 1 +0.084047659205297276 0.36619489627271401 0.082345773170841685 1 +0.22057270245230437 -0.29979009662294809 -0.096890920350708759 1 +0.30651207484667292 0.17635977393943134 0.12082800154917915 1 +0.2935085375499632 0.21769740288806988 -0.077671326675799554 1 +-0.36431048669079091 -0.04414505302889548 -0.022970448508646157 1 +0.2490734023486208 -0.055997172011154006 0.27682372524595567 1 +-0.0027720154490750992 0.14722434378837171 0.12896792856686445 1 +0.38427923619976989 0.024627473125503771 -0.033608726736941097 1 +0.19618479811608763 -0.28022204855520977 0.16273309474366399 1 +-0.29217712036934773 0.18281679758375746 0.1528123312776547 1 +0.18941981895892393 -0.082062422506531035 -0.11068868674041099 1 +-0.34203047890473742 0.019961039355569699 -0.15491427763962118 1 +-0.17130406611996379 0.32870589590726007 -0.042170692256760595 1 +-0.1859801112964658 -0.10335399169545155 -0.053130397606924826 1 +0.20925354190654583 0.031039983537490969 -0.046713072711011647 1 +0.34316257935580979 -0.17305233972043019 0.00033628785594420896 1 +0.10585438212623531 -0.27068000967665412 0.25522470003309389 1 +0.10570601475333902 -0.34728880042335131 -0.10475567263392008 1 +-0.10737487496542224 -0.15785160692915554 0.32429126121625373 1 +-0.28942329711923143 0.098899368336733351 0.24387548669130543 1 +-0.18600538017573232 -0.0097165410864480765 0.11024835660358068 1 +-0.33700909228305376 -0.16440212684772157 -0.032615861308760478 1 +-0.35754796563725394 -0.045926152248843527 0.11272604512623377 1 +0.040439522622158219 0.052995831021695201 -0.38868361297404813 1 +-0.1627994660789196 0.097276470891627137 -0.3244017063735235 1 +-0.27503765461948215 -0.084196368023144799 -0.24192559305495548 1 +-0.026027040635067243 -0.16944540002448633 0.13087314993656254 1 +-0.20907905584250255 0.26967368522422452 -0.1738677949369267 1 +-0.054707311001315637 -0.35288645455937306 -0.11083771311146649 1 +-0.0079051269417109576 -0.019815464014738576 0.23551126727341776 1 +0.022414870924025512 0.33271787709186629 -0.1821910464244727 1 +0.35850841308377668 0.1399296416829249 -0.011329108742475343 1 +-0.32012272906753891 -0.17921166014651391 0.091689120891368547 1 +-0.081159267539283056 -0.02258826290625289 -0.22555567818167405 1 +0.10708411622202758 0.017795180136314259 0.19583537139940682 1 +-0.19308381251986259 -0.32740631883353943 -0.10485224870297609 1 +-0.069656435928420329 0.066957246422228889 0.37276360757684202 1 +0.15016047438977465 -0.13052573208833282 0.1021457130615888 1 +-0.21237097053697102 -0.29348949150614301 0.1127809144233278 1 +-0.042776646964407375 -0.31581483089999418 0.21259701644815598 1 +0.28174334907322024 -0.28288909613825791 0.0032659077871620146 1 +0.10038569069270485 -0.048618048372519103 -0.19958184701886453 1 +0.029291712945843311 -0.20652559834069623 -0.092156251936651362 1 +0.22805496052133986 0.077988805449757809 0.11357146320614143 1 +-0.29822637932689999 0.22674577075059674 -0.088682957886754801 1 +0.38538230783394484 -0.06920137199531573 0.036820948221615454 1 +0.012587257164439321 -0.14285071010234318 0.3586003143792359 1 +-0.069234065681228973 -0.17125441163822883 -0.17647764920933623 1 +0.15789088244738314 0.19268689578488629 0.072338732863710217 1 +-0.20601399684411509 0.11784763250974534 -0.0020719494738760252 1 +-0.01215928598363232 0.33268402163839006 0.19670344264770664 1 +0.096144947117105473 0.016204821808735136 -0.067923735806303481 1 +-0.0054554378407597054 0.20634708000879021 -0.05796204423258542 1 +0.12039083155079047 0.13017578933584079 -0.17129088773129522 1 +0.012747854871683756 0.24767855708034087 0.3057576437926483 1 +-0.30789349699463731 -0.12375268876932422 0.21577078494474838 1 +-0.16720437603028054 -0.03083908758531357 0.35123858918745399 1 +-0.18128081866335391 0.2830487056717238 0.1883784304214256 1 +-0.10436502357698049 0.12509187236227029 0.19585659946239731 1 +0.31901916410525533 0.058808598066358339 -0.22972424345691189 1 +0.027769095322753831 0.14464675957004966 0.36323507776810504 1 +0.13960116785223819 -0.17898415571113385 0.31534230524128104 1 +0.023568426965540581 0.38692355277584711 -0.011858440788303823 1 +0.23985837710368524 -0.22766093610137156 -0.22213533463966978 1 +0.15778991217941379 -0.12673816359074469 -0.34115248458186781 1 +0.29625857514519732 0.24566730561158784 0.031953158536357829 1 +0.080656448812452167 -0.16841296531297367 -0.18478003237880164 1 +0.16496489167827175 -0.052783274797780409 0.35116768097441575 1 +-0.036474157223670325 -0.39535327705576773 0.036384073815337016 1 +0.36371164785207277 -0.10708387179365877 -0.10454864078898034 1 +-0.087048809320665527 0.25316102697845128 0.022369237421085028 1 +0.20897227862757828 0.099018777264479663 -0.3229107295199839 1 +0.043871234042261342 0.16303775916229074 -0.37115051312375918 1 +0.10637190794209886 -0.20995542498124597 0.034538474900766614 1 +0.20987672192604165 0.12455653007105925 -0.10616667532416831 1 +0.050145833646477067 -0.11927746362871103 -0.36483038374168059 1 +-0.2569589135759463 0.011876919793466743 0.30339559661531923 1 +-0.14553415621357807 -0.12941862681585642 -0.33965282644394962 1 +-0.38045926172758571 0.13381294154801746 -0.0024935828596186829 1 +-0.14786565736419174 -0.20218619506824634 0.037078655502300446 1 +0.27185960596773107 0.24683992968871024 -0.18144502724386516 1 +0.10624225261503392 0.23598317618805897 -0.038815416384184613 1 +0.20207022106946587 0.32360756219858922 -0.094044676976052274 1 +0.27731456915564023 -0.10000774304333798 -0.2589370471696687 1 +0.23834487210314695 -0.15931874140263813 -0.026333756732376437 1 +0.050413814320079887 0.039243068358821825 -0.2604303190974549 1 +0.24065670405888243 0.12440863007856787 0.28530892422349785 1 +0.24131817164355052 -0.089363242825941602 0.060911262413372344 1 +-0.2364719245809476 -0.004270508769169068 -0.088600013049095899 1 +0.28515263160773274 -0.22023725186962631 0.1733951527718868 1 +0.34009321243624258 -0.039735948062104037 0.22243245385186622 1 +0.08984024346625695 0.15791205654876458 0.18182196119615981 1 +-0.24638507448744487 0.13757586356258628 -0.27002689226946663 1 +-0.16857571095821844 -0.02812365115043744 0.21418353376682697 1 +-0.1731917451426222 0.2364117398325114 -0.39729462373902957 2 +0.12336966796224377 -0.35454250264062137 0.13803251821307455 1 +-0.19775114308164371 0.10713396961444183 -0.10814111302044851 1 +0.19857233363919352 0.23634253201295671 -0.25847400182932251 1 +-0.11478742160567977 0.18739418423886112 0.10180484691975492 1 +-0.053611188785143718 -0.24671323997391675 0.014373748327959429 1 +0.006763757672023106 -0.27457303434908686 -0.29097458896782502 1 +0.13236190385685356 0.33815344006019898 -0.183870581840652 1 +-0.10242343439746388 0.087166834030478577 -0.21537745486588183 1 +-0.2583766411997464 0.021032172749625697 0.03875788400968589 1 +0.076945048663832172 -0.38384722380040015 0.037063846680694387 1 +-0.26113960503705214 0.29588945218951068 0.0035529301492612936 1 +0.041284901195559109 -0.15059551548257941 0.21046777203360834 1 +0.17819004744153116 0.25123110214993383 0.24124469073292951 1 +-0.21817168097492304 0.11711712038934805 0.3195954816265269 1 +-0.23396064679188577 -0.33983934322570641 -0.008348234341521682 1 +-0.096390153856920888 -0.37138062730386218 0.11998934286889619 1 +-0.089740354549113041 0.21183842613184775 -0.1204125200007857 1 +-0.1315348553333206 0.25354532785257095 0.27599901609419952 1 +-0.47309049000944725 0.083917611539784609 -0.11427548002999455 2 +-0.10232075630902869 0.021751408944293536 -0.3821508088222666 1 +0.14926503561707283 0.37861796383415519 -0.0077371296117765553 1 +-0.19306479566447415 -0.075852084128277375 -0.1538589796531375 1 +-0.26369421911518526 -0.19216976823655502 -0.23391148886092913 1 +0.12020736222706946 0.35044000592900432 0.17911686727626699 1 +0.3048115684889941 -0.13717734716591962 0.23313392161126517 1 +-0.1230622188165649 0.25876006525325701 -0.2904721485393742 1 +-0.093393508717123319 0.38020496232867673 0.0033071108055348006 1 +-0.36027962609956549 0.1449760584656708 -0.10362940598672385 1 +0.38469283098921392 0.02319611420450559 -0.14916372426046942 1 +0.13749184053910829 -0.092794069634492327 0.19742968657155993 1 +0.074797661013089226 0.25012545596594921 -0.1404934926198349 1 +-0.054477938391975539 -0.085628442065833837 -0.017799871366431477 1 +0.024806284611034665 0.098272052066470883 0.016645819433334985 1 +-0.022061313749070353 0.2946354401931443 -0.26676223580777092 1 +0.024946442360908885 0.0263042580677295 0.096367363640021172 1 +-0.12866014902766865 -0.17232468112762231 0.13566497641610362 1 +-0.28146278773699562 0.27081314138547607 0.10101636941299799 1 +0.36011527425244588 0.097685548130398842 0.15920693658319554 1 +0.066187236726057849 -0.34026801549245778 -0.19922030279276431 1 +0.07022159834384252 -0.063623002441841325 0.38885282067455429 1 +-0.11758927070462714 0.065467038838721014 0.06103679065767291 1 +-0.10199424288607814 0.37130749604407531 -0.12804351163479197 1 +-0.045794287223631047 -0.4324557833521423 -0.23687521773595907 2 +0.13954101029359572 0.087691825752021196 0.46423620151461575 2 +-0.39476624440822194 0.038136393518752726 0.027823555675558567 1 +0.042775402298076214 -0.40900634810064485 -0.054889459858675979 1 +-0.056154878290525095 0.1311062337485458 -0.37645110033906548 1 +0.32857963727660389 0.32088575127821412 0.1792588089484089 2 +0.27611524808374921 0.2192909383500975 0.20670216949263528 1 +-0.30793708451359386 -0.25493837901738242 -0.065728746169034485 1 +0.17340100444749926 0.025669119720247442 0.047186460674716942 1 +-0.36289506615087352 0.027981941147756248 0.18079850569588596 1 +-0.20657734755208726 0.063754151458302072 0.19893688931836873 1 +-0.34094180928632267 -0.14757967407118869 -0.18786326339274695 1 +-0.23553097831014172 -0.090399560703751214 0.14351157136500015 1 +-0.10738296764579104 0.34812174360645026 0.16914638577466848 1 +0.12295950646474089 0.21757928211552441 -0.32918054547200276 1 +0.012981378463993831 0.13186935449453266 -0.25361598352399589 1 +-0.18282846177641854 -0.23173302295590589 -0.2775513473831005 1 +0.0052481079377969496 0.19020502243444401 0.22426672589204605 1 +-0.39541077193317081 0.037156530734504901 -0.072147206050796608 1 +0.34431029335123825 -0.18967359339033504 0.098873723612798434 1 +-0.22440434312429891 -0.20757435375880903 0.26343757447756794 1 +0.17560792936664665 -0.36448846737671531 -0.035620747830156084 1 +-0.048532728179369017 -0.066526068312505363 0.12862283474273536 1 +-0.38032248306506256 -0.11517674900610347 0.044923628284516896 1 +0.14986287173910431 0.041731457075121423 -0.26282606340174863 1 +0.29507169567874758 0.055981517478235029 -0.0037521482767681157 1 +0.3099538909046799 -0.25775877376865519 -0.088388609139942564 1 +0.18306476248019357 0.36453429163376155 0.086802054568749953 1 +-0.070403421397669072 0.013740322100972452 -0.067869860279548375 1 +0.1791412793429773 -0.21367260721022319 -0.29899955568168235 1 +-0.36614232797971086 0.16937465922964734 0.088622907414423815 1 +-0.15448089410822588 -0.32615429828064552 0.18586659724105453 1 +0.052324108742054357 -0.038351248529848364 -0.48856124210133045 2 +0.27339126238480399 -0.28705305917821577 0.10218477312054483 1 +0.12554562290815949 0.096164566717367839 0.36751961870386074 1 +-0.021181431807494128 -0.10907330839819857 0.27324381903867717 1 +0.052550146099273894 -0.33695348472230824 0.20692692556226724 1 +-0.28494321772920805 0.27677228364487483 -0.29224974361019257 2 +0.10772611365430303 -0.27870879909125396 -0.035165389045932201 1 +-0.14856308449960456 0.37033969772799641 0.083357807780090915 1 +0.025831712627652915 -0.2515063025023635 0.071048621658933692 1 +0.073182083123299962 -0.29466437179154648 0.38780511575873033 2 +0.0080333500708874642 0.25411677277280265 0.14242338431531035 1 +-0.0017606887646237808 0.38831694465959848 -0.10592558893991103 1 +0.26398114212563917 -0.14381701618748871 0.39063091979078446 2 +-0.38326706137033695 -0.11875831278201833 -0.10508308432111768 1 +0.46034682268860305 0.15676767565379729 0.089581324608377158 2 +0.13578306781534899 0.056437373500978286 -0.37048711030225778 1 +-0.052966710537569503 -0.27929443321811831 0.40328721189090194 2 +0.192560991004216 0.063008277917616262 0.20350548147513242 1 +0.050258612180519122 -0.075186495631741901 0.03540413824808368 1 +0.10777834999410811 0.26611091895884736 0.30598558072669596 1 +-0.066278520399229893 -0.34290151563057464 -0.2064101834937612 1 +0.19685886776352077 0.2027080197434461 -0.043322649523488271 1 +0.0015847901613452037 0.080830144016209665 -0.075502012245031377 1 +0.26368489950477669 0.033773895863873762 0.30891554526250792 1 +-0.23299918759270005 -0.090432163829179152 -0.32846528987419321 1 +-0.088108143022930407 -0.11027631435176584 -0.26475408611063156 1 +0.38973726098737016 -0.019243022032469914 0.14264304566481822 1 +-0.01289473966910289 0.48606046903305394 0.08085761591040605 2 +0.33463968548109069 0.17827648066868423 -0.15894998183293146 1 +0.15134385076449164 0.10581068340528867 -5.9750900477974211e-05 1 +-0.17405379599508039 -0.36653139572584437 0.064489678375509452 1 +-0.048854911632127768 0.053711968379438257 0.2805493974584623 1 +0.21655805777292733 -0.049594875144037723 -0.20470694456379607 1 +-0.20231826270209063 0.20805349381289187 0.13341602539504827 1 +0.092366405386281519 -0.1059266853010145 -0.27518724745635098 1 +-0.16707682968160315 0.20164704292262747 0.020780910447402774 1 +0.19524860317316997 -0.24489588806719859 0.27517702750751011 1 +-0.3039111084610352 -0.27281812486539642 0.097065124694635241 1 +0.19626955570096213 -0.24183875140106834 -0.0045910103775962108 1 +0.19582217433086202 -0.042336659338486862 -0.36245467861757791 1 +0.1868752064317967 -0.18873558420146364 -0.15372957291117345 1 +-0.045633180489322724 -0.15147108696986303 -0.38255403163522023 1 +0.48770423858475598 0.0061209045436740276 0.075154425503095423 2 +0.47672175612571999 0.0094806422807550209 0.14315724795141693 2 +0.033436062702507333 0.29305660163602409 -0.018840324986662348 1 +0.26197014702976135 0.31243594682877091 0.089519958804874414 1 +-0.043673796350527663 -0.26494914974355055 -0.077875466162947674 1 +-0.16399744816910741 0.061074557863654004 0.3730679880969614 1 +-0.16874774479793608 -0.16542383351305237 -0.13655358726981978 1 +0.10558920218023279 -0.2883522675688806 -0.27973042458712222 1 +0.28759948121919943 0.0075922568669945789 -0.093321899493478105 1 +-0.29486701362731427 0.23302861539801364 -0.18637025878136035 1 +-0.3754764128643342 -0.0084805563105020514 0.32194621216299329 2 +-0.24651850149330784 -0.17519194055264725 -0.055562192344838009 1 +-0.22751710255401345 -0.16845076940402859 0.073697384148184594 1 +-0.24536469437509145 0.30414389962752025 -0.094414445157329593 1 +-0.23350857302408798 -0.28870963842640884 -0.20268635756650838 1 +0.33355094667626339 -0.12994863842172816 -0.19024905887558033 1 +-0.046583807889072994 -0.15241831865196193 -0.082961453490844869 1 +-0.074611879123396452 -0.017134658095282806 0.05376761501253928 1 +-0.26578688709696846 0.38360878439230706 0.159993866467324 2 +-0.06913794883377869 -0.19458616531484274 0.20951642194864953 1 +0.089498950171411212 -0.13494631779164529 -0.023959860311300797 1 +-0.18558142756911827 0.18711832187159916 -0.31964230522062342 1 +0.23634040692314512 -0.11916228796852599 0.14864364771349806 1 +-0.088210793990276731 -0.2879883344945246 -0.27781252700893333 1 +-0.26086854777577478 -0.017830342079347795 -0.1788234347614589 1 +-0.33787933076748999 0.089161001111497051 -0.21629255429682587 1 +-0.082238342689786859 -0.24671853062405819 0.32044664884209845 1 +-0.0054062426620777558 -0.32672003076719502 0.36865108381055367 2 +-0.0056290036019684894 -0.38106105636912002 0.31574290758864998 2 +0.22220628949086949 -0.13840275692162152 0.30851771391391392 1 +0.059753767986784327 -0.14859920887922184 0.090513805315648982 1 +-0.2667268431609312 0.25334447042736447 0.20660573212278818 1 +0.38480762928955115 0.10723688934594511 0.070832461234396973 1 +-0.15677184091914464 0.18482085016455907 0.33213232709257567 1 +-0.00064705198299440381 -0.25340022477919039 0.15936372413060598 1 +-0.11020620758406793 0.022836216030780593 0.48067896906982044 2 +-0.0032908640424136838 -0.19714476189659899 -0.242153776325925 1 +0.0093998308755075255 0.39201559930573759 0.12966967049431224 1 +-0.35410381558087078 -0.057697060927998811 -0.20288559066945844 1 +0.059673730534753888 -0.21897248874357986 0.33725101689325682 1 +-0.17838054976210899 -0.27075414553594135 -0.033985269742722632 1 +0.27111033575769367 0.29800247292168042 -0.039183813111945853 1 +0.037693459566387935 0.25035362521103288 -0.32050439627600708 1 +-0.26377566706920014 0.40474764330518331 0.097782864651467877 2 +-0.0022521275033995578 -0.057420856046653486 -0.16094826021995451 1 +-0.26724669473642121 -0.19316209606505375 0.36593332465911249 2 +0.085499007306107461 0.023008571003886057 0.022531195875965832 1 +0.098844449635862128 0.28069945194991636 0.12422379247805743 1 +0.31655333775702299 0.14012618136656779 0.22720581707510407 1 +-0.36004573663529021 0.12360063255151099 0.16730063077305124 1 +0.019555949360480052 -0.21128114961576963 -0.36029218479847658 1 +0.024318355975380859 -0.039456773514895682 -0.2982578166862066 1 +-0.053302970875965923 0.29993165832454888 0.27107195243223825 1 +0.11074740663859059 -0.0023209238812337309 0.10707812100084599 1 +-0.23369222637748979 0.026076224351167233 -0.34209863262360352 1 +-0.093658627887151527 -0.024119861366794414 0.26572354640586565 1 +0.033069219405781114 -0.037001826242540892 -0.39966811891681564 1 +0.062480776161146667 0.3415433860776525 0.24881093986055752 1 +-0.19006710051136508 -0.21182820767376392 0.40334880581212612 2 +-0.15117658436565384 -0.057729665999662422 -0.39529041860225311 1 +0.21096164409808271 0.2411647762236705 0.3779204346949695 2 +0.26151083986578794 0.26282880113491397 0.32980393996530022 2 +0.29009947850455003 -0.0095043136026206898 0.15308083393387206 1 +-0.3098285643626284 -0.22121496989046627 0.17135381975820951 1 +-0.0030745485663673938 -0.015807326101892019 0.41212024611049008 1 +-0.14172327018728048 0.28556847263614998 -0.11581586672608517 1 +-0.22499271278891853 -0.27147465929726566 0.199387037696865 1 +0.33344952423229235 -0.19635668104034432 0.30633731184840085 2 +-0.021396171792294139 0.26879464592372543 -0.13600674659771203 1 +0.41451092319956245 -0.059018811645844285 -0.047794195950891169 1 +0.11862227866704492 0.10064040959043494 0.24498147812342444 1 +0.086230367737865965 0.16375703761964155 0.022170312114837873 1 +0.17954953571185736 -0.02124783317111862 0.23179488813310006 1 +-0.33908504237729525 -0.23921603457248902 0.017026141102442993 1 +-0.1049325276446455 -0.045180241355882306 0.48040953182320123 2 +0.16385903817559577 -0.22218965562641499 0.10237333185805998 1 +-0.29305831491827128 -0.068099933139374097 0.28458839114693735 1 +-0.20092482262250835 0.10964844962442945 -0.19791334687654147 1 +0.068942202224407514 0.0029955069730034645 0.27555875309342848 1 +-0.16236711227235467 -0.15510138526654288 0.43923281716767948 2 +0.41976828002296784 -0.22321200687821596 -0.13898651814964413 2 +-0.26376459679853714 0.14801102106046626 -0.063514948655925496 1 +-0.043707734836280182 -0.087160102933500516 0.48560279250516092 2 +-0.15802654231952018 -0.16653664499584497 0.21988342840539676 1 +0.024331064489864926 -0.31125973494592851 -0.11271876604229143 1 +-0.11559571688941267 0.15387999526142576 0.45400156595678642 2 +-0.07167740472751119 0.20992098201559808 -0.22335335036418605 1 +-0.1491917475325466 -0.016357705696806901 -0.10224485743117828 1 +-0.2306497953749824 0.22228666588434001 -0.24723041022010697 1 +-0.13144693740742314 0.14002434622071488 -0.04541299504574707 1 +-0.28141787556258735 0.18558837696116509 0.26243372199734821 1 +0.13054785106683886 0.14479124561273679 -0.37983066967241486 1 +0.25769984113159344 -0.0023623980042580817 0.052061446411661758 1 +-0.26494850649782675 0.12426101634281547 0.064172013322501803 1 +0.12005227946995625 -0.1908756192412181 0.2188096871298075 1 +-0.27887316288322439 -0.06352253435650923 -0.037757109208955322 1 +-0.065960876300959509 -0.12031833421810569 0.39323461699135742 1 +-0.48122871014891949 -0.042584193588204991 -0.10092600199458213 2 +0.36491740070743223 0.1957270440341696 0.057139964805739601 1 +-0.024962087819082851 0.10339693677256825 -0.17566633837899109 1 +0.44619912765057934 0.12464786437614742 -0.17434519797785047 2 +-0.36430451916850232 -0.12690065910547679 0.14770022129768121 1 +0.054790863636619912 0.079625420499855021 0.16029551450519436 1 +-0.02776712276609326 0.20451529123961837 0.066410880598844022 1 +-0.19092551559039672 0.042667425444435254 -0.26085762257038858 1 +0.10833714071521103 0.30163084998123035 0.0271809783016701 1 +0.20541729434062569 -0.34740715594795879 0.10618042678623019 1 +0.2373618104996971 0.22434971528213393 0.094176968625838686 1 +0.32334197254079833 -0.024750104564432576 -0.25770646780151452 1 +0.17342445445381852 -0.33853545638595112 -0.16047221364995759 1 +-0.040852174876646268 0.080635219182546541 -0.48576716949190768 2 +-0.066215788508568144 0.027311811889385303 -0.15467671760363408 1 +-0.10575010161414924 0.2738638707643401 0.11489477718290128 1 +-0.25612470755483285 0.039226722898682218 0.13060064002721536 1 +0.39443774579235996 0.12024045120312925 -0.089008472404216388 1 +0.018961428251670451 -0.30418817632757017 0.28114984423349887 1 +-0.1481399319006777 -0.081857618651120068 0.14299434933456259 1 +-0.16588969726651318 0.34558034965027851 -0.18240870654409286 1 +0.23118384919793089 0.21683538121308274 -0.37893771963620582 2 +-0.26587874704060482 0.06032356944427035 -0.13978542303404215 1 +-0.39731996266264513 0.28851976009431118 -0.044378308977794788 2 +-0.18099553473653571 -0.059027555211072211 0.022079614876154771 1 +-0.096793182622928298 0.13922916786611267 -0.28536628352287036 1 +-0.42524424938196426 -0.23557187749304304 -0.093936862140836422 2 +-0.34981351324110294 -0.1984420378206895 -0.11746291563394778 1 +0.083518890584546424 0.20195189593146817 0.44228024589446685 2 +-0.35934001074403754 0.04370741166802089 -0.33503702749383063 2 +0.38112499666258443 -0.23380860756053309 -0.21304072467703439 2 +0.011336598332309364 -0.018148889418823255 -0.084319480306515843 1 +-0.11968030805226781 -0.28209895052106987 -0.11675099546023027 1 +-0.20458476828247013 0.18494194933765132 -0.15434296098837028 1 +0.21573732351322028 0.31334177075713721 -0.18160115611199051 1 +-0.072809298939057521 -0.40323032259712421 -0.042252898590777778 1 +0.16455498969273469 -0.14747803469444665 0.018095161482380974 1 +0.12845642537231569 0.013435188001823466 0.39404504012287489 1 +0.093422144597508638 -0.25888403351035577 -0.11855113815612503 1 +-0.19890103708578824 -0.043197668884905158 -0.23409956778195812 1 +-0.064668727888912508 0.48885627077083871 0.023828543054009343 2 +0.089472047390780046 0.4591033498031909 -0.15731063262053824 2 +-0.054289356976667952 0.36862767534947127 -0.20027274759484467 1 +-0.067122760381802288 -0.17129596311335374 0.0546918314881501 1 +-0.035150278326154444 0.085603549601096771 0.077659853514379512 1 +0.46415485128801681 -0.16255780555360716 -0.050651028921335488 2 +0.099192903888102618 0.048407584042190067 -0.18965444786829586 1 +-0.13000412853418764 -0.36299846990813228 -0.15178608549358752 1 +0.17459221562564242 -0.06392336467034504 -0.28165033671196693 1 +0.41129153200093671 -0.17107995715116933 0.21247928509905528 2 +0.41493340733122097 0.046065397327095713 0.26516695791897971 2 +0.31510700428231037 0.1330607061829582 -0.3584498307402415 2 +-0.39744303830165573 -0.035047204920095415 -0.11884051728647897 1 +-0.037935830376490232 0.25699347244871928 0.42226421765882671 2 +Triangles +694 +166 189 20 2 +138 300 297 2 +674 103 753 2 +264 104 234 2 +59 172 163 2 +151 278 7 2 +7 193 151 2 +122 55 192 2 +152 295 1 2 +268 241 48 2 +241 268 94 2 +70 222 250 2 +222 70 299 2 +231 95 301 2 +145 607 608 2 +94 650 625 2 +263 217 87 2 +131 60 189 2 +745 270 151 2 +42 674 125 2 +242 52 152 2 +234 264 77 2 +201 26 223 2 +71 211 206 2 +206 211 16 2 +533 233 52 2 +21 577 674 2 +225 219 105 2 +75 156 203 2 +156 235 203 2 +96 202 44 2 +29 116 251 2 +745 278 151 2 +131 239 60 2 +178 58 200 2 +10 91 133 2 +233 533 99 2 +99 292 233 2 +58 209 293 2 +249 137 40 2 +169 11 150 2 +120 230 24 2 +88 177 67 2 +269 73 197 2 +189 166 51 2 +51 131 189 2 +110 183 52 2 +164 176 93 2 +288 176 164 2 +128 155 45 2 +727 185 107 2 +160 298 18 2 +108 21 245 2 +17 116 173 2 +150 11 215 2 +54 180 122 2 +61 147 160 2 +157 110 5 2 +126 143 8 2 +82 635 236 2 +160 147 298 2 +135 146 19 2 +55 122 208 2 +233 110 52 2 +12 286 174 2 +247 299 70 2 +34 265 287 2 +255 141 35 2 +146 136 19 2 +220 85 203 2 +67 89 216 2 +217 92 66 2 +118 241 33 2 +109 165 10 2 +217 66 157 2 +117 209 32 2 +150 62 194 2 +251 72 173 2 +207 133 10 2 +534 261 176 2 +104 264 581 2 +37 97 159 2 +19 154 115 2 +262 200 58 2 +96 27 202 2 +252 22 117 2 +161 617 74 2 +303 157 5 2 +19 214 115 2 +237 4 246 2 +193 63 151 2 +175 75 289 2 +296 294 56 2 +165 754 108 2 +2 92 229 2 +37 162 281 2 +212 692 68 2 +267 15 225 2 +155 160 45 2 +146 592 48 2 +127 291 46 2 +248 168 14 2 +32 236 98 2 +110 29 183 2 +134 169 41 2 +117 178 22 2 +170 734 687 2 +91 538 10 2 +78 191 198 2 +169 150 41 2 +180 69 228 2 +187 707 71 2 +92 143 42 2 +146 45 136 2 +63 224 270 2 +144 689 264 2 +222 13 652 2 +141 62 187 2 +278 155 7 2 +7 155 128 2 +161 213 25 2 +128 45 146 2 +160 45 142 2 +81 249 170 2 +119 269 12 2 +155 61 160 2 +225 15 105 2 +23 289 203 2 +203 220 23 2 +72 173 218 2 +215 62 707 2 +263 82 204 2 +689 257 114 2 +184 166 20 2 +251 29 183 2 +181 69 180 2 +24 120 190 2 +100 240 26 2 +126 42 143 2 +216 67 88 2 +197 73 130 2 +240 266 99 2 +266 292 99 2 +96 44 171 2 +50 137 227 2 +4 172 246 2 +138 297 302 2 +41 150 194 2 +152 218 295 2 +215 11 153 2 +38 125 126 2 +126 272 38 2 +236 209 32 2 +102 20 134 2 +115 188 30 2 +109 165 43 2 +43 261 109 2 +191 9 198 2 +581 98 634 2 +192 213 78 2 +263 262 82 2 +83 118 283 2 +163 268 135 2 +107 284 277 2 +154 47 148 2 +136 45 142 2 +12 269 197 2 +4 96 171 2 +167 92 42 2 +120 56 296 2 +172 6 163 2 +84 284 267 2 +261 667 80 2 +194 62 141 2 +56 120 149 2 +91 255 35 2 +80 261 534 2 +251 72 183 2 +10 668 109 2 +159 22 195 2 +203 235 85 2 +652 222 90 2 +258 23 130 2 +276 221 78 2 +196 267 225 2 +210 110 157 2 +86 665 686 2 +165 108 43 2 +108 245 43 2 +608 101 49 2 +201 223 85 2 +141 187 35 2 +41 147 194 2 +201 100 53 2 +85 223 220 2 +33 277 260 2 +176 245 93 2 +166 174 65 2 +61 270 745 2 +50 285 139 2 +275 17 149 2 +54 132 181 2 +686 36 665 2 +142 160 18 2 +92 3 143 2 +186 106 28 2 +72 218 152 2 +189 725 134 2 +681 642 114 2 +82 262 209 2 +148 47 538 2 +100 22 178 2 +227 2 167 2 +68 244 168 2 +121 297 124 2 +161 74 213 2 +28 570 106 2 +163 94 268 2 +224 102 270 2 +211 39 121 2 +253 28 256 2 +260 253 83 2 +172 59 246 2 +59 163 135 2 +755 60 169 2 +9 156 243 2 +30 279 115 2 +31 301 231 2 +238 88 1 2 +217 157 87 2 +87 157 303 2 +214 135 19 2 +281 221 74 2 +221 213 74 2 +287 34 232 2 +98 634 635 2 +29 81 116 2 +84 267 196 2 +130 23 177 2 +291 123 127 2 +34 130 265 2 +111 205 246 2 +100 178 79 2 +79 200 266 2 +92 3 217 2 +100 79 240 2 +282 51 174 2 +174 51 166 2 +112 232 34 2 +11 127 123 2 +185 54 122 2 +27 642 681 2 +81 170 116 2 +54 181 180 2 +41 271 102 2 +102 134 41 2 +63 186 184 2 +122 180 25 2 +114 248 257 2 +35 187 206 2 +252 159 247 2 +119 259 12 2 +83 256 193 2 +261 43 176 2 +285 16 140 2 +158 18 141 2 +142 18 158 2 +57 154 115 2 +105 15 208 2 +179 2 81 2 +257 288 164 2 +164 290 257 2 +178 200 79 2 +127 302 153 2 +302 39 153 2 +66 210 157 2 +182 296 294 2 +107 132 54 2 +176 43 245 2 +175 31 733 2 +139 21 108 2 +169 11 755 2 +44 129 617 2 +82 209 236 2 +245 21 93 2 +47 142 158 2 +179 229 66 2 +189 60 725 2 +125 42 126 2 +254 581 98 2 +12 197 286 2 +69 171 228 2 +171 44 228 2 +89 242 216 2 +76 230 296 2 +131 112 24 2 +490 106 12 2 +180 25 228 2 +121 39 297 2 +53 195 100 2 +136 47 154 2 +254 36 665 2 +87 200 262 2 +200 87 303 2 +73 175 733 2 +136 142 47 2 +202 44 129 2 +115 57 188 2 +123 755 11 2 +147 271 61 2 +57 667 668 2 +185 122 208 2 +234 290 77 2 +20 189 134 2 +48 146 135 2 +175 31 231 2 +132 650 33 2 +275 300 138 2 +138 274 275 2 +279 214 115 2 +96 4 237 2 +170 687 40 2 +195 22 100 2 +193 283 7 2 +83 253 256 2 +193 256 63 2 +210 179 66 2 +199 171 69 2 +149 56 173 2 +50 137 140 2 +247 162 299 2 +224 102 20 2 +97 9 198 2 +19 136 154 2 +153 127 11 2 +687 121 124 2 +298 194 147 2 +303 5 200 2 +15 185 208 2 +227 167 103 2 +53 201 235 2 +266 79 240 2 +202 86 129 2 +55 192 191 2 +159 37 247 2 +149 173 17 2 +105 509 208 2 +78 198 276 2 +192 25 213 2 +24 565 112 2 +186 65 184 2 +186 106 65 2 +181 199 69 2 +181 6 199 2 +196 225 64 2 +744 241 118 2 +150 215 62 2 +103 167 42 2 +224 184 63 2 +129 13 226 2 +2 92 167 2 +88 216 1 2 +243 156 75 2 +215 153 707 2 +237 246 111 2 +221 78 213 2 +119 31 733 2 +490 106 65 2 +116 734 170 2 +277 284 84 2 +182 76 296 2 +107 54 185 2 +177 23 220 2 +177 220 67 2 +290 164 38 2 +164 280 38 2 +159 195 97 2 +238 287 88 2 +217 3 263 2 +81 2 249 2 +140 121 16 2 +179 81 29 2 +22 159 252 2 +10 207 165 2 +725 169 134 2 +30 205 279 2 +205 30 757 2 +184 65 166 2 +300 275 17 2 +131 24 239 2 +253 84 196 2 +71 153 211 2 +93 280 164 2 +297 39 302 2 +117 252 250 2 +28 253 196 2 +299 13 222 2 +108 139 754 2 +210 29 110 2 +252 247 70 2 +27 86 202 2 +509 95 704 2 +231 95 243 2 +52 183 152 2 +183 72 152 2 +64 219 119 2 +231 243 75 2 +235 201 85 2 +143 204 8 2 +143 3 204 2 +210 179 29 2 +32 250 117 2 +26 240 89 2 +175 231 75 2 +286 113 197 2 +248 168 68 2 +100 26 201 2 +192 78 191 2 +122 25 192 2 +692 68 244 2 +211 121 16 2 +128 744 7 2 +211 153 39 2 +262 209 58 2 +283 118 7 2 +4 171 199 2 +4 199 172 2 +187 71 206 2 +178 117 293 2 +199 6 172 2 +47 158 538 2 +270 102 61 2 +102 271 61 2 +581 36 264 2 +42 103 674 2 +749 121 687 2 +15 185 727 2 +162 13 299 2 +650 625 132 2 +113 282 717 2 +120 230 296 2 +106 259 12 2 +203 75 289 2 +133 91 579 2 +254 665 90 2 +252 70 250 2 +119 733 269 2 +733 73 269 2 +3 263 204 2 +717 273 113 2 +273 717 112 2 +99 240 89 2 +168 80 534 2 +137 2 227 2 +57 148 154 2 +263 87 262 2 +650 94 241 2 +258 289 175 2 +76 238 182 2 +238 1 182 2 +27 96 212 2 +138 302 127 2 +127 274 138 2 +260 83 118 2 +118 33 260 2 +220 223 67 2 +223 89 67 2 +26 89 223 2 +153 707 71 2 +184 20 224 2 +107 132 33 2 +509 208 55 2 +257 248 14 2 +64 225 219 2 +717 282 51 2 +44 161 228 2 +161 25 228 2 +141 158 255 2 +509 704 191 2 +92 229 66 2 +77 689 257 2 +229 2 179 2 +239 190 123 2 +190 291 123 2 +21 93 577 2 +63 270 151 2 +226 281 74 2 +91 158 255 2 +105 301 219 2 +73 175 258 2 +239 24 190 2 +60 239 123 2 +242 152 1 2 +216 242 1 2 +73 258 130 2 +249 2 137 2 +250 90 32 2 +222 90 250 2 +574 126 8 2 +272 126 574 2 +251 116 173 2 +689 77 264 2 +254 98 32 2 +90 254 32 2 +40 249 170 2 +293 209 117 2 +273 130 197 2 +256 28 186 2 +256 186 63 2 +617 129 226 2 +260 84 253 2 +148 10 668 2 +285 16 145 2 +104 234 272 2 +744 592 128 2 +259 64 119 2 +135 268 48 2 +144 264 36 2 +277 260 84 2 +196 64 570 2 +88 265 177 2 +265 130 177 2 +293 58 178 2 +674 753 21 2 +76 232 287 2 +76 287 238 2 +198 37 276 2 +273 130 34 2 +273 34 112 2 +127 46 274 2 +120 149 46 2 +149 274 46 2 +301 31 219 2 +219 31 119 2 +538 148 10 2 +274 149 275 2 +37 97 198 2 +139 145 285 2 +107 277 33 2 +214 59 135 2 +59 214 279 2 +246 59 205 2 +205 59 279 2 +258 289 23 2 +281 37 221 2 +37 276 221 2 +37 162 247 2 +124 297 300 2 +13 162 226 2 +226 162 281 2 +283 83 193 2 +284 15 267 2 +50 285 140 2 +286 282 174 2 +286 113 282 2 +197 273 113 2 +287 265 88 2 +257 14 288 2 +234 38 272 2 +290 38 234 2 +77 257 290 2 +46 291 190 2 +190 120 46 2 +200 5 266 2 +5 292 266 2 +292 5 233 2 +233 5 110 2 +56 294 218 2 +218 173 56 2 +744 48 592 2 +298 194 18 2 +18 194 141 2 +570 196 28 2 +147 271 41 2 +295 218 294 2 +294 182 295 2 +295 182 1 2 +93 577 280 2 +12 174 490 2 +634 581 104 2 +607 101 608 2 +86 129 652 2 +732 188 80 2 +717 112 131 2 +82 635 204 2 +95 704 243 2 +704 9 243 2 +104 272 574 2 +230 565 76 2 +125 577 674 2 +668 667 109 2 +174 490 65 2 +21 139 753 2 +288 534 176 2 +8 634 574 2 +634 104 574 2 +248 642 114 2 +144 27 686 2 +107 727 284 2 +30 757 244 2 +33 650 241 2 +49 608 139 2 +133 207 49 2 +509 105 301 2 +533 52 242 2 +97 9 730 2 +635 634 8 2 +116 17 734 2 +236 635 98 2 +592 128 146 2 +608 145 139 2 +89 533 242 2 +686 144 36 2 +48 744 241 2 +80 732 168 2 +123 60 755 2 +191 509 55 2 +204 635 8 2 +730 156 53 2 +565 232 76 2 +99 533 89 2 +132 625 181 2 +625 6 181 2 +744 118 7 2 +111 205 757 2 +565 232 112 2 +625 163 94 2 +95 509 301 2 +137 40 140 2 +74 226 617 2 +652 665 90 2 +86 665 652 2 +35 206 579 2 +579 91 35 2 +30 732 244 2 +244 732 168 2 +44 617 161 2 +248 68 642 2 +106 570 259 2 +570 64 259 2 +704 191 9 2 +254 36 581 2 +288 534 14 2 +16 607 145 2 +96 237 212 2 +237 692 212 2 +206 579 101 2 +577 125 38 2 +38 280 577 2 +163 6 625 2 +749 40 140 2 +206 101 607 2 +206 607 16 2 +667 188 80 2 +129 652 13 2 +27 681 144 2 +757 111 244 2 +53 156 235 2 +57 188 667 2 +538 158 91 2 +707 62 187 2 +207 49 754 2 +121 749 140 2 +101 579 133 2 +101 133 49 2 +169 60 725 2 +686 27 86 2 +14 534 168 2 +732 30 188 2 +730 9 156 2 +24 565 230 2 +692 111 244 2 +50 139 753 2 +745 278 155 2 +753 227 103 2 +261 667 109 2 +687 749 40 2 +284 727 15 2 +212 68 642 2 +27 642 212 2 +668 148 57 2 +681 689 144 2 +689 114 681 2 +111 237 692 2 +51 717 131 2 +195 730 97 2 +53 195 730 2 +687 734 124 2 +734 124 300 2 +734 300 17 2 +61 745 155 2 +753 227 50 2 +165 207 754 2 +49 139 754 2 +Tetrahedra +3586 +669 309 483 629 1 +510 420 537 286 1 +475 372 495 322 1 +103 753 515 674 1 +264 234 104 442 1 +531 357 748 454 1 +314 382 454 596 1 +122 192 55 474 1 +328 495 611 372 1 +425 357 314 709 1 +594 359 586 470 1 +145 591 139 49 1 +407 231 95 301 1 +591 145 607 608 1 +94 625 650 572 1 +497 745 270 151 1 +674 125 601 42 1 +335 702 756 400 1 +594 653 541 343 1 +393 514 654 349 1 +440 688 518 368 1 +486 401 21 108 1 +37 428 708 670 1 +477 586 354 444 1 +352 455 615 311 1 +405 638 697 375 1 +586 354 461 648 1 +624 531 347 416 1 +680 428 602 350 1 +21 674 577 636 1 +219 105 518 225 1 +406 410 311 447 1 +346 580 481 557 1 +688 726 518 368 1 +347 492 484 445 1 +646 502 701 345 1 +723 364 526 619 1 +375 4 508 199 1 +397 459 362 559 1 +232 663 112 510 1 +58 293 209 506 1 +610 91 538 398 1 +137 436 411 249 1 +583 555 341 637 1 +642 432 671 358 1 +230 604 120 24 1 +409 623 310 613 1 +376 467 394 557 1 +428 670 247 602 1 +386 307 694 492 1 +717 51 537 419 1 +486 754 373 108 1 +727 107 185 363 1 +308 662 377 414 1 +433 682 316 637 1 +728 545 416 317 1 +17 173 116 459 1 +337 617 472 542 1 +596 329 454 357 1 +305 678 710 448 1 +736 431 647 374 1 +519 455 371 352 1 +635 435 82 236 1 +122 474 55 208 1 +143 412 569 8 1 +503 324 539 482 1 +734 362 459 170 1 +583 660 653 525 1 +523 344 448 587 1 +580 336 698 419 1 +85 513 220 203 1 +202 129 472 452 1 +391 324 503 482 1 +109 10 165 655 1 +209 32 564 117 1 +447 356 410 541 1 +459 251 72 173 1 +133 655 207 10 1 +264 442 104 581 1 +438 378 341 627 1 +97 680 37 159 1 +347 694 484 492 1 +560 396 45 511 1 +680 556 428 417 1 +491 263 3 383 1 +683 617 472 337 1 +495 464 383 322 1 +317 728 545 619 1 +434 252 22 117 1 +261 351 588 43 1 +578 335 756 400 1 +664 19 214 115 1 +25 656 366 563 1 +330 473 380 549 1 +475 522 747 310 1 +472 337 415 543 1 +624 357 531 416 1 +427 558 352 403 1 +429 365 389 590 1 +454 375 543 329 1 +2 229 92 566 1 +544 203 513 235 1 +584 450 456 30 1 +37 281 162 708 1 +384 224 524 426 1 +678 305 477 448 1 +709 677 314 430 1 +471 346 663 658 1 +644 146 592 48 1 +387 32 236 98 1 +636 321 520 457 1 +447 359 470 449 1 +514 19 136 146 1 +734 362 170 687 1 +651 437 481 342 1 +539 91 538 10 1 +191 198 400 78 1 +45 511 396 458 1 +9 704 400 756 1 +478 477 354 369 1 +41 194 738 476 1 +587 448 313 386 1 +726 390 632 684 1 +755 467 376 169 1 +528 591 608 49 1 +712 477 609 369 1 +160 142 45 511 1 +425 525 709 430 1 +245 108 21 401 1 +135 644 446 546 1 +658 481 346 419 1 +440 267 616 225 1 +705 639 35 579 1 +451 299 553 222 1 +582 487 324 343 1 +627 356 378 583 1 +427 399 352 318 1 +215 707 62 593 1 +637 627 469 341 1 +689 114 257 671 1 +489 543 416 337 1 +548 381 693 313 1 +251 183 29 716 1 +347 531 561 696 1 +560 610 393 354 1 +363 600 688 319 1 +516 106 695 28 1 +344 531 748 494 1 +568 703 414 442 1 +448 305 477 609 1 +459 149 562 479 1 +747 623 495 310 1 +551 191 535 55 1 +542 451 337 74 1 +541 660 343 653 1 +67 380 216 88 1 +45 396 128 458 1 +602 670 247 70 1 +396 514 136 146 1 +511 648 160 18 1 +382 456 757 244 1 +353 520 430 321 1 +230 460 604 346 1 +669 679 373 582 1 +378 438 462 306 1 +441 140 676 16 1 +313 384 524 426 1 +472 683 337 489 1 +380 630 549 67 1 +66 217 500 157 1 +695 628 338 488 1 +542 418 213 535 1 +527 363 501 339 1 +131 419 468 51 1 +537 729 628 420 1 +539 668 482 109 1 +9 400 191 198 1 +98 633 581 634 1 +659 279 205 450 1 +680 428 37 159 1 +530 234 442 457 1 +513 330 549 589 1 +441 411 379 483 1 +708 281 162 451 1 +434 595 117 22 1 +5 110 536 157 1 +731 540 730 53 1 +550 575 446 349 1 +83 283 118 408 1 +39 371 465 519 1 +713 361 554 66 1 +485 566 167 404 1 +545 723 526 619 1 +56 460 120 296 1 +726 492 688 326 1 +696 507 319 466 1 +376 336 467 557 1 +510 112 273 113 1 +261 80 667 391 1 +471 658 663 389 1 +365 666 589 661 1 +56 149 120 460 1 +526 475 322 434 1 +657 606 643 471 1 +594 318 586 444 1 +668 539 10 109 1 +703 358 671 442 1 +618 374 540 731 1 +550 349 450 391 1 +470 359 327 449 1 +614 334 496 529 1 +752 604 460 346 1 +652 90 222 553 1 +418 276 221 78 1 +453 598 527 339 1 +536 554 413 500 1 +323 510 419 389 1 +239 60 131 698 1 +436 2 566 229 1 +718 429 694 307 1 +86 686 665 414 1 +440 319 363 688 1 +638 405 527 598 1 +382 432 596 456 1 +653 304 523 587 1 +528 608 101 49 1 +415 504 171 44 1 +41 194 147 738 1 +500 554 361 66 1 +463 321 636 457 1 +386 313 507 448 1 +356 740 433 583 1 +540 201 100 53 1 +412 646 345 722 1 +384 449 548 336 1 +174 381 166 65 1 +701 520 316 502 1 +523 402 710 748 1 +497 61 270 745 1 +379 50 285 139 1 +519 71 707 721 1 +334 643 630 443 1 +314 402 357 454 1 +707 455 519 352 1 +431 26 240 100 1 +464 262 506 58 1 +17 149 459 275 1 +545 720 317 418 1 +397 116 29 716 1 +666 34 273 510 1 +495 573 328 341 1 +516 186 106 28 1 +136 560 45 142 1 +437 599 462 315 1 +530 321 358 685 1 +467 725 547 493 1 +720 416 317 499 1 +518 551 407 326 1 +359 523 448 587 1 +210 554 29 413 1 +456 432 244 382 1 +313 649 381 524 1 +313 359 521 448 1 +501 727 440 363 1 +498 706 693 386 1 +409 522 360 694 1 +496 1 216 380 1 +675 369 576 333 1 +45 511 458 155 1 +576 369 458 609 1 +261 567 482 351 1 +548 384 649 313 1 +755 169 60 467 1 +321 568 358 425 1 +461 91 610 398 1 +716 183 72 251 1 +346 481 437 557 1 +412 641 569 722 1 +539 503 482 668 1 +339 572 453 719 1 +447 523 359 587 1 +747 573 495 341 1 +287 232 34 389 1 +334 736 443 388 1 +446 325 659 546 1 +378 437 447 406 1 +518 726 632 368 1 +627 306 740 469 1 +400 326 535 499 1 +453 94 625 546 1 +481 342 429 651 1 +685 596 395 314 1 +640 246 382 508 1 +485 753 515 103 1 +123 715 291 127 1 +672 737 423 507 1 +518 326 407 726 1 +210 536 110 157 1 +644 367 446 546 1 +658 481 323 429 1 +632 518 368 225 1 +500 571 328 361 1 +575 402 305 487 1 +501 440 284 620 1 +111 246 205 382 1 +324 439 373 582 1 +187 141 62 399 1 +342 735 718 651 1 +569 316 383 641 1 +380 177 88 67 1 +92 217 3 491 1 +317 416 728 499 1 +381 649 184 524 1 +419 510 112 663 1 +232 510 112 34 1 +644 592 458 367 1 +455 11 127 123 1 +701 502 412 345 1 +426 497 270 151 1 +434 595 506 564 1 +710 494 719 466 1 +39 465 121 211 1 +374 621 431 201 1 +526 364 723 555 1 +259 12 269 119 1 +401 679 309 629 1 +148 503 539 668 1 +484 512 409 335 1 +154 584 57 115 1 +647 374 540 618 1 +314 677 391 456 1 +5 464 536 739 1 +296 392 182 294 1 +31 390 175 733 1 +619 475 526 434 1 +639 607 101 591 1 +11 755 376 169 1 +669 309 629 401 1 +658 389 590 429 1 +544 374 335 731 1 +620 423 724 672 1 +675 426 524 385 1 +399 318 427 461 1 +630 216 89 67 1 +313 524 381 693 1 +683 617 337 542 1 +694 512 360 409 1 +31 632 390 733 1 +394 455 715 123 1 +229 554 179 66 1 +451 299 670 553 1 +483 379 699 669 1 +590 473 380 330 1 +189 468 166 51 1 +626 568 414 345 1 +604 190 120 24 1 +698 547 189 468 1 +230 471 76 296 1 +398 427 705 639 1 +497 738 271 147 1 +706 342 718 481 1 +428 708 670 451 1 +484 407 326 726 1 +517 458 367 333 1 +618 475 647 310 1 +626 308 422 526 1 +25 228 656 180 1 +540 731 374 53 1 +425 596 314 357 1 +66 500 713 361 1 +440 616 267 620 1 +633 254 36 665 1 +536 233 292 424 1 +399 141 62 194 1 +482 324 373 582 1 +580 336 481 557 1 +309 699 669 483 1 +505 100 195 540 1 +418 78 213 535 1 +440 363 185 474 1 +175 390 73 733 1 +393 712 560 354 1 +586 648 461 399 1 +426 151 746 576 1 +249 559 81 436 1 +465 622 297 124 1 +318 639 427 398 1 +202 129 44 472 1 +495 438 623 341 1 +685 463 321 679 1 +755 11 455 123 1 +634 345 646 722 1 +497 147 271 61 1 +667 503 57 668 1 +102 738 271 497 1 +290 77 442 234 1 +437 447 311 750 1 +557 750 437 311 1 +310 522 623 409 1 +150 593 476 376 1 +486 669 629 401 1 +437 447 750 342 1 +159 247 602 428 1 +650 501 132 33 1 +748 357 402 454 1 +307 429 512 743 1 +408 532 724 83 1 +143 92 3 491 1 +398 539 655 10 1 +387 690 626 526 1 +537 381 166 174 1 +12 420 286 628 1 +687 559 170 40 1 +380 630 388 549 1 +513 23 220 203 1 +507 338 423 385 1 +86 414 377 452 1 +481 750 706 342 1 +532 193 283 7 1 +552 331 379 483 1 +206 639 35 427 1 +672 319 507 466 1 +554 210 179 66 1 +74 213 542 418 1 +597 479 362 332 1 +643 380 657 496 1 +431 79 505 100 1 +548 649 381 313 1 +325 494 719 710 1 +413 183 29 110 1 +537 729 420 323 1 +165 655 373 482 1 +16 140 285 441 1 +552 50 137 140 1 +613 623 310 443 1 +504 96 171 44 1 +501 107 440 727 1 +386 561 347 694 1 +102 384 224 20 1 +597 455 371 394 1 +517 744 592 458 1 +176 463 588 93 1 +684 737 695 488 1 +78 556 535 418 1 +369 160 61 511 1 +153 11 127 455 1 +366 700 499 326 1 +390 661 73 733 1 +587 344 448 386 1 +194 738 298 147 1 +18 158 142 648 1 +498 429 718 307 1 +137 436 552 411 1 +714 610 393 539 1 +217 263 500 87 1 +79 751 266 240 1 +657 238 380 606 1 +610 538 393 539 1 +308 414 377 690 1 +382 246 205 508 1 +352 519 721 403 1 +333 532 517 576 1 +540 100 195 53 1 +674 125 636 601 1 +644 664 446 514 1 +444 712 654 393 1 +457 502 701 646 1 +747 526 475 322 1 +546 453 508 163 1 +611 443 623 438 1 +486 528 591 373 1 +509 208 518 105 1 +442 321 457 646 1 +198 276 556 78 1 +356 483 699 541 1 +337 418 542 720 1 +736 374 388 431 1 +565 419 24 112 1 +588 463 401 93 1 +638 508 199 375 1 +359 447 653 523 1 +37 708 162 670 1 +679 520 309 629 1 +681 358 671 703 1 +359 586 678 594 1 +311 371 615 597 1 +524 224 184 63 1 +440 727 185 363 1 +536 303 464 5 1 +137 40 249 411 1 +328 464 383 495 1 +516 693 524 385 1 +406 356 740 480 1 +715 302 622 138 1 +735 304 561 522 1 +688 600 445 319 1 +514 349 503 664 1 +265 666 130 473 1 +21 674 636 515 1 +347 484 499 445 1 +435 641 626 345 1 +487 550 575 402 1 +490 65 106 516 1 +327 376 493 476 1 +261 482 109 43 1 +314 395 567 456 1 +734 459 116 170 1 +648 461 610 354 1 +399 586 478 327 1 +454 494 312 598 1 +182 296 76 471 1 +462 332 437 406 1 +112 510 717 113 1 +640 4 375 697 1 +217 263 3 491 1 +614 392 370 562 1 +359 653 594 523 1 +447 437 311 406 1 +702 499 400 317 1 +417 556 702 400 1 +676 140 121 16 1 +405 54 180 181 1 +546 508 659 163 1 +548 468 381 649 1 +98 254 581 633 1 +682 566 404 713 1 +376 11 455 755 1 +473 130 589 666 1 +478 147 497 61 1 +434 564 673 117 1 +643 380 630 443 1 +405 563 527 363 1 +376 311 352 470 1 +374 621 201 235 1 +375 405 638 598 1 +678 523 359 594 1 +578 335 417 731 1 +575 710 305 402 1 +623 651 360 378 1 +246 4 172 508 1 +39 519 302 715 1 +397 370 605 459 1 +471 663 76 606 1 +382 329 596 432 1 +502 316 701 641 1 +139 754 486 108 1 +551 509 95 704 1 +489 545 723 690 1 +747 341 495 623 1 +732 168 456 567 1 +507 693 675 313 1 +469 573 361 316 1 +564 32 250 117 1 +521 359 477 448 1 +321 502 568 425 1 +485 355 404 601 1 +449 706 587 359 1 +501 527 132 107 1 +422 573 747 341 1 +724 385 516 186 1 +286 197 113 420 1 +549 67 220 177 1 +527 650 625 339 1 +168 68 456 248 1 +211 16 206 403 1 +552 50 285 379 1 +658 389 471 315 1 +688 445 700 326 1 +486 754 528 373 1 +68 432 692 244 1 +388 736 443 613 1 +529 242 152 52 1 +631 743 307 512 1 +542 213 161 25 1 +45 146 128 396 1 +523 561 344 587 1 +494 748 402 454 1 +81 397 436 559 1 +369 478 497 61 1 +176 351 43 588 1 +664 279 450 115 1 +493 41 738 476 1 +256 63 193 746 1 +400 535 418 499 1 +600 696 344 445 1 +137 50 552 227 1 +494 466 710 344 1 +41 134 493 102 1 +12 488 269 420 1 +353 583 555 525 1 +15 518 185 208 1 +370 529 614 716 1 +209 58 506 262 1 +457 701 412 646 1 +141 187 427 399 1 +517 283 118 7 1 +409 364 475 522 1 +536 413 691 328 1 +634 633 722 98 1 +586 359 327 470 1 +418 451 542 74 1 +636 457 125 38 1 +103 674 485 42 1 +15 727 185 518 1 +479 362 332 459 1 +604 467 190 580 1 +102 493 497 384 1 +539 655 10 109 1 +138 300 297 622 1 +385 693 338 516 1 +406 597 362 332 1 +318 558 427 639 1 +631 645 407 390 1 +397 370 742 605 1 +113 717 282 537 1 +333 408 532 672 1 +507 696 319 737 1 +75 544 203 289 1 +440 225 616 518 1 +210 413 110 536 1 +398 91 539 10 1 +418 213 221 74 1 +414 254 665 90 1 +685 395 677 314 1 +483 356 433 309 1 +366 535 474 326 1 +273 112 717 113 1 +500 464 328 536 1 +99 89 240 751 1 +363 54 527 107 1 +662 452 377 414 1 +623 522 360 409 1 +731 235 374 53 1 +503 57 148 154 1 +602 505 434 22 1 +576 609 458 333 1 +393 538 47 148 1 +47 393 148 154 1 +94 241 572 650 1 +418 556 428 708 1 +289 175 421 258 1 +601 126 412 143 1 +210 413 29 110 1 +245 176 43 93 1 +314 567 677 456 1 +462 643 370 334 1 +643 462 443 438 1 +513 621 374 235 1 +174 381 490 628 1 +552 436 566 331 1 +687 465 559 40 1 +74 213 161 542 1 +179 554 29 210 1 +350 647 540 618 1 +237 692 612 640 1 +576 283 517 7 1 +352 376 455 311 1 +333 517 466 367 1 +648 461 158 610 1 +621 85 201 235 1 +416 357 531 312 1 +153 71 707 519 1 +370 334 614 529 1 +501 107 284 440 1 +549 330 513 374 1 +501 107 132 33 1 +260 408 118 33 1 +479 715 622 138 1 +717 51 282 537 1 +429 743 590 330 1 +186 524 184 63 1 +555 502 568 308 1 +230 460 120 604 1 +81 116 397 559 1 +548 313 706 449 1 +727 440 185 518 1 +421 175 390 258 1 +684 368 737 488 1 +640 697 375 504 1 +572 408 339 501 1 +103 485 167 42 1 +614 152 72 183 1 +461 141 158 255 1 +551 509 704 191 1 +613 360 623 443 1 +625 339 650 572 1 +380 1 216 88 1 +66 217 491 500 1 +202 504 472 44 1 +536 210 413 554 1 +39 124 297 121 1 +146 514 644 396 1 +573 383 491 316 1 +515 636 355 674 1 +489 723 308 690 1 +21 577 93 401 1 +492 445 688 326 1 +600 445 531 312 1 +168 456 395 248 1 +421 743 512 330 1 +15 225 518 105 1 +396 514 644 654 1 +521 609 477 369 1 +361 573 328 500 1 +751 26 240 431 1 +288 741 176 164 1 +439 558 348 699 1 +331 411 436 480 1 +230 296 120 460 1 +478 369 511 160 1 +569 641 383 435 1 +151 745 576 426 1 +296 56 392 294 1 +185 563 122 474 1 +328 571 341 573 1 +485 682 404 355 1 +439 318 348 558 1 +541 439 318 594 1 +476 470 399 327 1 +157 217 500 87 1 +380 216 630 67 1 +581 633 36 264 1 +462 370 605 742 1 +110 52 529 183 1 +501 363 440 319 1 +200 262 87 464 1 +249 2 436 81 1 +508 4 375 640 1 +99 751 585 533 1 +382 456 450 757 1 +487 550 349 575 1 +626 422 641 322 1 +313 426 524 675 1 +655 528 373 439 1 +575 446 367 719 1 +143 126 412 8 1 +663 658 419 389 1 +45 458 128 155 1 +45 396 136 146 1 +645 175 390 421 1 +485 552 629 379 1 +442 321 358 530 1 +662 596 425 357 1 +460 332 392 562 1 +143 92 404 42 1 +493 169 134 41 1 +590 360 443 651 1 +619 364 526 475 1 +527 54 132 107 1 +519 211 71 403 1 +450 30 205 757 1 +716 614 72 183 1 +564 387 435 322 1 +188 115 57 584 1 +684 498 386 492 1 +511 160 61 155 1 +569 641 435 722 1 +23 513 549 589 1 +81 116 559 170 1 +246 4 640 237 1 +321 685 430 425 1 +185 563 474 363 1 +652 13 377 553 1 +167 404 92 42 1 +633 442 646 345 1 +695 106 570 28 1 +102 493 738 497 1 +494 600 531 312 1 +536 691 424 328 1 +31 390 645 175 1 +318 399 352 470 1 +352 615 519 403 1 +31 632 645 390 1 +530 463 164 38 1 +359 678 477 448 1 +682 331 629 485 1 +573 316 469 637 1 +40 170 249 559 1 +318 439 444 594 1 +649 20 166 184 1 +316 569 491 412 1 +194 478 738 476 1 +527 501 132 650 1 +397 605 306 362 1 +741 567 176 351 1 +430 685 677 314 1 +564 293 209 117 1 +603 740 480 306 1 +407 509 95 551 1 +130 666 273 197 1 +411 749 676 140 1 +324 503 539 393 1 +397 459 605 362 1 +542 617 472 415 1 +333 517 458 576 1 +409 512 613 335 1 +694 522 561 347 1 +23 177 130 589 1 +16 441 285 145 1 +729 693 498 706 1 +148 539 10 668 1 +526 555 308 422 1 +627 583 378 341 1 +369 478 61 160 1 +744 128 592 458 1 +413 691 742 529 1 +489 555 308 723 1 +560 511 45 142 1 +336 548 468 419 1 +206 71 403 721 1 +511 369 458 155 1 +456 432 596 395 1 +350 428 602 619 1 +516 65 106 186 1 +245 588 401 93 1 +481 323 548 419 1 +589 473 549 177 1 +81 397 29 179 1 +308 414 690 626 1 +133 91 398 10 1 +410 356 406 320 1 +277 84 260 620 1 +102 61 270 497 1 +292 233 99 424 1 +113 510 717 537 1 +659 508 59 163 1 +536 210 554 500 1 +461 610 714 398 1 +532 283 576 7 1 +584 115 450 30 1 +382 659 205 450 1 +636 463 457 38 1 +440 688 363 474 1 +180 69 228 656 1 +153 39 211 519 1 +372 505 595 647 1 +534 168 567 395 1 +452 703 414 358 1 +483 309 433 629 1 +636 355 601 457 1 +374 201 540 53 1 +382 596 314 456 1 +753 21 515 674 1 +544 335 513 421 1 +401 629 515 355 1 +198 276 37 556 1 +197 666 510 661 1 +725 547 189 698 1 +461 158 91 255 1 +102 497 271 61 1 +336 481 548 419 1 +672 319 737 507 1 +666 365 510 661 1 +469 438 341 627 1 +558 320 615 403 1 +539 538 148 10 1 +39 715 302 371 1 +372 611 647 310 1 +424 736 585 751 1 +122 535 474 563 1 +165 373 754 108 1 +746 426 524 63 1 +5 200 464 739 1 +385 426 524 746 1 +523 304 561 587 1 +141 705 35 255 1 +9 198 578 400 1 +578 198 556 400 1 +658 323 481 419 1 +587 718 706 342 1 +498 706 386 718 1 +498 718 386 307 1 +745 497 426 151 1 +702 728 499 317 1 +153 715 302 519 1 +314 550 402 454 1 +112 24 131 419 1 +484 728 499 702 1 +149 562 173 459 1 +466 448 710 344 1 +340 602 434 670 1 +617 161 542 74 1 +530 685 358 395 1 +487 349 550 391 1 +499 531 347 445 1 +552 436 331 411 1 +535 78 213 192 1 +405 543 312 375 1 +388 89 585 751 1 +474 363 700 326 1 +506 434 322 595 1 +566 404 92 167 1 +555 522 747 364 1 +395 168 248 14 1 +672 385 423 724 1 +365 323 389 510 1 +744 592 48 517 1 +249 170 81 559 1 +447 587 359 342 1 +695 570 196 28 1 +113 510 537 286 1 +391 584 349 450 1 +232 389 663 510 1 +648 610 142 354 1 +378 462 406 306 1 +606 238 287 76 1 +396 644 458 367 1 +314 550 454 382 1 +376 449 470 327 1 +693 706 507 386 1 +469 438 627 306 1 +375 4 199 697 1 +284 620 267 84 1 +702 556 317 400 1 +33 277 408 501 1 +495 310 611 372 1 +472 377 683 489 1 +493 725 547 134 1 +25 542 366 656 1 +311 455 597 394 1 +590 365 389 473 1 +378 462 437 406 1 +362 559 480 397 1 +591 607 101 608 1 +266 79 200 739 1 +489 329 662 357 1 +602 247 252 70 1 +590 365 473 330 1 +550 659 382 450 1 +391 677 487 324 1 +60 123 467 239 1 +573 316 422 641 1 +542 161 415 228 1 +415 161 44 228 1 +70 252 673 250 1 +354 477 712 369 1 +394 467 604 580 1 +90 250 387 32 1 +90 387 254 32 1 +118 260 83 408 1 +465 676 121 211 1 +594 439 444 343 1 +165 10 207 655 1 +684 695 338 488 1 +203 513 289 421 1 +157 210 536 500 1 +336 467 547 493 1 +318 558 352 427 1 +13 377 553 451 1 +487 677 314 709 1 +497 327 478 369 1 +500 210 554 66 1 +87 262 263 383 1 +618 475 350 647 1 +261 588 482 43 1 +626 641 435 322 1 +459 173 116 251 1 +165 482 588 43 1 +179 397 29 554 1 +619 428 545 317 1 +680 505 195 540 1 +527 501 650 339 1 +706 313 587 359 1 +280 164 463 38 1 +600 445 344 531 1 +335 421 512 513 1 +713 500 491 361 1 +563 700 363 405 1 +674 601 355 485 1 +581 442 646 633 1 +214 279 664 115 1 +258 589 73 661 1 +129 652 377 86 1 +591 669 379 486 1 +739 372 328 424 1 +420 488 338 628 1 +131 468 189 51 1 +77 264 442 234 1 +465 124 121 687 1 +596 358 395 432 1 +702 326 400 499 1 +633 665 36 414 1 +527 132 625 650 1 +686 144 703 452 1 +42 601 404 143 1 +33 408 572 501 1 +530 457 463 38 1 +583 522 341 555 1 +368 492 688 726 1 +377 690 553 340 1 +591 379 139 486 1 +349 503 393 514 1 +168 68 244 456 1 +310 647 618 374 1 +474 700 363 563 1 +369 155 745 576 1 +655 324 373 482 1 +142 354 511 648 1 +437 599 332 462 1 +717 419 537 510 1 +438 462 623 378 1 +615 455 371 311 1 +378 735 623 522 1 +1 182 657 295 1 +532 283 517 576 1 +11 593 150 376 1 +648 158 142 610 1 +79 431 751 240 1 +411 331 552 483 1 +464 262 87 383 1 +521 477 327 369 1 +582 351 677 430 1 +356 627 740 583 1 +443 549 388 330 1 +349 514 446 664 1 +401 520 679 355 1 +185 54 122 563 1 +485 404 167 42 1 +580 419 663 346 1 +638 69 199 181 1 +102 493 271 738 1 +719 572 453 546 1 +684 737 338 695 1 +667 482 503 668 1 +487 582 677 709 1 +486 629 515 401 1 +176 164 463 93 1 +135 546 268 644 1 +382 508 375 640 1 +530 671 395 358 1 +561 522 304 624 1 +662 596 358 425 1 +378 583 522 341 1 +500 464 383 328 1 +629 433 331 682 1 +425 709 314 430 1 +594 586 678 444 1 +5 739 292 266 1 +345 633 722 634 1 +382 375 454 329 1 +630 380 388 443 1 +578 156 243 544 1 +227 566 2 167 1 +381 184 166 65 1 +142 511 160 18 1 +456 68 244 432 1 +404 713 92 491 1 +512 335 631 421 1 +403 320 441 558 1 +410 594 470 447 1 +667 482 668 109 1 +537 381 729 323 1 +545 526 340 619 1 +540 431 647 505 1 +320 362 465 480 1 +658 346 481 437 1 +174 65 490 381 1 +495 372 464 322 1 +576 517 458 7 1 +688 326 518 726 1 +557 467 580 336 1 +723 340 690 545 1 +378 522 623 341 1 +473 177 130 265 1 +466 517 572 367 1 +426 151 270 63 1 +136 19 514 154 1 +512 360 590 429 1 +572 241 408 33 1 +740 637 433 583 1 +658 437 481 651 1 +396 592 128 458 1 +306 627 406 378 1 +290 530 164 38 1 +471 663 606 389 1 +557 376 336 449 1 +449 706 342 587 1 +642 114 432 248 1 +611 310 443 736 1 +593 399 352 721 1 +109 482 165 43 1 +176 588 43 93 1 +483 356 480 740 1 +479 604 460 752 1 +328 372 464 495 1 +449 587 342 359 1 +712 305 396 609 1 +383 641 322 435 1 +187 399 593 721 1 +198 556 400 78 1 +495 611 310 623 1 +554 716 29 413 1 +406 356 480 320 1 +594 359 470 447 1 +517 592 48 367 1 +543 312 357 416 1 +398 318 348 439 1 +666 510 273 197 1 +64 616 196 225 1 +463 530 321 457 1 +681 358 703 452 1 +391 567 677 351 1 +89 388 223 26 1 +202 96 612 504 1 +550 325 454 382 1 +409 522 694 347 1 +428 556 37 708 1 +290 77 530 442 1 +539 324 655 482 1 +614 370 72 562 1 +539 482 655 109 1 +408 532 517 333 1 +89 67 223 630 1 +402 325 550 575 1 +13 299 162 451 1 +506 564 435 322 1 +560 514 393 154 1 +435 209 82 236 1 +591 348 379 669 1 +432 671 358 395 1 +254 32 387 98 1 +136 396 560 514 1 +550 325 402 454 1 +438 742 462 306 1 +563 405 656 366 1 +123 394 291 715 1 +644 367 546 48 1 +356 309 483 541 1 +260 408 724 83 1 +27 452 144 686 1 +606 88 287 238 1 +256 746 186 63 1 +516 184 65 186 1 +386 344 696 561 1 +154 19 664 115 1 +194 478 298 738 1 +511 354 478 648 1 +185 54 363 107 1 +403 558 441 348 1 +459 562 332 479 1 +490 65 516 381 1 +512 360 330 590 1 +652 377 665 553 1 +757 456 30 244 1 +636 520 355 457 1 +321 442 358 568 1 +544 421 203 289 1 +502 641 412 345 1 +183 529 152 52 1 +326 551 407 400 1 +498 729 338 693 1 +91 705 579 133 1 +13 652 222 553 1 +694 307 484 492 1 +489 543 357 416 1 +615 371 406 597 1 +454 598 312 375 1 +650 241 572 33 1 +409 522 475 310 1 +59 659 446 214 1 +396 644 367 575 1 +644 446 367 575 1 +573 328 571 361 1 +133 49 207 528 1 +105 407 509 301 1 +548 323 468 419 1 +666 130 661 197 1 +206 71 721 187 1 +670 299 247 70 1 +384 493 547 134 1 +374 235 201 53 1 +9 578 97 730 1 +218 562 72 173 1 +519 615 676 403 1 +257 671 14 530 1 +352 707 593 721 1 +12 197 286 420 1 +674 601 485 42 1 +180 69 405 181 1 +412 569 491 143 1 +224 426 270 63 1 +633 345 646 634 1 +738 41 271 147 1 +739 536 292 424 1 +17 459 116 734 1 +640 4 504 237 1 +505 79 178 100 1 +665 377 414 553 1 +560 654 393 514 1 +535 366 418 499 1 +180 69 656 405 1 +451 418 337 545 1 +314 550 487 402 1 +611 443 310 623 1 +413 529 536 691 1 +546 659 59 163 1 +206 403 639 427 1 +698 467 725 547 1 +398 324 655 539 1 +438 378 627 306 1 +673 252 117 250 1 +425 357 709 525 1 +384 493 336 547 1 +681 703 144 452 1 +635 435 236 98 1 +125 457 601 126 1 +624 531 304 561 1 +555 502 425 568 1 +645 231 407 31 1 +118 241 517 744 1 +647 505 434 350 1 +426 224 524 63 1 +5 200 739 266 1 +409 475 618 310 1 +201 26 431 100 1 +490 381 516 628 1 +219 632 368 225 1 +462 392 332 370 1 +408 501 620 319 1 +5 536 292 739 1 +654 396 305 575 1 +603 469 740 306 1 +597 622 362 479 1 +661 365 510 420 1 +78 213 221 418 1 +442 502 646 345 1 +327 477 586 478 1 +745 369 576 426 1 +535 326 366 499 1 +409 360 623 613 1 +258 390 73 175 1 +403 639 427 558 1 +187 206 35 427 1 +664 349 503 584 1 +478 18 298 160 1 +320 441 676 403 1 +86 377 414 665 1 +11 376 150 169 1 +366 720 656 542 1 +295 1 496 657 1 +720 415 656 542 1 +744 241 517 48 1 +480 362 465 411 1 +80 168 732 567 1 +456 68 432 248 1 +406 356 447 378 1 +370 459 72 562 1 +338 628 695 516 1 +701 316 412 641 1 +334 643 443 438 1 +135 546 163 268 1 +25 161 542 228 1 +695 338 423 737 1 +585 630 89 388 1 +345 414 633 442 1 +338 488 420 684 1 +123 755 60 467 1 +696 386 507 448 1 +406 356 410 447 1 +226 13 162 451 1 +558 615 352 403 1 +675 369 333 609 1 +136 396 45 560 1 +331 566 485 404 1 +691 611 424 328 1 +421 743 631 512 1 +139 486 379 515 1 +345 633 435 722 1 +649 547 189 20 1 +447 304 653 587 1 +512 421 330 513 1 +84 620 253 260 1 +362 406 480 320 1 +522 623 747 310 1 +449 313 706 359 1 +462 605 406 306 1 +500 383 491 361 1 +563 535 474 366 1 +185 122 208 474 1 +677 582 487 324 1 +141 399 427 461 1 +149 479 460 562 1 +334 611 443 736 1 +527 363 339 598 1 +320 411 676 441 1 +754 655 207 373 1 +663 346 419 658 1 +411 749 465 676 1 +379 515 629 485 1 +411 140 676 441 1 +160 511 45 155 1 +513 85 621 235 1 +307 484 631 512 1 +646 701 412 345 1 +245 401 21 93 1 +465 749 121 676 1 +519 676 465 211 1 +520 637 316 502 1 +417 350 428 680 1 +519 403 676 211 1 +684 390 711 307 1 +601 412 404 143 1 +513 23 289 421 1 +498 507 338 386 1 +123 239 190 467 1 +12 259 488 628 1 +328 495 438 611 1 +631 407 484 726 1 +497 369 426 521 1 +432 671 395 248 1 +245 43 588 93 1 +496 216 630 380 1 +202 96 504 44 1 +504 96 4 171 1 +156 731 730 53 1 +437 597 311 406 1 +425 662 357 555 1 +151 745 278 576 1 +383 573 322 641 1 +34 112 273 510 1 +420 729 498 323 1 +741 351 588 463 1 +743 365 590 330 1 +66 500 491 713 1 +434 252 117 673 1 +686 703 36 414 1 +589 743 421 330 1 +411 552 379 483 1 +388 330 549 374 1 +618 409 335 702 1 +573 571 341 469 1 +197 420 510 113 1 +154 664 503 584 1 +366 418 542 535 1 +375 638 697 199 1 +556 276 418 78 1 +367 517 572 48 1 +584 115 664 450 1 +227 485 167 103 1 +537 381 628 729 1 +512 590 330 429 1 +475 647 434 350 1 +135 546 59 163 1 +139 486 21 108 1 +469 573 571 361 1 +499 484 326 445 1 +462 332 406 605 1 +554 397 716 413 1 +678 402 710 523 1 +415 228 44 171 1 +661 269 73 733 1 +78 400 535 556 1 +683 542 337 74 1 +526 723 308 555 1 +459 479 362 622 1 +496 242 152 529 1 +353 555 583 637 1 +81 116 29 397 1 +477 359 327 586 1 +560 396 654 514 1 +406 371 320 362 1 +563 54 527 363 1 +258 130 73 589 1 +75 243 156 544 1 +450 456 30 757 1 +493 134 384 102 1 +633 414 36 703 1 +488 695 616 368 1 +641 626 502 422 1 +397 436 179 81 1 +458 128 155 7 1 +277 107 284 501 1 +217 383 491 500 1 +392 332 370 562 1 +548 693 729 706 1 +539 538 393 148 1 +436 2 179 81 1 +493 376 150 476 1 +640 432 612 382 1 +154 19 514 664 1 +320 480 465 411 1 +188 115 584 30 1 +384 521 313 449 1 +420 729 338 498 1 +99 89 751 533 1 +423 385 338 516 1 +411 40 465 749 1 +585 242 496 529 1 +336 649 548 384 1 +698 468 189 131 1 +488 390 711 684 1 +375 405 598 312 1 +443 380 549 330 1 +63 151 193 746 1 +277 620 260 408 1 +492 484 445 326 1 +640 382 692 432 1 +425 358 395 596 1 +99 585 751 424 1 +559 436 603 397 1 +462 370 332 605 1 +373 669 486 401 1 +125 636 601 457 1 +596 382 454 329 1 +591 486 139 49 1 +79 431 240 100 1 +75 231 243 645 1 +42 126 601 143 1 +347 484 694 409 1 +143 569 204 8 1 +400 191 535 551 1 +721 519 71 403 1 +480 603 306 397 1 +17 149 173 459 1 +536 110 233 413 1 +393 503 148 154 1 +523 748 343 402 1 +464 303 87 200 1 +110 529 413 183 1 +410 615 352 558 1 +392 295 294 218 1 +466 448 507 333 1 +182 295 294 392 1 +520 353 502 321 1 +1 238 88 380 1 +440 616 368 518 1 +125 601 42 126 1 +731 374 335 618 1 +408 241 118 33 1 +692 212 432 68 1 +594 410 318 541 1 +214 659 446 664 1 +725 134 189 547 1 +158 91 610 461 1 +488 711 420 684 1 +405 69 638 181 1 +203 23 289 513 1 +677 567 391 456 1 +311 376 455 394 1 +514 503 393 154 1 +614 295 152 496 1 +245 43 108 588 1 +75 544 156 203 1 +557 481 437 750 1 +370 251 72 459 1 +334 462 643 438 1 +371 362 465 320 1 +372 736 431 647 1 +47 136 560 154 1 +724 256 253 83 1 +605 332 362 459 1 +468 649 166 381 1 +311 376 557 449 1 +670 602 673 70 1 +456 432 395 248 1 +546 325 508 453 1 +206 721 403 427 1 +189 20 166 649 1 +384 649 524 224 1 +583 624 522 555 1 +323 729 498 548 1 +207 528 754 373 1 +318 398 461 714 1 +206 721 427 187 1 +406 627 306 740 1 +589 177 130 473 1 +5 303 464 200 1 +223 621 85 201 1 +530 442 321 457 1 +23 589 549 177 1 +508 4 172 199 1 +550 325 446 575 1 +383 569 3 491 1 +391 677 314 487 1 +498 684 420 711 1 +575 654 446 349 1 +578 335 702 417 1 +403 211 71 206 1 +565 232 76 663 1 +232 663 565 112 1 +614 392 496 643 1 +306 603 571 397 1 +499 312 531 445 1 +15 518 208 105 1 +625 94 163 546 1 +531 357 454 312 1 +334 585 496 529 1 +520 433 316 637 1 +150 215 62 593 1 +415 472 504 44 1 +670 708 162 451 1 +290 234 530 38 1 +328 438 495 341 1 +643 657 392 496 1 +209 564 435 506 1 +673 564 250 117 1 +486 629 379 515 1 +446 659 59 546 1 +426 521 675 313 1 +605 406 306 480 1 +246 4 508 640 1 +391 503 324 487 1 +393 487 324 503 1 +277 408 501 620 1 +60 725 189 698 1 +272 104 646 574 1 +137 2 436 249 1 +526 340 723 545 1 +416 545 723 489 1 +407 231 301 31 1 +113 420 510 286 1 +452 612 432 329 1 +537 174 282 286 1 +316 641 502 422 1 +33 277 260 408 1 +693 729 338 516 1 +604 580 346 557 1 +401 520 355 636 1 +353 660 430 520 1 +509 407 95 301 1 +471 296 460 392 1 +230 460 471 296 1 +343 660 709 525 1 +327 738 497 478 1 +219 616 64 225 1 +40 411 137 140 1 +77 671 530 442 1 +451 377 553 340 1 +97 556 37 680 1 +627 637 740 583 1 +226 617 683 74 1 +13 553 222 451 1 +413 691 571 742 1 +408 600 466 339 1 +610 560 142 354 1 +147 478 298 160 1 +518 440 185 474 1 +187 399 62 593 1 +280 93 577 463 1 +350 505 434 602 1 +547 20 649 384 1 +489 357 308 555 1 +383 573 328 495 1 +555 422 502 308 1 +329 504 375 543 1 +657 471 643 392 1 +228 69 171 415 1 +543 504 375 415 1 +217 263 491 383 1 +644 514 446 654 1 +688 326 363 474 1 +350 602 434 619 1 +340 428 545 619 1 +340 619 526 434 1 +619 428 602 340 1 +707 721 62 593 1 +721 187 62 593 1 +153 519 211 71 1 +618 731 540 417 1 +425 353 430 321 1 +384 521 426 313 1 +654 575 305 487 1 +434 602 252 673 1 +543 312 416 720 1 +562 459 72 173 1 +384 493 497 738 1 +589 330 549 473 1 +665 686 36 414 1 +389 429 323 365 1 +400 499 418 317 1 +638 625 527 181 1 +559 603 480 397 1 +308 489 662 357 1 +393 654 560 712 1 +638 625 453 527 1 +157 303 536 5 1 +452 489 472 329 1 +663 232 76 606 1 +696 531 561 344 1 +662 329 596 357 1 +12 197 420 269 1 +369 511 61 155 1 +646 234 457 442 1 +646 104 234 442 1 +77 703 671 442 1 +684 307 498 492 1 +472 129 44 617 1 +565 663 419 112 1 +425 596 395 685 1 +386 696 347 561 1 +720 418 542 366 1 +452 377 472 489 1 +394 604 346 557 1 +604 580 24 346 1 +423 196 253 28 1 +84 196 253 423 1 +621 513 549 85 1 +223 621 549 85 1 +431 621 26 201 1 +374 431 647 540 1 +46 715 274 127 1 +292 424 99 266 1 +406 356 627 740 1 +629 433 355 520 1 +309 433 629 520 1 +540 680 350 417 1 +530 234 457 38 1 +290 234 442 530 1 +629 515 355 485 1 +685 358 395 425 1 +321 358 685 425 1 +353 555 637 422 1 +351 463 685 679 1 +583 624 555 525 1 +615 320 676 403 1 +654 514 446 349 1 +583 627 637 341 1 +425 685 430 314 1 +528 639 398 133 1 +498 307 386 492 1 +693 675 524 385 1 +559 116 459 170 1 +141 187 35 427 1 +483 433 331 629 1 +682 469 316 637 1 +553 690 673 340 1 +545 340 690 377 1 +37 159 428 247 1 +331 436 566 603 1 +671 358 530 442 1 +553 387 673 690 1 +525 709 343 402 1 +736 388 585 751 1 +376 557 394 311 1 +751 89 240 26 1 +620 423 616 84 1 +25 535 542 192 1 +68 642 432 248 1 +546 94 163 268 1 +493 41 271 738 1 +504 96 612 237 1 +507 385 675 693 1 +586 399 470 327 1 +752 394 346 557 1 +483 356 740 433 1 +516 381 524 693 1 +313 675 524 693 1 +372 79 178 505 1 +372 79 505 431 1 +22 100 195 505 1 +406 371 362 597 1 +597 394 557 311 1 +311 455 371 597 1 +6 172 453 163 1 +22 505 178 100 1 +573 422 322 641 1 +391 503 349 584 1 +638 69 697 199 1 +415 504 375 697 1 +493 476 738 327 1 +697 4 199 171 1 +27 612 642 452 1 +554 436 179 397 1 +671 395 248 14 1 +603 436 554 397 1 +571 397 603 554 1 +741 395 567 351 1 +337 451 683 74 1 +567 741 534 395 1 +683 377 451 337 1 +559 436 480 603 1 +603 436 566 361 1 +480 331 603 436 1 +324 398 714 539 1 +697 504 4 171 1 +379 483 331 629 1 +437 481 342 750 1 +694 484 512 409 1 +229 2 179 436 1 +567 168 456 395 1 +23 549 220 177 1 +472 612 452 329 1 +612 432 329 382 1 +334 496 630 643 1 +432 382 692 244 1 +433 583 637 353 1 +403 441 676 16 1 +367 644 592 48 1 +133 398 528 655 1 +280 164 93 463 1 +390 589 421 258 1 +222 299 553 670 1 +370 716 72 251 1 +15 267 440 225 1 +617 161 44 415 1 +15 440 267 284 1 +621 549 513 374 1 +542 161 617 415 1 +437 752 346 557 1 +355 682 629 485 1 +310 372 495 647 1 +540 647 350 505 1 +484 347 499 728 1 +728 416 347 499 1 +728 624 347 416 1 +709 660 430 525 1 +647 372 495 475 1 +621 223 26 201 1 +516 729 338 628 1 +284 440 267 620 1 +647 372 505 431 1 +690 414 553 387 1 +690 387 673 340 1 +705 427 35 639 1 +680 556 37 428 1 +662 308 357 555 1 +569 204 3 143 1 +491 569 3 143 1 +494 531 454 312 1 +485 601 404 42 1 +444 439 324 343 1 +506 595 322 372 1 +715 138 274 127 1 +479 138 274 715 1 +478 147 61 160 1 +578 417 97 730 1 +637 422 502 353 1 +515 636 401 355 1 +405 697 415 375 1 +550 325 382 659 1 +701 412 316 404 1 +86 377 665 652 1 +288 14 534 741 1 +660 583 433 353 1 +135 214 59 446 1 +726 390 407 632 1 +683 617 542 74 1 +162 281 226 451 1 +451 281 226 74 1 +13 299 451 222 1 +446 19 135 214 1 +165 655 754 373 1 +553 90 222 250 1 +645 632 407 390 1 +641 345 502 626 1 +237 612 504 640 1 +529 152 614 183 1 +471 392 599 315 1 +466 600 344 494 1 +348 441 607 591 1 +339 600 466 494 1 +599 346 658 437 1 +441 607 591 145 1 +598 600 494 312 1 +441 16 607 145 1 +486 49 528 754 1 +140 50 285 552 1 +583 353 660 525 1 +205 279 30 450 1 +450 279 30 115 1 +15 440 727 518 1 +646 321 457 502 1 +652 553 665 90 1 +665 553 414 90 1 +660 353 433 520 1 +309 660 433 520 1 +639 705 398 133 1 +568 308 662 425 1 +512 360 613 330 1 +614 643 496 334 1 +613 360 443 330 1 +388 443 330 613 1 +27 202 452 86 1 +202 129 452 86 1 +452 129 377 86 1 +640 612 329 382 1 +314 487 550 391 1 +628 106 695 516 1 +314 550 456 391 1 +451 670 340 553 1 +639 591 101 608 1 +206 403 101 639 1 +651 378 437 342 1 +528 101 639 133 1 +206 101 579 639 1 +679 520 629 355 1 +11 455 153 215 1 +422 637 573 341 1 +417 618 335 702 1 +31 632 733 119 1 +733 632 390 119 1 +484 335 631 512 1 +639 579 705 133 1 +398 705 91 133 1 +84 616 196 423 1 +437 332 597 406 1 +712 609 396 458 1 +440 423 616 620 1 +642 432 114 671 1 +125 38 457 126 1 +272 457 38 126 1 +272 234 38 457 1 +465 687 121 749 1 +406 740 306 480 1 +200 262 464 58 1 +731 618 335 417 1 +386 694 347 492 1 +663 232 606 389 1 +483 480 331 740 1 +420 174 537 286 1 +573 637 469 341 1 +739 424 292 266 1 +614 496 152 529 1 +47 560 393 154 1 +47 136 142 560 1 +378 735 342 651 1 +389 323 658 419 1 +389 658 323 429 1 +394 580 604 557 1 +315 599 658 437 1 +122 25 563 180 1 +185 54 563 363 1 +325 710 719 575 1 +715 46 291 127 1 +380 88 606 238 1 +511 478 160 648 1 +277 620 284 84 1 +405 415 543 375 1 +1 657 380 496 1 +563 25 192 366 1 +657 182 392 295 1 +54 180 122 563 1 +295 657 496 392 1 +12 488 420 628 1 +232 606 287 76 1 +362 480 306 397 1 +190 580 24 604 1 +502 701 412 641 1 +539 503 148 393 1 +523 304 344 561 1 +601 457 701 412 1 +489 308 662 377 1 +633 646 581 634 1 +255 35 91 705 1 +23 130 258 589 1 +589 23 289 258 1 +421 589 289 258 1 +555 568 425 308 1 +453 625 163 546 1 +416 531 347 499 1 +462 742 605 306 1 +321 502 442 568 1 +149 56 173 562 1 +39 465 297 124 1 +39 124 121 465 1 +438 462 443 623 1 +560 511 142 354 1 +741 685 530 395 1 +518 474 185 208 1 +601 126 457 412 1 +669 309 679 582 1 +376 455 394 467 1 +467 455 394 123 1 +467 394 291 123 1 +190 467 291 123 1 +605 332 406 362 1 +704 756 95 551 1 +9 756 400 578 1 +756 551 191 400 1 +704 551 191 756 1 +756 407 95 551 1 +439 582 324 343 1 +737 696 319 492 1 +595 505 434 647 1 +452 129 683 377 1 +452 683 472 377 1 +129 683 377 652 1 +683 377 337 489 1 +531 696 347 445 1 +410 470 311 447 1 +447 470 311 449 1 +376 311 470 449 1 +135 644 268 48 1 +403 441 607 348 1 +481 651 429 658 1 +182 296 471 392 1 +145 139 608 49 1 +403 16 607 441 1 +450 659 446 550 1 +227 485 566 167 1 +227 552 566 485 1 +552 566 485 331 1 +2 566 92 167 1 +230 346 471 460 1 +714 444 439 324 1 +456 596 314 395 1 +550 450 456 391 1 +380 473 88 177 1 +473 265 88 177 1 +206 607 101 403 1 +206 16 607 403 1 +188 80 391 667 1 +313 384 649 524 1 +521 448 477 609 1 +486 49 591 528 1 +591 145 608 49 1 +382 375 329 640 1 +674 125 577 636 1 +616 225 368 518 1 +531 344 696 445 1 +696 492 445 319 1 +708 556 37 221 1 +197 510 273 113 1 +615 371 320 406 1 +363 527 501 107 1 +494 402 325 454 1 +720 542 337 415 1 +458 155 576 7 1 +720 415 543 405 1 +720 543 312 405 1 +747 364 522 475 1 +109 655 165 482 1 +599 392 332 462 1 +150 476 194 41 1 +150 476 62 194 1 +476 399 62 194 1 +495 438 611 623 1 +318 594 586 470 1 +460 392 332 599 1 +376 470 476 327 1 +588 582 679 351 1 +92 713 229 66 1 +371 302 622 715 1 +430 520 309 679 1 +587 561 344 386 1 +712 369 609 458 1 +327 477 478 369 1 +511 369 712 458 1 +511 712 396 458 1 +634 722 635 98 1 +476 399 478 327 1 +649 20 184 224 1 +536 739 328 424 1 +384 20 649 224 1 +381 649 166 184 1 +336 468 548 649 1 +378 623 438 341 1 +17 275 459 479 1 +459 149 479 275 1 +149 275 274 479 1 +479 275 274 138 1 +716 413 370 529 1 +183 413 716 529 1 +716 183 29 413 1 +370 459 397 716 1 +554 397 29 716 1 +370 614 72 716 1 +459 116 397 716 1 +716 529 614 183 1 +605 332 459 370 1 +512 429 330 743 1 +46 149 274 479 1 +549 177 380 67 1 +549 513 220 85 1 +654 487 305 444 1 +388 613 330 374 1 +512 513 330 613 1 +331 483 411 480 1 +483 320 411 480 1 +320 356 480 483 1 +176 741 588 463 1 +700 445 499 326 1 +188 732 391 80 1 +441 411 483 320 1 +616 695 196 423 1 +550 450 382 456 1 +314 550 382 456 1 +261 351 43 567 1 +567 351 43 176 1 +567 391 482 351 1 +77 671 257 530 1 +653 525 343 523 1 +711 661 743 390 1 +223 630 549 388 1 +430 679 309 582 1 +387 90 553 250 1 +661 197 73 269 1 +257 671 248 14 1 +103 674 515 485 1 +500 554 571 361 1 +678 402 305 710 1 +674 636 355 601 1 +517 458 592 367 1 +631 421 645 390 1 +736 310 443 613 1 +6 625 638 181 1 +12 628 286 174 1 +324 487 444 343 1 +393 444 324 487 1 +356 583 447 378 1 +474 55 551 535 1 +12 259 269 488 1 +269 488 259 119 1 +488 119 64 259 1 +219 119 64 488 1 +581 254 36 633 1 +568 662 358 425 1 +419 510 663 389 1 +706 313 507 386 1 +702 326 407 400 1 +544 513 203 421 1 +156 203 544 235 1 +75 175 231 645 1 +324 714 393 539 1 +33 277 501 107 1 +444 714 393 324 1 +444 714 354 393 1 +683 13 451 377 1 +316 491 404 412 1 +404 412 491 143 1 +143 92 491 404 1 +398 714 439 324 1 +398 538 714 539 1 +493 476 150 41 1 +169 493 150 41 1 +169 376 150 493 1 +376 169 467 493 1 +722 641 435 345 1 +384 449 313 548 1 +376 467 336 493 1 +449 376 336 493 1 +449 493 336 384 1 +327 493 449 384 1 +327 376 449 493 1 +444 354 712 393 1 +102 41 271 493 1 +576 155 278 7 1 +151 576 278 7 1 +576 151 193 7 1 +637 353 502 520 1 +111 382 757 244 1 +612 96 212 237 1 +202 504 612 472 1 +202 612 452 472 1 +472 504 612 329 1 +494 710 402 748 1 +304 748 523 344 1 +561 531 748 344 1 +561 531 304 748 1 +574 412 126 8 1 +644 546 268 48 1 +295 1 152 496 1 +496 1 152 242 1 +242 1 216 496 1 +318 399 470 586 1 +322 595 434 475 1 +318 586 461 399 1 +524 649 184 224 1 +410 615 320 406 1 +555 624 522 364 1 +583 304 522 624 1 +497 384 426 224 1 +497 426 270 224 1 +102 497 270 224 1 +102 384 497 224 1 +739 79 200 372 1 +464 200 372 739 1 +536 464 328 739 1 +464 372 328 739 1 +581 442 104 646 1 +403 721 352 427 1 +601 412 701 404 1 +626 345 502 568 1 +686 703 414 452 1 +500 263 383 87 1 +500 464 87 383 1 +500 303 87 464 1 +323 718 498 429 1 +419 537 468 51 1 +113 537 282 286 1 +51 537 166 174 1 +157 210 500 66 1 +157 303 87 500 1 +217 263 383 500 1 +409 728 522 347 1 +542 415 656 228 1 +398 348 528 439 1 +25 656 563 180 1 +433 469 682 637 1 +180 405 656 563 1 +322 573 383 495 1 +156 235 731 53 1 +638 405 181 527 1 +521 327 497 369 1 +610 538 47 393 1 +449 521 313 359 1 +353 502 321 425 1 +393 487 503 349 1 +391 349 503 487 1 +737 319 688 492 1 +233 585 99 424 1 +479 394 604 752 1 +529 585 233 424 1 +139 21 486 515 1 +401 486 21 515 1 +39 519 465 211 1 +237 96 4 504 1 +335 513 512 613 1 +335 513 613 374 1 +640 375 329 504 1 +613 513 330 374 1 +409 360 613 512 1 +372 464 322 506 1 +383 506 322 464 1 +383 262 506 464 1 +383 262 263 506 1 +506 262 263 82 1 +383 506 263 82 1 +435 506 383 82 1 +209 506 435 82 1 +209 262 506 82 1 +664 659 446 450 1 +154 514 503 664 1 +664 19 446 214 1 +435 506 322 383 1 +384 738 497 327 1 +673 602 252 70 1 +356 660 541 653 1 +660 525 343 653 1 +660 309 582 430 1 +726 684 632 368 1 +453 508 375 325 1 +508 375 325 454 1 +382 508 325 454 1 +382 375 508 454 1 +204 435 82 635 1 +508 172 163 453 1 +59 172 163 508 1 +518 407 632 726 1 +660 430 582 343 1 +59 246 172 508 1 +420 365 510 323 1 +425 308 662 555 1 +584 503 57 667 1 +188 584 57 667 1 +261 391 667 482 1 +391 482 503 667 1 +700 600 312 445 1 +232 389 510 34 1 +478 369 354 511 1 +715 455 127 123 1 +411 40 749 140 1 +640 4 697 504 1 +338 695 423 516 1 +738 478 298 147 1 +478 738 497 147 1 +423 695 196 28 1 +516 695 423 28 1 +219 632 64 368 1 +632 488 64 368 1 +219 518 632 225 1 +105 518 632 219 1 +340 428 451 545 1 +597 371 622 479 1 +203 85 513 235 1 +337 545 416 489 1 +707 187 62 721 1 +532 256 724 83 1 +721 71 707 187 1 +622 302 297 138 1 +622 300 297 124 1 +522 341 747 623 1 +532 576 193 7 1 +560 610 47 393 1 +223 67 549 630 1 +328 691 571 413 1 +587 386 313 706 1 +425 525 430 353 1 +25 542 213 192 1 +704 756 191 400 1 +150 593 62 476 1 +11 215 150 593 1 +399 476 62 593 1 +118 241 408 517 1 +453 638 527 598 1 +561 748 304 344 1 +547 134 189 20 1 +466 408 339 517 1 +333 408 466 517 1 +522 728 624 347 1 +15 225 440 518 1 +472 617 44 415 1 +89 630 223 388 1 +77 689 257 671 1 +442 633 581 264 1 +459 116 716 251 1 +716 116 29 251 1 +370 459 716 251 1 +39 153 302 519 1 +637 555 341 422 1 +730 731 417 540 1 +195 159 680 97 1 +258 661 73 390 1 +258 589 661 390 1 +6 199 181 638 1 +521 327 477 359 1 +449 327 521 359 1 +384 327 521 449 1 +384 327 497 521 1 +497 521 426 384 1 +562 479 460 332 1 +422 316 573 637 1 +548 381 729 693 1 +556 400 535 418 1 +562 332 370 459 1 +494 531 748 454 1 +672 507 423 385 1 +556 276 37 221 1 +627 356 406 378 1 +56 562 218 173 1 +648 478 160 18 1 +322 372 595 475 1 +373 582 679 588 1 +401 679 629 355 1 +186 385 516 524 1 +186 516 184 524 1 +524 184 65 516 1 +381 524 65 516 1 +381 184 65 524 1 +572 339 650 501 1 +678 523 710 448 1 +325 494 710 402 1 +676 749 121 140 1 +542 535 213 192 1 +556 418 317 400 1 +25 366 542 535 1 +31 645 231 175 1 +361 573 491 316 1 +473 365 743 330 1 +181 54 132 527 1 +308 626 502 568 1 +639 101 579 133 1 +403 607 101 639 1 +181 54 527 405 1 +308 568 414 626 1 +390 743 421 589 1 +489 545 690 377 1 +362 605 306 480 1 +133 528 101 49 1 +396 146 128 592 1 +644 19 664 514 1 +567 395 314 677 1 +110 529 233 413 1 +468 537 166 51 1 +6 625 453 638 1 +568 442 414 345 1 +692 612 212 237 1 +642 612 432 452 1 +110 52 233 529 1 +86 686 414 452 1 +384 493 738 327 1 +408 319 672 466 1 +467 169 60 725 1 +290 77 257 530 1 +290 530 257 164 1 +288 257 530 164 1 +397 742 306 605 1 +691 334 438 742 1 +27 452 686 86 1 +413 742 370 529 1 +672 507 333 466 1 +288 257 14 530 1 +408 672 333 466 1 +416 312 531 499 1 +625 94 453 572 1 +418 276 556 221 1 +429 360 590 651 1 +339 625 453 572 1 +625 132 527 181 1 +698 467 60 725 1 +83 283 408 532 1 +408 283 118 532 1 +532 283 118 517 1 +408 532 118 517 1 +83 193 283 532 1 +83 256 193 532 1 +223 388 549 621 1 +316 422 502 637 1 +555 522 341 747 1 +586 477 354 478 1 +534 168 395 14 1 +568 345 502 442 1 +25 366 535 192 1 +122 192 474 535 1 +474 192 55 535 1 +535 191 192 55 1 +227 552 485 103 1 +411 552 137 140 1 +678 359 523 448 1 +78 191 535 400 1 +78 191 192 535 1 +454 312 357 543 1 +454 375 312 543 1 +413 529 233 536 1 +5 110 233 536 1 +5 233 292 536 1 +157 303 500 536 1 +500 303 464 536 1 +510 323 537 420 1 +473 177 380 549 1 +468 381 166 537 1 +419 323 468 537 1 +419 537 510 323 1 +323 706 718 429 1 +706 718 429 481 1 +718 342 429 481 1 +718 694 386 307 1 +537 51 282 174 1 +486 669 379 629 1 +379 669 483 629 1 +398 91 538 539 1 +25 542 656 228 1 +228 69 415 656 1 +377 340 451 545 1 +201 431 374 540 1 +399 648 478 586 1 +648 141 461 399 1 +540 431 505 100 1 +201 431 540 100 1 +595 293 506 564 1 +595 293 564 117 1 +397 116 459 559 1 +559 459 362 170 1 +515 674 355 485 1 +589 130 73 661 1 +661 390 488 119 1 +595 178 117 22 1 +505 178 595 22 1 +434 595 564 117 1 +661 130 73 197 1 +418 451 337 542 1 +80 732 391 567 1 +442 414 633 703 1 +618 613 374 335 1 +337 542 472 415 1 +519 721 707 352 1 +380 606 643 657 1 +472 504 543 415 1 +472 504 329 543 1 +472 489 543 329 1 +329 543 357 489 1 +329 454 357 543 1 +472 489 337 543 1 +732 584 456 30 1 +456 168 732 244 1 +456 732 30 244 1 +111 246 640 237 1 +111 246 382 640 1 +619 602 434 340 1 +335 513 374 544 1 +260 724 253 83 1 +691 334 424 611 1 +377 545 451 337 1 +377 489 545 337 1 +356 660 653 583 1 +660 309 430 520 1 +135 446 59 546 1 +748 525 343 402 1 +102 134 384 547 1 +102 547 384 20 1 +102 134 547 20 1 +572 501 650 33 1 +468 548 381 537 1 +548 323 381 537 1 +468 323 548 537 1 +9 578 730 156 1 +223 549 220 85 1 +223 67 220 549 1 +23 513 220 549 1 +590 360 330 443 1 +590 380 443 330 1 +443 380 388 549 1 +746 151 193 576 1 +450 550 446 349 1 +660 353 430 525 1 +474 535 551 326 1 +326 535 551 400 1 +518 474 551 326 1 +551 208 474 518 1 +509 208 551 518 1 +105 509 551 518 1 +105 551 407 518 1 +105 509 407 551 1 +55 208 551 509 1 +551 55 509 191 1 +55 208 474 551 1 +441 552 285 379 1 +411 552 441 379 1 +140 411 552 441 1 +140 552 285 441 1 +207 528 49 754 1 +485 552 379 515 1 +571 742 397 413 1 +691 334 742 529 1 +594 653 343 523 1 +447 653 523 587 1 +229 436 179 554 1 +398 538 610 714 1 +230 346 604 24 1 +387 626 345 435 1 +337 720 545 418 1 +572 94 453 546 1 +28 256 724 186 1 +724 256 385 186 1 +425 357 525 555 1 +425 555 525 353 1 +353 502 425 555 1 +353 422 502 555 1 +584 450 391 456 1 +523 748 710 344 1 +526 364 555 422 1 +494 710 748 344 1 +206 579 35 639 1 +390 661 733 119 1 +661 269 733 119 1 +97 198 556 417 1 +690 414 387 626 1 +417 428 317 556 1 +428 418 317 556 1 +690 414 377 553 1 +97 198 37 556 1 +563 366 700 405 1 +474 366 700 563 1 +187 399 721 427 1 +721 399 352 427 1 +688 700 363 326 1 +616 267 196 225 1 +352 558 470 410 1 +558 318 470 410 1 +541 318 558 410 1 +474 700 366 326 1 +352 318 470 558 1 +249 411 559 436 1 +436 411 559 480 1 +559 411 362 480 1 +411 362 465 559 1 +440 518 688 474 1 +518 326 688 474 1 +411 559 465 40 1 +411 40 249 559 1 +560 136 514 154 1 +328 611 424 372 1 +142 648 511 18 1 +616 695 423 737 1 +623 443 360 651 1 +597 752 394 479 1 +666 130 589 661 1 +165 588 108 43 1 +149 56 562 460 1 +56 562 460 296 1 +562 392 460 296 1 +56 392 562 296 1 +56 392 294 562 1 +562 392 294 218 1 +56 562 294 218 1 +311 615 406 597 1 +410 320 615 558 1 +563 192 535 366 1 +122 192 535 563 1 +122 25 192 563 1 +563 54 180 405 1 +405 54 527 563 1 +209 32 236 564 1 +564 32 236 387 1 +435 564 236 387 1 +209 564 236 435 1 +506 293 209 564 1 +596 454 314 357 1 +506 564 322 434 1 +683 451 226 74 1 +566 137 2 436 1 +552 137 566 436 1 +227 137 566 552 1 +227 137 2 566 1 +261 567 43 176 1 +261 534 567 176 1 +742 462 370 334 1 +438 462 742 334 1 +571 438 306 742 1 +742 334 370 529 1 +261 80 567 534 1 +80 168 567 534 1 +261 80 391 567 1 +261 391 482 567 1 +642 432 358 452 1 +435 383 569 82 1 +569 383 263 82 1 +204 569 263 82 1 +204 435 569 82 1 +204 569 3 263 1 +569 383 3 263 1 +316 383 491 569 1 +485 552 331 629 1 +629 552 331 379 1 +571 397 554 413 1 +500 413 571 554 1 +536 413 571 500 1 +536 571 328 500 1 +536 413 328 571 1 +692 382 111 244 1 +589 743 661 390 1 +571 438 469 306 1 +571 438 341 469 1 +340 670 428 602 1 +328 438 341 571 1 +517 241 572 48 1 +572 241 268 48 1 +546 572 268 48 1 +546 367 572 48 1 +572 94 546 268 1 +241 94 572 268 1 +408 241 572 517 1 +408 572 339 517 1 +466 517 339 572 1 +573 383 328 500 1 +361 383 573 500 1 +361 383 491 573 1 +680 505 602 22 1 +498 684 711 307 1 +498 711 429 307 1 +396 575 367 305 1 +133 398 655 10 1 +398 528 655 439 1 +31 632 407 645 1 +757 382 205 450 1 +532 256 193 746 1 +746 576 193 532 1 +63 151 746 426 1 +369 155 576 458 1 +186 746 524 63 1 +433 353 637 520 1 +578 556 417 400 1 +568 358 414 703 1 +581 646 104 634 1 +578 198 417 556 1 +578 198 97 417 1 +730 578 417 731 1 +156 731 578 730 1 +9 156 243 578 1 +91 35 579 705 1 +9 198 97 578 1 +541 410 558 699 1 +356 699 410 541 1 +669 439 348 699 1 +558 699 441 348 1 +580 131 24 419 1 +239 131 24 580 1 +190 239 24 580 1 +467 239 190 580 1 +362 406 605 480 1 +394 467 580 557 1 +699 379 348 669 1 +441 699 379 348 1 +309 541 699 483 1 +336 419 580 481 1 +580 419 346 481 1 +710 523 344 448 1 +678 586 477 444 1 +678 444 477 305 1 +390 711 307 631 1 +118 744 517 7 1 +97 556 680 417 1 +494 339 719 466 1 +453 527 625 339 1 +346 460 752 599 1 +239 698 131 580 1 +698 336 468 419 1 +560 712 511 354 1 +349 575 654 487 1 +600 319 696 445 1 +375 638 453 598 1 +453 508 638 375 1 +12 628 174 490 1 +628 420 286 174 1 +154 503 57 584 1 +139 379 50 753 1 +139 379 753 515 1 +368 737 688 492 1 +437 597 752 557 1 +597 332 752 479 1 +597 394 752 557 1 +425 596 685 314 1 +501 107 727 363 1 +533 242 89 585 1 +332 597 752 437 1 +233 533 99 585 1 +585 52 233 533 1 +533 242 585 52 1 +585 242 529 52 1 +529 52 233 585 1 +479 752 460 332 1 +359 448 313 587 1 +691 438 571 742 1 +588 351 401 463 1 +159 428 602 680 1 +482 582 588 351 1 +261 351 482 588 1 +482 582 373 588 1 +22 680 159 602 1 +486 373 401 588 1 +486 588 401 108 1 +245 108 401 588 1 +486 373 588 108 1 +165 373 108 588 1 +165 482 373 588 1 +513 589 421 330 1 +23 589 421 513 1 +421 23 289 589 1 +517 744 458 7 1 +441 591 285 145 1 +145 591 285 139 1 +591 379 285 139 1 +441 379 285 591 1 +441 348 379 591 1 +745 155 278 576 1 +376 593 476 470 1 +476 593 399 470 1 +593 352 399 470 1 +376 352 593 470 1 +455 593 376 352 1 +37 281 708 221 1 +418 556 708 221 1 +221 281 708 74 1 +11 215 593 455 1 +11 593 376 455 1 +221 708 418 74 1 +418 708 451 74 1 +708 281 451 74 1 +412 641 722 345 1 +722 435 635 98 1 +722 633 435 98 1 +644 654 446 575 1 +541 439 594 343 1 +396 654 644 575 1 +566 713 92 404 1 +401 520 636 679 1 +318 594 470 410 1 +351 430 582 679 1 +505 595 434 22 1 +372 178 595 505 1 +372 79 595 178 1 +595 79 200 178 1 +58 595 200 178 1 +58 293 595 178 1 +595 293 117 178 1 +58 293 506 595 1 +595 464 506 58 1 +200 464 595 58 1 +200 464 372 595 1 +372 464 506 595 1 +372 79 200 595 1 +437 597 557 311 1 +485 552 753 103 1 +494 600 344 531 1 +405 363 527 598 1 +446 325 546 719 1 +453 325 375 598 1 +454 325 598 375 1 +454 325 494 598 1 +720 312 416 499 1 +139 21 515 753 1 +346 471 460 599 1 +471 392 460 599 1 +659 325 446 550 1 +405 69 697 638 1 +415 504 697 171 1 +415 69 171 697 1 +408 319 466 600 1 +600 408 319 501 1 +600 501 319 363 1 +339 501 600 363 1 +363 339 598 600 1 +339 600 494 598 1 +339 408 600 501 1 +697 69 171 199 1 +333 672 675 507 1 +675 672 385 507 1 +448 507 333 675 1 +602 252 22 434 1 +159 252 22 602 1 +27 642 681 452 1 +642 671 114 681 1 +642 671 681 358 1 +642 358 681 452 1 +27 681 144 452 1 +159 247 252 602 1 +469 571 603 361 1 +571 603 361 554 1 +361 436 554 603 1 +469 571 306 603 1 +149 604 120 460 1 +604 149 479 460 1 +227 753 552 103 1 +485 552 515 753 1 +46 604 479 394 1 +604 46 291 394 1 +604 394 291 467 1 +190 604 291 467 1 +190 46 291 604 1 +604 46 120 190 1 +149 46 120 604 1 +46 149 479 604 1 +146 644 135 48 1 +606 389 315 471 1 +154 664 584 115 1 +232 389 287 606 1 +188 584 667 391 1 +261 667 109 482 1 +88 606 287 265 1 +88 473 606 265 1 +584 503 667 391 1 +590 389 606 473 1 +590 606 380 473 1 +88 380 606 473 1 +315 606 380 590 1 +315 389 606 590 1 +504 612 329 640 1 +458 609 367 333 1 +367 333 609 466 1 +466 333 609 448 1 +211 676 121 16 1 +211 403 676 16 1 +576 369 609 333 1 +744 128 458 7 1 +367 609 305 466 1 +396 305 367 609 1 +396 609 367 458 1 +404 713 491 361 1 +682 713 404 361 1 +229 713 554 66 1 +682 566 713 361 1 +158 91 538 610 1 +158 538 47 610 1 +158 47 142 610 1 +610 47 142 560 1 +336 547 649 384 1 +684 492 737 368 1 +737 368 695 488 1 +692 432 612 640 1 +465 687 749 40 1 +334 443 611 438 1 +27 612 452 202 1 +27 96 612 202 1 +27 96 212 612 1 +643 496 630 380 1 +525 624 555 357 1 +737 338 423 507 1 +218 614 72 562 1 +218 392 614 562 1 +218 295 614 392 1 +614 295 496 392 1 +218 295 152 614 1 +218 152 72 614 1 +352 615 470 311 1 +615 410 470 311 1 +311 615 410 406 1 +352 410 470 615 1 +352 455 371 615 1 +352 371 519 615 1 +371 615 465 519 1 +371 320 465 615 1 +219 368 616 225 1 +219 368 64 616 1 +64 488 616 368 1 +696 492 347 445 1 +64 570 196 616 1 +84 267 196 616 1 +388 549 621 374 1 +374 388 431 621 1 +350 618 540 417 1 +620 616 267 84 1 +620 501 440 319 1 +732 456 391 567 1 +648 354 478 586 1 +310 613 374 618 1 +310 613 618 409 1 +409 613 618 335 1 +619 350 475 434 1 +619 475 350 618 1 +350 618 417 619 1 +619 618 417 317 1 +417 317 428 619 1 +417 619 428 350 1 +317 619 618 409 1 +619 475 618 409 1 +548 729 498 706 1 +693 381 729 516 1 +277 501 284 620 1 +673 299 670 70 1 +222 299 673 70 1 +250 222 673 70 1 +467 169 725 493 1 +84 423 253 620 1 +388 223 26 621 1 +735 360 623 522 1 +17 275 622 300 1 +138 300 622 275 1 +138 622 479 275 1 +17 275 479 622 1 +17 479 459 622 1 +651 735 718 360 1 +735 561 360 522 1 +362 622 371 465 1 +39 371 622 465 1 +39 622 297 465 1 +39 302 297 622 1 +39 302 622 371 1 +597 371 362 622 1 +583 304 624 525 1 +561 522 624 347 1 +347 531 624 561 1 +28 724 516 186 1 +6 453 625 163 1 +626 526 422 322 1 +578 702 400 417 1 +387 626 435 322 1 +387 526 626 322 1 +629 433 682 355 1 +422 626 502 308 1 +741 530 463 164 1 +671 395 741 530 1 +288 530 741 164 1 +741 463 176 164 1 +176 351 588 741 1 +732 584 391 456 1 +730 680 417 97 1 +540 680 417 730 1 +174 537 628 420 1 +174 381 628 537 1 +600 696 319 466 1 +344 696 600 466 1 +696 448 507 466 1 +490 516 106 628 1 +12 628 490 106 1 +12 259 628 106 1 +344 386 696 448 1 +344 448 696 466 1 +334 630 388 443 1 +334 630 585 388 1 +334 496 585 630 1 +242 630 585 496 1 +242 216 630 496 1 +242 216 89 630 1 +242 630 89 585 1 +484 335 407 631 1 +105 632 301 219 1 +632 31 301 219 1 +31 219 632 119 1 +632 219 488 119 1 +390 632 488 119 1 +634 646 104 574 1 +407 31 301 632 1 +105 407 301 632 1 +105 407 632 518 1 +219 488 64 632 1 +435 633 236 98 1 +633 387 236 98 1 +254 387 633 98 1 +90 633 254 387 1 +90 553 633 387 1 +633 553 414 387 1 +626 414 387 633 1 +626 633 387 345 1 +345 387 435 633 1 +435 387 236 633 1 +626 414 633 345 1 +90 553 414 633 1 +90 414 254 633 1 +310 647 495 475 1 +280 636 577 38 1 +577 636 125 38 1 +280 463 636 38 1 +628 729 338 420 1 +723 624 555 364 1 +416 624 723 364 1 +463 93 636 401 1 +636 93 577 401 1 +21 577 401 636 1 +21 636 401 515 1 +475 747 495 310 1 +675 609 333 448 1 +333 675 532 576 1 +747 364 475 526 1 +463 93 577 636 1 +280 463 577 636 1 +463 685 530 741 1 +131 698 468 419 1 +131 580 698 419 1 +60 698 189 131 1 +638 172 199 508 1 +453 172 638 508 1 +6 172 638 453 1 +6 172 199 638 1 +528 639 101 608 1 +528 591 639 608 1 +528 348 639 591 1 +348 607 639 591 1 +403 607 639 348 1 +403 348 639 558 1 +318 348 558 639 1 +318 348 639 398 1 +348 639 398 528 1 +383 316 573 641 1 +412 316 569 641 1 +335 409 484 702 1 +68 642 212 432 1 +642 212 432 612 1 +27 212 642 612 1 +370 643 614 334 1 +370 392 614 643 1 +462 392 370 643 1 +599 392 462 643 1 +599 643 462 315 1 +643 315 443 462 1 +315 643 443 590 1 +643 380 443 590 1 +315 380 643 590 1 +380 606 315 643 1 +643 606 315 471 1 +643 471 315 392 1 +599 392 643 315 1 +315 658 590 429 1 +658 651 429 315 1 +644 19 135 446 1 +146 19 644 514 1 +146 19 135 644 1 +396 146 592 644 1 +396 592 458 644 1 +75 645 243 544 1 +544 645 243 578 1 +111 382 205 757 1 +544 645 578 335 1 +544 421 645 335 1 +631 335 645 421 1 +631 335 407 645 1 +645 421 544 289 1 +75 645 544 289 1 +75 175 645 289 1 +645 175 421 289 1 +442 321 646 502 1 +646 412 457 126 1 +272 646 457 126 1 +272 574 646 126 1 +574 412 646 126 1 +272 234 457 646 1 +272 104 234 646 1 +475 595 434 647 1 +475 372 595 647 1 +648 141 158 461 1 +18 141 158 648 1 +648 141 194 18 1 +194 18 298 648 1 +648 18 298 478 1 +194 648 298 478 1 +194 648 478 476 1 +648 399 478 476 1 +194 399 648 476 1 +399 141 194 648 1 +336 468 649 547 1 +468 547 189 649 1 +189 649 166 468 1 +736 585 388 334 1 +424 585 736 334 1 +623 462 651 378 1 +651 462 437 378 1 +315 462 437 651 1 +659 325 508 546 1 +382 508 659 325 1 +429 651 590 315 1 +590 651 443 315 1 +462 315 443 651 1 +623 462 443 651 1 +653 304 447 583 1 +356 653 447 583 1 +354 712 511 369 1 +269 661 420 488 1 +350 505 602 680 1 +269 661 488 119 1 +447 356 541 653 1 +653 447 410 541 1 +594 653 410 541 1 +594 447 410 653 1 +359 447 594 653 1 +583 525 653 304 1 +304 525 653 523 1 +713 217 491 66 1 +92 217 491 713 1 +92 217 713 66 1 +393 444 487 654 1 +393 654 487 349 1 +655 439 373 324 1 +398 439 655 324 1 +528 373 207 655 1 +467 755 455 123 1 +133 528 207 655 1 +1 238 380 657 1 +1 238 657 182 1 +238 76 657 182 1 +657 76 471 182 1 +657 471 392 182 1 +471 657 606 76 1 +657 238 606 76 1 +599 658 471 315 1 +346 658 471 599 1 +315 389 590 658 1 +315 437 658 651 1 +59 279 659 214 1 +59 279 205 659 1 +59 246 659 205 1 +659 246 508 205 1 +382 508 205 659 1 +59 246 508 659 1 +439 660 582 343 1 +541 660 439 343 1 +309 660 439 541 1 +309 660 541 356 1 +356 660 433 309 1 +356 583 433 660 1 +439 309 582 660 1 +197 661 510 420 1 +420 197 661 269 1 +439 669 373 582 1 +662 358 452 414 1 +662 358 414 568 1 +308 662 414 568 1 +452 432 358 662 1 +358 662 432 596 1 +662 329 432 596 1 +452 432 662 329 1 +329 489 662 452 1 +489 662 452 377 1 +580 663 24 346 1 +230 346 24 663 1 +230 663 24 565 1 +565 663 24 419 1 +580 419 24 663 1 +230 565 76 663 1 +230 663 76 471 1 +230 346 663 471 1 +446 450 349 664 1 +584 664 349 450 1 +664 279 659 450 1 +214 279 659 664 1 +644 19 446 664 1 +633 254 665 414 1 +389 510 34 666 1 +287 389 34 666 1 +287 666 34 265 1 +265 34 130 666 1 +130 34 273 666 1 +287 606 666 265 1 +473 666 606 265 1 +473 389 606 666 1 +287 389 666 606 1 +389 365 666 473 1 +473 666 589 365 1 +389 365 510 666 1 +148 57 503 668 1 +439 309 669 582 1 +405 363 598 700 1 +363 598 700 600 1 +700 312 499 445 1 +700 598 312 600 1 +528 348 669 439 1 +528 669 373 439 1 +591 528 669 373 1 +486 591 669 373 1 +591 528 348 669 1 +451 299 162 670 1 +162 299 247 670 1 +37 670 162 247 1 +37 428 670 247 1 +709 487 343 402 1 +709 314 487 402 1 +357 314 709 402 1 +428 451 670 340 1 +432 114 671 248 1 +257 114 248 671 1 +489 690 308 377 1 +672 319 620 423 1 +493 169 725 134 1 +408 319 620 672 1 +564 322 434 673 1 +673 322 434 526 1 +673 526 434 340 1 +673 340 434 670 1 +670 602 434 673 1 +673 553 340 670 1 +673 222 553 670 1 +222 299 670 673 1 +250 222 553 673 1 +250 387 673 553 1 +473 743 589 330 1 +387 526 673 340 1 +387 322 673 526 1 +387 322 564 673 1 +387 32 673 564 1 +673 32 250 564 1 +387 32 250 673 1 +521 448 675 313 1 +448 507 675 313 1 +521 609 675 448 1 +521 369 675 609 1 +426 369 675 521 1 +426 369 576 675 1 +675 532 385 672 1 +333 532 675 672 1 +750 359 449 342 1 +750 706 342 449 1 +320 411 465 676 1 +615 320 465 676 1 +519 615 465 676 1 +447 359 750 342 1 +677 391 482 324 1 +582 677 482 324 1 +351 677 482 582 1 +351 391 482 677 1 +343 402 678 523 1 +523 343 594 678 1 +678 343 594 444 1 +444 487 678 343 1 +487 402 678 343 1 +487 402 305 678 1 +444 487 305 678 1 +359 586 477 678 1 +679 321 520 636 1 +463 321 679 636 1 +401 679 636 463 1 +351 463 679 401 1 +588 679 401 351 1 +373 679 401 588 1 +373 679 669 401 1 +679 309 669 401 1 +350 505 680 540 1 +22 505 195 680 1 +22 195 159 680 1 +469 316 361 682 1 +361 491 682 316 1 +682 491 404 316 1 +361 491 404 682 1 +714 538 610 539 1 +682 603 566 361 1 +361 469 682 603 1 +741 14 534 395 1 +331 603 566 682 1 +331 566 404 682 1 +485 331 404 682 1 +683 13 377 652 1 +129 13 683 652 1 +129 13 226 683 1 +226 13 451 683 1 +683 129 617 226 1 +472 129 617 683 1 +452 129 472 683 1 +727 107 440 284 1 +15 727 440 284 1 +390 632 684 488 1 +684 632 368 488 1 +338 498 386 684 1 +338 684 420 498 1 +679 321 685 520 1 +685 321 430 520 1 +679 685 430 520 1 +351 685 430 679 1 +430 685 351 677 1 +567 685 677 351 1 +567 395 685 351 1 +567 395 677 685 1 +463 321 530 685 1 +583 304 447 735 1 +447 304 587 735 1 +587 561 718 735 1 +587 304 561 735 1 +735 304 522 583 1 +378 735 522 583 1 +687 622 465 124 1 +362 622 465 687 1 +687 362 559 465 1 +687 362 170 559 1 +735 561 718 360 1 +492 319 688 445 1 +327 476 738 478 1 +363 600 445 688 1 +9 704 191 400 1 +114 671 689 681 1 +690 308 626 526 1 +28 724 423 516 1 +724 28 253 256 1 +724 385 423 516 1 +340 690 387 526 1 +536 529 233 691 1 +691 529 233 424 1 +536 691 233 424 1 +529 585 424 691 1 +691 585 424 334 1 +529 585 691 334 1 +611 334 438 691 1 +328 611 438 691 1 +328 438 571 691 1 +640 382 111 692 1 +237 640 111 692 1 +432 612 212 692 1 +455 593 707 215 1 +153 455 519 707 1 +455 707 153 215 1 +498 693 507 386 1 +498 693 338 507 1 +507 338 385 693 1 +360 522 561 694 1 +325 719 453 546 1 +694 360 512 429 1 +307 694 512 429 1 +572 546 719 367 1 +446 719 546 367 1 +719 710 367 575 1 +466 572 339 719 1 +484 307 694 512 1 +616 570 196 695 1 +64 695 570 616 1 +64 488 695 616 1 +64 695 488 259 1 +695 628 488 259 1 +695 106 628 259 1 +570 106 695 259 1 +64 570 695 259 1 +507 386 696 492 1 +386 492 347 696 1 +656 697 415 405 1 +656 69 697 405 1 +656 69 415 697 1 +698 336 547 468 1 +336 467 698 547 1 +336 467 580 698 1 +698 467 580 239 1 +60 467 698 239 1 +699 410 558 320 1 +558 320 441 699 1 +441 320 483 699 1 +483 356 699 320 1 +699 356 410 320 1 +441 483 379 699 1 +699 318 558 541 1 +439 318 699 541 1 +309 439 699 541 1 +309 439 669 699 1 +439 318 558 699 1 +405 700 598 312 1 +363 600 700 445 1 +688 445 363 700 1 +682 316 404 701 1 +682 701 404 355 1 +601 701 355 404 1 +601 457 355 701 1 +520 701 355 457 1 +321 701 520 457 1 +321 502 701 457 1 +321 502 520 701 1 +355 433 701 520 1 +701 433 316 520 1 +433 316 682 701 1 +433 701 682 355 1 +516 381 729 628 1 +618 409 702 317 1 +417 618 702 317 1 +417 556 317 702 1 +484 326 702 499 1 +484 326 407 702 1 +335 484 407 702 1 +578 335 400 702 1 +442 264 77 703 1 +703 264 77 689 1 +77 689 671 703 1 +681 703 671 689 1 +681 703 689 144 1 +703 264 689 144 1 +703 144 36 264 1 +633 703 36 264 1 +442 703 633 264 1 +686 144 36 703 1 +568 358 703 442 1 +141 427 35 705 1 +141 461 427 705 1 +461 318 427 705 1 +705 318 427 398 1 +461 318 705 398 1 +398 461 91 705 1 +705 461 91 255 1 +141 461 705 255 1 +323 706 429 481 1 +575 446 719 325 1 +751 89 585 533 1 +481 548 323 706 1 +706 548 323 498 1 +548 693 706 313 1 +693 313 507 706 1 +455 352 707 593 1 +428 418 708 317 1 +708 418 545 317 1 +428 708 545 317 1 +428 708 451 545 1 +708 418 451 545 1 +709 582 677 430 1 +430 709 582 343 1 +709 487 582 343 1 +343 660 430 709 1 +325 710 575 402 1 +720 499 317 418 1 +575 367 305 710 1 +710 367 305 466 1 +466 609 305 710 1 +710 609 305 448 1 +466 609 710 448 1 +337 543 416 720 1 +720 337 543 415 1 +420 711 323 498 1 +498 711 323 429 1 +711 365 323 429 1 +420 365 323 711 1 +420 661 365 711 1 +661 711 420 488 1 +661 390 711 488 1 +654 396 560 712 1 +560 396 511 712 1 +712 396 305 654 1 +444 712 305 654 1 +477 444 712 305 1 +712 305 609 477 1 +477 444 354 712 1 +361 436 566 713 1 +713 436 566 229 1 +566 229 92 713 1 +229 436 554 713 1 +713 436 554 361 1 +714 610 354 393 1 +714 461 354 610 1 +586 461 354 714 1 +586 714 354 444 1 +318 714 586 444 1 +714 318 439 444 1 +398 318 439 714 1 +318 461 586 714 1 +394 46 291 715 1 +46 394 479 715 1 +715 597 394 479 1 +371 597 715 479 1 +371 715 622 479 1 +371 597 394 715 1 +371 455 715 394 1 +519 455 715 371 1 +39 519 715 371 1 +153 715 519 455 1 +153 127 715 455 1 +153 127 302 715 1 +138 127 715 302 1 +46 479 274 715 1 +717 419 131 51 1 +112 419 131 717 1 +112 419 717 510 1 +587 386 706 718 1 +587 561 386 718 1 +718 386 694 561 1 +718 561 694 360 1 +429 718 694 360 1 +651 718 429 360 1 +310 736 647 374 1 +736 310 613 374 1 +342 718 429 651 1 +388 736 613 374 1 +323 706 498 718 1 +453 598 339 719 1 +719 598 339 494 1 +719 325 598 494 1 +453 325 598 719 1 +466 572 719 367 1 +710 719 367 466 1 +312 700 720 405 1 +720 700 366 405 1 +366 720 405 656 1 +720 415 405 656 1 +366 720 499 700 1 +720 312 499 700 1 +720 499 418 366 1 +337 416 545 720 1 +545 416 317 720 1 +569 435 204 722 1 +722 435 204 635 1 +722 635 204 8 1 +569 722 204 8 1 +412 722 569 8 1 +412 574 722 8 1 +634 722 574 8 1 +722 634 635 8 1 +634 646 574 722 1 +412 574 646 722 1 +526 690 308 723 1 +526 340 690 723 1 +489 357 555 723 1 +723 357 555 624 1 +416 357 723 624 1 +489 357 723 416 1 +555 747 341 422 1 +672 385 724 532 1 +408 672 724 532 1 +408 672 620 724 1 +620 408 724 260 1 +620 724 253 260 1 +620 423 253 724 1 +423 28 253 724 1 +726 484 492 326 1 +726 307 492 484 1 +631 307 726 484 1 +307 390 631 726 1 +631 390 407 726 1 +307 390 726 684 1 +684 307 492 726 1 +368 684 492 726 1 +545 728 723 619 1 +728 364 723 619 1 +619 364 475 728 1 +728 364 475 409 1 +619 728 475 409 1 +317 728 619 409 1 +409 728 702 317 1 +409 728 484 702 1 +409 347 484 728 1 +409 364 522 728 1 +522 364 624 728 1 +364 624 728 416 1 +364 723 416 728 1 +723 545 416 728 1 +323 381 729 548 1 +195 680 730 97 1 +195 680 540 730 1 +195 540 53 730 1 +188 584 732 30 1 +188 584 391 732 1 +578 335 731 544 1 +156 544 578 731 1 +156 235 544 731 1 +544 513 731 235 1 +731 513 374 235 1 +544 513 374 731 1 +622 362 734 687 1 +622 687 734 124 1 +17 622 734 300 1 +300 622 734 124 1 +17 459 734 622 1 +734 459 362 622 1 +587 735 718 342 1 +447 735 587 342 1 +437 735 447 342 1 +437 378 735 342 1 +437 378 447 735 1 +583 735 447 378 1 +378 360 623 735 1 +378 735 651 360 1 +424 334 736 611 1 +372 424 736 611 1 +372 611 736 647 1 +647 611 736 310 1 +440 616 423 737 1 +620 737 440 423 1 +620 319 737 423 1 +672 319 423 737 1 +620 319 440 737 1 +737 319 440 688 1 +368 737 440 688 1 +440 616 737 368 1 +616 695 737 368 1 +338 684 386 737 1 +737 684 386 492 1 +737 386 507 492 1 +507 696 737 492 1 +338 386 507 737 1 +79 372 739 431 1 +752 394 604 346 1 +552 753 379 515 1 +599 752 346 437 1 +332 752 599 437 1 +752 460 332 599 1 +603 740 331 480 1 +682 740 331 603 1 +682 469 740 603 1 +469 682 740 433 1 +740 682 331 433 1 +483 740 331 433 1 +740 469 433 637 1 +627 469 740 637 1 +671 741 14 530 1 +288 14 741 530 1 +671 395 14 741 1 +395 685 351 741 1 +741 685 351 463 1 +288 534 176 741 1 +741 534 176 567 1 +742 397 413 716 1 +370 742 413 716 1 +370 397 742 716 1 +306 742 397 571 1 +390 711 631 743 1 +631 711 307 743 1 +711 743 429 307 1 +711 365 429 743 1 +429 365 590 743 1 +711 661 365 743 1 +589 365 661 743 1 +473 365 589 743 1 +390 743 631 421 1 +369 61 497 745 1 +369 497 426 745 1 +369 61 745 155 1 +186 385 524 746 1 +256 385 186 746 1 +385 724 746 256 1 +746 724 532 256 1 +385 724 532 746 1 +385 746 532 675 1 +675 746 532 576 1 +675 426 746 576 1 +385 426 746 675 1 +747 475 495 322 1 +322 747 573 495 1 +322 422 573 747 1 +422 526 747 322 1 +422 364 747 526 1 +555 364 747 422 1 +304 624 748 531 1 +624 357 748 531 1 +624 357 525 748 1 +357 709 525 748 1 +748 709 525 402 1 +357 709 748 402 1 +304 525 748 624 1 +304 525 523 748 1 +523 525 343 748 1 +447 449 311 750 1 +750 557 449 311 1 +750 336 449 557 1 +481 336 750 557 1 +336 548 481 750 1 +481 548 706 750 1 +548 706 750 449 1 +336 548 750 449 1 +447 359 449 750 1 +751 99 266 240 1 +424 99 266 751 1 +739 424 266 751 1 +79 739 266 751 1 +79 431 739 751 1 +739 372 751 431 1 +372 751 431 736 1 +736 388 751 431 1 +431 388 751 621 1 +751 388 26 621 1 +431 751 26 621 1 +388 89 751 26 1 +372 424 751 736 1 +739 372 424 751 1 +552 50 379 753 1 +227 50 552 753 1 +165 655 207 754 1 +139 49 486 754 1 +376 755 455 467 1 +756 702 407 400 1 +756 407 551 400 1 +335 702 407 756 1 +645 407 756 335 1 +645 756 578 335 1 +645 756 243 578 1 +9 756 578 243 1 +9 704 756 243 1 +243 756 95 704 1 +231 756 95 243 1 +231 645 756 243 1 +231 407 756 645 1 +231 407 95 756 1 +End diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_mesh_and_remesh_image.cpp b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_mesh_and_remesh_image.cpp new file mode 100644 index 00000000000..890a018d2fb --- /dev/null +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_mesh_and_remesh_image.cpp @@ -0,0 +1,73 @@ +#include + +#include +#include +#include + +#include +#include +#include + +#include + +// Domain +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; + +typedef CGAL::Image_3 Image; +typedef CGAL::Labeled_mesh_domain_3 Mesh_domain; + +// Triangulation +typedef CGAL::Mesh_triangulation_3::type Tr; +typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; + +// Mesh Criteria +typedef CGAL::Mesh_criteria_3 Mesh_criteria; +typedef Mesh_criteria::Facet_criteria Facet_criteria; +typedef Mesh_criteria::Cell_criteria Cell_criteria; + +typedef CGAL::Triangulation_3 T3; + +using namespace CGAL::parameters; + +int main() +{ + const char* filename = "data/liver.inr.gz"; + + CGAL::Image_3 image; + if (!image.read(filename)) { + std::cerr << "Error: Cannot read file " << filename << std::endl; + return EXIT_FAILURE; + } + Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain(image, 1e-9); + + // Mesh criteria + Facet_criteria facet_criteria(25, 20, 2); // angle, size, approximation + Cell_criteria cell_criteria(3, 20); // radius-edge ratio, size + Mesh_criteria criteria(facet_criteria, cell_criteria); + + // Meshing + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, no_exude(), no_perturb()); + + std::cout << "Meshing done." << std::endl; + + //Remeshing : extract triangulation + T3 t3 = CGAL::convert_to_triangulation_3(c3t3); + + //Remeshing : coarsen + double target_edge_length = 15.; + CGAL::tetrahedral_isotropic_remeshing(t3, target_edge_length, + CGAL::parameters::number_of_iterations(2) + .smooth_constrained_edges(true)); + + std::cout << "Remeshing 1 done." << std::endl; + + //Remeshing : refine + target_edge_length = 20.; + CGAL::tetrahedral_isotropic_remeshing(t3, target_edge_length, + CGAL::parameters::number_of_iterations(2).remesh_boundaries(false)); + + std::cout << "Remeshing 2 done." << std::endl; + + return 0; +} diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_mesh_and_remesh_polyhedral_domain_with_features.cpp b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_mesh_and_remesh_polyhedral_domain_with_features.cpp new file mode 100644 index 00000000000..90c59e74162 --- /dev/null +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_mesh_and_remesh_polyhedral_domain_with_features.cpp @@ -0,0 +1,81 @@ +#include + +#include +#include +#include + +#include +#include +#include + +#include + +// Domain +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef CGAL::Surface_mesh Polyhedron; +typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; + +#ifdef CGAL_CONCURRENT_MESH_3 +typedef CGAL::Parallel_tag Concurrency_tag; +#else +typedef CGAL::Sequential_tag Concurrency_tag; +#endif + +// Triangulation +typedef CGAL::Mesh_triangulation_3::type Tr; + +typedef CGAL::Mesh_complex_3_in_triangulation_3< + Tr, Mesh_domain::Corner_index, Mesh_domain::Curve_index> C3t3; + +// Criteria +typedef CGAL::Mesh_criteria_3 Mesh_criteria; + +// To avoid verbose function and named parameters call +using namespace CGAL::parameters; + +int main(int argc, char* argv[]) +{ + const char* fname = (argc > 1) ? argv[1] : "data/fandisk.off"; + std::ifstream input(fname); + Polyhedron polyhedron; + input >> polyhedron; + if (input.fail()) { + std::cerr << "Error: Cannot read file " << fname << std::endl; + return EXIT_FAILURE; + } + + if (!CGAL::is_triangle_mesh(polyhedron)) { + std::cerr << "Input geometry is not triangulated." << std::endl; + return EXIT_FAILURE; + } + + // Create domain + Mesh_domain domain(polyhedron); + + // Get sharp features + domain.detect_features(); + + // Mesh criteria + Mesh_criteria criteria(edge_size = 0.025, + facet_angle = 25, facet_size = 0.05, facet_distance = 0.005, + cell_radius_edge_ratio = 3, cell_size = 0.05); + + // Mesh generation + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria); + + auto t3 = CGAL::convert_to_triangulation_3(std::move(c3t3)); + + double target_edge_length = 0.1;//coarsen the mesh + CGAL::tetrahedral_isotropic_remeshing(t3, target_edge_length, + CGAL::parameters::number_of_iterations(3).remesh_boundaries(false)); + + assert(t3.is_valid()); + + target_edge_length = 0.04;//re-refine the mesh + CGAL::tetrahedral_isotropic_remeshing(t3, target_edge_length, + CGAL::parameters::number_of_iterations(1));//remesh_boundaries(true) + + assert(t3.is_valid()); + + return EXIT_SUCCESS; +} diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing.cpp b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing.cpp index b3341824a82..276227e2f9b 100644 --- a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing.cpp +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing.cpp @@ -1,6 +1,6 @@ #define CGAL_TETRAHEDRAL_REMESHING_VERBOSE -#define CGAL_DUMP_REMESHING_STEPS -#define CGAL_TETRAHEDRAL_REMESHING_DEBUG +//#define CGAL_DUMP_REMESHING_STEPS +//#define CGAL_TETRAHEDRAL_REMESHING_DEBUG //#define CGAL_TETRAHEDRAL_REMESHING_GENERATE_INPUT_FILES #include diff --git a/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing_from_mesh_file.cpp b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing_from_mesh_file.cpp new file mode 100644 index 00000000000..cb748e0e92b --- /dev/null +++ b/Tetrahedral_remeshing/test/Tetrahedral_remeshing/test_tetrahedral_remeshing_from_mesh_file.cpp @@ -0,0 +1,32 @@ +//#define CGAL_TETRAHEDRAL_REMESHING_DEBUG +//#define CGAL_TETRAHEDRAL_REMESHING_VERBOSE +//#define CGAL_DUMP_REMESHING_STEPS + +#include + +#include +#include + +#include +#include + +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; + +typedef CGAL::Tetrahedral_remeshing::Remeshing_triangulation_3 Remeshing_triangulation; + +int main(int argc, char* argv[]) +{ + const double target_edge_length = (argc > 1) ? atof(argv[1]) : 0.1; + + Remeshing_triangulation tr; + + std::ifstream in("data/sphere.mesh"); + if (CGAL::build_triangulation_from_file(in, tr)) + std::cout << "build triangulation ok" << std::endl; + + CGAL::tetrahedral_isotropic_remeshing(tr, target_edge_length); + + return EXIT_SUCCESS; +} diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index 22a01085089..858679d46ac 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -567,7 +567,7 @@ protected: public: template // Point or Point_3 - typename boost::result_of::type + typename boost::result_of::type construct_point(const P& p) const { return geom_traits().construct_point_3_object()(p);