[pgrouting] 01/08: Imported Upstream version 2.4.0

Bas Couwenberg sebastic at debian.org
Tue Mar 21 10:59:43 UTC 2017


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository pgrouting.

commit 5ddb51c765b29fedbad8510b210c59cc646fb609
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Tue Mar 21 07:23:22 2017 +0100

    Imported Upstream version 2.4.0
---
 .travis.yml                                        |    11 +-
 CMakeLists.txt                                     |   470 +-
 CONTRIBUTING.md                                    |    42 +
 NEWS                                               |   104 +-
 README.md                                          |    33 +-
 VERSION                                            |     2 +-
 Vagrantfile                                        |    24 -
 appveyor.yml                                       |     2 +-
 cmake/CMakeLists.txt                               |     3 -
 doc/CMakeLists.txt                                 |    94 +-
 doc/conf.py.in                                     |    24 +-
 doc/deprecated.rst                                 |   112 -
 doc/index.rst                                      |   153 +-
 doc/src/developer/developer_guide.rst              |   174 -
 doc/src/developer/discontinued.rst                 |    26 -
 .../{developer => }/images/Fig1-originalData.png   |   Bin
 doc/src/{developer => }/images/Fig2-cost.png       |   Bin
 .../{developer => }/images/Fig4-costUndirected.png |   Bin
 doc/src/{developer => }/images/Fig6-undirected.png |   Bin
 .../{introduction => }/images/boost-inside.jpeg    |   Bin
 doc/src/{recipes => }/images/parallelImage.png     |   Bin
 doc/src/{developer => }/images/test1.png           |   Bin
 doc/src/{developer => }/images/trsp-test-image.png |   Bin
 doc/src/installation/build.rst                     |   123 -
 doc/src/installation/install-dependencies.rst      |   155 -
 doc/src/installation/installation.rst              |   186 -
 doc/src/pgRouting-concepts.rst                     |   705 +
 doc/src/pgRouting-installation.rst                 |   312 +
 ...introduction.rst => pgRouting-introduction.rst} |    23 +-
 doc/src/proposed.rst                               |   163 +
 doc/src/recipes/example_recipe.rst                 |    29 -
 doc/src/recipes/index.rst                          |    83 -
 doc/src/recipes/parallel_handling.rst              |   221 -
 doc/src/recipes/test/sampledata.data.sql           |    59 -
 doc/src/recipes/test/test.conf                     |    19 -
 doc/src/recipes/test/zzz-remove_sampledata.result  |     0
 .../recipes/test/zzz-remove_sampledata.test.sql    |     9 -
 doc/src/{changelog => }/release_notes.rst          |   197 +-
 doc/src/routingFunctions.rst                       |    67 +
 doc/src/{developer => }/sampledata.rst             |    20 +-
 doc/src/{introduction => }/support.rst             |    12 +-
 doc/src/tutorial/analytics.rst                     |   138 -
 doc/src/tutorial/custom_query.rst                  |   180 -
 doc/src/tutorial/index.rst                         |    45 -
 doc/src/tutorial/performance.rst                   |    56 -
 doc/src/tutorial/topology.rst                      |   121 -
 doc/src/tutorial/tutorial.rst                      |   131 -
 doc/{src/recipes => }/test/example_recipe.result   |     0
 doc/{src/recipes => }/test/example_recipe.test.sql |     5 +-
 .../recipes => }/test/parallel_handling.result     |     0
 .../recipes => }/test/parallel_handling.test.sql   |     7 +-
 doc/test/test.conf                                 |     2 +
 doc/test/utilities-any.result                      |     2 +-
 doc/test/utilities-any.test.sql                    |     2 -
 doxygen/Doxyfile.in                                |     4 +-
 {src/contraction/src => doxygen}/contraction.dox   |     0
 {src => doxygen}/mainpage.dox                      |     0
 src/CMakeLists.txt                                 |    62 -
 .../doc/{allpairs.rst => allpairs-family.rst}      |    19 +-
 src/allpairs/doc/doc-floydWarshall.queries         |     7 +
 src/allpairs/doc/doc-johnson.queries               |     7 +
 src/allpairs/doc/pgr_floydWarshall.rst             |    19 +-
 src/allpairs/doc/pgr_johnson.rst                   |    19 +-
 src/allpairs/src/floydWarshall.c                   |    38 +-
 src/allpairs/src/floydWarshall_driver.cpp          |    16 +-
 src/allpairs/src/floydWarshall_driver.h            |     1 -
 src/allpairs/src/johnson.c                         |    39 +-
 src/allpairs/src/johnson_driver.cpp                |    16 +-
 src/allpairs/src/pgr_allpairs.hpp                  |    54 +-
 src/allpairs/test/doc-floydWarshall.result         |     1 +
 src/allpairs/test/doc-floydWarshall.test.sql       |     1 +
 src/allpairs/test/doc-johnson.result               |     1 +
 src/allpairs/test/doc-johnson.test.sql             |     1 +
 src/alpha_shape/doc/doc-pgr_alphashape.queries     |    42 +-
 .../doc/doc-pgr_pointsAsPolygon.queries            |     2 +
 src/alpha_shape/doc/pgr_alphaShape.rst             |    79 +-
 src/alpha_shape/doc/pgr_pointsAsPolygon.rst        |     4 +-
 src/alpha_shape/src/alpha.c                        |    56 +-
 src/alpha_shape/src/alpha_driver.cpp               |    13 +-
 src/alpha_shape/test/doc-pgr_alphashape.result     |    13 +-
 src/alpha_shape/test/doc-pgr_alphashape.test.sql   |    34 +-
 .../test/doc-pgr_pointsAsPolygon.test.sql          |     2 -
 src/apsp_johnson/doc/CMakeLists.txt                |     0
 src/apsp_johnson/doc/doc-apspJohnson.queries       |     4 +
 src/apsp_johnson/doc/pgr_apspJohnson.rst           |    78 -
 src/apsp_johnson/test/doc-apspJohnson.test.sql     |     1 -
 src/apsp_warshall/doc/CMakeLists.txt               |     0
 src/apsp_warshall/doc/doc-apspWarshall.queries     |     4 +
 src/apsp_warshall/doc/pgr_apspWarshall.rst         |    84 -
 src/apsp_warshall/test/doc-apspWarshall.test.sql   |     1 -
 src/astar/doc/aStar-family.rst                     |   109 +
 src/astar/doc/doc-aStarCost.queries                |    58 +
 src/astar/doc/doc-astar-v2.queries                 |    12 +-
 src/astar/doc/doc-astar.queries                    |    95 +-
 src/astar/doc/{pgr_astar.rst => pgr_aStar.rst}     |   208 +-
 src/astar/doc/pgr_aStarCost.rst                    |   239 +
 src/astar/doc/pgr_astar-v2.rst                     |   101 -
 src/astar/sql/CMakeLists.txt                       |     9 +-
 src/astar/sql/astarCost.sql                        |    10 +
 src/astar/sql/astarV2.0.sql                        |     2 +-
 src/astar/src/CMakeLists.txt                       |    14 +-
 src/astar/src/astarOneToMany_driver.cpp            |   182 -
 src/astar/src/astarOneToMany_driver.h              |    67 -
 src/astar/src/astarOneToOne_driver.h               |    65 -
 ...ny_driver.cpp => astar_many_to_many_driver.cpp} |   138 +-
 ...ToMany_driver.h => astar_many_to_many_driver.h} |    18 +-
 .../{astarManyToMany.c => many_to_many_astar.c}    |   174 +-
 .../src/{astarManyToOne.c => many_to_one_astar.c}  |   158 +-
 .../src/{astarOneToMany.c => one_to_many_astar.c}  |   159 +-
 .../src/{astarOneToOne.c => one_to_one_astar.c}    |   133 +-
 src/astar/src/pgr_astar.hpp                        |   546 +-
 src/astar/test/doc-aStarCost.result                |    16 +
 src/astar/test/doc-aStarCost.test.sql              |    22 +
 src/astar/test/doc-astar-v2.result                 |     4 +-
 src/astar/test/doc-astar-v2.test.sql               |     6 +-
 src/astar/test/doc-astar.result                    |    64 +-
 src/astar/test/doc-astar.test.sql                  |    20 +-
 .../astar_ManyToMany-compare-dijkstra.test.sql     |    97 +
 .../astar_ManyToOne-compare-dijkstra.test.sql      |    99 +
 .../astar_oneToMany-compare-dijkstra.test.sql      |    99 +
 .../test/pgtap/astar_oneToOne-types-check.sql      |    26 +-
 src/astar/test/test.conf                           |     2 +
 src/bdDijkstra/doc/doc-pgr_bdDijkstra.queries      |    52 +
 src/bdDijkstra/doc/pgr_bdDijkstra.rst              |   113 +
 src/bdDijkstra/sql/CMakeLists.txt                  |     7 +
 src/bdDijkstra/sql/bdDijkstra.sql                  |    93 +
 src/bdDijkstra/src/CMakeLists.txt                  |     4 +
 .../src/bdDijkstra.c}                              |   122 +-
 .../src/bdDijkstra_driver.cpp}                     |   147 +-
 .../src/bdDijkstra_driver.h}                       |    28 +-
 src/bdDijkstra/src/pgr_bdDijkstra.hpp              |   281 +
 src/bdDijkstra/test/bdDijkstra-large.result        |   332 +
 .../test/bdDijkstra-large.test.sql}                |    47 +-
 src/bdDijkstra/test/doc-pgr_bdDijkstra.result      |    17 +
 src/bdDijkstra/test/doc-pgr_bdDijkstra.test.sql    |    23 +
 src/bdDijkstra/test/large.data                     | 17280 ++++++++++++++++
 .../test/pgtap/bdDijkstra-compare-dijkstra.sql     |    73 +
 .../test/pgtap/bdDijkstra-innerQuery.sql           |   116 +
 .../test/pgtap/bdDijkstra-types-check.sql          |    54 +
 src/bdDijkstra/test/test.conf                      |    17 +
 src/bd_astar/doc/doc-bdAstar.queries               |     2 +
 src/bd_astar/doc/pgr_bdAstar.rst                   |     6 +-
 src/bd_astar/src/BiDirAStar.cpp                    |    19 +-
 src/bd_astar/src/bdastar.c                         |    42 +-
 src/bd_astar/src/bdastar_driver.cpp                |     6 +-
 src/bd_astar/test/CMakeLists.txt                   |     0
 src/bd_astar/test/bd_astar-any-01.result           |   202 +-
 src/bd_astar/test/bd_astar-any-02.result           |   120 +-
 src/bd_astar/test/bd_astar-any-03.result           |     4 +-
 src/bd_astar/test/bd_astar-any-04.result           |     4 +-
 src/bd_astar/test/bd_astar-any-05.result           |   202 +-
 src/bd_astar/test/bd_astar-any-06.result           |   120 +-
 src/bd_astar/test/doc-bdAstar.test.sql             |     2 -
 src/bd_astar/tester/ans1.txt                       |   202 +-
 src/bd_astar/tester/ans2.txt                       |   120 +-
 src/bd_astar/tester/ans3.txt                       |     4 +-
 src/bd_astar/tester/ans4.txt                       |     4 +-
 src/bd_astar/tester/ans5.txt                       |   202 +-
 src/bd_astar/tester/ans6.txt                       |   120 +-
 src/bd_astar/tester/input.txt                      |    14 +-
 src/bd_dijkstra/doc/doc-bdDijkstra.queries         |    32 +-
 src/bd_dijkstra/doc/pgr_bdDijkstra.rst             |    95 -
 src/bd_dijkstra/sql/CMakeLists.txt                 |     3 +-
 .../sql/bdDijkstra-v2.sql}                         |    19 +-
 src/bd_dijkstra/sql/routing_bd_dijkstra.sql        |    39 -
 src/bd_dijkstra/src/BiDirDijkstra.cpp              |   460 -
 src/bd_dijkstra/src/BiDirDijkstra.h                |   120 -
 src/bd_dijkstra/src/CMakeLists.txt                 |     5 -
 src/bd_dijkstra/src/bdsp.c                         |   408 -
 src/bd_dijkstra/src/bdsp_driver.cpp                |    79 -
 src/bd_dijkstra/src/bdsp_driver.h                  |    55 -
 src/bd_dijkstra/test/CMakeLists.txt                |     0
 src/bd_dijkstra/test/bd_dijkstra-any-01.result     |   203 +-
 src/bd_dijkstra/test/bd_dijkstra-any-02.result     |   121 +-
 src/bd_dijkstra/test/bd_dijkstra-any-03.result     |     5 +-
 src/bd_dijkstra/test/bd_dijkstra-any-04.result     |     5 +-
 src/bd_dijkstra/test/bd_dijkstra-any-05.result     |   203 +-
 src/bd_dijkstra/test/bd_dijkstra-any-06.result     |   121 +-
 src/bd_dijkstra/test/doc-bdDijkstra.result         |    22 +-
 src/bd_dijkstra/test/doc-bdDijkstra.test.sql       |     6 +-
 .../test/pgtap/bdDijkstra-types-check.sql          |   139 +-
 .../test/pgtap/v2-bdDijkstra-compare-dijkstra.sql  |    99 +
 src/bd_dijkstra/test/test.conf                     |     1 +
 src/common/doc/{types => }/cost_result.rst         |     8 +-
 src/common/doc/{types => }/geom_result.rst         |     6 +-
 src/common/doc/pgr_version.rst                     |    12 +-
 .../doc/{types/index.rst => types_index.rst}       |     2 +-
 src/common/doc/utilities/end_point.rst             |    61 -
 src/common/doc/utilities/get_column_name.rst       |    88 -
 src/common/doc/utilities/get_table_name.rst        |   106 -
 src/common/doc/utilities/is_column_in_table.rst    |    89 -
 src/common/doc/utilities/is_column_indexed.rst     |    90 -
 src/common/doc/utilities/point_to_id.rst           |    66 -
 src/common/doc/utilities/quote_ident.rst           |   124 -
 src/common/doc/utilities/start_point.rst           |    61 -
 src/common/doc/utilities/versionless.rst           |    68 -
 src/common/sql/pgrouting.control.in                |     2 +-
 src/common/sql/pgrouting_version.sql               |    21 +-
 src/common/sql/utilities_pgr.sql                   |    87 -
 src/common/src/CMakeLists.txt                      |     2 +
 src/common/src/arrays_input.c                      |   185 +-
 src/common/src/basePath_SSEC.cpp                   |    71 +-
 src/common/src/basePath_SSEC.hpp                   |   131 +-
 src/common/src/basic_edge.cpp                      |     8 -
 src/common/src/basic_edge.h                        |     1 -
 src/common/src/basic_vertex.cpp                    |    12 +-
 src/common/src/basic_vertex.h                      |     2 +
 src/common/src/ch_edge.cpp                         |   103 +-
 src/common/src/ch_edge.h                           |    35 +-
 src/common/src/ch_vertex.cpp                       |    80 +-
 src/common/src/ch_vertex.h                         |    27 +-
 src/common/src/coordinates_input.c                 |     7 +-
 src/common/src/debug_macro.h                       |     5 +-
 src/common/src/e_report.c                          |   123 +
 src/common/src/e_report.h                          |   136 +
 src/common/src/edges_input.c                       |   106 +-
 src/common/src/edges_input.h                       |     8 +-
 src/common/src/get_check_data.c                    |    23 +-
 src/common/src/get_check_data.h                    |     2 +-
 src/common/src/identifiers.hpp                     |    22 +-
 src/common/src/matrixRows_input.c                  |     6 +-
 src/common/src/{debug_macro.h => pgr_alloc.cpp}    |    25 +-
 src/common/src/pgr_alloc.hpp                       |    40 +-
 src/common/src/pgr_assert.cpp                      |    13 +-
 src/common/src/pgr_base_graph.hpp                  |   177 +-
 src/common/src/pgr_types.h                         |    58 +-
 src/common/src/points_input.c                      |     2 +-
 src/common/src/postgres_connection.c               |    34 +-
 src/common/src/postgres_connection.h               |    40 +-
 src/common/src/restrictions_input.c                |     7 +-
 src/common/src/time_msg.c                          |     7 +-
 src/common/src/xy_vertex.cpp                       |     9 +-
 src/common/src/xy_vertex.h                         |     7 +
 .../{contraction.rst => contraction-family.rst}    |    31 +-
 src/contraction/doc/doc-contractGraph.queries      |     6 +
 src/contraction/doc/doc-contraction.queries        |    10 +-
 src/contraction/doc/pgr_contractGraph.rst          |    35 +-
 src/contraction/src/contractGraph.c                |   284 +-
 src/contraction/src/contractGraph_driver.cpp       |   462 +-
 src/contraction/src/contractGraph_driver.h         |     8 +-
 src/contraction/src/pgr_contract.hpp               |   509 +-
 src/contraction/src/pgr_contractionGraph.hpp       |   712 +-
 src/contraction/src/pgr_deadEndContraction.hpp     |   525 +-
 src/contraction/src/pgr_linearContraction.hpp      |   423 +-
 src/contraction/src/structs.h                      |    48 -
 src/contraction/test/directed-deadend.result       |    11 +
 src/contraction/test/directed-deadend.test.sql     |    44 +
 src/contraction/test/directed-development.result   |    18 +-
 src/contraction/test/directed-development.test.sql |    68 +-
 src/contraction/test/directed-linear.result        |    17 +
 src/contraction/test/directed-linear.test.sql      |    45 +
 src/contraction/test/doc-contractGraph.test.sql    |     2 +-
 src/contraction/test/doc-contraction.test.sql      |     3 +-
 src/contraction/test/expand_graph.test.sql         |    51 -
 .../test/expand_graph_without_function.test.sql    |    51 -
 .../test/pgtap/contraction-types-check.sql         |     4 +-
 src/contraction/test/pgtap/directed_dead_end.sql   |   287 +-
 src/contraction/test/proof_of_concept.test.sql     |     2 -
 src/contraction/test/proof_of_concept_1.test.sql   |     2 -
 src/contraction/test/return_types.test.sql         |     2 -
 src/contraction/test/test.conf                     |     2 +
 src/convenience/doc/doc-conversion.queries         |    23 +-
 src/convenience/doc/doc-matrix.queries             |     5 +
 src/convenience/doc/pgr_flipEdges.rst              |    73 -
 src/convenience/doc/pgr_pointToEdgeNode.rst        |    10 +-
 src/convenience/doc/pgr_pointsToDMatrix.rst        |    84 -
 src/convenience/doc/pgr_pointsToVids.rst           |    83 -
 src/convenience/doc/pgr_textToPoints.rst           |    71 -
 src/convenience/doc/pgr_vidsToDMatrix.rst          |   101 -
 src/convenience/doc/pgr_vidsToDMatrix2.rst         |    92 -
 src/convenience/sql/CMakeLists.txt                 |     1 -
 src/convenience/sql/pgr_fakeContraction.sql        |    56 -
 src/convenience/sql/pgrouting_conversion_tools.sql |     1 +
 src/convenience/test/doc-conversion.result         |     1 +
 src/convenience/test/doc-conversion.test.sql       |    25 -
 src/convenience/test/doc-matrix.result             |     5 +
 src/convenience/test/doc-matrix.test.sql           |     4 -
 src/convenience/test/test.conf                     |     4 +-
 src/convenience/test/vidstodmatrix-any-01.test.sql |     2 -
 .../doc/{costMatrix.rst => cost-category.rst}      |    43 +-
 .../{costMatrix.rst => costMatrix-category.rst}    |    22 +-
 src/costMatrix/doc/doc-pgr_fooDmatrix.queries      |    66 +-
 ...kstraCostMatrix.rst => pgr_aStarCostMatrix.rst} |    73 +-
 src/costMatrix/doc/pgr_dijkstraCostMatrix.rst      |    18 +-
 src/costMatrix/doc/pgr_withPointsCostMatrix.rst    |    21 +-
 src/costMatrix/sql/CMakeLists.txt                  |     6 +-
 src/costMatrix/sql/eucledianCostMatrix.sql         |    92 -
 .../test/doc-pgr_fooDmatrix-mac.test.sql           |     2 -
 .../test/doc-pgr_fooDmatrix-windows.test.sql       |     2 -
 src/costMatrix/test/doc-pgr_fooDmatrix.result      |    33 +
 src/costMatrix/test/doc-pgr_fooDmatrix.test.sql    |    37 +-
 .../doc/{dijkstra.rst => dijkstra-family.rst}      |    29 +-
 src/dijkstra/doc/doc-pgr_dijkstra.queries          |    10 +-
 src/dijkstra/doc/doc-pgr_dijkstraCost.queries      |     4 +-
 src/dijkstra/doc/doc-pgr_dijkstraVia.queries       |     6 +
 src/dijkstra/doc/pgr_dijkstra.rst                  |    51 +-
 src/dijkstra/doc/pgr_dijkstraCost.rst              |    33 +-
 src/dijkstra/doc/pgr_dijkstraVia.rst               |     8 +-
 src/dijkstra/doc/pgr_dijkstra_v2.rst               |   113 -
 src/dijkstra/sql/dijkstra.sql                      |     4 +-
 src/dijkstra/sql/dijkstraVia.sql                   |     4 +-
 src/dijkstra/src/CMakeLists.txt                    |     4 -
 src/dijkstra/src/dijkstraVia.c                     |   155 +-
 src/dijkstra/src/dijkstraVia_driver.cpp            |   146 +-
 src/dijkstra/src/dijkstraVia_driver.h              |    22 +-
 src/dijkstra/src/many_to_many_dijkstra.c           |   190 +-
 src/dijkstra/src/many_to_many_dijkstra_driver.cpp  |   139 +-
 src/dijkstra/src/many_to_many_dijkstra_driver.h    |    31 +-
 src/dijkstra/src/many_to_one_dijkstra.c            |   158 +-
 src/dijkstra/src/many_to_one_dijkstra_driver.cpp   |   121 -
 src/dijkstra/src/many_to_one_dijkstra_driver.h     |    62 -
 src/dijkstra/src/one_to_many_dijkstra.c            |   169 +-
 src/dijkstra/src/one_to_many_dijkstra_driver.cpp   |   114 -
 src/dijkstra/src/one_to_many_dijkstra_driver.h     |    62 -
 src/dijkstra/src/one_to_one_dijkstra.c             |   129 +-
 src/dijkstra/src/one_to_one_dijkstra_driver.cpp    |   115 -
 src/dijkstra/src/pgr_dijkstra.hpp                  |   388 +-
 src/dijkstra/test/CMakeLists.txt                   |     0
 src/dijkstra/test/dijkstra-v2.test.sql             |     2 -
 src/dijkstra/test/doc-pgr_dijkstra.result          |     8 +-
 src/dijkstra/test/doc-pgr_dijkstra.test.sql        |     5 -
 src/dijkstra/test/doc-pgr_dijkstraCost.test.sql    |     2 -
 .../test/pgtap/oneToOne_equiv_manyToMany.test.sql  |     2 +
 .../test/pgtap/oneToOne_equiv_manyToOne.test.sql   |     6 +-
 .../test/pgtap/oneToOne_equiv_oneToMany.test.sql   |     2 +
 .../pgtap/v2-equi-v3-undirected-N-reverse.test.sql |     9 +-
 .../pgtap/v2-equi-v3-undirected-W-reverse.test.sql |     3 +
 src/dijkstra/test/test.conf                        |     7 +-
 src/dijkstra/tester/Makefile                       |    14 -
 src/dijkstra/tester/boost_wrapper.cpp              |   216 -
 src/dijkstra/tester/dijkstra.h                     |    72 -
 src/dijkstra/tester/testit.c                       |   139 -
 .../doc/doc-pgr_drivingDistance.queries            |    10 +-
 .../doc/doc-pgr_drivingdistance-v2.queries         |     2 +
 .../doc/drivingDistance-category.rst}              |    23 +-
 src/driving_distance/doc/drivingDistance.rst       |    37 -
 src/driving_distance/doc/pgr_drivingDistance.rst   |    12 +-
 .../doc/pgr_drivingDistance_v2.rst                 |    97 -
 src/driving_distance/sql/routing_dd.sql            |   151 +-
 src/driving_distance/sql/withPoints_dd.sql         |    23 +-
 src/driving_distance/src/CMakeLists.txt            |     6 +-
 .../src/boost_interface_drivedist.cpp              |   173 -
 src/driving_distance/src/drivedist.c               |   184 -
 src/driving_distance/src/drivedist_driver.cpp      |   118 +
 ...st_interface_drivedist.h => drivedist_driver.h} |    24 +-
 .../src/many_to_dist_driving_distance.c            |   180 +-
 .../src/many_to_dist_withPointsDD.c                |   171 +-
 src/driving_distance/src/withPoints_dd.c           |   262 -
 src/driving_distance/src/withPoints_dd_driver.cpp  |   260 +-
 src/driving_distance/src/withPoints_dd_driver.h    |    29 +-
 .../test/doc-pgr_drivingDistance.test.sql          |     3 -
 .../test/doc-pgr_drivingdistance-v2.test.sql       |     6 +-
 .../test/drivingdistance-any-00.test.sql           |    19 +-
 src/driving_distance/test/issue729.result          |     5 +
 src/driving_distance/test/issue729.test.sql        |    61 +
 src/driving_distance/test/test.conf                |     1 +
 src/internalQueryTests/src/testXYedges.c           |    18 +-
 src/internalQueryTests/src/testXYedges_driver.cpp  |    53 +-
 src/internalQueryTests/src/test_c_edges.c          |    15 +-
 src/internalQueryTests/src/test_c_edges_driver.cpp |   279 +-
 src/internalQueryTests/src/test_matrixRows.c       |    18 +-
 .../src/test_matrixRows_driver.cpp                 |     8 +-
 src/internalQueryTests/test/test.conf              |     6 +-
 src/internalQueryTests/test/testCHedges.result     |   681 -
 src/internalQueryTests/test/testCHedges.test.sql   |     2 -
 src/kdijkstra/doc/pgr_kDijkstra.rst                |   128 -
 src/kdijkstra/test/doc-kdijkstra.test.sql          |     3 -
 src/ksp/doc/{ksp.rst.back => KSP-category.rst}     |    17 +-
 src/ksp/doc/doc-ksp-v2.queries                     |     4 +
 src/ksp/doc/doc-ksp.queries                        |    32 +-
 src/ksp/doc/{pgr_ksp.rst => pgr_KSP.rst}           |    34 +-
 src/ksp/doc/pgr_ksp_v2.rst                         |   102 -
 src/ksp/src/ksp.c                                  |   206 +-
 src/ksp/src/ksp_driver.cpp                         |   140 +-
 src/ksp/src/ksp_driver.h                           |    20 +-
 src/ksp/src/pgr_ksp.cpp                            |    86 +-
 src/ksp/src/pgr_ksp.hpp                            |    52 +-
 src/ksp/src/withPoints_ksp.c                       |    73 +-
 src/ksp/src/withPoints_ksp_driver.cpp              |   112 +-
 src/ksp/src/withPoints_ksp_driver.h                |     5 +-
 src/ksp/test/doc-ksp-v2.test.sql                   |     1 -
 src/ksp/test/doc-ksp.test.sql                      |    31 +-
 src/ksp/test/ksp-network.result                    |   182 -
 src/ksp/test/ksp-network.test.sql                  |    39 +-
 src/ksp/test/test.conf                             |     6 +-
 src/label_graph/doc/doc-pgr_labelGraph.queries     |     6 +-
 src/label_graph/doc/pgr_labelGraph.rst             |    16 +-
 src/label_graph/test/CMakeLists.txt                |     0
 src/label_graph/test/doc-pgr_labelGraph.test.sql   |     5 +-
 src/label_graph/test/pgrouting_labelgraph.test.sql |     2 -
 .../doc-pgr_maxFlow.queries}                       |   137 +-
 src/max_flow/doc/{maxFlow.rst => flow-family.rst}  |    37 +-
 src/max_flow/doc/maxFlowApplications.rst           |     6 +-
 src/max_flow/doc/pgr_edgeDisjointPaths.rst         |     8 +-
 ...{pgr_maxFlowPushRelabel.rst => pgr_maxFlow.rst} |    87 +-
 src/max_flow/doc/pgr_maxFlowBoykovKolmogorov.rst   |    16 +-
 src/max_flow/doc/pgr_maxFlowEdmondsKarp.rst        |    16 +-
 src/max_flow/doc/pgr_maxFlowPushRelabel.rst        |    22 +-
 .../doc/pgr_maximumCardinalityMatching.rst         |    16 +-
 src/max_flow/sql/CMakeLists.txt                    |     1 +
 src/max_flow/sql/max_flow.sql                      |     5 +
 src/max_flow/sql/only_flow.sql                     |    86 +
 src/max_flow/src/CMakeLists.txt                    |    12 +-
 ...y_driver.cpp => edge_disjoint_paths_driver.cpp} |    82 +-
 ..._many_driver.h => edge_disjoint_paths_driver.h} |    12 +-
 .../src/edge_disjoint_paths_many_to_many.c         |   169 +-
 src/max_flow/src/edge_disjoint_paths_many_to_one.c |   163 +-
 .../src/edge_disjoint_paths_many_to_one_driver.cpp |   103 -
 .../src/edge_disjoint_paths_many_to_one_driver.h   |    56 -
 src/max_flow/src/edge_disjoint_paths_one_to_many.c |   118 +-
 .../src/edge_disjoint_paths_one_to_many_driver.cpp |   104 -
 .../src/edge_disjoint_paths_one_to_many_driver.h   |    56 -
 src/max_flow/src/edge_disjoint_paths_one_to_one.c  |   108 +-
 .../src/edge_disjoint_paths_one_to_one_driver.cpp  |    99 -
 .../src/edge_disjoint_paths_one_to_one_driver.h    |    55 -
 src/max_flow/src/max_flow_driver.cpp               |   152 +
 ...low_many_to_many_driver.h => max_flow_driver.h} |    13 +-
 src/max_flow/src/max_flow_many_to_many.c           |   183 +-
 src/max_flow/src/max_flow_many_to_many_driver.cpp  |   116 -
 src/max_flow/src/max_flow_many_to_one.c            |   152 +-
 src/max_flow/src/max_flow_many_to_one_driver.cpp   |   117 -
 src/max_flow/src/max_flow_many_to_one_driver.h     |    56 -
 src/max_flow/src/max_flow_one_to_many.c            |   175 +-
 src/max_flow/src/max_flow_one_to_many_driver.cpp   |   117 -
 src/max_flow/src/max_flow_one_to_many_driver.h     |    56 -
 src/max_flow/src/max_flow_one_to_one.c             |   163 +-
 src/max_flow/src/max_flow_one_to_one_driver.cpp    |   114 -
 src/max_flow/src/maximum_cardinality_matching.c    |   123 +-
 .../src/maximum_cardinality_matching_driver.cpp    |    67 +-
 .../src/maximum_cardinality_matching_driver.h      |     6 +-
 src/max_flow/src/pgr_edgedisjointpaths.hpp         |    41 +-
 src/max_flow/src/pgr_maxflow.hpp                   |   106 +-
 .../src/pgr_maximumcardinalitymatching.hpp         |    29 +-
 src/max_flow/test/CMakeLists.txt                   |     0
 .../test/doc-pgr_edgeDisjointPaths.test.sql        |     3 -
 src/max_flow/test/doc-pgr_maxFlow.result           |     9 +
 ...shRelabel.test.sql => doc-pgr_maxFlow.test.sql} |   121 +-
 .../test/doc-pgr_maxFlowBoykovKolmogorov.test.sql  |   114 +-
 .../test/doc-pgr_maxFlowEdmondsKarp.test.sql       |   117 +-
 .../test/doc-pgr_maxFlowPushRelabel.test.sql       |   121 +-
 .../doc-pgr_maximumCardinalityMatching.test.sql    |     3 -
 src/max_flow/test/pgtap/flow-types-check.sql       |    34 +-
 src/max_flow/test/pgtap/internet_example.sql       |   144 +
 src/max_flow/test/test.conf                        |     2 +
 src/pickDeliver/doc/CMakeLists.txt                 |     0
 src/pickDeliver/doc/doc-pickDeliver.queries        |     6 +
 src/pickDeliver/src/customers_input.c              |     6 +-
 src/pickDeliver/src/optimize.cpp                   |     4 +-
 src/pickDeliver/src/order.cpp                      |     2 +-
 src/pickDeliver/src/pgr_pickDeliver.cpp            |    14 +-
 src/pickDeliver/src/pgr_pickDeliver.h              |     4 -
 src/pickDeliver/src/pickDeliver.c                  |    45 +-
 src/pickDeliver/src/pickDeliver_driver.cpp         |    11 +-
 src/pickDeliver/src/pickDeliver_driver.h           |     1 -
 src/pickDeliver/src/solution.cpp                   |     1 -
 src/pickDeliver/src/tw_node.cpp                    |     2 +-
 src/pickDeliver/src/vehicle.cpp                    |     4 +-
 src/pickDeliver/src/vehicle.h                      |     2 +-
 src/pickDeliver/src/vehicle_node.cpp               |     3 +-
 src/pickDeliver/src/vehicle_pickDeliver.cpp        |     8 +-
 src/pickDeliver/test/jet_customers.result          |    60 +-
 src/pickDeliver/test/pickDeliver.data              |   240 +-
 src/proposed.rst                                   |   104 -
 src/proposedNext.rst                               |    71 -
 src/routingFunctions.rst                           |    65 -
 src/topology/doc/doc-pgr_analyzeGraph.queries      |     8 +-
 src/topology/doc/doc-pgr_createTopology.queries    |    20 +-
 src/topology/doc/pgr_analyzeGraph.rst              |    46 +-
 src/topology/doc/pgr_analyzeOneWay.rst             |    24 +-
 src/topology/doc/pgr_createTopology.rst            |    26 +-
 src/topology/doc/pgr_createVerticesTable.rst       |    34 +-
 src/topology/doc/pgr_nodeNetwork.rst               |    54 +-
 .../doc/{topology.rst => topology-functions.rst}   |    22 +-
 src/topology/test/analyzeOneway-any.test.sql       |     3 -
 src/topology/test/createVertTab-any.test.sql       |     3 -
 src/topology/test/doc-pgr_analyzeGraph.test.sql    |    89 +-
 src/topology/test/doc-pgr_createTopology.test.sql  |   232 +-
 src/topology/test/nodeNetwork-any.test.sql         |     3 -
 src/trsp/doc/README.md                             |   185 +-
 src/trsp/doc/doc-trsp.queries                      |     2 +
 src/trsp/doc/pgr_trsp.rst                          |    10 +-
 src/trsp/sql/routing_trsp.sql                      |    31 -
 src/trsp/sql/routing_trsp_vias.sql                 |    32 +-
 src/trsp/sql/trsp_V2.2.sql                         |     2 +-
 src/trsp/sql/viaEdges_v2.2.sql                     |    85 +
 src/trsp/sql/viaVertices_v2.2.sql                  |    82 +
 src/trsp/src/GraphDefinition.cpp                   |   204 +-
 src/trsp/src/GraphDefinition.h                     |    36 +-
 src/trsp/src/trsp.c                                |   183 +-
 src/trsp/src/trsp.h                                |    42 +-
 src/trsp/src/trsp_core.cpp                         |    61 +-
 src/trsp/src/utils.h                               |     6 +-
 src/trsp/test/doc-trsp.test.sql                    |     2 -
 src/trsp/test/issue693.test.sql                    |     2 -
 src/trsp/test/issue704.result                      |     1 -
 src/trsp/test/test.conf                            |     5 +-
 src/trsp/test/trsp-any-02.test.sql                 |     2 -
 ...otes_v2.3.2.result => trsp_notes_v2.4.0.result} |   140 +-
 ..._v2.3.2.test.sql => trsp_notes_v2.4.0.test.sql} |   174 +-
 src/trsp/test/trsp_vias-any-04.test.sql            |     2 -
 src/tsp/doc/{tsp.rst => TSP-family.rst}            |   131 +-
 src/tsp/doc/doc-pgr_TSP.queries                    |     6 +-
 src/tsp/doc/doc-pgr_eucledianTSP.queries           |     6 +-
 src/tsp/doc/doc-tsp.queries                        |    44 +-
 src/tsp/doc/{pgr_tsp.rst => pgr_TSP.rst}           |    26 +-
 src/tsp/doc/pgr_eucledianTSP.rst                   |    10 +-
 src/tsp/doc/pgr_tsp-V2.0.rst                       |   255 -
 src/tsp/doc/tsp_parameters.txt                     |     4 +-
 src/tsp/sql/CMakeLists.txt                         |    12 +-
 src/tsp/sql/TSP.sql                                |    24 +
 src/tsp/sql/_makeMatrix.sql                        |    69 -
 src/tsp/sql/eucledianTSP.sql                       |    24 +
 src/tsp/sql/routing_tsp.sql                        |    49 -
 src/tsp/sql/routing_tsp_wrappers.sql               |    44 -
 src/tsp/sql/tsp_v2.0_coordinates.sql               |    33 +-
 src/tsp/sql/tsp_v2.0_matrix.sql                    |    95 +
 src/tsp/src/CMakeLists.txt                         |     3 -
 src/tsp/src/Dmatrix.cpp                            |    34 +-
 src/tsp/src/eucledianDmatrix.cpp                   |     9 +-
 src/tsp/src/eucledianTSP.c                         |    78 +-
 src/tsp/src/eucledianTSP_driver.cpp                |    86 +-
 src/tsp/src/eucledianTSP_driver.h                  |     2 +-
 src/tsp/src/newTSP.c                               |    78 +-
 src/tsp/src/newTSP_driver.cpp                      |    73 +-
 src/tsp/src/newTSP_driver.h                        |     1 +
 src/tsp/src/pgr_tsp.cpp                            |    44 +-
 src/tsp/src/pgr_tsp.hpp                            |     5 +
 src/tsp/src/tsp.h                                  |    52 -
 src/tsp/src/tsp2.c                                 |   345 -
 src/tsp/src/tsplib.c                               |   616 -
 src/tsp/test/development/gr9882-tsp.test.sql       | 19806 +++++++++---------
 src/tsp/test/doc-pgr_TSP-mac.test.sql              |     2 -
 src/tsp/test/doc-pgr_TSP-windows.test.sql          |     2 -
 src/tsp/test/doc-pgr_TSP.test.sql                  |     2 -
 src/tsp/test/doc-pgr_eucledianTSP.result           |     2 +-
 src/tsp/test/doc-pgr_eucledianTSP.test.sql         |     7 +-
 src/tsp/test/doc-tsp-mac.test.sql                  |     1 -
 src/tsp/test/doc-tsp-windows.test.sql              |     2 +-
 src/tsp/test/doc-tsp.result                        |    32 +-
 src/tsp/test/doc-tsp.test.sql                      |    10 +-
 src/tsp/test/test.conf                             |     3 +-
 src/tsp/test/tsp-v2-0.result                       |   134 +-
 src/tsp/test/tsp-v2-0.test.sql                     |     5 +-
 src/vrp_basic/doc/pgr_vrpOneDepot.rst              |     8 +-
 src/vrp_basic/src/CMakeLists.txt                   |     2 -
 src/vrp_basic/src/VRP.c                            |    58 +-
 src/vrp_basic/src/VRP_Solver.cpp                   |    27 +-
 src/vrp_basic/src/VRP_core.cpp                     |     6 +-
 src/vrp_basic/test/CMakeLists.txt                  |     0
 src/vrp_basic/test/Distance.txt                    | 20200 +++++++++----------
 src/vrp_basic/test/Orders.txt                      |   202 +-
 src/vrp_basic/test/Vehicles.txt                    |    42 +-
 src/vrppdtw/doc/doc-gsoc_vrppdtw.queries           |     6 +
 src/vrppdtw/doc/pgr_gsoc_vrppdtw.rst               |    14 +-
 src/vrppdtw/test/jet_customers.result              |    96 +
 src/vrppdtw/test/jet_customers.test.sql            |   128 +
 src/vrppdtw/test/test.conf                         |     1 +
 src/withPoints/doc/doc-pgr_withPoints.queries      |   100 +-
 src/withPoints/doc/doc-pgr_withPointsCost.queries  |    58 +-
 src/withPoints/doc/doc-pgr_withPointsDD.queries    |    38 +-
 src/withPoints/doc/doc-pgr_withPointsKSP.queries   |    38 +-
 src/withPoints/doc/pgr_withPoints.rst              |    14 +-
 src/withPoints/doc/pgr_withPointsCost.rst          |    14 +-
 src/withPoints/doc/pgr_withPointsDD.rst            |    16 +-
 src/withPoints/doc/pgr_withPointsKSP.rst           |    20 +-
 src/withPoints/doc/pgr_withPointsVia.rst           |    14 +-
 .../doc/{withPoints.rst => withPoints-family.rst}  |    40 +-
 src/withPoints/src/CMakeLists.txt                  |     3 -
 src/withPoints/src/get_new_queries.cpp             |    19 +-
 src/withPoints/src/get_new_queries.h               |     2 +
 src/withPoints/src/many_to_many_withPoints.c       |   162 +-
 .../src/many_to_many_withPoints_driver.cpp         |   210 +-
 .../src/many_to_many_withPoints_driver.h           |     8 +-
 src/withPoints/src/many_to_one_withPoints.c        |   145 +-
 .../src/many_to_one_withPoints_driver.cpp          |   171 -
 src/withPoints/src/many_to_one_withPoints_driver.h |    66 -
 src/withPoints/src/msg_logger.hpp                  |    47 -
 src/withPoints/src/one_to_many_withPoints.c        |   192 +-
 .../src/one_to_many_withPoints_driver.cpp          |   209 -
 src/withPoints/src/one_to_many_withPoints_driver.h |    74 -
 src/withPoints/src/one_to_one_withPoints.c         |   179 +-
 .../src/one_to_one_withPoints_driver.cpp           |   191 -
 src/withPoints/src/one_to_one_withPoints_driver.h  |    65 -
 src/withPoints/src/pgr_withPoints.cpp              |   103 +-
 src/withPoints/src/pgr_withPoints.hpp              |     9 +-
 src/withPoints/test/doc-pgr_withPoints.test.sql    |   130 +-
 .../test/doc-pgr_withPointsCost.test.sql           |   100 +-
 src/withPoints/test/doc-pgr_withPointsDD.test.sql  |    61 +-
 ....result => doc-pgr_withPointsKSP-cygwin.result} |     4 +-
 .../test/doc-pgr_withPointsKSP-cygwin.test.sql     |    26 +
 src/withPoints/test/doc-pgr_withPointsKSP.result   |     8 +-
 src/withPoints/test/doc-pgr_withPointsKSP.test.sql |    52 +-
 src/withPoints/test/doc-pgr_withPointsVia.test.sql |    60 +-
 .../many_to_one_eq_one_to_one_withPoint.test.sql   |    14 +-
 src/withPoints/test/test.conf                      |    14 +-
 ...pdate-files => build-extension-update-files.pl} |    52 +-
 tools/clean/clean.sh                               |     2 +-
 tools/cpplint.py                                   |  6321 ------
 tools/curr-sig/pgrouting--2.3.2.sig                |   141 -
 tools/curr-sig/pgrouting--2.4.0.sig                |   156 +
 tools/git-tools/gitattributes                      |    19 +
 tools/{mk-signature-file => mk-signature-file.pl}  |     0
 tools/release-scripts/check-release.sh             |   327 +
 tools/release-scripts/compile-release.sh           |    51 +
 tools/release-scripts/get_signatures.sh            |    41 +
 tools/scripts/README.txt                           |    32 +
 tools/scripts/code_checker.sh                      |    78 +
 tools/scripts/fix_typos.sh                         |     9 +-
 tools/sigs/pgrouting--2.0.0.sig                    |    27 +-
 tools/sigs/pgrouting--2.0.1.sig                    |    27 +-
 tools/sigs/pgrouting--2.1.0.sig                    |   138 +-
 tools/sigs/pgrouting--2.2.0.sig                    |   182 +-
 tools/sigs/pgrouting--2.2.1.sig                    |   182 +-
 tools/sigs/pgrouting--2.2.2.sig                    |   182 +-
 tools/sigs/pgrouting--2.2.3.sig                    |   182 +-
 tools/sigs/pgrouting--2.2.4.sig                    |   182 +-
 tools/sigs/pgrouting--2.3.0.sig                    |   240 +-
 tools/sigs/pgrouting--2.3.1.sig                    |   242 +-
 tools/sigs/pgrouting--2.3.2.sig                    |   141 +
 tools/template/create.sh                           |    46 +-
 tools/template/doc/CMakeLists.txt                  |     0
 tools/template/doc/doc-pgr_function1.queries       |    32 +
 tools/template/doc/pgr_function1.rst               |   246 +-
 tools/template/sql/function1.sql                   |     8 +-
 tools/template/src/CMakeLists.txt                  |     7 +-
 tools/template/src/function1.c                     |   253 +-
 tools/template/src/function1_driver.cpp            |   143 +-
 tools/template/src/function1_driver.h              |    30 +-
 tools/template/test/doc-function1.result           |    30 +-
 tools/template/test/doc-function1.test.sql         |    20 +-
 .../test/pgtap/function1-compare-dijkstra.sql      |    73 +
 tools/template/test/pgtap/function1-innerQuery.sql |   116 +
 tools/template/test/pgtap/types-check.sql          |   165 +-
 tools/template/test/test.conf                      |    14 +-
 tools/testers/algorithm-tester.pl                  |    29 +-
 tools/testers/pg_prove_tests.sh                    |     9 +-
 tools/testers/setup.sql                            |     2 +
 tools/testers/update-tester.pl                     |    12 -
 tools/testers/update-tester.sh                     |     9 +-
 tools/travis/before_script.sh                      |    14 -
 tools/travis/install-doxygen.sh                    |     8 +-
 tools/travis/install-postgres9.5.sh                |    39 -
 tools/travis/install-postgres9.6.sh                |    39 -
 tools/travis/install_pgtap.sh                      |    26 -
 tools/travis/pgrouting_build.sh                    |     7 +-
 tools/travis/pgrouting_install.sh                  |    85 -
 tools/travis/pgrouting_prepare.sh                  |    47 -
 tools/travis/postGIS_install.sh                    |    93 -
 tools/travis/test-documentation.sh                 |     9 +-
 tools/vagrant/Readme.md                            |    54 -
 tools/vagrant/bootstrap.sh                         |    95 -
 tools/vagrant/build.sh                             |    18 -
 tools/vagrant/install.sh                           |    16 -
 tools/vagrant/packaging.sh                         |    15 -
 tools/vagrant/packaging.sh.sample                  |    15 -
 tools/winnie/build_pgrouting.sh                    |    18 +-
 656 files changed, 55655 insertions(+), 51984 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index e6ac0f4..59e5fe1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -65,12 +65,17 @@ addons:
       - libboost-graph-dev
       - libcgal-dev
       - python-sphinx
-
+      - graphviz
+      - texlive
+      - texlive-font-utils
+      - texlive-latex-extra
+      - ghostscript
 
 
 
 
 install:
+  - pip install sphinx
   - sudo ./tools/travis/install-postgres.sh $POSTGRESQL_VERSION $PG_USER
   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ./tools/travis/install-doxygen.sh ; fi
 
@@ -91,8 +96,8 @@ script:
   - ./tools/travis/pgrouting_test.sh $POSTGRESQL_VERSION $PG_USER
   - ./tools/testers/pg_prove_tests.sh $PG_USER DEBUG
 
-after_script: 
+#after_script: 
   # blank
 
 #after_success:
-  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ./tools/travis/test-documentation.sh ; fi
+  # blank
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3327ce2..092c579 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,29 +7,31 @@
 
 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
 
+if(POLICY CMP0046)
+    cmake_policy(SET CMP0046 OLD)
+endif()
+
+if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} )
+        message(FATAL_ERROR "In-source builds not allowed.
+        Please make a new directory (called a build directory) and run CMake from there.
+        You may need to remove CMakeCache.txt." )
+endif()
+
 #---------------------------------------------
 # Setting kind of build
 #---------------------------------------------
 #
-# On Master cmake -DMAKE_BUILD_TYPE=Release
+# for developing
+# cmake -DMAKE_BUILD_TYPE=Develop
 #----------------------
 
-
 message(STATUS "CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}")
-if(NOT CMAKE_BUILD_TYPE)
-    if (UNIX)
-        set(CMAKE_BUILD_TYPE Release CACHE STRING
-            "Choose the type of build, options are: None Debug Release RelWithDebInfo
-            MinSizeRel."
-            FORCE)
-        message("Running as: Release")
-    else()
-        set(CMAKE_BUILD_TYPE Release CACHE STRING
-            "Choose the type of build, options are: None Debug Release RelWithDebInfo
-            MinSizeRel."
-            FORCE)
-        message("Running as: Release")
-    endif()
+if (CMAKE_BUILD_TYPE MATCHES Develop)
+    set(CMAKE_BUILD_TYPE Debug CACHE STRING
+        "Choose the type of build, options are: None Debug Release RelWithDebInfo
+        MinSizeRel."
+        FORCE)
+    set(WITH_INTERNAL_TESTS)
 endif()
 message(STATUS "CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}")
 
@@ -92,7 +94,7 @@ set(PgRouting_SOURCE_NAMES
     #----------------------
     "alpha_shape"
     "bd_astar"
-    "bd_dijkstra"
+    "bdDijkstra" # 2.4
     "trsp"
 
     #----------------------
@@ -131,100 +133,122 @@ set(PgRouting_SQL_DIRECTORIES
     #----------------------
     # Wrappers for backwards compatibility 
     #----------------------
+    "bd_dijkstra"   # 2.0 wrap of pgr_bdDijkstra
     "apsp_johnson"  # 2.0 wrap of pgr_johnson
     "apsp_warshall" # 2.0 wrap of pgr_warshall
     "kdijkstra"     # 2.0 wrap of pgr_dijkstra & pgr_dijkstraCost
-    "vrppdtw"       # 2.1 wraps of _pgr_pickDeliver 
-
+    "vrppdtw"       # 2.1 wraps of _pgr_pickDeliver
     )
 
 #---------------------------------------------
 # minimum versions
 #---------------------------------------------
-set(DOXYGEN_MINIMUM_VERSION "1.8.6")
+set(DOXYGEN_MINIMUM_VERSION "1.7")
 set(SPHINX_MINIMUM_VERSION "1.1")
+set(POSTGRESQL_MINIMUM_VERSION "9.2.0")
+set(BOOST_MINIMUM_VERSION "1.46")
+set(CGAL_CXX_MINIMUM_VERSION "4.4")
+set(POSTGIS_MINIMUM_VERSION "2.0.0")
+set(GNU_CXX_MINIMUM_VERSION "4.6")
+set(MSVC_CXX_MINIMUM_VERSION "18.0")
 
 message(STATUS "DOXYGEN_MINIMUM_VERSION=${DOXYGEN_MINIMUM_VERSION}")
 message(STATUS "SPHINX_MINIMUM_VERSION=${SPHINX_MINIMUM_VERSION}")
+message(STATUS "POSTGRESQL_MINIMUM_VERSION=${POSTGRESQL_MINIMUM_VERSION}")
+message(STATUS "POSTGIS_MINIMUM_VERSION=${POSTGIS_MINIMUM_VERSION}")
+message(STATUS "GNU_CXX_MINIMUM_VERSION=${GNU_CXX_MINIMUM_VERSION}")
+message(STATUS "CLANG_CXX_MINIMUM_VERSION=${CLANG_CXX_MINIMUM_VERSION}")
+message(STATUS "MSVC_CXX_MINIMUM_VERSION=${MSVC_CXX_MINIMUM_VERSION}")
 
 
 #---------------------------------------------
-# C++ Compiler requirements
+# adding cmake modules
 #---------------------------------------------
 
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+foreach(dir ${CMAKE_MODULE_PATH})
+    message(STATUS "dir='${dir}'")
+endforeach()
+
+include(MacroLibrary)
+include(TargetDistclean)
+
+#---------------------------------------------
+# C++ Compiler requirements
+#---------------------------------------------
 
 include(CheckCXXCompilerFlag)
 
-if (NOT MSVC) 
-    CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
-    message(STATUS "COMPILER_SUPPORTS_CXX0X= ${COMPILER_SUPPORTS_CXX0X}")
-    message(STATUS "CMAKE_CXX_COMPILER= ${CMAKE_CXX_COMPILER}")
-    if(COMPILER_SUPPORTS_CXX0X)
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
-    else()
-        CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
-        message(STATUS "COMPILER_SUPPORTS_CXX11= ${COMPILER_SUPPORTS_CXX11}")
-        if(COMPILER_SUPPORTS_CXX11)
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-        else()
-            message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++0x nor C++11 support.
-            Please use a different C++ compiler.")
-        endif()
+CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
+CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS GNU_CXX_MINIMUM_VERSION)
+        message(FATAL_ERROR "GCC version must be at least ${GNU_CXX_MINIMUM_VERSION}!")
+    endif()
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS MSVC_CXX_MINIMUM_VERSION)
+        message(FATAL_ERROR "MSVC version must be at least ${MSVC_CXX_MINIMUM_VERSION}!")
     endif()
+else()
+    message(STATUS "Unknown compiler minimum version for ${CMAKE_CXX_COMPILER_ID}")
 endif()
 
-#-----------------------------------------------------------------------------
-# PGROUTING version number.
-set(PGROUTING_VERSION_MAJOR "2")
-set(PGROUTING_VERSION_MINOR "3")
-set(PGROUTING_VERSION_PATCH "2")
-
-set(PGROUTING_VERSION_STRING "${PGROUTING_VERSION_MAJOR}.${PGROUTING_VERSION_MINOR}.${PGROUTING_VERSION_PATCH}")
-set(PGROUTING_VERSION "${PGROUTING_VERSION_MAJOR}.${PGROUTING_VERSION_MINOR}")
-
-set(POSTGRESQL_MINIMUM_VERSION "9.1.0")
-set(POSTGIS_MINIMUM_VERSION "2.0.0")
-
-file(STRINGS "${PGROUTING_SOURCE_DIR}/VERSION" PGROUTING_BUILD_STRING)
+if(COMPILER_SUPPORTS_CXX11)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+elseif(COMPILER_SUPPORTS_CXX0X)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+else()
+    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++0x or C++11 flags support.")
+endif()
 
-set(PGROUTING_GIT_TAG "v2.3.2")
 
-#string(REGEX REPLACE "^(.+)-([0-9]+)-g([0-9a-f]+) (.*)$" "\\1" PGROUTING_GIT_TAG ${PGROUTING_BUILD_STRING})
-string(REGEX REPLACE "^(.+)-([0-9a-f]+) (.*)$" "\\1" PGROUTING_GIT_BUILD ${PGROUTING_BUILD_STRING})
-string(REGEX REPLACE "^(.+)-([0-9a-f]+) (.*)$" "\\2" PGROUTING_GIT_HASH ${PGROUTING_BUILD_STRING})
-string(REGEX REPLACE "^(.+)-([0-9a-f]+) (.*)$" "\\3" PGROUTING_GIT_BRANCH ${PGROUTING_BUILD_STRING})
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# PGROUTING version variables
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
 
-set(PGROUTING_VERSION_REVISION_NAME "${PGROUTING_GIT_HASH} ${PGROUTING_GIT_BRANCH}")
-set(PGROUTING_VERSION_REVISION_HASH "${PGROUTING_GIT_HASH}")
+set(PGROUTING_VERSION_MAJOR "2")
+set(PGROUTING_VERSION_MINOR "4")
+set(PGROUTING_VERSION_PATCH "0")
+set(PGROUTING_VERSION_DEV "")
 
-message(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
-message(STATUS "PGROUTING_BUILD_STRING: ${PGROUTING_BUILD_STRING}")
-message(STATUS "PGROUTING_GIT_TAG: ${PGROUTING_GIT_TAG}")
-message(STATUS "PGROUTING_GIT_BUILD: ${PGROUTING_GIT_BUILD}")
-message(STATUS "PGROUTING_GIT_HASH: ${PGROUTING_GIT_HASH}")
-message(STATUS "PGROUTING_GIT_BRANCH: ${PGROUTING_GIT_BRANCH}")
-message(STATUS "PGROUTING_VERSION_REVISION_NAME: ${PGROUTING_VERSION_REVISION_NAME}")
+set(PGROUTING_SHORT_VERSION "${PGROUTING_VERSION_MAJOR}.${PGROUTING_VERSION_MINOR}")
+set(PGROUTING_VERSION "${PGROUTING_VERSION_MAJOR}.${PGROUTING_VERSION_MINOR}.${PGROUTING_VERSION_PATCH}")
+set(PGROUTING_FULL_VERSION "v${PGROUTING_VERSION}${PGROUTING_VERSION_DEV}")
 
-message(STATUS "PGROUTING_SOURCE_DIR: ${PGROUTING_SOURCE_DIR}")
-message(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
 
-message(STATUS "PGROUTING_VERSION_REVISION_HASH: ${PGROUTING_VERSION_REVISION_HASH}")
-message(STATUS "POSTGRESQL_BIN: ${POSTGRESQL_BIN}")
+#---------------------------------------------
+# Variables used in pgr_version()
+#---------------------------------------------
+file(STRINGS "${PGROUTING_SOURCE_DIR}/VERSION" PGROUTING_BUILD_STRING)
 
+#string(REGEX REPLACE "^(.+)-([^-]+)-[0-9]+-([0-9a-f]+) (.*)$" "\\2" PGROUTING_GIT_BUILD ${PGROUTING_BUILD_STRING})
+string(REGEX REPLACE "^([0-9]+)-([0-9a-f]+) (.*)$" "\\2" PGROUTING_GIT_HASH ${PGROUTING_BUILD_STRING})
+string(REGEX REPLACE "^([0-9]+)-([0-9a-f]+) (.*)$" "\\3" PGROUTING_GIT_BRANCH ${PGROUTING_BUILD_STRING})
+
+
+if (PGROUTING_DEBUG)
+    message(STATUS "PGROUTING_VERSION: ${PGROUTING_FULL_VERSION}")
+    message(STATUS "PGROUTING_SHORT_VERSION: ${PGROUTING_FULL_VERSION}")
+    message(STATUS "PGROUTING_FULL_VERSION: ${PGROUTING_FULL_VERSION}")
+    message(STATUS "VERSION file contents: ${PGROUTING_BUILD_STRING}")
+    message(STATUS "PGROUTING_GIT_HASH: ${PGROUTING_GIT_HASH}")
+    message(STATUS "PGROUTING_GIT_BRANCH: ${PGROUTING_GIT_BRANCH}")
+    message(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
+    message(STATUS "PGROUTING_SOURCE_DIR: ${PGROUTING_SOURCE_DIR}")
+    message(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
+endif()
 
 
 #-----------------------------------------------------------------------------
-# CMAKE configuration
-# This is for my mingw64 environment, it should go away
-set(CMAKE_PREFIX_PATH /usr:/usr/local)
-set(CMAKE_INCLUDE_PATH /usr:/usr/local)
-set(CMAKE_LIBRARY_PATH /usr:/usr/local)
-
-add_subdirectory(cmake)
-set(CMAKE_MODULE_PATH "${PGROUTING_SOURCE_DIR}/cmake")
+#-----------------------------------------------------------------------------
+# Windows compiler flags
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
 
-include(MacroLibrary)
-include(TargetDistclean)
 
 if(WIN32 AND NOT MSVC)
     set(OS_BUILD  $ENV{OS_BUILD})
@@ -243,153 +267,212 @@ if(WIN32 AND NOT MSVC)
     if (NOT GMP_ROOT)
         set(GMP_ROOT c:/ming${OS_BUILD}/mingw${OS_BUILD})
     endif(NOT GMP_ROOT)
-    message(STATUS "OS_BUILD=${OS_BUILD}")
-    message(STATUS "CGAL_ROOT=${CGAL_ROOT}")
-    message(STATUS "GMP_ROOT=${GMP_ROOT}")
-    message(STATUS "BOOST_ROOT=${BOOST_ROOT}")
-    message(STATUS "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}")
+    if (PGROUTING_DEBUG)
+        message(STATUS "OS_BUILD=${OS_BUILD}")
+        message(STATUS "CGAL_ROOT=${CGAL_ROOT}")
+        message(STATUS "GMP_ROOT=${GMP_ROOT}")
+        message(STATUS "BOOST_ROOT=${BOOST_ROOT}")
+        message(STATUS "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}")
+    endif()
 endif(WIN32 AND NOT MSVC)
 
+if(WIN32 AND MSVC)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_DEPRECATE")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_DEPRECATE")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_WARNINGS")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_NONSTDC_NO_DEPRECATE")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -EHsc")
+endif()
+
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Finding prerequisites
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
 
+#---------------------------------------------
+#---------------------------------------------
+# Perl
+#---------------------------------------------
+#---------------------------------------------
 include(FindPerl)
 if(NOT PERL_EXECUTABLE)
     message(FATAL_ERROR " Please check your Perl installation.")
 endif(NOT PERL_EXECUTABLE)
 
+#---------------------------------------------
+#---------------------------------------------
+# PostgreSQL
+#---------------------------------------------
+#---------------------------------------------
 find_package(PostgreSQL)
 if(NOT POSTGRESQL_FOUND)
     message(FATAL_ERROR " Please check your PostgreSQL installation.") 
 endif(NOT POSTGRESQL_FOUND)
 
-#set(Boost_DEBUG ON)
-find_package(Boost)
+if(NOT POSTGRESQL_VERSION_STRING)
+    message(FATAL_ERROR "pg_config was not found. Please check your PostgreSQL installation!")
+endif(NOT POSTGRESQL_VERSION_STRING)
+string(SUBSTRING "${POSTGRESQL_VERSION_STRING}" 11 -1 POSTGRESQL_VERSION)
+string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*" "\\1\\2" PGSQL_VERSION ${POSTGRESQL_VERSION})
+
+if("${POSTGRESQL_VERSION}" VERSION_LESS "${POSTGRESQL_MINIMUM_VERSION}")
+    message(FATAL_ERROR " PostgreSQL ${POSTGRESQL_MINIMUM_VERSION} or greater is required.")
+endif("${POSTGRESQL_VERSION}" VERSION_LESS "${POSTGRESQL_MINIMUM_VERSION}")
+
+#-------
+include_directories(${POSTGRESQL_INCLUDE_DIR})
+if(WIN32)
+    include_directories(${POSTGRESQL_INCLUDE_DIR}/port/win32)
+    if(MSVC)
+        include_directories(${POSTGRESQL_INCLUDE_DIR}/port/win32_msvc/)
+    endif(MSVC)
+endif(WIN32)
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPGSQL_VERSION=${PGSQL_VERSION}")
+set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DPGSQL_VERSION=${PGSQL_VERSION}")
+message(STATUS "PGSQL_VERSION=${PGSQL_VERSION}")
+
+
+
+#---------------------------------------------
+#---------------------------------------------
+# Boost
+#---------------------------------------------
+#---------------------------------------------
+find_package(Boost ${BOOST_MINIMUM_VERSION})
 if(Boost_INCLUDE_DIRS)
     message(STATUS "Boost headers were found here: ${Boost_INCLUDE_DIRS}")
-    #find_file(MYVAR geometry.hpp)
-    #message(STATUS "geometry.hpp  found here: ${MYVAR}")
 else(Boost_INCLUDE_DIRS)
     message(FATAL_ERROR " Please check your Boost installation ") 
 endif(Boost_INCLUDE_DIRS)
 
-find_package(CGAL)
+#-------
+include_directories(${Boost_INCLUDE_DIRS})
+
+
+#---------------------------------------------
+#---------------------------------------------
+# CGAL
+#---------------------------------------------
+#---------------------------------------------
+find_package(CGAL ${CGAL_MINIMUM_VERSION})
 if(NOT CGAL_FOUND)
     message(FATAL_ERROR " Please check your CGAL installation, or set correct path to CGAL_INCLUDE_DIR and CGAL_LIBRARIES.")
 endif(NOT CGAL_FOUND)
 
-if(NOT POSTGRESQL_VERSION_STRING)
-    message(FATAL_ERROR "pg_config was not found. Please check your PostgreSQL installation!")
-endif(NOT POSTGRESQL_VERSION_STRING)
+#-------
+include_directories(${CGAL_INCLUDE_DIR})
 
-message(STATUS "POSTGRESQL_VERSION_STRING is ${POSTGRESQL_VERSION_STRING}")
-string(SUBSTRING "${POSTGRESQL_VERSION_STRING}" 11 -1 POSTGRESQL_VERSION)
-message(STATUS "POSTGRESQL_VERSION is ${POSTGRESQL_VERSION}")
-string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*" "\\1\\2" PGSQL_VERSION ${POSTGRESQL_VERSION})
-message(STATUS "PGSQL_VERSION is ${PGSQL_VERSION}")
+#---------------------------------------------
+#---------------------------------------------
+# PgRouting includes
+#---------------------------------------------
+#---------------------------------------------
 
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPGSQL_VERSION=${PGSQL_VERSION}")
+set(PGROUTING_INCLUDE_DIRECTORIES
+    ${PGROUTING_SOURCE_DIR}/src/common/src
+    ${PGROUTING_SOURCE_DIR}/src/dijkstra/src
+    )
 
-#TODO maybe needs a wrapper for visual studio
-if(WIN32 AND MSVC)
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_DEPRECATE")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_DEPRECATE")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_WARNINGS")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_NONSTDC_NO_DEPRECATE")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -EHsc")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}")
+#-------
+include_directories(${PGROUTING_INCLUDE_DIRECTORIES})
+
+
+#---------------------------------------------
+if (PGROUTING_DEBUG)
+    message(STATUS "PERL_VERSION_STRING = ${PERL_VERSION_STRING}")
+    message(STATUS "POSTGRESQL_VERSION is ${PGSQL_VERSION}")
+    message(STATUS "PGSQL_VERSION is ${PGSQL_VERSION}")
+    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
+    message(STATUS "CGAL_INCLUDE_DIR: ${CGAL_INCLUDE_DIR}")
+    message(STATUS "PGROUTING_INCLUDE_DIRECTORIES = ${PGROUTING_INCLUDE_DIRECTORIES}")
+    message(STATUS "POSTGRESQL_INCLUDE_DIR = ${POSTGRESQL_INCLUDE_DIR}")
+    message(STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}")
 endif()
 
-if("${POSTGRESQL_VERSION}" VERSION_LESS "${POSTGRESQL_MINIMUM_VERSION}")
-    message(FATAL_ERROR " PostgreSQL ${POSTGRESQL_MINIMUM_VERSION} or greater is required.")
-endif("${POSTGRESQL_VERSION}" VERSION_LESS "${POSTGRESQL_MINIMUM_VERSION}")
+
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Posgres installation directories
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+
 
 
+#---------------------------------------------
+# library directory
+#---------------------------------------------
 execute_process(
     COMMAND ${POSTGRESQL_PG_CONFIG} --pkglibdir
     OUTPUT_STRIP_TRAILING_WHITESPACE
     OUTPUT_VARIABLE LIB_DIR)
 
-if(LIB_DIR)
-    message(STATUS "Install directory for libraries is set to ${LIB_DIR}")
-else(LIB_DIR)
+if(NOT LIB_DIR)
     message(FATAL_ERROR "pg_config --pkglibdir failed to return a value. Please check your PostgreSQL installation!")
-endif(LIB_DIR)
+endif()
 
+#-------
 set(LIBRARY_INSTALL_PATH ${LIB_DIR})
 
+#---------------------------------------------
+# extension directory
+#---------------------------------------------
+
 execute_process(
     COMMAND ${POSTGRESQL_PG_CONFIG} --sharedir
     OUTPUT_STRIP_TRAILING_WHITESPACE
     OUTPUT_VARIABLE SHARE_DIR)
 
+#-------
 if(SHARE_DIR)
     set(SHARE_DIR "${SHARE_DIR}/extension")
-    message(STATUS "Extension directory for SQL files is set to ${SHARE_DIR}")
 else(SHARE_DIR)
     message(FATAL_ERROR "pg_config --sharedir failed to return a value. Please check your PostgreSQL installation!")
 endif(SHARE_DIR)
 
-#-------------------------------------
-# Handles documentation
-#-------------------------------------
-set(PROJECT_NAME  "pgRouting")
-set(PROJECT_BRIEF "pgRouting extends the PostGIS / PostgreSQL geospatial database to provide geospatial routing functionality.")
-set(PROJECT_NUMBER  "${PGROUTING_GIT_TAG}")
-add_subdirectory(doxygen)
-add_subdirectory(doc)
-#-------------------------------------
-
-#include directories: files in alphabetical order
-set(PGROUTING_INCLUDE_DIRECTORIES
-    ${PGROUTING_SOURCE_DIR}/src/common/src
-    ${PGROUTING_SOURCE_DIR}/src/dijkstra/src
-    )
-
-include_directories(${PGROUTING_INCLUDE_DIRECTORIES} ${POSTGRESQL_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${CGAL_INCLUDE_DIR})
-message(STATUS "PGROUTING_INCLUDE_DIRECTORIES = ${PGROUTING_INCLUDE_DIRECTORIES}")
-message(STATUS "POSTGRESQL_INCLUDE_DIR = ${POSTGRESQL_INCLUDE_DIR}")
-message(STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}")
-
-get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
-foreach(dir ${dirs})
-    message(STATUS "dir='${dir}'")
-endforeach()
+#---------------------------------------------
+if (PGROUTING_DEBUG)
+    message(STATUS "Install directory for libraries is set to ${LIB_DIR}")
+    message(STATUS "Extension directory for SQL files is set to ${SHARE_DIR}")
+endif()
 
 
 
-if(WIN32)
-    include_directories(${POSTGRESQL_INCLUDE_DIR}/port/win32)
-    if(MSVC)
-        include_directories(${POSTGRESQL_INCLUDE_DIR}/port/win32_msvc/)
-    endif(MSVC)
-endif(WIN32)
+#---------------------------------------------
+# Special cases for windows
+#---------------------------------------------
 
-# we need link libpostgres.a on win32 env
 if(WIN32)
     message(STATUS "LINK_DIRECTORIES = ${POSTGRESQL_LIBRARIES}")
     link_directories(${POSTGRESQL_LIBRARIES} ${LIB_DIR})
     link_libraries(postgres)
-endif(WIN32)
+endif()
+
+#-----------------------------------------------------------------------------
+
+if (PGROUTING_DEBUG)
+    get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
+    foreach(dir ${dirs})
+        message(STATUS "dir='${dir}'")
+    endforeach()
+endif()
 
-# TODO default compilation with -DNDEBUG 
 
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 #compiler directives
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 if(UNIX OR (WIN32 AND NOT MSVC))
-    set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}  -std=gnu99 ")
+    set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}  -std=gnu99")
 endif()
 
 
 CHECK_C_COMPILER_FLAG("-frounding-math" C_COMPILER_SUPPORTS_ROUNDING_MATH)
 CHECK_CXX_COMPILER_FLAG("-frounding-math" CXX_COMPILER_SUPPORTS_ROUNDING_MATH)
-if(C_COMPILER_SUPPORTS_ROUNDING_MATH)
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -frounding-math")
-endif()
-if(CXX_COMPILER_SUPPORTS_ROUNDING_MATH)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frounding-math")
-endif()
 
 
 if(NOT WIN32)
@@ -397,26 +480,35 @@ if(NOT WIN32)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC ")
 endif()
 
+if(WIN32 AND MSVC)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}")
+endif()
+
+if(C_COMPILER_SUPPORTS_ROUNDING_MATH)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -frounding-math ")
+endif()
+if(CXX_COMPILER_SUPPORTS_ROUNDING_MATH)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frounding-math ")
+endif()
 
-set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG}  -Wall -Wconversion -pedantic -fmax-errors=10  -Wmissing-prototypes")
-#TODO remove the optimizer flag when pgr_bdijkstra gets fixed
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -O1 -fno-implicit-inline-templates -Wconversion -pedantic -fmax-errors=10 -Wunused -Wuninitialized -Wextra -Wdouble-promotion -Werror")
+set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG}   -Wall -Wconversion -pedantic -Wmissing-prototypes -Wunused -Wuninitialized -Wextra -Wdouble-promotion")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-implicit-inline-templates -Wconversion -pedantic  -Wunused -Wuninitialized -Wextra -Wdouble-promotion")
 
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-#if(CDEBUG)
-message(STATUS "CMAKE_CXX_FLAGS_DEBUG= ${CMAKE_CXX_FLAGS_DEBUG}")
-message(STATUS "CMAKE_CXX_FLAGS_RELEASE= ${CMAKE_CXX_FLAGS_RELEASE}")
-message(STATUS "CMAKE_CXX_FLAGS= ${CMAKE_CXX_FLAGS}")
+if (PGROUTING_DEBUG)
+    message(STATUS "CMAKE_CXX_FLAGS_DEBUG= ${CMAKE_CXX_FLAGS_DEBUG}")
+    message(STATUS "CMAKE_CXX_FLAGS_RELEASE= ${CMAKE_CXX_FLAGS_RELEASE}")
+    message(STATUS "CMAKE_CXX_FLAGS= ${CMAKE_CXX_FLAGS}")
 
-message(STATUS "CMAKE_C_FLAGS_DEBUG= ${CMAKE_C_FLAGS_DEBUG}")
-message(STATUS "CMAKE_C_FLAGS_RELEASE= ${CMAKE_C_FLAGS_RELEASE}")
-message(STATUS "CMAKE_C_FLAGS= ${CMAKE_C_FLAGS}")
+    message(STATUS "CMAKE_C_FLAGS_DEBUG= ${CMAKE_C_FLAGS_DEBUG}")
+    message(STATUS "CMAKE_C_FLAGS_RELEASE= ${CMAKE_C_FLAGS_RELEASE}")
+    message(STATUS "CMAKE_C_FLAGS= ${CMAKE_C_FLAGS}")
 
-message(STATUS "UNIX=${UNIX}")
-message(STATUS "WIN32=${WIN32}")
-message(STATUS "MSVC=${MSVC}")
-#endif()
+    message(STATUS "UNIX=${UNIX}")
+    message(STATUS "WIN32=${WIN32}")
+    message(STATUS "MSVC=${MSVC}")
+endif()
 
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
@@ -425,7 +517,7 @@ message(STATUS "MSVC=${MSVC}")
 # Include the working directories
 #====================================================================
 
-if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
+if(WITH_INTERNAL_TESTS)
     message("Including InternalQueryTests")
     set(PgRouting_SOURCE_NAMES ${PgRouting_SOURCE_NAMES} "internalQueryTests")
 endif()
@@ -473,14 +565,14 @@ message("Building the library names")
 #----------------------
 # PGROUTING installation files names have the following name
 #----------------------
-set(PGROUTING_LIB_NAME "pgrouting-${PGROUTING_VERSION}")
+set(PGROUTING_LIB_NAME "pgrouting-${PGROUTING_SHORT_VERSION}")
 
 
 #----------------------
 # PGROUTING library name used in the pgr_functions
 #  '$libdir/${PGROUTING_LIBRARY_NAME}'
 #----------------------
-set(PGROUTING_LIBRARY_NAME "libpgrouting-${PGROUTING_VERSION}")
+set(PGROUTING_LIBRARY_NAME "libpgrouting-${PGROUTING_SHORT_VERSION}")
 
 add_library(${PGROUTING_LIB_NAME}
     ${LIBRARY_MODE_TARGET}
@@ -541,18 +633,26 @@ foreach(file_in ${PACKAGE_SQL_FILES})
     add_dependencies(ProcessSQLFiles ${file_in})
     file(READ "${file_out}" CONTENTS)
     string(REGEX REPLACE "/\\*PGR-(GNU|MIT).*PGR-(GNU|MIT)\\*/" "" STRIP_CONTENTS "${CONTENTS}")
-    string(REGEX REPLACE "/\\*/*FOR.*FOR-USER\\*/" "" CONTENTS "${STRIP_CONTENTS}")
+    string(REGEX REPLACE "/\\*FOR.*USER\\*/" "" CONTENTS "${STRIP_CONTENTS}")
     file(APPEND ${TEMP_LIB_FILENAME} "${CONTENTS}")
 endforeach()
 
 configure_file("${TEMP_LIB_FILENAME}"
-    "${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION_STRING}.sql"
+    "${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION}.sql"
     )
-message(STATUS "Created ${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION_STRING}.sql")
+message(STATUS "Created ${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION}.sql")
 #
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# DOCUMENTATION
+#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+add_subdirectory(doxygen)
+add_subdirectory(doc)
+
 
 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 # Handling pgrouting.control.in files
@@ -568,41 +668,43 @@ message(STATUS "Created ${CMAKE_BINARY_DIR}/lib/pgrouting.control")
 
 
 # create the signature file for this release
-message(STATUS "Creating lib/pgrouting--${PGROUTING_VERSION_STRING}.sig")
+message(STATUS "Creating lib/pgrouting--${PGROUTING_VERSION}.sig")
 execute_process(
-    COMMAND ${PERL_EXECUTABLE} ${PGROUTING_SOURCE_DIR}/tools/mk-signature-file ${PGROUTING_VERSION_STRING}
+    COMMAND cp ${PGROUTING_SOURCE_DIR}/tools/curr-sig/pgrouting--${PGROUTING_VERSION}.sig ${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION}.sig
+    #COMMAND ${PERL_EXECUTABLE} ${PGROUTING_SOURCE_DIR}/tools/mk-signature-file.pl ${PGROUTING_VERSION}
     WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
     RESULT_VARIABLE SIG_RESULT
     )
 if(SIG_RESULT)
-    message(FATAL_ERROR "    SIG_RESULT: ${SIG_RESULT}")
+    message(FATAL_ERROR "SIG_RESULT: ${SIG_RESULT}")
 endif(SIG_RESULT)
 
 # create the extension update scripts
 execute_process(
-    COMMAND ${PERL_EXECUTABLE} ${PGROUTING_SOURCE_DIR}/tools/build-extension-update-files ${PGROUTING_VERSION_STRING} ${PGROUTING_SOURCE_DIR}
+    COMMAND ${PERL_EXECUTABLE} ${PGROUTING_SOURCE_DIR}/tools/build-extension-update-files.pl ${PGROUTING_VERSION} ${PGROUTING_SOURCE_DIR}
     WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
     RESULT_VARIABLE UPDATE_RESULT
     )
 if(UPDATE_RESULT)
-    message(FATAL_ERROR "   UPDATE_RESULT: ${UPDATE_RESULT}")
-endif(UPDATE_RESULT)
+    message(FATAL_ERROR "UPDATE_RESULT: ${UPDATE_RESULT}")
+endif()
 
 # make a list of the files we need to install for version updates
 file(GLOB VERSION_UPDATE_FILES "${CMAKE_BINARY_DIR}/lib/pgrouting--*--*.sql")
+
 # this will create the commands in the makefile under the install target
 if(UNIX)
     file(GLOB_RECURSE LIBS_TO_INSTALL "${CMAKE_BINARY_DIR}/lib/*.so")
-else(UNIX)
+else()
     file(GLOB_RECURSE LIBS_TO_INSTALL "${CMAKE_BINARY_DIR}/lib/*.dll")
-endif(UNIX)
+endif()
 
 message(STATUS "LIBS_TO_INSTALL=${LIBS_TO_INSTALL}")
 
-#install(FILES ${LIBS_TO_INSTALL}  DESTINATION ${LIB_DIR})
+install(FILES ${LIBS_TO_INSTALL}  DESTINATION ${LIB_DIR})
 
 install(FILES
-    "${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION_STRING}.sql"
+    "${CMAKE_BINARY_DIR}/lib/pgrouting--${PGROUTING_VERSION}.sql"
     "${CMAKE_BINARY_DIR}/lib/pgrouting.control"
     ${VERSION_UPDATE_FILES}
     DESTINATION "${SHARE_DIR}")
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..528083a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,42 @@
+# How to contribute
+
+We are really glad you are reading this, because we need volunteer developers to help this project.
+
+If you have not already, come find us in [![Join the chat at https://gitter.im/pgRouting/pgrouting](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pgRouting/pgrouting?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) or contact us via [mailing list](http://lists.osgeo.org/mailman/listinfo/pgrouting-dev). We want you working on things you're excited about. Drop a message and if some one can assist you, will contact you back ASAP.
+
+Here are some important resources:
+
+  * [pgRouting for Developers](http://docs.pgrouting.org/doxy/2.4/index.html) has the internals C/C++ code information,
+  * [Wish list on the wiki](https://github.com/pgRouting/pgrouting/wiki/GSoC-Ideas) is the foot view of what we think the community needs.
+  * [Additional wish lst](https://github.com/pgRouting/pgrouting/issues?q=is%3Aopen+is%3Aissue+label%3A%22Functionality+Request%22). (TODO to move the information to the wiki wish list)
+  * Participate on the [discussions](https://github.com/pgRouting/pgrouting/issues?q=is%3Aopen+is%3Aissue+label%3ADiscussion).
+  * Participate fixing [Documentation](https://github.com/pgRouting/pgrouting/issues?q=is%3Aopen+is%3Aissue+label%3ADocumentation).
+  * Find a bug? [Let us know](https://github.com/pgRouting/pgrouting/issues).
+
+## Contribution agreement
+
+Any kind of contribution will automatically fall to the following Licences:
+
+- Code contribution: GNU GENERAL PUBLIC LICENSE Version 2,
+  - Directly by making a pul explicit pull request.
+  - Indirectly by posting code on issues/wiki/gitter/mailng lists
+- Documentation contribution:
+  - Creative Commons Attribution-Share Alike 3.0
+  
+## Submitting changes
+
+
+Write a clear log message for your commits. One-line messages are fine for small changes, but bigger changes should have more information.
+Fill the commit message template.
+
+## Coding conventions
+
+Start reading our code and you'll get the hang of it. We optimize for readability:
+This is open source software. Consider the people who will read your code, and make it look nice for them.
+
+  * We indent using four spaces (soft tabs)
+  * We use cpplint for linting C/C++ code.
+
+Thanks,
+pgRouting team
+
diff --git a/NEWS b/NEWS
index 24d59dd..d865619 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,27 @@
 
+Changes for 2.4.0
+-------------------------------------------------------------------------------
+
+* New Signatures:
+  * pgr_bdDijkstra
+* New Proposed functions
+  * pgr_maxFlow
+  * pgr_astar(one to many)
+  * pgr_astar(many to one)
+  * pgr_astar(many to many)
+  * pgr_astarCost(one to one)
+  * pgr_astarCost(one to many)
+  * pgr_astarCost(many to one)
+  * pgr_astarCost(many to many)
+  * pgr_astarCostMatrix
+* Deprecated Signatures
+  * pgr_bddijkstra - use pgr_bdDijkstra instead
+* Deprecated functions
+  * pgr_pointsToVids
+* Bug fixes on proposed functions
+  * pgr_withPointsKSP: fixed ordering
+* TRSP original code is used with no changes on the compilation warnings
+
 Changes for 2.3.2
 -------------------------------------------------------------------------------
 
@@ -20,7 +43,7 @@ Changes for 2.3.1
 Changes for 2.3.0
 -------------------------------------------------------------------------------
 
-- New Signatures:
+* New Signatures:
 
   * pgr_TSP
   * pgr_aStar
@@ -50,7 +73,7 @@ Changes for 2.3.0
 * Deprecated functions
 
   * pgr_flip_edges
-  * pgr_vidsToDmatrix
+  * pgr_vidsToDmatrix(2 signatures)
   * pgr_pointsToDMatrix
   * pgr_textToPoints
 
@@ -87,55 +110,57 @@ Changes for 2.2.0
     - Adding a row_where and outall optional parameters
 
 - Signature fix
-  - pgr_dijkstra  -- to match what was documented (the pgr_dijkstra from V2.0)
+  - pgr_dijkstra  -- to match what was documented on the pgr_dijkstra from V2.0
 
 - New functions
   - pgr_floydWarshall
   - pgr_Johnson
-  - pgr_DijkstraCost
+  - pgr_dijkstraCost(one to one)
+  - pgr_dijkstraCost(one to many)
+  - pgr_dijkstraCost(many to one)
+  - pgr_dijkstraCost(many to many)
 
 - New Proposed functions
-  - pgr_withPoints
-  - pgr_withPointsCost
-  - pgr_withPointsDD
+  - pgr_withPoints(one to one)
+  - pgr_withPoints(one to many)
+  - pgr_withPoints(many to one)
+  - pgr_withPoints(many to many)
+  - pgr_withPointsCost(one to one)
+  - pgr_withPointsCost(one to many)
+  - pgr_withPointsCost(many to one)
+  - pgr_withPointsCost(many to many)
+  - pgr_withPointsDD(single vertex)
+  - pgr_withPointsDD(multiple vertices)
   - pgr_withPointsKSP
   - pgr_dijkstraVia
 
 
 - Deprecated functions:
   - pgr_apspWarshall  use pgr_floydWarshall instead
-  - pgr_apspJohnson   use pgr_Johnson instead
+  - pgr_apspJohnson   use pgr_johnson instead
   - pgr_kDijkstraCost use pgr_dijkstraCost instead
   - pgr_kDijkstraPath use pgr_dijkstra instead
-
+  - pgr_makeDistanceMatrix
 
 
 Changes for 2.1.0
 -------------------------------------------------------------------------------
 
- - A C and C++ library for developer was created
-
-   - encapsulates postgreSQL related functions
-   - encapsulates Boost.Graph graphs
-
-     - Directed Boost.Graph 
-     - Undirected Boost.graph.
 
-   - allow any-integer in the id's
-   - allow any-numerical on the cost/reverse_cost columns
+ - New Signatures
+   - pgr_dijkstra(one to many)
+   - pgr_dijkstra(many to one)
+   - pgr_dijkstra(many to many)
+   - pgr_drivingDistance(multiple vertices)
 
- - Three Functions where completely re-factored using the developers library and functionality was added.
+ - Three Functions where completely re-factored
 
-   - pgr_dijkstra
+   - pgr_dijkstra(one to one)
    - pgr_ksp
-   - pgr_drivingDistance
+   - pgr_drivingDistance(single vertex)
 
  - Improved
-   Alphashape function now can generate better polygons with holes and custom parameter
-
- - Instead of generating many libraries:
-   - All functions are encapsulated in one library
-   - The library has a the prefix 2-1-0
+   - pgr_alphaShape function now can generate better polygons with holes and custom parameter
 
  - Added proposed functions to be evaluated:
    - Proposed functions from Steve Woodbridge, (Classified as Convenience by the author.)
@@ -149,7 +174,33 @@ Changes for 2.1.0
 
    - Added proposed functions from GSoc Projects:
       - pgr_vrppdtw
+      - pgr_vrponedepot
+
+ - Deprecated functions
+    - pgr_getColumnName
+    - pgr_getTableName
+    - pgr_isColumnCndexed
+    - pgr_isColumnInTable
+    - pgr_quote_ident
+    - pgr_versionless
+    - pgr_startPoint
+    - pgr_endPoint
+    - pgr_pointToId
+
+ - Instead of generating many libraries:
+   - All functions are encapsulated in one library
+   - The library has a the prefix 2-1-0
+
+ - A C and C++ library for developer was created
+
+   - encapsulates postgreSQL related functions
+   - encapsulates Boost.Graph graphs
 
+     - Directed Boost.Graph 
+     - Undirected Boost.graph
+
+   - allow any-integer in the id's
+   - allow any-numerical on the cost/reverse_cost columns
  - Removed the 1.x legacy functions
 
  - Some bug fixes in other functions
@@ -179,6 +230,7 @@ Changes for 2.0.0
 * Support for ``st_`` PostGIS function prefix
 * Added ``pgr_`` prefix to functions and types
 * Better documentation: http://docs.pgrouting.org
+* shooting_star is discontinued
 
 
 Changes for release 1.05
diff --git a/README.md b/README.md
index a38faae..a5f5e13 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@
 
 ### Branches
 
-* The *master* branch has the latest minor release. (2.3.2)
-* The *develop* branch has the next minor release. (2.4.0)
+* The *master* branch has the latest minor release. (2.4.0)
+* The *develop* branch has the next minor release. (2.5.0-dev)
 
 For the complete list of releases go to:
 https://github.com/pgRouting/pgrouting/releases
@@ -51,11 +51,10 @@ https://github.com/pgRouting/pgrouting/releases
 	</tr>
 </table>
 
-* travis: Postgis 2.3.0 for  Postgres 9.4, 9.5, 9.6
+* travis: Postgis 2.2 for  Postgres 9.1, 9.2, 9.3, 9.4, 9.5
   * precise
-  * trusty (except 9.4)
-* jenkins: g++ 4.8 on 32 & 64 bits for Postgis 2.3.0 and Postgres 9.4, 9.5, 9.6
-* appveyor: vs1013 Postgis 2.3.0 Postgres 9.4
+* jenkins: g++ 4.8 on 32 & 64 bits for Postgis 2.3.0dev and Postgres 9.4, 9.5, 9.6
+* appveyor: vs1013 Postgis 2.2 Postgres 9.4
 
 
 
@@ -95,18 +94,24 @@ Family of functions include:
 
 ## REQUIREMENTS
 
+Building reqirements
+--------------------
+* perl 
 * C and C++ compilers
-  * g++ >= 4.6
-* Postgresql version >= 9.1
-* PostGIS version >= 2.0
-* The Boost Graph Library (BGL).
-  * Version >= 1.46
-* Version >= 1.55 for linux
-* Version >= 1.58 for MAC
+  * GNU >= 4.6
+  * MSVC >= 18.0
+* Postgresql >= 9.2
+* The Boost Graph Library (BGL) >= 1.46
 * CMake >= 2.8.8
 * CGAL >= 4.4
 * Sphinx >= 1.2
 
+
+User's reqirements
+--------------------
+
+* PostGIS  >= 2.0
+
 ## INSTALLATION
 
 See online documentation: http://docs.pgrouting.org/
@@ -135,7 +140,7 @@ Build with documentation (requires [Sphinx](http://sphinx-doc.org/))
 
 	cmake -DWITH_DOC=ON ..
 
-Postgresql 9.1+
+Postgresql 9.2+
 
 	createdb mydatabase
 	psql mydatabase -c "CREATE EXTENSION postgis"
diff --git a/VERSION b/VERSION
index d503826..a3d3788 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4080-1f2af3c52 master
+4681-6cf07edf1 master
diff --git a/Vagrantfile b/Vagrantfile
deleted file mode 100644
index cec0d0d..0000000
--- a/Vagrantfile
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-pgbox    = ENV['BOX'] || "precise64"
-postgres = ENV['POSTGRESQL_VERSION'] || "9.1"
-postgis  = ENV['POSTGIS_VERSION']    || "2.0"
-
-Vagrant.configure("2") do |config|
-
-  # Vagrant box configuration
-	config.vm.box = pgbox
-	config.vm.box_url = "http://files.vagrantup.com/%s.box" % [pgbox]
-
-  # Bootstrap script
-  config.vm.provision :shell, :path => "tools/vagrant/bootstrap.sh", :args => "%s %s" % [postgres, postgis]
-
-  # Forward SSH agent to host
-  config.ssh.forward_agent = true
-  
-  # Create synced folder for GnuPG keys and within home directory
-  config.vm.synced_folder "../", "/home/vagrant/repos"
-  config.vm.synced_folder "~/.gnupg", "/home/vagrant/.gnupg"
-
-end
diff --git a/appveyor.yml b/appveyor.yml
index ce9ef39..e02bc80 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -5,7 +5,7 @@
 # Main configuration
 # ------------------------------------------------------------------------------
 
-version: 2.3.{build}
+version: 2.4.{build}
 
 image: Visual Studio 2013
 configuration: Release
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
deleted file mode 100644
index 1a27c2a..0000000
--- a/cmake/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# install the cmake files
-
-file(GLOB cmakeFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.cmake")
\ No newline at end of file
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 031f160..e429439 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -18,21 +18,37 @@ option(BUILD_HTML
 option(BUILD_MAN
     "Set ON|OFF (default=ON) to build Documentation library tree as MAN page" OFF)
 
-set(SPHINX_THEME "haiku")
-#set(SPHINX_THEME_DIR "_themes")
+option(DOC_USE_BOOTSTRAP
+    "Set ON|OFF (default=ON) to build Documentation library tree as MAN page" OFF)
+
 
 if(WITH_DOC)
+    #message("PROCESSING DOCUMENTATION------------")
+
+    find_package(Sphinx REQUIRED)
+
+    if (DOC_USE_BOOTSTRAP)
+        set(SPHINX_INCLUDE "import sphinx_bootstrap_theme")
+        set(SPHINX_THEME "bootstrap")
+        set(SPHINX_THEME_DIR "sphinx_bootstrap_theme.get_html_theme_path()")
+        set(SPHINX_THEME_OPTIONS "'source_link_position': \"none\",")
+    else()
+        set(SPHINX_INCLUDE "")
+        set(SPHINX_THEME "haiku")
+        set(SPHINX_THEME_DIR "['']")
+        set(SPHINX_THEME_OPTIONS "")
+    endif()
+
 
-    find_package(Sphinx "${SPHINX_MINIMUM_VERSION}")
 
     if (NOT SPHINX_FOUND)
         message(WARNING "Sphinx not found. Cannot generate documentation!")
     else()
         if (SPHINX_VERSION VERSION_LESS 1.0)
             message(WARNING "Your Sphinx version is too old!
-                This project requires Sphinx v1.0 or above to produce
-                proper documentation (you have v${SPHINX_VERSION}).
-                You will get output but it will have errors.")
+            This project requires Sphinx v1.0 or above to produce
+            proper documentation (you have v${SPHINX_VERSION}).
+            You will get output but it will have errors.")
         endif()
 
         if(NOT DEFINED SPHINX_THEME)
@@ -44,18 +60,42 @@ if(WITH_DOC)
         endif()
 
         # configured documentation tools and intermediate build results
-        set(BINARY_BUILD_DIR "${PGROUTING_BINARY_DIR}/doc/_build")
+        set(PGR_DOCUMENTATION_BUILD_DIR "${PGROUTING_BINARY_DIR}/doc/_build")
+        set(PGR_DOCUMENTATION_SOURCE_DIR "${PGROUTING_BINARY_DIR}/doc")
+
+        message(STATUS "PGR_DOCUMENTATION_BUILD_DIR = ${PGR_DOCUMENTATION_BUILD_DIR}")
 
-        message(STATUS "BINARY_BUILD_DIR = ${BINARY_BUILD_DIR}")
-        message(STATUS "PGROUTING_BINARY_DIR = ${PGROUTING_BINARY_DIR}")
+        # ---------- TO FLATTEN THE DOCUMENTATION ---------
+
+        file(GLOB PGR_DOCUMENTATION_SOURCES "src/*")
+        foreach (file ${PGR_DOCUMENTATION_SOURCES})
+            #message("${file}")
+            file(COPY "${file}" DESTINATION "${PGR_DOCUMENTATION_SOURCE_DIR}")
+        endforeach()
+
+        file(GLOB  PGR_DOCUMENTATION_SOURCES "../src/*/doc/*")
+        foreach (file ${PGR_DOCUMENTATION_SOURCES})
+            #message("${file}")
+            file(COPY "${file}" DESTINATION "${PGR_DOCUMENTATION_SOURCE_DIR}")
+        endforeach()
+
+        file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/index.rst" DESTINATION "${PGR_DOCUMENTATION_SOURCE_DIR}")
+        file(COPY "../tools/testers/sampledata.sql" DESTINATION "${PGR_DOCUMENTATION_SOURCE_DIR}/sampledata/")
+
+
+        #message(STATUS "PGROUTING_BINARY_DIR = ${PGROUTING_BINARY_DIR}")
 
         # Sphinx cache with pickled ReST documents
         set(SPHINX_CACHE_DIR "${PGROUTING_BINARY_DIR}/doc/_doctrees")
 
-        file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/static" DESTINATION "${BINARY_BUILD_DIR}")
-        file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/themes" DESTINATION "${BINARY_BUILD_DIR}")
+        file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/static" DESTINATION "${PGR_DOCUMENTATION_BUILD_DIR}")
+        file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/themes" DESTINATION "${PGR_DOCUMENTATION_BUILD_DIR}")
         file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/CNAME" DESTINATION "${PGROUTING_BINARY_DIR}")
 
+        #configure_file(
+        #    "${CMAKE_CURRENT_SOURCE_DIR}/index.html.in"
+        #    "${PGROUTING_BINARY_DIR}/doc/html/index.html")
+
         configure_file(
             "${CMAKE_CURRENT_SOURCE_DIR}/forward.html"
             "${PGROUTING_BINARY_DIR}/doc/html/en/index.html")
@@ -63,7 +103,7 @@ if(WITH_DOC)
         # Add documentation to targets
         set(DOC_TARGETS html)
 
-        option(BUILD_MAN "Create a target for building man pages." ON)
+        #option(BUILD_MAN "Create a target for building man pages." ON)
 
         if (BUILD_MAN)
             if (SPHINX_VERSION VERSION_LESS 1.0)
@@ -73,7 +113,7 @@ if(WITH_DOC)
             endif()
         endif()
 
-        option(BUILD_LATEX "Create a target for building latex docs (to create PDF)." ON)
+        #option(BUILD_LATEX "Create a target for building latex docs (to create PDF)." ON)
 
         if (BUILD_LATEX)
             find_package(LATEX)
@@ -96,22 +136,23 @@ if(WITH_DOC)
 
         configure_file(
             "${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in"
-            "${BINARY_BUILD_DIR}/conf.py"
+            "${PGR_DOCUMENTATION_BUILD_DIR}/conf.py"
             @ONLY)
 
         foreach (DOC_TARGET ${DOC_TARGETS})
             add_custom_command(
                 TARGET doc POST_BUILD
                 COMMAND ${SPHINX_EXECUTABLE} 
-                    # -q   # Enable for quiet mode 
-                    # -Q  # Enable for even more quiet mode
-                    -b ${DOC_TARGET}
-                    -E  # don't use a saved environment, always read all file
-                    -a  # write all files; default is to only write new and changed files
-                    -d "${SPHINX_CACHE_DIR}" 
-                    -c "${BINARY_BUILD_DIR}" 
-                    "${PGROUTING_SOURCE_DIR}" 
-                    "${PGROUTING_BINARY_DIR}/doc/${DOC_TARGET}/en"
+                # -q  # Enable for quiet mode 
+                # -Q  # Enable for even more quiet mode
+                # -v  # increase verbosity
+                -b ${DOC_TARGET}
+                -E  # don't use a saved environment, always read all file
+                -a  # write all files; default is to only write new and changed files
+                -d "${SPHINX_CACHE_DIR}" 
+                -c "${PGR_DOCUMENTATION_BUILD_DIR}" 
+                "${PGR_DOCUMENTATION_SOURCE_DIR}" 
+                "${PGROUTING_BINARY_DIR}/doc/${DOC_TARGET}/en"
                 COMMENT "Generating ${DOC_TARGET} documentation ...")
         endforeach()
 
@@ -119,9 +160,11 @@ if(WITH_DOC)
             if(LATEX_COMPILER)
                 add_custom_command(
                     TARGET doc POST_BUILD
+                    #fixes: Underfull \hbox (badness 10000) in paragraph
+                    #perl -pi -e 's/warning/warning /' pgRoutingDocumentation.tex
                     COMMAND pdflatex 
-                        -interaction=nonstopmode 
-                        "pgRoutingDocumentation.tex" > /dev/null 2>&1
+                    -interaction=nonstopmode 
+                    "pgRoutingDocumentation.tex" > /dev/null 2>&1
                     WORKING_DIRECTORY "${PGROUTING_BINARY_DIR}/doc/latex/en"
                     COMMENT "Converting Latex to PDF format")
 
@@ -132,4 +175,5 @@ if(WITH_DOC)
         message("-- Building documentation enabled for: ${DOC_TARGETS}")
     endif()
 
+    #message("END PROCESSING DOCUMENTATION------------")
 endif(WITH_DOC)
diff --git a/doc/conf.py.in b/doc/conf.py.in
index 9f5da17..b9c2bf8 100644
--- a/doc/conf.py.in
+++ b/doc/conf.py.in
@@ -12,6 +12,7 @@
 # serve to show the default.
 
 import sys, os
+ at SPHINX_INCLUDE@
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
@@ -38,21 +39,20 @@ source_suffix = '.rst'
 #source_encoding = 'utf-8-sig'
 
 # The master toctree document.
-master_doc = 'doc/index'
+master_doc = 'index'
 
 # General information about the project.
 project = u'pgRouting'
-copyright = u'pgRouting Contributors - Version @PGROUTING_VERSION_STRING@'
+copyright = u'pgRouting Contributors - Version @PGROUTING_FULL_VERSION@'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = '@PGROUTING_VERSION_STRING@'
+version = '@PGROUTING_FULL_VERSION@'
 # The full version, including alpha/beta/rc tags.
-release = '@PGROUTING_VERSION_STRING@ (@PGROUTING_GIT_BRANCH@)'
-#release = '@PGROUTING_VERSION_STRING@ (@PGROUTING_GIT_TAG@)'
+release = '@PGROUTING_FULL_VERSION@'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -70,9 +70,8 @@ gettext_compact = False
 # directories to ignore when looking for source files.
 exclude_patterns = [
     'doc/build',
-    'src/shooting_star/doc/index.rst',
-    'src/withPoints/doc/pgr_withPointsVia.rst',
-    'src/travelingSalesPerson',
+    'pgr_withPointsVia.rst',
+    'maxFlowApplications.rst',
     '*/notUsed',
     'tools/template'
     ]
@@ -107,16 +106,17 @@ html_theme = '@SPHINX_THEME@'
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 # documentation.
-#html_theme_options = {}
+html_theme_options = {
+    @SPHINX_THEME_OPTIONS@
+    }
 
 # Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = ['@SPHINX_THEME_DIR@']
+html_theme_path = @SPHINX_THEME_DIR@
 
 # The name for this set of Sphinx documents.  If None, it defaults to
 # "<project> v<release> documentation".
 
-#html_title = "pgRouting Manual (@PGROUTING_VERSION_STRING@) (@PGROUTING_GIT_BRANCH@)"
-html_title = "pgRouting Manual (@PGROUTING_VERSION@)"
+html_title = "pgRouting Manual (@PGROUTING_SHORT_VERSION@@PGROUTING_VERSION_DEV@)"
 
 
 # A shorter title for the navigation bar.  Default is the same as html_title.
diff --git a/doc/deprecated.rst b/doc/deprecated.rst
deleted file mode 100644
index 27948fa..0000000
--- a/doc/deprecated.rst
+++ /dev/null
@@ -1,112 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _deprecated:
-
-Deprecated Functions
-====================
-
-.. warning:: These functions are deprecated!!!
-
-    * That means they have been replaced by new functions or are no longer supported, and may be removed from future versions.
-    * All code that uses the functions should be converted to use its replacement if one exists. 
-
-
-Deprecated on version 2.3
-----------------------------
-
-Routing functions
-...................
-
-- :ref:`pgr_astar-V2.0` - See new signatures of :ref:`pgr_aStar`
-- :ref:`pgr_tsp-V2.0` - See new signatures of :ref:`tsp`
-
-
-Auxiliary functions
-...................
-
-- :ref:`pgr_flip_edges`
-- :ref:`pgr_vids_to_dmatrix`
-- :ref:`pgr_vids_to_dmatrix2`
-- :ref:`pgr_points_to_dmatrix`
-- :ref:`pgr_text_to_points`
-
-
-.. toctree::
-   :hidden:
-
-   ../src/astar/doc/pgr_astar-v2
-   ../src/tsp/doc/pgr_tsp-V2.0
-   ../src/convenience/doc/pgr_flipEdges
-   ../src/convenience/doc/pgr_vidsToDMatrix
-   ../src/convenience/doc/pgr_vidsToDMatrix2
-   ../src/convenience/doc/pgr_pointsToDMatrix
-   ../src/convenience/doc/pgr_textToPoints
-
-
-Deprecated on version 2.2
-----------------------------
-
-Routing functions
-...................
-
-- :ref:`pgr_apsp_johnson` - Replaced with :ref:`pgr_johnson` 
-- :ref:`pgr_apsp_warshall` - Replaced with :ref:`pgr_floydWarshall`
-- :ref:`pgr_kdijkstra` - Replaced with :ref:`pgr_dijkstraCost` and :ref:`pgr_dijkstra` (one to many)
-
-.. toctree::
-   :hidden: 
-
-   ../src/apsp_johnson/doc/pgr_apspJohnson
-   ../src/apsp_warshall/doc/pgr_apspWarshall
-   ../src/kdijkstra/doc/pgr_kDijkstra
-
-
-Deprecated on version 2.1
-------------------------------------------
-
-Routing functions
-...................
-
-- :ref:`pgr_dijkstra_v2` - See new signature in :ref:`pgr_dijkstra` (one to one)
-- :ref:`pgr_ksp_v2` - See new signature in :ref:`pgr_ksp`
-- :ref:`pgr_driving_distance_v2` - See new signature in :ref:`pgr_drivingDistance`
-
-
-Auxiliary functions
-...................
-
--  :ref:`pgr_get_column_name`
--  :ref:`pgr_get_table_name`
--  :ref:`pgr_is_column_indexed`
--  :ref:`pgr_is_column_in_table`
--  :ref:`pgr_quote_ident`
--  :ref:`pgr_versionless`
--  :ref:`pgr_start_point`
--  :ref:`pgr_end_point`
-
-
-
-.. toctree::
-   :hidden: 
-
-   ../src/dijkstra/doc/pgr_dijkstra_v2
-   ../src/ksp/doc/pgr_ksp_v2
-   ../src/driving_distance/doc/pgr_drivingDistance_v2
-   ../src/common/doc/utilities/get_column_name
-   ../src/common/doc/utilities/get_table_name
-   ../src/common/doc/utilities/is_column_indexed
-   ../src/common/doc/utilities/is_column_in_table
-   ../src/common/doc/utilities/point_to_id
-   ../src/common/doc/utilities/quote_ident
-   ../src/common/doc/utilities/versionless
-   ../src/common/doc/utilities/start_point
-   ../src/common/doc/utilities/end_point
-
-
diff --git a/doc/index.rst b/doc/index.rst
index f555655..64c2729 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -17,184 +17,123 @@ pgRouting extends the `PostGIS <http://postgis.net>`_/`PostgreSQL <http://postgr
 
 This is the manual for pgRouting |release|.
 
-.. image:: static/images/ccbysa.png
+.. image:: _build/static/images/ccbysa.png
     :align: left
     :alt: Creative Commons Attribution-Share Alike 3.0 License
 
 The pgRouting Manual is licensed under a `Creative Commons Attribution-Share Alike 3.0 License <http://creativecommons.org/licenses/by-sa/3.0/>`_. Feel free to use this material any way you like, but we ask that you attribute credit to the pgRouting Project and wherever possible, a link back to http://pgrouting.org. For other licenses used in pgRouting see the :ref:`license` page.
 
-*******************************************************************************
 General
-*******************************************************************************
+===============================================================================
 
 .. toctree::
     :maxdepth: 2
 
-    src/introduction/introduction
-    src/installation/installation
-    src/installation/build
-    src/introduction/support
-
-
-*******************************************************************************
-Tutorial
-*******************************************************************************
+    pgRouting-introduction
+    pgRouting-installation
+    support
 
-:ref:`Tutorial <tutorial1>`
-
-  - :ref:`Getting started <tutorial>`
-  - :ref:`topology` for an overview of a topology for routing algorithms.
-  - :ref:`analytics` for an overview of the analysis of a graph.
-  - :ref:`custom_query` that is used in the routing algorithms.
-  - :ref:`performance` to improve your performance.
-  - :ref:`recipes`
-  - :ref:`developer`
-
-For a more complete introduction how to build a routing application read the `pgRouting Workshop <http://workshop.pgrouting.org>`_.
 
+- :ref:`sampledata` that is used in the examples of this manual.
 
 .. toctree::
    :hidden:
 
-   src/tutorial/index
-   src/recipes/index
-   src/developer/developer_guide
-   
-*******************************************************************************
-Sample Data
-*******************************************************************************
-
-  - :ref:`sampledata` that is used in the examples of this manual.
+   sampledata
 
-.. toctree::
-   :hidden:
+:ref:`Pgrouting Concepts <pgrouting_concepts>`
+===============================================================================
 
-   src/developer/sampledata
+.. include:: pgRouting-concepts.rst
+   :start-after: concepts_start
+   :end-before: concepts_end
 
 
+.. toctree::
+   :hidden:
 
-*******************************************************************************
-Functions
-*******************************************************************************
+   pgRouting-concepts
+   
 
-Version
-===============================================================================
+.. rubric:: Reference
 
 :ref:`pgr_version` - to get pgRouting's version information.
 
 .. toctree::
    :hidden:
 
-   ../src/common/doc/pgr_version
-
+   pgr_version
 
 
-
-Data Types
+:ref:`Data Types <data_types>`
 ===============================================================================
 
-:ref:`data_types`
 
-  -  :ref:`type_cost_result` -  A set of records to describe a path result with cost attribute.
-  -  :ref:`pgr_costResult3[]<type_cost_result3>` - A set of records to describe a path result with cost attribute.
-  -  :ref:`pgr_geomResult<type_geom_result>` - A set of records to describe a path result with geometry attribute.
+- :ref:`type_cost_result` -  A set of records to describe a path result with cost attribute.
+- :ref:`pgr_costResult3[]<type_cost_result3>` - A set of records to describe a path result with cost attribute.
+- :ref:`pgr_geomResult<type_geom_result>` - A set of records to describe a path result with geometry attribute.
 
 .. toctree::
    :hidden:
 
-   ../src/common/doc/types/index
+   types_index
 
 
-*******************************************************************************
-Topology functions
-*******************************************************************************
-
-:ref:`topology_functions`
+:ref:`Topology Functions <topology_functions>`
+===============================================================================
 
-  -  :ref:`pgr_create_topology` -  to create a topology based on the geometry.
-  -  :ref:`pgr_create_vert_table` - to reconstruct the vertices table based on the source and target information.
-  -  :ref:`pgr_analyze_graph`  - to analyze the edges and vertices of the edge table.
-  -  :ref:`pgr_analyze_oneway` - to analyze directionality of the edges.
-  -  :ref:`pgr_node_network`  -to create nodes to a not noded edge table.
+-  :ref:`pgr_create_topology` -  to create a topology based on the geometry.
+-  :ref:`pgr_create_vert_table` - to reconstruct the vertices table based on the source and target information.
+-  :ref:`pgr_analyze_graph`  - to analyze the edges and vertices of the edge table.
+-  :ref:`pgr_analyze_oneway` - to analyze directionality of the edges.
+-  :ref:`pgr_node_network`  -to create nodes to a not noded edge table.
 
 .. toctree::
    :hidden:
 
-   ../src/topology/doc/topology
+   topology-functions
 
 
-*******************************************************************************
-Routing Functions
-*******************************************************************************
+:ref:`Routing functions <routing_functions>`
+===============================================================================
 
-..
-    ROUTING FUNCTIONS SECTION
-    :hidden:
-    :maxdepth: 0
-    
 .. toctree::
+    :hidden:
+
+    routingFunctions
 
-    ../src/routingFunctions
 
-.. include:: ../src/routingFunctions.rst
+.. include:: routingFunctions.rst
    :start-after: from-here
    :end-before: to-here
     
 
 
-*******************************************************************************
 Available Functions but not official pgRouting functions
-*******************************************************************************
+===============================================================================
 
-- :ref:`proposedNext`
+- :ref:`stable`
 - :ref:`proposed`
 
 .. toctree::
     :hidden:
 
-    ../src/proposedNext
-    ../src/proposed
-
-
-*******************************************************************************
-Discontinued & Deprecated Functions
-*******************************************************************************
-
-  - :ref:`discontinued`
-  - :ref:`deprecated`
-
-.. toctree::
-   :hidden:
-
-   src/developer/discontinued
-   deprecated
+    proposed
 
 
 
+:ref:`Change Log <change_log>`
+===============================================================================
 
-*******************************************************************************
-Change Log
-*******************************************************************************
+.. include:: release_notes.rst
+   :start-after: changelog start
+   :end-before: changelog end
 
-:ref:`change_log`
-
-   - :ref:`changelog_2_3_2`
-   - :ref:`changelog_2_3_1`
-   - :ref:`changelog_2_3_0`
-   - :ref:`changelog_2_2_4`
-   - :ref:`changelog_2_2_3`
-   - :ref:`changelog_2_2_2`
-   - :ref:`changelog_2_2_1`
-   - :ref:`changelog_2_2_0`
-   - :ref:`changelog_2_1_0`
-   - :ref:`changelog_2_0_1`
-   - :ref:`changelog_2_0_0`
-   - :ref:`changelog_1_x`
 
 .. toctree::
     :hidden:
 
-    src/changelog/release_notes
+    release_notes
 
 
 .. rubric:: Indices and tables
diff --git a/doc/src/developer/developer_guide.rst b/doc/src/developer/developer_guide.rst
deleted file mode 100644
index a49fa80..0000000
--- a/doc/src/developer/developer_guide.rst
+++ /dev/null
@@ -1,174 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _developer:
-
-Developer's Guide
-===============================================================================
-
-This contains some basic comments about developing.
-More detailed information can be found on:
-
-http://docs.pgrouting.org/doxy/2.2/index.html
-
-Source Tree Layout
--------------------------------------------------------------------------------
-
-*cmake/*
-    cmake scripts used as part of our build system.
-
-*src/*
-    This is the algorithm source tree. Each algorithm is to be contained
-    in its on sub-tree with /doc, /sql, /src, and /test sub-directories.
-
-For example:
-
-  - ``src/dijkstra``  Main direcotry for dijkstra algorithm.
-  - ``src/dijkstra/doc``  Dijkstra's documentation directory.
-  - ``src/dijkstra/src``  Dijkstra's C and/or C++ code.
-  - ``src/dijkstra/sql``  Dijkstra's sql code.
-  - ``src/dijkstra/test``  Dijkstra's tests.
-  - ``src/dijkstra/test/pgtap``  Dijkstra's pgTaptests.
-
-
-Tools
--------------------------------------------------------------------------------
-
-*tools/*
-    Miscellaneous scripts and tools.
-
-pre-commit
-**********
-
-To keep version/branch/commit up to date install pelase do the following:
-
-.. code-block:: bash
-
-  cp tools/pre-commit .git/hooks/pre-commit
-
-After each commit a the file **VERSION** will remain. (The hash number will be one behind)
-
-
-
-doxygen
-*******
-
-To use doxygen:
-
-
-.. code-block:: bash
-
-  cd tools/doxygen/
-  make
-
-The code's documentation can be found in:
-
-
-.. code-block:: bash
-
-  build/doxy/html/index.html
-
-
-cpplint
-*******
-
-We try to follow the following guidelines for C++ coding:
-
-https://google-styleguide.googlecode.com/svn/trunk/cppguide.html
-
-Sample use:
-
-.. code-block:: bash
-
-  python cpplint.py ../src/dijkstra/src/dijkstra_driver.h
-  ../src/dijkstra/src/dijkstra_driver.h:34:  Lines should be <= 80 characters long  [whitespace/line_length] [2]
-  ../src/dijkstra/src/dijkstra_driver.h:40:  Line ends in whitespace.  Consider deleting these extra spaces.  [whitespace/end_of_line] [4]
-  Done processing ../src/dijkstra/src/dijkstra_driver.h
-  Total errors found: 2
-
-
-- Maybe line 34 is a very complicated calculation so you can just ignore the message
-- Delete whitespace at end of line is easy fix.
-- Use your judgement!!!
-
-Some files like ``postgres.h`` are system dependent so don't include the directory.
-
-
-Other tools
-***********
-
-Tools like:
- - doit
- - winnie
- - publish_doc.sh
-
-are very specific for the deployment of new versions, so please ask first!
-
-Documentation Layout
--------------------------------------------------------------------------------
-
-.. note:: 
-	All documentation should be in reStructuredText format.
-	See: <http://docutils.sf.net/rst.html> for introductory docs.
-
-
-Documentation is distributed into the source tree. This top level "doc"
-directory is intended for high level documentation cover subjects like:
-
-    * Compiling and testing
-    * Installation
-    * Tutorials
-    * Users' Guide front materials
-    * Reference Manual front materials
-    * etc
-
-Since the algorithm specific documentation is contained in the source
-tree with the algorithm specific files, the process of building the 
-documentation and publishing it will need to assemble the details with
-the front material as needed.
-
-Also, to keep the "doc" directory from getting cluttered, each major book
-like those listed above, should be contained in a separate directory under
-"doc". Any images or other materials related to the book should also be kept
-in that directory.
-
-
-Testing Infrastructure
-************************************
-
-Tests are part of the tree layout:
-
-  - ``src/dijkstra/test``  Dijkstra's tests.
-
-    - ``test.conf``  Configuration file.
-    - ``<name>.test.sql``  Test file
-    - ``<name>.result``  Results file bash
-
-  - ``src/dijkstra/test/pgtap``  Dijkstra's pgTaptests.
-
-    - ``<name>.sql`` pgTap test file
-
-
-.. rubric:: Testing
-
-Testing is executed from the top level of the tree layout:
-
-.. code-block:: bash
-
-    tools/testers/algorithm-tester.pl
-    createdb  -U <user> ___pgr___test___
-    sh ./tools/testers/pg_prove_tests.sh <user>
-    dropdb  -U <user> ___pgr___test___
-
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/doc/src/developer/discontinued.rst b/doc/src/developer/discontinued.rst
deleted file mode 100644
index 444815e..0000000
--- a/doc/src/developer/discontinued.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _discontinued:
-
-Discontinued Functions
-===============================================================================
-
-Especially with new major releases functionality may change and functions may be discontinued for various reasons. 
-Functionality that has been discontinued will be listed here.
-
-
-.. _shooting_star:
-
-Shooting Star algorithm
-********************************************************************************
-
-:Version:	Discontinued on 2.0.0
-:Reasons:	Unresolved bugs, no maintainer, replaced with :ref:`trsp`
-:Comment:	Please :ref:`contact us <support>` if you're interested to sponsor or maintain this algorithm.
diff --git a/doc/src/developer/images/Fig1-originalData.png b/doc/src/images/Fig1-originalData.png
similarity index 100%
rename from doc/src/developer/images/Fig1-originalData.png
rename to doc/src/images/Fig1-originalData.png
diff --git a/doc/src/developer/images/Fig2-cost.png b/doc/src/images/Fig2-cost.png
similarity index 100%
rename from doc/src/developer/images/Fig2-cost.png
rename to doc/src/images/Fig2-cost.png
diff --git a/doc/src/developer/images/Fig4-costUndirected.png b/doc/src/images/Fig4-costUndirected.png
similarity index 100%
rename from doc/src/developer/images/Fig4-costUndirected.png
rename to doc/src/images/Fig4-costUndirected.png
diff --git a/doc/src/developer/images/Fig6-undirected.png b/doc/src/images/Fig6-undirected.png
similarity index 100%
rename from doc/src/developer/images/Fig6-undirected.png
rename to doc/src/images/Fig6-undirected.png
diff --git a/doc/src/introduction/images/boost-inside.jpeg b/doc/src/images/boost-inside.jpeg
similarity index 100%
rename from doc/src/introduction/images/boost-inside.jpeg
rename to doc/src/images/boost-inside.jpeg
diff --git a/doc/src/recipes/images/parallelImage.png b/doc/src/images/parallelImage.png
similarity index 100%
rename from doc/src/recipes/images/parallelImage.png
rename to doc/src/images/parallelImage.png
diff --git a/doc/src/developer/images/test1.png b/doc/src/images/test1.png
similarity index 100%
rename from doc/src/developer/images/test1.png
rename to doc/src/images/test1.png
diff --git a/doc/src/developer/images/trsp-test-image.png b/doc/src/images/trsp-test-image.png
similarity index 100%
rename from doc/src/developer/images/trsp-test-image.png
rename to doc/src/images/trsp-test-image.png
diff --git a/doc/src/installation/build.rst b/doc/src/installation/build.rst
deleted file mode 100644
index 8cdb842..0000000
--- a/doc/src/installation/build.rst
+++ /dev/null
@@ -1,123 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _build:
-
-###########
-Build Guide
-###########
-
-Dependencies
-===============================================================================
-
-To be able to compile pgRouting make sure that the following dependencies are met:
-
-* C and C++0x compilers
-* Postgresql version >= 9.1 
-* PostGIS version >= 2.0 
-* The Boost Graph Library (BGL). Version >= 1.46
-* CMake >= 2.8.8
-* CGAL >=  4.2
-* (optional, for Documentation) Sphinx >= 1.1 
-* (optional, for Documentation as PDF) Latex >= [TBD]
-
-Configuration
-===============================================================================
-
-PgRouting uses the `cmake` system to do the configuration.
-
-The following instructions start from *path/to/pgrouting/*
-
-Ccreate the build directory
-
-.. code-block:: bash
-
-    $ mkdir build
-
-
-To configure:
-
-.. code-block:: bash
-
-    $ cd build
-    $ cmake -L ..
-
-Configurable variables
-----------------------
-
-The documentation configurable variables are:
-
-:WITH_DOC:    BOOL=OFF     -- Turn on/off building the documentation
-:BUILD_HTML:  BOOL=ON     -- If WITH_DOC=ON, turn on/off building HTML
-:BUILD_LATEX: BOOL=OFF    -- If WITH_DOC=ON, turn on/off building PDF
-:BUILD_MAN:   BOOL=OFF    -- If WITH_DOC=ON, turn on/off building MAN pages
-
-Configuring with documentation
-
-.. code-block:: bash
-
-    $ cmake -DWITH_DOC=ON ..
-
-.. note:: Most of the effort of the documentation has being on the html files.
-
-
-Building
-===============================================================================
-
-Using ``make`` to build the code and the docuemtnation
-
-The following instructions start from *path/to/pgrouting/build*
-
-.. code-block:: bash
-
-    $ make          # build the code but not the documentation
-    $ make doc      # build only the documentation
-    $ make all doc  # build both the code and the documentation
-
-Installation and reinstallation
-===============================================================================
-
-We have tested on several plataforms, For installing or reinstalling all the steps are needed.
-
-.. warning:: The sql signatures are configured and build in the ``cmake`` command.
-
-For MinGW on Windows
-----------------------------------------------------------------
-
-.. code-block:: bash
-
-	$ mkdir build
-	$ cd build
-	$ cmake -G"MSYS Makefiles" ..
-	$ make
-	$ make install
-
-
-For Linux
-----------------------------------------------------------------
-
-The following instructions start from *path/to/pgrouting*
-
-.. code-block:: bash
-
-	$ mkdir build
-	$ cd build
-	$ cmake  ..
-	$ make
-	$ sudo make install
-
-Dependencies Installation
-===============================================================================
-
-.. toctree::
-    :maxdepth: 1
-
-    install-dependencies
-
-
diff --git a/doc/src/installation/install-dependencies.rst b/doc/src/installation/install-dependencies.rst
deleted file mode 100644
index d501097..0000000
--- a/doc/src/installation/install-dependencies.rst
+++ /dev/null
@@ -1,155 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _dependencies:
-
-##########################
-Dependencies Installation
-##########################
-
-This guide was made while making a fresh ubuntu desktop 14.04.02 installation.
-Make the neceszry adjustments to fit your operative system.
-
-Dependencies
-===============================================================================
-
-
-To be able to compile pgRouting make sure that the following dependencies are met:
-
-* C and C++0x compilers
-* Postgresql version >= 9.1 
-* PostGIS version >= 2.0 
-* The Boost Graph Library (BGL). Version >= 1.46
-* CMake >= 2.8.8
-* CGAL >=  4.2
-* (optional, for Documentation) Sphinx >= 1.1 
-* (optional, for Documentation as PDF) Latex >= [TBD]
-
-Before starting, on a terminal window:
-
-sudo apt-get update
-
-
-CMake >= 2.8.8
----------------------
-
-trusty provides: 2.8.8
-
-.. code-block:: none
-
-    sudo apt-get install cmake
-
-
-C and (C++0x or c++11) compilers
-----------------------------------
-
-trusty provides: 4.8
-
-.. code-block:: none
-
-    sudo apt-get install g++
-
-
-Postgresql version >= 9.1 
---------------------------
-
-For example in trusty 9.3 is provided:
-
-.. code-block:: none
-
-    sudo apt-get install postgreSQL
-    sudo apt-get install postgresql-server-dev-9.3
-
-
-PostGIS version >= 2.0 
------------------------
-
-For example in trusty 2.1 is provided:
-
-.. code-block:: none
-
-    sudo apt-get install postgresql-9.3-postgis-2.1
-
-
-
-The Boost Graph Library (BGL). Version >= 1.46
-----------------------------------------------
-
-trusty provides: 1.54.0
-
-.. code-block:: none
-
-    sudo apt-get install libboost-graph-dev
-
-
-CGAL >=  4.2
----------------------
-
-.. code-block:: none
-
-    sudo apt-get install libcgal-dev
-
-(optional, for Documentation) Sphinx >= 1.1 
---------------------------------------------
-
-http://sphinx-doc.org/latest/install.html
-
-trusty provides: 1.2.2
-
-.. code-block:: none
-
-    sudo apt-get install python-sphinx
-
-
-(optional, for Documentation as PDF) Latex >= [TBD]
----------------------------------------------------
-
-https://latex-project.org/ftp.html
-
-trusty provides: 1.2.2
-
-.. code-block:: none
-
-    sudo apt-get install texlive
-
-
-pgTap & pg_prove & perl for tests 
------------------------------------
-
-.. warning:: cmake does not test for this packages.
-
-.. code-block:: none
-
-    sudo apt-get install -y perl
-    wget https://github.com/theory/pgtap/archive/master.zip
-    unzip master.zip
-    cd pgtap-master
-    make
-    sudo make install
-    sudo ldconfig
-    sudo apt-get install -y libtap-parser-sourcehandler-pgtap-perl
-
-To run the tests:
-
-.. code-block:: none
-
-    tools/testers/algorithm-tester.pl
-    createdb  -U <user> ___pgr___test___
-    sh ./tools/testers/pg_prove_tests.sh <user>
-    dropdb  -U <user> ___pgr___test___
-
-See Also
--------------------------------------------------------------------------------
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
-
diff --git a/doc/src/installation/installation.rst b/doc/src/installation/installation.rst
deleted file mode 100644
index 9f86092..0000000
--- a/doc/src/installation/installation.rst
+++ /dev/null
@@ -1,186 +0,0 @@
-..
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _installation:
-
-Installation
-===============================================================================
-
-This is a basic guide to download and install pgRouting.
-
-The specific instructions for any given OS distribution may vary depending on the various package maintainers.
-Contact the specific OS package maintainer for details.
-
-.. note:: The following are only general instructions.
-
-Additional notes and corrections can be found in `Installation wiki <https://github.com/pgRouting/pgrouting/wiki/Notes-on-Download%2C-Installation-and-building-pgRouting>`__
-
-Also PostGIS provides some information about installation in this `Install Guide <http://www.postgis.us/presentations/postgis_install_guide_22.html>`__
-
-
-
-Download
---------
-
-Binary packages are provided for the current version on the following platforms:
-
-
-Windows
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Winnie Bot Builds:
-
-* `Winnie Bot Builds <http://postgis.net/windows_downloads>`_
-
-Production Builds:
-
-* Production builds are part of the Spatial Extensions/PostGIS Bundle available via Application StackBuilder
-* Can also get PostGIS Bundle from http://download.osgeo.org/postgis/windows/
-
-
-Ubuntu
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-pgRouting on Ubuntu can be installed using packages from a PostgreSQL repository:
-
-Using a terminal window:
-
-.. code-block:: bash
-
-    # Create /etc/apt/sources.list.d/pgdg.list. The distributions are called codename-pgdg.
-    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
-
-    # Import the repository key, update the package lists
-    sudo apt-get install wget ca-certificates
-    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-    sudo apt-get update
-
-    # Install pgrouting based on your postgres Installation: for this example is 9.3
-    sudo apt-get install postgresql-9.3-pgrouting
-
-
-* To be up-to-date with changes and improvements
-
-.. code-block:: bash
-
-    sudo apt-get update & sudo apt-get upgrade
-
-
-RHEL/CentOS
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-* Add repositories for dependencies:
-
-  .. code-block:: bash
-
-     wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo
-     wget http://nextgis.ru/programs/centos/nextgis.repo -O /etc/yum.repos.d/nextgis.repo
-     yum install epel-release
-
-* Install PostgreSQL and PostGIS according to `this <https://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS21CentOS6pgdg>`__ instructions.
-
-* Install CGAL:
-
-  .. code-block:: bash
-
-     yum install libCGAL10
-
-* Install pgRouting:
-
-  .. code-block:: bash
-
-     yum install pgrouting_94
-
-More info (and packages for CentOS) can be found `here <https://github.com/nextgis/gis_packages_centos/wiki/Using-this-repo>`__.
-
-
-
-Fedora
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-* Fedora RPM's: https://admin.fedoraproject.org/pkgdb/package/rpms/pgRouting/
-
-
-FreeBSD
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-pgRouting can be installed via ports:
-
-.. code-block:: bash
-
-  cd /usr/ports/databases/pgRouting
-  make install clean
-
-
-OS X
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. See `builds from KingChaos <http://www.kyngchaos.com/software/postgres>`_.
-
-* Homebrew
-
-.. code-block:: bash
-
-	brew install pgrouting
-
-
-Source Package
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-You can find all the pgRouting Releases: 
-
-https://github.com/pgRouting/pgrouting/releases
-
-See :ref:`build` to build the binaries from the source.
-
-Using Git
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Git protocol (read-only):
-
-.. code-block:: bash
-
-	git clone git://github.com/pgRouting/pgrouting.git
-
-
-HTTPS protocol (read-only):
-
-.. code-block:: bash
-
-	git clone https://github.com/pgRouting/pgrouting.git
-
-See :ref:`build` to build the binaries from the source.
-
-Installing in the database
---------------------------
-
-pgRouting is an extension. 
-
-.. code-block:: sql
-
-  CREATE EXTENSION postgis;
-  CREATE EXTENSION pgrouting;
-
-
-Upgrading the database
-----------------------
-
-To upgrade pgRouting to version 2.x.y use the following command:
-
-.. code-block:: sql
-
-   ALTER EXTENSION pgrouting UPDATE TO "2.x.y";
-
-   For example to upgrade to 2.2.3
-
-   .. code-block:: sql
-
-   ALTER EXTENSION pgrouting UPDATE TO "2.2.3";
-
-
diff --git a/doc/src/pgRouting-concepts.rst b/doc/src/pgRouting-concepts.rst
new file mode 100644
index 0000000..9d2be2b
--- /dev/null
+++ b/doc/src/pgRouting-concepts.rst
@@ -0,0 +1,705 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+.. _pgrouting_concepts:
+
+pgRouting Concepts
+===============================================================================
+
+.. rubric:: Table of Contents
+
+.. concepts_start
+
+* :ref:`Getting_started`
+
+  * :ref:`create_database`
+  * :ref:`load_data`
+  * :ref:`build_topology`
+  * :ref:`check_graph`
+  * :ref:`compute_path`
+  * `pgRouting Workshop <http://workshop.pgrouting.org>`_
+
+* :ref:`inner_queries`
+* :ref:`return_values`
+* :ref:`Advanced_Topics`
+
+  * :ref:`topology`
+  * :ref:`analytics`
+  * :ref:`performance`
+
+* :ref:`how_contribute`
+
+
+
+
+.. concepts_end
+
+.. _Getting_started:
+
+Getting Started
+-------------------------------------------------------------------------------
+
+This is a simple guide to walk you through the steps of getting started
+with pgRouting. In this guide we will cover:
+
+* :ref:`create_database`
+* :ref:`load_data`
+* :ref:`build_topology`
+* :ref:`check_graph`
+
+
+.. _create_database:
+
+Create a routing Database
+...............................................................................
+
+The first thing we need to do is create a database and load pgrouting in
+the database. Typically you will create a database for each project. Once
+you have a database to work in, your can load your data and build your
+application in that database. This makes it easy to move your project
+later if you want to to say a production server.
+
+For Postgresql 9.2 and later versions
+
+.. code-block:: bash
+
+	createdb mydatabase
+	psql mydatabase -c "create extension postgis"
+	psql mydatabase -c "create extension pgrouting"
+
+.. _load_data:    
+
+Load Data
+...............................................................................
+
+How you load your data will depend in what form it comes it. There are
+various OpenSource tools that can help you, like:
+
+:osm2pgrouting: - this is a tool for loading OSM data into postgresql with pgRouting requirements
+:shp2pgsql: - this is the postgresql shapefile loader
+:ogr2ogr: - this is a vector data conversion utility
+:osm2pgsql: - this is a tool for loading OSM data into postgresql
+
+So these tools and probably others will allow you to read vector data so that
+you may then load that data into your database as a table of some kind. At this
+point you need to know a little about your data structure and content. One easy
+way to browse your new data table is with pgAdmin3 or phpPgAdmin.
+
+.. _build_topology:
+
+Build a Routing Topology
+...............................................................................
+
+Next we need to build a topology for our street data. What this means is that
+for any given edge in your street data the ends of that edge will be connected
+to a unique node and to other edges that are also connected to that same unique
+node. Once all the edges are connected to nodes we have a graph that can be
+used for routing with pgrouting. We provide a tool that will help with this:
+
+.. note:: this step is not needed if data is loaded with `osm2pgrouting`
+
+.. code-block:: sql
+
+    select pgr_createTopology('myroads', 0.000001);
+
+* :ref:`pgr_create_topology`
+
+.. _check_graph:
+
+Check the Routing Topology
+...............................................................................
+
+There are lots of possible sources for errors in a graph. The data that you
+started with may not have been designed with routing in mind. A graph has some
+very specific requirements. One is that it is *NODED*, this means that except
+for some very specific use cases, each road segment starts and ends at a node
+and that in general is does not cross another road segment that it should be
+connected to.
+
+There can be other errors like the direction of a one-way street being entered
+in the wrong direction. We do not have tools to search for all possible errors
+but we have some basic tools that might help.
+
+.. code-block:: sql
+
+    select pgr_analyzegraph('myroads', 0.000001);
+    select pgr_analyzeoneway('myroads',  s_in_rules, s_out_rules,
+                                         t_in_rules, t_out_rules
+                                         direction)
+    select pgr_nodeNetwork('myroads', 0.001);
+
+* :ref:`pgr_analyze_graph`
+* :ref:`pgr_analyze_oneway`
+* :ref:`pgr_node_network`
+
+
+.. _compute_path:
+
+Compute a Path
+...............................................................................
+
+Once you have all the preparation work done above, computing a route is fairly easy.
+We have a lot of different algorithms that can work with your prepared road
+network. The general form of a route query is:
+
+.. code-block:: sql
+
+    select pgr_dijkstra(`SELECT * FROM myroads', 1, 2)
+
+As you can see this is fairly straight forward and you can look and the
+specific algorithms for the details of the signatures and how to use them.
+These results have information like edge id and/or the
+node id along with the cost or geometry for the step in the path from *start*
+to *end*. Using the ids you can join these result back to your edge table
+to get more information about each step in the path.
+
+* :ref:`pgr_dijkstra`
+
+
+
+.. _inner_queries:
+
+Inner Queries
+-------------------------------------------------------------------------------
+
+There are several kinds of valid inner queries and also the columns returned are depending of the function..
+Which kind of **edges_sql** will depend on the function(s) requirements.
+
+.. basic_edges_sql_start
+
+Description of the edges_sql query for dijkstra like functions
+...............................................................................
+
+:edges_sql: an SQL query, which should return a set of rows with the following columns:
+
+================= =================== ======== =================================================
+Column            Type                 Default  Description
+================= =================== ======== =================================================
+**id**            ``ANY-INTEGER``                Identifier of the edge.
+**source**        ``ANY-INTEGER``                Identifier of the first end point vertex of the edge.
+**target**        ``ANY-INTEGER``                Identifier of the second end point vertex of the edge.
+**cost**          ``ANY-NUMERICAL``              Weight of the edge  `(source, target)`
+
+                                                 - When negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
+
+**reverse_cost**  ``ANY-NUMERICAL``       -1     Weight of the edge `(target, source)`,
+
+                                                 - When negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
+
+================= =================== ======== =================================================
+
+Where:
+
+:ANY-INTEGER: SMALLINT, INTEGER, BIGINT
+:ANY-NUMERICAL: SMALLINT, INTEGER, BIGINT, REAL, FLOAT
+
+
+.. basic_edges_sql_end
+
+.. no_id_edges_sql_start
+
+Description of the edges_sql query (id is not necessary)
+...............................................................................
+
+:edges_sql: an SQL query, which should return a set of rows with the following columns:
+
+================  ===================   ======== =================================================
+Column            Type                  Default  Description
+================  ===================   ======== =================================================
+**source**        ``ANY-INTEGER``                Identifier of the first end point vertex of the edge.
+**target**        ``ANY-INTEGER``                Identifier of the second end point vertex of the edge.
+**cost**          ``ANY-NUMERICAL``              Weight of the edge  `(source, target)`
+
+                                                 * When negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
+
+**reverse_cost**  ``ANY-NUMERICAL``       -1     Weight of the edge `(target, source)`,
+
+                                                 - When negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
+
+================  ===================   ======== =================================================
+
+Where:
+
+:ANY-INTEGER: SMALLINT, INTEGER, BIGINT
+:ANY-NUMERICAL: SMALLINT, INTEGER, BIGINT, REAL, FLOAT
+
+.. no_id_edges_sql_end
+
+
+.. xy_edges_sql_start
+
+Description of the edges_sql query for astar like functions
+...............................................................................
+
+:edges_sql: an SQL query, which should return a set of rows with the following columns:
+
+================  ===================   ======== =================================================
+Column            Type                  Default  Description
+================  ===================   ======== =================================================
+**id**            ``ANY-INTEGER``                Identifier of the edge.
+**source**        ``ANY-INTEGER``                Identifier of the first end point vertex of the edge.
+**target**        ``ANY-INTEGER``                Identifier of the second end point vertex of the edge.
+**cost**          ``ANY-NUMERICAL``              Weight of the edge  `(source, target)`
+
+                                                 - When negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
+
+**reverse_cost**  ``ANY-NUMERICAL``       -1     Weight of the edge `(target, source)`,
+
+                                                 - When negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
+
+**x1**            ``ANY-NUMERICAL``              X coordinate of `source` vertex.
+**y1**            ``ANY-NUMERICAL``              Y coordinate of `source` vertex.
+**x2**            ``ANY-NUMERICAL``              X coordinate of `target` vertex.
+**y2**            ``ANY-NUMERICAL``              Y coordinate of `target` vertex.
+================  ===================   ======== =================================================
+
+Where:
+
+:ANY-INTEGER: SMALLINT, INTEGER, BIGINT
+:ANY-NUMERICAL: SMALLINT, INTEGER, BIGINT, REAL, FLOAT
+
+
+.. xy_edges_sql_end
+
+.. flow_edges_sql_start
+
+Description of the edges_sql query for Max-flow like functions
+...............................................................................
+
+:edges_sql: an SQL query, which should return a set of rows with the following columns:
+
+==================== =================== ======== =================================================
+Column               Type                Default  Description
+==================== =================== ======== =================================================
+**id**               ``ANY-INTEGER``              Identifier of the edge.
+**source**           ``ANY-INTEGER``              Identifier of the first end point vertex of the edge.
+**target**           ``ANY-INTEGER``              Identifier of the second end point vertex of the edge.
+**capacity**         ``ANY-INTEGER``              Weight of the edge  `(source, target)`
+
+                                                  - When negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
+
+**reverse_capacity** ``ANY-INTEGER``       -1     Weight of the edge `(target, source)`,
+
+                                                  - When negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
+
+==================== =================== ======== =================================================
+
+Where:
+
+:ANY-INTEGER: SMALLINT, INTEGER, BIGINT
+
+
+.. flow_edges_sql_end
+
+
+
+.. points_sql_start
+
+Description of the Points SQL query
+...............................................................................
+
+:points_sql: an SQL query, which should return a set of rows with the following columns:
+
+============ ================= =================================================
+Column            Type              Description
+============ ================= =================================================
+**pid**      ``ANY-INTEGER``   (optional) Identifier of the point.
+
+                               - If column present, it can not be NULL.
+                               - If column not present, a sequential identifier will be given automatically.
+
+**edge_id**  ``ANY-INTEGER``   Identifier of the "closest" edge to the point.
+**fraction** ``ANY-NUMERICAL`` Value in <0,1> that indicates the relative postition from the first end point of the edge.
+**side**     ``CHAR``          (optional) Value in ['b', 'r', 'l', NULL] indicating if the point is:
+
+                               - In the right, left of the edge or
+                               - If it doesn't matter with 'b' or NULL.
+                               - If column not present 'b' is considered.
+
+============ ================= =================================================
+
+Where:
+
+:ANY-INTEGER: smallint, int, bigint
+:ANY-NUMERICAL: smallint, int, bigint, real, float
+
+.. points_sql_end
+
+.. _return_values:
+
+Return columns & values
+--------------------------------------------------------------------------------
+
+There are several kinds of columns returned are depending of the function.
+
+.. return_path_start
+
+Description of the return values for a path
+...............................................................................
+
+Returns set of ``(seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)``
+
+============== ========== =================================================
+Column         Type       Description
+============== ========== =================================================
+**seq**        ``INT``    Sequential value starting from **1**.
+**path_id**    ``INT``    Path identifier. Has value **1** for the first of a path. Used when there are multiple paths for the same ``start_vid`` to ``end_vid`` combination.
+**path_seq**   ``INT``    Relative position in the path. Has value **1** for the beginning of a path.
+**start_vid**  ``BIGINT`` Identifier of the starting vertex. Used when multiple starting vetrices are in the query.
+**end_vid**    ``BIGINT`` Identifier of the ending vertex. Used when multiple ending vertices are in the query.
+**node**       ``BIGINT`` Identifier of the node in the path from ``start_vid`` to ``end_vid``.
+**edge**       ``BIGINT`` Identifier of the edge used to go from ``node`` to the next node in the path sequence. ``-1`` for the last node of the path.
+**cost**       ``FLOAT``  Cost to traverse from ``node`` using ``edge`` to the next node in the path sequence.
+**agg_cost**   ``FLOAT``  Aggregate cost from ``start_v`` to ``node``.
+============== ========== =================================================
+
+.. return_path_end
+
+.. return_cost_start
+
+Description of the return values for a Cost function
+...............................................................................
+
+Returns set of ``(start_vid, end_vid, agg_cost)``
+
+============== ========== =================================================
+Column         Type       Description
+============== ========== =================================================
+**start_vid**  ``BIGINT`` Identifier of the starting vertex. Used when multiple starting vetrices are in the query.
+**end_vid**    ``BIGINT`` Identifier of the ending vertex. Used when multiple ending vertices are in the query.
+**agg_cost**   ``FLOAT``  Aggregate cost from ``start_vid`` to ``end_vid``.
+============== ========== =================================================
+
+.. return_cost_end
+
+
+
+.. result_flow_start
+
+Description of the Return Values
+.....................................................................
+
+=====================  ====================  =================================================
+Column                 Type                  Description
+=====================  ====================  =================================================
+**seq**                ``INT``               Sequential value starting from **1**.
+**edge_id**            ``BIGINT``            Identifier of the edge in the original query(edges_sql).
+**source**             ``BIGINT``            Identifier of the first end point vertex of the edge.
+**target**             ``BIGINT``            Identifier of the second end point vertex of the edge.
+**flow**               ``BIGINT``            Flow through the edge in the direction (source, target).
+**residual_capacity**  ``BIGINT``            Residual capacity of the edge in the direction (source, target).
+=====================  ====================  =================================================
+
+.. result_flow_end
+
+
+.. _advanced_topics:
+
+Advanced Topics
+-------------------------------------------------------------------------------
+
+.. _topology:
+
+Routing Topology
+...............................................................................
+
+
+.. rubric:: Overview
+
+Typically when GIS files are loaded into the data database for use with pgRouting they do not have topology information associated with them. To create a useful topology the data needs to be "noded". This means that where two or more roads form an intersection there it needs to be a node at the intersection and all the road segments need to be broken at the intersection, assuming that you can navigate from any of these segments to any other segment via that intersection.
+
+You can use the :ref:`graph analysis functions <analytics>` to help you see where you might have topology problems in your data. If you need to node your data, we also have a function :ref:`pgr_nodeNetwork() <pgr_node_network>` that might work for you. This function splits ALL crossing segments and nodes them. There are some cases where this might NOT be the right thing to do.
+
+For example, when you have an overpass and underpass intersection, you do not want these noded, but pgr_nodeNetwork does not know that is the case and will node them which is not good because then the router will be able to turn off the overpass onto the underpass like it was a flat 2D intersection. To deal with this problem some data sets use z-levels at these types of intersections and other data might not node these intersection which would be ok.
+
+For those cases where topology needs to be added the following functions may be useful. One way to prep the data for pgRouting is to add the following columns to your table and then populate them as appropriate. This example makes a lot of assumption like that you original data tables already has certain columns in it like ``one_way``, ``fcc``, and possibly others and that they contain specific data values. This is only to give you an idea of what you can do with your data.
+
+.. code-block:: sql
+
+    ALTER TABLE edge_table
+        ADD COLUMN source integer,
+        ADD COLUMN target integer,
+        ADD COLUMN cost_len double precision,
+        ADD COLUMN cost_time double precision,
+        ADD COLUMN rcost_len double precision,
+        ADD COLUMN rcost_time double precision,
+        ADD COLUMN x1 double precision,
+        ADD COLUMN y1 double precision,
+        ADD COLUMN x2 double precision,
+        ADD COLUMN y2 double precision,
+        ADD COLUMN to_cost double precision,
+        ADD COLUMN rule text,
+        ADD COLUMN isolated integer;
+
+    SELECT pgr_createTopology('edge_table', 0.000001, 'the_geom', 'id');
+
+The function :ref:`pgr_createTopology() <pgr_create_topology>` will create the ``vertices_tmp`` table and populate the ``source`` and ``target`` columns. The following example populated the remaining columns. In this example, the ``fcc`` column contains feature class code and the ``CASE`` statements converts it to an average speed.
+
+.. code-block:: sql
+
+    UPDATE edge_table SET x1 = st_x(st_startpoint(the_geom)),
+                          y1 = st_y(st_startpoint(the_geom)),
+                          x2 = st_x(st_endpoint(the_geom)),
+                          y2 = st_y(st_endpoint(the_geom)),
+      cost_len  = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]'),
+      rcost_len = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]'),
+      len_km = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]')/1000.0,
+      len_miles = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]')
+                  / 1000.0 * 0.6213712,
+      speed_mph = CASE WHEN fcc='A10' THEN 65
+                       WHEN fcc='A15' THEN 65
+                       WHEN fcc='A20' THEN 55
+                       WHEN fcc='A25' THEN 55
+                       WHEN fcc='A30' THEN 45
+                       WHEN fcc='A35' THEN 45
+                       WHEN fcc='A40' THEN 35
+                       WHEN fcc='A45' THEN 35
+                       WHEN fcc='A50' THEN 25
+                       WHEN fcc='A60' THEN 25
+                       WHEN fcc='A61' THEN 25
+                       WHEN fcc='A62' THEN 25
+                       WHEN fcc='A64' THEN 25
+                       WHEN fcc='A70' THEN 15
+                       WHEN fcc='A69' THEN 10
+                       ELSE null END,
+      speed_kmh = CASE WHEN fcc='A10' THEN 104
+                       WHEN fcc='A15' THEN 104
+                       WHEN fcc='A20' THEN 88
+                       WHEN fcc='A25' THEN 88
+                       WHEN fcc='A30' THEN 72
+                       WHEN fcc='A35' THEN 72
+                       WHEN fcc='A40' THEN 56
+                       WHEN fcc='A45' THEN 56
+                       WHEN fcc='A50' THEN 40
+                       WHEN fcc='A60' THEN 50
+                       WHEN fcc='A61' THEN 40
+                       WHEN fcc='A62' THEN 40
+                       WHEN fcc='A64' THEN 40
+                       WHEN fcc='A70' THEN 25
+                       WHEN fcc='A69' THEN 15
+                       ELSE null END;
+
+    -- UPDATE the cost information based on oneway streets
+
+    UPDATE edge_table SET
+        cost_time = CASE
+            WHEN one_way='TF' THEN 10000.0
+            ELSE cost_len/1000.0/speed_kmh::numeric*3600.0
+            END,
+        rcost_time = CASE
+            WHEN one_way='FT' THEN 10000.0
+            ELSE cost_len/1000.0/speed_kmh::numeric*3600.0
+            END;
+
+    -- clean up the database because we have updated a lot of records
+
+    VACUUM ANALYZE VERBOSE edge_table;
+
+
+Now your database should be ready to use any (most?) of the pgRouting algorithms.
+
+
+.. _analytics:
+
+Graph Analytics
+-------------------------------------------------------------------------------
+
+
+.. rubric:: Overview
+
+It is common to find problems with graphs that have not been constructed fully noded or in graphs with z-levels at intersection that have been entered incorrectly. An other problem is one way streets that have been entered in the wrong direction. We can not detect errors with respect to "ground" truth, but we can look for inconsistencies and some anomalies in a graph and report them for additional inspections.
+
+We do not current have any visualization tools for these problems, but I have used mapserver to render the graph and highlight potential problem areas. Someone familiar with graphviz might contribute tools for generating images with that.
+
+
+Analyze a Graph
+...............................................................................
+
+With :ref:`pgr_analyze_graph` the graph can be checked for errors. For example for table "mytab" that has "mytab_vertices_pgr" as the vertices table:
+
+.. code-block:: sql
+
+    SELECT pgr_analyzeGraph('mytab', 0.000002);
+    NOTICE:  Performing checks, pelase wait...
+    NOTICE:  Analyzing for dead ends. Please wait...
+    NOTICE:  Analyzing for gaps. Please wait...
+    NOTICE:  Analyzing for isolated edges. Please wait...
+    NOTICE:  Analyzing for ring geometries. Please wait...
+    NOTICE:  Analyzing for intersections. Please wait...
+    NOTICE:              ANALYSIS RESULTS FOR SELECTED EDGES:
+    NOTICE:                    Isolated segments: 158
+    NOTICE:                            Dead ends: 20028
+    NOTICE:  Potential gaps found near dead ends: 527
+    NOTICE:               Intersections detected: 2560
+    NOTICE:                      Ring geometries: 0
+    pgr_analyzeGraph
+    ----------
+       OK
+    (1 row)
+
+
+In the vertices table "mytab_vertices_pgr":
+
+  - Deadends are identified by ``cnt=1``
+  - Potencial gap problems are identified with ``chk=1``.
+
+.. code-block:: sql
+
+    SELECT count(*) as deadends  FROM mytab_vertices_pgr WHERE cnt = 1;
+    deadends
+    ----------
+        20028
+     (1 row)
+
+    SELECT count(*) as gaps  FROM mytab_vertices_pgr WHERE chk = 1;
+     gaps
+     -----
+       527
+     (1 row)
+
+
+
+For isolated road segments, for example, a segment where both ends are deadends. you can find these with the following query:
+
+.. code-block:: sql
+
+    SELECT *
+        FROM mytab a, mytab_vertices_pgr b, mytab_vertices_pgr c
+        WHERE a.source=b.id AND b.cnt=1 AND a.target=c.id AND c.cnt=1;
+
+
+If you want to visualize these on a graphic image, then you can use something like mapserver to render the edges and the vertices and style based on ``cnt`` or if they are isolated, etc. You can also do this with a tool like graphviz, or geoserver or other similar tools.
+
+
+Analyze One Way Streets
+...............................................................................
+
+:ref:`pgr_analyze_oneway` analyzes one way streets in a graph and identifies any flipped segments. Basically if you count the edges coming into a node and the edges exiting a node the number has to be greater than one.
+
+This query will add two columns to the vertices_tmp table ``ein int`` and ``eout int`` and populate it with the appropriate counts. After running this on a graph you can identify nodes with potential problems with the following query.
+
+
+The rules are defined as an array of text strings that if match the ``col`` value would be counted as true for the source or target in or out condition.
+
+
+Example
+...............................................................................
+
+Lets assume we have a table "st" of edges and a column "one_way" that might have values like:
+
+   * 'FT'    - oneway from the source to the target node.
+   * 'TF'    - oneway from the target to the source node.
+   * 'B'     - two way street.
+   * ''      - empty field, assume twoway.
+   * <NULL>  - NULL field, use two_way_if_null flag.
+
+Then we could form the following query to analyze the oneway streets for errors.
+
+.. code-block:: sql
+
+    SELECT pgr_analyzeOneway('mytab',
+                ARRAY['', 'B', 'TF'],
+                ARRAY['', 'B', 'FT'],
+                ARRAY['', 'B', 'FT'],
+                ARRAY['', 'B', 'TF'],
+                );
+
+    -- now we can see the problem nodes
+    SELECT * FROM mytab_vertices_pgr WHERE ein=0 OR eout=0;
+
+    -- and the problem edges connected to those nodes
+    SELECT gid FROM mytab a, mytab_vertices_pgr b WHERE a.source=b.id AND ein=0 OR eout=0
+    UNION
+    SELECT gid FROM mytab a, mytab_vertices_pgr b WHERE a.target=b.id AND ein=0 OR eout=0;
+
+Typically these problems are generated by a break in the network, the one way direction set wrong, maybe an error related to z-levels or a network that is not properly noded.
+
+The above tools do not detect all network issues, but they will identify some common problems. There are other problems that are hard to detect because they are more global in nature like multiple disconnected networks. Think of an island with a road network that is not connected to the mainland network because the bridge or ferry routes are missing.
+
+
+
+
+.. _performance:
+
+Performance Tips
+-------------------------------------------------------------------------------
+
+For the Routing functions
+...............................................................................
+
+To get faster results bound your queries to the area of interest of routing to have, for example, no more than one million rows.
+
+Use an inner query SQL that does not include some edges in the routing function
+
+.. code-block:: sql
+
+	SELECT id, source, target from edge_table WHERE
+        	id < 17 and
+        	the_geom  && (select st_buffer(the_geom,1) as myarea FROM  edge_table where id = 5)
+
+Integrating the inner query to the pgRouting function:
+
+.. code-block:: sql
+
+    SELECT * FROM pgr_dijkstra(
+	    'SELECT id, source, target from edge_table WHERE
+        	id < 17 and
+        	the_geom  && (select st_buffer(the_geom,1) as myarea FROM  edge_table where id = 5)',
+        1, 2)
+
+
+
+
+For the topology functions:
+...............................................................................
+
+When "you know" that you are going to remove a set of edges from the edges table, and without those edges you are going to use a routing function you can do the following:
+
+Analize the new topology based on the actual topology:
+
+.. code-block:: sql
+
+	pgr_analyzegraph('edge_table',rows_where:='id < 17');
+
+Or create a new topology if the change is permanent:
+
+.. code-block:: sql
+
+	pgr_createTopology('edge_table',rows_where:='id < 17');
+	pgr_analyzegraph('edge_table',rows_where:='id < 17');
+
+
+.. _how_contribute:
+
+How to contribute
+-------------------------------------------------------------------------------
+
+.. rubric:: Wiki
+
+* Edit an existing  `pgRouting Wiki <https://github.com/pgRouting/pgrouting/wiki>`_ page.
+* Or create a new Wiki page
+
+  * Create a page on the `pgRouting Wiki <https://github.com/pgRouting/pgrouting/wiki>`_
+  * Give the title an appropriate name
+
+
+* `Example <https://github.com/pgRouting/pgrouting/wiki/How-to:-Handle-parallel-edges-(KSP)>`_
+
+.. rubric:: Adding Functionaity to pgRouting
+
+
+Consult the `developer's documentation <http://docs.pgrouting.org/doxy/2.4/index.html>`_
+
+
+
+.. rubric:: Indices and tables
+
+* :ref:`genindex`
+* :ref:`search`
+
diff --git a/doc/src/pgRouting-installation.rst b/doc/src/pgRouting-installation.rst
new file mode 100644
index 0000000..e2060ba
--- /dev/null
+++ b/doc/src/pgRouting-installation.rst
@@ -0,0 +1,312 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+.. _installation:
+
+Installation
+===============================================================================
+
+.. rubric:: Table of Contents
+
+* :ref:`install-short`
+* :ref:`install_get_sources`
+* :ref:`install_enable_db`
+* :ref:`install_dependencies`
+* :ref:`install_configuring`
+* :ref:`install_build`
+* :ref:`install_testing`
+
+Instructions for downloading and installing binaries for different Operative systems instructions and additional notes and corrections not included in this documentation can be found in `Installation wiki <https://github.com/pgRouting/pgrouting/wiki/Notes-on-Download%2C-Installation-and-building-pgRouting>`__
+
+To use pgRouting postGIS needs to be installed, please read the information about installation in this `Install Guide <http://www.postgis.us/presentations/postgis_install_guide_22.html>`__
+
+.. _install-short:
+
+Short Version
+-------------------------------------------------------------------------------
+
+
+.. TODO: pumpup release must change this value
+
+Extracting the tar ball
+
+.. code-block:: bash
+
+    tar xvfz pgrouting-2.4.0.tar.gz
+    cd pgrouting-2.4.0
+
+To compile assuming you have all the dependencies in your search path:
+
+.. code-block:: bash
+
+    mkdir build
+    cd build
+    cmake  ..
+    make
+    sudo make install
+
+Once pgRouting is installed, it needs to be enabled in each individual database you want to use it in.
+
+.. code-block:: bash
+
+    createdb routing
+    psql routing -c 'CREATE EXTENSION postGIS'
+    psql routing -c 'CREATE EXTENSION pgRouting'
+
+
+.. _install_get_sources:
+
+Get the sources
+-------------------------------------------------------------------------------
+
+
+The pgRouting latest release can be found in https://github.com/pgRouting/pgrouting/releases/latest
+
+.. rubric:: wget
+
+To download this release:
+
+.. TODO: pumpup release must change this value
+
+.. code-block:: bash
+
+    wget -O pgrouting-v2.4.0.tar.gz https://github.com/pgRouting/pgrouting/archive/v2.4.0.tar.gz
+
+Goto :ref:`install-short` to the extract and compile instructions.
+
+.. rubric:: git
+
+To download the repository
+
+.. code-block:: bash
+
+    git clone git://github.com/pgRouting/pgrouting.git
+    cd pgrouting
+    git checkout |release|
+
+Goto :ref:`install-short` to the compile instructions (there is no tar ball).
+
+
+
+.. _install_enable_db:
+
+Enabeling and upgrading in the database
+----------------------------------------------
+
+.. rubric:: Enabeling the database
+
+pgRouting is an extension and depends on postGIS. Enabling postGIS before enabling pgRouting in the database
+
+.. code-block:: sql
+
+  CREATE EXTENSION postgis;
+  CREATE EXTENSION pgrouting;
+
+
+.. rubric:: Upgrading the database
+
+To upgrade pgRouting in the database to version 2.4.0 use the following command:
+
+.. TODO: pumpup release must change this value
+
+.. code-block:: sql
+
+   ALTER EXTENSION pgrouting UPDATE TO "2.4.0";
+
+More information can be found in https://www.postgresql.org/docs/current/static/sql-createextension.html
+
+
+.. _install_dependencies:
+
+Dependencies
+-------------------------------------------------------------------------------
+
+.. rubric:: Compilation Dependencies
+
+To be able to compile pgRouting, make sure that the following dependencies are met:
+
+* C and C++0x compilers
+  * g++ version >= 4.8
+* Postgresql version >= 9.1
+* PostGIS version >= 2.0
+* The Boost Graph Library (BGL). Version >= 1.46
+* CMake >= 2.8.8
+* CGAL >=  4.2
+
+
+.. rubric:: optional dependencies
+
+For user's documentation
+
+* Sphinx >= 1.1
+* Latex
+
+For developer's documentation
+
+* Doxygen >= 1.7
+
+For testing
+
+* pgtap
+* pg_prove
+
+
+.. rubric:: Example: Installing dependencies on linux
+
+Installing the compilation dependencies
+
+.. code-block:: none
+
+    sudo apt-get install
+        cmake \
+        g++ \
+        postgresql-9.3 \
+        postgresql-server-dev-9.3 \
+        libboost-graph-dev \
+        libcgal-dev
+
+Installing the optional dependencies
+
+.. code-block:: none
+
+    sudo apt-get install -y python-sphinx \
+        texlive \
+        doxygen \
+        libtap-parser-sourcehandler-pgtap-perl \
+        postgresql-9.3-pgtap
+
+
+.. _install_configuring:
+
+Configuring
+-------------------------
+
+pgRouting uses the `cmake` system to do the configuration.
+
+The build directory is different from the source directory
+
+Create the build directory
+
+.. code-block:: bash
+
+    $ mkdir build
+
+Configurable variables
+.......................
+
+.. rubric:: To see the variables that can be configured
+
+
+.. code-block:: bash
+
+    $ cd build
+    $ cmake -L ..
+
+
+.. rubric:: Configuring The Documentation
+
+Most of the effort of the documentation has being on the HTML files.
+Some variables for the documentation:
+
+================== ========= ============================
+Variable            Default     Comment
+================== ========= ============================
+WITH_DOC           BOOL=OFF  Turn on/off building the documentation
+BUILD_HTML         BOOL=ON   If ON, turn on/off building HTML for user's documentation
+BUILD_DOXY         BOOL=ON   If ON, turn on/off building HTML for developer's documentation
+BUILD_LATEX        BOOL=OFF  If ON, turn on/off building PDF
+BUILD_MAN          BOOL=OFF  If ON, turn on/off building MAN pages
+DOC_USE_BOOTSTRAP  BOOL=OFF  If ON, use sphinx-bootstrap for HTML pages of the users documentation
+================== ========= ============================
+
+Configuring with documentation
+
+.. code-block:: bash
+
+    $ cmake -DWITH_DOC=ON ..
+
+.. note:: Most of the effort of the documentation has being on the html files.
+
+
+.. _install_build:
+
+Building
+----------------------------------------------------------------
+
+Using ``make`` to build the code and the documentation
+
+The following instructions start from *path/to/pgrouting/build*
+
+.. code-block:: bash
+
+    $ make          # build the code but not the documentation
+    $ make doc      # build only the documentation
+    $ make all doc  # build both the code and the documentation
+
+
+We have tested on several platforms, For installing or reinstalling all the steps are needed.
+
+.. warning:: The sql signatures are configured and build in the ``cmake`` command.
+
+.. rubric:: MinGW on Windows
+
+.. code-block:: bash
+
+    $ mkdir build
+    $ cd build
+    $ cmake -G"MSYS Makefiles" ..
+    $ make
+    $ make install
+
+
+.. rubric:: Linux
+
+The following instructions start from *path/to/pgrouting*
+
+.. code-block:: bash
+
+    mkdir build
+    cd build
+    cmake  ..
+    make
+    sudo make install
+
+When the configuration changes:
+
+.. code-block:: bash
+
+    rm -rf build
+
+and start the build process as mentioned above.
+
+.. _install_testing:
+
+Testing
+-------------------------
+
+Currently there is no :code:`make test` and testing is done as follows
+
+The following instructions start from *path/to/pgrouting/*
+
+.. code-block:: none
+
+    tools/testers/algorithm-tester.pl
+    createdb  -U <user> ___pgr___test___
+    sh ./tools/testers/pg_prove_tests.sh <user>
+    dropdb  -U <user> ___pgr___test___
+
+See Also
+-------------------------------------------------------------------------------
+
+.. rubric:: Indices and tables
+
+* :ref:`genindex`
+* :ref:`search`
+
+
diff --git a/doc/src/introduction/introduction.rst b/doc/src/pgRouting-introduction.rst
similarity index 90%
rename from doc/src/introduction/introduction.rst
rename to doc/src/pgRouting-introduction.rst
index 9cdb097..e2daeb9 100644
--- a/doc/src/introduction/introduction.rst
+++ b/doc/src/pgRouting-introduction.rst
@@ -1,9 +1,9 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
 
-    This documentation is licensed under a Creative Commons Attribution-Share  
+    This documentation is licensed under a Creative Commons Attribution-Share
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
@@ -14,7 +14,7 @@ Introduction
 
 pgRouting is an extension of `PostGIS <http://postgis.net>`_ and `PostgreSQL <http://postgresql.org>`_ geospatial database and adds routing and other network analysis functionality. A predecessor of pgRouting – pgDijkstra, written by Sylvain Pasche from `Camptocamp <http://camptocamp.com>`_, was later extended by `Orkney <http://www.orkney.co.jp>`_ and renamed to pgRouting. The project is now supported and maintained by `Georepublic <http://georepublic.info>`_, `iMaptools <http://imaptoo [...]
 
-pgRouting is an `OSGeo Labs <http://wiki.osgeo.org/wiki/OSGeo_Labs>`_ project of the `OSGeo Foundation <http://osgeo.org>`_ and included on `OSGeo Live <http://live.osgeo.org/>`_. 
+pgRouting is an `OSGeo Labs <http://wiki.osgeo.org/wiki/OSGeo_Labs>`_ project of the `OSGeo Foundation <http://osgeo.org>`_ and included on `OSGeo Live <http://live.osgeo.org/>`_.
 
 
 .. _license:
@@ -28,7 +28,7 @@ The following licenses can be found in pgRouting:
    :widths: 250 500
 
    * - **License**
-     - 
+     -
    * - GNU General Public License, version 2
      - Most features of pgRouting are available under `GNU General Public License, version 2 <http://www.gnu.org/licenses/gpl-2.0.html>`_.
    * - Boost Software License - Version 1.0
@@ -50,9 +50,9 @@ This Release Contributors
 Individuals (in alphabetical order)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-Andrea Nardellli, Daniel Kastl, Ko Nagase, Mario Basa, Regina Obe, Rohith Reddy, Stephen Woodbridge, Virginia Vergara
+Virginia Vergara
 
-And all the people that gives us a little of their time making comments, finding issues, making pull requests etc.
+And all the people that give us a little of their time making comments, finding issues, making pull requests etc.
 
 Corporate Sponsors (in alphabetical order)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -86,16 +86,6 @@ These are corporate entities that have contributed developer time, hosting, or d
  - Paragon Corporation
 
 
-Inside
-------
-
-.. _boost-inside:
-
-.. figure:: ./images/boost-inside.jpeg
-   :target: http://www.boost.org/libs/graph
-
-   Boost Graph Inside
-
 More Information
 -------------------------------------------------------------------------------
 
@@ -104,4 +94,5 @@ More Information
 * PostGIS extension at the PostGIS project web site http://postgis.net.
 * Boost C++ source libraries at http://www.boost.org.
 * Computational Geometry Algorithms Library (CGAL) at http://www.cgal.org.
+* The Migration guide can be found at https://github.com/pgRouting/pgrouting/wiki/Migration-Guide.
 
diff --git a/doc/src/proposed.rst b/doc/src/proposed.rst
new file mode 100644
index 0000000..bbefe9c
--- /dev/null
+++ b/doc/src/proposed.rst
@@ -0,0 +1,163 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+.. _Stable:
+
+Stable proposed Functions
+==================================
+
+..  stable-begin-warning
+
+.. warning:: These are proposed functions for next mayor release.
+
+  - They are not officially in the current release.
+  - They will likely officially be part of the next mayor release:
+
+    - The functions make use of ANY-INTEGER and ANY-NUMERICAL
+    - Name might not change. (But still can)
+    - Signature might not change. (But still can)
+    - Functionality might not change. (But still can)
+    - pgTap tests have being done. But might need more.
+    - Documentation might need refinement.
+
+..  stable-end-warning
+
+
+
+As part of the :ref:`dijkstra`
+
+- :ref:`pgr_dijkstraCostMatrix` Use pgr_dijkstra to calculate a cost matrix.
+- :ref:`pgr_dijkstraVia` - Use pgr_dijkstra to make a route via vertices.
+
+.. rubric:: Families
+
+:ref:`astar`
+ 
+.. include:: aStar-family.rst
+   :start-after: index from here
+   :end-before: index to here
+
+
+:ref:`withPoints`
+
+.. include:: withPoints-family.rst
+   :start-after: index from here
+   :end-before: index to here
+
+.. rubric:: categories
+
+:ref:`Cost`
+
+.. include:: cost-category.rst
+   :start-after: index from here
+   :end-before: index to here
+
+:ref:`CostMatrix`
+
+.. include:: costMatrix-category.rst
+   :start-after: index from here
+   :end-before: index to here
+
+:ref:`KSP`
+
+.. include:: KSP-category.rst
+   :start-after: index from here
+   :end-before: index to here
+
+.. toctree::
+    :hidden:
+
+    aStar-family
+    withPoints-family
+
+    cost-category
+    costMatrix-category
+    KSP-category
+
+
+.. _proposed:
+
+Experimental and Proposed functions
+===============================================================================
+
+
+..  begin-warn-expr
+
+.. warning:: These are proposed functions
+
+  - They are not officially of the current release.
+  - They likely will not be officially be part of the next release:
+
+    - The functions might not make use of ANY-INTEGER and ANY-NUMERICAL
+    - Name might change.
+    - Signature might change.
+    - Functionality might change.
+    - pgTap tests might be missing.
+    - Might need c/c++ coding.
+    - May lack documentation.
+    - Documentation if any might need to be rewritten.
+    - Documentation examples might need to be automatically generated.
+    - Might need a lot of feedback from the comunity.
+    - Might depend on a proposed function of pgRouting
+    - Might depend on a deprecated function of pgRouting
+
+..  end-warn-expr
+
+
+:ref:`contraction` - Reduce network size using contraction techniques
+
+- :ref:`pgr_contractgraph` - Reduce network size using contraction techniques
+
+:ref:`maxFlow`
+
+.. include:: flow-family.rst
+   :start-after: index from here
+   :end-before: index to here
+
+
+.. rubric:: Convenience
+
+-  :ref:`pgr_point_to_edgenode` - convert a point geometry to a ``vertex_id`` based on closest edge.
+
+.. rubric:: Graph Analysis
+
+-  :ref:`pgr_labelGraph` - Analyze / label  subgraphs within a network
+
+.. rubric:: Vehicle Routing Problems
+
+-  :ref:`pgr_gsocvrppdtw` - VRP Pickup & Delivery (Euclidean)
+-  :ref:`pgr_vrp_basic` - VRP One Depot
+
+
+.. toctree::
+  :hidden:
+
+  contraction-family
+  flow-family
+  pgr_pointToEdgeNode
+  pgr_labelGraph
+  pgr_gsoc_vrppdtw
+  pgr_vrpOneDepot
+
+
+
+
+
+
+
+
+..
+  The template
+   ------------
+    - :ref:`pgr_funnyDijkstra`
+    .. toctree::
+    :hidden:
+    ..
+     ../src/funnyDijkstra/doc/pgr_funnyDijkstra.rst
+
diff --git a/doc/src/recipes/example_recipe.rst b/doc/src/recipes/example_recipe.rst
deleted file mode 100644
index a7bca43..0000000
--- a/doc/src/recipes/example_recipe.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _example_recipe:
-
-Comparing topology of a unnoded network with a noded network
--------------------------------------------------------------
-
-:Author: pgRouting team.
-:Licence: Open Source
-
-This recipe uses the :ref:`sampledata` network.
-
-The purpose of this recipe is to compare a not nodded network with a nodded network.
-
-.. code-block:: sql
-
-	SELECT pgr_createTopology('edge_table', 0.001);
-	SELECT pgr_analyzegraph('edge_table', 0.001);
-	SELECT pgr_nodeNetwork('edge_table', 0.001);
-	SELECT pgr_createTopology('edge_table_noded', 0.001);
-	SELECT pgr_analyzegraph('edge_table_noded', 0.001); 
-
diff --git a/doc/src/recipes/index.rst b/doc/src/recipes/index.rst
deleted file mode 100644
index 50ed137..0000000
--- a/doc/src/recipes/index.rst
+++ /dev/null
@@ -1,83 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _recipes:
-
-User's Recipes List
-===============================================================================
-
-
-.. toctree:: 
-         
-   ./example_recipe.rst
-   ./parallel_handling.rst
-
-
-*No more contributions*
-
-
-How to contribute.
-==================
-
-.. rubric:: To add a recipie or a wrapper
-
-The first steps are:
-
-  - Fork the repository 
-  - Create a branch for your recipe or wrapper
-  - Create your recipe file
-
-.. code-block:: bash
-
-    cd doc/src/recipes/
-    vi myrecipe.rst
-    git add myrecipe.rst
-    # include the recipe in this file
-    vi index.rst
-
-.. rubric:: To create the test file of your recipe
-
-.. code-block:: bash
-
-    cd test
-    cp myrecipe.rst myrecipe.sql.test
-    
-    # make your test based on your recipe
-    vi myrecipe.sql.test
-    git add myrecipe.sql.test
-
-    # create your test results file
-    touch myrecipe.result
-    git add myrecipe.result
-
-    # add your test to the file
-    vi test.conf
-
-Leave only the SQL code on ``myrecipe.sql.test`` by deleting lines or by commenting lines.
-
-
-.. rubric:: To get the results of your recipe
-
-From the root directory execute:
-
-.. code-block:: bash
-
-    tools/test-runner.pl -alg recipes -ignorenotice
-
-Copy the results of your recipe and paste them in the file ``myrecipe.result``, and remove the "> " from the file.
-
-.. rubric::  make a pull request.
-
-.. code-block:: bash
-
-    git commit -a -m 'myrecipe is for this and that'
-    git push
-
-From your fork in github make a pull request over develop
-
diff --git a/doc/src/recipes/parallel_handling.rst b/doc/src/recipes/parallel_handling.rst
deleted file mode 100644
index f20ddb3..0000000
--- a/doc/src/recipes/parallel_handling.rst
+++ /dev/null
@@ -1,221 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _parallel_handling:
-
-Handling parallels after getting a path (pgr_ksp focus)
--------------------------------------------------------
-
-:Author: pgRouting team.
-:Licence: Open Source
-
-
-.. rubric:: The graph
-
-
-.. image:: ./images/parallelImage.png
-
-
-.. rubric:: Data
-
-.. code-block:: sql
-
-  drop table if exists parallel;
-  CREATE TABLE parallel (
-    id serial,
-    source integer,
-    target integer,
-    cost double precision,
-    reverse_cost double precision,
-    x1 double precision,
-    y1 double precision,
-    x2 double precision,
-    y2 double precision,
-    the_geom geometry
-  );
- 
-  INSERT INTO parallel (x1,y1,x2,y2) 
-    VALUES (1,0,1,1),(1,1,1,3),(1,1,1,3),(1,1,1,3),(1,3,1,4),(1,1,-1,1),(-1,1,-1,3),(-1,3,1,3);
-  UPDATE parallel SET the_geom = ST_makeline(ST_point(x1,y1),ST_point(x2,y2));
-  UPDATE parallel SET the_geom = ST_makeline(ARRAY[ST_point(1,1),ST_point(0,2),ST_point(1,3)]) WHERE id = 3;
-  UPDATE parallel SET the_geom = ST_makeline(ARRAY[ST_point(1,1),ST_point(2,1),ST_point(2,3),ST_point(1,3)])
-                                WHERE id = 4;
-  UPDATE parallel SET cost = ST_length(the_geom), reverse_cost = ST_length(the_geom);
-  SELECT pgr_createTopology('parallel',0.001);
-
-.. rubric:: pgr_ksp results
-
-We ignore the costs because we want all the parallels
-
-.. code-block:: sql
-
-  SELECT seq, path_id AS route, node, edge INTO routes
-    from pgr_ksp('select id, source, target, cost, reverse_cost from parallel',
-    1, 4, 3);
-
-  select route, node, edge from routes;
-    route | node | edge 
-   -------+------+------
-        1 |    1 |    1
-        1 |    2 |    2
-        1 |    3 |    5
-        1 |    4 |   -1
-        2 |    1 |    1
-        2 |    2 |    6
-        2 |    5 |    7
-        2 |    6 |    8
-        2 |    3 |    5
-        2 |    4 |   -1
-   (10 rows)
-
-
-.. rubric:: We need an aggregate function:
-
-.. code-block:: sql
-
-  CREATE AGGREGATE array_accum (anyelement)
-  (
-    sfunc = array_append,
-    stype = anyarray,
-    initcond = '{}'
-  );
-
-
-.. rubric:: Now lets generate a table with the parallel edges.
-
-.. code-block:: sql
-
-  select distinct seq,route,source,target, array_accum(id) as edges into paths
-    from (select seq, route, source, target 
-          from parallel, routes where id = edge) as r
-       join parallel using (source, target)
-    group by seq,route,source,target order by seq;
-
-   select route, source, targets, edges from paths;
-     route | source | target |  edges  
-    -------+--------+--------+---------
-         1 |      1 |      2 | {1}
-         2 |      1 |      2 | {1}
-         2 |      2 |      5 | {6}
-         1 |      2 |      3 | {2,3,4}
-         2 |      5 |      6 | {7}
-         1 |      3 |      4 | {5}
-         2 |      6 |      3 | {8}
-         2 |      3 |      4 | {5}
-    (8 rows)
-
-
-.. rubric:: Some more aggregate functions
-
-To generate a table with all the combinations for parallel routes, we need some more aggregates
-
-.. code-block:: sql
-
-  create or replace function multiply( integer, integer )
-  returns integer as
-  $$
-    select $1 * $2;
-  $$
-  language sql stable;
-
-  create aggregate prod(integer)
-  (
-    sfunc = multiply,
-    stype = integer,
-    initcond = 1
-  );
-
-.. rubric:: And a function that "Expands" the table
-
-
-
-.. code-block:: sql
-
-  CREATE OR REPLACE function   expand_parallel_edge_paths(tab text)
-    returns TABLE (
-                  seq    INTEGER,
-                  route  INTEGER,
-                  source INTEGER, target INTEGER, -- this ones are not really needed
-                  edge   INTEGER ) AS
-   $body$
-   DECLARE
-   nroutes   INTEGER;
-   newroutes INTEGER;
-   rec   record;
-   seq2 INTEGER := 1;
-   rnum INTEGER := 0;
-
-   BEGIN     -- get the number of distinct routes
-     execute 'select count(DISTINCT route) from ' || tab INTO nroutes;
-     FOR i IN 0..nroutes-1
-     LOOP
-         -- compute the number of new routes this route will expand into
-         -- this is the product of the lengths of the edges array for each route
-         execute 'select prod(array_length(edges, 1))-1 from '
-         ||       quote_ident(tab) || ' where route='    || i INTO newroutes; 
-         -- now we generate the number of new routes for this route
-         -- by repeatedly listing the route and swapping out the parallel edges
-         FOR j IN 0..newroutes
-         LOOP
-             -- query the specific route
-             FOR rec IN execute 'select * from ' || quote_ident(tab) ||' where route=' || i
-                         || ' order by seq'
-             LOOP
-                 seq := seq2;              
-                 route := rnum;
-                 source := rec.source;
-                 target := rec.target;
-                 -- using module arithmetic iterate through the various edge choices
-                 edge := rec.edges[(j % (array_length(rec.edges, 1)))+1];
-                 -- return a new record
-                 RETURN next;
-                 seq2 := seq2 + 1;    -- increment the record count
-              END LOOP;
-              seq := seq2;
-              route := rnum;
-              source := rec.target;
-              target := -1;
-              edge := -1;
-              RETURN next;  -- Insert the ending record of the route
-              seq2 := seq2 + 1;
-              
-              rnum := rnum + 1;  -- increment the route count
-          END LOOP;
-       END LOOP;
-   END;
-   $body$
-   language plpgsql volatile strict   cost 100 rows 100;
-
-.. rubric:: Test it
-
-.. code-block:: sql
-
-  select * from expand_parallel_edge_paths( 'paths' );
-   seq | route | source | target | edge 
-  -----+-------+--------+--------+------
-     1 |     0 |      1 |      2 |    1
-     2 |     0 |      2 |      3 |    2
-     3 |     0 |      3 |      4 |    5
-     4 |     0 |      4 |     -1 |   -1
-     5 |     1 |      1 |      2 |    1
-     6 |     1 |      2 |      3 |    3
-     7 |     1 |      3 |      4 |    5
-     8 |     1 |      4 |     -1 |   -1
-     9 |     2 |      1 |      2 |    1
-    10 |     2 |      2 |      3 |    4
-    11 |     2 |      3 |      4 |    5
-    12 |     2 |      4 |     -1 |   -1
-    13 |     3 |      1 |      2 |    1
-    14 |     3 |      2 |      5 |    6
-    15 |     3 |      5 |      6 |    7
-    16 |     3 |      6 |      3 |    8
-    17 |     3 |      3 |      4 |    5
-    18 |     3 |      4 |     -1 |   -1
-  (18 rows)
-
diff --git a/doc/src/recipes/test/sampledata.data.sql b/doc/src/recipes/test/sampledata.data.sql
deleted file mode 100644
index db6f2cb..0000000
--- a/doc/src/recipes/test/sampledata.data.sql
+++ /dev/null
@@ -1,59 +0,0 @@
-
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
---              SAMPLE DATA                
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
-drop table if exists edge_table;
-
-CREATE TABLE edge_table (
-    id serial,
-    dir character varying,
-    source integer,
-    target integer,
-    cost double precision,
-    reverse_cost double precision,
-    x1 double precision,
-    y1 double precision,
-    x2 double precision,
-    y2 double precision,
-    the_geom geometry
-);
-
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  2,0,   2,1);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES (-1, 1,  2,1,   3,1);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES (-1, 1,  3,1,   4,1);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  2,1,   2,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1,-1,  3,1,   3,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  0,2,   1,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  1,2,   2,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  2,2,   3,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  3,2,   4,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  2,2,   2,3);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1,-1,  3,2,   3,3);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1,-1,  2,3,   3,3);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1,-1,  3,3,   4,3);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  2,3,   2,4);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  4,2,   4,3);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  4,1,   4,2);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  0.5,3.5,  1.999999999999,3.5);
-INSERT INTO edge_table (cost,reverse_cost,x1,y1,x2,y2) VALUES ( 1, 1,  3.5,2.3,  3.5,4);
-
-UPDATE edge_table SET the_geom = st_makeline(st_point(x1,y1),st_point(x2,y2)),
-                      dir = CASE WHEN (cost>0 and reverse_cost>0) THEN 'B'   -- both ways
-                                 WHEN (cost>0 and reverse_cost<0) THEN 'FT'  -- direction of the LINESSTRING
-                                 WHEN (cost<0 and reverse_cost>0) THEN 'TF'  -- reverse direction of the LINESTRING
-                                 ELSE '' END;                                -- unknown
-
-select pgr_createTopology('edge_table',0.001);
-
-drop table if exists vertex_table;
-CREATE TABLE vertex_table (
-    id serial,
-    x double precision,
-    y double precision
-);
-
-INSERT INTO vertex_table VALUES
-        (1,2,0), (2,2,1), (3,3,1), (4,4,1), (5,0,2), (6,1,2), (7,2,2),
-        (8,3,2), (9,4,2), (10,2,3), (11,3,3), (12,4,3), (13,2,4);
diff --git a/doc/src/recipes/test/test.conf b/doc/src/recipes/test/test.conf
deleted file mode 100644
index 54fc6f3..0000000
--- a/doc/src/recipes/test/test.conf
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/perl -w
-
-%main::tests = (
-    'any' => {
-        'comment' => 'Recipes test for any versions.',
-        'data' => ['sampledata.data.sql'],
-        'tests' => [qw(
-parallel_handling
-example_recipe
-)]
-        },
-
-#        'data' => ['sampledata.data.sql'],
-#    'vpg-vpgis' => {}, # for version specific tests
-#    '8-1' => {},       # for pg 8.x and postgis 1.x
-#    '9.2-2.1' => {},   # for pg 9.2 and postgis 2.1
-);
-
-1;
diff --git a/doc/src/recipes/test/zzz-remove_sampledata.result b/doc/src/recipes/test/zzz-remove_sampledata.result
deleted file mode 100644
index e69de29..0000000
diff --git a/doc/src/recipes/test/zzz-remove_sampledata.test.sql b/doc/src/recipes/test/zzz-remove_sampledata.test.sql
deleted file mode 100644
index 9ceaa20..0000000
--- a/doc/src/recipes/test/zzz-remove_sampledata.test.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-BEGIN;
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
---  REMOVE            SAMPLE DATA                
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
-drop table if exists edge_table;
-drop table if exists vertex_table;
-ROLLBACK;
diff --git a/doc/src/changelog/release_notes.rst b/doc/src/release_notes.rst
similarity index 74%
rename from doc/src/changelog/release_notes.rst
rename to doc/src/release_notes.rst
index 81daf70..6a50b65 100644
--- a/doc/src/changelog/release_notes.rst
+++ b/doc/src/release_notes.rst
@@ -14,34 +14,77 @@ Release Notes
 
 To see the full list of changes check the list of `Git commits <https://github.com/pgRouting/pgrouting/commits>`_ on Github.
 
-Table of contents
---------------------------
-
-   - :ref:`changelog_2_3_2`
-   - :ref:`changelog_2_3_1`
-   - :ref:`changelog_2_3_0`
-   - :ref:`changelog_2_2_4`
-   - :ref:`changelog_2_2_3`
-   - :ref:`changelog_2_2_2`
-   - :ref:`changelog_2_2_1`
-   - :ref:`changelog_2_2_0`
-   - :ref:`changelog_2_1_0`
-   - :ref:`changelog_2_0_1`
-   - :ref:`changelog_2_0_0`
-   - :ref:`changelog_1_x`
+.. rubric:: Table of contents
 
+.. changelog start
+
+* :ref:`changelog_2_4_0`
+* :ref:`changelog_2_3_2`
+* :ref:`changelog_2_3_1`
+* :ref:`changelog_2_3_0`
+* :ref:`changelog_2_2_4`
+* :ref:`changelog_2_2_3`
+* :ref:`changelog_2_2_2`
+* :ref:`changelog_2_2_1`
+* :ref:`changelog_2_2_0`
+* :ref:`changelog_2_1_0`
+* :ref:`changelog_2_0_1`
+* :ref:`changelog_2_0_0`
+* :ref:`changelog_1_x`
+
+.. changelog end
+
+.. _changelog_2_4_0:
+
+pgRouting 2.4.0 Release Notes
+-------------------------------------------------------------------------------
+
+To see the issues closed by this release see the `Git closed issues for 2.4.0 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.4.0%22+is%3Aclosed>`_ on Github.
+
+.. rubric:: New Signatures
+
+* pgr_bdDijkstra
+
+
+.. rubric:: New Proposed Signatures
+
+* pgr_maxFlow
+* pgr_astar(one to many)
+* pgr_astar(many to one)
+* pgr_astar(many to many)
+* pgr_astarCost(one to one)
+* pgr_astarCost(one to many)
+* pgr_astarCost(many to one)
+* pgr_astarCost(many to many)
+* pgr_astarCostMatrix
+
+.. rubric:: Deprecated Signatures
+
+* pgr_bddijkstra - use pgr_bdDijkstra instead
+
+.. rubric:: Deprecated Functions
+
+* pgr_pointsToVids
+
+.. rubric:: Bug fix
+
+* Bug fixes on proposed functions
+
+  * pgr_withPointsKSP: fixed ordering
+
+* TRSP original code is used with no changes on the compilation warnings
 
 .. _changelog_2_3_2:
 
 pgRouting 2.3.2 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.3.2 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.3.2%22+is%3Aclosed>`_ on Github.
 
 .. rubric:: Bug Fixes
 
 * Fixed pgr_gsoc_vrppdtw crash when all orders fit on one truck.
-* Fixed pgr_trsp: 
+* Fixed pgr_trsp:
 
   * Alternate code is not executed when the point is in reality a vertex
   * Fixed ambiguity on seq
@@ -50,7 +93,7 @@ To see the issues closed by this release see the `Git closed issues for 2.3.2 <h
 .. _changelog_2_3_1:
 
 pgRouting 2.3.1 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.3.1 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.3.1%22+is%3Aclosed>`_ on Github.
 
@@ -64,14 +107,12 @@ To see the issues closed by this release see the `Git closed issues for 2.3.1 <h
 .. _changelog_2_3_0:
 
 pgRouting 2.3.0 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
-To see the issues closed by this release see the `Git closed issues for 2.3.0 <https://github.com/pgRouting/pgrouting/issues?q=is%3Aissue+milestone%3A%22Release+2.3.0%22+is%3Aclosed>`_ on Github.
+To see the issues closed by this release see the `Git closed issues for 2.3.0 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.3.0%22+is%3Aclosed>`_ on Github.
 
 .. rubric:: New Signatures
 
-Indentifiers can be `ANY-INTEGER` and costs can be `ANY-NUMERICAL`
-
 * pgr_TSP
 * pgr_aStar
 
@@ -84,11 +125,23 @@ Indentifiers can be `ANY-INTEGER` and costs can be `ANY-NUMERICAL`
 
 * pgr_dijkstraCostMatrix
 * pgr_withPointsCostMatrix
-* pgr_maxFlowPushRelabel
-* pgr_maxFlowEdmondsKarp
-* pgr_maxFlowBoykovKolmogorov 
+* pgr_maxFlowPushRelabel(one to one)
+* pgr_maxFlowPushRelabel(one to many)
+* pgr_maxFlowPushRelabel(many to one)
+* pgr_maxFlowPushRelabel(many to many)
+* pgr_maxFlowEdmondsKarp(one to one)
+* pgr_maxFlowEdmondsKarp(one to many)
+* pgr_maxFlowEdmondsKarp(many to one)
+* pgr_maxFlowEdmondsKarp(many to many)
+* pgr_maxFlowBoykovKolmogorov (one to one)
+* pgr_maxFlowBoykovKolmogorov (one to many)
+* pgr_maxFlowBoykovKolmogorov (many to one)
+* pgr_maxFlowBoykovKolmogorov (many to many)
 * pgr_maximumCardinalityMatching
-* pgr_edgeDisjointPaths
+* pgr_edgeDisjointPaths(one to one)
+* pgr_edgeDisjointPaths(one to many)
+* pgr_edgeDisjointPaths(many to one)
+* pgr_edgeDisjointPaths(many to many)
 * pgr_contractGraph
 
 
@@ -110,9 +163,9 @@ Indentifiers can be `ANY-INTEGER` and costs can be `ANY-NUMERICAL`
 .. _changelog_2_2_4:
 
 pgRouting 2.2.4 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
-To see the issues closed by this release see the `Git closed issues for 2.2.4 <https://github.com/pgRouting/pgrouting/issues?q=is%3Aissue+milestone%3A%22Release+2.2.4%22+is%3Aclosed>`_ on Github.
+To see the issues closed by this release see the `Git closed issues for 2.2.4 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.2.4%22+is%3Aclosed>`_ on Github.
 
 .. rubric:: Bug Fixes
 
@@ -123,7 +176,7 @@ To see the issues closed by this release see the `Git closed issues for 2.2.4 <h
 .. _changelog_2_2_3:
 
 pgRouting 2.2.3 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.2.3 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.2.3%22+is%3Aclosed>`_ on Github.
 
@@ -134,7 +187,7 @@ To see the issues closed by this release see the `Git closed issues for 2.2.3 <h
 .. _changelog_2_2_2:
 
 pgRouting 2.2.2 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.2.2 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.2.2%22+is%3Aclosed>`_ on Github.
 
@@ -146,7 +199,7 @@ To see the issues closed by this release see the `Git closed issues for 2.2.2 <h
 .. _changelog_2_2_1:
 
 pgRouting 2.2.1 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.2.1 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A2.2.1+is%3Aclosed>`_ on Github.
 
@@ -159,9 +212,9 @@ To see the issues closed by this release see the `Git closed issues for 2.2.1 <h
 .. _changelog_2_2_0:
 
 pgRouting 2.2.0 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
-To see the issues closed by this release see the `Git closed issues for 2.2.0 <https://github.com/pgRouting/pgrouting/issues?utf8=%E2%9C%93&q=is%3Aissue+milestone%3A%22Release+2.2.0%22+is%3Aclosed>`_ on Github.
+To see the issues closed by this release see the `Git closed issues for 2.2.0 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.2.0%22+is%3Aclosed>`_ on Github.
 
 
 .. rubric:: Improvements
@@ -179,13 +232,23 @@ To see the issues closed by this release see the `Git closed issues for 2.2.0 <h
 
 - pgr_floydWarshall
 - pgr_Johnson
-- pgr_DijkstraCost
+- pgr_dijkstraCost(one to one)
+- pgr_dijkstraCost(one to many)
+- pgr_dijkstraCost(many to one)
+- pgr_dijkstraCost(many to many)
 
 .. rubric:: Proposed functionality
 
-- pgr_withPoints
-- pgr_withPointsCost
-- pgr_withPointsDD
+- pgr_withPoints(one to one)
+- pgr_withPoints(one to many)
+- pgr_withPoints(many to one)
+- pgr_withPoints(many to many)
+- pgr_withPointsCost(one to one)
+- pgr_withPointsCost(one to many)
+- pgr_withPointsCost(many to one)
+- pgr_withPointsCost(many to many)
+- pgr_withPointsDD(single vertex)
+- pgr_withPointsDD(multiple vertices)
 - pgr_withPointsKSP
 - pgr_dijkstraVia
 
@@ -197,23 +260,34 @@ To see the issues closed by this release see the `Git closed issues for 2.2.0 <h
 - pgr_kDijkstraCost use pgr_dijkstraCost instead
 - pgr_kDijkstraPath use pgr_dijkstra instead
 
+.. rubric:: Renamed and deprecated function
+
+- pgr_makeDistanceMatrix renamed to _pgr_makeDistanceMatrix
+
 
 .. _changelog_2_1_0:
 
 pgRouting 2.1.0 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.1.0 <https://github.com/pgRouting/pgrouting/issues?q=is%3Aissue+milestone%3A%22Release+2.1.0%22+is%3Aclosed>`_ on Github.
 
+.. rubric:: New Signatures
+
+- pgr_dijkstra(one to many)
+- pgr_dijkstra(many to one)
+- pgr_dijkstra(many to many)
+- pgr_drivingDistance(multiple vertices)
+
 .. rubric:: Refactored
 
-- pgr_dijkstra
+- pgr_dijkstra(one to one)
 - pgr_ksp
-- pgr_drivingDistance
+- pgr_drivingDistance(single vertex)
 
 .. rubric:: Improvements
 
-- Alphashape function now can generate better (multi)polygon with holes and alpha parameter.
+- pgr_alphaShape function now can generate better (multi)polygon with holes and alpha parameter.
 
 .. rubric:: Proposed functionality
 
@@ -230,6 +304,19 @@ To see the issues closed by this release see the `Git closed issues for 2.1.0 <h
 - Added proposed functions from GSoc Projects:
 
   - pgr_vrppdtw
+  - pgr_vrponedepot
+
+.. rubric:: Deprecated functions
+
+- pgr_getColumnName
+- pgr_getTableName
+- pgr_isColumnCndexed
+- pgr_isColumnInTable
+- pgr_quote_ident
+- pgr_versionless
+- pgr_startPoint
+- pgr_endPoint
+- pgr_pointToId
 
 .. rubric:: No longer supported
 
@@ -262,7 +349,7 @@ To see the issues closed by this release see the `Git closed issues for 2.1.0 <h
 .. _changelog_2_0_1:
 
 pgRouting 2.0.1 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 Minor bug fixes.
 
@@ -274,7 +361,7 @@ Minor bug fixes.
 .. _changelog_2_0_0:
 
 pgRouting 2.0.0 Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 2.0.0 <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+2.0.0%22+is%3Aclosed>`_ on Github.
 
@@ -284,7 +371,7 @@ The main Goals for this release are:
 * Major restructuring of pgRouting.
 * Standardiziation of the function naming
 * Prepararation of the project for future development.
- 
+
 As a result of this effort:
 
 * pgRouting has a simplified structure
@@ -318,45 +405,47 @@ As a result of this effort:
 * Support for ``st_`` PostGIS function prefix
 * Added ``pgr_`` prefix to functions and types
 * Better documentation: http://docs.pgrouting.org
+* shooting_star is discontinued
+
 
 
 .. _changelog_1_x:
 
 pgRouting 1.x Release Notes
-===============================================================================
+-------------------------------------------------------------------------------
 
 To see the issues closed by this release see the `Git closed issues for 1.x <https://github.com/pgRouting/pgrouting/issues?q=milestone%3A%22Release+1.x%22+is%3Aclosed>`_ on Github.
 The following release notes have been copied from the previous ``RELEASE_NOTES`` file and are kept as a reference.
 
 
 Changes for release 1.05
--------------------------------------------------------------------------------
+...............................................................................
 
 * Bugfixes
 
 
 Changes for release 1.03
--------------------------------------------------------------------------------
+...............................................................................
 
 * Much faster topology creation
 * Bugfixes
 
 
 Changes for release 1.02
--------------------------------------------------------------------------------
+...............................................................................
 
 * Shooting* bugfixes
 * Compilation problems solved
 
 
 Changes for release 1.01
--------------------------------------------------------------------------------
+...............................................................................
 
 * Shooting* bugfixes
 
 
 Changes for release 1.0
--------------------------------------------------------------------------------
+...............................................................................
 
 * Core and extra functions are separated
 * Cmake build process
@@ -364,28 +453,28 @@ Changes for release 1.0
 
 
 Changes for release 1.0.0b
--------------------------------------------------------------------------------
+...............................................................................
 
 * Additional SQL file with more simple names for wrapper functions
 * Bugfixes
 
 
 Changes for release 1.0.0a
--------------------------------------------------------------------------------
+...............................................................................
 
 * Shooting* shortest path algorithm for real road networks
 * Several SQL bugs were fixed
 
 
 Changes for release 0.9.9
--------------------------------------------------------------------------------
+...............................................................................
 
 * PostgreSQL 8.2 support
 * Shortest path functions return empty result if they couldn’t find any path
 
 
 Changes for release 0.9.8
--------------------------------------------------------------------------------
+...............................................................................
 
 * Renumbering scheme was added to shortest path functions
 * Directed shortest path functions were added
diff --git a/doc/src/routingFunctions.rst b/doc/src/routingFunctions.rst
new file mode 100644
index 0000000..fd4b2b6
--- /dev/null
+++ b/doc/src/routingFunctions.rst
@@ -0,0 +1,67 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+
+.. _routing_functions:
+
+*******************************************************************************
+Routing Functions
+*******************************************************************************
+
+..
+    from-here
+
+
+:ref:`all_pairs`
+
+- :ref:`pgr_floydWarshall` - Floyd-Warshall's Algorithm
+- :ref:`pgr_johnson`- Johnson’s Algorithm
+
+:ref:`pgr_astar` - Shortest Path A*
+
+:ref:`pgr_bdAstar<bd_astar>` - Bi-directional A* Shortest Path
+
+:ref:`pgr_bdDijkstra` - Bi-directional Dijkstra Shortest Path
+
+
+:ref:`dijkstra`
+
+.. include:: dijkstra-family.rst
+   :start-after: index from here
+   :end-before: index to here
+
+:ref:`pgr_ksp` - K-Shortest Path
+
+:ref:`pgr_trsp<trsp>` - Turn Restriction Shortest Path (TRSP)
+
+:ref:`tsp`
+
+.. include:: TSP-family.rst
+   :start-after: index from here
+   :end-before: index to here
+
+:ref:`drivingDistance`
+
+.. include:: drivingDistance-category.rst
+   :start-after: index from here
+   :end-before: index to here
+
+..  to-here
+
+.. toctree::
+    :hidden:
+
+    allpairs-family
+    pgr_bdAstar
+    pgr_bdDijkstra
+    dijkstra-family
+    pgr_KSP
+    pgr_trsp
+    TSP-family
+    drivingDistance-category
diff --git a/doc/src/developer/sampledata.rst b/doc/src/sampledata.rst
similarity index 85%
rename from doc/src/developer/sampledata.rst
rename to doc/src/sampledata.rst
index 2c143a8..c7733d0 100644
--- a/doc/src/developer/sampledata.rst
+++ b/doc/src/sampledata.rst
@@ -18,14 +18,14 @@ To be able to execute the sample queries, run the following SQL commands to crea
 
 .. rubric:: Create table
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --EDGE TABLE CREATE
    :end-before: --EDGE TABLE ADD DATA
 
 
 .. rubric:: Insert data
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --EDGE TABLE ADD DATA
    :end-before: --EDGE TABLE TOPOLOGY
 
@@ -34,7 +34,7 @@ To be able to execute the sample queries, run the following SQL commands to crea
 
 - Before you test a routing function use this query to create a topology (fills the ``source`` and ``target`` columns).
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --EDGE TABLE TOPOLOGY
    :end-before: --POINTS CREATE
 
@@ -43,7 +43,7 @@ To be able to execute the sample queries, run the following SQL commands to crea
 - When points outside of the graph.
 - Used with the :ref:`withPoints` functions.
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --POINTS CREATE
    :end-before: --RESTRICTIONS CREATE
 
@@ -51,7 +51,7 @@ To be able to execute the sample queries, run the following SQL commands to crea
 
 - Used with the :ref:`trsp` functions.
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --RESTRICTIONS CREATE
    :end-before: --RESTRICTIONS END
 
@@ -59,7 +59,7 @@ To be able to execute the sample queries, run the following SQL commands to crea
 
 - Used with the :ref:`maxFlow` functions.
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --RESTRICTIONS END
    :end-before: --CATEGORIES END
 
@@ -67,7 +67,7 @@ To be able to execute the sample queries, run the following SQL commands to crea
 
 - Used in some deprecated signatures or deprecated functions.
 
-.. literalinclude:: ../../../tools/testers/sampledata.sql
+.. literalinclude:: ../../tools/testers/sampledata.sql
    :start-after: --CATEGORIES END
    :end-before: --VERTEX TABLE END
 
@@ -80,7 +80,7 @@ Images
 * Points are outside the graph.
 * Click on the graph to enlarge.
 
-.. note:: On all graphs, 
+.. note:: On all graphs,
 
 .. rubric:: Network for queries marked as ``directed`` and ``cost`` and ``reverse_cost`` columns are used:
 
@@ -122,7 +122,7 @@ When working with city networks, this is recommended for point of view of pedest
 
 .. figure:: images/Fig4-costUndirected.png
    :scale: 20%
-   
+
    **Graph 4: Undirected, with cost**
 
 
@@ -131,6 +131,6 @@ When working with city networks, this is recommended for point of view of pedest
 Pick & Deliver Data
 .........................
 
-.. literalinclude:: ../../../src/pickDeliver/test/pickDeliver.data
+.. literalinclude:: ../../src/pickDeliver/test/pickDeliver.data
 
 
diff --git a/doc/src/introduction/support.rst b/doc/src/support.rst
similarity index 95%
rename from doc/src/introduction/support.rst
rename to doc/src/support.rst
index cd1da04..025343b 100644
--- a/doc/src/introduction/support.rst
+++ b/doc/src/support.rst
@@ -1,9 +1,9 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
 
-    This documentation is licensed under a Creative Commons Attribution-Share  
+    This documentation is licensed under a Creative Commons Attribution-Share
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
@@ -22,16 +22,16 @@ Bugs are reported and managed in an `issue tracker <https://github.com/pgrouting
 
 1. Search the tickets to see if your problem has already been reported. If so, add any extra context you might have found, or at least indicate that you too are having the problem. This will help us prioritize common issues.
 2. If your problem is unreported, create a `new issue <https://github.com/pgRouting/pgrouting/issues/new>`_ for it.
-3. In your report include explicit instructions to replicate your issue. The best tickets include the exact SQL necessary to replicate a problem. 
+3. In your report include explicit instructions to replicate your issue. The best tickets include the exact SQL necessary to replicate a problem.
 4. If you can test older versions of PostGIS for your problem, please do. On your ticket, note the earliest version the problem appears.
 5. For the versions where you can replicate the problem, note the operating system and version of pgRouting, PostGIS and PostgreSQL.
-6. It is recommended to use the following wrapper on the problem to pin point the step that is causing the problem. 
+6. It is recommended to use the following wrapper on the problem to pin point the step that is causing the problem.
 
 .. code-block:: sql
 
-    SET client_min_messages TO debug; 
+    SET client_min_messages TO debug;
       <your code>
-    SET client_min_messages TO notice; 
+    SET client_min_messages TO notice;
 
 
 
diff --git a/doc/src/tutorial/analytics.rst b/doc/src/tutorial/analytics.rst
deleted file mode 100644
index 97ff85e..0000000
--- a/doc/src/tutorial/analytics.rst
+++ /dev/null
@@ -1,138 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _analytics:
-
-Graph Analytics
-===============================================================================
-
-:Author: Stephen Woodbridge <woodbri at swoodbridge.com>
-:Copyright: Stephen Woodbridge. The source code is released under the MIT-X license.
-
-
-Overview
--------------------------------------------------------------------------------
-
-It is common to find problems with graphs that have not been constructed fully noded or in graphs with z-levels at intersection that have been entered incorrectly. An other problem is one way streets that have been entered in the wrong direction. We can not detect errors with respect to "ground" truth, but we can look for inconsistencies and some anomalies in a graph and report them for additional inspections.
-
-We do not current have any visualization tools for these problems, but I have used mapserver to render the graph and highlight potential problem areas. Someone familiar with graphviz might contribute tools for generating images with that.
-
-
-Analyze a Graph
--------------------------------------------------------------------------------
-
-With :ref:`pgr_analyze_graph` the graph can be checked for errors. For example for table "mytab" that has "mytab_vertices_pgr" as the vertices table:
-
-.. code-block:: sql
-
-    SELECT pgr_analyzeGraph('mytab', 0.000002);
-    NOTICE:  Performing checks, pelase wait...
-    NOTICE:  Analyzing for dead ends. Please wait...
-    NOTICE:  Analyzing for gaps. Please wait...
-    NOTICE:  Analyzing for isolated edges. Please wait...
-    NOTICE:  Analyzing for ring geometries. Please wait...
-    NOTICE:  Analyzing for intersections. Please wait...
-    NOTICE:              ANALYSIS RESULTS FOR SELECTED EDGES:
-    NOTICE:                    Isolated segments: 158
-    NOTICE:                            Dead ends: 20028
-    NOTICE:  Potential gaps found near dead ends: 527
-    NOTICE:               Intersections detected: 2560
-    NOTICE:                      Ring geometries: 0
-    pgr_analyzeGraph 
-    ----------
-       OK
-    (1 row)
-
-
-In the vertices table "mytab_vertices_pgr":
-
-  - Deadends are identified by ``cnt=1`` 
-  - Potencial gap problems are identified with ``chk=1``.
-
-.. code-block:: sql
-
-    SELECT count(*) as deadends  FROM mytab_vertices_pgr WHERE cnt = 1;
-    deadends 
-    ----------
-        20028
-     (1 row)
-
-    SELECT count(*) as gaps  FROM mytab_vertices_pgr WHERE chk = 1;
-     gaps 
-     -----
-       527
-     (1 row)
-     
-
-
-For isolated road segments, for example, a segment where both ends are deadends. you can find these with the following query:
-
-.. code-block:: sql
-
-    SELECT *
-        FROM mytab a, mytab_vertices_pgr b, mytab_vertices_pgr c
-        WHERE a.source=b.id AND b.cnt=1 AND a.target=c.id AND c.cnt=1;
-
-
-If you want to visualize these on a graphic image, then you can use something like mapserver to render the edges and the vertices and style based on ``cnt`` or if they are isolated, etc. You can also do this with a tool like graphviz, or geoserver or other similar tools.
-
-
-Analyze One Way Streets
--------------------------------------------------------------------------------
-
-:ref:`pgr_analyze_oneway` analyzes one way streets in a graph and identifies any flipped segments. Basically if you count the edges coming into a node and the edges exiting a node the number has to be greater than one.
-
-This query will add two columns to the vertices_tmp table ``ein int`` and ``eout int`` and populate it with the appropriate counts. After running this on a graph you can identify nodes with potential problems with the following query.
-
-
-The rules are defined as an array of text strings that if match the ``col`` value would be counted as true for the source or target in or out condition.
-
-
-Example
--------------------------------------------------------------------------------
-
-Lets assume we have a table "st" of edges and a column "one_way" that might have values like:
-
-   * 'FT'    - oneway from the source to the target node.
-   * 'TF'    - oneway from the target to the source node.
-   * 'B'     - two way street.
-   * ''      - empty field, assume twoway.
-   * <NULL>  - NULL field, use two_way_if_null flag.
-
-Then we could form the following query to analyze the oneway streets for errors.
-
-.. code-block:: sql
-
-    SELECT pgr_analyzeOneway('mytab',
-                ARRAY['', 'B', 'TF'],
-                ARRAY['', 'B', 'FT'],
-                ARRAY['', 'B', 'FT'],
-                ARRAY['', 'B', 'TF'],
-                );
-
-    -- now we can see the problem nodes
-    SELECT * FROM mytab_vertices_pgr WHERE ein=0 OR eout=0;
-
-    -- and the problem edges connected to those nodes
-    SELECT gid FROM mytab a, mytab_vertices_pgr b WHERE a.source=b.id AND ein=0 OR eout=0
-    UNION
-    SELECT gid FROM mytab a, mytab_vertices_pgr b WHERE a.target=b.id AND ein=0 OR eout=0;
-
-Typically these problems are generated by a break in the network, the one way direction set wrong, maybe an error related to z-levels or a network that is not properly noded.
-
-The above tools do not detect all network issues, but they will identify some common problems. There are other problems that are hard to detect because they are more global in nature like multiple disconnected networks. Think of an island with a road network that is not connected to the mainland network because the bridge or ferry routes are missing.
-
-
-See Also
-----------------------------------------------------------------------------
-
-* :ref:`pgr_analyze_graph`
-* :ref:`pgr_analyze_oneway`
-* :ref:`pgr_node_network`
-
diff --git a/doc/src/tutorial/custom_query.rst b/doc/src/tutorial/custom_query.rst
deleted file mode 100644
index 559f5d9..0000000
--- a/doc/src/tutorial/custom_query.rst
+++ /dev/null
@@ -1,180 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _custom_query:
-
-Dictionary of columns & Custom Query
-===============================================================================
-
-:path: a sequence of vertices/edges from A to B.
-:route: a sequence of paths. 
-:ANY-INTEGER: Any of the following types: SMALLINT, INTEGER, BIGINT
-:ANY-NUMERICAL: Any of the following types: SMALLINT, INTEGER, BIGINT, REAL, FLOAT
-
-
-
-Custom Queries
-===============================================================================
-
-
-
-Edges queries
--------------------------------------------------------------------------------
-
-
-Columns of the edges_sql queries
-...............................................................................
-
-
-Depending on the function used the following columns are expected
-
-================  ===================   ======== =================================================
-Column            Type                  Default  Description
-================  ===================   ======== =================================================
-**id**            ``ANY-INTEGER``                Identifier of the edge.
-**source**        ``ANY-INTEGER``                Identifier of the first end point vertex of the edge.
-**target**        ``ANY-INTEGER``                Identifier of the second end point vertex of the edge.
-**cost**          ``ANY-NUMERICAL``              Weight of the edge  `(source, target)`
-                                                   - When negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
-**reverse_cost**  ``ANY-NUMERICAL``       -1     Weight of the edge `(target, source)`,
-                                                   - When negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
-================  ===================   ======== =================================================
-
-
-Where:
-
-:ANY-INTEGER: SMALLINT, INTEGER, BIGINT
-:ANY-NUMERICAL: SMALLINT, INTEGER, BIGINT, REAL, FLOAT
-
-
-
-
-
-Description of the edges_sql query
--------------------------------------------------------------------------------
-
-:edges_sql: an SQL query, which should return a set of rows with the following columns:
-
-        :id: ``ANY-INTEGER`` identifier of the edge.
-        :source: ``ANY-INTEGER`` identifier of the first end point vertex of the edge.
-        :target: ``ANY-INTEGER`` identifier of the second end pont vertex of the edge.
-        :cost: ``ANY-NUMERICAL`` weight of the edge `(source, target)`, if negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
-        :reverse_cost: ``ANY-NUMERICAL`` (optional) weight of the edge `(target, source)`, if negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
-
-Where:
-
-:ANY-INTEGER: smallint, int, bigint
-:ANY-NUMERICAL: smallint, int, bigint, real, float
-
-
-Description of the parameters of the signatures
--------------------------------------------------------------------------------
-
-:edges_sql: ``TEXT`` SQL query as described above.
-:start_vid: ``BIGINT`` identifier of the starting vertex of the path.
-:start_vids: ``array[ANY-INTEGER]`` array of identifiers of starting vertices.
-:end_vid: ``BIGINT`` identifier of the ending vertex of the path.
-:end_vids: ``array[ANY-INTEGER]`` array of identifiers of ending vertices.
-:directed: ``boolean`` (optional). When ``false`` the graph is considered as Undirected. Default is ``true`` which considers the graph as Directed.
-
-
-Description of the return values
--------------------------------------------------------------------------------
-
-Returns set of ``(seq [, start_vid] [, end_vid] , node, edge, cost, agg_cost)``
-
-:seq: ``INTEGER``  is a sequential value starting from **1**.
-:route_seq: ``INTEGER``  relative position in the route. Has value **1** for the beginning of a route.
-:route_id: ``INTEGER`` id of the route.
-:path_seq: ``INTEGER``  relative position in the path. Has value **1** for the beginning of a path.
-:path_id: ``INTEGER`` id of the path.
-:start_vid: ``BIGINT`` id of the starting vertex. Used when multiple starting vetrices are in the query.
-:end_vid: ``BIGINT`` id of the ending vertex. Used when multiple ending vertices are in the query.
-:node: ``BIGINT`` id of the node in the path from start_vid to end_v.
-:edge: ``BIGINT`` id of the edge used to go from ``node`` to the next node in the path sequence. ``-1`` for the last node of the path.
-:cost: ``FLOAT`` cost to traverse from ``node`` using ``edge`` to the next node in the path sequence.
-:agg_cost:  ``FLOAT`` total cost from ``start_vid`` to ``node``.
-
-
-
-Descriptions for version 2.0 signatures
----------------------------------------
-
-In general, the routing algorithms need an SQL query that contain one or more of the following required columns with the preferred type:
-
-:id:	 int4
-:source: int4
-:target: int4
-:cost:	float8
-:reverse_cost: float8
-:x:     float8
-:y:     float8
-:x1:	float8
-:y1:	float8 
-:x2:	float8 
-:y2:	float8
-
-
-
-.. code-block:: sql
-
-	SELECT source, target, cost FROM edge_table;
-	SELECT id, source, target, cost FROM edge_table;
-	SELECT id, source, target, cost, x1, y1, x2, y2 ,reverse_cost FROM edge_table
-
-When the edge table has a different name to represent the required columns:
-
-.. code-block:: sql
-
-        SELECT src as source,  target, cost FROM othertable;
-        SELECT gid as id, src as source, target, cost FROM othertable;
-        SELECT gid as id, src as source, target, cost, fromX as x1, fromY as y1, toX as x2, toY as y2 ,Rcost as reverse_cost 
-	       FROM othertable;
-
-
-.. Topology functions
-
-The topology functions use the same names for ``id``, ``source`` and ``target`` columns of the edge table, The fowllowing parameters have as default value:
-
-:id:	 int4 Default ``id``
-:source: int4 Default ``source``
-:target: int4 Default ``target``
-:the_geom: text Default ``the_geom``
-:oneway: text Default ``oneway``
-:rows_where: text Default ``true`` to indicate all rows (this is not a column)
-
-The following parameters do not have a default value and when used they have to be inserted in strict order:
-
-:edge_table: text
-:tolerance: float8
-:s_in_rules: text[]
-:s_out_rules: text[]
-:t_in_rules: text[]
-:t_out_rules: text[]
-
-When the columns required have the default names this can be used (pgr_func is to represent a topology function)
-
-.. code-block:: sql
-
-        pgr_func('edge_table')        -- when tolerance is not required
-	pgr_func('edge_table',0.001)  -- when tolerance is required
-        -- s_in_rule, s_out_rule, st_in_rules, t_out_rules are required
-	SELECT pgr_analyzeOneway('edge_table', ARRAY['', 'B', 'TF'], ARRAY['', 'B', 'FT'], 
-					       ARRAY['', 'B', 'FT'], ARRAY['', 'B', 'TF']) 
-
-When the columns required do not have the default names its strongly recommended to use the *named notation*.
-
-.. code-block:: sql
-
-        pgr_func('othertable', id:='gid',source:='src',the_geom:='mygeom')     
-	pgr_func('othertable',0.001,the_geom:='mygeom',id:='gid',source:='src') 
-	SELECT pgr_analyzeOneway('othertable', ARRAY['', 'B', 'TF'], ARRAY['', 'B', 'FT'], 
-					       ARRAY['', 'B', 'FT'], ARRAY['', 'B', 'TF']
-                                 source:='src',oneway:='dir') 
-
diff --git a/doc/src/tutorial/index.rst b/doc/src/tutorial/index.rst
deleted file mode 100644
index 9d6fe27..0000000
--- a/doc/src/tutorial/index.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _tutorial1:
-
-Tutorial
-===============================================================================
-
-
-:ref:`Getting started <tutorial>` 
-
-  - How to create a database to use for our project
-  - How to load some data
-  - How to build a topology
-  - How to check your graph for errors
-  - How to compute a route
-  - How to use other tools to view your graph and route
-  - How to create a web app
-
-Advanced Topics
-
-  - :ref:`topology` for an overview of a topology for routing algorithms.  
-  - :ref:`analytics` for an overview of the analysis of a graph.
-  - :ref:`custom_query` that is used in the routing algorithms.
-  - :ref:`performance` to improve your performance.
-
-.. toctree:: 
-   :hidden: 
-         
-    Getting started        <tutorial>
-
-.. toctree:: 
-   :hidden: 
-         
-    An overview of a topology for routing algorithms.        <topology>
-    An overview of the analysis of a graph.        <analytics>
-    How to write a query for the routing algorithms        <custom_query>
-    How to handle performance        <performance>
-
diff --git a/doc/src/tutorial/performance.rst b/doc/src/tutorial/performance.rst
deleted file mode 100644
index 391c971..0000000
--- a/doc/src/tutorial/performance.rst
+++ /dev/null
@@ -1,56 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _performance:
-
-Performance Tips
-===============================================================================
-
-For the Routing functions:
---------------------------
-
-.. Note:: To get faster results bound your queries to the area of interest of routing to have, for example, no more than one million rows.
-
-
-For the topology functions:
----------------------------
-When "you know" that you are going to remove a set of edges from the edges table, and without those edges you are going to use a routing function you can do the following:
-
-Analize the new topology based on the actual topology:
-	
-.. code-block:: sql
-
-	pgr_analyzegraph('edge_table',rows_where:='id < 17');
-
-Or create a new topology if the change is permanent:
-	
-.. code-block:: sql
-
-	pgr_createTopology('edge_table',rows_where:='id < 17');
-	pgr_analyzegraph('edge_table',rows_where:='id < 17');
-
-Use an SQL that "removes" the edges in the routing function
-	
-.. code-block:: sql
-
-	SELECT id, source, target from edge_table WHERE id < 17 
-
-When "you know" that the route will not go out of a particular area, to speed up the process you can use a more complex SQL query like
-	
-.. code-block:: sql
-
-	SELECT id, source, target from edge_table WHERE
-        	id < 17 and
-        	the_geom  && (select st_buffer(the_geom,1) as myarea FROM  edge_table where id=5)
-
-
-Note that the  same condition ``id < 17`` is used in all cases.
-
-
-
diff --git a/doc/src/tutorial/topology.rst b/doc/src/tutorial/topology.rst
deleted file mode 100644
index 86cbe16..0000000
--- a/doc/src/tutorial/topology.rst
+++ /dev/null
@@ -1,121 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _topology:
-
-Routing Topology
-===============================================================================
-
-:Author: Stephen Woodbridge <woodbri at swoodbridge.com>
-:Copyright: Stephen Woodbridge. The source code is released under the MIT-X license.
-
-
-Overview
--------------------------------------------------------------------------------
-
-Typically when GIS files are loaded into the data database for use with pgRouting they do not have topology information associated with them. To create a useful topology the data needs to be "noded". This means that where two or more roads form an intersection there it needs to be a node at the intersection and all the road segments need to be broken at the intersection, assuming that you can navigate from any of these segments to any other segment via that intersection.
-
-You can use the :ref:`graph analysis functions <analytics>` to help you see where you might have topology problems in your data. If you need to node your data, we also have a function :ref:`pgr_nodeNetwork() <pgr_node_network>` that might work for you. This function splits ALL crossing segments and nodes them. There are some cases where this might NOT be the right thing to do.
-
-For example, when you have an overpass and underpass intersection, you do not want these noded, but pgr_nodeNetwork does not know that is the case and will node them which is not good because then the router will be able to turn off the overpass onto the underpass like it was a flat 2D intersection. To deal with this problem some data sets use z-levels at these types of intersections and other data might not node these intersection which would be ok.
-
-For those cases where topology needs to be added the following functions may be useful. One way to prep the data for pgRouting is to add the following columns to your table and then populate them as appropriate. This example makes a lot of assumption like that you original data tables already has certain columns in it like ``one_way``, ``fcc``, and possibly others and that they contain specific data values. This is only to give you an idea of what you can do with your data.
-
-.. code-block:: sql
-
-    ALTER TABLE edge_table
-        ADD COLUMN source integer,
-        ADD COLUMN target integer,
-        ADD COLUMN cost_len double precision,
-        ADD COLUMN cost_time double precision,
-        ADD COLUMN rcost_len double precision,
-        ADD COLUMN rcost_time double precision,
-        ADD COLUMN x1 double precision,
-        ADD COLUMN y1 double precision,
-        ADD COLUMN x2 double precision,
-        ADD COLUMN y2 double precision,
-        ADD COLUMN to_cost double precision,
-        ADD COLUMN rule text,
-        ADD COLUMN isolated integer;
-
-    SELECT pgr_createTopology('edge_table', 0.000001, 'the_geom', 'id');
-
-The function :ref:`pgr_createTopology() <pgr_create_topology>` will create the ``vertices_tmp`` table and populate the ``source`` and ``target`` columns. The following example populated the remaining columns. In this example, the ``fcc`` column contains feature class code and the ``CASE`` statements converts it to an average speed.
-
-.. code-block:: sql
-
-    UPDATE edge_table SET x1 = st_x(st_startpoint(the_geom)),
-                          y1 = st_y(st_startpoint(the_geom)),
-                          x2 = st_x(st_endpoint(the_geom)),
-                          y2 = st_y(st_endpoint(the_geom)),
-      cost_len  = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]'),
-      rcost_len = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]'),
-      len_km = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]')/1000.0,
-      len_miles = st_length_spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.25728]')
-                  / 1000.0 * 0.6213712,
-      speed_mph = CASE WHEN fcc='A10' THEN 65
-                       WHEN fcc='A15' THEN 65
-                       WHEN fcc='A20' THEN 55
-                       WHEN fcc='A25' THEN 55
-                       WHEN fcc='A30' THEN 45
-                       WHEN fcc='A35' THEN 45
-                       WHEN fcc='A40' THEN 35
-                       WHEN fcc='A45' THEN 35
-                       WHEN fcc='A50' THEN 25
-                       WHEN fcc='A60' THEN 25
-                       WHEN fcc='A61' THEN 25
-                       WHEN fcc='A62' THEN 25
-                       WHEN fcc='A64' THEN 25
-                       WHEN fcc='A70' THEN 15
-                       WHEN fcc='A69' THEN 10
-                       ELSE null END,
-      speed_kmh = CASE WHEN fcc='A10' THEN 104
-                       WHEN fcc='A15' THEN 104
-                       WHEN fcc='A20' THEN 88
-                       WHEN fcc='A25' THEN 88
-                       WHEN fcc='A30' THEN 72
-                       WHEN fcc='A35' THEN 72
-                       WHEN fcc='A40' THEN 56
-                       WHEN fcc='A45' THEN 56
-                       WHEN fcc='A50' THEN 40
-                       WHEN fcc='A60' THEN 50
-                       WHEN fcc='A61' THEN 40
-                       WHEN fcc='A62' THEN 40
-                       WHEN fcc='A64' THEN 40
-                       WHEN fcc='A70' THEN 25
-                       WHEN fcc='A69' THEN 15
-                       ELSE null END;
-
-    -- UPDATE the cost information based on oneway streets
-
-    UPDATE edge_table SET
-        cost_time = CASE
-            WHEN one_way='TF' THEN 10000.0
-            ELSE cost_len/1000.0/speed_kmh::numeric*3600.0
-            END,
-        rcost_time = CASE
-            WHEN one_way='FT' THEN 10000.0
-            ELSE cost_len/1000.0/speed_kmh::numeric*3600.0
-            END;
-
-    -- clean up the database because we have updated a lot of records
-
-    VACUUM ANALYZE VERBOSE edge_table;
-
-
-Now your database should be ready to use any (most?) of the pgRouting algorithms.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`pgr_create_topology`
-* :ref:`pgr_node_network`
-* :ref:`pgr_point_to_id`
-
diff --git a/doc/src/tutorial/tutorial.rst b/doc/src/tutorial/tutorial.rst
deleted file mode 100644
index a496fed..0000000
--- a/doc/src/tutorial/tutorial.rst
+++ /dev/null
@@ -1,131 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share  
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _tutorial:
-
-Getting Started
-===============================================================================
-
-This is a simple guide to walk you through the steps of getting started
-with pgRouting. In this guide we will cover:
-
-    * How to create a database to use for our project
-    * How to load some data
-    * How to build a topology
-    * How to check your graph for errors
-    * How to compute a route
-    * How to use other tools to view your graph and route
-    * How to create a web app
-
-How to create a database
--------------------------------------------------------------------------------
-
-The first thing we need to do is create a database and load pgrouting in 
-the database. Typically you will create a database for each project. Once 
-you have a database to work in, your can load your data and build your
-application in that database. This makes it easy to move your project
-later if you want to to say a production server.
-
-For Postgresql 9.1 and later versions
-
-.. code-block:: bash
-
-	createdb mydatabase
-	psql mydatabase -c "create extension postgis"
-	psql mydatabase -c "create extension pgrouting"
-
-
-How to load some data
--------------------------------------------------------------------------------
-
-How you load your data will depend in what form it comes it. There are
-various OpenSource tools that can help you, like:
-
-:osm2pgrouting-alpha: - this is a tool for loading OSM data into postgresql with pgRouting requirements
-:shp2pgsql: - this is the postgresql shapefile loader
-:ogr2ogr: - this is a vector data conversion utility
-:osm2pgsql: - this is a tool for loading OSM data into postgresql
-
-So these tools and probably others will allow you to read vector data so that 
-you may then load that data into your database as a table of some kind. At this
-point you need to know a little about your data structure and content. One easy
-way to browse your new data table is with pgAdmin3 or phpPgAdmin.
-
-
-How to build a topology
--------------------------------------------------------------------------------
-
-Next we need to build a topology for our street data. What this means is that
-for any given edge in your street data the ends of that edge will be connected
-to a unique node and to other edges that are also connected to that same unique
-node. Once all the edges are connected to nodes we have a graph that can be
-used for routing with pgrouting. We provide a tool that will help with this:
-
-.. note:: this step is not needed if data is loaded with `osm2pgrouting-alpha`
-
-.. code-block:: sql
-
-    select pgr_createTopology('myroads', 0.000001);
-
-See :ref:`pgr_create_topology` for more information.
-
-
-How to check your graph for errors
--------------------------------------------------------------------------------
-
-There are lots of possible sources for errors in a graph. The data that you
-started with may not have been designed with routing in mind. A graph has some
-very specific requirments. One is that it is *NODED*, this means that except
-for some very specific use cases, each road segment starts and ends at a node
-and that in general is does not cross another road segment that it should be
-connected to.
-
-There can be other errors like the direction of a one-way street being entered
-in the wrong direction. We do not have tools to search for all possible errors
-but we have some basic tools that might help.
-
-.. code-block:: sql
-
-    select pgr_analyzegraph('myroads', 0.000001);
-    select pgr_analyzeoneway('myroads',  s_in_rules, s_out_rules,
-                                         t_in_rules, t_out_rules
-                                         direction)
-
-See :ref:`analytics` for more information.
-
-If your data needs to be *NODED*, we have a tool that can help for that also.
-
-See :ref:`pgr_node_network` for more information.
-
-
-How to compute a route
--------------------------------------------------------------------------------
-
-Once you have all the preparation work done above, computing a route is fairly easy.
-We have a lot of different algorithms that can work with your prepared road
-network. The general form of a route query is:
-
-.. code-block:: sql
-
-    select pgr_<algorithm>(<SQL for edges>, start, end, <additional options>)
-
-As you can see this is fairly straight forward and you can look and the 
-specific algorithms for the details of the signatures and how to use them.
-These results have information like edge id and/or the
-node id along with the cost or geometry for the step in the path from *start*
-to *end*. Using the ids you can join these result back to your edge table
-to get more information about each step in the path.
-
-
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/doc/src/recipes/test/example_recipe.result b/doc/test/example_recipe.result
similarity index 100%
rename from doc/src/recipes/test/example_recipe.result
rename to doc/test/example_recipe.result
diff --git a/doc/src/recipes/test/example_recipe.test.sql b/doc/test/example_recipe.test.sql
similarity index 95%
rename from doc/src/recipes/test/example_recipe.test.sql
rename to doc/test/example_recipe.test.sql
index eeba9f0..5fdaf1f 100644
--- a/doc/src/recipes/test/example_recipe.test.sql
+++ b/doc/test/example_recipe.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 /*.. 
    ****************************************************************************
     pgRouting Manual
@@ -21,11 +20,11 @@ BEGIN;
 --The purpose of this recipe is to compare a not nodded network with a nodded network.
 
 --.. code-block:: sql
-set client_min_messages = warning;
 
+
+SET client_min_messages TO WARNING;
 	SELECT pgr_createTopology('edge_table', 0.001);
 	SELECT pgr_analyzegraph('edge_table', 0.001);
 	SELECT pgr_nodeNetwork('edge_table', 0.001);
 	SELECT pgr_createTopology('edge_table_noded', 0.001);
 	SELECT pgr_analyzegraph('edge_table_noded', 0.001); 
-ROLLBACK;
diff --git a/doc/src/recipes/test/parallel_handling.result b/doc/test/parallel_handling.result
similarity index 100%
rename from doc/src/recipes/test/parallel_handling.result
rename to doc/test/parallel_handling.result
diff --git a/doc/src/recipes/test/parallel_handling.test.sql b/doc/test/parallel_handling.test.sql
similarity index 99%
rename from doc/src/recipes/test/parallel_handling.test.sql
rename to doc/test/parallel_handling.test.sql
index 006de02..5e6753a 100644
--- a/doc/src/recipes/test/parallel_handling.test.sql
+++ b/doc/test/parallel_handling.test.sql
@@ -1,5 +1,5 @@
-BEGIN;
-  SET client_min_messages = WARNING;
+SET client_min_messages = WARNING;
+
   drop table if exists parallel;
   CREATE TABLE parallel (
     id serial,
@@ -21,6 +21,8 @@ BEGIN;
   UPDATE parallel SET the_geom = ST_makeline(ARRAY[ST_point(1,1),ST_point(2,1),ST_point(2,3),ST_point(1,3)])
                                 WHERE id = 4;
   UPDATE parallel SET cost = ST_length(the_geom), reverse_cost = ST_length(the_geom);
+
+  SET client_min_messages = WARNING;
   SELECT pgr_createTopology('parallel',0.001);
 
 
@@ -121,4 +123,3 @@ BEGIN;
 
 
   select * from expand_parallel_edge_paths( 'paths' );
-ROLLBACK;
diff --git a/doc/test/test.conf b/doc/test/test.conf
index 790e81f..a918f4f 100644
--- a/doc/test/test.conf
+++ b/doc/test/test.conf
@@ -7,6 +7,8 @@
         'comment' => 'documentation SQL tests for any versions.',
         'data' => ['tsp.data'],
         'tests' => [qw( 
+            example_recipe
+            parallel_handling
             utilities-any
             )]
     },
diff --git a/doc/test/utilities-any.result b/doc/test/utilities-any.result
index f90b1af..197c4d5 100644
--- a/doc/test/utilities-any.result
+++ b/doc/test/utilities-any.result
@@ -1 +1 @@
-2.3.2
+2.4.0
diff --git a/doc/test/utilities-any.test.sql b/doc/test/utilities-any.test.sql
index 32455ae..99ad04b 100644
--- a/doc/test/utilities-any.test.sql
+++ b/doc/test/utilities-any.test.sql
@@ -1,8 +1,6 @@
-BEGIN;
 
 --------------------------------------------------------------------------------
 --                pgr_version
 --------------------------------------------------------------------------------
 -- SELECT pgr_version(); -- DON'T USE THIS IT CHANGES WITH EVERY COMMIT
 SELECT version FROM pgr_version(); -- This changes infrequently
-ROLLBACK;
diff --git a/doxygen/Doxyfile.in b/doxygen/Doxyfile.in
index 7149f56..c02b5ca 100644
--- a/doxygen/Doxyfile.in
+++ b/doxygen/Doxyfile.in
@@ -38,7 +38,7 @@ PROJECT_NAME           = "@PROJECT_NAME@"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = @PGROUTING_NUMBER@
+PROJECT_NUMBER         = "@PGROUTING_SHORT_VERSION@@PGROUTING_VERSION_DEV@"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
@@ -754,7 +754,7 @@ WARN_LOGFILE           = ./LOG
 # spaces.
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@/../src @CMAKE_CURRENT_SOURCE_DIR@/../doc
+INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@/../src @CMAKE_CURRENT_SOURCE_DIR@
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
diff --git a/src/contraction/src/contraction.dox b/doxygen/contraction.dox
similarity index 100%
rename from src/contraction/src/contraction.dox
rename to doxygen/contraction.dox
diff --git a/src/mainpage.dox b/doxygen/mainpage.dox
similarity index 100%
rename from src/mainpage.dox
rename to doxygen/mainpage.dox
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
deleted file mode 100644
index d7ec5e3..0000000
--- a/src/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-SET(PACKAGE_SQL_FILES "")
-SET(L_PACKAGE_SQL_FILES "")
-
-
-
-ADD_SUBDIRECTORY(apsp_johnson)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(apsp_warshall)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(astar)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(bd_dijkstra)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(bd_astar)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(common)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(dijkstra)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(kdijkstra)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(ksp)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(trsp)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(tsp)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(driving_distance)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(label_graph)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(vrp_basic)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(vrppdtw)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-ADD_SUBDIRECTORY(allpairs)
-LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-
-#ADD_SUBDIRECTORY(shooting_star)
-#LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-#ADD_SUBDIRECTORY(contraction)
-#LIST(APPEND L_PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}")
-
-# Make sure this is after all the ADD_SUBDIRECTORY
-SET(PACKAGE_SQL_FILES "${L_PACKAGE_SQL_FILES}" PARENT_SCOPE)
diff --git a/src/allpairs/doc/allpairs.rst b/src/allpairs/doc/allpairs-family.rst
similarity index 97%
rename from src/allpairs/doc/allpairs.rst
rename to src/allpairs/doc/allpairs-family.rst
index fa51059..d372724 100644
--- a/src/allpairs/doc/allpairs.rst
+++ b/src/allpairs/doc/allpairs-family.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -10,20 +10,23 @@
 .. _all_pairs:
 
 
-All pairs
+All Pairs - Family of Functions
 ===============================================================================
 
 The following functions work an all vertices pair combinations
 
+.. index from here
+
     - :ref:`pgr_floydWarshall` - Floyd-Warshall's algorithm.
     - :ref:`pgr_johnson` - Johnson's algorithm
 
-     
+.. index to here
+
 .. toctree::
     :hidden:
 
-    ./pgr_floydWarshall
-    ./pgr_johnson
+    pgr_floydWarshall
+    pgr_johnson
 
 
 Performance
@@ -81,10 +84,10 @@ The results of this tests are presented as:
 
 :SIZE: is the number of edges given as input.
 :EDGES: is the total number of records in the query.
-:DENSITY: is the density of the data :math:`\dfrac{E}{V \times (V-1)}`. 
+:DENSITY: is the density of the data :math:`\dfrac{E}{V \times (V-1)}`.
 :OUT ROWS: is the number of records returned by the queries.
 :Floyd-Warshall: is the average execution time in seconds of pgr_floydWarshall.
-:Johnson: is the average execution time in seconds of pgr_johnson.  
+:Johnson: is the average execution time in seconds of pgr_johnson.
 
 
 ====== ======  ========== ======== ============== =============
@@ -122,7 +125,7 @@ The tested edge query is:
 
 .. code-block:: none
 
-    WITH  
+    WITH
         buffer AS (SELECT ST_Buffer(ST_Centroid(ST_Extent(the_geom)), SIZE) AS geom FROM ways),
         bbox AS (SELECT ST_Envelope(ST_Extent(geom)) as box from buffer)
     SELECT gid as id, source, target, cost, reverse_cost FROM ways where the_geom && (SELECT box from bbox);
diff --git a/src/allpairs/doc/doc-floydWarshall.queries b/src/allpairs/doc/doc-floydWarshall.queries
index c127371..4d2f2b8 100644
--- a/src/allpairs/doc/doc-floydWarshall.queries
+++ b/src/allpairs/doc/doc-floydWarshall.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 -- q1
 SELECT * FROM pgr_floydWarshall(
     'SELECT id, source, target, cost FROM edge_table where id < 5'
@@ -24,3 +28,6 @@ SELECT * FROM pgr_floydWarshall(
          5 |       2 |        1
 (6 rows)
 
+-- q3
+ROLLBACK;
+ROLLBACK
diff --git a/src/allpairs/doc/doc-johnson.queries b/src/allpairs/doc/doc-johnson.queries
index 31ff135..5c9f684 100644
--- a/src/allpairs/doc/doc-johnson.queries
+++ b/src/allpairs/doc/doc-johnson.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 -- q1
 SELECT * FROM pgr_johnson(
     'SELECT source, target, cost FROM edge_table WHERE id < 5
@@ -26,3 +30,6 @@ SELECT * FROM pgr_johnson(
          5 |       2 |        1
 (6 rows)
 
+-- q3
+ROLLBACK;
+ROLLBACK
diff --git a/src/allpairs/doc/pgr_floydWarshall.rst b/src/allpairs/doc/pgr_floydWarshall.rst
index 8f413fc..2271446 100644
--- a/src/allpairs/doc/pgr_floydWarshall.rst
+++ b/src/allpairs/doc/pgr_floydWarshall.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -18,11 +18,15 @@ Synopsis
 ``pgr_floydWarshall`` - Returns the sum of the costs of the shortest path for each
 pair of nodes in the graph using Floyd-Warshall algorithm.
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/floyd_warshall_shortest.html
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.0.0
+
+* Renamed on 2.2.0, previous name pgr_apspWarshall
+
 
 The Floyd-Warshall algorithm, also known as Floyd's algorithm,
 is a good choice to calculate the sum of the costs of the shortest path for each
@@ -55,9 +59,9 @@ The main Characteristics are:
 
 Signature Summary
 --------------------------------------------
-    
+
 .. code-block:: none
-   
+
     pgr_floydWarshall(edges_sql)
     pgr floydWarshall(edges_sql, directed)
     RETURNS SET OF (start_vid, end_vid,  agg_cost) or EMPTY SET
@@ -73,7 +77,7 @@ Minimal Signature
 ...................
 
 .. code-block:: none
-   
+
     pgr_floydWarshall(edges_sql)
     RETURNS SET OF (start_vid, end_vid,  agg_cost) or EMPTY SET
 
@@ -91,7 +95,7 @@ Complete Signature
 ...................
 
 .. code-block:: none
-   
+
     pgr_floydWarshall(edges_sql, directed)
     RETURNS SET OF (start_vid, end_vid,  agg_cost) or EMPTY SET
 
@@ -100,11 +104,12 @@ Complete Signature
 
 .. literalinclude:: doc-floydWarshall.queries
    :start-after: -- q2
+   :end-before: -- q3
 
 Description of the Signatures
 ------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: no_id_edges_sql_start
     :end-before: no_id_edges_sql_end
 
diff --git a/src/allpairs/doc/pgr_johnson.rst b/src/allpairs/doc/pgr_johnson.rst
index 5e66170..4a81289 100644
--- a/src/allpairs/doc/pgr_johnson.rst
+++ b/src/allpairs/doc/pgr_johnson.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -18,11 +18,15 @@ Synopsis
 ``pgr_johnson`` - Returns the sum of the costs of the shortest path for each
 pair of nodes in the graph using Floyd-Warshall algorithm.
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/johnson_all_pairs_shortest.html
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.0.0
+
+* Renamed on 2.2.0, previous name pgr_apspJohnson
+
 
 The Johnson algorithm, is a good choice to calculate the sum of the costs
 of the shortest path for each pair of nodes in the graph, for *sparse graphs*.
@@ -54,9 +58,9 @@ The main Characteristics are:
 
 Signature Summary
 --------------------------------------------
-    
+
 .. code-block:: none
-   
+
     pgr_johnson(edges_sql)
     pgr johnson(edges_sql, directed)
     RETURNS SET OF (start_vid, end_vid,  agg_cost) or EMPTY SET
@@ -72,7 +76,7 @@ Minimal Signature
 ...................
 
 .. code-block:: none
-   
+
     pgr_johnson(edges_sql)
     RETURNS SET OF (start_vid, end_vid,  agg_cost) or EMPTY SET
 
@@ -90,7 +94,7 @@ Complete Signature
 ...................
 
 .. code-block:: none
-   
+
     pgr_johnson(edges_sql, directed)
     RETURNS SET OF (start_vid, end_vid,  agg_cost) or EMPTY SET
 
@@ -99,11 +103,12 @@ Complete Signature
 
 .. literalinclude:: doc-johnson.queries
    :start-after: -- q2
+   :end-before: -- q3
 
 Description of the Signatures
 ------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: no_id_edges_sql_start
     :end-before: no_id_edges_sql_end
 
diff --git a/src/allpairs/src/floydWarshall.c b/src/allpairs/src/floydWarshall.c
index 4575d03..bc80773 100644
--- a/src/allpairs/src/floydWarshall.c
+++ b/src/allpairs/src/floydWarshall.c
@@ -27,23 +27,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "fmgr.h"
-#include "funcapi.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
+#include "./../../common/src/postgres_connection.h"
 
-// #define DEBUG
 
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
+
 #include "./floydWarshall_driver.h"
 
 PGDLLEXPORT Datum floydWarshall(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(floydWarshall);
 
 static
 void
@@ -99,17 +94,14 @@ process(
 }
 
 
-PG_FUNCTION_INFO_V1(floydWarshall);
 PGDLLEXPORT Datum
 floydWarshall(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
     /**************************************************************************/
     /*                                                                        */
-    Matrix_cell_t  *result_tuples = 0;
+    Matrix_cell_t  *result_tuples = NULL;
     size_t result_count = 0;
     /*                                                                        */
     /**************************************************************************/
@@ -134,7 +126,7 @@ floydWarshall(PG_FUNCTION_ARGS) {
 
         PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_BOOL(1),
                 &result_tuples,
                 &result_count);
@@ -142,9 +134,14 @@ floydWarshall(PG_FUNCTION_ARGS) {
         /*                                                                   */
         /*********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -155,12 +152,10 @@ floydWarshall(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (Matrix_cell_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -171,11 +166,11 @@ floydWarshall(PG_FUNCTION_ARGS) {
         nulls = palloc(3 * sizeof(bool));
 
         // postgres starts counting from 1
-        values[0] = Int64GetDatum(result_tuples[call_cntr].from_vid);
+        values[0] = Int64GetDatum(result_tuples[funcctx->call_cntr].from_vid);
         nulls[0] = false;
-        values[1] = Int64GetDatum(result_tuples[call_cntr].to_vid);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].to_vid);
         nulls[1] = false;
-        values[2] = Float8GetDatum(result_tuples[call_cntr].cost);
+        values[2] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
         nulls[2] = false;
         /*********************************************************************/
 
@@ -183,9 +178,6 @@ floydWarshall(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/allpairs/src/floydWarshall_driver.cpp b/src/allpairs/src/floydWarshall_driver.cpp
index 36e2040..542725d 100644
--- a/src/allpairs/src/floydWarshall_driver.cpp
+++ b/src/allpairs/src/floydWarshall_driver.cpp
@@ -27,20 +27,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
-
+#include "./floydWarshall_driver.h"
 
 #include <sstream>
 #include <deque>
 #include <vector>
+
 #include "./pgr_allpairs.hpp"
-#include "./floydWarshall_driver.h"
+
 #include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
 
@@ -70,13 +64,13 @@ do_pgr_floydWarshall(
         if (directedFlag) {
             log << "Processing Directed graph\n";
             pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_tuples);
+            digraph.insert_edges(data_edges, total_tuples);
             log << digraph;
             pgr_floydWarshall(digraph, *return_count, return_tuples);
         } else {
             log << "Processing Undirected graph\n";
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_tuples);
+            undigraph.insert_edges(data_edges, total_tuples);
             log << undigraph;
             pgr_floydWarshall(undigraph, *return_count, return_tuples);
         }
diff --git a/src/allpairs/src/floydWarshall_driver.h b/src/allpairs/src/floydWarshall_driver.h
index 252e6ce..fe2a90d 100644
--- a/src/allpairs/src/floydWarshall_driver.h
+++ b/src/allpairs/src/floydWarshall_driver.h
@@ -29,7 +29,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 #ifndef SRC_ALLPAIRS_SRC_FLOYDWARSHALL_DRIVER_H_
 #define SRC_ALLPAIRS_SRC_FLOYDWARSHALL_DRIVER_H_
-
 #pragma once
 
 #include "./../../common/src/pgr_types.h"
diff --git a/src/allpairs/src/johnson.c b/src/allpairs/src/johnson.c
index 1e0658a..f252b41 100644
--- a/src/allpairs/src/johnson.c
+++ b/src/allpairs/src/johnson.c
@@ -27,22 +27,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include <unistd.h>
-
-#include "postgres.h"
-#include "funcapi.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
-
-// #define DEBUG
+#include "./../../common/src/postgres_connection.h"
 
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
+
 #include "./johnson_driver.h"
 
 PGDLLEXPORT Datum johnson(PG_FUNCTION_ARGS);
@@ -96,14 +87,12 @@ PG_FUNCTION_INFO_V1(johnson);
 PGDLLEXPORT Datum
 johnson(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
     /**************************************************************************/
     /*                          MODIFY AS NEEDED                              */
     /*                                                                        */
-    Matrix_cell_t  *result_tuples = 0;
+    Matrix_cell_t *result_tuples = NULL;
     size_t result_count = 0;
     /*                                                                        */
     /**************************************************************************/
@@ -122,7 +111,7 @@ johnson(PG_FUNCTION_ARGS) {
 
         PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_BOOL(1),
                 &result_tuples,
                 &result_count);
@@ -130,9 +119,14 @@ johnson(PG_FUNCTION_ARGS) {
         /*                                                                   */
         /*********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -143,12 +137,10 @@ johnson(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (Matrix_cell_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -165,11 +157,11 @@ johnson(PG_FUNCTION_ARGS) {
         nulls = palloc(3 * sizeof(bool));
 
         // postgres starts counting from 1
-        values[0] = Int64GetDatum(result_tuples[call_cntr].from_vid);
+        values[0] = Int64GetDatum(result_tuples[funcctx->call_cntr].from_vid);
         nulls[0] = false;
-        values[1] = Int64GetDatum(result_tuples[call_cntr].to_vid);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].to_vid);
         nulls[1] = false;
-        values[2] = Float8GetDatum(result_tuples[call_cntr].cost);
+        values[2] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
         nulls[2] = false;
 
         /*********************************************************************/
@@ -178,9 +170,6 @@ johnson(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/allpairs/src/johnson_driver.cpp b/src/allpairs/src/johnson_driver.cpp
index 4fe939d..b2a014a 100644
--- a/src/allpairs/src/johnson_driver.cpp
+++ b/src/allpairs/src/johnson_driver.cpp
@@ -27,20 +27,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
-
+#include "./johnson_driver.h"
 
 #include <sstream>
 #include <deque>
 #include <vector>
+
 #include "./pgr_allpairs.hpp"
-#include "./johnson_driver.h"
+
 #include "./../../common/src/pgr_types.h"
 
 // CREATE OR REPLACE FUNCTION pgr_johnson(edges_sql TEXT, directed BOOLEAN,
@@ -69,12 +63,12 @@ do_pgr_johnson(
         if (directed) {
             log << "Working with directed Graph\n";
             pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_tuples);
+            digraph.insert_edges(data_edges, total_tuples);
             pgr_johnson(digraph, *return_count, return_tuples);
         } else {
             log << "Working with Undirected Graph\n";
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_tuples);
+            undigraph.insert_edges(data_edges, total_tuples);
             pgr_johnson(undigraph, *return_count, return_tuples);
         }
 
diff --git a/src/allpairs/src/pgr_allpairs.hpp b/src/allpairs/src/pgr_allpairs.hpp
index 3d9d1fe..ce43547 100644
--- a/src/allpairs/src/pgr_allpairs.hpp
+++ b/src/allpairs/src/pgr_allpairs.hpp
@@ -28,15 +28,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #define SRC_ALLPAIRS_SRC_PGR_ALLPAIRS_HPP_
 #pragma once
 
-#if 0
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
-#endif
 
 #include <boost/config.hpp>
 #include <boost/graph/adjacency_list.hpp>
@@ -52,10 +43,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 
 #include "./../../common/src/pgr_types.h"
-#include "../../common/src/pgr_alloc.hpp"
 #include "./../../common/src/basePath_SSEC.hpp"
 #include "./../../common/src/pgr_base_graph.hpp"
 
+// TODO(vicky) don't keep it here
+#include "../../common/src/pgr_alloc.hpp"
+
 template < class G > class Pgr_allpairs;
 
 // user's functions
@@ -150,7 +143,7 @@ class Pgr_allpairs {
      template <typename T>
          struct inf_plus {
              T operator()(const T& a, const T& b) const {
-                 T inf = std::numeric_limits<T>::max();
+                 T inf = (std::numeric_limits<T>::max)();
                  if (a == inf || b == inf)
                      return inf;
                  return a + b;
@@ -175,7 +168,7 @@ void Pgr_allpairs< G >::floydWarshall(
             matrix,
             weight_map(get(&pgrouting::Basic_edge::cost, graph.graph)).
             distance_combine(combine).
-            distance_inf(std::numeric_limits<double>::max()).
+            distance_inf((std::numeric_limits<double>::max)()).
             distance_zero(0));
 
     make_result(graph, matrix, result_tuple_count, postgres_rows);
@@ -187,14 +180,14 @@ void Pgr_allpairs< G >::floydWarshall(
         G &graph,
         std::vector< Matrix_cell_t> &rows) {
     std::vector< std::vector<double>> matrix;
-    make_matrix(boost::num_vertices(graph.graph), matrix);
+    make_matrix(graph.num_vertices(), matrix);
     inf_plus<double> combine;
     boost::floyd_warshall_all_pairs_shortest_paths(
             graph.graph,
             matrix,
             weight_map(get(&pgrouting::Basic_edge::cost, graph.graph)).
             distance_combine(combine).
-            distance_inf(std::numeric_limits<double>::max()).
+            distance_inf((std::numeric_limits<double>::max)()).
             distance_zero(0));
 
     make_result(graph, matrix, rows);
@@ -213,7 +206,7 @@ void Pgr_allpairs< G >::johnson(
             matrix,
             weight_map(get(&pgrouting::Basic_edge::cost, graph.graph)).
             distance_combine(combine).
-            distance_inf(std::numeric_limits<double>::max()).
+            distance_inf((std::numeric_limits<double>::max)()).
             distance_zero(0));
 
     make_result(graph, matrix, result_tuple_count, postgres_rows);
@@ -225,14 +218,14 @@ void Pgr_allpairs< G >::johnson(
         G &graph,
         std::vector< Matrix_cell_t> &rows) {
     std::vector< std::vector<double>> matrix;
-    make_matrix(boost::num_vertices(graph.graph), matrix);
+    make_matrix(graph.num_vertices(), matrix);
     inf_plus<double> combine;
     boost::johnson_all_pairs_shortest_paths(
             graph.graph,
             matrix,
             weight_map(get(&pgrouting::Basic_edge::cost, graph.graph)).
             distance_combine(combine).
-            distance_inf(std::numeric_limits<double>::max()).
+            distance_inf((std::numeric_limits<double>::max)()).
             distance_zero(0));
 
     make_result(graph, matrix, rows);
@@ -250,6 +243,7 @@ void
 Pgr_allpairs< G >::make_matrix(
         size_t v_size,
         std::vector< std::vector<double>> &matrix) const {
+    // TODO(vicky) in one step
     matrix.resize(v_size);
     for (size_t i=0; i < v_size; i++)
         matrix[i].resize(v_size);
@@ -264,7 +258,7 @@ Pgr_allpairs< G >::count_rows(
     for (size_t i = 0; i < graph.num_vertices(); i++) {
         for (size_t j = 0; j < graph.num_vertices(); j++) {
             if (i == j) continue;
-            if (matrix[i][j] != std::numeric_limits<double>::max()) {
+            if (matrix[i][j] != (std::numeric_limits<double>::max)()) {
                 result_tuple_count++;
             }  // if
         }  // for j
@@ -272,7 +266,7 @@ Pgr_allpairs< G >::count_rows(
     return result_tuple_count;
 }
 
-// for postgres
+// TODO(vicky) don't keep it here for postgres
 template < class G >
 void
 Pgr_allpairs< G >::make_result(
@@ -285,13 +279,13 @@ Pgr_allpairs< G >::make_result(
 
 
     size_t seq = 0;
-    for (size_t i = 0; i < graph.num_vertices(); i++) {
-        for (size_t j = 0; j < graph.num_vertices(); j++) {
-            if (i == j) continue;
-            if (matrix[i][j] != std::numeric_limits<double>::max()) {
-                (*postgres_rows)[seq].from_vid = graph.graph[i].id;
-                (*postgres_rows)[seq].to_vid = graph.graph[j].id;
-                (*postgres_rows)[seq].cost =  matrix[i][j];
+    for (typename G::V v_i = 0; v_i < graph.num_vertices(); v_i++) {
+        for (typename G::V v_j = 0; v_j < graph.num_vertices(); v_j++) {
+            if (v_i == v_j) continue;
+            if (matrix[v_i][v_j] != (std::numeric_limits<double>::max)()) {
+                (*postgres_rows)[seq].from_vid = graph[v_i].id;
+                (*postgres_rows)[seq].to_vid = graph[v_j].id;
+                (*postgres_rows)[seq].cost =  matrix[v_i][v_j];
                 seq++;
             }  // if
         }  // for j
@@ -309,11 +303,11 @@ Pgr_allpairs< G >::make_result(
     rows.resize(count);
     size_t seq = 0;
 
-    for (size_t i = 0; i < graph.num_vertices(); i++) {
-        for (size_t j = 0; j < graph.num_vertices(); j++) {
-            if (matrix[i][j] != std::numeric_limits<double>::max()) {
+    for (typename G::V v_i = 0; v_i < graph.num_vertices(); v_i++) {
+        for (typename G::V v_j = 0; v_j < graph.num_vertices(); v_j++) {
+            if (matrix[v_i][v_j] != (std::numeric_limits<double>::max)()) {
                 rows[seq] =
-                    {graph.graph[i].id, graph.graph[j].id, matrix[i][j]};
+                    {graph[v_i].id, graph[v_j].id, matrix[v_i][v_j]};
                 seq++;
             }  // if
         }  // for j
diff --git a/src/allpairs/test/doc-floydWarshall.result b/src/allpairs/test/doc-floydWarshall.result
index 07c4312..ea5e596 100644
--- a/src/allpairs/test/doc-floydWarshall.result
+++ b/src/allpairs/test/doc-floydWarshall.result
@@ -9,3 +9,4 @@
 2|5|1
 5|1|2
 5|2|1
+-- q3
diff --git a/src/allpairs/test/doc-floydWarshall.test.sql b/src/allpairs/test/doc-floydWarshall.test.sql
index 19443ef..e9be87a 100644
--- a/src/allpairs/test/doc-floydWarshall.test.sql
+++ b/src/allpairs/test/doc-floydWarshall.test.sql
@@ -7,3 +7,4 @@ SELECT * FROM pgr_floydWarshall(
     'SELECT id, source, target, cost FROM edge_table where id < 5',
     false
 );
+\echo -- q3
diff --git a/src/allpairs/test/doc-johnson.result b/src/allpairs/test/doc-johnson.result
index 07c4312..ea5e596 100644
--- a/src/allpairs/test/doc-johnson.result
+++ b/src/allpairs/test/doc-johnson.result
@@ -9,3 +9,4 @@
 2|5|1
 5|1|2
 5|2|1
+-- q3
diff --git a/src/allpairs/test/doc-johnson.test.sql b/src/allpairs/test/doc-johnson.test.sql
index 70f5cd0..bd765aa 100644
--- a/src/allpairs/test/doc-johnson.test.sql
+++ b/src/allpairs/test/doc-johnson.test.sql
@@ -9,3 +9,4 @@ SELECT * FROM pgr_johnson(
          ORDER BY id',
     false
 );
+\echo -- q3
diff --git a/src/alpha_shape/doc/doc-pgr_alphashape.queries b/src/alpha_shape/doc/doc-pgr_alphashape.queries
index 54e10f7..0b4282a 100644
--- a/src/alpha_shape/doc/doc-pgr_alphashape.queries
+++ b/src/alpha_shape/doc/doc-pgr_alphashape.queries
@@ -1,25 +1,39 @@
 BEGIN;
 BEGIN
-SELECT round(ST_Area(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))))::numeric, 2) AS st_area
-FROM (SELECT ST_MakeLine(points ORDER BY id) AS openline FROM
-(SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
-FROM pgr_alphaShape('SELECT id, x, y FROM vertex_table')
-) AS a) AS foo;
- st_area 
----------
-   10.00
-(1 row)
+SET client_min_messages TO NOTICE;
+SET
+-- q1
+SELECT * FROM pgr_alphaShape(
+    'SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y
+    FROM edge_table_vertices_pgr') ORDER BY x, y;
+  x  |  y  
+-----+-----
+   0 |   2
+ 0.5 | 3.5
+   2 |   0
+   2 |   4
+ 3.5 |   4
+   4 |   1
+   4 |   2
+   4 |   3
+(8 rows)
 
------------------------------
+-- q2
 SELECT round(ST_Area(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))))::numeric, 2) AS st_area
-FROM (SELECT ST_MakeLine(points ORDER BY id) AS openline FROM
-(SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
-FROM pgr_alphaShape('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y FROM edge_table_vertices_pgr')
-) AS a) AS foo;
+FROM (
+    SELECT ST_MakeLine(points ORDER BY id) AS openline
+    FROM (
+        SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
+        FROM pgr_alphaShape(
+            'SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y
+            FROM edge_table_vertices_pgr')
+        ) AS a
+   ) AS foo;
  st_area 
 ---------
    11.75
 (1 row)
 
+-- q3
 ROLLBACK;
 ROLLBACK
diff --git a/src/alpha_shape/doc/doc-pgr_pointsAsPolygon.queries b/src/alpha_shape/doc/doc-pgr_pointsAsPolygon.queries
index 32fefa9..c6c0a7b 100644
--- a/src/alpha_shape/doc/doc-pgr_pointsAsPolygon.queries
+++ b/src/alpha_shape/doc/doc-pgr_pointsAsPolygon.queries
@@ -1,5 +1,7 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT ST_AsText(pgr_pointsAsPolygon('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y
         FROM edge_table_vertices_pgr'));
diff --git a/src/alpha_shape/doc/pgr_alphaShape.rst b/src/alpha_shape/doc/pgr_alphaShape.rst
index 44e48ab..5b3b66e 100644
--- a/src/alpha_shape/doc/pgr_alphaShape.rst
+++ b/src/alpha_shape/doc/pgr_alphaShape.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -12,7 +12,7 @@
 pgr_alphaShape
 ===============================================================================
 
-.. index:: 
+.. index::
 	single: pgr_alphashape(text,float8)
 
 Name
@@ -62,61 +62,32 @@ If a result includes multiple outer/inner rings, return those with separator row
 
 Examples
 -------------------------------------------------------------------------------
-In the alpha shape code we have no way to control the order of the points so the actual output you might get could be similar but different. The simple query is followed by a more complex one that constructs a polygon and computes the areas of it. This should be the same as the result on your system. We leave the details of the complex query to the reader as an exercise if they wish to decompose it into understandable pieces or to just copy and paste it into a SQL window to run.
+PgRouting's alpha shape implementation has no way to control the order of the output points, so the actual output might different for the same input data.
+The first query, has the output ordered, he second query shows an example usage:
 
-.. code-block:: sql
 
-    SELECT * FROM pgr_alphaShape('SELECT id, x, y FROM vertex_table');
-
-     x | y 
-    ---+---
-     2 | 4
-     0 | 2
-     2 | 0
-     4 | 1
-     4 | 2
-     4 | 3
-    (6 rows)
-
-    SELECT round(ST_Area(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))))::numeric, 2) AS st_area
-    FROM (SELECT ST_MakeLine(points ORDER BY id) AS openline FROM
-    (SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
-    FROM pgr_alphaShape('SELECT id, x, y FROM vertex_table')
-    ) AS a) AS foo;
-
-     st_area
-    ---------
-       10.00
-    (1 row)
-
-
-    SELECT * FROM pgr_alphaShape('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y FROM edge_table_vertices_pgr');
-      x  |  y  
-    -----+-----
-       2 |   4
-     0.5 | 3.5
-       0 |   2
-       2 |   0
-       4 |   1
-       4 |   2
-       4 |   3
-     3.5 |   4
-    (8 rows)
-
-    SELECT round(ST_Area(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))))::numeric, 2) AS st_area
-    FROM (SELECT ST_MakeLine(points ORDER BY id) AS openline FROM
-    (SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
-    FROM pgr_alphaShape('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y FROM edge_table_vertices_pgr')
-    ) AS a) AS foo;
-
-     st_area
-    ---------
-       11.75
-    (1 row)
-
- 
-The queries use the :ref:`sampledata` network.
+.. rubric:: Example: the (ordered) results
+
+.. literalinclude:: doc-pgr_alphashape.queries
+   :start-after: -- q1
+   :end-before: -- q2
+
+.. rubric:: Example: calculating the area
+
+Steps:
 
+  - Calculates the alpha shape
+    - the :code:`ORDER BY` clause is not used.
+  - constructs a polygon
+  - and computes the area
+
+.. literalinclude:: doc-pgr_alphashape.queries
+   :start-after: -- q2
+   :end-before: -- q3
+
+
+
+The queries use the :ref:`sampledata` network.
 
 See Also
 -------------------------------------------------------------------------------
diff --git a/src/alpha_shape/doc/pgr_pointsAsPolygon.rst b/src/alpha_shape/doc/pgr_pointsAsPolygon.rst
index 57024a5..e39d84b 100644
--- a/src/alpha_shape/doc/pgr_pointsAsPolygon.rst
+++ b/src/alpha_shape/doc/pgr_pointsAsPolygon.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -12,7 +12,7 @@
 pgr_pointsAsPolygon
 ===============================================================================
 
-.. index:: 
+.. index::
     single: pgr_pointsAsPolygon(text,float8)
 
 Name
diff --git a/src/alpha_shape/src/alpha.c b/src/alpha_shape/src/alpha.c
index aa344ca..69346ff 100644
--- a/src/alpha_shape/src/alpha.c
+++ b/src/alpha_shape/src/alpha.c
@@ -22,18 +22,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
+
 #include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 
 #include "../../common/src/pgr_types.h"
 #include "alpha_driver.h"
 
-#include "fmgr.h"
 
 
 /*
@@ -42,8 +37,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 // #define PROFILE
 
 
-PGDLLEXPORT
-Datum alphashape(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum alphashape(PG_FUNCTION_ARGS);
 
 #undef DEBUG
 #include "../../common/src/debug_macro.h"
@@ -51,14 +45,6 @@ Datum alphashape(PG_FUNCTION_ARGS);
 // The number of tuples to fetch from the SPI cursor at each iteration
 #define TUPLIMIT 1000
 
-static char *
-text2char(text *in) {
-  char *out = palloc(VARSIZE(in));
-
-  memcpy(out, VARDATA(in), VARSIZE(in) - VARHDRSZ);
-  out[VARSIZE(in) - VARHDRSZ] = '\0';
-  return out;
-}
 
 static int
 finish(int code, int ret) {
@@ -82,6 +68,7 @@ typedef struct vertex_columns {
 static int
 fetch_vertices_columns(SPITupleTable *tuptable,
                        vertex_columns_t *vertex_columns) {
+    if (tuptable) {}; // TODO this is unused parameter
   vertex_columns->id = SPI_fnumber(SPI_tuptable->tupdesc, "id");
   vertex_columns->x = SPI_fnumber(SPI_tuptable->tupdesc, "x");
   vertex_columns->y = SPI_fnumber(SPI_tuptable->tupdesc, "y");
@@ -230,10 +217,8 @@ PG_FUNCTION_INFO_V1(alphashape);
 PGDLLEXPORT
 Datum alphashape(PG_FUNCTION_ARGS) {
   FuncCallContext      *funcctx;
-  uint32_t                  call_cntr;
-  uint32_t                  max_calls;
   TupleDesc            tuple_desc;
-  vertex_t     *res = 0;
+  vertex_t     *res = NULL;
 
   /* stuff done only on the first call of the function */
   if (SRF_IS_FIRSTCALL()) {
@@ -247,12 +232,16 @@ Datum alphashape(PG_FUNCTION_ARGS) {
       /* switch to memory context appropriate for multiple function calls */
       oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
-      compute_alpha_shape(text2char(PG_GETARG_TEXT_P(0)),
+      compute_alpha_shape(text_to_cstring(PG_GETARG_TEXT_P(0)),
                                 PG_GETARG_FLOAT8(1), &res, &res_count);
 
       /* total number of tuples to be returned */
       PGR_DBG("Conting tuples number\n");
+#if PGSQL_VERSION > 95
+      funcctx->max_calls = res_count;
+#else
       funcctx->max_calls = (uint32_t)res_count;
+#endif
       funcctx->user_fctx = res;
 
       PGR_DBG("Total count %lu", res_count);
@@ -272,14 +261,12 @@ Datum alphashape(PG_FUNCTION_ARGS) {
   PGR_DBG("Strange stuff doing\n");
   funcctx = SRF_PERCALL_SETUP();
 
-  call_cntr = (uint32_t)funcctx->call_cntr;
-  max_calls = (uint32_t)funcctx->max_calls;
   tuple_desc = funcctx->tuple_desc;
-  res = (vertex_t*) funcctx->user_fctx;
+  res = (vertex_t*)funcctx->user_fctx;
 
   PGR_DBG("Trying to allocate some memory\n");
 
-  if (call_cntr < max_calls) {
+  if (funcctx->call_cntr < funcctx->max_calls) {
       /* do when there is more left to send */
       HeapTuple    tuple;
       Datum        result;
@@ -288,24 +275,11 @@ Datum alphashape(PG_FUNCTION_ARGS) {
       double x;
       double y;
 
-      /* This will work for some compilers. If it crashes with segfault, try to change the following block with this one
-
-      values = palloc(3 * sizeof(Datum));
-      nulls = palloc(3 * sizeof(char));
-
-      values[0] = call_cntr;
-      nulls[0] = ' ';
-      values[1] = Float8GetDatum(res[call_cntr].x);
-      nulls[1] = ' ';
-      values[2] = Float8GetDatum(res[call_cntr].y);
-      nulls[2] = ' ';
-      */
-
       values = palloc(2 * sizeof(Datum));
       nulls = palloc(2 * sizeof(bool));
 
-      x = res[call_cntr].x;
-      y = res[call_cntr].y;
+      x = res[funcctx->call_cntr].x;
+      y = res[funcctx->call_cntr].y;
       if (x == DBL_MAX && y == DBL_MAX) {
         values[0] = 0;
         values[1] = 0;
@@ -335,8 +309,6 @@ Datum alphashape(PG_FUNCTION_ARGS) {
 
       SRF_RETURN_NEXT(funcctx, result);
     } else  {
-      /* do when there is no more left */
-      if (res) free(res);
       SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/alpha_shape/src/alpha_driver.cpp b/src/alpha_shape/src/alpha_driver.cpp
index 0e9e151..ba68459 100644
--- a/src/alpha_shape/src/alpha_driver.cpp
+++ b/src/alpha_shape/src/alpha_driver.cpp
@@ -34,17 +34,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 Takes a list of points and returns a list of segments
 corresponding to the Alpha shape.
 ************************************************************************/
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-#ifdef __MINGW64__
 
-
-namespace boost {
-  void tss_cleanup_implemented() { }
-}
-#endif
 #include "./alpha_driver.h"
 
 #include <CGAL/Simple_cartesian.h>
@@ -69,6 +59,7 @@ namespace boost {
 #include <algorithm>
 #include <set>
 
+#include "./../../common/src/pgr_alloc.hpp"
 
 typedef double coord_type;
 
@@ -250,7 +241,7 @@ int alpha_shape(vertex_t *vertices, size_t count, double alpha,
                 result_count += ring.size();
             }
             result_count += rings.size() - 1;
-            *res = (vertex_t *) malloc(sizeof(vertex_t) * result_count);
+            *res = pgr_alloc(result_count, (*res));
             *res_count = result_count;
 
             int idx = 0;
diff --git a/src/alpha_shape/test/doc-pgr_alphashape.result b/src/alpha_shape/test/doc-pgr_alphashape.result
index 11bcba8..66f7a5f 100644
--- a/src/alpha_shape/test/doc-pgr_alphashape.result
+++ b/src/alpha_shape/test/doc-pgr_alphashape.result
@@ -1,3 +1,12 @@
-10.00
------------------------------
+-- q1
+0|2
+0.5|3.5
+2|0
+2|4
+3.5|4
+4|1
+4|2
+4|3
+-- q2
 11.75
+-- q3
diff --git a/src/alpha_shape/test/doc-pgr_alphashape.test.sql b/src/alpha_shape/test/doc-pgr_alphashape.test.sql
index 0c4d48d..d16718a 100644
--- a/src/alpha_shape/test/doc-pgr_alphashape.test.sql
+++ b/src/alpha_shape/test/doc-pgr_alphashape.test.sql
@@ -1,26 +1,22 @@
-BEGIN;
 --------------------------------------------------------------------------------
 --              PGR_alphaShape
 --------------------------------------------------------------------------------
--- testing with areas
---SELECT * FROM pgr_alphaShape('SELECT id, x, y FROM vertex_table');
---SELECT * FROM pgr_alphaShape('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y FROM edge_table_vertices_pgr');
 
-SELECT round(ST_Area(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))))::numeric, 2) AS st_area
-FROM (SELECT ST_MakeLine(points ORDER BY id) AS openline FROM
-(SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
-
-FROM pgr_alphaShape('SELECT id, x, y FROM vertex_table')
-
-) AS a) AS foo;
-
-\echo '-----------------------------'
+\echo -- q1
+SELECT * FROM pgr_alphaShape(
+    'SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y
+    FROM edge_table_vertices_pgr') ORDER BY x, y;
+\echo -- q2
 
 SELECT round(ST_Area(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))))::numeric, 2) AS st_area
-FROM (SELECT ST_MakeLine(points ORDER BY id) AS openline FROM
-(SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
-
-FROM pgr_alphaShape('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y FROM edge_table_vertices_pgr')
+FROM (
+    SELECT ST_MakeLine(points ORDER BY id) AS openline
+    FROM (
+        SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id
+        FROM pgr_alphaShape(
+            'SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y
+            FROM edge_table_vertices_pgr')
+        ) AS a
+   ) AS foo;
 
-) AS a) AS foo;
-ROLLBACK;
+\echo -- q3
diff --git a/src/alpha_shape/test/doc-pgr_pointsAsPolygon.test.sql b/src/alpha_shape/test/doc-pgr_pointsAsPolygon.test.sql
index 56fa863..6209eca 100644
--- a/src/alpha_shape/test/doc-pgr_pointsAsPolygon.test.sql
+++ b/src/alpha_shape/test/doc-pgr_pointsAsPolygon.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 -------------------------------------------------------------------------------
 --              PGR_pointsAsPolygon
 -------------------------------------------------------------------------------
@@ -7,4 +6,3 @@ BEGIN;
 SELECT ST_AsText(pgr_pointsAsPolygon('SELECT id::integer, ST_X(the_geom)::float AS x, ST_Y(the_geom)::float AS y
         FROM edge_table_vertices_pgr'));
 \echo --q2
-ROLLBACK;
diff --git a/src/apsp_johnson/doc/CMakeLists.txt b/src/apsp_johnson/doc/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/apsp_johnson/doc/doc-apspJohnson.queries b/src/apsp_johnson/doc/doc-apspJohnson.queries
index 27bce4b..1116eb4 100644
--- a/src/apsp_johnson/doc/doc-apspJohnson.queries
+++ b/src/apsp_johnson/doc/doc-apspJohnson.queries
@@ -1,3 +1,5 @@
+BEGIN;
+BEGIN
 SET client_min_messages TO NOTICE;
 SET
 --q1
@@ -13,3 +15,5 @@ NOTICE:  Deprecated function: Use pgr_johnson instead
 (3 rows)
 
 --q2
+ROLLBACK;
+ROLLBACK
diff --git a/src/apsp_johnson/doc/pgr_apspJohnson.rst b/src/apsp_johnson/doc/pgr_apspJohnson.rst
deleted file mode 100644
index adbba2e..0000000
--- a/src/apsp_johnson/doc/pgr_apspJohnson.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_apsp_johnson:
-
-pgr_apspJohnson - Deprecated function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * It has been replaced by a new functions, is no longer supported, and may be removed from future versions.
-    * All code that uses this function should be converted to use its replacement: :ref:`pgr_johnson`. 
-
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_apspJohnson`` - Returns all costs for each pair of nodes in the graph.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Johnson's algorithm is a way to find the shortest paths between all pairs of vertices in a sparse, edge weighted, directed graph. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows for every pair of nodes in the graph.
-
-.. code-block:: sql
-
-    pgr_costResult[] pgr_apspJohnson(sql text);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query that should return the edges for the graph that will be analyzed:
-
-    .. code-block:: sql
-
-        SELECT source, target, cost FROM edge_table;
-
-    :source: ``int4`` identifier of the source vertex for this edge
-    :target: ``int4`` identifier of the target vertex for this edge
-    :cost: ``float8`` a positive value for the cost to traverse this edge
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   source node ID
-:id2:   target node ID
-:cost:  cost to traverse from ``id1`` to ``id2``
-
-.. rubric:: History
-
-* Deprecated in version 2.2.0
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. literalinclude:: doc-apspJohnson.queries
-   :start-after: --q1
-   :end-before: --q2
-
-The query uses the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`type_cost_result`
-* :ref:`pgr_johnson`
-* http://en.wikipedia.org/wiki/Johnson%27s_algorithm
diff --git a/src/apsp_johnson/test/doc-apspJohnson.test.sql b/src/apsp_johnson/test/doc-apspJohnson.test.sql
index 6e471cf..1d48764 100644
--- a/src/apsp_johnson/test/doc-apspJohnson.test.sql
+++ b/src/apsp_johnson/test/doc-apspJohnson.test.sql
@@ -3,7 +3,6 @@
 --              PGR_apspJohnson
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
-SET client_min_messages TO NOTICE;
 \echo --q1
 SELECT * FROM pgr_apspJohnson(
         'SELECT source::INTEGER, target::INTEGER, cost FROM edge_table WHERE id < 5'
diff --git a/src/apsp_warshall/doc/CMakeLists.txt b/src/apsp_warshall/doc/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/apsp_warshall/doc/doc-apspWarshall.queries b/src/apsp_warshall/doc/doc-apspWarshall.queries
index 2352af3..fd61fb6 100644
--- a/src/apsp_warshall/doc/doc-apspWarshall.queries
+++ b/src/apsp_warshall/doc/doc-apspWarshall.queries
@@ -1,3 +1,5 @@
+BEGIN;
+BEGIN
 SET client_min_messages TO NOTICE;
 SET
 --q1
@@ -17,3 +19,5 @@ NOTICE:  Deprecated function: Use pgr_floydWarshall instead
 (6 rows)
 
 --q2
+ROLLBACK;
+ROLLBACK
diff --git a/src/apsp_warshall/doc/pgr_apspWarshall.rst b/src/apsp_warshall/doc/pgr_apspWarshall.rst
deleted file mode 100644
index d246362..0000000
--- a/src/apsp_warshall/doc/pgr_apspWarshall.rst
+++ /dev/null
@@ -1,84 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_apsp_warshall:
-
-pgr_apspWarshall - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * It has been replaced by a new function, is no longer supported, and may be removed from future versions.
-    * All code that uses this function should be converted to use its replacement: :ref:`pgr_FloydWarshall`. 
-
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_apspWarshall`` - Returns all costs for each pair of nodes in the graph.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-The Floyd-Warshall algorithm (also known as Floyd's algorithm and other names) is a graph analysis algorithm for finding the shortest paths between all pairs of nodes in a weighted graph. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows for every pair of nodes in the graph.
-
-.. code-block:: sql
-
-    pgr_costResult[] pgr_apspWarshall(sql text, directed boolean, reverse_cost boolean);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query that should return the edges for the graph that will be analyzed:
-
-    .. code-block:: sql
-
-        SELECT id, source, target, cost FROM edge_table;
-
-    :id: ``int4`` identifier of the edge
-    :source: ``int4`` identifier of the source vertex for this edge
-    :target: ``int4`` identifier of the target vertex for this edge
-    :cost: ``float8`` a positive value for the cost to traverse this edge
-    :reverse_cost: ``float8`` (optional) a positive value for the reverse cost to traverse this edge
-
-:directed: ``true`` if the graph is directed
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   source node ID
-:id2:   target node ID
-:cost:  cost to traverse from ``id1`` to ``id2``
-
-
-.. rubric:: History
-
-* Deprecated in version 2.0.0
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. literalinclude:: doc-apspWarshall.queries
-   :start-after: --q1
-   :end-before: --q2
-
-The query uses the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`type_cost_result`
-* :ref:`pgr_floydWarshall`
-* http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm
diff --git a/src/apsp_warshall/test/doc-apspWarshall.test.sql b/src/apsp_warshall/test/doc-apspWarshall.test.sql
index e6e8095..892e55f 100644
--- a/src/apsp_warshall/test/doc-apspWarshall.test.sql
+++ b/src/apsp_warshall/test/doc-apspWarshall.test.sql
@@ -3,7 +3,6 @@
 --              PGR_apspWarshall
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
-SET client_min_messages TO NOTICE;
 \echo --q1
 SELECT * FROM pgr_apspWarshall(
         'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table WHERE id < 5',
diff --git a/src/astar/doc/aStar-family.rst b/src/astar/doc/aStar-family.rst
new file mode 100644
index 0000000..58d92c2
--- /dev/null
+++ b/src/astar/doc/aStar-family.rst
@@ -0,0 +1,109 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+.. _astar:
+
+aStar - Family of functions
+===============================================================================
+
+The A* (pronounced "A Star") algorithm is based on Dijkstra's algorithm with a heuristic that allow it to solve most shortest path problems by evaluation only a sub-set of the overall graph.
+
+.. index from here
+
+- :ref:`pgr_aStar` - A* algorithm for the shortest path.
+- :ref:`pgr_aStarCost` - Get the aggregate cost of the shortest paths.
+- :ref:`pgr_aStarCostMatrix` - Get the cost matrix of the shortest paths.
+
+.. index to here
+
+.. toctree::
+    :hidden:
+
+    pgr_aStar
+    pgr_aStarCost
+    pgr_aStarCostMatrix
+
+
+The problem definition (Advanced documentation)
+-----------------------------------------------
+
+The A* (pronounced "A Star") algorithm is based on Dijkstra's algorithm with a heuristic, that is an estimation of the remaining cost from the vertex to the goal,
+that allows to solve most shortest path problems by evaluation only a sub-set of the overall graph.
+Running time: :math:`O((E + V) * \log V)`
+
+
+
+
+.. _astar_heuristics:
+
+Heuristic
+..........
+
+Currently the heuristic functions available are:
+
+- 0: :math:`h(v) = 0` (Use this value to compare with pgr_dijkstra)
+- 1: :math:`h(v) = abs(max(\Delta x, \Delta y))`
+- 2: :math:`h(v) = abs(min(\Delta x, \Delta y))`
+- 3: :math:`h(v) = \Delta x * \Delta x + \Delta y * \Delta y`
+- 4: :math:`h(v) = sqrt(\Delta x * \Delta x + \Delta y * \Delta y)`
+- 5: :math:`h(v) = abs(\Delta x) + abs(\Delta y)`
+
+where :math:`\Delta x = x_1 - x_0` and :math:`\Delta y = y_1 - y_0`
+
+
+.. _astar_factor:
+
+Factor
+-------------------------------------------------------------------------------
+
+.. rubric:: Analysis 1
+
+Working with cost/reverse_cost as length in degrees, x/y in lat/lon:
+Factor = 1   (no need to change units)
+
+.. rubric:: Analysis 2
+
+Working with cost/reverse_cost as length in meters, x/y in lat/lon:
+Factor =  would depend on the location of the points:
+
+======== ================================= ==========
+latitude  conversion                        Factor
+======== ================================= ==========
+45       1 longitude degree is  78846.81 m   78846
+ 0       1 longitude degree is 111319.46 m  111319
+======== ================================= ==========
+
+.. rubric:: Analysis 3
+
+Working with cost/reverse_cost as time in seconds, x/y in lat/lon:
+Factor: would depend on the location of the points and on the average speed
+say 25m/s is the speed.
+
+======== =========================================== ==========
+latitude  conversion                                  Factor
+======== =========================================== ==========
+45       1 longitude degree is (78846.81m)/(25m/s)   3153 s
+ 0       1 longitude degree is (111319.46 m)/(25m/s) 4452 s
+======== =========================================== ==========
+
+
+
+See Also
+-------------------------------------------------------------------------------
+
+* :ref:`pgr_aStar`
+* :ref:`pgr_aStarCost`
+* :ref:`pgr_aStarCostMatrix`
+* http://www.boost.org/libs/graph/doc/astar_search.html
+* http://en.wikipedia.org/wiki/A*_search_algorithm
+
+.. rubric:: Indices and tables
+
+* :ref:`genindex`
+* :ref:`search`
diff --git a/src/astar/doc/doc-aStarCost.queries b/src/astar/doc/doc-aStarCost.queries
new file mode 100644
index 0000000..0b95a8e
--- /dev/null
+++ b/src/astar/doc/doc-aStarCost.queries
@@ -0,0 +1,58 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
+--q1
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    2, 12);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         2 |      12 |        4
+(1 row)
+
+--q2
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    2, 12,
+    directed := false, heuristic := 2);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         2 |      12 |        4
+(1 row)
+
+--q3
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    2, ARRAY[3, 12], heuristic := 2);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         2 |       3 |        5
+         2 |      12 |        4
+(2 rows)
+
+--q4
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], 12, heuristic := 0);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         2 |      12 |        4
+         7 |      12 |        5
+(2 rows)
+
+--q5
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], ARRAY[3, 12], heuristic := 2);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         2 |       3 |        5
+         2 |      12 |        4
+         7 |       3 |        6
+         7 |      12 |        5
+(4 rows)
+
+--q6
+ROLLBACK;
+ROLLBACK
diff --git a/src/astar/doc/doc-astar-v2.queries b/src/astar/doc/doc-astar-v2.queries
index 8ad9d5c..31b594d 100644
--- a/src/astar/doc/doc-astar-v2.queries
+++ b/src/astar/doc/doc-astar-v2.queries
@@ -1,11 +1,13 @@
+BEGIN;
+BEGIN
 SET client_min_messages TO NOTICE;
 SET
 -- q1
-SELECT * FROM pgr_AStar(
+SELECT * FROM pgr_astar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, x1, y1, x2, y2
      FROM edge_table',
     4, 1, false, false);
-NOTICE:  Deprecated signature of function pgr_astar
+NOTICE:  Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)
  seq | id1 | id2 | cost 
 -----+-----+-----+------
    0 |   4 |  16 |    1
@@ -17,11 +19,11 @@ NOTICE:  Deprecated signature of function pgr_astar
 (6 rows)
 
 -- q2
-SELECT * FROM pgr_AStar(
+SELECT * FROM pgr_astar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, x1, y1, x2, y2, reverse_cost
       FROM edge_table ',
     4, 1, true, true);
-NOTICE:  Deprecated signature of function pgr_astar
+NOTICE:  Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)
  seq | id1 | id2 | cost 
 -----+-----+-----+------
    0 |   4 |   3 |    1
@@ -31,3 +33,5 @@ NOTICE:  Deprecated signature of function pgr_astar
 (4 rows)
 
 -- q3
+ROLLBACK;
+ROLLBACK
diff --git a/src/astar/doc/doc-astar.queries b/src/astar/doc/doc-astar.queries
index 47f8f39..b0032bc 100644
--- a/src/astar/doc/doc-astar.queries
+++ b/src/astar/doc/doc-astar.queries
@@ -1,3 +1,5 @@
+BEGIN;
+BEGIN
 SET client_min_messages TO NOTICE;
 SET
 --q1
@@ -16,33 +18,92 @@ SELECT * FROM pgr_astar(
 --q2
 SELECT * FROM pgr_astar(
     'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
-    2, 12, heuristic := 1);
+    2, 12,
+    directed := false, heuristic := 2);
  seq | path_seq | node | edge | cost | agg_cost 
 -----+----------+------+------+------+----------
    1 |        1 |    2 |    4 |    1 |        0
-   2 |        2 |    5 |    8 |    1 |        1
-   3 |        3 |    6 |    9 |    1 |        2
-   4 |        4 |    9 |   15 |    1 |        3
+   2 |        2 |    5 |   10 |    1 |        1
+   3 |        3 |   10 |   12 |    1 |        2
+   4 |        4 |   11 |   13 |    1 |        3
    5 |        5 |   12 |   -1 |    0 |        4
 (5 rows)
 
+--q3
 SELECT * FROM pgr_astar(
     'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
-    2, 12, heuristic := 2);
- seq | path_seq | node | edge | cost | agg_cost 
------+----------+------+------+------+----------
-   1 |        1 |    2 |    4 |    1 |        0
-   2 |        2 |    5 |    8 |    1 |        1
-   3 |        3 |    6 |    9 |    1 |        2
-   4 |        4 |    9 |   15 |    1 |        3
-   5 |        5 |   12 |   -1 |    0 |        4
-(5 rows)
+    2, ARRAY[3, 12], heuristic := 2);
+ seq | path_seq | end_vid | node | edge | cost | agg_cost 
+-----+----------+---------+------+------+------+----------
+   1 |        1 |       3 |    2 |    4 |    1 |        0
+   2 |        2 |       3 |    5 |    8 |    1 |        1
+   3 |        3 |       3 |    6 |    9 |    1 |        2
+   4 |        4 |       3 |    9 |   16 |    1 |        3
+   5 |        5 |       3 |    4 |    3 |    1 |        4
+   6 |        6 |       3 |    3 |   -1 |    0 |        5
+   7 |        1 |      12 |    2 |    4 |    1 |        0
+   8 |        2 |      12 |    5 |    8 |    1 |        1
+   9 |        3 |      12 |    6 |    9 |    1 |        2
+  10 |        4 |      12 |    9 |   15 |    1 |        3
+  11 |        5 |      12 |   12 |   -1 |    0 |        4
+(11 rows)
 
---q3
+--q4
+SELECT * FROM pgr_astar(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], 12, heuristic := 0);
+ seq | path_seq | start_vid | node | edge | cost | agg_cost 
+-----+----------+-----------+------+------+------+----------
+   1 |        1 |         2 |    2 |    4 |    1 |        0
+   2 |        2 |         2 |    5 |   10 |    1 |        1
+   3 |        3 |         2 |   10 |   12 |    1 |        2
+   4 |        4 |         2 |   11 |   13 |    1 |        3
+   5 |        5 |         2 |   12 |   -1 |    0 |        4
+   6 |        1 |         7 |    7 |    6 |    1 |        0
+   7 |        2 |         7 |    8 |    7 |    1 |        1
+   8 |        3 |         7 |    5 |   10 |    1 |        2
+   9 |        4 |         7 |   10 |   12 |    1 |        3
+  10 |        5 |         7 |   11 |   13 |    1 |        4
+  11 |        6 |         7 |   12 |   -1 |    0 |        5
+(11 rows)
+
+--q5
+SELECT * FROM pgr_astar(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], ARRAY[3, 12], heuristic := 2);
+ seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost 
+-----+----------+-----------+---------+------+------+------+----------
+   1 |        1 |         2 |       3 |    2 |    4 |    1 |        0
+   2 |        2 |         2 |       3 |    5 |    8 |    1 |        1
+   3 |        3 |         2 |       3 |    6 |    9 |    1 |        2
+   4 |        4 |         2 |       3 |    9 |   16 |    1 |        3
+   5 |        5 |         2 |       3 |    4 |    3 |    1 |        4
+   6 |        6 |         2 |       3 |    3 |   -1 |    0 |        5
+   7 |        1 |         2 |      12 |    2 |    4 |    1 |        0
+   8 |        2 |         2 |      12 |    5 |    8 |    1 |        1
+   9 |        3 |         2 |      12 |    6 |    9 |    1 |        2
+  10 |        4 |         2 |      12 |    9 |   15 |    1 |        3
+  11 |        5 |         2 |      12 |   12 |   -1 |    0 |        4
+  12 |        1 |         7 |       3 |    7 |    6 |    1 |        0
+  13 |        2 |         7 |       3 |    8 |    7 |    1 |        1
+  14 |        3 |         7 |       3 |    5 |    8 |    1 |        2
+  15 |        4 |         7 |       3 |    6 |    9 |    1 |        3
+  16 |        5 |         7 |       3 |    9 |   16 |    1 |        4
+  17 |        6 |         7 |       3 |    4 |    3 |    1 |        5
+  18 |        7 |         7 |       3 |    3 |   -1 |    0 |        6
+  19 |        1 |         7 |      12 |    7 |    6 |    1 |        0
+  20 |        2 |         7 |      12 |    8 |    7 |    1 |        1
+  21 |        3 |         7 |      12 |    5 |    8 |    1 |        2
+  22 |        4 |         7 |      12 |    6 |    9 |    1 |        3
+  23 |        5 |         7 |      12 |    9 |   15 |    1 |        4
+  24 |        6 |         7 |      12 |   12 |   -1 |    0 |        5
+(24 rows)
+
+--q6
 SELECT * FROM pgr_astar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
     2, 12, true, true);
-NOTICE:  Deprecated signature of function pgr_astar
+NOTICE:  Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)
  seq | id1 | id2 | cost 
 -----+-----+-----+------
    0 |   2 |   4 |    1
@@ -52,4 +113,6 @@ NOTICE:  Deprecated signature of function pgr_astar
    4 |  12 |  -1 |    0
 (5 rows)
 
---q4
+--q7
+ROLLBACK;
+ROLLBACK
diff --git a/src/astar/doc/pgr_astar.rst b/src/astar/doc/pgr_aStar.rst
similarity index 58%
rename from src/astar/doc/pgr_astar.rst
rename to src/astar/doc/pgr_aStar.rst
index efe15be..89bb5ee 100644
--- a/src/astar/doc/pgr_astar.rst
+++ b/src/astar/doc/pgr_aStar.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -12,22 +12,21 @@
 pgr_aStar
 ===============================================================================
 
-
 Name
 -------------------------------------------------------------------------------
 
 ``pgr_aStar`` — Returns the shortest path using A* algorithm.
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
-   :target: http://www.boost.org/libs/graph
+.. figure:: images/boost-inside.jpeg
+   :target: http://www.boost.org//libs/graph/doc/astar_search.html
 
    Boost Graph Inside
 
+.. rubric:: Availability:
 
-Synopsis
--------------------------------------------------------------------------------
+* pgr_astar(one to one) 2.0.0, Signature changed 2.3.0
+* pgr_astar(other signatures) 2.4.0
 
-The A* (pronounced "A Star") algorithm is based on Dijkstra's algorithm with a heuristic that allow it to solve most shortest path problems by evaluation only a sub-set of the overall graph.
 
 
 Characteristics
@@ -39,7 +38,6 @@ The main Characteristics are:
   - Vertices of the graph are:
 
     - **positive** when it belongs to the edges_sql
-    - **negative** when it belongs to the points_sql
 
   - Values are returned when there is a path.
 
@@ -66,24 +64,29 @@ Signature Summary
 
     pgr_aStar(edges_sql, start_vid, end_vid)
     pgr_aStar(edges_sql, start_vid, end_vid, directed, heuristic, factor, epsilon)
-    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
 
 
-.. NOTE:: This signature is deprecated
+.. include:: proposed.rst
+   :start-after: begin-warning
+   :end-before: end-warning
+
 
-    .. code-block:: sql
+.. code-block:: none
 
-        pgr_aStar(sql, source integer, target integer, directed boolean, has_rcost boolean)
-        RETURNS SET OF pgr_costResult
+    pgr_aStar(edges_sql, start_vid, end_vids, directed, heuristic, factor, epsilon) -- proposed
+    pgr_aStar(edges_sql, starts_vid, end_vid, directed, heuristic, factor, epsilon) -- proposed
+    pgr_aStar(edges_sql, starts_vid, end_vids, directed, heuristic, factor, epsilon) -- proposed
+    RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
+      OR EMPTY SET
 
-    - See :ref:`pgr_costResult <type_cost_result>`
-    - See :ref:`pgr_aStar-V2.0`
 
 Signatures
 -----------------
 
-.. index:: 
-    single: pgr_aStar(Minimal Signature)
+
+.. index::
+    single: aStar(Minimal Use) -- New Signature
+
 
 Minimal Signature
 ...............................................................................
@@ -100,17 +103,19 @@ Minimal Signature
    :end-before: --q2
 
 
-.. index:: 
-    single: pgr_aStar(Complete Singature)
 
-Complete Signature
+.. index::
+    single: aStar(One to One) -- New Signature
+
+
+One to One
 ...............................................................................
 .. code-block:: none
 
     pgr_aStar(edges_sql, start_vid, end_vid, directed, heuristic, factor, epsilon)
     RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
 
-:Example: Setting a Heuristic  
+:Example: Undirected using  Heuristic 2
 
 .. literalinclude:: doc-astar.queries
    :start-after: --q2
@@ -118,16 +123,103 @@ Complete Signature
 
 
 
+.. index::
+    single: astar(One to Many) -- Proposed
+
+One to many
+.......................................
+
+.. code-block:: none
+
+    pgr_aStar(edges_sql, start_vid, end_vids, directed, heuristic, factor, epsilon) -- Proposed
+    RETURNS SET OF (seq, path_seq, end_vid, node, edge, cost, agg_cost) or EMPTY SET
+
+This signature finds the shortest path from one ``start_vid`` to each ``end_vid`` in ``end_vids``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+Using this signature, will load once the graph and perform a one to one `pgr_astar`
+where the starting vertex is fixed, and stop when all ``end_vids`` are reached.
+
+  - The result is equivalent to the union of the results of the one to one `pgr_astar`.
+  - The extra ``end_vid`` in the result is used to distinguish to which path it belongs.
+
+:Example:
+
+.. literalinclude:: doc-astar.queries
+   :start-after: --q3
+   :end-before: --q4
+
+.. index::
+    single: aStar(Many to One) -- Proposed
+
+Many to One
+.......................................
+
+.. code-block:: none
+
+    pgr_aStar(edges_sql, starts_vid, end_vid, directed, heuristic, factor, epsilon) -- Proposed
+    RETURNS SET OF (seq, path_seq, start_vid, node, edge, cost, agg_cost) or EMPTY SET
+
+This signature finds the shortest path from each ``start_vid`` in  ``start_vids`` to one ``end_vid``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+Using this signature, will load once the graph and perform several one to one `pgr_aStar`
+where the ending vertex is fixed.
+
+  - The result is the union of the results of the one to one `pgr_aStar`.
+  - The extra ``start_vid`` in the result is used to distinguish to which path it belongs.
+
+:Example:
+
+.. literalinclude:: doc-astar.queries
+   :start-after: --q4
+   :end-before: --q5
+
+
+
+.. index::
+    single: aStar(Many to Many) -- Proposed
+
+Many to Many
+.......................................
+
+.. code-block:: none
+
+    pgr_aStar(edges_sql, starts_vid, end_vids, directed, heuristic, factor, epsilon) -- Proposed
+    RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost) or EMPTY SET
+
+This signature finds the shortest path from each ``start_vid`` in  ``start_vids`` to each ``end_vid`` in ``end_vids``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+Using this signature, will load once the graph and perform several one to Many `pgr_dijkstra`
+for all ``start_vids``.
+
+  - The result is the union of the results of the one to one `pgr_dijkstra`.
+  - The extra ``start_vid`` in the result is used to distinguish to which path it belongs.
+
+The extra ``start_vid`` and ``end_vid`` in the result is used to distinguish to which path it belongs.
+
+:Example:
+
+.. literalinclude:: doc-astar.queries
+   :start-after: --q5
+   :end-before: --q6
+
+
+
+
+
 
 Description of the Signatures
 --------------------------------
 
-.. NOTE:: The following only aplies to the new signature(s)
-
 ..
     description of the edges_sql queries
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: xy_edges_sql_start
     :end-before: xy_edges_sql_end
 
@@ -155,11 +247,11 @@ Parameter        Type                   Description
                                           - 4: h(v) = sqrt(dx * dx + dy * dy)
                                           - 5: h(v) = abs(dx) + abs(dy)
 
-**factor**       ``FLOAT``              (optional). For units manipulation. :math:`factor > 0`.  Default ``1``.
-**epsilon**      ``FLOAT``              (optional). For less restricted results. :math:`factor >= 1`.  Default ``1``.
+**factor**       ``FLOAT``              (optional). For units manipulation. :math:`factor > 0`.  Default ``1``. see :ref:`astar_factor`
+**epsilon**      ``FLOAT``              (optional). For less restricted results. :math:`epsilon >= 1`.  Default ``1``.
 ================ ====================== =================================================
 
- 
+
 
 
 Description of the return values
@@ -188,63 +280,17 @@ Column           Type              Description
 ============= =========== =================================================
 
 
-About factor
--------------------------------------------------------------------------------
-
-.. rubric:: Analysis 1
-
-Working with cost/reverse_cost as length in degrees, x/y in lat/lon:
-Factor = 1   (no need to change units)
-
-.. rubric:: Analysis 2
-
-Working with cost/reverse_cost as length in meters, x/y in lat/lon:
-Factor =  would depend on the location of the points:
-
-======== ================================= ==========
-latitude  conversion                        Factor
-======== ================================= ==========
-45       1 longitude degree is  78846.81 m   78846
- 0       1 longitude degree is 111319.46 m  111319
-======== ================================= ==========
-
-.. rubric:: Analysis 3
-
-Working with cost/reverse_cost as time in seconds, x/y in lat/lon:
-Factor: would depend on the location of the points and on the average speed
-say 25m/s is the speed.
-
-======== =========================================== ==========
-latitude  conversion                                  Factor
-======== =========================================== ==========
-45       1 longitude degree is (78846.81m)/(25m/s)   3153 s
- 0       1 longitude degree is (111319.46 m)/(25m/s) 4452 s
-======== =========================================== ==========
-
-
-
-
-.. rubric:: History
-
-* Functionality added version 2.3.0
-* Renamed in version 2.0.0
-
-
-Deprecated Signature
--------------------------------------------------------------------------------
-
-:Example: Using the deprecated signature 
-
-.. literalinclude:: doc-astar.queries
-   :start-after: --q3
-   :end-before: --q4
-
-
-The queries use the :ref:`sampledata` network.
-
 
 See Also
 -------------------------------------------------------------------------------
 
+* :ref:`astar`
+* :ref:`sampledata`
 * http://www.boost.org/libs/graph/doc/astar_search.html
 * http://en.wikipedia.org/wiki/A*_search_algorithm
+
+.. rubric:: Indices and tables
+
+* :ref:`genindex`
+* :ref:`search`
+
diff --git a/src/astar/doc/pgr_aStarCost.rst b/src/astar/doc/pgr_aStarCost.rst
new file mode 100644
index 0000000..28c08cd
--- /dev/null
+++ b/src/astar/doc/pgr_aStarCost.rst
@@ -0,0 +1,239 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+.. _pgr_aStarCost:
+
+pgr_aStarCost -- proposed
+===============================================================================
+
+Name
+-------------------------------------------------------------------------------
+
+``pgr_aStarCost`` — Returns the aggregate cost shortest path using :ref:`astar` algorithm.
+
+.. figure:: images/boost-inside.jpeg
+   :target: http://www.boost.org//libs/graph/doc/astar_search.html
+
+   Boost Graph Inside
+
+.. rubric:: Availability: 2.4.0
+
+Signature Summary
+-----------------
+
+.. include:: proposed.rst
+   :start-after: begin-warning
+   :end-before: end-warning
+
+.. code-block:: none
+
+    pgr_aStarCost(edges_sql, start_vid, end_vid) -- Proposed
+    pgr_aStarCost(edges_sql, start_vid, end_vid, directed, heuristic, factor, epsilon) -- Proposed
+    pgr_aStarCost(edges_sql, start_vid, end_vids, directed, heuristic, factor, epsilon) -- Proposed
+    pgr_aStarCost(edges_sql, starts_vid, end_vid, directed, heuristic, factor, epsilon) -- Proposed
+    pgr_aStarCost(edges_sql, starts_vid, end_vids, directed, heuristic, factor, epsilon) -- Proposed
+
+    RETURNS SET OF (start_vid, end_vid, agg_cost) OR EMPTY SET
+
+
+Signatures
+-----------------
+
+
+.. index::
+    single: aStarCost(Minimal Signature) -- Proposed
+
+Minimal Signature
+...............................................................................
+
+.. code-block:: none
+
+    pgr_aStarCost(edges_sql, start_vid, end_vid)
+    RETURNS SET OF (start_vid, end_vid, agg_cost) OR EMPTY SET
+
+:Example: Using the defaults
+
+.. literalinclude:: doc-aStarCost.queries
+   :start-after: --q1
+   :end-before: --q2
+
+
+
+.. index::
+    single: aStarCost(One to One) -- Proposed
+
+One to One
+...............................................................................
+.. code-block:: none
+
+    pgr_aStarCost(edges_sql, start_vid, end_vid, directed, heuristic, factor, epsilon)
+    RETURNS SET OF (start_vid, end_vid, agg_cost) OR EMPTY SET
+
+:Example: Setting a Heuristic
+
+.. literalinclude:: doc-aStarCost.queries
+   :start-after: --q2
+   :end-before: --q3
+
+
+
+.. index::
+    single: aStarCost(One to Many) -- Proposed
+
+One to many
+.......................................
+
+.. code-block:: none
+
+    pgr_aStarCost(edges_sql, start_vid, end_vids, directed, heuristic, factor, epsilon) -- Proposed
+    RETURNS SET OF (start_vid, end_vid, agg_cost) OR EMPTY SET
+
+This signature finds a path from one ``start_vid`` to each ``end_vid`` in ``end_vids``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+Using this signature, will load once the graph and perform a one to one `pgr_astar`
+where the starting vertex is fixed, and stop when all ``end_vids`` are reached.
+
+  - The result is equivalent to the union of the results of the one to one `pgr_astar`.
+  - The extra ``end_vid`` column in the result is used to distinguish to which path it belongs.
+
+:Example:
+
+.. literalinclude:: doc-aStarCost.queries
+   :start-after: --q3
+   :end-before: --q4
+
+.. index::
+    single: aStarCost(Many to One) -- Proposed
+
+Many to One
+.......................................
+
+.. code-block:: none
+
+    pgr_aStarCost(edges_sql, starts_vid, end_vid, directed, heuristic, factor, epsilon) -- Proposed
+    RETURNS SET OF (start_vid, end_vid, agg_cost) OR EMPTY SET
+
+This signature finds the shortest path from each ``start_vid`` in  ``start_vids`` to one ``end_vid``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+Using this signature, will load once the graph and perform several one to one `pgr_aStar`
+where the ending vertex is fixed.
+
+  - The result is the union of the results of the one to one `pgr_aStar`.
+  - The extra ``start_vid`` column  in the result is used to distinguish to which path it belongs.
+
+:Example:
+
+.. literalinclude:: doc-aStarCost.queries
+   :start-after: --q4
+   :end-before: --q5
+
+
+
+.. index::
+    single: aStarCost(Many to Many) -- Proposed
+
+Many to Many
+.......................................
+
+.. code-block:: none
+
+    pgr_aStarCost(edges_sql, starts_vid, end_vids, directed, heuristic, factor, epsilon) -- Proposed
+    RETURNS SET OF (start_vid, end_vid, agg_cost) OR EMPTY SET
+
+This signature finds the shortest path from each ``start_vid`` in  ``start_vids`` to each ``end_vid`` in ``end_vids``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+Using this signature, will load once the graph and perform several one to Many `pgr_dijkstra`
+for all ``start_vids``.
+
+  - The result is the union of the results of the one to one `pgr_dijkstra`.
+  - The extra ``start_vid`` in the result is used to distinguish to which path it belongs.
+
+The extra ``start_vid`` and ``end_vid`` in the result is used to distinguish to which path it belongs.
+
+:Example:
+
+.. literalinclude:: doc-aStarCost.queries
+   :start-after: --q5
+   :end-before: --q6
+
+
+
+
+
+
+Description of the Signatures
+--------------------------------
+
+..
+    description of the edges_sql queries
+
+.. include:: pgRouting-concepts.rst
+    :start-after: xy_edges_sql_start
+    :end-before: xy_edges_sql_end
+
+
+Description of the parameters of the signatures
+.................................................
+
+================ ====================== =================================================
+Parameter        Type                   Description
+================ ====================== =================================================
+**edges_sql**    ``TEXT``               Edges SQL query as described above.
+**start_vid**    ``ANY-INTEGER``        Starting vertex identifier.
+**end_vid**      ``ANY-INTEGER``        Ending vertex identifier.
+**directed**     ``BOOLEAN``            - Optional.
+
+                                          - When ``false`` the graph is considered as Undirected.
+                                          - Default is ``true`` which considers the graph as Directed.
+
+**heuristic**    ``INTEGER``            (optional). Heuristic number. Current valid values 0~5. Default ``5``
+
+                                          - 0: h(v) = 0 (Use this value to compare with pgr_dijkstra)
+                                          - 1: h(v) abs(max(dx, dy))
+                                          - 2: h(v) abs(min(dx, dy))
+                                          - 3: h(v) = dx * dx + dy * dy
+                                          - 4: h(v) = sqrt(dx * dx + dy * dy)
+                                          - 5: h(v) = abs(dx) + abs(dy)
+
+**factor**       ``FLOAT``              (optional). For units manipulation. :math:`factor > 0`.  Default ``1``. See :ref:`astar_factor`
+**epsilon**      ``FLOAT``              (optional). For less restricted results. :math:`epsilon >= 1`.  Default ``1``.
+================ ====================== =================================================
+
+
+
+
+Description of the return values
+.................................................
+
+Returns set of ``(start_vid, end_vid, agg_cost)``
+
+============= ============= =================================================
+Column        Type          Description
+============= ============= =================================================
+**start_vid** ``BIGINT``    Identifier of the starting vertex.
+**end_vid**   ``BIGINT``    Identifier of the ending vertex.
+**agg_cost**  ``FLOAT``     Aggregate cost of the shortest path from ``start_vid`` to ``end_vid``.
+============= ============= =================================================
+
+
+
+
+See Also
+-------------------------------------------------------------------------------
+
+* :ref:`astar`.
+* :ref:`sampledata` network.
+* http://www.boost.org/libs/graph/doc/astar_search.html
+* http://en.wikipedia.org/wiki/A*_search_algorithm
diff --git a/src/astar/doc/pgr_astar-v2.rst b/src/astar/doc/pgr_astar-v2.rst
deleted file mode 100644
index 390184e..0000000
--- a/src/astar/doc/pgr_astar-v2.rst
+++ /dev/null
@@ -1,101 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_astar-V2.0:
-
-pgr_astar - Deprecated Signature
-===============================================================================
-
-.. warning:: This function signature is deprecated!!!
-
-    * That means it has been replaced by new signature(s)
-    * This signature is no longer supported, and may be removed from future versions.
-    * All code that use this function signature should be converted to use its replacement :ref:`pgr_astar`.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_astar`` — Returns the shortest path using A* algorithm.
-
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-The A* (pronounced "A Star") algorithm is based on Dijkstra's algorithm with a heuristic that allow it to solve most shortest path problems by evaluation only a sub-set of the overall graph. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows, that make up a path.
-
-.. code-block:: sql
-
-	pgr_costResult[] pgr_astar(sql text, source integer, target integer,
-                               directed boolean, has_rcost boolean);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-	.. code-block:: sql
-
-		SELECT id, source, target, cost, x1, y1, x2, y2 [,reverse_cost] FROM edge_table
-
-
-	:id: ``int4`` identifier of the edge
-	:source: ``int4`` identifier of the source vertex
-	:target: ``int4`` identifier of the target vertex
-	:cost: ``float8`` value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph.
-	:x1: ``x`` coordinate of the start point of the edge
-	:y1: ``y`` coordinate of the start point of the edge
-	:x2: ``x`` coordinate of the end point of the edge
-	:y2: ``y`` coordinate of the end point of the edge
-	:reverse_cost: (optional) the cost for the reverse traversal of the edge. This is only used when the ``directed`` and ``has_rcost`` parameters are ``true`` (see the above remark about negative costs).
-
-:source: ``int4`` id of the start point
-:target: ``int4`` id of the end point
-:directed: ``true`` if the graph is directed
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   node ID
-:id2:   edge ID (``-1`` for the last row)
-:cost:  cost to traverse from ``id1`` using ``id2``
-
-
-.. rubric:: History
-
-* Renamed in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-* Without ``reverse_cost``
-
-.. literalinclude:: doc-astar-v2.queries
-   :start-after: -- q1
-   :end-before: -- q2
-
-* With ``reverse_cost``
-
-.. literalinclude:: doc-astar-v2.queries
-   :start-after: -- q2
-   :end-before: -- q3
-
-
-The queries use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`pgr_astar`
-* :ref:`type_cost_result`
-* http://en.wikipedia.org/wiki/A*_search_algorithm
diff --git a/src/astar/sql/CMakeLists.txt b/src/astar/sql/CMakeLists.txt
index a7aba9a..ba8b329 100644
--- a/src/astar/sql/CMakeLists.txt
+++ b/src/astar/sql/CMakeLists.txt
@@ -1,12 +1,11 @@
 # Append in local scope
 LIST(APPEND PACKAGE_SQL_FILES
     ${CMAKE_CURRENT_SOURCE_DIR}/astarV2.0.sql
-    ${CMAKE_CURRENT_SOURCE_DIR}/astarOneToOne.sql
+    #${CMAKE_CURRENT_SOURCE_DIR}/astarOneToOne.sql
 
-    #for version 3.0
-    #${CMAKE_CURRENT_SOURCE_DIR}/_astar.sql
-    #${CMAKE_CURRENT_SOURCE_DIR}/astar.sql
-    #${CMAKE_CURRENT_SOURCE_DIR}/astarCost.sql
+    ${CMAKE_CURRENT_SOURCE_DIR}/_astar.sql
+    ${CMAKE_CURRENT_SOURCE_DIR}/astar.sql
+    ${CMAKE_CURRENT_SOURCE_DIR}/astarCost.sql
     )
 
 # set in parent scope
diff --git a/src/astar/sql/astarCost.sql b/src/astar/sql/astarCost.sql
index b3e57c0..719dfd1 100644
--- a/src/astar/sql/astarCost.sql
+++ b/src/astar/sql/astarCost.sql
@@ -26,6 +26,13 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
+
+
+--
+-- pgr_astarCost subfamily of functions
+--
+
+-- one to one
 CREATE OR REPLACE FUNCTION pgr_astarCost(
     edges_sql TEXT, -- XY edges sql
     BIGINT, -- start_id
@@ -49,6 +56,7 @@ LANGUAGE plpgsql VOLATILE
 COST 100
 ROWS 1000;
 
+-- one to many
 CREATE OR REPLACE FUNCTION pgr_astarCost(
     edges_sql TEXT, -- XY edges sql
     BIGINT,
@@ -72,6 +80,7 @@ LANGUAGE plpgsql VOLATILE
 COST 100
 ROWS 1000;
 
+-- many to one
 CREATE OR REPLACE FUNCTION pgr_astarCost(
     edges_sql TEXT, -- XY edges sql
     start_vids ANYARRAY,
@@ -95,6 +104,7 @@ LANGUAGE plpgsql VOLATILE
 COST 100
 ROWS 1000;
 
+-- many to many
 CREATE OR REPLACE FUNCTION pgr_astarCost(
     edges_sql TEXT, -- XY edges sql
     start_vids ANYARRAY,
diff --git a/src/astar/sql/astarV2.0.sql b/src/astar/sql/astarV2.0.sql
index b83075d..3bdc6ae 100644
--- a/src/astar/sql/astarV2.0.sql
+++ b/src/astar/sql/astarV2.0.sql
@@ -30,7 +30,7 @@ DECLARE
 has_reverse BOOLEAN;
 sql TEXT;
 BEGIN
-    RAISE NOTICE 'Deprecated signature of function pgr_astar';
+    RAISE NOTICE 'Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)';
     has_reverse =_pgr_parameter_check('astar', edges_sql, false);
     sql = edges_sql;
     IF (has_reverse != has_rcost) THEN
diff --git a/src/astar/src/CMakeLists.txt b/src/astar/src/CMakeLists.txt
index 0c576a9..61e9dc7 100644
--- a/src/astar/src/CMakeLists.txt
+++ b/src/astar/src/CMakeLists.txt
@@ -1,12 +1,8 @@
 ADD_LIBRARY(astar OBJECT
-    astarOneToOne.c
-    astarOneToOne_driver.cpp
+    many_to_many_astar.c
+    many_to_one_astar.c
+    one_to_many_astar.c
+    one_to_one_astar.c
 
-    #for version 3.0
-    #astarOneToMany.c
-    #astarOneToMany_driver.cpp
-
-    #astarManyToOne.c
-    #astarManyToMany.c
-    #astarManyToMany_driver.cpp
+    astar_many_to_many_driver.cpp
     )
diff --git a/src/astar/src/astarOneToMany_driver.cpp b/src/astar/src/astarOneToMany_driver.cpp
deleted file mode 100644
index af341c8..0000000
--- a/src/astar/src/astarOneToMany_driver.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: astarOneToOne_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: 
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <sstream>
-#include <deque>
-#include <algorithm>
-#include <vector>
-#include "./astarOneToMany_driver.h"
-
-
-#include "./../../common/src/pgr_types.h"
-#include "./pgr_astar.hpp"
-#include "./../../common/src/pgr_assert.h"
-#include "./../../common/src/pgr_alloc.hpp"
-
-template < class G >
-void
-pgr_astar(
-        G &graph,
-        std::deque< Path >  &paths,
-        int64_t source,
-        std::vector < int64_t > targets,
-        int heuristic,
-        double factor,
-        double epsilon,
-        bool only_cost = false) {
-    Pgr_astar< G > fn_astar;
-    fn_astar.astar(graph, paths, source, targets,
-            heuristic, factor, epsilon, only_cost);
-}
-
-
-/************************************************************
-  edges_sql TEXT,
-  vertex_table TEXT,
-  start_vid BIGINT,
-  end_vid BIGINT  directed BOOLEAN DEFAULT true,
- ***********************************************************/
-void do_pgr_astarOneToMany(
-        Pgr_edge_xy_t  *edges,
-        size_t total_edges,
-        int64_t start_vid,
-        int64_t  *end_vidsArr, size_t size_end_vidsArr,
-        bool directed,
-        int heuristic,
-        double factor,
-        double epsilon,
-        bool only_cost,
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** log_msg,
-        char ** err_msg,
-        bool normal) {
-    std::ostringstream err;
-    std::ostringstream log;
-    try {
-        pgassert(!(*log_msg));
-        pgassert(!(*err_msg));
-        pgassert(!(*return_tuples));
-        pgassert(*return_count == 0);
-        pgassert(total_edges != 0);
-
-
-        if (total_edges <= 1) {
-            err << "Required: more than one edge\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        std::deque< Path >paths;
-        log << "Inserting target vertices into a c++ vector structure\n";
-        std::vector< int64_t > end_vids(
-                end_vidsArr,
-                end_vidsArr + size_end_vidsArr);
-
-        graphType gType = directed? DIRECTED: UNDIRECTED;
-
-        if (directed) {
-            log << "Working with directed Graph\n";
-            pgrouting::xyDirectedGraph digraph(
-                    pgrouting::extract_vertices(edges, total_edges),
-                    gType);
-            digraph.graph_insert_data(edges, total_edges);
-            pgr_astar(digraph, paths, start_vid, end_vids,
-                    heuristic, factor, epsilon, only_cost);
-        } else {
-            log << "Working with Undirected Graph\n";
-            pgrouting::xyUndirectedGraph undigraph(
-                    pgrouting::extract_vertices(edges, total_edges),
-                    gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            pgr_astar(undigraph, paths, start_vid, end_vids,
-                    heuristic, factor, epsilon, only_cost);
-        }
-        if (!normal) {
-            for (auto &path : paths) {
-                log << "reversing path\n";
-                log << path;
-                path.reverse();
-                log << "reversed path\n";
-                log << path;
-            }
-        }
-        log << "checking reversed paths\n";
-        for (auto path : paths) {
-            log << "reversed path\n";
-            log << path;
-        }
-
-        size_t count(0);
-        count = count_tuples(paths);
-
-
-        if (count == 0) {
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            log <<
-                "No paths found\n";
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
-        (*return_count) = (collapse_paths(return_tuples, paths));
-
-        *err_msg = NULL;
-        *log_msg = strdup(log.str().c_str());
-    } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
-    } catch(...) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
-    }
-}
diff --git a/src/astar/src/astarOneToMany_driver.h b/src/astar/src/astarOneToMany_driver.h
deleted file mode 100644
index 17e8694..0000000
--- a/src/astar/src/astarOneToMany_driver.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: astarOneToMany_driver.h
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: 
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_ASTAR_SRC_ASTARONETOMANY_DRIVER_H_
-#define SRC_ASTAR_SRC_ASTARONETOMANY_DRIVER_H_
-
-#pragma once
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    /*********************************************************
-      edges_sql TEXT,
-      vertex_table TEXT,
-      start_vid BIGINT,
-      end_vid BIGINT  directed BOOLEAN DEFAULT true,
-     ********************************************************/
-    void do_pgr_astarOneToMany(
-            Pgr_edge_xy_t  *data_edges,
-            size_t total_edges,
-            int64_t start_vid,
-            int64_t  *end_vidsArr, size_t size_end_vidsArr,
-            bool directed,
-            int heuristic,
-            double factor,
-            double epsilon,
-            bool only_cost,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char ** log_msg,
-            char ** err_msg,
-            bool normal);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_ASTAR_SRC_ASTARONETOMANY_DRIVER_H_
diff --git a/src/astar/src/astarOneToOne_driver.h b/src/astar/src/astarOneToOne_driver.h
deleted file mode 100644
index f0b7f70..0000000
--- a/src/astar/src/astarOneToOne_driver.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: astarOneToOne_driver.h
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: 
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef  SRC_ASTAR_SRC_ASTARONETOONE_DRIVER_H_
-#define  SRC_ASTAR_SRC_ASTARONETOONE_DRIVER_H_
-#pragma once
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    /*********************************************************
-      edges_sql TEXT,
-      vertex_table TEXT,
-      start_vid BIGINT,
-      end_vid BIGINT  directed BOOLEAN DEFAULT true,
-     ********************************************************/
-    void do_pgr_astarOneToOne(
-            Pgr_edge_xy_t  *data_edges,
-            size_t total_edges,
-            int64_t start_vid,
-            int64_t end_vid,
-            bool directed,
-            int heuristic,
-            double factor,
-            double epsilon,
-            bool only_cost,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char ** log_msg,
-            char ** err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  //  SRC_ASTAR_SRC_ASTARONETOONE_DRIVER_H_
diff --git a/src/astar/src/astarManyToMany_driver.cpp b/src/astar/src/astar_many_to_many_driver.cpp
similarity index 58%
rename from src/astar/src/astarManyToMany_driver.cpp
rename to src/astar/src/astar_many_to_many_driver.cpp
index 7ebb3c8..5150f72 100644
--- a/src/astar/src/astarManyToMany_driver.cpp
+++ b/src/astar/src/astar_many_to_many_driver.cpp
@@ -27,40 +27,73 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
+#include "./astar_many_to_many_driver.h"
 
 #include <sstream>
 #include <deque>
 #include <algorithm>
 #include <vector>
-#include "./astarManyToMany_driver.h"
 
-// #define DEBUG
+#include "./pgr_astar.hpp"
 
+#include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
 
-#include "./pgr_astar.hpp"
-#include "./../../common/src/pgr_assert.h"
-#include "./../../common/src/pgr_alloc.hpp"
 
-template < class G >
 void
+check_parameters(
+        int heuristic,
+        double factor,
+        double epsilon) {
+    if (heuristic > 5 || heuristic < 0) {
+        ereport(ERROR,
+                (errmsg("Unknown heuristic"),
+                 errhint("Valid values: 0~5")));
+    }
+    if (factor <= 0) {
+        ereport(ERROR,
+                (errmsg("Factor value out of range"),
+                 errhint("Valid values: positive non zero")));
+    }
+    if (epsilon < 1) {
+        ereport(ERROR,
+                (errmsg("Epsilon value out of range"),
+                 errhint("Valid values: 1 or greater than 1")));
+    }
+}
+
+template < class G >
+std::deque<Path>
 pgr_astar(
         G &graph,
-        std::deque< Path >  &paths,
-        std::vector < int64_t > sources,
-        std::vector < int64_t > targets,
+        std::vector<int64_t> sources,
+        std::vector<int64_t> targets,
         int heuristic,
         double factor,
         double epsilon,
-        bool only_cost = false) {
-    Pgr_astar< G > fn_astar;
-    fn_astar.astar(graph, paths, sources, targets,
+        bool only_cost,
+        bool normal) {
+    std::sort(sources.begin(), sources.end());
+    sources.erase(
+            std::unique(sources.begin(), sources.end()),
+            sources.end());
+
+    std::sort(targets.begin(), targets.end());
+    targets.erase(
+            std::unique(targets.begin(), targets.end()),
+            targets.end());
+
+    pgrouting::algorithms::Pgr_astar< G > fn_astar;
+    auto paths = fn_astar.astar(graph, sources, targets,
             heuristic, factor, epsilon, only_cost);
+
+    if (!normal) {
+        for (auto &path : paths) {
+            path.reverse();
+        }
+    }
+    return paths;
 }
 
 
@@ -71,8 +104,7 @@ pgr_astar(
   end_vid BIGINT  directed BOOLEAN DEFAULT true,
  ***********************************************************/
 void do_pgr_astarManyToMany(
-        Pgr_edge_xy_t  *edges,
-        size_t total_edges,
+        Pgr_edge_xy_t  *edges, size_t total_edges,
         int64_t  *start_vidsArr, size_t size_start_vidsArr,
         int64_t  *end_vidsArr, size_t size_end_vidsArr,
         bool directed,
@@ -80,12 +112,15 @@ void do_pgr_astarManyToMany(
         double factor,
         double epsilon,
         bool only_cost,
+        bool normal,
         General_path_element_t **return_tuples,
         size_t *return_count,
-        char ** log_msg,
-        char ** err_msg) {
-    std::ostringstream err;
+        char** log_msg,
+        char** notice_msg,
+        char** err_msg) {
     std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
     try {
         pgassert(!(*log_msg));
         pgassert(!(*err_msg));
@@ -94,15 +129,6 @@ void do_pgr_astarManyToMany(
         pgassert(total_edges != 0);
 
 
-        if (total_edges <= 1) {
-            err << "Required: more than one edge\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        std::deque< Path >paths;
         log << "Inserting target vertices into a c++ vector structure\n";
         std::vector< int64_t > end_vids(
                 end_vidsArr,
@@ -113,22 +139,23 @@ void do_pgr_astarManyToMany(
 
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
+        std::deque< Path >paths;
         if (directed) {
             log << "Working with directed Graph\n";
             pgrouting::xyDirectedGraph digraph(
                     pgrouting::extract_vertices(edges, total_edges),
                     gType);
-            digraph.graph_insert_data(edges, total_edges);
-            pgr_astar(digraph, paths, start_vids, end_vids,
-                    heuristic, factor, epsilon, only_cost);
+            digraph.insert_edges(edges, total_edges);
+            paths = pgr_astar(digraph, start_vids, end_vids,
+                    heuristic, factor, epsilon, only_cost, normal);
         } else {
             log << "Working with Undirected Graph\n";
             pgrouting::xyUndirectedGraph undigraph(
                     pgrouting::extract_vertices(edges, total_edges),
                     gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            pgr_astar(undigraph, paths, start_vids, end_vids,
-                    heuristic, factor, epsilon, only_cost);
+            undigraph.insert_edges(edges, total_edges);
+            paths = pgr_astar(undigraph, start_vids, end_vids,
+                    heuristic, factor, epsilon, only_cost, normal);
         }
 
         size_t count(0);
@@ -140,7 +167,7 @@ void do_pgr_astarManyToMany(
             (*return_count) = 0;
             log <<
                 "No paths found\n";
-            *err_msg = strdup(log.str().c_str());
+            *log_msg = pgr_msg(log.str().c_str());
             return;
         }
 
@@ -148,25 +175,30 @@ void do_pgr_astarManyToMany(
         log << "Converting a set of paths into the tuples\n";
         (*return_count) = (collapse_paths(return_tuples, paths));
 
-        *err_msg = NULL;
-        *log_msg = strdup(log.str().c_str());
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
     } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     } catch(...) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
+
diff --git a/src/astar/src/astarManyToMany_driver.h b/src/astar/src/astar_many_to_many_driver.h
similarity index 83%
rename from src/astar/src/astarManyToMany_driver.h
rename to src/astar/src/astar_many_to_many_driver.h
index 7f34268..d028fb1 100644
--- a/src/astar/src/astarManyToMany_driver.h
+++ b/src/astar/src/astar_many_to_many_driver.h
@@ -26,9 +26,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_ASTAR_SRC_ASTARMANYTOMANY_DRIVER_H_
-#define SRC_ASTAR_SRC_ASTARMANYTOMANY_DRIVER_H_
-
+#ifndef SRC_ASTAR_SRC_ASTAR_MANY_TO_MANY_DRIVER_H_
+#define SRC_ASTAR_SRC_ASTAR_MANY_TO_MANY_DRIVER_H_
 #pragma once
 
 #include "./../../common/src/pgr_types.h"
@@ -37,6 +36,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 extern "C" {
 #endif
 
+    void check_parameters(
+            int heuristic,
+            double factor,
+            double epsilon);
+
     /*********************************************************
       edges_sql TEXT,
       vertex_table TEXT,
@@ -53,14 +57,16 @@ extern "C" {
             double factor,
             double epsilon,
             bool only_cost,
+            bool normal,
             General_path_element_t **return_tuples,
             size_t *return_count,
-            char ** log_msg,
-            char ** err_msg);
+            char** log_msg,
+            char** notice_msg,
+            char** err_msg);
 
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  // SRC_ASTAR_SRC_ASTARMANYTOMANY_DRIVER_H_
+#endif  // SRC_ASTAR_SRC_ASTAR_MANY_TO_MANY_DRIVER_H_
diff --git a/src/astar/src/astarManyToMany.c b/src/astar/src/many_to_many_astar.c
similarity index 57%
rename from src/astar/src/astarManyToMany.c
rename to src/astar/src/many_to_many_astar.c
index c73bc08..2449bd4 100644
--- a/src/astar/src/astarManyToMany.c
+++ b/src/astar/src/many_to_many_astar.c
@@ -27,35 +27,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
 
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 
-#include "./astarManyToMany_driver.h"
+#include "./astar_many_to_many_driver.h"
 
+PGDLLEXPORT Datum astarManyToMany(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(astarManyToMany);
-PGDLLEXPORT Datum
-astarManyToMany(PG_FUNCTION_ARGS);
 
 
 static
 void
 process(char* edges_sql,
-        int64_t *start_vidsArr, size_t size_start_vidsArr,
-        int64_t *end_vidsArr, size_t size_end_vidsArr,
+        ArrayType *starts,
+        ArrayType *ends,
         bool directed,
         int heuristic,
         double factor,
@@ -63,31 +55,20 @@ process(char* edges_sql,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    if (heuristic > 5 || heuristic < 0) {
-        free(start_vidsArr);
-        free(end_vidsArr);
-        ereport(ERROR,
-                (errmsg("Unknown heuristic"),
-                 errhint("Valid values: 0~5")));
-    }
-    if (factor <= 0) {
-        free(start_vidsArr);
-        free(end_vidsArr);
-        ereport(ERROR,
-                (errmsg("Factor value out of range"),
-                 errhint("Valid values: positive non zero")));
-    }
-    if (epsilon < 1) {
-        free(start_vidsArr);
-        free(end_vidsArr);
-        ereport(ERROR,
-                (errmsg("Epsilon value out of range"),
-                 errhint("Valid values: 1 or greater than 1")));
-    }
+    check_parameters(heuristic, factor, epsilon);
 
+    pgr_SPI_connect();
 
+    int64_t* start_vidsArr = NULL;
+    size_t size_start_vidsArr = 0;
+    start_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_start_vidsArr, starts);
+
+    int64_t* end_vidsArr = NULL;
+    size_t size_end_vidsArr = 0;
+    end_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_end_vidsArr, ends);
 
-    pgr_SPI_connect();
 
     Pgr_edge_xy_t *edges = NULL;
     size_t total_edges = 0;
@@ -103,12 +84,12 @@ process(char* edges_sql,
     }
 
     PGR_DBG("Starting processing");
-    char *err_msg = NULL;
     char *log_msg = NULL;
+    char *notice_msg = NULL;
+    char *err_msg = NULL;
     clock_t start_t = clock();
     do_pgr_astarManyToMany(
-            edges,
-            total_edges,
+            edges, total_edges,
             start_vidsArr, size_start_vidsArr,
             end_vidsArr, size_end_vidsArr,
             directed,
@@ -116,34 +97,46 @@ process(char* edges_sql,
             factor,
             epsilon,
             only_cost,
-            result_tuples,
-            result_count,
+            true,
+            result_tuples, result_count,
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing pgr_astar(many to many)", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
-    if (log_msg) free(log_msg);
-
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+
+    if (only_cost) {
+        time_msg("processing pgr_astarCost(many to many)", start_t, clock());
+    } else {
+        time_msg("processing pgr_astar(many to many)", start_t, clock());
     }
 
-    pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (start_vidsArr) pfree(start_vidsArr);
+    if (end_vidsArr) pfree(end_vidsArr);
+
     pgr_SPI_finish();
 }
 
 PGDLLEXPORT Datum
 astarManyToMany(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t            call_cntr;
-    uint32_t            max_calls;
     TupleDesc           tuple_desc;
 
-    General_path_element_t  *result_tuples = 0;
+    /**********************************************************************/
+    General_path_element_t  *result_tuples = NULL;
     size_t result_count = 0;
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -163,20 +156,10 @@ astarManyToMany(PG_FUNCTION_ARGS) {
 
          **********************************************************************/
 
-        int64_t* start_vidsArr;
-        size_t size_start_vidsArr;
-        start_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_start_vidsArr, PG_GETARG_ARRAYTYPE_P(1));
-
-        int64_t* end_vidsArr;
-        size_t size_end_vidsArr;
-        end_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_end_vidsArr, PG_GETARG_ARRAYTYPE_P(2));
-
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                start_vidsArr, size_start_vidsArr,
-                end_vidsArr, size_end_vidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_ARRAYTYPE_P(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_INT32(4),
                 PG_GETARG_FLOAT8(5),
@@ -185,13 +168,16 @@ astarManyToMany(PG_FUNCTION_ARGS) {
                 &result_tuples,
                 &result_count);
 
-        free(end_vidsArr);
-        free(start_vidsArr);
-
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->max_calls = (uint32_t) result_count;
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -202,55 +188,51 @@ astarManyToMany(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
         /*********************************************************************
-           OUT seq INTEGER,
-           OUT path_seq INTEGER,
-           OUT start_vid BIGINT,
-           OUT end_vid BIGINT,
-           OUT node BIGINT,
-           OUT edge BIGINT,
-           OUT cost FLOAT,
-           OUT agg_cost FLOAT
+          OUT seq INTEGER,
+          OUT path_seq INTEGER,
+          OUT start_vid BIGINT,
+          OUT end_vid BIGINT,
+          OUT node BIGINT,
+          OUT edge BIGINT,
+          OUT cost FLOAT,
+          OUT agg_cost FLOAT
          **********************************************************************/
 
 
-        values = palloc(8 * sizeof(Datum));
-        nulls = palloc(8 * sizeof(bool));
+        size_t numb = 8;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
         size_t i;
-        for (i = 0; i < 8; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
 
 
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[5] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[7] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].end_id);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[5] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[7] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
 
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/src/astar/src/astarManyToOne.c b/src/astar/src/many_to_one_astar.c
similarity index 58%
rename from src/astar/src/astarManyToOne.c
rename to src/astar/src/many_to_one_astar.c
index 913a4b2..08cfebf 100644
--- a/src/astar/src/astarManyToOne.c
+++ b/src/astar/src/many_to_one_astar.c
@@ -27,34 +27,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
 
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 
-#include "./astarOneToMany_driver.h"
+#include "./astar_many_to_many_driver.h"
 
+PGDLLEXPORT Datum astarManyToOne(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(astarManyToOne);
-PGDLLEXPORT Datum
-astarManyToOne(PG_FUNCTION_ARGS);
 
 
 static
 void
 process(char* edges_sql,
-        int64_t *start_vidsArr, size_t size_start_vidsArr,
+        ArrayType *starts,
         int64_t end_vid,
         bool directed,
         int heuristic,
@@ -63,29 +55,13 @@ process(char* edges_sql,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    if (heuristic > 5 || heuristic < 0) {
-        free(start_vidsArr);
-        ereport(ERROR,
-                (errmsg("Unknown heuristic"),
-                 errhint("Valid values: 0~5")));
-    }
-    if (factor <= 0) {
-        free(start_vidsArr);
-        ereport(ERROR,
-                (errmsg("Factor value out of range"),
-                 errhint("Valid values: positive non zero")));
-    }
-    if (epsilon < 1) {
-        free(start_vidsArr);
-        ereport(ERROR,
-                (errmsg("Epsilon value out of range"),
-                 errhint("Valid values: 1 or greater than 1")));
-    }
-
-
+    check_parameters(heuristic, factor, epsilon);
 
     pgr_SPI_connect();
 
+    size_t size_start_vidsArr = 0;
+    int64_t* start_vidsArr = pgr_get_bigIntArray(&size_start_vidsArr, starts);
+
     Pgr_edge_xy_t *edges = NULL;
     size_t total_edges = 0;
 
@@ -100,45 +76,53 @@ process(char* edges_sql,
     }
 
     PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
     clock_t start_t = clock();
-    do_pgr_astarOneToMany(
-            edges,
-            total_edges,
-            end_vid,
+    do_pgr_astarManyToMany(
+            edges, total_edges,
+            &end_vid, 1,
             start_vidsArr, size_start_vidsArr,
             directed,
             heuristic,
             factor,
             epsilon,
             only_cost,
+            false,
             result_tuples,
             result_count,
             &log_msg,
-            &err_msg,
-            false);  // not normal
-    time_msg(" processing pgr_astar(many to one)", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
-    if (log_msg) free(log_msg);
-
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        free(start_vidsArr);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+            &notice_msg,
+            &err_msg);
+
+    if (only_cost) {
+        time_msg("processing pgr_astarCost(one to many)", start_t, clock());
+    } else {
+        time_msg("processing pgr_astar(one to many)", start_t, clock());
+    }
+
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
     }
 
-    pfree(edges);
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (start_vidsArr) pfree(start_vidsArr);
+
     pgr_SPI_finish();
 }
 
 PGDLLEXPORT Datum
 astarManyToOne(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t            call_cntr;
-    uint32_t            max_calls;
     TupleDesc           tuple_desc;
 
     General_path_element_t  *result_tuples = 0;
@@ -151,24 +135,19 @@ astarManyToOne(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************
-           edges_sql TEXT,
-           start_vid BIGINT,
-           end_vids ARRAY[ANY_INTEGER], -- anyarray
-           directed BOOLEAN DEFAULT true,
-           heuristic INTEGER DEFAULT 0,
-           factor FLOAT DEFAULT 1.0,
-           epsilon FLOAT DEFAULT 1.0,
+          edges_sql TEXT,
+          start_vid BIGINT,
+          end_vids ARRAY[ANY_INTEGER], -- anyarray
+          directed BOOLEAN DEFAULT true,
+          heuristic INTEGER DEFAULT 0,
+          factor FLOAT DEFAULT 1.0,
+          epsilon FLOAT DEFAULT 1.0,
 
          **********************************************************************/
 
-        int64_t* start_vidsArr;
-        size_t size_start_vidsArr;
-        start_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_start_vidsArr, PG_GETARG_ARRAYTYPE_P(1));
-
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                start_vidsArr, size_start_vidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
                 PG_GETARG_INT64(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_INT32(4),
@@ -178,12 +157,16 @@ astarManyToOne(PG_FUNCTION_ARGS) {
                 &result_tuples,
                 &result_count);
 
-        free(start_vidsArr);
 
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -194,25 +177,23 @@ astarManyToOne(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
         /*********************************************************************
-           OUT seq INTEGER,
-           OUT path_seq INTEGER,
-           OUT end_vid BIGINT,
-           OUT node BIGINT,
-           OUT edge BIGINT,
-           OUT cost FLOAT,
-           OUT agg_cost FLOAT
+          OUT seq INTEGER,
+          OUT path_seq INTEGER,
+          OUT end_vid BIGINT,
+          OUT node BIGINT,
+          OUT edge BIGINT,
+          OUT cost FLOAT,
+          OUT agg_cost FLOAT
          **********************************************************************/
 
 
@@ -225,20 +206,19 @@ astarManyToOne(PG_FUNCTION_ARGS) {
         }
 
 
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
 
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        if (result_tuples) free(result_tuples);
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/astar/src/astarOneToMany.c b/src/astar/src/one_to_many_astar.c
similarity index 58%
rename from src/astar/src/astarOneToMany.c
rename to src/astar/src/one_to_many_astar.c
index 88f0c8c..fe298b4 100644
--- a/src/astar/src/astarOneToMany.c
+++ b/src/astar/src/one_to_many_astar.c
@@ -27,35 +27,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
 
+#include "./../../common/src/pgr_types.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
-#include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
+#include "./astar_many_to_many_driver.h"
 
-#include "./astarOneToMany_driver.h"
-
+PGDLLEXPORT Datum astarOneToMany(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(astarOneToMany);
-PGDLLEXPORT Datum
-astarOneToMany(PG_FUNCTION_ARGS);
-
 
 static
 void
 process(char* edges_sql,
         int64_t start_vid,
-        int64_t *end_vidsArr, size_t size_end_vidsArr,
+        ArrayType *ends,
         bool directed,
         int heuristic,
         double factor,
@@ -63,26 +53,10 @@ process(char* edges_sql,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    if (heuristic > 5 || heuristic < 0) {
-        free(end_vidsArr);
-        ereport(ERROR,
-                (errmsg("Unknown heuristic"),
-                 errhint("Valid values: 0~5")));
-    }
-    if (factor <= 0) {
-        free(end_vidsArr);
-        ereport(ERROR,
-                (errmsg("Factor value out of range"),
-                 errhint("Valid values: positive non zero")));
-    }
-    if (epsilon < 1) {
-        free(end_vidsArr);
-        ereport(ERROR,
-                (errmsg("Epsilon value out of range"),
-                 errhint("Valid values: 1 or greater than 1")));
-    }
-
+    check_parameters(heuristic, factor, epsilon);
 
+    size_t size_end_vidsArr = 0;
+    int64_t* end_vidsArr = pgr_get_bigIntArray(&size_end_vidsArr, ends);
 
     pgr_SPI_connect();
 
@@ -100,44 +74,53 @@ process(char* edges_sql,
     }
 
     PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
     clock_t start_t = clock();
-    do_pgr_astarOneToMany(
-            edges,
-            total_edges,
-            start_vid,
+    do_pgr_astarManyToMany(
+            edges, total_edges,
+            &start_vid, 1,
             end_vidsArr, size_end_vidsArr,
             directed,
             heuristic,
             factor,
             epsilon,
             only_cost,
+            true,
             result_tuples,
             result_count,
             &log_msg,
-            &err_msg,
-            true);
-    time_msg(" processing pgr_astar(one to Many)", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
-    if (log_msg) free(log_msg);
-
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+            &notice_msg,
+            &err_msg);
+
+    if (only_cost) {
+        time_msg("processing pgr_astarCost(one to many)", start_t, clock());
+    } else {
+        time_msg("processing pgr_astar(one to many)", start_t, clock());
     }
 
-    pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (end_vidsArr) pfree(end_vidsArr);
+
     pgr_SPI_finish();
 }
 
 PGDLLEXPORT Datum
 astarOneToMany(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t            call_cntr;
-    uint32_t            max_calls;
     TupleDesc           tuple_desc;
 
     General_path_element_t  *result_tuples = 0;
@@ -150,25 +133,21 @@ astarOneToMany(PG_FUNCTION_ARGS) {
 
 
         /*****************************************************************
-           edges_sql TEXT,
-           start_vid BIGINT,
-           end_vids ARRAY[ANY_INTEGER], -- anyarray
-           directed BOOLEAN DEFAULT true,
-           heuristic INTEGER DEFAULT 0,
-           factor FLOAT DEFAULT 1.0,
-           epsilon FLOAT DEFAULT 1.0,
+          edges_sql TEXT,
+          start_vid BIGINT,
+          end_vids ARRAY[ANY_INTEGER], -- anyarray
+          directed BOOLEAN DEFAULT true,
+          heuristic INTEGER DEFAULT 0,
+          factor FLOAT DEFAULT 1.0,
+          epsilon FLOAT DEFAULT 1.0,
 
          ****************************************************************/
 
-        int64_t* end_vidsArr;
-        size_t size_end_vidsArr;
-        end_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_end_vidsArr, PG_GETARG_ARRAYTYPE_P(2));
 
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
-                end_vidsArr, size_end_vidsArr,
+                PG_GETARG_ARRAYTYPE_P(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_INT32(4),
                 PG_GETARG_FLOAT8(5),
@@ -177,12 +156,17 @@ astarOneToMany(PG_FUNCTION_ARGS) {
                 &result_tuples,
                 &result_count);
 
-        free(end_vidsArr);
 
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
+
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -193,25 +177,23 @@ astarOneToMany(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
         /*********************************************************************
-           OUT seq INTEGER,
-           OUT path_seq INTEGER,
-           OUT end_vid BIGINT,
-           OUT node BIGINT,
-           OUT edge BIGINT,
-           OUT cost FLOAT,
-           OUT agg_cost FLOAT
+          OUT seq INTEGER,
+          OUT path_seq INTEGER,
+          OUT end_vid BIGINT,
+          OUT node BIGINT,
+          OUT edge BIGINT,
+          OUT cost FLOAT,
+          OUT agg_cost FLOAT
          *********************************************************************/
 
 
@@ -224,20 +206,19 @@ astarOneToMany(PG_FUNCTION_ARGS) {
         }
 
 
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].end_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
 
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        if (result_tuples) free(result_tuples);
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/astar/src/astarOneToOne.c b/src/astar/src/one_to_one_astar.c
similarity index 64%
rename from src/astar/src/astarOneToOne.c
rename to src/astar/src/one_to_one_astar.c
index a3c66ed..213fb95 100644
--- a/src/astar/src/astarOneToOne.c
+++ b/src/astar/src/one_to_one_astar.c
@@ -27,25 +27,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
 
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 
-#include "./astarOneToOne_driver.h"
+#include "./astar_many_to_many_driver.h"
 
 PGDLLEXPORT Datum astarOneToOne(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(astarOneToOne);
 
 
 static
@@ -60,23 +54,7 @@ process(char* edges_sql,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    if (heuristic > 5 || heuristic < 0) {
-        ereport(ERROR,
-                (errmsg("Unknown heuristic"),
-                 errhint("Valid values: 0~5")));
-    }
-    if (factor <= 0) {
-        ereport(ERROR,
-                (errmsg("Factor value out of range"),
-                 errhint("Valid values: positive non zero")));
-    }
-    if (epsilon < 1) {
-        ereport(ERROR,
-                (errmsg("Epsilon value out of range"),
-                 errhint("Valid values: 1 or greater than 1")));
-    }
-
-
+    check_parameters(heuristic, factor, epsilon);
 
     pgr_SPI_connect();
 
@@ -96,45 +74,51 @@ process(char* edges_sql,
     }
 
     PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
     clock_t start_t = clock();
-    do_pgr_astarOneToOne(
-            edges,
-            total_edges,
-            start_vid,
-            end_vid,
+    do_pgr_astarManyToMany(
+            edges, total_edges,
+            &start_vid, 1,
+            &end_vid, 1,
             directed,
             heuristic,
             factor,
             epsilon,
             only_cost,
+            true,
             result_tuples,
             result_count,
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing pgr_astar(one to one)", start_t, clock());
 
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
-    if (log_msg) free(log_msg);
+    if (only_cost) {
+        time_msg("processing pgr_astarCost(one to one)", start_t, clock());
+    } else {
+        time_msg("processing pgr_astar(one to one)", start_t, clock());
+    }
 
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
     }
 
-    pfree(edges);
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+
     pgr_SPI_finish();
 }
 
-PG_FUNCTION_INFO_V1(astarOneToOne);
 PGDLLEXPORT Datum
 astarOneToOne(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t            call_cntr;
-    uint32_t            max_calls;
     TupleDesc           tuple_desc;
 
     General_path_element_t  *result_tuples = 0;
@@ -147,19 +131,19 @@ astarOneToOne(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************
-           edges_sql TEXT,
-           start_vid BIGINT,
-           end_vid BIGINT,
-           directed BOOLEAN DEFAULT true,
-           heuristic INTEGER DEFAULT 0,
-           factor FLOAT DEFAULT 1.0,
-           epsilon FLOAT DEFAULT 1.0,
+          edges_sql TEXT,
+          start_vid BIGINT,
+          end_vid BIGINT,
+          directed BOOLEAN DEFAULT true,
+          heuristic INTEGER DEFAULT 0,
+          factor FLOAT DEFAULT 1.0,
+          epsilon FLOAT DEFAULT 1.0,
 
          **********************************************************************/
 
         PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
                 PG_GETARG_INT64(2),
                 PG_GETARG_BOOL(3),
@@ -171,9 +155,14 @@ astarOneToOne(PG_FUNCTION_ARGS) {
                 &result_count);
 
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -184,24 +173,22 @@ astarOneToOne(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
         /**********************************************************************
-           OUT seq INTEGER,
-           OUT path_seq INTEGER,
-           OUT node BIGINT,
-           OUT edge BIGINT,
-           OUT cost FLOAT,
-           OUT agg_cost FLOAT
+          OUT seq INTEGER,
+          OUT path_seq INTEGER,
+          OUT node BIGINT,
+          OUT edge BIGINT,
+          OUT cost FLOAT,
+          OUT agg_cost FLOAT
          *********************************************************************/
 
 
@@ -213,22 +200,18 @@ astarOneToOne(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[4] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
 
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/astar/src/pgr_astar.hpp b/src/astar/src/pgr_astar.hpp
index 92159a4..0f0d5bd 100644
--- a/src/astar/src/pgr_astar.hpp
+++ b/src/astar/src/pgr_astar.hpp
@@ -24,14 +24,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-// Include C header first for windows build issue
-
-#if 0
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-#endif
+#ifndef SRC_ASTAR_SRC_PGR_ASTAR_HPP_
+#define SRC_ASTAR_SRC_PGR_ASTAR_HPP_
+#pragma once
 
 #include <boost/config.hpp>
 #include <boost/graph/graph_traits.hpp>
@@ -50,9 +45,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./../../common/src/basePath_SSEC.hpp"
 #include "./../../common/src/pgr_base_graph.hpp"
 
-
-
-
+namespace pgrouting {
+namespace algorithms {
 
 template < class G >
 class Pgr_astar {
@@ -61,93 +55,117 @@ class Pgr_astar {
      typedef typename G::B_G B_G;
 
 
+     void clear() {
+         predecessors.clear();
+         distances.clear();
+     }
+
      //! @name Astar
      //@{
      //! one to one
-     void astar(
+     //! astar 1 to 1
+     Path astar(
              G &graph,
-             Path &path,
              int64_t start_vertex,
              int64_t end_vertex,
              int heuristic,
              double factor,
              double epsilon,
-             bool only_cost = false);
+             bool only_cost) {
+         clear();
+
+         predecessors.resize(graph.num_vertices());
+         distances.resize(graph.num_vertices());
+
+         if (!graph.has_vertex(start_vertex)
+                 || !graph.has_vertex(end_vertex)) {
+             return Path(start_vertex, end_vertex);
+         }
 
-     //! one to Many
-     void astar(
+         auto v_source(graph.get_V(start_vertex));
+         auto v_target(graph.get_V(end_vertex));
+
+         // perform the algorithm
+         astar_1_to_1(graph, v_source, v_target, heuristic, factor, epsilon);
+
+         return  Path(graph,
+                 v_source, v_target,
+                 predecessors, distances,
+                 only_cost);
+     }
+
+     //! astar 1 to many
+     std::deque<Path> astar(
              G &graph,
-             std::deque< Path > &paths,
              int64_t start_vertex,
-             const std::vector< int64_t > &end_vertex,
+             std::vector<int64_t> end_vertex,
              int heuristic,
              double factor,
              double epsilon,
-             bool only_cost = false);
+             bool only_cost) {
+         clear();
 
-     //! Many to Many
-     void astar(
-             G &graph,
-             std::deque< Path > &paths,
-             std::vector< int64_t > start_vertex,
-             const std::vector< int64_t > &end_vertex,
-             int heuristic,
-             double factor,
-             double epsilon,
-             bool only_cost = false);
+         predecessors.resize(graph.num_vertices());
+         distances.resize(graph.num_vertices());
 
-     //@}
+         if (!graph.has_vertex(start_vertex)) return std::deque<Path>();
+         auto v_source(graph.get_V(start_vertex));
 
- private:
-     //! Call to Astar  1 source to 1 target
-     bool astar_1_to_1(
-             G &graph,
-             V source,
-             V target,
-             int heuristic,
-             double factor,
-             double epsilon);
+         std::vector<V> v_targets;
+         for (const auto &vertex : end_vertex) {
+             if (graph.has_vertex(vertex)) {
+                 v_targets.push_back(graph.get_V(vertex));
+             }
+         }
 
-     //! Call to astar  1 source to many targets
-     bool astar_1_to_many(
-             G &graph,
-             V source,
-             const std::vector< V > &targets,
-             int heuristic,
-             double factor,
-             double epsilon);
+         astar_1_to_many(graph,
+                 v_source,
+                 v_targets,
+                 heuristic,
+                 factor,
+                 epsilon);
 
+         auto paths = get_paths(graph, v_source, v_targets, only_cost);
 
+         std::stable_sort(paths.begin(), paths.end(),
+                 [](const Path &e1, const Path &e2)->bool {
+                 return e1.end_id() < e2.end_id();
+                 });
 
-     void clear() {
-         predecessors.clear();
-         distances.clear();
+         return paths;
      }
 
-     void get_path(
-             const G &graph,
-             V source,
-             V target,
-             Path &path) const;
-     void get_cost(
-             const G &graph,
-             V source,
-             V target,
-             Path &path) const;
+     // preparation for many to many
+     std::deque<Path> astar(
+             G &graph,
+             std::vector<int64_t> start_vertex,
+             std::vector<int64_t> end_vertex,
+             int heuristic,
+             double factor,
+             double epsilon,
+             bool only_cost) {
+         std::deque<Path> paths;
+         for (const auto &start : start_vertex) {
+             auto r_paths = astar(graph, start, end_vertex,
+                     heuristic, factor, epsilon, only_cost);
+              paths.insert(paths.begin(), r_paths.begin(), r_paths.end());
+         }
+
+         std::sort(paths.begin(), paths.end(),
+                 [](const Path &e1, const Path &e2)->bool {
+                 return e1.end_id() < e2.end_id();
+                 });
+         std::stable_sort(paths.begin(), paths.end(),
+                 [](const Path &e1, const Path &e2)->bool {
+                 return e1.start_id() < e2.start_id();
+                 });
+         return paths;
+     }
+     //@}
 
-     // used when multiple goals
-     void get_path(
-             const G &graph,
-             std::deque< Path > &paths,
-             V source,
-             std::vector< V > &targets) const;
 
-     void get_cost(
-             const G &graph,
-             std::deque< Path > &paths,
-             V source,
-             std::vector< V > &targets) const;
 
+ private:
      //! @name members;
      //@{
      struct found_goals{};  //!< exception for termination
@@ -178,18 +196,18 @@ class Pgr_astar {
           double operator()(V u) {
               if (m_heuristic == 0) return 0;
               if (m_goals.empty()) return 0;
-              double best_h(std::numeric_limits<double>::max());
+              double best_h((std::numeric_limits<double>::max)());
               for (auto goal : m_goals) {
-                  double current(std::numeric_limits<double>::max());
+                  double current((std::numeric_limits<double>::max)());
                   double dx = m_g[goal].x() - m_g[u].x();
                   double dy = m_g[goal].y() - m_g[u].y();
                   switch (m_heuristic) {
                       case 0:
                           current = 0;
                       case 1:
-                          current = std::fabs(std::max(dx, dy)) * m_factor;
+                          current = std::fabs((std::max)(dx, dy)) * m_factor;
                       case 2:
-                          current = std::fabs(std::min(dx, dy)) * m_factor;
+                          current = std::fabs((std::min)(dx, dy)) * m_factor;
                       case 3:
                           current = (dx * dx + dy * dy) * m_factor * m_factor;
                       case 4:
@@ -253,315 +271,89 @@ class Pgr_astar {
       private:
           std::set< V > m_goals;
      };
-};  // pgr_astar
 
-/******************** IMPLEMENTTION ******************/
+     /******************** IMPLEMENTTION ******************/
 
-//! astar 1 to 1
-template < class G >
-void
-Pgr_astar< G >::astar(
-        G &graph,
-        Path &path,
-        int64_t start_vertex,
-        int64_t end_vertex,
-        int heuristic,
-        double factor,
-        double epsilon,
-        bool only_cost) {
-    clear();
-
-    // adjust predecessors and distances vectors
-    predecessors.resize(graph.num_vertices());
-    distances.resize(graph.num_vertices());
-
-
-    if (!graph.has_vertex(start_vertex)
-            || !graph.has_vertex(end_vertex)) {
-        path.clear();
-        return;
-    }
-
-    // get the graphs source and target
-    auto v_source(graph.get_V(start_vertex));
-    auto v_target(graph.get_V(end_vertex));
-
-    // perform the algorithm
-    astar_1_to_1(graph, v_source, v_target, heuristic, factor, epsilon);
-
-    // get the results
-    if (only_cost) {
-        get_cost(graph, v_source, v_target, path);
-    } else {
-        get_path(graph, v_source, v_target, path);
-    }
-    return;
-}
-
-//! astar 1 to many
-template < class G >
-void
-Pgr_astar< G >::astar(
-        G &graph,
-        std::deque< Path > &paths,
-        int64_t start_vertex,
-        const std::vector< int64_t > &end_vertex,
-        int heuristic,
-        double factor,
-        double epsilon,
-        bool only_cost) {
-    clear();
-
-    // adjust predecessors and distances vectors
-    predecessors.resize(graph.num_vertices());
-    distances.resize(graph.num_vertices());
-
-    // get the graphs source and targets
-    if (!graph.has_vertex(start_vertex)) return;
-    auto v_source(graph.get_V(start_vertex));
-
-    std::set< V > s_v_targets;
-    for (const auto &vertex : end_vertex) {
-        if (graph.has_vertex(vertex)) {
-            s_v_targets.insert(graph.get_V(vertex));
-        }
-    }
-
-    std::vector< V > v_targets(s_v_targets.begin(), s_v_targets.end());
-    // perform the algorithm
-    astar_1_to_many(graph, v_source, v_targets, heuristic, factor, epsilon);
-
-    // get the results // route id are the targets
-    if (only_cost) {
-        get_cost(graph, paths, v_source, v_targets);
-    } else {
-        get_path(graph, paths, v_source, v_targets);
-    }
-
-    std::stable_sort(paths.begin(), paths.end(),
-            [](const Path &e1, const Path &e2)->bool {
-            return e1.end_id() < e2.end_id();
-            });
-
-    return;
-}
-
-// preparation for many to many
-template < class G >
-void
-Pgr_astar< G >::astar(
-        G &graph, std::deque< Path > &paths,
-        std::vector< int64_t > start_vertex,
-        const std::vector< int64_t > &end_vertex,
-        int heuristic,
-        double factor,
-        double epsilon,
-        bool only_cost) {
-    std::stable_sort(start_vertex.begin(), start_vertex.end());
-    start_vertex.erase(
-            std::unique(start_vertex.begin(), start_vertex.end()),
-            start_vertex.end());
-
-    for (const auto &start : start_vertex) {
-        astar(graph, paths, start, end_vertex,
-                heuristic, factor, epsilon, only_cost);
-    }
-
-    std::sort(paths.begin(), paths.end(),
-            [](const Path &e1, const Path &e2)->bool {
-            return e1.end_id() < e2.end_id();
-            });
-    std::stable_sort(paths.begin(), paths.end(),
-            [](const Path &e1, const Path &e2)->bool {
-            return e1.start_id() < e2.start_id();
-            });
-    return;
-}
-
-
-
-
-//! Call to Astar  1 source to 1 target
-template < class G >
-bool
-Pgr_astar< G >::astar_1_to_1(
-        G &graph,
-        V source,
-        V target,
-        int heuristic,
-        double factor,
-        double epsilon) {
-    bool found = false;
-    try {
-        // Call A* named parameter interface
-        boost::astar_search(
-                graph.graph, source,
-                distance_heuristic(graph.graph, target,
-                    heuristic, factor * epsilon),
-                boost::predecessor_map(&predecessors[0])
-                .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
-                .distance_map(&distances[0])
-                .visitor(astar_one_goal_visitor(target)));
-    }
-    catch(found_goals &) {
-        found = true;  // Target vertex found
-    }
-    return found;
-}
-
-
-//! Call to astar  1 source to many targets
-template <class G>
-bool
-Pgr_astar< G >::astar_1_to_many(
-        G &graph,
-        V source,
-        const std::vector< V > &targets,
-        int heuristic,
-        double factor,
-        double epsilon) {
-    bool found = false;
-    try {
-        boost::astar_search(
-                graph.graph, source,
-                distance_heuristic(
-                    graph.graph, targets,
-                    heuristic, factor * epsilon),
-                boost::predecessor_map(&predecessors[0])
-                .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
-                .distance_map(&distances[0])
-                .visitor(astar_many_goals_visitor(targets)));
-    }
-    catch(found_goals &fg) {
-        found = true;  // Target vertex found
-    }
-    return found;
-}
-
-
-/*
- * GET_COST
- */
 
 
+     //! Call to Astar  1 source to 1 target
+     bool astar_1_to_1(
+             G &graph,
+             V source,
+             V target,
+             int heuristic,
+             double factor,
+             double epsilon) {
+         bool found = false;
+         try {
+             // Call A* named parameter interface
+             boost::astar_search(
+                     graph.graph, source,
+                     distance_heuristic(graph.graph, target,
+                         heuristic, factor * epsilon),
+                     boost::predecessor_map(&predecessors[0])
+                     .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
+                     .distance_map(&distances[0])
+                     .visitor(astar_one_goal_visitor(target)));
+         }
+         catch(found_goals &) {
+             found = true;  // Target vertex found
+         }
+         return found;
+     }
+
+
+     //! Call to astar  1 source to many targets
+     bool astar_1_to_many(
+             G &graph,
+             V source,
+             const std::vector< V > &targets,
+             int heuristic,
+             double factor,
+             double epsilon) {
+         bool found = false;
+         try {
+             boost::astar_search(
+                     graph.graph, source,
+                     distance_heuristic(
+                         graph.graph, targets,
+                         heuristic, factor * epsilon),
+                     boost::predecessor_map(&predecessors[0])
+                     .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
+                     .distance_map(&distances[0])
+                     .visitor(astar_many_goals_visitor(targets)));
+         }
+         catch(found_goals &) {
+             found = true;  // Target vertex found
+         }
+         return found;
+     }
 
-template < class G >
-void
-Pgr_astar< G >::get_cost(
-        const G &graph,
-        V source,
-        V target,
-        Path &r_path) const {
-    // backup of the target
-    int64_t from(graph.graph[source].id);
-    int64_t to(graph.graph[target].id);
-
-    // no path was found
-    if (target == predecessors[target]) {
-        r_path.clear();
-    } else {
-        Path path(from, to);
-        path.push_front(
-                {to, -1, distances[target], distances[target]});
-        r_path = path;
-    }
-}
 
-template < class G >
-void
-Pgr_astar< G >::get_cost(
-        const G &graph,
-        std::deque< Path > &paths,
-        V source,
-        std::vector< V > &targets) const {
-    Path path;
-    for (auto s_it = targets.begin(); s_it != targets.end(); ++s_it) {
-        path.clear();
-        get_cost(graph, source, *s_it, path);
-        paths.push_back(path);
-    }
-}
-
-
-/*
- * GET_PATH
- */
+     /*
+      * GET_PATHS
+      */
 
 
-template < class G >
-void
-Pgr_astar< G >::get_path(
-        const G &graph,
-        std::deque< Path > &paths,
-        V source,
-        std::vector< V > &targets) const {
-    Path path;
-    typename std::vector< V >::iterator s_it;
-    for (s_it = targets.begin(); s_it != targets.end(); ++s_it) {
-        path.clear();
-        get_path(graph, source, *s_it, path);
-        paths.push_back(path);
-    }
-}
+     std::deque<Path> get_paths(
+             const G &graph,
+             V source,
+             const std::vector<V> &targets,
+             bool only_cost) const {
+         std::deque<Path> paths;
+         for (const auto &target : targets) {
+             paths.push_back(
+                     Path(graph,
+                         source, target,
+                         predecessors, distances,
+                         only_cost));
+         }
+         return paths;
+     }
+};
 
-template < class G >
-void
-Pgr_astar< G >::get_path(
-        const G &graph,
-        V source,
-        V target,
-        Path &r_path) const {
-    // backup of the target
-    V target_back = target;
-    uint64_t from(graph.graph[source].id);
-    uint64_t to(graph.graph[target].id);
-
-    // no path was found
-    if (target == predecessors[target]) {
-        r_path.clear();
-        return;
-    }
-
-    // find out how large is the path
-    int64_t result_size = 1;
-    while (target != source) {
-        if (target == predecessors[target]) break;
-        result_size++;
-        target = predecessors[target];
-    }
-
-    // recover the target
-    target = target_back;
-
-    // variables that are going to be stored
-    int64_t vertex_id;
-    int64_t edge_id;
-    double cost;
-
-    // working from the last to the beginning
-
-    // initialize the sequence
-    auto seq = result_size;
-    // the last stop is the target
-    Path path(from, to);
-    path.push_front(
-            {graph.graph[target].id, -1,
-            0,  distances[target]});
-
-    while (target != source) {
-        // we are done when the predecesor of the target is the target
-        if (target == predecessors[target]) break;
-        // values to be inserted in the path
-        --seq;
-        cost = distances[target] - distances[predecessors[target]];
-        vertex_id = graph.graph[predecessors[target]].id;
-        edge_id = graph.get_edge_id(predecessors[target], target, cost);
-
-        path.push_front({vertex_id, edge_id,
-                cost, (distances[target] - cost)});
-        target = predecessors[target];
-    }
-    r_path = path;
-    return;
-}
 
+}  // namespace algorithms
+}  // namespace pgrouting
+
+#endif  // SRC_ASTAR_SRC_PGR_ASTAR_HPP_
diff --git a/src/astar/test/doc-aStarCost.result b/src/astar/test/doc-aStarCost.result
new file mode 100644
index 0000000..5010704
--- /dev/null
+++ b/src/astar/test/doc-aStarCost.result
@@ -0,0 +1,16 @@
+--q1
+2|12|4
+--q2
+2|12|4
+--q3
+2|3|5
+2|12|4
+--q4
+2|12|4
+7|12|5
+--q5
+2|3|5
+2|12|4
+7|3|6
+7|12|5
+--q6
diff --git a/src/astar/test/doc-aStarCost.test.sql b/src/astar/test/doc-aStarCost.test.sql
new file mode 100644
index 0000000..8837a17
--- /dev/null
+++ b/src/astar/test/doc-aStarCost.test.sql
@@ -0,0 +1,22 @@
+\echo --q1
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    2, 12);
+\echo --q2
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    2, 12,
+    directed := false, heuristic := 2);
+\echo --q3
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    2, ARRAY[3, 12], heuristic := 2);
+\echo --q4
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], 12, heuristic := 0);
+\echo --q5
+SELECT * FROM pgr_aStarCost(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], ARRAY[3, 12], heuristic := 2);
+\echo --q6
diff --git a/src/astar/test/doc-astar-v2.result b/src/astar/test/doc-astar-v2.result
index e996171..62ec16c 100644
--- a/src/astar/test/doc-astar-v2.result
+++ b/src/astar/test/doc-astar-v2.result
@@ -1,5 +1,5 @@
 -- q1
-NOTICE:  Deprecated signature of function pgr_astar
+NOTICE:  Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)
 0|4|16|1
 1|9|9|1
 2|6|8|1
@@ -7,7 +7,7 @@ NOTICE:  Deprecated signature of function pgr_astar
 4|2|1|1
 5|1|-1|0
 -- q2
-NOTICE:  Deprecated signature of function pgr_astar
+NOTICE:  Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)
 0|4|3|1
 1|3|2|1
 2|2|1|1
diff --git a/src/astar/test/doc-astar-v2.test.sql b/src/astar/test/doc-astar-v2.test.sql
index 6cf0060..ad44338 100644
--- a/src/astar/test/doc-astar-v2.test.sql
+++ b/src/astar/test/doc-astar-v2.test.sql
@@ -1,12 +1,10 @@
-SET client_min_messages TO NOTICE;
-
 \echo -- q1
-SELECT * FROM pgr_AStar(
+SELECT * FROM pgr_astar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, x1, y1, x2, y2
      FROM edge_table',
     4, 1, false, false);
 \echo -- q2
-SELECT * FROM pgr_AStar(
+SELECT * FROM pgr_astar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, x1, y1, x2, y2, reverse_cost
       FROM edge_table ',
     4, 1, true, true);
diff --git a/src/astar/test/doc-astar.result b/src/astar/test/doc-astar.result
index 50be369..bdc2c79 100644
--- a/src/astar/test/doc-astar.result
+++ b/src/astar/test/doc-astar.result
@@ -6,20 +6,64 @@
 5|5|12|-1|0|4
 --q2
 1|1|2|4|1|0
-2|2|5|8|1|1
-3|3|6|9|1|2
-4|4|9|15|1|3
-5|5|12|-1|0|4
-1|1|2|4|1|0
-2|2|5|8|1|1
-3|3|6|9|1|2
-4|4|9|15|1|3
+2|2|5|10|1|1
+3|3|10|12|1|2
+4|4|11|13|1|3
 5|5|12|-1|0|4
 --q3
-NOTICE:  Deprecated signature of function pgr_astar
+1|1|3|2|4|1|0
+2|2|3|5|8|1|1
+3|3|3|6|9|1|2
+4|4|3|9|16|1|3
+5|5|3|4|3|1|4
+6|6|3|3|-1|0|5
+7|1|12|2|4|1|0
+8|2|12|5|8|1|1
+9|3|12|6|9|1|2
+10|4|12|9|15|1|3
+11|5|12|12|-1|0|4
+--q4
+1|1|2|2|4|1|0
+2|2|2|5|10|1|1
+3|3|2|10|12|1|2
+4|4|2|11|13|1|3
+5|5|2|12|-1|0|4
+6|1|7|7|6|1|0
+7|2|7|8|7|1|1
+8|3|7|5|10|1|2
+9|4|7|10|12|1|3
+10|5|7|11|13|1|4
+11|6|7|12|-1|0|5
+--q5
+1|1|2|3|2|4|1|0
+2|2|2|3|5|8|1|1
+3|3|2|3|6|9|1|2
+4|4|2|3|9|16|1|3
+5|5|2|3|4|3|1|4
+6|6|2|3|3|-1|0|5
+7|1|2|12|2|4|1|0
+8|2|2|12|5|8|1|1
+9|3|2|12|6|9|1|2
+10|4|2|12|9|15|1|3
+11|5|2|12|12|-1|0|4
+12|1|7|3|7|6|1|0
+13|2|7|3|8|7|1|1
+14|3|7|3|5|8|1|2
+15|4|7|3|6|9|1|3
+16|5|7|3|9|16|1|4
+17|6|7|3|4|3|1|5
+18|7|7|3|3|-1|0|6
+19|1|7|12|7|6|1|0
+20|2|7|12|8|7|1|1
+21|3|7|12|5|8|1|2
+22|4|7|12|6|9|1|3
+23|5|7|12|9|15|1|4
+24|6|7|12|12|-1|0|5
+--q6
+NOTICE:  Deprecated signature pgr_astar(text, integer, integer, boolean, boolean)
 0|2|4|1
 1|5|8|1
 2|6|9|1
 3|9|15|1
 4|12|-1|0
---q4
+--q7
diff --git a/src/astar/test/doc-astar.test.sql b/src/astar/test/doc-astar.test.sql
index b2cac85..464a6c5 100644
--- a/src/astar/test/doc-astar.test.sql
+++ b/src/astar/test/doc-astar.test.sql
@@ -1,5 +1,3 @@
-SET client_min_messages TO NOTICE;
-
 \echo --q1
 SELECT * FROM pgr_astar(
     'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
@@ -7,12 +5,22 @@ SELECT * FROM pgr_astar(
 \echo --q2
 SELECT * FROM pgr_astar(
     'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
-    2, 12, heuristic := 1);
+    2, 12,
+    directed := false, heuristic := 2);
+\echo --q3
 SELECT * FROM pgr_astar(
     'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
-    2, 12, heuristic := 2);
-\echo --q3
+    2, ARRAY[3, 12], heuristic := 2);
+\echo --q4
+SELECT * FROM pgr_astar(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], 12, heuristic := 0);
+\echo --q5
+SELECT * FROM pgr_astar(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    ARRAY[7, 2], ARRAY[3, 12], heuristic := 2);
+\echo --q6
 SELECT * FROM pgr_astar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
     2, 12, true, true);
-\echo --q4
+\echo --q7
diff --git a/src/astar/test/pgtap/astar_ManyToMany-compare-dijkstra.test.sql b/src/astar/test/pgtap/astar_ManyToMany-compare-dijkstra.test.sql
new file mode 100644
index 0000000..8b3e10c
--- /dev/null
+++ b/src/astar/test/pgtap/astar_ManyToMany-compare-dijkstra.test.sql
@@ -0,0 +1,97 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2015 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+\i setup.sql
+
+SELECT plan(4);
+
+SET client_min_messages TO ERROR;
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+CREATE or REPLACE FUNCTION astarCompareDijkstra(cant INTEGER default 17)
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+inner_sql TEXT;
+dijkstra_sql TEXT;
+astar_sql TEXT;
+vids TEXT;
+data TEXT;
+BEGIN
+    data := ' seq, start_vid, cost::text, agg_cost::text ';
+    vids := ' ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] ';
+
+
+        -----------------------
+        -- with reverse cost
+        -----------------------
+        -- DIRECTED
+        inner_sql := 'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table';
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$, ' || vids
+            || ',' || vids || ',  true)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ',' || vids || ',  true, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -- UNDIRECTED
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || vids
+            || ',' || vids || ',  false)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ', ' || vids || ', false, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -----------------------
+        -- NO reverse cost
+        -----------------------
+        -- DIRECTED
+        inner_sql := 'SELECT id, source, target, cost, x1, y1, x2, y2 FROM edge_table';
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || vids
+            || ',' || vids || ',  true)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ',' || vids || ',  true, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -- UNDIRECTED
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || vids
+            || ',' || vids || ',  false)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ', ' || vids || ', false, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+
+    RETURN;
+END
+$BODY$
+language plpgsql;
+
+SELECT * from astarCompareDijkstra();
+
+
+SELECT * FROM finish();
+ROLLBACK;
+
diff --git a/src/astar/test/pgtap/astar_ManyToOne-compare-dijkstra.test.sql b/src/astar/test/pgtap/astar_ManyToOne-compare-dijkstra.test.sql
new file mode 100644
index 0000000..94cb3b4
--- /dev/null
+++ b/src/astar/test/pgtap/astar_ManyToOne-compare-dijkstra.test.sql
@@ -0,0 +1,99 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2015 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+\i setup.sql
+
+SELECT plan(68);
+
+SET client_min_messages TO ERROR;
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+CREATE or REPLACE FUNCTION astarCompareDijkstra(cant INTEGER default 17)
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+inner_sql TEXT;
+dijkstra_sql TEXT;
+astar_sql TEXT;
+vids TEXT;
+data TEXT;
+BEGIN
+    data := ' seq, start_vid, cost::text, agg_cost::text ';
+    vids := ' ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] ';
+
+    FOR i IN 1.. cant LOOP
+
+        -----------------------
+        -- with reverse cost
+        -----------------------
+        -- DIRECTED
+        inner_sql := 'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table';
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$, ' || vids
+            || ',' || i || ',  true)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ',' || i || ',  true, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -- UNDIRECTED
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || vids
+            || ',' || i || ',  false)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ', ' || i || ', false, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -----------------------
+        -- NO reverse cost
+        -----------------------
+        -- DIRECTED
+        inner_sql := 'SELECT id, source, target, cost, x1, y1, x2, y2 FROM edge_table';
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || vids
+            || ',' || i || ',  true)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ',' || i || ',  true, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -- UNDIRECTED
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || vids
+            || ',' || i || ',  false)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$,  ' || vids
+            || ', ' || i || ', false, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+    END LOOP;
+
+    RETURN;
+END
+$BODY$
+language plpgsql;
+
+SELECT * from astarCompareDijkstra();
+
+
+SELECT * FROM finish();
+ROLLBACK;
+
diff --git a/src/astar/test/pgtap/astar_oneToMany-compare-dijkstra.test.sql b/src/astar/test/pgtap/astar_oneToMany-compare-dijkstra.test.sql
new file mode 100644
index 0000000..01b3473
--- /dev/null
+++ b/src/astar/test/pgtap/astar_oneToMany-compare-dijkstra.test.sql
@@ -0,0 +1,99 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2015 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+\i setup.sql
+
+SELECT plan(68);
+
+SET client_min_messages TO ERROR;
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+CREATE or REPLACE FUNCTION astarCompareDijkstra(cant INTEGER default 17)
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+inner_sql TEXT;
+dijkstra_sql TEXT;
+astar_sql TEXT;
+vids TEXT;
+data TEXT;
+BEGIN
+    data = ' seq, end_vid, cost::text, agg_cost::text ';
+    vids = ' ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] ';
+
+    FOR i IN 1.. cant LOOP
+
+        -----------------------
+        -- with reverse cost
+        -----------------------
+        -- DIRECTED
+        inner_sql := 'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table';
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$,  ' || i || ', ' || vids
+            || ', true)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ', true, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -- UNDIRECTED
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ', false)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ', false, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -----------------------
+        -- NO reverse cost
+        -----------------------
+        -- DIRECTED
+        inner_sql := 'SELECT id, source, target, cost, x1, y1, x2, y2 FROM edge_table';
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ',  true)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ',  true, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+        -- UNDIRECTED
+        dijkstra_sql := 'SELECT ' || data || ' FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ',  false)';
+
+        astar_sql := 'SELECT ' || data || ' FROM pgr_astar($$' || inner_sql || '$$, ' || i || ', ' || vids
+            || ', false, heuristic := 0)';
+        RETURN query SELECT set_eq(astar_sql, dijkstra_sql, astar_sql);
+
+    END LOOP;
+
+    RETURN;
+END
+$BODY$
+language plpgsql;
+
+SELECT * from astarCompareDijkstra();
+
+
+SELECT * FROM finish();
+ROLLBACK;
+
diff --git a/src/astar/test/pgtap/astar_oneToOne-types-check.sql b/src/astar/test/pgtap/astar_oneToOne-types-check.sql
index af2b0da..04329b5 100644
--- a/src/astar/test/pgtap/astar_oneToOne-types-check.sql
+++ b/src/astar/test/pgtap/astar_oneToOne-types-check.sql
@@ -23,11 +23,35 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 \i setup.sql
 
-SELECT plan(93);
+SELECT plan(99);
 SET client_min_messages TO ERROR;
 
 
 SELECT has_function('pgr_astar',
+    ARRAY['text', 'anyarray', 'bigint', 'boolean',
+        'integer', 'double precision', 'double precision']);
+SELECT function_returns('pgr_astar',
+    ARRAY['text', 'anyarray', 'bigint', 'boolean',
+        'integer', 'double precision', 'double precision'],
+    'setof record');
+
+SELECT has_function('pgr_astar',
+    ARRAY['text', 'bigint', 'anyarray', 'boolean',
+        'integer', 'double precision', 'double precision']);
+SELECT function_returns('pgr_astar',
+    ARRAY['text', 'bigint', 'anyarray', 'boolean',
+        'integer', 'double precision', 'double precision'],
+    'setof record');
+
+SELECT has_function('pgr_astar',
+    ARRAY['text', 'anyarray', 'anyarray', 'boolean',
+        'integer', 'double precision', 'double precision']);
+SELECT function_returns('pgr_astar',
+    ARRAY['text', 'anyarray', 'anyarray', 'boolean',
+        'integer', 'double precision', 'double precision'],
+    'setof record');
+
+SELECT has_function('pgr_astar',
     ARRAY['text', 'bigint', 'bigint', 'boolean',
         'integer', 'double precision', 'double precision']);
 SELECT function_returns('pgr_astar',
diff --git a/src/astar/test/test.conf b/src/astar/test/test.conf
index a4129d5..5756152 100644
--- a/src/astar/test/test.conf
+++ b/src/astar/test/test.conf
@@ -7,10 +7,12 @@
         'tests' => [qw(
             doc-astar-v2
             doc-astar
+            doc-aStarCost
             )],
         'documentation' => [qw(
             doc-astar-v2
             doc-astar
+            doc-aStarCost
             )]
     },
 #    'vpg-vpgis' => {}, # for version specific tests
diff --git a/src/bdDijkstra/doc/doc-pgr_bdDijkstra.queries b/src/bdDijkstra/doc/doc-pgr_bdDijkstra.queries
new file mode 100644
index 0000000..e25a292
--- /dev/null
+++ b/src/bdDijkstra/doc/doc-pgr_bdDijkstra.queries
@@ -0,0 +1,52 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
+-- q1
+SELECT * FROM pgr_bdDijkstra(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3
+);
+ seq | path_seq | node | edge | cost | agg_cost 
+-----+----------+------+------+------+----------
+   1 |        1 |    2 |    4 |    1 |        0
+   2 |        2 |    5 |    8 |    1 |        1
+   3 |        3 |    6 |    9 |    1 |        2
+   4 |        4 |    9 |   16 |    1 |        3
+   5 |        5 |    4 |    3 |    1 |        4
+   6 |        6 |    3 |   -1 |    0 |        5
+(6 rows)
+
+-- q2
+SELECT * FROM pgr_bdDijkstra(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3,
+    false
+);
+ seq | path_seq | node | edge | cost | agg_cost 
+-----+----------+------+------+------+----------
+   1 |        1 |    2 |    2 |    1 |        0
+   2 |        2 |    3 |   -1 |    0 |        1
+(2 rows)
+
+-- q3
+SET client_min_messages TO notice;
+SET
+SELECT * FROM pgr_bdDijkstra(
+    'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT FROM edge_table',
+    2, 3,
+    false, 
+    false  
+);
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+ seq | id1 | id2 | cost 
+-----+-----+-----+------
+   0 |   2 |   4 |    1
+   1 |   5 |   8 |    1
+   2 |   6 |   5 |    1
+   3 |   3 |  -1 |    0
+(4 rows)
+
+-- q4
+ROLLBACK;
+ROLLBACK
diff --git a/src/bdDijkstra/doc/pgr_bdDijkstra.rst b/src/bdDijkstra/doc/pgr_bdDijkstra.rst
new file mode 100644
index 0000000..f924208
--- /dev/null
+++ b/src/bdDijkstra/doc/pgr_bdDijkstra.rst
@@ -0,0 +1,113 @@
+..
+   ****************************************************************************
+    pgRouting Manual
+    Copyright(c) pgRouting Contributors
+
+    This documentation is licensed under a Creative Commons Attribution-Share
+    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
+   ****************************************************************************
+
+.. _pgr_bdDijkstra:
+
+pgr_bdDijkstra
+===============================================================================
+
+``pgr_bdDijkstra`` — Returns the shortest path(s) using Bidirectional Dijkstra algorithm.
+
+.. figure:: images/boost-inside.jpeg
+   :target: http://www.boost.org/libs/graph/doc
+
+   Boost Graph Inside
+
+.. rubric:: Availability:
+
+* pgr_bdDijkstra(one to one) 2.0.0, Signature changed 2.4.0
+
+Signature Summary
+-----------------
+
+.. code-block:: none
+
+    pgr_dijkstra(edges_sql, start_vid,  end_vid)
+    pgr_bdDijkstra(edges_sql, start_vid, end_vid, directed)
+    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
+    OR EMPTY SET
+
+
+
+Signatures
+-------------------------------------------------------------------------------
+
+.. index::
+    single: bdDijkstra(Minimal Use)
+
+Minimal signature
+.......................................
+
+.. code-block:: none
+
+    pgr_bdDijkstra(edges_sql, start_vid, end_vid)
+    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost) or EMPTY SET
+
+The minimal signature is for a **directed** graph from one ``start_vid`` to one ``end_vid``:
+
+:Example:
+
+.. literalinclude:: doc-pgr_bdDijkstra.queries
+   :start-after: -- q1
+   :end-before: -- q2
+
+
+.. index::
+    single: bdDijkstra(One to One)
+
+pgr_bdDijkstra One to One
+.......................................
+
+.. code-block:: none
+
+    pgr_bdDijkstra(edges_sql, start_vid, end_vid, directed)
+    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost) or EMPTY SET
+
+This signature finds the shortest path from one ``start_vid`` to one ``end_vid``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+
+:Example:
+
+.. literalinclude:: doc-pgr_bdDijkstra.queries
+   :start-after: -- q2
+   :end-before: -- q3
+
+
+
+Description of the Signatures
+-------------------------------------------------------------------------------
+
+.. include:: pgRouting-concepts.rst
+    :start-after: basic_edges_sql_start
+    :end-before: basic_edges_sql_end
+
+.. include:: pgr_dijkstra.rst
+    :start-after: pgr_dijkstra_parameters_start
+    :end-before: pgr_dijkstra_parameters_end
+
+.. include:: pgRouting-concepts.rst
+    :start-after: return_path_start
+    :end-before: return_path_end
+
+
+
+
+See Also
+-------------------------------------------------------------------------------
+
+* The queries use the :ref:`sampledata` network.
+* http://www.cs.princeton.edu/courses/archive/spr06/cos423/Handouts/EPP%20shortest%20path%20algorithms.pdf
+* https://en.wikipedia.org/wiki/Bidirectional_search
+
+.. rubric:: Indices and tables
+
+* :ref:`genindex`
+* :ref:`search`
+
diff --git a/src/bdDijkstra/sql/CMakeLists.txt b/src/bdDijkstra/sql/CMakeLists.txt
new file mode 100644
index 0000000..45b9942
--- /dev/null
+++ b/src/bdDijkstra/sql/CMakeLists.txt
@@ -0,0 +1,7 @@
+# Append in local scope
+LIST(APPEND PACKAGE_SQL_FILES
+    ${CMAKE_CURRENT_SOURCE_DIR}/bdDijkstra.sql
+)
+
+# set in parent scope
+SET(PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}" PARENT_SCOPE)
diff --git a/src/bdDijkstra/sql/bdDijkstra.sql b/src/bdDijkstra/sql/bdDijkstra.sql
new file mode 100644
index 0000000..55d666c
--- /dev/null
+++ b/src/bdDijkstra/sql/bdDijkstra.sql
@@ -0,0 +1,93 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+
+CREATE OR REPLACE FUNCTION _pgr_bdDijkstra(
+    edges_sql TEXT,
+    start_vid BIGINT,
+    end_vid BIGINT,
+    directed BOOLEAN,
+    only_cost BOOLEAN DEFAULT false,
+    OUT seq INTEGER,
+    OUT path_seq INTEGER,
+    OUT node BIGINT,
+    OUT edge BIGINT,
+    OUT cost FLOAT,
+    OUT agg_cost FLOAT)
+RETURNS SETOF RECORD AS
+'$libdir/${PGROUTING_LIBRARY_NAME}', 'bdDijkstra'
+LANGUAGE c IMMUTABLE STRICT;
+
+
+-- V3 signature
+CREATE OR REPLACE FUNCTION pgr_bdDijkstra(
+    edges_sql TEXT,
+    start_vid BIGINT,
+    end_vid BIGINT,
+    OUT seq INTEGER,
+    OUT path_seq INTEGER,
+    OUT node BIGINT,
+    OUT edge BIGINT,
+    OUT cost FLOAT,
+    OUT agg_cost FLOAT)
+RETURNS SETOF RECORD AS
+$BODY$
+DECLARE
+statement_txt record;
+sql TEXT;
+BEGIN
+    RETURN query
+    SELECT * FROM _pgr_bdDijkstra(_pgr_get_statement($1), start_vid, end_vid, true, false);
+  END
+$BODY$
+LANGUAGE plpgsql VOLATILE
+COST 100
+ROWS 1000;
+
+
+-- V3
+CREATE OR REPLACE FUNCTION pgr_bdDijkstra(
+    edges_sql TEXT,
+    start_vid BIGINT,
+    end_vid BIGINT,
+    directed BOOLEAN,
+    OUT seq INTEGER,
+    OUT path_seq INTEGER,
+    OUT node BIGINT,
+    OUT edge BIGINT,
+    OUT cost FLOAT,
+    OUT agg_cost FLOAT)
+RETURNS SETOF RECORD AS
+$BODY$
+DECLARE
+BEGIN
+    RETURN query SELECT *
+    FROM _pgr_bdDijkstra(_pgr_get_statement($1), start_vid, end_vid, directed, false);
+  END
+$BODY$
+LANGUAGE plpgsql VOLATILE
+COST 100
+ROWS 1000;
diff --git a/src/bdDijkstra/src/CMakeLists.txt b/src/bdDijkstra/src/CMakeLists.txt
new file mode 100644
index 0000000..134546b
--- /dev/null
+++ b/src/bdDijkstra/src/CMakeLists.txt
@@ -0,0 +1,4 @@
+ADD_LIBRARY(bdDijkstra OBJECT
+    bdDijkstra.c
+    bdDijkstra_driver.cpp
+    )
diff --git a/src/dijkstra/src/one_to_one_dijkstra.c b/src/bdDijkstra/src/bdDijkstra.c
similarity index 69%
copy from src/dijkstra/src/one_to_one_dijkstra.c
copy to src/bdDijkstra/src/bdDijkstra.c
index da20582..d0f1234 100644
--- a/src/dijkstra/src/one_to_one_dijkstra.c
+++ b/src/bdDijkstra/src/bdDijkstra.c
@@ -1,14 +1,15 @@
 /*PGR-GNU*****************************************************************
-File: one_to_one_dijkstra.c
+File: bdDijkstra.c
 
 Generated with Template by:
-Copyright (c) 2015 pgRouting developers
+Copyright (c) 2016 pgRouting developers
 Mail: project at pgrouting.org
 
 Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
+Copyright (c) 2016 Celia Virginia Vergara Castillo
 Mail: vicky_vergara at hotmail.com
 
+
 ------
 
 This program is free software; you can redistribute it and/or modify
@@ -27,27 +28,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
+#include "./../../common/src/postgres_connection.h"
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
-#include "./one_to_one_dijkstra_driver.h"
 
-PG_MODULE_MAGIC;
+#include "./bdDijkstra_driver.h"
+
+PGDLLEXPORT Datum bdDijkstra(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(bdDijkstra);
 
-PGDLLEXPORT Datum one_to_one_dijkstra(PG_FUNCTION_ARGS);
 
 /******************************************************************************/
 /*                          MODIFY AS NEEDED                                  */
@@ -65,63 +58,62 @@ process(
 
     PGR_DBG("Load data");
     pgr_edge_t *edges = NULL;
+    size_t total_edges = 0;
 
     if (start_vid == end_vid) {
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
 
-    size_t total_tuples = 0;
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
+    pgr_get_edges(edges_sql, &edges, &total_edges);
+    PGR_DBG("Total %ld edges in query:", total_edges);
 
-    if (total_tuples == 0) {
+    if (total_edges == 0) {
         PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
     PGR_DBG("Starting processing");
     clock_t start_t = clock();
+    char *log_msg = NULL;
+    char *notice_msg = NULL;
     char *err_msg = NULL;
-    do_pgr_one_to_one_dijkstra(
+    do_pgr_bdDijkstra(
             edges,
-            total_tuples,
+            total_edges,
             start_vid,
             end_vid,
             directed,
             only_cost,
             result_tuples,
             result_count,
+            &log_msg,
+            &notice_msg,
             &err_msg);
 
-    time_msg(" processing Dijkstra one to one", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
+    time_msg(" processing pgr_bdDijkstra", start_t, clock());
+    PGR_DBG("Returning %ld tuples", *result_count);
+
+    if (err_msg) {
+        if (*result_tuples) free(*result_tuples);
+    }
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
-    free(err_msg);
     pfree(edges);
     pgr_SPI_finish();
 }
 /*                                                                            */
 /******************************************************************************/
 
-PG_FUNCTION_INFO_V1(one_to_one_dijkstra);
-PGDLLEXPORT Datum
-one_to_one_dijkstra(PG_FUNCTION_ARGS) {
+PGDLLEXPORT Datum bdDijkstra(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
-    TupleDesc            tuple_desc;
+    TupleDesc           tuple_desc;
 
     /**************************************************************************/
     /*                          MODIFY AS NEEDED                              */
     /*                                                                        */
-    General_path_element_t  *result_tuples = 0;
+    General_path_element_t  *result_tuples = NULL;
     size_t result_count = 0;
     /*                                                                        */
     /**************************************************************************/
@@ -134,14 +126,17 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
 
         /**********************************************************************/
         /*                          MODIFY AS NEEDED                          */
-        // CREATE OR REPLACE FUNCTION pgr_dijkstra(
-        // sql text, start_vids BIGINT,
-        // end_vid BIGINT,
-        // directed BOOLEAN default true,
+        /*
+           edges_sql TEXT,
+           start_vid BIGINT,
+           end_vid BIGINT,
+           directed BOOLEAN DEFAULT true,
+           only_cost BOOLEAN DEFAULT false,
+         **********************************************************************/
+
 
-        PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
                 PG_GETARG_INT64(2),
                 PG_GETARG_BOOL(3),
@@ -152,7 +147,11 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
         /*                                                                    */
         /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -167,12 +166,11 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
+
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -180,12 +178,14 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
 
         /**********************************************************************/
         /*                          MODIFY AS NEEDED                          */
-        // OUT seq INTEGER,
-        // OUT path_seq INTEGER,
-        // OUT node BIGINT,
-        // OUT edge BIGINT,
-        // OUT cost FLOAT,
-        // OUT agg_cost FLOAT
+        /*
+           OUT seq INTEGER,
+           OUT path_seq INTEGER,
+           OUT node BIGINT,
+           OUT edge BIGINT,
+           OUT cost FLOAT,
+           OUT agg_cost FLOAT
+         ***********************************************************************/
 
         values = palloc(6 * sizeof(Datum));
         nulls = palloc(6 * sizeof(bool));
@@ -197,22 +197,18 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
         }
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[4] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/src/astar/src/astarOneToOne_driver.cpp b/src/bdDijkstra/src/bdDijkstra_driver.cpp
similarity index 57%
rename from src/astar/src/astarOneToOne_driver.cpp
rename to src/bdDijkstra/src/bdDijkstra_driver.cpp
index 3bed03f..4e263b7 100644
--- a/src/astar/src/astarOneToOne_driver.cpp
+++ b/src/bdDijkstra/src/bdDijkstra_driver.cpp
@@ -1,13 +1,13 @@
 /*PGR-GNU*****************************************************************
-File: astarOneToOne_driver.cpp
+File: bdDijkstra_driver.cpp
 
 Generated with Template by:
 Copyright (c) 2015 pgRouting developers
 Mail: project at pgrouting.org
 
 Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: 
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+Mail: vicky_vergara at hotmail.com
 
 ------
 
@@ -28,103 +28,99 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 ********************************************************************PGR-GNU*/
 
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
 #include <sstream>
 #include <deque>
-#include <algorithm>
 #include <vector>
-#include "./astarOneToOne_driver.h"
 
-#include "./../../common/src/pgr_types.h"
+#include "./pgr_bdDijkstra.hpp"
+#include "./bdDijkstra_driver.h"
+
 
-#include "./pgr_astar.hpp"
-#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/pgr_types.h"
+
+#include "./../../common/src/pgr_base_graph.hpp"
+
+
+
+
+/************************************************************
+  edges_sql TEXT,
+    start_vid BIGINT,
+    end_vid BIGINT,
+    directed BOOLEAN DEFAULT true,
+    only_cost BOOLEAN DEFAULT false,
+ ***********************************************************/
 
 template < class G >
-void
-pgr_astar(
+static
+Path
+pgr_bdDijkstra(
         G &graph,
-        Path &path,
         int64_t source,
         int64_t target,
-        int heuristic,
-        double factor,
-        double epsilon,
+        std::ostream &log,
         bool only_cost = false) {
-    Pgr_astar< G > fn_astar;
-    fn_astar.astar(graph, path, source, target,
-            heuristic, factor, epsilon, only_cost);
+    log << "entering static function\n";
+    Pgr_bdDijkstra<G> fn_bdDijkstra(graph);
+
+    auto path = fn_bdDijkstra.pgr_bdDijkstra(
+            graph.get_V(source), graph.get_V(target), only_cost);
+    log << fn_bdDijkstra.log();
+
+    return path;
 }
 
 
-/************************************************************
-  edges_sql TEXT,
-  vertex_table TEXT,
-  start_vid BIGINT,
-  end_vid BIGINT  directed BOOLEAN DEFAULT true,
- ***********************************************************/
-void do_pgr_astarOneToOne(
-        Pgr_edge_xy_t  *data_edges,
+void
+do_pgr_bdDijkstra(
+        pgr_edge_t  *data_edges,
         size_t total_edges,
         int64_t start_vid,
         int64_t end_vid,
         bool directed,
-        int heuristic,
-        double factor,
-        double epsilon,
         bool only_cost,
         General_path_element_t **return_tuples,
         size_t *return_count,
         char ** log_msg,
+        char ** notice_msg,
         char ** err_msg) {
-    std::ostringstream err;
     std::ostringstream log;
+    std::ostringstream err;
+    std::ostringstream notice;
     try {
         pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
         pgassert(!(*err_msg));
         pgassert(!(*return_tuples));
         pgassert(*return_count == 0);
         pgassert(total_edges != 0);
 
-        if (total_edges <= 1) {
-            log << "Required: more than one edge\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
         Path path;
 
+        log << "starting process\n";
         if (directed) {
             log << "Working with directed Graph\n";
-            pgrouting::xyDirectedGraph digraph(gType);
-            log << "Working with directed Graph 1 \n";
-            digraph.graph_insert_data(data_edges, total_edges);
-#ifdef DEBUG
-            log << digraph;
-#endif
-            log << "Working with directed Graph 2\n";
-            pgr_astar(digraph, path, start_vid, end_vid,
-                    heuristic, factor, epsilon, only_cost);
-            log << "Working with directed Graph 3\n";
+            pgrouting::DirectedGraph digraph(gType);
+            digraph.insert_edges(data_edges, total_edges);
+            path = pgr_bdDijkstra(digraph,
+                    start_vid,
+                    end_vid,
+                    log,
+                    only_cost);
         } else {
             log << "Working with Undirected Graph\n";
-            pgrouting::xyUndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_edges);
-#ifdef DEBUG
-            log << undigraph;
-#endif
-            pgr_astar(undigraph, path, start_vid, end_vid,
-                    heuristic, factor, epsilon, only_cost);
+            pgrouting::UndirectedGraph undigraph(gType);
+            undigraph.insert_edges(data_edges, total_edges);
+            path = pgr_bdDijkstra(
+                    undigraph,
+                    start_vid,
+                    end_vid,
+                    log,
+                    only_cost);
         }
 
         auto count = path.size();
@@ -132,35 +128,38 @@ void do_pgr_astarOneToOne(
         if (count == 0) {
             (*return_tuples) = NULL;
             (*return_count) = 0;
-            log <<
-                "No paths found\n";
-            *log_msg = strdup(log.str().c_str());
-            return;
+            notice <<
+                "No paths found between start_vid and end_vid vertices";
+        } else {
+            (*return_tuples) = pgr_alloc(count, (*return_tuples));
+            size_t sequence = 0;
+            path.generate_postgres_data(return_tuples, sequence);
+            (*return_count) = sequence;
         }
 
-        size_t sequence = 0;
-        (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        path.generate_postgres_data(return_tuples, sequence);
-        (*return_count) = sequence;
-
-        *err_msg = NULL;
-        *log_msg = strdup(log.str().c_str());
+        pgassert(*err_msg == NULL);
+        *log_msg = log.str().empty()?
+            nullptr :
+            strdup(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            nullptr :
+            strdup(notice.str().c_str());
     } catch (AssertFailedException &except) {
         if (*return_tuples) free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
+        err << except.what();
         *err_msg = strdup(err.str().c_str());
         *log_msg = strdup(log.str().c_str());
     } catch (std::exception& except) {
         if (*return_tuples) free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
+        err << except.what();
         *err_msg = strdup(err.str().c_str());
         *log_msg = strdup(log.str().c_str());
     } catch(...) {
         if (*return_tuples) free(*return_tuples);
         (*return_count) = 0;
-        err << "Caught unknown exception!\n";
+        err << "Caught unknown exception!";
         *err_msg = strdup(err.str().c_str());
         *log_msg = strdup(log.str().c_str());
     }
diff --git a/src/dijkstra/src/one_to_one_dijkstra_driver.h b/src/bdDijkstra/src/bdDijkstra_driver.h
similarity index 71%
rename from src/dijkstra/src/one_to_one_dijkstra_driver.h
rename to src/bdDijkstra/src/bdDijkstra_driver.h
index a5c052c..adca119 100644
--- a/src/dijkstra/src/one_to_one_dijkstra_driver.h
+++ b/src/bdDijkstra/src/bdDijkstra_driver.h
@@ -1,5 +1,5 @@
 /*PGR-GNU*****************************************************************
-File: one_to_one_dijkstra_driver.h
+File: bdDijkstra_driver.h
 
 Generated with Template by:
 Copyright (c) 2015 pgRouting developers
@@ -27,8 +27,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_DIJKSTRA_SRC_ONE_TO_ONE_DIJKSTRA_DRIVER_H_
-#define SRC_DIJKSTRA_SRC_ONE_TO_ONE_DIJKSTRA_DRIVER_H_
+#ifndef SRC_BDDIJKSTRA_SRC_BDDIJKSTRA_DRIVER_H_
+#define SRC_BDDIJKSTRA_SRC_BDDIJKSTRA_DRIVER_H_
+#pragma once
 
 #include "./../../common/src/pgr_types.h"
 
@@ -36,22 +37,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 extern "C" {
 #endif
 
-//  CREATE OR REPLACE FUNCTION pgr_dijkstra(
-//  sql text,
-//  start_vid BIGINT,
-//  end_vid BIGINT,
-//  directed BOOLEAN default true,
+    /*********************************************************
+      edges_sql TEXT,
+    start_vid BIGINT,
+    end_vid BIGINT,
+    directed BOOLEAN DEFAULT true,
+    only_cost BOOLEAN DEFAULT false,
+     ********************************************************/
+
 
     void
-        do_pgr_one_to_one_dijkstra(
+        do_pgr_bdDijkstra(
                 pgr_edge_t  *data_edges,
-                size_t total_tuples,
+                size_t total_edges,
                 int64_t start_vid,
                 int64_t end_vid,
                 bool directed,
                 bool only_cost,
                 General_path_element_t **return_tuples,
                 size_t *return_count,
+                char ** log_msg,
+                char ** notice_msg,
                 char ** err_msg);
 
 
@@ -59,4 +65,4 @@ extern "C" {
 }
 #endif
 
-#endif  // SRC_DIJKSTRA_SRC_ONE_TO_ONE_DIJKSTRA_DRIVER_H_
+#endif  // SRC_BDDIJKSTRA_SRC_BDDIJKSTRA_DRIVER_H_
diff --git a/src/bdDijkstra/src/pgr_bdDijkstra.hpp b/src/bdDijkstra/src/pgr_bdDijkstra.hpp
new file mode 100644
index 0000000..56bd888
--- /dev/null
+++ b/src/bdDijkstra/src/pgr_bdDijkstra.hpp
@@ -0,0 +1,281 @@
+/*PGR-GNU*****************************************************************
+
+File: pgr_bdDijkstra.hpp 
+
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ ********************************************************************PGR-GNU*/
+
+#ifndef SRC_BDDIJKSTRA_SRC_PGR_BDDIJKSTRA_HPP_
+#define SRC_BDDIJKSTRA_SRC_PGR_BDDIJKSTRA_HPP_
+#pragma once
+
+
+#include <boost/config.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+#include <string>
+#include <queue>
+#include <utility>
+#include <vector>
+#include <limits>
+#include <functional>
+
+
+#include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/basePath_SSEC.hpp"
+#include "./../../common/src/pgr_base_graph.hpp"
+
+
+
+
+template < typename G >
+class Pgr_bdDijkstra {
+     typedef typename G::V V;
+     typedef typename G::E E;
+
+     typedef std::pair<double, V> Cost_Vertex_pair;
+     typedef typename std::priority_queue<
+         Cost_Vertex_pair,
+         std::vector<Cost_Vertex_pair>,
+         std::greater<Cost_Vertex_pair> > Priority_queue;
+
+
+ public:
+     explicit Pgr_bdDijkstra(G &pgraph):
+         graph(pgraph),
+         INF((std::numeric_limits<double>::max)()) {
+             m_log << "constructor\n";
+         };
+
+     ~Pgr_bdDijkstra() = default;
+
+
+     Path pgr_bdDijkstra(V start_vertex, V end_vertex, bool only_cost) {
+         m_log << "pgr_bdDijkstra\n";
+         v_source = start_vertex;
+         v_target = end_vertex;
+
+         if (v_source == v_target) {
+            return Path(v_source, v_target);
+         }
+         return bidir_dijkstra(only_cost);
+     }
+
+     std::string log() const {return m_log.str();}
+     void clean_log() {log.clear();}
+     void clear() {
+         while (!forward_queue.empty()) forward_queue.pop();
+         while (!backward_queue.empty()) backward_queue.pop();
+
+         backward_finished.clear();
+         backward_edge.clear();
+         backward_predecessor.clear();
+         backward_cost.clear();
+
+         forward_finished.clear();
+         forward_edge.clear();
+         forward_predecessor.clear();
+         forward_cost.clear();
+     }
+
+
+ private:
+     void initialize() {
+         m_log << "initializing\n";
+         clear();
+         forward_predecessor.resize(graph.num_vertices());
+         forward_finished.resize(graph.num_vertices(), false);
+         forward_edge.resize(graph.num_vertices(), -1);
+         forward_cost.resize(graph.num_vertices(), INF);
+         std::iota(forward_predecessor.begin(), forward_predecessor.end(), 0);
+
+         backward_predecessor.resize(graph.num_vertices());
+         backward_finished.resize(graph.num_vertices(), false);
+         backward_edge.resize(graph.num_vertices(), -1);
+         backward_cost.resize(graph.num_vertices(), INF);
+         std::iota(backward_predecessor.begin(), backward_predecessor.end(), 0);
+
+         v_min_node = -1;
+         best_cost = INF;
+     }
+
+     Path bidir_dijkstra(bool only_cost) {
+         m_log << "bidir_dijkstra\n";
+
+         Pgr_bdDijkstra< G >::initialize();
+
+         forward_cost[v_source] = 0;
+         forward_queue.push(std::make_pair(0.0, v_source));
+
+         backward_cost[v_target] = 0;
+         backward_queue.push(std::make_pair(0.0, v_target));
+
+         while (!forward_queue.empty() &&  !backward_queue.empty()) {
+             auto forward_node = forward_queue.top();
+             auto backward_node = backward_queue.top();
+             /*
+              *  done: there is no path with lower cost
+              */
+             if (forward_node.first == INF || backward_node.first == INF) {
+                 break;
+             }
+
+             /*
+              * Explore from the cheapest side
+              */
+             if (backward_node.first < forward_node.first) {
+                 backward_queue.pop();
+                 if (!backward_finished[backward_node.second]) {
+                     explore_backward(backward_node);
+                 }
+                 if (found(backward_node.second)) {
+                     break;
+                 }
+             } else {
+                 forward_queue.pop();
+                 if (!forward_finished[forward_node.second]) {
+                     explore_forward(forward_node);
+                 }
+                 if (found(forward_node.second)) {
+                     break;
+                 }
+             }
+         }
+
+         if (best_cost == INF) return Path();
+
+         Path forward_path(
+                 graph,
+                 v_source,
+                 v_min_node,
+                 forward_predecessor,
+                 forward_cost,
+                 only_cost,
+                 true);
+         Path backward_path(
+                 graph,
+                 v_target,
+                 v_min_node,
+                 backward_predecessor,
+                 backward_cost,
+                 only_cost,
+                 false);
+         m_log << forward_path;
+         backward_path.reverse();
+         m_log << backward_path;
+         forward_path.append(backward_path);
+         m_log << forward_path;
+         return forward_path;
+     }
+
+
+
+     bool found(const V &node) {
+         /*
+          * Update common node
+          */
+         if (forward_finished[node] && backward_finished[node]) {
+             if (best_cost >= forward_cost[node] + backward_cost[node]) {
+                 v_min_node = node;
+                 best_cost =  forward_cost[node] + backward_cost[node];
+                 return false;
+             } else {
+                 return true;
+             }
+         }
+         return false;
+     }
+
+     void explore_forward(const Cost_Vertex_pair &node) {
+         typename G::EO_i out, out_end;
+
+         auto current_cost = node.first;
+         auto current_node = node.second;
+
+         for (boost::tie(out, out_end) = out_edges(current_node, graph.graph);
+                 out != out_end; ++out) {
+             auto edge_cost = graph[*out].cost;
+             auto next_node = graph.adjacent(current_node, *out);
+
+             if (forward_finished[next_node]) continue;
+
+             if (edge_cost + current_cost < forward_cost[next_node]) {
+                 forward_cost[next_node] = edge_cost + current_cost;
+                 forward_predecessor[next_node] = current_node;
+                 forward_edge[next_node] = graph[*out].id;
+                 forward_queue.push({forward_cost[next_node], next_node});
+             }
+         }
+         forward_finished[current_node] = true;
+     }
+
+     void explore_backward(const Cost_Vertex_pair &node) {
+         typename G::EI_i in, in_end;
+
+         auto current_cost = node.first;
+         auto current_node = node.second;
+
+         for (boost::tie(in, in_end) = in_edges(current_node, graph.graph);
+                 in != in_end; ++in) {
+             auto edge_cost = graph[*in].cost;
+             auto next_node = graph.adjacent(current_node, *in);
+
+             if (backward_finished[next_node]) continue;
+
+             if (edge_cost + current_cost < backward_cost[next_node]) {
+                 backward_cost[next_node] = edge_cost + current_cost;
+                 backward_predecessor[next_node] = current_node;
+                 backward_edge[next_node] = graph[*in].id;
+                 backward_queue.push({backward_cost[next_node], next_node});
+             }
+         }
+         backward_finished[current_node] = true;
+     }
+
+
+ private:
+     G &graph;
+     V v_source;  //!< source descriptor
+     V v_target;  //!< target descriptor
+     V v_min_node;  //!< target descriptor
+
+     double INF;  //!< infinity
+
+     mutable std::ostringstream m_log;
+     Priority_queue forward_queue;
+     Priority_queue backward_queue;
+
+     double best_cost;
+     bool cost_only;
+
+     std::vector<bool> backward_finished;
+     std::vector<int64_t> backward_edge;
+     std::vector<V> backward_predecessor;
+     std::vector<double> backward_cost;
+
+     std::vector<bool> forward_finished;
+     std::vector<int64_t> forward_edge;
+     std::vector<V> forward_predecessor;
+     std::vector<double> forward_cost;
+};
+
+#endif  // SRC_BDDIJKSTRA_SRC_PGR_BDDIJKSTRA_HPP_
diff --git a/src/bdDijkstra/test/bdDijkstra-large.result b/src/bdDijkstra/test/bdDijkstra-large.result
new file mode 100644
index 0000000..73fd1f1
--- /dev/null
+++ b/src/bdDijkstra/test/bdDijkstra-large.result
@@ -0,0 +1,332 @@
+--q1
+1|5700|20787|0.006774
+2|10932|20756|0.040876
+3|10931|20797|0.002564
+4|7661|20796|0.002581
+5|10943|20776|0.040800
+6|10941|20772|0.005720
+7|3415|20771|0.007463
+8|10940|20841|0.187594
+9|10952|20812|0.005045
+10|7034|20811|0.004532
+11|10951|20833|0.177477
+12|10944|20779|0.008539
+13|8910|20778|0.006447
+14|10929|20835|0.071114
+15|10948|20794|0.013276
+16|8908|12990|0.013157
+17|8325|13831|0.009169
+18|3753|13830|0.196045
+19|6774|13829|0.032840
+20|8304|13828|0.117213
+21|9205|13827|0.010639
+22|8994|13165|0.012931
+23|8977|13164|0.008029
+24|8976|13163|0.069895
+25|8993|13162|0.009638
+26|8351|13161|0.099016
+27|8992|13160|0.187353
+28|8991|13159|0.018649
+29|2962|13158|0.071931
+30|1285|13157|0.118340
+31|8989|13156|0.006317
+32|8988|13155|0.079185
+33|21|13154|0.057101
+34|6436|13153|0.083288
+35|637|13152|0.099744
+36|8987|13151|0.057786
+37|398|13150|0.120005
+38|8496|13149|0.069498
+39|8986|13148|0.014323
+40|8985|13167|0.070884
+41|8451|11869|0.006925
+42|476|11868|0.196533
+43|529|11867|0.005677
+44|8450|11871|0.118857
+45|8452|11878|0.083250
+46|8455|11880|0.048821
+47|8456|11883|0.064572
+48|1807|11882|0.101185
+49|8457|11894|0.046805
+50|8465|15481|0.180992
+51|8522|15480|0.016198
+52|9621|15479|0.209882
+53|2808|15478|0.019312
+54|8311|15477|0.113487
+55|8583|16981|0.045667
+56|10046|16982|0.022635
+57|8467|16983|0.022924
+58|9624|15487|0.034042
+59|8468|11899|0.018103
+60|3170|19357|0.047698
+61|9949|19358|0.059093
+62|10479|19359|0.051651
+63|9948|19360|0.051709
+64|8509|19374|0.106794
+65|9595|19375|0.102428
+66|8634|19376|0.107643
+67|10174|19377|0.096140
+68|10482|19378|0.009782
+69|9194|19379|0.102702
+70|4397|19380|0.108243
+71|3002|19381|0.098919
+72|10484|19382|0.006171
+73|5962|19383|0.005429
+74|10485|19384|0.047276
+75|10459|19385|0.052864
+76|7579|19386|0.052378
+77|10455|19387|0.052414
+78|5805|19388|0.081956
+79|10462|19389|0.016974
+80|8768|12598|0.059630
+81|8767|19290|0.117748
+82|10470|19289|0.065769
+83|10469|19288|0.066230
+84|10468|19287|0.111281
+85|9967|16642|0.029056
+86|9956|16621|0.014614
+87|9938|16626|0.007036
+88|9960|16649|0.081206
+89|9968|16650|0.012230
+90|9969|16647|0.012368
+91|5457|6266|0.055134
+92|5458|6267|0.053860
+93|5459|6268|0.109859
+94|5460|6269|0.104952
+95|5461|6270|0.053766
+96|5462|6271|0.046800
+97|5463|12897|0.170300
+98|8880|15060|0.049014
+99|7101|15059|0.047811
+100|9313|15058|0.044674
+101|6733|-1|0.000000
+--q2
+1|6585|17975|0.200230
+2|5367|17976|0.155428
+3|7125|17977|0.178581
+4|613|17978|0.175712
+5|10025|17979|0.173776
+6|5802|6758|0.013489
+7|5803|6759|0.065176
+8|5804|6760|0.008679
+9|5805|6761|0.145097
+10|5806|6762|0.146807
+11|5807|6763|0.097186
+12|5808|6764|0.050569
+13|5809|20663|0.169650
+14|4620|20662|0.023243
+15|5774|20661|0.120390
+16|6482|20660|0.002769
+17|5957|20659|0.087952
+18|8289|20658|0.048701
+19|10884|20657|0.009212
+20|10883|20656|0.080500
+21|9954|20655|0.075280
+22|4390|16876|0.147691
+23|9203|17805|0.063931
+24|7892|17804|0.015429
+25|8417|17803|0.069119
+26|10171|17802|0.075825
+27|9953|17801|0.045079
+28|8859|17800|0.029389
+29|8536|17799|0.072658
+30|10180|17798|0.076558
+31|9592|17797|0.027637
+32|9318|17796|0.114755
+33|10179|17795|0.007150
+34|10178|17794|0.087467
+35|8402|17793|0.062258
+36|6179|17792|0.109483
+37|8508|17791|0.036248
+38|3305|17790|0.069816
+39|8512|17789|0.064158
+40|998|17807|0.471312
+41|2698|2743|0.102019
+42|2563|9039|0.341756
+43|2043|9040|0.587619
+44|4280|9041|0.145996
+45|2317|9042|0.268754
+46|7135|9043|0.121251
+47|4276|9044|0.145396
+48|6167|9045|0.583394
+49|7136|9046|0.043099
+50|7137|19345|0.053510
+51|10475|19344|0.015153
+52|10142|19343|0.064475
+53|10140|17566|0.135370
+54|8539|17565|0.057338
+55|10138|17558|0.064893
+56|6943|17559|0.201703
+57|8140|17560|0.469613
+58|10139|20189|0.060217
+59|10705|20185|0.055053
+60|8247|-1|0.000000
+--q3
+1|9426|14822|0.060319
+2|3606|-1|0.000000
+--q4
+1|3606|14822|0.060319
+2|9426|-1|0.000000
+--q5
+1|6733|15058|0.044674
+2|9313|15059|0.047811
+3|7101|15060|0.049014
+4|8880|12897|0.170300
+5|5463|6271|0.046800
+6|5462|6270|0.053766
+7|5461|6269|0.104952
+8|5460|6268|0.109859
+9|5459|6267|0.053860
+10|5458|6266|0.055134
+11|5457|16647|0.012368
+12|9969|16650|0.012230
+13|9968|16649|0.081206
+14|9960|16626|0.007036
+15|9938|16621|0.014614
+16|9956|16642|0.029056
+17|9967|19287|0.111281
+18|10468|19288|0.066230
+19|10469|19289|0.065769
+20|10470|19290|0.117748
+21|8767|12598|0.059630
+22|8768|19389|0.016974
+23|10462|19388|0.081956
+24|5805|19387|0.052414
+25|10455|19386|0.052378
+26|7579|19385|0.052864
+27|10459|19384|0.047276
+28|10485|19383|0.005429
+29|5962|19382|0.006171
+30|10484|19381|0.098919
+31|3002|19380|0.108243
+32|4397|19379|0.102702
+33|9194|19378|0.009782
+34|10482|19377|0.096140
+35|10174|19376|0.107643
+36|8634|19375|0.102428
+37|9595|19374|0.106794
+38|8509|19360|0.051709
+39|9948|19359|0.051651
+40|10479|19358|0.059093
+41|9949|19357|0.047698
+42|3170|11899|0.018103
+43|8468|15487|0.034042
+44|9624|16983|0.022924
+45|8467|16982|0.022635
+46|10046|16981|0.045667
+47|8583|15477|0.113487
+48|8311|15478|0.019312
+49|2808|15479|0.209882
+50|9621|15480|0.016198
+51|8522|15481|0.180992
+52|8465|11894|0.046805
+53|8457|11882|0.101185
+54|1807|11883|0.064572
+55|8456|11880|0.048821
+56|8455|11878|0.083250
+57|8452|11871|0.118857
+58|8450|11867|0.005677
+59|529|11868|0.196533
+60|476|11869|0.006925
+61|8451|13167|0.070884
+62|8985|13148|0.014323
+63|8986|13149|0.069498
+64|8496|13150|0.120005
+65|398|13151|0.057786
+66|8987|13152|0.099744
+67|637|13153|0.083288
+68|6436|13154|0.057101
+69|21|13155|0.079185
+70|8988|13156|0.006317
+71|8989|13157|0.118340
+72|1285|13158|0.071931
+73|2962|13159|0.018649
+74|8991|13160|0.187353
+75|8992|13161|0.099016
+76|8351|13162|0.009638
+77|8993|13163|0.069895
+78|8976|13164|0.008029
+79|8977|13165|0.012931
+80|8994|13827|0.010639
+81|9205|13828|0.117213
+82|8304|13829|0.032840
+83|6774|13830|0.196045
+84|3753|13831|0.009169
+85|8325|12990|0.013157
+86|8908|20794|0.013276
+87|10948|20835|0.071114
+88|10929|20778|0.006447
+89|8910|20779|0.008539
+90|10944|20833|0.177477
+91|10951|20811|0.004532
+92|7034|20812|0.005045
+93|10952|20841|0.187594
+94|10940|20771|0.007463
+95|3415|20772|0.005720
+96|10941|20776|0.040800
+97|10943|20796|0.002581
+98|7661|20797|0.002564
+99|10931|20756|0.040876
+100|10932|20787|0.006774
+101|5700|-1|0.000000
+--q6
+1|8247|20185|0.055053
+2|10705|20189|0.060217
+3|10139|17560|0.469613
+4|8140|17559|0.201703
+5|6943|17558|0.064893
+6|10138|17565|0.057338
+7|8539|17566|0.135370
+8|10140|19343|0.064475
+9|10142|19344|0.015153
+10|10475|19345|0.053510
+11|7137|9046|0.043099
+12|7136|9045|0.583394
+13|6167|9044|0.145396
+14|4276|9043|0.121251
+15|7135|9042|0.268754
+16|2317|9041|0.145996
+17|4280|9040|0.587619
+18|2043|9039|0.341756
+19|2563|2743|0.102019
+20|2698|17807|0.471312
+21|998|17789|0.064158
+22|8512|17790|0.069816
+23|3305|17791|0.036248
+24|8508|17792|0.109483
+25|6179|17793|0.062258
+26|8402|17794|0.087467
+27|10178|17795|0.007150
+28|10179|17796|0.114755
+29|9318|17797|0.027637
+30|9592|17798|0.076558
+31|10180|17799|0.072658
+32|8536|17800|0.029389
+33|8859|17801|0.045079
+34|9953|17802|0.075825
+35|10171|17803|0.069119
+36|8417|17804|0.015429
+37|7892|17805|0.063931
+38|9203|16876|0.147691
+39|4390|20655|0.075280
+40|9954|20656|0.080500
+41|10883|20657|0.009212
+42|10884|20658|0.048701
+43|8289|20659|0.087952
+44|5957|20660|0.002769
+45|6482|20661|0.120390
+46|5774|20662|0.023243
+47|4620|20663|0.169650
+48|5809|6764|0.050569
+49|5808|6763|0.097186
+50|5807|6762|0.146807
+51|5806|6761|0.145097
+52|5805|6760|0.008679
+53|5804|6759|0.065176
+54|5803|6758|0.013489
+55|5802|17979|0.173776
+56|10025|17978|0.175712
+57|613|17977|0.178581
+58|7125|17976|0.155428
+59|5367|17975|0.200230
+60|6585|-1|0.000000
diff --git a/src/max_flow/src/max_flow_one_to_one_driver.h b/src/bdDijkstra/test/bdDijkstra-large.test.sql
similarity index 52%
rename from src/max_flow/src/max_flow_one_to_one_driver.h
rename to src/bdDijkstra/test/bdDijkstra-large.test.sql
index b19e023..7e6cc5f 100644
--- a/src/max_flow/src/max_flow_one_to_one_driver.h
+++ b/src/bdDijkstra/test/bdDijkstra-large.test.sql
@@ -1,14 +1,8 @@
 /*PGR-GNU*****************************************************************
-File: max_flow_one_to_one_driver.h
 
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
+Copyright (c) 2016 pgRouting developers
 Mail: project at pgrouting.org
 
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
 ------
 
 This program is free software; you can redistribute it and/or modify
@@ -27,30 +21,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_MAX_FLOW_SRC_MAX_FLOW_ONE_TO_ONE_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_MAX_FLOW_ONE_TO_ONE_DRIVER_H_
-
+\echo --q1
+SELECT seq, node, edge, round(cost::numeric, 6)  FROM
+  pgr_bdDijkstra('SELECT * FROM bdd_ways', 5700, 6733, true);
 
-#include "./../../common/src/pgr_types.h"
+\echo --q2
+SELECT seq, node, edge, round(cost::numeric, 6)  FROM
+  pgr_bdDijkstra('SELECT * FROM bdd_ways', 6585, 8247, true);
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+\echo --q3
+SELECT seq, node, edge, round(cost::numeric, 6)  FROM
+  pgr_bdDijkstra('SELECT * FROM bdd_ways', 9426, 3606, true);
 
-    void
-        do_pgr_max_flow_one_to_one(
-            pgr_edge_t *data_edges,
-            size_t total_tuples,
-            int64_t source_vertex,
-            int64_t sink_vertex,
-            char* algorithm,
-            pgr_flow_t **return_tuples,
-            size_t *return_count,
-            char **err_msg);
+\echo --q4
+SELECT seq, node, edge, round(cost::numeric, 6)  FROM
+  pgr_bdDijkstra('SELECT * FROM bdd_ways', 3606, 9426, true);
 
+\echo --q5
+SELECT seq, node, edge, round(cost::numeric, 6)  FROM
+  pgr_bdDijkstra('SELECT * FROM bdd_ways', 6733, 5700, true);
 
-#ifdef __cplusplus
-}
-#endif
+\echo --q6
+SELECT seq, node, edge, round(cost::numeric, 6)  FROM
+  pgr_bdDijkstra('SELECT * FROM bdd_ways', 8247, 6585, true);
 
-#endif  // SRC_MAX_FLOW_SRC_MAX_FLOW_ONE_TO_ONE_DRIVER_H_
diff --git a/src/bdDijkstra/test/doc-pgr_bdDijkstra.result b/src/bdDijkstra/test/doc-pgr_bdDijkstra.result
new file mode 100644
index 0000000..cfe9136
--- /dev/null
+++ b/src/bdDijkstra/test/doc-pgr_bdDijkstra.result
@@ -0,0 +1,17 @@
+-- q1
+1|1|2|4|1|0
+2|2|5|8|1|1
+3|3|6|9|1|2
+4|4|9|16|1|3
+5|5|4|3|1|4
+6|6|3|-1|0|5
+-- q2
+1|1|2|2|1|0
+2|2|3|-1|0|1
+-- q3
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|2|4|1
+1|5|8|1
+2|6|5|1
+3|3|-1|0
+-- q4
diff --git a/src/bdDijkstra/test/doc-pgr_bdDijkstra.test.sql b/src/bdDijkstra/test/doc-pgr_bdDijkstra.test.sql
new file mode 100644
index 0000000..ef2e1af
--- /dev/null
+++ b/src/bdDijkstra/test/doc-pgr_bdDijkstra.test.sql
@@ -0,0 +1,23 @@
+
+\echo -- q1
+SELECT * FROM pgr_bdDijkstra(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3
+);
+
+\echo -- q2
+SELECT * FROM pgr_bdDijkstra(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3,
+    false
+);
+\echo -- q3
+SET client_min_messages TO notice;
+SELECT * FROM pgr_bdDijkstra(
+    'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT FROM edge_table',
+    2, 3,
+    false, -- undirected
+    false  -- no reverse_cost
+);
+\echo -- q4
+
diff --git a/src/bdDijkstra/test/large.data b/src/bdDijkstra/test/large.data
new file mode 100644
index 0000000..2f320cd
--- /dev/null
+++ b/src/bdDijkstra/test/large.data
@@ -0,0 +1,17280 @@
+
+drop table if exists bdd_ways cascade;
+create table bdd_ways (
+    id integer not null primary key,
+    source integer,
+    target integer,
+    cost float8,
+    reverse_cost float8
+);
+
+copy bdd_ways (id, source, target, cost, reverse_cost) from stdin;
+18129	10271	10265	0.407629542119694	0.407629542119694
+14822	9426	3606	0.0603186413824967	0.0603186413824967
+16176	5812	7719	0.198519002375015	0.198519002375015
+16177	7719	9841	1.21182332618964	1.21182332618964
+16178	137	1482	0.199034161669709	0.199034161669709
+16179	1482	3758	0.20606858724026	0.20606858724026
+16217	7903	7844	0.0651768093591436	0.0651768093591436
+16218	7844	6725	0.105799860394335	0.105799860394335
+15793	2298	2322	0.00529554982932783	0.00529554982932783
+14854	9432	9433	0.00987428384236239	0.00987428384236239
+19732	4490	10638	0.0159213769578026	0.0159213769578026
+19734	10639	10640	0.115517684408379	0.115517684408379
+19736	10643	5491	0.200611432022914	0.200611432022914
+19737	5491	9472	0.173586542348893	0.173586542348893
+16211	7730	9848	1.41098736584228	1.41098736584228
+19766	8868	3770	0.15451665559366	0.15451665559366
+19767	3770	10249	0.199225315153312	0.199225315153312
+19769	9471	4895	0.183643472400882	0.183643472400882
+19770	4895	9419	0.162738965694015	0.162738965694015
+16694	9991	9992	0.00824975577533471	0.00824975577533471
+16253	9862	7741	0.405750287416545	0.405750287416545
+16254	7741	5836	0.199719306282583	0.199719306282583
+16255	5836	9863	0.20307644815808	0.20307644815808
+445	449	450	0.199450473576153	0.199450473576153
+20724	9339	9399	0.00989025456720925	0.00989025456720925
+20725	9399	10912	0.0075300269970097	0.0075300269970097
+20727	10911	9342	0.00831469236711343	0.00831469236711343
+18403	7778	10286	0.0505898966958872	0.0505898966958872
+273	283	284	0.0964719650645454	0.0964719650645454
+275	285	286	0.0574345831683482	0.0574345831683482
+276	286	287	0.00381671595135443	0.00381671595135443
+277	288	286	0.0749798421316384	0.0749798421316384
+267	277	278	0.026080790494895	0.026080790494895
+19535	10550	10547	0.0727126892007364	0.0727126892007364
+240	247	248	0.0772679392991742	0.0772679392991742
+242	249	250	0.0969982430766615	0.0969982430766615
+19500	10527	10528	0.0180139213913488	0.0180139213913488
+16008	9778	9779	0.0944640625920965	0.0944640625920965
+15463	8882	1361	0.00984596954833585	0.00984596954833585
+11520	658	713	0.150268576052698	0.150268576052698
+270	280	281	0.0978981798906238	0.0978981798906238
+16247	7743	5838	0.199906773104335	0.199906773104335
+505	499	500	0.0224810261782308	0.0224810261782308
+19508	10448	10534	0.00643702567875165	0.00643702567875165
+16434	9896	3281	0.0340559329983669	0.0340559329983669
+19458	10492	10506	0.00750267115612711	0.00750267115612711
+16700	9995	9996	0.0459960991438913	0.0459960991438913
+17222	5174	8210	0.200775724104805	0.200775724104805
+17224	4240	7299	0.0119914556826953	0.0119914556826953
+345	346	347	0.130802492327731	0.130802492327731
+347	348	349	0.135557185972568	0.135557185972568
+348	349	350	0.136845365159024	0.136845365159024
+355	357	358	0.388256388951567	0.388256388951567
+356	358	359	0.410677079496879	0.410677079496879
+18458	10297	6395	0.0910083144293941	0.0910083144293941
+18424	8333	10290	0.150248967925867	0.150248967925867
+18426	8331	7848	0.20002866768649	0.20002866768649
+16185	9843	7721	1.49406009526399	1.49406009526399
+18230	2552	10281	0.408042509102773	0.408042509102773
+568	561	562	0.0238735645312088	0.0238735645312088
+509	503	504	0.0378269387886271	0.0378269387886271
+510	504	505	0.131422581642966	0.131422581642966
+511	505	506	0.13298824931129	0.13298824931129
+512	506	507	0.0469418788297666	0.0469418788297666
+513	507	508	0.00800396830514923	0.00800396830514923
+514	508	509	0.189986229051577	0.189986229051577
+521	516	517	0.0463139600038384	0.0463139600038384
+12956	1507	1599	0.174395269936236	0.174395269936236
+19854	9521	10661	0.207011877470032	0.207011877470032
+11687	773	774	0.0194846935551434	0.0194846935551434
+20577	10865	10866	0.00985918265048112	0.00985918265048112
+15197	3400	9212	0.0496967641825266	0.0496967641825266
+3594	3445	1174	0.142771364790872	0.142771364790872
+3595	1174	897	0.139794356108886	0.139794356108886
+19561	10564	10565	0.0196154846965349	0.0196154846965349
+16270	6159	9867	0.121531820960243	0.121531820960243
+11805	8417	8418	0.134805848745127	0.134805848745127
+18434	8357	10291	0.154597709113849	0.154597709113849
+15269	8698	8458	0.108561000163296	0.108561000163296
+16600	3169	9952	0.143650464740249	0.143650464740249
+971	982	983	0.153004941982632	0.153004941982632
+19467	10511	10512	0.0226507231527583	0.0226507231527583
+19468	10512	10513	0.0195038602641882	0.0195038602641882
+16605	9954	9955	0.0548421550272179	0.0548421550272179
+16733	5003	10004	0.0399314883998924	0.0399314883998924
+16677	9979	9980	0.023537846703909	0.023537846703909
+15811	9714	9715	0.0297752747528411	0.0297752747528411
+12949	1304	1330	0.0581647037716416	0.0581647037716416
+11964	5499	7073	0.148280923478534	0.148280923478534
+18453	9427	4296	0.104102993198957	0.104102993198957
+20603	10836	10820	0.0118777812250081	0.0118777812250081
+20604	10820	10827	0.0109415807816948	0.0109415807816948
+318	326	327	0.287313248528131	0.287313248528131
+919	933	934	0.0476774715690845	0.0476774715690845
+920	934	935	0.0499176342652801	0.0499176342652801
+921	935	936	0.0512339711733563	0.0512339711733563
+12002	6577	5507	0.29282736629382	0.29282736629382
+2397	2072	2388	0.0939943538292093	0.0939943538292093
+17363	7241	3255	0.194151227318962	0.194151227318962
+3612	954	3458	0.174654702147255	0.174654702147255
+3613	3458	3459	0.161855899930502	0.161855899930502
+3614	3459	3460	0.184505780617563	0.184505780617563
+3615	3460	3461	0.174076203888655	0.174076203888655
+12954	1477	1478	0.162422090556836	0.162422090556836
+16746	6830	10008	0.0662012224002346	0.0662012224002346
+19537	10551	4704	0.0179029738053875	0.0179029738053875
+16747	10008	3664	0.0562861796352498	0.0562861796352498
+12008	8513	4459	0.0575373844976813	0.0575373844976813
+12009	4459	5508	0.146438493557302	0.146438493557302
+11575	1594	1595	0.149695612752929	0.149695612752929
+18383	8920	8960	0.0494721849144557	0.0494721849144557
+19652	10605	10528	0.00763160148090486	0.00763160148090486
+1706	1727	204	0.0785826238386085	0.0785826238386085
+11578	1595	1767	0.0524448615311058	0.0524448615311058
+351	353	354	0.0783794642996216	0.0783794642996216
+16749	53	10005	0.150239248303575	0.150239248303575
+20036	7837	816	0.140917505829302	0.140917505829302
+20637	10876	10878	0.031770930566573	0.031770930566573
+16183	1702	133	0.201630131124766	0.201630131124766
+16753	6829	10009	0.0465845830870589	0.0465845830870589
+18737	2600	1858	0.180581857071932	0.180581857071932
+14686	1987	2318	0.198940266900504	0.198940266900504
+1928	1941	1942	0.123855031305308	0.123855031305308
+18741	8070	7651	0.262731372814963	0.262731372814963
+14685	1546	1987	0.20778014181537	0.20778014181537
+12334	8656	8657	0.0212762444700433	0.0212762444700433
+18873	7825	7987	0.015602795644656	0.015602795644656
+12352	8668	8669	0.00723037090372959	0.00723037090372959
+18669	9460	1818	0.156714358591483	0.156714358591483
+18185	5799	6059	0.199739960113703	0.199739960113703
+18862	9131	9178	0.0368320416365925	0.0368320416365925
+16606	9955	7890	0.148662937956551	0.148662937956551
+12197	424	2296	0.092590985158808	0.092590985158808
+328	329	330	0.0301965908229701	0.0301965908229701
+329	330	331	0.00308879550687601	0.00308879550687601
+15797	2324	2349	0.0197202421063636	0.0197202421063636
+16293	2377	2409	0.0804076908745063	0.0804076908745063
+17370	3254	7297	0.216186214827155	0.216186214827155
+18195	8107	9376	0.183361036437535	0.183361036437535
+17371	7297	40	0.193403542976089	0.193403542976089
+389	391	392	0.10291889633356	0.10291889633356
+18880	1927	7249	0.20098536077548	0.20098536077548
+12842	2658	461	0.235239531220745	0.235239531220745
+18457	7020	10297	0.095413640203737	0.095413640203737
+14684	1545	1546	0.195783826439231	0.195783826439231
+16302	2721	2722	0.0283898956128369	0.0283898956128369
+18674	1569	1570	0.17732367890712	0.17732367890712
+19651	10604	10605	0.00569731320684084	0.00569731320684084
+12365	8674	8675	0.00395306971093599	0.00395306971093599
+18885	80	7308	0.203338584644882	0.203338584644882
+18462	9528	9293	0.135413968590027	0.135413968590027
+17073	8133	10070	0.277242310734424	0.277242310734424
+18887	3267	7247	0.200784680682105	0.200784680682105
+16306	2851	2852	0.0109060813984903	0.0109060813984903
+18803	8953	10352	0.0713096059986916	0.0713096059986916
+12360	8670	8671	0.0527368404826503	0.0527368404826503
+19915	8054	8774	0.178101620538173	0.178101620538173
+19027	10418	8995	0.822032321709027	0.822032321709027
+16313	2929	2636	0.0522503580010493	0.0522503580010493
+18123	10266	7936	0.0422734852594549	0.0422734852594549
+11696	1005	1006	0.0249036708868205	0.0249036708868205
+19031	9820	9825	0.141867922710985	0.141867922710985
+17076	828	3568	0.137092229325187	0.137092229325187
+20641	10879	4802	0.0562973461233787	0.0562973461233787
+19035	9497	9495	0.0285635113459611	0.0285635113459611
+2071	2074	2075	0.135495947312548	0.135495947312548
+15936	9757	6254	0.229061306545615	0.229061306545615
+3229	3143	3144	0.198651066611581	0.198651066611581
+3231	3145	1186	0.167106782855451	0.167106782855451
+20275	10725	6473	0.00777253007071417	0.00777253007071417
+20276	6473	10726	0.00774087009692378	0.00774087009692378
+20277	10710	5573	0.00807679050419555	0.00807679050419555
+16287	1363	2160	0.150908240771596	0.150908240771596
+18901	10379	10378	0.00446883067059111	0.00446883067059111
+18181	6056	4071	0.17853957848987	0.17853957848987
+16288	2160	2273	0.031688963076218	0.031688963076218
+15792	2131	2298	0.0834787229201596	0.0834787229201596
+17362	1905	7241	0.196305657515643	0.196305657515643
+20796	10943	7661	0.00258138052005919	0.00258138052005919
+20797	7661	10931	0.00256438171506516	0.00256438171506516
+17367	3197	6112	0.203543642625323	0.203543642625323
+19564	10566	10567	0.0877791462313442	0.0877791462313442
+17839	9059	10189	0.106477983280495	0.106477983280495
+17124	42	4240	0.19030237977338	0.19030237977338
+15941	9758	9759	0.0631588158295344	0.0631588158295344
+17151	4781	4823	0.202239291799058	0.202239291799058
+14110	421	3623	0.253988429085779	0.253988429085779
+20309	10730	10731	0.0277808040232953	0.0277808040232953
+19606	10584	10500	0.00674103787689334	0.00674103787689334
+18677	2800	2801	0.105225983369234	0.105225983369234
+17096	3720	3721	0.196415457175175	0.196415457175175
+19914	6599	8054	0.176409123849899	0.176409123849899
+14113	3767	3768	0.109524379066099	0.109524379066099
+19575	10571	10572	0.0878577106463745	0.0878577106463745
+19578	7458	10573	0.00838425457343401	0.00838425457343401
+13363	6192	9050	0.200728781748151	0.200728781748151
+18684	3608	1316	0.176123680044276	0.176123680044276
+16406	9888	9885	0.103994018141439	0.103994018141439
+20348	10747	10734	0.124798183375822	0.124798183375822
+13367	487	9053	0.0916792010447841	0.0916792010447841
+17112	3776	3932	0.0318567386044335	0.0318567386044335
+18472	7703	9005	0.191779872148763	0.191779872148763
+13566	4	3088	0.053682748576131	0.053682748576131
+14690	2868	3129	0.152693011202245	0.152693011202245
+19632	10519	10594	0.0691883113691504	0.0691883113691504
+16442	9898	9900	0.0593229160576478	0.0593229160576478
+19557	10561	10562	0.0114115661676901	0.0114115661676901
+17140	3200	3089	0.200962427212495	0.200962427212495
+19588	10578	7459	0.00830641959761081	0.00830641959761081
+19590	10509	10579	0.0688000441577074	0.0688000441577074
+4371	4093	4094	0.0474398468296831	0.0474398468296831
+14821	4531	9426	0.131844452515128	0.131844452515128
+20313	10734	10735	0.135778003167023	0.135778003167023
+16512	8896	9922	0.103245634213484	0.103245634213484
+19627	10592	10501	0.0068017037739497	0.0068017037739497
+3432	3319	3320	0.201627360859163	0.201627360859163
+3631	1572	3475	0.135693159195378	0.135693159195378
+3632	3475	3476	0.119283891700122	0.119283891700122
+3634	3211	3477	0.201273972346718	0.201273972346718
+3635	3477	1922	0.201175175309244	0.201175175309244
+17122	4176	3542	0.20232729922556	0.20232729922556
+16444	9901	9902	0.179094898504736	0.179094898504736
+20287	9383	6472	0.201518688053588	0.201518688053588
+20014	8858	10180	0.0735203760297937	0.0735203760297937
+19233	10457	10420	0.0372086096742178	0.0372086096742178
+4657	4299	3840	0.0473685540434106	0.0473685540434106
+14125	3659	3925	0.129261803351535	0.129261803351535
+3623	3469	3470	0.140706278566204	0.140706278566204
+18908	10386	10387	0.0302347602157808	0.0302347602157808
+15943	9760	8085	0.0293664602336856	0.0293664602336856
+18142	10269	6300	0.0570177692907992	0.0570177692907992
+17020	10057	10058	0.15155359133236	0.15155359133236
+17158	5010	5011	0.0757362739800239	0.0757362739800239
+16649	9960	9968	0.0812055546813917	0.0812055546813917
+17022	10055	10058	0.0158274438461504	0.0158274438461504
+20617	10793	10829	0.0486626332146345	0.0486626332146345
+17292	7745	7192	0.403926945097788	0.403926945097788
+17953	8781	10225	0.0170107340919314	0.0170107340919314
+17142	4509	4616	0.202021015829292	0.202021015829292
+14706	5161	5162	0.0515278311632085	0.0515278311632085
+17293	7192	8754	0.202354446551741	0.202354446551741
+16653	9971	9972	0.0159150831985239	0.0159150831985239
+17955	10229	10228	0.0205875980561605	0.0205875980561605
+16775	9905	10011	0.0628512846047373	0.0628512846047373
+20430	10790	10791	0.0319464035455711	0.0319464035455711
+17144	4683	4684	0.183413882011105	0.183413882011105
+17482	367	368	0.0073956069596753	0.0073956069596753
+17483	368	4274	0.0740383655738795	0.0740383655738795
+18131	6045	4102	0.143663826029319	0.143663826029319
+17166	3547	48	0.197940166378652	0.197940166378652
+17957	10231	10232	0.0468160398694911	0.0468160398694911
+19584	10563	10576	0.0699872416467849	0.0699872416467849
+19587	10577	10578	0.0879343964012276	0.0879343964012276
+16540	7834	812	0.139228180638449	0.139228180638449
+20323	10742	10732	0.00891011779971553	0.00891011779971553
+14118	3946	4047	0.0370997345222532	0.0370997345222532
+20325	10743	10744	0.00292597509729593	0.00292597509729593
+17681	9050	9814	0.396292789359983	0.396292789359983
+17683	10165	9814	0.392184725428778	0.392184725428778
+17303	3516	4258	0.201418622589808	0.201418622589808
+17690	6173	6191	0.0979652724466413	0.0979652724466413
+17305	8744	8715	0.198903931890441	0.198903931890441
+19815	6602	8057	0.177734109816075	0.177734109816075
+20432	10754	10792	0.00161805170064806	0.00161805170064806
+5752	4838	5081	0.0155515271366432	0.0155515271366432
+14703	5104	5105	0.188886837572701	0.188886837572701
+19833	10653	10654	0.205572346227123	0.205572346227123
+4807	4413	4414	0.0998668735468864	0.0998668735468864
+3650	3488	3106	0.174737901377497	0.174737901377497
+3651	3106	3491	0.194747174928978	0.194747174928978
+17379	5746	5747	0.00818765310677506	0.00818765310677506
+20468	10818	10755	0.173765546097308	0.173765546097308
+17164	1802	4242	0.207580745712203	0.207580745712203
+6015	5267	5268	0.103281094663511	0.103281094663511
+18137	10263	10272	0.406284221439373	0.406284221439373
+17291	10085	7745	0.543012306463268	0.543012306463268
+14709	5330	4870	0.190973371939833	0.190973371939833
+18138	4093	6038	0.184675507720467	0.184675507720467
+16651	9969	9970	0.100708681464822	0.100708681464822
+14710	4870	2220	0.162414391352976	0.162414391352976
+18505	6386	17	0.132879414135856	0.132879414135856
+14727	6220	6303	0.0511187399227223	0.0511187399227223
+17176	5390	5408	0.208329703574267	0.208329703574267
+20791	8358	10898	0.00761490800516594	0.00761490800516594
+17146	1801	4241	0.206257539278646	0.206257539278646
+14731	6303	5467	0.125799145673022	0.125799145673022
+18536	5557	10309	0.366989977501724	0.366989977501724
+14723	6016	5469	0.171433952660857	0.171433952660857
+18516	2412	10295	0.0120882825664803	0.0120882825664803
+17153	1911	4839	0.199025256937054	0.199025256937054
+17154	4839	3202	0.202009935716231	0.202009935716231
+18288	6762	6873	0.146634632629247	0.146634632629247
+20338	10735	10738	0.035049164748108	0.035049164748108
+18690	5770	5771	0.102556159708994	0.102556159708994
+20424	10785	10786	0.0731561229415083	0.0731561229415083
+5740	1710	5071	0.202613094112382	0.202613094112382
+14744	2216	4866	0.159742631617364	0.159742631617364
+18148	6033	4087	0.198416361234407	0.198416361234407
+17476	4654	473	0.0704097319033273	0.0704097319033273
+18150	4100	6044	0.175955927487578	0.175955927487578
+6851	5860	5861	0.109631940187014	0.109631940187014
+14841	7164	7777	0.0983349446501409	0.0983349446501409
+18242	6768	3993	0.201258062688176	0.201258062688176
+18273	6645	6666	0.202152498738845	0.202152498738845
+20386	10770	10771	0.0535943445752728	0.0535943445752728
+6983	5958	5959	0.149650557500517	0.149650557500517
+18306	3982	7041	0.200503190670894	0.200503190670894
+20438	10796	10797	0.0670860233753639	0.0670860233753639
+20500	10838	10824	0.0121125751150814	0.0121125751150814
+14725	977	5162	0.0458445478179373	0.0458445478179373
+6627	5707	1851	0.181903999460801	0.181903999460801
+3671	3508	3509	0.00436333612190551	0.00436333612190551
+3672	3509	3510	0.046781667512879	0.046781667512879
+7657	3346	6356	0.257422789129267	0.257422789129267
+14872	3240	5733	0.139141273161543	0.139141273161543
+18469	9138	10300	0.19595637710121	0.19595637710121
+18266	1691	6545	0.203809181046432	0.203809181046432
+18272	6629	6645	0.186774688365716	0.186774688365716
+8163	6669	2301	0.106319016804013	0.106319016804013
+14130	9280	9279	0.186364690747119	0.186364690747119
+14771	2209	923	0.186974313150198	0.186974313150198
+18247	9377	8108	0.184107753412847	0.184107753412847
+18704	7871	4059	0.176577842625336	0.176577842625336
+15923	9752	9072	0.0836347230210634	0.0836347230210634
+18541	7538	8363	0.0639425794382817	0.0639425794382817
+14134	509	9280	0.0291273215905741	0.0291273215905741
+15926	498	9102	0.0623752088587868	0.0623752088587868
+11651	8350	4542	0.134464503460642	0.134464503460642
+18291	6752	3975	0.201306126180051	0.201306126180051
+14752	5933	6903	0.0776419963986988	0.0776419963986988
+15930	9755	8063	0.0157417186886108	0.0157417186886108
+8622	3936	5625	0.097083190357132	0.097083190357132
+14891	9021	8103	0.0999072642817978	0.0999072642817978
+11386	8241	8242	0.105664996309114	0.105664996309114
+11647	7709	8347	0.0834163322393992	0.0834163322393992
+12254	8618	8619	0.0216515691565663	0.0216515691565663
+20225	8757	10713	0.181625832679021	0.181625832679021
+11373	437	8225	0.0125774855889878	0.0125774855889878
+20018	6572	4453	0.146908325275574	0.146908325275574
+20512	10063	10060	0.007549583111055	0.007549583111055
+12048	8527	8528	0.0740401240439702	0.0740401240439702
+14785	7957	5458	0.175576789379919	0.175576789379919
+12271	8518	8628	0.0787132719056346	0.0787132719056346
+11383	8239	8240	0.0842941433278933	0.0842941433278933
+11370	7971	7972	0.0117965527041302	0.0117965527041302
+11414	7984	7985	0.287379755335746	0.287379755335746
+11432	415	8254	0.452015989776023	0.452015989776023
+20350	10730	2968	0.0120941619304981	0.0120941619304981
+8748	5336	6979	0.175571360985687	0.175571360985687
+3691	3527	3528	0.0472108481996503	0.0472108481996503
+3692	3528	2737	0.0483230367668469	0.0483230367668469
+3697	3532	3533	0.0559788343200402	0.0559788343200402
+15221	3833	8055	0.052921136155694	0.052921136155694
+12311	8645	8476	0.144977480276504	0.144977480276504
+12312	8476	8646	0.198472144343311	0.198472144343311
+12314	8643	8559	0.0228329493898265	0.0228329493898265
+20367	10748	10749	0.0037547184046713	0.0037547184046713
+9843	7548	7549	0.124919366653633	0.124919366653633
+12301	4845	8524	0.0473127526043962	0.0473127526043962
+18331	7594	6751	0.14027973854483	0.14027973854483
+11791	8037	2687	0.147733787935878	0.147733787935878
+15865	8762	8763	0.0396940145175954	0.0396940145175954
+20529	10029	10846	0.0100359682174695	0.0100359682174695
+17959	6241	5194	0.169083036600962	0.169083036600962
+18370	6889	5250	0.0518724586298984	0.0518724586298984
+15225	8180	5297	0.041720314716376	0.041720314716376
+9071	2781	7147	0.103689348353689	0.103689348353689
+3710	3546	1524	0.0515313284334221	0.0515313284334221
+20305	10728	8110	0.168482747904973	0.168482747904973
+3711	1524	3547	0.0494425170647519	0.0494425170647519
+14739	6538	6607	0.183986331427456	0.183986331427456
+11372	290	437	0.0112130207438012	0.0112130207438012
+18381	8535	8919	0.0499954488007408	0.0499954488007408
+12246	8615	4817	0.146110905108578	0.146110905108578
+11425	8251	8078	0.7456254172446	0.7456254172446
+12247	4817	5788	0.143910603528138	0.143910603528138
+12818	299	8256	0.476082599329394	0.476082599329394
+20410	8976	9207	0.0123297683183119	0.0123297683183119
+12263	8621	8622	0.00671006625102598	0.00671006625102598
+11559	8319	7714	0.15000222129108	0.15000222129108
+15229	8334	8335	0.02937581800825	0.02937581800825
+18377	6069	2549	0.201785565265125	0.201785565265125
+11447	387	8258	0.356209179582772	0.356209179582772
+11812	1881	8316	0.0255940628377938	0.0255940628377938
+14781	921	2207	0.190721648601815	0.190721648601815
+20233	10711	10715	0.00692211182471866	0.00692211182471866
+20363	9209	8991	0.0223079019168015	0.0223079019168015
+18388	8990	9001	0.0110856339057274	0.0110856339057274
+20651	10033	10881	0.0461798387778834	0.0461798387778834
+13366	9052	487	0.0981014313599177	0.0981014313599177
+12303	8639	8640	0.0320591977276875	0.0320591977276875
+20243	10716	10713	0.0141769281388351	0.0141769281388351
+14749	4864	2214	0.160302668775638	0.160302668775638
+13468	309	9094	0.0506545738820493	0.0506545738820493
+18336	1689	7624	0.203108569942922	0.203108569942922
+12937	1303	1970	0.0130832107015757	0.0130832107015757
+20525	10839	1286	0.00844906120646156	0.00844906120646156
+10918	8035	5970	0.0219813767800627	0.0219813767800627
+14913	7600	2016	0.104505986927597	0.104505986927597
+20351	2968	10750	0.0147633294839236	0.0147633294839236
+15880	8763	8762	0.0396940145175954	0.0396940145175954
+20353	9401	9336	0.00949287140929792	0.00949287140929792
+12244	8613	8614	0.00356038865266788	0.00356038865266788
+11216	8164	8165	0.0796169077304663	0.0796169077304663
+14132	9279	507	0.0225847659450503	0.0225847659450503
+15875	8940	8978	0.0300860996423522	0.0300860996423522
+11429	8253	319	0.299890155674121	0.299890155674121
+20371	2707	10756	0.00655605333712087	0.00655605333712087
+14677	3794	9330	0.199283554137764	0.199283554137764
+18476	4295	2411	0.100910451832155	0.100910451832155
+18478	5542	9039	0.101169435731023	0.101169435731023
+11770	3014	8406	0.0500338703103734	0.0500338703103734
+11823	8421	8424	0.377719915283211	0.377719915283211
+10669	7915	6847	0.0947158385157811	0.0947158385157811
+3731	3565	3566	0.0486546976993217	0.0486546976993217
+3732	3566	3567	0.109486664803565	0.109486664803565
+3733	3567	1037	0.105564006595596	0.105564006595596
+11897	8466	8467	0.103343928827087	0.103343928827087
+11947	397	8496	0.0965081758273934	0.0965081758273934
+18380	8494	8535	0.0492964457876769	0.0492964457876769
+20364	8991	10755	0.00786332111355482	0.00786332111355482
+12162	8315	8569	0.02262255215678	0.02262255215678
+12218	8594	2290	0.0213925904868369	0.0213925904868369
+14931	3354	2767	0.0942765011393086	0.0942765011393086
+18498	9212	9220	0.133514882064815	0.133514882064815
+20706	9190	10885	0.00984120017613085	0.00984120017613085
+12373	8677	8678	0.0486250060422128	0.0486250060422128
+14967	7610	7264	0.0940136459475559	0.0940136459475559
+15895	9441	5377	0.102059140746775	0.102059140746775
+13974	9251	9129	0.169864606266652	0.169864606266652
+20368	10749	10733	0.00357512667889407	0.00357512667889407
+14674	2227	943	0.182649781226047	0.182649781226047
+14178	3784	8864	0.153337805989006	0.153337805989006
+19290	10470	8767	0.117748080941626	0.117748080941626
+12575	8759	8760	0.0168627139608601	0.0168627139608601
+14983	8789	8796	0.105952161931752	0.105952161931752
+14984	8796	8878	0.106413855851218	0.106413855851218
+20419	10774	3587	0.00984290685312232	0.00984290685312232
+15867	8770	8771	0.0147638851882813	0.0147638851882813
+11263	8195	8196	0.0967030898556648	0.0967030898556648
+16192	5817	7723	0.19660431304726	0.19660431304726
+20360	8992	10754	0.00404589397436802	0.00404589397436802
+19297	10471	1942	0.0559273520312209	0.0559273520312209
+15868	8833	5588	0.0188635032964949	0.0188635032964949
+19299	9959	564	0.00433589917958362	0.00433589917958362
+20814	10936	7168	0.0050166121287054	0.0050166121287054
+20823	10780	9337	0.0124085195369407	0.0124085195369407
+19301	1942	10467	0.0736734316331574	0.0736734316331574
+12854	4133	6696	0.093947304456844	0.093947304456844
+15004	6269	9466	0.0522837092305697	0.0522837092305697
+19305	10464	10461	0.0144782338635936	0.0144782338635936
+19307	10467	611	0.103622552493386	0.103622552493386
+11685	8366	1032	0.0209886592874132	0.0209886592874132
+20820	10919	8330	0.00776069150921458	0.00776069150921458
+11643	8347	4658	0.0580128250256257	0.0580128250256257
+12924	8890	8891	0.0884309215437497	0.0884309215437497
+15230	8360	8248	0.0379210675749848	0.0379210675749848
+13013	8916	2892	0.160989403082392	0.160989403082392
+12051	8531	8529	0.0116601753914343	0.0116601753914343
+20828	9205	8443	0.0104227726118747	0.0104227726118747
+18615	7410	5865	0.176922387553379	0.176922387553379
+14852	8621	9432	0.00675320800603643	0.00675320800603643
+18616	5865	9447	0.157075160700523	0.157075160700523
+18618	1314	9447	0.0196279343381406	0.0196279343381406
+11994	8505	8048	0.149802391835517	0.149802391835517
+18621	2586	5181	0.176412393215512	0.176412393215512
+18622	5181	5649	0.1069372720504	0.1069372720504
+19473	7476	10517	0.0101658403815209	0.0101658403815209
+19474	10517	10518	0.00993077177126307	0.00993077177126307
+18480	9040	9120	0.135103567036488	0.135103567036488
+20833	10944	10951	0.17747662532422	0.17747662532422
+19475	10518	10519	0.0191608413173093	0.0191608413173093
+19512	10537	10447	0.00647615513057594	0.00647615513057594
+2	2	3	0.283463280100036	0.283463280100036
+3	3	4	0.0333775918694363	0.0333775918694363
+18628	1310	9484	0.175555113641419	0.175555113641419
+12242	8611	8612	0.0998376585619669	0.0998376585619669
+5	5	6	0.348594358341424	0.348594358341424
+15909	9104	9105	0.0387441124726526	0.0387441124726526
+15903	6134	8603	0.0260893170771595	0.0260893170771595
+15878	8833	8770	0.0398025148628561	0.0398025148628561
+13625	7013	2274	0.0942922296438968	0.0942922296438968
+15024	4136	2663	0.0946854927112821	0.0946854927112821
+13651	9159	1177	0.0568269678125187	0.0568269678125187
+6	6	7	0.250747670173169	0.250747670173169
+20837	10949	10945	0.0947762411619158	0.0947762411619158
+15887	8842	9619	0.0119243513569086	0.0119243513569086
+19481	10511	10486	0.0687637700371023	0.0687637700371023
+13777	9191	292	0.0113408171424215	0.0113408171424215
+19493	10463	10523	0.0181472136448415	0.0181472136448415
+13799	9195	5081	0.0314508853846434	0.0314508853846434
+19487	10426	10427	0.0081618196829418	0.0081618196829418
+18570	10325	10322	0.0277653060168724	0.0277653060168724
+15042	6787	4718	0.0916704601824836	0.0916704601824836
+15043	4718	9414	0.0490846601218478	0.0490846601218478
+19494	10523	7469	0.0159566577035026	0.0159566577035026
+13814	4934	9200	0.0155640797101011	0.0155640797101011
+13008	8914	2891	0.0117402105605065	0.0117402105605065
+17570	10143	10144	0.0307556488479174	0.0307556488479174
+20841	10952	10940	0.18759449218266	0.18759449218266
+15726	7317	9449	0.0375532628709029	0.0375532628709029
+15904	8603	9697	0.00690416936559141	0.00690416936559141
+13877	4478	2804	0.135897648680331	0.135897648680331
+18633	4044	4045	0.00275409212275412	0.00275409212275412
+15057	9477	6733	0.054468335249091	0.054468335249091
+15058	6733	9313	0.0446744870999848	0.0446744870999848
+13910	9228	3317	0.0850892170141282	0.0850892170141282
+12689	2057	8805	0.133235184271089	0.133235184271089
+18656	6223	7657	0.27620827404325	0.27620827404325
+15858	9732	9739	0.0147062242308904	0.0147062242308904
+20843	10954	10751	0.181296524715589	0.181296524715589
+16082	366	255	0.573997033805984	0.573997033805984
+16084	9817	9818	0.0154245817929875	0.0154245817929875
+16127	4555	9122	0.0381695434595099	0.0381695434595099
+14675	943	5941	0.178224321703034	0.178224321703034
+15285	8799	3187	0.00972670306222712	0.00972670306222712
+15873	8879	8889	0.108518344615814	0.108518344615814
+15405	9585	9582	0.0323190665796029	0.0323190665796029
+16246	9859	7743	0.402195232762633	0.402195232762633
+13026	1537	4265	0.200987668621859	0.200987668621859
+3749	3578	3579	0.097584814173116	0.097584814173116
+3750	3579	848	0.0994883860112991	0.0994883860112991
+3752	3580	3581	0.0190511917089631	0.0190511917089631
+19488	10427	4703	0.0206936304458077	0.0206936304458077
+20829	8443	10954	0.0118059106132393	0.0118059106132393
+16351	7009	2285	0.0978474396198024	0.0978474396198024
+16382	9879	9771	0.00992783408407401	0.00992783408407401
+16432	9894	9895	0.0235353492080929	0.0235353492080929
+14329	9328	602	0.0664699646577648	0.0664699646577648
+20848	10950	10953	0.0184888911494772	0.0184888911494772
+13445	9078	9079	0.200451693111106	0.200451693111106
+16391	3033	9847	0.0236566168850551	0.0236566168850551
+15437	9602	9603	0.109740104543279	0.109740104543279
+18475	9005	4295	0.117455212214086	0.117455212214086
+19609	10585	10503	0.00693839845805758	0.00693839845805758
+16644	564	565	0.0167681949380125	0.0167681949380125
+18641	5875	7416	0.178910174745805	0.178910174745805
+16758	7565	10010	0.0537198584701325	0.0537198584701325
+13557	9032	9033	0.185435393968361	0.185435393968361
+19028	8995	7690	0.0430021373921601	0.0430021373921601
+17062	10068	2247	0.0643618782275657	0.0643618782275657
+16833	593	9915	0.00807834974542274	0.00807834974542274
+18614	4049	7410	0.176200842798068	0.176200842798068
+16902	74	7306	0.205595181095446	0.205595181095446
+17068	10069	675	0.181147813198563	0.181147813198563
+17009	4847	10051	0.0109841519151342	0.0109841519151342
+13581	9133	9134	0.0795179133195768	0.0795179133195768
+17207	9891	234	0.00951110757861507	0.00951110757861507
+19644	10601	10602	0.00459389199037625	0.00459389199037625
+14887	7456	5693	0.103533596199028	0.103533596199028
+15073	9480	8706	0.0156808972883418	0.0156808972883418
+18617	9447	1314	0.0196279343381406	0.0196279343381406
+19477	10520	10521	0.0112440070511006	0.0112440070511006
+19479	1872	10522	0.0183337010143588	0.0183337010143588
+18629	9484	5862	0.00360275623818702	0.00360275623818702
+17406	3210	6122	0.199774981063921	0.199774981063921
+15450	9609	9610	0.118608570416781	0.118608570416781
+14988	9309	9464	0.101172548296122	0.101172548296122
+15965	1443	7623	0.202446963416806	0.202446963416806
+13793	4819	8514	0.148483674564771	0.148483674564771
+3766	2339	3595	0.17591583054365	0.17591583054365
+3767	3595	3596	0.243702533330372	0.243702533330372
+15851	5596	9735	0.0497175089074512	0.0497175089074512
+15124	6515	226	0.0653425651240956	0.0653425651240956
+15449	9608	9609	0.0645563810419252	0.0645563810419252
+13914	4840	9230	0.275162192340763	0.275162192340763
+13922	9137	9233	0.0899935621999505	0.0899935621999505
+3788	1148	1821	0.103455086525091	0.103455086525091
+18632	7408	4044	0.178025429971464	0.178025429971464
+15247	9542	8177	0.0166658349694615	0.0166658349694615
+15460	9613	9614	0.039786363249444	0.039786363249444
+15461	8882	9615	0.0277165465497567	0.0277165465497567
+15546	9646	9647	0.0122997635777285	0.0122997635777285
+15889	8978	1101	0.0278428503732722	0.0278428503732722
+236	30	31	0.0623462807475453	0.0623462807475453
+239	246	247	0.10870569104286	0.10870569104286
+19602	10483	10583	0.0688347644552014	0.0688347644552014
+19497	7457	10525	0.0182919034833847	0.0182919034833847
+15292	9561	9562	0.0285639174620334	0.0285639174620334
+16011	9781	9782	0.0666625832869129	0.0666625832869129
+204	216	217	0.0495486567174314	0.0495486567174314
+16105	9825	9826	0.769429574289864	0.769429574289864
+19504	10531	10532	0.00490376342058079	0.00490376342058079
+19505	10532	10533	0.0113536336982688	0.0113536336982688
+15983	4420	7372	0.10794760335784	0.10794760335784
+16336	6683	8026	0.0934572989494279	0.0934572989494279
+15146	8245	9501	0.259647287125597	0.259647287125597
+16378	2678	4127	0.105747053096561	0.105747053096561
+15168	9509	3381	0.0515085102071127	0.0515085102071127
+14670	9413	5473	0.178785252044424	0.178785252044424
+15438	9603	2287	0.0101078833454114	0.0101078833454114
+16618	7974	3673	0.0581937370992888	0.0581937370992888
+16393	9876	3281	0.0515999951055545	0.0515999951055545
+11613	742	743	0.188831137780044	0.188831137780044
+16792	6964	10013	0.15953431348719	0.15953431348719
+16830	9911	10017	0.00322492509560211	0.00322492509560211
+17016	10055	10056	0.150978646033743	0.150978646033743
+17201	10074	6392	0.100421160552702	0.100421160552702
+19702	10621	10622	0.0560876276790842	0.0560876276790842
+17391	10095	8785	0.114852910416621	0.114852910416621
+18648	4053	10111	0.195636353938149	0.195636353938149
+17545	8264	8929	0.192238762103777	0.192238762103777
+19596	10507	10581	0.0688892384795374	0.0688892384795374
+18652	8072	7653	0.262512305989993	0.262512305989993
+18119	4085	6030	0.181292795599691	0.181292795599691
+17647	8242	223	0.0953499590487046	0.0953499590487046
+17960	5194	10233	0.0515871143302905	0.0515871143302905
+17964	10236	10232	0.0350820368831285	0.0350820368831285
+17785	8986	8497	0.0646311177616063	0.0646311177616063
+17753	10173	8485	0.0489434224402369	0.0489434224402369
+11535	1543	1544	0.137939265537406	0.137939265537406
+17819	8676	10186	0.0370735665978641	0.0370735665978641
+17777	6508	6993	0.160336610713707	0.160336610713707
+3801	3083	3195	0.200442064419022	0.200442064419022
+3802	3195	3622	0.204398520601987	0.204398520601987
+3803	3622	1902	0.199020966616341	0.199020966616341
+3804	1902	3624	0.19721596773449	0.19721596773449
+17851	10193	10194	0.0260169590696429	0.0260169590696429
+12958	1630	1631	0.127437048321071	0.127437048321071
+18661	10206	7647	0.17872352996795	0.17872352996795
+19942	10671	4953	0.0511372085610231	0.0511372085610231
+12964	1770	1771	0.0893785434926153	0.0893785434926153
+18602	7656	6222	0.275287629645573	0.275287629645573
+18232	2550	6070	0.201831098039417	0.201831098039417
+18761	10339	10340	0.0412859123428405	0.0412859123428405
+4425	950	4134	0.165887036500793	0.165887036500793
+4426	4134	4135	0.171020798065652	0.171020798065652
+4427	4135	4136	0.184950521487565	0.184950521487565
+18817	10355	8431	0.088262856016995	0.088262856016995
+4447	4149	4150	0.111495530172709	0.111495530172709
+4448	4150	4151	0.101644653962629	0.101644653962629
+19603	10583	10496	0.00675773327585877	0.00675773327585877
+19855	10661	10662	0.203042057763788	0.203042057763788
+20643	10879	10877	0.0314570447479651	0.0314570447479651
+19158	8423	8388	0.0601966609853944	0.0601966609853944
+19615	10587	10502	0.00686995556939521	0.00686995556939521
+12339	8656	2501	0.0156699758852849	0.0156699758852849
+19328	9895	10473	0.0277673159561869	0.0277673159561869
+19490	10441	10447	0.0184697170100914	0.0184697170100914
+19492	10448	10463	0.00504831489789659	0.00504831489789659
+19428	10489	7287	0.156514421452779	0.156514421452779
+19286	563	9967	0.0537140867907163	0.0537140867907163
+19621	10589	10590	0.0274773310120508	0.0274773310120508
+19441	10492	10493	0.0201930874558464	0.0201930874558464
+19789	9476	4873	0.191586478139089	0.191586478139089
+19805	2619	10411	0.177645225629424	0.177645225629424
+18409	10287	10288	0.0734556316276251	0.0734556316276251
+20191	462	10707	0.132640175005266	0.132640175005266
+14823	3606	9335	0.071748078170483	0.071748078170483
+14824	9335	9402	0.00997675672475066	0.00997675672475066
+14825	9402	8301	0.0653806855821323	0.0653806855821323
+14830	4022	8322	0.0483334251113916	0.0483334251113916
+14832	5668	7026	0.0386007852757077	0.0386007852757077
+4468	4163	4164	0.0480674059146442	0.0480674059146442
+4469	4164	991	0.0502312521862823	0.0502312521862823
+14857	8907	9435	0.0508107102861791	0.0508107102861791
+14859	9436	9437	0.0520105887104481	0.0520105887104481
+15729	9448	9449	0.154385795199696	0.154385795199696
+18619	9447	9452	0.260663192513491	0.260663192513491
+14936	5495	8700	0.014007087915999	0.014007087915999
+20590	2705	10795	0.0154885940353102	0.0154885940353102
+14972	2754	7005	0.0961416158900631	0.0961416158900631
+15045	5118	4946	0.0490898990370342	0.0490898990370342
+15046	4946	7151	0.0490351349560296	0.0490351349560296
+15963	6397	4362	0.0791794536243071	0.0791794536243071
+15989	9452	4506	0.0512507321563124	0.0512507321563124
+16056	308	4648	0.208884022844132	0.208884022844132
+15158	9504	7749	0.203686953618576	0.203686953618576
+16076	8934	9417	0.0908088237702457	0.0908088237702457
+16106	9826	214	0.019707054216564	0.019707054216564
+19536	10547	10551	0.00289118198627037	0.00289118198627037
+16257	8751	9267	0.200818549492747	0.200818549492747
+16332	5124	7146	0.105923351259383	0.105923351259383
+3817	3633	3634	0.395318196729382	0.395318196729382
+16359	2326	5997	0.152345269926906	0.152345269926906
+5101	4522	4624	0.135948680255943	0.135948680255943
+18688	2602	1859	0.181461056809498	0.181461056809498
+16455	9910	8957	0.00642990572974513	0.00642990572974513
+16456	8957	9911	0.00773671564019088	0.00773671564019088
+16715	132	1701	0.201952446468105	0.201952446468105
+17236	31	134	0.108163538194537	0.108163538194537
+17237	134	246	0.0735610173824186	0.0735610173824186
+17521	3940	6651	0.0163911525787958	0.0163911525787958
+18097	10256	2169	0.0491222602233141	0.0491222602233141
+18207	8329	7847	0.200166859157176	0.200166859157176
+18394	5586	2554	0.157693803770027	0.157693803770027
+18972	7756	3621	0.0947044796448553	0.0947044796448553
+19237	10458	10457	0.00406582159548868	0.00406582159548868
+19229	10453	10454	0.0676096530689986	0.0676096530689986
+3858	3667	3668	0.0415319443079903	0.0415319443079903
+3859	3668	3669	0.0482985746708946	0.0482985746708946
+19322	2203	916	0.200210598103272	0.200210598103272
+15203	7160	9528	0.0514241954874698	0.0514241954874698
+19690	10616	10397	0.0495068144600769	0.0495068144600769
+19692	10617	10398	0.0503641661598134	0.0503641661598134
+19879	5198	10672	0.124230342536198	0.124230342536198
+19967	10686	9720	0.110372440140764	0.110372440140764
+19969	9505	1931	0.205435822074821	0.205435822074821
+19971	9711	1933	0.17400772229687	0.17400772229687
+19972	1933	10306	0.208946577187585	0.208946577187585
+3875	3685	3686	0.109844105363612	0.109844105363612
+17510	10120	10119	0.158859506306984	0.158859506306984
+676	669	670	0.102292085856109	0.102292085856109
+3893	3696	3697	0.200080946502272	0.200080946502272
+3894	3697	3698	0.204567969900071	0.204567969900071
+3896	3699	3700	0.197370997762066	0.197370997762066
+20255	5749	10704	0.00800649085379587	0.00800649085379587
+20320	10739	10740	0.00883881362478868	0.00883881362478868
+15207	1113	9529	0.0508930389416975	0.0508930389416975
+15251	9544	9536	0.0327374869648338	0.0327374869648338
+15379	8806	2642	0.105298522418053	0.105298522418053
+18635	7865	1846	0.175356787311383	0.175356787311383
+15485	9612	9616	0.0684703360070514	0.0684703360070514
+15516	9635	3736	0.0550573183727317	0.0550573183727317
+19480	10522	10511	0.00442285695753415	0.00442285695753415
+15574	9660	9464	0.175338544663329	0.175338544663329
+15598	7585	2003	0.0946559616738872	0.0946559616738872
+15618	9679	9680	0.101799223111765	0.101799223111765
+15640	9666	9667	0.00676039634627663	0.00676039634627663
+15683	8023	7680	0.104281288426574	0.104281288426574
+15704	7666	2329	0.100028756753634	0.100028756753634
+15755	3356	2760	0.0982705119459115	0.0982705119459115
+1110	1126	1127	0.154576986104079	0.154576986104079
+2347	2338	2265	0.095819812257735	0.095819812257735
+12348	8664	8665	0.0099818469883938	0.0099818469883938
+20799	10928	6772	0.00617692305613739	0.00617692305613739
+1176	1191	1192	0.0992884317332444	0.0992884317332444
+20800	6772	10949	0.00765667567444528	0.00765667567444528
+441	439	440	0.131394781189403	0.131394781189403
+2798	2750	2752	0.210544806502819	0.210544806502819
+20666	10888	10889	0.0790962373353106	0.0790962373353106
+19518	6854	10540	0.00704975834948009	0.00704975834948009
+17074	10070	7842	0.137917824166884	0.137917824166884
+320	63	64	0.0374489603047296	0.0374489603047296
+62	68	69	0.0422209546479027	0.0422209546479027
+12003	5507	7080	0.146738996592278	0.146738996592278
+109	116	117	0.143188450690636	0.143188450690636
+18456	10296	7020	0.00773615182989558	0.00773615182989558
+134	142	143	0.102085903671524	0.102085903671524
+18414	7445	8376	0.0994737732965907	0.0994737732965907
+153	162	163	0.0752431334530451	0.0752431334530451
+18417	10289	8332	0.15046170994065	0.15046170994065
+323	206	207	0.0117249781899754	0.0117249781899754
+222	233	234	0.0133914034588106	0.0133914034588106
+269	279	280	0.111130387977042	0.111130387977042
+304	312	313	0.0760674046765663	0.0760674046765663
+378	380	381	0.042583144928967	0.042583144928967
+334	335	336	0.0838277836552233	0.0838277836552233
+18422	6881	8361	0.201914074104345	0.201914074104345
+367	368	369	0.0822344709508681	0.0822344709508681
+541	535	536	0.186883681615866	0.186883681615866
+11516	528	591	0.200155681159152	0.200155681159152
+15254	9538	9539	0.0173547475022314	0.0173547475022314
+659	649	650	0.011039314445329	0.011039314445329
+11464	701	5	0.465980985000995	0.465980985000995
+16702	9996	9629	0.03889405892702	0.03889405892702
+12966	1824	1825	0.0102076592436785	0.0102076592436785
+18427	7848	2983	0.204332357907837	0.204332357907837
+16420	3283	3331	0.0144926793767328	0.0144926793767328
+794	799	800	0.10010177351148	0.10010177351148
+11695	896	1005	0.0164907467236235	0.0164907467236235
+18433	6878	8357	0.204690873329425	0.204690873329425
+863	876	877	0.10476487069157	0.10476487069157
+883	898	899	0.104753841122432	0.104753841122432
+884	899	864	0.0807039229442354	0.0807039229442354
+927	941	942	0.0494985310502231	0.0494985310502231
+16705	9999	9629	0.0289087737479417	0.0289087737479417
+17026	3489	3490	0.0719959563000755	0.0719959563000755
+18682	3408	3539	0.176214327588196	0.176214327588196
+18442	8299	10294	0.012207810422513	0.012207810422513
+1076	1092	1093	0.17117547982738	0.17117547982738
+15790	2105	2106	0.167962867985551	0.167962867985551
+1100	1116	1117	0.101443140583253	0.101443140583253
+1122	1138	1139	0.131688298285365	0.131688298285365
+2171	2170	2171	0.00661609813602913	0.00661609813602913
+19434	10489	10109	0.051734430819511	0.051734430819511
+16849	9890	3358	0.0252874452199061	0.0252874452199061
+16171	7732	6631	0.170999473020786	0.170999473020786
+1145	1163	1164	0.10638131618854	0.10638131618854
+2233	2234	2235	0.107325767093377	0.107325767093377
+16734	10004	5726	0.044310348629928	0.044310348629928
+19574	7473	10571	0.0063271995041771	0.0063271995041771
+1286	1311	1312	0.0523154141859772	0.0523154141859772
+18191	5793	6053	0.200818759010255	0.200818759010255
+12198	2296	2417	0.0275462737865406	0.0275462737865406
+1335	1360	142	0.202746839209369	0.202746839209369
+1357	1386	1387	0.204107383179499	0.204107383179499
+1384	1411	1412	0.132938489820146	0.132938489820146
+1385	1412	1413	0.131234196689436	0.131234196689436
+16835	10018	10019	0.00449297276091322	0.00449297276091322
+1459	1481	1482	0.0508965659313026	0.0508965659313026
+533	397	398	0.176353791704941	0.176353791704941
+1483	1503	1504	0.10868886965133	0.10868886965133
+17373	3540	4236	0.201662628453229	0.201662628453229
+1505	47	1524	0.198761508803526	0.198761508803526
+16510	9930	8899	0.028599893322584	0.028599893322584
+19459	10506	10507	0.0718336837694179	0.0718336837694179
+16953	10037	10038	0.0209544596641532	0.0209544596641532
+1573	1601	1602	0.162785877407261	0.162785877407261
+1622	1650	1651	0.0538894092860146	0.0538894092860146
+1645	1672	1673	0.130835848827306	0.130835848827306
+1667	1692	1693	0.050088176287895	0.050088176287895
+1694	1718	1719	0.0873988319892153	0.0873988319892153
+1719	1738	1456	0.0837159374419676	0.0837159374419676
+1750	1769	1772	0.200154711336709	0.200154711336709
+1772	1790	1791	0.0243124544354895	0.0243124544354895
+12976	2866	2867	0.0166252705046511	0.0166252705046511
+1804	1817	1818	0.0911976784518576	0.0911976784518576
+11690	836	837	0.0102634119335747	0.0102634119335747
+1854	1868	1869	0.0969507802969199	0.0969507802969199
+18890	6123	3212	0.200920158955186	0.200920158955186
+13010	2892	2956	0.114118910643116	0.114118910643116
+1900	1913	1087	0.0825040978126541	0.0825040978126541
+11531	1232	1233	0.136649469135664	0.136649469135664
+3101	3032	3035	0.0672642720958143	0.0672642720958143
+16771	7290	7418	0.177711115784665	0.177711115784665
+2076	2079	2080	0.00320241388686281	0.00320241388686281
+20267	7552	10721	0.0076233085405271	0.0076233085405271
+2099	2101	2102	0.0617614998037007	0.0617614998037007
+2178	2178	2179	0.133414657501795	0.133414657501795
+20703	10902	10893	0.0137674602252582	0.0137674602252582
+18186	6059	4074	0.199239203137735	0.199239203137735
+2271	2271	2274	0.132133232701666	0.132133232701666
+2297	2295	2044	0.383761223862801	0.383761223862801
+2323	2315	2316	0.330214470935474	0.330214470935474
+12347	8663	8664	0.0257805479932851	0.0257805479932851
+2391	2374	2380	0.0606466728888714	0.0606466728888714
+17368	6112	1906	0.199361824625973	0.199361824625973
+2461	2451	2452	0.13645541326163	0.13645541326163
+2505	2485	2486	0.101289554682704	0.101289554682704
+2559	1939	371	0.224011572183979	0.224011572183979
+19236	5960	10458	0.00935537130778975	0.00935537130778975
+20487	10833	10834	0.0146368261080025	0.0146368261080025
+17152	4823	1911	0.202007841348173	0.202007841348173
+15939	9756	1179	0.0444859500137061	0.0444859500137061
+3746	3576	3577	0.10159835449875	0.10159835449875
+3791	2772	3612	0.203936793927218	0.203936793927218
+3792	3612	3613	0.107839344756473	0.107839344756473
+2787	2741	2742	0.198829139661659	0.198829139661659
+15945	9761	9759	0.0391671909462338	0.0391671909462338
+2831	2780	2781	0.0528298940705434	0.0528298940705434
+19569	10568	10569	0.0878244193957737	0.0878244193957737
+2880	2824	2825	0.0974259616864288	0.0974259616864288
+2902	2845	2846	0.808353421265405	0.808353421265405
+17512	10121	10120	0.0252089130538733	0.0252089130538733
+18124	7936	10267	0.178836603986638	0.178836603986638
+17213	3773	3774	0.00322537908461904	0.00322537908461904
+4010	3797	3798	0.0496772635509661	0.0496772635509661
+20618	10829	10811	0.00710063413803192	0.00710063413803192
+4056	3836	542	0.0542189434563804	0.0542189434563804
+16431	9893	9894	0.0272038809490012	0.0272038809490012
+4079	3854	3855	0.107248137237127	0.107248137237127
+4105	3874	1534	0.0983074346464974	0.0983074346464974
+4130	3892	3893	0.176077888960898	0.176077888960898
+3140	2139	3065	0.10712340392365	0.10712340392365
+14117	3945	3946	0.0482205385893945	0.0482205385893945
+19586	7471	10577	0.00638268050836497	0.00638268050836497
+18680	1852	3185	0.180570803347185	0.180570803347185
+4350	4077	4078	0.0772510249569655	0.0772510249569655
+4372	4094	4095	0.0479505811649138	0.0479505811649138
+19591	10579	10498	0.00651919101450697	0.00651919101450697
+3306	3214	3215	0.0471079000187924	0.0471079000187924
+3328	3230	3231	0.132391302135547	0.132391302135547
+19626	10513	10592	0.0688709903222838	0.0688709903222838
+3398	3295	3296	0.0155356242142858	0.0155356242142858
+19230	10454	10455	0.0118389292817843	0.0118389292817843
+20315	10736	10737	0.159656650881409	0.159656650881409
+18079	6355	10255	0.0661057533214939	0.0661057533214939
+3483	3361	3362	0.201966263198038	0.201966263198038
+4636	4280	4281	0.102934268159845	0.102934268159845
+16647	9969	5457	0.0123677166569097	0.0123677166569097
+16903	7306	3263	0.199172661453728	0.199172661453728
+19484	6853	10408	0.00698312522129821	0.00698312522129821
+19234	10420	10457	0.0372086096742178	0.0372086096742178
+19820	10648	3951	0.0619393226511354	0.0619393226511354
+20630	10847	10760	0.0141138073557462	0.0141138073557462
+4772	4383	4384	0.143358020264065	0.143358020264065
+4773	4384	2688	0.1475761156103	0.1475761156103
+19822	10648	9252	0.121899654224586	0.121899654224586
+17019	10054	10057	0.00913318334502991	0.00913318334502991
+19885	7405	10416	0.200852838610439	0.200852838610439
+18259	7775	9395	0.0553851197391209	0.0553851197391209
+4859	3019	4445	0.0478223869342914	0.0478223869342914
+20466	10753	10817	0.0682187434932547	0.0682187434932547
+19877	10671	6237	0.122419389056498	0.122419389056498
+19878	6237	5198	0.175009695046305	0.175009695046305
+18518	10303	10304	0.0239997630410034	0.0239997630410034
+4902	3446	4478	0.091694374773876	0.091694374773876
+19966	9509	10686	0.206010969949978	0.206010969949978
+19567	10565	7474	0.0766585847384353	0.0766585847384353
+14126	3925	419	0.00806156942685905	0.00806156942685905
+3723	3558	2895	0.0536764980359733	0.0536764980359733
+3795	3615	3616	0.170284963942666	0.170284963942666
+20220	9234	6625	0.292333005384616	0.292333005384616
+14111	3623	3659	0.11789221451213	0.11789221451213
+3861	3670	3671	0.0217628748782358	0.0217628748782358
+17030	3607	3490	0.0408681491476405	0.0408681491476405
+15948	9763	9764	0.10655007034609	0.10655007034609
+17086	504	3946	0.0996587778769702	0.0996587778769702
+20151	8263	8850	0.190160460059289	0.190160460059289
+17097	3721	2249	0.175979650666522	0.175979650666522
+3955	2834	3751	0.211238280484951	0.211238280484951
+4024	3809	3810	0.0544429181408591	0.0544429181408591
+20310	10731	10732	0.0936889543382987	0.0936889543382987
+4047	2945	3827	0.152861408667566	0.152861408667566
+20433	10792	10793	0.0378257433013547	0.0378257433013547
+4179	3929	3930	0.138165941069034	0.138165941069034
+18286	6824	3986	0.13302202745972	0.13302202745972
+20336	10747	10740	0.0348319951594156	0.0348319951594156
+5524	4925	4926	0.124694107926995	0.124694107926995
+4269	4013	4014	0.135510024687662	0.135510024687662
+20344	10743	10749	0.0091415179335324	0.0091415179335324
+17114	3959	582	0.020964645373322	0.020964645373322
+14696	4947	5018	0.17692836025714	0.17692836025714
+4361	4085	4086	0.0439979039927832	0.0439979039927832
+20443	10800	10797	0.0184411605361648	0.0184411605361648
+4436	1838	4143	0.106284873443858	0.106284873443858
+4437	4143	4144	0.0526768909687255	0.0526768909687255
+4456	4154	4155	0.103915690256788	0.103915690256788
+4457	4155	4156	0.103695542240372	0.103695542240372
+4476	4169	727	0.0512571810638195	0.0512571810638195
+4477	727	4170	0.0478531500173987	0.0478531500173987
+5818	5133	5134	0.102145042918239	0.102145042918239
+5912	5193	5194	0.024083404138801	0.024083404138801
+20491	10835	10836	0.00603667118796414	0.00603667118796414
+15862	9742	9737	0.126226895338302	0.126226895338302
+5931	5209	5210	0.693210396806986	0.693210396806986
+16531	9230	9133	0.0319382574203035	0.0319382574203035
+4627	1616	4276	0.105592921129571	0.105592921129571
+20628	10756	10873	0.0143552752086545	0.0143552752086545
+20696	10910	4524	0.00942218117840877	0.00942218117840877
+18136	6043	10263	0.201163508503498	0.201163508503498
+4695	4331	808	0.139418137507802	0.139418137507802
+4698	4332	4333	0.161361651356291	0.161361651356291
+6050	4013	5293	0.134925136075026	0.134925136075026
+18073	6354	6355	0.0448917156923931	0.0448917156923931
+4744	4362	4363	0.107836470275357	0.107836470275357
+4765	4378	4379	0.183602249353544	0.183602249353544
+20634	10876	10877	0.0283642470117633	0.0283642470117633
+18170	5801	6061	0.198751914750946	0.198751914750946
+4835	4430	4431	0.145138896688942	0.145138896688942
+4862	4446	4447	0.0474277072247471	0.0474277072247471
+18509	9355	10301	0.00184585558113331	0.00184585558113331
+6260	174	1704	0.202197382513594	0.202197382513594
+4958	4516	4517	0.0491656169358357	0.0491656169358357
+4983	4534	4535	0.0998419246339525	0.0998419246339525
+19921	10413	7869	0.176021720356684	0.176021720356684
+5064	4589	4590	0.0154062452430768	0.0154062452430768
+5086	4607	4608	0.119245405144689	0.119245405144689
+5111	4630	4631	0.139104857432868	0.139104857432868
+20788	5700	10925	0.00572872738726038	0.00572872738726038
+3915	2811	3713	0.0582509515897595	0.0582509515897595
+3917	3714	3715	0.0974014881112134	0.0974014881112134
+20790	10947	8358	0.00657767070033128	0.00657767070033128
+5221	4709	4710	0.122314419308335	0.122314419308335
+5243	875	4463	0.138237545752752	0.138237545752752
+18318	7366	7442	0.0771284931905011	0.0771284931905011
+5315	4770	4771	0.0488277782804066	0.0488277782804066
+5336	2332	4786	0.0940516760159238	0.0940516760159238
+5388	4825	97	0.199068637854245	0.199068637854245
+17092	4597	9466	0.17373336205738	0.17373336205738
+5437	4857	4858	0.0515825872815672	0.0515825872815672
+5483	4893	4894	0.046048954675788	0.046048954675788
+5531	4931	4932	0.018084718359645	0.018084718359645
+6850	4421	5860	0.102045619820979	0.102045619820979
+6892	5894	5697	0.0947186956045014	0.0947186956045014
+5585	1550	4269	0.196429076934968	0.196429076934968
+3934	3732	3733	0.121703755972038	0.121703755972038
+3936	3734	3735	0.176733819603511	0.176733819603511
+5609	4988	4989	0.201206746854351	0.201206746854351
+6912	5908	1999	0.0940717232862836	0.0940717232862836
+5705	932	2217	0.184097423724296	0.184097423724296
+5753	5081	5082	0.054538974474369	0.054538974474369
+5760	5088	1840	0.180073513278395	0.180073513278395
+5785	2782	5108	0.132016677253578	0.132016677253578
+18555	7706	2990	0.19846083928125	0.19846083928125
+18352	3981	7040	0.199881951179414	0.199881951179414
+5885	5176	130	0.21663995111842	0.21663995111842
+14774	5924	3807	0.151382817559166	0.151382817559166
+17792	8508	6179	0.109482524773714	0.109482524773714
+5955	5228	5229	0.0697529045378229	0.0697529045378229
+5977	1247	4556	0.132973381558885	0.132973381558885
+20546	10755	2961	0.0206004250178228	0.0206004250178228
+6055	3817	5296	0.100909929183789	0.100909929183789
+6076	172	1729	0.256606586411632	0.256606586411632
+6122	5349	4219	0.225702767955147	0.225702767955147
+6172	5388	1958	0.131227861001577	0.131227861001577
+20555	10853	10028	0.0104514157116194	0.0104514157116194
+6194	3028	5401	0.132618210317087	0.132618210317087
+18508	10301	9355	0.00184585558113331	0.00184585558113331
+6264	1941	5456	0.107892445399082	0.107892445399082
+6308	2067	5487	0.0160838439354733	0.0160838439354733
+6329	5502	5503	0.0544715490547718	0.0544715490547718
+20506	10834	10840	0.00711722931583218	0.00711722931583218
+7656	5012	3346	0.092992178848436	0.092992178848436
+20397	10758	10759	0.00383951895664098	0.00383951895664098
+19830	10649	10650	0.203375176962632	0.203375176962632
+18258	6760	7775	0.140758515508444	0.140758515508444
+6495	3928	5619	0.089155871041537	0.089155871041537
+6517	963	5279	0.100667730658223	0.100667730658223
+7856	6469	6470	0.161667024351427	0.161667024351427
+14751	929	5933	0.176747364710656	0.176747364710656
+6673	3933	5622	0.0990284128542063	0.0990284128542063
+14716	5687	933	0.176256990051995	0.176256990051995
+20475	10824	10825	0.0252031422821514	0.0252031422821514
+6694	5571	5749	0.0485856779635153	0.0485856779635153
+6695	5749	5750	0.0408085368300434	0.0408085368300434
+3964	1865	3758	0.048211663801055	0.048211663801055
+3965	3758	3759	0.0426076537269238	0.0426076537269238
+11217	443	444	0.0957304857475106	0.0957304857475106
+6741	5790	5791	0.0533877005590012	0.0533877005590012
+6764	5808	5809	0.0505689128275476	0.0505689128275476
+6788	5828	5829	0.0547714293876055	0.0547714293876055
+18151	6044	10264	0.200762745716695	0.200762745716695
+6809	365	4683	0.0475091694046952	0.0475091694046952
+6832	5852	1635	0.119748990570207	0.119748990570207
+18333	7291	3229	0.082496713136994	0.082496713136994
+6884	4667	1334	0.0975135676636165	0.0975135676636165
+6901	5900	2304	0.084800082911027	0.084800082911027
+6971	5951	5952	0.0992113626066069	0.0992113626066069
+14748	6733	4864	0.192735673325504	0.192735673325504
+18279	6738	6739	0.202843884763896	0.202843884763896
+7077	898	4479	0.137748361044457	0.137748361044457
+18284	6793	6794	0.0655358337845971	0.0655358337845971
+7099	5645	4359	0.0906469204279695	0.0906469204279695
+7124	6037	6038	0.0494419955897028	0.0494419955897028
+7168	6071	6072	0.0522594599242274	0.0522594599242274
+11649	8349	7711	0.138715670988872	0.138715670988872
+11989	8046	6574	0.143315424684023	0.143315424684023
+11652	4542	1283	0.131430485325992	0.131430485325992
+17217	1908	6114	0.200603968094547	0.200603968094547
+20549	10805	10854	0.0404087571222208	0.0404087571222208
+11385	8240	8241	0.317652248043028	0.317652248043028
+15924	9072	9753	0.0703936306326387	0.0703936306326387
+18551	9428	7705	0.2040983825575	0.2040983825575
+20556	10028	10805	0.0117396717425925	0.0117396717425925
+20452	10807	10808	0.0757678652544946	0.0757678652544946
+7529	6285	2831	0.200979085137746	0.200979085137746
+15928	9754	5382	0.011733427647939	0.011733427647939
+7553	4092	6302	0.0803403744103832	0.0803403744103832
+7580	6315	3820	0.130703255177956	0.130703255177956
+7677	1716	6365	0.197561364927668	0.197561364927668
+7751	5773	6410	0.160605281527339	0.160605281527339
+18359	7774	7775	0.0541753575171131	0.0541753575171131
+7777	6426	2486	0.134234515445665	0.134234515445665
+12252	122	8617	0.0393889261650165	0.0393889261650165
+7883	6494	6495	0.00940457999056201	0.00940457999056201
+7884	6495	5423	0.0969372989858353	0.0969372989858353
+3980	3771	3772	0.0481390459121498	0.0481390459121498
+3981	3772	3777	0.0470016129182315	0.0470016129182315
+7927	1795	6524	0.13760350708633	0.13760350708633
+8001	6561	6562	0.0546858550544455	0.0546858550544455
+11445	8257	385	0.474417191747682	0.474417191747682
+8048	6593	6594	0.0289242599655845	0.0289242599655845
+18526	9154	9352	0.0531084744773735	0.0531084744773735
+8069	6605	6606	1.2681000346061	1.2681000346061
+8092	4244	6622	0.082630423756929	0.082630423756929
+8093	6622	6623	0.0749027437652235	0.0749027437652235
+3996	3787	3788	0.0979026300528609	0.0979026300528609
+3997	3788	3789	0.0995935295086316	0.0995935295086316
+9386	7325	7326	0.0119980817003928	0.0119980817003928
+20477	10789	10826	0.0103983863250137	0.0103983863250137
+20507	10840	10823	0.00612377712997262	0.00612377712997262
+8262	841	6717	0.175943907281508	0.175943907281508
+9533	7395	7396	0.139422525474238	0.139422525474238
+20405	10779	8354	0.0261167106000956	0.0261167106000956
+8335	6764	6765	0.0503863905918892	0.0503863905918892
+8336	6765	6766	0.0491492877930629	0.0491492877930629
+4013	983	3800	0.100500044528257	0.100500044528257
+4014	3800	3801	0.0985249152645202	0.0985249152645202
+15231	8248	8334	0.0146425177596963	0.0146425177596963
+8409	3830	6807	0.0888447463890759	0.0888447463890759
+18321	6063	2543	0.201974991797574	0.201974991797574
+8457	6832	1495	0.201208565152389	0.201208565152389
+19836	2624	5204	0.178927982846839	0.178927982846839
+18379	8493	8494	0.0504160144523199	0.0504160144523199
+8503	6860	6861	0.0162922756173271	0.0162922756173271
+8527	3425	6874	0.0494311548712974	0.0494311548712974
+8599	1237	4811	0.0968243021950299	0.0968243021950299
+8699	1327	6954	0.11293333226081	0.11293333226081
+8743	6978	6843	0.0844431261667327	0.0844431261667327
+8770	6990	6991	0.0486520030390688	0.0486520030390688
+8791	7006	4358	0.202474203830337	0.202474203830337
+8792	4358	7007	0.00688683462760985	0.00688683462760985
+8840	7032	6092	0.0997655880788332	0.0997655880788332
+12243	8612	8613	0.138493887289201	0.138493887289201
+8862	2493	2840	0.128352303826166	0.128352303826166
+8889	7059	4436	0.0844445583973766	0.0844445583973766
+15879	8770	8763	0.0140298928163018	0.0140298928163018
+12248	5788	8274	0.146502988080446	0.146502988080446
+20224	10712	8757	0.0605456526720602	0.0605456526720602
+15789	9625	2105	0.0133775626084498	0.0133775626084498
+9093	4150	2344	0.174578433496429	0.174578433496429
+12934	8900	8688	0.0533584685274483	0.0533584685274483
+18558	10316	10317	0.318647498327865	0.318647498327865
+9165	7197	7198	0.272798906116362	0.272798906116362
+9189	7209	3616	0.0495666126691076	0.0495666126691076
+10453	3743	5856	0.10095556193443	0.10095556193443
+20231	10714	10715	0.0286157939247338	0.0286157939247338
+20392	10774	10770	0.00608971066273246	0.00608971066273246
+9337	4780	1523	0.0520500965787765	0.0520500965787765
+20017	8044	6572	0.144143863155146	0.144143863155146
+20561	10856	10798	0.00573758430075899	0.00573758430075899
+10672	7485	7454	0.0961864249467466	0.0961864249467466
+15863	9737	9743	0.0881669372882309	0.0881669372882309
+9436	7346	4173	0.192934476657366	0.192934476657366
+10721	7452	5690	0.129238470693044	0.129238470693044
+20510	638	10782	0.00926383363589588	0.00926383363589588
+18479	9039	9040	0.136726032574097	0.136726032574097
+9591	7412	5066	0.050234753132255	0.050234753132255
+9612	2128	5998	0.154063403679123	0.154063403679123
+16186	7721	5815	0.197248711738883	0.197248711738883
+9637	1423	7186	0.128478917444104	0.128478917444104
+11449	8259	8260	0.319737139262779	0.319737139262779
+9690	1895	7457	0.0666302144465139	0.0666302144465139
+9691	7457	7458	0.0198488245240688	0.0198488245240688
+19476	10519	10520	0.0516997558936505	0.0516997558936505
+9736	7494	5544	0.102560827713484	0.102560827713484
+16038	9802	9796	0.0179822727083053	0.0179822727083053
+11790	6564	8037	0.143771757250665	0.143771757250665
+9810	7528	7529	0.208257062216787	0.208257062216787
+9836	7542	7543	0.0265476903097887	0.0265476903097887
+18631	9484	7408	0.179068927816078	0.179068927816078
+15241	9537	9539	0.0227628365288052	0.0227628365288052
+20526	1286	10810	0.0112823826001832	0.0112823826001832
+9968	7619	7620	0.0778364486506147	0.0778364486506147
+9969	7620	7621	0.111522724623373	0.111522724623373
+9988	7625	1491	0.204666735578584	0.204666735578584
+10072	7660	2775	0.203041970554709	0.203041970554709
+10073	2775	6897	0.203220599619524	0.203220599619524
+10091	7671	690	0.200329217944331	0.200329217944331
+10115	2354	4156	0.173430880829093	0.173430880829093
+10138	3577	5644	0.141664156461633	0.141664156461633
+10164	7702	7703	0.0486413772868685	0.0486413772868685
+10187	7030	7715	0.0498024158316235	0.0498024158316235
+12249	8274	8295	0.153451254229228	0.153451254229228
+11642	1281	8347	0.0589263897659084	0.0589263897659084
+10281	7757	2638	0.20261361621015	0.20261361621015
+12251	8616	122	0.0306511482720316	0.0306511482720316
+10351	5524	6462	0.155650660428743	0.155650660428743
+11777	5360	8407	0.147060404896327	0.147060404896327
+20362	10734	9209	0.0303997458302742	0.0303997458302742
+10404	4224	7568	0.0462000499013743	0.0462000499013743
+10427	5696	6320	0.173275054190131	0.173275054190131
+16041	9802	9797	0.0106947269448384	0.0106947269448384
+10504	1036	7842	0.0544400914304572	0.0544400914304572
+12047	8526	8527	0.0840721683590618	0.0840721683590618
+10550	4923	5368	0.0856922507743825	0.0856922507743825
+16085	9818	9819	0.0412898984205639	0.0412898984205639
+10600	7873	7874	0.202540822887829	0.202540822887829
+10623	7886	1192	0.167316235534945	0.167316235534945
+20558	10845	2957	0.00878460299692283	0.00878460299692283
+10644	7563	7901	0.105394463133352	0.105394463133352
+12237	1599	8609	0.00546433627657245	0.00546433627657245
+20564	10825	1287	0.00477901915260098	0.00477901915260098
+10749	6942	7958	0.162394709841225	0.162394709841225
+10796	7983	947	0.174677658409185	0.174677658409185
+10817	6492	4607	0.147058520431446	0.147058520431446
+12476	5450	5427	0.050269770055972	0.050269770055972
+10839	6220	8004	0.052907543789053	0.052907543789053
+15731	7157	8801	0.0199400844261404	0.0199400844261404
+16956	10040	9425	0.0116537581995054	0.0116537581995054
+10942	4686	4956	0.099446723287275	0.099446723287275
+16188	7203	1784	0.197361998677517	0.197361998677517
+10964	6721	4791	0.136892276030183	0.136892276030183
+10986	5402	3133	0.105232928623448	0.105232928623448
+20369	10733	10746	0.00402873670536954	0.00402873670536954
+12735	8822	7751	0.202267643963295	0.202267643963295
+16205	7728	5823	0.195806305910918	0.195806305910918
+15885	9619	8879	0.0100154912435563	0.0100154912435563
+16189	1784	4247	0.203808666270494	0.203808666270494
+11109	8035	807	0.0159273560245565	0.0159273560245565
+11132	8133	6270	0.051417429454822	0.051417429454822
+11156	2087	2654	0.0953557861022671	0.0953557861022671
+11157	2654	4115	0.0506170186006763	0.0506170186006763
+11208	8161	8162	0.355822290917686	0.355822290917686
+11220	8169	106	0.241259609778708	0.241259609778708
+11240	8178	8182	0.0195790567337129	0.0195790567337129
+20821	8330	10923	0.00839528658401215	0.00839528658401215
+17791	3305	8508	0.0362477709828647	0.0362477709828647
+11322	8214	5950	0.203024250253409	0.203024250253409
+13061	8944	8945	0.0479106655937031	0.0479106655937031
+11349	1754	4801	0.0245317247967943	0.0245317247967943
+11390	8244	8245	0.0389791405679458	0.0389791405679458
+17817	9286	10185	0.00969626713044654	0.00969626713044654
+11462	8270	701	0.039999373678842	0.039999373678842
+11492	8281	8282	0.00503511807894305	0.00503511807894305
+11538	8302	8303	0.0107298944611382	0.0107298944611382
+11571	7713	8322	0.206137749537799	0.206137749537799
+11573	1766	7715	0.157141019260281	0.157141019260281
+13237	9010	4325	0.222509982407309	0.222509982407309
+11632	1278	4529	0.134276517370514	0.134276517370514
+11724	8374	8375	0.133513247237079	0.133513247237079
+11797	8414	4446	0.0913151320718964	0.0913151320718964
+11798	4446	6565	0.148651456771305	0.148651456771305
+11799	6565	8038	0.145022863674794	0.145022863674794
+13411	4426	9064	0.0342337858603608	0.0342337858603608
+11882	8457	1807	0.101184879886606	0.101184879886606
+13518	7635	7602	0.0983630321096794	0.0983630321096794
+11995	8048	6576	0.143165005086162	0.143165005086162
+12062	8532	3932	0.283100338690813	0.283100338690813
+12064	8532	3745	0.0315839509500456	0.0315839509500456
+12065	3745	8533	0.0402006397458181	0.0402006397458181
+16198	1788	6622	0.140253824514813	0.140253824514813
+12143	2334	7677	0.0942814693046897	0.0942814693046897
+13771	2561	9189	0.0689861433647756	0.0689861433647756
+18571	10322	10326	0.0103554459054315	0.0103554459054315
+15556	9654	9655	0.107168580692288	0.107168580692288
+12220	8596	8597	0.100597506592905	0.100597506592905
+12284	8235	7279	0.114584410389232	0.114584410389232
+12290	8634	8488	0.146216431524827	0.146216431524827
+15445	9605	9606	0.0107985098434616	0.0107985098434616
+12402	8686	2352	0.174110261708509	0.174110261708509
+12403	2352	4154	0.17319721774215	0.17319721774215
+12445	8705	902	0.277961591263562	0.277961591263562
+16201	7209	5822	0.204832695484964	0.204832695484964
+14071	3116	6673	0.099476803467174	0.099476803467174
+12563	729	7060	0.0981255480039199	0.0981255480039199
+12670	8793	5460	0.173942223750684	0.173942223750684
+12698	8808	8810	0.00713796130621387	0.00713796130621387
+12701	2643	8805	0.104981962462916	0.104981962462916
+12721	3633	3295	0.250204598549556	0.250204598549556
+16683	9985	9930	0.0816514509832002	0.0816514509832002
+12762	3506	8170	0.201022944642928	0.201022944642928
+15870	8842	8843	0.0221571458561984	0.0221571458561984
+15950	9765	9766	0.0194093177763062	0.0194093177763062
+12930	3167	8897	0.107237063498964	0.107237063498964
+14520	3985	7053	0.133213475028965	0.133213475028965
+15337	9564	9565	0.0333323202761363	0.0333323202761363
+15952	9765	9758	0.0491105082028732	0.0491105082028732
+13016	8918	8921	0.143291466888449	0.143291466888449
+13097	8917	8959	0.032086215385934	0.032086215385934
+13121	640	8968	0.045462010282231	0.045462010282231
+13175	4472	2794	0.133415072213096	0.133415072213096
+13447	9080	4647	0.227691913723815	0.227691913723815
+19029	7690	8144	0.0861073402797158	0.0861073402797158
+13280	4312	7812	0.197562058294396	0.197562058294396
+20373	10757	10758	0.0390214492856105	0.0390214492856105
+13466	9093	9091	0.0528525628364664	0.0528525628364664
+15458	1970	8766	0.0532545399938913	0.0532545399938913
+13600	2311	6580	0.108271978342533	0.108271978342533
+13622	3355	9148	0.0901126087179192	0.0901126087179192
+15127	8268	225	0.129419996314042	0.129419996314042
+15855	9737	9738	0.0422997339419691	0.0422997339419691
+15953	9758	9764	0.0382745737843307	0.0382745737843307
+13641	9152	327	0.371274069669657	0.371274069669657
+13690	6833	6976	0.085342873664165	0.085342873664165
+15860	9707	9741	0.0544957036472965	0.0544957036472965
+13709	6929	3818	0.116035215256342	0.116035215256342
+15411	7964	9590	0.052042549974644	0.052042549974644
+18495	15	6384	0.132622389900901	0.132622389900901
+18578	10319	10327	0.0490398009212077	0.0490398009212077
+13818	8483	6705	0.147706661087796	0.147706661087796
+13972	9250	9251	0.0609360549506678	0.0609360549506678
+20378	10761	10762	0.0703070927126279	0.0703070927126279
+14062	6351	2574	0.0264285559063396	0.0264285559063396
+4057	542	3837	0.0481841661951123	0.0481841661951123
+20619	10811	10850	0.0311826470096292	0.0311826470096292
+14143	9286	9287	0.00349243594701226	0.00349243594701226
+15782	2533	9708	0.0671466764878958	0.0671466764878958
+18700	1376	9773	0.0602159412724284	0.0602159412724284
+19501	10528	10529	0.0145223093781074	0.0145223093781074
+16094	9821	9496	0.0522797219291825	0.0522797219291825
+16682	9984	9985	0.111071610148866	0.111071610148866
+16220	9022	9008	0.10706671130041	0.10706671130041
+16222	9850	7740	0.404338691233817	0.404338691233817
+16223	7740	5835	0.200008410058821	0.200008410058821
+14438	6143	4017	0.133566629484228	0.133566629484228
+14458	9168	3834	0.0502958887489777	0.0502958887489777
+16499	8709	8890	0.00781309402153006	0.00781309402153006
+14504	9364	2172	0.0261972288759813	0.0261972288759813
+16631	9312	9964	0.536418418139307	0.536418418139307
+16632	9964	9965	0.081644512591407	0.081644512591407
+15472	8892	1971	0.0354218020701201	0.0354218020701201
+14617	9402	9350	0.13375643872535	0.13375643872535
+14954	7265	7584	0.0944614970989242	0.0944614970989242
+4076	3852	3853	0.00162344592902021	0.00162344592902021
+15099	7228	2370	0.054925658104601	0.054925658104601
+16381	9878	9879	0.0338421848775343	0.0338421848775343
+16508	9928	9929	0.0170279633676167	0.0170279633676167
+16525	5158	7669	0.0405110122092171	0.0405110122092171
+16594	9950	9951	0.140650325269802	0.140650325269802
+17419	10101	10102	0.0281887857345848	0.0281887857345848
+16852	9866	6519	0.0479747206312546	0.0479747206312546
+16968	10038	10045	0.00348952632939911	0.00348952632939911
+17638	10159	9498	0.0561256700305383	0.0561256700305383
+17642	8238	524	0.198799957504709	0.198799957504709
+17105	331	10064	0.12693044123038	0.12693044123038
+17422	10082	10083	0.0318734478115971	0.0318734478115971
+17268	4260	3518	0.200851927356296	0.200851927356296
+17398	7305	3261	0.198983160217956	0.198983160217956
+17400	3509	4251	0.199228485757107	0.199228485757107
+17911	4835	9197	0.134589353492833	0.134589353492833
+17544	8941	8264	0.168906883412351	0.168906883412351
+18155	10135	10136	0.408197365852498	0.408197365852498
+17572	10145	10146	0.0800519816931861	0.0800519816931861
+17628	2882	8136	0.162489310093733	0.162489310093733
+18601	10335	7656	0.178628836370645	0.178628836370645
+17816	9287	10184	0.0350560568035198	0.0350560568035198
+17966	6242	10236	0.0113656789072773	0.0113656789072773
+17886	9955	4390	0.0561034767074801	0.0561034767074801
+17918	5173	6867	0.199959252458115	0.199959252458115
+17919	6867	5276	0.0971272913038605	0.0971272913038605
+19066	5495	9469	0.177422724680083	0.177422724680083
+19037	9496	9494	0.0281063525870562	0.0281063525870562
+18774	9642	7121	0.176777734913143	0.176777734913143
+19101	10429	10049	0.0400790686743565	0.0400790686743565
+19617	10477	10588	0.0688805182452796	0.0688805182452796
+19314	6700	5030	0.15289416238876	0.15289416238876
+19425	36	3535	0.208182345564595	0.208182345564595
+19426	3535	4231	0.197905943796208	0.197905943796208
+19462	10478	10483	0.0205384885375563	0.0205384885375563
+19725	4489	10627	0.00886289645656064	0.00886289645656064
+19764	5140	5153	0.0242552277861381	0.0242552277861381
+20136	2752	6988	0.0528412012093399	0.0528412012093399
+19927	4579	8367	0.130318576605927	0.130318576605927
+20000	10690	8645	0.0319530891427096	0.0319530891427096
+4106	1534	3875	0.0874992877759652	0.0874992877759652
+20047	9078	9193	0.27590001979893	0.27590001979893
+397	400	401	0.186988741368815	0.186988741368815
+398	401	402	0.0834459188949902	0.0834459188949902
+400	403	313	0.0512719310633618	0.0512719310633618
+402	404	405	0.135745743044228	0.135745743044228
+404	406	407	0.304825723005793	0.304825723005793
+406	408	409	0.43926972528011	0.43926972528011
+408	410	411	0.386425449179561	0.386425449179561
+410	412	413	0.296429557961552	0.296429557961552
+411	413	414	0.0146716283322865	0.0146716283322865
+412	414	415	0.325808855480319	0.325808855480319
+414	416	328	0.121195048255912	0.121195048255912
+416	329	416	0.287289513548727	0.287289513548727
+417	416	417	0.245312696429149	0.245312696429149
+20053	1955	8185	0.122183214039011	0.122183214039011
+20198	8571	5783	0.145694845246542	0.145694845246542
+14833	7026	8320	0.0139341057083995	0.0139341057083995
+14834	8320	7029	0.0476978989477955	0.0476978989477955
+15442	9600	8606	0.035907314389173	0.035907314389173
+19656	10607	10531	0.00409092160847847	0.00409092160847847
+20737	10917	10886	0.0142612706482701	0.0142612706482701
+14870	9363	2450	0.140513945011527	0.140513945011527
+11514	269	270	0.151462432210479	0.151462432210479
+12364	8672	8674	0.0109017354569362	0.0109017354569362
+12	12	13	0.134681710739383	0.134681710739383
+14892	8103	9009	0.099173697837006	0.099173697837006
+14893	9009	8146	0.0976735888216106	0.0976735888216106
+33	36	37	0.0487053100188426	0.0487053100188426
+14912	7271	7600	0.0956539249415721	0.0956539249415721
+18874	7987	218	0.124810113553517	0.124810113553517
+18876	3520	84	0.204554290109371	0.204554290109371
+15454	8884	9611	0.0785818613777641	0.0785818613777641
+322	154	206	0.0287029588335131	0.0287029588335131
+18627	9483	1310	0.220178764490314	0.220178764490314
+18894	10375	10376	0.00936614397970835	0.00936614397970835
+15122	8269	9491	0.0542877044701678	0.0542877044701678
+18715	7650	8069	0.263314494448216	0.263314494448216
+15971	8998	4214	0.0961806119218467	0.0961806119218467
+551	544	545	0.0205710614294522	0.0205710614294522
+15166	7386	9508	0.0293624650986513	0.0293624650986513
+18679	2589	1852	0.179197761430995	0.179197761430995
+602	593	594	0.0187536593392831	0.0187536593392831
+16091	9818	526	0.0930965533879819	0.0930965533879819
+13959	448	9111	0.0841767201213853	0.0841767201213853
+16119	427	4010	0.113680084788302	0.113680084788302
+17947	10226	10227	0.0385043082181171	0.0385043082181171
+16175	7201	5812	0.201274753121947	0.201274753121947
+699	693	694	0.0993204992661042	0.0993204992661042
+16265	9865	7738	0.345896015945794	0.345896015945794
+16341	9873	8704	0.014474001055321	0.014474001055321
+11688	774	775	0.0224766779818413	0.0224766779818413
+16464	1081	9912	0.0130855777393443	0.0130855777393443
+18428	2983	10286	0.340223280394145	0.340223280394145
+16719	485	10003	0.0666623735199971	0.0666623735199971
+18212	2988	7850	0.201655156198778	0.201655156198778
+18213	7850	6382	0.201197176818258	0.201197176818258
+17132	1799	4238	0.205173852791716	0.205173852791716
+268	278	279	0.0669047721045728	0.0669047721045728
+18436	10287	10292	0.102997198003519	0.102997198003519
+17134	3543	44	0.198313047920784	0.198313047920784
+15194	7392	9524	0.0521516926212219	0.0521516926212219
+19559	10563	10553	0.0196751082256841	0.0196751082256841
+19864	10666	10667	0.12344950946071	0.12344950946071
+1022	827	1037	0.134288205933024	0.134288205933024
+19991	10682	10649	0.0504069045792634	0.0504069045792634
+327	328	329	0.206425005842362	0.206425005842362
+15245	9540	9541	0.00803794786000152	0.00803794786000152
+14681	446	727	0.207769052846247	0.207769052846247
+18636	1846	2580	0.177268272488638	0.177268272488638
+15883	9594	8842	0.0247081602797847	0.0247081602797847
+18445	1124	10289	0.0496295455281554	0.0496295455281554
+15483	9622	9623	0.0434553081653394	0.0434553081653394
+15784	9596	2105	0.0159980383240888	0.0159980383240888
+18450	7849	2986	0.202541671618508	0.202541671618508
+15540	1221	8429	0.105180771417586	0.105180771417586
+17095	3719	3720	0.174398206796096	0.174398206796096
+12950	1330	1331	0.0133918888831226	0.0133918888831226
+19570	10569	7462	0.00803939319633032	0.00803939319633032
+1312	1338	1339	0.0991205046552405	0.0991205046552405
+15958	9768	9769	0.0623405517746533	0.0623405517746533
+325	268	153	0.064083026712354	0.064083026712354
+386	388	389	0.0751873239589982	0.0751873239589982
+1392	1419	1420	0.399589215327938	0.399589215327938
+16282	9096	9098	0.0807475840805468	0.0807475840805468
+391	393	394	0.185819928048464	0.185819928048464
+15753	6671	2023	0.100119371100459	0.100119371100459
+18126	6042	10262	0.201564202628959	0.201564202628959
+17137	4425	1909	0.200241543203617	0.200241543203617
+16013	9783	9784	0.0337977814282775	0.0337977814282775
+12006	8049	6578	0.147083508160087	0.147083508160087
+2343	2334	2335	0.271393460830069	0.271393460830069
+19952	4670	7857	0.100774147000306	0.100774147000306
+20659	8289	5957	0.0879515292456205	0.0879515292456205
+12349	8665	8666	0.0489645255680358	0.0489645255680358
+1536	1559	1560	0.0937807122385258	0.0937807122385258
+2410	2115	2401	0.446933916798798	0.446933916798798
+19581	7470	10575	0.00667183269883622	0.00667183269883622
+1557	1582	1583	0.0811305260417956	0.0811305260417956
+469	472	473	0.100239678379349	0.100239678379349
+569	562	563	0.0844940522055572	0.0844940522055572
+12010	5508	7081	0.146350144860015	0.146350144860015
+2663	2621	2622	0.0420400210402162	0.0420400210402162
+16696	9597	7094	0.00600769898364912	0.00600769898364912
+18883	7310	84	0.202570183098447	0.202570183098447
+16736	7419	10004	0.204798388413466	0.204798388413466
+1623	1651	1652	0.0452674748546477	0.0452674748546477
+12948	1303	1304	0.066448544071591	0.066448544071591
+20711	10885	10914	0.126940460926274	0.126940460926274
+20712	10914	5881	0.00554916008288024	0.00554916008288024
+16509	9929	9930	0.0673766892433469	0.0673766892433469
+1643	1670	1671	0.136647738333876	0.136647738333876
+19534	6856	10550	0.00719456093421717	0.00719456093421717
+19538	4704	10552	0.0168576392161317	0.0168576392161317
+19539	10552	10553	0.00416995013524246	0.00416995013524246
+11689	775	836	0.0388095868373909	0.0388095868373909
+20	21	22	0.0174708821601448	0.0174708821601448
+16449	9906	9907	0.130469688472308	0.130469688472308
+41	44	45	0.0507831501846365	0.0507831501846365
+17298	7736	5829	0.204153885319898	0.204153885319898
+64	70	71	0.046163806906163	0.046163806906163
+18467	10299	10298	0.126605139952982	0.126605139952982
+18685	1316	1372	0.177012768030012	0.177012768030012
+1826	1842	1843	0.155652098486701	0.155652098486701
+19783	3732	10633	0.0548138207459151	0.0548138207459151
+1846	1861	1862	0.0495211888216282	0.0495211888216282
+177	186	187	0.102075274690852	0.102075274690852
+202	214	215	0.233063347854791	0.233063347854791
+271	281	282	0.0968799942510371	0.0968799942510371
+335	336	337	0.26926308578439	0.26926308578439
+14122	3945	503	0.0521094341958735	0.0521094341958735
+1949	1964	1965	0.100541047482359	0.100541047482359
+503	497	498	0.332501427216364	0.332501427216364
+508	502	503	0.0804669922754196	0.0804669922754196
+19271	10424	10425	0.0133101789702176	0.0133101789702176
+19460	10507	10477	0.0195042673008727	0.0195042673008727
+12962	1631	1599	0.105987129966341	0.105987129966341
+11814	2150	2151	0.12777055976042	0.12777055976042
+18730	7649	8066	0.263509830967107	0.263509830967107
+18671	2605	1538	0.176823430683456	0.176823430683456
+20037	816	3558	0.154160936652516	0.154160936652516
+20700	10894	10895	0.0022719801727208	0.0022719801727208
+17029	3606	3607	0.0180484124991241	0.0180484124991241
+850	863	864	0.0616242283467915	0.0616242283467915
+18683	3539	3608	0.177667253998454	0.177667253998454
+20825	9400	10954	0.0122123114573311	0.0122123114573311
+872	885	886	0.105399149486358	0.105399149486358
+19920	2621	10413	0.177079309456246	0.177079309456246
+892	906	907	0.104783494637697	0.104783494637697
+12344	8660	8661	0.0179171962919351	0.0179171962919351
+17141	3089	4509	0.200737491088575	0.200737491088575
+16291	2376	2377	0.00482087191216397	0.00482087191216397
+963	974	975	0.202802632214452	0.202802632214452
+17135	44	4412	0.404761668333185	0.404761668333185
+17088	10071	9940	0.138093381903903	0.138093381903903
+16845	10022	10018	0.0055152683612349	0.0055152683612349
+17952	10226	10230	0.0192923880160408	0.0192923880160408
+20322	10741	10742	0.00907488670500163	0.00907488670500163
+1113	1129	1130	0.204124873969403	0.204124873969403
+16607	7890	9325	0.145145340110648	0.145145340110648
+15260	9550	9551	0.0630135708366092	0.0630135708366092
+19433	10110	10489	0.0489242953920304	0.0489242953920304
+16954	10038	10039	0.0207511303582817	0.0207511303582817
+12357	8669	8668	0.00723037090372959	0.00723037090372959
+1183	1198	1199	0.0305943034250603	0.0305943034250603
+19442	10493	10494	0.0196148764551294	0.0196148764551294
+19443	10494	10495	0.0228284210093234	0.0228284210093234
+2633	2594	2595	0.0115937480855902	0.0115937480855902
+1205	1220	1221	0.0900481853791487	0.0900481853791487
+18180	5796	6056	0.200195877654712	0.200195877654712
+11707	1245	1246	0.0231530055304531	0.0231530055304531
+19444	10495	10496	0.0213401735101805	0.0213401735101805
+19445	10496	10497	0.0182367704590367	0.0182367704590367
+2703	2659	2660	0.155649282617483	0.155649282617483
+19446	10497	10498	0.0203055071588043	0.0203055071588043
+2724	107	2679	0.0450807290855188	0.0450807290855188
+1266	1286	1287	0.0202842890457172	0.0202842890457172
+18451	2986	7704	0.199650644692106	0.199650644692106
+16289	1363	2376	0.00344312944616261	0.00344312944616261
+19447	10498	10499	0.0196160459333464	0.0196160459333464
+14693	2225	4875	0.162113763012991	0.162113763012991
+1308	1334	1335	0.129255645714035	0.129255645714035
+14695	4946	4947	0.168905093573288	0.168905093573288
+1332	1357	1358	0.136424467862451	0.136424467862451
+19448	10499	10487	0.023296750596408	0.023296750596408
+2841	2789	2790	0.0523852002781698	0.0523852002781698
+15843	7795	9723	0.020416694003674	0.020416694003674
+18886	7308	3267	0.201549354300641	0.201549354300641
+19449	10487	10500	0.022940948763835	0.022940948763835
+17307	5827	7735	0.20365816745981	0.20365816745981
+2499	2480	2481	0.265342544498994	0.265342544498994
+19450	10500	10501	0.0189264900266028	0.0189264900266028
+18889	1923	6123	0.200475462008098	0.200475462008098
+1428	1451	1452	0.107578729884622	0.107578729884622
+18647	7412	4053	0.176566575042864	0.176566575042864
+1452	1471	1472	0.147622384612895	0.147622384612895
+19451	10501	10502	0.0200830353316625	0.0200830353316625
+2953	2897	2898	0.0472912053919854	0.0472912053919854
+16310	2439	2721	0.0812562615874829	0.0812562615874829
+12320	1302	1603	0.00893905362813633	0.00893905362813633
+19452	10502	10503	0.0197272337869401	0.0197272337869401
+19453	10503	7482	0.0181814350817939	0.0181814350817939
+19038	9494	229	0.0588468541295868	0.0588468541295868
+1498	1517	1518	0.199413272863754	0.199413272863754
+15846	9732	1098	0.0848710138660927	0.0848710138660927
+19454	7482	10504	0.0196839111368948	0.0196839111368948
+19455	10504	10505	0.017559948119168	0.017559948119168
+13365	9051	9052	0.103390283727961	0.103390283727961
+2998	1652	2935	0.112349122861115	0.112349122861115
+17375	1796	4235	0.206436210016501	0.206436210016501
+13963	9247	9102	0.0619095710643366	0.0619095710643366
+1534	1557	1558	0.0743776380849984	0.0743776380849984
+19916	8774	7640	0.176934657107496	0.176934657107496
+19917	7640	6233	0.179269287981755	0.179269287981755
+1556	1581	1582	0.0903340712116846	0.0903340712116846
+18461	9354	9528	0.135770728089025	0.135770728089025
+19456	10505	7464	0.0643341844968674	0.0643341844968674
+19919	5202	2621	0.177194532329155	0.177194532329155
+1603	1634	1635	0.0667169559865797	0.0667169559865797
+15911	9239	9240	0.00759910247117962	0.00759910247117962
+3133	2004	3061	0.0946875314878615	0.0946875314878615
+1648	1675	1676	0.0232219414191173	0.0232219414191173
+1649	1676	1677	0.104810655650978	0.104810655650978
+18412	7776	7163	0.0985154391997448	0.0985154391997448
+3153	3077	3078	0.0921654003892753	0.0921654003892753
+1666	1129	1692	0.0515669276869657	0.0515669276869657
+256	264	265	0.00881331069899833	0.00881331069899833
+19580	10574	7470	0.0064160385090956	0.0064160385090956
+1690	1714	1715	0.111918529606987	0.111918529606987
+12366	8674	8671	0.0118216471510326	0.0118216471510326
+18801	10352	9812	0.039652100920871	0.039652100920871
+379	381	382	0.0684082960066799	0.0684082960066799
+16308	2827	2851	0.00473328951361683	0.00473328951361683
+20640	10878	10879	0.0287629224507079	0.0287629224507079
+20278	5573	10727	0.00799925463089475	0.00799925463089475
+18122	2538	10266	0.180269607102109	0.180269607102109
+1907	1919	1920	0.101419584890654	0.101419584890654
+16419	3282	3283	0.0297579469637327	0.0297579469637327
+11533	1234	1235	0.136499599599558	0.136499599599558
+18135	4099	6043	0.191045620861521	0.191045620861521
+16763	4439	9868	0.0469300202486105	0.0469300202486105
+257	265	257	0.0618021904449226	0.0618021904449226
+3413	3306	3307	0.147259003832799	0.147259003832799
+1997	2009	2010	0.0436503011483876	0.0436503011483876
+381	383	384	0.174765079599045	0.174765079599045
+3437	3324	3325	0.13969071524798	0.13969071524798
+2020	2029	2030	0.0536884532048604	0.0536884532048604
+14708	5223	5330	0.173633760067415	0.173633760067415
+17179	5410	5449	0.194891408787823	0.194891408787823
+2041	2049	2050	0.203224924896292	0.203224924896292
+15894	9255	9441	0.0812248966226341	0.0812248966226341
+2068	2071	2072	0.108635365611271	0.108635365611271
+383	385	386	0.313694212518365	0.313694212518365
+15938	9757	9756	0.156652526688463	0.156652526688463
+2092	1220	2094	0.120498651922126	0.120498651922126
+16738	725	51	0.242028173240196	0.242028173240196
+19560	10553	10564	0.0204794292027182	0.0204794292027182
+2166	2165	2166	0.0846335919696035	0.0846335919696035
+19638	10597	10526	0.00694709641094844	0.00694709641094844
+3597	3446	2803	0.137873345883867	0.137873345883867
+16317	2510	3005	0.00592207877923616	0.00592207877923616
+17174	5326	5327	0.109586213492937	0.109586213492937
+16740	4437	10005	0.047793833799427	0.047793833799427
+3644	3483	3484	0.202897902969007	0.202897902969007
+2231	2232	2233	0.0942717670146639	0.0942717670146639
+2232	2233	2234	0.0947564865992517	0.0947564865992517
+16741	10005	4510	0.0465117651564764	0.0465117651564764
+2248	2251	2252	0.0515208780131149	0.0515208780131149
+16742	4510	10006	0.0392105126712721	0.0392105126712721
+3687	3523	3524	0.057537938641533	0.057537938641533
+2276	2276	2277	0.201064010739015	0.201064010739015
+18183	6051	5769	0.201340675613812	0.201340675613812
+18863	9178	2185	0.000908525082812035	0.000908525082812035
+14108	502	3544	0.223192299132	0.223192299132
+16417	3130	3281	0.0400386431725339	0.0400386431725339
+16286	1362	1363	0.0694355006798695	0.0694355006798695
+3729	3563	3564	0.1023601599905	0.1023601599905
+13961	9112	9247	0.133632751867418	0.133632751867418
+2325	1348	1614	0.104366499106977	0.104366499106977
+18909	10388	10381	0.014813120492833	0.014813120492833
+18903	10381	10380	0.00882005349877488	0.00882005349877488
+18454	4296	10295	0.0897566766881454	0.0897566766881454
+14692	941	2225	0.184174515609916	0.184174515609916
+19558	10562	10563	0.0196153093677919	0.0196153093677919
+16743	10006	7566	0.0419162617939555	0.0419162617939555
+19568	7474	10568	0.0062936328481519	0.0062936328481519
+18905	10382	10383	0.00831887899673018	0.00831887899673018
+17147	4241	3546	0.202185735299221	0.202185735299221
+14720	937	2221	0.184339220920538	0.184339220920538
+18637	2580	7383	0.244324669292135	0.244324669292135
+2484	2467	2468	0.0154146632189528	0.0154146632189528
+17183	5608	5658	0.149882473899379	0.149882473899379
+3908	3707	3708	0.138080579549583	0.138080579549583
+2555	2532	2533	0.191131540477931	0.191131540477931
+2556	2533	254	0.098486007419044	0.098486007419044
+19573	10570	7473	0.00674972719310255	0.00674972719310255
+2577	1090	2550	0.0509764502640852	0.0509764502640852
+17311	5685	5705	0.205154639659543	0.205154639659543
+20594	10852	10864	0.00559477666444464	0.00559477666444464
+2602	2568	2565	0.0838899757725962	0.0838899757725962
+13584	9079	9135	0.0736016285399027	0.0736016285399027
+3952	3748	3749	0.123087650580437	0.123087650580437
+2626	2587	2588	0.00484286584971978	0.00484286584971978
+2627	2588	2589	0.0472712028951763	0.0472712028951763
+18404	10286	7165	0.0480937532986949	0.0480937532986949
+18406	9349	8340	0.136218529796162	0.136218529796162
+13586	9135	9136	0.116423294527986	0.116423294527986
+14719	5893	937	0.0748599535472642	0.0748599535472642
+2721	2676	2677	0.00391406141859358	0.00391406141859358
+18735	4002	7603	0.202077020511888	0.202077020511888
+17677	6029	10165	0.522362145407342	0.522362145407342
+17480	344	5940	0.0510780896194201	0.0510780896194201
+2823	2771	2261	0.100546651913918	0.100546651913918
+18144	10275	10261	0.405650212701817	0.405650212701817
+12350	8663	8667	0.00958750951684791	0.00958750951684791
+4125	3888	3889	0.19728512260693	0.19728512260693
+2839	2788	1047	0.105687024742303	0.105687024742303
+2840	1047	2789	0.0528381886609336	0.0528381886609336
+12351	8667	8668	0.0176529909929813	0.0176529909929813
+19572	10564	10570	0.0698992084212194	0.0698992084212194
+16413	9458	9887	0.0468003057153474	0.0468003057153474
+2910	785	2854	0.0936375066158938	0.0936375066158938
+12361	8671	8672	0.0146217858658369	0.0146217858658369
+2955	2899	2900	0.139071498957734	0.139071498957734
+20621	10800	10799	0.0197706815366264	0.0197706815366264
+16441	5747	9898	0.0366397439833697	0.0366397439833697
+3003	2938	2939	0.343360355018568	0.343360355018568
+20697	4524	10911	0.0102002426471616	0.0102002426471616
+20441	10798	10799	0.0151893809033584	0.0151893809033584
+3052	2983	2984	0.049669116788992	0.049669116788992
+17130	4371	4372	0.0862019013563638	0.0862019013563638
+3072	3004	3006	0.148595619798792	0.148595619798792
+20009	9620	10046	0.0380951574175552	0.0380951574175552
+4390	4106	695	0.201687631399372	0.201687631399372
+18702	2606	1861	0.182749323037212	0.182749323037212
+3122	2901	3051	0.104668558602022	0.104668558602022
+20265	5574	10723	0.0117861788911356	0.0117861788911356
+20266	10724	7552	0.00870010659628447	0.00870010659628447
+19624	10591	10497	0.00644185269782912	0.00644185269782912
+19579	10573	10574	0.0879788736402366	0.0879788736402366
+18895	10376	10377	0.0641298068195797	0.0641298068195797
+20011	10694	10695	0.0242395353024572	0.0242395353024572
+17687	6171	6172	0.0391351463481426	0.0391351463481426
+3160	3084	3085	0.0490903700114876	0.0490903700114876
+19594	10580	10495	0.00720293691626167	0.00720293691626167
+3180	3100	3101	0.129889039932712	0.129889039932712
+17168	5241	5262	0.201125324676422	0.201125324676422
+17121	1798	4176	0.205688375484509	0.205688375484509
+3202	3118	3119	0.112364882779035	0.112364882779035
+14726	5162	6220	0.0504817306174529	0.0504817306174529
+3225	3140	3141	0.161478257380345	0.161478257380345
+13781	438	3176	0.297045355127737	0.297045355127737
+19813	5371	10633	0.121358837066421	0.121358837066421
+3298	3207	2047	0.106039987596014	0.106039987596014
+17169	5262	1912	0.201876443466571	0.201876443466571
+4605	3695	4261	0.0511463408235916	0.0511463408235916
+3320	3225	3226	0.12416264535459	0.12416264535459
+19269	10421	10423	0.00254934916501421	0.00254934916501421
+18686	1372	4116	0.0631464225691973	0.0631464225691973
+20456	10811	10791	0.0266421174352104	0.0266421174352104
+20624	10873	10804	0.10579809531994	0.10579809531994
+18140	10260	10273	0.404128367861769	0.404128367861769
+4673	4035	4316	0.0606123696093501	0.0606123696093501
+3387	3285	3286	0.00355897702027561	0.00355897702027561
+3388	3286	3287	0.0772193168955733	0.0772193168955733
+18146	10276	10258	0.404206655907194	0.404206655907194
+4696	808	3552	0.152717552993661	0.152717552993661
+3410	3303	3304	0.147141483236073	0.147141483236073
+20283	10722	10688	0.0815558763222832	0.0815558763222832
+20448	10804	10757	0.0136201124223367	0.0136201124223367
+20785	10292	10946	0.00447271282341959	0.00447271282341959
+19630	10593	10504	0.00657829834277663	0.00657829834277663
+3431	3318	3319	0.157091916454475	0.157091916454475
+20450	10805	10806	0.0327940652155406	0.0327940652155406
+4743	1385	4362	0.103327121803573	0.103327121803573
+18254	6754	8093	0.140439193425512	0.140439193425512
+18250	9369	6873	0.0520299718080319	0.0520299718080319
+20787	10932	5700	0.00677435562999442	0.00677435562999442
+3475	3354	3355	0.201619360833214	0.201619360833214
+14728	6303	5053	0.0505955795491821	0.0505955795491821
+3501	59	3374	0.0977645612190622	0.0977645612190622
+4808	4414	4415	0.102078381821333	0.102078381821333
+3525	3393	3394	0.0602077843108352	0.0602077843108352
+18251	6873	8493	0.0500003986375519	0.0500003986375519
+3545	656	1887	0.0518725917476049	0.0518725917476049
+14732	5467	6342	0.17284299485541	0.17284299485541
+3566	1664	1683	0.0314909646044893	0.0314909646044893
+17138	1909	4488	0.199449310001805	0.199449310001805
+18256	7043	3984	0.199449230757582	0.199449230757582
+4925	3762	2559	0.0885452473584724	0.0885452473584724
+18261	6496	2547	0.410253746717568	0.410253746717568
+3637	3478	3266	0.200452444377038	0.200452444377038
+3638	3266	3479	0.201663130575812	0.201663130575812
+20636	4518	10876	0.0502632727704227	0.0502632727704227
+3656	1794	3493	0.171297280470528	0.171297280470528
+18171	6061	4076	0.198476287736927	0.198476287736927
+20376	10759	10760	0.116931333825994	0.116931333825994
+3702	3537	3538	0.048566556365416	0.048566556365416
+20385	10293	10769	0.0538892457987372	0.0538892457987372
+18174	6420	6455	0.4094647827628	0.4094647827628
+5048	4577	4578	0.133343896044873	0.133343896044873
+3745	3575	3576	0.0911473636959273	0.0911473636959273
+3747	3577	3469	0.101252045857741	0.101252045857741
+20384	10767	10768	0.0160296914364663	0.0160296914364663
+17309	4261	5684	0.20074031502923	0.20074031502923
+18311	7054	7244	0.0289643230302344	0.0289643230302344
+20470	10819	10820	0.0323669425461701	0.0323669425461701
+14736	4161	4770	0.262098569801346	0.262098569801346
+5118	4637	4638	0.0862888373921514	0.0862888373921514
+18265	6532	1691	0.20439620202731	0.20439620202731
+20472	10821	10822	0.0473810496096361	0.0473810496096361
+5168	2615	4670	0.0537518017226415	0.0537518017226415
+18530	9153	9524	0.0561612407510351	0.0561612407510351
+17081	882	4467	0.138148999917071	0.138148999917071
+20012	10207	7896	0.145636470907972	0.145636470907972
+20423	10784	10785	0.00445123207828982	0.00445123207828982
+19137	10436	10430	0.0315234230528839	0.0315234230528839
+17145	4684	1801	0.196612355705575	0.196612355705575
+3889	3694	83	0.201794860941248	0.201794860941248
+18574	10316	10323	0.0808271649311999	0.0808271649311999
+17148	3546	46	0.198774198414449	0.198774198414449
+3912	3710	3711	0.148294717491307	0.148294717491307
+20615	10786	10857	0.0479734082124594	0.0479734082124594
+18267	6545	2438	0.164157220604829	0.164157220604829
+17099	332	3745	0.0956275481171213	0.0956275481171213
+14740	6607	3802	0.199799384709315	0.199799384709315
+18269	5736	5525	0.155855016610815	0.155855016610815
+5281	4748	4749	0.0137701294893219	0.0137701294893219
+3961	3755	3756	0.201785607236284	0.201785607236284
+3963	3757	1865	0.238183107088451	0.238183107088451
+18538	10309	10310	0.222695826046938	0.222695826046938
+4053	3833	3834	0.0227974048946719	0.0227974048946719
+18576	10324	10320	0.158325840757882	0.158325840757882
+5401	3070	4833	0.174791291148441	0.174791291148441
+20827	9001	9205	0.0113889892669974	0.0113889892669974
+16010	9780	9781	0.00910284197008254	0.00910284197008254
+18606	8065	6592	0.262343816062173	0.262343816062173
+18608	2631	5208	0.201029440504885	0.201029440504885
+20328	10745	10742	0.0339039031846942	0.0339039031846942
+4098	1552	3870	0.130787042699874	0.130787042699874
+16079	9815	9284	0.0214365694827313	0.0214365694827313
+18703	1861	7871	0.177358977412927	0.177358977412927
+5445	4865	4866	0.0483753395839426	0.0483753395839426
+4124	2246	3888	0.176179418850458	0.176179418850458
+18692	1856	5978	0.157563244482301	0.157563244482301
+5513	4918	1222	0.0334183748575429	0.0334183748575429
+4193	3941	3942	0.10150841538758	0.10150841538758
+18280	6739	6757	0.185196443942793	0.185196443942793
+18287	3986	6762	0.199195011240905	0.199195011240905
+4211	3961	3962	0.203354581445588	0.203354581445588
+18282	6460	6792	0.289344591592559	0.289344591592559
+18709	7654	7506	0.191266971634704	0.191266971634704
+4258	4004	4005	0.0557864946968893	0.0557864946968893
+18293	6900	6901	0.125065642459057	0.125065642459057
+4279	4022	4023	0.136471513645059	0.136471513645059
+18285	6794	6824	0.0676234540262284	0.0676234540262284
+20412	10780	10737	0.00327519593576582	0.00327519593576582
+5639	1165	885	0.138504687840451	0.138504687840451
+18705	4059	9745	0.17218742858343	0.17218742858343
+5680	5036	5037	0.13925145495263	0.13925145495263
+4340	4070	4006	0.0527657969561626	0.0527657969561626
+4341	4006	4071	0.045563339939639	0.045563339939639
+18706	9745	3863	0.0360430655172132	0.0360430655172132
+4363	4087	1214	0.050228703045046	0.050228703045046
+18708	6218	7654	0.273874816557472	0.273874816557472
+14701	5065	986	0.133961657579708	0.133961657579708
+4385	4078	4080	0.499220390775423	0.499220390775423
+17161	5086	5087	0.0305453434226413	0.0305453434226413
+4410	4124	3048	0.142041157035339	0.142041157035339
+18547	10315	7542	0.326789019301198	0.326789019301198
+5780	4917	5106	0.0912724900005868	0.0912724900005868
+4431	4139	2389	0.109327413388579	0.109327413388579
+5754	5082	5083	0.0244848814587712	0.0244848814587712
+18548	7542	5567	0.0788647232749776	0.0788647232749776
+5829	5144	5145	0.0718528722690416	0.0718528722690416
+4478	4170	4171	0.114300734663783	0.114300734663783
+14104	421	3767	0.239382300921688	0.239382300921688
+5849	1966	5160	0.213373795201997	0.213373795201997
+4498	1369	4184	0.105991036166523	0.105991036166523
+17123	3542	42	0.197838013671145	0.197838013671145
+18295	1428	6901	0.00619376962359973	0.00619376962359973
+18296	6901	6968	0.214788257098635	0.214788257098635
+5920	5198	5199	0.0509206897939403	0.0509206897939403
+4576	4176	1777	0.0501165848501884	0.0501165848501884
+20629	10873	10847	0.0359844691550279	0.0359844691550279
+18356	7764	7765	0.203486837058476	0.203486837058476
+18353	7040	3427	0.201724758100166	0.201724758100166
+6017	3447	5269	0.0916999906376171	0.0916999906376171
+4669	4312	4313	0.0844811623232087	0.0844811623232087
+18355	7763	7764	0.18255985476615	0.18255985476615
+20388	10772	10773	0.00806462172146812	0.00806462172146812
+4690	1574	4327	0.172428634063548	0.172428634063548
+14761	7128	660	0.183084210873309	0.183084210873309
+18307	7041	3428	0.200871545358079	0.200871545358079
+4768	2038	4380	0.146902820961905	0.146902820961905
+18357	7765	7253	0.0959812077322034	0.0959812077322034
+17178	5409	5410	0.041431272963648	0.041431272963648
+4841	4434	4435	0.0243817622036277	0.0243817622036277
+19636	10595	10596	0.0236895488952709	0.0236895488952709
+20494	10814	10837	0.00453902687683386	0.00453902687683386
+12316	8640	8559	0.0170391288088959	0.0170391288088959
+4864	4448	4449	0.051463626660104	0.051463626660104
+14105	3767	490	0.17231974049998	0.17231974049998
+18310	7244	7054	0.0289643230302344	0.0289643230302344
+4906	3886	865	0.080856531304005	0.080856531304005
+14762	660	7162	0.177556995744578	0.177556995744578
+14106	490	492	0.200841500024827	0.200841500024827
+6278	5468	5223	0.0507325637005759	0.0507325637005759
+20498	2955	10783	0.00926966063781334	0.00926966063781334
+18511	9529	10302	0.134870017545438	0.134870017545438
+18559	10317	10318	0.0818849597364774	0.0818849597364774
+5006	4551	4552	0.0605833275140723	0.0605833275140723
+20497	10805	2955	0.011923850145444	0.011923850145444
+6365	1258	377	0.0777271141684953	0.0777271141684953
+5032	3218	4567	0.203476554448063	0.203476554448063
+18309	3989	7244	0.103816807067418	0.103816807067418
+6389	5536	5537	0.0941709460297732	0.0941709460297732
+5052	4580	4581	0.0994044886957745	0.0994044886957745
+19827	9253	7642	0.176656738058614	0.176656738058614
+18315	7190	1430	0.126827993445383	0.126827993445383
+18691	2597	1856	0.178902858758576	0.178902858758576
+6529	1038	5638	0.106710156184621	0.106710156184621
+5211	4703	4704	0.0593965930317325	0.0593965930317325
+18320	7455	6063	0.193748278871749	0.193748278871749
+5307	4763	4764	0.0623737801227747	0.0623737801227747
+20402	10771	10761	0.045832556045337	0.045832556045337
+6659	5732	716	0.0227471694550216	0.0227471694550216
+5331	3596	4783	0.0944705655668644	0.0944705655668644
+14107	492	502	0.277229511676695	0.277229511676695
+6732	5783	5784	0.103949862025848	0.103949862025848
+14767	7420	4860	0.190666070334235	0.190666070334235
+20406	8354	10772	0.00730920335045724	0.00730920335045724
+6754	5799	5800	0.0473962648551068	0.0473962648551068
+14769	7430	4858	0.18998910813567	0.18998910813567
+5443	4863	4864	0.0452091651037792	0.0452091651037792
+19834	10654	9725	0.196434640947063	0.196434640947063
+6799	2741	5836	0.0500630331544159	0.0500630331544159
+20523	2708	10752	0.00659207654644855	0.00659207654644855
+18323	7479	7480	0.203575671880267	0.203575671880267
+18329	6073	7593	0.194237102947714	0.194237102947714
+5506	4912	2121	0.0993922299820147	0.0993922299820147
+19837	5204	5602	0.169326060361496	0.169326060361496
+6868	3299	5873	0.0385426751655708	0.0385426751655708
+5529	4929	4930	0.0186787878300106	0.0186787878300106
+5530	4930	4931	0.150638241291928	0.150638241291928
+20519	10815	10845	0.0426977620157165	0.0426977620157165
+6909	5905	5906	0.0925705753401188	0.0925705753401188
+5581	4968	4969	0.19364655602673	0.19364655602673
+20802	10942	606	0.00932539286509621	0.00932539286509621
+20522	10808	2708	0.0062556157491122	0.0062556157491122
+5631	3571	5004	0.140817256140417	0.140817256140417
+18338	2435	7632	0.201752260263955	0.201752260263955
+20016	2696	8044	0.148197142125826	0.148197142125826
+5653	2345	4151	0.175358365382788	0.175358365382788
+18327	1432	7191	0.123062885737589	0.123062885737589
+6998	2684	5970	0.144359466732262	0.144359466732262
+5670	679	5028	0.00422540721209624	0.00422540721209624
+5671	5028	5029	0.199984733552555	0.199984733552555
+20382	10765	10766	0.0345648031474255	0.0345648031474255
+18350	7716	6756	0.141149359906032	0.141149359906032
+5748	5078	5079	0.20268033504505	0.20268033504505
+18163	10259	6036	0.2014076606309	0.2014076606309
+14704	5105	3799	0.199599075644316	0.199599075644316
+18162	2170	10259	0.118558518008842	0.118558518008842
+20019	4453	5501	0.145746885757253	0.145746885757253
+5830	5145	2118	0.0459910302398271	0.0459910302398271
+20020	5501	7075	0.147873409818305	0.147873409818305
+14776	5927	3806	0.151596310173331	0.151596310173331
+5853	4622	5163	0.10255879316328	0.10255879316328
+18343	7662	5247	0.110734380038432	0.110734380038432
+20022	8291	7898	0.145585163841291	0.145585163841291
+7192	6084	6085	0.188916282974339	0.188916282974339
+18345	6874	1684	0.205522453761373	0.205522453761373
+20542	2953	10853	0.0105529318413212	0.0105529318413212
+18348	2429	7700	0.202520445331427	0.202520445331427
+20024	8856	9319	0.148299248554164	0.148299248554164
+7238	4839	1519	0.0519761467059316	0.0519761467059316
+14772	923	5925	0.177924520685585	0.177924520685585
+20544	10831	10809	0.07258379165013	0.07258379165013
+5934	4646	3645	0.198637387669602	0.198637387669602
+20537	10850	10851	0.00393462806086889	0.00393462806086889
+7284	6141	11	0.135513694564746	0.135513694564746
+5958	5230	5231	0.202816769336327	0.202816769336327
+20538	10764	10852	0.00745697116010785	0.00745697116010785
+7311	5071	6157	0.164940273242935	0.164940273242935
+5976	4624	1247	0.13286062727511	0.13286062727511
+5978	4556	2725	0.132159028738313	0.132159028738313
+20539	10852	10833	0.00647861100893927	0.00647861100893927
+7339	6169	6170	0.0619567458929491	0.0619567458929491
+5998	5256	5257	0.103904946256075	0.103904946256075
+19289	10469	10470	0.0657689911002152	0.0657689911002152
+20550	10854	10842	0.00418096419493106	0.00418096419493106
+6016	5268	3447	0.109289564409357	0.109289564409357
+20541	10846	2953	0.0102415664506872	0.0102415664506872
+6042	2870	5284	0.0497761483323909	0.0497761483323909
+20446	10802	10794	0.010877497210246	0.010877497210246
+6066	1342	5306	0.205811743638723	0.205811743638723
+20547	2961	10838	0.0117661269256179	0.0117661269256179
+7483	6261	1188	0.16816674729097	0.16816674729097
+6138	3644	4554	0.0976185559336041	0.0976185559336041
+18364	7802	1660	0.0598129332818693	0.0598129332818693
+7554	6302	1356	0.0804502555219789	0.0804502555219789
+6209	5412	1185	0.167137462035015	0.167137462035015
+6210	1185	5413	0.0233182677092941	0.0233182677092941
+14730	6318	6303	0.0522173167652759	0.0522173167652759
+20234	10715	10714	0.0286157939247338	0.0286157939247338
+20565	1287	10855	0.00858462136960439	0.00858462136960439
+6251	5443	779	0.0160681132894306	0.0160681132894306
+14783	4856	7862	0.182896538603858	0.182896538603858
+6272	5463	5464	0.0498340640254978	0.0498340640254978
+20235	10714	8820	0.0168131405425372	0.0168131405425372
+6293	5477	3890	0.10549800375505	0.10549800375505
+16545	7835	9934	0.137971408959184	0.137971408959184
+6362	351	5522	0.0335008525021526	0.0335008525021526
+16018	9787	9788	0.0995758326234823	0.0995758326234823
+6387	5535	2028	0.107888528337289	0.107888528337289
+20242	10717	10716	0.029516495512001	0.029516495512001
+7774	5212	6424	0.109568567873903	0.109568567873903
+16546	9934	9935	0.139302196645357	0.139302196645357
+20562	10798	10807	0.0058401189840652	0.0058401189840652
+15113	3050	7229	0.0133472139691031	0.0133472139691031
+20245	8372	6959	0.0489264341729089	0.0489264341729089
+11422	8078	8079	0.0484137060021889	0.0484137060021889
+6473	5599	5600	0.108658521887425	0.108658521887425
+15115	7996	7997	0.209391166364433	0.209391166364433
+18367	7754	8093	0.0507390772270922	0.0507390772270922
+20352	10751	9401	0.00837355044160468	0.00837355044160468
+6492	5616	5617	0.0720767157725574	0.0720767157725574
+14721	2221	4871	0.160443069505019	0.160443069505019
+18368	8093	6894	0.0518148786998363	0.0518148786998363
+16020	9789	9788	0.073636854952175	0.073636854952175
+7896	6503	6504	0.201046575537805	0.201046575537805
+16547	9935	3668	0.222625726498778	0.222625726498778
+11416	8000	8034	0.303468507056762	0.303468507056762
+6579	5669	5670	0.150406237761818	0.150406237761818
+20845	10954	10937	0.131662909083966	0.131662909083966
+6604	5693	4324	0.222481680681729	0.222481680681729
+18371	5250	7594	0.0499247461563453	0.0499247461563453
+15222	8101	8102	0.077833708774634	0.077833708774634
+18372	7594	5883	0.083286408265142	0.083286408265142
+6714	5766	2843	0.181402526618843	0.181402526618843
+14742	5935	931	0.176525948040391	0.176525948040391
+20409	8971	8976	0.00824136098890487	0.00824136098890487
+17573	10146	4643	0.00925827675066928	0.00925827675066928
+8175	6672	3101	0.17546713620256	0.17546713620256
+11210	300	106	0.00724031766776508	0.00724031766776508
+8223	6696	951	0.177624298281023	0.177624298281023
+6856	4317	5865	0.0513037576080921	0.0513037576080921
+18335	7611	1689	0.102723820359578	0.102723820359578
+20356	10752	10753	0.178510491347886	0.178510491347886
+6873	5878	5879	0.686284794666677	0.686284794666677
+11609	3416	7035	0.200128365503357	0.200128365503357
+11610	7035	8338	0.189938999172283	0.189938999172283
+6895	5896	4960	0.0956843495121368	0.0956843495121368
+11335	8218	251	0.176906123725318	0.176906123725318
+17668	10162	10161	0.0392525789715303	0.0392525789715303
+8321	6751	5251	0.0499574491010493	0.0499574491010493
+17670	8260	9051	0.230562637224967	0.230562637224967
+8340	6769	5533	0.120999789974565	0.120999789974565
+11366	7971	1892	0.0488719799669425	0.0488719799669425
+6977	4442	5511	0.147695461409276	0.147695461409276
+14750	2214	929	0.185352492811126	0.185352492811126
+7030	4913	5988	0.198333075719104	0.198333075719104
+18693	5978	6025	0.00688297127309608	0.00688297127309608
+11612	3418	742	0.19996057055502	0.19996057055502
+20437	10795	10796	0.0230619881865373	0.0230619881865373
+11948	8496	8497	0.0216014239716138	0.0216014239716138
+7132	1290	6044	0.0502638300231986	0.0502638300231986
+11686	1032	773	0.0128283485920152	0.0128283485920152
+8554	4804	6890	0.135875328970406	0.135875328970406
+11767	2687	8406	0.0738017906986337	0.0738017906986337
+8601	2178	596	0.0528183519637533	0.0528183519637533
+7225	6106	6107	0.101643082422806	0.101643082422806
+11821	8422	8423	0.175711465733647	0.175711465733647
+8624	109	720	0.104166949267626	0.104166949267626
+18552	7705	2988	0.199131268231619	0.199131268231619
+14770	4858	2209	0.16101488662795	0.16101488662795
+7328	6165	6166	0.0995968460919669	0.0995968460919669
+12286	8526	8525	0.0214801658544325	0.0214801658544325
+7376	337	6196	0.0756391181616623	0.0756391181616623
+12217	8592	8593	0.114913209514243	0.114913209514243
+12317	8559	2500	0.0435792910401613	0.0435792910401613
+8839	528	7032	0.050727128416239	0.050727128416239
+7478	6259	1180	0.207751884347626	0.207751884347626
+18554	9429	7706	0.20403157089995	0.20403157089995
+15821	8564	8565	0.0641361466923926	0.0641361466923926
+8860	7045	7046	0.134234542647931	0.134234542647931
+7498	4598	3688	0.240872387579393	0.240872387579393
+7499	3688	6270	0.142331405185985	0.142331405185985
+20649	10880	1676	0.0578550543011222	0.0578550543011222
+12236	8586	1599	0.0967599085697604	0.0967599085697604
+7572	5861	1309	0.178473387298321	0.178473387298321
+18324	7480	7524	0.15130858595047	0.15130858595047
+7598	6323	6324	0.205483069278936	0.205483069278936
+17836	9362	1627	0.0523901213643909	0.0523901213643909
+14759	7101	5464	0.170276074046912	0.170276074046912
+14760	5464	7128	0.178804240685068	0.178804240685068
+7640	6024	3875	0.0993805589791004	0.0993805589791004
+16021	9788	9790	0.320911397883896	0.320911397883896
+9035	7131	7132	0.0496921831493493	0.0496921831493493
+18491	9168	9169	0.133423914370859	0.133423914370859
+17837	1627	5679	0.10292857902181	0.10292857902181
+9059	2896	5632	0.0842038197459281	0.0842038197459281
+20806	7427	10935	0.00559704943884798	0.00559704943884798
+12938	1970	8709	0.0935507240006809	0.0935507240006809
+11439	511	8252	0.25940626826434	0.25940626826434
+7695	5168	6377	0.177825109084943	0.177825109084943
+20708	7442	10913	0.0784445493600802	0.0784445493600802
+9099	6388	7159	0.131345505242465	0.131345505242465
+11441	8256	8255	0.0395721958074786	0.0395721958074786
+19809	5615	9635	0.105426130739244	0.105426130739244
+9145	5720	7186	0.100417695742859	0.100417695742859
+11443	8254	8257	0.03964069530807	0.03964069530807
+7788	6432	6433	0.0533345329573706	0.0533345329573706
+12939	8709	8766	0.0775671350558112	0.0775671350558112
+9187	7207	7208	0.0500116374722849	0.0500116374722849
+7811	838	6446	0.0830965282034823	0.0830965282034823
+7816	6449	2813	0.0739587262737054	0.0739587262737054
+12260	8617	8618	0.00726192949201925	0.00726192949201925
+20803	606	10913	0.0113017508087441	0.0113017508087441
+9235	7240	7241	0.0498075431237363	0.0498075431237363
+7861	6474	6475	0.692905896897531	0.692905896897531
+12942	8804	1331	0.0594619846778877	0.0594619846778877
+12264	8622	8616	0.0863852743591186	0.0863852743591186
+7908	6511	6512	0.107336468131195	0.107336468131195
+20811	10951	7034	0.00453220039269765	0.00453220039269765
+13006	8912	8913	0.031616887141609	0.031616887141609
+7929	4175	6525	0.0337195393803404	0.0337195393803404
+20394	10762	10775	0.00651572160316994	0.00651572160316994
+20400	3591	10771	0.0086403574168429	0.0086403574168429
+8000	6560	6561	0.05117078549911	0.05117078549911
+18914	10389	10392	0.00619620469246147	0.00619620469246147
+8024	6580	6581	0.135411748293681	0.135411748293681
+8047	5711	6593	0.0649690182450408	0.0649690182450408
+20509	10841	638	0.00591881170263726	0.00591881170263726
+12270	8627	8518	0.0752716608672627	0.0752716608672627
+15918	9104	9746	0.00764030702792677	0.00764030702792677
+8143	6654	1583	0.150966803397046	0.150966803397046
+18477	2411	5542	0.101313827089111	0.101313827089111
+15876	8978	9002	0.0205305754568531	0.0205305754568531
+8295	6735	6736	0.0734967400485445	0.0734967400485445
+12273	8629	8517	0.0368940227401467	0.0368940227401467
+8322	5251	6752	0.0513511942917184	0.0513511942917184
+17214	3774	8403	0.176505403414048	0.176505403414048
+11789	4445	6564	0.147259159007996	0.147259159007996
+8396	516	6411	0.245438474982929	0.245438474982929
+19810	9635	9643	0.17762409301406	0.17762409301406
+19811	9643	7122	0.176833292049994	0.176833292049994
+9834	7540	7541	0.0505839701248518	0.0505839701248518
+8443	1465	5441	0.103147915206822	0.103147915206822
+13470	9094	9095	0.186249123099868	0.186249123099868
+9909	7585	3060	0.206196737198557	0.206196737198557
+8516	6868	4142	0.0958725861464383	0.0958725861464383
+18481	9120	6391	0.130087180946324	0.130087180946324
+8559	1248	4557	0.13273864991069	0.13273864991069
+18488	9153	9154	0.0316379611455697	0.0316379611455697
+10040	7380	7647	0.073513516250253	0.073513516250253
+8638	6926	6927	0.0519431626477688	0.0519431626477688
+8640	6928	2302	0.107037203280329	0.107037203280329
+18492	9169	9170	0.136492159060533	0.136492159060533
+8683	1000	4222	0.0557449369548998	0.0557449369548998
+15905	8603	8604	0.0748338508215397	0.0748338508215397
+13757	8439	9181	0.0861617636196398	0.0861617636196398
+10162	2158	7701	0.118289099292956	0.118289099292956
+8752	6982	6983	0.20266520881126	0.20266520881126
+12326	8650	8651	0.106050821827968	0.106050821827968
+18298	6995	6996	0.187375849458261	0.187375849458261
+14103	418	421	0.212232135618177	0.212232135618177
+11436	8255	7984	0.498708139076575	0.498708139076575
+18497	9201	9212	0.134547599555241	0.134547599555241
+19881	2617	10410	0.177201589274352	0.177201589274352
+8821	13	7020	0.00925156011318802	0.00925156011318802
+14676	5941	3794	0.153141383772443	0.153141383772443
+8846	6085	742	0.0513498235273795	0.0513498235273795
+19287	9967	10468	0.111280897910296	0.111280897910296
+8898	267	7062	0.0377688740912094	0.0377688740912094
+20847	10946	10950	0.100177888201708	0.100177888201708
+18612	1850	9261	0.181237135841786	0.181237135841786
+18361	7374	7802	0.0447005696877022	0.0447005696877022
+8973	7099	900	0.0469763030340631	0.0469763030340631
+14047	4836	389	0.0490717904305928	0.0490717904305928
+12310	8644	8645	0.447909393812679	0.447909393812679
+8996	7110	7111	0.00729890302499032	0.00729890302499032
+8997	7111	7112	0.0821157489631964	0.0821157489631964
+19296	10470	10471	0.0561834077462884	0.0561834077462884
+9018	7120	3944	0.0625799505809278	0.0625799505809278
+20228	8758	8818	0.0478043651923457	0.0478043651923457
+14140	9284	9285	0.260183964007922	0.260183964007922
+10472	1612	7829	0.00870018444151776	0.00870018444151776
+9067	7146	1144	0.138617590256283	0.138617590256283
+9068	1144	873	0.140306927162159	0.140306927162159
+16081	9816	366	0.168828958006928	0.168828958006928
+19882	10410	7867	0.175655958248639	0.175655958248639
+9135	5185	5653	0.105406920017136	0.105406920017136
+19292	10469	10471	0.0669585268555214	0.0669585268555214
+14789	9417	9415	0.0546470920616291	0.0546470920616291
+14678	9330	9301	0.189092694124095	0.189092694124095
+16087	9493	9819	0.0602377998698223	0.0602377998698223
+9262	5135	5150	0.0243532262877801	0.0243532262877801
+14663	9300	6543	0.20364721866244	0.20364721866244
+9311	4256	7276	0.202152573812647	0.202152573812647
+20396	10777	10758	0.00300729649615889	0.00300729649615889
+16088	9819	9820	0.154328326827327	0.154328326827327
+9435	7345	7346	0.0190810494123846	0.0190810494123846
+18624	6136	9460	0.0524172265643075	0.0524172265643075
+20568	10857	10787	0.0362929048752591	0.0362929048752591
+18625	9460	2258	0.0501132934741927	0.0501132934741927
+15897	9441	9042	0.0240046794304529	0.0240046794304529
+16387	9458	9459	0.0276860712412084	0.0276860712412084
+11214	8163	391	0.128403364715461	0.128403364715461
+9803	6610	7523	0.196894261944695	0.196894261944695
+15456	9612	9605	0.0879146885908635	0.0879146885908635
+18630	5862	9484	0.00360275623818702	0.00360275623818702
+11351	4798	8227	0.0561921807720747	0.0561921807720747
+9936	4537	7602	0.2557209782077	0.2557209782077
+11457	8266	8267	0.4367852597313	0.4367852597313
+11491	6185	8281	0.106123839405449	0.106123839405449
+11244	8185	8162	0.0231522248365289	0.0231522248365289
+18634	4045	7865	0.17751242949901	0.17751242949901
+18698	5868	1320	0.176912291429695	0.176912291429695
+10141	6347	3032	0.0935494731718596	0.0935494731718596
+11771	8406	4385	0.0534654755495647	0.0534654755495647
+19883	7867	3716	0.104069204828323	0.104069204828323
+11834	8430	8431	0.087830432319228	0.087830432319228
+10212	7733	7734	0.0513578872611552	0.0513578872611552
+19884	3716	7405	0.200874185823139	0.200874185823139
+11852	8443	8444	0.0120541689820552	0.0120541689820552
+10235	2742	7741	0.0499109655825577	0.0499109655825577
+19913	10244	6599	0.17675930412674	0.17675930412674
+15270	8458	8459	0.0175633548114394	0.0175633548114394
+10253	1700	7749	0.00587012913148048	0.00587012913148048
+20002	10691	10692	0.0226226455892357	0.0226226455892357
+11911	8472	8473	0.00378078844043477	0.00378078844043477
+10274	3194	6110	0.20159656533977	0.20159656533977
+11953	8041	6568	0.145503350739709	0.145503350739709
+10298	6399	3614	0.133348580117153	0.133348580117153
+11992	5503	7077	0.147510556806948	0.147510556806948
+19496	10524	7457	0.0831219334199701	0.0831219334199701
+10398	7619	7807	0.0285985320629965	0.0285985320629965
+15922	1816	9751	0.110608853519784	0.110608853519784
+11917	8476	1302	0.0550753650708828	0.0550753650708828
+20647	10880	10034	0.0300539000602635	0.0300539000602635
+10474	6225	7658	0.277054905467397	0.277054905467397
+11996	6576	4457	0.148175074796056	0.148175074796056
+12215	8590	8591	0.0896761056675667	0.0896761056675667
+12240	1246	8611	0.0161729384224601	0.0161729384224601
+10602	7875	741	0.0900908109241702	0.0900908109241702
+16451	9903	9904	0.00638068663878895	0.00638068663878895
+12161	8568	8315	0.127606752812743	0.127606752812743
+16022	9791	9792	0.180221045869865	0.180221045869865
+12376	7853	4674	0.113693675785271	0.113693675785271
+12377	4674	8679	0.101029871301971	0.101029871301971
+19472	10516	7476	0.0110661304777454	0.0110661304777454
+16024	363	9793	0.0338194849383131	0.0338194849383131
+12518	5916	3788	0.153505057727295	0.153505057727295
+10815	3667	7993	0.06101955432425	0.06101955432425
+17063	2247	4880	0.17655557289719	0.17655557289719
+18644	1374	1318	0.176938793518256	0.176938793518256
+20668	1127	10890	0.00915451265400173	0.00915451265400173
+15804	1934	9711	0.166526724215667	0.166526724215667
+15805	9711	9506	0.0388070303408929	0.0388070303408929
+15809	9713	7112	0.0121509406944637	0.0121509406944637
+17109	4052	8135	0.162752784015343	0.162752784015343
+12609	7223	8772	0.0487324288024552	0.0487324288024552
+10935	6177	3306	0.106502895543558	0.106502895543558
+10936	3306	8049	0.0536769065211004	0.0536769065211004
+16203	7727	9845	1.20908168114497	1.20908168114497
+10955	8058	8059	0.079137340429329	0.079137340429329
+16612	9327	9942	0.147120185144049	0.147120185144049
+17066	5478	9963	0.164315977100666	0.164315977100666
+17067	9963	10069	0.0117569437064922	0.0117569437064922
+12661	6331	6548	0.107973460603441	0.107973460603441
+12679	3638	8797	0.0132415259966435	0.0132415259966435
+16962	10044	10040	0.011239967337662	0.011239967337662
+12708	6861	5165	0.179825321478717	0.179825321478717
+11020	1485	143	0.200555984903635	0.200555984903635
+11021	143	8087	0.297571119969413	0.297571119969413
+17011	9424	10052	0.0266755832635793	0.0266755832635793
+12731	8820	7196	0.0815503609966838	0.0815503609966838
+17038	10062	9210	0.00792923279445615	0.00792923279445615
+11062	3436	7764	0.0490279707439403	0.0490279707439403
+16025	9793	9792	0.141538634561804	0.141538634561804
+12773	8830	4166	0.0867031847297172	0.0867031847297172
+16209	6627	5825	0.203615270524375	0.203615270524375
+16207	7210	6624	0.114867174949551	0.114867174949551
+16210	5825	7730	0.194825716270604	0.194825716270604
+13015	8917	8918	0.0110325419879542	0.0110325419879542
+13019	8923	8924	0.0459300988872919	0.0459300988872919
+11247	8187	5274	0.160867422208887	0.160867422208887
+19514	10535	10538	0.0037920381346196	0.0037920381346196
+13024	6190	280	0.0860979970314494	0.0860979970314494
+11276	8174	8198	0.367460344283523	0.367460344283523
+18156	4088	6034	0.199039273787356	0.199039273787356
+13094	1749	8958	0.0802223716795591	0.0802223716795591
+11325	5154	2237	0.0295446835402977	0.0295446835402977
+18719	4048	7409	0.17730031135953	0.17730031135953
+13118	8967	1742	0.0145216501585431	0.0145216501585431
+18386	8971	8972	0.00871865668631088	0.00871865668631088
+13072	8913	8952	0.0749880743663527	0.0749880743663527
+17640	230	8241	0.144923812025645	0.144923812025645
+13560	9033	578	0.049912950240993	0.049912950240993
+11377	8237	4850	0.0778446846789704	0.0778446846789704
+18720	7409	5864	0.175843787012913	0.175843787012913
+11410	2864	7808	0.201887571458386	0.201887571458386
+11526	8300	809	0.0681077085457417	0.0681077085457417
+18653	7653	10176	0.157020875630107	0.157020875630107
+13241	7916	4418	0.196768399976565	0.196768399976565
+11566	7031	7379	0.100426092571383	0.100426092571383
+11568	7379	1594	0.158671241159827	0.158671241159827
+17820	10186	10187	0.0184687744290435	0.0184687744290435
+13263	4963	6826	0.0748897830948627	0.0748897830948627
+11599	7782	8332	0.0501574795892601	0.0501574795892601
+11600	8332	1125	0.0495676895406725	0.0495676895406725
+11644	4658	8348	0.011012895464713	0.011012895464713
+18918	10397	10398	0.0105062475981655	0.0105062475981655
+17913	6562	4748	0.176744370871331	0.176744370871331
+11715	8369	8370	0.101679025311835	0.101679025311835
+11747	8387	8388	0.0596706311453888	0.0596706311453888
+11775	8121	2683	0.119321215072029	0.119321215072029
+13389	8267	9048	0.0706232625221708	0.0706232625221708
+11997	4457	5505	0.144543593212435	0.144543593212435
+19642	10599	10600	0.00461558236551731	0.00461558236551731
+12058	153	3776	0.311946607437041	0.311946607437041
+13750	6895	9177	0.1538081352177	0.1538081352177
+12164	4818	7560	0.10615031357403	0.10615031357403
+15934	6257	9756	0.181030993335028	0.181030993335028
+18568	10324	10321	0.144976741381278	0.144976741381278
+20260	6471	10699	0.00720326005355295	0.00720326005355295
+12382	440	8680	0.0360714923590191	0.0360714923590191
+13919	482	483	0.00751372921095178	0.00751372921095178
+20414	3586	10773	0.00983155874827391	0.00983155874827391
+12480	8712	8713	0.0991407463070431	0.0991407463070431
+15455	9611	9612	0.086225314993736	0.086225314993736
+20417	8993	10775	0.0123681069665026	0.0123681069665026
+19623	10508	10591	0.0688242418092362	0.0688242418092362
+14087	6816	2943	0.102402811156445	0.102402811156445
+12571	8755	8756	0.0991408859101036	0.0991408859101036
+18658	9831	7643	0.17655772025733	0.17655772025733
+16026	9792	9793	0.141538634561804	0.141538634561804
+14200	5104	8831	0.0500819471783367	0.0500819471783367
+16028	9794	9795	0.0352990859554557	0.0352990859554557
+12690	8805	8806	0.0205962859747724	0.0205962859747724
+14297	1952	9317	0.0799385706307454	0.0799385706307454
+12747	5350	4220	0.0793424677909429	0.0793424677909429
+16029	9796	9797	0.0144472492683917	0.0144472492683917
+20288	6472	10687	0.0642398609947935	0.0642398609947935
+14311	8859	8501	0.0340924315859818	0.0340924315859818
+14330	602	8973	0.0577848630730138	0.0577848630730138
+16030	9797	9798	0.0484390320890552	0.0484390320890552
+16031	9798	9799	0.00754569346896809	0.00754569346896809
+14334	2420	8925	0.0583291679544673	0.0583291679544673
+12784	8834	5470	0.171286135301765	0.171286135301765
+12785	5470	8835	0.178924287864237	0.178924287864237
+16033	9799	9800	0.00706845342179734	0.00706845342179734
+14357	513	9331	0.0549879463430077	0.0549879463430077
+12804	3763	2560	0.0898130023336766	0.0898130023336766
+12820	8849	8848	0.188203677867594	0.188203677867594
+16035	9800	6871	0.0378217549395311	0.0378217549395311
+20159	6155	10163	0.0614761289722609	0.0614761289722609
+12915	967	5281	0.138474892352542	0.138474892352542
+16687	9988	8314	0.0384286340006129	0.0384286340006129
+12991	8908	306	0.0182421240862306	0.0182421240862306
+13032	8926	8928	0.185901221322606	0.185901221322606
+16689	1824	9989	0.0121513664645164	0.0121513664645164
+13107	8963	8964	0.0484369444463125	0.0484369444463125
+19516	10539	10536	0.00249155177103479	0.00249155177103479
+19470	10514	10515	0.0196261730033966	0.0196261730033966
+13156	8988	8989	0.00631722030409862	0.00631722030409862
+19649	10600	10601	0.0174353644977756	0.0174353644977756
+18928	10405	10396	0.00112670264684339	0.00112670264684339
+18410	10288	8327	0.00700530123739539	0.00700530123739539
+14672	9414	4877	0.190941051800692	0.190941051800692
+14673	4877	2227	0.162460717202061	0.162460717202061
+13231	4409	9009	0.223227137223831	0.223227137223831
+237	31	134	0.108163538194537	0.108163538194537
+14831	8322	5668	0.0494625040984646	0.0494625040984646
+18415	8376	3409	0.101754880454598	0.101754880454598
+15848	9733	9731	0.0169747446876837	0.0169747446876837
+13335	3971	7017	0.0998321056196178	0.0998321056196178
+18626	2258	9475	0.0453120140623152	0.0453120140623152
+13471	9095	9092	0.294331677800491	0.294331677800491
+13512	7797	9114	0.0647363210214912	0.0647363210214912
+15901	9499	9500	0.157325995690783	0.157325995690783
+13697	9167	7423	0.127782150083045	0.127782150083045
+20289	10687	10697	0.00276887237539732	0.00276887237539732
+13718	8097	9171	0.00881240787098174	0.00881240787098174
+13751	9178	9130	0.0262505906254233	0.0262505906254233
+15391	9259	9571	0.107861175514815	0.107861175514815
+15783	2106	9596	0.166115711722291	0.166115711722291
+13852	1774	4412	0.0465225826542141	0.0465225826542141
+20380	10763	10764	0.00723047037301379	0.00723047037301379
+15452	9609	9598	0.128875611115748	0.128875611115748
+14144	9287	4651	0.182099578171645	0.182099578171645
+15807	9712	7111	0.0179279183487844	0.0179279183487844
+14230	8860	4113	0.0915086936553939	0.0915086936553939
+15819	9705	8564	0.0112418070831931	0.0112418070831931
+14250	8157	7606	0.0899264482990573	0.0899264482990573
+19499	10526	10527	0.0418767441965843	0.0418767441965843
+16078	9814	9815	0.177867255933272	0.177867255933272
+14354	5520	6454	0.134959237439496	0.134959237439496
+16224	5835	9851	0.203722282298932	0.203722282298932
+14425	1233	6137	0.0491477874140339	0.0491477874140339
+16468	9914	9902	0.117059110726511	0.117059110726511
+16500	8890	8891	0.0884309215437497	0.0884309215437497
+16591	9948	8492	0.14561270804365	0.14561270804365
+16470	9915	3282	0.193717589764618	0.193717589764618
+14541	6915	9375	0.0102720812466755	0.0102720812466755
+16501	8891	3167	0.0148460110144783	0.0148460110144783
+16593	9949	9950	0.145366288858291	0.145366288858291
+14609	8990	8994	0.00979628795431279	0.00979628795431279
+14794	3335	7882	0.0961603685796077	0.0961603685796077
+17101	332	10014	0.240821045601335	0.240821045601335
+14816	9424	9425	0.0673114946358147	0.0673114946358147
+17065	9474	5478	0.175247470145414	0.175247470145414
+15103	3050	9489	0.102745543982247	0.102745543982247
+16898	8714	8743	0.201991786328297	0.201991786328297
+16402	9880	9878	0.04752967411177	0.04752967411177
+16959	10041	10042	0.0119234352124219	0.0119234352124219
+16556	9939	2889	0.0528287697048915	0.0528287697048915
+18646	5867	7412	0.177003576876814	0.177003576876814
+16623	9957	9958	0.00927766896119108	0.00927766896119108
+17017	10056	10054	0.00431206144532878	0.00431206144532878
+16635	9967	9937	0.0755376260933099	0.0755376260933099
+16636	9937	9968	0.0848568890148885	0.0848568890148885
+17507	8389	10114	0.0670519033214907	0.0670519033214907
+17069	675	9465	0.179146976203574	0.179146976203574
+17040	8988	10063	0.00586346085648923	0.00586346085648923
+18726	6207	7644	0.18227085937915	0.18227085937915
+18724	4060	7415	0.175525264809921	0.175525264809921
+16759	10010	55	0.0502605990705626	0.0502605990705626
+17565	10138	8539	0.0573375717149566	0.0573375717149566
+17283	8717	8746	0.200951019692623	0.200951019692623
+17285	76	3515	0.20373476556842	0.20373476556842
+17286	3515	4257	0.200873634983474	0.200873634983474
+17288	10023	5839	0.200541247802215	0.200541247802215
+18744	6227	5190	0.106449102002429	0.106449102002429
+17655	10140	480	0.0210901662616695	0.0210901662616695
+17657	8540	9827	0.194565529373187	0.194565529373187
+17427	10105	10106	0.0219929458534896	0.0219929458534896
+17857	10200	10197	0.0144828525731025	0.0144828525731025
+18236	7037	3424	0.201298115256081	0.201298115256081
+17786	8497	9214	0.0149001836759509	0.0149001836759509
+18667	5188	2601	0.176856921267491	0.176856921267491
+15257	8538	9547	0.0461864635130014	0.0461864635130014
+15834	9727	4582	0.339362052888466	0.339362052888466
+18239	6764	3988	0.20124356936137	0.20124356936137
+17648	223	227	0.245258634538467	0.245258634538467
+19708	10627	10621	0.090662464616454	0.090662464616454
+17961	10234	10235	0.0087318555012696	0.0087318555012696
+19710	10623	10628	0.0762458230270849	0.0762458230270849
+17727	3328	7879	0.104097845117031	0.104097845117031
+18725	7415	10336	0.0555461867275064	0.0555461867275064
+17748	10172	8285	0.147249823900369	0.147249823900369
+19600	10582	10478	0.00442384590255706	0.00442384590255706
+16294	2409	2439	0.0170153678743566	0.0170153678743566
+18663	2592	5184	0.178895247307371	0.178895247307371
+15835	4582	8370	0.135357878279395	0.135357878279395
+17987	10240	7225	0.133765909115813	0.133765909115813
+18776	10123	3737	0.13151506607382	0.13151506607382
+19243	10420	8480	0.0202782525837911	0.0202782525837911
+18831	10359	10360	0.0341232753962164	0.0341232753962164
+19553	6857	10560	0.00726201622420357	0.00726201622420357
+19940	9641	6649	0.164927985335569	0.164927985335569
+18941	4644	1269	0.146851000824624	0.146851000824624
+19118	10431	8430	0.136066207456442	0.136066207456442
+19278	10421	6707	0.0993066662474356	0.0993066662474356
+15836	8370	5297	0.134414346058358	0.134414346058358
+19047	901	9486	0.27949052314451	0.27949052314451
+19612	10586	10499	0.00658715235564877	0.00658715235564877
+15838	9728	7437	0.0439886907558265	0.0439886907558265
+19065	10422	5495	0.202007910819525	0.202007910819525
+15840	9729	9702	0.0777181684296862	0.0777181684296862
+15841	9702	9730	0.0351380099433058	0.0351380099433058
+19273	10425	10173	0.013664079145809	0.013664079145809
+19160	10429	10050	0.0518274489533285	0.0518274489533285
+20574	10861	10862	0.011368530817607	0.011368530817607
+19554	10560	10548	0.0725121719316359	0.0725121719316359
+19461	10477	10478	0.0230516224965269	0.0230516224965269
+19438	10491	6859	0.0113764020129076	0.0113764020129076
+19277	8487	10421	0.0474605500221532	0.0474605500221532
+19226	8479	10451	0.0120282782230604	0.0120282782230604
+19482	10486	10487	0.00666482250083992	0.00666482250083992
+19412	1903	7239	0.197394669243537	0.197394669243537
+19323	916	5917	0.178370202088171	0.178370202088171
+19329	10473	9894	0.0172442514416892	0.0172442514416892
+19662	10608	10609	0.151226661870126	0.151226661870126
+19357	3170	9949	0.0476976092634506	0.0476976092634506
+19703	10622	10623	0.11468932159706	0.11468932159706
+19379	9194	4397	0.102701543160846	0.102701543160846
+19846	10657	10658	0.207612047714745	0.207612047714745
+19735	10641	10642	0.0869223005082275	0.0869223005082275
+423	422	423	0.0170753331475834	0.0170753331475834
+18892	3649	3275	0.147518961348099	0.147518961348099
+20076	6318	8004	0.0509194903724274	0.0509194903724274
+20104	8546	2065	0.048454988097841	0.048454988097841
+20204	9321	10178	0.0841675532676054	0.0841675532676054
+20205	10178	8401	0.0611444527276629	0.0611444527276629
+259	266	267	0.0502803318432383	0.0502803318432383
+14829	6148	4022	0.133340280271954	0.133340280271954
+20293	10704	10700	0.011586826540776	0.011586826540776
+14835	7029	7396	0.0697085759052968	0.0697085759052968
+20259	10688	6471	0.00765068827927408	0.00765068827927408
+17971	10234	10239	0.0311817416438077	0.0311817416438077
+20294	10700	10709	0.0186270421112036	0.0186270421112036
+14868	8305	8308	0.0233992723150567	0.0233992723150567
+421	420	421	0.0887343803029098	0.0887343803029098
+424	254	424	0.214565868461505	0.214565868461505
+425	424	425	0.179345861037356	0.179345861037356
+18900	10380	10379	0.00404144992313864	0.00404144992313864
+312	320	321	0.234451594909332	0.234451594909332
+14897	6102	8202	0.215105101107824	0.215105101107824
+19648	10603	10600	0.0301818413703728	0.0301818413703728
+176	185	186	0.0998871295042773	0.0998871295042773
+20301	9381	10729	0.0209062182463086	0.0209062182463086
+196	205	208	0.198149371104724	0.198149371104724
+16280	9869	4511	0.0441265369006206	0.0441265369006206
+15850	9734	5596	0.0497405541513423	0.0497405541513423
+19563	7475	10566	0.00626126200522767	0.00626126200522767
+248	255	256	0.148914456277168	0.148914456277168
+14938	8158	7604	0.0947062136756459	0.0947062136756459
+305	313	314	0.0701186694040595	0.0701186694040595
+14691	3129	941	0.177390618833456	0.177390618833456
+371	263	372	0.159425481094297	0.159425481094297
+372	262	373	0.154271040601459	0.154271040601459
+373	374	375	0.0498842542371797	0.0498842542371797
+20302	6466	9378	0.155873782837014	0.155873782837014
+315	323	324	0.151711567725454	0.151711567725454
+554	548	549	0.0392699857827163	0.0392699857827163
+14993	7973	7142	0.0462138706300854	0.0462138706300854
+17218	6114	3199	0.202944002497817	0.202944002497817
+317	325	326	0.0648164274191724	0.0648164274191724
+17027	3490	3584	0.0598495371899439	0.0598495371899439
+652	642	643	0.0146721427737165	0.0146721427737165
+18423	8361	8333	0.20323919891824	0.20323919891824
+15011	9469	459	0.0480419410466021	0.0480419410466021
+15012	459	7107	0.043866666346984	0.043866666346984
+11803	8415	8416	0.145780714117446	0.145780714117446
+18731	8066	10337	0.199884513966678	0.199884513966678
+17082	4467	2789	0.134890565512634	0.134890565512634
+788	793	794	0.093857943582342	0.093857943582342
+15029	7883	3337	0.0968744267307773	0.0968744267307773
+18907	10384	10385	0.0177708173335528	0.0177708173335528
+11693	868	895	0.0109449511220029	0.0109449511220029
+16597	8570	5785	0.145695604703312	0.145695604703312
+17133	4238	3543	0.202299079539728	0.202299079539728
+18439	7914	2971	0.147770970542825	0.147770970542825
+16408	9882	9889	0.0253610023428754	0.0253610023428754
+16601	9952	7558	0.0955122170701592	0.0955122170701592
+15050	6016	979	0.0500664854607423	0.0500664854607423
+16409	9889	9879	0.0208518700779087	0.0208518700779087
+995	753	1009	0.150380388134057	0.150380388134057
+15070	9479	610	0.10571035032404	0.10571035032404
+16411	9459	9889	0.012002862934972	0.012002862934972
+1016	1028	1029	0.0655213058855568	0.0655213058855568
+15964	4362	1443	0.198880292667991	0.198880292667991
+16695	9599	9597	0.0527492023482324	0.0527492023482324
+19585	10576	7471	0.00669407122815783	0.00669407122815783
+1119	1135	1136	0.187278154980764	0.187278154980764
+15144	9498	6689	0.0114561417292809	0.0114561417292809
+15795	2323	2324	0.0158381890637799	0.0158381890637799
+20623	2706	10873	0.00650373799697247	0.00650373799697247
+1164	558	1182	0.0726820398635713	0.0726820398635713
+15984	7372	5328	0.126515384088506	0.126515384088506
+16002	9775	6870	0.0380746194857137	0.0380746194857137
+11807	8419	8395	0.147975384561768	0.147975384561768
+16009	9779	9780	0.0100019925159617	0.0100019925159617
+331	207	332	0.116329690490202	0.116329690490202
+20314	10735	10736	0.00660332250129021	0.00660332250129021
+1412	1265	1438	0.0988256135069692	0.0988256135069692
+15147	9501	1753	0.946728932771196	0.946728932771196
+542	536	537	0.223575651807191	0.223575651807191
+1437	1457	1458	0.00733898986406934	0.00733898986406934
+15845	9731	9732	0.0664836940914448	0.0664836940914448
+15172	9512	9513	0.0495248806719176	0.0495248806719176
+15173	9513	9514	0.0500036838355924	0.0500036838355924
+16841	10021	9876	0.0316463232135525	0.0316463232135525
+12011	7081	2030	0.145136996076302	0.145136996076302
+12961	1633	1631	0.0197483532588124	0.0197483532588124
+16037	9801	9802	0.187730927470077	0.187730927470077
+1680	1705	1706	0.200641448140145	0.200641448140145
+15255	9539	9533	0.0958097111651336	0.0958097111651336
+16278	9869	3639	0.110423900704732	0.110423900704732
+1701	1648	1723	0.062496099688971	0.062496099688971
+16118	8309	427	0.26882010834223	0.26882010834223
+250	257	258	0.156601202821138	0.156601202821138
+1726	1744	1745	1.09817431556355	1.09817431556355
+16141	9831	7016	0.0255913598249866	0.0255913598249866
+16142	7016	7028	0.027160195994677	0.027160195994677
+251	259	260	0.154968238345174	0.154968238345174
+1778	1796	1797	0.0510193327806952	0.0510193327806952
+15256	9533	9546	0.0701631467931239	0.0701631467931239
+4282	4025	4026	0.0836518662560613	0.0836518662560613
+4283	4026	2975	0.0536630317560949	0.0536630317560949
+252	261	262	0.0449524282619667	0.0449524282619667
+17948	10228	8780	0.031808150523084	0.031808150523084
+1803	1816	1817	0.0829077522721667	0.0829077522721667
+4294	2858	4032	0.190837980669502	0.190837980669502
+4296	4033	4034	0.0984313521955559	0.0984313521955559
+4297	4034	4035	0.124316100856361	0.124316100856361
+4299	1488	135	0.200939910778157	0.200939910778157
+4300	135	1703	0.200530915425065	0.200530915425065
+253	262	259	0.0587496721634218	0.0587496721634218
+1830	1846	1847	0.0521892409260155	0.0521892409260155
+4310	4043	1394	0.105949182025439	0.105949182025439
+4311	1394	4044	0.0525758001653233	0.0525758001653233
+4312	4044	4045	0.00275409212275412	0.00275409212275412
+4313	4045	4046	0.048684142933598	0.048684142933598
+4314	4046	4048	0.0522538202962548	0.0522538202962548
+11581	1889	1890	0.200726535096683	0.200726535096683
+254	259	263	0.0633181950748288	0.0633181950748288
+1901	1087	1914	0.0231926567105046	0.0231926567105046
+4323	4055	4056	0.0506868932206778	0.0506868932206778
+4324	4056	4057	0.0525415825536361	0.0525415825536361
+4325	4057	1106	0.049505238452812	0.049505238452812
+4326	1106	4058	0.103487473030962	0.103487473030962
+255	263	264	0.0528764032574804	0.0528764032574804
+1921	1933	1934	0.0492173865000396	0.0492173865000396
+1929	1942	1943	0.119118027307007	0.119118027307007
+4337	4067	4068	0.0478289627129219	0.0478289627129219
+4338	4068	4069	0.0505441496304245	0.0505441496304245
+4339	4069	4070	0.0498130318292156	0.0498130318292156
+4342	4071	4072	0.0561534117303384	0.0561534117303384
+4343	4072	4073	0.0484769480819301	0.0484769480819301
+18384	8960	8961	0.0519015690499355	0.0519015690499355
+544	538	539	0.0154777376492066	0.0154777376492066
+2042	2050	2051	0.199194779708592	0.199194779708592
+12337	8654	8655	0.0104809427005404	0.0104809427005404
+4355	3965	4081	0.411489005127648	0.411489005127648
+4356	4081	4082	0.106344190536588	0.106344190536588
+4358	4083	1074	0.0829286899836406	0.0829286899836406
+4359	1074	2497	0.0840300949352524	0.0840300949352524
+16773	3182	3277	0.192234323904948	0.192234323904948
+2067	2069	2070	0.202510221820354	0.202510221820354
+19432	8707	10110	0.0968673163006813	0.0968673163006813
+4370	4092	4093	0.0521723369054183	0.0521723369054183
+4373	4095	4096	0.0511584997280867	0.0511584997280867
+4374	4096	4097	0.0510055304226098	0.0510055304226098
+14753	6934	5930	0.0358835820845479	0.0358835820845479
+545	539	540	0.260599478311813	0.260599478311813
+2113	2114	2115	0.0866449228578761	0.0866449228578761
+12341	2501	8642	0.0589286767766051	0.0589286767766051
+4383	4104	2729	0.0487767884709024	0.0487767884709024
+4387	748	1566	0.142516569011717	0.142516569011717
+16443	9900	9901	0.201666693845683	0.201666693845683
+546	540	541	0.0326517480806501	0.0326517480806501
+547	541	542	0.0254047336234174	0.0254047336234174
+2158	2156	2157	0.218243127550759	0.218243127550759
+2160	2158	2159	0.0821511858388999	0.0821511858388999
+16173	4250	9840	0.39197341800201	0.39197341800201
+19464	10508	10509	0.0204161788330557	0.0204161788330557
+18178	5791	6050	0.202074681821779	0.202074681821779
+20702	10891	10902	0.0170035110425561	0.0170035110425561
+16216	8620	7903	0.142599898878985	0.142599898878985
+11816	2201	2202	0.15535054028393	0.15535054028393
+17089	9940	8134	0.138649146182337	0.138649146182337
+17090	8134	3689	0.141996254884573	0.141996254884573
+2222	2222	2223	0.0488100805647676	0.0488100805647676
+2223	2223	2224	0.0512642786009998	0.0512642786009998
+14639	2243	2244	0.0354564943031107	0.0354564943031107
+17091	3689	4597	0.241148863142693	0.241148863142693
+2264	2264	2265	0.176035436319457	0.176035436319457
+14641	2244	2272	0.0187003459565438	0.0187003459565438
+16312	2722	2929	0.0126176772334624	0.0126176772334624
+14127	419	417	0.0606641044076811	0.0606641044076811
+2285	2284	2285	0.184338950183701	0.184338950183701
+17024	10059	6431	0.0170040072643452	0.0170040072643452
+20326	10744	10738	0.00650370546328925	0.00650370546328925
+2307	2304	1995	0.0793159537973265	0.0793159537973265
+16363	7010	2769	0.112453696268037	0.112453696268037
+16364	2769	3365	0.103853901930967	0.103853901930967
+20334	2967	10745	0.0137335338280324	0.0137335338280324
+2375	2363	964	0.101155075878388	0.101155075878388
+16463	9886	1081	0.198408324686945	0.198408324686945
+16466	9913	9912	0.00925208668760351	0.00925208668760351
+17365	10091	3085	0.200980490545583	0.200980490545583
+17304	4258	8744	0.201266280518922	0.201266280518922
+2443	2434	2435	0.0498096064689081	0.0498096064689081
+18192	6053	4068	0.142529657997643	0.142529657997643
+16717	5546	10002	2.41636756690016	2.41636756690016
+14694	4875	4946	0.19209064576365	0.19209064576365
+2465	1228	2455	0.0986019921641189	0.0986019921641189
+17232	243	244	0.123936016070967	0.123936016070967
+17233	244	245	0.0423914167747626	0.0423914167747626
+17234	245	30	0.0421885133223055	0.0421885133223055
+17235	30	31	0.0623462807475453	0.0623462807475453
+20321	10740	10741	0.00961494122957245	0.00961494122957245
+20520	10845	10841	0.0515194041185215	0.0515194041185215
+19715	10630	10631	0.0208944523636977	0.0208944523636977
+14699	4164	4773	0.260608636385053	0.260608636385053
+2587	2559	2560	0.109781786773584	0.109781786773584
+18391	7038	3425	0.202488499072253	0.202488499072253
+18395	2554	3861	0.207477450927098	0.207477450927098
+20741	10913	7366	0.0901821833329384	0.0901821833329384
+2613	2576	2373	0.0436228403965834	0.0436228403965834
+19620	10524	10589	0.00570573305761744	0.00570573305761744
+18401	1425	7176	0.174145888646233	0.174145888646233
+20347	10745	10747	0.0185775892434006	0.0185775892434006
+2677	2638	2639	0.294941945704345	0.294941945704345
+19655	10606	10607	0.00514986150833142	0.00514986150833142
+18881	7249	3271	0.203031342103983	0.203031342103983
+20742	7366	10907	0.0328095866921768	0.0328095866921768
+2729	2684	2685	0.0539600310135124	0.0539600310135124
+17508	10114	10116	0.025112430125901	0.025112430125901
+17946	10225	10226	0.00737359034109891	0.00737359034109891
+14688	2393	2798	0.189312144234638	0.189312144234638
+18130	10265	6045	0.200929523136355	0.200929523136355
+2876	2499	2821	0.136005417598284	0.136005417598284
+12974	2797	2822	0.0772628603550689	0.0772628603550689
+19658	9394	8493	0.0491161384071996	0.0491161384071996
+19659	8493	6763	0.145715875084599	0.145715875084599
+14698	5033	4164	0.121872885708228	0.121872885708228
+17172	3092	5304	0.202230215982892	0.202230215982892
+3021	2953	2954	0.00990774005844554	0.00990774005844554
+19694	10618	8145	0.956513774549446	0.956513774549446
+19803	5200	10646	0.12476083696761	0.12476083696761
+14722	4871	6016	0.191389811056615	0.191389811056615
+20794	8908	10948	0.0132755925041989	0.0132755925041989
+19880	10672	2617	0.0529554442967168	0.0529554442967168
+19918	6233	5202	0.175854776488408	0.175854776488408
+18502	9278	9526	0.133752339971597	0.133752339971597
+3064	2995	2996	0.132712872312529	0.132712872312529
+19901	10663	10676	0.0513919786820835	0.0513919786820835
+19973	10306	619	0.00429215823862154	0.00429215823862154
+17075	7842	828	0.141317632530522	0.141317632530522
+17970	10238	10234	0.0188321983270746	0.0188321983270746
+18897	10377	10378	0.0131134839493858	0.0131134839493858
+17180	5449	5450	0.206640976814444	0.206640976814444
+17113	3932	3959	0.0402088808240704	0.0402088808240704
+19990	10684	10682	0.0498254818797545	0.0498254818797545
+18513	9294	10302	0.00151227516682341	0.00151227516682341
+3252	2365	3163	0.175456016528149	0.175456016528149
+19267	10446	8486	0.0130023858176566	0.0130023858176566
+15217	9530	539	0.0270882933911684	0.0270882933911684
+18503	9526	9353	0.135313261796309	0.135313261796309
+18902	10378	10381	0.0118745691698922	0.0118745691698922
+20282	10710	10722	0.0492625817369533	0.0492625817369533
+19437	10490	10491	0.0516785382045006	0.0516785382045006
+16422	3358	3034	0.0480216533576434	0.0480216533576434
+17185	5659	5660	0.024871407903781	0.024871407903781
+18512	10302	9294	0.00151227516682341	0.00151227516682341
+18681	3185	3408	0.173742073092489	0.173742073092489
+15235	9533	9534	0.025845258726166	0.025845258726166
+15243	9534	9535	0.0751513734309232	0.0751513734309232
+14715	5686	5687	0.105315223547906	0.105315223547906
+19826	10647	9253	0.122215184303521	0.122215184303521
+20299	10728	5578	0.0498927645754841	0.0498927645754841
+15281	9557	9556	0.01686832436596	0.01686832436596
+15283	9557	9558	0.0154433036380546	0.0154433036380546
+17312	5705	5706	0.401673875470838	0.401673875470838
+3564	3426	3427	0.0516847701108369	0.0516847701108369
+15400	9579	3315	0.0326402169295471	0.0326402169295471
+15402	9580	9581	0.331383974435327	0.331383974435327
+15403	9582	9583	0.0120173707764648	0.0120173707764648
+18689	1859	5770	0.176521953507317	0.176521953507317
+3659	3496	3497	0.100604510338319	0.100604510338319
+15426	8637	4935	0.0862034738049073	0.0862034738049073
+15429	9597	8608	0.0815311130388188	0.0815311130388188
+14717	933	5818	0.11375652775637	0.11375652775637
+3704	3540	3541	0.0487079158287504	0.0487079158287504
+20304	9382	10728	0.0315682813160642	0.0315682813160642
+15490	9618	8464	0.061043367869745	0.061043367869745
+15492	9627	9626	0.0311123551122936	0.0311123551122936
+17382	5814	2314	0.0781390219671105	0.0781390219671105
+20431	10791	10754	0.00545772790966665	0.00545772790966665
+3935	3733	3734	0.176323868665952	0.176323868665952
+20425	10786	10787	0.0471980291688183	0.0471980291688183
+16275	9868	3657	0.128315234485653	0.128315234485653
+17111	3775	3776	0.0186255054019669	0.0186255054019669
+20436	10794	10795	0.0773551964908624	0.0773551964908624
+4030	3814	3815	0.205898323776278	0.205898323776278
+14114	3768	3623	0.0676593021490157	0.0676593021490157
+20311	10732	10733	0.00871128803713245	0.00871128803713245
+17485	321	4992	0.0357053960194593	0.0357053960194593
+4135	1293	3896	0.0646203690871901	0.0646203690871901
+16181	9842	5547	0.812121023854291	0.812121023854291
+15562	9299	9657	0.183361943567776	0.183361943567776
+15563	9657	3803	0.198879262059456	0.198879262059456
+18244	9371	2433	0.198605382792158	0.198605382792158
+20442	10799	10800	0.0197706815366264	0.0197706815366264
+4153	2788	3908	0.132166336514103	0.132166336514103
+19582	10575	10562	0.0700205995742609	0.0700205995742609
+16266	7738	5831	0.20157737543677	0.20157737543677
+17685	6154	6155	0.459645187119716	0.459645187119716
+4242	3991	3227	0.0177155969329486	0.0177155969329486
+4243	3227	3992	0.0329982706824684	0.0329982706824684
+19465	10509	10510	0.0192818852758557	0.0192818852758557
+20445	10801	10802	0.0205768304881295	0.0205768304881295
+4285	658	1885	0.048605694225596	0.048605694225596
+14724	5469	977	0.135303141818757	0.135303141818757
+4308	4042	3999	0.107188720026654	0.107188720026654
+15626	9687	9688	0.091295408872665	0.091295408872665
+18437	10292	8442	0.00675422790693776	0.00675422790693776
+20447	10794	10803	0.118731077964576	0.118731077964576
+4347	4075	4076	0.0470687599943484	0.0470687599943484
+4349	1002	4077	0.216843974938131	0.216843974938131
+20454	10809	10810	0.100342747602662	0.100342747602662
+4420	4130	4131	0.121697779505431	0.121697779505431
+19593	10478	10580	0.068856662719705	0.068856662719705
+20625	10804	10874	0.0625386897444795	0.0625386897444795
+18253	3979	6754	0.201867515357413	0.201867515357413
+4514	4194	4195	0.10298973821829	0.10298973821829
+15674	9685	9686	0.0593326737516342	0.0593326737516342
+20460	10813	10814	0.0263810628539784	0.0263810628539784
+4540	1339	4214	0.206331927913881	0.206331927913881
+15694	7269	2024	0.188168800569156	0.188168800569156
+19466	10510	10511	0.0234630277187848	0.0234630277187848
+20626	10788	10875	0.12707186988651	0.12707186988651
+14733	6342	4868	0.191023303912105	0.191023303912105
+18638	7383	5180	0.100367385774354	0.100367385774354
+15713	1050	3913	0.111080496528689	0.111080496528689
+18173	6048	6420	0.20192046475531	0.20192046475531
+4662	1707	4301	0.203353286347824	0.203353286347824
+15737	3771	8867	0.1545281811215	0.1545281811215
+18694	6025	5978	0.00688297127309608	0.00688297127309608
+18468	10298	9138	0.0199498887128462	0.0199498887128462
+17131	4372	1799	0.197593407061799	0.197593407061799
+15759	3487	5346	0.100946337054167	0.100946337054167
+20632	8227	6090	0.135158757751447	0.135158757751447
+18263	6067	6514	0.193791754137247	0.193791754137247
+4805	4410	4411	0.102107994490615	0.102107994490615
+19823	9252	7641	0.177252004679102	0.177252004679102
+15778	9119	9707	0.0214606208419429	0.0214606208419429
+15780	9707	9703	0.181325566879256	0.181325566879256
+14737	4770	6526	0.178169149120729	0.178169149120729
+4824	534	475	0.0459278377034575	0.0459278377034575
+15830	7134	9724	0.00382519149625338	0.00382519149625338
+434	433	364	0.11596793090747	0.11596793090747
+17139	4488	3200	0.20282742100359	0.20282742100359
+20710	7365	10885	0.00202939174918317	0.00202939174918317
+20738	10886	10887	0.038658244493302	0.038658244493302
+4921	4492	4493	0.0619945774719425	0.0619945774719425
+18268	2438	5736	0.170878783790289	0.170878783790289
+4947	3640	4511	0.128546240241841	0.128546240241841
+2413	2403	2404	0.136554071110129	0.136554071110129
+11806	8418	8419	0.144478674207108	0.144478674207108
+470	473	474	0.189801845816516	0.189801845816516
+14741	3802	5935	0.15521301123556	0.15521301123556
+4998	4544	4545	0.135440573029242	0.135440573029242
+2670	2628	2629	0.199951181775354	0.199951181775354
+18532	10307	7540	0.709454997862857	0.709454997862857
+5075	4599	1025	0.0544629152641776	0.0544629152641776
+17143	4616	4617	0.200408905820063	0.200408905820063
+20669	10890	10891	0.0251214927041886	0.0251214927041886
+14743	931	2216	0.184594913416957	0.184594913416957
+5094	4615	4618	0.110635552941058	0.110635552941058
+19633	10594	10505	0.00660487490366482	0.00660487490366482
+20709	10913	7365	0.234512277592806	0.234512277592806
+20713	5881	10915	0.0114767201911695	0.0114767201911695
+18275	6667	1427	0.0124761175920816	0.0124761175920816
+18575	10323	10324	0.133190640971179	0.133190640971179
+19540	10553	10554	0.069921649249612	0.069921649249612
+19541	10554	7472	0.00672748885261455	0.00672748885261455
+19542	7472	10555	0.00636055689076091	0.00636055689076091
+20479	10827	10828	0.0321786032396296	0.0321786032396296
+5172	3232	4672	0.135963226577445	0.135963226577445
+17294	8754	10015	0.202671913712405	0.202671913712405
+23	24	25	0.131395177842502	0.131395177842502
+24	25	26	0.132981987743145	0.132981987743145
+18535	5555	10308	0.537923452261619	0.537923452261619
+5196	4693	4694	0.101324047402986	0.101324047402986
+17084	505	4047	0.193244409170512	0.193244409170512
+20013	7896	8858	0.144841565186615	0.144841565186615
+18281	6757	6460	0.11412288805936	0.11412288805936
+5239	4723	4724	0.173697663092072	0.173697663092072
+57	61	62	0.0954500024095661	0.0954500024095661
+18609	5208	6228	0.175202487961463	0.175202487961463
+18543	10313	5554	0.549870500653692	0.549870500653692
+5310	4766	3155	0.0172249530452766	0.0172249530452766
+78	84	85	0.0505639086324271	0.0505639086324271
+19778	10632	5380	0.0979518829901303	0.0979518829901303
+20481	10792	10829	0.0269599370404467	0.0269599370404467
+5457	4876	4877	0.0499120224253174	0.0499120224253174
+96	101	102	0.0321305027576107	0.0321305027576107
+97	102	103	0.0620448910426151	0.0620448910426151
+18782	10348	10344	0.0162360672802701	0.0162360672802701
+5478	4135	4890	0.0934025271750886	0.0934025271750886
+121	128	129	0.177008602394702	0.177008602394702
+244	251	252	0.175978023607631	0.175978023607631
+18294	6901	1428	0.00619376962359973	0.00619376962359973
+5500	4907	4908	0.100175479072509	0.100175479072509
+140	148	149	0.0975727004199176	0.0975727004199176
+393	395	396	0.169106051700542	0.169106051700542
+18784	10348	10349	0.00525970147109288	0.00525970147109288
+5522	4924	4677	0.103650586835971	0.103650586835971
+18546	7539	10314	0.65633531431652	0.65633531431652
+18297	6968	6995	0.202610377838011	0.202610377838011
+5676	3669	5032	0.215322761034264	0.215322761034264
+173	182	183	0.0984047094047537	0.0984047094047537
+174	183	184	0.100655002347226	0.100655002347226
+16515	5454	5455	0.104997960992542	0.104997960992542
+20485	10832	10763	0.0351600114003883	0.0351600114003883
+5779	2576	4917	0.032816005995912	0.032816005995912
+192	202	203	0.199740801936021	0.199740801936021
+193	203	169	0.402428218597258	0.402428218597258
+14755	5931	927	0.177893389603082	0.177893389603082
+5803	5121	5122	0.103540820168727	0.103540820168727
+225	49	236	0.00807621055546913	0.00807621055546913
+18672	1538	1539	0.106836085520251	0.106836085520251
+14756	927	2212	0.186014347432929	0.186014347432929
+5852	1967	4622	0.105142035615429	0.105142035615429
+282	292	293	0.038589084717098	0.038589084717098
+283	293	294	0.0763501630731075	0.0763501630731075
+285	295	296	0.17581051150028	0.17581051150028
+14758	4862	7101	0.190667289560019	0.190667289560019
+5875	4334	5174	0.0464101693595893	0.0464101693595893
+350	351	352	0.0901523030384508	0.0901523030384508
+353	355	356	0.108591561133878	0.108591561133878
+369	370	371	0.00989155289209397	0.00989155289209397
+18304	7116	6758	0.139614208847036	0.139614208847036
+517	511	512	0.231881303387922	0.231881303387922
+518	512	513	0.0504031171767775	0.0504031171767775
+12256	8620	8618	0.1042966231246	0.1042966231246
+6051	5293	5294	0.1322760806231	0.1322760806231
+18305	6758	3982	0.20021257935936	0.20021257935936
+574	248	567	0.654270176053915	0.654270176053915
+575	264	568	0.0404038185731676	0.0404038185731676
+19637	10596	10597	0.0126826750829723	0.0126826750829723
+20403	10761	10778	0.00417068578422797	0.00417068578422797
+6437	2444	5569	0.02055703905507	0.02055703905507
+614	605	606	0.0427456634033912	0.0427456634033912
+11697	1006	1032	0.0356944242966225	0.0356944242966225
+18485	7779	9146	0.0491523501803915	0.0491523501803915
+19922	7869	3723	0.102610678307364	0.102610678307364
+20528	10783	10029	0.0108754318867703	0.0108754318867703
+6839	2922	5305	0.104995892978265	0.104995892978265
+634	544	624	0.0671323040254876	0.0671323040254876
+635	624	625	0.00434381837571047	0.00434381837571047
+20428	10788	10789	0.0563042197472527	0.0563042197472527
+18340	7633	7634	0.201343863199868	0.201343863199868
+20531	2704	10847	0.00595682994262844	0.00595682994262844
+18337	7624	2435	0.20163475178063	0.20163475178063
+655	645	646	0.15124021105117	0.15124021105117
+11518	656	657	0.200075413530476	0.200075413530476
+18341	7634	7661	0.00671626059696149	0.00671626059696149
+18342	7661	7662	0.197150609042501	0.197150609042501
+6951	5687	5936	0.0500693590985736	0.0500693590985736
+6952	5936	5453	0.049749026364738	0.049749026364738
+18121	10257	2538	0.176222237628552	0.176222237628552
+18344	5247	6874	0.0949718672307841	0.0949718672307841
+20408	10778	8971	0.00240570116723256	0.00240570116723256
+7025	5987	5146	0.0839973170950687	0.0839973170950687
+687	680	681	0.00253308666004397	0.00253308666004397
+688	681	682	0.0177686502456197	0.0177686502456197
+20536	10790	10850	0.034182335159618	0.034182335159618
+18351	6756	3981	0.199906908242653	0.199906908242653
+7046	5996	5997	0.0183612294578931	0.0183612294578931
+7047	5997	5998	0.0939822022965603	0.0939822022965603
+16701	9996	9997	0.0529811614609842	0.0529811614609842
+20223	10711	10712	0.0485921897229188	0.0485921897229188
+7066	4209	6007	0.100592936440223	0.100592936440223
+719	715	716	0.14011322934495	0.14011322934495
+18164	6036	4091	0.184872985391224	0.184872985391224
+18360	7775	7374	0.049527285222362	0.049527285222362
+7242	1086	6117	0.0183572728116315	0.0183572728116315
+20444	10797	10801	0.0204844414155983	0.0204844414155983
+14778	5928	925	0.176931188736704	0.176931188736704
+7325	6163	6164	0.404282808510336	0.404282808510336
+757	756	757	0.0403523543057396	0.0403523543057396
+758	758	759	0.10406364243601	0.10406364243601
+20552	10810	10855	0.0274674933149076	0.0274674933149076
+7375	340	337	0.0516827997381363	0.0516827997381363
+778	783	784	0.143355100800641	0.143355100800641
+18365	1660	7716	0.0501099513590678	0.0501099513590678
+7418	5550	6228	0.0493634763375772	0.0493634763375772
+798	803	806	1.01502432527974	1.01502432527974
+20237	10712	8819	0.0494540965066323	0.0494540965066323
+7441	1600	1601	0.0713701116113288	0.0713701116113288
+814	825	826	0.10637782371988	0.10637782371988
+815	826	827	0.107195537700229	0.107195537700229
+20239	10716	10717	0.029516495512001	0.029516495512001
+7466	2930	5311	0.101596891275597	0.101596891275597
+836	849	850	0.0925483728292225	0.0925483728292225
+837	850	851	0.184151560988971	0.184151560988971
+20241	8817	10717	0.0237033604501814	0.0237033604501814
+7541	6292	65	0.186329349943054	0.186329349943054
+857	870	871	0.202831473953724	0.202831473953724
+14121	4084	3945	0.0818484712615532	0.0818484712615532
+18787	10347	10345	0.045081440573134	0.045081440573134
+7826	2505	6454	0.100016861256994	0.100016861256994
+876	889	890	0.105571186658179	0.105571186658179
+877	890	891	0.105688383652669	0.105688383652669
+11418	8067	8068	0.0483239948134963	0.0483239948134963
+7848	6464	6465	0.0519215197465546	0.0519215197465546
+894	908	909	0.110040792413973	0.110040792413973
+896	910	911	0.148938852784508	0.148938852784508
+11420	8068	8077	0.744996900508782	0.744996900508782
+7872	6484	6485	0.109350713693358	0.109350713693358
+914	928	929	0.0454506765778274	0.0454506765778274
+15223	8102	5299	0.0276921695746079	0.0276921695746079
+16761	10006	10010	0.188081556068426	0.188081556068426
+20354	9336	10730	0.00773852906846938	0.00773852906846938
+7965	6543	6544	0.0483732045653669	0.0483732045653669
+954	966	967	0.0990431305437434	0.0990431305437434
+19650	10601	10604	0.0245600833310456	0.0245600833310456
+18271	6463	6629	0.159535181156963	0.159535181156963
+20358	10736	9208	0.00987870578899212	0.00987870578899212
+11333	3953	8218	0.0887906096153549	0.0887906096153549
+976	987	988	0.0367128135573791	0.0367128135573791
+18911	10389	10390	0.0499832893351177	0.0499832893351177
+8132	6646	6647	0.176189320777164	0.176189320777164
+20359	9208	8992	0.00952006614931064	0.00952006614931064
+18533	7540	5565	0.0799101067174197	0.0799101067174197
+15227	8248	1474	0.0211145699437457	0.0211145699437457
+11427	8252	8251	0.0497577863871374	0.0497577863871374
+8228	5488	6699	0.203871251538877	0.203871251538877
+1013	1025	1026	0.240326237485559	0.240326237485559
+1014	1026	1027	0.140197604091005	0.140197604091005
+11524	8299	6771	0.0679188084680006	0.0679188084680006
+8280	6724	1837	0.0673898837011532	0.0673898837011532
+16769	3180	3279	0.131366088579917	0.131366088579917
+11560	7714	8320	0.204692599225755	0.204692599225755
+18785	10349	3941	0.0399279993421446	0.0399279993421446
+1055	1071	1072	0.193562714729093	0.193562714729093
+18374	2425	6794	0.0832162654729584	0.0832162654729584
+8378	6787	5475	0.176557126416642	0.176557126416642
+1079	1095	1096	0.106445830238736	0.106445830238736
+1081	1097	1098	0.0486277340974482	0.0486277340974482
+18378	2549	8381	0.409599255943821	0.409599255943821
+8425	4370	2496	0.102227972652095	0.102227972652095
+1101	1117	1118	0.104134759343337	0.104134759343337
+19670	9361	9367	0.104968988119014	0.104968988119014
+11768	8406	8391	0.072368398733761	0.072368398733761
+11405	6191	577	0.346853696348124	0.346853696348124
+11711	2125	2126	0.0693722119224359	0.0693722119224359
+1121	1137	1138	0.209246619241212	0.209246619241212
+11896	1345	8466	0.0539854948645785	0.0539854948645785
+8519	3823	6870	0.0122276886226055	0.0122276886226055
+1142	1161	1045	0.106182749069371	0.106182749069371
+1143	1045	1162	0.0572035723632033	0.0572035723632033
+11949	8497	8498	0.0157235898061176	0.0157235898061176
+8563	6893	6894	0.0563604312984052	0.0563604312984052
+1161	1180	1181	0.108807320753836	0.108807320753836
+1162	1181	555	0.0264412731929892	0.0264412731929892
+11990	6574	4455	0.147936408791814	0.147936408791814
+8587	6905	6906	0.00825706398143248	0.00825706398143248
+1181	1196	1197	0.0308045840002764	0.0308045840002764
+16676	9978	9979	0.0911222888155273	0.0911222888155273
+12046	8525	8526	0.0214801658544325	0.0214801658544325
+8609	4639	1260	0.0990232299326886	0.0990232299326886
+20366	10746	10748	0.00389959559054649	0.00389959559054649
+8754	6984	6985	0.142274771709776	0.142274771709776
+15273	8632	8698	0.0321488809830426	0.0321488809830426
+12327	8651	8462	0.0863896937468126	0.0863896937468126
+8825	7022	7023	0.132397309217195	0.132397309217195
+15906	8604	1831	0.0312706435771371	0.0312706435771371
+8982	704	420	0.200616718436647	0.200616718436647
+1261	1282	24	0.134590345997008	0.134590345997008
+18452	7704	9427	0.203142152499049	0.203142152499049
+12940	8766	1971	0.0880952038111177	0.0880952038111177
+12050	8529	8530	0.0322062217802774	0.0322062217802774
+1281	1306	1307	0.102064457561207	0.102064457561207
+12052	8529	8412	0.0524928623134227	0.0524928623134227
+20805	10934	7427	0.00626540347624637	0.00626540347624637
+9106	7163	7164	0.0532969377049032	0.0532969377049032
+1301	1326	1327	0.0908036524111016	0.0908036524111016
+1302	1327	1328	0.187321516717609	0.187321516717609
+20389	10773	10765	0.00486729953892219	0.00486729953892219
+20812	7034	10952	0.00504516380305115	0.00504516380305115
+12945	8883	8884	0.0693524767029838	0.0693524767029838
+9177	1813	7200	0.0899820045120437	0.0899820045120437
+12258	8619	8617	0.025123815719297	0.025123815719297
+9178	132	7201	0.0532452299195118	0.0532452299195118
+13064	8946	8947	0.0850173355126965	0.0850173355126965
+9301	7274	6989	0.145898107890786	0.145898107890786
+1340	1368	1369	0.19896343011117	0.19896343011117
+20815	7168	10919	0.00784309361436635	0.00784309361436635
+9323	7286	7287	0.0531798537803958	0.0531798537803958
+18312	7244	7291	0.112193704343122	0.112193704343122
+20817	10953	10288	0.00348743524444471	0.00348743524444471
+20818	10288	10921	0.00283999263123215	0.00283999263123215
+9345	7305	6323	0.0511693918815177	0.0511693918815177
+20831	10939	10947	0.189387199061175	0.189387199061175
+20504	10061	10815	0.00579629159172248	0.00579629159172248
+12268	8625	8626	0.00924470302738606	0.00924470302738606
+18317	7365	7366	0.190091232151663	0.190091232151663
+18915	10393	10394	0.0257178211457629	0.0257178211457629
+9548	5843	7400	0.197969196756037	0.197969196756037
+1402	1428	1429	0.0514192906451236	0.0514192906451236
+19551	10559	10558	0.0350073244923259	0.0350073244923259
+20372	10756	10757	0.119877702556756	0.119877702556756
+18474	9006	9005	0.01365486811001	0.01365486811001
+9618	6255	7423	0.201105238361345	0.201105238361345
+1423	1446	1447	0.102065186535373	0.102065186535373
+12355	8667	8662	0.00824054620763183	0.00824054620763183
+13473	9096	9097	0.0791788196488147	0.0791788196488147
+13558	9033	9033	0.000550802138422688	0.000550802138422688
+9720	5436	7485	0.210597915191446	0.210597915191446
+1445	1465	778	0.201931327083159	0.201931327083159
+16745	10007	6830	0.0463356709963923	0.0463356709963923
+18484	9139	9145	0.0170083591694009	0.0170083591694009
+18486	9146	1121	0.0502889247784144	0.0502889247784144
+13588	9137	9132	0.0916872062208973	0.0916872062208973
+18564	10320	10321	0.148893183386122	0.148893183386122
+1470	1490	1454	0.0984270848036789	0.0984270848036789
+11793	8412	1301	0.0102820603565046	0.0102820603565046
+13649	9157	9158	0.11057157733623	0.11057157733623
+9923	7595	5945	0.197471792675123	0.197471792675123
+1492	1512	1513	0.240760864140441	0.240760864140441
+1493	1513	1514	0.0903356876724302	0.0903356876724302
+18489	9154	9164	0.0526957444463644	0.0526957444463644
+9949	7606	7607	0.0349507847949759	0.0349507847949759
+1512	1531	1532	0.421840818868262	0.421840818868262
+1514	1533	1534	0.0990053945754622	0.0990053945754622
+18920	10391	10399	0.0111591670236662	0.0111591670236662
+10025	6642	3954	0.137704462550789	0.137704462550789
+1533	1556	1557	0.0904418216599082	0.0904418216599082
+1535	1558	1559	0.0987505899129773	0.0987505899129773
+19486	10409	10426	0.0202821728904968	0.0202821728904968
+10050	7651	7652	0.0462326431468639	0.0462326431468639
+1552	1577	1578	0.0904564264247089	0.0904564264247089
+1554	1579	1580	0.0903173650147356	0.0903173650147356
+18611	2585	1850	0.178619647699559	0.178619647699559
+19139	479	10436	0.0608772998887891	0.0608772998887891
+10147	7693	7694	0.00731957097451548	0.00731957097451548
+1571	1598	1600	0.0527554061663716	0.0527554061663716
+18460	6389	9354	0.131365686337894	0.131365686337894
+13942	9095	9242	0.111189675764469	0.111189675764469
+10218	6638	5410	0.0525082825873588	0.0525082825873588
+11529	809	810	0.133518358438394	0.133518358438394
+16258	9267	3529	0.187765741537081	0.187765741537081
+10288	7759	7760	0.0990614933501691	0.0990614933501691
+1610	1640	1641	0.0829769157452624	0.0829769157452624
+1611	1641	1642	0.0110107206173314	0.0110107206173314
+14142	478	9286	0.110440686979957	0.110440686979957
+10359	6835	4056	0.176947127899101	0.176947127899101
+10360	4056	7791	0.153314942388554	0.153314942388554
+16039	9796	9803	0.17034831343451	0.17034831343451
+20229	8818	8827	0.0165504595782256	0.0165504595782256
+15466	9616	9605	0.0511543414269977	0.0511543414269977
+10664	7914	2973	0.0665734173113744	0.0665734173113744
+1646	1673	1674	0.136622102626379	0.136622102626379
+1647	1674	1675	0.135851990536989	0.135851990536989
+15467	9605	7963	0.0172079120084978	0.0172079120084978
+1668	1693	1694	0.101380870701686	0.101380870701686
+11218	3630	8166	0.0456744230751041	0.0456744230751041
+15788	9639	9625	0.0212057259943503	0.0212057259943503
+11369	8219	7971	0.0335395055556045	0.0335395055556045
+16195	7725	5820	0.195527635044049	0.195527635044049
+16196	5820	7207	0.20506620423787	0.20506620423787
+11659	7036	3421	0.201375612760589	0.201375612760589
+11773	2681	5358	0.147201059924865	0.147201059924865
+17216	8420	1908	0.199697066538748	0.199697066538748
+16157	9835	9836	0.024879986991164	0.024879986991164
+18699	1320	1376	0.177502821070015	0.177502821070015
+12115	8553	8554	0.175311002200187	0.175311002200187
+19503	10530	10531	0.0385295444601748	0.0385295444601748
+16538	9932	9933	0.139509514048293	0.139509514048293
+1717	1736	1737	0.0422973816408655	0.0422973816408655
+17220	3087	9830	0.198791677003679	0.198791677003679
+12205	8587	7095	0.0103763001462627	0.0103763001462627
+1748	1765	1768	0.20159496635188	0.20159496635188
+12332	8654	8655	0.0104809427005404	0.0104809427005404
+19506	10533	7232	0.00927443019901883	0.00927443019901883
+12444	8704	8705	0.0186821732215156	0.0186821732215156
+1767	1785	1786	0.049264963521636	0.049264963521636
+16454	9909	9910	0.124306713488191	0.124306713488191
+12491	8717	8718	0.055230353030641	0.055230353030641
+12493	8719	8720	0.118556931073074	0.118556931073074
+16535	4328	8117	0.102336137979151	0.102336137979151
+1810	1826	1827	0.198453556780362	0.198453556780362
+18642	7416	4062	0.177070510498962	0.177070510498962
+12605	384	4685	0.0512286127934627	0.0512286127934627
+1838	1854	1855	0.0513002538457751	0.0513002538457751
+1839	1855	1856	0.0505552484656801	0.0505552484656801
+16789	8649	10013	0.223567773525098	0.223567773525098
+12632	2360	3710	0.110712951608372	0.110712951608372
+1858	1870	1871	0.100377935012122	0.100377935012122
+17014	10053	10054	0.0101091220768254	0.0101091220768254
+12810	8258	8846	0.197578956532281	0.197578956532281
+12812	8846	6028	0.064250785290107	0.064250785290107
+12814	8847	8848	0.169735694825716	0.169735694825716
+12816	8848	297	0.081779930762806	0.081779930762806
+16613	9942	2685	0.29520243699611	0.29520243699611
+12926	8892	8893	0.0723033727126927	0.0723033727126927
+13020	8924	8925	0.0102645296363106	0.0102645296363106
+13048	8934	8935	0.109609070074496	0.109609070074496
+14679	9301	445	0.205255827063182	0.205255827063182
+17965	10232	10237	0.0287772787854116	0.0287772787854116
+18916	10395	10396	0.0665707610088623	0.0665707610088623
+17673	8930	8847	0.0672232407607821	0.0672232407607821
+19611	10510	10586	0.0687878070750461	0.0687878070750461
+1895	1909	1910	0.0533681732492523	0.0533681732492523
+18738	1858	7870	0.177701929540755	0.177701929540755
+18722	1312	9772	0.242272496904356	0.242272496904356
+13294	4282	4326	0.048552671008238	0.048552671008238
+1916	1928	1929	0.105818779358726	0.105818779358726
+18739	7870	4057	0.175799763463846	0.175799763463846
+18654	6221	7655	0.275174189153955	0.275174189153955
+1942	1956	1957	0.0270768788779568	0.0270768788779568
+13392	311	9059	0.0124055357740245	0.0124055357740245
+18659	7643	6205	0.176055293755678	0.176055293755678
+13405	8942	9061	0.112337222040467	0.112337222040467
+19275	10446	10424	0.0353155595120025	0.0353155595120025
+1960	1977	1978	0.0139641936224905	0.0139641936224905
+13485	9102	308	0.0118340647108347	0.0118340647108347
+20374	10758	3588	0.00620515380678302	0.00620515380678302
+18262	2547	6067	0.202075066970098	0.202075066970098
+13520	9073	117	0.110830423506594	0.110830423506594
+13529	5647	9088	0.177768687230353	0.177768687230353
+19599	1871	10582	0.0185256932684462	0.0185256932684462
+13548	447	2999	0.0894668373271695	0.0894668373271695
+13553	9126	579	0.319404247396224	0.319404247396224
+18657	7657	10331	0.158775443026926	0.158775443026926
+13716	6715	4211	0.0895901111539728	0.0895901111539728
+2012	2021	2022	0.202353267688237	0.202353267688237
+18846	10364	10366	0.0360011605118072	0.0360011605118072
+13805	9197	6639	0.199762828560815	0.199762828560815
+18572	10317	10318	0.0818849597364774	0.0818849597364774
+2037	2046	2047	0.202843850092204	0.202843850092204
+2038	2047	2048	0.202089258953368	0.202089258953368
+19239	8480	10459	0.145581432505511	0.145581432505511
+13871	2282	3603	0.0995034643784278	0.0995034643784278
+2058	746	1564	0.142548749521321	0.142548749521321
+12345	8661	8662	0.0184782413605156	0.0184782413605156
+13933	9117	9237	0.0487812750222334	0.0487812750222334
+13946	9243	9109	0.0432001724914345	0.0432001724914345
+20415	10773	10767	0.0164543942872072	0.0164543942872072
+15289	7065	9559	0.00979064512162057	0.00979064512162057
+15406	9582	9586	0.261696459707034	0.261696459707034
+14374	512	3439	0.0820413167433817	0.0820413167433817
+15291	9560	9561	0.0474312472960203	0.0474312472960203
+20033	3666	9939	0.222490979962601	0.222490979962601
+14436	9351	6743	0.133828356760244	0.133828356760244
+2083	2084	2085	0.132628008561016	0.132628008561016
+20269	10721	10704	0.0408769490843711	0.0408769490843711
+20257	7553	10687	0.047722995184739	0.047722995184739
+14596	9395	7373	0.0500503806511319	0.0500503806511319
+2107	1822	2109	0.0984259671843471	0.0984259671843471
+18860	10369	10362	0.0840816587742034	0.0840816587742034
+20253	10719	5572	0.00788824170654016	0.00788824170654016
+16690	9989	9990	0.0859897279747206	0.0859897279747206
+2125	1981	1966	0.0405441466490896	0.0405441466490896
+16692	8314	8651	0.0716207548906764	0.0716207548906764
+16847	3130	9896	0.0388183147420438	0.0388183147420438
+12343	8658	8659	0.0326641917954917	0.0326641917954917
+16277	4438	9869	0.0429816129844846	0.0429816129844846
+2254	2256	2257	0.179026041725141	0.179026041725141
+18714	6214	7650	0.274890248386652	0.274890248386652
+2282	2281	2282	0.208433952181449	0.208433952181449
+18413	7163	7445	0.101226183618457	0.101226183618457
+2309	1585	1646	0.0852956059582778	0.0852956059582778
+17366	3085	3197	0.201028238760753	0.201028238760753
+16424	3406	3407	0.0260120249027955	0.0260120249027955
+487	487	488	0.0915902876023465	0.0915902876023465
+2504	2153	2485	0.135805715389887	0.135805715389887
+15259	9549	9550	0.0733424963845631	0.0733424963845631
+17078	8074	9872	0.138360291064547	0.138360291064547
+604	595	596	0.135530584935403	0.135530584935403
+2561	2534	2535	0.131236307359374	0.131236307359374
+11701	1064	1065	0.0735266946881119	0.0735266946881119
+11702	1065	1066	0.144526540080904	0.144526540080904
+2641	1094	1110	0.0327560682713917	0.0327560682713917
+12965	1823	1824	0.115786401746133	0.115786401746133
+2716	2671	2672	0.137037719250731	0.137037719250731
+16268	9866	8748	0.200740333998757	0.200740333998757
+2739	2694	2695	0.0520216844496084	0.0520216844496084
+18678	2801	2589	0.177457369167133	0.177457369167133
+11691	837	867	0.00774513207370433	0.00774513207370433
+11692	867	868	0.00951825440201693	0.00951825440201693
+2894	2838	2839	0.0194790124967281	0.0194790124967281
+16704	9998	9999	0.0072772776659045	0.0072772776659045
+16598	5785	8280	0.146209128325821	0.146209128325821
+2965	1143	2908	0.0621246078682317	0.0621246078682317
+16603	7894	9953	0.113998968091224	0.113998968091224
+3043	2974	2975	0.149630303255577	0.149630303255577
+18440	2971	10293	0.0852727734364054	0.0852727734364054
+3066	2997	2998	0.0208518874255557	0.0208518874255557
+18441	10293	8299	0.0364176386342536	0.0364176386342536
+3086	3018	3019	0.14545556926134	0.14545556926134
+18443	7498	10290	0.0505394400731725	0.0505394400731725
+3112	3044	3045	0.100624292928738	0.100624292928738
+18471	2985	7703	0.198649870528673	0.198649870528673
+16707	9623	9998	0.0621574034637008	0.0621574034637008
+3136	3062	2284	0.0981125078289405	0.0981125078289405
+19669	10610	9361	0.0491952199145155	0.0491952199145155
+3158	3082	3083	0.0983700193882712	0.0983700193882712
+11703	1066	1158	0.148869854474817	0.148869854474817
+3181	3101	3102	0.0962927982103224	0.0962927982103224
+18133	4095	6040	0.192431028537818	0.192431028537818
+18446	10289	7781	0.0503825451517732	0.0503825451517732
+3230	3144	3145	0.203548069983679	0.203548069983679
+18448	9292	9527	0.134072690600401	0.134072690600401
+11705	1159	1244	0.147081474347396	0.147081474347396
+3281	3193	3194	0.106476946636896	0.106476946636896
+16416	3034	3130	0.0869691229324941	0.0869691229324941
+3302	3210	3211	0.0503243467464606	0.0503243467464606
+18899	10379	10380	0.00404144992313864	0.00404144992313864
+11709	1301	1302	0.0358989065327031	0.0358989065327031
+3325	3227	3228	0.131949141660574	0.131949141660574
+12952	1330	1361	0.0263074187615997	0.0263074187615997
+3400	3297	3298	0.0238019064284447	0.0238019064284447
+3489	1140	907	0.140863651036277	0.140863651036277
+16744	7566	10007	0.0424762897679241	0.0424762897679241
+18732	9833	7646	0.178089933314901	0.178089933314901
+3516	3387	3388	0.0211650011658898	0.0211650011658898
+12955	1478	1507	0.126108135430878	0.126108135430878
+3561	3424	3425	0.0612760168169184	0.0612760168169184
+16837	10019	9847	0.0370069651425935	0.0370069651425935
+3583	3438	1421	0.115878563365398	0.115878563365398
+12960	1632	1633	0.128348569926215	0.128348569926215
+3684	3520	3521	0.0506146313810284	0.0506146313810284
+18464	10298	9139	0.0193791784570559	0.0193791784570559
+3734	1037	3568	0.052776292073227	0.052776292073227
+19333	2826	10473	0.01148052310696	0.01148052310696
+18465	9139	541	0.0794672162259436	0.0794672162259436
+3755	3585	3586	0.0186262558199583	0.0186262558199583
+17071	4599	3687	0.240616539690475	0.240616539690475
+3805	3624	3250	0.195616461429944	0.195616461429944
+11577	1766	1595	0.0489656343684566	0.0489656343684566
+3825	3641	3642	0.0193156490955763	0.0193156490955763
+17299	5829	8716	0.20447937601548	0.20447937601548
+3847	3658	3639	0.0475522464454704	0.0475522464454704
+18869	10144	10372	0.0637708443692985	0.0637708443692985
+16541	812	3553	0.152482276035164	0.152482276035164
+20222	7195	10711	0.0935594253631277	0.0935594253631277
+19431	10003	8707	0.100281643377189	0.100281643377189
+3891	3519	3695	0.200167523328644	0.200167523328644
+16751	6829	10008	0.0961527504424716	0.0961527504424716
+3916	3713	3714	0.1010804805974	0.1010804805974
+15272	8538	8632	0.0716756500086966	0.0716756500086966
+3938	3736	3737	0.112607595972795	0.112607595972795
+18125	4097	6042	0.191481087124581	0.191481087124581
+19576	10572	7461	0.00811745051204977	0.00811745051204977
+12969	1970	1971	0.103498330022734	0.103498330022734
+4039	3819	3820	0.147623529549067	0.147623529549067
+18745	5190	2608	0.176866790100876	0.176866790100876
+4127	3890	3891	0.179468370845182	0.179468370845182
+12335	8652	8653	0.0109021010822668	0.0109021010822668
+4149	3906	1161	0.136761513456038	0.136761513456038
+17950	6559	10229	0.0124761805379247	0.0124761805379247
+4173	1891	706	0.0588353275400914	0.0588353275400914
+14115	3623	3925	0.0987645160792797	0.0987645160792797
+16843	10020	10021	0.00337377443816097	0.00337377443816097
+4194	3942	3943	0.176445012103913	0.176445012103913
+18245	2433	9358	0.201879495148218	0.201879495148218
+18189	6055	5795	0.200795798534704	0.200795798534704
+4450	3345	4152	0.10312101394972	0.10312101394972
+18872	9232	7825	0.160805002055775	0.160805002055775
+4529	4204	4205	0.278098742346476	0.278098742346476
+18399	2541	10285	0.412599954612644	0.412599954612644
+4637	4281	913	0.111497113872301	0.111497113872301
+16900	4255	3513	0.200996147699506	0.200996147699506
+15919	9746	7414	0.0221971015175522	0.0221971015175522
+4682	4322	4323	0.0558862625971893	0.0558862625971893
+16298	2636	2637	0.0033759355903552	0.0033759355903552
+18879	6125	1927	0.199518260048308	0.199518260048308
+4761	1489	145	0.199750566224671	0.199750566224671
+18696	4055	6400	0.176933507030136	0.176933507030136
+16300	2637	2160	0.00247295077408309	0.00247295077408309
+4832	1268	4428	0.206285087175769	0.206285087175769
+18888	7247	1923	0.201674729042946	0.201674729042946
+4997	4543	4544	0.132688906239847	0.132688906239847
+16650	9968	9969	0.0122299544992289	0.0122299544992289
+13009	2891	2892	0.172319187220424	0.172319187220424
+5024	4562	4563	0.200718931282707	0.200718931282707
+16315	3005	1362	0.00318470714397005	0.00318470714397005
+5188	4685	4686	0.177776490265982	0.177776490265982
+17297	10086	7736	0.198049290500642	0.198049290500642
+20272	10721	10703	0.0411977345042915	0.0411977345042915
+5368	3223	4808	0.133968729582188	0.133968729582188
+18898	10378	10379	0.00446883067059111	0.00446883067059111
+5393	4828	4829	0.40282604477454	0.40282604477454
+20273	10703	10725	0.144609051598102	0.144609051598102
+5414	4842	1486	0.202708226253938	0.202708226253938
+5490	458	4898	0.0468723555946229	0.0468723555946229
+19112	8424	10118	0.19768851226159	0.19768851226159
+5515	1212	4920	0.232222389672051	0.232222389672051
+19281	10466	8768	0.124416605605605	0.124416605605605
+5542	2537	4941	0.438197641658083	0.438197641658083
+20340	10739	10748	0.00884971981393432	0.00884971981393432
+19231	10455	10456	0.1184623603546	0.1184623603546
+5626	3284	1058	0.0983991410952824	0.0983991410952824
+18347	7686	2429	0.200029751476084	0.200029751476084
+17080	1162	882	0.139677295386473	0.139677295386473
+6004	5259	5260	0.066486526131314	0.066486526131314
+14136	9281	509	0.032133360210872	0.032133360210872
+17116	4052	3775	0.00847774353709404	0.00847774353709404
+6616	5699	5700	0.00800603928165774	0.00800603928165774
+19812	7122	5371	0.176755455393693	0.176755455393693
+6777	5820	5821	0.0499181980722273	0.0499181980722273
+4400	4114	4115	0.202509931844666	0.202509931844666
+11451	8258	8261	0.200629988067775	0.200629988067775
+19818	10647	5606	0.0519771701713562	0.0519771701713562
+6974	2119	5953	0.0979282440578051	0.0979282440578051
+4402	4117	2874	0.134125988252719	0.134125988252719
+4403	2874	4118	0.140174877049639	0.140174877049639
+17149	46	4780	0.204228808601968	0.204228808601968
+7674	1498	187	0.203419998803368	0.203419998803368
+7719	6393	6394	0.135380647167761	0.135380647167761
+20324	10732	10743	0.016217938211146	0.016217938211146
+7749	6408	6409	0.240033624288878	0.240033624288878
+20330	10744	10736	0.0345659354386547	0.0345659354386547
+7835	4630	1259	0.131787660470127	0.131787660470127
+5519	4922	2815	0.0131824278657025	0.0131824278657025
+7914	3652	89	0.238216692287668	0.238216692287668
+17155	3202	3091	0.199774901839453	0.199774901839453
+7937	6530	6531	0.246221323543984	0.246221323543984
+20342	2965	10747	0.0130500853290149	0.0130500853290149
+7957	3453	6015	0.103911955569673	0.103911955569673
+17306	8715	5827	0.20364289358169	0.20364289358169
+7981	6550	6526	0.0499792827976588	0.0499792827976588
+18128	10269	10270	0.123006178444702	0.123006178444702
+8007	6565	6566	0.0461778743400118	0.0461778743400118
+12262	8500	8621	0.00391508697358849	0.00391508697358849
+20346	10731	10745	0.0882403942542692	0.0882403942542692
+8080	6611	6612	0.10285099566632	0.10285099566632
+20503	10831	10061	0.00544027190297384	0.00544027190297384
+17159	5011	5064	0.204989668883762	0.204989668883762
+14700	4773	5065	0.177184173799166	0.177184173799166
+8102	6628	6630	0.0733305516170216	0.0733305516170216
+14712	935	5453	0.176927806170623	0.176927806170623
+8148	6658	1326	0.126702346827637	0.126702346827637
+14707	5162	5223	0.123984475685155	0.123984475685155
+8332	6761	6762	0.0544299595372282	0.0544299595372282
+17167	48	5241	0.405295346029575	0.405295346029575
+8384	6791	4603	0.174075741649446	0.174075741649446
+20516	6731	10843	0.0163123315737135	0.0163123315737135
+17171	5280	3092	0.401948502237413	0.401948502237413
+8434	6821	1593	0.0969711334947841	0.0969711334947841
+14711	2220	935	0.183060496140458	0.183060496140458
+8536	6880	1128	0.0335501177019022	0.0335501177019022
+19635	10525	10595	0.00694156278564008	0.00694156278564008
+18504	9353	6386	0.133800859600802	0.133800859600802
+8556	6891	6418	0.133199850282798	0.133199850282798
+8557	6418	4625	0.132396793169127	0.132396793169127
+17175	5327	5390	0.196700288812187	0.196700288812187
+18507	8379	10301	0.115242670596916	0.115242670596916
+8578	6280	6899	0.103595480205117	0.103595480205117
+4404	4118	4119	0.131974592337134	0.131974592337134
+18510	10301	9529	0.136169474903607	0.136169474903607
+4406	4120	4121	0.394524879292727	0.394524879292727
+19640	10596	10598	0.0045286617175965	0.0045286617175965
+8728	3385	6959	0.0627894298641218	0.0627894298641218
+18496	6384	9201	0.134997571408585	0.134997571408585
+18514	10302	5543	0.103400383164669	0.103400383164669
+8779	6999	7000	0.178967474513147	0.178967474513147
+18515	5543	2412	0.101763704229338	0.101763704229338
+8803	5141	2236	0.0248346840292332	0.0248346840292332
+19831	10650	10651	0.138361801446117	0.138361801446117
+8887	3285	1059	0.0976623415502941	0.0976623415502941
+17182	5607	5608	0.205054564403698	0.205054564403698
+8909	3021	7068	0.0519035642154067	0.0519035642154067
+4407	3574	4122	0.137780007377075	0.137780007377075
+14713	5453	5664	0.115365301333729	0.115365301333729
+9019	3944	7121	0.0616182757003265	0.0616182757003265
+18655	7655	10305	0.198541985736116	0.198541985736116
+9043	7135	4276	0.121250513345306	0.121250513345306
+18147	10258	6033	0.201162874084808	0.201162874084808
+9226	7232	7233	0.0701236279353194	0.0701236279353194
+18152	10264	10277	0.407566866193853	0.407566866193853
+9304	6121	1920	0.204110733126185	0.204110733126185
+18153	4104	6047	0.112519690969595	0.112519690969595
+11446	385	387	0.611916175000286	0.611916175000286
+17478	5886	323	0.0446797516163588	0.0446797516163588
+9352	6077	7309	0.0481617931874556	0.0481617931874556
+20395	10775	10776	0.00739420688081638	0.00739420688081638
+18154	6047	10135	0.201285870335585	0.201285870335585
+20429	10789	10790	0.0478990795077935	0.0478990795077935
+9375	7320	1193	0.16722266002845	0.16722266002845
+18274	6666	6667	0.19713796716552	0.19713796716552
+9396	4346	6344	0.137277828740194	0.137277828740194
+7038	2477	5911	0.20568880939919	0.20568880939919
+9526	7390	6591	0.199950723674749	0.199950723674749
+9527	6591	7113	0.204992725577621	0.204992725577621
+4408	4122	4123	0.139283771950412	0.139283771950412
+20440	8230	10798	0.00724995456680097	0.00724995456680097
+9657	7441	7443	0.137227628583058	0.137227628583058
+17487	4652	4653	0.0539741907357585	0.0539741907357585
+9708	7472	7473	0.0204539718039878	0.0204539718039878
+18246	9358	9377	0.403042223701425	0.403042223701425
+9812	7530	3064	0.202502418308833	0.202502418308833
+17689	6172	6173	0.109301053367223	0.109301053367223
+9839	7545	7546	0.200378656030458	0.200378656030458
+17691	6191	6192	0.114641917935369	0.114641917935369
+9862	7563	7564	0.144864127295822	0.144864127295822
+18248	8108	10283	0.203688042743378	0.203688042743378
+9912	7587	7588	0.0177693522294632	0.0177693522294632
+12245	8614	8615	0.00283454394049719	0.00283454394049719
+20023	7898	8856	0.145457290364043	0.145457290364043
+20462	10063	10815	0.0787418608501839	0.0787418608501839
+10159	5268	6906	0.123203894056526	0.123203894056526
+20464	10816	10812	0.0195704583026571	0.0195704583026571
+11511	8294	8295	0.0520431495126935	0.0520431495126935
+18214	6382	6383	0.202997553277811	0.202997553277811
+10231	6520	7739	0.0500835268559568	0.0500835268559568
+18257	3984	6760	0.19949668413334	0.19949668413334
+10280	7447	7757	0.470575008371913	0.470575008371913
+11783	8122	8036	0.0779413781888185	0.0779413781888185
+14738	6526	6538	0.170206219459847	0.170206219459847
+10497	4733	6800	0.110360790137427	0.110360790137427
+20473	10823	10777	0.00660874071248581	0.00660874071248581
+10520	7847	7425	0.0489570822105033	0.0489570822105033
+18522	4015	10297	0.0710067813209419	0.0710067813209419
+10541	7855	7856	0.177133627375528	0.177133627375528
+10542	7856	2614	0.178768427477815	0.178768427477815
+18524	1880	9146	0.0581549975210073	0.0581549975210073
+10589	7869	6640	0.0423030177562977	0.0423030177562977
+18270	5525	6463	0.15576453739372	0.15576453739372
+10616	7882	4885	0.155749664880603	0.155749664880603
+18528	9272	9525	0.133068770502091	0.133068770502091
+10639	7897	7898	0.052238135352395	0.052238135352395
+10663	7913	7914	0.0662287183378057	0.0662287183378057
+18276	1427	6667	0.0124761175920816	0.0124761175920816
+14745	4866	6690	0.193273433165028	0.193273433165028
+12385	1624	3930	0.0974730336125312	0.0974730336125312
+18277	6667	6720	0.144754021853131	0.144754021853131
+10816	7993	6492	0.0854037034050773	0.0854037034050773
+14747	6732	6733	0.0789150394398201	0.0789150394398201
+12453	3191	6107	0.202925463206431	0.202925463206431
+16202	5822	7727	0.19552660887524	0.19552660887524
+18539	5559	10311	0.589298128069539	0.589298128069539
+10890	3025	8025	0.123630898552104	0.123630898552104
+15899	9255	7490	0.0311439652684609	0.0311439652684609
+18550	4298	9428	0.104368579037722	0.104368579037722
+11283	8190	8201	0.0778576783996018	0.0778576783996018
+4409	4123	4124	0.135738728632571	0.135738728632571
+13171	7691	8995	0.0242708657605628	0.0242708657605628
+11527	809	8301	0.0665080068102908	0.0665080068102908
+15908	9084	9085	0.0343875506043555	0.0343875506043555
+14757	2212	4862	0.162593070375603	0.162593070375603
+11742	8382	8383	0.00390317600089655	0.00390317600089655
+18302	5737	2440	0.171112285574699	0.171112285574699
+11766	8404	8405	0.0591205771532174	0.0591205771532174
+11998	5505	7079	0.147126356992669	0.147126356992669
+12060	332	268	0.0944572536860071	0.0944572536860071
+4411	3048	4125	0.136438064344983	0.136438064344983
+20391	10766	10774	0.00648510043864555	0.00648510043864555
+4412	4125	4126	0.00355827872013668	0.00355827872013668
+19845	9516	10657	0.207937764412144	0.207937764412144
+16200	1790	7209	0.198939694041251	0.198939694041251
+20399	10763	3591	0.00757376863172981	0.00757376863172981
+12520	8729	1189	0.0214820993457698	0.0214820993457698
+20644	10877	4517	0.0511435578342218	0.0511435578342218
+12620	8775	4920	0.0124622300083447	0.0124622300083447
+20646	10035	10880	0.0235473019855852	0.0235473019855852
+12646	5921	920	0.178961176893159	0.178961176893159
+12691	8806	8807	0.0113998193117656	0.0113998193117656
+12822	8261	493	0.226877195561116	0.226877195561116
+13034	8927	585	0.0555278029535648	0.0555278029535648
+14668	6327	4166	0.169217141640748	0.169217141640748
+14856	9434	8907	0.112945329265115	0.112945329265115
+20835	10948	10929	0.0711141044607233	0.0711141044607233
+13572	2184	9130	0.046228028674551	0.046228028674551
+4413	4126	4127	0.123682116907034	0.123682116907034
+4414	4127	4128	0.0151340374611755	0.0151340374611755
+14780	5922	921	0.178257163080484	0.178257163080484
+13824	9203	7891	0.0449920400202888	0.0449920400202888
+13970	9249	9250	0.0321739674064664	0.0321739674064664
+20559	2957	10784	0.0120134443189883	0.0120134443189883
+14029	9262	6653	0.100609617198747	0.100609617198747
+15915	9746	9747	0.0832769023011374	0.0832769023011374
+11415	7985	8000	0.0154063290418794	0.0154063290418794
+14233	8687	6694	0.0247755996269239	0.0247755996269239
+20569	10787	10858	0.0193290169195346	0.0193290169195346
+14464	6149	3994	0.0989127437299345	0.0989127437299345
+14635	9387	9388	0.0403809617749613	0.0403809617749613
+11212	391	392	0.10291889633356	0.10291889633356
+14604	9397	9398	0.123826706008273	0.123826706008273
+14637	9406	2243	0.00956376056529555	0.00956376056529555
+15410	9588	9589	0.0190893984820006	0.0190893984820006
+15440	9601	1507	0.00768187987530518	0.00768187987530518
+16383	9771	9880	0.0381827012246672	0.0381827012246672
+16620	9937	9938	0.0704692374785171	0.0704692374785171
+11802	8392	8415	0.148179257170155	0.148179257170155
+16809	4996	728	0.102190274976312	0.102190274976312
+11640	8346	4530	0.131615785848543	0.131615785848543
+16853	6519	9854	0.0497714413737895	0.0497714413737895
+4415	4128	1171	0.138086753058786	0.138086753058786
+17269	3518	82	0.205066129886621	0.205066129886621
+11951	8499	8500	0.0607548345173342	0.0607548345173342
+17324	6799	7351	0.103019517606604	0.103019517606604
+11991	4455	5503	0.144667643977852	0.144667643977852
+17388	5920	3810	0.153093198888871	0.153093198888871
+17389	3810	10095	0.199017480070308	0.199017480070308
+17407	6122	1921	0.202694690919031	0.202694690919031
+17408	1921	7246	0.200797963530598	0.200797963530598
+12044	8523	8524	0.0621486337289915	0.0621486337289915
+17448	3247	10109	0.0544983800214201	0.0544983800214201
+4416	1171	891	0.137903948024362	0.137903948024362
+12113	8552	672	0.00266902064060136	0.00266902064060136
+17549	10132	10133	2.25328864155446	2.25328864155446
+17666	8928	10162	0.0972564668123919	0.0972564668123919
+12288	8528	8526	0.152174217990106	0.152174217990106
+17729	7332	2080	0.104548139781884	0.104548139781884
+12329	8641	8652	0.00987690479251785	0.00987690479251785
+12331	8653	8654	0.00928748638267964	0.00928748638267964
+17751	8575	6706	0.145927899456713	0.145927899456713
+12936	8688	8689	0.0364958929125483	0.0364958929125483
+17774	7679	5984	0.100495969018847	0.100495969018847
+17787	9214	536	0.151808926625465	0.151808926625465
+17822	10188	10186	0.041401555151972	0.041401555151972
+17852	10195	5678	0.0176253194989635	0.0176253194989635
+17170	1912	5280	0.200459610115248	0.200459610115248
+4417	891	4129	0.140986849802137	0.140986849802137
+12947	1304	1303	0.066448544071591	0.066448544071591
+18995	3958	5601	0.119729821294068	0.119729821294068
+18382	8919	8920	0.0492932118239397	0.0492932118239397
+19080	4746	4159	0.17797879706873	0.17797879706873
+13065	8947	8948	0.014693528299895	0.014693528299895
+19135	3168	8470	0.0222426676149063	0.0222426676149063
+20824	9337	9400	0.0122401419030242	0.0122401419030242
+19172	6804	7956	0.0915174498096421	0.0915174498096421
+19618	10588	10494	0.00731369728944242	0.00731369728944242
+19331	9893	10473	0.0200896227314349	0.0200896227314349
+15874	8889	8940	0.103516223202584	0.103516223202584
+19358	9949	10479	0.0590930811213136	0.0590930811213136
+19413	7239	3251	0.195270640148282	0.195270640148282
+19962	10674	10685	0.14613727594919	0.14613727594919
+18473	9005	9006	0.01365486811001	0.01365486811001
+20041	9172	140	0.204724385208342	0.204724385208342
+18917	10396	10397	0.0952180129620757	0.0952180129620757
+20063	2998	4930	0.100928455718765	0.100928455718765
+20587	10865	10840	0.00838601883021894	0.00838601883021894
+4418	4129	2776	0.133433939347385	0.133433939347385
+14836	7396	7377	0.030817448743492	0.030817448743492
+14837	7377	3410	0.100816825455254	0.100816825455254
+15447	9607	9608	0.0162401698909022	0.0162401698909022
+309	317	318	0.0119735018205437	0.0119735018205437
+13531	5648	3387	0.0436500601039895	0.0436500601039895
+14946	8215	8212	0.101284367879663	0.101284367879663
+13555	408	9127	0.613912488305853	0.613912488305853
+14981	9463	7091	0.107883940343108	0.107883940343108
+14982	7091	8789	0.108748219147477	0.108748219147477
+13650	9158	9159	0.0150152429008076	0.0150152429008076
+15063	8874	7430	0.0504536590179092	0.0504536590179092
+17072	3687	8133	0.141298637785039	0.141298637785039
+18493	9170	5545	0.102571946583037	0.102571946583037
+15171	9511	9512	0.0502858420296349	0.0502858420296349
+15174	9514	9515	0.0498070291463972	0.0498070291463972
+18566	10322	10323	0.186113882409967	0.186113882409967
+16100	9824	9817	0.0308009946802063	0.0308009946802063
+16101	9817	8245	0.0866075022072335	0.0866075022072335
+15444	8607	9604	0.0180426861021608	0.0180426861021608
+16161	3728	722	0.106535324504203	0.106535324504203
+16174	9840	7201	0.0108095014749508	0.0108095014749508
+16239	9856	7742	0.4032601166124	0.4032601166124
+16240	7742	5837	0.199863858168715	0.199863858168715
+15881	8762	9238	0.022425928034548	0.022425928034548
+16327	3906	3134	0.109247651866168	0.109247651866168
+16328	3134	5403	0.105230091275359	0.105230091275359
+17203	10075	10076	0.206234100938924	0.206234100938924
+17253	5918	917	0.179236073493399	0.179236073493399
+18223	1695	6884	0.201956855870188	0.201956855870188
+15286	3187	9268	0.0103389762120735	0.0103389762120735
+19421	34	3533	0.2073108703911	0.2073108703911
+19436	6852	10490	0.151686039209942	0.151686039209942
+19663	10609	9366	0.0532084205099813	0.0532084205099813
+19847	10658	7133	0.20071321213787	0.20071321213787
+19953	7857	10414	0.0579007631193554	0.0579007631193554
+19293	10471	8765	0.117981892754207	0.117981892754207
+19987	9727	10653	0.0514452608394938	0.0514452608394938
+19988	10653	1103	0.0505009558673589	0.0505009558673589
+15432	9598	7965	0.00918826645895189	0.00918826645895189
+15465	9615	9616	0.0488173542586425	0.0488173542586425
+15505	2286	4494	0.207036482148074	0.207036482148074
+18430	7784	10291	0.0493825781706533	0.0493825781706533
+15468	7963	9610	0.0129310975383002	0.0129310975383002
+15643	9669	8703	0.0154036792176203	0.0154036792176203
+15293	9561	9563	0.0354006218838869	0.0354006218838869
+15662	5995	7675	0.101107003151938	0.101107003151938
+15469	9610	9613	0.00340267268464027	0.00340267268464027
+15685	3450	6014	0.102083800598865	0.102083800598865
+18613	9261	4049	0.17355432372221	0.17355432372221
+15707	8686	8810	0.0279306326987703	0.0279306326987703
+15471	9606	8892	0.117003908235376	0.117003908235376
+15762	2940	6814	0.0992967316903301	0.0992967316903301
+15764	6595	9701	0.0232598991470647	0.0232598991470647
+14656	9410	9411	0.19733052173904	0.19733052173904
+20261	10720	5750	0.00799491979378441	0.00799491979378441
+2336	1153	2328	0.201597448584961	0.201597448584961
+17300	8716	8745	0.199099643459498	0.199099643459498
+19471	10515	10516	0.00520398584376517	0.00520398584376517
+20611	10819	10828	0.0109320789190355	0.0109320789190355
+20612	10828	10821	0.0197366861798755	0.0197366861798755
+20613	10821	10870	0.0252155503065758	0.0252155503065758
+478	480	212	0.0356029775534751	0.0356029775534751
+15859	9740	9707	0.0569780852958723	0.0569780852958723
+515	509	510	0.286655598001641	0.286655598001641
+520	514	515	0.226862534758366	0.226862534758366
+15253	9545	9538	0.0260796874031177	0.0260796874031177
+624	614	615	0.101063162513791	0.101063162513791
+19463	10483	10508	0.019159575222575	0.019159575222575
+17219	3199	3087	0.202098851695834	0.202098851695834
+702	696	697	0.1055651557861	0.1055651557861
+15544	9645	9646	0.00692347068679982	0.00692347068679982
+776	778	779	0.103928492069641	0.103928492069641
+15955	6396	500	0.195346208359328	0.195346208359328
+913	927	928	0.0495542499145439	0.0495542499145439
+915	929	930	0.0493548663548942	0.0493548663548942
+15957	9767	9768	0.0474477023795114	0.0474477023795114
+932	947	948	0.100759864187185	0.100759864187185
+15960	9770	7450	0.0160716244910599	0.0160716244910599
+955	967	968	0.0165679791310418	0.0165679791310418
+957	969	970	0.197449816642368	0.197449816642368
+15913	9240	9745	0.0339191222144473	0.0339191222144473
+980	991	992	0.138684932577873	0.138684932577873
+15891	9002	7513	0.0667178592447727	0.0667178592447727
+1003	1016	1017	0.039629871856248	0.039629871856248
+1004	1017	1018	0.176155002789907	0.176155002789907
+19469	10513	10514	0.0200709923319022	0.0200709923319022
+16388	9459	9771	0.0286077698371324	0.0286077698371324
+1087	1103	1104	0.338644304966299	0.338644304966299
+17156	3091	4971	0.202252452796884	0.202252452796884
+16103	255	8239	0.267325536990832	0.267325536990832
+1170	1186	1187	0.0990780990020656	0.0990780990020656
+16337	8026	3444	0.219522804846043	0.219522804846043
+1298	1323	1324	0.104021267127805	0.104021267127805
+1299	1324	1325	0.0988550932780109	0.0988550932780109
+16392	9847	9876	0.0466572032639634	0.0466572032639634
+1322	1347	1348	0.145300158256776	0.145300158256776
+387	389	390	0.101909828504342	0.101909828504342
+19511	10536	10537	0.0367294544686212	0.0367294544686212
+1469	1489	1490	0.0976691429125615	0.0976691429125615
+12005	8512	8049	0.105397118565585	0.105397118565585
+18733	7646	6209	0.175022021354251	0.175022021354251
+16766	5003	7290	0.0493746723595829	0.0493746723595829
+1495	1515	1473	0.1629816039782	0.1629816039782
+1497	1516	1517	0.202642438735294	0.202642438735294
+16788	10012	8649	0.310114997807766	0.310114997807766
+1549	1574	1575	0.0819858846366358	0.0819858846366358
+1550	1575	1576	0.0787364050378914	0.0787364050378914
+12359	8664	8670	0.00994780391809775	0.00994780391809775
+16806	9858	3171	0.0510524682713306	0.0510524682713306
+1570	1597	1598	0.101896558922667	0.101896558922667
+2686	2646	2647	0.164307180037452	0.164307180037452
+17103	9923	330	0.250512453112542	0.250512453112542
+1650	1677	1678	0.13227170643909	0.13227170643909
+11530	810	811	0.199368445906152	0.199368445906152
+16952	10036	10037	0.00823596195269871	0.00823596195269871
+1704	1725	1726	0.0532102629650272	0.0532102629650272
+17039	9210	8988	0.00924605732532601	0.00924605732532601
+1762	1487	1782	0.108567137541803	0.108567137541803
+14689	2798	2868	0.199650986040528	0.199650986040528
+17136	4412	4425	0.202602949014775	0.202602949014775
+17489	472	4654	0.0574342005254488	0.0574342005254488
+1935	1949	1223	0.041131087786823	0.041131087786823
+1937	1950	1951	0.0773266220673917	0.0773266220673917
+16304	2826	2827	0.0584380832256012	0.0584380832256012
+17962	10235	5193	0.0148018460000789	0.0148018460000789
+2187	2187	2188	0.0698088769426891	0.0698088769426891
+17834	10187	10188	0.0373456729353608	0.0373456729353608
+17023	10058	10059	0.043764797810192	0.043764797810192
+2261	2261	2262	0.20174624930555	0.20174624930555
+20285	10701	10709	0.0172154433985116	0.0172154433985116
+16421	3331	3358	0.0229870189622456	0.0229870189622456
+20297	5579	7524	0.0531120067375217	0.0531120067375217
+12353	8669	8661	0.00857375962495721	0.00857375962495721
+16657	3462	3464	0.173665424327281	0.173665424327281
+19565	10567	7463	0.00795043725476521	0.00795043725476521
+17162	5087	5107	0.202243070877092	0.202243070877092
+19034	10159	9497	0.0427022948506461	0.0427022948506461
+20744	9001	10918	0.332184959452437	0.332184959452437
+20748	10921	10922	0.0509227801768603	0.0509227801768603
+20749	10923	10924	0.18669804780169	0.18669804780169
+20750	10925	10926	0.0392592111051346	0.0392592111051346
+20752	10927	10928	0.00711510327217607	0.00711510327217607
+20754	10929	10930	0.0834966641757845	0.0834966641757845
+20756	10931	10932	0.0408755067283247	0.0408755067283247
+20758	10933	10934	0.0399346912680156	0.0399346912680156
+20760	10935	10936	0.0903151185359097	0.0903151185359097
+20762	10937	8302	0.00392992290489043	0.00392992290489043
+20763	8302	10927	0.00412640673301695	0.00412640673301695
+20765	10918	3754	0.00609979968071289	0.00609979968071289
+20766	3754	10938	0.00661123306657495	0.00661123306657495
+20768	10920	7783	0.00949225948867298	0.00949225948867298
+20769	7783	10939	0.00900064827794335	0.00900064827794335
+20771	10940	3415	0.00746326017722055	0.00746326017722055
+20772	3415	10941	0.00571991053425525	0.00571991053425525
+20774	10938	10942	0.117980886182769	0.117980886182769
+20776	10941	10943	0.040800141538403	0.040800141538403
+20778	10929	8910	0.00644678344686978	0.00644678344686978
+20779	8910	10944	0.00853909895805364	0.00853909895805364
+20781	10926	10280	0.00413065470277064	0.00413065470277064
+20782	10280	10933	0.00507364819278473	0.00507364819278473
+16513	9922	1630	0.0152212141119797	0.0152212141119797
+16537	3671	9932	0.221180884679333	0.221180884679333
+16539	9933	7834	0.139783679739911	0.139783679739911
+16790	10013	7828	0.227723092786938	0.227723092786938
+18645	1318	5867	0.177222990129465	0.177222990129465
+16960	10042	10043	0.0112267703364208	0.0112267703364208
+17266	3520	4261	0.200318193124263	0.200318193124263
+18444	10290	1124	0.0512555936349529	0.0512555936349529
+17645	7	9825	0.783906819132393	0.783906819132393
+18721	5864	1312	0.178403401011926	0.178403401011926
+18408	6096	10287	0.0607868213781131	0.0607868213781131
+17821	10187	10188	0.0373456729353608	0.0373456729353608
+17849	2817	1418	0.198773063708036	0.198773063708036
+17914	4748	4144	0.180736428235498	0.180736428235498
+17915	4144	2362	0.17239723292509	0.17239723292509
+18664	5184	5652	0.105551381348891	0.105551381348891
+18600	10333	10334	0.176228489643034	0.176228489643034
+18763	10341	10340	0.0478284118767837	0.0478284118767837
+18822	10356	10117	0.120644655146847	0.120644655146847
+12967	1825	1881	0.094094502294363	0.094094502294363
+19280	10465	10466	0.126391742395325	0.126391742395325
+19156	8422	10431	0.296704595839795	0.296704595839795
+19440	7907	10492	0.0345487307061229	0.0345487307061229
+20295	10709	10710	0.0460287189373458	0.0460287189373458
+3578	3435	3436	0.0484142710611121	0.0484142710611121
+3579	3436	2495	0.0837858518069818	0.0837858518069818
+3580	2495	3437	0.120116992356444	0.120116992356444
+3581	3437	2842	0.00242442592962248	0.00242442592962248
+14124	506	3659	0.275685944218073	0.275685944218073
+16901	3513	74	0.203700975919817	0.203700975919817
+18139	6038	10260	0.200840451178757	0.200840451178757
+19824	7641	5603	0.172193293465978	0.172193293465978
+19832	10652	10653	0.149094174776889	0.149094174776889
+16543	3555	814	0.153171011691858	0.153171011691858
+20427	10755	10788	0.051994279761698	0.051994279761698
+11503	6094	2973	0.264851184287827	0.264851184287827
+11438	8034	511	0.21998121248842	0.21998121248842
+16767	7290	3183	0.0591297362625136	0.0591297362625136
+20517	10806	10844	0.0093521291785604	0.0093521291785604
+18290	6889	6752	0.139920838374264	0.139920838374264
+11434	8077	8253	0.0508611139110148	0.0508611139110148
+20513	10060	10809	0.00760770059759869	0.00760770059759869
+18366	7716	7754	0.0519727898310098	0.0519727898310098
+11784	8036	2685	0.144743408596787	0.144743408596787
+11570	8321	7713	0.150502362587478	0.150502362587478
+18376	8353	6069	0.193914067776721	0.193914067776721
+12066	8533	8534	0.0445577347958965	0.0445577347958965
+16678	9979	9981	0.0909471727810372	0.0909471727810372
+20808	10948	8326	0.017351380837649	0.017351380837649
+13031	590	8926	0.147745966959296	0.147745966959296
+18483	9138	9139	0.0109683239632665	0.0109683239632665
+16502	3167	9925	0.137835608828632	0.137835608828632
+16961	10043	10044	0.075399787572802	0.075399787572802
+17393	67	3508	0.205321571793414	0.205321571793414
+17395	68	7304	0.202979892499458	0.202979892499458
+17650	303	395	0.11664951410225	0.11664951410225
+18596	10330	1845	0.0286669821878414	0.0286669821878414
+18996	5601	9265	0.00587624613864547	0.00587624613864547
+19117	402	10431	0.249198506812358	0.249198506812358
+19489	4703	10441	0.0209493756701814	0.0209493756701814
+19929	9514	10680	0.206733607617385	0.206733607617385
+20583	10849	9338	0.00790665036605531	0.00790665036605531
+20193	10707	9813	0.31051590829715	0.31051590829715
+19738	9472	4893	0.184563607099297	0.184563607099297
+19739	4893	9418	0.161581410791365	0.161581410791365
+19740	9418	955	0.17512104217346	0.17512104217346
+19741	955	8865	0.17730267158364	0.17730267158364
+19745	4908	6614	0.202025102521769	0.202025102521769
+19746	6614	9456	0.193906231686937	0.193906231686937
+19747	9456	10644	0.207835763228408	0.207835763228408
+19748	10644	647	0.139231068042996	0.139231068042996
+19807	7868	3718	0.103509284327612	0.103509284327612
+19756	9305	1209	0.168197350020426	0.168197350020426
+19906	9507	10678	0.206369047895258	0.206369047895258
+17115	582	4052	0.0200066549889732	0.0200066549889732
+20290	10700	10701	0.0224013855081139	0.0224013855081139
+15856	9738	9733	0.00602831355714784	0.00602831355714784
+16390	9811	3033	0.00758642111179705	0.00758642111179705
+17208	234	10075	0.0065072113132931	0.0065072113132931
+18209	3991	6766	0.202297976338321	0.202297976338321
+314	322	323	0.0362830323344	0.0362830323344
+17944	10224	7938	0.0484797623817722	0.0484797623817722
+11519	657	658	0.200633396770054	0.200633396770054
+18400	7187	1425	0.131517435591527	0.131517435591527
+16448	9905	9906	0.00998689980616885	0.00998689980616885
+1705	1726	1727	0.0778502303245676	0.0778502303245676
+19817	3729	10647	0.0543545423636727	0.0543545423636727
+20793	10938	8908	0.0180004191395181	0.0180004191395181
+19241	8221	10460	0.0833729876311698	0.0833729876311698
+18639	5180	2582	0.17723417320802	0.17723417320802
+20291	10701	10703	0.028889965052559	0.028889965052559
+19963	4945	7404	0.157747728004848	0.157747728004848
+5109	4628	4629	0.132844583260552	0.132844583260552
+13926	8916	8922	0.136369708465648	0.136369708465648
+19964	7404	10415	0.200029723937468	0.200029723937468
+12274	8517	8518	0.0318537260898596	0.0318537260898596
+302	310	311	0.0714603355500818	0.0714603355500818
+307	315	316	0.0430385391585726	0.0430385391585726
+333	333	334	0.130005791781119	0.130005791781119
+501	338	339	0.0809671757461818	0.0809671757461818
+337	340	336	0.244398847800565	0.244398847800565
+339	341	342	0.368758396632831	0.368758396632831
+341	343	344	0.267836247641829	0.267836247641829
+1553	1578	1579	0.0969614959298273	0.0969614959298273
+360	362	363	0.19757055700413	0.19757055700413
+361	363	358	0.235481235248911	0.235481235248911
+365	366	367	0.102920688901431	0.102920688901431
+374	376	377	0.135433574317766	0.135433574317766
+376	378	379	0.134391053348824	0.134391053348824
+485	478	486	0.209563350313202	0.209563350313202
+489	489	490	0.0633762863456435	0.0633762863456435
+491	491	492	0.0663732872105415	0.0663732872105415
+493	493	494	0.169203096380544	0.169203096380544
+495	5	495	0.258130691528307	0.258130691528307
+496	495	496	0.152370734557831	0.152370734557831
+523	518	519	0.337507977198885	0.337507977198885
+525	520	521	0.106662672722042	0.106662672722042
+527	522	523	0.0555974633225448	0.0555974633225448
+529	524	525	0.0282350762510443	0.0282350762510443
+530	525	526	0.0218806529722405	0.0218806529722405
+532	527	397	0.320431501428441	0.320431501428441
+11515	270	528	0.19992365959325	0.19992365959325
+535	529	530	0.455513641378482	0.455513641378482
+537	531	532	0.375956762810707	0.375956762810707
+11371	7972	290	0.0119699038475456	0.0119699038475456
+14734	4868	2218	0.161837248854237	0.161837248854237
+6872	5877	5878	0.0844725820315708	0.0844725820315708
+16249	9860	8753	0.202765718025687	0.202765718025687
+16250	8753	9861	0.201364638358659	0.201364638358659
+16251	9861	3662	0.165177264018871	0.165177264018871
+20720	9398	9340	0.00984702702877527	0.00984702702877527
+16256	9863	8751	0.202603541868936	0.202603541868936
+16260	3650	88	0.266027674120579	0.266027674120579
+16261	88	3524	0.203075294530693	0.203075294530693
+16262	3524	9864	0.20046430405241	0.20046430405241
+16263	9864	6517	0.135079896017257	0.135079896017257
+19523	6855	10544	0.00712022213135496	0.00712022213135496
+19524	10544	10545	0.0729342151704198	0.0729342151704198
+19526	10427	10546	0.0076995400840501	0.0076995400840501
+19527	10546	10545	0.0321755552809886	0.0321755552809886
+19528	10545	10547	0.0194542890583841	0.0194542890583841
+19529	10547	10548	0.0207030648178635	0.0207030648178635
+19530	10548	10543	0.0190435691175833	0.0190435691175833
+19531	10543	10549	0.0747704686946873	0.0747704686946873
+19532	10549	6859	0.00739470505760699	0.00739470505760699
+19543	10555	10556	0.0878912692065361	0.0878912692065361
+19544	10556	7460	0.0082175900444136	0.0082175900444136
+11808	8395	2692	0.146729521611774	0.146729521611774
+19546	6852	10557	0.00689466829919516	0.00689466829919516
+19547	10557	10558	0.00988642805887056	0.00988642805887056
+19548	10558	10559	0.0350073244923259	0.0350073244923259
+19550	10409	10559	0.0205641181514586	0.0205641181514586
+343	345	346	0.0953881878570937	0.0953881878570937
+357	359	360	0.0408490640041322	0.0408490640041322
+359	361	362	0.026041104546106	0.026041104546106
+19800	8772	7638	0.176309543452907	0.176309543452907
+19802	6235	5200	0.174765267300994	0.174765267300994
+14862	8517	9439	0.0489472304938478	0.0489472304938478
+14864	9387	9440	0.0279990514780242	0.0279990514780242
+206	104	218	0.105140809305177	0.105140809305177
+207	218	219	0.425726992195474	0.425726992195474
+208	219	220	0.341194420964085	0.341194420964085
+564	250	558	0.137167107757782	0.137167107757782
+566	559	560	0.116737480647973	0.116737480647973
+570	563	564	0.00248176882120935	0.00248176882120935
+571	564	565	0.0167681949380125	0.0167681949380125
+573	566	248	0.898480310845601	0.898480310845601
+577	569	570	0.20355346310439	0.20355346310439
+578	570	571	0.196730394721169	0.196730394721169
+579	571	572	0.203615183123948	0.203615183123948
+580	572	573	0.198181200751108	0.198181200751108
+14119	4047	3768	0.167133877022618	0.167133877022618
+16964	10030	10041	0.01368783886441	0.01368783886441
+17397	72	7305	0.205159206156883	0.205159206156883
+18238	8494	6764	0.145768349374275	0.145768349374275
+19608	10515	10585	0.0689638415978994	0.0689638415978994
+18764	10340	10339	0.0412859123428405	0.0412859123428405
+18823	10117	10113	0.0135016334010227	0.0135016334010227
+19106	10358	10371	0.165108727109845	0.165108727109845
+19491	10447	10448	0.0188144168916081	0.0188144168916081
+20034	9939	10087	0.139116164222915	0.139116164222915
+20585	10868	10860	0.0191301130167572	0.0191301130167572
+16225	9851	8750	0.201618763717288	0.201618763717288
+16226	8750	9852	0.201631838787549	0.201631838787549
+16227	9852	3528	0.200735525849656	0.200735525849656
+16228	3528	92	0.203732802229698	0.203732802229698
+16230	9853	7739	0.398547510805713	0.398547510805713
+16231	7739	5833	0.201507956367007	0.201507956367007
+16232	5833	9854	0.202599224942483	0.202599224942483
+16233	9854	8749	0.200829688485991	0.200829688485991
+16234	8749	9855	0.20199683583572	0.20199683583572
+16235	9855	3526	0.201154889365918	0.201154889365918
+16236	3526	90	0.202910490655376	0.202910490655376
+16237	90	3653	0.220628466219896	0.220628466219896
+16241	5837	9857	0.2019855844315	0.2019855844315
+16242	9857	8752	0.20368896268505	0.20368896268505
+16243	8752	9858	0.200451227373991	0.200451227373991
+16244	9858	3660	0.230907711206458	0.230907711206458
+16248	5838	9860	0.202297457689378	0.202297457689378
+19645	10602	7824	0.0258612340137364	0.0258612340137364
+363	364	365	0.559719374351914	0.559719374351914
+19907	10678	9721	0.0996291174385701	0.0996291174385701
+506	500	501	0.0135415609654236	0.0135415609654236
+561	555	249	0.135203722470136	0.135203722470136
+11580	1888	1889	0.200666363671928	0.200666363671928
+15798	2349	2131	0.0298025813439396	0.0298025813439396
+539	533	534	0.0326127113197712	0.0326127113197712
+19790	4873	2223	0.160309891999679	0.160309891999679
+19791	2223	939	0.184480311036498	0.184480311036498
+19793	6601	8056	0.176023947078255	0.176023947078255
+18090	1076	4197	0.0860162512015724	0.0860162512015724
+19867	5588	10668	0.0462472353637014	0.0462472353637014
+19868	10668	3867	0.0484404910203503	0.0484404910203503
+16756	10007	10009	0.110124788745591	0.110124788745591
+20270	10704	10719	0.0406376536123098	0.0406376536123098
+20705	10912	9190	0.00712573261129369	0.00712573261129369
+18194	10279	8107	0.203288621260674	0.203288621260674
+20434	10793	8352	0.0594105399024928	0.0594105399024928
+458	461	462	0.198429530791892	0.198429530791892
+460	463	464	0.0462542784573108	0.0462542784573108
+462	465	466	0.144675049024067	0.144675049024067
+17120	4175	1798	0.171169073462998	0.171169073462998
+464	265	467	0.159364568867095	0.159364568867095
+18157	6034	6309	0.201831068920315	0.201831068920315
+4816	4421	3998	0.17545447475176	0.17545447475176
+4922	4493	4494	0.0159365819430951	0.0159365819430951
+5210	4702	4703	0.066548442936564	0.066548442936564
+7813	6447	2400	0.0150551554736642	0.0150551554736642
+16544	814	7835	0.140306546265127	0.140306546265127
+12308	8643	8644	0.0690537561530006	0.0690537561530006
+17649	227	303	0.195568266331611	0.195568266331611
+7918	6517	6518	0.0762261509888863	0.0762261509888863
+17937	10218	10222	0.0404413602972235	0.0404413602972235
+17938	10222	10219	0.0368645715567014	0.0368645715567014
+8128	6642	6643	0.177723704306915	0.177723704306915
+17941	10223	10220	0.00249551892827132	0.00249551892827132
+17943	10222	10224	0.00241172243246435	0.00241172243246435
+8312	6745	6746	0.136482587401898	0.136482587401898
+18754	7413	5870	0.17727401445854	0.17727401445854
+18755	5870	1322	0.17769011554913	0.17769011554913
+19718	10634	10631	0.0223829659698328	0.0223829659698328
+19728	5372	10636	0.0113147577104563	0.0113147577104563
+11655	8352	8354	0.0940321887930874	0.0940321887930874
+12943	1331	8882	0.0183910567310257	0.0183910567310257
+13038	8921	8931	0.0826069320981336	0.0826069320981336
+15877	9002	8833	0.267177283911404	0.267177283911404
+13924	219	9234	0.1533276461132	0.1533276461132
+14664	6543	4752	0.198706695176553	0.198706695176553
+14064	5103	7930	0.0939071679637344	0.0939071679637344
+15409	9587	9588	0.102439715732603	0.102439715732603
+17271	7309	3269	0.20118551117184	0.20118551117184
+19597	10581	10493	0.00740818165509206	0.00740818165509206
+17856	10198	10199	0.0985751913110846	0.0985751913110846
+17916	2362	5630	0.113519118424065	0.113519118424065
+17920	5276	3075	0.102745112375949	0.102745112375949
+19227	10451	10452	0.0446144989444803	0.0446144989444803
+20035	10087	7837	0.13791526067504	0.13791526067504
+418	417	418	0.0816052997413777	0.0816052997413777
+20262	5750	10721	0.00796157509542264	0.00796157509542264
+3789	1821	3611	0.0958389453890581	0.0958389453890581
+3790	3611	2772	0.203476606019223	0.203476606019223
+3793	3613	3614	0.132946325644283	0.132946325644283
+3796	3616	3617	0.204716112848492	0.204716112848492
+3797	3617	3618	0.195623928497501	0.195623928497501
+427	426	427	0.387676950856037	0.387676950856037
+429	428	429	0.0146752084107322	0.0146752084107322
+430	429	430	0.036859949213086	0.036859949213086
+431	430	431	0.0704161362424121	0.0704161362424121
+432	431	432	0.590519007108071	0.590519007108071
+4284	2975	658	0.052473064124837	0.052473064124837
+4286	1885	270	0.0500105419976734	0.0500105419976734
+4287	270	4027	0.0498040073250557	0.0498040073250557
+4288	4027	4028	0.0589001114271481	0.0589001114271481
+4289	4028	4029	0.0431017175700998	0.0431017175700998
+4360	2497	4085	0.0418616206629569	0.0418616206629569
+4362	4086	4087	0.0498519055829618	0.0498519055829618
+4375	4097	4098	0.0489802870312836	0.0489802870312836
+4376	4098	4099	0.0495757400917575	0.0495757400917575
+4377	4099	1289	0.0496665540814756	0.0496665540814756
+4388	1566	4105	0.137573017409453	0.137573017409453
+4391	695	4107	0.201385149795677	0.201385149795677
+4393	4108	4109	0.0199664273987825	0.0199664273987825
+14838	3410	8377	0.101986580237	0.101986580237
+14839	8377	7446	0.0983251649921582	0.0983251649921582
+14840	7446	7164	0.102406305295689	0.102406305295689
+14842	7777	9006	0.0511080596626327	0.0511080596626327
+14843	9006	1118	0.0498086503332092	0.0498086503332092
+14844	1118	9427	0.0503946729534928	0.0503946729534928
+14845	9427	7495	0.0500441160343634	0.0500441160343634
+14846	7495	9428	0.0499148481472719	0.0499148481472719
+16340	8082	9873	0.204288977647072	0.204288977647072
+16284	2160	2852	0.333640243849923	0.333640243849923
+16319	7334	9870	0.105486497466828	0.105486497466828
+16320	9870	3330	0.104529154175209	0.104529154175209
+16321	3330	5008	0.105000246042652	0.105000246042652
+16322	5008	9871	0.101110660676404	0.101110660676404
+16323	9871	6279	0.105691817248501	0.105691817248501
+16324	6279	9872	0.052158145666091	0.052158145666091
+16325	9872	1044	0.0524997416021315	0.0524997416021315
+16326	1044	3906	0.105460879039182	0.105460879039182
+16329	5403	7356	0.10569318364656	0.10569318364656
+16330	7356	6784	0.104889107310835	0.104889107310835
+16331	6784	5124	0.210810768544514	0.210810768544514
+20721	9340	10905	0.00789820611305507	0.00789820611305507
+20723	10753	9339	0.007875732855517	0.007875732855517
+20728	9342	9396	0.0106743790650573	0.0106743790650573
+20729	9396	10915	0.00762676803615786	0.00762676803615786
+20731	10886	10916	0.00379288018005415	0.00379288018005415
+20732	10916	10888	0.0491926355480291	0.0491926355480291
+20733	10888	10897	0.0175392611655491	0.0175392611655491
+20735	5884	5882	0.0407543500383345	0.0407543500383345
+20739	10916	10896	0.0428179717864665	0.0428179717864665
+19515	10538	10539	0.0270370607457707	0.0270370607457707
+19519	10540	10541	0.0721562499053708	0.0721562499053708
+19520	6858	10542	0.00731747119062453	0.00731747119062453
+19521	10542	10543	0.072308027249243	0.072308027249243
+19641	10598	10599	0.0410277962156296	0.0410277962156296
+19647	10527	10603	0.00759964014854772	0.00759964014854772
+8	8	9	0.136291899256532	0.136291899256532
+9	9	10	0.137589063327607	0.137589063327607
+10	10	11	0.132825874246234	0.132825874246234
+18420	9372	1692	0.204432374496239	0.204432374496239
+18421	1692	6881	0.204488584881531	0.204488584881531
+279	289	290	0.0346246156131069	0.0346246156131069
+280	290	291	0.0090342150661118	0.0090342150661118
+287	297	298	0.583705095697001	0.583705095697001
+288	298	299	0.306214311798175	0.306214311798175
+290	300	106	0.00724031766776508	0.00724031766776508
+16839	9888	10020	0.0079899169832474	0.0079899169832474
+292	301	302	0.137922345506014	0.137922345506014
+293	302	303	0.195856797695859	0.195856797695859
+295	304	305	0.071509984134022	0.071509984134022
+296	305	291	0.00958395052624692	0.00958395052624692
+298	306	307	0.132706668323714	0.132706668323714
+300	308	309	0.180558406302622	0.180558406302622
+13564	3088	497	0.0577004807279618	0.0577004807279618
+549	543	426	0.352446625998258	0.352446625998258
+552	546	547	0.162031197296959	0.162031197296959
+555	549	550	0.0907371722674166	0.0907371722674166
+16080	9284	9816	0.896094060874208	0.896094060874208
+922	936	937	0.0492564901299232	0.0492564901299232
+923	937	938	0.0472982580528762	0.0472982580528762
+924	938	939	0.0491354084196454	0.0491354084196454
+925	939	940	0.0508720309451131	0.0508720309451131
+926	940	941	0.0492045261244582	0.0492045261244582
+928	942	943	0.0497647165539241	0.0497647165539241
+929	943	944	0.0490705088651407	0.0490705088651407
+930	944	945	0.0603455693296164	0.0603455693296164
+931	946	947	0.0401316151990327	0.0401316151990327
+933	948	949	0.0998226264147839	0.0998226264147839
+934	949	950	0.0983576522120727	0.0983576522120727
+15935	9756	9757	0.156652526688463	0.156652526688463
+2725	2680	2681	0.0108684198063562	0.0108684198063562
+2726	2681	2682	0.048953084737917	0.048953084737917
+2727	2682	2683	0.0539629704453868	0.0539629704453868
+2728	2683	2684	0.0523967582185389	0.0523967582185389
+2730	2685	2686	0.0561874543205358	0.0561874543205358
+2731	2686	2687	0.0505746825733151	0.0505746825733151
+2732	2687	2688	0.0532702991765301	0.0532702991765301
+2733	2688	2689	0.0520434204860384	0.0520434204860384
+2734	2689	2690	0.0469426670134342	0.0469426670134342
+2735	2690	2691	0.0055983554055492	0.0055983554055492
+2736	2691	2692	0.0527791994653692	0.0527791994653692
+2737	2692	2693	0.0530982869497539	0.0530982869497539
+2738	2693	2694	0.0517656440902012	0.0517656440902012
+2740	2695	2696	0.0564222695417846	0.0564222695417846
+2741	2696	2697	0.0491123681137852	0.0491123681137852
+2743	2698	2563	0.102019026624601	0.102019026624601
+2745	2699	2700	0.132875620799413	0.132875620799413
+2746	2700	2701	0.135383174760531	0.135383174760531
+2747	2701	2702	0.142428760025563	0.142428760025563
+2749	2703	2704	0.0110418183352839	0.0110418183352839
+3232	1186	3146	0.0222724242580952	0.0222724242580952
+3233	3146	3147	0.199414112058729	0.199414112058729
+3235	3148	3149	0.202164772668483	0.202164772668483
+3236	3149	3150	0.200873635711822	0.200873635711822
+3238	1549	3151	0.20099284178908	0.20099284178908
+3239	3151	284	0.102708547785912	0.102708547785912
+3241	3152	3153	0.190699299195112	0.190699299195112
+3242	3153	3154	0.20682256355895	0.20682256355895
+3244	3155	3156	0.180582058742099	0.180582058742099
+3245	3156	3157	0.169576673169674	0.169576673169674
+3246	3157	3158	0.182296097160239	0.182296097160239
+3247	3158	3159	0.198872141197801	0.198872141197801
+3248	3159	3160	0.150969541792736	0.150969541792736
+3250	3161	3162	0.20389937284006	0.20389937284006
+14826	8301	6748	0.0667725814392886	0.0667725814392886
+14827	6748	7911	0.0672145953526644	0.0672145953526644
+14828	7911	6148	0.0663282745787247	0.0663282745787247
+258	257	266	0.0587628088830451	0.0587628088830451
+19749	647	7274	0.134298165118703	0.134298165118703
+19750	7274	1989	0.0916188684792704	0.0916188684792704
+19751	1989	1973	0.0380843237979454	0.0380843237979454
+19752	1973	4593	0.133556226393108	0.133556226393108
+19753	4593	6480	0.132288869732613	0.132288869732613
+19754	6480	2468	0.142585895231316	0.142585895231316
+19758	9421	959	0.172665861332853	0.172665861332853
+19759	959	10645	0.13147788241291	0.13147788241291
+19760	1208	9304	0.168127340065809	0.168127340065809
+20582	10869	10849	0.0156424449925145	0.0156424449925145
+19762	9148	5948	0.203948884455816	0.203948884455816
+19763	5948	5140	0.230511938313211	0.230511938313211
+19771	9419	957	0.173152824232778	0.173152824232778
+19772	957	8866	0.177567389214567	0.177567389214567
+19773	8866	3772	0.153916736097948	0.153916736097948
+19774	3772	10250	0.199306990270457	0.199306990270457
+19776	5481	9962	0.172319939483889	0.172319939483889
+19784	10633	5611	0.0523352586472612	0.0523352586472612
+19785	5611	10632	0.0574818788883128	0.0574818788883128
+19786	10632	3948	0.0628606527024246	0.0628606527024246
+19788	5471	9476	0.170862748175182	0.170862748175182
+19795	10242	7118	0.176747024157438	0.176747024157438
+19797	10241	6597	0.176287163937986	0.176287163937986
+19798	6597	8052	0.177501084527478	0.177501084527478
+19799	8052	8772	0.17769668863416	0.17769668863416
+20115	7697	7687	0.0337511699796145	0.0337511699796145
+19903	5589	10662	0.0571161687994488	0.0571161687994488
+19904	10662	7532	0.0504117571952022	0.0504117571952022
+19905	7532	10677	0.0997820208770486	0.0997820208770486
+19909	2313	6581	0.0799825399923036	0.0799825399923036
+19911	9640	7119	0.178268282456568	0.178268282456568
+19912	7119	10244	0.176467674531692	0.176467674531692
+19924	625	10679	0.208701850480872	0.208701850480872
+3596	897	3446	0.139044776802754	0.139044776802754
+3598	2803	3447	0.126707874592684	0.126707874592684
+3599	3447	3448	0.123301295397385	0.123301295397385
+3601	3449	3450	0.173676950071542	0.173676950071542
+3602	3450	2355	0.178205364659248	0.178205364659248
+3603	2355	3451	0.173197360497638	0.173197360497638
+19562	10565	7475	0.0791516149409225	0.0791516149409225
+3604	3451	3452	0.173541943088937	0.173541943088937
+17079	9872	1162	0.139149030623918	0.139149030623918
+3605	3452	3453	0.1769778659128	0.1769778659128
+3606	3453	3454	0.165627970000561	0.165627970000561
+3607	3454	1205	0.168543363105219	0.168543363105219
+3608	1205	3455	0.0221544930319224	0.0221544930319224
+3609	3455	3456	0.199430319568372	0.199430319568372
+3610	3456	3457	0.153671457388635	0.153671457388635
+3611	3457	954	0.177011997745418	0.177011997745418
+3616	3461	3023	0.066721008314693	0.066721008314693
+3617	3023	609	0.0626815132610695	0.0626815132610695
+3618	609	3465	0.0706324711687883	0.0706324711687883
+3620	3466	3467	0.0872559719077514	0.0872559719077514
+3621	3467	3468	0.0185752884131515	0.0185752884131515
+3624	3470	3471	0.137381540377109	0.137381540377109
+3625	3471	3472	0.139227388345715	0.139227388345715
+3627	3473	2394	0.0888475437763938	0.0888475437763938
+3628	2394	3474	0.138668820339117	0.138668820339117
+3630	752	1572	0.142095074047717	0.142095074047717
+3636	1922	3478	0.201186325897418	0.201186325897418
+3639	3479	78	0.204132972246117	0.204132972246117
+3640	78	3480	0.203867249894849	0.203867249894849
+3641	3480	3481	0.201309535256297	0.201309535256297
+3642	3481	3482	0.20059690465602	0.20059690465602
+3643	3482	3483	0.19983968701354	0.19983968701354
+3645	3484	3485	0.206291326448342	0.206291326448342
+17801	8859	9953	0.0450786858997054	0.0450786858997054
+3647	1956	3486	0.372627158727207	0.372627158727207
+3649	3487	3488	0.176001514646942	0.176001514646942
+3652	3491	3492	0.0183360753269697	0.0183360753269697
+3653	3492	1957	0.294352299971408	0.294352299971408
+3655	1514	1794	0.180158106731211	0.180158106731211
+3657	3493	3494	0.410250831833552	0.410250831833552
+3658	3494	3495	0.80930180387284	0.80930180387284
+3660	3497	3498	0.0969369694749486	0.0969369694749486
+3661	3498	3499	0.0991356893770485	0.0991356893770485
+3662	3499	3500	0.0998795294298673	0.0998795294298673
+3663	3500	3501	0.0512305304785401	0.0512305304785401
+3664	3501	3502	0.04790242821524	0.04790242821524
+3665	3502	3503	0.0976724268185372	0.0976724268185372
+3666	3503	3504	0.099556042023676	0.099556042023676
+3667	3504	3505	0.0928685437479174	0.0928685437479174
+3668	3505	3506	0.0161263903021828	0.0161263903021828
+3670	3507	3508	0.0452502277318962	0.0452502277318962
+3673	3510	3511	0.00276384344441178	0.00276384344441178
+3674	3511	3512	0.10075109326777	0.10075109326777
+3675	3512	3513	0.0463453549611142	0.0463453549611142
+3676	3513	3514	0.0488777906121745	0.0488777906121745
+3677	3514	3515	0.0517011274556552	0.0517011274556552
+3678	3515	3480	0.0495708012211316	0.0495708012211316
+3679	3480	3516	0.0493402083699287	0.0493402083699287
+3680	3516	3517	0.0507690156276584	0.0507690156276584
+3681	3517	3518	0.0480408906902884	0.0480408906902884
+3682	3518	3519	0.0499402493817724	0.0499402493817724
+3683	3519	3520	0.0491944164243011	0.0491944164243011
+3685	3521	3522	0.048707440700188	0.048707440700188
+3686	3522	3523	0.0553123927733894	0.0553123927733894
+3688	3524	3525	0.0491959341758901	0.0491959341758901
+3689	3525	3526	0.0471666433723512	0.0471666433723512
+3690	3526	3527	0.0512305206815533	0.0512305206815533
+3693	2737	3529	0.051933950168584	0.051933950168584
+3694	3529	3530	0.02212553176718	0.02212553176718
+3695	3530	3531	0.0926927616463166	0.0926927616463166
+3698	3533	3534	0.0505032949697016	0.0505032949697016
+3699	3534	3535	0.0486395723695605	0.0486395723695605
+3700	3535	3536	0.0490245580059416	0.0490245580059416
+3701	3536	3537	0.0505772192147856	0.0505772192147856
+3703	3538	3540	0.0504276967004131	0.0504276967004131
+3705	3541	3542	0.0472106572615262	0.0472106572615262
+3706	3542	1776	0.0526607102662498	0.0526607102662498
+3707	1776	3543	0.0501355164587406	0.0501355164587406
+3708	3543	3545	0.0479683302933595	0.0479683302933595
+3709	3545	3546	0.0512089379810606	0.0512089379810606
+3712	3547	3548	0.0501783172118128	0.0501783172118128
+3714	3549	3550	0.0951894457465396	0.0951894457465396
+3716	3374	3551	0.137804864391147	0.137804864391147
+3717	3552	3553	0.0519171995444708	0.0519171995444708
+3718	3553	3554	0.0504125238991067	0.0504125238991067
+3719	3554	3555	0.0509345511135035	0.0509345511135035
+3720	3555	3556	0.0352813695033733	0.0352813695033733
+3721	3556	3557	0.0165592866582096	0.0165592866582096
+3722	3557	3558	0.0492318634139881	0.0492318634139881
+3724	2895	3559	0.10435477566087	0.10435477566087
+3725	3559	3560	0.106943183049813	0.106943183049813
+3726	3560	3561	0.104660660979737	0.104660660979737
+3727	3561	3562	0.110121719044693	0.110121719044693
+3728	3562	3563	0.102966459525542	0.102966459525542
+3730	3564	3565	0.0562722873891167	0.0562722873891167
+3735	3568	3569	0.0531044201649232	0.0531044201649232
+3736	3569	3570	0.106391147104451	0.106391147104451
+3737	3570	3571	0.101252017782574	0.101252017782574
+3738	3571	3323	0.106405710576167	0.106405710576167
+3739	3323	3572	0.102008288172629	0.102008288172629
+3740	3572	3573	0.10165616841443	0.10165616841443
+3741	3573	2074	0.102582871487582	0.102582871487582
+3742	2074	2671	0.108231570849142	0.108231570849142
+3743	2671	3574	0.10456159833902	0.10456159833902
+5002	115	4548	0.0219059413647985	0.0219059413647985
+3744	3574	3575	0.112649473969198	0.112649473969198
+3748	3469	3578	0.102738780677217	0.102738780677217
+3751	848	3580	0.194594151891157	0.194594151891157
+3780	799	3582	0.202016106794537	0.202016106794537
+3753	3581	3583	0.0933177632696428	0.0933177632696428
+3756	3586	3587	0.0427524561216555	0.0427524561216555
+20307	3851	3852	0.0199150113624835	0.0199150113624835
+3757	3587	3588	0.00652614157776479	0.00652614157776479
+3758	3588	3589	0.0165416326790114	0.0165416326790114
+3759	3589	3590	0.0292914453635219	0.0292914453635219
+3760	3590	3591	0.012398142936734	0.012398142936734
+3761	3591	3592	0.00808918004643223	0.00808918004643223
+3762	3592	3593	0.0105968786869326	0.0105968786869326
+3764	3487	3594	0.175200690864457	0.175200690864457
+17310	5684	5685	0.200644913348264	0.200644913348264
+3765	3594	2339	0.174981229925885	0.174981229925885
+3768	3596	3597	0.239259126523314	0.239259126523314
+3770	1985	1969	0.0388238770836811	0.0388238770836811
+3771	1969	3598	0.103685036459381	0.103685036459381
+3772	3598	3599	0.103278210249803	0.103278210249803
+3774	3600	685	0.204822140654993	0.204822140654993
+3775	685	1984	0.157051714392723	0.157051714392723
+3777	2473	3601	0.204732098938096	0.204732098938096
+3778	3601	3602	0.203258463693205	0.203258463693205
+3779	3602	799	0.197950165384785	0.197950165384785
+3781	3582	3603	0.209363914186111	0.209363914186111
+3782	3603	3604	0.202974468009462	0.202974468009462
+3783	3604	3063	0.201030651985273	0.201030651985273
+3784	3063	3605	0.183452467298283	0.183452467298283
+3785	3605	3609	0.0173247613422977	0.0173247613422977
+3786	3609	3610	0.100167424900963	0.100167424900963
+3787	3610	1148	0.0998182719974527	0.0998182719974527
+3798	3618	3619	1.41244277904247	1.41244277904247
+3799	3620	3621	0.200419085699923	0.200419085699923
+3800	3621	3083	0.197049820413636	0.197049820413636
+3806	3250	3625	0.214852973763206	0.214852973763206
+3807	3625	37	0.19341482884534	0.19341482884534
+3808	37	3536	0.207817408343139	0.207817408343139
+3809	3536	3626	0.197537787183869	0.197537787183869
+3810	3626	3627	0.0725803332096263	0.0725803332096263
+3812	3628	3629	0.0377891893344826	0.0377891893344826
+3814	3630	108	0.222508950073657	0.222508950073657
+3815	108	3631	0.48374336677931	0.48374336677931
+3816	3631	3632	1.29923590650812	1.29923590650812
+17118	3959	510	0.232935824119298	0.232935824119298
+4428	4136	4137	0.173313517100692	0.173313517100692
+4429	4137	4138	0.202530185785573	0.202530185785573
+18158	6309	10170	0.40356001102466	0.40356001102466
+4432	2389	4140	0.139183902890425	0.139183902890425
+4434	4141	4142	0.197054107936505	0.197054107936505
+4438	4144	4145	0.0537117632250494	0.0537117632250494
+4439	4145	965	0.101471161400112	0.101471161400112
+4440	965	4146	0.104100628512796	0.104100628512796
+4441	4146	3163	0.0969051144320847	0.0969051144320847
+4442	3163	4147	0.101372524256092	0.101372524256092
+4443	4147	4148	0.0308326213261154	0.0308326213261154
+4445	3914	1051	0.113795014444698	0.113795014444698
+4446	1051	4149	0.10964029932362	0.10964029932362
+4449	4151	3345	0.104243278330047	0.104243278330047
+4451	4152	4153	0.102419695022811	0.102419695022811
+4452	4153	2058	0.103354746635848	0.103354746635848
+4453	2058	2644	0.104156201229462	0.104156201229462
+4454	2644	4110	0.102077109293643	0.102077109293643
+5804	5122	5123	0.00520045876973269	0.00520045876973269
+4455	4110	4154	0.102551400025576	0.102551400025576
+4458	4156	3451	0.102085683319337	0.102085683319337
+4459	3451	4157	0.103915702611829	0.103915702611829
+4460	4157	3881	0.104147627332173	0.104147627332173
+4461	3881	844	0.102547271473588	0.102547271473588
+4462	844	4158	0.103915708789956	0.103915708789956
+4463	4158	4159	0.0473715373473714	0.0473715373473714
+4465	4160	4161	0.0487952389865543	0.0487952389865543
+4466	4161	4162	0.0503092120983125	0.0503092120983125
+4467	4162	4163	0.0998399649224705	0.0998399649224705
+4470	991	4165	0.0616573964011522	0.0616573964011522
+4471	4165	4166	0.0374515064164708	0.0374515064164708
+4472	4166	4167	0.0500586202169859	0.0500586202169859
+4473	4167	4168	0.0490747432154895	0.0490747432154895
+4474	4168	1546	0.0500170304502106	0.0500170304502106
+4475	1546	4169	0.0485801531295538	0.0485801531295538
+5773	5098	5099	0.136491222225544	0.136491222225544
+4479	4171	4172	0.0171013114970861	0.0171013114970861
+4480	4172	4173	0.100095278405447	0.100095278405447
+4481	4173	4174	0.0193707742575379	0.0193707742575379
+4482	4174	3125	0.0983746933912928	0.0983746933912928
+4483	3125	3149	0.017633000291927	0.017633000291927
+4485	3759	1483	0.205504619788951	0.205504619788951
+4486	1483	139	0.199306955290764	0.199306955290764
+3818	3634	3635	0.193271661183235	0.193271661183235
+3844	50	2744	0.0297683374213274	0.0297683374213274
+3819	3635	3636	0.259071020170312	0.259071020170312
+3820	3636	3637	0.220352934884474	0.220352934884474
+3821	3637	3638	0.0146799692899151	0.0146799692899151
+3822	3638	3629	0.546064092681382	0.546064092681382
+3823	3629	3628	0.0377891893344826	0.0377891893344826
+3848	3639	3640	0.0377019004254023	0.0377019004254023
+3824	3628	3641	0.274746435577415	0.274746435577415
+3827	3643	3630	0.145379834812045	0.145379834812045
+3829	3644	3645	0.10937380292523	0.10937380292523
+3831	3646	3647	0.118367900276814	0.118367900276814
+3833	3648	3649	0.0133410304783532	0.0133410304783532
+3834	3649	3650	0.0429585103622675	0.0429585103622675
+3835	3650	3651	0.0204151163658954	0.0204151163658954
+3836	3651	3652	0.035861428044368	0.035861428044368
+3837	3652	3653	0.0519097060940613	0.0519097060940613
+3838	3653	2733	0.0215181506261361	0.0215181506261361
+3839	2733	3184	0.0284884125498342	0.0284884125498342
+3840	3184	3654	0.0523000942930375	0.0523000942930375
+3841	3654	3655	0.0449577371290542	0.0449577371290542
+3842	3655	3656	0.0854917295991763	0.0854917295991763
+3843	3656	50	0.0260531877334927	0.0260531877334927
+3845	2744	3657	0.0566089274642789	0.0566089274642789
+3846	3657	3658	0.0492739020617726	0.0492739020617726
+3849	3640	3660	0.0409815373213546	0.0409815373213546
+3850	3660	3661	0.0430567519340905	0.0430567519340905
+3851	3661	3662	0.0468129367556475	0.0468129367556475
+3852	3662	3663	0.0487340718514498	0.0487340718514498
+3853	3663	3664	0.0766168893066023	0.0766168893066023
+3854	3664	3665	0.0775543535398568	0.0775543535398568
+3856	2887	3666	0.0966953683989245	0.0966953683989245
+3857	3666	3667	0.0610272459393337	0.0610272459393337
+3860	3669	3670	0.0315853053568594	0.0315853053568594
+3862	3671	3672	0.0504610774094253	0.0504610774094253
+3863	3672	3673	0.0499084817958282	0.0499084817958282
+3864	3673	3674	0.0598581313257637	0.0598581313257637
+3865	3674	3675	0.0415918035714469	0.0415918035714469
+3866	3675	3676	0.0971838117715375	0.0971838117715375
+3867	3676	3677	0.0757910145140814	0.0757910145140814
+3868	3677	3678	0.0241351496511796	0.0241351496511796
+3869	3678	3679	0.10921148844503	0.10921148844503
+3870	3679	3680	0.0604791133362521	0.0604791133362521
+3871	3680	3681	0.0497662614550786	0.0497662614550786
+3872	3681	3682	0.0284371260175335	0.0284371260175335
+3873	3682	3683	0.0775136719631998	0.0775136719631998
+3874	3683	3684	0.0986272672973807	0.0986272672973807
+3876	3686	1026	0.103637164673652	0.103637164673652
+5148	4657	4658	0.0518173498658282	0.0518173498658282
+3877	1026	3687	0.0559565437232701	0.0559565437232701
+3878	3687	3688	0.0511859173489266	0.0511859173489266
+3879	3688	3689	0.0520066703615513	0.0520066703615513
+3880	3689	3690	0.049253728288425	0.049253728288425
+3882	2886	3691	0.113429848834015	0.113429848834015
+3884	3215	3692	0.202752541360657	0.202752541360657
+3885	3692	1926	0.199353224720545	0.199353224720545
+3886	1926	3693	0.200351682125873	0.200351682125873
+3887	3693	3270	0.203854022504707	0.203854022504707
+3888	3270	3694	0.200935067748901	0.200935067748901
+3890	83	3519	0.205087956532059	0.205087956532059
+3892	3695	3696	0.201007421421966	0.201007421421966
+3897	3217	3701	0.1352188342505	0.1352188342505
+3898	131	1718	0.251512260994622	0.251512260994622
+15946	9759	9762	0.240661719520644	0.240661719520644
+3900	3702	3703	0.0933150678138448	0.0933150678138448
+3901	3703	3704	0.137025546490973	0.137025546490973
+3902	3704	3705	0.132801372713675	0.132801372713675
+3903	3705	1668	0.132757296812598	0.132757296812598
+3904	1668	3706	0.138337667643286	0.138337667643286
+3905	3706	2449	0.137198901653783	0.137198901653783
+3906	2449	3239	0.137027047572602	0.137027047572602
+3909	3708	3709	0.0594114493059888	0.0594114493059888
+3910	3709	109	0.057220909251565	0.057220909251565
+3913	3711	3712	0.139485170169946	0.139485170169946
+3914	3712	2811	0.114534953425458	0.114534953425458
+3918	3715	3716	0.0528065388297546	0.0528065388297546
+3919	3716	3717	0.0498986148500866	0.0498986148500866
+3920	3717	3718	0.0501983896755627	0.0501983896755627
+3921	3718	3722	0.0513311819624353	0.0513311819624353
+3922	3722	3723	0.0447895916462849	0.0447895916462849
+3923	3723	3724	0.0431436061631746	0.0431436061631746
+3924	3724	3725	0.0306469500311329	0.0306469500311329
+3926	3726	3727	0.194057523355391	0.194057523355391
+3927	3727	723	0.155998303022368	0.155998303022368
+3928	723	3728	0.0204200466887832	0.0204200466887832
+3929	3728	3729	0.122760919468851	0.122760919468851
+3930	3729	3730	0.0554195837686694	0.0554195837686694
+3931	3730	520	0.0841868989778494	0.0841868989778494
+3932	520	3731	0.0926590200371809	0.0926590200371809
+3933	3731	3732	0.0560537701957185	0.0560537701957185
+3937	3735	3736	0.177568883213635	0.177568883213635
+3939	3737	3738	0.0596027628340358	0.0596027628340358
+3940	3738	2286	0.015731383207611	0.015731383207611
+3942	191	3739	0.20409229769904	0.20409229769904
+3943	3739	3740	0.196754914184827	0.196754914184827
+3945	3741	3742	0.0963531048469524	0.0963531048469524
+3947	3743	1867	0.211893481628119	0.211893481628119
+3948	1867	3744	0.190309691295086	0.190309691295086
+3949	3744	3369	0.156379911113779	0.156379911113779
+3951	3746	3747	0.0084501441528746	0.0084501441528746
+3953	3749	3750	0.291896586304336	0.291896586304336
+3957	3752	3753	0.00678737857974005	0.00678737857974005
+3958	3753	3754	0.00811546596932882	0.00811546596932882
+3959	3754	605	0.11345488105994	0.11345488105994
+3966	3759	3760	0.0543424988109601	0.0543424988109601
+3967	3760	3761	0.0124828328696103	0.0124828328696103
+3969	3762	3763	0.109035140401267	0.109035140401267
+3970	3763	3764	0.13451246019454	0.13451246019454
+3971	3764	1077	0.0751290727356026	0.0751290727356026
+3972	1077	2521	0.125841042831383	0.125841042831383
+3974	3765	3766	0.0155018141702848	0.0155018141702848
+3975	3766	3769	0.0925922303926536	0.0925922303926536
+3976	3769	450	0.0446743427321934	0.0446743427321934
+3977	450	855	0.0454696499518695	0.0454696499518695
+3978	855	3770	0.0458292249661059	0.0458292249661059
+5269	4111	4741	0.0999126780220414	0.0999126780220414
+3979	3770	3771	0.0463680305523856	0.0463680305523856
+3982	3777	3778	0.0472655889206378	0.0472655889206378
+3983	3778	3456	0.0457775618734605	0.0457775618734605
+3984	3456	3779	0.0949352444381587	0.0949352444381587
+3985	3779	3780	0.0949175907228116	0.0949175907228116
+3986	3780	3781	0.0934360991992659	0.0934360991992659
+3987	3781	3782	0.0927263272279538	0.0927263272279538
+3988	3782	2659	0.0984051754942233	0.0984051754942233
+3989	2659	2053	0.0987467204032972	0.0987467204032972
+3990	2053	3783	0.0990728400130522	0.0990728400130522
+3991	3783	3784	0.0514218472521816	0.0514218472521816
+3992	3784	3785	0.0779176889813446	0.0779176889813446
+3993	3785	3786	0.0982592928032825	0.0982592928032825
+3994	3786	3344	0.100047583059044	0.100047583059044
+3995	3344	3787	0.0997075658602957	0.0997075658602957
+3998	3789	1013	0.0991145515008367	0.0991145515008367
+3999	1013	3790	0.0988154439008836	0.0988154439008836
+4000	3790	3147	0.100818484811759	0.100818484811759
+4001	3147	3128	0.0882379333310365	0.0882379333310365
+4002	3128	3791	0.10924064572907	0.10924064572907
+4003	3791	3792	0.0990892368110052	0.0990892368110052
+4004	3792	3793	0.0983279071551189	0.0983279071551189
+4005	3793	3794	0.0488397000978433	0.0488397000978433
+4006	3794	3795	0.0500279563406491	0.0500279563406491
+4007	3795	2868	0.0499678370514067	0.0499678370514067
+4008	2868	3796	0.048583428681526	0.048583428681526
+4009	3796	3797	0.0504566053315115	0.0504566053315115
+4011	3798	3799	0.0451531325504455	0.0451531325504455
+4012	3799	983	0.0519296915637561	0.0519296915637561
+4015	3801	3802	0.0483738114958222	0.0483738114958222
+4016	3802	3803	0.0519812355103751	0.0519812355103751
+4017	3803	3804	0.101642680761132	0.101642680761132
+4018	3804	3805	0.100202026962745	0.100202026962745
+4019	3805	3806	0.0490200510242293	0.0490200510242293
+4020	3806	3159	0.0527906095396228	0.0527906095396228
+4021	3159	3807	0.0508058777981011	0.0508058777981011
+4022	3807	3808	0.0547154240766913	0.0547154240766913
+4023	3808	3809	0.105580069148102	0.105580069148102
+4025	3810	3811	0.0543737037127348	0.0543737037127348
+16058	9242	237	0.236847878323095	0.236847878323095
+4026	3811	3812	0.108778018122892	0.108778018122892
+4027	3812	1620	0.10920973774803	0.10920973774803
+4029	3813	3814	0.083969278056869	0.083969278056869
+4031	3815	3816	0.139162136479248	0.139162136479248
+4032	3816	3817	0.128842029582485	0.128842029582485
+4034	3818	2303	0.104861015321702	0.104861015321702
+4035	2303	130	0.0947837852263858	0.0947837852263858
+4036	130	155	0.2039982188818	0.2039982188818
+4037	155	1719	0.251031715971117	0.251031715971117
+4040	3820	3821	0.253858034970465	0.253858034970465
+4041	3821	765	0.158798770965753	0.158798770965753
+4042	765	3822	0.38766252452626	0.38766252452626
+4044	3823	3824	0.6423341602363	0.6423341602363
+4045	3825	3826	0.0763938085811643	0.0763938085811643
+5338	4787	4788	0.201919584850824	0.201919584850824
+4049	3828	3829	0.0709013283805701	0.0709013283805701
+4051	3830	3831	0.161299122027925	0.161299122027925
+4052	3832	3833	0.0520709463921909	0.0520709463921909
+4054	3834	3835	0.133913000116738	0.133913000116738
+4055	3835	3836	0.135958385150602	0.135958385150602
+4059	3838	3839	0.195689058153451	0.195689058153451
+4061	3840	3841	0.104161008191779	0.104161008191779
+4062	3841	3842	0.204332097790775	0.204332097790775
+4063	3842	2989	0.198305038809848	0.198305038809848
+4064	2989	3843	0.202007841321225	0.202007841321225
+4065	3843	3844	0.201085745402869	0.201085745402869
+4066	3844	3845	0.203153756914823	0.203153756914823
+4067	3845	3846	0.201463782012409	0.201463782012409
+4068	3846	1694	0.201944163047273	0.201944163047273
+4069	1694	3847	0.201007884572681	0.201007884572681
+4070	3847	2442	0.173966646957408	0.173966646957408
+4071	2442	3848	0.171462594138623	0.171462594138623
+5362	4804	4805	0.138916058502817	0.138916058502817
+4072	3848	3849	0.15641185610528	0.15641185610528
+4073	3849	3850	0.155873108146064	0.155873108146064
+4074	3850	3851	0.11951230715733	0.11951230715733
+4075	3851	3852	0.0199150113624835	0.0199150113624835
+4078	2606	3854	0.176099789319583	0.176099789319583
+4081	3856	3857	0.204451648584923	0.204451648584923
+4082	3857	3858	0.27633741171005	0.27633741171005
+4084	3859	3860	0.194935828897222	0.194935828897222
+4085	3860	2553	0.201807589121279	0.201807589121279
+4086	2553	3861	0.201183796555208	0.201183796555208
+4087	3861	3862	0.206144933368939	0.206144933368939
+4088	3863	3864	0.174004040356707	0.174004040356707
+4089	3864	3865	0.176177241775495	0.176177241775495
+4090	3865	3866	0.0719661295510201	0.0719661295510201
+4091	3866	1862	0.105391351050826	0.105391351050826
+4092	1862	2607	0.183084733810089	0.183084733810089
+4094	3867	3868	0.135844661693153	0.135844661693153
+4096	1431	3869	0.122681533981215	0.122681533981215
+4099	3870	3871	0.0814181379314414	0.0814181379314414
+4101	3038	3872	0.194090812408951	0.194090812408951
+4103	3579	3873	0.140995166985651	0.140995166985651
+4104	3873	3874	0.0908684940539539	0.0908684940539539
+4108	2397	3876	0.142303739641396	0.142303739641396
+4110	3877	702	0.203534713775632	0.203534713775632
+4111	702	3878	0.201204188260029	0.201204188260029
+4113	3879	3880	0.176189861258557	0.176189861258557
+4114	3880	2357	0.178601291381029	0.178601291381029
+4115	2357	3881	0.172977248757485	0.172977248757485
+4116	3881	3882	0.173963704924205	0.173963704924205
+4117	3882	3883	0.177248873598787	0.177248873598787
+4118	3883	3884	0.165174683174039	0.165174683174039
+4120	3885	899	0.068233075024198	0.068233075024198
+4121	899	3886	0.136382558439915	0.136382558439915
+4123	3887	2246	0.064586200340924	0.064586200340924
+4126	3889	3890	0.173108811078515	0.173108811078515
+4128	3891	673	0.180805922237936	0.180805922237936
+4129	673	3892	0.00347134617206091	0.00347134617206091
+4131	3893	3894	0.173412160606882	0.173412160606882
+4132	3894	3686	0.239804659108201	0.239804659108201
+4133	3686	3895	0.139339505088047	0.139339505088047
+4134	3895	1293	0.0712429362693845	0.0712429362693845
+4136	3896	3897	0.00461464942878269	0.00461464942878269
+4137	3897	3898	0.00296969221564957	0.00296969221564957
+4138	3898	3899	0.135099018741423	0.135099018741423
+4139	3899	3900	0.133736401013675	0.133736401013675
+4140	3900	826	0.1432668721319	0.1432668721319
+4141	826	3567	0.140539270126583	0.140539270126583
+4142	3567	3901	0.141736858580205	0.141736858580205
+4143	3901	3902	0.138513379846183	0.138513379846183
+4144	3902	3903	0.137738276341516	0.137738276341516
+4145	3903	3041	0.133834213982	0.133834213982
+4146	3041	3904	0.143195912483998	0.143195912483998
+4147	3904	3905	0.00371612313723013	0.00371612313723013
+4148	3905	3906	0.138485181869722	0.138485181869722
+4150	1161	880	0.143460648556329	0.143460648556329
+4151	880	3907	0.137181190587279	0.137181190587279
+4152	3907	2788	0.133979203320047	0.133979203320047
+4154	3908	3909	0.11929025073176	0.11929025073176
+4155	3909	3910	0.092551367353814	0.092551367353814
+4157	734	1555	0.128698646905998	0.128698646905998
+4158	1555	3911	0.10223670466325	0.10223670466325
+4159	3911	3912	0.0209102658501846	0.0209102658501846
+4160	3913	3914	0.290781445277807	0.290781445277807
+4161	3914	3915	0.112536676265492	0.112536676265492
+4162	3915	3916	0.199777886092506	0.199777886092506
+4163	3916	3917	0.0912727874005277	0.0912727874005277
+4164	3917	3918	0.112620851967747	0.112620851967747
+4166	3919	1187	0.167283340526576	0.167283340526576
+4167	1187	3920	0.0212753866211399	0.0212753866211399
+4168	3920	3790	0.200229524215252	0.200229524215252
+4169	3790	3921	0.153151160013799	0.153151160013799
+4170	3921	3922	0.0549370836226997	0.0549370836226997
+4171	3923	3924	0.0360721076371334	0.0360721076371334
+4174	706	3926	0.117999308023824	0.117999308023824
+4175	3926	3702	0.0450373928319521	0.0450373928319521
+4176	3702	3927	0.114850773809758	0.114850773809758
+4177	3927	3928	0.0608860897951607	0.0608860897951607
+4178	3928	3929	0.107271550927247	0.107271550927247
+4180	3930	1666	0.1330788885459	0.1330788885459
+4181	1666	3931	0.137468360449037	0.137468360449037
+4182	3931	2447	0.134834989989903	0.134834989989903
+4183	2447	3237	0.140199730422516	0.140199730422516
+4184	3237	3933	0.138639782785987	0.138639782785987
+4185	3933	3934	0.138811739329711	0.138811739329711
+4186	3934	3935	0.134204059449961	0.134204059449961
+4187	3935	3936	0.123276584845079	0.123276584845079
+4189	3937	3938	0.126045478045544	0.126045478045544
+4190	3938	3939	0.0651492893105391	0.0651492893105391
+4191	3939	3940	0.0221401135391512	0.0221401135391512
+4192	3940	3941	0.0717318471783874	0.0717318471783874
+4195	3943	3944	0.176615684469352	0.176615684469352
+4196	3944	3947	0.176604135108539	0.176604135108539
+4197	3947	3948	0.122323573259462	0.122323573259462
+4198	3948	3949	0.0559214984515419	0.0559214984515419
+5481	4892	3459	0.0941890822437752	0.0941890822437752
+4199	3949	3950	0.176269184745743	0.176269184745743
+4200	3950	3951	0.05590117541301	0.05590117541301
+4201	3951	3952	0.122088386939327	0.122088386939327
+4202	3952	3953	0.0603148497739477	0.0603148497739477
+4203	3953	3954	0.117311769773874	0.117311769773874
+4204	3954	3955	0.0719490460324168	0.0719490460324168
+4205	3955	3956	0.106538056002006	0.106538056002006
+4206	3956	3957	0.177243078500478	0.177243078500478
+4207	3957	2623	0.176288453506598	0.176288453506598
+4208	2623	3958	0.177546592271005	0.177546592271005
+4209	3958	3960	0.168966442415293	0.168966442415293
+4210	3960	3961	0.111586533238696	0.111586533238696
+4213	3963	3964	0.265623714493738	0.265623714493738
+4214	3965	3966	0.511616430940774	0.511616430940774
+4216	1726	3967	0.0896760315303362	0.0896760315303362
+4217	3967	3968	0.0558858522230369	0.0558858522230369
+4218	3968	3969	0.109150490871186	0.109150490871186
+4219	3970	3971	0.202576252334461	0.202576252334461
+4220	3971	3972	0.199655908563659	0.199655908563659
+4221	3972	3973	0.201550568367269	0.201550568367269
+4223	3974	3975	0.0432784618651284	0.0432784618651284
+4224	3975	3976	0.0119312921672435	0.0119312921672435
+4225	3976	3977	0.0412856988441699	0.0412856988441699
+4226	3977	3978	0.00523979822286268	0.00523979822286268
+4227	3978	3979	0.0456580481243959	0.0456580481243959
+4228	3979	3980	0.0491163050630244	0.0491163050630244
+4229	3980	3981	0.0519851803283443	0.0519851803283443
+4230	3981	1662	0.0500503143032265	0.0500503143032265
+4231	1662	3982	0.0526516968240738	0.0526516968240738
+4232	3982	3983	0.0511950181994891	0.0511950181994891
+4233	3983	3984	0.0508169123465841	0.0508169123465841
+16267	5831	9866	0.203286686616951	0.203286686616951
+4234	3984	3985	0.0684638947838088	0.0684638947838088
+4235	3985	3986	0.0523508233196537	0.0523508233196537
+4236	3986	3987	0.0497154897229056	0.0497154897229056
+4237	3987	2423	0.0326188031399601	0.0326188031399601
+4238	2423	3988	0.017392306107988	0.017392306107988
+4239	3988	3989	0.0330055324383025	0.0330055324383025
+4240	3989	3990	0.0159023099545875	0.0159023099545875
+4241	3990	3991	0.049454634736183	0.049454634736183
+4244	3992	3993	0.049036974566433	0.049036974566433
+4245	3993	3994	0.0522504960301449	0.0522504960301449
+4246	3994	3995	0.113779671004445	0.113779671004445
+4247	3995	3996	0.292866933952659	0.292866933952659
+4248	3996	3997	0.135719788812757	0.135719788812757
+4249	3997	2492	0.131298969381918	0.131298969381918
+4250	2492	2838	0.134023703042734	0.134023703042734
+4252	3998	3999	0.177673273882055	0.177673273882055
+4253	3999	4000	0.178724202369687	0.178724202369687
+4254	4000	4001	0.0914256352612055	0.0914256352612055
+4255	1820	4002	0.0854127756728086	0.0854127756728086
+4256	4002	4003	0.0734940058422204	0.0734940058422204
+4257	4003	4004	0.122094789640982	0.122094789640982
+4260	4006	4007	0.167588698662527	0.167588698662527
+4261	4007	4008	0.199884724997956	0.199884724997956
+4262	4008	4009	0.0119868161378673	0.0119868161378673
+4263	371	1930	0.0503613323391642	0.0503613323391642
+4264	1930	1940	0.0838300296248713	0.0838300296248713
+4265	1940	4010	0.121947021037263	0.121947021037263
+4266	4010	4011	0.132309346356631	0.132309346356631
+4267	4011	4012	0.135165905730987	0.135165905730987
+4268	4012	4013	0.133333876014397	0.133333876014397
+4270	4014	12	0.13580168948729	0.13580168948729
+4271	12	4015	0.00286884184731271	0.00286884184731271
+4272	4015	4016	0.132033234839576	0.132033234839576
+4273	4016	4017	0.133567851795101	0.133567851795101
+4274	4017	4018	0.134726706981619	0.134726706981619
+4275	4018	4019	0.130892412762661	0.130892412762661
+4276	4019	4020	0.134212591203429	0.134212591203429
+4277	4020	4021	0.133433911973159	0.133433911973159
+4278	4021	4022	0.137281795417315	0.137281795417315
+4280	4023	4024	0.0689781307016059	0.0689781307016059
+4281	4024	4025	0.0667654814327236	0.0667654814327236
+5576	4965	4966	0.209377126181678	0.209377126181678
+4290	4029	1890	0.0489976212541555	0.0489976212541555
+4291	1890	4030	0.050071397214541	0.050071397214541
+4293	4031	2858	0.24990384929118	0.24990384929118
+4301	1703	4036	0.19686036595886	0.19686036595886
+4302	4036	4037	2.41616418836648	2.41616418836648
+4303	4038	4039	0.0356847858191414	0.0356847858191414
+4305	4040	4041	0.105425319125276	0.105425319125276
+4306	4041	2256	0.104244973047941	0.104244973047941
+4307	2256	4042	0.103519804078257	0.103519804078257
+4309	3999	4043	0.105003607246795	0.105003607246795
+17679	10164	8262	0.207810693253635	0.207810693253635
+4315	4048	3390	0.0527412463264476	0.0527412463264476
+4316	3390	4049	0.0507539981345734	0.0507539981345734
+4317	4049	4050	0.0520284075919789	0.0520284075919789
+4318	4050	3408	0.0512087059000605	0.0512087059000605
+4319	3408	4051	0.0486341315555791	0.0486341315555791
+4320	4051	4053	0.052533034496925	0.052533034496925
+4321	4053	4054	0.0524475036704537	0.0524475036704537
+4322	4054	4055	0.0498829272923159	0.0498829272923159
+4327	4058	4059	0.051190260382352	0.051190260382352
+4328	4059	3864	0.0501467689985101	0.0501467689985101
+4329	3864	4060	0.0537746384669306	0.0537746384669306
+4330	4060	4061	0.0463502740457097	0.0463502740457097
+4331	4061	4062	0.0561959746447094	0.0561959746447094
+4357	4082	4083	0.157884781724872	0.157884781724872
+4332	4062	4063	0.69866413721226	0.69866413721226
+4333	1273	4064	0.135036752261437	0.135036752261437
+4334	4064	4065	0.129590074598046	0.129590074598046
+4335	4065	4066	0.132616575444838	0.132616575444838
+4344	4073	1390	0.0502435222683857	0.0502435222683857
+4345	1390	4074	0.0493046140403362	0.0493046140403362
+4346	4074	4075	0.0491422603337744	0.0491422603337744
+4351	4078	4079	0.241190031557862	0.241190031557862
+4352	4079	4080	0.258242852029617	0.258242852029617
+4353	4080	1629	0.215143938153131	0.215143938153131
+4354	1629	3965	0.0839336295727996	0.0839336295727996
+4364	1214	4088	0.0489795542886091	0.0489795542886091
+4365	4088	4089	0.0498843047924572	0.0498843047924572
+4366	4089	4090	0.0487540785114809	0.0487540785114809
+4367	4090	2167	0.0506698655714413	0.0506698655714413
+4368	2167	4091	0.0491950203791528	0.0491950203791528
+4369	4091	4092	0.0488189222411035	0.0488189222411035
+4378	1289	4100	0.0495624053047352	0.0495624053047352
+4379	4100	4101	0.0531970268279652	0.0531970268279652
+4380	4101	4102	0.0527877658733148	0.0527877658733148
+4381	4102	4103	0.0491029186922276	0.0491029186922276
+4382	4103	4104	0.053313065445571	0.053313065445571
+18127	10262	10268	0.40641745688608	0.40641745688608
+4394	4109	2351	0.147790101003017	0.147790101003017
+4395	2351	4110	0.174343137234229	0.174343137234229
+4396	4110	4111	0.175176728788125	0.175176728788125
+4397	4111	4112	0.174887842567366	0.174887842567366
+4398	4112	4113	0.163616410243985	0.163616410243985
+14847	9428	3841	0.049872105512027	0.049872105512027
+14848	3841	9429	0.0507867978829422	0.0507867978829422
+14849	9429	5551	0.0504705023896622	0.0504705023896622
+14850	5551	9430	0.0160626819091423	0.0160626819091423
+324	207	268	0.0408317858918375	0.0408317858918375
+14851	9430	9431	0.771810690268124	0.771810690268124
+14860	2500	9438	0.0367185859571526	0.0367185859571526
+14866	8307	6350	0.0205009601935279	0.0205009601935279
+14871	2450	3240	0.14088111565627	0.14088111565627
+14873	5733	5517	0.138655367104914	0.138655367104914
+14874	5517	9442	0.136397019838813	0.136397019838813
+14875	9442	6920	0.112250527906817	0.112250527906817
+14877	6505	9443	0.246198454475103	0.246198454475103
+14878	9443	9444	0.0254384620147021	0.0254384620147021
+14879	9444	6994	0.4499142851013	0.4499142851013
+14880	6994	9445	0.29050322706034	0.29050322706034
+14881	9445	2104	0.111341186723118	0.111341186723118
+14882	2104	9446	1.81122771510753	1.81122771510753
+14883	5328	6848	0.0996617587695029	0.0996617587695029
+14884	6848	9012	0.0991299503198925	0.0991299503198925
+14886	7486	7456	0.0976540916227753	0.0976540916227753
+14888	5693	9010	0.102057355365657	0.102057355365657
+14889	9010	4967	0.099866873546368	0.099866873546368
+14890	4967	9021	0.10207838306375	0.10207838306375
+14894	8146	9004	0.111615935651551	0.111615935651551
+14896	8691	6102	0.204110733056615	0.204110733056615
+14898	8202	8814	0.0690569326601991	0.0690569326601991
+14900	8175	8161	0.034748414576393	0.034748414576393
+14901	8161	9450	0.0195282497941032	0.0195282497941032
+14902	9450	9315	0.339258874320837	0.339258874320837
+14904	8694	8155	0.0907837492404858	0.0907837492404858
+14905	8155	7617	0.0954335805182596	0.0954335805182596
+14906	7617	7270	0.0932816974435063	0.0932816974435063
+14908	4159	8695	0.0152616593160753	0.0152616593160753
+14909	8695	8156	0.0918092963851245	0.0918092963851245
+14910	8156	7618	0.0923894575376538	0.0923894575376538
+14911	7618	7271	0.0946959525813305	0.0946959525813305
+14914	2016	353	0.0344076794786212	0.0344076794786212
+14915	353	9451	0.0583270070041971	0.0583270070041971
+14916	9451	2762	0.099099248852826	0.099099248852826
+14917	2762	7003	0.098484917717332	0.098484917717332
+14918	7003	2266	0.0978645165955224	0.0978645165955224
+14919	2266	3595	0.100545762919748	0.100545762919748
+14920	3595	7518	0.100532638471033	0.100532638471033
+14921	7518	2095	0.100840428744565	0.100840428744565
+14922	2095	5977	0.100495257348787	0.100495257348787
+14923	5977	7667	0.098120652849283	0.098120652849283
+14924	7667	2331	0.102096265330692	0.102096265330692
+14925	2331	9453	0.0789173504157379	0.0789173504157379
+14926	8149	7608	0.0961605881004872	0.0961605881004872
+14927	7608	7261	0.102411721946463	0.102411721946463
+14928	7261	7598	0.095880146438169	0.095880146438169
+14929	7598	2021	0.09187670783236	0.09187670783236
+14930	2021	3354	0.0948528618506519	0.0948528618506519
+14932	2767	7012	0.0931566808998339	0.0931566808998339
+14934	9454	9455	0.0975625637539845	0.0975625637539845
+14937	8700	8158	0.0941289748217691	0.0941289748217691
+14939	7604	7255	0.0976568291897231	0.0976568291897231
+14940	7255	7591	0.0955299991432501	0.0955299991432501
+14941	7591	9173	0.0963387600574313	0.0963387600574313
+14942	9173	9456	0.0980688321229376	0.0980688321229376
+14943	9456	2750	0.102866303298183	0.102866303298183
+14944	2750	7014	0.0961030844605866	0.0961030844605866
+14945	7014	8215	0.0956816865795296	0.0956816865795296
+14947	8212	7523	0.100548507087909	0.100548507087909
+14948	7523	2123	0.0946806328213609	0.0946806328213609
+14949	2123	5989	0.102767406722396	0.102767406722396
+14950	5989	7670	0.0976490581696009	0.0976490581696009
+15962	9768	6397	0.0094036846623539	0.0094036846623539
+14968	7264	7583	0.0956208531243363	0.0956208531243363
+14969	7583	2000	0.0924757762963627	0.0924757762963627
+14970	2000	3360	0.0937229366395869	0.0937229366395869
+14971	3360	2754	0.0967493265415074	0.0967493265415074
+14973	7005	2280	0.0993735606220099	0.0993735606220099
+14974	2280	3602	0.103462577447113	0.103462577447113
+14975	3602	7527	0.0995273521026476	0.0995273521026476
+14976	7527	2135	0.0983330050282197	0.0983330050282197
+14977	2135	5992	0.103459989161242	0.103459989161242
+14978	5992	7672	0.100271460506145	0.100271460506145
+14979	7672	9462	3.03786386467958	3.03786386467958
+14980	5809	9463	0.110364660453643	0.110364660453643
+14989	9464	5043	0.119299198506528	0.119299198506528
+14990	5043	7994	0.118519999914902	0.118519999914902
+14991	7994	9236	0.117759209590851	0.117759209590851
+14992	9236	7973	0.0614780310106107	0.0614780310106107
+14994	7142	5131	0.10575888699282	0.10575888699282
+14995	5131	4724	0.10504840556341	0.10504840556341
+14996	4724	6791	0.107330054626072	0.107330054626072
+14997	6791	7363	0.103200510788566	0.103200510788566
+14998	7363	5422	0.104113985923971	0.104113985923971
+14999	5422	8554	0.105490524385859	0.105490524385859
+15000	8554	3893	0.111457422157238	0.111457422157238
+15001	3893	1024	0.103888468957379	0.103888468957379
+15002	1024	9465	0.0550364598534795	0.0550364598534795
+15003	9465	6269	0.0513684711391166	0.0513684711391166
+15006	9467	9468	0.0801572222360596	0.0801572222360596
+15007	9468	5030	0.106840142374901	0.106840142374901
+18579	3437	7765	0.0485278339531173	0.0485278339531173
+15009	6619	8699	0.0954507670467869	0.0954507670467869
+15010	8699	9469	0.014222614535116	0.014222614535116
+15013	7107	455	0.0456695914542558	0.0456695914542558
+15015	860	9470	0.0919474974486486	0.0919474974486486
+15016	9470	9471	0.0500014374448159	0.0500014374448159
+15017	9471	6021	0.0453621576916579	0.0453621576916579
+15018	6021	9472	0.0470758089061738	0.0470758089061738
+15019	9472	3460	0.0470036762545936	0.0470036762545936
+15020	3460	7685	0.0954954207572325	0.0954954207572325
+15021	7685	8021	0.0933841388460347	0.0933841388460347
+15022	8021	6698	0.0960778131259482	0.0960778131259482
+15023	6698	4136	0.0911259816816344	0.0911259816816344
+15025	2663	8548	0.0930424439627818	0.0930424439627818
+15026	8548	8547	0.100542623889621	0.100542623889621
+15027	8547	7338	0.099089032401214	0.099089032401214
+15028	7338	7883	0.0990804723784167	0.0990804723784167
+15030	3337	5025	0.101286501750056	0.101286501750056
+15031	5025	9473	0.0504081121726349	0.0504081121726349
+15032	9473	8728	0.0508783896228212	0.0508783896228212
+15033	8728	3720	0.054613750451979	0.054613750451979
+16212	9849	7734	1.41107486941703	1.41107486941703
+15034	3720	6265	0.0510651820396187	0.0510651820396187
+15035	6265	9474	0.0526179865653065	0.0526179865653065
+15036	9474	1019	0.0530796783692756	0.0530796783692756
+15037	1019	3889	0.105690016076173	0.105690016076173
+15038	3889	8550	0.11082035773048	0.11082035773048
+15039	8550	5418	0.102756492849076	0.102756492849076
+15040	5418	7359	0.109377907466232	0.109377907466232
+15041	7359	6787	0.102485488457906	0.102485488457906
+15044	9414	5118	0.0507526262754685	0.0507526262754685
+15047	7151	9476	0.0506273642355044	0.0506273642355044
+15048	9476	8834	0.0494473424354765	0.0494473424354765
+15049	8834	6016	0.046054397015081	0.046054397015081
+15051	979	5330	0.0485530564436786	0.0485530564436786
+15052	5330	8003	0.0503217691422663	0.0503217691422663
+15053	8003	6342	0.0507584862620106	0.0507584862620106
+15054	6342	5051	0.0488177307212986	0.0488177307212986
+15055	5051	6690	0.0488248354973201	0.0488248354973201
+15056	6690	9477	0.0468154058850837	0.0468154058850837
+15059	9313	7101	0.0478106623792446	0.0478106623792446
+15060	7101	8880	0.0490142389962295	0.0490142389962295
+15061	8880	7420	0.0493429457759385	0.0493429457759385
+15062	7420	8874	0.0545354482418663	0.0545354482418663
+15064	7430	8793	0.0542698797022772	0.0542698797022772
+15065	8793	7862	0.0521693260437922	0.0521693260437922
+395	399	5	0.209508946543956	0.209508946543956
+15066	7862	8787	0.05844527692302	0.05844527692302
+15067	8787	7957	0.0531372993824669	0.0531372993824669
+15068	7957	9478	0.0541270300244316	0.0541270300244316
+15069	9478	9479	0.108902531529915	0.108902531529915
+15072	4481	9480	0.0910756678915429	0.0910756678915429
+15074	8706	9481	0.10111000413597	0.10111000413597
+15075	9481	9175	0.105113918003998	0.105113918003998
+15076	9175	7259	0.105567381342615	0.105567381342615
+15077	7259	7589	0.103856965848258	0.103856965848258
+15079	3366	2770	0.104765166628809	0.104765166628809
+15080	2770	9176	0.11373488606323	0.11373488606323
+15081	9176	2260	0.11073804654165	0.11073804654165
+15082	2260	3611	0.0999509846289259	0.0999509846289259
+15083	3611	7516	0.100649754002954	0.100649754002954
+15084	7516	2109	0.103508831759163	0.103508831759163
+15085	2109	5999	0.10202033489304	0.10202033489304
+15086	5999	7660	0.0994984857017093	0.0994984857017093
+15087	7660	2328	0.04986487628669	0.04986487628669
+15118	9482	9225	0.0953635356752473	0.0953635356752473
+15120	9455	301	0.129823177853557	0.129823177853557
+15116	9490	8276	0.218414071885788	0.218414071885788
+15121	301	8269	0.152583336977896	0.152583336977896
+15126	226	8268	0.0760384791094216	0.0760384791094216
+15128	225	9482	0.128957275100235	0.128957275100235
+15130	9491	460	0.0667391949721685	0.0667391949721685
+15132	460	575	0.113707068563865	0.113707068563865
+15133	575	6199	0.0290617477448439	0.0290617477448439
+15135	9492	8244	0.032549465488295	0.032549465488295
+15136	8244	9493	0.0198582826309584	0.0198582826309584
+15138	6689	228	0.0134361080204136	0.0134361080204136
+15139	228	9494	0.0329072670561094	0.0329072670561094
+15140	9494	9495	0.0242107567854742	0.0242107567854742
+15142	9496	9497	0.0238335404645399	0.0238335404645399
+15143	9497	9498	0.0343814713189183	0.0343814713189183
+15966	7623	6935	0.205023089639109	0.205023089639109
+15967	6935	5889	0.201769701232267	0.201769701232267
+15968	5889	7449	0.284161489263658	0.284161489263658
+15969	7449	1636	0.117888722564013	0.117888722564013
+15970	1636	8998	0.102786876242831	0.102786876242831
+15972	4214	8094	0.0961834163674376	0.0961834163674376
+15973	8094	194	0.104992906429488	0.104992906429488
+15974	194	2923	0.0991259111035959	0.0991259111035959
+15975	2923	5306	0.0991964539292107	0.0991964539292107
+15976	5306	1461	0.0983899476582488	0.0983899476582488
+15977	1461	5434	0.104614166406686	0.104614166406686
+15978	5434	5973	0.107640436770916	0.107640436770916
+15979	5973	9014	0.00660364948230504	0.00660364948230504
+15980	9014	7915	0.0975740293794765	0.0975740293794765
+15981	7915	6437	0.105749746230322	0.105749746230322
+16016	9786	9159	0.00790012825467591	0.00790012825467591
+15982	6437	4420	0.102051245715481	0.102051245715481
+15985	5328	7056	0.0812625038007973	0.0812625038007973
+15986	7056	9772	0.0538313043287529	0.0538313043287529
+15987	9772	4318	0.0518980074233638	0.0518980074233638
+15988	4318	9452	0.0516277273460522	0.0516277273460522
+15990	4506	4116	0.0518058126204102	0.0518058126204102
+15991	4116	7809	0.0517374039809394	0.0517374039809394
+15992	7809	5068	0.0991665346425536	0.0991665346425536
+15993	5068	9773	0.0531370753578357	0.0531370753578357
+15994	9773	6836	0.0533167080983746	0.0533167080983746
+15995	6836	6978	0.101324072393449	0.101324072393449
+15996	6978	7941	0.102826343168107	0.102826343168107
+15997	7941	9015	0.0975512129036908	0.0975512129036908
+15998	9015	6780	0.448938989090037	0.448938989090037
+15999	6780	9774	0.408854845876832	0.408854845876832
+16000	9076	9768	0.0663101767153915	0.0663101767153915
+16004	9776	1455	0.0526013194004238	0.0526013194004238
+16006	9777	1736	0.0786842572590025	0.0786842572590025
+16092	526	9805	0.0239836164906123	0.0239836164906123
+16044	9806	9807	0.10708389115039	0.10708389115039
+16046	9808	9779	0.598201231733375	0.598201231733375
+16048	9809	8448	0.00611949423172489	0.00611949423172489
+16050	497	315	0.38487204905166	0.38487204905166
+16051	315	9125	0.309277404563432	0.309277404563432
+16053	9092	238	0.378305028269765	0.378305028269765
+14687	2318	2393	0.204381692629994	0.204381692629994
+16054	238	599	0.20185675523074	0.20185675523074
+16055	599	9810	1.85367980178975	1.85367980178975
+16057	4648	9242	0.316343707887743	0.316343707887743
+16530	9931	9230	0.37930803087461	0.37930803087461
+16060	8979	9416	0.148643981954463	0.148643981954463
+16062	9129	442	0.133338694466943	0.133338694466943
+16063	442	341	0.15400049730887	0.15400049730887
+16064	341	8432	0.0419891636299648	0.0419891636299648
+16066	8912	8951	0.033170976893888	0.033170976893888
+16068	9812	8911	0.0471463735469582	0.0471463735469582
+16070	8259	6154	0.322113932922047	0.322113932922047
+16072	8262	9813	0.347409770060633	0.347409770060633
+16073	9813	8849	0.384076686987265	0.384076686987265
+16075	8850	8934	0.249988221702048	0.249988221702048
+15149	1055	2652	0.0975577285651678	0.0975577285651678
+15178	9518	9519	0.0502534780761684	0.0502534780761684
+15150	2652	6953	0.198623612037648	0.198623612037648
+15152	9492	9502	0.376572648781266	0.376572648781266
+15156	3293	102	0.41551161582069	0.41551161582069
+15160	4010	9505	0.052772682936521	0.052772682936521
+15161	9505	7047	0.0525680538450832	0.0525680538450832
+15162	7047	7019	0.0303888581356532	0.0303888581356532
+15163	7019	9506	0.0673030688563473	0.0673030688563473
+15164	9506	9507	0.0483154741652978	0.0483154741652978
+15165	9507	7386	0.0202051235057141	0.0202051235057141
+16629	9962	9963	0.200783522780218	0.200783522780218
+15167	9508	9509	0.0505081496090435	0.0505081496090435
+15169	3381	9510	0.054679375210741	0.054679375210741
+15170	9510	9511	0.0487967465713328	0.0487967465713328
+15175	9515	9516	0.0511072604930319	0.0511072604930319
+15176	9516	9517	0.199298430530572	0.199298430530572
+15177	9517	9518	0.0506626460359665	0.0506626460359665
+15179	9519	9520	0.0992839733792875	0.0992839733792875
+2659	2617	2618	0.0492730897550554	0.0492730897550554
+15180	9520	5591	0.0515928611698618	0.0515928611698618
+15181	5591	9521	0.0485416940170638	0.0485416940170638
+15182	9521	7534	0.0495967074681937	0.0495967074681937
+15183	7534	9522	0.687013260502188	0.687013260502188
+15184	4010	253	0.115254186613677	0.115254186613677
+15185	253	9523	0.265666797076755	0.265666797076755
+16090	9493	9818	0.0359382002911722	0.0359382002911722
+16093	9805	9821	0.0110994776170347	0.0110994776170347
+16096	9495	9822	0.0517988653877033	0.0517988653877033
+16097	9822	9823	0.0110663007110829	0.0110663007110829
+16098	9823	525	0.0383908840803154	0.0383908840803154
+16099	525	9824	0.0469464980296333	0.0469464980296333
+16107	214	9827	0.778079889437356	0.778079889437356
+16108	9827	8266	0.110384878461573	0.110384878461573
+16109	8266	8259	0.22035773346297	0.22035773346297
+16111	426	5290	0.135279903383581	0.135279903383581
+16112	5290	6969	0.13394711160262	0.13394711160262
+16113	6969	9	0.133723176212026	0.133723176212026
+12362	8672	8673	0.0280927507040958	0.0280927507040958
+16114	9	6393	0.135759876984547	0.135759876984547
+16116	543	2417	0.140823258017981	0.140823258017981
+16117	2417	8309	0.134744289641959	0.134744289641959
+16121	9523	8323	0.0490645159279825	0.0490645159279825
+16122	8323	2296	0.111956296963114	0.111956296963114
+16123	2296	425	0.133707313641353	0.133707313641353
+16125	8580	9121	0.223068039429751	0.223068039429751
+16129	4649	7955	0.0999111170250792	0.0999111170250792
+16130	7955	9828	0.0800171872297717	0.0800171872297717
+16131	9829	8581	0.047687571765354	0.047687571765354
+16133	9073	1815	0.113861635058861	0.113861635058861
+16134	1815	9030	0.0294613091189667	0.0294613091189667
+16135	9030	9035	0.0740720067279475	0.0740720067279475
+16136	9035	2259	0.0101253625653209	0.0101253625653209
+16137	2259	6127	0.0869883467865613	0.0869883467865613
+16138	6127	3970	0.0982525233162176	0.0982525233162176
+16139	3970	4005	0.0213357195383616	0.0213357195383616
+16170	9839	7732	1.81004213705151	1.81004213705151
+16140	4005	9831	0.0527909920856998	0.0527909920856998
+16143	7028	9832	0.0518403992809488	0.0518403992809488
+16144	9832	1405	0.0193610465151665	0.0193610465151665
+16145	1405	9086	0.0330290864914803	0.0330290864914803
+16146	9086	9833	0.0517615954401031	0.0517615954401031
+16147	9833	7389	0.013992344500971	0.013992344500971
+16148	7389	7381	0.039974198258354	0.039974198258354
+16149	7381	5215	0.0612246627137571	0.0612246627137571
+16150	5215	3395	0.05711231452959	0.05711231452959
+16152	7953	9834	0.0172080507351113	0.0172080507351113
+16154	9834	274	0.0658337540289098	0.0658337540289098
+16156	2189	9835	0.248404343096233	0.248404343096233
+16214	8735	9837	1.99433693652165	1.99433693652165
+16215	8737	9838	0.871081020569746	0.871081020569746
+4419	2776	4130	0.131599235651272	0.131599235651272
+16159	9143	9028	0.680206597840058	0.680206597840058
+16163	722	8058	0.174054831255352	0.174054831255352
+16164	8058	521	0.0821177779256467	0.0821177779256467
+16165	521	6603	0.0924366308750619	0.0924366308750619
+16166	6603	5373	0.180047417371753	0.180047417371753
+16168	1948	2528	0.0688038536836977	0.0688038536836977
+16333	7146	2907	0.104983935013538	0.104983935013538
+16334	2907	7925	0.0494998939900097	0.0494998939900097
+16338	3444	3467	0.0304982971000002	0.0304982971000002
+16339	3467	8082	0.246312262462312	0.246312262462312
+16342	8704	8153	0.0931754474511838	0.0931754474511838
+16343	8153	7614	0.0941189496630448	0.0941189496630448
+16344	7614	7267	0.0948021938707784	0.0948021938707784
+16345	7267	7586	0.0921634745405222	0.0921634745405222
+16346	7586	7587	0.0431064926802277	0.0431064926802277
+16347	7587	2005	0.0500940428381568	0.0500940428381568
+16348	2005	3364	0.0956080752868491	0.0956080752868491
+16349	3364	2759	0.0936601356465838	0.0936601356465838
+16350	2759	7009	0.0948690491965415	0.0948690491965415
+16352	2285	3605	0.100419536914451	0.100419536914451
+16353	3605	7531	0.0985834303955712	0.0985834303955712
+16354	7531	2140	0.105692387990087	0.105692387990087
+16355	2140	5996	0.104777507715381	0.104777507715381
+16356	5996	7676	0.0990116406010299	0.0990116406010299
+16357	7676	9874	1.60848579675559	1.60848579675559
+17199	2711	10073	0.10997712384001	0.10997712384001
+16358	9875	2326	1.55889022258017	1.55889022258017
+16360	5997	2127	0.151773007567564	0.151773007567564
+16361	2127	3609	0.151558147644208	0.151558147644208
+16362	3609	7010	0.212760869396779	0.212760869396779
+16365	3365	2006	0.0553745270182344	0.0553745270182344
+16366	2006	7588	0.0502101113635407	0.0502101113635407
+16367	7588	7258	0.104315488387994	0.104315488387994
+16368	7258	7615	0.106145187491952	0.106145187491952
+16369	7615	9877	0.104437372352784	0.104437372352784
+16429	9892	3407	0.0665957848901693	0.0665957848901693
+16430	3407	9893	0.16801404607557	0.16801404607557
+16433	9895	9896	0.440540235104303	0.440540235104303
+16436	9897	9898	0.0704932318773383	0.0704932318773383
+16438	95	3655	0.111235679997702	0.111235679997702
+16440	9899	5747	0.0711149911978779	0.0711149911978779
+16445	9902	9903	0.536321309295718	0.536321309295718
+16453	9908	9909	0.550826257700494	0.550826257700494
+16458	9907	9908	0.00771583659604379	0.00771583659604379
+16460	9909	9912	0.0865311626257968	0.0865311626257968
+16461	9912	9910	0.0378168798460609	0.0378168798460609
+16471	3282	9916	0.18653100874984	0.18653100874984
+16473	9917	8680	0.0249041944601551	0.0249041944601551
+19510	10535	10536	0.0273195782326388	0.0273195782326388
+16475	8507	9918	0.021850852998121	0.021850852998121
+16476	9918	3018	0.0101317448895217	0.0101317448895217
+16478	9919	9920	0.0829003664734834	0.0829003664734834
+16479	9921	3681	0.0300651916457247	0.0300651916457247
+16668	9926	9974	0.105582813458159	0.105582813458159
+16669	9588	1633	0.0730557533632891	0.0730557533632891
+16671	9928	9975	0.0177169257267767	0.0177169257267767
+117	124	125	0.0336263849765442	0.0336263849765442
+16672	9975	9929	0.0234356081852519	0.0234356081852519
+16674	9976	9977	0.0468170562405583	0.0468170562405583
+16710	104	7825	0.0602462277844684	0.0602462277844684
+16712	104	3757	0.402008044434906	0.402008044434906
+16713	3757	1487	0.204145741130723	0.204145741130723
+16714	1487	132	0.199447130341484	0.199447130341484
+16716	1701	5546	0.198096603236586	0.198096603236586
+16777	69	3510	0.205561826495526	0.205561826495526
+4421	1201	4132	0.0220332988005433	0.0220332988005433
+16718	7283	485	0.11761309283436	0.11761309283436
+16720	10003	3244	0.0554692551325786	0.0554692551325786
+16721	3244	7234	0.20486059291662	0.20486059291662
+16722	7234	1896	0.200393401337734	0.200393401337734
+16723	1896	6106	0.199619177779868	0.199619177779868
+16724	6106	3190	0.204209613390108	0.204209613390108
+16725	3190	3074	0.20155062603718	0.20155062603718
+17204	10076	9899	0.140445516840247	0.140445516840247
+17206	10077	9891	0.365702001724341	0.365702001724341
+17210	9916	551	0.0168353379628002	0.0168353379628002
+17211	551	10077	0.029511971826839	0.029511971826839
+17221	9830	5174	0.203086414023487	0.203086414023487
+17225	7299	3774	0.0270450210392685	0.0270450210392685
+17227	10078	240	0.11490035547177	0.11490035547177
+17229	240	241	0.0697724132050665	0.0697724132050665
+17230	241	242	0.0623380559401012	0.0623380559401012
+17231	242	243	0.121807717540091	0.121807717540091
+17238	246	247	0.10870569104286	0.10870569104286
+17239	247	248	0.0772679392991742	0.0772679392991742
+17241	235	3406	0.0743704107751119	0.0743704107751119
+17242	3406	10079	0.167074762801468	0.167074762801468
+17244	331	10014	0.0356018290483491	0.0356018290483491
+17245	10014	8533	0.134990804356131	0.134990804356131
+17247	510	8534	0.190527366373376	0.190527366373376
+17249	9649	6335	0.0185334131201332	0.0185334131201332
+17250	6335	10080	0.0823637888630556	0.0823637888630556
+17251	10080	3812	0.199228355515768	0.199228355515768
+17252	3812	5918	0.151375161417453	0.151375161417453
+17254	917	2204	0.201707005619294	0.201707005619294
+17255	2204	4853	0.158074944552835	0.158074944552835
+17506	10119	8389	0.0881257330115891	0.0881257330115891
+17514	10115	4493	0.0857000040414071	0.0857000040414071
+17515	4493	10122	0.00789608138487867	0.00789608138487867
+17516	10122	10123	0.0829902602540724	0.0829902602540724
+17517	10123	3738	0.117121022748715	0.117121022748715
+16415	3033	3034	0.026586968802262	0.026586968802262
+17518	3738	5617	0.105494461178937	0.105494461178937
+17519	5617	10124	0.0771328841888806	0.0771328841888806
+18717	1848	7866	0.175365518810985	0.175365518810985
+17520	10124	3940	0.0438462962781839	0.0438462962781839
+18649	10111	1854	0.1585792263447	0.1585792263447
+17522	6651	7970	0.100526894140491	0.100526894140491
+17523	7970	10125	0.0156643759566378	0.0156643759566378
+17525	342	10126	0.0436005942347808	0.0436005942347808
+17527	10126	10121	0.0408685827486489	0.0408685827486489
+17529	8016	10127	0.0296331396909763	0.0296331396909763
+17533	9200	10128	0.0316360066553629	0.0316360066553629
+17535	10128	3937	0.0160944313012695	0.0160944313012695
+17537	10125	10129	0.0323384241188202	0.0323384241188202
+17540	8937	10130	0.0382349269331771	0.0382349269331771
+18160	6035	10256	0.201529974874074	0.201529974874074
+18081	3725	3961	0.10669546577579	0.10669546577579
+18082	3961	5599	0.120037242247265	0.120037242247265
+18083	5599	10212	0.0720417181829305	0.0720417181829305
+18085	6582	8060	0.177813026382298	0.177813026382298
+18087	79	3516	0.204359090736991	0.204359090736991
+18089	10257	1076	0.140362637117951	0.140362637117951
+18092	8839	10258	0.0505579939719693	0.0505579939719693
+18093	10258	1216	0.0474392361763922	0.0474392361763922
+18094	1216	6309	0.0509984491369365	0.0509984491369365
+18095	6309	4788	0.0491735679878017	0.0491735679878017
+18418	8332	8359	0.203675131612914	0.203675131612914
+18096	4788	10256	0.0504039235105897	0.0504039235105897
+18098	2169	10259	0.0494310424509836	0.0494310424509836
+18099	10259	6301	0.0486534339401342	0.0486534339401342
+18100	6301	10260	0.0495166429402865	0.0495166429402865
+18101	10260	6428	0.0494555977491468	0.0494555977491468
+18102	6428	10261	0.0500541316962619	0.0500541316962619
+18103	10261	8837	0.049703265213276	0.049703265213276
+18104	8837	10262	0.0487206483354329	0.0487206483354329
+18105	10262	4661	0.0502842889238415	0.0502842889238415
+18210	6766	8919	0.14588598272053	0.14588598272053
+18215	6383	6883	0.201049789723751	0.201049789723751
+18217	9380	6467	0.149037633666744	0.149037633666744
+18218	6467	5528	0.155039270882985	0.155039270882985
+18219	5528	5739	0.157509840329179	0.157509840329179
+18220	5739	2443	0.171457541049395	0.171457541049395
+18221	2443	9373	0.174175733096206	0.174175733096206
+18222	9373	1695	0.20076305206058	0.20076305206058
+18224	6884	8362	0.203398590237467	0.203398590237467
+18225	8362	8336	0.20070690829837	0.20070690829837
+18226	8336	7851	0.201718717149991	0.201718717149991
+18228	9334	6072	0.194542227529238	0.194542227529238
+18229	6072	2552	0.201793795787929	0.201793795787929
+18231	10282	2550	0.408975962052575	0.408975962052575
+18233	6070	9333	0.193859431649891	0.193859431649891
+18235	3976	7037	0.199530180994258	0.199530180994258
+200	212	213	0.0847562945477418	0.0847562945477418
+18390	3978	7038	0.19806787554915	0.19806787554915
+18392	3425	3425	0.000442266584977921	0.000442266584977921
+18397	9331	6062	0.201652000193759	0.201652000193759
+18398	6062	2541	0.201129932352607	0.201129932352607
+18581	5716	10279	0.0494611669239994	0.0494611669239994
+18582	10279	7436	0.0477007849303031	0.0477007849303031
+18583	7436	10283	0.0501702475316452	0.0501702475316452
+17420	10101	10103	0.0112555006692224	0.0112555006692224
+18584	10283	7175	0.0483500943699416	0.0483500943699416
+18585	7175	6738	0.0504392554289189	0.0504392554289189
+18586	6738	7790	0.0494479351051842	0.0494479351051842
+18587	7790	6666	0.0500428725179926	0.0500428725179926
+19485	10408	10409	0.0449233009136641	0.0449233009136641
+18958	4669	4949	0.0991091352300086	0.0991091352300086
+18959	4949	10410	0.051350182738824	0.051350182738824
+18961	7220	10411	0.0512063955237151	0.0512063955237151
+18962	10411	5674	0.0503168586815151	0.0503168586815151
+18964	5851	1441	0.115857091100705	0.115857091100705
+18965	1441	10412	0.122824478936007	0.122824478936007
+18966	10412	7622	0.0791461153811418	0.0791461153811418
+18967	7622	6933	0.202629079077677	0.202629079077677
+18968	6933	5888	0.202049147826104	0.202049147826104
+18969	5888	10407	0.149951393120126	0.149951393120126
+18971	4142	7756	0.106122091000002	0.106122091000002
+18973	3621	1827	0.0998991515255571	0.0998991515255571
+18974	1827	10091	0.0457369036734835	0.0457369036734835
+18975	10091	10090	0.0485102588443954	0.0485102588443954
+18976	10090	5102	0.00428121670773934	0.00428121670773934
+18977	5102	9830	0.0472330884345854	0.0472330884345854
+18978	9830	1764	0.0499536922707767	0.0499536922707767
+19245	5031	10461	0.0349404698955745	0.0349404698955745
+19246	10461	10462	0.146091635323691	0.146091635323691
+19247	10462	5803	0.103032761304249	0.103032761304249
+19249	10129	4929	0.0162234814669486	0.0162234814669486
+19250	4929	2997	0.0775054077358341	0.0775054077358341
+19251	2997	7215	0.0556994645707447	0.0556994645707447
+19252	7215	4943	0.101417024663026	0.101417024663026
+19253	4943	4680	0.100527034724402	0.100527034724402
+19254	4680	7861	0.10148450975115	0.10148450975115
+19255	7861	5802	0.109659923162335	0.109659923162335
+19256	5802	8768	0.114010676979814	0.114010676979814
+19257	8768	10464	0.134804410176221	0.134804410176221
+19258	10464	338	0.0847524339031626	0.0847524339031626
+19259	338	10465	0.0582049460436449	0.0582049460436449
+19261	9467	561	0.02991036647086	0.02991036647086
+15187	8324	9523	0.0327715210342319	0.0327715210342319
+15189	9403	6744	0.131603339182178	0.131603339182178
+15190	6744	6144	0.131367316381262	0.131367316381262
+15191	6144	4018	0.137213550559119	0.137213550559119
+15192	4018	7022	0.137229962505115	0.137229962505115
+15193	7022	7392	0.129151524081427	0.129151524081427
+15195	9524	9525	0.0293502828068984	0.0293502828068984
+15196	9525	3400	0.0502879609443278	0.0502879609443278
+15198	9212	8374	0.0509876682022625	0.0509876682022625
+15199	8374	9526	0.0501407630476736	0.0501407630476736
+15201	7443	9527	0.0485275735168955	0.0485275735168955
+15202	9527	7160	0.0501690368011668	0.0501690368011668
+15204	9528	7772	0.0491757515961192	0.0491757515961192
+19414	3251	7295	0.215557365491205	0.215557365491205
+19415	7295	38	0.193056632398898	0.193056632398898
+19416	38	3537	0.207444876530122	0.207444876530122
+19417	3537	4232	0.199406339345135	0.199406339345135
+19419	3248	7289	0.216790622749105	0.216790622749105
+19420	7289	34	0.19126988034169	0.19126988034169
+19660	6763	3987	0.201101495268523	0.201101495268523
+19664	9366	9360	0.104402218346712	0.104402218346712
+19665	9360	10609	0.0511942469588291	0.0511942469588291
+19666	10609	10608	0.151226661870126	0.151226661870126
+19668	10608	10610	0.149537813443153	0.149537813443153
+19674	1809	10611	0.33816836736717	0.33816836736717
+19676	10376	10403	0.0245741855053009	0.0245741855053009
+19678	10612	1810	0.127204321184034	0.127204321184034
+19681	10613	10400	0.0511661482023126	0.0511661482023126
+16697	7094	9611	0.00886963723885407	0.00886963723885407
+19683	10614	10404	0.0688061700167682	0.0688061700167682
+19873	9513	4580	0.132311871209248	0.132311871209248
+19684	10404	10611	0.093589959625359	0.093589959625359
+17421	10103	10082	0.0236886540751766	0.0236886540751766
+19685	10611	10612	0.0295914472405657	0.0295914472405657
+19686	10612	10614	0.0207133170517971	0.0207133170517971
+19688	10615	10399	0.0680853608411523	0.0680853608411523
+19742	8865	3778	0.153182304960692	0.153182304960692
+19743	3778	10251	0.199472712546792	0.199472712546792
+20418	10775	10774	0.0781617215430941	0.0781617215430941
+19804	10646	2619	0.0523061501297365	0.0523061501297365
+19839	10655	10656	0.208642261382715	0.208642261382715
+19840	10656	9515	0.207256465232075	0.207256465232075
+19841	9515	4581	0.131476935756536	0.131476935756536
+19842	4581	8369	0.136571452698726	0.136571452698726
+19843	8369	5296	0.134437189399661	0.134437189399661
+19849	9510	10659	0.196832023994668	0.196832023994668
+19850	10659	10660	0.00933491084100046	0.00933491084100046
+19857	10663	10664	0.203268481110854	0.203268481110854
+19858	10664	4584	0.340902950197611	0.340902950197611
+19859	4584	6443	0.133958738324445	0.133958738324445
+19860	6443	5300	0.13749324562242	0.13749324562242
+19862	10665	7406	0.149893826243372	0.149893826243372
+19865	10667	9512	0.206545737430627	0.206545737430627
+608	599	600	0.326867712180581	0.326867712180581
+19870	10669	10666	0.0946602410525992	0.0946602410525992
+19871	10666	10670	0.114297265097593	0.114297265097593
+19872	10670	9513	0.206208296842551	0.206208296842551
+20654	6734	10882	0.0587106683934502	0.0587106683934502
+19874	4580	8368	0.136014360939856	0.136014360939856
+19875	8368	3817	0.133956606983629	0.133956606983629
+19887	627	10669	0.00369254651812945	0.00369254651812945
+19888	10669	10673	0.0509541857454109	0.0509541857454109
+19889	10673	7185	0.0463624089792375	0.0463624089792375
+19890	7185	10655	0.00294147338451417	0.00294147338451417
+19891	10655	10658	0.0513792379314705	0.0513792379314705
+19892	10658	9726	0.0479329871824602	0.0479329871824602
+19893	9726	10654	0.050711837363241	0.050711837363241
+19894	10654	1102	0.049608905570541	0.049608905570541
+19895	1102	10674	0.051538155846358	0.051538155846358
+19896	10674	7514	0.0472454257465845	0.0472454257465845
+19897	7514	10675	0.00204366911425749	0.00204366911425749
+19898	10675	10650	0.0481859646371305	0.0481859646371305
+19899	10650	3868	0.0500586048613679	0.0500586048613679
+16182	5547	1702	0.197838014226301	0.197838014226301
+19900	3868	10663	0.00177015306197821	0.00177015306197821
+19902	10676	5589	0.0437900336804139	0.0437900336804139
+19975	9710	10678	0.0499234178433857	0.0499234178433857
+19976	10678	9722	0.0489092169162438	0.0489092169162438
+19977	9722	10686	0.0503973293919778	0.0503973293919778
+19978	10686	3380	0.0518081278246911	0.0518081278246911
+19979	3380	10660	0.0523052391085021	0.0523052391085021
+19980	10660	10679	0.0495088072044065	0.0495088072044065
+19981	10679	10667	0.0507313759263116	0.0507313759263116
+19982	10667	10670	0.0483586645716411	0.0483586645716411
+19983	10670	10680	0.0518679752837857	0.0518679752837857
+19984	10680	10656	0.050123635320888	0.050123635320888
+19985	10656	10657	0.0496280116055878	0.0496280116055878
+19986	10657	9727	0.0488069327339047	0.0488069327339047
+19989	1103	10684	0.0492526075164636	0.0492526075164636
+656	646	647	0.146781335789774	0.146781335789774
+20153	9416	8943	0.363005134814212	0.363005134814212
+20155	9241	426	0.0770893533882784	0.0770893533882784
+20157	461	6171	0.271278721099677	0.271278721099677
+20161	1795	8719	0.00999704268874585	0.00999704268874585
+20163	4233	1795	0.205432809418909	0.205432809418909
+20165	3252	7296	0.216277689734072	0.216277689734072
+20166	7296	39	0.192678596239665	0.192678596239665
+20167	39	3538	0.207091579860447	0.207091579860447
+20168	3538	4234	0.200695550258567	0.200695550258567
+20170	6489	3675	0.150803028705812	0.150803028705812
+20172	9313	4863	0.191918567433925	0.191918567433925
+20173	4863	2213	0.160028953629168	0.160028953629168
+20174	2213	928	0.187511558441934	0.187511558441934
+17423	10083	10104	0.109040593432451	0.109040593432451
+20175	928	5932	0.175834480120689	0.175834480120689
+20176	5932	3804	0.153555987473657	0.153555987473657
+20178	3804	10247	0.200040701273324	0.200040701273324
+20181	6549	4768	0.17858020416066	0.17858020416066
+20185	10705	8247	0.0550533285282311	0.0550533285282311
+15205	7772	9040	0.0507978153373748	0.0507978153373748
+15206	9040	1113	0.0497891730866418	0.0497891730866418
+15208	9529	7493	0.0494909698776819	0.0494909698776819
+15209	7493	9169	0.051731129981418	0.051731129981418
+15210	9169	3835	0.0502567043103765	0.0502567043103765
+15212	5624	3708	0.103423232464888	0.103423232464888
+15213	3708	718	0.104893137935114	0.104893137935114
+15214	718	9442	0.108559355644902	0.108559355644902
+15215	9442	8519	0.0865482797270432	0.0865482797270432
+15218	539	540	0.260599478311813	0.260599478311813
+15220	9430	9531	0.0962600395709663	0.0962600395709663
+15232	8334	8360	0.0525484415568663	0.0525484415568663
+15234	9532	9533	0.00803607126282377	0.00803607126282377
+16285	2852	1362	0.131790180095648	0.131790180095648
+15236	9534	9535	0.0751513734309232	0.0751513734309232
+15237	9535	9536	0.0195917533971332	0.0195917533971332
+15238	9536	9537	0.0515491230280822	0.0515491230280822
+18878	3216	6125	0.202386413121619	0.202386413121619
+15239	9537	9538	0.0217956250277941	0.0217956250277941
+15248	8177	9543	0.0137987617761691	0.0137987617761691
+15249	9541	9542	0.0585754347953461	0.0585754347953461
+15262	9552	9550	0.00461416645458039	0.00461416645458039
+15263	9550	8208	0.00942903742084459	0.00942903742084459
+15264	8208	8203	0.268586250441468	0.268586250441468
+15265	8203	8187	0.252138571661244	0.252138571661244
+15267	8182	9552	0.0592295781497915	0.0592295781497915
+15275	9553	392	0.159342904018314	0.159342904018314
+15276	392	443	0.100075433980265	0.100075433980265
+15277	443	8209	0.110751336507506	0.110751336507506
+15278	3258	9554	0.029060284587417	0.029060284587417
+15279	9555	9556	0.0194857519875014	0.0194857519875014
+15280	9556	9557	0.01686832436596	0.01686832436596
+15284	9558	8799	0.0124547414515574	0.0124547414515574
+15287	9268	8812	0.43752637477907	0.43752637477907
+15372	9568	7345	0.407049578137861	0.407049578137861
+15373	7345	7369	0.0183549065123627	0.0183549065123627
+15374	7369	7156	0.617874851338927	0.617874851338927
+15375	7156	8802	0.0193374199518318	0.0193374199518318
+15376	8802	7317	0.278372348360029	0.278372348360029
+15377	7317	7975	0.104085714382657	0.104085714382657
+15378	7975	8806	0.102424669696849	0.102424669696849
+20689	10900	10890	0.00428101320774671	0.00428101320774671
+15380	2642	4108	0.0801282359532547	0.0801282359532547
+15882	9238	9569	0.375213941828735	0.375213941828735
+4422	4132	3782	0.199943657895071	0.199943657895071
+15381	4108	7064	0.0951259934580263	0.0951259934580263
+15383	993	9570	0.0346111476896159	0.0346111476896159
+15385	9570	2914	0.0185752046128979	0.0185752046128979
+15393	9572	9573	0.0529385333780706	0.0529385333780706
+15394	9574	9575	0.235820407161737	0.235820407161737
+15395	8031	9576	0.0470934184180165	0.0470934184180165
+15396	9577	9578	0.0233972200853265	0.0233972200853265
+15398	8797	9577	0.0680401949692739	0.0680401949692739
+15404	9583	9584	0.0189997554494897	0.0189997554494897
+15413	8399	9591	0.147004287358107	0.147004287358107
+15414	9591	9592	0.0201167087704522	0.0201167087704522
+15415	9592	8857	0.127975925737851	0.127975925737851
+15416	8857	7897	0.144523217943683	0.144523217943683
+15864	9238	9744	0.017876559138977	0.017876559138977
+765	765	766	0.102953430637808	0.102953430637808
+15417	7897	8290	0.14604137147811	0.14604137147811
+15418	8290	8283	0.146330295926468	0.146330295926468
+15419	8283	9593	0.142033870447888	0.142033870447888
+15420	9593	5781	0.00569268198805717	0.00569268198805717
+15421	5781	8573	0.144843439528192	0.144843439528192
+15422	8573	6709	0.145981160506706	0.145981160506706
+15423	6709	8489	0.147059173742998	0.147059173742998
+20690	10890	10906	0.00389182243300479	0.00389182243300479
+15424	8489	9595	0.146421765893647	0.146421765893647
+15425	9595	8637	0.147888642293711	0.147888642293711
+15427	4935	9590	0.0193454164735318	0.0193454164735318
+15430	8608	1478	0.0099286705971119	0.0099286705971119
+15433	7965	9599	0.0149228575371813	0.0149228575371813
+15434	9599	9600	0.0470176213777162	0.0470176213777162
+16271	9867	94	0.0502509464237392	0.0502509464237392
+16273	9867	3654	0.100162413874862	0.100162413874862
+15435	9600	9601	0.0734739685688771	0.0734739685688771
+15436	9601	9602	0.120469898327734	0.120469898327734
+15474	9617	9618	0.0309123358720865	0.0309123358720865
+15475	9618	9620	0.138252717835719	0.138252717835719
+15476	9620	8583	0.0318418680569216	0.0318418680569216
+15477	8583	8311	0.113486958547973	0.113486958547973
+15478	8311	2808	0.019311822890669	0.019311822890669
+15479	2808	9621	0.209882261055166	0.209882261055166
+15480	9621	8522	0.0161981079077479	0.0161981079077479
+15481	8522	8465	0.180991531047255	0.180991531047255
+15487	9624	8468	0.0340418553637742	0.0340418553637742
+15786	9625	9596	0.0115036173464072	0.0115036173464072
+15489	9626	9618	0.0131866115872677	0.0131866115872677
+15494	4937	9617	0.0698272217766147	0.0698272217766147
+15496	9628	9607	0.229575641341845	0.229575641341845
+15497	9607	9629	0.399617180847297	0.399617180847297
+15498	9629	8646	0.256050430773093	0.256050430773093
+15500	9630	7969	0.0158758080194332	0.0158758080194332
+20692	10907	5885	0.00586950671491746	0.00586950671491746
+20693	5885	10908	0.00728749668565428	0.00728749668565428
+15501	7969	6652	0.0898251140375734	0.0898251140375734
+15502	6652	3939	0.0164838165497055	0.0164838165497055
+15504	5618	2286	0.10606737169151	0.10606737169151
+15506	4494	9631	0.0855716406365801	0.0855716406365801
+15508	9632	9630	0.0305358161263308	0.0305358161263308
+15510	9633	4938	0.00998098524134014	0.00998098524134014
+15511	4938	6650	0.146459053749354	0.146459053749354
+15512	6650	3942	0.0669626682021978	0.0669626682021978
+15513	3942	9634	0.0625685122990456	0.0625685122990456
+15514	9634	5614	0.0589940973382129	0.0589940973382129
+15515	5614	9635	0.0521244888471325	0.0521244888471325
+15518	9636	9633	0.0394950652718853	0.0394950652718853
+15520	9637	4687	0.0148908622684888	0.0148908622684888
+15522	5369	9637	0.0293813837370069	0.0293813837370069
+15524	9638	4939	0.016179725599566	0.016179725599566
+15525	4939	7226	0.0545709952111213	0.0545709952111213
+15526	7226	9640	0.0899454990944897	0.0899454990944897
+15527	9640	6648	0.0447546990135401	0.0447546990135401
+15528	6648	9641	0.0618904241631349	0.0618904241631349
+15529	9641	3943	0.062420581454241	0.062420581454241
+15530	3943	9642	0.0627968141202241	0.0627968141202241
+15531	9642	5613	0.0612320254822175	0.0612320254822175
+15532	5613	9643	0.0497740720528068	0.0497740720528068
+15533	9643	3735	0.0551525120669933	0.0551525120669933
+15534	3735	4491	0.207391837271035	0.207391837271035
+15535	4491	129	0.109629298465467	0.109629298465467
+15536	129	7948	0.0410521986313786	0.0410521986313786
+15537	7948	2527	0.287151637527745	0.287151637527745
+15538	2527	9644	0.066959748271427	0.066959748271427
+15539	9644	1221	0.102833533420687	0.102833533420687
+16595	9951	6712	0.00734129639736197	0.00734129639736197
+15542	618	9638	0.0309196803723069	0.0309196803723069
+15548	9647	9648	0.0291957554146951	0.0291957554146951
+15549	7572	9649	0.0425327114545183	0.0425327114545183
+15551	9650	9651	0.00414955523410263	0.00414955523410263
+15553	9651	9652	0.0110054302366685	0.0110054302366685
+15555	9652	9653	0.018743029705938	0.018743029705938
+15558	9656	4160	0.0156451635843959	0.0156451635843959
+15559	4160	4769	0.262100180691146	0.262100180691146
+15560	4769	6550	0.17763389531497	0.17763389531497
+15561	6550	9299	0.171507609467602	0.171507609467602
+15564	3803	5934	0.15587305192408	0.15587305192408
+15565	5934	930	0.176935041153743	0.176935041153743
+15566	930	2215	0.185037322727603	0.185037322727603
+15567	2215	4865	0.15888388268895	0.15888388268895
+15568	4865	9477	0.193757182508649	0.193757182508649
+15569	9477	5466	0.16958064463752	0.16958064463752
+15570	5466	9658	0.179556785798918	0.179556785798918
+15571	9658	9659	0.177338892845698	0.177338892845698
+15572	9659	662	0.00516539932395329	0.00516539932395329
+18431	10291	7169	0.0508784288394603	0.0508784288394603
+15573	662	9660	0.00343592323317494	0.00343592323317494
+15575	9464	4609	0.17585408606	0.17585408606
+15576	4609	6490	0.148161596916065	0.148161596916065
+15577	6490	7974	0.0885778987826885	0.0885778987826885
+15579	4336	9656	0.0458791064556152	0.0458791064556152
+15581	7573	3556	0.0299599314208067	0.0299599314208067
+15583	851	7096	0.0990470064031014	0.0990470064031014
+15584	7096	9661	0.0107677923604542	0.0107677923604542
+15585	9661	9662	0.0081027242638239	0.0081027242638239
+15586	9662	9663	0.00747970901198794	0.00747970901198794
+15587	9663	9664	0.00836437719840195	0.00836437719840195
+15588	9664	9665	0.00928103292942469	0.00928103292942469
+15589	9665	9666	0.00696482735297281	0.00696482735297281
+15590	9666	9667	0.00676039634627663	0.00676039634627663
+15591	9667	9668	0.00737940382126904	0.00737940382126904
+15592	9668	9669	0.0330209265296029	0.0330209265296029
+15593	9669	8703	0.0154036792176203	0.0154036792176203
+15594	8703	8152	0.0935877668611654	0.0935877668611654
+15595	8152	7613	0.0937841622026169	0.0937841622026169
+15596	7613	7266	0.0918493440897444	0.0918493440897444
+15597	7266	7585	0.0967046653962524	0.0967046653962524
+15599	2003	3363	0.0896469251714999	0.0896469251714999
+15600	3363	2757	0.0953909752557553	0.0953909752557553
+15601	2757	9670	0.0852737689905025	0.0852737689905025
+15602	9670	9671	0.00427910266137011	0.00427910266137011
+15603	9671	7008	0.00522846022655691	0.00522846022655691
+15604	7008	9672	0.00318311155269209	0.00318311155269209
+15605	9672	9673	0.00446550904917084	0.00446550904917084
+15606	9673	9674	0.0041674932546887	0.0041674932546887
+15607	9674	2283	0.0902343315694916	0.0902343315694916
+15608	2283	3604	0.0998061678618656	0.0998061678618656
+15609	3604	7530	0.0990712121378624	0.0990712121378624
+15610	7530	2138	0.109343720002506	0.109343720002506
+15611	2138	5995	0.0993207600682094	0.0993207600682094
+15612	5995	7675	0.101107003151938	0.101107003151938
+15613	7675	9675	0.0981911301047578	0.0981911301047578
+15614	9675	9676	0.100210056589884	0.100210056589884
+15615	9676	9677	0.100165741773797	0.100165741773797
+15616	9677	9678	0.100142214318315	0.100142214318315
+15617	9678	9679	0.0993326168253197	0.0993326168253197
+899	913	914	0.147143450226327	0.147143450226327
+20715	10914	9397	0.00810191720556871	0.00810191720556871
+15619	9680	9681	0.102717909771226	0.102717909771226
+15620	9681	9682	0.100023276858498	0.100023276858498
+15621	9682	9683	0.100843312370816	0.100843312370816
+15622	9683	9684	0.101658088937986	0.101658088937986
+15623	9684	9685	0.0375181649725389	0.0375181649725389
+15624	9685	9686	0.0593326737516342	0.0593326737516342
+15625	9686	9687	0.102011015676098	0.102011015676098
+15627	9688	9689	0.110065273053945	0.110065273053945
+15628	9689	9690	0.109733851792721	0.109733851792721
+15629	9690	9691	0.0939207749458389	0.0939207749458389
+15630	9691	9692	0.102876500148466	0.102876500148466
+15631	9692	9693	0.0940860472810003	0.0940860472810003
+15633	851	7096	0.0990470064031014	0.0990470064031014
+15634	7096	9661	0.0107677923604542	0.0107677923604542
+15635	9661	9662	0.0081027242638239	0.0081027242638239
+15636	9662	9663	0.00747970901198794	0.00747970901198794
+15637	9663	9664	0.00836437719840195	0.00836437719840195
+15638	9664	9665	0.00928103292942469	0.00928103292942469
+15639	9665	9666	0.00696482735297281	0.00696482735297281
+15641	9667	9668	0.00737940382126904	0.00737940382126904
+15642	9668	9669	0.0330209265296029	0.0330209265296029
+15644	8703	8152	0.0935877668611654	0.0935877668611654
+20716	9397	9341	0.0111932287865196	0.0111932287865196
+15645	8152	7613	0.0937841622026169	0.0937841622026169
+15646	7613	7266	0.0918493440897444	0.0918493440897444
+15647	7266	7585	0.0967046653962524	0.0967046653962524
+15648	7585	2003	0.0946559616738872	0.0946559616738872
+15649	2003	3363	0.0896469251714999	0.0896469251714999
+15650	3363	2757	0.0953909752557553	0.0953909752557553
+15651	2757	9670	0.0852737689905025	0.0852737689905025
+15652	9670	9671	0.00427910266137011	0.00427910266137011
+15653	9671	7008	0.00522846022655691	0.00522846022655691
+15654	7008	9672	0.00318311155269209	0.00318311155269209
+15655	9672	9673	0.00446550904917084	0.00446550904917084
+15656	9673	9674	0.0041674932546887	0.0041674932546887
+15657	9674	2283	0.0902343315694916	0.0902343315694916
+15658	2283	3604	0.0998061678618656	0.0998061678618656
+15659	3604	7530	0.0990712121378624	0.0990712121378624
+940	955	956	0.0467857248690536	0.0467857248690536
+15660	7530	2138	0.109343720002506	0.109343720002506
+15661	2138	5995	0.0993207600682094	0.0993207600682094
+15663	7675	9675	0.0981911301047578	0.0981911301047578
+15664	9675	9676	0.100210056589884	0.100210056589884
+15665	9676	9677	0.100165741773797	0.100165741773797
+15666	9677	9678	0.100142214318315	0.100142214318315
+20717	9341	10910	0.0086655068036058	0.0086655068036058
+15667	9678	9679	0.0993326168253197	0.0993326168253197
+15668	9679	9680	0.101799223111765	0.101799223111765
+15669	9680	9681	0.102717909771226	0.102717909771226
+15670	9681	9682	0.100023276858498	0.100023276858498
+15671	9682	9683	0.100843312370816	0.100843312370816
+15672	9683	9684	0.101658088937986	0.101658088937986
+15673	9684	9685	0.0375181649725389	0.0375181649725389
+15675	9686	9687	0.102011015676098	0.102011015676098
+15676	9687	9688	0.091295408872665	0.091295408872665
+15677	9688	9689	0.110065273053945	0.110065273053945
+15678	9689	9690	0.109733851792721	0.109733851792721
+15679	9690	9691	0.0939207749458389	0.0939207749458389
+15680	9691	9692	0.102876500148466	0.102876500148466
+15681	9692	9693	0.0940860472810003	0.0940860472810003
+15684	7680	3450	0.103468199661171	0.103468199661171
+15686	6014	3880	0.103612570358144	0.103612570358144
+15687	3880	842	0.103458609408344	0.103458609408344
+15688	842	7097	0.103202015659942	0.103202015659942
+15689	7097	9694	0.047717886337947	0.047717886337947
+15690	9694	8693	0.0153273459011852	0.0153273459011852
+15691	8693	8154	0.0909950973067502	0.0909950973067502
+15692	8154	7616	0.0940844002869557	0.0940844002869557
+20719	10885	9398	0.0070860203578635	0.0070860203578635
+15693	7616	7269	0.0941699315585107	0.0941699315585107
+15695	2024	3357	0.101537173300766	0.101537173300766
+15696	3357	2761	0.09936727049288	0.09936727049288
+15697	2761	7002	0.0992423706702366	0.0992423706702366
+15698	7002	2264	0.0979906184711561	0.0979906184711561
+15699	2264	3594	0.0994063483699449	0.0994063483699449
+15700	3594	7517	0.101662572945496	0.101662572945496
+15701	7517	2099	0.100157096238172	0.100157096238172
+15702	2099	5976	0.101294873446063	0.101294873446063
+15703	5976	7666	0.100715370574341	0.100715370574341
+15705	2329	9695	0.166702045988164	0.166702045988164
+15706	8023	8686	0.102850512121315	0.102850512121315
+15708	8810	7064	0.0240522165973304	0.0240522165973304
+15710	8803	7155	0.0191394427517654	0.0191394427517654
+15711	7155	6281	0.12107437233707	0.12107437233707
+15712	6281	1050	0.111583194341316	0.111583194341316
+15714	3913	3150	0.158539469564201	0.158539469564201
+15715	3150	3124	0.0198304894474349	0.0198304894474349
+15716	3124	7370	0.0954616596060542	0.0954616596060542
+15717	7370	7346	0.018354860843617	0.018354860843617
+15718	7346	6806	0.0981383819816197	0.0981383819816197
+15719	6806	6802	0.0198184437093697	0.0198184437093697
+15720	6802	4711	0.111589534373845	0.111589534373845
+15721	4711	782	0.0471200606837116	0.0471200606837116
+15722	782	5113	0.0527296074626885	0.0527296074626885
+15723	5113	1545	0.0490000601275782	0.0490000601275782
+15724	1545	6325	0.0500984428583215	0.0500984428583215
+15728	9449	9696	0.165726699390797	0.165726699390797
+15732	8801	5164	0.779026857141219	0.779026857141219
+15734	9303	1207	0.168708605950551	0.168708605950551
+15735	1207	9698	0.0215813490172367	0.0215813490172367
+15736	9698	3771	0.199072281764282	0.199072281764282
+15738	8867	958	0.177734005515433	0.177734005515433
+15739	958	9420	0.172099550054797	0.172099550054797
+15740	9420	4896	0.162799282631442	0.162799282631442
+15741	4896	9470	0.183516274472291	0.183516274472291
+15742	9470	5493	0.174731799993968	0.174731799993968
+15743	5493	9699	0.19822011575815	0.19822011575815
+15745	6718	4833	0.101679501011927	0.101679501011927
+15746	4833	6378	0.103648655421083	0.103648655421083
+15747	6378	3188	0.103521991883946	0.103521991883946
+15749	8692	1060	0.0921643567251203	0.0921643567251203
+15750	1060	1697	0.0932426366322247	0.0932426366322247
+15751	1697	7268	0.0954492333486145	0.0954492333486145
+15752	7268	6671	0.0907592732101769	0.0907592732101769
+15754	2023	3356	0.0971424118361729	0.0971424118361729
+15756	2760	7001	0.10039029368168	0.10039029368168
+15757	7001	2263	0.0995790205304853	0.0995790205304853
+15758	2263	3487	0.100064167822274	0.100064167822274
+15760	5346	2098	0.0987082712844417	0.0987082712844417
+15761	2098	2940	0.101254724790906	0.101254724790906
+15763	6814	9700	0.201962621208867	0.201962621208867
+15766	9701	9702	0.01946308379228	0.01946308379228
+15767	9702	7793	0.0917115184551997	0.0917115184551997
+15768	7793	9703	0.0139663687397926	0.0139663687397926
+15769	9703	9044	0.0844498524584079	0.0844498524584079
+15770	9044	1093	0.00878466321187049	0.00878466321187049
+15771	1093	7489	0.0946907062423257	0.0946907062423257
+15772	7489	3839	0.0924847260791552	0.0924847260791552
+15773	3839	9041	0.00820472152594153	0.00820472152594153
+15774	9041	5598	0.0888252595207534	0.0888252595207534
+15775	5598	9038	0.0124773684874939	0.0124773684874939
+15776	9038	7546	0.0939528798953845	0.0939528798953845
+15817	9704	9705	0.0108623818240175	0.0108623818240175
+15777	7546	9706	0.691905770916309	0.691905770916309
+15800	1403	9709	0.0705866891174833	0.0705866891174833
+15801	9709	620	0.0978636674417251	0.0978636674417251
+15802	620	9710	0.210732715068668	0.210732715068668
+15803	9710	1934	0.00294671517895333	0.00294671517895333
+15812	9716	2323	0.0248152326425255	0.0248152326425255
+15814	9717	9718	0.0914794540174667	0.0914794540174667
+15815	9718	9719	0.0447183943765151	0.0447183943765151
+19498	10525	10526	0.0198486557174526	0.0198486557174526
+15816	9719	9704	0.266399501314719	0.266399501314719
+15823	622	9720	0.114642644128587	0.114642644128587
+15824	9720	9721	0.0112307689682394	0.0112307689682394
+15825	9721	9722	0.0869660670624723	0.0869660670624723
+15826	9722	9508	0.205466270114504	0.205466270114504
+15828	9723	8889	0.0324596924967659	0.0324596924967659
+15829	8889	7134	0.00993032916751998	0.00993032916751998
+15831	9724	9725	0.00760667507368999	0.00760667507368999
+15832	9725	9726	0.189210618262835	0.189210618262835
+15833	9726	9727	0.207046790394153	0.207046790394153
+19270	10423	10424	0.0241914475611954	0.0241914475611954
+435	364	434	0.342302602243315	0.342302602243315
+437	435	436	0.251313063977777	0.251313063977777
+438	291	437	0.00683009618704691	0.00683009618704691
+439	437	438	0.127267952892383	0.127267952892383
+18188	4070	6055	0.154839029661679	0.154839029661679
+2329	914	2297	0.0421335193471221	0.0421335193471221
+2331	2320	2321	0.0970544429847538	0.0970544429847538
+2332	2321	2325	0.106348268281835	0.106348268281835
+2334	2326	2327	0.097322097365987	0.097322097365987
+2335	2327	1153	0.100532392748858	0.100532392748858
+2338	2329	2330	0.176644411418714	0.176644411418714
+2339	2330	2331	0.174810883246149	0.174810883246149
+2340	2331	2332	0.246452825481674	0.246452825481674
+12346	8662	8663	0.00747381550039305	0.00747381550039305
+15258	8632	9548	0.0273148076656665	0.0273148076656665
+2341	2332	2333	0.239714451404855	0.239714451404855
+2342	2333	2334	0.0332654390408316	0.0332654390408316
+2344	2335	2336	0.129842641397919	0.129842641397919
+2346	2337	2338	0.0990445311811364	0.0990445311811364
+2348	2265	2339	0.101695232363891	0.101695232363891
+2349	2339	2340	0.100657111492997	0.100657111492997
+2350	2340	2100	0.0993531902440497	0.0993531902440497
+20593	3590	10852	0.00726410078461852	0.00726410078461852
+20595	10864	10861	0.0184079229928756	0.0184079229928756
+20596	10861	10869	0.0187971985012912	0.0187971985012912
+20598	10844	10816	0.176342451403751	0.176342451403751
+20599	10816	10784	0.0180725957817606	0.0180725957817606
+18882	3271	7310	0.200940882978518	0.200940882978518
+20600	10784	10835	0.00593511915863137	0.00593511915863137
+20602	2958	10836	0.0107685222165634	0.0107685222165634
+20605	10827	10870	0.0187474646325031	0.0187474646325031
+20606	10870	10871	0.0569206829492766	0.0569206829492766
+20746	10919	10920	0.0829974075948199	0.0829974075948199
+20607	10872	10858	0.118628394955246	0.118628394955246
+20609	2959	10837	0.0110654933350888	0.0110654933350888
+20610	10837	10819	0.0119664824389379	0.0119664824389379
+11704	1158	1159	0.143826308402294	0.143826308402294
+16709	10000	10001	0.0457062376473756	0.0457062376473756
+20652	9411	7929	0.0718148143148174	0.0718148143148174
+20655	4390	9954	0.0752796609482001	0.0752796609482001
+20656	9954	10883	0.0805000116188462	0.0805000116188462
+20657	10883	10884	0.00921180121982239	0.00921180121982239
+20658	10884	8289	0.0487008508548274	0.0487008508548274
+20660	5957	6482	0.0027689648671592	0.0027689648671592
+20661	6482	5774	0.120389794748458	0.120389794748458
+20662	5774	4620	0.0232425190443662	0.0232425190443662
+20663	4620	5809	0.169650245221728	0.169650245221728
+20664	5809	10472	0.013534248318244	0.013534248318244
+2394	2385	2386	0.330871173224232	0.330871173224232
+2396	2387	2072	0.091718253525282	0.091718253525282
+2398	2388	2389	0.0952556218940292	0.0952556218940292
+2399	2389	2390	0.088517954558777	0.088517954558777
+2400	2390	2391	0.100075566647637	0.100075566647637
+2401	2391	2392	0.0940014926636224	0.0940014926636224
+2402	2392	2394	0.0931645591460492	0.0931645591460492
+2403	2394	2395	0.0490422843236324	0.0490422843236324
+2404	2396	2397	0.101232025457682	0.101232025457682
+2405	2397	835	0.0985806787691326	0.0985806787691326
+2406	835	2398	0.196049611343252	0.196049611343252
+2407	2398	2399	0.0153233199302382	0.0153233199302382
+2408	2399	2400	0.00232458495354821	0.00232458495354821
+2412	2402	2403	0.0775441054784182	0.0775441054784182
+2415	2405	2406	0.101142772155656	0.101142772155656
+498	441	442	0.0937180388509973	0.0937180388509973
+500	443	444	0.0957304857475106	0.0957304857475106
+14680	445	446	0.198543865097556	0.198543865097556
+443	447	448	0.0518475604896436	0.0518475604896436
+446	450	451	0.1546192530483	0.1546192530483
+310	318	319	0.318271935051083	0.318271935051083
+447	451	452	0.176746748854474	0.176746748854474
+448	452	453	0.173946054533759	0.173946054533759
+449	453	454	0.161145911336434	0.161145911336434
+450	454	455	0.183605091547984	0.183605091547984
+452	456	457	0.174314536622101	0.174314536622101
+453	457	458	0.162044543484691	0.162044543484691
+454	458	459	0.182862983981988	0.182862983981988
+456	460	6	0.0823027301557762	0.0823027301557762
+1198	1212	1213	0.0683736094322978	0.0683736094322978
+465	266	468	0.155710664946604	0.155710664946604
+466	469	470	0.0207613766308904	0.0207613766308904
+468	471	472	0.378751941435673	0.378751941435673
+472	475	476	0.0306017516715067	0.0306017516715067
+474	477	478	0.142331986757376	0.142331986757376
+476	401	479	0.0792493107270532	0.0792493107270532
+480	481	482	0.61054856130416	0.61054856130416
+481	482	483	0.00751372921095178	0.00751372921095178
+482	483	484	0.0775332394520986	0.0775332394520986
+483	484	485	0.089248827005011	0.089248827005011
+17372	40	3540	0.206359755216492	0.206359755216492
+19502	10529	10530	0.0177249357864871	0.0177249357864871
+2653	2611	2612	0.141657164390576	0.141657164390576
+2654	2612	2613	0.112637909268372	0.112637909268372
+2655	2613	2614	0.0580743648208686	0.0580743648208686
+17439	9901	10107	0.0190863480039502	0.0190863480039502
+2656	2614	2615	0.100743891980042	0.100743891980042
+2657	2615	2616	0.100475490032633	0.100475490032633
+2658	2616	2617	0.0513770343819779	0.0513770343819779
+2660	2618	2619	0.0511386540650187	0.0511386540650187
+2661	2619	2620	0.0507766966271612	0.0507766966271612
+2662	2620	2621	0.0437935865590098	0.0437935865590098
+2664	2622	2623	0.138741239129278	0.138741239129278
+2665	2623	2624	0.0616812798954739	0.0616812798954739
+2666	2624	2625	0.041735581046466	0.041735581046466
+2668	2626	2627	0.080053274568439	0.080053274568439
+2669	2627	2628	0.0586986059075718	0.0586986059075718
+2672	2630	2631	0.0511347279443915	0.0511347279443915
+2673	2631	2632	0.0473711830288774	0.0473711830288774
+2701	1199	2633	0.0222472727939579	0.0222472727939579
+2800	2469	2753	0.205232670024875	0.205232670024875
+2801	2753	2754	0.200329673691245	0.200329673691245
+2802	2754	796	0.200317660350865	0.200317660350865
+2803	796	2755	0.202508246596186	0.202508246596186
+2804	2755	2756	0.202966691897007	0.202966691897007
+2805	2756	2757	0.203516573136303	0.203516573136303
+2806	2757	2758	0.206901705972361	0.206901705972361
+2807	2758	2759	0.18527317626533	0.18527317626533
+2809	2760	2761	0.172193089993048	0.172193089993048
+2810	2761	2337	0.176949778602699	0.176949778602699
+2811	2337	2762	0.175813497300624	0.175813497300624
+2812	2762	2763	0.241500363205236	0.241500363205236
+2813	2763	2764	0.135070479950714	0.135070479950714
+2814	2764	2765	0.106502558770285	0.106502558770285
+2815	2765	2766	0.0334927078919062	0.0334927078919062
+2816	2766	2767	0.200988096936329	0.200988096936329
+2817	2767	2768	0.200799068465386	0.200799068465386
+2819	2769	1141	0.136317655493671	0.136317655493671
+2820	1141	908	0.140881200888928	0.140881200888928
+1246	190	1268	0.101376125490378	0.101376125490378
+20670	10891	10892	0.0391113232197559	0.0391113232197559
+20671	10892	10893	0.0381065586329798	0.0381065586329798
+20672	10893	10894	0.00879572218910387	0.00879572218910387
+20673	10894	6880	0.00914047873035344	0.00914047873035344
+20675	10895	10896	0.0564298376836357	0.0564298376836357
+20676	10896	10897	0.0882221479591311	0.0882221479591311
+20677	10897	10898	0.0915468728847566	0.0915468728847566
+20678	10898	10889	0.0977975944203811	0.0977975944203811
+12368	8665	8670	0.0146509072378509	0.0146509072378509
+20679	10889	10899	0.0863988642991602	0.0863988642991602
+20680	10899	10900	0.00621581990565306	0.00621581990565306
+20682	10899	10901	0.0272487435286037	0.0272487435286037
+20683	10902	10892	0.0353963477419812	0.0353963477419812
+20685	10903	10904	0.0311951245060147	0.0311951245060147
+20686	10905	8231	0.00978569112678673	0.00978569112678673
+20687	8231	10753	0.00720642488718956	0.00720642488718956
+11	11	12	0.132606225003913	0.132606225003913
+13	13	14	0.261405445974353	0.261405445974353
+14	14	15	0.0524534751729061	0.0524534751729061
+15	15	16	0.0498286567506269	0.0498286567506269
+16	16	17	0.0506321145105979	0.0506321145105979
+17	17	18	0.0480115772672805	0.0480115772672805
+19	19	20	0.586520216245135	0.586520216245135
+21	22	23	0.0471109050306669	0.0471109050306669
+22	23	24	0.117066818844753	0.117066818844753
+25	26	27	0.131659873107185	0.131659873107185
+27	28	29	0.0945023300061256	0.0945023300061256
+28	29	32	0.0547795902237084	0.0547795902237084
+29	32	33	0.0472851468321661	0.0472851468321661
+30	33	34	0.0541728824006047	0.0541728824006047
+1	1	2	0.182682884421833	0.182682884421833
+31	34	35	0.0481653228438301	0.0481653228438301
+32	35	36	0.0518878807765827	0.0518878807765827
+34	37	38	0.0490317013211587	0.0490317013211587
+35	38	39	0.0492286314169291	0.0492286314169291
+36	39	40	0.0502550749626562	0.0502550749626562
+37	40	41	0.0504947813294015	0.0504947813294015
+19671	9367	10610	0.0557753987785757	0.0557753987785757
+38	41	42	0.0486093395250147	0.0486093395250147
+39	42	43	0.0502383575999221	0.0502383575999221
+40	43	44	0.0498102685006676	0.0498102685006676
+42	45	46	0.0520249865615885	0.0520249865615885
+43	46	47	0.0510850489044332	0.0510850489044332
+44	47	48	0.0480642310133195	0.0480642310133195
+45	48	49	0.0520776483582305	0.0520776483582305
+47	50	51	0.0661075861419648	0.0661075861419648
+48	51	52	0.0568810950926816	0.0568810950926816
+49	52	53	0.0608706853363099	0.0608706853363099
+50	53	54	0.0662114802606989	0.0662114802606989
+51	54	55	0.0474185291403829	0.0474185291403829
+52	55	56	0.0539297292184645	0.0539297292184645
+53	56	57	0.108686747732496	0.108686747732496
+54	57	58	0.187258749990905	0.187258749990905
+56	59	60	1.21682866156064	1.21682866156064
+58	62	65	0.111732852527499	0.111732852527499
+60	66	67	0.0462182288009238	0.0462182288009238
+61	67	68	0.0059633062869109	0.0059633062869109
+63	69	70	0.0080040379689871	0.0080040379689871
+65	71	72	0.00371377887510826	0.00371377887510826
+66	72	73	0.0481593874311522	0.0481593874311522
+67	73	74	0.0476872742951146	0.0476872742951146
+68	74	75	0.050981067010882	0.050981067010882
+69	75	76	0.047311096476864	0.047311096476864
+70	76	77	0.00343925081784597	0.00343925081784597
+71	77	78	0.0504851331557092	0.0504851331557092
+72	78	79	0.0447329738384301	0.0447329738384301
+73	79	80	0.00573274424924571	0.00573274424924571
+74	80	81	0.048934333458383	0.048934333458383
+75	81	82	0.0451562090400863	0.0451562090400863
+76	82	83	0.0525053441886158	0.0525053441886158
+77	83	84	0.0468507536792171	0.0468507536792171
+79	85	86	0.0489620579654281	0.0489620579654281
+80	86	87	0.056293962476598	0.056293962476598
+81	87	88	0.0565505675369976	0.0565505675369976
+82	88	89	0.049261447484153	0.049261447484153
+83	89	90	0.0461992376398338	0.0461992376398338
+84	90	91	0.0452410545911285	0.0452410545911285
+85	91	92	0.040125194779582	0.040125194779582
+86	92	93	0.0417705541366205	0.0417705541366205
+87	93	94	0.0307746903425865	0.0307746903425865
+88	94	95	0.0484715360122363	0.0484715360122363
+90	58	96	0.0988139178735054	0.0988139178735054
+91	96	97	0.101340345409915	0.101340345409915
+92	97	98	0.0883916436599661	0.0883916436599661
+93	98	99	0.0102766637725455	0.0102766637725455
+94	99	100	0.0815080239205417	0.0815080239205417
+95	100	101	0.0191432455952872	0.0191432455952872
+99	104	105	0.149790406602899	0.149790406602899
+100	106	107	0.104888043119077	0.104888043119077
+101	107	108	0.276057285299863	0.276057285299863
+103	109	110	0.318041485575751	0.318041485575751
+105	111	112	0.0487653491195207	0.0487653491195207
+106	113	114	0.160343090933149	0.160343090933149
+107	114	115	0.208121584183608	0.208121584183608
+111	118	119	0.137350395143796	0.137350395143796
+113	120	121	0.356240759753107	0.356240759753107
+114	121	122	0.149871853701347	0.149871853701347
+115	122	123	0.148228608040365	0.148228608040365
+116	123	124	0.294126045752515	0.294126045752515
+118	125	126	0.131313615022207	0.131313615022207
+119	126	127	0.263795049720844	0.263795049720844
+123	130	131	0.221071288024568	0.221071288024568
+125	132	133	0.0549684068983719	0.0549684068983719
+126	133	135	0.0478699749630446	0.0478699749630446
+127	135	136	0.130706329520293	0.130706329520293
+128	136	137	0.0495130025200929	0.0495130025200929
+129	137	138	0.0194653537975714	0.0194653537975714
+130	138	139	0.0302495949579548	0.0302495949579548
+131	139	140	0.097138516429268	0.097138516429268
+133	141	142	0.0984160429772276	0.0984160429772276
+1414	1439	1440	0.0969799596597411	0.0969799596597411
+135	143	144	0.094779584184767	0.094779584184767
+136	144	145	0.102947980955417	0.102947980955417
+137	145	146	0.0998791210708115	0.0998791210708115
+138	146	147	0.10354963170018	0.10354963170018
+139	147	148	0.0970503169891706	0.0970503169891706
+141	149	150	0.0462633170535789	0.0462633170535789
+142	150	151	0.0859494466376985	0.0859494466376985
+143	151	152	0.084056042435147	0.084056042435147
+144	152	131	0.0865811985903579	0.0865811985903579
+145	131	155	0.0846809008371401	0.0846809008371401
+146	155	156	0.0860732350550831	0.0860732350550831
+147	156	157	0.0810260254286054	0.0810260254286054
+148	157	158	0.0821650587696609	0.0821650587696609
+149	158	159	0.0810216994355951	0.0810216994355951
+150	159	160	0.0856058417834562	0.0856058417834562
+151	160	161	0.0815928873404902	0.0815928873404902
+152	161	162	0.00737779613210769	0.00737779613210769
+154	163	164	0.00763240627009494	0.00763240627009494
+155	164	165	0.0713522613021865	0.0713522613021865
+156	165	166	0.00987473687183569	0.00987473687183569
+157	166	167	0.0668981585963986	0.0668981585963986
+158	167	168	0.0113627652096004	0.0113627652096004
+159	168	169	0.0796520415458163	0.0796520415458163
+160	169	170	0.0789939822174276	0.0789939822174276
+161	170	171	0.0216393201096419	0.0216393201096419
+162	171	172	0.05739626274334	0.05739626274334
+163	172	173	0.0799414498698892	0.0799414498698892
+164	173	174	0.161327077814812	0.161327077814812
+165	174	175	0.292992058630926	0.292992058630926
+166	175	176	0.108231632340063	0.108231632340063
+167	176	177	0.106370208061557	0.106370208061557
+168	177	178	0.0920329418240447	0.0920329418240447
+169	178	179	0.199657740223053	0.199657740223053
+170	179	180	0.100614906430247	0.100614906430247
+1461	1483	1484	0.0976853528091841	0.0976853528091841
+171	180	181	0.0991515808605787	0.0991515808605787
+172	181	182	0.101348037813126	0.101348037813126
+175	184	185	0.0991513776470571	0.0991513776470571
+178	187	188	0.0984378662868895	0.0984378662868895
+179	188	189	0.709590130188447	0.709590130188447
+180	190	191	0.100578501060841	0.100578501060841
+181	191	192	0.0991218871214513	0.0991218871214513
+182	192	193	0.20342936542853	0.20342936542853
+183	193	194	0.207080695389682	0.207080695389682
+184	194	195	0.202642969626672	0.202642969626672
+185	195	196	0.201913108682536	0.201913108682536
+186	196	197	0.201920207523846	0.201920207523846
+187	197	198	0.201206377797867	0.201206377797867
+188	198	199	0.199728327239083	0.199728327239083
+189	199	200	0.179903776297828	0.179903776297828
+190	200	201	0.00513723410606708	0.00513723410606708
+191	201	202	0.207079558909688	0.207079558909688
+194	169	204	0.256940343045097	0.256940343045097
+195	204	205	0.14761309930181	0.14761309930181
+384	386	387	0.312847187378026	0.312847187378026
+197	208	209	0.0482198776992404	0.0482198776992404
+198	209	210	1.36238336075367	1.36238336075367
+199	211	212	0.0762056360151952	0.0762056360151952
+210	221	222	0.10839564681744	0.10839564681744
+212	223	224	0.197685755221764	0.197685755221764
+213	224	225	0.136500664002185	0.136500664002185
+215	226	227	0.0378358956085511	0.0378358956085511
+217	228	229	0.0700057652168164	0.0700057652168164
+218	229	230	0.156709235598665	0.156709235598665
+220	231	232	0.0710636642555904	0.0710636642555904
+223	234	235	0.0652725377045483	0.0652725377045483
+227	237	238	0.33099974682308	0.33099974682308
+19951	4950	4670	0.10032168356836	0.10032168356836
+229	239	240	0.145321847286165	0.145321847286165
+230	240	241	0.0697724132050665	0.0697724132050665
+231	241	242	0.0623380559401012	0.0623380559401012
+232	242	243	0.121807717540091	0.121807717540091
+233	243	244	0.123936016070967	0.123936016070967
+234	244	245	0.0423914167747626	0.0423914167747626
+235	245	30	0.0421885133223055	0.0421885133223055
+238	134	246	0.0735610173824186	0.0735610173824186
+246	253	254	0.386604280856974	0.386604280856974
+261	271	272	0.0791195509987444	0.0791195509987444
+262	272	273	0.0178978198366689	0.0178978198366689
+263	273	274	0.0364878269996901	0.0364878269996901
+264	274	275	0.130636800507014	0.130636800507014
+265	275	276	0.0381201943550558	0.0381201943550558
+272	282	283	0.097546663905458	0.097546663905458
+556	66	551	0.00841985913797999	0.00841985913797999
+557	551	552	0.04510313602044	0.04510313602044
+559	553	554	0.116858726253731	0.116858726253731
+562	249	556	0.0347143242166075	0.0347143242166075
+563	557	250	0.0320475892789012	0.0320475892789012
+581	573	574	3.62449911588374	3.62449911588374
+582	495	575	0.042579905853808	0.042579905853808
+583	575	576	0.0263063929759334	0.0263063929759334
+585	577	311	0.0472092453507094	0.0472092453507094
+587	578	579	0.310605662522472	0.310605662522472
+589	580	206	0.0784574482758401	0.0784574482758401
+591	581	582	0.323379230044806	0.323379230044806
+593	583	584	0.18304036244052	0.18304036244052
+595	585	586	0.0719402278196197	0.0719402278196197
+597	587	588	0.0168822192889414	0.0168822192889414
+599	589	590	0.0668977161070656	0.0668977161070656
+601	592	593	0.00991684169352972	0.00991684169352972
+606	597	598	0.0427315746706827	0.0427315746706827
+610	601	602	0.0635315500234909	0.0635315500234909
+611	602	603	0.0528935910157463	0.0528935910157463
+16699	9993	9994	0.012991856325609	0.012991856325609
+612	603	604	0.0535739683641864	0.0535739683641864
+615	606	307	0.0053241575287587	0.0053241575287587
+616	307	607	0.210415758379136	0.210415758379136
+618	608	609	0.0943257357645838	0.0943257357645838
+620	610	611	0.12631191015444	0.12631191015444
+621	611	612	0.121362330065702	0.121362330065702
+11699	1033	1034	0.0933842207119007	0.0933842207119007
+622	612	613	0.120087101438352	0.120087101438352
+623	613	614	0.109496386514743	0.109496386514743
+625	615	616	0.099485158811405	0.099485158811405
+626	616	617	0.0380723765849069	0.0380723765849069
+627	617	618	0.0166082915806853	0.0166082915806853
+629	619	620	0.0454138336035488	0.0454138336035488
+630	620	621	0.0942731398582661	0.0942731398582661
+631	621	622	0.00735436876666859	0.00735436876666859
+632	622	623	0.102647301082546	0.102647301082546
+633	623	544	0.0305138174261522	0.0305138174261522
+636	625	626	0.0461061908767262	0.0461061908767262
+637	626	627	0.0495093856599813	0.0495093856599813
+639	628	629	0.00822721040716169	0.00822721040716169
+640	629	630	0.102896638771385	0.102896638771385
+641	630	631	0.106879933016847	0.106879933016847
+642	631	632	0.103715813554019	0.103715813554019
+643	632	633	0.10692744992309	0.10692744992309
+644	633	634	0.103895780437174	0.103895780437174
+645	634	635	0.10514306949893	0.10514306949893
+647	636	637	0.00886536795801057	0.00886536795801057
+648	637	638	0.204097990393348	0.204097990393348
+649	638	639	0.00993994545767469	0.00993994545767469
+651	640	641	0.322116221139114	0.322116221139114
+653	643	644	0.14058289547664	0.14058289547664
+654	644	645	0.143886814663415	0.143886814663415
+657	647	648	0.1449055455771	0.1449055455771
+660	650	651	0.0986374455510098	0.0986374455510098
+661	651	652	0.109870142544629	0.109870142544629
+662	652	653	0.107278100090415	0.107278100090415
+663	653	654	0.105274765421146	0.105274765421146
+664	654	655	0.107321673078917	0.107321673078917
+665	655	659	0.103426909396494	0.103426909396494
+666	659	660	0.0476206970204551	0.0476206970204551
+667	660	661	0.0487580750629072	0.0487580750629072
+668	661	662	0.103115405190933	0.103115405190933
+669	662	663	0.118337011744519	0.118337011744519
+670	663	664	0.118107974454135	0.118107974454135
+671	664	665	0.223948343500364	0.223948343500364
+672	665	666	0.106040631048838	0.106040631048838
+673	666	667	0.0256000736542961	0.0256000736542961
+674	667	668	0.0803036973488277	0.0803036973488277
+675	668	669	0.107519240980512	0.107519240980512
+1662	1688	1689	0.0492594246995293	0.0492594246995293
+677	670	671	0.106757477563009	0.106757477563009
+678	671	672	0.103159385358598	0.103159385358598
+679	672	673	0.111733647900791	0.111733647900791
+680	673	674	0.10480806031483	0.10480806031483
+681	674	675	0.0524357665703955	0.0524357665703955
+682	675	676	0.0522607419390769	0.0522607419390769
+683	676	677	0.0516311575112871	0.0516311575112871
+684	677	678	0.0529566114294976	0.0529566114294976
+685	678	679	0.0524070698016137	0.0524070698016137
+686	679	680	0.187479766906081	0.187479766906081
+690	683	684	0.0954023275162926	0.0954023275162926
+691	684	685	0.100472575096637	0.100472575096637
+692	685	686	0.0954830683114717	0.0954830683114717
+693	686	687	0.0981912656165647	0.0981912656165647
+694	687	688	0.0529127579061837	0.0529127579061837
+695	688	689	0.097652475318391	0.097652475318391
+696	689	690	0.0954475604442949	0.0954475604442949
+697	690	691	1.04422795392214	1.04422795392214
+698	692	693	0.101491505067343	0.101491505067343
+700	694	695	0.0992328230839297	0.0992328230839297
+701	695	696	0.102484361376735	0.102484361376735
+703	697	698	0.0986965284486813	0.0986965284486813
+704	698	699	0.0994466333494717	0.0994466333494717
+705	699	700	0.0997814367951755	0.0997814367951755
+706	700	702	0.0968138925983087	0.0968138925983087
+707	702	703	0.100377700728806	0.100377700728806
+708	703	704	0.0945219805489684	0.0945219805489684
+709	704	705	0.101319162842739	0.101319162842739
+711	706	707	0.0929527445510612	0.0929527445510612
+712	707	708	0.132514897770158	0.132514897770158
+713	708	709	0.136169309583257	0.136169309583257
+714	709	710	0.133600704636896	0.133600704636896
+715	710	711	0.131877184107974	0.131877184107974
+716	711	712	0.137129048962243	0.137129048962243
+717	712	714	0.139625593223683	0.139625593223683
+718	714	715	0.140147388874583	0.140147388874583
+720	716	717	0.139181895573122	0.139181895573122
+721	717	718	0.136478657719685	0.136478657719685
+722	718	719	0.0608836584293049	0.0608836584293049
+723	719	720	0.0543052596791692	0.0543052596791692
+724	720	721	0.402215107963206	0.402215107963206
+726	722	723	0.109800761131151	0.109800761131151
+728	724	725	0.0404933936313706	0.0404933936313706
+729	725	726	0.0429068637575149	0.0429068637575149
+730	726	54	0.117488559492451	0.117488559492451
+732	728	729	0.201386679597364	0.201386679597364
+733	729	730	0.204011830144653	0.204011830144653
+734	730	731	0.199761692314281	0.199761692314281
+17425	10099	10083	0.0366406616748247	0.0366406616748247
+735	731	732	0.201563131430502	0.201563131430502
+736	732	733	0.402282143818784	0.402282143818784
+737	734	735	0.0902645098486118	0.0902645098486118
+738	735	736	0.0928507623233121	0.0928507623233121
+739	736	737	0.0900332912586976	0.0900332912586976
+740	737	738	0.0739532182409675	0.0739532182409675
+741	738	739	0.100409435325613	0.100409435325613
+742	739	740	0.0918337393875257	0.0918337393875257
+743	740	741	0.0605135925040139	0.0605135925040139
+744	741	744	0.09764928319827	0.09764928319827
+745	744	745	0.100176801141236	0.100176801141236
+746	745	746	0.0948931710062943	0.0948931710062943
+747	746	747	0.0932950961705344	0.0932950961705344
+748	747	748	0.0948942633213168	0.0948942633213168
+749	748	749	0.0880271421463829	0.0880271421463829
+750	749	750	0.101773658707536	0.101773658707536
+751	750	751	0.094781491782375	0.094781491782375
+752	751	752	0.0909312964030863	0.0909312964030863
+754	753	754	0.0476837940219257	0.0476837940219257
+755	754	755	0.0476837940207114	0.0476837940207114
+756	755	756	0.100492444483886	0.100492444483886
+760	760	761	0.278292588595779	0.278292588595779
+18241	8960	6768	0.145513824807152	0.145513824807152
+762	762	763	0.102174293003021	0.102174293003021
+763	763	764	0.0992571756698332	0.0992571756698332
+764	764	765	0.100622536912342	0.100622536912342
+766	766	767	0.101850111631528	0.101850111631528
+767	767	768	0.0961954013729948	0.0961954013729948
+768	768	769	0.207085640087389	0.207085640087389
+769	769	770	0.1068825400281	0.1068825400281
+770	770	771	0.105967528573409	0.105967528573409
+771	771	772	0.107278769323728	0.107278769323728
+772	772	199	0.0969401274978018	0.0969401274978018
+773	199	776	0.101328977128045	0.101328977128045
+774	776	777	0.0984004881984158	0.0984004881984158
+775	777	778	0.0991276696889056	0.0991276696889056
+779	784	785	0.101305408476756	0.101305408476756
+780	785	786	0.0976265458519536	0.0976265458519536
+781	786	787	0.0966903245975086	0.0966903245975086
+783	788	789	0.0146697046803596	0.0146697046803596
+784	789	790	0.0984239882007814	0.0984239882007814
+785	790	791	0.0942419953953979	0.0942419953953979
+786	791	792	0.0942417343682122	0.0942417343682122
+787	792	793	0.0942331855902031	0.0942331855902031
+789	794	795	0.0937138545964453	0.0937138545964453
+790	795	796	0.0956046195795482	0.0956046195795482
+791	796	797	0.0946549122760597	0.0946549122760597
+792	797	798	0.100527766007763	0.100527766007763
+793	798	799	0.10316918665	0.10316918665
+795	800	801	0.103459881633314	0.103459881633314
+796	801	802	0.0997925526863961	0.0997925526863961
+797	802	803	0.0998006432146063	0.0998006432146063
+854	804	805	0.1238606801811	0.1238606801811
+799	807	808	0.10163704947704	0.10163704947704
+800	808	812	0.0515064726572222	0.0515064726572222
+801	812	813	0.0494547954602067	0.0494547954602067
+802	813	814	0.051447981297694	0.051447981297694
+803	814	815	0.0525679212147471	0.0525679212147471
+804	815	816	0.0487973630951461	0.0487973630951461
+805	816	817	0.0522598325196538	0.0522598325196538
+806	817	818	0.103406751654374	0.103406751654374
+807	818	819	0.10785615815132	0.10785615815132
+808	819	820	0.10473605712406	0.10473605712406
+809	820	821	0.112264494558786	0.112264494558786
+810	821	822	0.0974128787334051	0.0974128787334051
+811	822	823	0.107993299539667	0.107993299539667
+812	823	824	0.0548178827467902	0.0548178827467902
+17428	10106	10103	0.0082057240713584	0.0082057240713584
+1819	1835	1836	0.0691383900190408	0.0691383900190408
+813	824	825	0.0508588332180354	0.0508588332180354
+816	827	828	0.0512039318870449	0.0512039318870449
+817	828	829	0.0518718595198435	0.0518718595198435
+818	829	830	0.106833526059922	0.106833526059922
+820	831	832	0.385745696022263	0.385745696022263
+821	832	833	0.404856481972801	0.404856481972801
+823	834	835	0.105948732119107	0.105948732119107
+824	835	838	0.0910625591495108	0.0910625591495108
+826	839	840	0.0919963536570051	0.0919963536570051
+828	841	842	0.174755253051921	0.174755253051921
+829	842	843	0.178568082023164	0.178568082023164
+830	843	844	0.17297498203528	0.17297498203528
+831	844	845	0.173265495891133	0.173265495891133
+832	845	846	0.177949551875208	0.177949551875208
+833	846	847	0.164704515205255	0.164704515205255
+835	848	849	0.140807407128784	0.140807407128784
+839	852	853	0.167627273627897	0.167627273627897
+840	853	854	0.0221861617364752	0.0221861617364752
+841	854	855	0.199351380476648	0.199351380476648
+842	855	856	0.154506611729302	0.154506611729302
+843	856	857	0.177121299660486	0.177121299660486
+844	857	858	0.173233506037634	0.173233506037634
+845	858	859	0.161447290254498	0.161447290254498
+846	859	860	0.184417991926907	0.184417991926907
+847	860	861	0.174097913655798	0.174097913655798
+848	861	862	0.200651350067359	0.200651350067359
+851	864	865	0.136205566327931	0.136205566327931
+852	865	866	0.134098020570816	0.134098020570816
+853	866	804	0.130206342500308	0.130206342500308
+855	805	869	0.151636521465058	0.151636521465058
+856	869	870	0.0565102957854785	0.0565102957854785
+859	872	873	0.106081890543097	0.106081890543097
+860	873	874	0.104885275538693	0.104885275538693
+861	874	875	0.105346104071406	0.105346104071406
+862	875	876	0.105115636520032	0.105115636520032
+16596	6712	8570	0.146117658845452	0.146117658845452
+864	877	878	0.106492224339564	0.106492224339564
+865	878	879	0.105226257982301	0.105226257982301
+866	879	880	0.109300044149485	0.109300044149485
+867	880	881	0.105305755069531	0.105305755069531
+868	881	882	0.0524982326673818	0.0524982326673818
+869	882	883	0.0527289587191423	0.0527289587191423
+870	883	884	0.104777165086199	0.104777165086199
+871	884	885	0.101110616467656	0.101110616467656
+873	886	887	0.105175290472485	0.105175290472485
+874	887	888	0.105460060240618	0.105460060240618
+875	888	889	0.104542724277831	0.104542724277831
+878	891	892	0.107871242081588	0.107871242081588
+879	892	893	0.100327397599291	0.100327397599291
+880	893	894	0.10715921423401	0.10715921423401
+11694	895	896	0.0160104862378167	0.0160104862378167
+881	894	897	0.103236099875311	0.103236099875311
+882	897	898	0.106539225146671	0.106539225146671
+16754	10009	7565	0.0493392725986542	0.0493392725986542
+20639	10032	10878	0.0503841615701827	0.0503841615701827
+885	864	900	0.0968355268957622	0.0968355268957622
+886	900	901	0.0921857962021889	0.0921857962021889
+887	901	902	0.0154453872411826	0.0154453872411826
+888	902	903	0.099023611112339	0.099023611112339
+889	903	904	0.106658816969038	0.106658816969038
+890	904	905	0.102850064051981	0.102850064051981
+891	905	906	0.106374102165022	0.106374102165022
+893	907	908	0.107980942566683	0.107980942566683
+897	911	912	0.0137000260099873	0.0137000260099873
+900	914	915	0.266296417735211	0.266296417735211
+902	916	917	0.109365780913081	0.109365780913081
+903	917	918	0.110688879788924	0.110688879788924
+904	918	919	0.0528048087506356	0.0528048087506356
+905	919	920	0.0548227612983216	0.0548227612983216
+1909	1921	1922	0.0521063364540888	0.0521063364540888
+12333	8655	8656	0.00566894958463717	0.00566894958463717
+906	920	921	0.0600921295133805	0.0600921295133805
+907	921	922	0.0524145297386554	0.0524145297386554
+908	922	923	0.0533449751273277	0.0533449751273277
+909	923	924	0.0522830317618348	0.0522830317618348
+910	924	925	0.0531296104749593	0.0531296104749593
+911	925	926	0.0494870453453698	0.0494870453453698
+912	926	927	0.0490530439973252	0.0490530439973252
+916	930	931	0.0484862367563559	0.0484862367563559
+917	931	932	0.0491192175023229	0.0491192175023229
+918	932	933	0.0512499454427793	0.0512499454427793
+935	950	951	0.0925005138771614	0.0925005138771614
+936	951	952	0.09155937925052	0.09155937925052
+937	952	953	0.096647434304121	0.096647434304121
+938	953	954	0.0946813321937467	0.0946813321937467
+939	954	955	0.0465376592907314	0.0465376592907314
+941	956	957	0.0470827842175089	0.0470827842175089
+942	957	958	0.0477097696809632	0.0477097696809632
+943	958	959	0.0469673192776546	0.0469673192776546
+944	959	857	0.0470271779665272	0.0470271779665272
+945	857	452	0.0433482724753884	0.0433482724753884
+946	452	960	0.0461959621064724	0.0461959621064724
+947	960	456	0.0448744265859584	0.0448744265859584
+948	456	961	0.0477309298676521	0.0477309298676521
+950	962	963	0.203057783136815	0.203057783136815
+951	963	964	0.111884367881333	0.111884367881333
+952	964	965	0.176567620505235	0.176567620505235
+953	965	966	0.178378901323504	0.178378901323504
+958	970	971	0.205957142551392	0.205957142551392
+960	972	973	0.204078625402165	0.204078625402165
+961	973	282	0.115147222371539	0.115147222371539
+964	976	977	0.0518319225146996	0.0518319225146996
+965	977	978	0.124228855322375	0.124228855322375
+966	978	979	0.172234101769625	0.172234101769625
+967	979	980	0.191895457064314	0.191895457064314
+968	980	981	0.160844607226305	0.160844607226305
+969	981	936	0.183612712644296	0.183612712644296
+18742	7651	6216	0.274731695307389	0.274731695307389
+970	936	982	0.178134725901618	0.178134725901618
+972	983	984	0.199061323006722	0.199061323006722
+973	984	985	0.188587247900735	0.188587247900735
+974	985	986	0.0433580404548831	0.0433580404548831
+975	986	987	0.125051012370851	0.125051012370851
+977	988	989	0.141681092806979	0.141681092806979
+978	989	990	0.0574887447164737	0.0574887447164737
+979	990	991	0.201644088462744	0.201644088462744
+981	992	993	0.0142751187411164	0.0142751187411164
+983	994	995	0.198087310718341	0.198087310718341
+984	995	996	0.021294324874815	0.021294324874815
+986	997	998	0.477759831198138	0.477759831198138
+988	999	1000	0.107359092710075	0.107359092710075
+989	1000	1001	0.213427542201395	0.213427542201395
+990	1001	1002	0.0204216124756694	0.0204216124756694
+991	1002	1003	0.169295945736254	0.169295945736254
+992	1003	1004	0.202119044170343	0.202119044170343
+993	1004	1007	0.405136142942317	0.405136142942317
+994	1008	753	0.128100004965855	0.128100004965855
+996	1009	277	0.197304277838347	0.197304277838347
+998	1010	1011	0.168461631075683	0.168461631075683
+999	1011	1012	0.0217275963794507	0.0217275963794507
+1000	1012	1013	0.199706135128057	0.199706135128057
+1001	1013	1014	0.154996233446664	0.154996233446664
+1002	1014	1015	0.0484476295387052	0.0484476295387052
+1005	1018	1019	0.198018950245581	0.198018950245581
+1006	1019	1020	0.173297369328456	0.173297369328456
+1007	1020	1021	0.177035115256862	0.177035115256862
+1008	1021	1022	0.17859043694682	0.17859043694682
+1009	1022	674	0.00356025053355106	0.00356025053355106
+1010	674	1023	0.00366943257948706	0.00366943257948706
+1011	1023	1024	0.17484373239475	0.17484373239475
+1012	1024	1025	0.173998681621435	0.173998681621435
+1015	1027	1028	0.0704684258530158	0.0704684258530158
+1017	1029	1030	0.0048505404615695	0.0048505404615695
+1018	1030	1031	0.00340295138148338	0.00340295138148338
+1019	1031	1035	0.134848566335067	0.134848566335067
+1020	1035	1036	0.137493615415566	0.137493615415566
+16764	9868	2745	0.0490633016235184	0.0490633016235184
+1021	1036	827	0.141821861187588	0.141821861187588
+1023	1037	1038	0.144096028267239	0.144096028267239
+1024	1038	1039	0.13873602575008	0.13873602575008
+1025	1039	1040	0.137557829611355	0.137557829611355
+1026	1040	1041	0.134490266221638	0.134490266221638
+1027	1041	1042	0.141541481862683	0.141541481862683
+1028	1042	1043	0.00492593525103261	0.00492593525103261
+1029	1043	1044	0.138593778312369	0.138593778312369
+1030	1044	1045	0.140603553737706	0.140603553737706
+1031	1045	881	0.137936273445967	0.137936273445967
+1032	881	1046	0.138493298016227	0.138493298016227
+1033	1046	1047	0.135001777755027	0.135001777755027
+1034	1047	1048	0.131055322767976	0.131055322767976
+1035	1048	1049	0.124939018757432	0.124939018757432
+1037	1050	1051	0.292899479856136	0.292899479856136
+1038	1051	1052	0.166422260927488	0.166422260927488
+1040	735	1053	0.129020329518136	0.129020329518136
+1042	1054	1055	0.104556386299221	0.104556386299221
+1044	1056	1057	0.0821976961903273	0.0821976961903273
+1046	1058	1059	0.198827335717405	0.198827335717405
+1048	1060	1061	0.168836903384636	0.168836903384636
+1050	1062	1063	0.404705159588638	0.404705159588638
+1051	1067	1068	0.132512985213334	0.132512985213334
+1052	1068	1069	0.13497040303733	0.13497040303733
+1053	1069	1070	0.132768776601327	0.132768776601327
+1056	1072	1073	0.0939030414376985	0.0939030414376985
+1058	1074	1075	0.180616569310233	0.180616569310233
+1059	1075	1076	0.0336398662027363	0.0336398662027363
+1060	1076	1077	0.0410609349522483	0.0410609349522483
+1061	1077	1078	0.0827433862317427	0.0827433862317427
+1062	1078	1079	0.0826887112506465	0.0826887112506465
+1064	1080	464	0.0761353371210495	0.0761353371210495
+1065	464	1081	0.349900041786437	0.349900041786437
+1066	1081	1082	0.00956876487693368	0.00956876487693368
+1068	1083	1084	0.207455473901342	0.207455473901342
+1069	1084	1085	0.20253048003379	0.20253048003379
+1070	1085	1086	0.20117520633799	0.20117520633799
+1071	1086	1087	0.200445374909098	0.200445374909098
+1073	1088	1089	0.193552555847569	0.193552555847569
+1074	1089	1090	0.201907921550129	0.201907921550129
+1075	1090	1091	0.409168814751628	0.409168814751628
+1078	1094	1095	0.176210660233647	0.176210660233647
+1082	1098	1099	0.214073333831546	0.214073333831546
+1083	1099	1100	0.273059176292595	0.273059176292595
+1085	1101	1102	0.177543118890406	0.177543118890406
+1086	1102	1103	0.205192174072119	0.205192174072119
+1089	1105	1106	0.177750162727048	0.177750162727048
+1090	1106	1107	0.0539560094135977	0.0539560094135977
+1091	1107	1108	0.122234944576301	0.122234944576301
+1092	1108	1109	0.177333676437683	0.177333676437683
+1093	1109	1110	0.180925459405873	0.180925459405873
+1095	1111	1112	0.128811671442731	0.128811671442731
+1096	1112	1113	0.134815073580703	0.134815073580703
+1097	1113	1114	0.136688571742098	0.136688571742098
+1098	1114	1115	0.101403665812315	0.101403665812315
+1099	1115	1116	0.102067679100378	0.102067679100378
+1102	1118	1119	0.204345080233058	0.204345080233058
+1103	1119	1120	0.199139333361331	0.199139333361331
+1104	1120	1121	0.0469911073941159	0.0469911073941159
+1105	1121	1122	0.0592169845475301	0.0592169845475301
+1106	1122	1123	0.0953718885827498	0.0953718885827498
+1107	1123	1124	0.0510557799357253	0.0510557799357253
+1108	1124	1125	0.150795725410384	0.150795725410384
+1109	1125	1126	0.203566805558282	0.203566805558282
+1111	1127	1128	0.0472430646130033	0.0472430646130033
+1112	1128	1129	0.205543981836037	0.205543981836037
+1114	1130	1131	0.164841461931526	0.164841461931526
+1115	1131	1132	0.171242319742711	0.171242319742711
+1116	1132	1133	0.15535130673221	0.15535130673221
+1117	1133	1134	0.155906924058663	0.155906924058663
+1118	1134	1135	0.158641971110509	0.158641971110509
+1120	1136	1137	0.202486056810199	0.202486056810199
+1124	1140	1141	0.106376038726262	0.106376038726262
+1125	1141	1142	0.11299023410348	0.11299023410348
+1127	1143	1144	0.105553895231553	0.105553895231553
+1128	1144	1145	0.104117784384988	0.104117784384988
+1129	1145	1146	0.103483298103444	0.103483298103444
+1131	1147	1148	0.20922373460901	0.20922373460901
+1132	1148	1149	0.150393643985841	0.150393643985841
+1133	1149	1150	0.0550246362758013	0.0550246362758013
+1134	1150	1151	0.102697719375893	0.102697719375893
+1135	1151	1152	0.0983530643806034	0.0983530643806034
+1136	1152	1153	0.0500465548413358	0.0500465548413358
+1137	1153	1154	0.957298194837815	0.957298194837815
+1138	1155	1156	0.108691319059022	0.108691319059022
+1139	1156	1157	0.102249102579738	0.102249102579738
+1140	1157	1160	0.108168549451273	0.108168549451273
+1141	1160	1161	0.101829092464478	0.101829092464478
+1144	1162	1163	0.0512778300683452	0.0512778300683452
+1146	1164	1165	0.100040433804019	0.100040433804019
+1147	1165	1166	0.107579273983848	0.107579273983848
+1148	1166	1167	0.103452121653836	0.103452121653836
+1149	1167	1168	0.102717798897395	0.102717798897395
+1150	1168	1169	0.106376023896376	0.106376023896376
+1151	1169	1170	0.105583034841699	0.105583034841699
+1152	1170	1171	0.105884448878202	0.105884448878202
+1153	1171	1172	0.107984392656028	0.107984392656028
+1154	1172	1173	0.100211807661524	0.100211807661524
+1156	1174	1175	0.0651406407561477	0.0651406407561477
+1157	1176	1177	0.0916420940843904	0.0916420940843904
+1158	1177	1178	0.317057086238115	0.317057086238115
+1159	1178	1179	0.0403904373250439	0.0403904373250439
+1160	1179	1180	0.087664479851631	0.087664479851631
+1163	555	558	0.0996109464859662	0.0996109464859662
+1165	1182	1183	0.200712633020301	0.200712633020301
+1166	1183	141	0.201303158931495	0.201303158931495
+1167	141	1184	0.160264959796536	0.160264959796536
+1169	1185	1186	0.0892826433471673	0.0892826433471673
+16608	9325	9944	0.146983175121654	0.146983175121654
+1171	1187	1011	0.0980488049438762	0.0980488049438762
+1172	1011	1188	0.100351187096818	0.100351187096818
+1173	1188	1189	0.0991689160182861	0.0991689160182861
+1174	1189	1190	0.0985624561842153	0.0985624561842153
+1175	1190	1191	0.0992629404802966	0.0992629404802966
+1177	1192	1193	0.0982024972051538	0.0982024972051538
+1178	1193	1194	0.0979660824445765	0.0979660824445765
+1179	1194	1195	0.0324477724054976	0.0324477724054976
+1180	1195	1196	0.0675268282620706	0.0675268282620706
+1182	1197	1198	0.0679368973278076	0.0679368973278076
+1184	1199	1200	0.0686815112230977	0.0686815112230977
+1185	1200	1201	0.0309923494566171	0.0309923494566171
+1186	1201	1202	0.0899174664521967	0.0899174664521967
+1187	1202	1203	0.0945518763756908	0.0945518763756908
+1188	1203	1204	0.0933113340782308	0.0933113340782308
+1189	1204	1205	0.09509225728821	0.09509225728821
+1190	1205	1206	0.0947055520559319	0.0947055520559319
+1191	1206	1207	0.0954663818870976	0.0954663818870976
+1192	1207	1208	0.0457748420522195	0.0457748420522195
+1193	1208	853	0.0452361278424885	0.0452361278424885
+1194	853	1209	0.0465328064656566	0.0465328064656566
+1195	1209	1210	0.0443349306457526	0.0443349306457526
+1196	1210	1211	0.0926255737985973	0.0926255737985973
+1200	1214	1215	0.199187167786165	0.199187167786165
+1201	1215	1216	0.200954541481784	0.200954541481784
+1202	1216	1217	0.405030982441888	0.405030982441888
+1203	1218	1219	0.0492032479248998	0.0492032479248998
+1204	1219	1220	0.0957003230509211	0.0957003230509211
+1206	1221	1222	0.0745042299709739	0.0745042299709739
+1207	1222	1223	0.102728552500243	0.102728552500243
+1208	1223	1224	0.112933078893132	0.112933078893132
+1210	1225	1226	0.132646861758746	0.132646861758746
+1212	1227	1228	0.133737749967366	0.133737749967366
+1213	1228	1229	0.138340301298334	0.138340301298334
+1214	1229	1230	0.133937469551528	0.133937469551528
+1215	1230	1231	0.133215122537399	0.133215122537399
+1216	1231	1236	0.135593895539884	0.135593895539884
+1217	1236	1237	0.134329596288595	0.134329596288595
+1218	1237	1238	0.133838756927755	0.133838756927755
+1220	1239	1240	0.201119608536246	0.201119608536246
+1222	1241	1242	0.0687159203588902	0.0687159203588902
+1223	1242	1243	0.133400908392016	0.133400908392016
+1224	1243	1247	0.135380581131659	0.135380581131659
+1225	1247	1248	0.134002229768192	0.134002229768192
+1226	1248	1249	0.133545106900313	0.133545106900313
+1227	1249	1250	0.135368900396577	0.135368900396577
+1228	1250	1251	0.135024432224222	0.135024432224222
+1229	1251	1252	0.104469760585228	0.104469760585228
+1230	1252	1253	0.0306570001135196	0.0306570001135196
+1231	1253	1254	0.0720522950545032	0.0720522950545032
+1232	1254	1255	0.0658986376594475	0.0658986376594475
+1233	1255	1256	0.0399746208950617	0.0399746208950617
+1234	1256	1257	0.0944491578366609	0.0944491578366609
+1235	1257	1258	0.132766928353997	0.132766928353997
+1236	1258	1259	0.135424431672451	0.135424431672451
+1237	1259	1260	0.140672385455392	0.140672385455392
+1238	1260	1261	0.134975501941172	0.134975501941172
+1239	1261	1262	0.0645486549169547	0.0645486549169547
+1240	1262	1263	0.0682069680036474	0.0682069680036474
+1241	1263	1264	0.132661334326961	0.132661334326961
+1242	1264	1265	0.198750077150319	0.198750077150319
+1243	1265	1266	0.153240793837705	0.153240793837705
+1245	273	1267	0.0675767060379672	0.0675767060379672
+1247	1268	1269	0.0991648269688332	0.0991648269688332
+1248	1269	1270	0.105715575753422	0.105715575753422
+1249	1270	1271	0.096909170039208	0.096909170039208
+1251	1272	1273	0.132822339876578	0.132822339876578
+1252	1273	1274	0.108602805332053	0.108602805332053
+1253	1274	1275	0.0271637528935803	0.0271637528935803
+1254	1275	1276	0.112230208152067	0.112230208152067
+1255	1276	1277	0.0176649567962355	0.0176649567962355
+1256	1277	1278	0.135399208639876	0.135399208639876
+1257	1278	1279	0.134958357098824	0.134958357098824
+1258	1279	1280	0.13471438954866	0.13471438954866
+1259	1280	1281	0.0527317447874755	0.0527317447874755
+1260	1281	1282	0.0822068643990868	0.0822068643990868
+1262	24	1283	0.0541075654220215	0.0541075654220215
+1263	1283	1284	0.0277584904979192	0.0277584904979192
+1264	1284	1285	0.0119510600074318	0.0119510600074318
+1265	1285	1286	0.00765101800505865	0.00765101800505865
+1267	1287	1288	0.0102422085479252	0.0102422085479252
+1269	1289	1290	0.18749026453307	0.18749026453307
+1270	1290	1291	0.200784792674354	0.200784792674354
+1271	1291	1292	0.406662337861329	0.406662337861329
+1272	1293	1028	0.104130177494266	0.104130177494266
+1274	1294	1295	0.209580478517529	0.209580478517529
+1275	1295	1296	0.202179673681852	0.202179673681852
+1276	1296	1297	0.102644670381459	0.102644670381459
+1277	1297	1298	0.08553722531747	0.08553722531747
+1278	1299	1300	0.10911250090994	0.10911250090994
+1279	1300	1305	0.103516561820708	0.103516561820708
+1280	1305	1306	0.107188605435255	0.107188605435255
+1282	1307	1308	0.104254785791266	0.104254785791266
+1283	1308	1309	0.104981820314566	0.104981820314566
+1284	1309	1310	0.0539236153779667	0.0539236153779667
+1285	1310	1311	0.0525379554780919	0.0525379554780919
+1287	1312	1313	0.0516652738700608	0.0516652738700608
+1288	1313	1314	0.0506813468547144	0.0506813468547144
+1289	1314	1315	0.0508976456987324	0.0508976456987324
+1290	1315	1316	0.0521616744394787	0.0521616744394787
+1291	1316	1317	0.0506396099336441	0.0506396099336441
+1292	1317	1318	0.0516214270666003	0.0516214270666003
+1293	1318	1319	0.0518951446578895	0.0518951446578895
+1294	1319	1320	0.0518013233234396	0.0518013233234396
+1295	1320	1321	0.0498510970504219	0.0498510970504219
+1296	1321	1322	0.0511186989957182	0.0511186989957182
+1297	1322	1323	0.0508331487974254	0.0508331487974254
+1300	1325	1326	0.08881123864976	0.08881123864976
+1304	499	1329	0.167484239247501	0.167484239247501
+1305	1329	1332	0.203905657642638	0.203905657642638
+1306	1332	1333	0.204847680679676	0.204847680679676
+1307	1333	1334	0.201123583387407	0.201123583387407
+1309	1335	1336	0.157474175144751	0.157474175144751
+1310	1336	1337	0.117575441930224	0.117575441930224
+1311	1337	1338	0.0942761529447682	0.0942761529447682
+1313	1339	1340	0.0991229934735866	0.0991229934735866
+1314	1340	193	0.100574656408132	0.100574656408132
+1315	193	1341	0.102057084030905	0.102057084030905
+1316	1341	1342	0.101342753238197	0.101342753238197
+1317	1342	1343	0.0983873083767276	0.0983873083767276
+1318	1343	1344	0.103799446896886	0.103799446896886
+1320	1345	1346	0.0125938712274396	0.0125938712274396
+1323	1348	1349	0.273909093656176	0.273909093656176
+1325	1350	1351	0.136546503712986	0.136546503712986
+1326	1351	1352	0.134960662965356	0.134960662965356
+1327	1352	1353	0.12926179848792	0.12926179848792
+1328	1353	1354	0.137757238088674	0.137757238088674
+1329	1354	1355	0.134312853283448	0.134312853283448
+1330	1355	1356	0.132780195397846	0.132780195397846
+1334	1359	1360	0.200708631878513	0.200708631878513
+1336	142	1364	0.213116678885437	0.213116678885437
+1338	1365	1366	0.152775417186349	0.152775417186349
+1339	1367	1368	0.213588518747439	0.213588518747439
+1341	1369	1370	0.0932290478454428	0.0932290478454428
+1342	1371	1372	0.0501807359890933	0.0501807359890933
+1343	1372	1373	0.0506488838331464	0.0506488838331464
+1344	1373	1374	0.0509778039678037	0.0509778039678037
+1345	1374	1375	0.0510804446988023	0.0510804446988023
+1346	1375	1376	0.0530938888935116	0.0530938888935116
+1347	1376	1377	0.0533676128248485	0.0533676128248485
+1348	1377	1378	0.0492215264037076	0.0492215264037076
+1349	1378	1379	0.0493909004241748	0.0493909004241748
+1350	1379	1380	0.102775081126436	0.102775081126436
+1351	1380	1381	0.100172308119327	0.100172308119327
+1353	1382	1383	0.0341877559991377	0.0341877559991377
+1354	1383	1384	0.104577694208817	0.104577694208817
+1356	1385	1386	0.193890579001187	0.193890579001187
+2459	714	2450	0.108569713532818	0.108569713532818
+1358	1387	1388	0.203368582544414	0.203368582544414
+1359	1388	1389	0.203745939128333	0.203745939128333
+1361	1390	1391	0.199208620541168	0.199208620541168
+1362	1391	1392	0.199941300123434	0.199941300123434
+1364	1393	1394	0.177657657089983	0.177657657089983
+1365	1394	1395	0.177656134299769	0.177656134299769
+1366	1395	1396	0.0721099099294465	0.0721099099294465
+1367	1396	1397	0.103333445330309	0.103333445330309
+1368	1397	1398	0.177111308895875	0.177111308895875
+1369	1398	1399	0.177390305757292	0.177390305757292
+1370	1399	1400	0.0617135848764214	0.0617135848764214
+1371	1400	1401	0.0203196347458361	0.0203196347458361
+1373	1402	1403	0.0235752242204257	0.0235752242204257
+1375	1404	1402	0.00627534757508794	0.00627534757508794
+1377	1405	1406	0.205561430653916	0.205561430653916
+1378	1406	1407	0.198211407371417	0.198211407371417
+1379	1407	1404	0.205478920022626	0.205478920022626
+1381	1408	1409	0.100293396704139	0.100293396704139
+2482	2015	1998	0.0374209544699414	0.0374209544699414
+1382	1409	1410	0.293581023203639	0.293581023203639
+1386	1413	1414	0.135399373352711	0.135399373352711
+1387	1414	1415	0.134222064866511	0.134222064866511
+1388	1415	1416	0.135554703950228	0.135554703950228
+1390	1417	1418	0.0459508709120374	0.0459508709120374
+1391	1418	1419	0.202303287973101	0.202303287973101
+1394	1421	1422	0.101428183167069	0.101428183167069
+1395	1422	1423	0.0971760324958247	0.0971760324958247
+1396	1423	1424	0.100465380366459	0.100465380366459
+1397	1424	1425	0.0503823697773718	0.0503823697773718
+1398	1425	1426	0.0484682644313395	0.0484682644313395
+1399	1426	1427	0.0493995225121813	0.0493995225121813
+1400	1427	1138	0.0500574902796296	0.0500574902796296
+1401	1138	1428	0.0487273610513856	0.0487273610513856
+1403	1429	1430	0.0510517494638005	0.0510517494638005
+1404	1430	1431	0.0485479238043371	0.0485479238043371
+1405	1431	1432	0.0499990939034271	0.0499990939034271
+1406	1432	1433	0.0540496336498359	0.0540496336498359
+1408	1434	1435	0.101502735016485	0.101502735016485
+1409	1435	1436	0.0975542961638382	0.0975542961638382
+1410	1436	1437	0.099750341261668	0.099750341261668
+1411	1437	1265	0.0977907961309881	0.0977907961309881
+1413	1438	1439	0.100436447451859	0.100436447451859
+1416	1441	1442	0.100952147732681	0.100952147732681
+1417	1442	1329	0.0966125375658313	0.0966125375658313
+1418	1329	1386	0.101098635736807	0.101098635736807
+1419	1386	1443	0.103303628365074	0.103303628365074
+1420	1443	1444	0.105351454494942	0.105351454494942
+1421	1444	1445	0.104823988220675	0.104823988220675
+1422	1445	1446	0.0939934684249721	0.0939934684249721
+1424	1447	1448	0.0986593061594928	0.0986593061594928
+1425	1448	1449	0.102799709683289	0.102799709683289
+1426	1449	1450	0.0947158385157811	0.0947158385157811
+1427	1450	1451	0.0999075147918272	0.0999075147918272
+1429	1452	784	0.0977509062908684	0.0977509062908684
+1431	1453	1454	0.0719801500300486	0.0719801500300486
+1432	1454	147	0.198407848383786	0.198407848383786
+1433	147	1455	0.0338525123105229	0.0338525123105229
+1435	151	1456	0.201963345264684	0.201963345264684
+1438	1458	1459	0.393387760227334	0.393387760227334
+1439	1460	1343	0.203476082408649	0.203476082408649
+1440	1343	1461	0.205811743637529	0.205811743637529
+1441	1461	1462	0.203884797606556	0.203884797606556
+1442	1462	1463	0.199707411933497	0.199707411933497
+1443	1463	1464	0.202654089186264	0.202654089186264
+1444	1464	1465	0.201184980777767	0.201184980777767
+1446	778	1466	0.187246918966658	0.187246918966658
+1447	1466	1467	0.197539000166948	0.197539000166948
+1448	1467	1468	0.208212504536917	0.208212504536917
+1450	1469	1470	0.186875447219802	0.186875447219802
+1451	173	1471	0.256211082856798	0.256211082856798
+1454	1473	1474	0.0115011236026218	0.0115011236026218
+1455	1474	1475	0.0782239536830869	0.0782239536830869
+1456	1475	1476	0.086773238144748	0.086773238144748
+1457	1476	1479	0.0924870142175924	0.0924870142175924
+1458	1479	1480	0.37958729242533	0.37958729242533
+1460	1482	1483	0.0482525610515095	0.0482525610515095
+1463	1183	1360	0.0998764831880159	0.0998764831880159
+1464	1360	1485	0.101348070124559	0.101348070124559
+1465	1485	1486	0.0984049068298888	0.0984049068298888
+1467	1487	1488	0.111519868825334	0.111519868825334
+1471	1454	1491	0.201276239535877	0.201276239535877
+1473	1492	1493	0.102671300709598	0.102671300709598
+1474	1493	1494	0.114201675013651	0.114201675013651
+1475	1494	1495	0.100620235623392	0.100620235623392
+1476	1495	1496	0.0991406161889474	0.0991406161889474
+1477	1496	1497	0.0998844924107287	0.0998844924107287
+1478	1497	1498	0.102075212599034	0.102075212599034
+1479	1498	1499	0.0984215743592215	0.0984215743592215
+1480	1499	1500	0.710275264674714	0.710275264674714
+1481	1501	1502	0.109574036549915	0.109574036549915
+1482	1502	1503	0.290817056726042	0.290817056726042
+1484	1504	1505	0.0925327391334129	0.0925327391334129
+1485	1505	1506	0.0984021297067109	0.0984021297067109
+1486	1506	1508	0.0976913946915281	0.0976913946915281
+1489	1509	1510	0.0972031962531711	0.0972031962531711
+1490	1510	1511	0.029446204772298	0.029446204772298
+1494	1514	1515	0.0918220075397064	0.0918220075397064
+1499	1518	1519	0.202094906389576	0.202094906389576
+1500	1519	1520	0.199707443263373	0.199707443263373
+1501	1520	1521	0.202063984146535	0.202063984146535
+1502	1521	1522	0.20219834838932	0.20219834838932
+1503	1522	1523	0.199783925434931	0.199783925434931
+1504	1523	47	0.203533027899534	0.203533027899534
+2599	2565	2566	0.0719878134592224	0.0719878134592224
+1506	1524	1525	0.202471618520659	0.202471618520659
+1507	1525	1526	0.207090708341307	0.207090708341307
+1508	1526	1527	0.19569314849173	0.19569314849173
+1509	1527	1528	0.200397251106195	0.200397251106195
+1511	1529	1530	2.00893755060013	2.00893755060013
+1516	1535	1536	0.100586492660266	0.100586492660266
+1518	1009	1537	0.0517503943444181	0.0517503943444181
+1519	1537	1540	0.0418405299236717	0.0418405299236717
+1520	1540	1541	0.0515572086033239	0.0515572086033239
+1521	1541	1542	0.0506297333875711	0.0506297333875711
+1522	1542	1547	0.050402272284143	0.050402272284143
+1523	1547	972	0.0996461444866795	0.0996461444866795
+1524	972	1548	0.0962022319753865	0.0962022319753865
+1525	1548	1549	0.0953657467513535	0.0953657467513535
+1526	1549	1550	0.0963437695650725	0.0963437695650725
+1528	1551	1552	0.142721374587541	0.142721374587541
+1529	1552	1553	0.0277011537567162	0.0277011537567162
+1530	1554	1555	0.0435488620803952	0.0435488620803952
+1531	1555	1053	0.0900813280777187	0.0900813280777187
+1532	1053	1556	0.091689363858679	0.091689363858679
+1537	1560	1561	0.060529314582724	0.060529314582724
+1538	1561	1562	0.0982757577888809	0.0982757577888809
+16447	9904	9905	0.234187757526107	0.234187757526107
+1539	1562	1563	0.0964555264462913	0.0964555264462913
+1540	1563	1564	0.0948745488688521	0.0948745488688521
+1541	1564	1565	0.0967033454927318	0.0967033454927318
+1542	1565	1566	0.0968058200777679	0.0968058200777679
+1543	1566	1567	0.0857541821683109	0.0857541821683109
+1544	1567	1568	0.099340207555012	0.099340207555012
+1545	1568	1571	0.0938405349536985	0.0938405349536985
+1546	1571	1572	0.0960880186310076	0.0960880186310076
+1548	1573	1574	0.0687509395523497	0.0687509395523497
+1551	1576	1577	0.102936179368501	0.102936179368501
+1555	1580	1581	0.0874483930882581	0.0874483930882581
+1558	1583	1584	0.322225767594647	0.322225767594647
+1559	1585	158	0.325178498041831	0.325178498041831
+1560	158	1586	0.248813969770461	0.248813969770461
+1562	1587	1588	0.682458212363131	0.682458212363131
+1563	1589	1590	0.093984831401002	0.093984831401002
+1564	1590	1591	0.0969174980637894	0.0969174980637894
+1565	1591	1592	0.0961947351154639	0.0961947351154639
+1566	1592	1593	0.0903125194205546	0.0903125194205546
+1567	1593	768	0.157881413911052	0.157881413911052
+1568	768	1596	0.172691061788589	0.172691061788589
+1569	1596	1597	0.125221889854682	0.125221889854682
+11466	780	781	0.0395520182900152	0.0395520182900152
+14682	727	782	0.194557772372847	0.194557772372847
+1575	1603	1604	0.122808892568626	0.122808892568626
+1576	1604	1605	0.14134447308364	0.14134447308364
+1577	1605	1606	0.00315234288642188	0.00315234288642188
+1578	1606	1607	0.00237760055681402	0.00237760055681402
+1579	1607	1034	0.102833271602923	0.102833271602923
+1580	1034	1608	0.043468513404088	0.043468513404088
+1581	1608	1033	0.049915824892393	0.049915824892393
+1582	1033	1609	0.0942592902205972	0.0942592902205972
+1583	1609	1610	0.146590259158182	0.146590259158182
+1585	1611	1612	0.124755429872932	0.124755429872932
+1587	1613	1614	0.146275547777326	0.146275547777326
+1588	1614	1615	0.26514479082652	0.26514479082652
+1589	1615	1616	0.120777633356172	0.120777633356172
+1590	1616	1617	0.146979440780155	0.146979440780155
+1591	1617	1618	0.586436662116935	0.586436662116935
+10219	5410	5429	0.0496147818599398	0.0496147818599398
+1592	1618	1619	0.120318550023187	0.120318550023187
+1593	1620	1621	0.123170513487948	0.123170513487948
+1594	1621	1622	0.0891128334653611	0.0891128334653611
+1595	1622	1623	0.0126945079405001	0.0126945079405001
+1597	1624	1625	0.0361628363016983	0.0361628363016983
+1598	1625	1626	0.0965078268867085	0.0965078268867085
+1599	1626	1627	0.122881556236448	0.122881556236448
+1601	1628	1629	0.0514694071076013	0.0514694071076013
+1604	1635	1337	0.196038913624896	0.196038913624896
+1605	1337	1636	0.207228602655476	0.207228602655476
+1606	1636	1637	0.20264296962565	0.20264296962565
+1607	1637	1638	0.203387402917304	0.203387402917304
+1608	1638	1639	0.0190931929940632	0.0190931929940632
+1609	1639	1640	0.0954982678568342	0.0954982678568342
+1612	1642	1643	0.0969376424953903	0.0969376424953903
+1613	1643	1644	0.0932591849763066	0.0932591849763066
+1614	1644	769	0.109404688325734	0.109404688325734
+1616	1645	1646	0.0870106428010285	0.0870106428010285
+1617	1646	1647	0.21369947718983	0.21369947718983
+1618	1647	160	0.103968034130831	0.103968034130831
+1619	160	1648	0.148969074067601	0.148969074067601
+1620	1648	1649	0.102090714125769	0.102090714125769
+1621	1649	1650	0.152016365267068	0.152016365267068
+1624	1652	1653	3.12548314855053	3.12548314855053
+1625	1654	1655	0.099787477314555	0.099787477314555
+1626	1655	1656	0.0573939833292015	0.0573939833292015
+1627	1656	1657	0.0412244638452508	0.0412244638452508
+1628	1657	1658	0.159748945001355	0.159748945001355
+1630	1659	1660	0.0562485254553907	0.0562485254553907
+1631	1660	1661	0.140693983223782	0.140693983223782
+1632	1661	1662	0.199243791884909	0.199243791884909
+1633	1662	1663	0.200873345889282	0.200873345889282
+1634	1663	1664	0.200754056548572	0.200754056548572
+1636	1665	1626	0.102716653811918	0.102716653811918
+1637	1626	1666	0.1010071593638	0.1010071593638
+1638	1666	1667	0.101237955319616	0.101237955319616
+1639	1667	1668	0.101237948338119	0.101237948338119
+1640	1668	711	0.101306598900241	0.101306598900241
+1641	711	1669	0.10042603616611	0.10042603616611
+1642	1669	1670	0.0958961450641524	0.0958961450641524
+1644	1671	1672	0.137716093557474	0.137716093557474
+2762	2714	2715	0.0991860693431078	0.0991860693431078
+1651	1678	1679	0.133306617824866	0.133306617824866
+1652	1679	1250	0.131938339831678	0.131938339831678
+1653	1250	1680	0.132959450261057	0.132959450261057
+1654	1680	1681	0.132733669106231	0.132733669106231
+1655	1681	1682	0.132964768190064	0.132964768190064
+1657	1683	1684	0.0490945965896849	0.0490945965896849
+1658	1684	1685	0.0490108159838641	0.0490108159838641
+1659	1685	1686	0.0499458328019049	0.0499458328019049
+1660	1686	1687	0.0506073899683783	0.0506073899683783
+1661	1687	1688	0.0999922931051382	0.0999922931051382
+1663	1689	1690	0.0532341368396536	0.0532341368396536
+1664	1690	1691	0.0494816378016481	0.0494816378016481
+1665	1691	1129	0.0483962553320354	0.0483962553320354
+2786	2740	2741	0.204165004811902	0.204165004811902
+1669	1694	1695	0.0515058444916569	0.0515058444916569
+1670	1695	1696	0.049583388064832	0.049583388064832
+1672	1697	1698	0.164817053327799	0.164817053327799
+1674	1699	1700	0.200184975462711	0.200184975462711
+1676	1701	1702	0.0562043024646792	0.0562043024646792
+1677	1702	1703	0.0473559609478773	0.0473559609478773
+1679	1704	1705	0.398746605392666	0.398746605392666
+1681	1706	1365	0.144540603588288	0.144540603588288
+1682	1365	1707	0.0528990154558718	0.0528990154558718
+1683	1707	1708	0.10134484884037	0.10134484884037
+1684	1708	1709	0.0991459088544214	0.0991459088544214
+1685	1709	1710	0.100657696530189	0.100657696530189
+1686	1710	1711	0.102825031241611	0.102825031241611
+1687	1711	1712	0.0822822408497534	0.0822822408497534
+1688	1712	1713	0.0873989484445677	0.0873989484445677
+1689	1713	1714	0.083724486939572	0.083724486939572
+1691	1715	1716	0.0772899080720762	0.0772899080720762
+1693	1717	1718	0.0829924152482612	0.0829924152482612
+12973	1824	2797	0.01303984476973	0.01303984476973
+1695	1719	1720	0.0851881782403355	0.0851881782403355
+1696	1720	1721	0.0815306594337643	0.0815306594337643
+1697	1721	1586	0.0807934684584117	0.0807934684584117
+1698	1586	1722	0.0815207303880199	0.0815207303880199
+1699	1722	1649	0.0940041718050458	0.0940041718050458
+1702	1723	1724	0.079056501466603	0.079056501466603
+1703	1724	1725	0.0798640413181071	0.0798640413181071
+1707	204	1728	0.0808035328564148	0.0808035328564148
+1708	1728	1729	0.0793099389847985	0.0793099389847985
+1709	1729	1471	0.0807902086419881	0.0807902086419881
+1710	1471	1730	0.159227595521595	0.159227595521595
+1712	1731	1732	0.00918106235729301	0.00918106235729301
+1713	1732	1733	0.0904244628649386	0.0904244628649386
+1714	1733	1734	0.1024374483727	0.1024374483727
+1715	1734	1735	0.102816532682191	0.102816532682191
+1716	1735	1736	0.0492571813589573	0.0492571813589573
+1718	1737	1738	0.0480836518232765	0.0480836518232765
+1720	1456	1739	0.0851993535054976	0.0851993535054976
+1722	1740	1741	0.0851913863702705	0.0851913863702705
+1724	1742	1743	1.05721580006997	1.05721580006997
+1727	1746	1747	0.203318990561603	0.203318990561603
+1728	1747	1748	0.105159616756228	0.105159616756228
+1730	1749	1750	0.0560818664301058	0.0560818664301058
+1732	1751	1752	0.478248386364013	0.478248386364013
+1733	1752	1753	0.443656760721259	0.443656760721259
+1735	1754	1755	0.1348267792147	0.1348267792147
+1736	1755	1756	0.129877519863856	0.129877519863856
+1738	1757	1758	0.139572444331893	0.139572444331893
+1740	1759	151	0.222068972422621	0.222068972422621
+1742	1760	1761	0.217075886587119	0.217075886587119
+1744	95	1762	0.0857577538793466	0.0857577538793466
+1746	1763	1764	0.202675621070888	0.202675621070888
+1747	1764	1765	0.199646627713467	0.199646627713467
+1749	1768	1769	0.203715891739879	0.203715891739879
+18799	8969	430	0.0787540687567586	0.0787540687567586
+1751	1772	1773	0.1980611092504	0.1980611092504
+1752	1773	1774	0.203412766578772	0.203412766578772
+1753	1774	1775	0.202109933054243	0.202109933054243
+1754	1775	43	0.202669215310678	0.202669215310678
+1755	43	1776	0.197841814631247	0.197841814631247
+1756	1776	1777	0.202676328377112	0.202676328377112
+1757	1777	1778	0.204936151058667	0.204936151058667
+1758	1778	1779	0.1977714314521	0.1977714314521
+1759	1779	1780	0.0315877327413917	0.0315877327413917
+1760	1780	1781	0.0188253963586558	0.0188253963586558
+1763	1782	570	0.0446437216270623	0.0446437216270623
+1764	570	1783	0.0483070548371257	0.0483070548371257
+1765	1783	1784	0.0445253123220399	0.0445253123220399
+1766	1784	1785	0.0510546887722961	0.0510546887722961
+1768	1786	1787	0.0533839966500878	0.0533839966500878
+1769	1787	1788	0.0521924619717138	0.0521924619717138
+1770	1788	1789	0.0490694542852552	0.0490694542852552
+1771	1789	1790	0.0491381693257593	0.0491381693257593
+1774	1792	1793	0.188232081449375	0.188232081449375
+1775	1793	1794	0.0938047512624172	0.0938047512624172
+1777	1795	1796	0.0479551643273822	0.0479551643273822
+1779	1797	1798	0.0506257576844139	0.0506257576844139
+1780	1798	1778	0.0476226019606038	0.0476226019606038
+1781	1778	1799	0.0506000833049729	0.0506000833049729
+1782	1799	1800	0.0489339836382716	0.0489339836382716
+1783	1800	1801	0.0520587364066008	0.0520587364066008
+1784	1801	1526	0.0499381116869285	0.0499381116869285
+1785	1526	1802	0.0482912843745838	0.0482912843745838
+1786	1802	1803	0.052312654556816	0.052312654556816
+1788	466	1804	0.00820558552351573	0.00820558552351573
+1789	1804	1805	0.0939988504660162	0.0939988504660162
+1790	1805	1806	0.0853375028247139	0.0853375028247139
+1792	1807	1808	0.0203438851658787	0.0203438851658787
+1793	1808	1809	0.0251680266073563	0.0251680266073563
+1794	1809	1810	0.203784780502352	0.203784780502352
+1795	1810	1811	0.245267310527272	0.245267310527272
+1797	1812	1513	0.252426666173968	0.252426666173968
+1799	1479	1813	0.176119796231885	0.176119796231885
+1800	1813	1814	0.410709550491308	0.410709550491308
+1802	1815	1816	0.0577133885110317	0.0577133885110317
+1805	1818	1819	0.0740878722178254	0.0740878722178254
+1806	1819	1820	0.135457901381645	0.135457901381645
+1808	1821	1822	0.206145194610924	0.206145194610924
+1812	1828	1829	0.106425576539939	0.106425576539939
+1813	1829	1830	0.105266693821804	0.105266693821804
+1814	1830	1831	0.0587144262982408	0.0587144262982408
+1815	1831	1832	0.0458724352500271	0.0458724352500271
+1817	1833	1834	0.199229532947629	0.199229532947629
+1820	1836	1837	0.0309799563804686	0.0309799563804686
+1822	1838	1839	0.146418601014837	0.146418601014837
+1823	1839	1840	0.141683677614281	0.141683677614281
+1824	1840	1841	0.111588649653809	0.111588649653809
+1827	1844	1845	0.101354924922083	0.101354924922083
+1828	1845	1397	0.106656735273228	0.106656735273228
+1829	1397	1846	0.052351737797171	0.052351737797171
+1831	1847	1848	0.0531037804059208	0.0531037804059208
+1832	1848	1849	0.0506063775898189	0.0506063775898189
+1833	1849	1850	0.0517100300362486	0.0517100300362486
+1834	1850	1851	0.0523258164287328	0.0523258164287328
+1835	1851	1852	0.0499829479152778	0.0499829479152778
+1836	1852	1853	0.051505297770613	0.051505297770613
+1837	1853	1854	0.051498980863322	0.051498980863322
+1840	1856	1857	0.051410475877809	0.051410475877809
+1841	1857	1858	0.0513674435994921	0.0513674435994921
+1842	1858	1109	0.0515213919005775	0.0515213919005775
+1843	1109	1859	0.0506198107739765	0.0506198107739765
+1844	1859	1860	0.0511967416282439	0.0511967416282439
+1845	1860	1861	0.0519748871795966	0.0519748871795966
+1847	1862	1863	0.0554265580601903	0.0554265580601903
+1848	1863	1864	0.397067534239407	0.397067534239407
+1849	1865	1481	0.206774260684103	0.206774260684103
+1850	1481	136	0.199116779757445	0.199116779757445
+1852	1866	1867	0.100566373592942	0.100566373592942
+1853	1867	1868	0.101320817159016	0.101320817159016
+1855	1869	1295	0.0991404141660552	0.0991404141660552
+1856	1295	1368	0.0970426412791379	0.0970426412791379
+1857	1368	1870	0.108154398880898	0.108154398880898
+1859	1871	1872	0.100234830388367	0.100234830388367
+1860	1872	1873	0.0980754533399867	0.0980754533399867
+1861	1873	1874	0.101854943741879	0.101854943741879
+1862	1874	1875	0.0125795021137856	0.0125795021137856
+1863	1875	1876	0.0797821176517698	0.0797821176517698
+1864	1876	1877	0.103719210283603	0.103719210283603
+1866	1740	1878	0.161887620550325	0.161887620550325
+1868	1879	1880	0.0487542093720633	0.0487542093720633
+1869	1880	1122	0.0510369170722426	0.0510369170722426
+1871	1882	1883	0.588595740779303	0.588595740779303
+1872	1884	1885	0.152111272923972	0.152111272923972
+1873	1885	1886	0.199118819593963	0.199118819593963
+1874	1886	1887	0.200266209543398	0.200266209543398
+1876	1891	1892	0.0559298383062073	0.0559298383062073
+2989	776	2928	0.18503947742992	0.18503947742992
+1878	1893	1894	0.32823055853467	0.32823055853467
+1880	1895	1896	0.106010053095039	0.106010053095039
+1881	1896	1897	0.0966039225045284	0.0966039225045284
+1882	1897	1898	0.101329648076306	0.101329648076306
+1883	1898	1899	0.105723867542497	0.105723867542497
+1884	1899	1900	0.100059117952088	0.100059117952088
+1885	1900	1901	0.0102909725043749	0.0102909725043749
+1886	1901	1902	0.0917204387150709	0.0917204387150709
+1887	1902	1903	0.0488400104067164	0.0488400104067164
+1888	1903	1904	0.0516943831129701	0.0516943831129701
+1889	1904	1905	0.0485157141379251	0.0485157141379251
+1890	1905	1906	0.00454251169325352	0.00454251169325352
+1891	1906	1907	0.0474170350841876	0.0474170350841876
+1892	1907	1908	0.0520037008543052	0.0520037008543052
+1893	1908	1772	0.0471189408868131	0.0471189408868131
+1894	1772	1909	0.0492432884260358	0.0492432884260358
+1896	1910	1911	0.0495320112775386	0.0495320112775386
+1897	1911	1520	0.0493945814205325	0.0493945814205325
+1898	1520	1912	0.0533971088216985	0.0533971088216985
+1899	1912	1913	0.0492909868241652	0.0492909868241652
+1902	1914	1915	0.0940987095228026	0.0940987095228026
+1903	1915	1916	0.102901306177953	0.102901306177953
+1904	1916	1917	0.099610911557729	0.099610911557729
+1905	1917	1918	0.102910577647033	0.102910577647033
+1906	1918	1919	0.0967734482498666	0.0967734482498666
+1908	1920	1921	0.0462806189179572	0.0462806189179572
+1910	1922	1923	0.0456516788886206	0.0456516788886206
+1911	1923	1924	0.0505452419126903	0.0505452419126903
+1912	1924	1925	0.0504057374799388	0.0504057374799388
+1913	1925	1926	0.0476340401482501	0.0476340401482501
+1914	1926	1927	0.051053036843087	0.051053036843087
+1915	1927	1928	0.049153971321488	0.049153971321488
+1918	1930	1931	0.0561439680866497	0.0561439680866497
+1919	1931	1932	0.053826281457259	0.053826281457259
+3034	2965	2966	0.00876223324596343	0.00876223324596343
+1920	1932	1933	0.0477206876272752	0.0477206876272752
+1923	1935	1936	0.066876205689997	0.066876205689997
+1924	1937	1938	0.0446617758397252	0.0446617758397252
+1925	1938	1939	0.0840391912235338	0.0840391912235338
+1926	1939	1940	0.227469383602409	0.227469383602409
+1931	1944	1945	0.0952703264542464	0.0952703264542464
+1932	1945	1946	0.0974265293580338	0.0974265293580338
+1933	1947	1948	0.151605873109213	0.151605873109213
+1938	1952	1953	0.109258836266427	0.109258836266427
+1939	1953	1954	0.122481399421688	0.122481399421688
+1940	1954	1955	0.119684093740802	0.119684093740802
+1943	1957	1958	0.204446635842756	0.204446635842756
+1944	1958	1959	0.0997279110592744	0.0997279110592744
+1945	1959	1960	1.05168738215655	1.05168738215655
+1946	1960	1961	1.71048983577162	1.71048983577162
+1947	1962	1963	2.33567129984142	2.33567129984142
+1948	1963	1964	1.08148581800227	1.08148581800227
+1950	1965	1966	0.103934061554546	0.103934061554546
+1951	1966	1967	0.0454999873171455	0.0454999873171455
+1952	1967	1968	0.0964089929828049	0.0964089929828049
+1953	1968	1969	0.125489170754965	0.125489170754965
+1954	1969	1972	0.165851140560008	0.165851140560008
+1955	1972	1973	0.145299005046435	0.145299005046435
+1956	1973	1974	0.145772913358701	0.145772913358701
+1957	1974	1975	0.149974913959851	0.149974913959851
+1958	1975	1976	0.145057930633755	0.145057930633755
+1959	1976	1977	0.143477867614704	0.143477867614704
+1961	1978	420	0.0932140793920545	0.0932140793920545
+1963	1963	1979	1.08603450886527	1.08603450886527
+1964	1979	1980	0.0983329965983175	0.0983329965983175
+1965	1980	1981	0.0917353737473226	0.0917353737473226
+1966	1981	1982	0.055771341470748	0.055771341470748
+1967	1982	1983	0.0968737393586206	0.0968737393586206
+1968	1983	1984	0.0954710209286709	0.0954710209286709
+1969	1984	1985	0.0293519873253464	0.0293519873253464
+1970	1985	1986	0.0704554284720801	0.0704554284720801
+1971	1986	1988	0.095403189447009	0.095403189447009
+1972	1988	1989	0.146040552740524	0.146040552740524
+1973	1989	1990	0.147511070915923	0.147511070915923
+1974	1990	1991	0.147511070914708	0.147511070914708
+1975	1991	1992	0.145306416846094	0.145306416846094
+1976	1992	1993	0.143786568306041	0.143786568306041
+1977	1993	1994	0.0151225768059817	0.0151225768059817
+1978	1994	420	0.0955903616259906	0.0955903616259906
+1980	1995	157	0.328733376766768	0.328733376766768
+1981	157	1721	0.24955962831592	0.24955962831592
+1983	1996	1997	0.475009767293493	0.475009767293493
+1984	1998	1999	0.203988417966153	0.203988417966153
+1985	1999	2000	0.200819821039785	0.200819821039785
+1986	2000	794	0.198875475027904	0.198875475027904
+1987	794	2001	0.203566311480143	0.203566311480143
+1988	2001	2002	0.201451879254481	0.201451879254481
+1989	2002	2003	0.203252240244887	0.203252240244887
+1990	2003	2004	0.204825535738971	0.204825535738971
+1991	2004	2005	0.188227904196053	0.188227904196053
+1992	2005	2006	0.0174353644977756	0.0174353644977756
+1994	353	2007	0.251582112428801	0.251582112428801
+1995	2007	2008	0.132634173204781	0.132634173204781
+1996	2008	2009	0.107027307843563	0.107027307843563
+1999	2011	646	0.139457974349072	0.139457974349072
+2000	646	2012	0.135033465549491	0.135033465549491
+2001	2012	1990	0.089412705524254	0.089412705524254
+2002	1990	1974	0.0383268944933106	0.0383268944933106
+2003	1974	2013	0.133766034901227	0.133766034901227
+2004	2013	2014	0.133581539638141	0.133581539638141
+2005	2014	2015	0.142379951799733	0.142379951799733
+2007	2016	2017	0.251899237124673	0.251899237124673
+2008	2017	2018	0.133367826813466	0.133367826813466
+2009	2018	2019	0.10602884511386	0.10602884511386
+2010	2019	2020	0.0337181930055553	0.0337181930055553
+2011	2020	2021	0.200388320757191	0.200388320757191
+2014	2023	2024	0.171565352607288	0.171565352607288
+2016	2025	2026	0.0477258088803687	0.0477258088803687
+2017	2026	2027	0.0809138557734271	0.0809138557734271
+2018	2027	2028	0.105296432652635	0.105296432652635
+2021	2030	2031	0.0518714690593594	0.0518714690593594
+2023	2032	2033	0.10377665457529	0.10377665457529
+2024	2033	2034	0.105027724692891	0.105027724692891
+2025	2034	2035	0.0547353150471903	0.0547353150471903
+2026	2035	2036	0.0513505470015755	0.0513505470015755
+2027	2036	2037	0.0518915831567366	0.0518915831567366
+2028	2038	2039	0.101144662033058	0.101144662033058
+2029	2039	2040	0.00469012569566242	0.00469012569566242
+2030	2040	2041	0.105219334964384	0.105219334964384
+2032	2042	2043	0.0933903014689556	0.0933903014689556
+2033	2043	559	0.0150758315973471	0.0150758315973471
+2034	559	2044	0.0636386622186814	0.0636386622186814
+2035	2044	2045	0.0177005397698663	0.0177005397698663
+2039	2048	1918	0.201578926546004	0.201578926546004
+2040	1918	2049	0.199006200917286	0.199006200917286
+2043	2051	70	0.203396158473628	0.203396158473628
+2045	1197	2052	0.0220081346494975	0.0220081346494975
+2046	2052	2053	0.200331631924477	0.200331631924477
+2047	2053	2054	0.154360922478377	0.154360922478377
+2048	2054	948	0.176666608936966	0.176666608936966
+2049	948	2055	0.165719712872644	0.165719712872644
+2050	2055	2056	0.169383792792816	0.169383792792816
+2052	2057	2058	0.174576187564815	0.174576187564815
+2053	2058	2059	0.172745648066703	0.172745648066703
+2054	2059	2060	0.176912657229173	0.176912657229173
+2055	2060	2061	0.164650081589568	0.164650081589568
+2057	2062	746	0.0627806188777907	0.0627806188777907
+2059	1564	2063	0.138541795103745	0.138541795103745
+2060	2063	2064	0.12093608528602	0.12093608528602
+2062	2065	693	0.201596255528806	0.201596255528806
+2063	693	2066	0.202309385780635	0.202309385780635
+2065	2067	2068	0.201208296937256	0.201208296937256
+2069	2072	2073	0.141581011374908	0.141581011374908
+2072	2075	2076	0.13960716604907	0.13960716604907
+2073	2076	2077	0.137352432815083	0.137352432815083
+2074	2077	2078	0.139172335676639	0.139172335676639
+2075	2078	2079	0.137570556837278	0.137570556837278
+2077	2080	2081	0.124260733003778	0.124260733003778
+2078	2081	2082	0.0143334567754311	0.0143334567754311
+2079	2082	1169	0.140817691182502	0.140817691182502
+2080	1169	889	0.136202795453782	0.136202795453782
+2081	889	2083	0.140272589797925	0.140272589797925
+2082	2083	2084	0.132655733622477	0.132655733622477
+2084	2085	2086	0.130758013034065	0.130758013034065
+2085	1055	2087	0.365531347335866	0.365531347335866
+2086	2087	2088	0.13568199350655	0.13568199350655
+2087	2088	2089	0.14074386927803	0.14074386927803
+2088	2089	2090	0.132744503428598	0.132744503428598
+2090	2091	2092	0.0599168224199403	0.0599168224199403
+2091	2093	1220	0.0866154902836551	0.0866154902836551
+2093	2095	2096	0.243872573445978	0.243872573445978
+2094	2096	2097	0.241082179338788	0.241082179338788
+2096	2098	2099	0.174814701889178	0.174814701889178
+2097	2099	2100	0.175154975379932	0.175154975379932
+2100	2102	2103	0.114419579517541	0.114419579517541
+2101	2103	2104	0.285214999643623	0.285214999643623
+2102	2104	2107	0.394315301182406	0.394315301182406
+2104	333	2108	0.278529398579064	0.278529398579064
+2106	1150	1822	0.102734424254821	0.102734424254821
+2108	2109	2110	0.202389435684367	0.202389435684367
+2109	2110	2111	0.203214045748693	0.203214045748693
+2110	2111	2112	0.241815761631872	0.241815761631872
+2111	2112	2113	0.100823640639482	0.100823640639482
+2112	2113	2114	0.00265953685516916	0.00265953685516916
+2114	2115	2116	0.238307263458502	0.238307263458502
+2116	2117	2118	0.172019623051487	0.172019623051487
+2117	2118	2119	0.0267252812490126	0.0267252812490126
+2118	2119	2120	0.200138632498134	0.200138632498134
+2119	2120	2121	0.20340922729078	0.20340922729078
+2120	2121	2122	0.197749465935997	0.197749465935997
+2121	2122	2123	0.20148284791492	0.20148284791492
+2122	2123	2124	0.206967663578278	0.206967663578278
+2123	2124	688	0.198127359399408	0.198127359399408
+2124	688	1981	0.162008033573987	0.162008033573987
+2127	2127	2128	0.0963587083366664	0.0963587083366664
+2128	2128	1149	0.101309363144821	0.101309363144821
+2130	2129	2130	0.268413747321973	0.268413747321973
+15791	2106	2131	0.0329007751166605	0.0329007751166605
+2131	2130	2132	0.135315648859656	0.135315648859656
+2133	2133	2134	0.206936888424913	0.206936888424913
+2134	2134	2135	0.199680286737687	0.199680286737687
+2135	2135	801	0.201106069676904	0.201106069676904
+2136	801	2136	0.201743876713814	0.201743876713814
+2137	2136	2137	0.208870260631958	0.208870260631958
+2138	2137	2138	0.202159360168084	0.202159360168084
+2139	2138	2139	0.199627649413879	0.199627649413879
+2140	2139	2140	0.186052011799078	0.186052011799078
+2142	2141	2142	0.0396569310433899	0.0396569310433899
+2168	2167	2168	0.189234637777307	0.189234637777307
+2143	2142	2143	0.0683760552809121	0.0683760552809121
+2144	2143	2144	0.00806043179372478	0.00806043179372478
+2145	2144	2145	0.00436074705638217	0.00436074705638217
+2146	2145	2146	0.00359181344508779	0.00359181344508779
+2147	2146	2147	0.00395340009925433	0.00395340009925433
+2148	2147	2148	0.136610372293043	0.136610372293043
+2149	2148	2149	0.180604844053974	0.180604844053974
+2152	2152	2153	0.132023781927159	0.132023781927159
+2153	2153	2154	0.135708940609739	0.135708940609739
+2154	2154	1415	0.130555983926377	0.130555983926377
+2155	1415	1355	0.134241500709378	0.134241500709378
+2156	1355	2155	0.0746101236889861	0.0746101236889861
+2161	2159	2161	0.133841125283574	0.133841125283574
+2162	2161	2162	0.1372260849468	0.1372260849468
+2163	2162	2163	0.128741940100472	0.128741940100472
+2164	2163	2164	0.135391700615332	0.135391700615332
+2169	2168	2169	0.201124079513876	0.201124079513876
+2170	2169	2170	0.108103708021473	0.108103708021473
+2172	2172	2173	0.13444261016809	0.13444261016809
+2173	2173	2174	0.13827137965728	0.13827137965728
+2174	2174	2175	0.134068324786893	0.134068324786893
+2175	2175	2176	0.133067365005956	0.133067365005956
+2176	2176	2177	0.135535927176987	0.135535927176987
+2177	2177	2178	0.134471884610529	0.134471884610529
+2180	2180	2181	0.201420608111328	0.201420608111328
+2182	2182	2183	0.0166632573599522	0.0166632573599522
+2183	2183	2184	0.101864448677803	0.101864448677803
+2184	2184	2185	0.047789206759145	0.047789206759145
+2185	2185	2186	0.0423227378750124	0.0423227378750124
+4423	3782	4133	0.154572357311794	0.154572357311794
+2186	2186	2187	0.66062410841751	0.66062410841751
+2188	2188	1945	0.10637947146537	0.10637947146537
+2189	1945	2189	0.148995294788127	0.148995294788127
+2211	2212	2213	0.0467155303221573	0.0467155303221573
+2190	2189	2190	0.327169136665339	0.327169136665339
+2192	2191	2192	0.0188299118027414	0.0188299118027414
+2193	2192	2193	0.210910851782462	0.210910851782462
+2195	2194	2195	0.365278744815015	0.365278744815015
+2196	2195	2196	0.0130424738912125	0.0130424738912125
+2197	2196	2197	0.0449464311286017	0.0449464311286017
+2198	2197	2198	0.0030293307914236	0.0030293307914236
+2199	2198	2199	0.128682754082238	0.128682754082238
+2200	2199	2200	0.110573702095649	0.110573702095649
+2202	2203	2204	0.10817464433389	0.10817464433389
+2203	2204	2205	0.107622599984834	0.107622599984834
+2204	2205	2206	0.108403921870099	0.108403921870099
+2205	2206	2207	0.060733439657354	0.060733439657354
+2206	2207	2208	0.0534350684854931	0.0534350684854931
+2207	2208	2209	0.0529414575701877	0.0529414575701877
+2208	2209	2210	0.0527447832774698	0.0527447832774698
+2209	2210	2211	0.102434337721347	0.102434337721347
+2210	2211	2212	0.0503091444283059	0.0503091444283059
+2212	2213	2214	0.0457845256573543	0.0457845256573543
+2213	2214	2215	0.0483154919494593	0.0483154919494593
+2214	2215	2216	0.0500256719211907	0.0500256719211907
+2215	2216	2217	0.0483324272045254	0.0483324272045254
+2216	2217	2218	0.0492693454756351	0.0492693454756351
+2217	2218	2219	0.0514417765088717	0.0514417765088717
+2218	2219	2220	0.0488786158333744	0.0488786158333744
+2219	2220	981	0.0498905437062621	0.0498905437062621
+2220	981	2221	0.0506165357374516	0.0506165357374516
+2221	2221	2222	0.046223636949906	0.046223636949906
+2224	2224	2225	0.051453756147013	0.051453756147013
+2225	2225	2226	0.0468957891600155	0.0468957891600155
+2226	2226	2227	0.0492631927304953	0.0492631927304953
+2227	2227	2228	0.0520252151650071	0.0520252151650071
+2228	2228	2229	0.0550486617142997	0.0550486617142997
+2229	2230	2231	0.0139385553943917	0.0139385553943917
+2230	2231	2232	0.0929550410270359	0.0929550410270359
+2234	2236	2237	0.0961215858652653	0.0961215858652653
+2235	2237	2238	0.0993231725885536	0.0993231725885536
+19654	10604	10606	0.0711515052063537	0.0711515052063537
+2236	2238	2239	0.0986901078011995	0.0986901078011995
+2237	2239	2120	0.100412717366674	0.100412717366674
+2238	2120	2240	0.0994425769829808	0.0994425769829808
+2239	2240	2241	0.0986741447066025	0.0986741447066025
+2240	2241	2242	0.196986803845301	0.196986803845301
+2241	2245	2246	0.0853554831080311	0.0853554831080311
+2242	2246	1017	0.10642802452306	0.10642802452306
+2243	1017	2247	0.0517185594306615	0.0517185594306615
+2244	2247	2248	0.0530774886579764	0.0530774886579764
+16655	3462	3463	0.083025520087948	0.083025520087948
+2245	2248	2249	0.0515725288155829	0.0515725288155829
+2246	2249	2250	0.0550106406637853	0.0550106406637853
+2247	2250	2251	0.0492291609495858	0.0492291609495858
+2250	2253	2254	0.068064098421736	0.068064098421736
+2251	2254	381	0.0653278702953464	0.0653278702953464
+2253	2255	2256	0.176933367276823	0.176933367276823
+2255	2257	1830	0.176665129086282	0.176665129086282
+2257	1817	2258	0.0851310356517557	0.0851310356517557
+2258	2258	2259	0.0498677366751348	0.0498677366751348
+2260	2260	2261	0.20430957984894	0.20430957984894
+2263	2263	2264	0.172785898975569	0.172785898975569
+2265	2265	2266	0.17364958356586	0.17364958356586
+2266	2266	2267	0.245119251352525	0.245119251352525
+2267	2267	2268	0.132589695523512	0.132589695523512
+2268	2268	2269	0.106738596174206	0.106738596174206
+2269	2269	2270	0.0337285830402062	0.0337285830402062
+20279	7555	7554	0.0146999916602211	0.0146999916602211
+2270	2270	2271	0.269363966522552	0.269363966522552
+2273	2275	684	0.204569111503518	0.204569111503518
+2274	684	1986	0.157853726642528	0.157853726642528
+2278	2278	2279	0.207434558661452	0.207434558661452
+2279	2279	2280	0.20034839537718	0.20034839537718
+2280	2280	798	0.19667070755531	0.19667070755531
+2281	798	2281	0.204476797355414	0.204476797355414
+2283	2282	2283	0.201226119347201	0.201226119347201
+2284	2283	2284	0.201775247020165	0.201775247020165
+2287	2286	2287	0.00679684653457476	0.00679684653457476
+2288	2287	2288	0.00351717235619697	0.00351717235619697
+2289	2288	2289	0.00475072672267961	0.00475072672267961
+2290	2289	2290	0.085203263947135	0.085203263947135
+2292	2291	2292	0.21658567369152	0.21658567369152
+2293	2292	2293	0.294285406846423	0.294285406846423
+2295	1532	2294	0.0895735364116296	0.0895735364116296
+2296	2294	2295	0.130472447344756	0.130472447344756
+2298	2044	560	0.0834414685220809	0.0834414685220809
+2299	560	913	0.519257886958262	0.519257886958262
+2300	913	2297	0.14849143076931	0.14849143076931
+2301	2297	2299	0.276635413291223	0.276635413291223
+2356	2345	2346	0.126022029068994	0.126022029068994
+2302	2299	2300	0.882147486934507	0.882147486934507
+2304	2301	2302	0.171837385748798	0.171837385748798
+2305	2302	2303	0.168190952055295	0.168190952055295
+2308	1995	1585	0.0793668846267203	0.0793668846267203
+2310	1646	2305	0.0800618116658591	0.0800618116658591
+2311	2305	2306	0.0800532572745142	0.0800532572745142
+2312	2306	2307	0.0808374839403145	0.0808374839403145
+2313	2307	2308	0.0793040216351705	0.0793040216351705
+2315	2309	2310	0.0976846110372701	0.0976846110372701
+2317	2311	2312	0.131380688058575	0.131380688058575
+2318	2312	2313	0.00313000089825153	0.00313000089825153
+2319	2313	2157	0.109122831884578	0.109122831884578
+2320	2157	2314	0.0470081550211631	0.0470081550211631
+2321	2314	441	0.0450344666647882	0.0450344666647882
+2326	1614	2317	0.105832922283753	0.105832922283753
+2327	2317	2319	0.101211119794553	0.101211119794553
+2328	2319	914	0.105388128978222	0.105388128978222
+2351	2100	2341	0.101951720072048	0.101951720072048
+2352	2341	2342	0.101030261985598	0.101030261985598
+2353	2342	2330	0.0997965680595524	0.0997965680595524
+2354	2330	2343	0.101856778567858	0.101856778567858
+2355	2344	2345	0.0735649917770033	0.0735649917770033
+2357	2346	2347	0.106673075682264	0.106673075682264
+2358	2347	2348	0.104262034499471	0.104262034499471
+2359	2348	2057	0.103127373430199	0.103127373430199
+2360	2057	2350	0.104860273903505	0.104860273903505
+2361	2350	2351	0.102072059078566	0.102072059078566
+2362	2351	2352	0.10208795508847	0.10208795508847
+2363	2352	2353	0.103003886322398	0.103003886322398
+2364	2353	2354	0.104842753763622	0.104842753763622
+2365	2354	2355	0.102079170592138	0.102079170592138
+2366	2355	2356	0.104157794922069	0.104157794922069
+2367	2356	2357	0.102771960719463	0.102771960719463
+2368	2357	843	0.10323381873133	0.10323381873133
+2369	843	2358	0.104166303367793	0.104166303367793
+2370	2358	2359	0.04678514768012	0.04678514768012
+2372	2360	2361	0.106536201799638	0.106536201799638
+2373	2361	2362	0.0524641553188961	0.0524641553188961
+2374	2362	2363	0.0542089866141956	0.0542089866141956
+2376	964	2364	0.101990510698998	0.101990510698998
+2377	2364	2365	0.0991028819964669	0.0991028819964669
+2378	2365	2366	0.101583146356588	0.101583146356588
+2379	2366	2367	0.0976663347579885	0.0976663347579885
+2380	2367	2368	0.137463391512845	0.137463391512845
+2382	2369	2370	0.0935927888835794	0.0935927888835794
+2383	2370	2371	0.22137940675351	0.22137940675351
+2384	93	2372	0.144113051799641	0.144113051799641
+2386	2373	2374	0.118928753039855	0.118928753039855
+18871	9233	10374	0.171083495652578	0.171083495652578
+2387	2374	2375	0.0543464584708682	0.0543464584708682
+2389	2378	2379	0.0407086995566738	0.0407086995566738
+2392	2381	2382	0.0375038196347678	0.0375038196347678
+2393	2383	2384	0.0259773773232023	0.0259773773232023
+2416	2406	2407	0.0997923351013975	0.0997923351013975
+2417	2407	2408	0.102411248163046	0.102411248163046
+2418	2408	2410	0.102005785733823	0.102005785733823
+2419	2410	2411	0.0465568279250156	0.0465568279250156
+2420	2411	1116	0.0498480806250605	0.0498480806250605
+2421	1116	2412	0.0524212085974951	0.0524212085974951
+2422	2412	2413	0.00643722349691115	0.00643722349691115
+2423	2413	2414	0.0569639986120168	0.0569639986120168
+2424	2414	2415	0.054429107165009	0.054429107165009
+2426	1254	2416	0.203595366987771	0.203595366987771
+2427	2416	2418	0.194946286421225	0.194946286421225
+2429	2419	2420	0.10553685574305	0.10553685574305
+2430	2420	2421	0.100987191369147	0.100987191369147
+2431	2421	2422	0.140456845404627	0.140456845404627
+2432	2423	2424	0.132127040761259	0.132127040761259
+2433	2424	2425	0.0836330996531634	0.0836330996531634
+2434	2425	2426	0.048846065804279	0.048846065804279
+2435	2426	2427	0.133578105271454	0.133578105271454
+2437	2428	2429	0.0517867804859422	0.0517867804859422
+2438	2429	2430	0.0498462274807045	0.0498462274807045
+2439	2430	2431	0.0505796838521555	0.0505796838521555
+2440	2431	2432	0.04930585188023	0.04930585188023
+2441	2432	2433	0.0511391992663707	0.0511391992663707
+2442	2433	2434	0.049421053488602	0.049421053488602
+2444	2435	2436	0.0499548965774192	0.0499548965774192
+2446	2437	2438	0.0498278119665032	0.0498278119665032
+2447	2438	1131	0.0475201423687532	0.0475201423687532
+2448	1131	2440	0.0499034161165238	0.0499034161165238
+2449	2440	2441	0.0519460604074748	0.0519460604074748
+2450	2441	2442	0.103666385736129	0.103666385736129
+2451	2442	2443	0.0495636449318867	0.0495636449318867
+2452	2443	2444	0.0508868110117968	0.0508868110117968
+2454	2445	2446	0.0992414144632343	0.0992414144632343
+2455	2446	2447	0.0995661619141735	0.0995661619141735
+2456	2447	2448	0.102918667647187	0.102918667647187
+2457	2448	2449	0.103317708000917	0.103317708000917
+2458	2449	714	0.103614639817309	0.103614639817309
+2460	2450	2451	0.0843633084104915	0.0843633084104915
+2462	2452	2453	0.133209824518529	0.133209824518529
+2463	2453	2454	0.136026824487267	0.136026824487267
+2464	2454	1228	0.0997640460624544	0.0997640460624544
+2466	2455	2173	0.100670279604477	0.100670279604477
+2467	2173	2456	0.101681998391895	0.101681998391895
+2468	2456	2457	0.135717601546705	0.135717601546705
+2469	2457	2458	0.125216072912334	0.125216072912334
+2470	2458	1253	0.13515574813911	0.13515574813911
+2472	1811	2459	0.0528114155967436	0.0528114155967436
+2474	489	2460	0.0154146680516237	0.0154146680516237
+2475	2460	2461	0.0956622199995578	0.0956622199995578
+2476	2461	2462	0.050324686032827	0.050324686032827
+2477	2462	2463	0.0440541436649478	0.0440541436649478
+2478	2463	2464	0.09025955144498	0.09025955144498
+2479	2464	2465	0.00954118829962817	0.00954118829962817
+2480	2465	2466	0.0924623221003645	0.0924623221003645
+2481	2466	2015	0.0557729059183765	0.0557729059183765
+2483	1998	2467	0.0939242873690555	0.0939242873690555
+2485	2468	2469	0.0807187230923558	0.0807187230923558
+2486	2469	2470	0.0660886283093114	0.0660886283093114
+2487	2470	2471	0.0307524582434291	0.0307524582434291
+2488	2471	2277	0.0631719504961159	0.0631719504961159
+2489	2277	2278	0.040321437937915	0.040321437937915
+2490	2278	2472	0.0579924273198359	0.0579924273198359
+2491	2472	2473	0.039564008523498	0.039564008523498
+2492	2473	2474	0.0566191459993118	0.0566191459993118
+2493	2474	2475	0.0461657995077916	0.0461657995077916
+2494	2475	2476	0.0573841993244499	0.0573841993244499
+2495	2476	2133	0.0413742441677564	0.0413742441677564
+2496	2133	2477	0.100557820130683	0.100557820130683
+2497	2477	2478	0.100232094382669	0.100232094382669
+2523	1412	1352	0.126262872161581	0.126262872161581
+2498	2478	2479	3.80416722159948	3.80416722159948
+17380	5747	2721	0.292296181002999	0.292296181002999
+2500	2481	2482	0.133762433378551	0.133762433378551
+2502	2483	2484	0.132763004680832	0.132763004680832
+2503	2484	2153	0.135437121880425	0.135437121880425
+2506	2486	2487	0.0976687527368442	0.0976687527368442
+2507	2487	2488	0.100497620432408	0.100497620432408
+2508	2488	1263	0.0968234302487817	0.0968234302487817
+2510	2489	2490	0.129998303918767	0.129998303918767
+2511	2490	2491	0.131427328920895	0.131427328920895
+2512	2491	2492	0.134959393077107	0.134959393077107
+2513	2492	2493	0.13352181172892	0.13352181172892
+2514	2493	2494	0.134977098269894	0.134977098269894
+2515	2494	2495	0.133660770711518	0.133660770711518
+2517	2496	1452	0.127643758305543	0.127643758305543
+2519	2497	2498	0.181370133617083	0.181370133617083
+2521	2481	2499	0.0828768372746742	0.0828768372746742
+2522	2499	1412	0.137652613646732	0.137652613646732
+2524	1352	2502	0.0676943813373141	0.0676943813373141
+2526	2503	2504	0.133817315449894	0.133817315449894
+2527	2504	2505	0.135673996947998	0.135673996947998
+2528	2505	2506	0.131966049224978	0.131966049224978
+2529	2506	2507	0.147529903316466	0.147529903316466
+2530	2507	2508	0.139391603159038	0.139391603159038
+16296	2509	2510	0.0284493842376544	0.0284493842376544
+2532	2511	2512	0.0269759988952267	0.0269759988952267
+2533	2512	2513	0.0303785309203703	0.0303785309203703
+2534	2513	2514	0.100988065805353	0.100988065805353
+2535	2514	2515	0.134258813820628	0.134258813820628
+2536	2515	2516	0.1356600895436	0.1356600895436
+2537	2516	2517	0.13329676442141	0.13329676442141
+2538	2517	1672	0.132852712666159	0.132852712666159
+2539	1672	2518	0.137264898504848	0.137264898504848
+2540	2518	2453	0.136447294484888	0.136447294484888
+2541	2453	2519	0.136891385699314	0.136891385699314
+2542	2519	2520	0.134024921907499	0.134024921907499
+2544	2521	2522	0.0902887501429021	0.0902887501429021
+2545	2522	2523	0.0432770654501463	0.0432770654501463
+2546	2523	2524	0.0452800647802491	0.0452800647802491
+2547	2524	2525	0.0887962039212883	0.0887962039212883
+2549	2526	2527	0.14861247431244	0.14861247431244
+2550	2527	2528	0.177718576341635	0.177718576341635
+2552	2529	2530	0.0550007858390758	0.0550007858390758
+2553	2530	2531	0.0537231597686698	0.0537231597686698
+2557	254	1937	0.0763145446596447	0.0763145446596447
+2562	2536	2537	0.0969383510155091	0.0969383510155091
+2564	2523	2538	0.041595541767366	0.041595541767366
+2565	2538	2539	0.0446801019224323	0.0446801019224323
+2567	2540	2541	0.0535606711091096	0.0535606711091096
+2568	2541	2542	0.0510376050613383	0.0510376050613383
+2569	2542	2543	0.048208042370787	0.048208042370787
+2570	2543	2544	0.0495068215823226	0.0495068215823226
+2571	2544	2545	0.0497291777137453	0.0497291777137453
+2572	2545	2546	0.0482680412228731	0.0482680412228731
+2573	2546	2547	0.0511986246623993	0.0511986246623993
+2574	2547	2548	0.0481311400848056	0.0481311400848056
+2575	2548	2549	0.05133533567668	0.05133533567668
+2576	2549	1090	0.0473365047010202	0.0473365047010202
+2578	2550	2551	0.0490112208554607	0.0490112208554607
+2579	2551	2552	0.0504551815276218	0.0504551815276218
+2580	2552	2553	0.0492845875119232	0.0492845875119232
+2581	2553	2554	0.0515497460521136	0.0515497460521136
+2582	2554	2555	0.0526862102053863	0.0526862102053863
+2583	2555	2556	0.0982237295878	0.0982237295878
+2584	2556	2557	0.264254691363992	0.264254691363992
+2585	1004	2558	0.099742520234474	0.099742520234474
+2588	2560	1078	0.149639182772472	0.149639182772472
+2589	1078	2522	0.184839011544187	0.184839011544187
+2591	1484	2561	0.33893453481304	0.33893453481304
+2592	2561	2562	0.36930331062994	0.36930331062994
+2594	2563	2295	0.235151876914131	0.235151876914131
+2596	2141	2564	0.0808696846181639	0.0808696846181639
+2628	2589	2590	0.046646895086832	0.046646895086832
+2597	2564	1224	0.24032404212478	0.24032404212478
+2600	2373	2567	0.1712601795962	0.1712601795962
+2601	2567	2568	0.00945648555666562	0.00945648555666562
+2603	2565	2569	0.0807956808253844	0.0807956808253844
+2604	2569	2570	0.076951583144574	0.076951583144574
+2605	2570	2571	0.0476131935554626	0.0476131935554626
+2607	2572	2568	0.0312593605711727	0.0312593605711727
+2609	2569	2573	0.0486149705677772	0.0486149705677772
+2610	2570	2574	0.0674260333743846	0.0674260333743846
+2612	2567	2575	0.0505261001159507	0.0505261001159507
+2615	2577	2578	0.10424034664628	0.10424034664628
+2616	2578	2579	0.103512640883379	0.103512640883379
+2617	2579	1398	0.105102630546257	0.105102630546257
+2618	1398	2580	0.0531367598624707	0.0531367598624707
+2619	2580	2581	0.0517085263170068	0.0517085263170068
+2620	2581	2582	0.0723991341895349	0.0723991341895349
+2621	2582	2583	0.0331676268132885	0.0331676268132885
+2622	2583	2584	0.0138525911142565	0.0138525911142565
+2623	2584	2585	0.037416228202987	0.037416228202987
+2624	2585	2586	0.00994286750486891	0.00994286750486891
+2625	2586	2587	0.040254104254433	0.040254104254433
+2629	2590	2591	0.00335375549834044	0.00335375549834044
+2630	2591	2592	0.0463774647105825	0.0463774647105825
+2631	2592	2593	0.00549997045042586	0.00549997045042586
+2632	2593	2594	0.0383542392436341	0.0383542392436341
+2634	2595	2596	0.0344869484873441	0.0344869484873441
+2635	2596	2597	0.0176627396467139	0.0176627396467139
+2636	2597	2598	0.0280292044334563	0.0280292044334563
+2637	2598	2599	0.0242403080070769	0.0242403080070769
+2638	2599	1569	0.0218944112855232	0.0218944112855232
+2639	1569	2600	0.0286200762867591	0.0286200762867591
+2640	2600	1094	0.018347539243156	0.018347539243156
+2642	1110	2601	0.0142742072830798	0.0142742072830798
+2643	2601	2602	0.0369383896439539	0.0369383896439539
+2644	2602	2603	0.00917687822572764	0.00917687822572764
+2645	2603	2604	0.0430608643022986	0.0430608643022986
+2646	2604	2605	0.00238679099543715	0.00238679099543715
+2647	2605	2606	0.0472847267591164	0.0472847267591164
+2648	2606	2607	0.0508445190476207	0.0508445190476207
+2649	2607	2608	0.00234361810734104	0.00234361810734104
+2650	2608	2609	0.0517900277245267	0.0517900277245267
+2652	2610	2611	0.145180979465517	0.145180979465517
+2674	2632	2634	0.599531015097949	0.599531015097949
+2675	2635	2181	0.0871692653780363	0.0871692653780363
+2676	2181	2638	0.0863959675292808	0.0863959675292808
+2679	2640	2641	0.121944822987822	0.121944822987822
+2681	2642	2643	0.0194925006650245	0.0194925006650245
+2682	2643	2350	0.134347723988409	0.134347723988409
+2683	2350	2644	0.173564798460366	0.173564798460366
+2684	2644	2645	0.174686152075606	0.174686152075606
+2685	2645	2646	0.175389969986131	0.175389969986131
+2688	2648	747	0.0612580153194998	0.0612580153194998
+2689	747	1565	0.142756107755667	0.142756107755667
+2690	1565	2649	0.138016127389502	0.138016127389502
+2691	2649	2650	0.12023627946696	0.12023627946696
+2693	2651	694	0.200802439501944	0.200802439501944
+2695	2652	2653	0.127019992895419	0.127019992895419
+2696	2653	2654	0.201028199806741	0.201028199806741
+2697	2654	2655	0.134212276460076	0.134212276460076
+2698	2655	2656	0.140083368586782	0.140083368586782
+2699	2656	2657	0.13046105136647	0.13046105136647
+2702	2633	2659	0.199675824720705	0.199675824720705
+2704	2660	949	0.174693421852154	0.174693421852154
+2705	949	2661	0.165148304595761	0.165148304595761
+2706	2661	2662	0.173966950291824	0.173966950291824
+2707	2662	2663	0.184218102738583	0.184218102738583
+2708	2663	2664	0.172496811774092	0.172496811774092
+2710	2665	2666	0.394651095737645	0.394651095737645
+2711	2667	2668	0.201414903082426	0.201414903082426
+17301	8745	4260	0.201420130125937	0.201420130125937
+2713	2669	2388	0.109456559825348	0.109456559825348
+2714	2388	2670	0.140828374595316	0.140828374595316
+2717	2672	2673	0.139177577172101	0.139177577172101
+2718	2673	2674	0.137352749762486	0.137352749762486
+2719	2674	2675	0.139830667816654	0.139830667816654
+2720	2675	2676	0.136669684605715	0.136669684605715
+2722	2677	2678	0.12447911414286	0.12447911414286
+2750	2704	2705	0.0292446267270126	0.0292446267270126
+2751	2705	2706	0.00658282845173238	0.00658282845173238
+2752	2706	2707	0.0151449443945988	0.0151449443945988
+2753	2707	2708	0.0714770438658631	0.0714770438658631
+2754	2708	2709	0.00822853556213401	0.00822853556213401
+2756	2710	8	0.130042568169854	0.130042568169854
+2757	8	2711	0.118166571537094	0.118166571537094
+2759	2712	2713	0.102388493919056	0.102388493919056
+2760	2713	2416	0.103111259495513	0.103111259495513
+2761	2416	2714	0.100631617654013	0.100631617654013
+2764	2716	2717	0.200655449563851	0.200655449563851
+2765	2717	2718	0.200753725915124	0.200753725915124
+2766	2718	1440	0.196942260224429	0.196942260224429
+2767	1440	2719	0.00947384243402213	0.00947384243402213
+2768	2719	2720	0.190389032049707	0.190389032049707
+2770	2723	2724	0.133138466543617	0.133138466543617
+2771	2724	2725	0.135835722389097	0.135835722389097
+2772	2725	2726	0.133534041022806	0.133534041022806
+2773	2726	2727	0.134234713813183	0.134234713813183
+2774	2727	1681	0.134687505819062	0.134687505819062
+2775	1681	2728	0.137316317225174	0.137316317225174
+2777	2729	2730	0.104120921025978	0.104120921025978
+2778	2730	2731	0.201486044854047	0.201486044854047
+2779	2731	2732	0.409054627036075	0.409054627036075
+2780	2733	2734	0.231399786377778	0.231399786377778
+2781	2734	2735	0.0901704059113055	0.0901704059113055
+2782	2735	2736	0.0825094909725568	0.0825094909725568
+2783	2737	2738	0.200363396709187	0.200363396709187
+2784	2738	2739	0.20121833925615	0.20121833925615
+2785	2739	2740	0.202399438971847	0.202399438971847
+2788	2742	2743	0.404396545451488	0.404396545451488
+2789	2744	1762	0.0647074290459755	0.0647074290459755
+2790	1762	2372	0.0925216625359094	0.0925216625359094
+2791	2372	2745	0.0223137340397398	0.0223137340397398
+2792	2745	2737	0.050045237249892	0.050045237249892
+2794	2746	2747	0.14840065064165	0.14840065064165
+2796	2748	2749	0.200822547172327	0.200822547172327
+2797	2749	2750	0.193145905748916	0.193145905748916
+2821	908	2770	0.128136612557408	0.128136612557408
+2824	2261	2772	0.10049786598023	0.10049786598023
+2825	2772	2773	0.106378037300959	0.106378037300959
+2826	2773	2110	0.093897002068377	0.093897002068377
+2827	2110	2774	0.107389868338328	0.107389868338328
+2828	2774	2775	0.0994873393877801	0.0994873393877801
+2850	2776	2777	0.10879749556538	0.10879749556538
+2855	2804	866	0.20027757395038	0.20027757395038
+2829	2775	2778	1.00147658782101	1.00147658782101
+2830	2779	2780	0.0530172029480301	0.0530172029480301
+2832	2781	2782	0.107966324930259	0.107966324930259
+2833	2782	2783	0.103296913871679	0.103296913871679
+2834	2783	2784	0.105735267915707	0.105735267915707
+2835	2784	2785	0.104367827383757	0.104367827383757
+2836	2785	2786	0.106026097865505	0.106026097865505
+2837	2786	2787	0.104661406473263	0.104661406473263
+2838	2787	2788	0.109120444986171	0.109120444986171
+2842	2790	2791	0.105111335997404	0.105111335997404
+2843	2791	2792	0.100650542913524	0.100650542913524
+2844	2792	2793	0.105228706955749	0.105228706955749
+2845	2793	2794	0.119444969275907	0.119444969275907
+2846	2794	2795	0.0942235633572651	0.0942235633572651
+2847	2795	2084	0.102241906689643	0.102241906689643
+2848	2084	2796	0.105000278025472	0.105000278025472
+2849	2796	2776	0.104992294488636	0.104992294488636
+2851	2777	2799	0.102990536508203	0.102990536508203
+2852	2799	2802	0.104419262818378	0.104419262818378
+3832	3274	3648	0.198107670536066	0.198107670536066
+2853	2802	2803	0.106343009363166	0.106343009363166
+2854	2803	2804	0.0880619154851023	0.0880619154851023
+2856	866	2805	0.0997722055250997	0.0997722055250997
+2857	2805	2806	0.0898296288997372	0.0898296288997372
+2858	2806	2807	0.0154103032800591	0.0154103032800591
+2860	1345	2808	0.0745089191630195	0.0745089191630195
+2862	2809	2810	0.0999390470653334	0.0999390470653334
+2863	2810	2811	0.098203415750831	0.098203415750831
+2864	2811	2812	0.105704456533214	0.105704456533214
+2865	2812	1841	0.178602078382633	0.178602078382633
+2867	2813	2814	0.147059691176011	0.147059691176011
+2869	2815	2816	0.0358929050784097	0.0358929050784097
+2871	2817	2818	0.202436914455554	0.202436914455554
+2872	2818	721	0.208959052889522	0.208959052889522
+2873	721	2819	0.195578398743409	0.195578398743409
+2874	2819	2820	0.132104447079437	0.132104447079437
+2875	2820	2499	0.133495572380704	0.133495572380704
+2877	2821	2823	0.131028201505055	0.131028201505055
+2878	2823	2154	0.134224367729179	0.134224367729179
+2879	2154	2824	0.137197819412826	0.137197819412826
+2881	2825	2828	0.100509300133652	0.100509300133652
+2882	2828	2829	0.098379052864586	0.098379052864586
+2883	2829	1264	0.0995905743898471	0.0995905743898471
+2884	1264	2830	0.0991885382845514	0.0991885382845514
+2885	2830	2831	0.0990153060665791	0.0990153060665791
+2886	2831	2718	0.0991269733313679	0.0991269733313679
+2887	2718	2832	0.100500652429342	0.100500652429342
+2888	2832	2833	0.0102715407543069	0.0102715407543069
+2889	2833	2834	0.0960953974534679	0.0960953974534679
+2890	2834	2835	0.0326867749280955	0.0326867749280955
+2891	2835	2836	0.134256786764763	0.134256786764763
+2892	2836	2837	0.113988792124523	0.113988792124523
+2893	2837	2838	0.0204082374430359	0.0204082374430359
+2895	2839	2840	0.113685974247049	0.113685974247049
+2896	2840	2841	0.132754406259035	0.132754406259035
+2897	2841	2842	0.136852657742897	0.136852657742897
+2899	1793	2843	0.0809702263007341	0.0809702263007341
+2900	2843	2844	0.0969425296921621	0.0969425296921621
+2901	2844	2845	0.413436446480526	0.413436446480526
+2903	2263	2847	0.179984264422638	0.179984264422638
+2904	2847	2848	0.174004040987329	0.174004040987329
+2905	2848	2849	0.194108624427032	0.194108624427032
+2907	2850	1276	0.172413086756907	0.172413086756907
+2909	2853	785	0.245123885631009	0.245123885631009
+2911	2854	2855	0.0854841952170884	0.0854841952170884
+2912	2855	2747	0.0762350203886263	0.0762350203886263
+2913	2747	2856	0.0859704175448271	0.0859704175448271
+2914	2856	2857	0.100779098585589	0.100779098585589
+2915	2857	2858	0.0905252463288938	0.0905252463288938
+2917	2859	2860	0.0227727209766704	0.0227727209766704
+2918	361	1735	0.198105222979832	0.198105222979832
+2919	1735	2861	0.0382126884100893	0.0382126884100893
+2920	148	2862	0.0438716250050412	0.0438716250050412
+2921	1003	2863	0.0520715649387988	0.0520715649387988
+2922	2863	2864	0.0982728809134093	0.0982728809134093
+2923	2864	2865	0.0994946507259965	0.0994946507259965
+3895	3698	3699	0.204838159377623	0.204838159377623
+2924	2865	2869	0.090463384362138	0.090463384362138
+2925	2869	2870	0.0564720828613131	0.0564720828613131
+2926	2870	2871	0.0608640771597173	0.0608640771597173
+2927	2872	2873	0.044011799999607	0.044011799999607
+2928	2873	2088	0.0931496819660856	0.0931496819660856
+2929	2088	2655	0.0960691148224413	0.0960691148224413
+2930	2655	2874	0.0937706080748846	0.0937706080748846
+2931	2874	2875	0.0828791997484075	0.0828791997484075
+2932	2875	2876	0.093218621711434	0.093218621711434
+2933	2876	2877	0.0704167162147941	0.0704167162147941
+2935	2878	2879	0.0887403720940643	0.0887403720940643
+2936	2879	2880	0.0909098673154509	0.0909098673154509
+2937	2880	2881	0.0882058988614067	0.0882058988614067
+2938	2881	2882	0.181777411929199	0.181777411929199
+2940	2883	2884	0.115661337881372	0.115661337881372
+2941	2884	2885	0.14826485880128	0.14826485880128
+2942	2885	2886	0.112251623213379	0.112251623213379
+2943	2886	2887	0.119994591224275	0.119994591224275
+2944	2887	2888	0.178622958928809	0.178622958928809
+2945	2888	2889	0.00412533177852682	0.00412533177852682
+2946	2889	2890	0.00481474032387871	0.00481474032387871
+2947	2890	2893	0.135290874001292	0.135290874001292
+2948	2893	2894	0.137892832771659	0.137892832771659
+2949	2894	817	0.140150092060959	0.140150092060959
+2950	817	2895	0.143808402694827	0.143808402694827
+2951	2895	2896	0.0697081016101773	0.0697081016101773
+2952	2896	2897	0.0168682725384664	0.0168682725384664
+2954	2898	2899	0.139071498957887	0.139071498957887
+2956	2900	2901	0.139727551358826	0.139727551358826
+2957	2901	2902	0.00293554606295758	0.00293554606295758
+2958	2902	2903	0.102721876435386	0.102721876435386
+2959	2903	2904	0.0305452475451112	0.0305452475451112
+2960	2904	2905	0.00503713742922791	0.00503713742922791
+2961	2905	2906	0.0458567885450819	0.0458567885450819
+2962	2906	2907	0.0981295261146626	0.0981295261146626
+2963	2907	628	0.0369055971430695	0.0369055971430695
+2964	628	1143	0.0958611496898419	0.0958611496898419
+2966	2908	2909	0.0463126901024473	0.0463126901024473
+2967	2909	872	0.0318684671228471	0.0318684671228471
+2968	872	2910	0.0711758745978235	0.0711758745978235
+2969	2910	2911	0.067495322638235	0.067495322638235
+2970	2911	2912	0.033747661319103	0.033747661319103
+2971	2912	2913	0.0475024757380027	0.0475024757380027
+2973	2914	2915	0.202578999998173	0.202578999998173
+2975	2916	2917	0.184685764171195	0.184685764171195
+2976	2917	2918	0.00737265767013589	0.00737265767013589
+2978	2919	2920	0.110148820147866	0.110148820147866
+2979	2920	584	0.039258317875865	0.039258317875865
+2980	584	2921	0.228363185041033	0.228363185041033
+2982	2922	1341	0.198962442111046	0.198962442111046
+2983	1341	2923	0.207039061514662	0.207039061514662
+2984	2923	2924	0.201175175238786	0.201175175238786
+2985	2924	2925	0.203376851393596	0.203376851393596
+2986	2925	2926	0.201920207523594	0.201920207523594
+2987	2926	2927	0.200452413161122	0.200452413161122
+2988	2927	776	0.201931296094781	0.201931296094781
+2990	2928	2930	0.209285084837907	0.209285084837907
+2991	2930	2931	0.197960209647655	0.197960209647655
+2992	2931	171	0.402036974102358	0.402036974102358
+2994	2932	2933	0.200508042098485	0.200508042098485
+2995	170	1728	0.257039245710078	0.257039245710078
+2996	1728	2934	0.145411467525923	0.145411467525923
+2999	2935	2936	0.0880513532781809	0.0880513532781809
+3025	2957	2958	0.01030947748559	0.01030947748559
+3000	2936	209	0.228338005511316	0.228338005511316
+3002	2937	2938	0.107611509993879	0.107611509993879
+3005	2940	2941	0.175855452328419	0.175855452328419
+3006	2941	2942	0.174909636552997	0.174909636552997
+3007	2942	2943	0.192197232795451	0.192197232795451
+3009	2944	546	0.0293283601170504	0.0293283601170504
+3010	546	2945	0.155746660532693	0.155746660532693
+3012	1475	2946	0.311303155924368	0.311303155924368
+3013	2946	2947	0.184883982264712	0.184883982264712
+3014	2947	2948	0.224685205653341	0.224685205653341
+3016	2949	2950	0.0888669853746646	0.0888669853746646
+3017	2950	2951	0.114577615588497	0.114577615588497
+3018	1225	2952	0.114132076273042	0.114132076273042
+3019	2952	2161	0.115442153745618	0.115442153745618
+3020	2161	2953	0.105428749590907	0.105428749590907
+3022	2954	2955	0.0114463280554541	0.0114463280554541
+3023	2955	639	0.18619297340356	0.18619297340356
+3024	639	2957	0.0509835810434449	0.0509835810434449
+3026	2958	2959	0.0353738821651235	0.0353738821651235
+3027	2959	2960	0.00284670794487764	0.00284670794487764
+3028	2960	1288	0.104793015683124	0.104793015683124
+3029	1288	2961	0.051496901479137	0.051496901479137
+3030	2961	2962	0.00960868888037157	0.00960868888037157
+3031	2962	2963	0.0208687174266634	0.0208687174266634
+3032	2963	2964	0.0498882614596582	0.0498882614596582
+3033	2964	2965	0.123304259264834	0.123304259264834
+3035	2966	2967	0.00908677871596767	0.00908677871596767
+3036	2967	2968	0.115854235202851	0.115854235202851
+3037	2968	2969	0.00700956571064615	0.00700956571064615
+3038	2969	2970	0.00940368205913038	0.00940368205913038
+3039	2970	2971	0.0666840110355875	0.0666840110355875
+3040	2971	2972	0.0679662165544488	0.0679662165544488
+3041	2972	2973	0.0630976433471776	0.0630976433471776
+3042	2973	2974	0.0491600079555241	0.0491600079555241
+3044	2975	2976	0.0997731403964804	0.0997731403964804
+3045	2976	2977	0.100715566829797	0.100715566829797
+3046	2977	2978	0.0996876914159973	0.0996876914159973
+3047	2978	2979	0.10126058971698	0.10126058971698
+3048	2979	2980	0.103346225532192	0.103346225532192
+3049	2980	2981	0.0983114005972926	0.0983114005972926
+3050	2981	2982	0.09874223460454	0.09874223460454
+3051	2982	2983	0.0510749251490339	0.0510749251490339
+3053	2984	2985	0.0505192363533637	0.0505192363533637
+3054	2985	1120	0.0491942863881514	0.0491942863881514
+3055	1120	2986	0.0517085444587275	0.0517085444587275
+3056	2986	2987	0.0504766444323722	0.0504766444323722
+3057	2987	2988	0.0508471211122413	0.0508471211122413
+3058	2988	2989	0.0482147566017866	0.0482147566017866
+3059	2989	2990	0.0513143127772338	0.0513143127772338
+3060	2990	2991	0.0501432318630803	0.0501432318630803
+3061	2991	2992	0.788648410502006	0.788648410502006
+3062	2993	2994	0.01555628530979	0.01555628530979
+3063	2994	2995	0.10729267423115	0.10729267423115
+13562	2999	2165	0.242533262128423	0.242533262128423
+3067	2998	3000	0.0998948824480635	0.0998948824480635
+3068	3000	3001	0.145910673725247	0.145910673725247
+3069	3001	3002	0.147264770664277	0.147264770664277
+3070	3002	3003	0.145706831644125	0.145706831644125
+3071	3003	3004	0.146381189481243	0.146381189481243
+3073	3006	3007	0.143637545441942	0.143637545441942
+3074	3007	3008	0.14139337588105	0.14139337588105
+3075	3008	3009	0.0340034784472366	0.0340034784472366
+3076	3009	3010	0.117637494210671	0.117637494210671
+3077	3010	3011	0.1483412167568	0.1483412167568
+3078	3011	3012	0.146200597856632	0.146200597856632
+3079	3012	3013	0.146656153847153	0.146656153847153
+3080	3013	3014	0.219897120549826	0.219897120549826
+3081	3014	2686	0.0729664723843293	0.0729664723843293
+3082	2686	3015	0.146055074464899	0.146055074464899
+3083	3015	3016	0.115984680072215	0.115984680072215
+3084	3016	3017	0.0102106792826024	0.0102106792826024
+3085	3017	3018	0.0188093561808277	0.0188093561808277
+3087	3019	3020	0.14624208166964	0.14624208166964
+3088	3020	3021	0.149932974568378	0.149932974568378
+3089	3021	2900	0.114654486829615	0.114654486829615
+3091	3022	3023	0.0936947193853168	0.0936947193853168
+3093	3024	3025	0.0922829109447797	0.0922829109447797
+3095	3026	3027	0.10419715248802	0.10419715248802
+3096	3027	3028	0.108587123231645	0.108587123231645
+3097	3028	3029	0.103455866634876	0.103455866634876
+3099	3030	3031	0.0828114972096423	0.0828114972096423
+3100	3031	3032	0.0151385207198175	0.0151385207198175
+3102	3035	3036	0.131928682141755	0.131928682141755
+3103	3036	3037	0.0286281442546585	0.0286281442546585
+3104	3037	3038	0.0830678583996061	0.0830678583996061
+3105	3038	3039	0.0820487800074757	0.0820487800074757
+3107	3040	3041	0.0592379768525999	0.0592379768525999
+3108	3041	1041	0.101867076922678	0.101867076922678
+3109	1041	3042	0.108431988254042	0.108431988254042
+3110	3042	3043	0.103209130509255	0.103209130509255
+3111	3043	3044	0.103439867243447	0.103439867243447
+3113	3045	3046	0.1080426022678	0.1080426022678
+3114	3046	3047	0.106399445317148	0.106399445317148
+3115	3047	2078	0.104328053424176	0.104328053424176
+3116	2078	2675	0.103849131822114	0.103849131822114
+3117	2675	3048	0.106371798877004	0.106371798877004
+3118	3048	3049	0.1089909908922	0.1089909908922
+3120	2995	3050	0.0829711714500804	0.0829711714500804
+3123	3051	3052	0.0304368475861105	0.0304368475861105
+19556	10441	10561	0.00875730102663828	0.00875730102663828
+3124	3053	3054	0.10469695146486	0.10469695146486
+3125	3054	3026	0.105413327506124	0.105413327506124
+3127	3055	3056	0.0146859459125862	0.0146859459125862
+3128	3056	3057	0.0899179636493607	0.0899179636493607
+3129	3057	3058	0.0968918459632465	0.0968918459632465
+3130	3058	3059	0.0931803123592361	0.0931803123592361
+3131	3059	3060	0.0924628769882567	0.0924628769882567
+3132	3060	2004	0.0909779529022995	0.0909779529022995
+3134	3061	2758	0.0983285272926963	0.0983285272926963
+3135	2758	3062	0.094848132376921	0.094848132376921
+3137	2284	3063	0.10273020958756	0.10273020958756
+3138	3063	3064	0.09684156688728	0.09684156688728
+3139	3064	2139	0.105654196010103	0.105654196010103
+3141	3065	3066	0.101995188106893	0.101995188106893
+4424	4133	950	0.17542265784203	0.17542265784203
+3142	3066	3067	1.00083609181461	1.00083609181461
+3143	3068	3069	0.10392860568863	0.10392860568863
+3144	3069	3070	0.10232907709913	0.10232907709913
+3145	3070	3071	0.103927869583062	0.103927869583062
+3146	3071	3072	0.102097379803977	0.102097379803977
+3147	3072	3073	0.0487909895079958	0.0487909895079958
+3149	1294	3074	0.105333551259412	0.105333551259412
+3150	3074	3075	0.0524798747272766	0.0524798747272766
+3151	3075	3076	0.0475858963921332	0.0475858963921332
+3152	3076	3077	0.00514079080382434	0.00514079080382434
+3154	3078	3079	0.0117186508515134	0.0117186508515134
+3155	3079	3080	0.0860074021370197	0.0860074021370197
+3156	3080	3081	0.0112654570741388	0.0112654570741388
+3157	3081	3082	0.0998426271509478	0.0998426271509478
+3159	3083	3084	0.0978722553449722	0.0978722553449722
+3161	3085	3086	0.0498003240048994	0.0498003240048994
+3162	3086	3087	0.0499820755044021	0.0499820755044021
+3163	3087	1765	0.0500932715547668	0.0500932715547668
+3164	1765	3089	0.0453737460403596	0.0453737460403596
+3165	3089	3090	0.0566344564433548	0.0566344564433548
+3166	3090	3091	0.0479788729039099	0.0479788729039099
+3167	3091	1517	0.0504584819239423	0.0504584819239423
+3168	1517	3092	0.0513918113913408	0.0513918113913408
+3169	3092	3093	0.0524695902697227	0.0524695902697227
+3170	3093	1084	0.0829756278031258	0.0829756278031258
+3171	1084	3094	0.018362425266723	0.018362425266723
+3172	3094	3095	0.100037197959638	0.100037197959638
+3173	3095	3096	0.0986501993185581	0.0986501993185581
+3174	3096	3097	0.100130714805898	0.100130714805898
+3175	3097	2046	0.103528392648025	0.103528392648025
+3176	2046	3098	0.0976518708062817	0.0976518708062817
+3177	3098	3099	0.0995509890492463	0.0995509890492463
+3179	1954	3100	0.060604506910361	0.060604506910361
+3182	3102	3103	0.0990114382918269	0.0990114382918269
+3183	3103	3104	0.100593787088956	0.100593787088956
+3184	3104	3105	0.0983789631442794	0.0983789631442794
+3185	3105	2848	0.0976433646550276	0.0976433646550276
+3186	2848	3106	0.102064870879311	0.102064870879311
+3187	3106	3107	0.10100271733246	0.10100271733246
+3188	3107	3108	0.0995828832367363	0.0995828832367363
+3189	3108	2942	0.101438732689929	0.101438732689929
+3190	2942	3109	0.100378814460195	0.100378814460195
+3191	3109	3110	1.25206634961555	1.25206634961555
+3192	3111	3112	0.015422388825789	0.015422388825789
+3193	3112	3113	0.11412427509118	0.11412427509118
+3194	3113	3114	0.468645573431598	0.468645573431598
+3196	2023	3115	0.177146580591063	0.177146580591063
+3197	3115	3102	0.173943728587952	0.173943728587952
+3198	3102	3116	0.193451028525805	0.193451028525805
+3200	3117	1806	0.211443534426126	0.211443534426126
+3201	1806	3118	0.193022911848757	0.193022911848757
+3203	3119	3120	0.0940041909856305	0.0940041909856305
+3204	3120	3121	0.197561396619787	0.197561396619787
+3206	3122	3123	0.200799900699528	0.200799900699528
+3207	3124	3125	0.200863237154928	0.200863237154928
+3208	3125	3126	0.201874389323119	0.201874389323119
+3210	3127	3128	0.0750470474178356	0.0750470474178356
+3211	3128	3131	0.0761135403806392	0.0761135403806392
+3213	3029	3132	0.132611387982682	0.132611387982682
+3214	3132	3133	0.00539409864485362	0.00539409864485362
+3215	3133	3134	0.139160450695908	0.139160450695908
+3216	3134	1160	0.139291641031025	0.139291641031025
+3217	1160	879	0.139609262878975	0.139609262878975
+3218	879	3135	0.138493325710101	0.138493325710101
+3219	3135	2787	0.134090008076189	0.134090008076189
+3220	2787	3136	0.1321642245327	0.1321642245327
+3221	3136	3137	0.21408080552497	0.21408080552497
+3222	3137	3138	0.144895915790921	0.144895915790921
+3223	3138	3139	0.169628584853264	0.169628584853264
+3226	3141	3142	0.202888440515448	0.202888440515448
+3227	3142	2878	0.162092717607055	0.162092717607055
+3251	3162	2365	0.110303719018863	0.110303719018863
+3254	3164	3165	0.240177393696762	0.240177393696762
+3255	3165	3166	0.102768151984011	0.102768151984011
+3256	3166	3167	0.0509818546092244	0.0509818546092244
+3258	3168	3169	0.0591373244934598	0.0591373244934598
+3259	3169	3170	0.0530870196657507	0.0530870196657507
+3261	3171	3172	0.201914360897617	0.201914360897617
+3262	3172	3173	0.203130900823478	0.203130900823478
+3263	3173	3174	0.201562825315852	0.201562825315852
+3264	3174	3175	0.19958273918251	0.19958273918251
+3265	3175	3177	0.402921101557674	0.402921101557674
+3266	3178	3179	0.0905536808669309	0.0905536808669309
+3267	3179	3180	0.0577627490058349	0.0577627490058349
+3268	3180	3181	0.0505235668696686	0.0505235668696686
+3269	3181	3182	0.065160532538722	0.065160532538722
+3270	3182	3183	0.00793078546182679	0.00793078546182679
+3271	3183	3184	0.0531842364372946	0.0531842364372946
+3273	2386	3186	0.0378622155960126	0.0378622155960126
+3274	3186	3187	0.0069150542380481	0.0069150542380481
+3275	3187	3188	0.0174713630038869	0.0174713630038869
+3277	3189	3190	0.10095397068423	0.10095397068423
+3278	3190	3191	0.102948552858793	0.102948552858793
+3279	3191	3192	0.099117357243018	0.099117357243018
+3280	3192	3193	0.10499121023248	0.10499121023248
+3282	3194	3195	0.0985672231580753	0.0985672231580753
+3283	3195	3196	0.0975023503923766	0.0975023503923766
+16511	8899	8896	0.0458243741253751	0.0458243741253751
+3284	3196	3197	0.0505627463090716	0.0505627463090716
+3285	3197	3198	0.0500221717072617	0.0500221717072617
+3286	3198	3199	0.046867135973938	0.046867135973938
+3287	3199	1768	0.0529832159562647	0.0529832159562647
+3288	1768	3200	0.0470467690925653	0.0470467690925653
+3289	3200	3201	0.0524586560775799	0.0524586560775799
+3290	3201	3202	0.0495946350720587	0.0495946350720587
+3291	3202	1518	0.052984641558086	0.052984641558086
+3292	1518	3203	0.100125608990258	0.100125608990258
+3293	3203	1085	0.0831191573838339	0.0831191573838339
+3294	1085	3204	0.01719627237498	0.01719627237498
+3295	3204	3205	0.100278521536605	0.100278521536605
+3296	3205	3206	0.100159169300764	0.100159169300764
+3297	3206	3207	0.0980766730481921	0.0980766730481921
+3299	2047	3208	0.0998503328239714	0.0998503328239714
+3300	3208	3209	0.0991174142787685	0.0991174142787685
+3301	3209	3210	0.0465862087261248	0.0465862087261248
+3303	3211	3212	0.0483226107842397	0.0483226107842397
+3304	3212	3213	0.0508033572812722	0.0508033572812722
+3305	3213	3214	0.0520095145740976	0.0520095145740976
+3307	3215	3216	0.047636983079693	0.047636983079693
+3308	3216	3217	0.00228390635402469	0.00228390635402469
+3309	3217	3218	0.0492156902021281	0.0492156902021281
+3310	3218	3219	0.105720878983862	0.105720878983862
+3312	3220	3221	0.135734479783406	0.135734479783406
+3313	3221	2519	0.14595602798476	0.14595602798476
+3314	2519	3222	0.126165217374209	0.126165217374209
+3315	3222	1229	0.098841689459618	0.098841689459618
+3316	1229	3223	0.098924974953348	0.098924974953348
+3317	3223	2174	0.100839404349716	0.100839404349716
+3318	2174	3224	0.101432888438354	0.101432888438354
+3319	3224	3225	0.137343472225008	0.137343472225008
+3321	3226	379	0.0754564811292303	0.0754564811292303
+3322	379	63	0.0417835231628563	0.0417835231628563
+3323	63	1255	0.0152981335887719	0.0152981335887719
+3326	3228	3229	0.0836292502069327	0.0836292502069327
+3327	3229	3230	0.0485562677029858	0.0485562677029858
+3330	3232	3233	0.105369806952797	0.105369806952797
+3331	3233	3234	0.0244901910381055	0.0244901910381055
+3332	3235	3236	0.101967463967826	0.101967463967826
+3333	3236	3237	0.10049747789636	0.10049747789636
+3334	3237	3238	0.0983034665163014	0.0983034665163014
+3335	3238	3239	0.103439327677052	0.103439327677052
+3336	3239	715	0.100109252929192	0.100109252929192
+3337	715	3240	0.10857516210103	0.10857516210103
+3338	3240	3241	0.0836693243428755	0.0836693243428755
+3340	1256	2714	0.204938708369458	0.204938708369458
+3341	2714	3242	0.194775016549959	0.194775016549959
+3343	3243	3244	0.104619278832535	0.104619278832535
+3344	3244	3245	0.0999091629456622	0.0999091629456622
+3345	3245	3246	0.0969207243261653	0.0969207243261653
+3346	3246	3247	0.100620613481727	0.100620613481727
+3347	3247	3248	0.051818780315465	0.051818780315465
+3348	3248	3249	0.0493068623564548	0.0493068623564548
+3349	3249	3250	0.102061915203609	0.102061915203609
+3350	3250	3251	0.0474417721331526	0.0474417721331526
+3351	3251	3252	0.0496832213808208	0.0496832213808208
+3352	3252	3253	0.00274646412019378	0.00274646412019378
+3353	3253	3254	0.0454267490135207	0.0454267490135207
+3354	3254	3255	0.00458544852460102	0.00458544852460102
+3355	3255	3256	0.0483268582508211	0.0483268582508211
+3357	3257	3258	0.0459440862493274	0.0459440862493274
+3358	3258	3259	0.236332489020417	0.236332489020417
+3360	3260	2735	0.173472989255867	0.173472989255867
+3362	594	2050	0.105283533842597	0.105283533842597
+3363	2050	3261	0.0509100007310826	0.0509100007310826
+3364	3261	3262	0.0467523465641757	0.0467523465641757
+3365	3262	3263	0.0481309278210478	0.0481309278210478
+3366	3263	3264	0.051732585346973	0.051732585346973
+3367	3264	3265	0.0457622961694799	0.0457622961694799
+3368	3265	3266	0.0530171123380122	0.0530171123380122
+3369	3266	3267	0.0451783444295864	0.0451783444295864
+3370	3267	3268	0.0542978455447466	0.0542978455447466
+3371	3268	3269	0.0466844058034087	0.0466844058034087
+3372	3269	3270	0.050646295110284	0.050646295110284
+3373	3270	3271	0.0484988623690369	0.0484988623690369
+3374	3271	3272	0.0498932625841468	0.0498932625841468
+3375	3272	3273	0.0470944745658083	0.0470944745658083
+3376	3273	3274	0.0579078107783869	0.0579078107783869
+3377	3274	3275	0.151893561253266	0.151893561253266
+3378	3275	3276	0.0516549077274405	0.0516549077274405
+3379	3276	2734	0.0976564411094966	0.0976564411094966
+3380	2734	3277	0.0486100790727351	0.0486100790727351
+3381	3277	3278	0.0497906140365211	0.0497906140365211
+3382	3278	3279	0.0484124404037645	0.0484124404037645
+3383	3279	3280	0.00653599515433254	0.00653599515433254
+3384	3280	3178	0.0418764820732136	0.0418764820732136
+3385	3178	3284	0.0979449587868123	0.0979449587868123
+3386	3284	3285	0.201022039935831	0.201022039935831
+3389	3287	2316	0.156303067302058	0.156303067302058
+20281	10719	10710	0.0549191742699874	0.0549191742699874
+3390	2316	3288	0.10952595107857	0.10952595107857
+3391	3288	3289	0.0403941356128906	0.0403941356128906
+3392	3289	3290	0.0912238346425634	0.0912238346425634
+3393	3290	3291	0.0816082032445177	0.0816082032445177
+3394	3291	3292	0.0169509581328033	0.0169509581328033
+3395	3292	3293	0.0433466637454668	0.0433466637454668
+3396	3293	3294	0.0186582685984772	0.0186582685984772
+3397	3294	3295	0.152140762364393	0.152140762364393
+3403	3299	1325	0.177116632986756	0.177116632986756
+3404	1325	1381	0.178046664647513	0.178046664647513
+3406	1057	3300	0.119136901138604	0.119136901138604
+3408	3301	1581	0.141640668502809	0.141640668502809
+3409	1581	3302	0.308989164663259	0.308989164663259
+3411	3304	3305	0.143837220516125	0.143837220516125
+3412	3305	3306	0.147698693465714	0.147698693465714
+3414	3307	3308	0.146426311775338	0.146426311775338
+3415	3308	3309	0.146463761248984	0.146463761248984
+3416	3309	3310	0.146549783304075	0.146549783304075
+3417	3310	2029	0.145425360285073	0.145425360285073
+3418	2029	3311	0.146713513284486	0.146713513284486
+3419	3311	634	0.143866210964815	0.143866210964815
+3420	634	3312	0.147112545494359	0.147112545494359
+3421	3312	3313	0.145900102395242	0.145900102395242
+3422	3313	2321	0.147128656269274	0.147128656269274
+3424	3314	3315	0.0970240945457023	0.0970240945457023
+3425	3315	2190	0.185651929243496	0.185651929243496
+3427	737	1557	0.13315596414531	0.13315596414531
+3429	3316	3317	0.0821429797668101	0.0821429797668101
+3434	3321	3322	0.579886710164932	0.579886710164932
+3436	3323	3324	0.139196729808835	0.139196729808835
+3438	3325	3326	0.13668278082176	0.13668278082176
+3439	3326	3045	0.137860640994287	0.137860640994287
+3440	3045	3327	0.13778919161955	0.13778919161955
+3441	3327	3328	0.00447003605120276	0.00447003605120276
+3442	3328	3329	0.0233867925544547	0.0233867925544547
+3443	3329	3330	0.116012449407873	0.116012449407873
+3444	3330	1166	0.139882774592672	0.139882774592672
+3445	1166	886	0.137525679366119	0.137525679366119
+3446	886	3332	0.139657446365043	0.139657446365043
+3447	3332	2793	0.133361291612613	0.133361291612613
+3448	2793	3333	0.132228102569741	0.132228102569741
+3450	3334	3335	0.0903059057199572	0.0903059057199572
+3451	3335	3336	0.154418186694308	0.154418186694308
+3452	3336	3337	0.192225493046604	0.192225493046604
+3453	3337	3338	0.174660133594583	0.174660133594583
+3454	3338	3339	0.202477883587996	0.202477883587996
+3455	3339	3340	0.0759856229646665	0.0759856229646665
+3456	3340	3341	0.00965813264254578	0.00965813264254578
+3458	3342	1191	0.166878049186437	0.166878049186437
+3459	1191	3343	0.0216063183857929	0.0216063183857929
+3460	3343	3344	0.200920604325059	0.200920604325059
+3462	2346	3345	0.174959253236807	0.174959253236807
+3463	3345	1535	0.0463919707335885	0.0463919707335885
+3465	3346	3347	0.27909963341584	0.27909963341584
+3466	3347	740	0.112084486383373	0.112084486383373
+3467	740	1560	0.139918597194563	0.139918597194563
+3468	1560	3348	0.140278682022104	0.140278682022104
+3469	3348	3349	0.121438604958881	0.121438604958881
+3471	3350	3351	0.173966017570494	0.173966017570494
+3472	3351	3352	0.16543284170321	0.16543284170321
+3474	3353	3354	0.201189633952299	0.201189633952299
+3477	3356	3357	0.174637614655306	0.174637614655306
+3479	2467	3359	0.203720276949683	0.203720276949683
+3480	3359	3360	0.200874146006411	0.200874146006411
+3481	3360	795	0.199720493083652	0.199720493083652
+3482	795	3361	0.203163577363555	0.203163577363555
+3484	3362	3363	0.203261629260278	0.203261629260278
+3485	3363	3061	0.206912153397241	0.206912153397241
+3486	3061	3364	0.186005329793712	0.186005329793712
+3488	3365	1140	0.135699508009882	0.135699508009882
+3490	907	3366	0.12816779719188	0.12816779719188
+3492	3367	1297	0.200952363448705	0.200952363448705
+3494	3368	3369	0.101405416836813	0.101405416836813
+3495	3369	3370	0.0983850243457341	0.0983850243457341
+3497	3371	3372	0.0654246270475212	0.0654246270475212
+3498	3372	2939	0.0903071880553539	0.0903071880553539
+3499	2939	3373	0.0855248234583031	0.0855248234583031
+3500	3373	59	0.083918142781954	0.083918142781954
+3502	3374	3375	0.253631602277532	0.253631602277532
+3503	3376	3377	0.201161683466984	0.201161683466984
+3505	3378	623	0.0117822953093903	0.0117822953093903
+3506	623	3379	0.132533255410588	0.132533255410588
+3507	3379	3380	0.0779035335014782	0.0779035335014782
+3508	3380	3381	0.206545256567466	0.206545256567466
+20694	10906	10909	0.0421787313564029	0.0421787313564029
+3509	3381	3382	0.13283549460514	0.13283549460514
+3510	3382	3383	0.135569425081515	0.135569425081515
+3511	3383	3384	0.136156970349478	0.136156970349478
+3512	3384	3385	0.132775661568888	0.132775661568888
+3514	2584	3386	0.177011208890761	0.177011208890761
+3515	3386	3387	0.0885846426355864	0.0885846426355864
+3518	3389	3390	0.176205550995696	0.176205550995696
+3519	3390	3391	0.169210992899206	0.169210992899206
+3520	3391	3392	0.0099077669914251	0.0099077669914251
+3521	3392	1849	0.175456016508954	0.175456016508954
+3522	1849	2583	0.178501996899051	0.178501996899051
+3524	600	3393	0.2153977841733	0.2153977841733
+3526	3394	3395	0.118920951518272	0.118920951518272
+3527	3395	3396	0.142989811640976	0.142989811640976
+3528	3396	3397	0.262177718796624	0.262177718796624
+3530	14	3398	0.133564321671034	0.133564321671034
+3531	3398	3399	0.133563180552006	0.133563180552006
+3532	3399	3400	0.135746766447532	0.135746766447532
+3533	3400	3401	0.133513247236878	0.133513247236878
+3534	3401	3402	0.0998328095575455	0.0998328095575455
+3535	3402	3403	0.0352154332682272	0.0352154332682272
+3536	3403	2405	0.0667725534497617	0.0667725534497617
+3537	2405	3404	0.0682403264820305	0.0682403264820305
+3538	3404	3405	0.033013773721009	0.033013773721009
+3539	3405	3409	0.0499933274562477	0.0499933274562477
+3540	3409	3410	0.0543299225353451	0.0543299225353451
+3541	3410	1767	0.0526619512572465	0.0526619512572465
+3542	1767	3411	0.150417295173728	0.150417295173728
+3543	3411	2979	0.204011051874628	0.204011051874628
+3544	2979	656	0.0515792906446319	0.0515792906446319
+3546	1887	591	0.0491592770696459	0.0491592770696459
+3547	591	3412	0.0481379602388448	0.0481379602388448
+3548	3412	3413	0.102266489872996	0.102266489872996
+3549	3413	1888	0.0486842125387167	0.0486842125387167
+3550	1888	3414	0.0510943840977224	0.0510943840977224
+3551	3414	3415	0.00919583632372114	0.00919583632372114
+3552	3415	3416	0.0353489043837471	0.0353489043837471
+17077	3568	8074	0.699339640197117	0.699339640197117
+3553	3416	3417	0.050093361124945	0.050093361124945
+3554	3417	3418	0.0498820440925909	0.0498820440925909
+3555	3418	3419	0.0498984530952944	0.0498984530952944
+3556	3419	3420	0.00880663819045291	0.00880663819045291
+3557	3420	3421	0.0410819827191675	0.0410819827191675
+3558	3421	3422	0.0491592770696459	0.0491592770696459
+3559	3422	3423	0.0205377029518591	0.0205377029518591
+3560	3423	3424	0.02549703249469	0.02549703249469
+3562	3425	3425	0.000442266584977921	0.000442266584977921
+3563	3425	3426	0.0816315051221547	0.0816315051221547
+3565	3427	1664	0.0502947464100412	0.0502947464100412
+3567	1683	3428	0.020460323508623	0.020460323508623
+3568	3428	3429	0.0515955226949506	0.0515955226949506
+3569	3429	3430	0.133978887334031	0.133978887334031
+3570	3430	2427	0.13659869274501	0.13659869274501
+3571	2427	2428	0.063830021941611	0.063830021941611
+3572	2428	3231	0.0696897365044123	0.0696897365044123
+3573	3231	3431	0.132766742414187	0.132766742414187
+3574	3431	3432	0.106360486773292	0.106360486773292
+3575	3432	3433	0.0970117847237812	0.0970117847237812
+3576	3433	3434	0.1971376871667	0.1971376871667
+19819	5606	10648	0.0581167522759965	0.0581167522759965
+3577	3434	3435	0.133491532527273	0.133491532527273
+3582	2842	3438	0.0923852774741301	0.0923852774741301
+3584	1421	317	0.102691144252484	0.102691144252484
+3585	317	513	0.0772222660891488	0.0772222660891488
+3586	513	3439	0.0612593596381532	0.0612593596381532
+3587	3439	3440	0.148872782400453	0.148872782400453
+3588	3440	2540	0.197920167618774	0.197920167618774
+3589	2540	3441	0.415850973508269	0.415850973508269
+3590	3442	699	0.201963508155417	0.201963508155417
+3591	699	3443	0.200352700158165	0.200352700158165
+3593	3444	3445	0.0185806742090463	0.0185806742090463
+20212	5504	7078	0.147322900830237	0.147322900830237
+20213	7078	2034	0.146401533431931	0.146401533431931
+20214	2034	5323	0.145002332578884	0.145002332578884
+20215	5323	632	0.146882687938452	0.146882687938452
+4488	138	4177	0.203369481928684	0.203369481928684
+4489	4177	1741	0.0411375852444616	0.0411375852444616
+4490	1741	4178	0.159371364409943	0.159371364409943
+4492	4179	4180	0.471114595558298	0.471114595558298
+4493	4180	4181	0.219268705400549	0.219268705400549
+4495	4182	4183	0.0994268923770179	0.0994268923770179
+4496	4183	1296	0.100075433980265	0.100075433980265
+4497	1296	1369	0.0964029757899856	0.0964029757899856
+5794	5116	3795	0.199284062960758	0.199284062960758
+18557	318	10316	0.0220547227626022	0.0220547227626022
+4499	4184	4185	0.301634217878433	0.301634217878433
+4501	2809	3744	0.0998445716696615	0.0998445716696615
+4502	3744	4186	0.10131230641957	0.10131230641957
+4504	4187	4188	0.132156563746112	0.132156563746112
+4505	4188	4189	0.132402395077485	0.132402395077485
+4506	4189	4190	0.137552756241722	0.137552756241722
+4507	4190	4191	0.13379771872617	0.13379771872617
+4508	4191	1671	0.132214775902914	0.132214775902914
+4509	1671	4192	0.137147368544834	0.137147368544834
+4510	4192	2452	0.138219895716206	0.138219895716206
+4511	2452	3221	0.134932977312539	0.134932977312539
+4512	3221	4193	0.133628518122145	0.133628518122145
+4515	4195	554	0.154583323244677	0.154583323244677
+4516	554	4196	0.0224725093154139	0.0224725093154139
+4517	4083	4197	0.170590775930264	0.170590775930264
+4518	4197	3764	0.0397497113610314	0.0397497113610314
+4520	2820	1411	0.135923564862653	0.135923564862653
+4521	1411	1351	0.125050095081124	0.125050095081124
+4523	4198	4199	0.454148647656551	0.454148647656551
+4525	4200	4201	0.133477223659273	0.133477223659273
+4526	4201	4202	0.132617384077965	0.132617384077965
+4527	4202	4203	0.134214836424706	0.134214836424706
+4531	4206	1274	0.135021280032386	0.135021280032386
+4533	4207	4208	0.280988389053987	0.280988389053987
+4534	4209	4210	0.209285084830873	0.209285084830873
+4535	4210	4211	0.203065667561202	0.203065667561202
+4537	4212	3742	0.11682398880887	0.11682398880887
+4538	3742	4213	0.111567725645095	0.111567725645095
+4539	4213	1339	0.201798845648163	0.201798845648163
+4541	4214	4215	0.203408625976642	0.203408625976642
+4542	4215	4216	0.204114710404745	0.204114710404745
+4543	4216	4217	0.199718562750948	0.199718562750948
+4544	4217	4218	0.198271148516705	0.198271148516705
+4545	4218	771	0.17255385564489	0.17255385564489
+4547	2307	165	0.313487377331004	0.313487377331004
+4549	4219	4220	0.186213228977795	0.186213228977795
+4551	754	1537	0.148966155582635	0.148966155582635
+4553	4221	4222	0.161148121345995	0.161148121345995
+4554	4222	4223	0.216135114601666	0.216135114601666
+4555	4223	2863	0.186375265274556	0.186375265274556
+4556	2863	4224	0.202043234198664	0.202043234198664
+4558	2306	163	0.315813218507964	0.315813218507964
+4560	2936	4225	0.221837398274975	0.221837398274975
+4561	4226	4227	0.032037204481033	0.032037204481033
+4562	4227	3117	0.0749583948430369	0.0749583948430369
+4563	3117	4228	0.116878015161696	0.116878015161696
+4564	4228	4229	0.198835732908948	0.198835732908948
+4565	4229	3631	0.67836534857008	0.67836534857008
+4567	4230	4231	0.0278521738101303	0.0278521738101303
+4568	4231	3626	0.0483370034898742	0.0483370034898742
+4569	3626	4232	0.0510217447847317	0.0510217447847317
+4570	4232	4233	0.0469996469262497	0.0469996469262497
+4571	4233	4234	0.00322569080192639	0.00322569080192639
+4572	4234	4235	0.0476498478152495	0.0476498478152495
+4573	4235	4236	0.00275575991011001	0.00275575991011001
+4574	4236	4237	0.0466374525425622	0.0466374525425622
+4575	4237	4176	0.0490297893404984	0.0490297893404984
+4577	1777	4238	0.0499406466420926	0.0499406466420926
+4578	4238	4239	0.0481565861804565	0.0481565861804565
+4579	4239	4241	0.0519465642125291	0.0519465642125291
+4580	4241	1525	0.0497346926389818	0.0497346926389818
+4581	1525	4242	0.0484856348902157	0.0484856348902157
+4582	4242	4243	0.0507187078501555	0.0507187078501555
+4584	4244	4245	0.0527177379947323	0.0527177379947323
+4585	4245	4246	0.0464286276535365	0.0464286276535365
+4586	4246	4247	0.0517965186978674	0.0517965186978674
+4587	4247	4248	0.0444043495278385	0.0444043495278385
+4588	4248	569	0.0503939700372948	0.0503939700372948
+4589	569	4249	0.0487604458581461	0.0487604458581461
+4590	4249	4250	0.049686610105401	0.049686610105401
+4591	4250	3757	0.0516485422129312	0.0516485422129312
+4593	233	4251	0.0506501019029544	0.0506501019029544
+4594	4251	4252	0.049085285550805	0.049085285550805
+4595	4252	4253	0.0509968613887819	0.0509968613887819
+4596	4253	4254	0.0502265448038836	0.0502265448038836
+4597	4254	4255	0.0465382189133341	0.0465382189133341
+4598	4255	4256	0.0510900830663337	0.0510900830663337
+4599	4256	4257	0.0497787434592631	0.0497787434592631
+4600	4257	3481	0.048623750791878	0.048623750791878
+4601	3481	4258	0.0500598342416855	0.0500598342416855
+4602	4258	4259	0.0490673464291656	0.0490673464291656
+4603	4259	4260	0.0504371465498466	0.0504371465498466
+4604	4260	3695	0.0479901081376225	0.0479901081376225
+4606	4261	4262	0.0501538740654185	0.0501538740654185
+4607	4262	4263	0.0491706548036751	0.0491706548036751
+4608	4263	4264	0.0565833994828839	0.0565833994828839
+4610	277	4265	0.0528934097089145	0.0528934097089145
+4611	4265	4266	0.0968160140004115	0.0968160140004115
+20627	10752	10756	0.0716547469239426	0.0716547469239426
+4612	4266	4267	0.0968245593658874	0.0968245593658874
+4613	4267	973	0.0982940228399724	0.0982940228399724
+4614	973	4268	0.0961120665100732	0.0961120665100732
+4615	4268	3151	0.0982830823377853	0.0982830823377853
+4616	3151	4269	0.0956500899819903	0.0956500899819903
+4617	4269	4270	0.0774758788411222	0.0774758788411222
+4619	4271	3870	0.115440404669678	0.115440404669678
+4620	3870	839	0.0968819352907846	0.0968819352907846
+4621	839	4272	0.0909531666656291	0.0909531666656291
+4623	3911	4273	0.0389706485750465	0.0389706485750465
+4624	369	4274	0.037543890411303	0.037543890411303
+4625	4274	4275	0.0617087098520115	0.0617087098520115
+4629	2912	4277	0.0342245606725147	0.0342245606725147
+4630	4277	4278	0.104948893572031	0.104948893572031
+4631	4278	3313	0.105285822276279	0.105285822276279
+4632	3313	4279	0.10593807567588	0.10593807567588
+4634	1347	1613	0.100174688565551	0.100174688565551
+4635	1613	4280	0.104997472753206	0.104997472753206
+4665	4282	4283	0.0977314379471645	0.0977314379471645
+4639	4284	4285	0.190476396365953	0.190476396365953
+4640	4285	4286	0.254383171783508	0.254383171783508
+4642	4287	1279	0.116253581720056	0.116253581720056
+4643	1279	4288	0.133001385838575	0.133001385838575
+4644	4288	4289	0.132041969489344	0.132041969489344
+4645	4289	4290	0.131385678442372	0.131385678442372
+4647	3405	4291	0.101549832168715	0.101549832168715
+4648	4291	4292	0.100523519517599	0.100523519517599
+4649	4292	4293	0.100138462817161	0.100138462817161
+5953	5195	5227	0.170006104257124	0.170006104257124
+4650	4293	4294	0.099847555472709	0.099847555472709
+4651	4294	4295	0.0503614009997415	0.0503614009997415
+4652	4295	1117	0.0494296215921	0.0494296215921
+4653	1117	4296	0.050087846881447	0.050087846881447
+4654	4296	4297	0.0495578429804187	0.0495578429804187
+4655	4297	4298	0.0515578068709943	0.0515578068709943
+20458	10785	10812	0.0256322806680483	0.0256322806680483
+4656	4298	4299	0.00303478875120781	0.00303478875120781
+4659	4300	1508	0.0639307257992365	0.0639307257992365
+4660	1508	179	0.201223720751325	0.201223720751325
+4661	179	1707	0.203441168484602	0.203441168484602
+4663	4301	4302	0.143365965722663	0.143365965722663
+4686	4303	4304	0.0764005624211503	0.0764005624211503
+4664	4302	4305	2.47136733106287	2.47136733106287
+17126	4306	4307	0.198891077653185	0.198891077653185
+17128	4308	4309	0.137004722426324	0.137004722426324
+4666	4283	4310	0.00807297378678342	0.00807297378678342
+4667	4310	4311	0.088125570928718	0.088125570928718
+4668	4311	4312	0.0140203745468903	0.0140203745468903
+19629	10518	10593	0.0691965251351115	0.0691965251351115
+4670	4313	4314	0.114544256923558	0.114544256923558
+4671	4314	4315	0.197539157423005	0.197539157423005
+4672	4315	4035	0.10133193665102	0.10133193665102
+4675	3389	4317	0.176922247784819	0.176922247784819
+4676	4317	1313	0.17698917639034	0.17698917639034
+4677	1313	4318	0.2429613537943	0.2429613537943
+4678	4318	4319	0.0830631503019858	0.0830631503019858
+4679	4319	4320	0.0977203133854136	0.0977203133854136
+4680	4320	4321	0.113818121601187	0.113818121601187
+4681	4321	4322	0.0984100223094627	0.0984100223094627
+4683	4323	4324	0.0484810817232728	0.0484810817232728
+4684	4324	4325	0.0969202903062125	0.0969202903062125
+4685	4325	4303	0.026431034063363	0.026431034063363
+4687	4304	4326	0.107959479077584	0.107959479077584
+4689	4302	1574	0.191677995814021	0.191677995814021
+4691	3672	4328	0.125428790986072	0.125428790986072
+4692	4328	4329	0.0951720176425212	0.0951720176425212
+4693	4329	4330	0.139038263486678	0.139038263486678
+4694	4330	4331	0.139714401472726	0.139714401472726
+4700	4334	4335	0.200429884058467	0.200429884058467
+4702	2368	4336	0.0171503416673458	0.0171503416673458
+4704	2899	4337	0.105099867009157	0.105099867009157
+4705	4337	4338	0.106056680315678	0.106056680315678
+4706	4338	4339	0.104589847143113	0.104589847143113
+4707	4339	4340	0.370832351150224	0.370832351150224
+4708	4340	4341	0.0529480373416704	0.0529480373416704
+4709	4341	3902	0.107541125657943	0.107541125657943
+4710	3902	1039	0.104784630542914	0.104784630542914
+4711	1039	4342	0.104777071004161	0.104777071004161
+4712	4342	4343	0.105248493254523	0.105248493254523
+4713	4343	4344	0.101108879740712	0.101108879740712
+4714	4344	3325	0.105024412220906	0.105024412220906
+4715	3325	4345	0.102246237774905	0.102246237774905
+4716	4345	4346	0.102726745739932	0.102726745739932
+4717	4346	2076	0.108443527267173	0.108443527267173
+4718	2076	2673	0.108454042008862	0.108454042008862
+6026	4668	5275	0.106680903376796	0.106680903376796
+20495	10837	10818	0.00314569094185422	0.00314569094185422
+4719	2673	4123	0.102664740305431	0.102664740305431
+4720	4123	4347	0.110043125382133	0.110043125382133
+4721	4347	4348	0.0925868711229396	0.0925868711229396
+4722	4348	4349	0.101256639304288	0.101256639304288
+4723	4349	3471	0.100333218908324	0.100333218908324
+4724	3471	4350	0.101033713236321	0.101033713236321
+4726	850	4351	0.101364060095961	0.101364060095961
+4727	4351	4352	0.0951618291875102	0.0951618291875102
+4728	4352	4353	0.0166431794757682	0.0166431794757682
+4729	4353	4354	0.0900251519018866	0.0900251519018866
+4730	4354	4355	0.0948464364966571	0.0948464364966571
+4731	4355	4356	0.0929916889983271	0.0929916889983271
+4732	4356	4357	0.0946584559856625	0.0946584559856625
+4733	4357	2002	0.0939147825318954	0.0939147825318954
+4734	2002	3362	0.0961201849767339	0.0961201849767339
+4735	3362	2756	0.0936202724465644	0.0936202724465644
+4736	2756	4358	0.0928604520153806	0.0928604520153806
+4738	4359	3874	0.0985792493705747	0.0985792493705747
+4740	4360	4361	0.589746493190754	0.589746493190754
+4742	501	1385	0.0995647502781281	0.0995647502781281
+4745	4363	4364	0.205829363021429	0.205829363021429
+4746	4364	4365	0.0921122756854079	0.0921122756854079
+4747	4365	4366	0.00988128080256074	0.00988128080256074
+4748	4366	4367	0.0897681081567516	0.0897681081567516
+4749	4367	4368	0.098598628932225	0.098598628932225
+4750	4368	4369	0.0959412440063823	0.0959412440063823
+4751	4369	4370	0.102131783313602	0.102131783313602
+4752	4370	783	0.172155062898013	0.172155062898013
+4753	783	4373	0.095162556755669	0.095162556755669
+4754	4373	4374	0.0961947364240104	0.0961947364240104
+4755	4374	2746	0.0976874440589729	0.0976874440589729
+4756	2746	4375	0.105035684135392	0.105035684135392
+4757	4375	4376	0.0939930714928361	0.0939930714928361
+4758	4376	4031	0.0955624767971731	0.0955624767971731
+4759	4031	4377	0.0560443290529964	0.0560443290529964
+4760	4377	1489	0.204591889958277	0.204591889958277
+4762	145	1731	0.201807709171719	0.201807709171719
+4763	1731	360	0.203461803126836	0.203461803126836
+4767	2902	2038	0.0702037411311871	0.0702037411311871
+4769	4380	4381	0.147155318321419	0.147155318321419
+4770	4381	4382	0.144957308053315	0.144957308053315
+4771	4382	4383	0.149312485085308	0.149312485085308
+4774	2688	4385	0.0765539017627299	0.0765539017627299
+4775	4385	4386	0.0705753548513159	0.0705753548513159
+4776	4386	4387	0.146933743759007	0.146933743759007
+4777	4387	4388	0.145923980731529	0.145923980731529
+4778	4388	4389	0.144339759907671	0.144339759907671
+4779	4389	4390	0.150103166473839	0.150103166473839
+4780	4390	4391	0.137983810664432	0.137983810664432
+4781	4391	4392	0.0104056356944031	0.0104056356944031
+4782	4392	4393	0.140241416108271	0.140241416108271
+4783	4393	4394	0.1481833156111	0.1481833156111
+4784	4394	4395	0.146837535132845	0.146837535132845
+4785	4395	4396	0.147176845167591	0.147176845167591
+4786	4396	4397	0.145625871999305	0.145625871999305
+4788	1072	4398	0.0934237929296376	0.0934237929296376
+4790	4399	4400	0.1229191337931	0.1229191337931
+4791	4400	4401	0.117696624021516	0.117696624021516
+4792	4401	3916	0.0730141443209756	0.0730141443209756
+4794	4402	4403	3.26030129970045	3.26030129970045
+4795	4403	1705	0.202698536609182	0.202698536609182
+4796	1705	176	0.202718600973581	0.202718600973581
+4797	176	1503	0.201219684641614	0.201219684641614
+4798	1503	4404	0.202286968554481	0.202286968554481
+4799	4404	4405	0.200141278145387	0.200141278145387
+4800	4405	4406	0.0308542467827185	0.0308542467827185
+4801	4406	4407	0.168200323230532	0.168200323230532
+4802	4407	4408	0.11307645922142	0.11307645922142
+4803	4408	4409	0.0961947310408444	0.0961947310408444
+4804	4409	4410	0.0983990775592717	0.0983990775592717
+4806	4411	4413	0.099863884884034	0.099863884884034
+4809	4415	4416	0.102810116828889	0.102810116828889
+4810	4416	4417	0.0991628298509216	0.0991628298509216
+4811	4417	4418	0.0969872745595907	0.0969872745595907
+4812	4418	4419	0.0998556913489604	0.0998556913489604
+4813	4419	4420	0.0958355207238061	0.0958355207238061
+4814	4420	1307	0.243760388907656	0.243760388907656
+4815	1307	4421	0.179135026824832	0.179135026824832
+4818	4422	477	0.0591204183570981	0.0591204183570981
+4819	477	486	0.338636165035717	0.338636165035717
+4820	486	320	0.186794052108965	0.186794052108965
+4821	320	324	0.464671835959624	0.464671835959624
+4822	324	531	0.0559979023034973	0.0559979023034973
+4823	531	534	0.263162604733165	0.263162604733165
+4825	475	530	0.435551136576821	0.435551136576821
+4826	530	393	0.115152140819887	0.115152140819887
+4827	393	4423	0.203655322253385	0.203655322253385
+4828	4423	4424	0.538171924126244	0.538171924126244
+4829	4424	4426	0.419488421877639	0.419488421877639
+4830	4426	4427	0.0323139283448777	0.0323139283448777
+4833	4428	4429	0.198930926845217	0.198930926845217
+4837	4432	4433	0.200460087837485	0.200460087837485
+4839	2920	3260	0.28373274915572	0.28373274915572
+4842	4436	726	0.0998645775500999	0.0998645775500999
+4843	726	52	0.170560718436498	0.170560718436498
+4844	52	4437	0.100090869280248	0.100090869280248
+4845	4437	3658	0.0591716781283333	0.0591716781283333
+4846	3658	4438	0.103033016475492	0.103033016475492
+4847	4438	4439	0.00533542340358722	0.00533542340358722
+4848	4439	3530	0.0426683766285225	0.0426683766285225
+4850	4440	1490	0.0653862418347059	0.0653862418347059
+4851	1490	146	0.199762763358791	0.199762763358791
+4853	1733	4441	0.200262923415945	0.200262923415945
+4855	3554	4442	0.0495302719350299	0.0495302719350299
+4856	4442	4443	0.0498850541236187	0.0498850541236187
+4857	4443	4444	0.0512856921549244	0.0512856921549244
+4858	4444	3019	0.0117591853989501	0.0117591853989501
+4860	4445	4382	0.0530835076360593	0.0530835076360593
+4861	4382	4446	0.0528074946120117	0.0528074946120117
+4863	4447	4448	0.00600839331926655	0.00600839331926655
+4865	4449	4450	0.0531891993832321	0.0531891993832321
+4866	4450	4451	0.0546720224408421	0.0546720224408421
+4867	4451	4452	0.0492877204975977	0.0492877204975977
+4868	4452	4453	0.0555740263590881	0.0555740263590881
+4869	4453	4454	0.0508522899950145	0.0508522899950145
+4870	4454	4455	0.0539540438907939	0.0539540438907939
+4871	4455	4456	0.05278127500741	0.05278127500741
+4872	4456	4457	0.0520682148022883	0.0520682148022883
+4873	4457	4458	0.0535945839553328	0.0535945839553328
+4874	4458	3308	0.105299206866662	0.105299206866662
+4875	3308	4459	0.0532887340145185	0.0532887340145185
+4876	4459	4460	0.0519293867850164	0.0519293867850164
+4878	2911	4461	0.104626210772024	0.104626210772024
+4879	4461	4462	0.107626289516013	0.107626289516013
+4880	4462	4463	0.104079175744358	0.104079175744358
+4881	4463	4464	0.104771521557699	0.104771521557699
+4882	4464	4465	0.105968126634263	0.105968126634263
+6192	5399	5400	0.276164012064383	0.276164012064383
+4883	4465	4466	0.105797186557688	0.105797186557688
+4884	4466	3135	0.104882643737148	0.104882643737148
+4885	3135	3907	0.109352834062615	0.109352834062615
+4886	3907	1046	0.105412573797977	0.105412573797977
+4887	1046	4467	0.052770391738213	0.052770391738213
+4888	4467	4468	0.0520438840305316	0.0520438840305316
+4889	4468	4469	0.10568608900916	0.10568608900916
+4890	4469	4470	0.101335564568208	0.101335564568208
+4891	4470	3332	0.103121923835041	0.103121923835041
+4892	3332	4471	0.106386988921342	0.106386988921342
+4893	4471	4472	0.0168550696022494	0.0168550696022494
+4894	4472	4473	0.0917114246562582	0.0917114246562582
+4895	4473	2083	0.101916806851718	0.101916806851718
+4896	2083	4474	0.104993787286419	0.104993787286419
+4897	4474	4129	0.105139069056382	0.105139069056382
+4898	4129	4475	0.108754567624091	0.108754567624091
+4899	4475	4476	0.10144670106953	0.10144670106953
+4900	4476	4477	0.106139118962841	0.106139118962841
+4901	4477	3446	0.105344236005182	0.105344236005182
+4903	4478	4479	0.0124618097268169	0.0124618097268169
+4904	4479	4480	0.085822453683645	0.085822453683645
+4905	4480	3886	0.0198123941785865	0.0198123941785865
+4907	865	4481	0.0967884909448593	0.0967884909448593
+4909	345	4482	0.111183183932549	0.111183183932549
+4910	4483	1892	0.0285476317873184	0.0285476317873184
+4912	4360	4484	0.465117334225162	0.465117334225162
+4913	4484	4485	0.0326010116755978	0.0326010116755978
+4915	4486	4487	0.175931100170174	0.175931100170174
+4916	4487	4489	0.100342363380826	0.100342363380826
+4917	4489	4490	0.161656025882071	0.161656025882071
+4918	4490	4491	0.0905242566324277	0.0905242566324277
+4919	4491	1950	0.169005169872083	0.169005169872083
+4920	1950	4492	0.126063150124326	0.126063150124326
+4924	4081	3762	0.180617937803326	0.180617937803326
+4926	2559	4495	0.0875396307338273	0.0875396307338273
+4927	4495	4496	0.0902282586364627	0.0902282586364627
+4928	4496	4497	0.0878475091612825	0.0878475091612825
+4929	4497	4498	0.266301743580547	0.266301743580547
+4930	180	1708	0.203431976552675	0.203431976552675
+4931	1708	4499	0.201230804203475	0.201230804203475
+4932	4499	1575	0.27729796539772	0.27729796539772
+4933	1575	4500	0.182259795470885	0.182259795470885
+4934	4501	4502	0.199005560216138	0.199005560216138
+4935	4502	4503	0.153202263597584	0.153202263597584
+4937	4504	4505	0.176923776962641	0.176923776962641
+4938	4505	1315	0.176127860687443	0.176127860687443
+4939	1315	1371	0.176782045374234	0.176782045374234
+4940	1371	4506	0.0626491861453163	0.0626491861453163
+4941	4506	4507	0.0851767549198192	0.0851767549198192
+4943	3035	4508	0.210570172682267	0.210570172682267
+4945	54	4510	0.19332295953062	0.19332295953062
+4946	4510	3640	0.0466160975278989	0.0466160975278989
+4948	4511	3531	0.0618894465423491	0.0618894465423491
+4949	3531	4512	0.0905408166059636	0.0905408166059636
+4951	3926	707	0.0755598922064861	0.0755598922064861
+4952	707	4513	0.0978688769552162	0.0978688769552162
+4953	4513	4514	0.0992771410926943	0.0992771410926943
+4954	4514	4188	0.135836888761709	0.135836888761709
+4955	4188	2514	0.135033448601963	0.135033448601963
+4956	2514	4515	0.13515296788921	0.13515296788921
+4957	4515	4516	0.136409392488761	0.136409392488761
+4959	4517	4518	0.0356088442137805	0.0356088442137805
+4960	4518	4519	0.0503802448307333	0.0503802448307333
+4961	4519	4520	0.127581150438839	0.127581150438839
+4962	4520	4521	0.132742519290442	0.132742519290442
+4963	4521	4522	0.13263462094456	0.13263462094456
+4964	4522	1243	0.132622916068163	0.132622916068163
+4965	1243	4523	0.132744954601011	0.132744954601011
+4966	4523	2724	0.131940306625131	0.131940306625131
+4967	2724	4524	0.125887507119952	0.125887507119952
+4968	4524	4525	0.0073166618478819	0.0073166618478819
+4970	4526	4527	0.188224997765616	0.188224997765616
+4971	4527	3419	0.20066865963842	0.20066865963842
+4973	4528	4529	0.132643815391647	0.132643815391647
+4974	4529	4288	0.134447795927953	0.134447795927953
+4975	4288	4530	0.0675286789518799	0.0675286789518799
+4976	4530	4531	0.0681514911729941	0.0681514911729941
+4978	1833	2628	0.0976402650867344	0.0976402650867344
+4980	4532	4428	0.101312368020336	0.101312368020336
+4981	4428	4533	0.0998335149833254	0.0998335149833254
+4982	4533	4534	0.1027774706977	0.1027774706977
+4984	4535	1833	0.103500237720645	0.103500237720645
+4986	4536	4537	0.0953225774659935	0.0953225774659935
+4988	4538	4539	0.19878482816443	0.19878482816443
+4989	4539	2830	0.201604542004037	0.201604542004037
+4990	2830	1438	0.197694612690532	0.197694612690532
+4991	1438	4540	0.179002123409013	0.179002123409013
+4993	4541	25	0.138059623303707	0.138059623303707
+4994	25	4542	0.0645746983944002	0.0645746983944002
+4995	4542	2964	0.0670651945252806	0.0670651945252806
+4999	4545	4546	0.142258977482996	0.142258977482996
+5001	4547	115	0.110830423505847	0.110830423505847
+5003	4548	4549	0.0776585367690646	0.0776585367690646
+5004	4549	4550	0.199094650034446	0.199094650034446
+5005	4550	4551	0.100232131513911	0.100232131513911
+5007	4552	2292	0.132777862181536	0.132777862181536
+5008	2292	4553	0.0918166647273585	0.0918166647273585
+5009	4553	2534	0.18135507208955	0.18135507208955
+5011	2627	4554	0.0924500575644084	0.0924500575644084
+5012	4554	4555	0.10983037862614	0.10983037862614
+5014	4523	4556	0.135380005592348	0.135380005592348
+5015	4556	4557	0.134346145402708	0.134346145402708
+5016	4557	4558	0.133189336887005	0.133189336887005
+5017	4558	1680	0.13514752705788	0.13514752705788
+5018	1680	4559	0.137419251565084	0.137419251565084
+5020	4560	4064	0.13135456684589	0.13135456684589
+5021	4064	4561	0.134278993416053	0.134278993416053
+5023	4101	4562	0.159933235501875	0.159933235501875
+5025	4563	4564	0.407964486856081	0.407964486856081
+5026	4565	2188	0.10962848253063	0.10962848253063
+17150	4780	4781	0.199841658014134	0.199841658014134
+5028	4566	687	0.202530686471354	0.202530686471354
+5029	687	1982	0.159069792202276	0.159069792202276
+5030	1982	1967	0.0383650278893233	0.0383650278893233
+5033	4567	1928	0.199711508236703	0.199711508236703
+5034	1928	4568	0.201653602761609	0.201653602761609
+5035	4568	3272	0.202185746700204	0.202185746700204
+5036	3272	4569	0.20093413075273	0.20093413075273
+5037	4569	85	0.20339775981857	0.20339775981857
+5038	85	3521	0.203998373883698	0.203998373883698
+5039	3521	4262	0.200473333246826	0.200473333246826
+5040	4262	4570	0.200485802986416	0.200485802986416
+5041	4570	4571	0.201223720769428	0.201223720769428
+5042	4571	4572	0.205786578364508	0.205786578364508
+5043	4572	4573	0.200686081138238	0.200686081138238
+5044	4573	4574	0.200311699167283	0.200311699167283
+5045	4575	4576	0.13275170286213	0.13275170286213
+5046	4576	4011	0.136238719327193	0.136238719327193
+5049	4578	3382	0.130912952312419	0.130912952312419
+5050	3382	4579	0.10420964387947	0.10420964387947
+5051	4579	4580	0.100328081358343	0.100328081358343
+5053	4581	4582	0.100688559836452	0.100688559836452
+5054	4582	1104	0.099555514740453	0.099555514740453
+5055	1104	4583	0.100465419279427	0.100465419279427
+5056	4583	4584	0.100511332021349	0.100511332021349
+5057	4584	4585	0.0999153218838928	0.0999153218838928
+5059	3498	4586	0.198271673699608	0.198271673699608
+5060	4586	4587	0.203313884946152	0.203313884946152
+5062	4588	3598	0.162446986671654	0.162446986671654
+5065	4590	4591	0.145581982651648	0.145581982651648
+20699	10909	10894	0.00288177410229764	0.00288177410229764
+5066	4591	4592	0.145302049591696	0.145302049591696
+5067	4592	2013	0.147364635735888	0.147364635735888
+5068	2013	4593	0.147376079792043	0.147376079792043
+5069	4593	4594	0.146031742389181	0.146031742389181
+5071	4595	4596	0.179128666689522	0.179128666689522
+5072	4596	4597	0.0491363059718978	0.0491363059718978
+5073	4597	4598	0.0534283507033442	0.0534283507033442
+5074	4598	4599	0.051162571237203	0.051162571237203
+5076	1025	3894	0.103299911807114	0.103299911807114
+5077	3894	4600	0.113012549862716	0.113012549862716
+5078	4600	4601	0.103445240313361	0.103445240313361
+5079	4601	4602	0.110216736617757	0.110216736617757
+5080	4602	4603	0.098537605440947	0.098537605440947
+5081	4603	4604	0.10689939615188	0.10689939615188
+5082	4604	4605	0.104556664577465	0.104556664577465
+5083	4605	4606	0.106796784548208	0.106796784548208
+5084	4606	2884	0.106044347623682	0.106044347623682
+5085	2884	4607	0.118270695339941	0.118270695339941
+6370	5524	5525	0.0492521789985846	0.0492521789985846
+5087	4608	4609	0.117800444995037	0.117800444995037
+5088	4609	4610	0.102641376464428	0.102641376464428
+5089	4610	4611	0.0494099001663831	0.0494099001663831
+5090	4611	4612	0.0461096147761951	0.0461096147761951
+5091	4612	4613	0.102709817700352	0.102709817700352
+5092	4613	4614	0.107788478157863	0.107788478157863
+5093	4614	4615	0.106309381819152	0.106309381819152
+5095	4618	4619	0.107514865026302	0.107514865026302
+5096	4619	4620	0.109618128547838	0.109618128547838
+5098	4621	4622	0.0890723635550207	0.0890723635550207
+5100	4623	4522	0.133190665745901	0.133190665745901
+5102	4624	4625	0.133658094916269	0.133658094916269
+5103	4625	4626	0.133656501053085	0.133656501053085
+5104	4626	1679	0.135152153872346	0.135152153872346
+5105	1679	4627	0.135024432224219	0.135024432224219
+5106	4627	2458	0.13515140493347	0.13515140493347
+5107	2458	3226	0.138004027692966	0.138004027692966
+5108	3226	4628	0.134323473833378	0.134323473833378
+5110	4629	4630	0.135446542572512	0.135446542572512
+19829	9519	10649	0.210072579992032	0.210072579992032
+5113	4632	4633	0.0947313767183171	0.0947313767183171
+5115	4634	4635	0.0557913419625853	0.0557913419625853
+5116	4635	4636	0.0662366225916723	0.0662366225916723
+5117	4636	4637	0.113593419326123	0.113593419326123
+5120	4639	4640	0.132773960128622	0.132773960128622
+5121	4640	2488	0.134241502580257	0.134241502580257
+5122	2488	2829	0.133449886794901	0.133449886794901
+5123	2829	1437	0.199500232175966	0.199500232175966
+5124	1437	4641	0.151025004831673	0.151025004831673
+5126	4642	114	0.107737280643715	0.107737280643715
+5127	114	4643	0.05007218616811	0.05007218616811
+5129	4644	4645	0.207043620739087	0.207043620739087
+5130	4645	1842	0.100003312332805	0.100003312332805
+5131	1842	2639	0.103345313678593	0.103345313678593
+5132	2639	4646	0.199597531872746	0.199597531872746
+5133	4646	4647	0.110338949764664	0.110338949764664
+5134	4647	4648	0.0862326024249021	0.0862326024249021
+5135	4648	4649	0.00885483385456902	0.00885483385456902
+5136	4649	4650	0.198772614686204	0.198772614686204
+5138	275	4651	0.385379364010995	0.385379364010995
+5139	4651	4652	0.41471692527459	0.41471692527459
+5140	4652	4653	0.0539741907357585	0.0539741907357585
+5141	4653	4654	0.022194548523775	0.022194548523775
+5142	4654	4206	0.207869157343365	0.207869157343365
+5144	4655	4656	0.134281006104493	0.134281006104493
+5145	4656	2404	0.0664009097985413	0.0664009097985413
+5146	2404	4287	0.0661523414774278	0.0661523414774278
+5147	4287	4657	0.134479579019433	0.134479579019433
+5149	4658	4659	0.0841530151799317	0.0841530151799317
+5150	4659	23	0.134991372812694	0.134991372812694
+5152	4098	4660	0.191146561014702	0.191146561014702
+5153	4660	4661	0.201619149588839	0.201619149588839
+5154	4661	4662	0.406108499193961	0.406108499193961
+5155	1948	2564	0.13210280054913	0.13210280054913
+5157	4663	388	0.102051980712047	0.102051980712047
+5159	1442	4664	0.0822712120832148	0.0822712120832148
+5160	4664	4665	0.119816357959701	0.119816357959701
+5161	4665	4666	0.204097543225869	0.204097543225869
+5162	4666	4667	0.203014171650501	0.203014171650501
+5164	4668	1869	0.212544115775742	0.212544115775742
+5165	1869	4183	0.200120502606903	0.200120502606903
+5167	4669	2615	0.177891060007606	0.177891060007606
+5169	4670	4671	0.124038366426802	0.124038366426802
+5171	2421	3232	0.143042998317255	0.143042998317255
+5173	4672	2028	0.132076698976753	0.132076698976753
+5174	2028	4673	0.145972981302679	0.145972981302679
+5175	4673	4674	0.125161327150552	0.125161327150552
+5177	3368	4675	0.102054188376367	0.102054188376367
+5178	4675	3714	0.0982241705421038	0.0982241705421038
+5179	3714	4676	0.103510692140635	0.103510692140635
+5181	4677	4678	0.0648734285683964	0.0648734285683964
+5182	4678	615	0.177689539069832	0.177689539069832
+5183	615	4679	0.176110549937417	0.176110549937417
+5184	4679	4680	0.173776320124656	0.173776320124656
+5186	4681	4682	0.184513059882878	0.184513059882878
+5187	4682	4685	0.175211932943401	0.175211932943401
+5189	4686	4687	0.349232193394911	0.349232193394911
+5191	1357	4688	0.13277378561117	0.13277378561117
+5193	4689	4690	0.459634230640815	0.459634230640815
+5194	4691	4692	0.0991279407871357	0.0991279407871357
+5195	4692	4693	0.0976485109623955	0.0976485109623955
+5197	4694	4695	0.0991197857977998	0.0991197857977998
+5198	4695	4696	0.10132403770971	0.10132403770971
+5199	4696	4697	0.0991849406088648	0.0991849406088648
+5201	1637	4698	0.104258284661182	0.104258284661182
+5202	4698	4215	0.0991281021081487	0.0991281021081487
+5203	4215	4699	0.0976569662788289	0.0976569662788289
+5204	4699	195	0.10058858208642	0.10058858208642
+5205	195	2924	0.0991416985641161	0.0991416985641161
+5206	2924	4700	0.0991366648288655	0.0991366648288655
+5207	4700	1462	0.100582700478246	0.100582700478246
+5208	1462	4701	0.102418321557774	0.102418321557774
+5212	4704	1872	0.0821525251365273	0.0821525251365273
+17295	10015	3501	0.20024191652091	0.20024191652091
+5214	1445	4705	0.199727367553687	0.199727367553687
+5215	4705	4706	0.203375496003776	0.203375496003776
+5216	4706	4707	0.201909493723453	0.201909493723453
+5218	4708	403	0.0454257390325356	0.0454257390325356
+5219	403	314	0.0562503326449317	0.0562503326449317
+5220	314	4709	0.11119492664509	0.11119492664509
+5222	4711	4170	0.194203357035268	0.194203357035268
+5223	4170	4712	0.208127290131148	0.208127290131148
+5224	4712	4713	0.198927723766577	0.198927723766577
+5225	4713	4714	0.204935128047674	0.204935128047674
+5226	4714	4715	0.188520271439654	0.188520271439654
+5227	4715	3793	0.199712422815397	0.199712422815397
+5228	3793	4716	0.152617432717184	0.152617432717184
+5229	4716	944	0.17742675257367	0.17742675257367
+5230	944	2228	0.183696049186415	0.183696049186415
+5231	2228	4717	0.162619098965448	0.162619098965448
+5232	4717	4718	0.189722276081874	0.189722276081874
+5233	4718	4719	0.171945095410338	0.171945095410338
+5234	4719	4720	0.177429725627003	0.177429725627003
+5235	4720	4721	0.102690706769844	0.102690706769844
+5236	4721	4722	0.0746285232074726	0.0746285232074726
+5237	4722	668	0.00411462210691817	0.00411462210691817
+5238	668	4723	0.00380364497345728	0.00380364497345728
+5240	4724	4604	0.175355420651263	0.175355420651263
+5242	1146	875	0.136296969384937	0.136296969384937
+5244	4463	2783	0.133890793284356	0.133890793284356
+5245	2783	4725	0.132805963492264	0.132805963492264
+5246	4725	4726	0.129702593554695	0.129702593554695
+5247	4726	4727	0.147549019452937	0.147549019452937
+5249	4728	4729	0.134556994040934	0.134556994040934
+5250	4729	4730	0.00403637583696172	0.00403637583696172
+5251	4730	4731	0.00537071495727797	0.00537071495727797
+5252	4731	4732	0.135502150823282	0.135502150823282
+5253	4732	4733	0.139193822038205	0.139193822038205
+5254	4733	820	0.139638598300339	0.139638598300339
+5255	820	3561	0.13948292881931	0.13948292881931
+5256	3561	4734	0.140172337301063	0.140172337301063
+5257	4734	4339	0.137170074560425	0.137170074560425
+5258	4339	4735	0.138982548276464	0.138982548276464
+5259	4735	3054	0.142752059367152	0.142752059367152
+5260	3054	4736	0.133100340642693	0.133100340642693
+5261	4736	4737	0.00492593525024253	0.00492593525024253
+5263	4738	3350	0.0528651873534889	0.0528651873534889
+5264	3350	4739	0.10426363885095	0.10426363885095
+5265	4739	4740	0.102034414473958	0.102034414473958
+14766	5462	7420	0.173120091654239	0.173120091654239
+5266	4740	2059	0.102862063735102	0.102862063735102
+5267	2059	2645	0.103513208640623	0.103513208640623
+5268	2645	4111	0.104240888550753	0.104240888550753
+5270	4741	4742	0.102769926646245	0.102769926646245
+5271	4742	4743	0.104240916363933	0.104240916363933
+5272	4743	3452	0.105180194746781	0.105180194746781
+5273	3452	4744	0.10036641032569	0.10036641032569
+5274	4744	3882	0.105711927066125	0.105711927066125
+5275	3882	845	0.10371038656759	0.10371038656759
+5276	845	4745	0.104689829390385	0.104689829390385
+5277	4745	4746	0.0469848225431211	0.0469848225431211
+5279	2610	4747	0.106209148179485	0.106209148179485
+5280	4747	4748	0.0529916423937814	0.0529916423937814
+5282	4749	4750	0.0385383772070312	0.0385383772070312
+5283	4750	966	0.102580898845139	0.102580898845139
+5285	990	4751	0.0998368598850094	0.0998368598850094
+5286	4751	4752	0.0507426333200071	0.0507426333200071
+5287	4752	4753	0.0483650078238011	0.0483650078238011
+5288	4753	1987	0.0507354905741477	0.0507354905741477
+5289	1987	4754	0.0483663202205498	0.0483663202205498
+5290	4754	446	0.051479549664384	0.051479549664384
+5291	446	4712	0.0483577654581108	0.0483577654581108
+5292	4712	4755	0.101297109225192	0.101297109225192
+5293	4755	4756	0.0117741801721385	0.0117741801721385
+5294	4756	4757	0.0826634733388868	0.0826634733388868
+5295	4757	4758	0.0342509974874732	0.0342509974874732
+5296	4758	4759	0.0175268141449879	0.0175268141449879
+5297	4759	4760	0.0234785463070149	0.0234785463070149
+5298	4760	4761	0.0484972333709921	0.0484972333709921
+5299	4761	3126	0.0271800985558075	0.0271800985558075
+5300	3126	3148	0.0183600177870361	0.0183600177870361
+5301	3148	3143	0.0330468719768483	0.0330468719768483
+5302	3143	4762	0.0646645186035183	0.0646645186035183
+5303	4762	3915	0.0595606911380279	0.0595606911380279
+5304	3915	1052	0.123917065152439	0.123917065152439
+5305	1052	4399	0.111768087862579	0.111768087862579
+5306	4399	4763	0.0469346079446244	0.0469346079446244
+5308	4764	4765	0.103730937833073	0.103730937833073
+5311	3155	4767	0.101587564129846	0.101587564129846
+5312	4767	4768	0.101450282305199	0.101450282305199
+5313	4768	4769	0.102136172096814	0.102136172096814
+5314	4769	4770	0.0492382919352757	0.0492382919352757
+5316	4771	4772	0.100332506519832	0.100332506519832
+5317	4772	4773	0.0490390048099826	0.0490390048099826
+5318	4773	989	0.0495269165196006	0.0495269165196006
+5320	4774	4775	0.110656269548842	0.110656269548842
+5321	4775	4776	0.0922568863786424	0.0922568863786424
+5322	4776	4777	0.0968744294941002	0.0968744294941002
+5323	4777	4778	0.0933681364009737	0.0933681364009737
+5324	4778	2017	0.096243154582377	0.096243154582377
+5325	2017	2007	0.0302079551181684	0.0302079551181684
+5326	2007	4779	0.0612998845077431	0.0612998845077431
+5327	4779	2763	0.0939372654248904	0.0939372654248904
+5328	2763	4782	0.0939831368366747	0.0939831368366747
+5329	4782	2267	0.0946761779636641	0.0946761779636641
+5330	2267	3596	0.0957452269737562	0.0957452269737562
+5332	4783	2096	0.0938496563543502	0.0938496563543502
+5333	2096	4784	0.0942585077375453	0.0942585077375453
+5334	4784	4785	0.0947863905236846	0.0947863905236846
+5335	4785	2332	0.0940516760171392	0.0940516760171392
+6607	5694	5695	0.0154325675938591	0.0154325675938591
+5337	4089	4787	0.198005363606862	0.198005363606862
+5339	4788	4789	0.404049086255387	0.404049086255387
+5340	4790	119	0.0976422064224313	0.0976422064224313
+5341	119	4791	0.0958834096516534	0.0958834096516534
+5342	4791	2312	0.0465244099907656	0.0465244099907656
+5344	4792	2484	0.133450471266853	0.133450471266853
+5345	2484	2823	0.13353766665554	0.13353766665554
+5346	2823	1414	0.132023734494372	0.132023734494372
+5347	1414	1354	0.131894209152808	0.131894209152808
+5348	1354	4793	0.0769784662870068	0.0769784662870068
+5350	4794	4795	0.0387509077758481	0.0387509077758481
+5351	4795	2952	0.134935498636386	0.134935498636386
+5352	2952	4796	0.136197421914805	0.136197421914805
+5353	4796	4797	0.129998438382796	0.129998438382796
+5354	4797	4798	0.134935065412598	0.134935065412598
+5356	2635	4799	0.200962590925039	0.200962590925039
+5357	4799	4800	0.183883066303689	0.183883066303689
+5358	4801	4802	0.0508168176081005	0.0508168176081005
+5359	4802	4516	0.0829526060571819	0.0829526060571819
+6631	5709	5710	0.263510763458761	0.263510763458761
+5360	4516	4803	0.133849874797103	0.133849874797103
+5361	4803	4804	0.135491260752817	0.135491260752817
+5363	4805	1674	0.127474088546245	0.127474088546245
+5364	1674	4806	0.138137679733803	0.138137679733803
+5366	4807	2455	0.134491411129426	0.134491411129426
+5367	2455	3223	0.138294178425788	0.138294178425788
+5369	4808	4809	0.133134706345954	0.133134706345954
+5370	4809	4810	0.135569856870466	0.135569856870466
+5371	4810	4811	0.134368341783309	0.134368341783309
+5372	4811	4812	0.133035455825063	0.133035455825063
+5374	4813	4814	0.201931453578911	0.201931453578911
+5376	123	4815	0.0586808902574419	0.0586808902574419
+5377	1608	1158	0.0531893778682351	0.0531893778682351
+5378	1158	4816	0.0522853387259307	0.0522853387259307
+5379	4816	4817	0.0528559175260399	0.0528559175260399
+5380	4817	4818	0.0526139267336242	0.0526139267336242
+5382	4819	4820	0.146802081972091	0.146802081972091
+5383	4820	4821	0.146390170205012	0.146390170205012
+5384	4821	4822	0.0767990953688077	0.0767990953688077
+5386	3289	4824	0.0733337823028737	0.0733337823028737
+5387	4824	4825	0.151650147757225	0.151650147757225
+5389	97	3502	0.20326475820455	0.20326475820455
+5390	3502	4826	0.200021830134173	0.200021830134173
+5391	4826	4827	0.204558997826367	0.204558997826367
+5392	4827	4828	0.201476703732084	0.201476703732084
+5394	4829	4830	0.558813274805265	0.558813274805265
+5395	3635	1894	0.33996915967689	0.33996915967689
+5396	1894	4831	0.234959433855918	0.234959433855918
+5397	4831	3288	0.0548366602436518	0.0548366602436518
+5399	3879	4832	0.175154251791819	0.175154251791819
+5400	4832	3070	0.175288290924905	0.175288290924905
+5402	4833	4834	0.239573627081124	0.239573627081124
+5404	3962	4835	0.197156843459588	0.197156843459588
+5405	4835	4836	0.094417767822886	0.094417767822886
+5406	4836	388	0.087554257922167	0.087554257922167
+5407	388	1384	0.157773442883539	0.157773442883539
+5408	1384	4837	0.0895725883825947	0.0895725883825947
+5409	4837	325	0.282856295391869	0.282856295391869
+6684	2175	5744	0.101148378971839	0.101148378971839
+5410	325	4838	0.0837092029011689	0.0837092029011689
+5411	4838	4840	0.0963811879451104	0.0963811879451104
+5412	4840	4841	0.421707851811283	0.421707851811283
+5415	1486	144	0.196859858102641	0.196859858102641
+5417	2194	4843	0.069400098080988	0.069400098080988
+5418	4843	4844	0.128982538897387	0.128982538897387
+5420	4845	4846	0.127385402005959	0.127385402005959
+5421	4846	4847	0.0485354577138893	0.0485354577138893
+5422	4847	2197	0.0570536883887032	0.0570536883887032
+5423	2197	2198	0.0030293307914236	0.0030293307914236
+5425	2191	4848	0.228805525488878	0.228805525488878
+5427	4281	2319	0.149466526420244	0.149466526420244
+5428	2319	4849	0.264070561759483	0.264070561759483
+5430	4850	4851	0.124106376215018	0.124106376215018
+5432	4852	4853	0.107373531206162	0.107373531206162
+5433	4853	4854	0.108589473424165	0.108589473424165
+5434	4854	4855	0.105767467639199	0.105767467639199
+5435	4855	4856	0.0608956612626877	0.0608956612626877
+5436	4856	4857	0.0536676140413411	0.0536676140413411
+5438	4858	4859	0.053767328384899	0.053767328384899
+5439	4859	4860	0.0517270733374725	0.0517270733374725
+5440	4860	4861	0.0506527251945452	0.0506527251945452
+5441	4861	4862	0.0500931909858678	0.0500931909858678
+5442	4862	4863	0.0473439516711298	0.0473439516711298
+5444	4864	4865	0.0521797446029276	0.0521797446029276
+17093	9466	677	0.17846620541914	0.17846620541914
+17094	677	3719	0.359015096413943	0.359015096413943
+5446	4866	4867	0.0492134016241179	0.0492134016241179
+5447	4867	4868	0.0506066180898924	0.0506066180898924
+5448	4868	4869	0.0483319487475015	0.0483319487475015
+5449	4869	4870	0.0507611555520018	0.0507611555520018
+5450	4870	980	0.0494869052239766	0.0494869052239766
+5451	980	4871	0.0481249293188332	0.0481249293188332
+5452	4871	4872	0.0462779203242365	0.0462779203242365
+20332	10741	10746	0.00836528320993219	0.00836528320993219
+5453	4872	4873	0.0504026300689218	0.0504026300689218
+5454	4873	4874	0.0485554829183078	0.0485554829183078
+5455	4874	4875	0.0534696334958417	0.0534696334958417
+6731	5782	5783	0.00425137254991275	0.00425137254991275
+5456	4875	4876	0.0484412552758981	0.0484412552758981
+5458	4877	4717	0.0471074620934606	0.0471074620934606
+5459	4717	4878	0.132709338239974	0.132709338239974
+5461	4879	3888	0.0983476297531957	0.0983476297531957
+5462	3888	1018	0.103492590132028	0.103492590132028
+5463	1018	4880	0.0514136092144711	0.0514136092144711
+5464	4880	4881	0.0525893579522226	0.0525893579522226
+5465	4881	3721	0.0533162444253223	0.0533162444253223
+5466	3721	4882	0.0519823122660099	0.0519823122660099
+5467	4882	4883	0.0522344210852062	0.0522344210852062
+5468	4883	4884	0.0505876398657049	0.0505876398657049
+5469	4884	3336	0.0998762512001326	0.0998762512001326
+5470	3336	4885	0.0991185753255084	0.0991185753255084
+5471	4885	4886	0.0963539908668941	0.0963539908668941
+5472	4886	4887	0.0885379825241657	0.0885379825241657
+5473	4887	4888	0.0119373214867398	0.0119373214867398
+5474	4888	2056	0.0843994384439808	0.0843994384439808
+5475	2056	4889	0.0133131298111966	0.0133131298111966
+5476	4889	2662	0.0974967707832978	0.0974967707832978
+5477	2662	4135	0.0954371783119999	0.0954371783119999
+5479	4890	4891	0.0937877451974264	0.0937877451974264
+5480	4891	4892	0.0948153596322219	0.0948153596322219
+5482	3459	4893	0.0478001833146321	0.0478001833146321
+5484	4894	4895	0.0479027082737571	0.0479027082737571
+5485	4895	4896	0.0478122905377956	0.0478122905377956
+5486	4896	859	0.0923773172496592	0.0923773172496592
+5487	859	454	0.0453886692992681	0.0453886692992681
+5488	454	4897	0.0453208554339034	0.0453208554339034
+5489	4897	458	0.0453479211780813	0.0453479211780813
+5492	4899	4900	0.0139467367099566	0.0139467367099566
+5493	4900	4901	0.0360421538971705	0.0360421538971705
+5494	4901	4902	0.0578381423218813	0.0578381423218813
+5495	4902	4903	0.00552719826630604	0.00552719826630604
+5496	4903	4904	0.0875768226675012	0.0875768226675012
+5497	4904	4905	0.0943606682528015	0.0943606682528015
+5498	4905	4906	0.0967192189659533	0.0967192189659533
+5499	4906	4907	0.098185525305783	0.098185525305783
+5501	4908	2748	0.100541646868693	0.100541646868693
+5502	2748	4909	0.0966275722613029	0.0966275722613029
+5503	4909	4910	0.0992689355907326	0.0992689355907326
+5504	4910	4911	0.101479918551735	0.101479918551735
+6779	5822	3617	0.0484295076881561	0.0484295076881561
+5505	4911	4912	0.0969181343296834	0.0969181343296834
+5507	2121	4913	0.0979459294550903	0.0979459294550903
+5508	4913	4914	0.0979869433285632	0.0979869433285632
+5509	4914	4915	0.197888030311115	0.197888030311115
+5510	3113	4916	0.205521796352519	0.205521796352519
+5511	4916	4917	0.213014583006008	0.213014583006008
+5514	1222	4919	0.098914174918745	0.098914174918745
+5516	4920	1622	0.0585646429204787	0.0585646429204787
+5517	1622	4921	0.122620409777708	0.122620409777708
+5518	4921	4922	0.218423462474676	0.218423462474676
+5520	2815	4923	0.167710746898946	0.167710746898946
+5521	4923	4924	0.0980438120983448	0.0980438120983448
+5523	4677	4925	0.0746274432259007	0.0746274432259007
+5525	4926	617	0.0797365701263369	0.0797365701263369
+5526	617	4927	0.125187481931903	0.125187481931903
+5527	4927	4928	0.0778528067673226	0.0778528067673226
+5528	4928	4929	0.199074396611122	0.199074396611122
+5532	4932	4933	0.00438034032424269	0.00438034032424269
+5533	4933	4934	0.0884200199820011	0.0884200199820011
+5534	4934	4935	0.245891005874257	0.245891005874257
+5535	4935	4936	0.142250751986944	0.142250751986944
+5536	4936	4937	0.0173695104401488	0.0173695104401488
+5538	4938	4939	0.203545296385478	0.203545296385478
+5540	1358	4940	0.12982829991663	0.12982829991663
+5543	4079	2536	0.319784261068233	0.319784261068233
+5545	4926	616	0.0701041786984163	0.0701041786984163
+5546	616	4942	0.177022653633518	0.177022653633518
+5547	4942	4943	0.172063039899941	0.172063039899941
+5549	4944	4945	0.149558307265757	0.149558307265757
+5550	4945	3715	0.0517838841978355	0.0517838841978355
+5551	3715	4948	0.104024626392335	0.104024626392335
+5552	4948	4949	0.174823058982553	0.174823058982553
+5553	4949	2616	0.177668474307762	0.177668474307762
+5554	2616	4950	0.0535070014349516	0.0535070014349516
+5555	4950	4951	0.124049062817869	0.124049062817869
+5556	4951	4952	0.174777210980769	0.174777210980769
+5557	4952	4953	0.127620790205472	0.127620790205472
+5558	4953	4954	0.0551759306609038	0.0551759306609038
+5559	4954	4955	0.176133032867453	0.176133032867453
+5560	4955	4956	0.177512737206305	0.177512737206305
+5562	4406	4957	0.277669971565855	0.277669971565855
+5564	4958	4959	0.199658223163124	0.199658223163124
+5566	1598	1655	0.160087686125488	0.160087686125488
+5568	4960	1592	0.199275601482479	0.199275601482479
+5569	1592	1643	0.201203252625689	0.201203252625689
+5571	4961	4369	0.0888591183295397	0.0888591183295397
+5572	4369	1450	0.193863730230332	0.193863730230332
+5573	1450	4962	0.20633144077854	0.20633144077854
+5575	4963	4964	0.865026893272847	0.865026893272847
+5577	4966	4413	0.196777109156883	0.196777109156883
+5578	4413	4967	0.224682445917882	0.224682445917882
+5579	4967	4304	0.221012468473467	0.221012468473467
+5582	4969	4970	0.107069922554974	0.107069922554974
+5583	4970	4972	0.0948495530272937	0.0948495530272937
+5586	4269	4973	0.080198786030782	0.080198786030782
+5587	4974	4767	0.0973607348320062	0.0973607348320062
+5588	4767	4975	0.179413565332346	0.179413565332346
+5589	4975	4976	0.169917329199621	0.169917329199621
+5590	4976	4977	0.181948721536683	0.181948721536683
+5591	4977	3805	0.200239828466703	0.200239828466703
+5592	3805	4978	0.152216995314545	0.152216995314545
+5594	3620	4979	0.203157103314032	0.203157103314032
+5595	4979	2366	0.112909559408727	0.112909559408727
+5596	2366	4147	0.176980531073324	0.176980531073324
+5597	4147	4980	0.0231632311908037	0.0231632311908037
+5599	4981	4982	0.122490029160582	0.122490029160582
+5600	4982	4983	0.198021379234554	0.198021379234554
+5602	4831	3290	0.14433688220634	0.14433688220634
+5604	4248	1783	0.203809923376497	0.203809923376497
+5605	1783	4984	0.197266471488896	0.197266471488896
+5606	4984	4985	0.203487572214077	0.203487572214077
+5607	4985	4986	0.197825547248631	0.197825547248631
+5608	4986	4987	2.41542068401941	2.41542068401941
+5610	4989	4990	0.0962172324904451	0.0962172324904451
+5611	4990	3077	0.102766134165042	0.102766134165042
+5613	4991	322	0.0217232354992756	0.0217232354992756
+5614	322	4992	0.0357866971477297	0.0357866971477297
+5615	4992	4993	0.0111993418256192	0.0111993418256192
+5618	4994	3114	0.0796924849623814	0.0796924849623814
+5619	3114	4995	0.20745656668227	0.20745656668227
+5621	4996	4997	0.202175143533063	0.202175143533063
+5622	4997	4998	0.201486340865611	0.201486340865611
+5623	4998	4999	0.201289887939002	0.201289887939002
+5624	4999	5000	0.201274447612783	0.201274447612783
+5625	5000	5001	0.402211090441065	0.402211090441065
+5627	1058	5002	0.0523412516567849	0.0523412516567849
+5628	5002	5003	0.185331167798599	0.185331167798599
+5629	5003	3655	0.0518833582791727	0.0518833582791727
+5632	5004	4344	0.139169147250759	0.139169147250759
+5633	4344	5005	0.13717907888566	0.13717907888566
+5634	5005	3044	0.136502893019444	0.136502893019444
+5635	3044	5006	0.140687498507325	0.140687498507325
+5636	5006	5007	0.0045870406114538	0.0045870406114538
+5637	5007	5008	0.137903992793689	0.137903992793689
+5638	5008	1165	0.1390388743026	0.1390388743026
+5640	885	4470	0.139218366547603	0.139218366547603
+5641	4470	2792	0.134293285442621	0.134293285442621
+5642	2792	5009	0.131431211174063	0.131431211174063
+5644	5012	739	0.391173244940122	0.391173244940122
+5645	739	1559	0.139743785900176	0.139743785900176
+5646	1559	4275	0.141288921951359	0.141288921951359
+5647	4275	5013	0.120791048813674	0.120791048813674
+5648	5013	5014	0.0105624832499152	0.0105624832499152
+5649	5014	5015	0.0438951959332696	0.0438951959332696
+5650	5015	5016	0.160752036464104	0.160752036464104
+5652	5017	2345	0.117820938280592	0.117820938280592
+5654	4151	1536	0.0491815160552347	0.0491815160552347
+5655	1536	4765	0.126517768209698	0.126517768209698
+5656	4765	5019	0.175921623374803	0.175921623374803
+5657	5019	5020	0.0764689744574068	0.0764689744574068
+5658	5020	5021	0.102480731304504	0.102480731304504
+5659	5021	1190	0.167860102396295	0.167860102396295
+5660	1190	5022	0.022286088803945	0.022286088803945
+5661	5022	3787	0.1996828431131	0.1996828431131
+5662	3787	5023	0.154628071522294	0.154628071522294
+5687	5040	1763	0.201152967219908	0.201152967219908
+5663	5023	2252	0.333559522830682	0.333559522830682
+5664	2252	5024	0.0290309763494638	0.0290309763494638
+5665	5024	4884	0.148258019557603	0.148258019557603
+5666	4884	5025	0.194698119191853	0.194698119191853
+5667	5025	5026	0.176313474196241	0.176313474196241
+5668	5026	5027	0.192373972114261	0.192373972114261
+5669	5027	679	0.169442185038323	0.169442185038323
+5672	5029	4596	0.157086480064782	0.157086480064782
+5674	5030	5031	0.105448542276863	0.105448542276863
+5677	5032	5034	0.00520403492524916	0.00520403492524916
+5678	5034	5035	0.00442576451440448	0.00442576451440448
+5679	5035	5036	0.135764863246336	0.135764863246336
+5681	5037	813	0.139038307562208	0.139038307562208
+5682	813	3554	0.152271167865336	0.152271167865336
+5684	5038	5039	0.16037248823512	0.16037248823512
+5686	2368	5040	0.131780679502724	0.131780679502724
+5689	5041	5042	0.178235693488978	0.178235693488978
+5690	5042	663	0.00303458618342364	0.00303458618342364
+5691	663	5043	0.17896901951739	0.17896901951739
+5692	5043	4608	0.175810797673871	0.175810797673871
+5693	4608	5044	0.116588664300191	0.116588664300191
+5694	5044	5045	0.0312349930548565	0.0312349930548565
+5695	5045	3670	0.147012417470316	0.147012417470316
+5697	5046	4162	0.0660609059196111	0.0660609059196111
+5698	4162	4771	0.262084611870375	0.262084611870375
+5699	4771	5047	0.17859412824458	0.17859412824458
+5700	5047	5048	0.1691727396202	0.1691727396202
+5701	5048	5049	0.184472749838431	0.184472749838431
+5702	5049	3801	0.20027318311003	0.20027318311003
+5703	3801	5050	0.154503416019497	0.154503416019497
+5704	5050	932	0.176703352691921	0.176703352691921
+5706	2217	4867	0.160601247675141	0.160601247675141
+5707	4867	5051	0.19278749199245	0.19278749199245
+5708	5051	5052	0.171738832244774	0.171738832244774
+5709	5052	5053	0.125039053144726	0.125039053144726
+5710	5053	5054	0.0536646579213684	0.0536646579213684
+5712	2413	5055	0.0539797182371141	0.0539797182371141
+5713	5055	5056	0.0555511846145791	0.0555511846145791
+5714	5056	5057	0.0564985233788716	0.0564985233788716
+5715	5058	5059	0.0116997793337229	0.0116997793337229
+5716	5059	369	0.121769364056454	0.121769364056454
+5717	369	1558	0.13936986171661	0.13936986171661
+5718	1558	738	0.139138948896028	0.139138948896028
+5719	738	5060	0.392796141218442	0.392796141218442
+5721	5061	5062	0.12142771399357	0.12142771399357
+5722	5062	5063	0.0553958184996893	0.0553958184996893
+5723	5063	4434	0.0566894209705876	0.0566894209705876
+5724	4434	2921	0.313688166061769	0.313688166061769
+5726	5062	422	0.127478280907992	0.127478280907992
+5727	422	5063	0.108364291033736	0.108364291033736
+5729	5066	5067	0.177224259300569	0.177224259300569
+5730	5067	1319	0.176633232309172	0.176633232309172
+5731	1319	1375	0.177680959479223	0.177680959479223
+5732	1375	5068	0.0602164425054291	0.0602164425054291
+5733	5068	288	0.02427348670764	0.02427348670764
+5734	288	5069	0.0611513015273674	0.0611513015273674
+5735	5069	4693	0.113806398942027	0.113806398942027
+5736	4693	5070	0.156397394554719	0.156397394554719
+5738	1493	182	0.220724132280051	0.220724132280051
+5739	182	1710	0.202718600976859	0.202718600976859
+5742	5072	5073	0.0235981208081862	0.0235981208081862
+5743	5073	5074	0.173346209176791	0.173346209176791
+5744	5074	5075	0.183560584904857	0.183560584904857
+5746	5076	5077	0.201201481229781	0.201201481229781
+5747	5077	5078	0.196158089713223	0.196158089713223
+5750	5080	304	0.450334409862505	0.450334409862505
+5755	5083	4179	0.23271473726582	0.23271473726582
+5757	5084	5085	0.100586570089845	0.100586570089845
+5758	5085	3712	0.0974495496468689	0.0974495496468689
+5759	3712	5088	0.107190885250137	0.107190885250137
+5761	1840	2612	0.176114771519943	0.176114771519943
+5762	2612	5089	0.0532850041931226	0.0532850041931226
+5763	5089	5090	0.123805391077944	0.123805391077944
+5764	5090	5091	0.0921824286504112	0.0921824286504112
+5765	5091	5092	0.0849604613604367	0.0849604613604367
+5767	5093	4077	0.0433656831085181	0.0433656831085181
+5768	4077	5094	0.807132686207363	0.807132686207363
+5769	5092	5095	0.184721084541763	0.184721084541763
+5770	5095	5096	0.112121546650621	0.112121546650621
+5771	5096	5097	0.012405493892182	0.012405493892182
+12067	8534	8532	0.0417307390941294	0.0417307390941294
+5774	5099	5100	0.195348601056539	0.195348601056539
+5775	5100	5101	1.61385249170336	1.61385249170336
+5776	4334	5102	0.201130889411283	0.201130889411283
+5778	5103	2576	0.52830768269949	0.52830768269949
+5782	1145	874	0.139433776255124	0.139433776255124
+5783	874	4462	0.13822164303959	0.13822164303959
+5784	4462	2782	0.134807869792579	0.134807869792579
+5786	5108	5109	0.136531475414142	0.136531475414142
+5787	5110	5111	0.166792389966844	0.166792389966844
+5788	5111	5112	0.0444779706577198	0.0444779706577198
+5789	5113	4169	0.194541086455447	0.194541086455447
+5790	4169	4754	0.20739031390672	0.20739031390672
+5791	4754	5114	0.19819923300798	0.19819923300798
+5792	5114	5115	0.205574207946515	0.205574207946515
+5793	5115	5116	0.18969176296687	0.18969176296687
+5795	3795	5117	0.153449380032665	0.153449380032665
+5796	5117	942	0.178860285004076	0.178860285004076
+5797	942	2226	0.181510674241125	0.181510674241125
+5798	2226	4876	0.162456954471732	0.162456954471732
+5799	4876	5118	0.192077540660028	0.192077540660028
+5800	5118	5119	0.169639680241679	0.169639680241679
+5801	5119	5120	0.176431836448169	0.176431836448169
+5805	5123	5124	0.138482206224941	0.138482206224941
+5807	5125	5126	0.196467690434778	0.196467690434778
+5809	5127	5128	0.177236972666439	0.177236972666439
+5810	5128	666	0.00411429224620583	0.00411429224620583
+5811	666	5129	0.00398081510277296	0.00398081510277296
+5812	5129	5130	0.0219503048251099	0.0219503048251099
+5813	5130	5131	0.152662411900591	0.152662411900591
+5814	5131	4605	0.174323615227633	0.174323615227633
+5815	4605	3691	0.233536002014651	0.233536002014651
+5816	3691	5132	0.0578224768050087	0.0578224768050087
+5817	4901	5133	0.0573209620432963	0.0573209620432963
+5819	5134	5135	0.102452742724465	0.102452742724465
+5820	5135	5136	0.101180875593513	0.101180875593513
+5821	5136	5137	0.0993172550227887	0.0993172550227887
+5822	5137	5138	0.0973174615516026	0.0973174615516026
+5823	5138	5139	0.0592813821516456	0.0592813821516456
+5824	5139	5140	0.0572628386692297	0.0572628386692297
+5825	5140	5141	0.0908568563064313	0.0908568563064313
+5826	5141	5142	0.108696465338082	0.108696465338082
+5827	5142	5143	0.117446225438567	0.117446225438567
+5828	5143	5144	0.115052510861077	0.115052510861077
+5831	2118	5146	0.132113404680538	0.132113404680538
+5832	5146	5147	0.0733188328504862	0.0733188328504862
+5833	5147	5148	0.0348417204507369	0.0348417204507369
+5860	3449	5168	0.101446764740706	0.101446764740706
+5835	4903	5149	0.0928559279225574	0.0928559279225574
+5836	5149	5150	0.101009488468598	0.101009488468598
+5837	5150	5151	0.101494340144734	0.101494340144734
+12222	8597	8598	0.00932829170104997	0.00932829170104997
+12223	8598	8599	0.0244824521093208	0.0244824521093208
+5838	5151	5152	0.100261540674961	0.100261540674961
+5839	5152	5153	0.221241395423211	0.221241395423211
+5840	5153	2236	0.0908651857276488	0.0908651857276488
+5841	2236	5154	0.10116756602451	0.10116756602451
+5842	5154	5155	0.114191873365342	0.114191873365342
+5843	5155	5156	0.113038208940698	0.113038208940698
+5844	5156	2119	0.121856512679973	0.121856512679973
+5845	2119	5157	0.125333022212683	0.125333022212683
+5846	5157	5158	0.121389833666029	0.121389833666029
+5847	5158	5159	0.0390946612702668	0.0390946612702668
+5850	5160	2133	0.195466658548015	0.195466658548015
+5854	5163	2476	0.202535777887142	0.202535777887142
+5856	5164	5165	0.0156138568041909	0.0156138568041909
+5857	5165	5166	0.100589160353206	0.100589160353206
+5858	5166	5167	0.104247833927165	0.104247833927165
+5859	5167	3449	0.104250422099089	0.104250422099089
+5861	5168	3879	0.102808830950679	0.102808830950679
+5862	3879	841	0.103522696858037	0.103522696858037
+5863	841	5169	0.102719682704035	0.102719682704035
+5864	5169	5170	0.0474110701835865	0.0474110701835865
+5866	5171	5172	0.106685417852495	0.106685417852495
+5867	5172	5173	0.0515553847760644	0.0515553847760644
+5868	5173	4988	0.0505202363313306	0.0505202363313306
+17163	5107	1802	0.195280530173469	0.195280530173469
+5869	4988	962	0.105015490507221	0.105015490507221
+5870	962	4141	0.100506431839732	0.100506431839732
+5871	4141	3161	0.101307790482977	0.101307790482977
+5872	3161	3620	0.0948143449717999	0.0948143449717999
+5873	3620	1826	0.102953991217456	0.102953991217456
+5874	1826	4334	0.0954488426398559	0.0954488426398559
+5876	5174	1763	0.050455869495655	0.050455869495655
+5877	1763	4616	0.0477367574799653	0.0477367574799653
+5878	4616	5175	0.0514444022852647	0.0514444022852647
+5879	5175	4306	0.0486177089369888	0.0486177089369888
+5880	4306	994	0.0512355770161431	0.0512355770161431
+5881	994	4309	0.0460747606120818	0.0460747606120818
+5882	4309	2915	0.0558782384698847	0.0558782384698847
+5883	2915	2916	0.0205535416898751	0.0205535416898751
+5909	5190	5191	0.0526195895778432	0.0526195895778432
+5887	587	588	0.0168822192889414	0.0168822192889414
+5888	588	5177	0.110837670707715	0.110837670707715
+5889	5177	1399	0.106464576541899	0.106464576541899
+5890	1399	5178	0.00837287829367045	0.00837287829367045
+5891	5178	5179	0.0973274399582508	0.0973274399582508
+5892	5179	5180	0.0713882284598403	0.0713882284598403
+5893	5180	3386	0.0465173628433736	0.0465173628433736
+5894	3386	5181	0.0466294338105993	0.0466294338105993
+5895	5181	5182	0.0461505269276214	0.0461505269276214
+5896	5182	2801	0.0476762891770853	0.0476762891770853
+5897	2801	5183	0.0462906353191723	0.0462906353191723
+5898	5183	5184	0.0462689908237556	0.0462689908237556
+5899	5184	5185	0.0466469950505128	0.0466469950505128
+5900	5185	5186	0.0471146492559741	0.0471146492559741
+5901	5186	5187	0.045278465180898	0.045278465180898
+5902	5187	1570	0.0464406557272166	0.0464406557272166
+5903	1570	1095	0.0464745881593838	0.0464745881593838
+5904	1095	5188	0.0475893065083787	0.0475893065083787
+7153	6059	6060	0.0479619125752321	0.0479619125752321
+5905	5188	5189	0.0454253204645735	0.0454253204645735
+5906	5189	1538	0.0460968804258839	0.0460968804258839
+5907	1538	3854	0.04697776477365	0.04697776477365
+5908	3854	5190	0.0530473283120516	0.0530473283120516
+5911	5192	5193	0.0515193353777817	0.0515193353777817
+5913	5194	5195	0.0687779636933597	0.0687779636933597
+5914	5195	5090	0.141994718426853	0.141994718426853
+5915	5090	5196	0.112634336237225	0.112634336237225
+5916	5196	5197	0.0575743623042855	0.0575743623042855
+5917	5197	4671	0.100935765794822	0.100935765794822
+5918	4671	4951	0.0999693670841652	0.0999693670841652
+5919	4951	5198	0.0511858126232579	0.0511858126232579
+5921	5199	5200	0.0499779255146796	0.0499779255146796
+5922	5200	5201	0.0499920394458099	0.0499920394458099
+5923	5201	5202	0.0457134833999458	0.0457134833999458
+5924	5202	5203	0.0421294446780762	0.0421294446780762
+5925	5203	3957	0.137188173752203	0.137188173752203
+5926	3957	5204	0.0640931318030062	0.0640931318030062
+5927	5204	5205	0.0544857674041209	0.0544857674041209
+5928	5205	5206	0.0521757463337926	0.0521757463337926
+5929	5207	5208	0.0487730947754618	0.0487730947754618
+5930	5208	5209	0.0493635031974476	0.0493635031974476
+5932	5211	5212	0.207489392195287	0.207489392195287
+5933	5212	4646	0.099390326989904	0.099390326989904
+5935	3645	4555	0.0986517427687235	0.0986517427687235
+5937	5213	5214	0.322259629928437	0.322259629928437
+5938	5215	5216	0.143730822686287	0.143730822686287
+5939	5216	5217	0.0599126619694891	0.0599126619694891
+5940	5217	5218	0.202016907937226	0.202016907937226
+5942	5219	5220	0.186576382334646	0.186576382334646
+5944	5221	5222	0.13343391197395	0.13343391197395
+5945	5222	2558	0.200662474351154	0.200662474351154
+5946	2558	5224	0.208372800213582	0.208372800213582
+5947	5225	4431	0.102067442103011	0.102067442103011
+5948	4431	3711	0.0989108306469789	0.0989108306469789
+5949	3711	5226	0.107183313746265	0.107183313746265
+5950	5226	1839	0.179335285582576	0.179335285582576
+17165	4242	3547	0.202237742052361	0.202237742052361
+5951	1839	2611	0.178227308228011	0.178227308228011
+5952	2611	5195	0.176210949140518	0.176210949140518
+20492	10836	10813	0.00305693422510609	0.00305693422510609
+7198	6089	1755	0.0565523921918465	0.0565523921918465
+18301	5526	5737	0.156444459924747	0.156444459924747
+5957	4512	5230	0.200430868604248	0.200430868604248
+5959	5231	5232	0.20240814685365	0.20240814685365
+5960	5232	5233	0.200177276698155	0.200177276698155
+5961	5233	5234	0.403649470879027	0.403649470879027
+5962	3278	3181	0.152742056397443	0.152742056397443
+5964	3927	3703	0.0675866941557576	0.0675866941557576
+5965	3703	708	0.0999635221991015	0.0999635221991015
+5966	708	5235	0.0981118109963614	0.0981118109963614
+5967	5235	5236	0.0989915986442654	0.0989915986442654
+5968	5236	4189	0.135714784882046	0.135714784882046
+5969	4189	2515	0.133468058331593	0.133468058331593
+5970	2515	5237	0.135326951582466	0.135326951582466
+5971	5237	4803	0.135895734874124	0.135895734874124
+5972	4803	5238	0.136371570616542	0.136371570616542
+5973	5238	5239	0.126834347813211	0.126834347813211
+5974	5239	5240	0.133492367602304	0.133492367602304
+5975	5240	4624	0.131817065741689	0.131817065741689
+7224	4702	6106	0.102350270818551	0.102350270818551
+5979	2725	5242	0.133090700331069	0.133090700331069
+5981	5243	5244	0.0777207800874593	0.0777207800874593
+5982	5244	5245	0.710188326706697	0.710188326706697
+5983	3974	5246	0.196425810260379	0.196425810260379
+5984	5246	3422	0.201357225192724	0.201357225192724
+5986	3423	5247	0.0491810142725505	0.0491810142725505
+5987	5247	5248	0.0477450735797267	0.0477450735797267
+5989	5249	5250	0.055676102895211	0.055676102895211
+5990	5250	5251	0.140244564447974	0.140244564447974
+5991	5251	5252	0.170294636723478	0.170294636723478
+5993	5253	5254	0.106323677730181	0.106323677730181
+5994	5254	5108	0.109212547805518	0.109212547805518
+5995	5108	4725	0.103272467122344	0.103272467122344
+5996	4725	5255	0.103742512264204	0.103742512264204
+5997	5255	5256	0.105340810076794	0.105340810076794
+5999	5257	3136	0.108092936006134	0.108092936006134
+6000	3136	3908	0.107682657630117	0.107682657630117
+7243	6117	6118	0.0967566510311658	0.0967566510311658
+6001	3908	1048	0.108571568461532	0.108571568461532
+6002	1048	5258	0.101973343920372	0.101973343920372
+6003	5258	5259	0.106357911571636	0.106357911571636
+6005	5260	5009	0.0315381518095178	0.0315381518095178
+6006	5009	3333	0.108118604625977	0.108118604625977
+6007	3333	5261	0.119315074925742	0.119315074925742
+6008	5261	5263	0.0963665691070474	0.0963665691070474
+6009	5263	5264	0.0432816561908272	0.0432816561908272
+6010	5264	2085	0.0535379351296007	0.0535379351296007
+6011	2085	5265	0.105640004427027	0.105640004427027
+6012	5265	4130	0.106366490545515	0.106366490545515
+6013	4130	5266	0.109451940113279	0.109451940113279
+6014	5266	5267	0.101101610243622	0.101101610243622
+6018	5269	5270	0.0982982274574071	0.0982982274574071
+6019	5270	804	0.0991956500472809	0.0991956500472809
+6020	804	5271	0.0978879869631794	0.0978879869631794
+6021	5271	5272	0.0909649766992318	0.0909649766992318
+6022	5272	5273	0.0146836193769648	0.0146836193769648
+6024	5274	1956	0.174868207801427	0.174868207801427
+6027	5275	5276	0.0506368419660478	0.0506368419660478
+6028	5276	4990	0.0537681631666927	0.0537681631666927
+6029	4990	5277	0.102832227368728	0.102832227368728
+6030	5277	5278	0.0856095541145101	0.0856095541145101
+6032	1548	4268	0.202455793335308	0.202455793335308
+6033	4268	283	0.117344693446838	0.117344693446838
+6035	4141	5279	0.202925527060843	0.202925527060843
+6036	5279	2364	0.110547560275979	0.110547560275979
+6037	2364	4146	0.176928363643229	0.176928363643229
+6038	4146	5281	0.187030458155785	0.187030458155785
+6039	5281	5282	0.011246856594195	0.011246856594195
+6041	5283	2870	0.194705331985994	0.194705331985994
+6043	5285	5286	0.301111320410511	0.301111320410511
+6044	5287	5288	0.185724938270304	0.185724938270304
+6045	5288	5289	0.213285003773079	0.213285003773079
+6047	5290	5291	0.13629389839255	0.13629389839255
+6048	5291	5292	0.13355771854799	0.13355771854799
+6049	5292	4013	0.133867532403999	0.133867532403999
+6052	5294	3384	0.128421314744864	0.128421314744864
+6053	3384	5295	0.104229219478348	0.104229219478348
+6054	5295	3817	0.102592362577248	0.102592362577248
+6056	5296	5297	0.0990440053907464	0.0990440053907464
+6057	5297	5298	0.00501097787172802	0.00501097787172802
+6058	5298	5299	0.26852367463784	0.26852367463784
+6059	5299	5300	0.02711052781377	0.02711052781377
+6060	5300	5301	0.101042477184366	0.101042477184366
+6061	5301	5302	0.0980158544732548	0.0980158544732548
+6062	5302	5303	0.68853335666363	0.68853335666363
+6063	4532	3739	0.10058657036035	0.10058657036035
+6064	3739	5305	0.101344660556636	0.101344660556636
+6065	5305	1342	0.202678391855073	0.202678391855073
+6067	5306	4700	0.20166419460726	0.20166419460726
+6068	4700	5307	0.201175175307418	0.201175175307418
+6069	5307	5308	0.201920176537304	0.201920176537304
+6070	5308	5309	0.201920207593883	0.201920207593883
+6071	5309	777	0.201196100270561	0.201196100270561
+6072	777	5310	0.185040940142678	0.185040940142678
+6073	5310	5311	0.201942415647541	0.201942415647541
+6074	5311	5312	0.206000886771111	0.206000886771111
+7322	6161	6162	0.200977808302969	0.200977808302969
+6077	1729	5313	0.145417053241999	0.145417053241999
+6079	5314	5315	0.262924523321611	0.262924523321611
+6080	5316	3497	0.142809169887552	0.142809169887552
+6082	2903	5317	0.0402215187360589	0.0402215187360589
+6083	5317	5318	0.00632191300841853	0.00632191300841853
+6084	5318	5319	0.00945274881783772	0.00945274881783772
+6085	5319	5320	0.102488283152376	0.102488283152376
+6086	5320	5321	0.105737259840933	0.105737259840933
+6087	5321	5322	0.104280118546109	0.104280118546109
+6088	5322	5323	0.105008595801197	0.105008595801197
+6089	5323	5324	0.107079302112312	0.107079302112312
+6090	5324	3311	0.104784168499708	0.104784168499708
+6091	3311	5325	0.104972132929345	0.104972132929345
+6093	5328	5329	0.148443179384572	0.148443179384572
+6094	5329	4320	0.122968314186663	0.122968314186663
+6095	4320	5331	0.133138685881437	0.133138685881437
+6096	5331	5332	0.129500346452113	0.129500346452113
+6097	5332	5072	0.094543402764425	0.094543402764425
+6098	5072	5333	0.0140267468815188	0.0140267468815188
+7348	5506	4458	0.146478928082641	0.146478928082641
+6099	5333	5334	0.0971985352126134	0.0971985352126134
+6100	5334	5335	0.0675695345311337	0.0675695345311337
+6101	5335	5336	0.135628949553031	0.135628949553031
+6102	5336	5337	0.134096180080561	0.134096180080561
+6103	5337	5338	0.121603742223712	0.121603742223712
+6104	5338	5339	0.288999775625269	0.288999775625269
+6105	5339	5340	0.295278488962845	0.295278488962845
+6106	5340	5341	0.386769671992271	0.386769671992271
+6107	5341	5342	0.199175415622423	0.199175415622423
+18500	9718	6670	0.0335166183519053	0.0335166183519053
+6108	272	2532	0.233490999842372	0.233490999842372
+6109	2532	2534	0.010275790210419	0.010275790210419
+6111	5343	5344	0.134883731263317	0.134883731263317
+6112	5344	2487	0.132908396505932	0.132908396505932
+6113	2487	2828	0.130466466605355	0.130466466605355
+6114	2828	1436	0.203164250472258	0.203164250472258
+6115	1436	5345	0.151025004833817	0.151025004833817
+6117	5346	5347	0.17552323432827	0.17552323432827
+6118	5347	3107	0.175398997422213	0.175398997422213
+6119	3107	5348	0.192385063711178	0.192385063711178
+6121	1515	5349	0.354712199012844	0.354712199012844
+6123	4219	5350	0.184992548254205	0.184992548254205
+6124	5350	5351	0.809194581386362	0.809194581386362
+6125	3828	5352	0.158319505042179	0.158319505042179
+6127	3683	5353	0.00756991430853718	0.00756991430853718
+6128	5353	5354	0.0600900021718448	0.0600900021718448
+6129	5354	5355	0.0486030977669072	0.0486030977669072
+6130	5355	5356	0.00770962942235081	0.00770962942235081
+6132	5357	5358	0.0529187112553076	0.0529187112553076
+6133	5358	5359	0.0513821813874635	0.0513821813874635
+6134	5359	5360	0.0534444522847469	0.0534444522847469
+6135	5360	5361	0.0503260757639254	0.0503260757639254
+6137	5362	5363	0.199678713236371	0.199678713236371
+6139	4554	5364	0.257952059435159	0.257952059435159
+6141	2203	5365	0.125513593247199	0.125513593247199
+6142	5365	5366	0.121103405669087	0.121103405669087
+6143	5366	5367	0.118905793541669	0.118905793541669
+6144	5367	5368	0.110432655754222	0.110432655754222
+7394	6208	6209	0.0520019237828089	0.0520019237828089
+6145	5368	4924	0.050653673780936	0.050653673780936
+6146	4924	5369	0.0113612305905717	0.0113612305905717
+6148	5370	5371	0.0511886893302135	0.0511886893302135
+6149	5371	3733	0.0547546687048594	0.0547546687048594
+6150	3733	5372	0.0739604711312813	0.0739604711312813
+6151	5372	5373	0.0333758188249575	0.0333758188249575
+6152	5373	5374	0.0326832624474652	0.0326832624474652
+6153	5374	4487	0.0687015455014252	0.0687015455014252
+6155	5375	5376	0.083676019608772	0.083676019608772
+6157	5377	5378	0.539527941615599	0.539527941615599
+6158	5379	5380	0.024339909926927	0.024339909926927
+6159	5380	5381	0.0572545808576417	0.0572545808576417
+6161	5382	5383	0.0919429478923695	0.0919429478923695
+6162	5383	4632	0.0667555867186957	0.0667555867186957
+6163	4632	4638	0.073630878201174	0.073630878201174
+6164	4638	4551	0.135095610306562	0.135095610306562
+6165	4551	5384	0.293762175707744	0.293762175707744
+6167	2098	5385	0.176238767515036	0.176238767515036
+6168	5385	3108	0.175113982885218	0.175113982885218
+6169	3108	5386	0.213105615274275	0.213105615274275
+6170	5386	5387	0.16568697132589	0.16568697132589
+6171	5387	5388	0.0444779706577198	0.0444779706577198
+6173	1958	3829	0.172873649500925	0.172873649500925
+6174	3829	3827	0.0048313839727239	0.0048313839727239
+6175	3827	5389	0.152170039924714	0.152170039924714
+6176	5389	547	0.0103214739502372	0.0103214739502372
+6177	547	3259	0.110383801281946	0.110383801281946
+6178	3259	3297	0.0174353644977756	0.0174353644977756
+6180	4220	5391	0.40468883776866	0.40468883776866
+6181	1473	5392	0.374922653008132	0.374922653008132
+6182	5392	2947	0.18613051410303	0.18613051410303
+6184	5393	5394	0.133683449538656	0.133683449538656
+6185	5394	5395	0.00436494876438714	0.00436494876438714
+6186	5395	5396	0.00413948116283948	0.00413948116283948
+6187	5396	5397	0.135591162545584	0.135591162545584
+6188	5397	5398	0.140883972058497	0.140883972058497
+6189	5398	823	0.138673141914839	0.138673141914839
+6190	823	3564	0.136111333534187	0.136111333534187
+6191	3564	5399	0.14331239683406	0.14331239683406
+6193	5400	3028	0.141885844467344	0.141885844467344
+7436	5227	5219	0.0266079784612615	0.0266079784612615
+6195	5401	5402	0.00584885314190653	0.00584885314190653
+6196	5402	5403	0.138593356569714	0.138593356569714
+6197	5403	1157	0.139497033685325	0.139497033685325
+6198	1157	878	0.139538816070218	0.139538816070218
+6199	878	4466	0.138604668182001	0.138604668182001
+6200	4466	2786	0.1346682214983	0.1346682214983
+6201	2786	5257	0.131712815882714	0.131712815882714
+6202	5257	5404	0.212033227364557	0.212033227364557
+6203	5404	5405	0.140381205630714	0.140381205630714
+6204	5405	5406	0.175882952103236	0.175882952103236
+6206	4761	5407	0.0777628340765697	0.0777628340765697
+6207	5407	5411	0.121860688460736	0.121860688460736
+6208	5411	5412	0.203436645645446	0.203436645645446
+6211	5413	3128	0.197988223180436	0.197988223180436
+6213	5414	5415	0.127346625489507	0.127346625489507
+6214	5415	5416	0.202431697844534	0.202431697844534
+6216	5417	5418	0.0360920642856509	0.0360920642856509
+18249	10283	10284	0.0379598203284706	0.0379598203284706
+6217	5418	5419	0.175688258529037	0.175688258529037
+6218	5419	5420	0.176513424391556	0.176513424391556
+6219	5420	671	0.183363162969023	0.183363162969023
+6220	671	5421	0.00332688246962709	0.00332688246962709
+6221	5421	5422	0.175194594065608	0.175194594065608
+6222	5422	4601	0.174116514777802	0.174116514777802
+6223	4601	5423	0.141050765485302	0.141050765485302
+6225	2950	5424	0.133468479991587	0.133468479991587
+6226	5425	3096	0.198372842511786	0.198372842511786
+6227	3096	3206	0.203187034114148	0.203187034114148
+6228	3206	5426	0.199398136177365	0.199398136177365
+6229	5426	1916	0.200785704053696	0.200785704053696
+6231	5427	5428	0.208049356186156	0.208049356186156
+6232	5428	5429	0.195358366621449	0.195358366621449
+6233	5429	5430	0.0822508872394256	0.0822508872394256
+6234	5431	3740	0.099853044127537	0.099853044127537
+6235	3740	5432	0.079904711368683	0.079904711368683
+6236	5432	5433	0.0177357578673254	0.0177357578673254
+6237	5433	1299	0.160881213225809	0.160881213225809
+6238	1299	1344	0.0431325120453993	0.0431325120453993
+6239	1344	5434	0.202930771593003	0.202930771593003
+6240	5434	5435	0.195937805328833	0.195937805328833
+6241	5435	4701	0.00964060014055181	0.00964060014055181
+6242	4701	5436	0.088911763330732	0.088911763330732
+6243	5436	5437	0.105079205678488	0.105079205678488
+6244	5437	5438	0.0943047001329777	0.0943047001329777
+6245	5438	5439	0.100620360394738	0.100620360394738
+6246	5439	5440	0.0146794154501444	0.0146794154501444
+6247	5440	4965	0.086276226710605	0.086276226710605
+6248	4965	5441	0.10739345579216	0.10739345579216
+6249	5441	5442	0.0951717377148208	0.0951717377148208
+6250	5442	5443	0.0976857174224503	0.0976857174224503
+6252	779	5444	0.0823735255229089	0.0823735255229089
+6253	5444	5445	0.102122427250782	0.102122427250782
+6254	5445	4958	0.133513290288167	0.133513290288167
+6255	4958	5446	0.0684224753039321	0.0684224753039321
+6256	5446	5447	0.00769468892365438	0.00769468892365438
+6257	5447	5448	0.199639504943165	0.199639504943165
+6258	5448	1501	0.201263981115328	0.201263981115328
+6259	1501	174	0.201029338652354	0.201029338652354
+6261	1704	1730	0.0545082426213867	0.0545082426213867
+6262	1730	5451	0.146076957823045	0.146076957823045
+6263	5451	5452	1.20615427321132	1.20615427321132
+6265	5456	5457	0.107171013555617	0.107171013555617
+6266	5457	5458	0.0551341429674013	0.0551341429674013
+6267	5458	5459	0.053860211885536	0.053860211885536
+6268	5459	5460	0.109859438734606	0.109859438734606
+6269	5460	5461	0.104952215686531	0.104952215686531
+6270	5461	5462	0.0537660564474852	0.0537660564474852
+6271	5462	5463	0.0468001440268365	0.0468001440268365
+6273	5464	5465	0.0487076064705391	0.0487076064705391
+6274	5465	5466	0.096682643717806	0.096682643717806
+6275	5466	5052	0.0976295695745084	0.0976295695745084
+6276	5052	5467	0.0498503558842522	0.0498503558842522
+6277	5467	5468	0.0500897185974344	0.0500897185974344
+6279	5223	978	0.0483462615206691	0.0483462615206691
+6280	978	5469	0.0500186833718628	0.0500186833718628
+6281	5469	5470	0.0466179289686935	0.0466179289686935
+6282	5470	5471	0.0496889709391185	0.0496889709391185
+6283	5471	5472	0.0500395303728477	0.0500395303728477
+6284	5472	4947	0.0500649255411997	0.0500649255411997
+6285	4947	5119	0.0486069729184005	0.0486069729184005
+6286	5119	5473	0.0497694572157541	0.0497694572157541
+6287	5473	4719	0.0482501223288259	0.0482501223288259
+6288	4719	5474	0.0825694493004343	0.0825694493004343
+6289	5474	5475	0.013401399089124	0.013401399089124
+6290	5475	5476	0.103889728134339	0.103889728134339
+6291	5476	5419	0.103815153646491	0.103815153646491
+6292	5419	5477	0.109635415021011	0.109635415021011
+6294	3890	1020	0.105962717150938	0.105962717150938
+6295	1020	5478	0.052027246508575	0.052027246508575
+6296	5478	5479	0.0524872333525023	0.0524872333525023
+6297	5479	3719	0.052252544610622	0.052252544610622
+6298	3719	5480	0.0538013756911254	0.0538013756911254
+6299	5480	5481	0.0436600330786078	0.0436600330786078
+6300	5481	5482	0.00837974421686285	0.00837974421686285
+14763	7162	4611	0.176903840452458	0.176903840452458
+6301	5482	5026	0.040489278057912	0.040489278057912
+6302	5026	3338	0.107876149200874	0.107876149200874
+6303	3338	5483	0.0990429074228521	0.0990429074228521
+6304	5483	5484	0.0966066822218646	0.0966066822218646
+6305	5484	5485	0.085086759759281	0.085086759759281
+6306	5485	5486	0.0169728889677259	0.0169728889677259
+6307	5486	2067	0.0825646387998858	0.0825646387998858
+6309	5487	2667	0.0866869262626222	0.0866869262626222
+6310	2667	2664	0.00897895817052901	0.00897895817052901
+6311	2664	4137	0.0908182867369719	0.0908182867369719
+6312	4137	5488	0.0965705527653259	0.0965705527653259
+6313	5488	5489	0.0942751679467969	0.0942751679467969
+6314	5489	5490	0.0959916716400224	0.0959916716400224
+6315	5490	3461	0.0933212956911074	0.0933212956911074
+6316	3461	5491	0.0467923341231575	0.0467923341231575
+6317	5491	5492	0.0479894648111637	0.0479894648111637
+6318	5492	5493	0.094030978726141	0.094030978726141
+6319	5493	861	0.0920531787302436	0.0920531787302436
+6320	861	5494	0.092346282981082	0.092346282981082
+6321	5494	5495	0.091117734759624	0.091117734759624
+20501	10824	10839	0.0279151158292869	0.0279151158292869
+6323	5496	5497	0.0512308809047994	0.0512308809047994
+6324	5497	5498	0.0547050066584288	0.0547050066584288
+6325	5498	5499	0.0532065647068504	0.0532065647068504
+6326	5499	5500	0.0520026026999989	0.0520026026999989
+6327	5500	5501	0.0600453089722235	0.0600453089722235
+6328	5501	5502	0.0451373924487277	0.0451373924487277
+7588	6319	6320	0.0874047970677394	0.0874047970677394
+6330	5503	5504	0.0512021800904844	0.0512021800904844
+6331	5504	5505	0.0535897595927606	0.0535897595927606
+6332	5505	5506	0.0503264318858696	0.0503264318858696
+6333	5506	5507	0.0549843628648472	0.0549843628648472
+6334	5507	3309	0.0521587927419047	0.0521587927419047
+6335	3309	5508	0.0557422576502987	0.0557422576502987
+6336	5508	5509	0.0498065817995712	0.0498065817995712
+6338	5510	5511	0.10273263586878	0.10273263586878
+6339	5511	5512	0.103095987250104	0.103095987250104
+6340	5512	3020	0.0125186689867189	0.0125186689867189
+6341	3020	5513	0.0466432236195876	0.0466432236195876
+6342	5513	4381	0.0509815437370977	0.0509815437370977
+6344	5514	5515	0.103259680904514	0.103259680904514
+6345	5515	3934	0.0990266173550878	0.0990266173550878
+6346	3934	5516	0.10122291130851	0.10122291130851
+6347	5516	3707	0.107162793104657	0.107162793104657
+6348	3707	717	0.101965718351369	0.101965718351369
+6349	717	5517	0.10489500722876	0.10489500722876
+6350	5517	5518	0.0880249775504832	0.0880249775504832
+6352	5519	4201	0.0955388621117037	0.0955388621117037
+6353	4201	1068	0.10398483351111	0.10398483351111
+6354	1068	2504	0.101881809876575	0.101881809876575
+6355	2504	5520	0.10295538196753	0.10295538196753
+6356	5520	1231	0.0964004159007037	0.0964004159007037
+6357	1231	4809	0.0995624903271375	0.0995624903271375
+6358	4809	2176	0.101169164261142	0.101169164261142
+6359	2176	5521	0.102032335854251	0.102032335854251
+6360	5521	348	0.0731550647240869	0.0731550647240869
+6361	348	351	0.0329026304601732	0.0329026304601732
+6363	5522	4629	0.122115753805888	0.122115753805888
+6364	4629	1258	0.132003632804436	0.132003632804436
+6366	377	4544	0.0548661978897115	0.0548661978897115
+6367	4544	2700	0.136738193723685	0.136738193723685
+6368	2700	5523	0.130559333935347	0.130559333935347
+6371	5525	1133	0.0486624445582808	0.0486624445582808
+6372	1133	5526	0.0510752177714687	0.0510752177714687
+6373	5526	5527	0.0534768474459495	0.0534768474459495
+6374	5527	3849	0.0993499397911337	0.0993499397911337
+20247	6972	10718	0.0278784612667637	0.0278784612667637
+6375	3849	5528	0.0502810849564127	0.0502810849564127
+6376	5528	5529	0.0506206995449551	0.0506206995449551
+6378	3432	5530	0.0954898525843842	0.0954898525843842
+6379	5530	1409	0.0985492973952367	0.0985492973952367
+6380	1409	5531	0.102140021124127	0.102140021124127
+6381	5531	3995	0.106588318724824	0.106588318724824
+6382	3995	5532	0.089989655098645	0.089989655098645
+6383	5532	5533	0.0940983975381981	0.0940983975381981
+6384	5533	3749	0.102559803256087	0.102559803256087
+6385	3749	5534	0.132377311804748	0.132377311804748
+6388	2028	5536	0.103552176267271	0.103552176267271
+6391	3402	5538	0.101285303038309	0.101285303038309
+6392	5538	5539	0.0982612440798091	0.0982612440798091
+6393	5539	5540	0.104203916508807	0.104203916508807
+6394	5540	5541	0.0994909347746214	0.0994909347746214
+6395	5541	5542	0.0496866830167122	0.0496866830167122
+6396	5542	1115	0.0483270289965061	0.0483270289965061
+6397	1115	5543	0.0505090974663915	0.0505090974663915
+6398	5543	5544	0.051466523607823	0.051466523607823
+6399	5544	5545	0.0509771831188889	0.0509771831188889
+18369	6894	6889	0.0506808956189271	0.0506808956189271
+6400	5545	3837	0.0484293465449961	0.0484293465449961
+6402	5546	5547	0.0572465530818606	0.0572465530818606
+6403	5547	4036	0.051041556606541	0.051041556606541
+6404	4036	5548	0.0609619584955507	0.0609619584955507
+6405	1878	4178	0.0543518295000293	0.0543518295000293
+6406	4178	5549	0.0885356562805968	0.0885356562805968
+6408	1863	2630	0.0954187587481574	0.0954187587481574
+6409	2630	2609	0.0942841337329746	0.0942841337329746
+6410	2609	5207	0.106776685868403	0.106776685868403
+6411	5207	5191	0.0702035466323056	0.0702035466323056
+6412	5191	5550	0.105689823753241	0.105689823753241
+6414	5551	5552	0.13548002915508	0.13548002915508
+6415	5552	5553	0.0682592832885596	0.0682592832885596
+6416	5553	19	0.0650116042038798	0.0650116042038798
+6417	19	2991	0.133631170313494	0.133631170313494
+6418	2991	5554	0.0524731372315077	0.0524731372315077
+6419	5554	1882	0.0490816557393864	0.0490816557393864
+6420	1882	5555	0.0508829391590993	0.0508829391590993
+6421	5555	5556	0.0494818870663145	0.0494818870663145
+6422	5556	5557	0.0511609921162368	0.0511609921162368
+6423	5557	5558	0.0498069369814246	0.0498069369814246
+6424	5558	5559	0.0494751154031395	0.0494751154031395
+6425	5559	5560	0.0510095826256232	0.0510095826256232
+18695	5978	4055	0.196460738141722	0.196460738141722
+6426	5560	5561	0.100658038986824	0.100658038986824
+6427	5561	5562	0.100189919501299	0.100189919501299
+6428	5562	5243	0.0999621826427635	0.0999621826427635
+6429	5243	5563	0.0514845629022423	0.0514845629022423
+6430	5563	5564	0.0509507800422364	0.0509507800422364
+6431	5564	5565	0.0506384299937204	0.0506384299937204
+6432	5565	5566	0.0502094012018427	0.0502094012018427
+6433	5566	5567	0.0352773306402212	0.0352773306402212
+6434	5567	1696	0.0663073245001768	0.0663073245001768
+6435	1696	5568	0.200475700974595	0.200475700974595
+6436	5568	2444	0.175243279627828	0.175243279627828
+6438	5569	5570	0.150878938410471	0.150878938410471
+6439	5570	5571	0.0520399442807291	0.0520399442807291
+6440	5571	5572	0.00805055351559969	0.00805055351559969
+6441	5572	5573	0.0547971824088202	0.0547971824088202
+6442	5573	5529	0.0419651880906561	0.0419651880906561
+6443	5529	5574	0.00738334312936163	0.00738334312936163
+6444	5574	5575	0.0892116998808573	0.0892116998808573
+6445	5575	5576	0.0587189734757016	0.0587189734757016
+6446	5576	5577	0.143444822058071	0.143444822058071
+6447	5577	5578	0.0305007791534936	0.0305007791534936
+6448	5578	5579	0.0181914980281834	0.0181914980281834
+6449	5579	5580	0.150469022298562	0.150469022298562
+6450	5580	5581	0.204922214354376	0.204922214354376
+6451	5581	5582	0.0983186744589269	0.0983186744589269
+6452	5582	1433	0.108782481382419	0.108782481382419
+6453	1433	5583	0.123482673613688	0.123482673613688
+6454	5583	5584	0.0754033254163114	0.0754033254163114
+6455	5584	5585	0.194791277181441	0.194791277181441
+6456	5585	5586	0.0533068649535537	0.0533068649535537
+6457	5586	2555	0.14827848293408	0.14827848293408
+6458	2555	5587	0.408042656170713	0.408042656170713
+6459	5588	5589	0.135112968623698	0.135112968623698
+6460	5589	5590	0.203702085134274	0.203702085134274
+6461	5590	5591	0.207620262278034	0.207620262278034
+6462	5591	4585	0.131035476997682	0.131035476997682
+6463	4585	5592	0.072769358589151	0.072769358589151
+6464	5592	5593	0.0625746572307696	0.0625746572307696
+6465	5593	5301	0.137225765514935	0.137225765514935
+6467	5594	5595	0.274145349571988	0.274145349571988
+6468	5595	5596	0.205443804135366	0.205443804135366
+6469	5596	5597	0.121926623756206	0.121926623756206
+6470	5597	5598	0.202580256912195	0.202580256912195
+6472	4361	5599	0.206258701511779	0.206258701511779
+6474	5600	5601	0.168149469233138	0.168149469233138
+6476	2625	5205	0.166253482314503	0.166253482314503
+6502	5622	5516	0.138783948073856	0.138783948073856
+6477	5205	5602	0.15603138237828	0.15603138237828
+6478	5602	5603	0.0341829476854199	0.0341829476854199
+6479	5603	5604	0.162233690102157	0.162233690102157
+6480	5604	5605	0.176890418224524	0.176890418224524
+6481	5605	5606	0.121703194532156	0.121703194532156
+6482	5606	5609	0.0547747917576354	0.0547747917576354
+6483	5609	5610	0.177274555583034	0.177274555583034
+6484	5610	5611	0.0562757523743122	0.0562757523743122
+6485	5611	5381	0.0971287684245127	0.0971287684245127
+6486	5381	5370	0.0242294178668139	0.0242294178668139
+6487	5370	5612	0.177146422666141	0.177146422666141
+6488	5612	5613	0.176947014024794	0.176947014024794
+6489	5613	5614	0.177715418603807	0.177715418603807
+6490	5614	5615	0.0918268918834614	0.0918268918834614
+6491	5615	5616	0.00795060277662081	0.00795060277662081
+6493	5617	5618	0.0159556400855116	0.0159556400855116
+6496	5619	5620	0.132547309025511	0.132547309025511
+6497	5620	1667	0.132931219459218	0.132931219459218
+6498	1667	5621	0.138273532739947	0.138273532739947
+6499	5621	2448	0.13601631946961	0.13601631946961
+6500	2448	3238	0.136726308588665	0.136726308588665
+6501	3238	5622	0.14083949408811	0.14083949408811
+6503	5516	5623	0.135704638458681	0.135704638458681
+6504	5623	5624	0.00588469429500613	0.00588469429500613
+6505	5624	5625	0.115900802279231	0.115900802279231
+6506	5625	5626	0.19877742240622	0.19877742240622
+6507	5626	110	0.101954628240396	0.101954628240396
+6508	110	2818	0.0990079626838536	0.0990079626838536
+6509	2818	1419	0.203073935940985	0.203073935940985
+6510	1419	5627	0.11954884298017	0.11954884298017
+6511	2917	5628	0.0366435746314918	0.0366435746314918
+6513	3710	5629	0.104723848956837	0.104723848956837
+6514	5629	5630	0.0524718119166661	0.0524718119166661
+6515	5630	5631	0.0523604583661445	0.0523604583661445
+6516	5631	963	0.102688945741692	0.102688945741692
+6519	2898	5632	0.0542316769914945	0.0542316769914945
+6520	5632	5633	0.0508977749431617	0.0508977749431617
+6521	5633	5634	0.106035617894042	0.106035617894042
+6522	5634	4734	0.104599442261749	0.104599442261749
+6524	5635	5399	0.0949731678048623	0.0949731678048623
+6525	5399	5636	0.053273863098243	0.053273863098243
+6526	5636	5637	0.0532054766684841	0.0532054766684841
+6527	5637	3901	0.105282590951624	0.105282590951624
+6528	3901	1038	0.105350981348288	0.105350981348288
+6530	5638	5639	0.103436146317209	0.103436146317209
+6531	5639	5004	0.104923546637106	0.104923546637106
+6532	5004	3324	0.10200854500581	0.10200854500581
+20515	10842	6731	0.00724303302685487	0.00724303302685487
+6533	3324	5640	0.105949384946318	0.105949384946318
+6534	5640	5641	0.102726616753478	0.102726616753478
+6535	5641	2075	0.105470656717315	0.105470656717315
+6536	2075	2672	0.106385362776241	0.106385362776241
+6537	2672	4122	0.107308593371936	0.107308593371936
+6538	4122	5642	0.107983920400391	0.107983920400391
+6539	5642	5643	0.0919555733248638	0.0919555733248638
+7832	6456	349	0.0697483782641925	0.0697483782641925
+6540	5643	5644	0.101410180701687	0.101410180701687
+6541	5644	3470	0.100777601888944	0.100777601888944
+6542	3470	5645	0.101863251928372	0.101863251928372
+6543	5645	3873	0.0981959903542781	0.0981959903542781
+6544	3873	849	0.100085165894781	0.100085165894781
+6546	1400	5646	0.00898751016812899	0.00898751016812899
+6547	5646	5647	0.190632434837625	0.190632434837625
+6548	5647	3388	0.011727623160982	0.011727623160982
+6549	3388	5648	0.0568259028608414	0.0568259028608414
+6550	5648	5649	0.00637619061562419	0.00637619061562419
+6551	5649	5650	0.0463019954871414	0.0463019954871414
+6552	5650	2800	0.0477133812275841	0.0477133812275841
+6553	2800	5651	0.0470719166287448	0.0470719166287448
+6554	5651	5652	0.0458325636837201	0.0458325636837201
+6555	5652	5653	0.046653544202397	0.046653544202397
+6556	5653	5654	0.0464726377537293	0.0464726377537293
+6557	5654	5655	0.0469344544346564	0.0469344544346564
+6558	5655	2751	0.046215112991852	0.046215112991852
+6559	2751	1096	0.0461039483088431	0.0461039483088431
+6560	1096	5656	0.0452023576254509	0.0452023576254509
+6561	5656	5657	0.0460150379661812	0.0460150379661812
+6562	5657	1539	0.0464321875423527	0.0464321875423527
+6563	1539	3855	0.0473472190950861	0.0473472190950861
+6565	4485	345	0.22138299033862	0.22138299033862
+6566	345	5661	0.163308085042962	0.163308085042962
+6567	5661	5662	0.065819748510902	0.065819748510902
+6568	5661	5663	0.0801840013229962	0.0801840013229962
+6569	3287	5665	0.0688755620206119	0.0688755620206119
+6570	5665	5666	0.0427865432685629	0.0427865432685629
+6571	5666	523	0.0741847082758752	0.0741847082758752
+6572	523	5667	0.0513515905827488	0.0513515905827488
+6573	5667	597	0.0787762757947461	0.0787762757947461
+6574	597	4825	0.152733980621547	0.152733980621547
+6576	2530	1931	0.0607754389242505	0.0607754389242505
+6578	5668	5669	0.20518077925237	0.20518077925237
+6580	5670	2976	0.052930873102536	0.052930873102536
+6582	5671	5672	0.0669604143503768	0.0669604143503768
+6583	5672	3722	0.0539771509338677	0.0539771509338677
+6584	3722	5673	0.103203771462203	0.103203771462203
+6585	5673	5674	0.175725539559539	0.175725539559539
+6587	5675	5676	0.204879915807757	0.204879915807757
+6588	5677	5678	0.00677682168687122	0.00677682168687122
+6589	5678	1665	0.0567234226799308	0.0567234226799308
+6590	1665	5679	0.122659531226911	0.122659531226911
+6592	5680	5681	0.862768870925976	0.862768870925976
+6593	5682	5683	0.164927546324728	0.164927546324728
+6594	5683	4367	0.0355730578333277	0.0355730578333277
+6595	4367	1448	0.193853665061985	0.193853665061985
+6596	1448	5688	0.205590441563944	0.205590441563944
+6598	5689	5690	0.100594816308247	0.100594816308247
+6599	5690	5691	0.0991234853564762	0.0991234853564762
+6601	5438	5692	0.211107914724763	0.211107914724763
+6602	5692	4415	0.193109246091061	0.193109246091061
+6603	4415	5693	0.226139344299967	0.226139344299967
+6606	4323	5694	0.0859068688818743	0.0859068688818743
+6608	5695	5696	0.0748977449692987	0.0748977449692987
+6609	5696	5073	0.0868839085552243	0.0868839085552243
+6610	5073	5333	0.0187220275557185	0.0187220275557185
+6612	5697	1590	0.201198112839976	0.201198112839976
+18141	10274	10269	0.134684266769083	0.134684266769083
+6613	1590	1640	0.20125093456728	0.20125093456728
+6615	5698	5699	0.200385663675414	0.200385663675414
+6617	5700	5701	0.196514919519562	0.196514919519562
+6618	5701	5248	0.110632746994	0.110632746994
+6619	5248	5702	0.0945616875172071	0.0945616875172071
+6620	5702	1685	0.205454867561864	0.205454867561864
+6621	1685	5703	0.206063854698429	0.206063854698429
+6622	5703	2430	0.199691165132387	0.199691165132387
+6623	2430	5704	0.202603259150386	0.202603259150386
+6625	4504	4050	0.176201016140026	0.176201016140026
+6626	4050	5707	0.173108439499024	0.173108439499024
+6628	1851	2587	0.179402678295732	0.179402678295732
+6630	5708	5709	0.275624196707738	0.275624196707738
+6632	5710	5711	0.261275347332411	0.261275347332411
+6634	5712	5713	0.0444779706577198	0.0444779706577198
+6635	5714	5715	0.183336097782058	0.183336097782058
+6636	5715	5716	0.203064462732684	0.203064462732684
+6638	5717	5718	0.153081250432522	0.153081250432522
+6639	5718	5719	0.011675447758709	0.011675447758709
+6641	1422	5720	0.117935613657917	0.117935613657917
+6643	5721	5722	0.194099197890973	0.194099197890973
+6644	5722	2542	0.201930616083342	0.201930616083342
+6645	2542	5723	0.411877202316789	0.411877202316789
+6646	5724	624	0.116891424974631	0.116891424974631
+6648	5725	5726	0.225973303098124	0.225973303098124
+6649	5726	3656	0.0613034024300807	0.0613034024300807
+6651	5727	5728	0.116763945302488	0.116763945302488
+6652	3634	5729	0.249262670016259	0.249262670016259
+6653	5729	5730	0.0886979206005476	0.0886979206005476
+6654	5730	5731	0.061003880318824	0.061003880318824
+6655	5731	3294	0.169569384240282	0.169569384240282
+6657	5730	5729	0.0886979206005476	0.0886979206005476
+18322	2543	7478	0.411854888798545	0.411854888798545
+6660	716	5733	0.106180030125168	0.106180030125168
+6661	5733	5734	0.0889628078792179	0.0889628078792179
+6663	5735	5736	0.0499420076759338	0.0499420076759338
+6664	5736	1132	0.0480445960055664	0.0480445960055664
+6665	1132	5737	0.0493807651843696	0.0493807651843696
+6666	5737	5738	0.0542607296398929	0.0542607296398929
+6667	5738	3848	0.102653360815707	0.102653360815707
+6668	3848	5739	0.0481952973910705	0.0481952973910705
+6669	5739	5570	0.0504068578554883	0.0504068578554883
+6671	5740	5741	0.102055279401325	0.102055279401325
+6672	5741	3933	0.103350213888063	0.103350213888063
+6675	5742	4200	0.0968208569301817	0.0968208569301817
+6676	4200	4193	0.0357662020116287	0.0357662020116287
+6677	4193	1067	0.0660115016724451	0.0660115016724451
+6678	1067	2520	0.0682249892032966	0.0682249892032966
+6679	2520	2503	0.0444235862340648	0.0444235862340648
+6680	2503	5743	0.0929237526477458	0.0929237526477458
+6681	5743	1230	0.097564382820973	0.097564382820973
+6682	1230	4808	0.0974618272678182	0.0974618272678182
+6683	4808	2175	0.100974351727253	0.100974351727253
+6685	5744	5745	0.139227813146129	0.139227813146129
+20421	10782	10783	0.171335167034037	0.171335167034037
+6686	5745	4628	0.122998125096167	0.122998125096167
+6687	4628	378	0.0772242252157125	0.0772242252157125
+6688	378	1257	0.0550380704812319	0.0550380704812319
+6689	1257	4543	0.132381944494249	0.132381944494249
+6690	4543	2715	0.0724896248395526	0.0724896248395526
+7972	6547	5411	0.11011441218455	0.11011441218455
+6691	2715	2699	0.0727973179644107	0.0727973179644107
+6692	2699	5748	0.121810190364873	0.121810190364873
+6696	5750	5751	0.00763183841002978	0.00763183841002978
+6697	5751	5752	0.692257458082336	0.692257458082336
+6698	2026	4672	0.134236367930218	0.134236367930218
+6699	4672	5753	0.102239429594337	0.102239429594337
+6700	5753	5754	0.100506379378587	0.100506379378587
+6702	5755	5756	0.2002287044093	0.2002287044093
+6704	5757	5758	0.173042563926175	0.173042563926175
+6706	5759	744	0.063721377479395	0.063721377479395
+6707	744	1562	0.141424652289019	0.141424652289019
+6708	1562	5760	0.139452228533295	0.139452228533295
+6709	5760	5761	0.121153404070921	0.121153404070921
+6710	5761	5762	0.0103214683330101	0.0103214683330101
+6711	5762	5763	0.04652452941841	0.04652452941841
+6712	5764	5765	0.155984788161682	0.155984788161682
+6716	5767	5768	0.200784793626825	0.200784793626825
+6743	3756	5769	0.0494129956173261	0.0494129956173261
+7994	6557	2764	0.0940480727939324	0.0940480727939324
+6717	5768	5772	0.846413211947238	0.846413211947238
+6718	5772	517	0.0606861281340196	0.0606861281340196
+6719	517	5773	0.188473310975888	0.188473310975888
+6721	5774	5775	0.0796153059223016	0.0796153059223016
+6722	5775	5776	0.00646390558051832	0.00646390558051832
+6723	5776	3007	0.1066159594542	0.1066159594542
+6724	3007	5777	0.100407769542541	0.100407769542541
+6725	5777	4393	0.00579135202620092	0.00579135202620092
+6726	4393	5778	0.102044175747327	0.102044175747327
+6727	5778	5779	0.107668499777307	0.107668499777307
+6728	5779	5780	0.108043382155599	0.108043382155599
+6729	5780	5781	0.101222003009649	0.101222003009649
+6730	5781	5782	0.103527244594317	0.103527244594317
+6733	5784	5785	0.0519740547318723	0.0519740547318723
+6734	5785	5786	0.0540518378903488	0.0540518378903488
+6735	5786	5787	0.105403398355375	0.105403398355375
+6736	5787	5788	0.0515636589786252	0.0515636589786252
+6737	5788	5789	0.0542361941294726	0.0542361941294726
+6738	5789	1159	0.0519632563805573	0.0519632563805573
+6739	1159	1609	0.055296326623055	0.055296326623055
+6742	5791	3756	0.0502859716725157	0.0502859716725157
+6744	5769	5792	0.0505152652453619	0.0505152652453619
+6745	5792	5793	0.0487326254633791	0.0487326254633791
+6746	5793	5794	0.0492772484970981	0.0492772484970981
+6747	5794	5795	0.0490197084274457	0.0490197084274457
+6748	5795	4008	0.0494402902066907	0.0494402902066907
+6749	4008	5796	0.0498144967732103	0.0498144967732103
+6750	5796	5797	0.0492676243070722	0.0492676243070722
+6751	5797	5798	0.0496699296957128	0.0496699296957128
+6752	5798	1392	0.0490530110641543	0.0490530110641543
+6753	1392	5799	0.0511729331725758	0.0511729331725758
+6755	5800	5801	0.0504747882864981	0.0504747882864981
+6756	5801	2540	0.0519704512694329	0.0519704512694329
+6758	5802	5803	0.0134893781959873	0.0134893781959873
+6759	5803	5804	0.0651761990637723	0.0651761990637723
+6760	5804	5805	0.00867856878189995	0.00867856878189995
+6761	5805	5806	0.145096674327765	0.145096674327765
+6762	5806	5807	0.146807263740651	0.146807263740651
+6763	5807	5808	0.0971857772299024	0.0971857772299024
+8041	6591	5218	0.10367384999594	0.10367384999594
+6766	5810	5811	0.146768415759705	0.146768415759705
+6768	1701	5812	0.0556890737408001	0.0556890737408001
+6769	5812	5813	0.0500299056894462	0.0500299056894462
+6770	5813	572	0.048773855210923	0.048773855210923
+6771	572	4985	0.0488849816155661	0.0488849816155661
+6772	4985	5815	0.0487728428614096	0.0487728428614096
+6773	5815	5816	0.0486567223604475	0.0486567223604475
+6774	5816	5817	0.0490027802416811	0.0490027802416811
+6775	5817	5819	0.0533578755133891	0.0533578755133891
+6776	5819	5820	0.0539390556466382	0.0539390556466382
+6778	5821	5822	0.0489941039004867	0.0489941039004867
+6780	3617	5823	0.0506292858836976	0.0506292858836976
+6781	5823	5824	0.0500724300001191	0.0500724300001191
+6782	5824	5825	0.0499880884355422	0.0499880884355422
+6783	5825	5099	0.0484306981291016	0.0484306981291016
+6784	5099	5826	0.0978349213689401	0.0978349213689401
+8066	6604	2108	0.411848469661871	0.411848469661871
+6786	3484	5827	0.0514683137992155	0.0514683137992155
+6787	5827	5828	0.0484135897290906	0.0484135897290906
+6789	5829	3698	0.0457527085543311	0.0457527085543311
+6790	3698	5705	0.0484471809833024	0.0484471809833024
+6791	5705	4572	0.0515108919391295	0.0515108919391295
+6792	4572	5830	0.105767692426024	0.105767692426024
+6793	5830	5831	0.0553912495449553	0.0553912495449553
+6794	5831	5832	0.0496407969110197	0.0496407969110197
+6795	5832	5833	0.0474198419855964	0.0474198419855964
+6796	5833	5834	0.0495588851512039	0.0495588851512039
+6797	5834	5835	0.0489032950107884	0.0489032950107884
+6798	5835	2741	0.0480512246257303	0.0480512246257303
+6800	5836	5232	0.0488850197079726	0.0488850197079726
+6801	5232	5837	0.0498079610709467	0.0498079610709467
+6802	5837	3174	0.0480709718129458	0.0480709718129458
+6803	3174	5838	0.0510747433773575	0.0510747433773575
+6804	5838	4999	0.0480555922075882	0.0480555922075882
+8084	6614	6615	0.0939591856631224	0.0939591856631224
+6805	4999	5839	0.0491139247433474	0.0491139247433474
+6806	5839	731	0.0513728158017048	0.0513728158017048
+18529	9525	9153	0.0559524577768326	0.0559524577768326
+6807	731	5840	0.100363141472313	0.100363141472313
+6810	4683	1528	0.0512242368793757	0.0512242368793757
+6811	1528	5087	0.0490096920376181	0.0490096920376181
+6812	5087	5841	0.0531197353238214	0.0531197353238214
+6813	5841	5011	0.0514391840217863	0.0514391840217863
+6814	5011	1747	0.0499193361712115	0.0499193361712115
+6815	1747	5608	0.0521168381912245	0.0521168381912245
+6816	5608	5842	0.0474458476070982	0.0474458476070982
+6817	5842	5449	0.0516188826793533	0.0516188826793533
+6818	5449	5428	0.0497563082276933	0.0497563082276933
+6819	5428	5390	0.0522374705433985	0.0522374705433985
+6820	5390	5843	0.0480447601658553	0.0480447601658553
+6822	5844	5845	0.0146913941785162	0.0146913941785162
+6823	5845	1699	0.184528247922268	0.184528247922268
+6824	1699	5846	0.0932680068963059	0.0932680068963059
+6825	5846	5847	0.0932852372069282	0.0932852372069282
+6826	5847	3120	0.098410300465854	0.098410300465854
+6827	3120	5848	0.0905968964383526	0.0905968964383526
+6828	5848	5849	0.19461602791519	0.19461602791519
+8104	239	6631	0.0428753899381976	0.0428753899381976
+6830	5850	5851	0.0206820775273506	0.0206820775273506
+6833	1635	5853	0.0933590693142476	0.0933590693142476
+6834	5853	5854	0.015431953306933	0.015431953306933
+6835	5854	4213	0.0860217230993429	0.0860217230993429
+6836	4213	5855	0.0995731813164872	0.0995731813164872
+6837	5855	192	0.102944368273924	0.102944368273924
+6838	192	2922	0.0977156398673512	0.0977156398673512
+6840	5305	1460	0.094441811393562	0.094441811393562
+6841	1460	5433	0.104542660065313	0.104542660065313
+6843	5856	1868	0.210287860037949	0.210287860037949
+6844	1868	4186	0.189585415099738	0.189585415099738
+6846	5432	5857	0.104903215241116	0.104903215241116
+6847	5857	5858	0.105720950651237	0.105720950651237
+6848	5858	5859	0.105743888331652	0.105743888331652
+6849	5859	4421	0.104252361029944	0.104252361029944
+6852	5861	5862	0.0519463280728807	0.0519463280728807
+6853	5862	5863	0.0520746976816124	0.0520746976816124
+6854	5863	5864	0.053223022054701	0.053223022054701
+6855	5864	4317	0.0510499917933612	0.0510499917933612
+8127	6232	6642	0.179146147134138	0.179146147134138
+6857	5865	4505	0.0514748271562017	0.0514748271562017
+6858	4505	3608	0.0515275362522861	0.0515275362522861
+6859	3608	5866	0.050240952107019	0.050240952107019
+6860	5866	5867	0.0507479546434346	0.0507479546434346
+6861	5867	5067	0.0521453287858806	0.0521453287858806
+6862	5067	5868	0.051338093574988	0.051338093574988
+6863	5868	5869	0.0516032507649761	0.0516032507649761
+6864	5869	5870	0.0504748368648883	0.0504748368648883
+6865	5870	5871	0.0517263613465763	0.0517263613465763
+6866	5871	5872	0.102624635673	0.102624635673
+6867	5872	3299	0.100255573957512	0.100255573957512
+6869	5873	5874	0.0663164411935832	0.0663164411935832
+6870	5874	5875	0.0488050085545576	0.0488050085545576
+6871	5875	5876	0.702184603750594	0.702184603750594
+6874	4525	5880	0.0113022768719971	0.0113022768719971
+6875	5880	5881	0.00806516295239482	0.00806516295239482
+6876	5881	5882	0.0293119532501538	0.0293119532501538
+6877	5882	5883	0.0236481545130312	0.0236481545130312
+6878	5883	5884	0.0171068759325808	0.0171068759325808
+6879	5884	5885	0.034181660212992	0.034181660212992
+6880	5885	5887	0.100387180512852	0.100387180512852
+6882	4433	5888	0.29159089003557	0.29159089003557
+6883	5888	4667	0.102395884967111	0.102395884967111
+6885	1334	1389	0.100271016747699	0.100271016747699
+6886	1389	5889	0.10737593920352	0.10737593920352
+6887	5889	5890	0.105882607972477	0.105882607972477
+6888	5890	4707	0.0969202900217867	0.0969202900217867
+6889	4707	5891	0.0993764614715991	0.0993764614715991
+6890	5891	5892	0.0973957865151901	0.0973957865151901
+6891	5892	5894	0.0203600085186263	0.0203600085186263
+6893	5697	5895	0.0355610028885881	0.0355610028885881
+6894	5895	5896	0.0640153359599377	0.0640153359599377
+6896	4960	5897	0.0913255616395888	0.0913255616395888
+6897	5897	766	0.157641216727225	0.157641216727225
+6898	766	5898	0.395381245817633	0.395381245817633
+6899	5898	5899	0.0981801741162947	0.0981801741162947
+6900	5899	5900	0.174689811260162	0.174689811260162
+6902	2304	156	0.331433636002878	0.331433636002878
+6903	156	1720	0.249409879986366	0.249409879986366
+6904	1720	5901	0.152027484629828	0.152027484629828
+6906	5902	5903	1.05455714042968	1.05455714042968
+6907	491	5904	0.0146888160266615	0.0146888160266615
+6908	5904	5905	0.0975979556077691	0.0975979556077691
+6910	5906	5907	0.0945117172125904	0.0945117172125904
+6911	5907	5908	0.096024253167286	0.096024253167286
+6913	1999	3359	0.0933322730569792	0.0933322730569792
+6914	3359	2753	0.0957031890234733	0.0957031890234733
+6915	2753	5909	0.0964098595755736	0.0964098595755736
+6916	5909	2279	0.103797892128295	0.103797892128295
+6917	2279	3601	0.0979307072208472	0.0979307072208472
+6918	3601	5910	0.101687049589159	0.101687049589159
+6919	5910	2134	0.103076736979193	0.103076736979193
+6920	2134	5911	0.0994872973933105	0.0994872973933105
+6921	5911	5912	0.098205073412404	0.098205073412404
+6944	5930	5931	0.00713304879374381	0.00713304879374381
+6922	5912	5913	1.00880972234204	1.00880972234204
+6923	5914	3921	0.0830806742363044	0.0830806742363044
+6924	3921	1014	0.0989804018365723	0.0989804018365723
+6925	1014	5915	0.0998222515540108	0.0998222515540108
+6926	5915	5916	0.104139822117371	0.104139822117371
+6927	5916	5023	0.0793768943130485	0.0793768943130485
+6929	5917	5918	0.112165266092601	0.112165266092601
+6930	5918	5919	0.108065845165718	0.108065845165718
+6931	5919	5920	0.0537421133423824	0.0537421133423824
+6932	5920	5921	0.0547683090118863	0.0547683090118863
+6933	5921	5922	0.0617512871216813	0.0617512871216813
+6934	5922	5923	0.0505486132029595	0.0505486132029595
+6935	5923	5924	0.0485674117985671	0.0485674117985671
+6936	5924	5925	0.00910751947845144	0.00910751947845144
+6937	5925	3160	0.040672974998317	0.040672974998317
+6938	3160	5926	0.0119123696733134	0.0119123696733134
+6939	5926	5927	0.0422638247579918	0.0422638247579918
+6940	5927	5928	0.00946046354749371	0.00946046354749371
+6941	5928	4978	0.0392608349230605	0.0392608349230605
+6942	4978	5929	0.00830374951839601	0.00830374951839601
+6943	5929	5930	0.04322033436118	0.04322033436118
+12307	8642	8643	0.0298175315684779	0.0298175315684779
+6945	5931	5932	0.0454758802600548	0.0454758802600548
+6946	5932	5933	0.0473060152011751	0.0473060152011751
+6947	5933	5934	0.0496187677804403	0.0496187677804403
+6948	5934	5935	0.0504477908402203	0.0504477908402203
+6949	5935	5050	0.0515402266931002	0.0515402266931002
+6950	5050	5687	0.0468197679026621	0.0468197679026621
+6953	5453	982	0.0502364246424336	0.0502364246424336
+6954	982	5937	0.0968891441459385	0.0968891441459385
+6955	5937	5938	0.0503259455718068	0.0503259455718068
+6956	5938	5939	0.0502893520356679	0.0502893520356679
+6957	5939	3129	0.0485573864514234	0.0485573864514234
+6958	3129	5117	0.0498372694791184	0.0498372694791184
+6959	5117	5941	0.0493022558846739	0.0493022558846739
+6960	5941	4716	0.0507626244890517	0.0507626244890517
+6961	4716	5942	0.142284142826663	0.142284142826663
+6963	5943	5944	0.01393899602166	0.01393899602166
+6964	5944	5945	0.364458473389243	0.364458473389243
+6965	5945	5946	0.0993153072226578	0.0993153072226578
+6966	5946	5947	0.101492282005104	0.101492282005104
+6967	5947	5948	0.101164116161519	0.101164116161519
+6968	5948	5949	0.102917574680079	0.102917574680079
+6969	5949	5950	0.099000654458151	0.099000654458151
+6970	5950	5951	0.102683540906436	0.102683540906436
+6972	5952	5145	0.0645729302199529	0.0645729302199529
+6973	5145	2119	0.0381578888853594	0.0381578888853594
+6975	5953	5954	0.100685153983508	0.100685153983508
+6976	5954	5955	0.195476970380349	0.195476970380349
+6978	5511	5956	0.144816938742182	0.144816938742182
+6979	5956	2899	0.0164641943336492	0.0164641943336492
+6981	5957	5776	0.0786471324555583	0.0786471324555583
+6982	5776	5958	0.142074016754489	0.142074016754489
+6984	5959	5960	0.119153206354199	0.119153206354199
+6985	5960	5961	0.0270871445537288	0.0270871445537288
+6986	5961	5962	0.145839788109516	0.145839788109516
+6987	5962	5963	0.00712354730707594	0.00712354730707594
+6988	5963	5964	0.140131025523345	0.140131025523345
+6989	5964	5965	0.140225597174846	0.140225597174846
+6990	5965	4943	0.0161740048379517	0.0161740048379517
+6992	5354	5966	0.0365984296224293	0.0365984296224293
+8275	6722	2311	0.00867549185460531	0.00867549185460531
+6993	5966	5967	0.107476511645453	0.107476511645453
+6994	5967	5968	0.147256677185358	0.147256677185358
+6995	5968	5969	0.146721278462678	0.146721278462678
+6996	5969	5361	0.147170892096024	0.147170892096024
+6997	5361	2684	0.148391053722383	0.148391053722383
+6999	5970	807	0.0217813759552713	0.0217813759552713
+7001	5971	4332	0.0931508534748433	0.0931508534748433
+7002	4332	5038	0.0953468172233397	0.0953468172233397
+7004	5972	5857	0.176936009900748	0.176936009900748
+7005	5857	1300	0.178425403895618	0.178425403895618
+7006	1300	5973	0.247668336727678	0.247668336727678
+7008	5974	5975	0.19695744936537	0.19695744936537
+7010	1502	4378	0.103568243200344	0.103568243200344
+7012	5976	2341	0.175343347413509	0.175343347413509
+7013	2341	5977	0.176971375987128	0.176971375987128
+7014	5977	4784	0.243234077821538	0.243234077821538
+7015	4784	5979	0.240492752461347	0.240492752461347
+7016	5979	5980	0.0330257004550899	0.0330257004550899
+7017	5980	5981	0.271622774119548	0.271622774119548
+7018	5981	5982	0.132843712894559	0.132843712894559
+7020	5983	5984	0.0865708728240205	0.0865708728240205
+7021	5984	5985	0.115162845747273	0.115162845747273
+7023	758	5986	0.228351368086018	0.228351368086018
+7026	5146	5157	0.0344312485594002	0.0344312485594002
+7027	5157	5953	0.0793791794144798	0.0793791794144798
+7028	5953	2240	0.201141072863101	0.201141072863101
+7029	2240	4913	0.204101361959596	0.204101361959596
+7031	5988	5989	0.202410682591791	0.202410682591791
+7032	5989	5990	0.204104998697393	0.204104998697393
+7033	5990	689	0.195952399265096	0.195952399265096
+7034	689	1980	0.165723809852799	0.165723809852799
+7035	1980	1965	0.0389234534803582	0.0389234534803582
+7036	1965	5991	0.211595737081182	0.211595737081182
+7037	5991	2477	0.19787541766453	0.19787541766453
+7039	5911	5992	0.199600309761125	0.199600309761125
+7040	5992	802	0.200311937766574	0.200311937766574
+7041	802	5993	0.204076160777324	0.204076160777324
+7042	5993	5994	0.207502868601311	0.207502868601311
+7043	5994	5995	0.201507936335064	0.201507936335064
+18161	10256	2170	0.118696748630409	0.118696748630409
+7044	5995	3065	0.198422916856477	0.198422916856477
+7045	3065	5996	0.187785068593932	0.187785068593932
+7048	5998	1151	0.103522476706234	0.103522476706234
+7049	1151	5999	0.201885859106491	0.201885859106491
+7050	5999	2774	0.203030941446461	0.203030941446461
+7051	2774	6000	0.200151361396455	0.200151361396455
+7053	4375	2856	0.142504312909228	0.142504312909228
+7054	2856	6001	0.0983652484533134	0.0983652484533134
+7055	6001	6002	0.0964239306891795	0.0964239306891795
+7056	6002	6003	0.098310599923513	0.098310599923513
+7057	6003	1761	0.137700629072643	0.137700629072643
+7058	1761	6004	0.100513600298964	0.100513600298964
+7059	6004	3822	0.0995871831820294	0.0995871831820294
+7060	3822	5898	0.137360760654976	0.137360760654976
+7061	5898	6005	0.132447355715672	0.132447355715672
+7063	1597	1654	0.133194225128182	0.133194225128182
+7064	1654	6006	0.125247640008909	0.125247640008909
+7065	6006	4209	0.0896990215886268	0.0896990215886268
+7067	6007	200	0.0969312782671765	0.0969312782671765
+7069	6008	6009	0.237519218216988	0.237519218216988
+7071	6010	700	0.202130694041649	0.202130694041649
+7072	700	6011	0.200920157017241	0.200920157017241
+7074	1752	6012	0.41064210801689	0.41064210801689
+7076	6013	898	0.069285729612221	0.069285729612221
+7079	5168	6014	0.173942254032852	0.173942254032852
+7080	6014	2356	0.178647695597581	0.178647695597581
+7081	2356	4157	0.173431342052579	0.173431342052579
+7082	4157	4744	0.174265758482508	0.174265758482508
+7083	4744	6015	0.17586665041424	0.17586665041424
+7084	6015	6017	0.166030537226764	0.166030537226764
+7085	6017	1206	0.168368552768231	0.168368552768231
+7086	1206	6018	0.0222310506019077	0.0222310506019077
+7087	6018	3777	0.199517083270274	0.199517083270274
+7088	3777	6019	0.15332994885881	0.15332994885881
+7089	6019	956	0.176955920540622	0.176955920540622
+7090	956	6020	0.174665514088028	0.174665514088028
+7091	6020	4894	0.161958937862416	0.161958937862416
+7092	4894	6021	0.18390531780345	0.18390531780345
+7093	6021	5492	0.174079428498661	0.174079428498661
+7094	5492	6022	0.20029370655809	0.20029370655809
+7096	3037	6023	0.213499262828813	0.213499262828813
+7098	3578	5645	0.141952777714747	0.141952777714747
+8369	876	4464	0.138360134725968	0.138360134725968
+7100	4359	4350	0.0475473932483631	0.0475473932483631
+7101	4350	1533	0.0507609705805194	0.0507609705805194
+7102	1533	6024	0.087689125787215	0.087689125787215
+7103	6024	3036	0.0935380351023268	0.0935380351023268
+7105	2396	6026	0.14381066174273	0.14381066174273
+7107	1270	4534	0.202622361744701	0.202622361744701
+7108	4534	6027	0.199229442979025	0.199229442979025
+7110	6028	6029	0.912875631293974	0.912875631293974
+7112	1075	2498	0.0816070075181441	0.0816070075181441
+7113	2498	6030	0.0415787253165096	0.0415787253165096
+7114	6030	6031	0.0433303737265817	0.0433303737265817
+7116	6032	6033	0.0508682336735258	0.0508682336735258
+7117	6033	1215	0.0487831269807967	0.0487831269807967
+7118	1215	6034	0.0505678656124617	0.0505678656124617
+7119	6034	4787	0.0490298276079548	0.0490298276079548
+7120	4787	6035	0.0502099740409632	0.0502099740409632
+7121	6035	2168	0.0503125854793333	0.0503125854793333
+7122	2168	6036	0.0482434584483166	0.0482434584483166
+17215	8403	8420	0.200752773596098	0.200752773596098
+7123	6036	6037	0.0486536038515005	0.0486536038515005
+7125	6038	6039	0.0499795151912972	0.0499795151912972
+7126	6039	6040	0.0491412278477837	0.0491412278477837
+7127	6040	6041	0.0497771068440158	0.0497771068440158
+7128	6041	6042	0.0494653664650395	0.0494653664650395
+7129	6042	4660	0.0491491990718702	0.0491491990718702
+7130	4660	6043	0.0497609288638681	0.0497609288638681
+7131	6043	1290	0.0489747324983769	0.0489747324983769
+7133	6044	4562	0.0495973986652376	0.0495973986652376
+7134	4562	6045	0.0489640905184848	0.0489640905184848
+7135	6045	6046	0.0491691479666822	0.0491691479666822
+7136	6046	6047	0.0507578186257211	0.0507578186257211
+7137	6047	2730	0.0500913644840885	0.0500913644840885
+7138	2730	6048	0.0486937991070737	0.0486937991070737
+7139	6048	6049	0.0563508416708434	0.0563508416708434
+7140	6049	6050	0.0543668616299433	0.0543668616299433
+7141	6050	3755	0.049786406684993	0.049786406684993
+7142	3755	6051	0.0495857892809515	0.0495857892809515
+7143	6051	6052	0.0496881410470813	0.0496881410470813
+7144	6052	6053	0.0491149994031363	0.0491149994031363
+18545	5563	7539	0.0787059485791879	0.0787059485791879
+7145	6053	6054	0.0498540025598143	0.0498540025598143
+7146	6054	6055	0.0489875409651698	0.0489875409651698
+7147	6055	4007	0.0499802866726516	0.0499802866726516
+7148	4007	6056	0.0488162842829032	0.0488162842829032
+7149	6056	6057	0.0489359547659716	0.0489359547659716
+7150	6057	6058	0.0509862761511403	0.0509862761511403
+7151	6058	1391	0.0507897478531174	0.0507897478531174
+7152	1391	6059	0.0484575520219378	0.0484575520219378
+7154	6060	6061	0.051268887373703	0.051268887373703
+7155	6061	3440	0.0523540538479921	0.0523540538479921
+7156	3440	6062	0.0526542821957606	0.0526542821957606
+7157	6062	5722	0.0500652354639954	0.0500652354639954
+7158	5722	6063	0.0491749564449066	0.0491749564449066
+7159	6063	6064	0.0490553316653512	0.0490553316653512
+7160	6064	6065	0.0504053225202572	0.0504053225202572
+7161	6065	6066	0.0491577785316978	0.0491577785316978
+7162	6066	6067	0.0500917004504544	0.0500917004504544
+7163	6067	6068	0.0487330457346556	0.0487330457346556
+7164	6068	6069	0.0500468552276867	0.0500468552276867
+7165	6069	1089	0.0473039342434908	0.0473039342434908
+7166	1089	6070	0.0519349767204956	0.0519349767204956
+7167	6070	6071	0.0483547253107021	0.0483547253107021
+7169	6072	3860	0.0495593243927177	0.0495593243927177
+7170	3860	6073	0.0493012970703545	0.0493012970703545
+7171	6073	5585	0.0529959751032204	0.0529959751032204
+7173	1003	5222	0.108094382628624	0.108094382628624
+7175	6074	3213	0.169273308004073	0.169273308004073
+7176	3213	6075	0.200540081035548	0.200540081035548
+7177	6075	1924	0.199718283006537	0.199718283006537
+7178	1924	6076	0.202212418704144	0.202212418704144
+7179	6076	3268	0.201184980777767	0.201184980777767
+7180	3268	6077	0.201398824177077	0.201398824177077
+7181	6077	81	0.202519482529809	0.202519482529809
+7182	81	3517	0.205035908609294	0.205035908609294
+7183	3517	4259	0.201561198640626	0.201561198640626
+7184	4259	6078	0.201877222241407	0.201877222241407
+7185	6078	6079	0.198020897047098	0.198020897047098
+7186	6079	5828	0.204359521871182	0.204359521871182
+7187	5828	6080	0.203452288011347	0.203452288011347
+7188	6080	6081	0.199577893436046	0.199577893436046
+7189	6082	4198	0.0554105901874734	0.0554105901874734
+8462	1578	6834	0.296770354889592	0.296770354889592
+7190	4198	6083	0.479532197769768	0.479532197769768
+7193	6085	3417	0.199987779646285	0.199987779646285
+7195	5561	6086	0.0785728419075768	0.0785728419075768
+7196	6086	6087	0.711200705359908	0.711200705359908
+7197	6088	6089	0.0569381576865727	0.0569381576865727
+7199	1755	4797	0.0569796757564415	0.0569796757564415
+7200	4797	6090	0.0568688820659326	0.0568688820659326
+7201	6090	2163	0.0576467707798926	0.0576467707798926
+7202	2163	6091	0.115287318699314	0.115287318699314
+7204	4029	6092	0.199820514844545	0.199820514844545
+7205	6092	3413	0.201407533266255	0.201407533266255
+7207	6093	6094	0.0604203300865654	0.0604203300865654
+7208	6094	6095	0.0494745769978518	0.0494745769978518
+7209	6095	6096	0.0926701881064251	0.0926701881064251
+7210	6096	4028	0.05825540400242	0.05825540400242
+7212	5558	6097	0.589453817263917	0.589453817263917
+7213	111	6098	0.0840698350347185	0.0840698350347185
+7214	6098	5387	0.102649580636379	0.102649580636379
+7216	6099	4834	0.0618019179836103	0.0618019179836103
+7217	4834	6100	0.103506880889302	0.103506880889302
+7218	6100	6101	0.102436270515026	0.102436270515026
+7219	6101	6102	0.0462582791506537	0.0462582791506537
+7221	5388	6103	0.0951666989097628	0.0951666989097628
+7222	6103	6104	0.103533109860882	0.103533109860882
+17793	6179	8402	0.062258154453335	0.062258154453335
+7223	6104	6105	1.01266363478673	1.01266363478673
+7226	6107	6108	0.0985711721031886	0.0985711721031886
+7227	6108	6109	0.106459269312792	0.106459269312792
+7228	6109	6110	0.106833918076069	0.106833918076069
+7229	6110	3622	0.0989181087898918	0.0989181087898918
+7230	3622	6111	0.098886772683552	0.098886772683552
+7231	6111	6112	0.0498651872917774	0.0498651872917774
+7232	6112	6113	0.0465544361472323	0.0465544361472323
+7233	6113	6114	0.048644459525012	0.048644459525012
+7234	6114	1769	0.0504837415599517	0.0504837415599517
+7235	1769	4488	0.0559949291466801	0.0559949291466801
+7236	4488	6115	0.0469382916231929	0.0469382916231929
+7237	6115	4839	0.0486148679353184	0.0486148679353184
+7239	1519	5280	0.0508144170388461	0.0508144170388461
+7240	5280	6116	0.0496680994860777	0.0496680994860777
+7241	6116	1086	0.0854394240121282	0.0854394240121282
+7244	6118	5426	0.102968153598516	0.102968153598516
+7245	5426	6119	0.101169119900675	0.101169119900675
+7246	6119	2048	0.10059076820208	0.10059076820208
+7247	2048	6120	0.0997250287478783	0.0997250287478783
+7248	6120	6121	0.100591265363907	0.100591265363907
+7249	6121	6122	0.0474195280765072	0.0474195280765072
+7250	6122	3477	0.0495243305794908	0.0495243305794908
+7251	3477	6123	0.0472960657562571	0.0472960657562571
+7252	6123	6075	0.0518212274102399	0.0518212274102399
+7253	6075	6124	0.0477720158174774	0.0477720158174774
+7254	6124	3692	0.0491494225474026	0.0491494225474026
+7255	3692	6125	0.0492733746042409	0.0492733746042409
+7256	6125	4567	0.0513179295413005	0.0513179295413005
+7257	4567	6126	0.104996585237884	0.104996585237884
+7259	6127	6128	0.202552708883543	0.202552708883543
+7260	6128	6129	0.200575382409089	0.200575382409089
+7261	6129	6130	0.200851528697639	0.200851528697639
+7263	6131	4042	0.178407205955933	0.178407205955933
+7264	4042	6132	0.176658257473219	0.176658257473219
+7265	6132	6133	0.173893747367395	0.173893747367395
+7266	6133	1832	0.00321363581065808	0.00321363581065808
+7267	1832	6134	0.0979518830790181	0.0979518830790181
+7268	6134	2577	0.0768544895315019	0.0768544895315019
+7270	2974	713	0.0553033256449361	0.0553033256449361
+7271	713	1884	0.049816225531446	0.049816225531446
+7272	1884	269	0.0489259588819734	0.0489259588819734
+7273	269	6135	0.049929244786193	0.049929244786193
+7274	6135	6095	0.0608968307992014	0.0608968307992014
+7276	1819	6136	0.206807888451467	0.206807888451467
+7278	6137	6138	0.137211297869344	0.137211297869344
+7280	6139	4576	0.0888580713995718	0.0888580713995718
+7281	4576	6140	0.134023429450374	0.134023429450374
+7282	6140	5292	0.135037120828343	0.135037120828343
+7283	5292	6141	0.134292125855752	0.134292125855752
+7285	11	6142	0.134290112908847	0.134290112908847
+7286	6142	6143	0.134379347336523	0.134379347336523
+7287	6143	6144	0.135319045428869	0.135319045428869
+7288	6144	6145	0.133823509557072	0.133823509557072
+7289	6145	6146	0.133595456488811	0.133595456488811
+7290	6146	6147	0.132813208199385	0.132813208199385
+7291	6147	6148	0.135903166352965	0.135903166352965
+7293	6149	5532	0.117263436099258	0.117263436099258
+7294	5532	6150	0.292646155170772	0.292646155170772
+7296	4069	6054	0.143532163506992	0.143532163506992
+7297	6054	5794	0.200517814130868	0.200517814130868
+7299	6151	6152	0.134234537479531	0.134234537479531
+7300	6152	2491	0.134965193585355	0.134965193585355
+7301	2491	2836	0.132191750515313	0.132191750515313
+7303	2760	6153	0.17786816992516	0.17786816992516
+7304	6153	3104	0.174733256162163	0.174733256162163
+7305	3104	6156	0.194828104098244	0.194828104098244
+7307	62	3549	0.192897189560382	0.192897189560382
+7309	191	5855	0.144500472019434	0.144500472019434
+7313	1335	6158	0.164940728280041	0.164940728280041
+7315	3709	719	0.105637457999026	0.105637457999026
+7317	3184	6159	0.175088076753778	0.175088076753778
+7318	6159	91	0.0479220492178455	0.0479220492178455
+7319	91	3527	0.203258724621779	0.203258724621779
+7320	3527	6160	0.201096029386997	0.201096029386997
+7321	6160	6161	0.201913621123293	0.201913621123293
+7323	6162	5834	0.203525395170747	0.203525395170747
+7324	5834	6163	0.200952914390398	0.200952914390398
+7326	3276	3651	0.182839298131176	0.182839298131176
+7329	6166	4285	0.103763551261197	0.103763551261197
+7331	1617	6167	0.103830241851319	0.103830241851319
+7333	6168	2159	0.117895446926253	0.117895446926253
+7334	2159	4795	0.11289998607803	0.11289998607803
+7335	4795	1226	0.113625921506999	0.113625921506999
+7337	4401	4400	0.117696624021516	0.117696624021516
+7341	2320	4278	0.147648925220672	0.147648925220672
+7342	4278	6174	0.145039413918761	0.145039413918761
+7343	6174	633	0.147839808469135	0.147839808469135
+7344	633	5324	0.144274087604939	0.144274087604939
+7345	5324	2036	0.144878759704946	0.144878759704946
+7346	2036	6175	0.146765627629388	0.146765627629388
+7347	6175	5506	0.146988764364424	0.146988764364424
+7349	4458	6176	0.146285529633972	0.146285529633972
+7350	6176	6177	0.143815084290611	0.143815084290611
+7351	6177	6178	0.149072223288683	0.149072223288683
+7352	6178	6179	0.102502676747671	0.102502676747671
+7353	6179	6180	0.0433701075577025	0.0433701075577025
+7354	6180	6181	0.146972104646326	0.146972104646326
+7355	6181	6182	0.147344314502621	0.147344314502621
+7356	6182	6183	0.145754933885852	0.145754933885852
+7357	6183	6184	0.147948446924155	0.147948446924155
+7358	6184	6185	0.145005273136899	0.145005273136899
+7359	6185	6186	0.141478743986661	0.141478743986661
+7360	6186	5784	0.0051191432185562	0.0051191432185562
+7361	5784	6187	0.145606807182671	0.145606807182671
+7362	6187	6188	0.145777030768037	0.145777030768037
+7363	6188	6189	0.147177496711371	0.147177496711371
+7365	999	4221	0.0806091686632927	0.0806091686632927
+7366	4221	6190	0.102381971527348	0.102381971527348
+7367	6190	6193	0.0984965085324321	0.0984965085324321
+7368	6193	969	0.0952400858484175	0.0952400858484175
+7369	969	6194	0.0506536388127553	0.0506536388127553
+7370	6194	5287	0.0506057613654141	0.0506057613654141
+7371	5287	3152	0.0954510374534177	0.0954510374534177
+7372	3152	4968	0.0960843478924756	0.0960843478924756
+7373	4968	6195	0.0415654887010154	0.0415654887010154
+15921	9749	9750	0.0318908811678005	0.0318908811678005
+7401	6213	6214	0.0495719593537107	0.0495719593537107
+7374	335	340	0.288826145863276	0.288826145863276
+7378	519	6197	0.0784497798176465	0.0784497798176465
+7379	6197	6198	0.0395399248279629	0.0395399248279629
+7380	6198	6199	0.019955626672929	0.019955626672929
+7382	6200	6201	0.0919482301684137	0.0919482301684137
+7383	6201	6202	0.111020276961071	0.111020276961071
+7385	4485	6203	0.0919528384362936	0.0919528384362936
+7386	6203	4199	0.0670783480641165	0.0670783480641165
+7387	4199	6204	0.129739883939344	0.129739883939344
+7388	6204	6083	0.021522983414344	0.021522983414344
+7390	1820	6205	0.059780784078693	0.059780784078693
+7391	6205	6206	0.0520794903588436	0.0520794903588436
+7392	6206	6207	0.0535277276856965	0.0535277276856965
+7393	6207	6208	0.052616435606338	0.052616435606338
+7395	6209	6210	0.054197774205049	0.054197774205049
+7396	6210	600	0.122572832169608	0.122572832169608
+7397	600	6211	0.0472521628905724	0.0472521628905724
+7398	6211	5708	0.0430357389006543	0.0430357389006543
+7399	5708	6212	0.0495085394583916	0.0495085394583916
+7400	6212	6213	0.0462483397604104	0.0462483397604104
+7402	6214	6215	0.0428153220943109	0.0428153220943109
+7403	6215	6216	0.0471000262746752	0.0471000262746752
+7404	6216	6217	0.0473822229177533	0.0473822229177533
+7405	6217	1100	0.091970261814681	0.091970261814681
+7406	1100	6218	0.0449415553049736	0.0449415553049736
+7407	6218	6219	0.0480654852744355	0.0480654852744355
+7408	6219	6221	0.0454218674668918	0.0454218674668918
+7409	6221	3858	0.0463369187822574	0.0463369187822574
+7410	3858	6222	0.0463493111972249	0.0463493111972249
+7411	6222	5594	0.0512843332286284	0.0512843332286284
+7412	5594	6223	0.0568069326737853	0.0568069326737853
+7413	6223	6224	0.0525700432289869	0.0525700432289869
+7414	6224	6225	0.0976339163821139	0.0976339163821139
+7439	6242	6243	0.0662881511283164	0.0662881511283164
+7415	6225	6226	0.598121759063317	0.598121759063317
+7416	3855	6227	0.0533569775705536	0.0533569775705536
+7417	6227	5550	0.054545728952838	0.054545728952838
+7419	6228	6229	0.0491582246006862	0.0491582246006862
+7420	6229	6230	0.632851875022697	0.632851875022697
+7421	4649	6231	0.0998318489902405	0.0998318489902405
+7423	3956	6232	0.132968901609209	0.132968901609209
+7424	6232	6233	0.0436348818689085	0.0436348818689085
+7425	6233	6234	0.0454822742996404	0.0454822742996404
+7426	6234	6235	0.049945575036802	0.049945575036802
+7427	6235	6236	0.0503304157761669	0.0503304157761669
+7428	6236	6237	0.0508263629674458	0.0508263629674458
+7429	6237	4952	0.0505868421691217	0.0505868421691217
+7430	4952	4681	0.10191805721873	0.10191805721873
+7431	4681	6238	0.099594470461032	0.099594470461032
+7432	6238	6239	0.057251122773958	0.057251122773958
+7433	6239	6240	0.108863184827896	0.108863184827896
+7434	6240	5092	0.0381385955203522	0.0381385955203522
+7435	5092	5227	0.108194428858344	0.108194428858344
+7437	5219	6241	0.0418231546106276	0.0418231546106276
+7438	6241	6242	0.0122130870650471	0.0122130870650471
+7442	1601	1657	0.147607723017958	0.147607723017958
+7444	5765	6244	0.238854062350574	0.238854062350574
+7445	6244	5899	0.278312459096762	0.278312459096762
+7446	5899	1600	0.0794217837629518	0.0794217837629518
+7448	4405	4957	0.275380198668453	0.275380198668453
+7450	4315	4502	0.0962009886521744	0.0962009886521744
+7451	4502	6245	0.0998685092157526	0.0998685092157526
+7452	6245	5078	0.0969948238046964	0.0969948238046964
+7453	5078	6246	0.102086344844989	0.102086344844989
+7454	6246	6247	0.102069890156656	0.102069890156656
+7455	6247	6248	0.0998684901150858	0.0998684901150858
+7456	6248	6249	0.099157147424293	0.099157147424293
+7457	6249	6250	0.0998927126402804	0.0998927126402804
+7459	4376	2857	0.174778525570848	0.174778525570848
+7461	1656	6251	0.113089099397014	0.113089099397014
+7462	6251	4210	0.0895877408394824	0.0895877408394824
+7463	4210	6252	0.0984078699260149	0.0984078699260149
+7464	6252	202	0.0984164433029134	0.0984164433029134
+7465	202	2930	0.0999116533304243	0.0999116533304243
+7467	5311	1467	0.0969591422712861	0.0969591422712861
+7468	1467	5446	0.104331765041419	0.104331765041419
+7470	6253	6254	0.108544830855141	0.108544830855141
+7471	6254	6255	0.0440614876081187	0.0440614876081187
+7472	6255	6256	0.10258169252724	0.10258169252724
+7473	6256	6257	0.0426791560290334	0.0426791560290334
+7474	6257	1181	0.0541704333597994	0.0541704333597994
+7476	6258	5341	0.664349456749629	0.664349456749629
+7480	1556	736	0.1281317837441	0.1281317837441
+7482	6260	6261	0.0586102720745076	0.0586102720745076
+7484	1188	6262	0.0214828666370953	0.0214828666370953
+7485	6262	3789	0.199388923153335	0.199388923153335
+7486	3789	5915	0.154872293830304	0.154872293830304
+7487	5915	6263	0.0506492890867135	0.0506492890867135
+7488	6264	2248	0.0665325760000431	0.0665325760000431
+7489	2248	4881	0.176090081583566	0.176090081583566
+7490	4881	6265	0.19613430259676	0.19613430259676
+7491	6265	5479	0.175348484443179	0.175348484443179
+7492	5479	6266	0.176845636908204	0.176845636908204
+7493	6266	6267	0.178089834743743	0.178089834743743
+7494	6267	676	0.00240181041514711	0.00240181041514711
+7495	676	6268	0.00459391026290071	0.00459391026290071
+7496	6268	6269	0.174858851790528	0.174858851790528
+7497	6269	4598	0.173764465207871	0.173764465207871
+7500	6270	6271	0.133612621428605	0.133612621428605
+7501	6271	6272	0.00412533177852682	0.00412533177852682
+7502	6272	6273	0.00367565176707242	0.00367565176707242
+7503	6273	6274	0.134146296121319	0.134146296121319
+20534	10849	10832	0.00532626442143788	0.00532626442143788
+7504	6274	6275	0.138338671785307	0.138338671785307
+7505	6275	829	0.140763564032817	0.140763564032817
+7506	829	3569	0.13985476308825	0.13985476308825
+7507	3569	5638	0.139885286720423	0.139885286720423
+7508	5638	4342	0.139394668795268	0.139394668795268
+7509	4342	6276	0.136887040523289	0.136887040523289
+7510	6276	3042	0.135179672321338	0.135179672321338
+7511	3042	6277	0.141328751765533	0.141328751765533
+7512	6277	6278	0.0048613905607292	0.0048613905607292
+7513	6278	6279	0.138461653724603	0.138461653724603
+7514	6279	1163	0.137550674895164	0.137550674895164
+7515	1163	883	0.14127337175944	0.14127337175944
+7516	883	4468	0.137815416161984	0.137815416161984
+7517	4468	2790	0.135224582480649	0.135224582480649
+7518	2790	5258	0.130698751805084	0.130698751805084
+7519	5258	6280	0.127788689349157	0.127788689349157
+7521	6281	4149	0.293690516229792	0.293690516229792
+7522	4149	4399	0.168839008279682	0.168839008279682
+7524	6202	6282	0.107543949920042	0.107543949920042
+7525	6282	6283	0.203165579542053	0.203165579542053
+7526	6283	2881	0.158375292404745	0.158375292404745
+7528	6284	6285	0.199406415880408	0.199406415880408
+7530	2831	1439	0.198717844078091	0.198717844078091
+7531	1439	6286	0.198972452931936	0.198972452931936
+7533	4103	6046	0.129598634612641	0.129598634612641
+7534	6046	6287	0.200664408696912	0.200664408696912
+7535	6287	6288	0.407763176533057	0.407763176533057
+7536	3356	6289	0.17574244534878	0.17574244534878
+7537	6289	3103	0.174022554549137	0.174022554549137
+7538	3103	6290	0.195576263268451	0.195576263268451
+7539	6290	6291	0.0184164625226683	0.0184164625226683
+7543	5848	6293	0.0908806324614032	0.0908806324614032
+7544	6293	6294	0.111642131539399	0.111642131539399
+7546	6295	6296	0.199763041133193	0.199763041133193
+7547	6297	4228	0.205146518268072	0.205146518268072
+7548	4228	6298	0.220075142380819	0.220075142380819
+7549	6299	6300	0.269225278413762	0.269225278413762
+7550	6300	6301	0.135380699238895	0.135380699238895
+7551	6301	6037	0.201685647547083	0.201685647547083
+7552	6037	4092	0.180825512734332	0.180825512734332
+8788	5909	7005	0.202308283638507	0.202308283638507
+7555	1356	1434	0.0619921139139986	0.0619921139139986
+7556	1434	1416	0.0702533335118034	0.0702533335118034
+7557	1416	2824	0.130534926760632	0.130534926760632
+7558	2824	2485	0.13649413612348	0.13649413612348
+7559	2485	6304	0.132600390611243	0.132600390611243
+7560	6304	6305	0.13375224687231	0.13375224687231
+7562	6293	6306	0.193932773048905	0.193932773048905
+7564	6307	4033	0.1068931298406	0.1068931298406
+7566	6308	1505	0.201208565153675	0.201208565153675
+7567	1505	178	0.201696340498873	0.201696340498873
+7568	178	1706	0.202420430939935	0.202420430939935
+7569	1706	6310	0.205872571954156	0.205872571954156
+7571	1393	5861	0.176199480761084	0.176199480761084
+7573	1309	5328	0.243304763536767	0.243304763536767
+17643	524	9824	0.0585508481458027	0.0585508481458027
+7575	6311	6312	0.480549704702292	0.480549704702292
+7576	4368	1449	0.194542255499986	0.194542255499986
+7577	1449	6313	0.208609985343506	0.208609985343506
+7578	6313	6314	0.103555170544593	0.103555170544593
+7579	6314	6315	0.0981349608621905	0.0981349608621905
+7581	3820	5895	0.101734690953305	0.101734690953305
+7583	6316	6317	0.456743307850688	0.456743307850688
+7584	5896	1591	0.201196573887444	0.201196573887444
+7585	1591	1642	0.201704599280981	0.201704599280981
+7587	4303	6319	0.0895876341901528	0.0895876341901528
+7589	6320	5074	0.0881249654942257	0.0881249654942257
+7590	5074	6321	0.0822356991688935	0.0822356991688935
+7592	3098	3208	0.20139821402018	0.20139821402018
+7593	3208	6120	0.199810792778826	0.199810792778826
+7594	6120	1919	0.202180610053987	0.202180610053987
+7595	1919	6322	0.202387552164505	0.202387552164505
+7596	6322	3262	0.201452153939087	0.201452153939087
+7597	3262	6323	0.198460905873661	0.198460905873661
+7599	6325	6326	0.0490995020648654	0.0490995020648654
+7600	6326	6327	0.055368676730927	0.055368676730927
+7601	6327	6328	0.0309445801475025	0.0309445801475025
+7602	6328	992	0.0695937269558986	0.0695937269558986
+7603	992	5033	0.0562459052664965	0.0562459052664965
+8836	2977	657	0.0520837064464313	0.0520837064464313
+7604	5033	6329	0.0516777216994855	0.0516777216994855
+7605	6329	5046	0.105372499364086	0.105372499364086
+7606	5046	4160	0.118696493530277	0.118696493530277
+7607	4160	6330	0.136699581092316	0.136699581092316
+7608	6330	4974	0.128955324206818	0.128955324206818
+7609	4974	4766	0.151821196012923	0.151821196012923
+7610	4766	6331	0.118237006648706	0.118237006648706
+7611	6331	6332	0.150079343538278	0.150079343538278
+7612	6332	6333	0.165501031184984	0.165501031184984
+7613	6333	6334	0.0461738747625761	0.0461738747625761
+7614	6334	6335	0.133457305058149	0.133457305058149
+7615	6335	1212	0.134967826650912	0.134967826650912
+7617	2900	6336	0.106167707809224	0.106167707809224
+7618	6336	6337	0.104928236912142	0.104928236912142
+7619	6337	4735	0.104475212628964	0.104475212628964
+7620	4735	6338	0.102406513567036	0.102406513567036
+7621	6338	6339	0.111236760215522	0.111236760215522
+7622	6339	5400	0.102611714232847	0.102611714232847
+7623	5400	6340	0.108937307551118	0.108937307551118
+7624	6340	3903	0.106714805368354	0.106714805368354
+7625	3903	1040	0.101833845648583	0.101833845648583
+7626	1040	6276	0.108458622663871	0.108458622663871
+7627	6276	6341	0.106851583282394	0.106851583282394
+7628	6341	5005	0.0997823108241272	0.0997823108241272
+7629	5005	3326	0.104184561842385	0.104184561842385
+7630	3326	6343	0.103107525114489	0.103107525114489
+7631	6343	6344	0.102577524667858	0.102577524667858
+7632	6344	2077	0.109057202290834	0.109057202290834
+7633	2077	2674	0.105238001385814	0.105238001385814
+7634	2674	4124	0.102908082653388	0.102908082653388
+7635	4124	6345	0.111237019236159	0.111237019236159
+7636	6345	6346	0.0932071004983952	0.0932071004983952
+7637	6346	6347	0.101110239024215	0.101110239024215
+7638	6347	3472	0.0998858354760893	0.0998858354760893
+7639	3472	6024	0.100184077827119	0.100184077827119
+7641	3875	6348	0.0931831682605449	0.0931831682605449
+7642	6348	851	0.00806942804368034	0.00806942804368034
+7644	6349	6350	0.122741608307903	0.122741608307903
+7646	6351	6352	0.0367221312616467	0.0367221312616467
+7648	6353	6352	0.031587926861642	0.031587926861642
+7649	6352	6353	0.031587926861642	0.031587926861642
+7651	4284	5406	0.209059343043956	0.209059343043956
+7652	5406	3139	0.106127827196287	0.106127827196287
+7653	3139	3924	0.0976499059560775	0.0976499059560775
+7654	3924	5060	0.353918950652385	0.353918950652385
+7655	5060	5012	0.0994873589954365	0.0994873589954365
+7658	6356	2071	0.094898000530225	0.094898000530225
+7659	2071	2669	0.0951372963506741	0.0951372963506741
+7660	2669	4139	0.0930605458860926	0.0930605458860926
+7661	4139	6357	0.0866508308410144	0.0866508308410144
+7662	6357	6358	0.100153967379628	0.100153967379628
+7663	6358	6359	0.094521960675225	0.094521960675225
+7664	6359	834	0.394334341459341	0.394334341459341
+7665	834	871	0.00699086459728944	0.00699086459728944
+7666	871	6360	0.0985643561678323	0.0985643561678323
+7667	6360	6361	0.0919153430634884	0.0919153430634884
+7668	6361	6362	0.0142210252134503	0.0142210252134503
+7670	6363	6250	0.198277134301598	0.198277134301598
+7671	6250	6258	0.115286899945233	0.115286899945233
+7672	6258	6364	0.0878557774552784	0.0878557774552784
+7673	6364	1498	0.200867314778576	0.200867314778576
+7675	187	5877	0.162832287710312	0.162832287710312
+7676	5877	1716	0.0499429374304698	0.0499429374304698
+7678	6365	1582	0.142378532382676	0.142378532382676
+7679	1582	6366	1.28806099537571	1.28806099537571
+7680	6367	2271	0.093525872105216	0.093525872105216
+7681	2271	6368	0.0953526699152847	0.0953526699152847
+7682	6368	6369	0.0956103425754401	0.0956103425754401
+7683	6369	2130	0.0946975078442247	0.0946975078442247
+7684	2130	5981	0.0976635368625979	0.0976635368625979
+7685	5981	6370	0.0910203235542429	0.0910203235542429
+7686	6370	2335	0.0939706612325521	0.0939706612325521
+7687	2335	6371	1.7470149025737	1.7470149025737
+7688	96	3500	0.202527213410831	0.202527213410831
+7689	3500	6372	0.200485391157046	0.200485391157046
+7690	6372	6373	0.200744473183588	0.200744473183588
+7691	6373	6374	0.203425216522523	0.203425216522523
+7692	6374	261	0.363896677888795	0.363896677888795
+7693	261	6375	0.041137585532266	0.041137585532266
+7694	6375	6376	0.527231991542063	0.527231991542063
+8934	2865	7087	0.201874708309178	0.201874708309178
+7696	6377	3069	0.174367166483664	0.174367166483664
+7697	3069	6378	0.175688037406208	0.175688037406208
+7698	6378	6379	0.195293035214527	0.195293035214527
+7700	5015	6380	0.0917013339896307	0.0917013339896307
+7702	380	6381	0.0601450697094338	0.0601450697094338
+7703	6381	3398	0.0950953426294514	0.0950953426294514
+7704	3398	6384	0.0512135480319707	0.0512135480319707
+7705	6384	6385	0.0512477474787707	0.0512477474787707
+7706	6385	6386	0.0508150751685789	0.0508150751685789
+7707	6386	6387	0.0467877396177586	0.0467877396177586
+7708	6387	6388	0.102738526459791	0.102738526459791
+7709	6388	6389	0.0502022657375815	0.0502022657375815
+7710	6389	6390	0.0495952560526731	0.0495952560526731
+7711	6390	6391	0.0506266673865361	0.0506266673865361
+7712	6391	1111	0.0484464674507555	0.0484464674507555
+7714	4654	1272	0.131229439030854	0.131229439030854
+7715	1272	6392	0.0233060632854453	0.0233060632854453
+7716	6392	4560	0.111717062627726	0.111717062627726
+7717	4560	2711	0.115276038939543	0.115276038939543
+7718	2711	6393	0.157827401374253	0.157827401374253
+7720	6394	6142	0.134287937529063	0.134287937529063
+7721	6142	4016	0.132933704994743	0.132933704994743
+7722	4016	6395	0.00906250528140326	0.00906250528140326
+7723	6395	382	0.124591902443133	0.124591902443133
+7725	5850	6396	0.00523272011597534	0.00523272011597534
+7726	6396	501	0.199511293598505	0.199511293598505
+7727	501	6397	0.217152349025227	0.217152349025227
+7728	6397	6398	0.36755359975324	0.36755359975324
+7730	3613	6399	0.21266860576331	0.21266860576331
+7732	6401	6402	0.038551456513769	0.038551456513769
+7733	6402	6403	0.01171446339475	0.01171446339475
+7735	2909	6404	0.0724414530545414	0.0724414530545414
+7736	6404	6405	0.105070094163828	0.105070094163828
+7737	6405	6174	0.106062498124406	0.106062498124406
+7738	6174	3312	0.104669820520163	0.104669820520163
+7739	3312	6406	0.105292804834109	0.105292804834109
+7741	5545	2415	0.0733757601851338	0.0733757601851338
+7743	5056	4299	0.0731858562049149	0.0731858562049149
+7745	5093	6407	0.0155546054802435	0.0155546054802435
+7747	3914	4762	0.124500033165113	0.124500033165113
+7750	6409	5773	0.332202382721644	0.332202382721644
+7752	6410	6411	0.0178672618817003	0.0178672618817003
+7754	6409	6412	0.0520862922994697	0.0520862922994697
+7756	6231	6413	0.198055274582402	0.198055274582402
+7758	6414	6415	0.189433856898839	0.189433856898839
+7759	6416	4038	0.0834324728266378	0.0834324728266378
+7761	6417	4521	0.134579982196382	0.134579982196382
+7762	4521	5240	0.13502405245006	0.13502405245006
+7763	5240	6418	0.13412336654487	0.13412336654487
+7764	6418	6419	0.133878890575632	0.133878890575632
+7765	6419	1678	0.134913237668999	0.134913237668999
+7766	1678	6421	0.134568146094945	0.134568146094945
+7767	6421	2457	0.135266114631303	0.135266114631303
+7768	2457	3225	0.138075006668938	0.138075006668938
+7769	3225	5745	0.134195295626898	0.134195295626898
+7770	5745	5522	0.132936679979251	0.132936679979251
+7771	5522	6422	0.135417328130375	0.135417328130375
+7772	6422	6423	0.137879539043021	0.137879539043021
+7776	6425	6426	0.131565838315989	0.131565838315989
+9014	7117	7118	0.0653478278832396	0.0653478278832396
+7778	2486	2825	0.134659485620958	0.134659485620958
+7779	2825	1435	0.20171777298344	0.20171777298344
+7780	1435	6427	0.150355567395556	0.150355567395556
+7782	4094	6039	0.18817564016619	0.18817564016619
+7783	6039	6428	0.201342188276825	0.201342188276825
+7784	6428	6429	0.404705192201308	0.404705192201308
+7785	6430	2403	0.202864038761159	0.202864038761159
+7786	2403	6431	0.0331723473682169	0.0331723473682169
+7787	6431	6432	0.176045966759895	0.176045966759895
+7789	6433	6434	0.0826623084672878	0.0826623084672878
+7790	6434	6435	0.102944521823956	0.102944521823956
+7791	6435	6436	0.00978588535341196	0.00978588535341196
+7793	6131	5859	0.176922247784819	0.176922247784819
+7794	5859	1306	0.176947022701008	0.176947022701008
+7795	1306	6437	0.245961882429388	0.245961882429388
+7797	4379	175	0.0949912703955897	0.0949912703955897
+7799	6438	6439	0.118265132463411	0.118265132463411
+7800	426	6440	0.136068759302944	0.136068759302944
+7801	6440	6140	0.13326442219696	0.13326442219696
+7802	6140	4012	0.134504046499466	0.134504046499466
+7803	4012	6441	0.132430300578831	0.132430300578831
+7804	6441	6442	0.13523718007968	0.13523718007968
+7805	6442	3383	0.131020837855346	0.131020837855346
+7807	6443	5593	0.101318153214668	0.101318153214668
+7809	5592	6444	0.0976166388579658	0.0976166388579658
+7810	6444	6445	0.491425863708822	0.491425863708822
+7814	2400	6448	0.282522157819803	0.282522157819803
+7817	2813	6450	0.086833012009872	0.086833012009872
+7819	6451	6452	0.0978256934477298	0.0978256934477298
+7820	6452	3935	0.102019422492613	0.102019422492613
+7821	3935	5623	0.0992172562512715	0.0992172562512715
+7823	6453	4202	0.100516365940058	0.100516365940058
+7824	4202	1069	0.100502974298411	0.100502974298411
+7825	1069	2505	0.106288157429336	0.106288157429336
+7827	6454	1236	0.0948029547901802	0.0948029547901802
+7828	1236	4810	0.0999111243280575	0.0999111243280575
+7829	4810	2177	0.101346858256007	0.101346858256007
+7830	2177	595	0.0594373309242362	0.0594373309242362
+7831	595	6456	0.0424911721972826	0.0424911721972826
+7833	349	6422	0.0713248739505624	0.0713248739505624
+7834	6422	4630	0.121079515215535	0.121079515215535
+7836	1259	376	0.0755636106904258	0.0755636106904258
+7837	376	4545	0.0608816123146845	0.0608816123146845
+7838	4545	2701	0.135701731606855	0.135701731606855
+7839	2701	6457	0.126994454068005	0.126994454068005
+7841	6458	6459	0.0454788769710747	0.0454788769710747
+7842	6459	6460	0.0496400956308302	0.0496400956308302
+7843	6460	6461	0.0515972381206	0.0515972381206
+7845	6462	6463	0.0483118204156802	0.0483118204156802
+7846	6463	1134	0.0499784066419261	0.0499784066419261
+7847	1134	6464	0.0497410465605515	0.0497410465605515
+7849	6465	6466	0.0544130408961272	0.0544130408961272
+7850	6466	3850	0.0472855484942146	0.0472855484942146
+7851	3850	6467	0.0501739162143614	0.0501739162143614
+7852	6467	5576	0.0486954285842123	0.0486954285842123
+7854	6468	4673	0.110758148850492	0.110758148850492
+7855	4673	6469	0.101963932591745	0.101963932591745
+7857	5575	6471	0.0065719182159958	0.0065719182159958
+7858	6471	6472	0.0420124186537075	0.0420124186537075
+7859	6472	6473	0.0412603655949121	0.0412603655949121
+7860	6473	6474	0.00681975388326533	0.00681975388326533
+7862	6476	3433	0.101986471383689	0.101986471383689
+7864	6477	6478	0.14533158628719	0.14533158628719
+7865	6478	6479	0.146043976986052	0.146043976986052
+7866	6479	2014	0.145258231311968	0.145258231311968
+7867	2014	6480	0.148541120069898	0.148541120069898
+7868	6480	6481	0.146497737165933	0.146497737165933
+7870	6482	6483	0.108282286689265	0.108282286689265
+7871	6483	6484	0.108491401341724	0.108491401341724
+7873	6485	6486	0.107588206878742	0.107588206878742
+7874	6486	6487	0.108152480667507	0.108152480667507
+7875	6487	6488	0.101444382501879	0.101444382501879
+7876	6488	6489	0.0964116258051976	0.0964116258051976
+7877	6489	6490	0.100996661509111	0.100996661509111
+7878	6490	6491	0.0875395650093709	0.0875395650093709
+7879	6491	5045	0.0321137501610987	0.0321137501610987
+7880	5045	6492	0.117702359393688	0.117702359393688
+7882	6493	6494	0.102121868544675	0.102121868544675
+7885	5423	6497	0.104998299985498	0.104998299985498
+7887	6498	2276	0.0954001386196214	0.0954001386196214
+7888	2276	3599	0.06824353272523	0.06824353272523
+7889	3599	6499	0.0293198911712676	0.0293198911712676
+7890	6499	6500	0.100538255640661	0.100538255640661
+7891	6500	5163	0.0991059325809468	0.0991059325809468
+7892	5163	5160	0.0380087655441681	0.0380087655441681
+7893	5160	5991	0.104706554354607	0.104706554354607
+7894	5991	6501	0.100402260808534	0.100402260808534
+7895	6501	6502	1.04365943145138	1.04365943145138
+7898	435	6505	0.0386263503887606	0.0386263503887606
+7899	6505	335	0.101999106210783	0.101999106210783
+18520	9719	10306	0.125645609854682	0.125645609854682
+7901	6506	6507	1.29783680025226	1.29783680025226
+7902	6507	5983	0.103637474886707	0.103637474886707
+7903	5983	2101	0.103292266259067	0.103292266259067
+9126	1424	7178	0.131577423131136	0.131577423131136
+7904	2101	6508	0.248902894245049	0.248902894245049
+7906	6509	6510	0.360508984578831	0.360508984578831
+7907	6510	6511	0.0349379067210739	0.0349379067210739
+7909	6512	6513	0.304262851034051	0.304262851034051
+7910	6513	6198	0.252538456966519	0.252538456966519
+7911	6198	576	0.0366939406022336	0.0366939406022336
+7912	576	6515	0.0946945974761285	0.0946945974761285
+7915	89	3525	0.202675004351493	0.202675004351493
+7916	3525	6516	0.201208326437589	0.201208326437589
+7917	6516	6517	0.125720317267139	0.125720317267139
+7919	6518	6519	0.200829668984099	0.200829668984099
+7920	6519	5832	0.202502182884777	0.202502182884777
+7921	5832	6520	0.201241567556278	0.201241567556278
+7922	6520	6521	0.396923547399649	0.396923547399649
+7923	6522	6523	0.133027344486413	0.133027344486413
+7924	6523	4230	0.0509058477475031	0.0509058477475031
+7925	4230	3627	0.095634183764131	0.095634183764131
+7926	3627	1795	0.17402508350424	0.17402508350424
+7928	6524	4175	0.0888021060703878	0.0888021060703878
+17651	395	780	0.411550362143881	0.411550362143881
+7930	6525	1780	0.0441669339202922	0.0441669339202922
+7931	1780	4371	0.0730695211007641	0.0730695211007641
+7932	4371	6527	0.0615136660388587	0.0615136660388587
+7933	6527	365	0.0331373286455635	0.0331373286455635
+7935	6528	6529	0.918393000112345	0.918393000112345
+7936	6529	6530	0.220602612202271	0.220602612202271
+7938	6531	6533	0.0857049610334614	0.0857049610334614
+7940	5175	3090	0.40371590303619	0.40371590303619
+7941	3090	3201	0.197838998920199	0.197838998920199
+7943	6407	4688	0.196571833896643	0.196571833896643
+7944	4688	4940	0.140125445900248	0.140125445900248
+7946	6170	5019	0.102773469761832	0.102773469761832
+7947	5019	3351	0.103514032973499	0.103514032973499
+7948	3351	6534	0.103149871890818	0.103149871890818
+7949	6534	6535	0.102775789327764	0.102775789327764
+9173	5349	5392	0.0859339245649361	0.0859339245649361
+7950	6535	2060	0.103192691678964	0.103192691678964
+7951	2060	2646	0.101884046964041	0.101884046964041
+7952	2646	4112	0.105519033634909	0.105519033634909
+7953	4112	6536	0.103005071327601	0.103005071327601
+7954	6536	6537	0.102995851811127	0.102995851811127
+7955	6537	6539	0.1029998815793	0.1029998815793
+7956	6539	3453	0.102546625331303	0.102546625331303
+7958	6015	3883	0.103459903316916	0.103459903316916
+7959	3883	846	0.104834602248929	0.104834602248929
+7960	846	6540	0.101388253991195	0.101388253991195
+7961	6540	6541	0.0479102302548626	0.0479102302548626
+7963	988	6542	0.0976255225844962	0.0976255225844962
+7964	6542	6543	0.0510763365802728	0.0510763365802728
+7966	6544	2318	0.0507276043625414	0.0507276043625414
+7967	2318	5114	0.0505908057304328	0.0505908057304328
+7968	5114	445	0.0485658434846568	0.0485658434846568
+7969	445	4713	0.0498146803357513	0.0498146803357513
+7970	4713	6546	0.0983637452954902	0.0983637452954902
+7971	6546	6547	0.0998347883215936	0.0998347883215936
+7973	5411	3144	0.088816521791746	0.088816521791746
+7974	3144	3916	0.112464236744585	0.112464236744585
+7976	6332	6548	0.108272865647673	0.108272865647673
+7977	6548	3156	0.104441457482765	0.104441457482765
+7978	3156	4975	0.102775440582403	0.102775440582403
+7979	4975	6549	0.100365138716245	0.100365138716245
+7980	6549	6550	0.102792800397101	0.102792800397101
+7982	6526	5047	0.0492847670519182	0.0492847670519182
+7983	5047	6551	0.0975745067522553	0.0975745067522553
+17653	9285	10141	0.0935043743671756	0.0935043743671756
+7984	6551	5065	0.0520838428726065	0.0520838428726065
+7985	5065	987	0.0487655351272014	0.0487655351272014
+7987	6552	6553	0.11141163822183	0.11141163822183
+7988	6553	6554	0.0931288050453943	0.0931288050453943
+7989	6554	6555	0.0954267012259227	0.0954267012259227
+7990	6555	6556	0.0932230978560399	0.0932230978560399
+7991	6556	2018	0.096637647678534	0.096637647678534
+7992	2018	2008	0.0302895913994428	0.0302895913994428
+7993	2008	6557	0.0614415106208342	0.0614415106208342
+7995	2764	6558	0.0940583318372542	0.0940583318372542
+7996	6558	2268	0.0933570415002435	0.0933570415002435
+7998	5192	6559	0.0436786412585742	0.0436786412585742
+7999	6559	6560	0.0106994466158069	0.0106994466158069
+8002	6562	6563	0.0505000952437127	0.0505000952437127
+8004	3018	6564	0.0487830282291943	0.0487830282291943
+8005	6564	4383	0.0508423763728808	0.0508423763728808
+8006	4383	6565	0.0576100244421376	0.0576100244421376
+8008	6566	6567	0.00412306976586438	0.00412306976586438
+8009	6567	6568	0.0539582974681531	0.0539582974681531
+8010	6568	6569	0.0519961096093482	0.0519961096093482
+8011	6569	6570	0.0542246799430147	0.0542246799430147
+8012	6570	6571	0.0518803862854092	0.0518803862854092
+17654	10141	10140	0.10337885268614	0.10337885268614
+8013	6571	6572	0.0555098728995741	0.0555098728995741
+8014	6572	6573	0.0518861583127315	0.0518861583127315
+8015	6573	6574	0.0518860343451018	0.0518860343451018
+8016	6574	6575	0.0508332520538339	0.0508332520538339
+8017	6575	6576	0.0544506518702307	0.0544506518702307
+8018	6576	6176	0.0529383120108553	0.0529383120108553
+8019	6176	6577	0.0529043310628525	0.0529043310628525
+8020	6577	3307	0.0513720664630444	0.0513720664630444
+8021	3307	6578	0.0555027664653656	0.0555027664653656
+8022	6578	6579	0.0497858933197237	0.0497858933197237
+8026	916	6582	0.0644004913493865	0.0644004913493865
+8027	6582	6583	0.0568408799781512	0.0568408799781512
+8028	6583	6584	0.122686442934717	0.122686442934717
+8029	6584	6585	0.119086225858405	0.119086225858405
+8031	4637	6586	0.0681807162053014	0.0681807162053014
+8032	6586	4550	0.0899357767109733	0.0899357767109733
+8033	4550	6587	0.293817867332518	0.293817867332518
+8034	6587	6588	0.104136881172081	0.104136881172081
+8035	6588	6589	0.0983651040648428	0.0983651040648428
+8036	6589	6129	0.0990923096855932	0.0990923096855932
+8037	6129	3972	0.0982639550962464	0.0982639550962464
+8038	3972	6590	0.099057650475641	0.099057650475641
+17935	10221	8779	0.0167456719913715	0.0167456719913715
+8039	6590	1407	0.099982611141039	0.099982611141039
+8040	1407	6591	0.096574089288832	0.096574089288832
+8042	5218	3376	0.0125708011673062	0.0125708011673062
+8043	3376	3397	0.0411038350876113	0.0411038350876113
+8044	3397	6592	0.0474630685655207	0.0474630685655207
+8045	6592	5717	0.0112629167716475	0.0112629167716475
+8046	5717	5711	0.0353931291626462	0.0353931291626462
+8049	6594	6595	0.0372589458613009	0.0372589458613009
+8051	6596	6597	0.0491446235593822	0.0491446235593822
+8052	6597	6598	0.0512739101828601	0.0512739101828601
+8053	6598	6599	0.0445968134228137	0.0445968134228137
+8054	6599	6600	0.0456401369039379	0.0456401369039379
+8055	6600	252	0.0644261415780049	0.0644261415780049
+8056	252	3949	0.0630622102110069	0.0630622102110069
+8057	3949	6601	0.0624388506180743	0.0624388506180743
+8058	6601	5610	0.057495014751868	0.057495014751868
+8059	5610	6602	0.0530621910173341	0.0530621910173341
+8060	6602	3731	0.0543021802328704	0.0543021802328704
+8061	3731	6603	0.107126213030051	0.107126213030051
+8062	6603	4486	0.0992014153017681	0.0992014153017681
+8064	302	396	0.456543205648827	0.456543205648827
+8065	396	6604	0.263692963912388	0.263692963912388
+8067	2108	5986	0.103617400145952	0.103617400145952
+8068	5986	6605	0.103377873268697	0.103377873268697
+9343	7304	2051	0.0535709121596095	0.0535709121596095
+8070	4763	6169	0.176859243925992	0.176859243925992
+8123	6640	6641	0.17629957299909	0.17629957299909
+8071	6169	6260	0.145538243855646	0.145538243855646
+8072	6260	3917	0.186355414418251	0.186355414418251
+8075	6608	6609	0.216668843775513	0.216668843775513
+8076	6609	5988	0.0945207273969085	0.0945207273969085
+8077	5988	2122	0.100941576479339	0.100941576479339
+8078	2122	6610	0.0983635555045419	0.0983635555045419
+8079	6610	6611	0.0970315915473971	0.0970315915473971
+8081	6612	6613	0.0935811526066721	0.0935811526066721
+8082	6613	2749	0.0990634268639465	0.0990634268639465
+8083	2749	6614	0.105679418235948	0.105679418235948
+8085	6615	6616	0.101635566171867	0.101635566171867
+8086	6616	6617	0.0962607674133666	0.0962607674133666
+8087	6617	6618	0.0951534169408166	0.0951534169408166
+8088	6618	6619	0.0938879229278784	0.0938879229278784
+17940	6560	10223	0.0802385671723254	0.0802385671723254
+8090	6620	6621	0.160330485968093	0.160330485968093
+8094	6623	1791	0.109097036983099	0.109097036983099
+8095	1791	3615	0.039522374569603	0.039522374569603
+8096	3615	6624	0.0738542372087066	0.0738542372087066
+8097	6624	6625	0.00831390386589708	0.00831390386589708
+8098	6625	6626	0.070757439886615	0.070757439886615
+8099	6626	6627	0.0728730586061825	0.0728730586061825
+8100	6627	5098	0.0960515227378026	0.0960515227378026
+8101	5098	6628	0.0550201636939116	0.0550201636939116
+8103	6630	239	0.0379460853943731	0.0379460853943731
+13573	9130	3	0.109013561390269	0.109013561390269
+8105	6631	6632	0.0782857815609104	0.0782857815609104
+8106	6632	6533	0.166563544591406	0.166563544591406
+8108	4496	6633	0.110872689467253	0.110872689467253
+8109	6633	2525	0.333067333185797	0.333067333185797
+8111	6530	6634	0.0105197308884475	0.0105197308884475
+9336	7300	4780	0.0501146245066156	0.0501146245066156
+8112	6634	6635	2.4458667171276	2.4458667171276
+8113	6636	3095	0.197330202512711	0.197330202512711
+8114	3095	3205	0.202310741049047	0.202310741049047
+8115	3205	6118	0.200935805580311	0.200935805580311
+8116	6118	1915	0.200185455389542	0.200185455389542
+8118	6637	5842	0.204932644380513	0.204932644380513
+8119	5842	6638	0.194625839062785	0.194625839062785
+8121	6639	3724	0.202719550339155	0.202719550339155
+8122	3724	6640	0.104515203903702	0.104515203903702
+8124	6641	2622	0.176067278462879	0.176067278462879
+8125	2622	5203	0.176917243967006	0.176917243967006
+8126	5203	6232	0.177139986115085	0.177139986115085
+8129	6643	6644	0.177268373064057	0.177268373064057
+8130	6644	6600	0.175826872766799	0.175826872766799
+8131	6600	6646	0.177773484713149	0.177773484713149
+8133	6647	6648	0.177957472274986	0.177957472274986
+8134	6648	6649	0.169816854222751	0.169816854222751
+8135	6649	6650	0.0183704581232897	0.0183704581232897
+8136	6650	6651	0.180283145370232	0.180283145370232
+8137	6651	6652	0.0228081566299403	0.0228081566299403
+8139	6653	1499	0.197154421185115	0.197154421185115
+8140	1499	188	0.204153885319108	0.204153885319108
+8141	188	5878	0.159028819712238	0.159028819712238
+8142	5878	6654	0.24236157922448	0.24236157922448
+8144	1583	6655	0.303396334779096	0.303396334779096
+8145	6656	5874	0.176427569810156	0.176427569810156
+8146	5874	6657	0.00810609260917888	0.00810609260917888
+8147	6657	6658	0.0470608013663409	0.0470608013663409
+8150	6659	6660	0.255748331282284	0.255748331282284
+8151	6661	6662	0.00688301382680834	0.00688301382680834
+8152	6662	6663	0.392909871907801	0.392909871907801
+8153	6664	1758	0.130752459577202	0.130752459577202
+8154	1758	6314	0.0908112834588078	0.0908112834588078
+8155	6314	6665	0.191679756807403	0.191679756807403
+8156	6665	763	0.155864734453911	0.155864734453911
+8157	763	6668	0.0989081569703109	0.0989081569703109
+8158	6668	1760	0.0778502447443476	0.0778502447443476
+8159	1760	6003	0.221657363761595	0.221657363761595
+8160	6003	5765	0.101345142024656	0.101345142024656
+8161	5765	4032	0.0976983696193598	0.0976983696193598
+8162	4032	6669	0.0654151166199609	0.0654151166199609
+8164	2301	1759	0.0929594689620956	0.0929594689620956
+8165	1759	150	0.2063607315498	0.2063607315498
+8166	150	1738	0.199773882802826	0.199773882802826
+8168	1953	3100	0.166887359049361	0.166887359049361
+8170	370	2529	0.0016410050164606	0.0016410050164606
+8171	2529	6670	0.0654370448512421	0.0654370448512421
+8200	6684	1172	0.140728922414785	0.140728922414785
+8172	6670	1937	0.344573874886115	0.344573874886115
+8174	6671	6672	0.176399723080376	0.176399723080376
+8176	3101	6673	0.188864615641403	0.188864615641403
+8178	4227	1805	0.201844384843532	0.201844384843532
+8179	1805	6674	0.203096969054999	0.203096969054999
+8180	6674	5847	0.205632777843381	0.205632777843381
+8181	5847	6675	0.197984723567939	0.197984723567939
+8183	6676	4226	0.190839047917349	0.190839047917349
+8185	4212	1268	0.185384243862507	0.185384243862507
+8187	6677	2875	0.129732620530101	0.129732620530101
+8188	2875	6678	0.138723736947104	0.138723736947104
+8189	6678	6679	0.13144235424121	0.13144235424121
+8190	6679	6680	0.782596772143326	0.782596772143326
+8191	3575	5642	0.141762411979774	0.141762411979774
+8192	5642	4347	0.140039066988463	0.140039066988463
+8193	4347	6345	0.13859354874742	0.13859354874742
+8194	6345	3049	0.140317315615912	0.140317315615912
+8195	3049	3024	0.0669551847418331	0.0669551847418331
+8196	3024	6681	0.0663747225163875	0.0663747225163875
+8197	6681	6682	0.00550527045183645	0.00550527045183645
+8198	6682	6683	0.122014480736259	0.122014480736259
+8199	6683	6684	0.0145554158979999	0.0145554158979999
+8201	1172	892	0.137892873302074	0.137892873302074
+8202	892	4475	0.139838739747675	0.139838739747675
+8203	4475	2777	0.135724572944392	0.135724572944392
+8204	2777	5266	0.129198654341627	0.129198654341627
+8205	5266	6685	0.122514628608539	0.122514628608539
+8206	6685	6686	0.20769100942942	0.20769100942942
+8207	6686	6357	0.202692590161251	0.202692590161251
+8208	6357	2390	0.107324644883127	0.107324644883127
+8209	2390	6687	0.139594845742255	0.139594845742255
+8210	6687	6688	0.0752686220951058	0.0752686220951058
+8211	6688	749	0.0665961818211898	0.0665961818211898
+8212	749	1567	0.140763317861176	0.140763317861176
+8213	1567	6689	0.140174033607804	0.140174033607804
+8215	6691	696	0.200953877059722	0.200953877059722
+8216	696	6692	0.202493921890496	0.202493921890496
+8218	508	6693	0.0440506867837982	0.0440506867837982
+8219	6694	1202	0.170408371052522	0.170408371052522
+8220	1202	6695	0.022095029398504	0.022095029398504
+8221	6695	3781	0.199196539116323	0.199196539116323
+8222	3781	6696	0.154646276165852	0.154646276165852
+8224	951	6697	0.162889491053556	0.162889491053556
+8225	6697	4890	0.17202029430472	0.17202029430472
+8226	4890	6698	0.182585439334225	0.182585439334225
+8227	6698	5488	0.173629132461636	0.173629132461636
+8230	6700	6701	0.054263196932367	0.054263196932367
+8231	6701	5807	0.103685962200744	0.103685962200744
+8232	5807	6702	0.106632774624389	0.106632774624389
+8233	6702	6703	0.0962060876195832	0.0962060876195832
+8234	6703	5959	0.00690380150934747	0.00690380150934747
+8235	5959	6704	0.00415729025946559	0.00415729025946559
+8236	6704	3004	0.101332185729619	0.101332185729619
+8237	3004	4395	0.106412326585027	0.106412326585027
+8238	4395	6705	0.103936208820228	0.103936208820228
+8239	6705	6706	0.108885043469445	0.108885043469445
+8240	6706	6707	0.0530572853327784	0.0530572853327784
+8241	6707	6708	0.0508918154467618	0.0508918154467618
+8242	6708	6709	0.103982459974641	0.103982459974641
+8243	6709	6710	0.100220871190445	0.100220871190445
+8244	6710	6711	0.00631643031082491	0.00631643031082491
+8245	6711	6188	0.105471969629518	0.105471969629518
+8246	6188	6712	0.0552929480053166	0.0552929480053166
+8247	6712	6713	0.051155648874288	0.051155648874288
+8249	4495	6714	0.112097289917407	0.112097289917407
+8250	6714	1079	0.0913714399600763	0.0913714399600763
+8251	1079	2524	0.245312559433029	0.245312559433029
+8253	6006	6251	0.204148069385731	0.204148069385731
+8254	6251	6715	0.203065667560916	0.203065667560916
+8256	2935	6716	0.266313303297407	0.266313303297407
+8257	6416	3741	0.135496222887927	0.135496222887927
+8258	3741	5854	0.117997896305679	0.117997896305679
+8260	2305	161	0.314948131318509	0.314948131318509
+8263	6717	3071	0.175732613824838	0.175732613824838
+8264	3071	6718	0.173767654321711	0.173767654321711
+8265	6718	6100	0.243539432543733	0.243539432543733
+8267	3290	98	0.422419964097428	0.422419964097428
+8269	4373	2854	0.205542196291208	0.205542196291208
+8271	6719	1596	0.0969388330111528	0.0969388330111528
+8273	118	6721	0.0966297992771619	0.0966297992771619
+8274	6721	6722	0.0414535753801991	0.0414535753801991
+8276	2311	6580	0.108271978342533	0.108271978342533
+8277	6580	6723	0.0197325066377101	0.0197325066377101
+8301	4041	6740	0.178573713835442	0.178573713835442
+8302	6740	1829	0.177333893618754	0.177333893618754
+8279	4433	6724	0.324356944785499	0.324356944785499
+8282	6725	6088	0.0237314605310015	0.0237314605310015
+8283	6088	4822	0.0875664870066569	0.0875664870066569
+8284	4822	6726	0.0475371228844605	0.0475371228844605
+8285	6726	4515	0.133316815943664	0.133316815943664
+8286	4515	5237	0.132189806591607	0.132189806591607
+9507	2581	5179	0.178384896285487	0.178384896285487
+8287	5237	6727	0.137381332135233	0.137381332135233
+8288	6727	6728	0.132866818946611	0.132866818946611
+8289	6728	1673	0.133389434002772	0.133389434002772
+8290	1673	6729	0.137304160443328	0.137304160443328
+8292	6730	6731	0.0127908749904874	0.0127908749904874
+8324	6753	6754	0.0516246355995179	0.0516246355995179
+8293	6731	6734	0.253997048781863	0.253997048781863
+8294	6734	6735	0.103152527560213	0.103152527560213
+8296	6736	6737	0.0131672047429292	0.0131672047429292
+8298	4636	5383	0.185495216645111	0.185495216645111
+8300	5972	4041	0.174731707729605	0.174731707729605
+8303	1829	6741	0.102538685907791	0.102538685907791
+8304	4575	6440	0.137081553799117	0.137081553799117
+8305	6440	5291	0.136014333235461	0.136014333235461
+8306	5291	6742	0.135023999424587	0.135023999424587
+8307	6742	10	0.133312225882616	0.133312225882616
+8308	10	6394	0.135032006709	0.135032006709
+8309	6394	6743	0.132451340826744	0.132451340826744
+8310	6743	6744	0.135765849385072	0.135765849385072
+8311	6744	6745	0.133823531129847	0.133823531129847
+8313	6746	6747	0.134513077577228	0.134513077577228
+8314	6747	6748	0.134201163774105	0.134201163774105
+8316	6749	1938	0.0948580215175547	0.0948580215175547
+8318	307	5887	0.0912856383131267	0.0912856383131267
+8319	5887	6750	0.00721526462075332	0.00721526462075332
+8320	6750	6751	0.0269156344716724	0.0269156344716724
+8323	6752	6753	0.0510955164610192	0.0510955164610192
+8325	6754	6755	0.0510906826304937	0.0510906826304937
+8326	6755	6756	0.0511615632316368	0.0511615632316368
+8327	6756	1661	0.0519510824904343	0.0519510824904343
+8328	1661	6758	0.0509873448397052	0.0509873448397052
+8329	6758	6759	0.0522106080921687	0.0522106080921687
+8330	6759	6760	0.0506887592311432	0.0506887592311432
+18752	5186	5654	0.105380231545906	0.105380231545906
+8331	6760	6761	0.0573063184317804	0.0573063184317804
+8333	6762	6763	0.0501245455122697	0.0501245455122697
+8334	6763	6764	0.0489376044154541	0.0489376044154541
+8337	6766	6767	0.0490039328328154	0.0490039328328154
+8338	6767	6768	0.0513498171240697	0.0513498171240697
+8339	6768	6769	0.0498709246005866	0.0498709246005866
+8341	5533	6770	0.292387787290413	0.292387787290413
+8343	2972	6771	0.121066844508317	0.121066844508317
+8344	6771	6093	0.143799158144466	0.143799158144466
+8345	6093	6772	0.01594646132934	0.01594646132934
+8346	6772	6773	0.00797333604469033	0.00797333604469033
+8347	6773	6774	0.00589372782719237	0.00589372782719237
+8349	6775	6776	0.135681018337986	0.135681018337986
+8350	6776	2490	0.131411131535027	0.131411131535027
+8351	2490	2835	0.135427320939223	0.135427320939223
+8353	4067	6052	0.133451561970317	0.133451561970317
+8354	6052	5792	0.201431723471221	0.201431723471221
+8356	6777	6778	0.137939265537406	0.137939265537406
+8358	6658	6779	0.0952206682824548	0.0952206682824548
+8359	6779	1328	0.20245506080321	0.20245506080321
+9582	1393	7408	0.0523989189771459	0.0523989189771459
+8360	1328	6780	0.24344994454685	0.24344994454685
+8362	6781	6338	0.132299767169153	0.132299767169153
+18540	10312	7538	0.710682259466036	0.710682259466036
+8363	6338	3026	0.142960379522958	0.142960379522958
+8364	3026	6782	0.131957413991529	0.131957413991529
+8365	6782	6783	0.00572653872195823	0.00572653872195823
+8366	6783	6784	0.13893806084239	0.13893806084239
+8367	6784	1155	0.138805738856212	0.138805738856212
+8368	1155	876	0.139884571461894	0.139884571461894
+8370	4464	2784	0.134142589801556	0.134142589801556
+8371	2784	5255	0.132457483790055	0.132457483790055
+8372	5255	4727	0.21307200925813	0.21307200925813
+8373	4727	5126	0.0748266761428759	0.0748266761428759
+8374	5126	6785	0.0660204248306932	0.0660204248306932
+8375	6785	4284	0.173603246809035	0.173603246809035
+8377	6786	6787	0.142696164770821	0.142696164770821
+8379	5475	6788	0.1766899367412	0.1766899367412
+8380	6788	6789	0.178262795240798	0.178262795240798
+8381	6789	669	0.0038695834466259	0.0038695834466259
+8382	669	6790	0.00298242718157566	0.00298242718157566
+8383	6790	6791	0.175654700740653	0.175654700740653
+8385	4603	6493	0.141540356779896	0.141540356779896
+8386	6493	6795	0.235592097571248	0.235592097571248
+8387	6795	6796	0.135380255100289	0.135380255100289
+8388	6796	6797	0.00458123097756658	0.00458123097756658
+8389	6797	6798	0.00459235047115107	0.00459235047115107
+8390	6798	6799	0.135291654892361	0.135291654892361
+8391	6799	6800	0.141019064418211	0.141019064418211
+8392	6800	821	0.136459904501488	0.136459904501488
+8393	821	3562	0.138377698701616	0.138377698701616
+8395	5772	516	0.0304460136124682	0.0304460136124682
+8397	6411	6801	0.0202183008206165	0.0202183008206165
+8398	6802	469	0.0770276556079661	0.0770276556079661
+8399	469	4171	0.115648628347006	0.115648628347006
+8400	4171	6803	0.135804309767261	0.135804309767261
+8401	6803	4756	0.071946790437269	0.071946790437269
+8403	6804	6805	0.127899734301329	0.127899734301329
+8405	6803	4172	0.13716080109606	0.13716080109606
+8406	4172	470	0.118198242572908	0.118198242572908
+8407	470	6806	0.0738815709398357	0.0738815709398357
+8410	6807	6808	0.0966312020179035	0.0966312020179035
+8411	6808	6809	0.078738376832051	0.078738376832051
+8412	6809	3373	0.430297684252256	0.430297684252256
+8414	6810	6811	0.203442237788957	0.203442237788957
+8415	1476	6812	0.245653934383614	0.245653934383614
+8416	6812	6813	0.412460631108446	0.412460631108446
+8418	6814	6815	0.174359151043162	0.174359151043162
+8419	6815	3109	0.176366303019304	0.176366303019304
+8420	3109	6816	0.193801807541949	0.193801807541949
+8421	6816	6817	0.0198367109802725	0.0198367109802725
+8422	6817	6104	0.210336723998741	0.210336723998741
+8424	6818	4370	0.0431318765981996	0.0431318765981996
+8426	2496	1451	0.0985317859583251	0.0985317859583251
+8427	1451	2853	0.10657030011201	0.10657030011201
+8428	2853	6819	0.0983314928072937	0.0983314928072937
+8429	6819	6665	0.0998633676523793	0.0998633676523793
+8430	6665	6820	0.100599054724802	0.100599054724802
+8431	6820	3821	0.10490937410086	0.10490937410086
+8432	3821	5897	0.102058293498771	0.102058293498771
+9656	6387	7441	0.131317068143471	0.131317068143471
+8433	5897	6821	0.102847878519627	0.102847878519627
+8435	1593	1644	0.201270216910902	0.201270216910902
+8436	1644	6822	0.105737900324602	0.105737900324602
+8437	6822	4218	0.0969375306307301	0.0969375306307301
+8438	4218	6823	0.101326281592707	0.101326281592707
+8439	6823	198	0.0969958932624718	0.0969958932624718
+8440	198	2927	0.100607212393453	0.100607212393453
+8441	2927	5309	0.0991277824360909	0.0991277824360909
+8442	5309	1465	0.0998634796625755	0.0998634796625755
+8445	1176	6825	0.181656671362534	0.181656671362534
+8447	6826	6827	0.865493060175873	0.865493060175873
+8448	3119	6828	0.283790323154486	0.283790323154486
+8450	3496	6829	0.0523352446605108	0.0523352446605108
+8451	6829	6830	0.0732524388814314	0.0732524388814314
+8452	6830	3663	0.0505681915693724	0.0505681915693724
+8453	3663	4996	0.130580462322132	0.130580462322132
+8455	6831	6247	0.199011000686174	0.199011000686174
+8456	6247	6832	0.199751548882436	0.199751548882436
+8458	1495	184	0.20195222577189	0.20195222577189
+8459	184	1712	0.203399715506048	0.203399715506048
+8460	1712	6833	0.205087968397347	0.205087968397347
+8461	6833	1578	0.200928350075194	0.200928350075194
+8463	6835	5869	0.177962583931279	0.177962583931279
+8464	5869	1321	0.176970219219333	0.176970219219333
+8465	1321	1377	0.177352733194459	0.177352733194459
+8466	1377	6836	0.0602165463968322	0.0602165463968322
+8467	6836	6837	0.0823104914192672	0.0823104914192672
+8468	6837	4694	0.116790101887087	0.116790101887087
+18756	1322	1378	0.175845021978343	0.175845021978343
+8469	4694	6838	0.160065096905242	0.160065096905242
+8470	6838	5335	0.187163981040998	0.187163981040998
+8471	5335	6839	0.265241255095212	0.265241255095212
+8473	4319	4507	0.0895898957022207	0.0895898957022207
+8474	4507	6840	0.0124803827841914	0.0124803827841914
+8475	6840	6841	0.091716588631721	0.091716588631721
+8476	6841	6842	0.00740292454463184	0.00740292454463184
+8477	6842	285	0.0146970591982782	0.0146970591982782
+8478	285	5069	0.0844368792913957	0.0844368792913957
+13551	9125	9126	0.0538488930045225	0.0538488930045225
+8479	5069	6837	0.103562524850142	0.103562524850142
+8480	6837	6843	0.0961927404969427	0.0961927404969427
+8481	6843	6844	0.0998943541512786	0.0998943541512786
+8482	6844	6845	0.102052212683234	0.102052212683234
+8483	6845	6846	0.456427940885819	0.456427940885819
+8484	6847	4419	0.193121729151288	0.193121729151288
+8485	4419	6848	0.226127592349504	0.226127592349504
+8486	6848	5329	0.136063050211474	0.136063050211474
+8488	4363	1444	0.202825103543368	0.202825103543368
+8489	1444	6849	0.200067420030691	0.200067420030691
+8490	6849	6850	0.207042581432814	0.207042581432814
+8491	6850	5890	0.198967544378973	0.198967544378973
+8493	6851	6852	0.0470486102019036	0.0470486102019036
+8494	6852	6853	0.0201453367541323	0.0201453367541323
+8495	6853	6854	0.0193839654418635	0.0193839654418635
+8496	6854	6855	0.0201881052382051	0.0201881052382051
+8497	6855	6856	0.0195037980214848	0.0195037980214848
+8498	6856	6857	0.0198459509091597	0.0198459509091597
+8499	6857	6858	0.0195037180586887	0.0195037180586887
+8500	6858	6859	0.0199058270401761	0.0199058270401761
+8501	6859	1871	0.0228399539785669	0.0228399539785669
+8504	6861	6862	0.100580939051626	0.100580939051626
+8505	6862	6863	0.206622253376394	0.206622253376394
+8506	6863	6377	0.103010255262607	0.103010255262607
+8507	6377	4832	0.10370389707419	0.10370389707419
+8508	4832	6717	0.103234622646169	0.103234622646169
+8509	6717	6864	0.103703073117676	0.103703073117676
+8510	6864	6865	0.0481477570236711	0.0481477570236711
+8512	5856	6866	0.107372117361429	0.107372117361429
+8513	6866	6867	0.050649728561771	0.050649728561771
+8514	6867	4989	0.0553571225017631	0.0553571225017631
+8515	4989	6868	0.101318948663251	0.101318948663251
+8518	6869	3823	0.172685696470764	0.172685696470764
+8520	6870	5902	0.0785311515160625	0.0785311515160625
+8521	5902	6871	0.0681549663304684	0.0681549663304684
+8522	6871	1996	0.0322361485277902	0.0322361485277902
+8523	1996	1587	0.080539505433719	0.080539505433719
+8524	1587	6872	0.0787299872144713	0.0787299872144713
+8525	6872	1652	0.0828966049530784	0.0828966049530784
+9751	2441	5738	0.170975903813153	0.170975903813153
+8528	6874	5702	0.0496353984033346	0.0496353984033346
+8529	5702	6875	0.0484896470155752	0.0484896470155752
+8530	6875	6876	0.0523105680266916	0.0523105680266916
+8531	6876	6877	0.100875098780012	0.100875098780012
+8532	6877	6878	0.0515810406741165	0.0515810406741165
+8533	6878	6879	0.0480493192441991	0.0480493192441991
+8534	6879	6532	0.0493288645061034	0.0493288645061034
+8535	6532	6880	0.0170276228852009	0.0170276228852009
+8537	1128	6881	0.0506249344560303	0.0506249344560303
+8538	6881	6882	0.0501120958003525	0.0501120958003525
+8539	6882	6883	0.0495209017571618	0.0495209017571618
+8540	6883	3846	0.0513776048731037	0.0513776048731037
+8541	3846	6884	0.0512508950828751	0.0512508950828751
+8542	6884	5564	0.0499163404494349	0.0499163404494349
+8543	5564	6885	0.0796596960320095	0.0796596960320095
+8544	6885	6886	0.709637932237075	0.709637932237075
+8545	3929	5619	0.0645570027229576	0.0645570027229576
+8546	5619	3704	0.0990278562894358	0.0990278562894358
+9775	2551	7512	0.408787216175776	0.408787216175776
+8547	3704	709	0.100036425190807	0.100036425190807
+8548	709	6887	0.100506522060904	0.100506522060904
+8549	6887	6888	0.0973098804153082	0.0973098804153082
+8550	6888	4190	0.138652686970481	0.138652686970481
+8551	4190	2516	0.130567043389136	0.130567043389136
+8552	2516	6727	0.134515842897036	0.134515842897036
+8553	6727	4804	0.136148376446663	0.136148376446663
+8555	6890	6891	0.127464290413413	0.127464290413413
+8558	4625	1248	0.132737908659339	0.132737908659339
+8560	4557	2726	0.131937670977173	0.131937670977173
+8561	2726	6892	0.133086814424956	0.133086814424956
+8562	6892	6893	0.0108053798662109	0.0108053798662109
+8564	6894	6753	0.13855912942418	0.13855912942418
+8565	6753	3977	0.202975190536315	0.202975190536315
+8567	4726	5125	0.0514216994322944	0.0514216994322944
+8569	6895	2262	0.104167713702112	0.104167713702112
+8570	2262	3612	0.100511868469799	0.100511868469799
+8571	3612	6896	0.101962634245626	0.101962634245626
+8572	6896	2111	0.0983046285910296	0.0983046285910296
+8573	2111	6000	0.10637347320659	0.10637347320659
+8574	6000	6897	0.0969032855683131	0.0969032855683131
+8575	6897	6898	1.19574032306189	1.19574032306189
+8576	3909	1049	0.101955415333633	0.101955415333633
+8577	1049	6280	0.110396580345644	0.110396580345644
+8580	4727	6902	0.104166457963925	0.104166457963925
+8581	6902	5404	0.105633279342784	0.105633279342784
+8582	5404	3137	0.103462723581867	0.103462723581867
+8583	3137	3910	0.106566211179802	0.106566211179802
+8585	6685	6904	0.1009798833353	0.1009798833353
+8586	6904	6905	0.0978861772455395	0.0978861772455395
+8588	6906	6907	0.0919209174538617	0.0919209174538617
+8589	6907	3448	0.0130685497791993	0.0130685497791993
+8590	3448	6908	0.0816132292801626	0.0816132292801626
+8591	6908	6909	0.0115722967665996	0.0115722967665996
+8592	6909	6910	0.0993816484498638	0.0993816484498638
+8593	6910	805	0.0976551438474913	0.0976551438474913
+8594	805	6911	0.0993747261569693	0.0993747261569693
+8595	6911	6912	0.089888887106785	0.089888887106785
+8596	6912	6913	0.0146747703329366	0.0146747703329366
+8598	6914	1237	0.101225406841245	0.101225406841245
+8600	4811	2178	0.0990205816012607	0.0990205816012607
+8602	596	6305	0.0508308915230223	0.0508308915230223
+8603	6305	350	0.0658146671565848	0.0658146671565848
+8604	350	6425	0.0344816945169531	0.0344816945169531
+8605	6425	6423	0.0330039992635189	0.0330039992635189
+8606	6423	5343	0.065281602891384	0.065281602891384
+8607	5343	4631	0.0645633414559121	0.0645633414559121
+8608	4631	4639	0.0344816846016407	0.0344816846016407
+8610	1260	4538	0.0975702004070908	0.0975702004070908
+8611	4538	4546	0.0337389213160247	0.0337389213160247
+8612	4546	6284	0.0652815653305245	0.0652815653305245
+8613	6284	2702	0.0682127836725729	0.0682127836725729
+8614	2702	2716	0.0295959518245788	0.0295959518245788
+8615	2716	6915	0.102272155307925	0.102272155307925
+8617	277	6916	0.0242091643473284	0.0242091643473284
+8618	6916	6917	0.127799932481727	0.127799932481727
+8620	6918	6919	0.100490474583826	0.100490474583826
+8621	6919	3936	0.103902551113693	0.103902551113693
+8623	5625	109	0.104159188317199	0.104159188317199
+9852	7555	7556	0.127428116197139	0.127428116197139
+8625	720	6920	0.107136629659166	0.107136629659166
+8626	6920	6921	0.0878190742496679	0.0878190742496679
+8627	6921	760	0.053327069779034	0.053327069779034
+8628	760	4203	0.0493954421158038	0.0493954421158038
+19719	10631	10629	0.0181769844157554	0.0181769844157554
+8629	4203	4204	0.0379739020862165	0.0379739020862165
+8630	4204	1070	0.0609601987006813	0.0609601987006813
+8631	1070	1071	0.0198138913639204	0.0198138913639204
+8632	1071	2506	0.0820743434648716	0.0820743434648716
+8634	6922	6923	0.0332474984310345	0.0332474984310345
+8635	6923	6924	0.0309457475923951	0.0309457475923951
+8636	6924	6925	0.06835161173269	0.06835161173269
+8641	2302	152	0.296479047850973	0.296479047850973
+8642	152	1739	0.201132602649999	0.201132602649999
+8643	1739	1717	0.0492912051446921	0.0492912051446921
+8645	6315	6820	0.175487833230143	0.175487833230143
+8646	6820	764	0.157172405718933	0.157172405718933
+8647	764	6004	0.389410143877071	0.389410143877071
+8648	6004	6244	0.10052021368651	0.10052021368651
+11455	8264	8265	0.215908830963319	0.215908830963319
+8649	6244	6929	0.161155152616492	0.161155152616492
+8651	6930	6931	0.00809135923630026	0.00809135923630026
+8652	6931	6869	0.0905079323611068	0.0905079323611068
+8653	6869	6932	0.702159216296169	0.702159216296169
+8654	4432	6933	0.289985249196455	0.289985249196455
+8655	6933	4666	0.0976954476351155	0.0976954476351155
+8656	4666	1333	0.0998446345260267	0.0998446345260267
+8657	1333	1388	0.0991189577824547	0.0991189577824547
+8658	1388	6935	0.105783123390058	0.105783123390058
+8659	6935	6850	0.108467199591529	0.108467199591529
+8660	6850	4706	0.0984536865396038	0.0984536865396038
+8661	4706	6936	0.0998638834924626	0.0998638834924626
+8662	6936	1757	0.0991299509071506	0.0991299509071506
+8664	2103	5985	0.0990139620475444	0.0990139620475444
+8665	5985	6937	0.103423317739921	0.103423317739921
+8666	6937	6938	0.197320023520399	0.197320023520399
+8667	6939	6940	0.0449145362146055	0.0449145362146055
+8668	6940	5016	0.051579913616047	0.051579913616047
+8670	6941	5111	0.0702390251054822	0.0702390251054822
+8671	5111	4709	0.111086762480312	0.111086762480312
+8672	4709	6805	0.12579570489738	0.12579570489738
+8673	6805	6942	0.0911912161186586	0.0911912161186586
+8674	6942	6943	0.0891583873267196	0.0891583873267196
+8675	6943	5415	0.0932705447088281	0.0932705447088281
+8676	5415	3141	0.0911590609752313	0.0911590609752313
+8677	3141	6944	0.0907415627456138	0.0907415627456138
+8678	6944	6945	0.0904253930261683	0.0904253930261683
+8679	6945	6282	0.0922034833120112	0.0922034833120112
+8680	6282	6946	0.0889556226914396	0.0889556226914396
+8681	6946	6947	0.115025423362082	0.115025423362082
+19720	10629	10630	0.00318458504180934	0.00318458504180934
+8684	4222	6948	0.095205143123347	0.095205143123347
+8685	6948	6949	0.0983217542586648	0.0983217542586648
+8686	6949	970	0.0973398284250994	0.0973398284250994
+8732	6248	6975	0.200150775141685	0.200150775141685
+8687	970	6950	0.0518030391212137	0.0518030391212137
+8688	6950	5288	0.0521176321182923	0.0521176321182923
+8689	5288	3153	0.0937167269922867	0.0937167269922867
+8690	3153	4969	0.095648805014101	0.095648805014101
+8691	4969	6951	0.121296465267735	0.121296465267735
+8717	1073	2508	0.0718764157350201	0.0718764157350201
+8692	6951	6952	0.17298014935093	0.17298014935093
+8694	2653	4114	0.0446473392844233	0.0446473392844233
+8695	4114	6503	0.0806749392848293	0.0806749392848293
+11460	8268	8269	0.0284404063889237	0.0284404063889237
+8696	6503	6953	0.0279965631557129	0.0279965631557129
+8698	6779	1327	0.149226176774822	0.149226176774822
+8700	4207	6955	0.0359776758472589	0.0359776758472589
+8701	6955	6956	0.0798254305300323	0.0798254305300323
+8702	4494	6957	0.0178038045740406	0.0178038045740406
+8703	6957	6958	0.00431775087438634	0.00431775087438634
+8704	6958	2148	0.120300859607691	0.120300859607691
+8705	2148	6960	0.151431823224066	0.151431823224066
+8706	6960	6961	0.22023318510828	0.22023318510828
+8707	6961	6962	0.137151335408755	0.137151335408755
+8708	6962	6963	0.0242055632480646	0.0242055632480646
+8709	6963	2150	0.0925314192010664	0.0925314192010664
+8710	2150	6964	0.068609567754435	0.068609567754435
+8712	6808	6965	0.180937589294771	0.180937589294771
+8713	6966	761	0.0469463147130834	0.0469463147130834
+8714	761	4205	0.0748160898012537	0.0748160898012537
+8715	4205	4398	0.0770157906569643	0.0770157906569643
+8716	4398	1073	0.0796290264805075	0.0796290264805075
+8746	6967	5689	0.127751851222379	0.127751851222379
+8719	271	2710	0.601401594481822	0.601401594481822
+11825	321	7799	0.115552151499094	0.115552151499094
+8720	2710	6969	0.136362355996719	0.136362355996719
+8721	6969	6742	0.135618421861975	0.135618421861975
+8722	6742	6141	0.132822121773709	0.132822121773709
+8723	6141	4014	0.136061285283967	0.136061285283967
+8724	4014	6970	0.13345730315891	0.13345730315891
+8725	6970	6971	0.133022272157071	0.133022272157071
+8726	6971	6972	0.0472485991851602	0.0472485991851602
+8727	6972	3385	0.0819883397602158	0.0819883397602158
+8729	6959	6973	0.0390638293285452	0.0390638293285452
+19721	10630	10622	0.0559555137804764	0.0559555137804764
+8731	6974	6248	0.201212600703242	0.201212600703242
+8733	6975	1496	0.201553427836696	0.201553427836696
+8734	1496	185	0.202686112287629	0.202686112287629
+8735	185	1713	0.204711477509581	0.204711477509581
+8736	1713	6976	0.201975316682274	0.201975316682274
+8737	6976	1579	0.167005027356132	0.167005027356132
+8738	1579	6977	0.309934492691155	0.309934492691155
+8739	1105	5871	0.176266848523138	0.176266848523138
+8740	5871	1323	0.177439022365804	0.177439022365804
+8741	1323	1379	0.176412320749863	0.176412320749863
+8742	1379	6978	0.0608448771470547	0.0608448771470547
+8744	6843	4695	0.114533137035158	0.114533137035158
+11961	2694	6570	0.292174399102456	0.292174399102456
+8745	4695	6967	0.15860414860374	0.15860414860374
+8747	5689	5336	0.153402847395547	0.153402847395547
+8749	6979	6980	0.0492417429246164	0.0492417429246164
+8750	6980	6981	0.0330798745582329	0.0330798745582329
+8751	6981	6982	0.110138574841473	0.110138574841473
+8756	6986	6701	0.0557097589480938	0.0557097589480938
+8757	6701	6987	0.145037158424782	0.145037158424782
+8759	6988	648	0.139238555969963	0.139238555969963
+8760	648	683	0.0653158999110773	0.0653158999110773
+8761	683	6989	0.0669742957793313	0.0669742957793313
+8762	6989	1988	0.0901527916408211	0.0901527916408211
+8763	1988	1972	0.0388238770836602	0.0388238770836602
+8764	1972	4588	0.104222260658419	0.104222260658419
+8765	4588	4594	0.0293535516568484	0.0293535516568484
+8766	4594	6498	0.0726584855189905	0.0726584855189905
+8767	6498	6481	0.0601855426433911	0.0601855426433911
+8768	6481	2470	0.141630886586724	0.141630886586724
+10003	6678	7628	0.0924131784678609	0.0924131784678609
+8771	6991	2401	0.344415463633539	0.344415463633539
+8772	2401	6992	0.121260728440928	0.121260728440928
+8773	6992	6604	0.426798504146684	0.426798504146684
+8774	6604	6993	0.0779497578426637	0.0779497578426637
+8775	6993	6994	0.328092841207435	0.328092841207435
+8776	6994	6997	0.409387625139532	0.409387625139532
+8777	6997	6998	0.0280465218891248	0.0280465218891248
+8778	6998	6999	0.240899685742567	0.240899685742567
+8780	7001	7002	0.172502393042501	0.172502393042501
+8781	7002	2338	0.177215228547836	0.177215228547836
+8782	2338	7003	0.175043780881437	0.175043780881437
+8783	7003	4782	0.243888745485023	0.243888745485023
+8784	4782	6558	0.132880580598771	0.132880580598771
+8785	6558	7004	0.106726338328234	0.106726338328234
+8787	2471	5909	0.20581191299575	0.20581191299575
+8789	7005	797	0.197387527656916	0.197387527656916
+10028	5604	7642	0.0520984767564003	0.0520984767564003
+8790	797	7006	0.203747525811746	0.203747525811746
+8793	7007	7008	0.196982052931457	0.196982052931457
+8794	7008	3062	0.205201724322207	0.205201724322207
+8795	3062	7009	0.184895139192435	0.184895139192435
+8796	7009	7010	0.0217892666308482	0.0217892666308482
+8798	7011	7012	0.200694925007541	0.200694925007541
+8799	7012	6367	0.0706060127631708	0.0706060127631708
+8800	6367	7013	0.13113311504647	0.13113311504647
+8801	7013	5949	0.203040029193448	0.203040029193448
+11962	6570	4451	0.149457420972406	0.149457420972406
+8802	5949	5141	0.190833355605879	0.190833355605879
+8804	2236	4909	0.189094446681925	0.189094446681925
+8805	4909	6613	0.199822606976101	0.199822606976101
+8806	6613	7014	0.196131290300381	0.196131290300381
+8807	7014	7015	0.207545863379423	0.207545863379423
+10052	7653	1099	0.0482102658012733	0.0482102658012733
+8809	4072	6057	0.192026411520301	0.192026411520301
+20532	10847	10848	0.0340308021704454	0.0340308021704454
+8810	6057	5797	0.200508266391225	0.200508266391225
+8812	7016	7017	0.20408918142509	0.20408918142509
+8813	7017	6590	0.201086157953578	0.201086157953578
+8814	6590	7018	0.202602619918689	0.202602619918689
+8816	7019	4577	0.129538344988774	0.129538344988774
+8817	4577	6441	0.138680608354748	0.138680608354748
+8818	6441	5293	0.134070515766336	0.134070515766336
+8819	5293	6970	0.13449026404854	0.13449026404854
+8820	6970	13	0.134902446032247	0.134902446032247
+8822	7020	382	0.124884712447894	0.124884712447894
+8823	382	7021	0.135229787557418	0.135229787557418
+8824	7021	7022	0.132193897477211	0.132193897477211
+8826	7023	7024	0.137222417835135	0.137222417835135
+8827	7024	7025	0.130431649234377	0.130431649234377
+8828	7025	7026	0.138849105164774	0.138849105164774
+8830	6206	7027	0.182945185531037	0.182945185531037
+8831	7027	7028	0.175756239821697	0.175756239821697
+20483	10830	10831	0.0908860058291454	0.0908860058291454
+8833	7029	7030	0.203242108673725	0.203242108673725
+8834	7030	7031	0.150413392817758	0.150413392817758
+8835	7031	2977	0.0550192556799276	0.0550192556799276
+8837	657	1886	0.0454008957908892	0.0454008957908892
+8838	1886	528	0.053551482812009	0.053551482812009
+8841	6092	1889	0.0508386682559075	0.0508386682559075
+8842	1889	7033	0.0498613554304776	0.0498613554304776
+8843	7033	7034	0.00951828955857414	0.00951828955857414
+8844	7034	7035	0.036894485571684	0.036894485571684
+8845	7035	6085	0.0480584959434146	0.0480584959434146
+8847	742	4527	0.0498820470218468	0.0498820470218468
+8848	4527	7036	0.0491481642660053	0.0491481642660053
+8849	7036	5246	0.0491592800418928	0.0491592800418928
+8850	5246	7037	0.0481362905740046	0.0481362905740046
+8851	7037	7038	0.0454453697348376	0.0454453697348376
+8852	7038	7039	0.0963504134151864	0.0963504134151864
+8853	7039	7040	0.0519319872070824	0.0519319872070824
+8854	7040	1663	0.0497523111621545	0.0497523111621545
+8855	1663	7041	0.0529510578680093	0.0529510578680093
+8856	7041	7042	0.0505381295725577	0.0505381295725577
+8857	7042	7043	0.0514848181594461	0.0514848181594461
+8858	7043	7044	0.0741692266458179	0.0741692266458179
+8861	7046	2493	0.132768776448504	0.132768776448504
+20533	10817	10849	0.0041587253937853	0.0041587253937853
+8864	2531	1932	0.0596099109005186	0.0596099109005186
+8865	1932	7047	0.205921914653592	0.205921914653592
+8867	7048	4043	0.179136537042624	0.179136537042624
+8868	4043	7049	0.176989263158491	0.176989263158491
+8869	7049	7050	0.100459005094488	0.100459005094488
+8871	7051	5531	0.109415807818528	0.109415807818528
+8872	5531	7052	0.29371056329192	0.29371056329192
+8874	7053	6824	0.0545745509742182	0.0545745509742182
+8875	6824	2424	0.081950775026488	0.081950775026488
+8876	2424	7054	0.050315704306832	0.050315704306832
+8877	7054	3228	0.0836964212853156	0.0836964212853156
+8879	4957	4034	0.0947298154946536	0.0947298154946536
+8881	7055	5863	0.174726781940175	0.174726781940175
+8882	5863	1311	0.179868913340571	0.179868913340571
+8883	1311	7056	0.241558820409428	0.241558820409428
+8885	7057	1506	0.131503726493835	0.131503726493835
+8886	1506	7058	0.131454642278669	0.131454642278669
+8888	1059	7059	0.104267738567829	0.104267738567829
+10122	3779	7683	0.15407703010384	0.15407703010384
+8890	4436	56	0.118965433489173	0.118965433489173
+8891	56	5316	0.100608812091724	0.100608812091724
+8892	5316	3496	0.0998861232245216	0.0998861232245216
+8893	3496	3665	0.201207219763356	0.201207219763356
+8894	3665	7060	0.199611951396181	0.199611951396181
+8895	7060	7061	0.203598851492666	0.203598851492666
+8896	7061	5840	0.200253664127546	0.200253664127546
+8897	5840	267	0.165246780486595	0.165246780486595
+8899	7062	7063	0.478103640034168	0.478103640034168
+8900	7064	5164	0.146200467670157	0.146200467670157
+8901	5164	6860	0.179928785347538	0.179928785347538
+8902	6860	7065	0.0135383927129561	0.0135383927129561
+8903	7065	2385	0.105505653234926	0.105505653234926
+8905	3637	7066	0.183542084850882	0.183542084850882
+8907	5956	7067	0.0986953923423101	0.0986953923423101
+8908	7067	3021	0.00874922983807779	0.00874922983807779
+20416	10767	10781	0.00791916641108638	0.00791916641108638
+8910	7068	4380	0.0528744797047038	0.0528744797047038
+8911	4380	7069	0.100067477522489	0.100067477522489
+8912	7069	7070	0.00503051016222424	0.00503051016222424
+8913	7070	7071	0.0533378396892988	0.0533378396892988
+8914	7071	7072	0.0517118729985249	0.0517118729985249
+8915	7072	7073	0.0528720185185965	0.0528720185185965
+8916	7073	7074	0.0524160104100909	0.0524160104100909
+8917	7074	7075	0.0591259627190951	0.0591259627190951
+8918	7075	7076	0.0472141967853771	0.0472141967853771
+8919	7076	7077	0.0523938554164358	0.0523938554164358
+8920	7077	7078	0.0519698920804767	0.0519698920804767
+18299	6996	6464	0.157978818539649	0.157978818539649
+18300	6464	5526	0.155386531700968	0.155386531700968
+8921	7078	7079	0.0533446665935528	0.0533446665935528
+8922	7079	6175	0.0539515629761608	0.0539515629761608
+8923	6175	7080	0.0522978151475426	0.0522978151475426
+19723	10628	10634	0.0467495933951474	0.0467495933951474
+8924	7080	3310	0.051621129553778	0.051621129553778
+8925	3310	7081	0.0537939712546602	0.0537939712546602
+8926	7081	7082	0.0517442194955157	0.0517442194955157
+8957	6821	767	0.155663516472162	0.155663516472162
+8928	6333	7083	0.0368397497726965	0.0368397497726965
+8930	7084	756	0.02205451477657	0.02205451477657
+8931	756	1542	0.146566188527195	0.146566188527195
+8933	7085	7086	0.470303961651379	0.470303961651379
+8936	6193	6949	0.198646201862192	0.198646201862192
+8937	6949	7088	0.203154460121287	0.203154460121287
+8938	7088	7089	0.0315254339634626	0.0315254339634626
+11963	4451	5499	0.142902063925945	0.142902063925945
+8939	1547	4267	0.203186762796229	0.203186762796229
+8940	4267	281	0.118834586231474	0.118834586231474
+8942	4988	5631	0.199717559309749	0.199717559309749
+8943	5631	2363	0.114164400355602	0.114164400355602
+8944	2363	4145	0.172388156251151	0.172388156251151
+8945	4145	4750	0.181329134759237	0.181329134759237
+8946	4750	7090	0.0742131518569267	0.0742131518569267
+8947	7090	6563	0.101353119972535	0.101353119972535
+8949	561	652	0.180277903435168	0.180277903435168
+8950	652	7091	0.1782898608686	0.1782898608686
+8951	7091	4618	0.177690137841113	0.177690137841113
+8952	4618	6484	0.148000947434632	0.148000947434632
+8953	6484	3683	0.147902463423831	0.147902463423831
+8955	7092	562	0.138318567115304	0.138318567115304
+14765	7355	5462	0.177046926118077	0.177046926118077
+8958	767	6719	0.219350766482543	0.219350766482543
+8959	6719	6005	0.0551645975375965	0.0551645975375965
+8961	7093	7094	0.0134618314671123	0.0134618314671123
+8962	7094	7095	0.0768336523164077	0.0768336523164077
+8964	4351	7096	0.187825105408858	0.187825105408858
+8966	5169	7097	0.173957232527163	0.173957232527163
+8967	7097	2358	0.178391537286392	0.178391537286392
+8968	2358	4158	0.173186099094122	0.173186099094122
+8969	4158	4745	0.175498953556533	0.175498953556533
+8970	4745	6540	0.175479189908249	0.175479189908249
+8971	6540	7098	0.165132887334241	0.165132887334241
+8974	900	4481	0.13673901951185	0.13673901951185
+8975	4481	2805	0.133564794339907	0.133564794339907
+8976	2805	5271	0.130621351715569	0.130621351715569
+8977	5271	6911	0.123597927289001	0.123597927289001
+8978	6911	7100	0.15221685519733	0.15221685519733
+8979	7100	6360	0.259362269049004	0.259362269049004
+8981	7102	704	0.204412961923	0.204412961923
+19726	10627	10635	0.0226092820114286	0.0226092820114286
+8984	7103	1210	0.168411442672594	0.168411442672594
+8985	1210	7104	0.0210253069731913	0.0210253069731913
+8986	7104	3769	0.199568149574658	0.199568149574658
+8987	3769	7105	0.154728508227155	0.154728508227155
+8988	7105	960	0.176377624617973	0.176377624617973
+8989	960	7106	0.174688777733473	0.174688777733473
+8990	7106	4897	0.160532597504136	0.160532597504136
+8991	4897	7107	0.182971792068578	0.182971792068578
+8992	7107	5494	0.175655210225522	0.175655210225522
+8994	7108	7109	0.103100291492917	0.103100291492917
+8995	7109	7110	0.101964294660044	0.101964294660044
+8998	7112	6130	0.00642185713601216	0.00642185713601216
+8999	6130	3973	0.100482235790598	0.100482235790598
+9000	3973	7018	0.0985643830580019	0.0985643830580019
+9001	7018	1404	0.0976294798550341	0.0976294798550341
+9002	1404	7113	0.0934722476940573	0.0934722476940573
+9003	7113	3377	0.114974498647875	0.114974498647875
+9004	3377	5719	0.0923374297912636	0.0923374297912636
+9006	4633	4552	0.211900461491767	0.211900461491767
+9008	7114	1219	0.0873426128412716	0.0873426128412716
+9009	1219	7115	0.154859667381265	0.154859667381265
+9011	128	4195	0.0990809801322014	0.0990809801322014
+9012	4195	2526	0.225168737431611	0.225168737431611
+9015	7118	7119	0.0484685816363468	0.0484685816363468
+9016	7119	6647	0.0431240450937402	0.0431240450937402
+9017	6647	7120	0.0651283567093235	0.0651283567093235
+9020	7121	5612	0.0589161599786899	0.0589161599786899
+9021	5612	7122	0.0519812671049742	0.0519812671049742
+9022	7122	3734	0.0556068739901258	0.0556068739901258
+9024	4852	7123	0.126059374848785	0.126059374848785
+9025	7123	7124	0.118149722641793	0.118149722641793
+9026	7124	7125	0.121835161075312	0.121835161075312
+9027	7125	7126	0.110094663779518	0.110094663779518
+9028	7126	4678	0.101155068622002	0.101155068622002
+9029	4678	4925	0.0375558738681089	0.0375558738681089
+9031	7127	5718	0.122304701667431	0.122304701667431
+9033	7129	7130	0.00755996146089403	0.00755996146089403
+11437	7984	8034	0.589388539362218	0.589388539362218
+9034	7130	7131	0.0405147672355999	0.0405147672355999
+15917	9748	9104	0.13371062185673	0.13371062185673
+9036	7132	7133	0.0505601360898234	0.0505601360898234
+9037	7133	7134	0.050337833066874	0.050337833066874
+9039	2563	2043	0.341755774769512	0.341755774769512
+9040	2043	4280	0.587618591665046	0.587618591665046
+9041	4280	2317	0.145996435168453	0.145996435168453
+9042	2317	7135	0.26875426467805	0.26875426467805
+9044	4276	6167	0.145395831525207	0.145395831525207
+9045	6167	7136	0.583394412429138	0.583394412429138
+9046	7136	7137	0.0430989040252276	0.0430989040252276
+9048	7138	7139	0.17847978963111	0.17847978963111
+9049	7139	665	0.00426988518248375	0.00426988518248375
+9050	665	7140	0.0039363004033923	0.0039363004033923
+9051	7140	7141	0.126828000444838	0.126828000444838
+9052	7141	7142	0.0463243816448395	0.0463243816448395
+9053	7142	4606	0.175854779813893	0.175854779813893
+13036	8929	8930	0.492762775909981	0.492762775909981
+9054	4606	2885	0.129583918723674	0.129583918723674
+9056	818	3559	0.139007675873083	0.139007675873083
+9057	3559	5633	0.138607438022671	0.138607438022671
+9060	5632	7143	0.0971697431213832	0.0971697431213832
+9061	7143	4337	0.0573209846859246	0.0573209846859246
+9062	4337	6336	0.137619327969477	0.137619327969477
+9063	6336	3051	0.138690015537613	0.138690015537613
+9064	3051	7144	0.13740372400277	0.13740372400277
+9065	7144	7145	0.00531536492655497	0.00531536492655497
+9066	7145	7146	0.138359891845979	0.138359891845979
+9069	873	4461	0.138000198054367	0.138000198054367
+9070	4461	2781	0.134827246932882	0.134827246932882
+9073	6941	5768	0.263560531238909	0.263560531238909
+9074	5768	7148	0.00867578094755507	0.00867578094755507
+9075	6325	4168	0.192770537182593	0.192770537182593
+9076	4168	4753	0.208190261859574	0.208190261859574
+9077	4753	6544	0.199662965025148	0.199662965025148
+9078	6544	7149	0.203286576405629	0.203286576405629
+9079	7149	7150	0.188877376950956	0.188877376950956
+9080	7150	3796	0.199750569153682	0.199750569153682
+9081	3796	5939	0.152615142478991	0.152615142478991
+9082	5939	940	0.17776127985835	0.17776127985835
+9083	940	2224	0.184599395002716	0.184599395002716
+9084	2224	4874	0.160770298676863	0.160770298676863
+9085	4874	7151	0.191866995309803	0.191866995309803
+9086	7151	5472	0.170431656658562	0.170431656658562
+9087	5472	7152	0.177051030738846	0.177051030738846
+9089	7153	7154	0.0893451644905786	0.0893451644905786
+9090	7154	6170	0.0753374734775839	0.0753374734775839
+9091	6170	4764	0.177646502224828	0.177646502224828
+9092	4764	4150	0.173084945690311	0.173084945690311
+9094	2344	7155	0.117646857783728	0.117646857783728
+9095	7155	7156	0.0188390787773898	0.0188390787773898
+9096	7156	7157	0.234434662963778	0.234434662963778
+9097	7157	7158	0.0252454738977112	0.0252454738977112
+9100	7159	7160	0.136141908223257	0.136141908223257
+9101	7160	7161	0.134175303690261	0.134175303690261
+9102	7161	5540	0.104957650418394	0.104957650418394
+9103	5540	2408	0.0972515972300324	0.0972515972300324
+9104	2408	4293	0.0986699082335262	0.0986699082335262
+9105	4293	7163	0.053830719074408	0.053830719074408
+9107	7164	7165	0.0631810706690825	0.0631810706690825
+9108	7165	2982	0.341967827784909	0.341967827784909
+9109	2982	7166	0.203801982791161	0.203801982791161
+9110	7166	7167	0.199088364823678	0.199088364823678
+9111	7167	7168	0.00801722711592813	0.00801722711592813
+9112	7168	7169	0.0420988990456398	0.0420988990456398
+9113	7169	7170	0.153973329045923	0.153973329045923
+9114	7170	6877	0.206323620437175	0.206323620437175
+9115	6877	1688	0.202556013709455	0.202556013709455
+10335	2984	7779	0.0471482180711068	0.0471482180711068
+9116	1688	7171	0.203959165094635	0.203959165094635
+9117	7171	2434	0.200457262733771	0.200457262733771
+9118	2434	7172	0.202529539970889	0.202529539970889
+9119	7172	6459	0.289084578375032	0.289084578375032
+19730	5374	10637	0.0120223368882016	0.0120223368882016
+9120	6459	7173	0.114101346723939	0.114101346723939
+9121	7173	7174	0.184116579370581	0.184116579370581
+9122	7174	7175	0.203885371802177	0.203885371802177
+9123	7175	7176	0.042345014713444	0.042345014713444
+9124	7176	7177	0.0543545796747623	0.0543545796747623
+9125	7177	1424	0.112240471555906	0.112240471555906
+9128	7179	6066	0.193267920890686	0.193267920890686
+9129	6066	2546	0.202503184194707	0.202503184194707
+9130	2546	7180	0.41050413821522	0.41050413821522
+9131	6215	7181	0.274932291342238	0.274932291342238
+9132	7181	7182	0.263103709588239	0.263103709588239
+9133	7182	7183	0.130644941399459	0.130644941399459
+9134	2594	5185	0.17867940782894	0.17867940782894
+9137	5066	4054	0.176950276628118	0.176950276628118
+9138	4054	7184	0.19508037930475	0.19508037930475
+19295	10466	10470	0.0590667450333129	0.0590667450333129
+9139	7184	1855	0.159486883286254	0.159486883286254
+9140	1855	2595	0.177991984486361	0.177991984486361
+9142	7132	7185	0.200740739267956	0.200740739267956
+9144	317	5720	0.10120960072344	0.10120960072344
+9146	7186	7178	0.0998150102985703	0.0998150102985703
+9147	7178	7187	0.0486556483534758	0.0486556483534758
+9148	7187	7188	0.0504244958733159	0.0504244958733159
+9149	7188	6720	0.0492257170939005	0.0492257170939005
+9150	6720	1139	0.0498554245278369	0.0498554245278369
+9151	1139	6900	0.0496729718772752	0.0496729718772752
+9152	6900	7189	0.0498269762893686	0.0498269762893686
+9153	7189	7190	0.0493080365100491	0.0493080365100491
+9154	7190	3869	0.0507905077365378	0.0507905077365378
+9155	3869	7191	0.0511248031667964	0.0511248031667964
+9156	7191	5583	0.0514153335527058	0.0514153335527058
+9158	6374	7192	0.0508291685906189	0.0508291685906189
+9159	7192	4828	0.0505211822659055	0.0505211822659055
+9160	4828	7193	0.0991435070786191	0.0991435070786191
+9161	7193	7194	0.0991520630524694	0.0991520630524694
+9162	7194	7195	0.0477883926406413	0.0477883926406413
+9163	7195	7196	0.0494484339552123	0.0494484339552123
+9164	7196	7197	0.0162046310747774	0.0162046310747774
+9166	7198	6674	0.0990044216409842	0.0990044216409842
+9167	6674	3118	0.097669089391913	0.097669089391913
+9168	3118	7199	0.284505571449601	0.284505571449601
+9169	7199	6008	0.094118222257641	0.094118222257641
+9170	6008	2844	0.0930401433253343	0.0930401433253343
+9171	2844	3493	0.0866696350082772	0.0866696350082772
+9172	3493	5349	0.0889131869713594	0.0889131869713594
+9174	5392	2946	0.0903397575627338	0.0903397575627338
+9175	2946	6812	0.0903546565690543	0.0903546565690543
+9176	6812	1813	0.0889131954631002	0.0889131954631002
+9179	7201	7202	0.0514316470718889	0.0514316470718889
+9180	7202	571	0.0452247620537137	0.0452247620537137
+9181	571	4984	0.0498774301127379	0.0498774301127379
+9182	4984	7203	0.0499341834444621	0.0499341834444621
+9183	7203	7204	0.048540539361363	0.048540539361363
+9184	7204	7205	0.049454954432791	0.049454954432791
+9185	7205	7206	0.0536988191890685	0.0536988191890685
+9186	7206	7207	0.0531339953218732	0.0531339953218732
+9188	7208	7209	0.0488986834694409	0.0488986834694409
+10408	7087	974	0.0520701135747565	0.0520701135747565
+9190	3616	7210	0.0490025655343953	0.0490025655343953
+9191	7210	7211	0.0492346778344629	0.0492346778344629
+9192	7211	6627	0.0474835705848566	0.0474835705848566
+9193	6627	7212	0.0259857221754392	0.0259857221754392
+9195	7213	2937	0.0797219985274474	0.0797219985274474
+9197	4927	7214	0.0675624031978383	0.0675624031978383
+9198	7214	7215	0.172837829649445	0.172837829649445
+9199	7215	7216	0.0152456900319388	0.0152456900319388
+9201	7217	7218	0.150068688599712	0.150068688599712
+9202	7218	3717	0.0523950557178934	0.0523950557178934
+9203	3717	7219	0.104026300075926	0.104026300075926
+9204	7219	7220	0.176478214187187	0.176478214187187
+9205	7220	2618	0.176744455093666	0.176744455093666
+9206	2618	7221	0.0524078444870275	0.0524078444870275
+9207	7221	5199	0.124408908082812	0.124408908082812
+9208	5199	6236	0.175254349133775	0.175254349133775
+9209	6236	7222	0.181371367707484	0.181371367707484
+9210	7222	7223	0.17624861030264	0.17624861030264
+10431	7818	3372	0.256942906695214	0.256942906695214
+9211	7223	7224	0.177882160330428	0.177882160330428
+9212	7224	6596	0.176655139096338	0.176655139096338
+9213	6596	7225	0.176764713771947	0.176764713771947
+9214	7225	7117	0.195263815592674	0.195263815592674
+9215	7117	7226	0.162883394969853	0.162883394969853
+9217	7227	7228	0.0929813395053153	0.0929813395053153
+9218	7228	7229	0.0382886967355643	0.0382886967355643
+9220	5754	5537	0.136674994706822	0.136674994706822
+9222	7230	2419	0.0601608416165443	0.0601608416165443
+9224	7231	1877	0.0370441528846065	0.0370441528846065
+9225	1877	7232	0.131692111532173	0.131692111532173
+9227	7233	7234	0.109254283787097	0.109254283787097
+9228	7234	7235	0.0988980977520615	0.0988980977520615
+9229	7235	7236	0.100150595242985	0.100150595242985
+9230	7236	7237	0.0982491727225652	0.0982491727225652
+9231	7237	7238	0.102801611377818	0.102801611377818
+9232	7238	3624	0.10072637054969	0.10072637054969
+9233	3624	7239	0.0490877236423196	0.0490877236423196
+9234	7239	7240	0.0506406047895119	0.0506406047895119
+9236	7241	7242	0.053434962453162	0.053434962453162
+9238	7243	2049	0.0999533143701506	0.0999533143701506
+9239	2049	6322	0.101276003642563	0.101276003642563
+9240	6322	7245	0.101332248433824	0.101332248433824
+9241	7245	7246	0.0464773018813961	0.0464773018813961
+9242	7246	3478	0.0519094915924	0.0519094915924
+9243	3478	7247	0.0444674652348498	0.0444674652348498
+9244	7247	6076	0.0542711695249793	0.0542711695249793
+9245	6076	7248	0.0457685619049607	0.0457685619049607
+9246	7248	3693	0.0511581578497335	0.0511581578497335
+9247	3693	7249	0.0484213428818718	0.0484213428818718
+9248	7249	4568	0.050423249762551	0.050423249762551
+9249	4568	7250	0.105671525256593	0.105671525256593
+9251	3486	5352	0.142707971743977	0.142707971743977
+9252	5352	5389	0.0672375375003041	0.0672375375003041
+9254	6807	7251	0.174038770872886	0.174038770872886
+9255	5582	7252	0.0700127444942287	0.0700127444942287
+9256	3438	7253	0.0456922323357007	0.0456922323357007
+9257	7253	5712	0.0536735809918437	0.0536735809918437
+9258	5712	7254	0.0996465050991051	0.0996465050991051
+9259	7254	7177	0.0990312619116669	0.0990312619116669
+9261	2234	5135	0.107869698056021	0.107869698056021
+9263	5150	4905	0.0686856789021931	0.0686856789021931
+9264	4905	6617	0.200618729294218	0.200618729294218
+9265	6617	7255	0.197431040074393	0.197431040074393
+9266	7255	7256	0.208183749937444	0.208183749937444
+9267	7256	645	0.141740585620374	0.141740585620374
+9268	645	7257	0.130628958724451	0.130628958724451
+9269	7257	1991	0.0908850253123808	0.0908850253123808
+9270	1991	1975	0.0373563291181619	0.0373563291181619
+9271	1975	4592	0.133760117820733	0.133760117820733
+9272	4592	6479	0.133361447138617	0.133361447138617
+9273	6479	2465	0.142787478559072	0.142787478559072
+9275	7258	905	0.276860539558146	0.276860539558146
+9276	905	7259	0.128469118479352	0.128469118479352
+9278	7260	7261	0.202325557275685	0.202325557275685
+9279	7261	7262	0.200099452464053	0.200099452464053
+9281	6555	7263	0.106048977208119	0.106048977208119
+9283	2464	5907	0.204805215249635	0.204805215249635
+9284	5907	7264	0.200064951669816	0.200064951669816
+9285	7264	792	0.198575253788857	0.198575253788857
+9286	792	7265	0.203153130979463	0.203153130979463
+20553	10855	10830	0.00226863418878014	0.00226863418878014
+9287	7265	4356	0.200718125919129	0.200718125919129
+9288	4356	7266	0.203231013450801	0.203231013450801
+9289	7266	3059	0.208369469805255	0.208369469805255
+9290	3059	7267	0.184116398047724	0.184116398047724
+9292	7268	7269	0.172274443384772	0.172274443384772
+9293	7269	7270	0.174965358395498	0.174965358395498
+9294	7270	7271	0.171051925436011	0.171051925436011
+9295	7271	4777	0.251271094456806	0.251271094456806
+9297	7272	7273	0.142786274588455	0.142786274588455
+9298	7273	7257	0.143845033730321	0.143845033730321
+9299	7257	2012	0.148104007431453	0.148104007431453
+9300	2012	7274	0.146908840218292	0.146908840218292
+9303	3209	6121	0.198338421830571	0.198338421830571
+9305	1920	7245	0.200452444306493	0.200452444306493
+9306	7245	3264	0.201454965709232	0.201454965709232
+9307	3264	7275	0.199928677430985	0.199928677430985
+9308	7275	75	0.205218774272454	0.205218774272454
+9309	75	3514	0.203667659516003	0.203667659516003
+9310	3514	4256	0.200449218475779	0.200449218475779
+9312	7276	7277	0.199018039984475	0.199018039984475
+9314	3099	7278	0.127218718588174	0.127218718588174
+9315	7279	7280	0.0142903725965103	0.0142903725965103
+9316	7280	7281	0.105207552208829	0.105207552208829
+9317	7282	7283	0.0344899807253543	0.0344899807253543
+9318	7283	221	0.0709873405596775	0.0709873405596775
+9319	221	484	0.00880336166381634	0.00880336166381634
+9320	484	7284	0.0467023879280561	0.0467023879280561
+9321	7284	7285	0.0520434565562666	0.0520434565562666
+9322	7285	7286	0.0966986010135768	0.0966986010135768
+9324	7287	7288	0.0474221057340072	0.0474221057340072
+9325	7288	7289	0.0544896557893494	0.0544896557893494
+18313	7291	7292	0.0491935106031602	0.0491935106031602
+12266	8623	8624	0.00987394368395642	0.00987394368395642
+9326	7289	7293	0.050792182381771	0.050792182381771
+9327	7293	7294	0.0490541601102182	0.0490541601102182
+9328	7294	3625	0.0491311379128154	0.0491311379128154
+9329	3625	7295	0.0500044548990436	0.0500044548990436
+9330	7295	7296	0.0493114932484129	0.0493114932484129
+9331	7296	7297	0.0492273088766844	0.0492273088766844
+9332	7297	7298	0.0497149327544833	0.0497149327544833
+9333	7298	7299	0.052416983039433	0.052416983039433
+9334	7299	1775	0.0489179547921138	0.0489179547921138
+9335	1775	7300	0.0992252392752366	0.0992252392752366
+9338	1523	7301	0.0991304181855472	0.0991304181855472
+9340	4180	7302	0.159005264658095	0.159005264658095
+9342	7303	7304	0.0508070845581107	0.0508070845581107
+9344	2051	7305	0.0464895652372381	0.0464895652372381
+9346	6323	7306	0.0487652334573382	0.0487652334573382
+9347	7306	7275	0.0511008721086019	0.0511008721086019
+9348	7275	7307	0.0472167292045061	0.0472167292045061
+9349	7307	3479	0.0519136696037329	0.0519136696037329
+9350	3479	7308	0.0469673771341736	0.0469673771341736
+9351	7308	6077	0.0514245726695928	0.0514245726695928
+9353	7309	3694	0.0517124258100223	0.0517124258100223
+9354	3694	7310	0.0465067719763774	0.0465067719763774
+9355	7310	4569	0.0489536209610463	0.0489536209610463
+9356	4569	7311	0.0489635595580148	0.0489635595580148
+9357	7311	7312	0.0558091568866214	0.0558091568866214
+9359	5166	6862	0.178524347295205	0.178524347295205
+10575	7382	7866	0.0530283440074436	0.0530283440074436
+9361	5665	7313	0.0484754519993524	0.0484754519993524
+9362	7313	7314	0.161386441141289	0.161386441141289
+9363	7314	57	0.142345062746265	0.142345062746265
+9365	3497	7315	0.199650199137315	0.199650199137315
+9366	7315	7316	0.20195222577189	0.20195222577189
+9368	7317	7318	0.0198371749129227	0.0198371749129227
+9369	7318	2347	0.132104544578518	0.132104544578518
+9370	2347	4152	0.17573096379452	0.17573096379452
+9371	4152	4739	0.172852869151079	0.172852869151079
+9372	4739	6534	0.176755786446123	0.176755786446123
+9373	6534	7319	0.165399065875657	0.165399065875657
+9376	1193	7321	0.0221951663944447	0.0221951663944447
+9377	7321	3785	0.200018254719297	0.200018254719297
+9379	6356	2387	0.110864888603468	0.110864888603468
+9380	2387	7322	0.139379472361554	0.139379472361554
+9381	7322	7323	0.046481070265731	0.046481070265731
+9382	7323	745	0.0926146092564692	0.0926146092564692
+9383	745	1563	0.142337228385207	0.142337228385207
+9384	1563	7324	0.139015648234869	0.139015648234869
+9385	7324	7325	0.121637038292373	0.121637038292373
+9387	7326	1054	0.0187920378071022	0.0187920378071022
+9388	1054	7327	0.1804815052178	0.1804815052178
+9389	7327	7328	0.200952784069958	0.200952784069958
+9390	7328	2873	0.135770477885413	0.135770477885413
+9391	2873	7329	0.140734857106897	0.140734857106897
+9392	7329	7330	0.130551116437319	0.130551116437319
+9394	3573	5641	0.135671111475822	0.135671111475822
+9395	5641	4346	0.139178472263861	0.139178472263861
+9397	6344	3047	0.139334930188281	0.139334930188281
+9398	3047	7331	0.13779347001033	0.13779347001033
+9399	7331	7332	0.00320242529462838	0.00320242529462838
+9400	7332	7333	0.124149220639337	0.124149220639337
+9401	7333	7334	0.0152895413448354	0.0152895413448354
+9402	7334	1168	0.139240705026111	0.139240705026111
+9403	1168	888	0.137184892852111	0.137184892852111
+9404	888	4473	0.140290329638987	0.140290329638987
+9405	4473	2795	0.133122605689938	0.133122605689938
+18387	8972	8990	0.0135489498420418	0.0135489498420418
+9406	2795	5263	0.132274155849312	0.132274155849312
+9408	5264	7335	0.142105114812744	0.142105114812744
+9409	7336	7337	0.0976207961374284	0.0976207961374284
+9410	7337	4886	0.157275932372423	0.157275932372423
+9411	4886	7338	0.185720302610988	0.185720302610988
+9412	7338	5484	0.174899259954025	0.174899259954025
+9413	5484	7339	0.200596009359583	0.200596009359583
+9415	7001	7340	0.179314344082203	0.179314344082203
+9416	7340	3105	0.172536320867715	0.172536320867715
+9417	3105	7341	0.196295851159965	0.196295851159965
+9418	7341	7342	0.0146987319128723	0.0146987319128723
+9419	7342	5274	0.233778976885029	0.233778976885029
+9421	61	3550	0.201334976523304	0.201334976523304
+9423	4229	1512	0.0573285646726125	0.0573285646726125
+9424	1512	1812	0.080316497766985	0.080316497766985
+9425	1812	1792	0.0864981124104349	0.0864981124104349
+9426	1792	5766	0.0789087886834876	0.0789087886834876
+9427	5766	7199	0.0992911764787047	0.0992911764787047
+9428	7199	6828	0.11119492664509	0.11119492664509
+9429	6828	5849	0.0944254133826228	0.0944254133826228
+9430	5849	6009	0.0132155676036954	0.0132155676036954
+9431	6009	6306	0.0820521132716854	0.0820521132716854
+9432	6306	7343	0.105450198242036	0.105450198242036
+9433	7343	6621	0.143519415278471	0.143519415278471
+9434	6621	7344	1.27038946039582	1.27038946039582
+9437	4173	4758	0.21160422195521	0.21160422195521
+9439	7347	7348	0.135937832662874	0.135937832662874
+9440	7348	7349	0.00392915540186096	0.00392915540186096
+9441	7349	7350	0.00435925191977174	0.00435925191977174
+9442	7350	7351	0.134680718743296	0.134680718743296
+9443	7351	7352	0.142353643667365	0.142353643667365
+9444	7352	822	0.136144392169031	0.136144392169031
+9445	822	3563	0.139511434934294	0.139511434934294
+9447	4757	6547	0.198421257470946	0.198421257470946
+9448	6547	7353	0.203512578195826	0.203512578195826
+9449	7353	7354	0.189733642798723	0.189733642798723
+9450	7354	3791	0.198902472958717	0.198902472958717
+9452	7356	1156	0.139895555737197	0.139895555737197
+9453	1156	877	0.139167763247538	0.139167763247538
+9454	877	4465	0.138362926550376	0.138362926550376
+9455	4465	2785	0.134223449290719	0.134223449290719
+9456	2785	5256	0.132255447080442	0.132255447080442
+10701	7933	7934	0.0165824928197296	0.0165824928197296
+9457	5256	6902	0.213396689593523	0.213396689593523
+9458	6902	7357	0.137952680025601	0.137952680025601
+9460	7358	7359	0.0873817304884455	0.0873817304884455
+9461	7359	5476	0.17425617170475	0.17425617170475
+9462	5476	7360	0.176755476074969	0.176755476074969
+9463	7360	7361	0.179271064370159	0.179271064370159
+9464	7361	670	0.00299320804688776	0.00299320804688776
+9465	670	7362	0.00367138449467953	0.00367138449467953
+9466	7362	7363	0.175413304982356	0.175413304982356
+9467	7363	4602	0.174300257248449	0.174300257248449
+9468	4602	6494	0.14109328269368	0.14109328269368
+9470	6339	3027	0.140999530277673	0.140999530277673
+9471	3027	7364	0.134294188280294	0.134294188280294
+9472	7364	7367	0.00539295394286677	0.00539295394286677
+9473	7367	7368	0.0958510973743428	0.0958510973743428
+9474	7369	7370	0.0190810494123846	0.0190810494123846
+9475	7370	4174	0.200419085556528	0.200419085556528
+9476	4174	4759	0.205255972403598	0.205255972403598
+9478	7371	1504	0.200818042076817	0.200818042076817
+9479	1504	177	0.202381091183512	0.202381091183512
+9481	7048	5860	0.176960295698989	0.176960295698989
+9482	5860	1308	0.177680958846967	0.177680958846967
+9483	1308	7372	0.242287040915104	0.242287040915104
+9485	7373	7374	0.0554606112260645	0.0554606112260645
+9486	7374	6759	0.139083865409791	0.139083865409791
+9487	6759	3983	0.201208667852087	0.201208667852087
+9488	3983	7042	0.200146227687253	0.200146227687253
+9489	7042	3429	0.200588668938452	0.200588668938452
+9491	7375	7376	0.134975501915893	0.134975501915893
+9492	7376	2494	0.132763759551609	0.132763759551609
+9493	2494	2841	0.125447252672452	0.125447252672452
+9495	7377	1766	0.0535653036014808	0.0535653036014808
+9496	1766	7378	0.148946577862237	0.148946577862237
+9497	7378	7379	0.151136159766357	0.151136159766357
+9498	7379	2978	0.0542010510807056	0.0542010510807056
+9500	6210	7380	0.184339220967731	0.184339220967731
+9501	7380	7381	0.177783326711723	0.177783326711723
+9503	7055	4046	0.178402656739544	0.178402656739544
+9504	4046	7382	0.177334708763743	0.177334708763743
+9505	7382	1847	0.175265460280809	0.175265460280809
+9506	1847	2581	0.177411624203835	0.177411624203835
+9508	5179	7383	0.0621659509396009	0.0621659509396009
+9510	7384	5530	0.101603812835917	0.101603812835917
+9511	5530	6476	0.0959541548395336	0.0959541548395336
+9512	6476	7385	0.197309689587966	0.197309689587966
+9514	7386	4578	0.133367493492184	0.133367493492184
+9515	4578	6442	0.135224444657643	0.135224444657643
+9516	6442	5294	0.135202388191056	0.135202388191056
+9517	5294	6971	0.132090452543352	0.132090452543352
+9519	7387	6793	0.0526421759963202	0.0526421759963202
+9520	6793	2426	0.0832334466071371	0.0832334466071371
+9521	2426	7292	0.0515611894823623	0.0515611894823623
+9522	7292	3230	0.0818841223845197	0.0818841223845197
+9523	3230	7388	0.142866769580008	0.142866769580008
+9525	7389	7390	0.203322823967769	0.203322823967769
+9529	7391	7392	0.135325738854945	0.135325738854945
+9530	7392	7393	0.132395815694125	0.132395815694125
+9531	7393	7394	0.135014881681412	0.135014881681412
+9532	7394	7395	0.132077333868835	0.132077333868835
+9535	7397	621	0.0257970801977961	0.0257970801977961
+9537	4075	6060	0.199263565882924	0.199263565882924
+9538	6060	5800	0.199550446273018	0.199550446273018
+9540	7398	3097	0.199450454556748	0.199450454556748
+9541	3097	3207	0.202536688546866	0.202536688546866
+9542	3207	6119	0.201707926741417	0.201707926741417
+9543	6119	1917	0.201109266380341	0.201109266380341
+9544	1917	7243	0.20045244430598	0.20045244430598
+9545	7243	594	0.202390514467061	0.202390514467061
+9547	7399	5843	0.208569621956493	0.208569621956493
+9549	7400	5659	0.10300363118025	0.10300363118025
+9550	5659	7401	0.0544972381418925	0.0544972381418925
+9552	6194	6950	0.191455920710939	0.191455920710939
+9553	6950	7402	0.209004541630565	0.209004541630565
+9555	4943	7403	0.0144437903083984	0.0144437903083984
+9556	7403	3000	0.101061674656442	0.101061674656442
+9558	6639	3962	0.136668682711291	0.136668682711291
+9559	3962	4361	0.121869293781819	0.121869293781819
+20411	9207	10780	0.0112983850763668	0.0112983850763668
+9561	5171	5225	0.145976272368254	0.145976272368254
+9562	5225	1866	0.0654044096593951	0.0654044096593951
+9563	1866	5084	0.0770856255669816	0.0770856255669816
+9564	5084	2809	0.113066726070966	0.113066726070966
+9565	2809	3368	0.152693063908693	0.152693063908693
+9566	3368	7404	0.0530057643448654	0.0530057643448654
+9567	7404	4944	0.0497811011847154	0.0497811011847154
+9568	4944	7405	0.0515530101953733	0.0515530101953733
+9569	7405	7217	0.0502978935844785	0.0502978935844785
+9570	7217	7406	0.0537233169488665	0.0537233169488665
+9571	7406	7407	0.0412354910733997	0.0412354910733997
+9572	6416	4212	0.100784166153009	0.100784166153009
+9573	4212	190	0.175257609965618	0.175257609965618
+9574	190	4532	0.201882877149858	0.201882877149858
+9575	4532	5431	0.198227529862783	0.198227529862783
+9576	5431	5972	0.107244272330712	0.107244272330712
+9577	5972	2255	0.104270609577454	0.104270609577454
+9578	2255	6131	0.104982960169425	0.104982960169425
+9579	6131	3998	0.104249966263654	0.104249966263654
+9580	3998	7048	0.105712541492873	0.105712541492873
+9581	7048	1393	0.105952500116488	0.105952500116488
+9583	7408	7055	0.0530917174300864	0.0530917174300864
+9584	7055	7409	0.0515249594325266	0.0515249594325266
+9585	7409	3389	0.0512512544679775	0.0512512544679775
+9586	3389	7410	0.0515249594325266	0.0515249594325266
+9587	7410	4504	0.051986836558228	0.051986836558228
+9588	4504	3539	0.0507992547126353	0.0507992547126353
+9589	3539	7411	0.0505170014633714	0.0505170014633714
+9590	7411	7412	0.0515690276546841	0.0515690276546841
+9592	5066	6400	0.0525526328752235	0.0525526328752235
+9593	6400	6835	0.0526723733629873	0.0526723733629873
+9594	6835	7413	0.0505686622438464	0.0505686622438464
+9595	7413	1105	0.0506198937481409	0.0506198937481409
+9596	1105	7414	0.0824276303743622	0.0824276303743622
+9598	3863	7415	0.0529481461592885	0.0529481461592885
+9599	7415	6656	0.0485933921065039	0.0485933921065039
+9600	6656	7416	0.0551266417503484	0.0551266417503484
+9601	7416	7417	0.698080046436177	0.698080046436177
+9602	3179	7418	0.0616464790427922	0.0616464790427922
+9603	7418	5002	0.0485639637102659	0.0485639637102659
+9604	5002	7419	0.0540110826611525	0.0540110826611525
+9605	7419	5725	0.0437502401390831	0.0437502401390831
+9606	5725	724	0.0271601591292424	0.0271601591292424
+9607	724	7059	0.100733087825974	0.100733087825974
+9608	7059	7314	0.111000885564944	0.111000885564944
+9610	7421	3610	0.212938945536276	0.212938945536276
+9611	3610	2128	0.151144951480704	0.151144951480704
+10843	154	8006	0.0789597424143419	0.0789597424143419
+9613	5998	2327	0.147931201391184	0.147931201391184
+9614	2327	7422	0.151462381546094	0.151462381546094
+9615	2016	354	0.0832039426217647	0.0832039426217647
+9616	354	2024	0.270665538753682	0.270665538753682
+9620	4944	7424	0.200356357596052	0.200356357596052
+9622	2981	7425	0.200823510551274	0.200823510551274
+9623	7425	7426	0.200629159279387	0.200629159279387
+9624	7426	7427	0.00781704540286186	0.00781704540286186
+9625	7427	7428	0.196215671376464	0.196215671376464
+9626	7428	6876	0.205224182417126	0.205224182417126
+9627	6876	1687	0.205021376956907	0.205021376956907
+9628	1687	7429	0.205696359665547	0.205696359665547
+9629	7429	2432	0.199163881347575	0.199163881347575
+9630	2432	7431	0.20247617593456	0.20247617593456
+9632	6213	7432	0.274944028390563	0.274944028390563
+9633	7432	7433	0.263513794727665	0.263513794727665
+9634	7433	6594	0.262579264502597	0.262579264502597
+9636	7254	1423	0.111990529719831	0.111990529719831
+10866	1577	8015	0.266859669077532	0.266859669077532
+9639	7434	7435	0.184117705049588	0.184117705049588
+9640	7435	7436	0.203503143312405	0.203503143312405
+9642	6593	7437	0.098508708246921	0.098508708246921
+9643	7437	7127	0.0085733378066782	0.0085733378066782
+9645	7411	4051	0.176201016140517	0.176201016140517
+9646	4051	7438	0.186623330561976	0.186623330561976
+9647	7438	1853	0.167040016171723	0.167040016171723
+9648	1853	2591	0.179034976108436	0.179034976108436
+9650	7439	6064	0.193434831975152	0.193434831975152
+9651	6064	2544	0.202007823415783	0.202007823415783
+9652	2544	7440	0.411378882387366	0.411378882387366
+9653	7129	627	0.200330694412442	0.200330694412442
+9655	18	6387	0.132089927812284	0.132089927812284
+9658	7443	7444	0.13397887621517	0.13397887621517
+9659	7444	5539	0.105571329036095	0.105571329036095
+9660	5539	2407	0.0968730605007166	0.0968730605007166
+9661	2407	4292	0.100193275722424	0.100193275722424
+9662	4292	7445	0.0505436928211805	0.0505436928211805
+9663	7445	7446	0.0548363595380854	0.0548363595380854
+9665	7447	7448	0.169947053382904	0.169947053382904
+9667	5852	1336	0.19937663187299	0.19937663187299
+9668	1336	6158	0.0597086585632686	0.0597086585632686
+9669	6158	7449	0.153340690716036	0.153340690716036
+9671	7450	4365	0.199972383812324	0.199972383812324
+9672	4365	1447	0.201108937861992	0.201108937861992
+9673	1447	7451	0.20199467881708	0.20199467881708
+9674	7451	6664	0.0985180993542889	0.0985180993542889
+9675	6664	1757	0.102800794441344	0.102800794441344
+9676	1757	3819	0.106482209599855	0.106482209599855
+9677	3819	5892	0.0976679798408968	0.0976679798408968
+9679	5332	5070	0.101261676099905	0.101261676099905
+9680	5070	6838	0.100657370443561	0.100657370443561
+9681	6838	6967	0.0976725983678986	0.0976725983678986
+9682	6967	7452	0.102800093286128	0.102800093286128
+9683	7452	7453	0.0998547767838799	0.0998547767838799
+9685	5437	7454	0.211535646678045	0.211535646678045
+9686	7454	4416	0.194570832918176	0.194570832918176
+9687	4416	7456	0.224677107455919	0.224677107455919
+9688	7456	4322	0.22100369073056	0.22100369073056
+9692	7458	7459	0.0196177061643605	0.0196177061643605
+9693	7459	7460	0.0200797614980701	0.0200797614980701
+9694	7460	7461	0.0204220717617775	0.0204220717617775
+9695	7461	7462	0.0192753952773127	0.0192753952773127
+9696	7462	7463	0.0197376280100197	0.0197376280100197
+9697	7463	1874	0.0201396312288959	0.0201396312288959
+9698	1874	7464	0.101865928676763	0.101865928676763
+9699	7464	7465	0.0516398712444199	0.0516398712444199
+9700	5894	1589	0.201207684972719	0.201207684972719
+9701	1589	1639	0.202832052664544	0.202832052664544
+9703	7466	7467	0.461510399426298	0.461510399426298
+9704	7468	7469	0.0656477480578156	0.0656477480578156
+9705	7469	7470	0.0202314805703126	0.0202314805703126
+9706	7470	7471	0.0196155905306545	0.0196155905306545
+9707	7471	7472	0.0198466389215673	0.0198466389215673
+9709	7473	7474	0.0193760769839274	0.0193760769839274
+10941	7859	4686	0.105458193161767	0.105458193161767
+16187	5815	7203	0.20368767335866	0.20368767335866
+9710	7474	7475	0.0199577496151493	0.0199577496151493
+9711	7475	1873	0.0221306450398483	0.0221306450398483
+9712	1873	7476	0.0228930859552116	0.0228930859552116
+9713	7476	7477	0.00597945379667752	0.00597945379667752
+9714	7477	7481	0.0633102446327588	0.0633102446327588
+9715	7481	7482	0.00659734634558833	0.00659734634558833
+9716	7482	7483	0.0122662226221965	0.0122662226221965
+9717	7483	7484	0.0357233876730641	0.0357233876730641
+9718	7484	4185	0.0600540815299224	0.0600540815299224
+9721	7485	4417	0.198257535408126	0.198257535408126
+9722	4417	7486	0.220999648574169	0.220999648574169
+9723	7486	4321	0.223933764288424	0.223933764288424
+9725	4364	1446	0.20650017701017	0.20650017701017
+9726	1446	7487	0.199709617072806	0.199709617072806
+9727	7487	6936	0.203411194568703	0.203411194568703
+9728	6936	5891	0.202831423382765	0.202831423382765
+9730	7488	7489	0.219847500079542	0.219847500079542
+9731	7489	7490	0.112284636925509	0.112284636925509
+9733	7491	7492	0.104975617952237	0.104975617952237
+9734	7492	7493	0.133826104897821	0.133826104897821
+9735	7493	7494	0.136182988757468	0.136182988757468
+9737	5544	2414	0.0621561786197408	0.0621561786197408
+9739	5055	4297	0.0642451197659933	0.0642451197659933
+9740	4297	7495	0.104062899405527	0.104062899405527
+9741	7495	7496	0.203687229874764	0.203687229874764
+9742	7496	2987	0.200108037782066	0.200108037782066
+9743	2987	7497	0.201819339453719	0.201819339453719
+9744	7497	7498	0.0489089257680099	0.0489089257680099
+9745	7498	7499	0.151764240821653	0.151764240821653
+9746	7499	7500	0.203024715164671	0.203024715164671
+9747	7500	6882	0.202091910987955	0.202091910987955
+9748	6882	1693	0.203443247701908	0.203443247701908
+9749	1693	7501	0.204709999833149	0.204709999833149
+9750	7501	2441	0.166684898047837	0.166684898047837
+9752	5738	5527	0.157552520143968	0.157552520143968
+9753	5527	6465	0.155770587020073	0.155770587020073
+9754	6465	7502	0.156429247159158	0.156429247159158
+9755	7502	7503	0.187478248770476	0.187478248770476
+9756	7503	7504	0.202724737429487	0.202724737429487
+10985	7367	5402	0.104549154022735	0.104549154022735
+9757	7504	1429	0.207912295088567	0.207912295088567
+9758	1429	7189	0.130843883831593	0.130843883831593
+9760	6219	7505	0.274122910361615	0.274122910361615
+9761	7505	7506	0.19636903427064	0.19636903427064
+9763	2603	5189	0.177622776028071	0.177622776028071
+9764	5189	5657	0.106425186945832	0.106425186945832
+9766	7507	7508	0.0438255563694837	0.0438255563694837
+9767	7508	4058	0.0100861958439265	0.0100861958439265
+9768	4058	7509	0.0353348287032789	0.0353348287032789
+9769	7509	7510	0.141940367411715	0.141940367411715
+9770	7510	1860	0.1765997957518	0.1765997957518
+9771	1860	2604	0.182058234750596	0.182058234750596
+9773	7511	6071	0.194146348690461	0.194146348690461
+9774	6071	2551	0.201763197291639	0.201763197291639
+9776	7513	7514	0.138564330925234	0.138564330925234
+9778	7515	686	0.203088920175274	0.203088920175274
+9779	686	1983	0.159242254447937	0.159242254447937
+9780	1983	1968	0.0374282123082397	0.0374282123082397
+9781	1968	4621	0.107323343903913	0.107323343903913
+9782	4621	6500	0.103085986769995	0.103085986769995
+9783	6500	2474	0.199627678773596	0.199627678773596
+9785	7516	2773	0.203153140061273	0.203153140061273
+9786	2773	6896	0.203229996829736	0.203229996829736
+9788	5346	7517	0.175498987947166	0.175498987947166
+9789	7517	2340	0.175921748142843	0.175921748142843
+9790	2340	7518	0.175670305695009	0.175670305695009
+9791	7518	4783	0.243270382660677	0.243270382660677
+9792	4783	7519	0.239583168661009	0.239583168661009
+9793	7519	7520	0.0339478111046773	0.0339478111046773
+9794	7520	6369	0.269882786903903	0.269882786903903
+9795	6369	7521	0.132466649716692	0.132466649716692
+9797	7522	5952	0.201032381768493	0.201032381768493
+9798	5952	5144	0.0336716082597733	0.0336716082597733
+9799	5144	5156	0.0326057448432317	0.0326057448432317
+9800	5156	2239	0.132989211721542	0.132989211721542
+9801	2239	4912	0.203447012505169	0.203447012505169
+9802	4912	6610	0.203165550596053	0.203165550596053
+18325	7524	7525	0.0423335034846442	0.0423335034846442
+9804	7523	7526	0.205397811211562	0.205397811211562
+9806	2475	5910	0.203278121280476	0.203278121280476
+9807	5910	7527	0.201064010596531	0.201064010596531
+9808	7527	800	0.20177431388955	0.20177431388955
+9809	800	7528	0.202244021720306	0.202244021720306
+9811	7529	7530	0.20077292216439	0.20077292216439
+9813	3064	7531	0.184973544349351	0.184973544349351
+9815	2632	5362	0.0801274749327823	0.0801274749327823
+9816	5362	5209	0.120994383618796	0.120994383618796
+9817	5209	6229	0.174510675248847	0.174510675248847
+9819	7532	7533	0.202574921872807	0.202574921872807
+9820	7533	7534	0.206092993605617	0.206092993605617
+9821	7534	6444	0.205010086254005	0.205010086254005
+9822	6444	5302	0.199728470714505	0.199728470714505
+9824	6656	4061	0.176855547581016	0.176855547581016
+9825	4061	7535	0.242794235361762	0.242794235361762
+9827	7536	6086	0.100844609398613	0.100844609398613
+9828	6086	7537	0.100375721785614	0.100375721785614
+9829	7537	7538	0.0511607864629355	0.0511607864629355
+9830	7538	5244	0.0495951653375039	0.0495951653375039
+9831	5244	7539	0.0519761520574234	0.0519761520574234
+9832	7539	6885	0.0502414304638419	0.0502414304638419
+9833	6885	7540	0.0499615650233233	0.0499615650233233
+9835	7541	7542	0.0351445858107267	0.0351445858107267
+9838	7544	7545	0.105704455648811	0.105704455648811
+9841	2556	7547	0.195916474446361	0.195916474446361
+9842	6224	7548	0.277797708537317	0.277797708537317
+9845	7550	7551	0.196848690524097	0.196848690524097
+9846	7551	5751	0.202697238266629	0.202697238266629
+9847	5751	7552	0.00795047859513932	0.00795047859513932
+9848	7552	7553	0.129731824653906	0.129731824653906
+9849	7553	6474	0.0638707232076661	0.0638707232076661
+9850	6474	7554	0.0334363679568542	0.0334363679568542
+20015	10180	2696	0.367929886679579	0.367929886679579
+9851	7554	7555	0.0146999916602211	0.0146999916602211
+9853	3170	7557	0.145194224111084	0.145194224111084
+9854	7557	7558	0.0835128735178232	0.0835128735178232
+9855	7558	7559	0.0585562750239905	0.0585562750239905
+9856	7559	6713	0.00611903533894709	0.00611903533894709
+9857	6713	7560	0.146921779963022	0.146921779963022
+9858	7560	5786	0.142766734982168	0.142766734982168
+9859	5786	7561	0.147333855208616	0.147333855208616
+11082	6285	2717	0.0986458045481302	0.0986458045481302
+9860	7561	7562	0.151251680669446	0.151251680669446
+9861	7562	7563	0.142846459249546	0.142846459249546
+9863	7564	3303	0.147900845771263	0.147900845771263
+9865	5316	7565	0.0511409811054889	0.0511409811054889
+9866	7565	7566	0.1490174605609	0.1490174605609
+9867	7566	3661	0.0439544289403808	0.0439544289403808
+9868	3661	3171	0.198821466322938	0.198821466322938
+9870	1541	4266	0.201902575581856	0.201902575581856
+9871	4266	280	0.117279281695443	0.117279281695443
+9873	1540	755	0.148174446133403	0.148174446133403
+9874	755	7567	0.109511008516479	0.109511008516479
+9875	7568	7569	0.504435059432168	0.504435059432168
+9876	5172	5629	0.20005288591208	0.20005288591208
+9877	5629	2361	0.11286306962317	0.11286306962317
+9878	2361	4143	0.172420177163863	0.172420177163863
+9879	4143	4747	0.180602807146659	0.180602807146659
+9880	4747	6561	0.177131591078149	0.177131591078149
+9881	6561	7570	0.0829182513004679	0.0829182513004679
+9882	7570	7571	0.0849604902234264	0.0849604902234264
+9883	7571	7572	0.039332803551206	0.039332803551206
+9885	3557	7573	0.0207104909362794	0.0207104909362794
+9886	7573	5510	0.0781175186423301	0.0781175186423301
+9887	5510	2897	0.0422469044547541	0.0422469044547541
+9889	3682	7574	0.193399178760091	0.193399178760091
+9890	7574	7575	0.146546921459533	0.146546921459533
+9891	7575	5359	0.14787210152478	0.14787210152478
+9892	5359	2682	0.147887137976142	0.147887137976142
+9893	2682	7576	0.0606198046830208	0.0606198046830208
+9895	4620	7577	0.120158924963582	0.120158924963582
+9896	7577	6702	0.146317084486212	0.146317084486212
+9897	6702	7578	0.146734472806395	0.146734472806395
+9898	7578	7579	0.145050961623328	0.145050961623328
+9899	7579	7580	0.00770297520415462	0.00770297520415462
+9900	7580	7581	0.13912090851738	0.13912090851738
+9901	7581	7582	0.0411773493232422	0.0411773493232422
+9903	2466	5908	0.205955273119341	0.205955273119341
+9904	5908	7583	0.198595406640257	0.198595406640257
+9905	7583	793	0.198805543342419	0.198805543342419
+9906	793	7584	0.20315326209993	0.20315326209993
+9907	7584	4357	0.202186223769753	0.202186223769753
+9908	4357	7585	0.201775154423619	0.201775154423619
+9910	3060	7586	0.187004558668975	0.187004558668975
+9913	7588	906	0.27600804903505	0.27600804903505
+9914	906	7589	0.12928644320394	0.12928644320394
+9916	6671	7590	0.0565797137930955	0.0565797137930955
+9917	5136	5151	0.022597397933528	0.022597397933528
+9918	5151	4906	0.0926596414619678	0.0926596414619678
+9919	4906	6616	0.200362179375123	0.200362179375123
+9920	6616	7591	0.195770799250889	0.195770799250889
+9921	7591	7592	0.206820957598552	0.206820957598552
+9925	6556	7596	0.107470441058094	0.107470441058094
+9926	7596	7597	0.0323668981715237	0.0323668981715237
+9927	7597	7598	0.201852282407455	0.201852282407455
+9928	7598	7599	0.202247125760461	0.202247125760461
+9930	7600	4778	0.250803140264124	0.250803140264124
+9932	1647	159	0.135282147606574	0.135282147606574
+9933	159	1722	0.249462326524164	0.249462326524164
+9935	6872	7601	0.692595810332122	0.692595810332122
+9938	6136	7603	0.0512178060127243	0.0512178060127243
+9939	7603	4004	0.0522781951051087	0.0522781951051087
+9941	2233	5134	0.145435815612977	0.145435815612977
+9942	5134	5149	0.0255338309274142	0.0255338309274142
+9943	5149	4904	0.0300983323579011	0.0300983323579011
+9944	4904	6618	0.200495686198041	0.200495686198041
+9945	6618	7604	0.20246265981009	0.20246265981009
+9946	7604	7605	0.201805887092512	0.201805887092512
+9948	6554	7606	0.105208061763435	0.105208061763435
+9950	7607	7608	0.199144734139014	0.199144734139014
+9951	7608	7609	0.20258734096308	0.20258734096308
+9953	2463	5906	0.205561292129907	0.205561292129907
+9954	5906	7610	0.199734725303301	0.199734725303301
+9955	7610	791	0.198807553256576	0.198807553256576
+9956	791	7612	0.203565382214395	0.203565382214395
+9957	7612	4355	0.201053666601032	0.201053666601032
+9958	4355	7613	0.202489967264216	0.202489967264216
+9959	7613	3058	0.208369032173912	0.208369032173912
+9960	3058	7614	0.183994647182619	0.183994647182619
+9961	7614	7615	0.026448194348771	0.026448194348771
+9963	1697	7616	0.173745206459615	0.173745206459615
+9964	7616	7617	0.177904510236026	0.177904510236026
+9965	7617	7618	0.1681272184952	0.1681272184952
+9966	7618	4776	0.251475825917774	0.251475825917774
+9970	3746	7622	0.0932397806145687	0.0932397806145687
+9971	7622	4665	0.0961947321638159	0.0961947321638159
+9972	4665	1332	0.102043584181961	0.102043584181961
+9973	1332	1387	0.0976513845787387	0.0976513845787387
+9974	1387	7623	0.104092676384345	0.104092676384345
+9975	7623	6849	0.109393568832939	0.109393568832939
+9976	6849	4705	0.0983852710944781	0.0983852710944781
+9977	4705	7487	0.0961948643858329	0.0961948643858329
+9978	7487	7451	0.0969202901634112	0.0969202901634112
+9979	7451	5688	0.104320933330224	0.104320933330224
+9980	5688	6313	0.0969730195141145	0.0969730195141145
+9981	6313	4962	0.100610954866441	0.100610954866441
+9982	4962	6819	0.104277744196946	0.104277744196946
+9983	6819	762	0.165411660097114	0.165411660097114
+9984	762	786	0.134384238449809	0.134384238449809
+9985	786	6001	0.286482254105535	0.286482254105535
+9986	6001	5764	0.0815255628306487	0.0815255628306487
+11219	8167	8168	0.194203872480123	0.194203872480123
+9989	1491	149	0.200485771831907	0.200485771831907
+9990	149	1737	0.201708050623858	0.201708050623858
+9992	7313	5666	0.0386975210921627	0.0386975210921627
+9993	5666	522	0.0596630213761568	0.0596630213761568
+9994	522	4824	0.183721500047411	0.183721500047411
+9996	2254	7626	0.0984544191189144	0.0984544191189144
+9998	7627	7329	0.0447853238574392	0.0447853238574392
+9999	7329	2089	0.0938827847318007	0.0938827847318007
+10000	2089	2656	0.0939761287497805	0.0939761287497805
+10001	2656	4118	0.0946147674881846	0.0946147674881846
+10002	4118	6678	0.0843387660785722	0.0843387660785722
+10004	7628	7629	0.0982828610797249	0.0982828610797249
+10006	5220	5095	0.120687418213095	0.120687418213095
+10008	7630	6413	0.109655980715331	0.109655980715331
+10009	6413	4650	0.0986378512210248	0.0986378512210248
+10010	4650	7631	0.100237060358401	0.100237060358401
+10011	7631	3646	0.0896866361421679	0.0896866361421679
+10012	3646	4536	0.103452838278423	0.103452838278423
+10013	4536	7635	0.257545536230436	0.257545536230436
+10015	7636	7637	0.0362863399636557	0.0362863399636557
+10016	7637	383	0.0504266976907422	0.0504266976907422
+10017	383	4682	0.05031361216385	0.05031361216385
+10018	4682	295	0.0506583134955018	0.0506583134955018
+10019	295	4954	0.0497648033018035	0.0497648033018035
+10021	7222	7638	0.0496667318298412	0.0496667318298412
+10022	7638	7639	0.0515292350274089	0.0515292350274089
+10023	7639	7640	0.0459421846016502	0.0459421846016502
+10024	7640	6642	0.0415805639651593	0.0415805639651593
+10026	3954	7641	0.0608839417644586	0.0608839417644586
+10027	7641	5604	0.0589168683204242	0.0589168683204242
+18697	6400	5868	0.177478717288294	0.177478717288294
+10029	7642	3727	0.0543818576839699	0.0543818576839699
+10031	1239	4813	0.0888202681133088	0.0888202681133088
+10032	4813	2165	0.138535770033239	0.138535770033239
+10034	4003	7643	0.0510385957556285	0.0510385957556285
+10035	7643	7027	0.0529371470208169	0.0529371470208169
+10036	7027	7644	0.0521180983869426	0.0521180983869426
+10037	7644	7645	0.0537600930137936	0.0537600930137936
+10038	7645	7646	0.0510719245712091	0.0510719245712091
+10039	7646	7380	0.0524231241843369	0.0524231241843369
+10041	7647	3393	0.0461297697153075	0.0461297697153075
+10043	3394	7648	0.0445992136926928	0.0445992136926928
+10044	7648	5709	0.0478831918410465	0.0478831918410465
+10045	5709	7649	0.04548718787965	0.04548718787965
+10046	7649	7432	0.0484717768195407	0.0484717768195407
+10047	7432	7650	0.0437375947901795	0.0437375947901795
+10048	7650	7181	0.0470644094329018	0.0470644094329018
+10049	7181	7651	0.0469937345825467	0.0469937345825467
+10051	7652	7653	0.0459694430265719	0.0459694430265719
+10053	1099	7654	0.0453903142377476	0.0453903142377476
+10054	7654	7505	0.0471008131744324	0.0471008131744324
+10055	7505	7655	0.0439789031058606	0.0439789031058606
+10056	7655	3857	0.0492561227403211	0.0492561227403211
+10057	3857	7656	0.0443253739114241	0.0443253739114241
+10058	7656	5595	0.054031927582118	0.054031927582118
+10059	5595	7657	0.0531350620266369	0.0531350620266369
+10060	7657	7548	0.0548032505549166	0.0548032505549166
+10061	7548	7658	0.0961567115661112	0.0961567115661112
+10063	5169	6864	0.176934896372569	0.176934896372569
+10064	6864	3072	0.175748977102837	0.175748977102837
+10065	3072	7659	0.163990749862373	0.163990749862373
+10067	3292	100	0.415519355639239	0.415519355639239
+10069	5731	3291	0.149792492427265	0.149792492427265
+10071	1152	7660	0.199718823841446	0.199718823841446
+10074	6897	7663	0.241129252553979	0.241129252553979
+13575	2	9131	0.186044551751923	0.186044551751923
+10075	7663	7664	0.101783451026811	0.101783451026811
+10076	7664	7665	0.289306992458348	0.289306992458348
+10078	6814	7666	0.176577592408465	0.176577592408465
+12084	8539	8540	0.241661980997098	0.241661980997098
+10079	7666	2342	0.176188966635474	0.176188966635474
+10080	2342	7667	0.17458351857957	0.17458351857957
+10081	7667	4785	0.245723521469374	0.245723521469374
+10082	4785	7668	0.239480958817199	0.239480958817199
+10084	5159	7669	0.0600603744377636	0.0600603744377636
+10085	7669	5954	0.140826727437097	0.140826727437097
+10086	5954	2241	0.203480008894553	0.203480008894553
+10087	2241	4914	0.201437462212311	0.201437462212311
+10088	4914	6609	0.201231500080185	0.201231500080185
+10089	6609	7670	0.19693744890168	0.19693744890168
+11324	5142	5154	0.0222389853288599	0.0222389853288599
+16191	7205	5817	0.204256012568379	0.204256012568379
+10090	7670	7671	0.205535401167156	0.205535401167156
+10092	690	1979	0.162739101905996	0.162739101905996
+10093	1979	1964	0.0397992509913644	0.0397992509913644
+10094	1964	6501	0.211697424646872	0.211697424646872
+10095	6501	2478	0.193626535181341	0.193626535181341
+10096	2478	5912	0.20926896109112	0.20926896109112
+10097	5912	7672	0.199195490528656	0.199195490528656
+10098	7672	803	0.201999137953248	0.201999137953248
+10099	803	7673	0.202608278725201	0.202608278725201
+10100	7673	7674	0.205563081575912	0.205563081575912
+10101	7674	7675	0.203265447696938	0.203265447696938
+10102	7675	3066	0.200093208772811	0.200093208772811
+10103	3066	7676	0.18728661128175	0.18728661128175
+10105	7677	6370	0.270615231348292	0.270615231348292
+10106	6370	7678	0.131279919418432	0.131279919418432
+10108	6507	7679	0.113730821063582	0.113730821063582
+10109	7679	6937	0.113695193803527	0.113695193803527
+10111	759	6605	0.202732181741343	0.202732181741343
+10113	5167	7680	0.173408491477124	0.173408491477124
+10114	7680	2354	0.177734023432563	0.177734023432563
+11350	4801	4798	0.0316348130565604	0.0316348130565604
+10116	4156	4743	0.17475749351339	0.17475749351339
+10117	4743	6539	0.176484628682033	0.176484628682033
+10118	6539	7681	0.164515462701881	0.164515462701881
+10119	7681	1204	0.1695248683934	0.1695248683934
+10120	1204	7682	0.0218451192643306	0.0218451192643306
+10121	7682	3779	0.199697518421981	0.199697518421981
+10123	7683	953	0.176289634687175	0.176289634687175
+10124	953	7684	0.174800312403385	0.174800312403385
+10125	7684	4892	0.161444055531775	0.161444055531775
+10126	4892	7685	0.184678055138444	0.184678055138444
+10127	7685	5490	0.173583753319791	0.173583753319791
+10128	5490	3022	0.0680856463383254	0.0680856463383254
+18346	1684	7686	0.206269012853702	0.206269012853702
+10129	3022	608	0.0626103319165951	0.0626103319165951
+10130	608	7687	0.0714136208255542	0.0714136208255542
+10132	751	1571	0.141098847639908	0.141098847639908
+10133	1571	7688	0.136160171060933	0.136160171060933
+10134	7688	355	0.0540631216358879	0.0540631216358879
+11381	7	8238	0.233069627316498	0.233069627316498
+10136	3031	7689	0.212052347410258	0.212052347410258
+10139	5644	4349	0.138628444284297	0.138628444284297
+10140	4349	6347	0.140074045976997	0.140074045976997
+10143	7690	7691	0.036360966917709	0.036360966917709
+13576	9131	2186	0.0494030185182178	0.0494030185182178
+10144	7691	7692	0.019090691679145	0.019090691679145
+10145	7692	7629	0.138695116564921	0.138695116564921
+10146	7629	7693	0.131928656438508	0.131928656438508
+10148	7694	7695	0.805329256404935	0.805329256404935
+10149	6359	2392	0.110097282540218	0.110097282540218
+10150	2392	7696	0.139362539585628	0.139362539585628
+10152	7697	698	0.20136290155584	0.20136290155584
+10153	698	7698	0.201586501703314	0.201586501703314
+10155	7699	894	0.281945866493957	0.281945866493957
+10156	894	4477	0.138715715492195	0.138715715492195
+10157	4477	2802	0.13960527461951	0.13960527461951
+10158	2802	5268	0.12511734550188	0.12511734550188
+10161	4794	2158	0.120027593160305	0.120027593160305
+11430	319	412	0.178792036530689	0.178792036530689
+11459	224	8268	0.046644646559722	0.046644646559722
+10165	7703	1119	0.0497953640754775	0.0497953640754775
+10166	1119	7704	0.0511005498462644	0.0511005498462644
+10167	7704	7496	0.0499039643779027	0.0499039643779027
+10168	7496	7705	0.050496479725261	0.050496479725261
+10169	7705	3842	0.0493242373326315	0.0493242373326315
+10170	3842	7706	0.0511368055077475	0.0511368055077475
+10171	7706	5553	0.0516924374908146	0.0516924374908146
+10173	5552	7707	0.497797594406761	0.497797594406761
+10174	7708	6434	0.169523036166009	0.169523036166009
+10175	6434	4659	0.115447272077866	0.115447272077866
+10176	4659	7709	0.0610101187906253	0.0610101187906253
+10177	7709	1282	0.0565434694494923	0.0565434694494923
+10178	1282	4541	0.131357223988847	0.131357223988847
+10179	4541	7710	0.132140893738002	0.132140893738002
+10180	7710	7711	0.0696094980092003	0.0696094980092003
+10181	7711	7712	0.0619159407722012	0.0619159407722012
+10183	4024	7713	0.0484316979076645	0.0484316979076645
+10184	7713	5669	0.0520933568419111	0.0520933568419111
+10185	5669	7714	0.0498366654518003	0.0498366654518003
+10186	7714	7030	0.0492177257934086	0.0492177257934086
+19495	7469	10524	0.0198269485983196	0.0198269485983196
+10188	7715	7378	0.0506230529615687	0.0506230529615687
+10189	7378	1594	0.0506283698630863	0.0506283698630863
+10190	1594	3411	0.0491667634825631	0.0491667634825631
+10191	3411	7717	0.105657808428602	0.105657808428602
+10192	7717	7718	0.0940313147486449	0.0940313147486449
+10193	5546	7719	0.0535907784173066	0.0535907784173066
+10194	7719	7720	0.0530201286004126	0.0530201286004126
+10195	7720	573	0.0448716576991108	0.0448716576991108
+10196	573	4986	0.0479600812575622	0.0479600812575622
+10197	4986	7721	0.0515371092658245	0.0515371092658245
+10198	7721	7722	0.0482855644451139	0.0482855644451139
+10199	7722	7723	0.0490137565654263	0.0490137565654263
+10200	7723	7724	0.0538141529532141	0.0538141529532141
+10201	7724	7725	0.0529684395598169	0.0529684395598169
+10202	7725	7726	0.0518724854854175	0.0518724854854175
+10203	7726	7727	0.04727777135042	0.04727777135042
+10204	7727	3618	0.0472245509762166	0.0472245509762166
+10205	3618	7728	0.0514814686878799	0.0514814686878799
+10206	7728	7729	0.0518724978816832	0.0518724978816832
+10207	7729	7730	0.0486618474944759	0.0486618474944759
+10208	7730	5100	0.0498159875736575	0.0498159875736575
+10209	5100	7731	0.0971611599806991	0.0971611599806991
+10210	7731	7732	0.0537738540349519	0.0537738540349519
+10211	7732	7733	0.048775543246574	0.048775543246574
+10213	7734	1529	0.0486197396153865	0.0486197396153865
+10214	1529	6533	0.0236551874497837	0.0236551874497837
+10216	1748	5658	0.0690555262759062	0.0690555262759062
+10217	5658	6638	0.0663249571304488	0.0663249571304488
+10220	5429	5327	0.0495383987324496	0.0495383987324496
+10221	5327	7400	0.0488963197685218	0.0488963197685218
+10223	3485	7735	0.019269671719438	0.019269671719438
+10224	7735	6080	0.0527262897841316	0.0527262897841316
+10225	6080	7736	0.0518491308674393	0.0518491308674393
+10226	7736	3699	0.0473298672855462	0.0473298672855462
+10227	3699	4573	0.0991704429707509	0.0991704429707509
+10228	4573	7737	0.1025259519958	0.1025259519958
+10229	7737	7738	0.0567267064163172	0.0567267064163172
+10230	7738	6520	0.0485788201580239	0.0485788201580239
+11562	4026	8321	0.0489622731658017	0.0489622731658017
+10232	7739	6163	0.0483379374847878	0.0483379374847878
+10233	6163	7740	0.0487487301271992	0.0487487301271992
+10234	7740	2742	0.0481924761788732	0.0481924761788732
+10236	7741	5233	0.0485076742472366	0.0485076742472366
+10237	5233	7742	0.0501847785254714	0.0501847785254714
+10238	7742	3175	0.0518961094220257	0.0518961094220257
+10239	3175	7743	0.0477088260821206	0.0477088260821206
+10240	7743	5000	0.0480456206813873	0.0480456206813873
+10241	5000	7744	0.0507496702288809	0.0507496702288809
+10242	7744	732	0.0500052182058767	0.0500052182058767
+10243	732	7062	0.0993780460470829	0.0993780460470829
+10244	7062	568	0.179642317491375	0.179642317491375
+10245	568	6375	0.221062471524952	0.221062471524952
+10246	6375	7745	0.0502032533440095	0.0502032533440095
+10247	7745	4829	0.0496813089217868	0.0496813089217868
+10248	4829	7746	0.10134770204508	0.10134770204508
+10249	7746	7747	0.19682163321823	0.19682163321823
+10250	7747	7748	0.0148866727143693	0.0148866727143693
+10251	7748	1062	0.0938295581784946	0.0938295581784946
+10252	1062	1700	0.0910684866897701	0.0910684866897701
+10254	7749	7750	0.088136254722807	0.088136254722807
+10255	7750	7751	0.0102851011578735	0.0102851011578735
+10256	7751	6675	0.0807868256992296	0.0807868256992296
+10258	5566	7541	0.078830239472867	0.078830239472867
+10259	7541	7752	0.71007082854504	0.71007082854504
+10260	7753	7754	0.0555561071332203	0.0555561071332203
+10261	7754	6755	0.141035585683202	0.141035585683202
+10262	6755	3980	0.200595577576722	0.200595577576722
+10263	3980	7039	0.198840384599884	0.198840384599884
+10264	7039	3426	0.202741409948142	0.202741409948142
+10266	6623	1789	0.083407855110509	0.083407855110509
+10267	1789	7208	0.197984235440067	0.197984235440067
+10268	7208	5821	0.204810690510051	0.204810690510051
+10269	5821	7726	0.195060536702397	0.195060536702397
+10270	7726	7755	1.41312394826698	1.41312394826698
+10271	3161	7756	0.200885724863022	0.200885724863022
+10272	7756	3082	0.196495825635974	0.196495825635974
+10273	3082	3194	0.201063950220373	0.201063950220373
+10275	6110	1901	0.201670811128578	0.201670811128578
+10277	441	5814	0.0584483555155252	0.0584483555155252
+10278	5814	5376	0.210901593054405	0.210901593054405
+10282	2638	5211	0.135802363910714	0.135802363910714
+10284	5376	7115	0.169184130655589	0.169184130655589
+10286	6686	7758	0.0966310054355491	0.0966310054355491
+10287	7758	7759	0.103268100856542	0.103268100856542
+10289	7760	7761	0.0931830345887697	0.0931830345887697
+10290	7761	870	0.209204581827195	0.209204581827195
+10292	6165	6785	0.0415827902651337	0.0415827902651337
+10293	6785	7357	0.102001818508737	0.102001818508737
+10294	7357	5405	0.112234858942921	0.112234858942921
+10295	5405	3138	0.103097089620426	0.103097089620426
+10296	3138	7762	0.00572680722694595	0.00572680722694595
+10297	6991	6399	0.078057620939779	0.078057620939779
+10299	3614	2112	0.200468732564122	0.200468732564122
+10300	2112	7766	0.09707938317328	0.09707938317328
+10301	7766	7663	0.107055697326901	0.107055697326901
+10303	869	7100	0.0985676933380822	0.0985676933380822
+11668	7785	8358	0.00862504224759753	0.00862504224759753
+10305	2502	7767	0.133821378293258	0.133821378293258
+10306	7767	4793	0.137187308277769	0.137187308277769
+10307	4793	2155	0.138619015999951	0.138619015999951
+10308	2155	6302	0.131440648996103	0.131440648996103
+10309	6302	6427	0.0971164197766542	0.0971164197766542
+10310	6427	5345	0.100480546860285	0.100480546860285
+10311	5345	4641	0.0997483726431183	0.0997483726431183
+10312	4641	1266	0.0975658909823655	0.0975658909823655
+10313	1266	4540	0.103828265337942	0.103828265337942
+10314	4540	6286	0.102716645609349	0.102716645609349
+10315	6286	2720	0.0979601908800836	0.0979601908800836
+10317	2598	5187	0.177611938217315	0.177611938217315
+10318	5187	5655	0.104799417596727	0.104799417596727
+10319	5655	7768	0.00220165954800827	0.00220165954800827
+10321	7769	6068	0.194290902090962	0.194290902090962
+10322	6068	2548	0.201654782967819	0.201654782967819
+10323	2548	7770	0.410001897212591	0.410001897212591
+10324	6390	7771	0.13140278725488	0.13140278725488
+10325	7771	7772	0.135404012160521	0.135404012160521
+10326	7772	7773	0.135386059531021	0.135386059531021
+10327	7773	5541	0.102606539353157	0.102606539353157
+10328	5541	2410	0.100544408114452	0.100544408114452
+10329	2410	4294	0.100431298726032	0.100431298726032
+10330	4294	7776	0.0501127826077893	0.0501127826077893
+10331	7776	7777	0.0533516278326779	0.0533516278326779
+10332	7777	7778	0.0636719509277386	0.0636719509277386
+10333	7778	7702	0.142867174122929	0.142867174122929
+10334	7702	2984	0.198167346423749	0.198167346423749
+10336	7779	1879	0.0577899859499687	0.0577899859499687
+10337	1879	7780	0.0975763172911078	0.0975763172911078
+10338	7780	7781	0.049615978114649	0.049615978114649
+10339	7781	7782	0.151461070035101	0.151461070035101
+10340	7782	7783	0.00828406172358757	0.00828406172358757
+10341	7783	7784	0.0408643643931965	0.0408643643931965
+10342	7784	7785	0.155195634964959	0.155195634964959
+10343	7785	6879	0.203175602967298	0.203175602967298
+10344	6879	1690	0.204417069906845	0.204417069906845
+10345	1690	7786	0.203521868851454	0.203521868851454
+10346	7786	2437	0.163479024443522	0.163479024443522
+10347	2437	2436	0.0381118302971424	0.0381118302971424
+10348	2436	5735	0.132411428624817	0.132411428624817
+10349	5735	7787	0.0686968769014223	0.0686968769014223
+10350	7787	5524	0.0876693797427073	0.0876693797427073
+10352	6462	6461	0.046218455398192	0.046218455398192
+10353	6461	7788	0.114101346725552	0.114101346725552
+10354	7788	7789	0.186352786707342	0.186352786707342
+10355	7789	7790	0.201819126377908	0.201819126377908
+10356	7790	1426	0.209991688515331	0.209991688515331
+10357	1426	7188	0.131433687737374	0.131433687737374
+10361	7791	7792	0.0221530824058495	0.0221530824058495
+10362	7792	1857	0.178051972210932	0.178051972210932
+10363	1857	2599	0.180197954723075	0.180197954723075
+10365	7793	7794	0.133052671328159	0.133052671328159
+10366	7794	7795	0.00451480555637825	0.00451480555637825
+10368	7796	316	0.0810108111113459	0.0810108111113459
+10369	316	7797	0.0132929754360195	0.0132929754360195
+10371	7798	1715	0.146657336243231	0.146657336243231
+10373	4991	5886	0.0409007612541298	0.0409007612541298
+10374	5886	7799	0.0133509392362763	0.0133509392362763
+10375	7799	6955	0.0302227835880131	0.0302227835880131
+10376	6955	120	0.355050454211798	0.355050454211798
+10378	6998	7800	0.287485052767515	0.287485052767515
+10379	7800	2107	0.0799880901292185	0.0799880901292185
+10381	7801	7330	0.0459693673262965	0.0459693673262965
+10382	7330	2069	0.0513405380116942	0.0513405380116942
+10383	2069	2090	0.0410799126461524	0.0410799126461524
+10384	2090	2665	0.0609107459124439	0.0609107459124439
+10385	2665	2657	0.0344762888596363	0.0344762888596363
+10386	2657	4120	0.0653569613260274	0.0653569613260274
+10387	4120	4119	0.025633469399215	0.025633469399215
+10388	4119	6679	0.0800230712461371	0.0800230712461371
+10389	6679	7803	0.0968450624184265	0.0968450624184265
+10390	7803	7693	0.101842612257672	0.101842612257672
+10392	4983	7804	0.15108225604362	0.15108225604362
+10393	7804	7805	0.125613899900368	0.125613899900368
+10394	7805	7806	0.243703765368195	0.243703765368195
+10395	6511	833	0.205796808568101	0.205796808568101
+10396	833	1752	0.10962713348726	0.10962713348726
+10399	7807	6997	0.603696470077293	0.603696470077293
+10401	6510	7620	0.115341473380206	0.115341473380206
+10403	1004	4224	0.0542745916357659	0.0542745916357659
+10405	7568	7808	0.0520701135747565	0.0520701135747565
+10406	7808	7085	0.0476697019408349	0.0476697019408349
+10407	7085	7087	0.0498741800030606	0.0498741800030606
+10410	7411	5866	0.177233832171644	0.177233832171644
+10411	5866	1317	0.177356465730534	0.177356465730534
+10412	1317	1373	0.176201016352257	0.176201016352257
+20226	10713	10016	0.0211937599266337	0.0211937599266337
+10413	1373	7809	0.0646527574308656	0.0646527574308656
+10414	7809	6841	0.0827327683846137	0.0827327683846137
+18362	7802	7116	0.00767249278335644	0.00767249278335644
+18363	7116	7802	0.00767249278335644	0.00767249278335644
+10416	7810	7811	0.101331501186014	0.101331501186014
+10417	7811	7812	0.10060881119881	0.10060881119881
+10418	7812	7813	0.20266387330204	0.20266387330204
+10419	7813	6245	0.198305641519059	0.198305641519059
+10420	6245	7814	0.197228200241648	0.197228200241648
+10422	1492	181	0.220815542326235	0.220815542326235
+10423	181	1709	0.205644626708499	0.205644626708499
+10424	1709	7815	0.201521495468828	0.201521495468828
+10425	7815	1576	0.244181862134779	0.244181862134779
+11867	8450	529	0.00567706315765741	0.00567706315765741
+10426	1576	7816	0.227813240625087	0.227813240625087
+10428	6320	7817	0.183577601350202	0.183577601350202
+10430	7213	7818	0.101757750903819	0.101757750903819
+10433	962	6868	0.198984557339899	0.198984557339899
+10434	6868	5277	0.0940706344008526	0.0940706344008526
+10435	5277	3079	0.10232261403939	0.10232261403939
+10437	7204	5816	0.204032094058756	0.204032094058756
+10438	5816	7722	0.196359705603447	0.196359705603447
+10439	7722	7819	1.20817529596719	1.20817529596719
+10440	4246	1785	0.204162289925295	0.204162289925295
+10441	1785	7820	0.0718319226119568	0.0718319226119568
+10442	6026	3876	0.103447229282558	0.103447229282558
+10443	3876	7821	0.100516631601798	0.100516631601798
+10444	7322	2073	0.0916901418746821	0.0916901418746821
+10445	2073	2670	0.0954589635577965	0.0954589635577965
+10446	2670	4140	0.0958506641044589	0.0958506641044589
+10447	4140	6687	0.0883798780131798	0.0883798780131798
+10448	6687	7822	0.0995993099363261	0.0995993099363261
+10449	7822	7696	0.0932435604543702	0.0932435604543702
+10450	7696	3474	0.0968263022183935	0.0968263022183935
+10451	3474	7823	0.0468407500328621	0.0468407500328621
+10452	5171	3743	0.0993415474645253	0.0993415474645253
+10454	5856	4668	0.0981986239232037	0.0981986239232037
+10455	4668	1294	0.100268721006653	0.100268721006653
+10456	1294	1367	0.0977359423737142	0.0977359423737142
+10457	1367	3189	0.105552448113217	0.105552448113217
+10458	3189	6851	0.101177318178783	0.101177318178783
+10459	6851	4702	0.101416251034793	0.101416251034793
+10460	4702	7468	0.0970718218675625	0.0970718218675625
+10461	7468	1895	0.103477998735846	0.103477998735846
+10462	1895	7824	0.0967350574153813	0.0967350574153813
+10463	7824	7233	0.101338813079015	0.101338813079015
+10464	7233	3243	0.207470752756408	0.207470752756408
+10465	3243	7282	0.19399363779074	0.19399363779074
+10466	7282	7825	0.149563284680896	0.149563284680896
+10468	2141	7826	0.157978675104427	0.157978675104427
+10469	7826	7827	0.306989543465552	0.306989543465552
+10470	7827	7828	0.364212228682904	0.364212228682904
+16042	9797	9804	0.0714393127860209	0.0714393127860209
+10475	7658	7549	0.158167365995463	0.158167365995463
+10477	5846	7750	0.200199460183562	0.200199460183562
+10479	466	7198	0.196816395654282	0.196816395654282
+10481	7268	7830	0.172430116159174	0.172430116159174
+10483	7217	7831	0.199372618146519	0.199372618146519
+10485	6256	7832	0.202992310919435	0.202992310919435
+10487	7833	4331	0.102741254079324	0.102741254079324
+10488	4331	7834	0.0526098265130649	0.0526098265130649
+10489	7834	5037	0.0501135526518646	0.0501135526518646
+10490	5037	7835	0.0494507564303858	0.0494507564303858
+10491	7835	7836	0.0506565934234891	0.0506565934234891
+10492	7836	7837	0.0500464479643974	0.0500464479643974
+10493	7837	2894	0.0524402316173641	0.0524402316173641
+10494	2894	7838	0.107557027285785	0.107557027285785
+10495	7838	7839	0.103734242634521	0.103734242634521
+10496	7839	4733	0.104796091296626	0.104796091296626
+10498	6800	7352	0.103066456507469	0.103066456507469
+10499	7352	5398	0.104939276238433	0.104939276238433
+10500	5398	7840	0.054043807018549	0.054043807018549
+10501	7840	7841	0.0495084984704332	0.0495084984704332
+10502	7841	3900	0.109926182600774	0.109926182600774
+10503	3900	1036	0.101980966587827	0.101980966587827
+10505	7842	6275	0.0499604206116259	0.0499604206116259
+10506	6275	7843	0.109041406945306	0.109041406945306
+10508	7844	7845	0.0640842858387461	0.0640842858387461
+10509	7845	1756	0.058813700126345	0.058813700126345
+10510	1756	4796	0.0566305502204531	0.0566305502204531
+10511	4796	2162	0.113835660361901	0.113835660361901
+10512	2162	7846	0.116364205137553	0.116364205137553
+10514	6135	4027	0.149896567221218	0.149896567221218
+10515	4027	7032	0.200991141471739	0.200991141471739
+10516	7032	3412	0.200534935685617	0.200534935685617
+10517	3412	7633	0.0497828282990497	0.0497828282990497
+10518	7633	5698	0.0497412906945155	0.0497412906945155
+10519	5698	7847	0.050919685731899	0.050919685731899
+10521	7425	7166	0.104570214872527	0.104570214872527
+10522	7166	7848	0.0473158420873474	0.0473158420873474
+10523	7848	7780	0.0502827033263459	0.0502827033263459
+10524	7780	1123	0.100516868229367	0.100516868229367
+10525	1123	7849	0.0509916038841254	0.0509916038841254
+10526	7849	7497	0.0507179555279218	0.0507179555279218
+10527	7497	7850	0.0492496392928742	0.0492496392928742
+10528	7850	3843	0.0492532755342339	0.0492532755342339
+10529	3843	7851	0.0511792577413519	0.0511792577413519
+10530	7851	5556	0.0504327266312592	0.0504327266312592
+10561	7757	6414	0.14886592682355	0.14886592682355
+10531	5556	7852	0.789293029376444	0.789293029376444
+10532	1618	7136	0.164980324326418	0.164980324326418
+10534	2027	5535	0.0854267701089729	0.0854267701089729
+10535	5535	6450	0.110522246345964	0.110522246345964
+10536	6450	6468	0.0325389081934527	0.0325389081934527
+10537	6468	7853	0.124455504811187	0.124455504811187
+10538	7853	7854	0.192779349126015	0.192779349126015
+10540	3713	7855	0.105701897268654	0.105701897268654
+10543	2614	7857	0.0507605301255621	0.0507605301255621
+10544	7857	5197	0.124727455067454	0.124727455067454
+10545	5197	6238	0.172240941584424	0.172240941584424
+10546	6238	7637	0.187669509666877	0.187669509666877
+10547	7637	7858	0.175500793784226	0.175500793784226
+10548	7858	7859	0.174943439798306	0.174943439798306
+10551	5368	7126	0.152826634682226	0.152826634682226
+10552	7126	614	0.179980225267387	0.179980225267387
+10553	614	7860	0.174053494498076	0.174053494498076
+10554	7860	7861	0.175067683150656	0.175067683150656
+10556	3960	5600	0.12071802041193	0.12071802041193
+10558	6724	4799	0.0913013732116182	0.0913013732116182
+10559	4799	2180	0.0880940650188129	0.0880940650188129
+10560	2180	7757	0.0839974084607818	0.0839974084607818
+10562	6414	4645	0.149015796662155	0.149015796662155
+10563	4645	1271	0.151238114292438	0.151238114292438
+10564	1271	4535	0.201873592117884	0.201873592117884
+10565	4535	7863	0.199199232202906	0.199199232202906
+10567	7864	6740	0.106132792016662	0.106132792016662
+10568	6740	2257	0.103696160263475	0.103696160263475
+10569	2257	6132	0.104845212424081	0.104845212424081
+10570	6132	4000	0.104492371103569	0.104492371103569
+10571	4000	7049	0.105765984719426	0.105765984719426
+10572	7049	1395	0.105619552065538	0.105619552065538
+10573	1395	7865	0.0532676910827188	0.0532676910827188
+12077	2695	8043	0.149120560873017	0.149120560873017
+10574	7865	7382	0.0513518590570076	0.0513518590570076
+10576	7866	3392	0.0498722666723731	0.0498722666723731
+10578	2360	5226	0.147034135602084	0.147034135602084
+10579	5226	5088	0.140218763176125	0.140218763176125
+10580	5088	2812	0.112317158065107	0.112317158065107
+10581	2812	7855	0.0589853238635922	0.0589853238635922
+10582	7855	4676	0.102566908777836	0.102566908777836
+10583	4676	4948	0.0965475772401715	0.0965475772401715
+10584	4948	7867	0.0515742481536382	0.0515742481536382
+10585	7867	7219	0.0513689618533378	0.0513689618533378
+10586	7219	7868	0.0507197202929207	0.0507197202929207
+10587	7868	5673	0.0490781046009859	0.0490781046009859
+10588	5673	7869	0.0456643057832586	0.0456643057832586
+10591	7792	7870	0.049146171652799	0.049146171652799
+10592	7870	1108	0.0521568671722949	0.0521568671722949
+10593	1108	5770	0.0506160748755952	0.0506160748755952
+10594	5770	7510	0.0513174323114612	0.0513174323114612
+10595	7510	7871	0.0508676871173128	0.0508676871173128
+10596	7871	3865	0.0498216783929082	0.0498216783929082
+10598	3866	7535	0.105586605139886	0.105586605139886
+10599	7535	7872	0.748786770151958	0.748786770151958
+10603	741	1561	0.140274508504629	0.140274508504629
+10604	1561	7876	0.139940443617856	0.139940443617856
+10605	7876	7877	0.121382404560649	0.121382404560649
+10607	3572	5640	0.141095915979936	0.141095915979936
+10608	5640	4345	0.139634312621283	0.139634312621283
+10609	4345	6343	0.13679021957376	0.13679021957376
+10610	6343	3046	0.13698802953883	0.13698802953883
+10611	3046	7878	0.138953332142948	0.138953332142948
+10612	7878	7879	0.00536944182123181	0.00536944182123181
+10613	7879	7880	0.11582084881522	0.11582084881522
+10615	7881	7882	0.0939943673024045	0.0939943673024045
+10617	4885	7883	0.18871104587798	0.18871104587798
+10618	7883	5483	0.174801190512252	0.174801190512252
+10619	5483	7884	0.200940942998637	0.200940942998637
+10620	7884	7885	0.0780811261571653	0.0780811261571653
+10621	7885	3341	0.00930901113126469	0.00930901113126469
+10624	1192	7887	0.0222318154701858	0.0222318154701858
+10625	7887	3786	0.199739451308706	0.199739451308706
+10627	7888	5967	0.106945706764055	0.106945706764055
+10628	5967	7889	0.0517538867982505	0.0517538867982505
+10629	7889	3011	0.055433069584998	0.055433069584998
+10630	3011	7890	0.0504905501442438	0.0504905501442438
+10631	7890	4389	0.0518336432467722	0.0518336432467722
+10632	4389	7891	0.106909075712535	0.106909075712535
+10633	7891	7892	0.0447272763477039	0.0447272763477039
+10634	7892	7893	0.0604871538278066	0.0604871538278066
+10635	7893	7894	0.0527248029948841	0.0527248029948841
+10636	7894	7895	0.0510420835040534	0.0510420835040534
+10637	7895	7896	0.0538542282588573	0.0538542282588573
+10638	7896	7897	0.0528352422268061	0.0528352422268061
+10640	7898	7899	0.0483963113823249	0.0483963113823249
+10641	7899	7900	0.00514045868709644	0.00514045868709644
+10642	7900	6183	0.105068526303449	0.105068526303449
+10643	6183	7563	0.106218150970674	0.106218150970674
+10646	7902	7903	0.144865462765669	0.144865462765669
+10647	7903	7904	0.00237466940700901	0.00237466940700901
+10648	7904	6985	0.0721296292058115	0.0721296292058115
+10649	6985	4820	0.0719786596117478	0.0719786596117478
+10650	4820	7905	0.147529402397198	0.147529402397198
+10651	7905	7906	0.144081069806214	0.144081069806214
+10653	3189	1870	0.209495964340019	0.209495964340019
+10654	1870	7907	0.0977397792259224	0.0977397792259224
+10655	7907	4184	0.106328113718199	0.106328113718199
+10656	4184	7908	0.403661295666813	0.403661295666813
+10657	7908	4837	0.108683081676812	0.108683081676812
+10659	7909	7910	0.270199990406442	0.270199990406442
+10660	7911	810	0.0673953106393502	0.0673953106393502
+10661	810	7912	0.0687323400006804	0.0687323400006804
+10662	7912	7913	0.136720833756656	0.136720833756656
+10666	2255	5858	0.174722136683236	0.174722136683236
+10667	5858	1305	0.178402656879188	0.178402656879188
+10668	1305	7915	0.248888691440438	0.248888691440438
+12170	8573	8574	0.0987973765101899	0.0987973765101899
+10670	6847	7916	0.0984178968171368	0.0984178968171368
+10671	7916	7485	0.0976761282305841	0.0976761282305841
+10673	7454	5692	0.103533596199028	0.103533596199028
+10674	5692	7917	0.101331500328489	0.101331500328489
+10675	7917	4966	0.0998668108920524	0.0998668108920524
+10676	4966	7918	0.102812100555259	0.102812100555259
+10677	7918	7919	0.0983963905872725	0.0983963905872725
+10678	7919	7920	0.0991546561543948	0.0991546561543948
+10679	7920	7921	0.0991411977449166	0.0991411977449166
+10680	7921	7922	0.106421383510006	0.106421383510006
+10682	7923	7924	0.106391305814005	0.106391305814005
+10684	7925	629	0.0646550267727614	0.0646550267727614
+10685	629	7926	0.00919464810452742	0.00919464810452742
+10686	7927	7928	0.0412650483746168	0.0412650483746168
+10687	7928	7929	0.155361420508855	0.155361420508855
+10688	7929	6922	0.0195376725753923	0.0195376725753923
+10689	6922	6736	0.174720460074468	0.174720460074468
+10691	7930	7931	0.0129516773904198	0.0129516773904198
+10692	7931	1511	0.391618540945239	0.391618540945239
+10693	1511	7932	0.0409032080648905	0.0409032080648905
+10694	7932	3280	0.112386881702983	0.112386881702983
+10696	4635	6586	0.185505221951206	0.185505221951206
+10698	6668	787	0.109054104365323	0.109054104365323
+10699	787	6002	0.243058044096108	0.243058044096108
+10702	7934	1008	1.1041513689359	1.1041513689359
+10704	4497	7935	0.109080059964542	0.109080059964542
+10705	7935	7936	0.375437621590472	0.375437621590472
+10706	7936	7937	0.0440200903162904	0.0440200903162904
+10708	3966	3963	0.0923048136404676	0.0923048136404676
+10710	6243	7938	0.0544857736456965	0.0544857736456965
+10711	7938	7571	0.0517149905092859	0.0517149905092859
+10712	7571	7939	0.0378829783952266	0.0378829783952266
+10714	7940	5872	0.0757028634173436	0.0757028634173436
+10715	5872	1324	0.177578299705823	0.177578299705823
+10716	1324	1380	0.1760884455939	0.1760884455939
+10717	1380	7941	0.0581557503278793	0.0581557503278793
+10718	7941	6844	0.0845562612846107	0.0845562612846107
+10719	6844	4696	0.11746862405599	0.11746862405599
+10720	4696	7452	0.157863437357233	0.157863437357233
+10722	5690	5337	0.242972143995655	0.242972143995655
+10724	7942	7943	0.14470003055266	0.14470003055266
+10725	7943	1056	0.118222446008981	0.118222446008981
+10726	1056	7944	0.0800381081986229	0.0800381081986229
+10727	7944	6249	0.201854530416454	0.201854530416454
+10728	6249	7945	0.201602089629263	0.201602089629263
+10729	7945	1497	0.20081804408168	0.20081804408168
+10730	1497	186	0.202686112287629	0.202686112287629
+10731	186	7798	0.0846089584800808	0.0846089584800808
+10732	7798	1714	0.126110593452085	0.126110593452085
+10734	7946	1580	0.141640668503246	0.141640668503246
+10735	1580	7947	0.292520501534348	0.292520501534348
+10736	7948	2142	0.372172819192242	0.372172819192242
+10738	7949	7950	0.022809009376778	0.022809009376778
+10739	7950	2916	0.200611278039498	0.200611278039498
+10741	2915	7951	0.200419085698686	0.200419085698686
+10743	7952	7953	0.0110105423016681	0.0110105423016681
+10745	7954	7631	0.201162741792968	0.201162741792968
+16610	5355	7889	0.146740030035641	0.146740030035641
+10746	7631	7955	0.197131063915064	0.197131063915064
+10748	7956	6942	0.115194637181012	0.115194637181012
+12305	8628	8641	0.0276795827309073	0.0276795827309073
+10750	4939	4687	0.409424899618544	0.409424899618544
+10751	4687	7959	0.501489716289273	0.501489716289273
+10752	7959	7960	0.103838798829226	0.103838798829226
+10753	7960	5096	0.0880537297967434	0.0880537297967434
+10754	5096	7961	0.0549628705336601	0.0549628705336601
+10756	7962	7963	0.129400960231747	0.129400960231747
+10757	7963	7964	0.0109989745271633	0.0109989745271633
+10758	7964	7093	0.177295071329975	0.177295071329975
+10759	7093	7965	0.0553949557893182	0.0553949557893182
+10760	7965	3937	0.0117544286846151	0.0117544286846151
+10761	3937	7966	0.0655333417817751	0.0655333417817751
+10762	7966	7967	0.00514903654400709	0.00514903654400709
+10763	7967	7968	0.0154207763703831	0.0154207763703831
+10764	7968	7969	0.120137734300265	0.120137734300265
+10765	7969	7970	0.0235045509998941	0.0235045509998941
+10766	7970	4938	0.199335986652222	0.199335986652222
+10768	6788	4721	0.150986476371322	0.150986476371322
+10769	4721	667	0.112227110724083	0.112227110724083
+10770	667	5130	0.0364809731603039	0.0364809731603039
+10771	5130	7141	0.148468037583607	0.148468037583607
+10772	7141	7973	0.0653535267620459	0.0653535267620459
+10773	7973	2883	0.0864280151657955	0.0864280151657955
+10774	2883	4607	0.164926871665991	0.164926871665991
+10775	4607	5044	0.166914948534143	0.166914948534143
+10776	5044	6491	0.0452504465788914	0.0452504465788914
+10777	6491	7974	0.124696259323388	0.124696259323388
+10778	7974	3674	0.0837503652675649	0.0837503652675649
+10780	7975	7976	0.0210158411356976	0.0210158411356976
+10781	7976	2348	0.132347730703915	0.132347730703915
+10782	2348	4153	0.174709468744017	0.174709468744017
+10783	4153	4740	0.173977137035244	0.173977137035244
+10784	4740	6535	0.176711434597363	0.176711434597363
+10785	6535	7977	0.164237503877208	0.164237503877208
+10787	7978	692	0.202230219594829	0.202230219594829
+10788	692	7979	0.202124611474851	0.202124611474851
+10790	7980	1194	0.168544434179807	0.168544434179807
+10791	1194	7981	0.0214611132807924	0.0214611132807924
+10793	1195	7982	0.0213718360054606	0.0213718360054606
+10794	7982	3783	0.200590566648469	0.200590566648469
+10795	3783	7983	0.155575717720948	0.155575717720948
+10797	947	7986	0.165669448326255	0.165669448326255
+10798	7986	4887	0.171543568824384	0.171543568824384
+10800	104	7987	0.0531910934067007	0.0531910934067007
+10801	7987	7283	0.14149347529597	0.14149347529597
+10803	4249	1782	0.204738067086155	0.204738067086155
+10804	1782	7202	0.196638037803866	0.196638037803866
+10805	7202	5813	0.202462167506831	0.202462167506831
+10806	5813	7720	0.198881694965003	0.198881694965003
+10831	5664	5936	0.10457956834692	0.10457956834692
+10807	7720	7988	2.41654683926542	2.41654683926542
+10808	3557	815	0.15408456375045	0.15408456375045
+10809	815	7836	0.141625491803193	0.141625491803193
+10810	7836	7989	0.137956171688053	0.137956171688053
+10811	7989	7990	0.133814544271225	0.133814544271225
+10812	7990	7991	0.00435891657982006	0.00435891657982006
+10813	7991	7992	0.00504883599617259	0.00504883599617259
+10814	7992	3667	0.218697319390466	0.218697319390466
+10818	4607	7994	0.175458215250442	0.175458215250442
+10819	7994	7995	0.17352002006779	0.17352002006779
+10820	7995	664	0.00413178605963205	0.00413178605963205
+10821	664	7998	0.00436495014442939	0.00436495014442939
+10822	7998	7999	0.17836184127639	0.17836184127639
+10824	6329	4163	0.106458655644295	0.106458655644295
+10825	4163	4772	0.262069785544738	0.262069785544738
+10826	4772	6551	0.176006441608747	0.176006441608747
+10827	6551	8001	0.169733521019883	0.169733521019883
+10828	8001	8002	0.186888519126424	0.186888519126424
+10829	8002	3800	0.199472684499289	0.199472684499289
+10830	3800	5664	0.0496163554354094	0.0496163554354094
+10832	5936	934	0.175672791884477	0.175672791884477
+10833	934	5818	0.103656977616086	0.103656977616086
+10834	5818	2219	0.0798383163598858	0.0798383163598858
+10835	2219	4869	0.163069738486709	0.163069738486709
+10836	4869	8003	0.190225091069506	0.190225091069506
+10837	8003	5468	0.173414227417019	0.173414227417019
+10838	5468	6220	0.124444185392524	0.124444185392524
+10841	5175	8005	0.198062000656316	0.198062000656316
+10844	8006	681	0.244474486801046	0.244474486801046
+10845	681	3340	0.0902358208620103	0.0902358208620103
+10847	7885	682	0.0896800723137281	0.0896800723137281
+10848	682	580	0.244861214317874	0.244861214317874
+10850	5334	6321	0.121951239816061	0.121951239816061
+10851	6321	8007	0.186507250461399	0.186507250461399
+10852	8007	8008	0.042606728375189	0.042606728375189
+10853	8008	8009	0.0463471911266823	0.0463471911266823
+10854	8009	8010	0.0102891732268637	0.0102891732268637
+10855	8010	8011	0.0998884840922572	0.0998884840922572
+10856	8011	8012	0.201197445523876	0.201197445523876
+10857	8012	6246	0.199805617134822	0.199805617134822
+10858	6246	8013	0.200864024373594	0.200864024373594
+10859	8013	2310	0.103900456751802	0.103900456751802
+10860	2310	1494	0.0983991417332815	0.0983991417332815
+10861	1494	183	0.203419998804159	0.203419998804159
+10862	183	1711	0.201968707186781	0.201968707186781
+16611	7889	9327	0.146157951939095	0.146157951939095
+10863	1711	8014	0.204806773712675	0.204806773712675
+10864	8014	6157	0.126319530562447	0.126319530562447
+10865	6157	1577	0.0829958932471693	0.0829958932471693
+10867	7968	8016	0.0140119714836204	0.0140119714836204
+10869	2294	1531	0.46192746891159	0.46192746891159
+10871	8017	1203	0.169906498983342	0.169906498983342
+10872	1203	8018	0.0221945337202718	0.0221945337202718
+10873	8018	3780	0.199572680726093	0.199572680726093
+10874	3780	8019	0.153206883868779	0.153206883868779
+10875	8019	952	0.177861736820837	0.177861736820837
+10876	952	8020	0.175149595226483	0.175149595226483
+10877	8020	4891	0.159178167143814	0.159178167143814
+10878	4891	8021	0.18577336394487	0.18577336394487
+10879	8021	5489	0.173842148316324	0.173842148316324
+10880	5489	8022	0.202303315910377	0.202303315910377
+10882	5166	8023	0.173986701720281	0.173986701720281
+10883	8023	2353	0.177612171175383	0.177612171175383
+10884	2353	4155	0.173655528353614	0.173655528353614
+10885	4155	4742	0.173355871166643	0.173355871166643
+10886	4742	6537	0.176328961502794	0.176328961502794
+10887	6537	8024	0.165303556900913	0.165303556900913
+10889	3030	3025	0.111248274146309	0.111248274146309
+10891	8025	8026	0.0640627296443105	0.0640627296443105
+10893	3576	5643	0.138707185733922	0.138707185733922
+10894	5643	4348	0.139896948951005	0.139896948951005
+10895	4348	6346	0.137784232527167	0.137784232527167
+10897	8027	697	0.20001854589906	0.20001854589906
+10898	697	8028	0.202096920971429	0.202096920971429
+10900	8029	2876	0.123948984730939	0.123948984730939
+10901	2876	7628	0.141637704476922	0.141637704476922
+10902	7628	7803	0.129093895003183	0.129093895003183
+10903	7803	8030	0.203887723487366	0.203887723487366
+10904	750	1568	0.143385969503008	0.143385969503008
+10905	1568	356	0.136646760403047	0.136646760403047
+10907	3449	6863	0.17900718937772	0.17900718937772
+10908	6863	3068	0.174598273817653	0.174598273817653
+10909	3068	8031	0.0302783785251902	0.0302783785251902
+10910	8031	3188	0.14422007961407	0.14422007961407
+10912	3499	8032	0.199010937916898	0.199010937916898
+10913	8032	8033	0.200333001057217	0.200333001057217
+10915	5667	598	0.0644126037668526	0.0644126037668526
+10916	598	58	0.177763601732474	0.177763601732474
+10919	5970	8036	0.0505810885650185	0.0505810885650185
+10920	8036	3015	0.0580577132309736	0.0580577132309736
+10921	3015	8037	0.0464238660315039	0.0464238660315039
+10922	8037	4384	0.0544799142925035	0.0544799142925035
+10923	4384	8038	0.0538947325800234	0.0538947325800234
+10924	8038	8039	0.0466438161180549	0.0466438161180549
+10925	8039	8040	0.00584498801301113	0.00584498801301113
+10926	8040	8041	0.0523763426314988	0.0523763426314988
+10927	8041	8042	0.0530979313391782	0.0530979313391782
+10928	8042	8043	0.107654120371494	0.107654120371494
+10929	8043	8044	0.0544759880197041	0.0544759880197041
+10930	8044	8045	0.0487657640583263	0.0487657640583263
+10931	8045	8046	0.0550233762997563	0.0550233762997563
+10932	8046	8047	0.0497918467778446	0.0497918467778446
+10933	8047	8048	0.0560301584180681	0.0560301584180681
+10934	8048	6177	0.0498105660603093	0.0498105660603093
+10937	8049	8050	0.0514663482815545	0.0514663482815545
+10939	5597	7545	0.109426166768049	0.109426166768049
+10940	7545	8051	0.69043474044403	0.69043474044403
+10943	4956	7224	0.100934524697699	0.100934524697699
+10944	7224	8052	0.0514703494422073	0.0514703494422073
+10945	8052	8053	0.0516967622411713	0.0516967622411713
+10946	8053	8054	0.0428181869535947	0.0428181869535947
+10947	8054	6644	0.0437760044869343	0.0437760044869343
+10948	6644	251	0.0675496864417695	0.0675496864417695
+10949	251	3950	0.064659952202738	0.064659952202738
+10950	3950	8056	0.0623263752149148	0.0623263752149148
+10951	8056	5609	0.0582215030638228	0.0582215030638228
+10952	5609	8057	0.0511983070002347	0.0511983070002347
+10953	8057	3730	0.0552226014136858	0.0552226014136858
+10954	3730	8058	0.106434809873425	0.106434809873425
+10956	5917	8060	0.0615467128621124	0.0615467128621124
+10957	8060	8061	0.0595626505884908	0.0595626505884908
+10958	8061	8062	0.120093210467761	0.120093210467761
+10960	8063	4634	0.154652934390646	0.154652934390646
+10961	4634	4549	0.20934037971115	0.20934037971115
+10962	4549	8064	0.293727880710195	0.293727880710195
+10966	5216	3396	0.0579299126969349	0.0579299126969349
+10967	3396	8065	0.0454362838279539	0.0454362838279539
+10968	8065	5710	0.0481473121637486	0.0481473121637486
+10969	5710	8066	0.0449725321072065	0.0449725321072065
+10970	8066	7433	0.0497100835030792	0.0497100835030792
+10971	7433	8069	0.0438793771122388	0.0438793771122388
+10972	8069	7182	0.0471375837035957	0.0471375837035957
+20567	10854	10857	0.225655121951984	0.225655121951984
+10973	7182	8070	0.0452974861696144	0.0452974861696144
+10974	8070	8071	0.0479228077199932	0.0479228077199932
+10975	8071	8072	0.0470353472529161	0.0470353472529161
+10976	8072	1097	0.0443841816938638	0.0443841816938638
+10978	8073	5318	0.014674630653103	0.014674630653103
+10979	5318	2905	0.0312080465120251	0.0312080465120251
+10980	2905	7145	0.104770590384922	0.104770590384922
+10981	7145	5123	0.105925863098076	0.105925863098076
+10982	5123	4737	0.104660211196924	0.104660211196924
+10983	4737	6783	0.106266768581811	0.106266768581811
+10984	6783	7367	0.10603565613408	0.10603565613408
+12610	8772	8773	0.0502119000696978	0.0502119000696978
+10987	3133	3905	0.108335751010408	0.108335751010408
+10988	3905	1043	0.106035430930181	0.106035430930181
+10989	1043	8074	0.0531930855223622	0.0531930855223622
+10990	8074	6278	0.0525006902367685	0.0525006902367685
+10991	6278	8075	0.105351603899057	0.105351603899057
+10992	8075	5007	0.100650315286722	0.100650315286722
+10993	5007	8076	0.0416106781167173	0.0416106781167173
+10995	8025	7689	0.0805451553909581	0.0805451553909581
+10996	7689	4508	0.0814563900003029	0.0814563900003029
+10997	4508	3466	0.0836603655346893	0.0836603655346893
+10998	3466	6023	0.0805527124085535	0.0805527124085535
+10999	6023	3872	0.0834734840918988	0.0834734840918988
+11000	3872	8080	0.0833038712417768	0.0833038712417768
+11002	3967	8081	0.0785869791186196	0.0785869791186196
+11004	6348	3039	0.0931730621198353	0.0931730621198353
+11005	3039	8080	0.190356710856614	0.190356710856614
+11006	8080	8082	0.0884015044030203	0.0884015044030203
+11008	6424	4647	0.0970252568524678	0.0970252568524678
+11009	4647	8083	0.151040975226462	0.151040975226462
+16204	9846	7728	0.404619504399153	0.404619504399153
+11010	4970	8084	0.141573509395187	0.141573509395187
+11012	6398	7450	0.0587460292912133	0.0587460292912133
+11013	7450	5682	0.0978645396723703	0.0978645396723703
+11014	5682	8085	0.19215729634673	0.19215729634673
+11015	8085	6825	0.00461462117405417	0.00461462117405417
+11016	6825	549	0.386380234242036	0.386380234242036
+11017	549	6259	0.219376470776871	0.219376470776871
+11018	6259	8086	0.305359073933419	0.305359073933419
+11019	8086	1485	0.202208842336051	0.202208842336051
+11023	8088	8089	0.0138986527527033	0.0138986527527033
+11024	8089	8090	0.00683010177656819	0.00683010177656819
+11025	8090	8091	0.110435202693889	0.110435202693889
+11026	7961	8092	0.198854876063874	0.198854876063874
+11028	5855	1340	0.201837936768745	0.201837936768745
+11029	1340	8094	0.205566060887405	0.205566060887405
+11030	8094	4699	0.204173926089909	0.204173926089909
+11031	4699	8095	0.200461574437924	0.200461574437924
+11032	8095	8096	0.201918867294297	0.201918867294297
+11033	8096	6823	0.198988761465987	0.198988761465987
+11034	6823	772	0.204865532850049	0.204865532850049
+11036	6007	6252	0.210749028817316	0.210749028817316
+11037	6252	8097	0.20159640654511	0.20159640654511
+11039	6091	8098	0.0302498178580294	0.0302498178580294
+11040	8098	8099	0.0194131905433523	0.0194131905433523
+11041	8099	6924	0.166900367789548	0.166900367789548
+11042	6924	8100	0.161859559583179	0.161859559583179
+11043	8100	1241	0.0380629815604356	0.0380629815604356
+11045	6980	7942	0.133638145181839	0.133638145181839
+11046	7942	5338	0.0765467348148991	0.0765467348148991
+11048	5442	7919	0.212135491175046	0.212135491175046
+11049	7919	4410	0.19312496970157	0.19312496970157
+11050	4410	8103	0.226886968788061	0.226886968788061
+11051	8103	4283	0.17035467585884	0.17035467585884
+11053	8104	7854	0.0946426330892721	0.0946426330892721
+11054	7854	8105	0.0433309511619061	0.0433309511619061
+11055	8106	6776	0.129541839197132	0.129541839197132
+11056	6776	6152	0.13334664352248	0.13334664352248
+11057	6152	3997	0.133550546612879	0.133550546612879
+11058	3997	7046	0.134234793318191	0.134234793318191
+11059	7046	7376	0.132775137258175	0.132775137258175
+11060	7376	3435	0.135417405491425	0.135417405491425
+11063	7764	5715	0.0517371191288579	0.0517371191288579
+11064	5715	8107	0.0482057757930101	0.0482057757930101
+11065	8107	7435	0.0500858095958938	0.0500858095958938
+11066	7435	8108	0.0493949795014098	0.0493949795014098
+11067	8108	7174	0.049625706970036	0.049625706970036
+11068	7174	6739	0.0493949818685724	0.0493949818685724
+11069	6739	7789	0.0481559013551591	0.0481559013551591
+11070	7789	6645	0.0506327285203027	0.0506327285203027
+11071	6645	1136	0.0491201558695857	0.0491201558695857
+11072	1136	6995	0.0494363433732341	0.0494363433732341
+11073	6995	7503	0.049590164320003	0.049590164320003
+11074	7503	8109	0.100703299932673	0.100703299932673
+11075	8109	7480	0.0534769030186113	0.0534769030186113
+11076	7480	5580	0.0516905707687601	0.0516905707687601
+11077	5580	8110	0.0497706020063474	0.0497706020063474
+11078	8110	8111	0.0487450776836639	0.0487450776836639
+11079	8111	8112	0.694365013204936	0.694365013204936
+11080	1262	4539	0.0997555409236608	0.0997555409236608
+11081	4539	6285	0.098678051142926	0.098678051142926
+11083	2717	8113	0.100251109237605	0.100251109237605
+11085	8114	8115	0.096187670432143	0.096187670432143
+11086	8115	5626	0.201348891867615	0.201348891867615
+11088	2507	8116	0.0493483893872719	0.0493483893872719
+11089	8116	1238	0.100702597753866	0.100702597753866
+11090	1238	4792	0.032813432065695	0.032813432065695
+11091	4792	4812	0.0677278405661894	0.0677278405661894
+11092	4812	2152	0.0672921980026174	0.0672921980026174
+11093	2152	2179	0.0344341477791983	0.0344341477791983
+11094	2179	6304	0.100339028034619	0.100339028034619
+11095	6304	6426	0.101616906343387	0.101616906343387
+11096	6426	5344	0.101029409154815	0.101029409154815
+11097	5344	4640	0.0949596649493475	0.0949596649493475
+11098	4640	1261	0.0990622828589398	0.0990622828589398
+11100	3674	8117	0.125664760723522	0.125664760723522
+11101	8117	8118	0.0959168081132613	0.0959168081132613
+11102	8118	8119	0.126940211454871	0.126940211454871
+11103	8119	8120	0.01117909521949	0.01117909521949
+11104	8120	2680	0.0506435066002237	0.0506435066002237
+11105	2680	7576	0.0851117723335375	0.0851117723335375
+11106	7576	7833	0.0050110745435388	0.0050110745435388
+16206	5823	7210	0.206033080289906	0.206033080289906
+11107	7833	8121	0.0770500763169566	0.0770500763169566
+11108	8121	8035	0.0465513466723509	0.0465513466723509
+11110	807	8122	0.0835494437055617	0.0835494437055617
+11111	8122	8123	0.0673397864842803	0.0673397864842803
+11112	8123	3017	0.0101257363562013	0.0101257363562013
+11114	8124	8125	0.0101518907891953	0.0101518907891953
+11115	8125	2367	0.124673068713839	0.124673068713839
+11116	2367	8126	0.113318754907998	0.113318754907998
+11117	8126	1826	0.2011636326138	0.2011636326138
+11119	8127	8128	0.150025905824831	0.150025905824831
+11121	2887	8129	0.081938792894379	0.081938792894379
+11122	8129	8130	0.106964546123147	0.106964546123147
+11123	8130	4728	0.104978647949955	0.104978647949955
+11124	4728	6795	0.108689532522494	0.108689532522494
+11125	6795	7347	0.102216150252819	0.102216150252819
+11126	7347	5393	0.105889579896167	0.105889579896167
+11127	5393	8131	0.054562518485416	0.054562518485416
+11128	8131	8132	0.0481675689920574	0.0481675689920574
+11129	8132	3895	0.109975096473535	0.109975096473535
+11130	3895	1027	0.10512607647723	0.10512607647723
+11131	1027	8133	0.0540856357592879	0.0540856357592879
+12777	8831	8832	0.188959131880304	0.188959131880304
+11133	6270	8134	0.0524343047299347	0.0524343047299347
+11134	8134	8135	0.0535628703960502	0.0535628703960502
+11136	8136	8137	0.085310565822113	0.085310565822113
+11137	8137	6283	0.0924164471878071	0.0924164471878071
+11138	6283	8138	0.0880043396162394	0.0880043396162394
+11139	8138	8139	0.093883258506383	0.093883258506383
+11140	8139	3142	0.0916816056478044	0.0916816056478044
+11141	3142	5416	0.0909467644852468	0.0909467644852468
+11142	5416	8140	0.0909305385237858	0.0909305385237858
+11144	3154	4972	0.0951253779669951	0.0951253779669951
+11145	4972	8141	0.159341748119657	0.159341748119657
+11147	8142	7088	0.0975513520982515	0.0975513520982515
+11148	7088	971	0.0957796137604222	0.0957796137604222
+11149	971	7402	0.0550171923708008	0.0550171923708008
+11150	7402	5289	0.0484207753056408	0.0484207753056408
+11152	3320	8143	0.077853024278325	0.077853024278325
+11153	8143	5756	0.0805728425443714	0.0805728425443714
+11154	5756	7328	0.0873058149168626	0.0873058149168626
+11155	7328	2087	0.0932446680916279	0.0932446680916279
+12803	4082	3763	0.178907695562899	0.178907695562899
+11158	4115	4117	0.0440125760632801	0.0440125760632801
+11159	4117	6504	0.0374084190760855	0.0374084190760855
+11160	6504	6677	0.044394894025319	0.044394894025319
+11161	6677	8029	0.0937961823239111	0.0937961823239111
+11162	8029	8144	0.0511329046048641	0.0511329046048641
+11163	8144	8145	0.0135266374241744	0.0135266374241744
+11165	4223	1001	0.0531658581374023	0.0531658581374023
+11167	4374	2855	0.170827518580558	0.170827518580558
+11169	8146	4313	0.17183605887504	0.17183605887504
+11171	5444	7921	0.207916650376417	0.207916650376417
+11172	7921	4408	0.197533961318481	0.197533961318481
+11174	8147	644	0.13870723980062	0.13870723980062
+11175	644	7273	0.132830481063153	0.132830481063153
+11176	7273	1992	0.0923486278054484	0.0923486278054484
+11177	1992	1976	0.0346172149199892	0.0346172149199892
+11178	1976	4591	0.135026001443702	0.135026001443702
+11179	4591	6478	0.132622992610531	0.132622992610531
+12836	8855	8856	0.0453127355156614	0.0453127355156614
+11180	6478	2462	0.14279254357733	0.14279254357733
+11182	8148	8149	0.201096301426274	0.201096301426274
+11183	8149	8150	0.201154462707023	0.201154462707023
+11185	2461	5905	0.204782750962282	0.204782750962282
+11186	5905	8151	0.200573430726899	0.200573430726899
+11187	8151	790	0.199941729347635	0.199941729347635
+11188	790	3583	0.202642621733606	0.202642621733606
+11189	3583	4354	0.202475015345548	0.202475015345548
+11190	4354	8152	0.200309115545572	0.200309115545572
+11191	8152	3057	0.206933046688651	0.206933046688651
+11192	3057	8153	0.186611026973769	0.186611026973769
+11194	1060	8154	0.173008298211734	0.173008298211734
+11195	8154	8155	0.177900871903465	0.177900871903465
+11196	8155	8156	0.167407375878646	0.167407375878646
+11197	8156	4775	0.251673348312152	0.251673348312152
+11198	4775	6553	0.132857734263153	0.132857734263153
+11199	6553	8157	0.106438324963657	0.106438324963657
+11201	2232	5133	0.19052148019247	0.19052148019247
+11202	5133	4902	0.0151263568070176	0.0151263568070176
+11203	4902	6619	0.197484990473566	0.197484990473566
+11205	8158	8159	0.20585122765193	0.20585122765193
+11207	8160	8161	0.016887203978	0.016887203978
+11221	106	61	0.00533283632570931	0.00533283632570931
+11222	61	65	0.207145778882675	0.207145778882675
+11224	103	8170	0.0169041191858478	0.0169041191858478
+11225	8170	8171	0.361108877807587	0.361108877807587
+11226	8171	8172	0.190446564346409	0.190446564346409
+11228	8173	8174	0.0754029121625499	0.0754029121625499
+11229	8174	8175	0.417052793540933	0.417052793540933
+11231	8176	8177	0.0299391686417842	0.0299391686417842
+11232	8177	8178	0.202215537578589	0.202215537578589
+11233	8178	8179	0.11808571362223	0.11808571362223
+11234	8179	8163	0.126818785158071	0.126818785158071
+11236	4228	8181	0.209470643186114	0.209470643186114
+11269	4227	8200	0.197818013323833	0.197818013323833
+11237	8181	65	0.190124873120192	0.190124873120192
+11238	65	8172	0.00592368117466438	0.00592368117466438
+11239	8172	8178	0.446545243407564	0.446545243407564
+12886	8876	655	0.00596005420121878	0.00596005420121878
+11242	8183	8184	0.228538005170478	0.228538005170478
+11245	8162	8186	0.154667884886688	0.154667884886688
+11246	8186	8187	0.175562487769928	0.175562487769928
+11249	3633	8188	0.0150923041998694	0.0150923041998694
+11250	8188	8189	0.270579217097142	0.270579217097142
+11251	8189	8176	0.0989590805052705	0.0989590805052705
+11253	8163	3643	0.149826975112258	0.149826975112258
+11255	8190	1804	0.201671276037755	0.201671276037755
+11257	8191	8192	0.0154162495075233	0.0154162495075233
+11258	8192	8193	0.181517364616001	0.181517364616001
+11259	8193	8194	0.180264399151985	0.180264399151985
+11261	8181	3550	0.192378625445026	0.192378625445026
+11264	8186	8197	0.16597516800592	0.16597516800592
+11265	8197	8198	0.19583924016197	0.19583924016197
+11267	8199	8197	0.123986592502342	0.123986592502342
+11271	8194	8171	0.202821007714315	0.202821007714315
+11272	8171	8195	0.195495736534207	0.195495736534207
+11273	8195	8201	0.207035429354564	0.207035429354564
+11275	8202	8174	0.0167300114490718	0.0167300114490718
+11277	8198	8167	0.130702597640292	0.130702597640292
+11278	8167	8203	0.122618976220882	0.122618976220882
+11279	8203	8204	0.327046093817032	0.327046093817032
+11280	4228	4229	0.198835732908948	0.198835732908948
+11281	4229	8205	0.301334691508365	0.301334691508365
+11282	8206	8190	0.113799565910968	0.113799565910968
+11284	8201	4227	0.0154895076655846	0.0154895076655846
+11286	8207	8200	0.0930040479254132	0.0930040479254132
+11288	8193	8184	0.208283527691618	0.208283527691618
+11316	5155	2238	0.0837223321108041	0.0837223321108041
+11289	8184	8189	0.18616179415052	0.18616179415052
+11291	3257	8208	0.321455747501831	0.321455747501831
+11293	443	8209	0.110751336507506	0.110751336507506
+11294	392	8179	0.178734728363983	0.178734728363983
+11296	8162	6291	0.216060929512084	0.216060929512084
+11297	6291	7342	0.196043159951137	0.196043159951137
+11645	8348	6433	0.104796073662296	0.104796073662296
+11299	7342	5274	0.233799434282417	0.233799434282417
+11300	61	3550	0.201334976523304	0.201334976523304
+11301	3550	4229	0.200151526253302	0.200151526253302
+11303	5279	3162	0.0990447395902117	0.0990447395902117
+11304	3162	4979	0.101293558978732	0.101293558978732
+11305	4979	8126	0.0993695918525221	0.0993695918525221
+11306	8126	4335	0.0910331896522206	0.0910331896522206
+11307	4335	8210	0.0476841899874069	0.0476841899874069
+11308	8210	5040	0.0521232799197054	0.0521232799197054
+11309	5040	8005	0.0976580173278249	0.0976580173278249
+11310	8005	4307	0.0466427658725356	0.0466427658725356
+11311	4307	995	0.052631404385892	0.052631404385892
+11313	8211	5951	0.199050744316133	0.199050744316133
+11314	5951	5143	0.0913688712241713	0.0913688712241713
+11315	5143	5155	0.025420878561629	0.025420878561629
+11317	2238	4911	0.203010994943857	0.203010994943857
+11318	4911	6611	0.201886473833407	0.201886473833407
+11319	6611	8212	0.197101479655197	0.197101479655197
+11320	8212	8213	0.206955997470903	0.206955997470903
+11323	5950	5142	0.147533492116586	0.147533492116586
+11326	2237	4910	0.20422309503448	0.20422309503448
+11327	4910	6612	0.200274596012582	0.200274596012582
+11328	6612	8215	0.196974435405611	0.196974435405611
+11329	8215	8216	0.208072957327714	0.208072957327714
+11331	7959	8217	0.0106613346433968	0.0106613346433968
+11337	289	8219	0.0101386145536838	0.0101386145536838
+11338	8219	4483	0.0263974796072716	0.0263974796072716
+11340	8220	289	0.116841869555958	0.116841869555958
+11483	8221	8222	0.0466544327533727	0.0466544327533727
+11342	8223	7906	0.0355112223964134	0.0355112223964134
+11343	7906	4187	0.0959478466054884	0.0959478466054884
+11344	4187	8224	0.108554994700497	0.108554994700497
+11345	8224	2512	0.0267513344361619	0.0267513344361619
+11346	2512	6726	0.134329958691173	0.134329958691173
+11347	6726	8226	0.0541066682112551	0.0541066682112551
+11348	8226	1754	0.0582360854290831	0.0582360854290831
+11352	8227	8228	0.0477813036978224	0.0477813036978224
+11353	8228	2164	0.0100092856224142	0.0100092856224142
+11354	2164	8229	0.117341992338054	0.117341992338054
+11355	8229	6417	0.132790064578642	0.132790064578642
+11356	6417	6925	0.066680142142332	0.066680142142332
+11357	6925	4623	0.0658013116163711	0.0658013116163711
+11358	4623	1242	0.132924383309181	0.132924383309181
+11359	1242	8230	0.117419950970456	0.117419950970456
+11360	8230	2709	0.0877593926636965	0.0877593926636965
+11361	2709	2723	0.0586886121966142	0.0586886121966142
+11362	2723	8231	0.126334352112189	0.126334352112189
+11363	8231	8232	0.00800071585537006	0.00800071585537006
+11364	8232	8233	0.00985605768408299	0.00985605768408299
+11368	8223	8219	0.0801446034429079	0.0801446034429079
+11374	8234	8235	0.161648892640997	0.161648892640997
+11375	8235	8236	0.12616333160407	0.12616333160407
+11379	4843	910	0.143586236704503	0.143586236704503
+16194	9844	7725	1.4119245996206	1.4119245996206
+11388	2064	8243	0.0180732464676321	0.0180732464676321
+11389	8243	8244	0.307196973753055	0.307196973753055
+11392	8246	3316	0.0456634204130967	0.0456634204130967
+11394	6201	6945	0.172713645832468	0.172713645832468
+11395	6945	8138	0.203649557134895	0.203649557134895
+11396	8138	2880	0.164233861501064	0.164233861501064
+11398	6200	6944	0.169916988893137	0.169916988893137
+11399	6944	8139	0.203898136987997	0.203898136987997
+11400	8139	2879	0.160611633174386	0.160611633174386
+11401	2879	6408	0.0322091251783491	0.0322091251783491
+11402	6408	6412	0.266159968303504	0.266159968303504
+11403	6412	8247	0.0505479778201866	0.0505479778201866
+11407	6190	6948	0.200111149085838	0.200111149085838
+11408	6948	8142	0.198760931377031	0.198760931377031
+11409	8142	2864	0.201908008890848	0.201908008890848
+11412	8249	8067	0.737441419701283	0.737441419701283
+11424	8079	8250	0.738983904805809	0.738983904805809
+11431	412	415	0.636538521199656	0.636538521199656
+18912	10390	10391	0.0580503615423655	0.0580503615423655
+11453	8262	8263	0.292162593230546	0.292162593230546
+11468	781	8271	0.782578824666181	0.782578824666181
+11597	8330	8331	0.0435245851176098	0.0435245851176098
+11469	8272	8270	0.782084992370784	0.782084992370784
+11471	1610	1244	0.0543175525667992	0.0543175525667992
+11472	1244	8273	0.0533400242428221	0.0533400242428221
+11473	8273	8274	0.0526029519682926	0.0526029519682926
+11474	8274	8275	0.0534350213865012	0.0534350213865012
+11476	8276	1610	0.0663295545530221	0.0663295545530221
+11478	1610	8277	0.135789656985465	0.135789656985465
+11480	7861	8278	0.0143942343868779	0.0143942343868779
+11481	8278	7581	0.0343415060903181	0.0343415060903181
+11482	7581	8221	0.0532138886249367	0.0532138886249367
+11484	8222	5964	0.00591714471910066	0.00591714471910066
+11485	5964	8279	0.00703516905841087	0.00703516905841087
+11486	8279	3001	0.0966235655424771	0.0966235655424771
+11488	8275	7561	0.103690392766705	0.103690392766705
+11489	7561	8280	0.0558620890554655	0.0558620890554655
+11490	8280	6185	0.0505017539528047	0.0505017539528047
+11493	8282	8283	0.101387037651418	0.101387037651418
+11494	8283	8284	0.102270654549379	0.102270654549379
+11495	8284	8285	0.10797805598011	0.10797805598011
+11496	8285	8286	0.106400672091098	0.106400672091098
+11497	8286	4392	0.102247824152268	0.102247824152268
+11498	4392	8287	0.0166274126542335	0.0166274126542335
+11499	8287	8288	0.0799445865529155	0.0799445865529155
+11500	8288	3008	0.023689428581565	0.023689428581565
+11501	3008	8289	0.0297886059757376	0.0297886059757376
+11505	8290	8291	0.051999610902965	0.051999610902965
+11506	8291	8292	0.0471972516257623	0.0471972516257623
+11507	8292	8293	0.00657484491051097	0.00657484491051097
+11508	8293	6184	0.103933630763566	0.103933630763566
+11509	6184	7562	0.106067817024884	0.106067817024884
+11510	7562	8294	0.105991654619724	0.105991654619724
+11512	8295	8296	0.0523765388441753	0.0523765388441753
+11522	8297	8298	0.429589849820924	0.429589849820924
+11537	6093	8302	0.0171793049902436	0.0171793049902436
+11539	8303	8304	0.00530856583912826	0.00530856583912826
+11541	2195	8305	0.128463648918522	0.128463648918522
+11543	8306	8307	0.0111673306658244	0.0111673306658244
+11545	8308	8306	0.0470759818626725	0.0470759818626725
+11547	8309	8310	0.0336302381688336	0.0336302381688336
+11549	8311	8312	0.0219555493879181	0.0219555493879181
+11550	8312	8313	0.036241706253738	0.036241706253738
+11598	8331	7782	0.0493369824555625	0.0493369824555625
+11551	8313	8314	0.0512913124797426	0.0512913124797426
+11552	8314	8315	0.107868186928524	0.107868186928524
+11553	8315	8316	0.223470506469832	0.223470506469832
+11554	8316	8317	0.211788929267968	0.211788929267968
+11555	8317	6963	0.0143636308232266	0.0143636308232266
+16197	7207	1788	0.198027086450295	0.198027086450295
+11556	6963	2151	0.0672032541987901	0.0672032541987901
+11557	2151	8318	0.127422890827039	0.127422890827039
+11563	8321	5670	0.0510922996821663	0.0510922996821663
+11564	5670	8319	0.0512128921942442	0.0512128921942442
+11565	8319	7031	0.0489988317743493	0.0489988317743493
+13192	2925	5307	0.0991225747078309	0.0991225747078309
+17794	8402	10178	0.0874671474005437	0.0874671474005437
+11583	8323	8324	0.0415122975666244	0.0415122975666244
+11585	8325	8326	0.0105737020216599	0.0105737020216599
+11586	8326	8327	0.0170186899048993	0.0170186899048993
+11587	8327	4030	0.059373245074661	0.059373245074661
+11588	4030	8328	0.00887102858910589	0.00887102858910589
+11589	8328	7033	0.192077028988682	0.192077028988682
+11590	7033	3414	0.20009224997208	0.20009224997208
+11591	3414	7634	0.0490496792565584	0.0490496792565584
+11592	7634	5699	0.0501609282125079	0.0501609282125079
+11593	5699	8329	0.0491062363102631	0.0491062363102631
+11594	8329	7426	0.0512345906571307	0.0512345906571307
+11595	7426	7167	0.100906650593457	0.100906650593457
+11596	7167	8330	0.0074706340310152	0.0074706340310152
+11601	1125	8333	0.0515421912286004	0.0515421912286004
+11602	8333	7499	0.0491232128122514	0.0491232128122514
+11603	7499	6382	0.0528674106807856	0.0528674106807856
+11604	6382	3844	0.0491757077428548	0.0491757077428548
+11605	3844	8336	0.0505763419832581	0.0505763419832581
+11606	8336	5560	0.0511234189065501	0.0511234189065501
+11607	5560	7536	0.078259792036463	0.078259792036463
+17795	10178	10179	0.00714983889336217	0.00714983889336217
+11608	7536	8337	0.710353127144862	0.710353127144862
+11615	8339	8340	0.0545607270452329	0.0545607270452329
+11616	8340	6778	0.0500886204125654	0.0500886204125654
+11617	6778	1543	0.044749974690185	0.044749974690185
+11618	1543	7913	0.0484257128218018	0.0484257128218018
+11619	7913	1232	0.0498960080732329	0.0498960080732329
+11620	1232	6138	0.0513577550981739	0.0513577550981739
+11621	6138	1234	0.0484184731965446	0.0484184731965446
+11622	1234	4025	0.049897443897038	0.049897443897038
+11624	8341	6746	0.131938356933677	0.131938356933677
+11625	6746	6146	0.134278510793599	0.134278510793599
+11626	6146	4020	0.131808341418281	0.131808341418281
+11627	4020	7024	0.13680573147125	0.13680573147125
+11628	7024	7394	0.133543322276702	0.133543322276702
+11629	7394	3403	0.129241253411212	0.129241253411212
+11631	4656	1278	0.11609492718799	0.11609492718799
+11633	4529	8342	0.13081541679387	0.13081541679387
+11634	8342	8343	0.131875462531589	0.131875462531589
+11636	1275	4561	0.135792686790169	0.135792686790169
+11637	4561	8344	0.129597362082905	0.129597362082905
+11638	8344	8345	0.132615292246902	0.132615292246902
+11654	8351	8352	0.00642310935412446	0.00642310935412446
+11656	8354	3585	0.00948998635035479	0.00948998635035479
+11658	8355	7036	0.189514043057238	0.189514043057238
+11661	3420	7662	0.0473953664812579	0.0473953664812579
+11662	7662	5701	0.051310070537927	0.051310070537927
+11663	5701	8356	0.0493288418218244	0.0493288418218244
+11664	8356	7428	0.0514646959507586	0.0514646959507586
+11665	7428	7170	0.101185693406291	0.101185693406291
+11666	7170	8357	0.0511732963069457	0.0511732963069457
+11667	8357	7785	0.0488740378204359	0.0488740378204359
+11669	8358	8359	0.0429199500385996	0.0429199500385996
+11670	8359	1126	0.0542934514543922	0.0542934514543922
+11671	1126	8361	0.0465752610792189	0.0465752610792189
+11672	8361	7500	0.0458657856618734	0.0458657856618734
+11673	7500	6383	0.0540969092476656	0.0540969092476656
+11674	6383	3845	0.0488658545954006	0.0488658545954006
+11675	3845	8362	0.0512974137325796	0.0512974137325796
+11676	8362	5562	0.0492074321979192	0.0492074321979192
+11677	5562	8363	0.0405073414501016	0.0405073414501016
+11678	8363	7537	0.0387636388049137	0.0387636388049137
+11679	7537	8364	0.709659016245144	0.709659016245144
+11680	533	532	0.177767664549368	0.177767664549368
+11681	532	8365	0.019932032746647	0.019932032746647
+11683	8366	2195	0.0764354088651933	0.0764354088651933
+11712	3383	8367	0.106809468593159	0.106809468593159
+11713	8367	8368	0.0971987897456675	0.0971987897456675
+11714	8368	8369	0.0991386674985246	0.0991386674985246
+11717	5295	6973	0.135215470337054	0.135215470337054
+11718	6973	8371	0.00923487504976077	0.00923487504976077
+11719	8371	8372	0.0216052571390285	0.0216052571390285
+11720	8372	16	0.105179593848414	0.105179593848414
+11721	16	6385	0.131720726068438	0.131720726068438
+11722	6385	8373	0.136425162652677	0.136425162652677
+11723	8373	8374	0.133357418298716	0.133357418298716
+11725	8375	5538	0.102551146645578	0.102551146645578
+11726	5538	2406	0.101276420369131	0.101276420369131
+11727	2406	4291	0.0994536245434588	0.0994536245434588
+11728	4291	8376	0.0498495835403536	0.0498495835403536
+11729	8376	8377	0.0555205772000376	0.0555205772000376
+11730	8377	7717	0.202770146499174	0.202770146499174
+11731	7717	2980	0.203558742671124	0.203558742671124
+11733	6381	7626	0.0677965571067337	0.0677965571067337
+11734	7626	8378	0.0657902652889389	0.0657902652889389
+11736	3813	8379	0.0683672879873519	0.0683672879873519
+11737	8379	7491	0.0530440410997852	0.0530440410997852
+11738	7491	3832	0.0868122883126915	0.0868122883126915
+11740	8129	8380	0.134532326319759	0.134532326319759
+11741	8380	8382	0.00458704251135175	0.00458704251135175
+11743	8383	8384	0.136207849444979	0.136207849444979
+11744	8384	7838	0.138328826392976	0.138328826392976
+11746	8385	8386	0.0871147692827014	0.0871147692827014
+11749	8389	8390	0.0947169874364547	0.0947169874364547
+19614	10514	10587	0.0689139357560502	0.0689139357560502
+11751	8391	4386	0.0534420102551264	0.0534420102551264
+11752	4386	8392	0.0520924012173649	0.0520924012173649
+11753	8392	8393	0.0473152332925311	0.0473152332925311
+11754	8393	8394	0.00593400942031918	0.00593400942031918
+11755	8394	8395	0.0526072167549377	0.0526072167549377
+11756	8395	8396	0.0535245842073366	0.0535245842073366
+11757	8396	8397	0.0520127953812383	0.0520127953812383
+11758	8397	8398	0.0525440381176666	0.0525440381176666
+11759	8398	8399	0.105725944401461	0.105725944401461
+11760	8399	8400	0.0963534079842441	0.0963534079842441
+11761	8400	8401	0.00721402202643277	0.00721402202643277
+11762	8401	8402	0.0642819932248178	0.0642819932248178
+11763	8402	6180	0.0440229088580127	0.0440229088580127
+11764	6180	3304	0.105719811244021	0.105719811244021
+11765	3304	8404	0.104473728049028	0.104473728049028
+11776	2683	5360	0.148134497863423	0.148134497863423
+11779	8408	8409	0.0170504242210171	0.0170504242210171
+11780	8409	8410	0.0301331300599118	0.0301331300599118
+11781	8410	8408	0.024630163522097	0.024630163522097
+11786	8411	7068	0.119279864672347	0.119279864672347
+11787	7068	5513	0.148575970390717	0.148575970390717
+11788	5513	4445	0.14563348668729	0.14563348668729
+11795	8413	543	0.028789081158834	0.028789081158834
+11800	8038	2689	0.14574049201504	0.14574049201504
+11801	2689	8392	0.146364813323007	0.146364813323007
+11810	8316	8410	0.0688632882143238	0.0688632882143238
+11818	8318	8421	0.163109524565458	0.163109524565458
+11820	2202	8422	0.0636527332062032	0.0636527332062032
+11827	8425	8426	0.235001983383898	0.235001983383898
+11829	8427	2187	0.0976945121262096	0.0976945121262096
+11830	2187	8428	0.113051166751879	0.113051166751879
+11832	8429	8427	0.106790392513668	0.106790392513668
+11836	8432	8433	0.316135432263608	0.316135432263608
+11838	8434	8435	0.0739062863270344	0.0739062863270344
+16014	9785	9166	0.0737839272607517	0.0737839272607517
+11840	8436	8437	0.305296163280187	0.305296163280187
+11842	8438	8439	0.0899401823641934	0.0899401823641934
+11843	8439	8440	0.0855827793815302	0.0855827793815302
+11845	8441	533	0.0890672230330435	0.0890672230330435
+11847	8325	3752	0.00830034500152871	0.00830034500152871
+11848	3752	8442	0.100105658665385	0.100105658665385
+11849	8442	6773	0.103872958239997	0.103872958239997
+11850	6773	8303	0.0295834023794743	0.0295834023794743
+11851	8303	8443	0.122024126507826	0.122024126507826
+11854	8365	8445	0.12649848699983	0.12649848699983
+11856	8445	8446	0.0774789975708123	0.0774789975708123
+11858	6522	8447	0.124835406842481	0.124835406842481
+11860	8447	4244	0.0110439553261759	0.0110439553261759
+11861	4244	1787	0.20168643392703	0.20168643392703
+11862	1787	7206	0.198352393557477	0.198352393557477
+11863	7206	5819	0.204146640542909	0.204146640542909
+11864	5819	7724	0.196992932786583	0.196992932786583
+11865	7724	8448	0.0469826616672844	0.0469826616672844
+11866	8448	8449	1.1597652413984	1.1597652413984
+15932	1178	9158	0.281206093212011	0.281206093212011
+11868	529	476	0.196533269115043	0.196533269115043
+11869	476	8451	0.00692492598385206	0.00692492598385206
+11871	8452	8450	0.118857471050118	0.118857471050118
+11873	8446	8453	0.0472361723035857	0.0472361723035857
+11875	8453	1808	0.0616092600190724	0.0616092600190724
+11876	1808	8454	0.103675532542851	0.103675532542851
+11878	8455	8452	0.0832501988122618	0.0832501988122618
+11880	8456	8455	0.0488208935536257	0.0488208935536257
+11883	1807	8456	0.0645719953824934	0.0645719953824934
+11885	8454	8460	0.0468848260297017	0.0468848260297017
+11887	8460	8461	0.191542303309411	0.191542303309411
+11888	8461	8462	0.143814933384229	0.143814933384229
+11926	8479	7578	0.0514183930388008	0.0514183930388008
+11889	8462	8312	0.0813843178601785	0.0813843178601785
+11890	8312	8463	0.108687135880293	0.108687135880293
+11891	8463	8464	0.171307568098715	0.171307568098715
+11892	8464	7962	0.138415151415673	0.138415151415673
+11894	8465	8457	0.0468050869550622	0.0468050869550622
+11899	8468	3170	0.018103312819976	0.018103312819976
+11901	8469	8466	0.0123424922846296	0.0123424922846296
+11902	8466	8311	0.0903233113904637	0.0903233113904637
+11904	8470	8469	0.0396717564170432	0.0396717564170432
+11906	8296	8273	0.152532135373756	0.152532135373756
+11907	8273	5789	0.146346014371488	0.146346014371488
+11908	5789	4816	0.144635236179438	0.144635236179438
+11909	4816	8471	0.144945711618013	0.144945711618013
+11910	8471	8472	0.00337499193971306	0.00337499193971306
+13477	9099	9096	0.0859011649600223	0.0859011649600223
+11912	8473	8474	0.141151348464777	0.141151348464777
+11913	8474	8475	0.13279343346844	0.13279343346844
+11915	1346	8475	0.0349627710606267	0.0349627710606267
+11919	8313	8477	0.0691895872331652	0.0691895872331652
+11921	4846	8478	0.326789742990523	0.326789742990523
+11923	5031	6987	0.0623597305249406	0.0623597305249406
+11924	6987	5806	0.105799056021075	0.105799056021075
+11925	5806	8479	0.0532916983351864	0.0532916983351864
+11927	7578	8480	0.0539921866859616	0.0539921866859616
+11928	8480	8481	0.0438686505947476	0.0438686505947476
+11929	8481	5961	0.00656699811047763	0.00656699811047763
+11930	5961	8482	0.00665108194893408	0.00665108194893408
+11931	8482	3003	0.0997303043018087	0.0997303043018087
+11932	3003	4396	0.10605079021574	0.10605079021574
+11933	4396	8483	0.102726296828384	0.102726296828384
+11934	8483	8484	0.00648258609012086	0.00648258609012086
+11935	8484	8485	0.100141708737386	0.100141708737386
+11936	8485	8486	0.0275311475026058	0.0275311475026058
+11937	8486	8487	0.0265062604992808	0.0265062604992808
+11938	8487	8488	0.0523458198440316	0.0523458198440316
+11939	8488	8489	0.104751027795859	0.104751027795859
+11940	8489	8490	0.0990693987095691	0.0990693987095691
+11941	8490	8491	0.00745857832944624	0.00745857832944624
+11942	8491	8492	0.0518088588950486	0.0518088588950486
+11943	8492	6189	0.054888246037165	0.054888246037165
+11945	6632	7733	0.112596009055585	0.112596009055585
+12071	8507	3552	0.071078699522552	0.071078699522552
+11946	7733	8495	2.00712592676004	2.00712592676004
+11954	6568	4449	0.147875161573861	0.147875161573861
+11955	4449	5497	0.144351276811523	0.144351276811523
+11956	5497	7071	0.14871904829256	0.14871904829256
+11958	8501	8502	0.146058647776188	0.146058647776188
+11959	8502	8397	0.148207146508282	0.148207146508282
+11960	8397	2694	0.144837053832231	0.144837053832231
+11966	4737	8503	0.0843423130679838	0.0843423130679838
+11967	8399	5455	0.141833750205801	0.141833750205801
+11968	5455	2697	0.00495891013188563	0.00495891013188563
+11969	2697	8045	0.148003641728593	0.148003641728593
+11970	8045	6573	0.144311748140391	0.144311748140391
+11971	6573	4454	0.147824934616054	0.147824934616054
+11972	4454	5502	0.144725467857806	0.144725467857806
+11973	5502	7076	0.14772137009526	0.14772137009526
+11974	7076	2033	0.146029155751578	0.146029155751578
+11975	2033	5322	0.146208700799923	0.146208700799923
+11976	5322	631	0.145784380568713	0.145784380568713
+11977	631	6404	0.147332884437086	0.147332884437086
+11978	6404	2910	0.0722929712454625	0.0722929712454625
+11980	8504	8505	0.0580359403583064	0.0580359403583064
+11981	8505	6178	0.0499592014591395	0.0499592014591395
+11982	6178	8506	0.0514685264155668	0.0514685264155668
+11983	8506	8508	0.0359450086839816	0.0359450086839816
+11985	8509	8491	0.145477011516465	0.145477011516465
+11986	8491	6711	0.147675146026861	0.147675146026861
+11987	6711	8510	0.0119577509852376	0.0119577509852376
+11999	7079	2035	0.146591134901683	0.146591134901683
+12000	2035	8511	0.144080341921709	0.144080341921709
+12001	8506	6577	0.292638121021149	0.292638121021149
+12013	8514	7905	0.14392744613234	0.14392744613234
+12014	7905	8224	0.144594704272466	0.144594704272466
+12015	8224	2513	0.0408485952047996	0.0408485952047996
+12017	8223	4514	0.129566346086565	0.129566346086565
+12018	4514	5236	0.132336483238921	0.132336483238921
+12019	5236	6888	0.137583446360535	0.137583446360535
+12020	6888	8515	0.134749292102011	0.134749292102011
+18562	2839	2837	0.0398814314105002	0.0398814314105002
+12021	8515	1670	0.131131933535458	0.131131933535458
+12022	1670	8516	0.137025514768393	0.137025514768393
+12023	8516	2451	0.140387467109701	0.140387467109701
+12024	2451	3220	0.132796169496021	0.132796169496021
+12025	3220	3241	0.0110949892633217	0.0110949892633217
+12026	3241	5742	0.122723226676881	0.122723226676881
+12027	5742	5734	0.0121046279679281	0.0121046279679281
+12028	5734	5519	0.122276751203955	0.122276751203955
+12029	5519	5518	0.0183360434030607	0.0183360434030607
+12030	5518	6453	0.115919443239594	0.115919443239594
+12031	6453	8519	0.0186206290164017	0.0186206290164017
+12032	8519	6921	0.113511395757215	0.113511395757215
+12033	6921	6966	0.278590640144845	0.278590640144845
+12034	6966	2480	0.0421290693071181	0.0421290693071181
+12035	2480	2819	0.0832464241503531	0.0832464241503531
+12036	2819	1420	0.203808019181798	0.203808019181798
+12037	1420	1350	0.0610460440330561	0.0610460440330561
+12038	1350	386	0.0313326355302306	0.0313326355302306
+12039	386	8520	0.00828931624769023	0.00828931624769023
+12041	8521	8522	0.0528158272532374	0.0528158272532374
+12042	8522	8461	0.0240744692191342	0.0240744692191342
+12045	8524	8525	0.099226587437181	0.099226587437181
+12056	6652	7968	0.116416731661103	0.116416731661103
+13645	9155	9152	0.125537210877253	0.125537210877253
+12069	3016	8123	0.0144820950034519	0.0144820950034519
+12070	8123	8507	0.0310425416681892	0.0310425416681892
+12072	3552	4443	0.0963694960086714	0.0963694960086714
+12074	8536	8537	0.125429093404429	0.125429093404429
+12075	8537	8398	0.148732331324902	0.148732331324902
+12076	8398	2695	0.143717697009194	0.143717697009194
+12078	8043	6571	0.143486226041694	0.143486226041694
+15271	8458	8538	0.130887342573391	0.130887342573391
+12079	6571	4452	0.149648787475973	0.149648787475973
+12080	4452	5500	0.142780903948531	0.142780903948531
+12081	5500	7074	0.148102852377504	0.148102852377504
+12082	7074	2032	0.145681586591459	0.145681586591459
+12086	2886	7993	0.218441304114497	0.218441304114497
+12088	8130	8541	0.134523622254369	0.134523622254369
+12089	8541	8542	0.00481474032387871	0.00481474032387871
+12090	8542	8543	0.00504824966940074	0.00504824966940074
+12091	8543	8544	0.135980275793844	0.135980275793844
+12092	8544	7839	0.139416199289129	0.139416199289129
+12093	7839	819	0.136947671655105	0.136947671655105
+12094	819	3560	0.140872852825874	0.140872852825874
+12095	3560	5634	0.139405079534224	0.139405079534224
+12096	5634	4338	0.141217557097108	0.141217557097108
+12097	4338	6337	0.135602213042785	0.135602213042785
+12098	6337	3053	0.134723773393479	0.134723773393479
+12100	3691	8545	0.139072808044494	0.139072808044494
+12101	5485	8546	0.200596752868582	0.200596752868582
+12103	4888	8547	0.185876236918155	0.185876236918155
+12104	8547	5486	0.175599681021845	0.175599681021845
+12106	4889	8548	0.187588829795577	0.187588829795577
+12107	8548	5487	0.174192187356096	0.174192187356096
+12109	8549	8550	0.0264199145705686	0.0264199145705686
+12110	8550	5477	0.172910339815493	0.172910339815493
+12111	5477	8551	0.17777655236626	0.17777655236626
+12112	8551	8552	0.179401923989104	0.179401923989104
+12114	672	8553	0.00419226671708486	0.00419226671708486
+12116	8554	4600	0.174009465824247	0.174009465824247
+12117	4600	6497	0.141315269300352	0.141315269300352
+12118	6497	3685	0.0979207012351752	0.0979207012351752
+12119	3685	8132	0.140340825489325	0.140340825489325
+12120	8132	8555	0.134412189177842	0.134412189177842
+12121	8555	8556	0.00412533177852682	0.00412533177852682
+12122	8556	8557	0.00459814794721775	0.00459814794721775
+12123	8557	8558	0.132902025218854	0.132902025218854
+12124	8558	7841	0.138710880861165	0.138710880861165
+12125	7841	825	0.140880437202465	0.140880437202465
+12126	825	3566	0.136859579672601	0.136859579672601
+12127	3566	5637	0.14457832436944	0.14457832436944
+12128	5637	4341	0.139173250387063	0.139173250387063
+12129	4341	6340	0.137021300435373	0.137021300435373
+12130	6340	8560	0.107881318168938	0.107881318168938
+12131	2245	4879	0.176153654685445	0.176153654685445
+12132	4879	7358	0.24873496630677	0.24873496630677
+12133	7358	6786	0.0656034947664249	0.0656034947664249
+12134	6786	4878	0.0544981388589161	0.0544981388589161
+12135	4878	5942	0.524256212186461	0.524256212186461
+12136	5942	8561	0.0631406553785623	0.0631406553785623
+12137	8561	3127	0.0936118840285326	0.0936118840285326
+12138	3127	3131	0.0777309112767711	0.0777309112767711
+12139	3131	5914	0.112365280295693	0.112365280295693
+12140	5914	2245	0.331560162235425	0.331560162235425
+12142	8562	2334	2.72525423343991	2.72525423343991
+12144	7677	5980	0.0954252288299854	0.0954252288299854
+12145	5980	2129	0.0933556137052187	0.0933556137052187
+12146	2129	7520	0.0952025856529876	0.0952025856529876
+12147	7520	8563	0.0935887718802941	0.0935887718802941
+12148	8563	2270	0.0947410402071955	0.0947410402071955
+12149	2270	7011	0.0942715716828769	0.0942715716828769
+12150	7011	2766	0.0940480616870089	0.0940480616870089
+12151	2766	3353	0.0940568781185638	0.0940568781185638
+12152	3353	2010	0.0938087738322925	0.0938087738322925
+12153	2010	2020	0.00116816859457691	0.00116816859457691
+12154	2020	7597	0.0929046375775443	0.0929046375775443
+12155	7597	7260	0.0977180089067193	0.0977180089067193
+12156	7260	7607	0.0981798145414121	0.0981798145414121
+12157	7607	8148	0.0984109366674247	0.0984109366674247
+12158	8148	8566	0.099556755200234	0.099556755200234
+12159	8566	8567	0.0161715318927219	0.0161715318927219
+12165	7560	8570	0.0547324150634264	0.0547324150634264
+12166	8570	6187	0.0510334947129921	0.0510334947129921
+12167	6187	8571	0.106459447476842	0.106459447476842
+12168	8571	8572	0.00500250155273319	0.00500250155273319
+12169	8572	8573	0.102179560181125	0.102179560181125
+12171	8574	8575	0.108491319350075	0.108491319350075
+12172	8575	8576	0.100542104447219	0.100542104447219
+12173	8576	8577	0.00648974428476286	0.00648974428476286
+12174	8577	4394	0.10502201579173	0.10502201579173
+12175	4394	3006	0.104610459063575	0.104610459063575
+12176	3006	5958	0.107806604319072	0.107806604319072
+12177	5958	8578	0.00423483079275732	0.00423483079275732
+12178	8578	7577	0.0996748095395635	0.0996748095395635
+12179	7577	5809	0.11590556985698	0.11590556985698
+12181	5431	4429	0.103577041627779	0.103577041627779
+12182	4429	4040	0.0675516196999984	0.0675516196999984
+12183	4040	8579	0.0337698992215471	0.0337698992215471
+12184	8579	6027	0.102046173899402	0.102046173899402
+12185	6027	7864	0.042576537412	0.042576537412
+12186	7864	7863	0.0569874056816302	0.0569874056816302
+12187	7863	1834	0.10010879574602	0.10010879574602
+12188	1834	1828	0.0220165954761323	0.0220165954761323
+12189	1828	2629	0.0778176858176647	0.0778176858176647
+12190	2629	5364	0.0924919399829741	0.0924919399829741
+12191	5364	8580	0.0666180932686517	0.0666180932686517
+12192	8580	514	0.0427668694783733	0.0427668694783733
+12193	514	8581	0.0733005757458476	0.0733005757458476
+12194	8581	411	0.0548642593724076	0.0548642593724076
+12195	411	8582	0.0193916055385274	0.0193916055385274
+12200	8463	8583	0.030501567860775	0.030501567860775
+12202	8584	8585	0.0144536004398608	0.0144536004398608
+12203	8585	8586	0.0148984012969261	0.0148984012969261
+12204	8586	8587	0.0138457363467684	0.0138457363467684
+12206	7095	8584	0.00198726095451303	0.00198726095451303
+12208	8587	8588	0.0738864008587524	0.0738864008587524
+12209	8588	8088	0.0459979828668163	0.0459979828668163
+12211	8588	8088	0.0459979828668163	0.0459979828668163
+12213	7962	8589	0.0119871256203592	0.0119871256203592
+12219	2290	8595	0.0472264457525012	0.0472264457525012
+12224	8600	6960	0.0627185145557708	0.0627185145557708
+12225	6960	8590	0.111002569075664	0.111002569075664
+12226	8590	8601	0.0399166681864525	0.0399166681864525
+12227	8601	8602	0.0122006420704012	0.0122006420704012
+12229	8602	8601	0.0122006420704012	0.0122006420704012
+12231	8605	8606	0.0364944571667735	0.0364944571667735
+12232	8606	8607	0.0128764646733806	0.0128764646733806
+12233	8607	8608	0.0546695374625623	0.0546695374625623
+12234	8608	8585	0.00588263593176519	0.00588263593176519
+12238	6350	8610	0.0529261007223787	0.0529261007223787
+12276	2459	8630	0.034376801437	0.034376801437
+12278	8630	8631	0.0429012342669158	0.0429012342669158
+12279	8631	8478	0.0881202047420162	0.0881202047420162
+12280	8478	6349	0.0631900183412494	0.0631900183412494
+12281	6349	8610	0.106156240617891	0.106156240617891
+12282	8610	8633	0.00782193502715287	0.00782193502715287
+12283	8633	8235	0.439089917447406	0.439089917447406
+13838	2963	1284	0.0976236721102847	0.0976236721102847
+12291	8488	6708	0.146276219075305	0.146276219075305
+12292	6708	8574	0.146922373978856	0.146922373978856
+12293	8574	5780	0.145168342719135	0.145168342719135
+12294	5780	8284	0.145457218481639	0.145457218481639
+12295	8284	8635	0.147985754967018	0.147985754967018
+12296	8635	7895	0.145231730226047	0.145231730226047
+12297	7895	8636	0.145188764989583	0.145188764989583
+12298	8636	8536	0.0230398310291247	0.0230398310291247
+12300	8637	8638	0.051750923168378	0.051750923168378
+12306	8641	8642	0.0388526899017529	0.0388526899017529
+12322	8647	8648	0.0689932486013888	0.0689932486013888
+12324	8409	8649	0.174821115803257	0.174821115803257
+12330	8652	8653	0.0109021010822668	0.0109021010822668
+12370	127	8676	0.0230804767650593	0.0230804767650593
+13861	1773	4425	0.0478826481852338	0.0478826481852338
+12371	8676	127	0.0230804767650593	0.0230804767650593
+12374	8678	2814	0.00715247655230442	0.00715247655230442
+12375	2814	7853	0.0872240502720576	0.0872240502720576
+12379	552	3283	0.201374804580202	0.201374804580202
+12380	3283	439	0.0140574737901418	0.0140574737901418
+12381	439	440	0.131394781189403	0.131394781189403
+12383	8680	592	0.0279554969032489	0.0279554969032489
+12386	3930	5620	0.102308093785748	0.102308093785748
+12387	5620	3705	0.100376481944534	0.100376481944534
+12388	3705	710	0.100626287480694	0.100626287480694
+12389	710	8681	0.0994362797990831	0.0994362797990831
+12390	8681	8515	0.0993120225558452	0.0993120225558452
+12391	8515	4191	0.136253535658325	0.136253535658325
+12392	4191	2517	0.134250356653895	0.134250356653895
+12393	2517	6728	0.132309702657946	0.132309702657946
+12394	6728	4805	0.136509007433592	0.136509007433592
+12395	4805	8682	0.134957701338679	0.134957701338679
+12397	8683	433	0.845576760689761	0.845576760689761
+12398	433	481	1.45081348243216	1.45081348243216
+12399	481	8684	0.52437215594792	0.52437215594792
+12401	8685	8686	0.010167997865452	0.010167997865452
+12404	4154	4741	0.172602377991032	0.172602377991032
+12405	4741	6536	0.177057900654184	0.177057900654184
+12406	6536	8687	0.165392784618956	0.165392784618956
+12408	5170	6865	0.176928364472993	0.176928364472993
+12409	6865	3073	0.175467136201966	0.175467136201966
+12410	3073	8690	0.1637299437242	0.1637299437242
+12411	8690	8160	0.0198260554201283	0.0198260554201283
+12412	8160	8691	0.0330442022067904	0.0330442022067904
+12414	8692	8693	0.174036627821078	0.174036627821078
+12415	8693	8694	0.176955606262412	0.176955606262412
+12416	8694	8695	0.169605643175659	0.169605643175659
+12417	8695	4774	0.249824848381595	0.249824848381595
+12418	4774	6552	0.130776357701309	0.130776357701309
+12419	6552	8696	0.13038749521243	0.13038749521243
+12420	8696	8566	0.0104649837792038	0.0104649837792038
+12421	8566	8697	0.196337242565984	0.196337242565984
+13908	6946	8137	0.20217075396909	0.20217075396909
+12422	8697	3765	0.201163077899324	0.201163077899324
+12423	3765	5944	0.202700667134599	0.202700667134599
+12424	5944	2231	0.203264325905827	0.203264325905827
+12425	2231	4900	0.203310133896795	0.203310133896795
+12426	4900	8699	0.223846600901437	0.223846600901437
+12427	8699	8700	0.179880034662439	0.179880034662439
+12428	8700	8701	0.204289810782798	0.204289810782798
+12429	8701	643	0.139830079927305	0.139830079927305
+12430	643	7272	0.132835494541237	0.132835494541237
+12431	7272	1993	0.110816863894031	0.110816863894031
+12432	1993	1977	0.01986880052865	0.01986880052865
+12433	1977	4590	0.131129399902762	0.131129399902762
+12434	4590	6477	0.129388315999052	0.129388315999052
+12435	6477	2460	0.143087746743813	0.143087746743813
+12436	2460	5904	0.206205054401277	0.206205054401277
+12437	5904	8702	0.200106396563715	0.200106396563715
+12438	8702	789	0.199795050779324	0.199795050779324
+12439	789	3581	0.193812626433148	0.193812626433148
+12440	3581	4353	0.211337121932246	0.211337121932246
+12441	4353	8703	0.201766897339093	0.201766897339093
+12442	8703	3056	0.204698740459713	0.204698740459713
+12443	3056	8704	0.1838941823989	0.1838941823989
+12446	902	8706	0.131578356152921	0.131578356152921
+12447	8706	2807	0.139128342169529	0.139128342169529
+12448	2807	5273	0.132055095159837	0.132055095159837
+12449	5273	6913	0.122503450982406	0.122503450982406
+12450	6913	6362	0.41302368771275	0.41302368771275
+12452	3076	3191	0.200008210348418	0.200008210348418
+12454	6107	1897	0.202849718138185	0.202849718138185
+12455	1897	7235	0.199081659570441	0.199081659570441
+12456	7235	3245	0.204781971579143	0.204781971579143
+12457	3245	8707	0.0557878826660101	0.0557878826660101
+12458	8707	7285	0.154953879613548	0.154953879613548
+12459	7285	28	0.190200511167853	0.190200511167853
+12461	7212	8708	0.0837159569795295	0.0837159569795295
+12463	8708	6525	0.0119790128871836	0.0119790128871836
+12464	6525	1779	0.0293911622529401	0.0293911622529401
+12465	1779	4372	0.0502766443311638	0.0502766443311638
+12466	4372	8710	0.0490277911002061	0.0490277911002061
+12467	8710	4684	0.0539189737855212	0.0539189737855212
+12468	4684	1527	0.0474102490920647	0.0474102490920647
+12469	1527	5107	0.0489757310519715	0.0489757310519715
+19288	10468	10469	0.0662296445612727	0.0662296445612727
+12470	5107	8711	0.0509607682871969	0.0509607682871969
+12471	8711	5064	0.0518326919728752	0.0518326919728752
+12472	5064	1746	0.0537415293364607	0.0537415293364607
+12473	1746	5607	0.04913949394522	0.04913949394522
+12474	5607	6637	0.0470345659561698	0.0470345659561698
+12475	6637	5450	0.0502526613335692	0.0502526613335692
+12477	5427	5408	0.0488836182047643	0.0488836182047643
+12478	5408	7399	0.051895578159039	0.051895578159039
+12479	7399	8712	0.1038123024378	0.1038123024378
+12481	8713	8714	0.0490473159959526	0.0490473159959526
+12482	8714	7277	0.0483828604327117	0.0483828604327117
+12483	7277	3483	0.0998765627131917	0.0998765627131917
+12484	3483	8715	0.048840271287456	0.048840271287456
+12485	8715	6079	0.0473684752554207	0.0473684752554207
+12486	6079	8716	0.055154161978582	0.055154161978582
+12487	8716	3697	0.0479069878085689	0.0479069878085689
+12488	3697	5685	0.0473941467783467	0.0473941467783467
+12489	5685	4571	0.0495504189878239	0.0495504189878239
+12490	4571	8717	0.0532110753130406	0.0532110753130406
+12495	8720	6626	0.0151124856958777	0.0151124856958777
+12496	6626	7211	0.0534737559078532	0.0534737559078532
+12497	7211	5824	0.205145340397742	0.205145340397742
+12498	5824	7729	0.196126806182622	0.196126806182622
+12499	7729	8721	1.41081273670029	1.41081273670029
+12500	8722	6630	0.00966193494482075	0.00966193494482075
+12501	6630	5826	0.0378008975972725	0.0378008975972725
+12502	5826	7731	0.193712690967488	0.193712690967488
+12503	7731	8723	1.80961969384046	1.80961969384046
+12504	1781	8722	0.107247989428491	0.107247989428491
+12506	7401	6529	0.108235119976502	0.108235119976502
+12508	4596	8724	0.16807497837827	0.16807497837827
+12509	8724	8725	0.178846116420602	0.178846116420602
+12510	8725	678	0.00426139259412424	0.00426139259412424
+12511	678	8726	0.00479379013962442	0.00479379013962442
+12512	8726	8727	0.179790579190484	0.179790579190484
+12513	8727	5480	0.174201148052584	0.174201148052584
+12514	5480	8728	0.175423920421782	0.175423920421782
+12515	8728	4882	0.196140148835561	0.196140148835561
+12516	4882	2250	0.176600887954475	0.176600887954475
+12517	2250	5916	0.3321793201224	0.3321793201224
+12519	3788	8729	0.199339438501115	0.199339438501115
+12521	1189	8730	0.167786544262905	0.167786544262905
+12522	8730	7154	0.107569635985836	0.107569635985836
+12524	8731	8732	0.130443287352145	0.130443287352145
+12526	8732	6531	0.0215721025681021	0.0215721025681021
+12527	6531	8733	0.0174468386055745	0.0174468386055745
+12551	8748	6518	0.0472889047630053	0.0472889047630053
+12552	6518	8749	0.0506856290604236	0.0506856290604236
+12548	4570	8746	0.0496686599585209	0.0496686599585209
+12549	8746	8747	0.0568130428191116	0.0568130428191116
+12528	8733	8734	4.18362578562758	4.18362578562758
+12529	6533	8735	0.0310320915845362	0.0310320915845362
+12530	8735	8733	0.0639013406897381	0.0639013406897381
+12531	8733	8736	0.0575832242503326	0.0575832242503326
+12532	8736	1744	0.0585281295770588	0.0585281295770588
+12533	1744	8737	0.0551795735412136	0.0551795735412136
+12534	8737	6634	0.0667321861738512	0.0667321861738512
+12535	6634	8738	1.14684827666039	1.14684827666039
+12536	8739	8740	0.050189520794265	0.050189520794265
+12537	8740	8741	0.0520205890853532	0.0520205890853532
+12538	8741	8742	0.0975475062746334	0.0975475062746334
+12539	8742	8743	0.0478496643069703	0.0478496643069703
+12540	8743	7276	0.0507419704012955	0.0507419704012955
+12541	7276	3482	0.0993982386954757	0.0993982386954757
+12542	3482	8744	0.05053480573854	0.05053480573854
+12543	8744	6078	0.0468212480872111	0.0468212480872111
+12544	6078	8745	0.052325451958986	0.052325451958986
+12545	8745	3696	0.0475592999209775	0.0475592999209775
+12546	3696	5684	0.0505577280347845	0.0505577280347845
+12547	5684	4570	0.0496336429817659	0.0496336429817659
+12550	8747	8748	0.0555882070947718	0.0555882070947718
+12553	8749	6161	0.0483586179330098	0.0483586179330098
+12554	6161	8750	0.0494030122591725	0.0494030122591725
+12555	8750	2739	0.0483430371417139	0.0483430371417139
+12556	2739	8751	0.0499840332207257	0.0499840332207257
+12557	8751	5230	0.0498899174438866	0.0498899174438866
+12558	5230	8752	0.0487864097624457	0.0487864097624457
+12559	8752	3172	0.0492052393668883	0.0492052393668883
+12560	3172	8753	0.048649307652154	0.048649307652154
+12561	8753	4997	0.0504970791491002	0.0504970791491002
+12562	4997	729	0.0994774482962559	0.0994774482962559
+12564	7060	7316	0.100261995636978	0.100261995636978
+12565	7316	4587	0.101339695102535	0.101339695102535
+12566	4587	8033	0.0978749879893347	0.0978749879893347
+12567	8033	6373	0.096169791555938	0.096169791555938
+12568	6373	8754	0.0556932821262755	0.0556932821262755
+12569	8754	4827	0.0506856253200211	0.0506856253200211
+12570	4827	8755	0.0976778629222165	0.0976778629222165
+12572	8756	8757	0.0483546146560771	0.0483546146560771
+12573	8757	8758	0.00678547758181753	0.00678547758181753
+12574	8758	8759	0.0425788070077018	0.0425788070077018
+12577	2375	8761	0.0800348658330501	0.0800348658330501
+12579	8761	2381	0.0565526295759939	0.0565526295759939
+12580	2381	2378	0.0732152007668199	0.0732152007668199
+12581	2378	2379	0.0407086995566738	0.0407086995566738
+12582	2379	2383	0.00264328007897714	0.00264328007897714
+12583	2383	2571	0.0689488793496812	0.0689488793496812
+12585	8761	2375	0.0800348658330501	0.0800348658330501
+12587	1510	7932	0.0417550445525859	0.0417550445525859
+12589	8764	4921	0.0107315298188712	0.0107315298188712
+12590	4921	8062	0.0635329705608418	0.0635329705608418
+12591	8062	6584	0.176700679215808	0.176700679215808
+12592	6584	5366	0.199428899537142	0.199428899537142
+12593	5366	7124	0.156701102941306	0.156701102941306
+12594	7124	612	0.178308153840751	0.178308153840751
+12595	612	1943	0.177718886558766	0.177718886558766
+12596	1943	8765	0.0553792982616949	0.0553792982616949
+12597	8765	8767	0.0568805264393287	0.0568805264393287
+12625	8778	8779	0.0386703080825578	0.0386703080825578
+12598	8767	8768	0.0596299154046411	0.0596299154046411
+12600	8217	8764	0.0348766827140038	0.0348766827140038
+12602	8769	7960	0.0121246465842421	0.0121246465842421
+12636	8782	8776	0.0415201856091735	0.0415201856091735
+12603	7960	7858	0.191569398536593	0.191569398536593
+12604	7858	384	0.0511824976047815	0.0511824976047815
+12606	4685	296	0.0500706281631231	0.0500706281631231
+12607	296	4955	0.0491810974692235	0.0491810974692235
+12608	4955	7223	0.104958162725722	0.104958162725722
+12611	8773	8774	0.043865298365945	0.043865298365945
+12612	8774	6643	0.0451313849693394	0.0451313849693394
+12613	6643	8218	0.0697309457073312	0.0697309457073312
+12614	8218	3952	0.0651671851260823	0.0651671851260823
+12616	1623	8769	0.0363096662742893	0.0363096662742893
+12618	5097	8775	0.0318529970242771	0.0318529970242771
+12622	8776	8777	0.018725243223035	0.018725243223035
+12623	8777	6243	0.106972614023441	0.106972614023441
+12624	6243	8778	0.0466697025677041	0.0466697025677041
+12626	8779	5192	0.0833353912042221	0.0833353912042221
+12627	5192	8780	0.0302234211776424	0.0302234211776424
+12628	8780	8781	0.0269541929474085	0.0269541929474085
+12629	8781	2610	0.119870657472311	0.119870657472311
+12630	2610	1838	0.176410752987704	0.176410752987704
+12631	1838	2360	0.17767880886817	0.17767880886817
+12633	3710	4430	0.0984187629622127	0.0984187629622127
+12634	4430	5171	0.100485171973402	0.100485171973402
+12638	968	8783	0.0450647850917565	0.0450647850917565
+12640	8783	6332	0.0179790401179982	0.0179790401179982
+12641	6332	8784	0.166916939377104	0.166916939377104
+12642	8784	8785	0.0824631793427953	0.0824631793427953
+12643	8785	8786	0.100743867095121	0.100743867095121
+12644	8786	3809	0.198861011407653	0.198861011407653
+12645	3809	5921	0.152448419282946	0.152448419282946
+12647	920	2206	0.198794444530698	0.198794444530698
+12648	2206	4855	0.161210664735901	0.161210664735901
+12649	4855	8787	0.176180330331867	0.176180330331867
+12650	8787	5459	0.173977209442215	0.173977209442215
+12651	5459	8788	0.179581076943561	0.179581076943561
+12652	8788	653	0.182661218967331	0.182661218967331
+12653	653	8789	0.175533060842227	0.175533060842227
+12654	8789	4615	0.178562453757686	0.178562453757686
+12655	4615	6485	0.147124798702961	0.147124798702961
+12656	6485	3681	0.150536039008347	0.150536039008347
+12658	5282	8790	0.0413354062568629	0.0413354062568629
+12660	8790	6331	0.0121138578035044	0.0121138578035044
+12662	6548	8791	0.16625102712937	0.16625102712937
+12663	8791	8792	0.184061439099574	0.184061439099574
+12664	8792	3808	0.198594245045878	0.198594245045878
+12665	3808	5923	0.153339826215406	0.153339826215406
+12666	5923	922	0.17696116360303	0.17696116360303
+12667	922	2208	0.186196659484346	0.186196659484346
+12668	2208	4857	0.160795645903838	0.160795645903838
+12669	4857	8793	0.191420788288479	0.191420788288479
+12671	5460	8794	0.176401987583553	0.176401987583553
+12672	8794	8795	0.177191749793072	0.177191749793072
+12673	8795	654	0.00549383449703672	0.00549383449703672
+12674	654	8796	0.178534682523657	0.178534682523657
+12675	8796	4614	0.177531607780329	0.177531607780329
+12676	4614	6486	0.147678461213278	0.147678461213278
+12677	6486	3679	0.150313310591357	0.150313310591357
+12681	8798	8799	0.123466110327723	0.123466110327723
+12682	8799	3186	0.00950854696516887	0.00950854696516887
+12683	3186	8800	0.0308360436433676	0.0308360436433676
+12685	8801	8802	0.231947805663281	0.231947805663281
+12686	8802	8803	0.0199646364044365	0.0199646364044365
+12687	8803	5017	0.0091876036672495	0.0091876036672495
+12692	7064	8808	0.0247148912105672	0.0247148912105672
+12693	8808	8685	0.0234885972598816	0.0234885972598816
+20809	8326	10950	0.0125120772932362	0.0125120772932362
+16680	9982	9983	0.0455494891280306	0.0455494891280306
+15872	7130	8879	0.124695897236049	0.124695897236049
+12694	8685	8023	0.100302779247875	0.100302779247875
+12696	8809	8685	0.057365793634115	0.057365793634115
+12699	8810	4109	0.100464246278784	0.100464246278784
+12700	4109	2643	0.0901887127804005	0.0901887127804005
+12702	8805	7976	0.102773783270916	0.102773783270916
+12703	7976	7318	0.104083044705694	0.104083044705694
+12704	7318	8803	0.278830952538266	0.278830952538266
+12706	8811	8812	0.108086464170563	0.108086464170563
+12707	8812	6861	0.0114665228848291	0.0114665228848291
+12709	5165	8809	0.109306863073043	0.109306863073043
+12710	8809	8808	0.0510932247106912	0.0510932247106912
+12712	8798	6379	0.100799788599422	0.100799788599422
+12713	6379	6099	0.0584802680423258	0.0584802680423258
+12714	6099	8202	0.382882462386682	0.382882462386682
+12716	8813	8173	0.0533183303572635	0.0533183303572635
+12718	8814	8815	0.0594781662619651	0.0594781662619651
+12720	8815	3633	0.0139674412080793	0.0139674412080793
+14286	6672	3115	0.0991095918198707	0.0991095918198707
+15288	8812	7065	0.0171061341992079	0.0171061341992079
+12722	3295	8191	0.195769878320479	0.195769878320479
+12723	8191	103	0.207801078913796	0.207801078913796
+12724	103	3505	0.201240848446412	0.201240848446412
+12725	3505	8816	0.20140010471513	0.20140010471513
+12726	8816	8817	0.0467910785706761	0.0467910785706761
+12727	8817	8759	0.155886707244551	0.155886707244551
+12728	8759	8818	0.0209382564173288	0.0209382564173288
+12729	8818	8819	0.0390294530141924	0.0390294530141924
+12730	8819	8820	0.0609459777309488	0.0609459777309488
+12732	7196	5844	0.199996639851393	0.199996639851393
+12733	5844	7747	0.201963345264684	0.201963345264684
+12734	7747	8821	0.660668042362938	0.660668042362938
+12737	6675	8823	0.018377691001392	0.018377691001392
+12738	8823	3121	0.0817086617793047	0.0817086617793047
+12739	3121	3122	0.0189462201356829	0.0189462201356829
+12740	3122	6294	0.0736313115214917	0.0736313115214917
+12741	6294	6295	0.0205616464638412	0.0205616464638412
+12742	6295	6620	0.098958190214706	0.098958190214706
+14308	9323	2191	0.217246414275379	0.217246414275379
+12743	6620	7343	0.0741923893812443	0.0741923893812443
+12744	7343	2845	0.101548527960204	0.101548527960204
+12745	2845	3494	0.101534987318255	0.101534987318255
+12746	3494	5350	0.0785982086314387	0.0785982086314387
+12748	4220	2948	0.0852112039835386	0.0852112039835386
+12749	2948	2949	0.056569943078372	0.056569943078372
+12750	2949	6813	0.0330539311277449	0.0330539311277449
+12751	6813	6810	0.0675878090482117	0.0675878090482117
+12752	6810	1814	0.0227606927419569	0.0227606927419569
+12753	1814	8824	0.984700828985706	0.984700828985706
+12754	8823	8825	0.40169861106651	0.40169861106651
+12779	3798	5937	0.1524274277381	0.1524274277381
+12755	8826	7748	0.668566967249301	0.668566967249301
+12756	7748	5845	0.201518653480334	0.201518653480334
+12757	5845	7197	0.200485803128442	0.200485803128442
+12758	7197	8827	0.180703533412633	0.180703533412633
+12759	8827	8760	0.0207611083367854	0.0207611083367854
+12760	8760	8828	0.203176551906279	0.203176551906279
+12761	8828	3506	0.200871002946695	0.200871002946695
+12763	8170	8192	0.20854015704238	0.20854015704238
+12764	8192	3296	0.195770030101267	0.195770030101267
+12765	3296	8183	0.100143064441761	0.100143064441761
+12766	8183	8188	0.148673984504934	0.148673984504934
+12767	8188	8813	0.0159417159428289	0.0159417159428289
+12769	2918	8829	0.0404869067666165	0.0404869067666165
+12771	8829	6328	0.00908621391699812	0.00908621391699812
+12772	6328	8830	0.0795394987314785	0.0795394987314785
+12774	4166	4751	0.202375182887314	0.202375182887314
+12775	4751	6542	0.197696304569089	0.197696304569089
+12776	6542	8831	0.204678217467742	0.204678217467742
+12778	8832	3798	0.199708223967288	0.199708223967288
+12780	5937	938	0.177624298285183	0.177624298285183
+12781	938	2222	0.185255991502605	0.185255991502605
+12782	2222	4872	0.159853083829866	0.159853083829866
+12783	4872	8834	0.191323978817286	0.191323978817286
+12787	28	8836	0.0411233276076822	0.0411233276076822
+15407	8527	8524	0.00632598868026626	0.00632598868026626
+16685	9986	9987	0.0852803879953952	0.0852803879953952
+12788	8830	4165	0.0810572303723974	0.0810572303723974
+12790	4096	6041	0.191845009601904	0.191845009601904
+12791	6041	8837	0.201496335450174	0.201496335450174
+12792	8837	8838	0.406062586796109	0.406062586796109
+12793	4086	6031	0.181162285735164	0.181162285735164
+12794	6031	6032	0.0171385466290399	0.0171385466290399
+12795	6032	8839	0.201396970557967	0.201396970557967
+12796	8839	2539	0.0036249646793062	0.0036249646793062
+12797	2539	7937	0.222367701142404	0.222367701142404
+12798	7937	8840	0.179081080346528	0.179081080346528
+12799	8520	8841	0.0687184646666591	0.0687184646666591
+12801	8841	298	0.017862044588972	0.017862044588972
+12802	298	4082	0.0176901086131869	0.0176901086131869
+12805	2560	6714	0.0892568890732451	0.0892568890732451
+12806	6714	6633	0.0879831056932755	0.0879831056932755
+12807	6633	8844	0.0442062339102578	0.0442062339102578
+12808	8844	7935	0.0446455487862746	0.0446455487862746
+12809	7935	8845	0.265612509858697	0.265612509858697
+12817	297	299	0.88607517832177	0.88607517832177
+12823	493	589	0.268896577305787	0.268896577305787
+12824	589	8850	0.33804717039653	0.33804717039653
+12826	8589	8851	0.042366080089372	0.042366080089372
+12828	8851	4936	0.0170501490589131	0.0170501490589131
+12829	4936	8509	0.143621366769105	0.143621366769105
+12831	8852	8853	0.0917176896741063	0.0917176896741063
+12832	8853	7564	0.105551904949528	0.105551904949528
+12833	7564	6182	0.105801475446669	0.105801475446669
+12834	6182	8854	0.10583574357693	0.10583574357693
+12835	8854	8855	0.00547189672663909	0.00547189672663909
+18650	1854	2593	0.177389867684494	0.177389867684494
+12837	8856	8857	0.0555847646631402	0.0555847646631402
+12838	8857	8858	0.0519115005666898	0.0519115005666898
+12839	8858	8636	0.0515833043565609	0.0515833043565609
+12840	8636	8859	0.0207966249820583	0.0207966249820583
+12844	8860	1198	0.169110109980516	0.169110109980516
+12845	1198	8861	0.0226617213022113	0.0226617213022113
+12847	8862	1200	0.170240075619945	0.170240075619945
+12848	1200	8863	0.0219879091267488	0.0219879091267488
+12850	8864	7983	0.0505037947042799	0.0505037947042799
+12851	7983	2054	0.099824917404873	0.099824917404873
+12852	2054	2660	0.101497408945607	0.101497408945607
+12853	2660	4133	0.0961563998269834	0.0961563998269834
+12855	6696	8019	0.0939673290333738	0.0939673290333738
+12856	8019	7683	0.0941529054095407	0.0941529054095407
+12857	7683	3457	0.0935091254143676	0.0935091254143676
+12858	3457	8865	0.0461569199164165	0.0461569199164165
+12859	8865	6019	0.0480340625550536	0.0480340625550536
+12860	6019	8866	0.0464697146879775	0.0464697146879775
+12861	8866	8867	0.048094543326443	0.048094543326443
+12862	8867	8868	0.0461790217746061	0.0461790217746061
+12863	8868	856	0.0449646613539359	0.0449646613539359
+12864	856	451	0.0470078764226648	0.0470078764226648
+12865	451	7105	0.0432708485882178	0.0432708485882178
+12866	7105	8869	0.0939007256947679	0.0939007256947679
+12868	8870	1196	0.168829878028139	0.168829878028139
+12869	1196	8871	0.021661446985008	0.021661446985008
+12871	4760	5407	0.0842978699895538	0.0842978699895538
+12873	4755	6546	0.199683159238461	0.199683159238461
+12874	6546	8872	0.20436535055464	0.20436535055464
+12875	8872	8873	0.188956325706579	0.188956325706579
+12876	8873	3792	0.199291485976659	0.199291485976659
+17796	10179	9318	0.114755253361823	0.114755253361823
+12877	3792	8561	0.13059037096191	0.13059037096191
+12879	5926	924	0.178374370928188	0.178374370928188
+12880	924	2210	0.187308783265319	0.187308783265319
+12881	2210	4859	0.159743099068053	0.159743099068053
+12882	4859	8874	0.192629276936053	0.192629276936053
+12883	8874	5461	0.172330101173688	0.172330101173688
+12884	5461	8875	0.177416584260724	0.177416584260724
+12885	8875	8876	0.176433616828762	0.176433616828762
+12887	655	8877	0.00413648661723727	0.00413648661723727
+12888	8877	8878	0.173943602457692	0.173943602457692
+12889	8878	4613	0.177428437243737	0.177428437243737
+12890	4613	6487	0.148280300321704	0.148280300321704
+12891	6487	3678	0.149828166583799	0.149828166583799
+12893	5929	926	0.177267011666895	0.177267011666895
+12894	926	2211	0.187019197552967	0.187019197552967
+12895	2211	4861	0.161667462022208	0.161667462022208
+12896	4861	8880	0.191414125057248	0.191414125057248
+12897	8880	5463	0.170299846109482	0.170299846109482
+12898	5463	8881	0.177990586801656	0.177990586801656
+12899	8881	8885	0.177780189019753	0.177780189019753
+12900	8885	659	0.00646246375156384	0.00646246375156384
+12901	659	8886	0.177011471342036	0.177011471342036
+12902	8886	4612	0.177005843155015	0.177005843155015
+12903	4612	6488	0.148001366258512	0.148001366258512
+12904	6488	3676	0.150380555650091	0.150380555650091
+12906	1621	8061	0.152748999526467	0.152748999526467
+12907	8061	6583	0.177490187745079	0.177490187745079
+12908	6583	5365	0.198863610387104	0.198863610387104
+12909	5365	7123	0.157919035747255	0.157919035747255
+12911	8092	8887	0.220134314041521	0.220134314041521
+12913	8887	8888	0.191841135190913	0.191841135190913
+12914	8888	967	0.0966749413586244	0.0966749413586244
+12916	5281	4980	0.256490434532314	0.256490434532314
+12917	4980	4148	0.0387618071437701	0.0387618071437701
+12918	4148	8125	0.0859291558348279	0.0859291558348279
+12919	8125	2368	0.179404398665568	0.179404398665568
+12920	2368	996	0.270881468937897	0.270881468937897
+12921	996	2914	0.0678890736084051	0.0678890736084051
+12922	2914	2917	0.0548386478267142	0.0548386478267142
+12927	8894	8895	0.135035418511701	0.135035418511701
+12929	8896	3167	0.11730986547504	0.11730986547504
+12932	8898	8899	0.10458723954588	0.10458723954588
+12971	8901	8709	0.120698197647431	0.120698197647431
+12978	8902	8903	0.00973401952734473	0.00973401952734473
+12979	8903	7902	0.144472845078957	0.144472845078957
+12980	7902	1225	0.0118169371778595	0.0118169371778595
+12982	8904	8902	0.0775029978833242	0.0775029978833242
+12984	8905	8906	0.061203121949655	0.061203121949655
+12986	8906	8907	0.00497763084611722	0.00497763084611722
+12987	8907	121	0.154154812192847	0.154154812192847
+12988	121	8904	0.0610449885391548	0.0610449885391548
+12990	8325	8908	0.013157216132198	0.013157216132198
+12992	306	8909	0.108316294946991	0.108316294946991
+12994	8328	8910	0.00899626589788406	0.00899626589788406
+12995	8910	8338	0.040824296618527	0.040824296618527
+12996	8338	6084	0.0494050923488005	0.0494050923488005
+12997	6084	8909	0.0118673496888767	0.0118673496888767
+12998	8909	743	0.0430251864291126	0.0430251864291126
+12999	743	4526	0.0484294102772242	0.0484294102772242
+13000	4526	607	0.0194349740430761	0.0194349740430761
+13001	607	8355	0.0344276469779443	0.0344276469779443
+13002	8355	3974	0.0402278696203799	0.0402278696203799
+13004	8911	2658	0.732133935065161	0.732133935065161
+13012	8915	8916	0.408272009335824	0.408272009335824
+13090	1914	6117	0.200190217467506	0.200190217467506
+13018	8922	8923	0.320042964228513	0.320042964228513
+13022	8265	8926	0.339879399665874	0.339879399665874
+13027	4265	279	0.0652387434169228	0.0652387434169228
+13029	494	8927	0.349190481522976	0.349190481522976
+13040	8104	8678	0.200106495095782	0.200106495095782
+13042	8932	8933	0.108557788789167	0.108557788789167
+13044	8677	8932	0.0500470435519063	0.0500470435519063
+13046	8933	6917	0.0967430583925215	0.0967430583925215
+13050	8936	8937	0.198244621757318	0.198244621757318
+13084	8956	8756	0.203550658006643	0.203550658006643
+13052	8938	8939	0.428260593428089	0.428260593428089
+13053	8939	8425	0.201936465504692	0.201936465504692
+13055	8939	8941	0.203022755730075	0.203022755730075
+13057	8931	8942	0.152950212219782	0.152950212219782
+13059	8943	8931	0.0786273196751871	0.0786273196751871
+19033	256	10159	0.12356745711476	0.12356745711476
+13063	8945	8946	0.104572805049419	0.104572805049419
+13067	8949	432	0.545131832456565	0.545131832456565
+13068	432	8950	0.686001065667251	0.686001065667251
+13070	8951	8949	0.0797207044078447	0.0797207044078447
+13074	8952	8953	0.195031053860659	0.195031053860659
+13076	99	3503	0.199966819322067	0.199966819322067
+13077	3503	8954	0.201518791118212	0.201518791118212
+13078	8954	8755	0.203764704692679	0.203764704692679
+13079	8755	7193	0.202942329745549	0.202942329745549
+13080	7193	7746	0.401362186865274	0.401362186865274
+13081	7746	8955	0.585986287872625	0.585986287872625
+13082	101	3504	0.19989908085758	0.19989908085758
+13083	3504	8956	0.200106829133291	0.200106829133291
+13085	8756	7194	0.202942348322105	0.202942348322105
+13087	1087	8957	0.00893112007684357	0.00893112007684357
+13088	8957	1082	0.038563824899443	0.038563824899443
+13091	6117	3204	0.200871492111254	0.200871492111254
+13092	3204	3094	0.202111971416858	0.202111971416858
+13093	3094	1749	0.143511782143127	0.143511782143127
+13096	8925	8917	0.011822810789309	0.011822810789309
+13098	8959	602	0.0536722144567161	0.0536722144567161
+13099	602	8962	0.0387695912622113	0.0387695912622113
+13100	8962	8948	0.175808350127672	0.175808350127672
+13101	8948	428	0.00954052470619231	0.00954052470619231
+13102	428	7933	0.160696268160677	0.160696268160677
+13104	8918	8924	0.012486102804665	0.012486102804665
+13105	8924	2420	0.0580706601904793	0.0580706601904793
+13108	8964	8965	0.125224497044451	0.125224497044451
+13110	8965	2192	0.356365737888712	0.356365737888712
+13135	4848	1531	0.0955193854848385	0.0955193854848385
+13111	2192	1611	0.254354724276405	0.254354724276405
+13112	1611	8852	0.0391111849621532	0.0391111849621532
+13114	8966	7934	0.183569029359489	0.183569029359489
+13116	2045	8967	0.0657780447895409	0.0657780447895409
+13119	1742	5213	0.229560371023495	0.229560371023495
+13120	5213	640	0.0648517231107158	0.0648517231107158
+14585	9392	2833	0.210508246764738	0.210508246764738
+13122	7933	8963	0.200908071446329	0.200908071446329
+13124	7934	8969	0.0906737639231845	0.0906737639231845
+13125	8969	429	0.0698124130115735	0.0698124130115735
+13126	429	8947	0.0102744112219317	0.0102744112219317
+13127	8947	8970	0.0586653743681201	0.0586653743681201
+13128	8970	601	0.102766368620144	0.102766368620144
+13157	8989	1285	0.118339572755071	0.118339572755071
+13129	601	8973	0.0999362244261846	0.0999362244261846
+13130	8973	8918	0.0326860113699392	0.0326860113699392
+13132	2193	8237	0.11471912407663	0.11471912407663
+13133	8237	8974	0.0761048371438857	0.0761048371438857
+13443	9077	4179	0.169049790102584	0.169049790102584
+13137	8974	4844	0.0408566656014099	0.0408566656014099
+13139	8975	8915	0.161267451240187	0.161267451240187
+13164	8976	8977	0.00802909585520281	0.00802909585520281
+13140	8915	8979	0.511309857046827	0.511309857046827
+13142	8950	8980	0.295444981113679	0.295444981113679
+13144	8981	8982	0.155762064195337	0.155762064195337
+14605	9398	8233	0.0099630690934953	0.0099630690934953
+13146	8983	8984	0.153794064127447	0.153794064127447
+13148	8985	8986	0.0143228031361841	0.0143228031361841
+13149	8986	8496	0.0694983470285585	0.0694983470285585
+13150	8496	398	0.120004619664384	0.120004619664384
+13151	398	8987	0.0577858842103034	0.0577858842103034
+13152	8987	637	0.099744132155093	0.099744132155093
+13153	637	6436	0.0832880379381437	0.0832880379381437
+13154	6436	21	0.0571009168797096	0.0571009168797096
+13155	21	8988	0.0791847444931621	0.0791847444931621
+13158	1285	2962	0.0719310735484076	0.0719310735484076
+13159	2962	8991	0.0186493582069224	0.0186493582069224
+13160	8991	8992	0.187353348628226	0.187353348628226
+13161	8992	8351	0.0990161897507714	0.0990161897507714
+13162	8351	8993	0.00963797122366648	0.00963797122366648
+13163	8993	8976	0.0698946708143702	0.0698946708143702
+13165	8977	8994	0.012930744273385	0.012930744273385
+13167	8451	8985	0.0708838190049254	0.0708838190049254
+13169	2877	7692	0.030123526159425	0.030123526159425
+13173	8996	8143	0.201053290850133	0.201053290850133
+13174	8143	8997	0.150730663136006	0.150730663136006
+13176	2794	5261	0.132082373792006	0.132082373792006
+13178	5853	1338	0.200417735783644	0.200417735783644
+13179	1338	8998	0.206394741682614	0.206394741682614
+13181	8998	4698	0.201909087963534	0.201909087963534
+13182	4698	8999	0.201909088033291	0.201909088033291
+13183	8999	9000	0.201186325895839	0.201186325895839
+13184	9000	6822	0.198983321230549	0.198983321230549
+13185	6822	770	0.132908321867952	0.132908321867952
+13187	1638	8999	0.102808714105755	0.102808714105755
+13188	8999	4216	0.0999229348013983	0.0999229348013983
+13189	4216	8095	0.0991443160837587	0.0991443160837587
+13190	8095	196	0.0991307294664674	0.0991307294664674
+13191	196	2925	0.0983869258474561	0.0983869258474561
+13193	5307	1463	0.0991311193927209	0.0991311193927209
+13194	1463	5437	0.103145293575034	0.103145293575034
+13196	1641	9000	0.10355145810147	0.10355145810147
+13197	9000	4217	0.0998824134603326	0.0998824134603326
+13198	4217	8096	0.0998581597847897	0.0998581597847897
+13199	8096	197	0.0983977211710877	0.0983977211710877
+13200	197	2926	0.0983895151379973	0.0983895151379973
+13201	2926	5308	0.0991337377550934	0.0991337377550934
+13202	5308	1464	0.0991224618714554	0.0991224618714554
+13203	1464	5440	0.103536651588581	0.103536651588581
+13205	201	2928	0.102050045456718	0.102050045456718
+13206	2928	5310	0.0991386153517731	0.0991386153517731
+13207	5310	1466	0.099890094841465	0.099890094841465
+13208	1466	5445	0.102288602469368	0.102288602469368
+13209	5445	9003	0.20221504164542	0.20221504164542
+13210	9003	7922	0.00954769987851559	0.00954769987851559
+13211	7922	4407	0.193513161405962	0.193513161405962
+13212	4407	9004	0.22689488985342	0.22689488985342
+13213	9004	4314	0.17109885981524	0.17109885981524
+13214	4314	4501	0.0954627697803603	0.0954627697803603
+13215	4501	7813	0.103538745444113	0.103538745444113
+13216	7813	5077	0.099141030065187	0.099141030065187
+13217	5077	8012	0.101361319209047	0.101361319209047
+13218	8012	6831	0.0984053279969797	0.0984053279969797
+13219	6831	6983	0.0507122349978986	0.0507122349978986
+13220	6983	6974	0.0492014587539049	0.0492014587539049
+13221	6974	7944	0.0815359432635548	0.0815359432635548
+13222	7944	6363	0.117492028011777	0.117492028011777
+13223	6363	6659	0.128518000967454	0.128518000967454
+13224	6659	5340	0.248378842685992	0.248378842685992
+13225	5340	9007	0.436836188101395	0.436836188101395
+13226	5447	9008	0.0954198714626642	0.0954198714626642
+13227	9008	5974	0.0150605452925665	0.0150605452925665
+13229	5443	7920	0.209496436784339	0.209496436784339
+13230	7920	4409	0.196049081122935	0.196049081122935
+13232	9009	4311	0.174051720567411	0.174051720567411
+13234	5439	7917	0.209760382857472	0.209760382857472
+13235	7917	4414	0.1967831025196	0.1967831025196
+13236	4414	9010	0.224679521512281	0.224679521512281
+13239	5435	9011	0.112718312199178	0.112718312199178
+13240	9011	7916	0.0954502097686848	0.0954502097686848
+13242	4418	9012	0.223944278058007	0.223944278058007
+13243	9012	9013	0.163728342208645	0.163728342208645
+13244	9014	9011	0.193580953488763	0.193580953488763
+13272	5331	5695	0.176288296878523	0.176288296878523
+13246	1844	2578	0.172509377214494	0.172509377214494
+13248	6839	8008	0.0576758204139334	0.0576758204139334
+13250	8009	6981	0.144663680916955	0.144663680916955
+13252	9015	6845	0.0843525238323184	0.0843525238323184
+13253	6845	4689	0.0881118827688874	0.0881118827688874
+13254	4689	4697	0.0264412698588759	0.0264412698588759
+13255	4697	7466	0.0631647371963507	0.0631647371963507
+13256	7466	9016	0.0866600751763154	0.0866600751763154
+13257	9016	7453	0.0117533037462049	0.0117533037462049
+13258	7453	2091	0.0764142388554106	0.0764142388554106
+13259	2091	5691	0.0521281816109867	0.0521281816109867
+13260	5691	5680	0.0375154291161679	0.0375154291161679
+13261	5680	6316	0.0896056080016293	0.0896056080016293
+13262	6316	4963	0.0888719448734625	0.0888719448734625
+13264	6826	5338	0.0370211552910964	0.0370211552910964
+13266	9016	9017	0.044781886028432	0.044781886028432
+13267	6842	4692	0.112329114895897	0.112329114895897
+13268	4692	5332	0.162956489748023	0.162956489748023
+13270	6840	4691	0.113830246405759	0.113830246405759
+13271	4691	5331	0.0755697574983074	0.0755697574983074
+13274	5694	6319	0.174033677833605	0.174033677833605
+13275	6319	9018	0.182109806928741	0.182109806928741
+13277	4310	7811	0.201267372547373	0.201267372547373
+13278	7811	8010	0.202389778156291	0.202389778156291
+13281	7812	5076	0.100599027218817	0.100599027218817
+13282	5076	8011	0.100623102109681	0.100623102109681
+13283	8011	6982	0.147599810375252	0.147599810375252
+13284	6982	7943	0.131458423393202	0.131458423393202
+13285	7943	3300	0.0829788157522616	0.0829788157522616
+13286	3300	5727	0.0905493512456201	0.0905493512456201
+13287	5727	5339	0.0993780908642813	0.0993780908642813
+13289	9019	9020	0.473924441922911	0.473924441922911
+13290	5441	7918	0.212183518066811	0.212183518066811
+13291	7918	4411	0.196063540031297	0.196063540031297
+13292	4411	9021	0.221019052884505	0.221019052884505
+13293	9021	4282	0.176970513595043	0.176970513595043
+13295	4326	9018	0.0881179267079727	0.0881179267079727
+13296	9018	7810	0.0594732573783121	0.0594732573783121
+13297	7810	7817	0.0279069878470498	0.0279069878470498
+13298	7817	5075	0.0895984878523876	0.0895984878523876
+13299	5075	8007	0.082290456587143	0.082290456587143
+13300	8007	6839	0.0433776365307967	0.0433776365307967
+13301	6839	6979	0.105025257907842	0.105025257907842
+14885	9012	7486	0.0983880214663299	0.0983880214663299
+13303	9003	4959	0.128621575011946	0.128621575011946
+13304	4959	9022	0.0561090389096707	0.0561090389096707
+13305	9022	9023	0.219664135455113	0.219664135455113
+13307	9024	1734	0.0339090081692689	0.0339090081692689
+13308	1734	9025	0.199586826055962	0.199586826055962
+13310	162	1723	0.148414326457229	0.148414326457229
+13312	164	1724	0.19589389224901	0.19589389224901
+13313	1724	9026	0.21539258017212	0.21539258017212
+13315	166	1725	0.23958811593923	0.23958811593923
+13316	1725	9027	0.172261015966003	0.172261015966003
+13318	168	1727	0.256304305915683	0.256304305915683
+13319	1727	8081	0.0911159242290505	0.0911159242290505
+13321	9028	9029	0.0459665066705729	0.0459665066705729
+13323	9030	9031	0.204682511562437	0.204682511562437
+13324	9031	6588	0.201464690183835	0.201464690183835
+13325	6588	7109	0.201819605073549	0.201819605073549
+13326	7109	9034	0.0380490136329461	0.0380490136329461
+13327	9035	9036	0.202787954952135	0.202787954952135
+13328	9036	6589	0.200863566889439	0.200863566889439
+13329	6589	7110	0.201074334121883	0.201074334121883
+13331	9037	9031	0.102130234291417	0.102130234291417
+13332	9031	9036	0.101294841162053	0.101294841162053
+13333	9036	6128	0.0961527434944637	0.0961527434944637
+13334	6128	3971	0.0990967592348727	0.0990967592348727
+13336	7017	1406	0.0990967592360877	0.0990967592360877
+13337	1406	7390	0.0982252697684911	0.0982252697684911
+13338	7390	5217	0.100064145492252	0.100064145492252
+13340	5377	9038	0.0981767550682586	0.0981767550682586
+13342	9041	9042	0.107883824327089	0.107883824327089
+13344	9043	9044	0.111762023714712	0.111762023714712
+13346	7805	9045	0.163613143703316	0.163613143703316
+13347	4982	9046	0.151151791011959	0.151151791011959
+13348	9046	4333	0.0931833318260777	0.0931833318260777
+13349	4333	5039	0.084348128639754	0.084348128639754
+13351	2869	9047	0.0643526028257267	0.0643526028257267
+13352	2869	5283	0.189728403936972	0.189728403936972
+13354	9048	6951	0.21054969022045	0.21054969022045
+13355	6951	8084	0.110877740512572	0.110877740512572
+13356	8084	8141	0.0381711926062465	0.0381711926062465
+13357	8141	5971	0.0998550766587588	0.0998550766587588
+13358	5971	9046	0.165019740176851	0.165019740176851
+13359	9046	7804	0.203892252907028	0.203892252907028
+13360	7804	9049	0.488623985679594	0.488623985679594
+13361	577	9048	0.0924966938169246	0.0924966938169246
+13369	9054	1743	0.0233197702600261	0.0233197702600261
+13370	1743	4270	0.277932467642318	0.277932467642318
+13371	4270	310	0.0394728122356983	0.0394728122356983
+13372	310	577	0.0535172942987349	0.0535172942987349
+13374	9055	9056	0.0694449359265994	0.0694449359265994
+13375	9056	2325	0.190938968451781	0.190938968451781
+13376	2325	4279	0.147346976573119	0.147346976573119
+13378	4286	9055	0.0222915391297905	0.0222915391297905
+13380	1349	1615	0.0587612563553368	0.0587612563553368
+13381	1615	7135	0.106001129731548	0.106001129731548
+13383	5260	9057	0.107843300513683	0.107843300513683
+13384	6952	9058	0.0875153511963366	0.0875153511963366
+13386	9058	5767	0.0813716345984657	0.0813716345984657
+13387	5767	312	0.370850163813996	0.370850163813996
+13390	9048	9052	0.36535949731556	0.36535949731556
+13394	9060	8966	0.196473660543131	0.196473660543131
+13396	9061	5080	0.358471972755657	0.358471972755657
+13397	5080	9062	0.674602285535072	0.674602285535072
+13398	9062	3176	0.289568864041751	0.289568864041751
+13399	3176	527	0.133561854308294	0.133561854308294
+18560	10318	10319	0.255397297870644	0.255397297870644
+13400	527	343	0.340886700679976	0.340886700679976
+13401	343	537	0.428322489908352	0.428322489908352
+13402	537	474	0.822980283733396	0.822980283733396
+13403	474	8438	0.152037422281902	0.152037422281902
+13407	4427	9063	0.114941491865609	0.114941491865609
+13409	9063	8912	0.118971180199303	0.118971180199303
+13413	8236	125	0.0903470808346396	0.0903470808346396
+13415	9065	9066	0.0810250214751567	0.0810250214751567
+13417	9066	7279	0.116655009841785	0.116655009841785
+13419	276	9067	0.0692041764264314	0.0692041764264314
+13500	9108	9109	0.0476133357747153	0.0476133357747153
+13421	9067	2189	0.114532021981465	0.114532021981465
+13423	9068	4553	0.327000385366346	0.327000385366346
+13425	8428	9069	0.0507531626876375	0.0507531626876375
+13426	9069	9068	0.00529520129182755	0.00529520129182755
+13428	9070	9071	0.0606488327577038	0.0606488327577038
+13430	9071	9072	0.009176031077042	0.009176031077042
+13431	9072	4642	0.175105976981708	0.175105976981708
+13432	4642	7954	0.0487370399178714	0.0487370399178714
+13433	7954	4547	0.158995972178669	0.158995972178669
+13434	4547	9073	0.292416775735491	0.292416775735491
+13436	9074	9075	0.0675438073285673	0.0675438073285673
+13438	9075	409	0.0146789910973018	0.0146789910973018
+13439	409	9076	0.0166512433271008	0.0166512433271008
+13441	4838	326	0.0588523383992881	0.0588523383992881
+13449	9081	9082	0.443932946896766	0.443932946896766
+13451	1401	9083	0.0611691476045831	0.0611691476045831
+13453	9083	6208	0.0330698135159164	0.0330698135159164
+13454	6208	7645	0.178373846931983	0.178373846931983
+13455	7645	9086	0.177258150455768	0.177258150455768
+13498	9107	3956	0.0601050509878674	0.0601050509878674
+13457	9087	9088	1.73315945419765	1.73315945419765
+13458	9088	410	0.265082533171925	0.265082533171925
+13459	410	9080	0.715047499183354	0.715047499183354
+13460	9080	9089	0.194455760903183	0.194455760903183
+13462	9089	9090	0.0550554662137945	0.0550554662137945
+13464	9091	9092	0.473459458640042	0.473459458640042
+13475	9098	9032	0.307889980671666	0.307889980671666
+13479	9090	9099	0.0142223937707519	0.0142223937707519
+13481	9100	9093	0.193628424072927	0.193628424072927
+13483	9101	9100	0.0626625130905001	0.0626625130905001
+13487	9103	346	0.140681499904037	0.140681499904037
+13522	9037	8064	0.00660497864323473	0.00660497864323473
+13489	3955	9081	0.113309674251049	0.113309674251049
+13491	6240	5091	0.078819968233945	0.078819968233945
+13493	9082	9103	0.0435368095566408	0.0435368095566408
+13494	9103	347	0.193850840943334	0.193850840943334
+13495	347	404	0.026466812116417	0.026466812116417
+13496	404	9106	0.11755875033606	0.11755875033606
+13501	9109	9107	0.387486870322022	0.387486870322022
+13503	6204	9110	0.181291651373991	0.181291651373991
+13505	9111	9112	0.0153902940291749	0.0153902940291749
+13506	9112	9101	0.137209683962048	0.137209683962048
+13508	9113	9111	0.075192531928865	0.075192531928865
+15014	455	860	0.0461629164957839	0.0461629164957839
+13510	9114	9115	0.148585418330877	0.148585418330877
+13514	8582	9116	0.0682625654668292	0.0682625654668292
+13516	9116	237	0.0139438438014188	0.0139438438014188
+13517	237	7635	0.17396601741799	0.17396601741799
+13519	7602	9073	0.102023996019348	0.102023996019348
+13521	117	9037	0.091769841511351	0.091769841511351
+13523	8064	6587	0.198394254239174	0.198394254239174
+13524	6587	5384	0.100320867880051	0.100320867880051
+13525	5384	7108	0.0976180261019357	0.0976180261019357
+13526	7108	2293	0.101160557994969	0.101160557994969
+13527	2293	9117	0.0816968455207608	0.0816968455207608
+13583	9134	9079	0.189350301331036	0.189350301331036
+13533	9118	6217	0.00293554606374767	0.00293554606374767
+13534	6217	7652	0.27452915439238	0.27452915439238
+13535	7652	8071	0.262369838158816	0.262369838158816
+13536	8071	9119	0.0614463164636613	0.0614463164636613
+13538	9118	7768	0.0286215741177868	0.0286215741177868
+13540	9121	9122	0.0549317968438626	0.0549317968438626
+13541	9122	9080	0.148946547669597	0.148946547669597
+13543	9121	4555	0.0367880997749164	0.0367880997749164
+13545	216	9123	0.047880969118268	0.047880969118268
+13547	9123	447	0.333206339887537	0.333206339887537
+13549	2999	9124	0.314861669735557	0.314861669735557
+13554	579	408	0.862576839598051	0.862576839598051
+13568	9128	9129	0.16941277010836	0.16941277010836
+13570	9124	9128	0.0550015048734635	0.0550015048734635
+13578	9132	220	0.766585324287615	0.766585324287615
+13615	7609	7262	0.111890561964914	0.111890561964914
+13579	220	566	0.637748069235424	0.637748069235424
+13587	9136	9137	0.450871833260349	0.450871833260349
+13590	8684	222	0.184496371824925	0.184496371824925
+13591	222	9140	0.487607813488587	0.487607813488587
+13593	9140	9077	0.174302500151122	0.174302500151122
+13594	9077	9141	0.280690469581891	0.280690469581891
+13596	9142	118	0.0916021886608042	0.0916021886608042
+13597	118	6721	0.0966297992771619	0.0966297992771619
+13598	6721	6722	0.0414535753801991	0.0414535753801991
+13599	6722	2311	0.00867549185460531	0.00867549185460531
+13601	6580	6723	0.0197325066377101	0.0197325066377101
+13603	9029	1240	0.0358410792262526	0.0358410792262526
+13604	1240	4790	0.0578956777475445	0.0578956777475445
+13605	4790	4814	0.0309664941935945	0.0309664941935945
+13606	4814	2156	0.0660634330770184	0.0660634330770184
+13607	2156	2166	0.00298513757197415	0.00298513757197415
+13608	2166	2183	0.165657322423627	0.165657322423627
+13609	2183	9070	0.039996230308656	0.039996230308656
+13611	3728	9143	0.0374422730466023	0.0374422730466023
+13613	3765	8150	0.099678431004031	0.099678431004031
+13614	8150	7609	0.0943510009713305	0.0943510009713305
+13616	7262	7595	0.0635463262031531	0.0635463262031531
+13617	7595	7599	0.0220206440979588	0.0220206440979588
+13618	7599	9144	0.0741982381570415	0.0741982381570415
+15078	7589	3366	0.105686563985576	0.105686563985576
+13619	9144	2022	0.0197545563564228	0.0197545563564228
+13620	2022	9147	0.0829434723735258	0.0829434723735258
+13621	9147	3355	0.0108199721778022	0.0108199721778022
+13623	9148	2768	0.0035576669192827	0.0035576669192827
+13624	2768	7013	0.0948918648713715	0.0948918648713715
+13626	2274	8214	0.00623184642483798	0.00623184642483798
+13627	8214	9149	0.0892902468185094	0.0892902468185094
+13628	9149	8211	0.0144047767787734	0.0144047767787734
+13629	8211	7521	0.0807484203861095	0.0807484203861095
+13630	7521	7522	0.0178959760293508	0.0178959760293508
+13631	7522	2132	0.0761585237127413	0.0761585237127413
+13632	2132	2117	0.0261874332320613	0.0261874332320613
+13633	2117	5982	0.0706516490311829	0.0706516490311829
+13634	5982	5987	0.0312102623276897	0.0312102623276897
+13635	5987	5148	0.0542024830967572	0.0542024830967572
+13636	5148	7678	0.00643849229968441	0.00643849229968441
+13637	7678	9150	0.0270552275766841	0.0270552275766841
+13638	9150	5159	0.0130471422397109	0.0130471422397109
+13639	5159	2336	0.0550815403379387	0.0550815403379387
+17797	9318	9592	0.0276370219250994	0.0276370219250994
+15154	9503	7694	0.0985863309924877	0.0985863309924877
+13640	2336	9151	2.70099171821299	2.70099171821299
+15853	9736	5597	0.026161521554181	0.026161521554181
+13642	327	390	0.428713460971309	0.428713460971309
+13643	390	216	1.2612581668138	1.2612581668138
+13647	4841	9156	0.020245918680072	0.020245918680072
+13653	9127	4841	0.714489743272739	0.714489743272739
+13655	9160	9161	0.0611231237623731	0.0611231237623731
+13657	9161	9162	0.0094906074947222	0.0094906074947222
+13658	9162	360	0.119259910634054	0.119259910634054
+13659	360	4441	0.0977181725107	0.0977181725107
+13660	4441	9025	0.101356058092401	0.101356058092401
+13661	9025	361	0.102083424277621	0.102083424277621
+13662	361	6661	0.148732998262686	0.148732998262686
+13663	6661	1457	0.0814814185857237	0.0814814185857237
+13664	1457	6930	0.0803380398809936	0.0803380398809936
+13665	6930	9163	0.0870015008277124	0.0870015008277124
+13666	9163	3826	0.0559780942251715	0.0559780942251715
+13667	3826	5901	0.113837481725673	0.113837481725673
+13668	5901	1650	0.336368580358266	0.336368580358266
+13669	1650	9026	0.0808050552206421	0.0808050552206421
+13670	9026	9027	0.0815322500516298	0.0815322500516298
+13671	9027	3968	0.0749133242052919	0.0749133242052919
+13672	3968	205	0.163780553378706	0.163780553378706
+13673	205	2934	0.0793233966793332	0.0793233966793332
+13674	2934	2932	0.00660572151012338	0.00660572151012338
+13675	2932	5313	0.0749133313668845	0.0749133313668845
+13676	5313	5314	0.039721686292112	0.039721686292112
+13677	5314	1472	0.0396600103919334	0.0396600103919334
+13678	1472	5451	0.159004638765101	0.159004638765101
+13679	5451	7909	0.201247264593271	0.201247264593271
+13680	7909	4403	0.196833842084677	0.196833842084677
+13681	4403	6310	0.199805236650359	0.199805236650359
+13682	6310	6311	0.0399338522027804	0.0399338522027804
+13683	6311	9019	0.0787211142615482	0.0787211142615482
+18919	10398	10391	0.0932116121589892	0.0932116121589892
+13684	9019	4301	0.0803301037321015	0.0803301037321015
+13685	4301	4499	0.100692334161908	0.100692334161908
+13686	4499	7815	0.0988002674680887	0.0988002674680887
+13687	7815	5071	0.0991802868019195	0.0991802868019195
+13688	5071	8014	0.103571412588639	0.103571412588639
+13689	8014	6833	0.0839453108807348	0.0839453108807348
+14657	9411	6735	0.143528351506247	0.143528351506247
+13691	6976	7946	0.0984345173677437	0.0984345173677437
+13692	7946	3301	0.0874467814940938	0.0874467814940938
+13693	3301	6365	0.0895995351805866	0.0895995351805866
+13694	6365	6654	0.083807023997277	0.083807023997277
+13695	6654	9165	0.68755983150845	0.68755983150845
+13696	9166	9167	0.0102840052604526	0.0102840052604526
+13698	7423	7832	0.102961269389569	0.102961269389569
+13699	7832	1182	0.0975615453999259	0.0975615453999259
+13700	1182	1359	0.100609727856237	0.100609727856237
+13701	1359	8086	0.0998738624212929	0.0998738624212929
+13702	8086	4842	0.0999569203615348	0.0999569203615348
+13703	4842	4377	0.103593486995353	0.103593486995353
+13704	4377	2859	0.305366704359361	0.305366704359361
+13705	2859	7625	0.0937028559888649	0.0937028559888649
+13706	7625	6669	0.0349417471907859	0.0349417471907859
+13707	6669	6928	0.181245567189969	0.181245567189969
+13708	6928	6929	0.056563910069816	0.056563910069816
+15200	9526	7443	0.0505254725980933	0.0505254725980933
+13710	3818	5176	0.0844451203946057	0.0844451203946057
+13711	5176	5900	0.0873882937906588	0.0873882937906588
+13712	5900	1602	0.0969475981594534	0.0969475981594534
+13713	1602	1645	0.147610823352004	0.147610823352004
+13714	1645	1658	0.00734081920779586	0.00734081920779586
+13715	1658	6715	0.113834950309784	0.113834950309784
+13717	4211	8097	0.0991353106844716	0.0991353106844716
+13719	9171	203	0.0903750729081993	0.0903750729081993
+13720	203	2931	0.102769081645998	0.102769081645998
+13721	2931	5312	0.098402268229521	0.098402268229521
+13722	5312	1469	0.0726981009727233	0.0726981009727233
+13723	1469	1468	0.023502610730772	0.023502610730772
+13724	1468	5448	0.104140699419407	0.104140699419407
+13726	3761	9166	0.069031653563667	0.069031653563667
+13728	4177	9172	0.109548350633249	0.109548350633249
+13730	9144	5946	0.201030224778112	0.201030224778112
+13731	5946	5137	0.27511296352744	0.27511296352744
+13732	5137	5152	0.0232058578864935	0.0232058578864935
+13733	5152	4907	0.10620133994029	0.10620133994029
+15464	1361	9615	0.0375616902705351	0.0375616902705351
+13734	4907	6615	0.200738818803378	0.200738818803378
+13735	6615	9173	0.1939198547813	0.1939198547813
+13736	9173	9174	0.208269220932895	0.208269220932895
+13738	9147	5947	0.203116974549126	0.203116974549126
+13740	7615	904	0.277200719177449	0.277200719177449
+13741	904	9175	0.127974248210887	0.127974248210887
+13743	7010	7421	0.0949619514323781	0.0949619514323781
+13744	7421	1142	0.0432881849429407	0.0432881849429407
+13745	1142	1147	0.0608947786947552	0.0608947786947552
+13746	1147	909	0.0792487229277921	0.0792487229277921
+13788	1669	9192	0.136278654988626	0.136278654988626
+13747	909	9176	0.125103752996271	0.125103752996271
+13748	9176	2771	0.202343174331141	0.202343174331141
+13749	2771	6895	0.198817638053719	0.198817638053719
+13753	9179	1	0.207517415173182	0.207517415173182
+13755	8437	9180	0.124967984057199	0.124967984057199
+13759	9182	4484	0.465234327006532	0.465234327006532
+13760	4484	4485	0.0326010116755978	0.0326010116755978
+13762	9183	9184	0.0646101092104256	0.0646101092104256
+13764	9185	9186	0.026977202251753	0.026977202251753
+13765	9186	9187	0.0154692834867904	0.0154692834867904
+13766	9187	6713	0.0145607005435147	0.0145607005435147
+13768	232	9188	0.0841812454433435	0.0841812454433435
+13770	9188	2561	0.00954099557633664	0.00954099557633664
+13773	8233	9190	0.00698491885871168	0.00698491885871168
+13774	9190	605	0.212601143616712	0.212601143616712
+13776	394	9191	0.174546619141482	0.174546619141482
+13779	294	4424	0.271505686802405	0.271505686802405
+13783	1892	4513	0.135635571790495	0.135635571790495
+13784	4513	5235	0.13338423256793	0.13338423256793
+13785	5235	6887	0.13498931648718	0.13498931648718
+13786	6887	8681	0.133693861256586	0.133693861256586
+13787	8681	1669	0.132070065253788	0.132070065253788
+13790	8903	8620	0.147899148341854	0.147899148341854
+13791	8620	6984	0.0740139001970076	0.0740139001970076
+13792	6984	4819	0.0711240597778575	0.0711240597778575
+13794	8514	8220	0.0695233221555377	0.0695233221555377
+13796	9193	9141	0.231480473302438	0.231480473302438
+13817	9194	8483	0.144876329810161	0.144876329810161
+13798	9193	9195	0.405940766693276	0.405940766693276
+13800	5081	9196	0.0826803218524669	0.0826803218524669
+13801	9196	7908	0.24773379383735	0.24773379383735
+13802	7908	1383	0.130538600450066	0.130538600450066
+13803	1383	4663	0.14493811446872	0.14493811446872
+13822	8286	9202	0.148093750497898	0.148093750497898
+13804	4663	9197	0.14786450905396	0.14786450905396
+13807	231	1184	0.314149545717651	0.314149545717651
+13808	1184	1364	0.114004540105804	0.114004540105804
+13810	1364	8087	0.130984174828509	0.130984174828509
+14659	939	5938	0.17856727191407	0.17856727191407
+14660	5938	3797	0.152203615831491	0.152203615831491
+13811	8087	9162	0.16050280483824	0.16050280483824
+13812	9162	9198	0.0132941963216631	0.0132941963216631
+18577	10320	10319	0.350878667314418	0.350878667314418
+20839	10930	10948	0.105680421147412	0.105680421147412
+13813	9198	9199	3.17004296851045	3.17004296851045
+17798	9592	10180	0.0765579819092659	0.0765579819092659
+13839	1284	9210	0.120028974895433	0.120028974895433
+13816	4931	9194	0.407318560179548	0.407318560179548
+13819	6705	8577	0.147047679886064	0.147047679886064
+13820	8577	5778	0.145526475675905	0.145526475675905
+13821	5778	8286	0.144657100371242	0.144657100371242
+13823	9202	9203	0.102081942931647	0.102081942931647
+13825	7891	9204	0.145701377036231	0.145701377036231
+13827	8994	9205	0.0106390736530004	0.0106390736530004
+13828	9205	8304	0.117212668938715	0.117212668938715
+13829	8304	6774	0.0328401658585753	0.0328401658585753
+13830	6774	3753	0.196045019335809	0.196045019335809
+13831	3753	8325	0.00916875381027056	0.00916875381027056
+13833	8444	9206	0.0130864665707206	0.0130864665707206
+13834	9206	9207	0.00957370688012094	0.00957370688012094
+13835	9207	9208	0.169933774193856	0.169933774193856
+13836	9208	9209	0.168302394118973	0.168302394118973
+15503	3939	5618	0.12194000294889	0.12194000294889
+13837	9209	2963	0.0205458196072096	0.0205458196072096
+13840	9210	9211	0.00588390321087397	0.00588390321087397
+13841	9211	22	0.0556252544592051	0.0556252544592051
+13842	22	6435	0.0767592442346679	0.0767592442346679
+13843	6435	636	0.0822615503744666	0.0822615503744666
+13844	636	9213	0.103246384420422	0.103246384420422
+13845	9213	535	0.0273108213340879	0.0273108213340879
+13846	535	9214	0.138573391347307	0.138573391347307
+13847	9214	8498	0.0276472257994952	0.0276472257994952
+13848	8498	8441	0.0465142466162739	0.0465142466162739
+13850	9215	8403	0.0487070540067587	0.0487070540067587
+13851	8403	1774	0.0526991311069308	0.0526991311069308
+13853	4412	9216	0.0527074152255093	0.0527074152255093
+13854	9216	4781	0.0501079093501001	0.0501079093501001
+14661	3797	9412	0.199399735185058	0.199399735185058
+13855	4781	1522	0.0511423250179406	0.0511423250179406
+13856	1522	5241	0.0480297777865987	0.0480297777865987
+13857	5241	463	0.0533178386766155	0.0533178386766155
+13859	9217	8420	0.0487543044755043	0.0487543044755043
+13860	8420	1773	0.0502154238610622	0.0502154238610622
+13862	4425	9218	0.050643583977918	0.050643583977918
+13863	9218	4823	0.0514478917449482	0.0514478917449482
+13864	4823	1521	0.0514834990326773	0.0514834990326773
+13865	1521	5262	0.0474439861374267	0.0474439861374267
+13866	5262	9219	0.0530746980864797	0.0530746980864797
+13868	6499	2472	0.199600310338802	0.199600310338802
+13870	7007	2282	0.0992844503488553	0.0992844503488553
+13872	3603	7529	0.0990493561706104	0.0990493561706104
+13873	7529	2137	0.105524175995486	0.105524175995486
+13874	2137	5994	0.104734285723653	0.104734285723653
+13875	5994	7674	0.100897460064117	0.100897460064117
+13996	5841	434	0.0624248318177171	0.0624248318177171
+13876	7674	9221	1.00510923817581	1.00510923817581
+13878	2804	5269	0.128688734978596	0.128688734978596
+13879	5269	6909	0.123348542786119	0.123348542786119
+13881	4480	5270	0.264392216770053	0.264392216770053
+13882	5270	6910	0.123553912188766	0.123553912188766
+13884	7761	6908	0.206924774668396	0.206924774668396
+13886	6907	7760	0.209013911598568	0.209013911598568
+13887	7760	9222	0.202410018751594	0.202410018751594
+13888	6905	7759	0.206351576128965	0.206351576128965
+13889	7759	6359	0.203865759483167	0.203865759483167
+13891	9223	6448	0.190233422734384	0.190233422734384
+13892	6448	6992	0.620734926195411	0.620734926195411
+13893	6992	2116	0.412221337604484	0.412221337604484
+13894	2116	7665	0.206015761732372	0.206015761732372
+13935	9237	254	0.129619446290563	0.129619446290563
+13895	7665	9224	1.85930539190202	1.85930539190202
+13896	9225	2398	0.224331288063009	0.224331288063009
+13897	2398	6361	0.106327129111224	0.106327129111224
+17281	7311	3273	0.201986093156211	0.201986093156211
+13899	6446	9223	0.123505309386589	0.123505309386589
+13901	8984	8975	0.295278766625452	0.295278766625452
+13903	8980	8981	0.155353173279186	0.155353173279186
+13905	9226	8104	0.184150710275748	0.184150710275748
+13907	9227	6946	0.038429344582371	0.038429344582371
+13912	6380	9229	0.104471273298691	0.104471273298691
+14662	9412	9300	0.189453948637121	0.189453948637121
+13916	566	9231	1.43965285379934	1.43965285379934
+13917	9136	9232	0.238873404598648	0.238873404598648
+13920	483	7284	0.0730945677376631	0.0730945677376631
+13928	278	6916	0.0415405366115252	0.0415405366115252
+13930	9235	9236	0.360270886139133	0.360270886139133
+13931	9236	2883	0.0595125074168401	0.0595125074168401
+13936	254	8324	0.235611866233999	0.235611866233999
+13938	8324	8310	0.066787627422688	0.066787627422688
+13940	8310	9241	0.146021189936251	0.146021189936251
+13944	9099	7796	0.300588795121337	0.300588795121337
+13948	9244	9113	0.144188675545464	0.144188675545464
+13950	9106	9244	0.0499156662848634	0.0499156662848634
+13952	9245	9246	0.123118530171941	0.123118530171941
+13954	405	406	0.0103894659763889	0.0103894659763889
+13955	406	9245	0.0664778537431541	0.0664778537431541
+13957	407	9033	0.137547423766831	0.137547423766831
+17289	5839	7744	0.201433070586795	0.201433070586795
+13965	9097	9248	0.39480102328572	0.39480102328572
+13966	9248	9249	0.0955291664142426	0.0955291664142426
+13968	9246	9248	0.157049002786803	0.157049002786803
+13976	3952	9252	0.0592126025244243	0.0592126025244243
+13977	9252	5605	0.0597855652504274	0.0597855652504274
+13978	5605	9253	0.0521408060475983	0.0521408060475983
+13979	9253	3728	0.0545524879363147	0.0545524879363147
+13981	7951	7949	0.019092168905179	0.019092168905179
+13983	7949	3093	0.182702780383174	0.182702780383174
+15893	9254	9255	0.183718623774573	0.183718623774573
+13984	3093	3203	0.200818235908537	0.200818235908537
+13985	3203	6116	0.201635970571119	0.201635970571119
+13986	6116	1913	0.201179241726354	0.201179241726354
+13987	1913	9219	0.201184980777767	0.201184980777767
+13988	9219	463	0.200400773809621	0.200400773809621
+13989	463	7301	0.202731579470961	0.202731579470961
+13990	7301	49	0.204762753950758	0.204762753950758
+13991	49	3548	0.19703986640102	0.19703986640102
+13992	3548	4243	0.201964288701916	0.201964288701916
+13993	4243	1803	0.208102375283595	0.208102375283595
+13994	1803	8711	0.194851559567089	0.194851559567089
+13995	8711	5841	0.20424687376631	0.20424687376631
+17660	586	8936	0.0435552950105704	0.0435552950105704
+13997	434	8731	0.0205731062854678	0.0205731062854678
+13999	3219	3112	0.203925882799295	0.203925882799295
+14000	3112	3641	0.260678130684959	0.260678130684959
+14001	3641	9256	0.0279085029397156	0.0279085029397156
+14003	9257	8801	0.0249979934697134	0.0249979934697134
+14665	4752	4167	0.209025457745472	0.209025457745472
+14005	9256	9257	0.0367111693692818	0.0367111693692818
+14007	9258	3642	0.0274131048639432	0.0274131048639432
+14008	3642	9259	0.086632322467807	0.086632322467807
+14009	9259	3111	0.171051850512145	0.171051850512145
+14010	3111	3219	0.203481486479522	0.203481486479522
+14012	7158	9258	0.038998695665846	0.038998695665846
+14014	3219	6126	0.202012344464496	0.202012344464496
+14015	6126	1929	0.202386985868189	0.202386985868189
+14016	1929	2919	0.0171463622508283	0.0171463622508283
+14017	2919	7250	0.183561589747783	0.183561589747783
+14018	7250	3274	0.20118632596822	0.20118632596822
+14019	3274	7312	0.203193267560765	0.203193267560765
+14021	9260	9157	0.0588873613464273	0.0588873613464273
+14022	9157	6253	0.473629275671798	0.473629275671798
+14023	6253	9167	0.20379925953003	0.20379925953003
+14024	9167	231	0.364607283214556	0.364607283214556
+14026	9171	2308	0.0877328075526686	0.0877328075526686
+14027	2308	167	0.314493617652356	0.314493617652356
+14030	6653	9263	0.598539344332022	0.598539344332022
+14031	5448	5975	0.113227741973857	0.113227741973857
+14032	5975	9023	0.0895901368528646	0.0895901368528646
+14033	9023	4404	0.197536219691709	0.197536219691709
+14034	4404	7371	0.107978748074207	0.107978748074207
+14035	7371	6307	0.0697549406367758	0.0697549406367758
+14036	6307	6308	0.0220857912106748	0.0220857912106748
+14037	6308	4316	0.20668661359579	0.20668661359579
+14038	4316	4503	0.0921482766473363	0.0921482766473363
+14039	4503	7814	0.109821870874264	0.109821870874264
+14040	7814	5079	0.102137328159445	0.102137328159445
+14041	5079	8013	0.0998289131041121	0.0998289131041121
+14042	8013	6832	0.10065041616734	0.10065041616734
+14043	6832	6975	0.0990932842629603	0.0990932842629603
+14044	6975	7945	0.100601003970672	0.100601003970672
+14045	7945	6364	0.097675013601381	0.097675013601381
+14049	9264	9265	0.128352927336665	0.128352927336665
+14051	3219	5061	0.0565378582983479	0.0565378582983479
+14052	5061	4916	0.0521329784642155	0.0521329784642155
+17662	488	10160	0.037999512945138	0.037999512945138
+14053	4916	5228	0.130202288917824	0.130202288917824
+14054	5228	5106	0.0572735085516971	0.0572735085516971
+14055	5106	5229	0.0124802378810982	0.0124802378810982
+14056	5229	4995	0.288542415463076	0.288542415463076
+14057	4995	9266	0.20116472075537	0.20116472075537
+14666	4167	6326	0.178657902009272	0.178657902009272
+14058	9266	7066	0.0118986523075564	0.0118986523075564
+14059	7066	3636	0.140199736242294	0.140199736242294
+14061	9266	6351	0.197550871457279	0.197550871457279
+14063	2574	5103	0.0764020591743967	0.0764020591743967
+14065	7930	1893	0.0520626532677435	0.0520626532677435
+14066	1893	2315	0.115168818798466	0.115168818798466
+14068	7341	6156	0.0983814711715662	0.0983814711715662
+14069	6156	6290	0.0991170792397538	0.0991170792397538
+14070	6290	3116	0.0983982120263374	0.0983982120263374
+14072	6673	8185	0.0325158694936318	0.0325158694936318
+14074	3188	9268	0.0244851420549388	0.0244851420549388
+14075	9268	8800	0.0276968906605859	0.0276968906605859
+14077	6718	9269	0.103071842817105	0.103071842817105
+14078	9269	8160	0.0477581921413061	0.0477581921413061
+14080	7342	3492	0.198422050793999	0.198422050793999
+14081	3492	9270	0.0991145839577047	0.0991145839577047
+17664	10161	6173	0.109897620785603	0.109897620785603
+14082	9270	5386	0.100577308895159	0.100577308895159
+14083	5386	9271	0.100588544879537	0.100588544879537
+14084	9271	6817	0.101321511979085	0.101321511979085
+14160	7023	7393	0.135757251453186	0.135757251453186
+14161	7393	9272	0.0789156635630832	0.0789156635630832
+14166	9278	7444	0.0517309727495982	0.0517309727495982
+14129	9279	9280	0.186364690747119	0.186364690747119
+14085	6817	9273	5.01601743028969	5.01601743028969
+14086	9274	6816	4.59997811614881	4.59997811614881
+14088	2943	5348	0.200890409378397	0.200890409378397
+14089	5348	3491	0.0990328236882064	0.0990328236882064
+14090	3491	2849	0.0998105211493863	0.0998105211493863
+14091	2849	7341	0.0991252344530307	0.0991252344530307
+14093	9271	6103	0.208876201356377	0.208876201356377
+14095	9270	6098	0.16565447863601	0.16565447863601
+14096	6098	9275	0.0444779706577198	0.0444779706577198
+14097	9269	6101	0.238835584318973	0.238835584318973
+17799	10180	8536	0.0726583525558809	0.0726583525558809
+14099	8294	9276	0.192103991232145	0.192103991232145
+14101	4423	9277	0.533016938094048	0.533016938094048
+14138	9282	9283	0.384483999025896	0.384483999025896
+14146	4993	9288	0.0718457938229626	0.0718457938229626
+14148	9288	471	0.0203590276008878	0.0203590276008878
+14149	471	6430	0.0161743745423695	0.0161743745423695
+14150	6430	4655	0.1348214737413	0.1348214737413
+14151	4655	1277	0.119151021074222	0.119151021074222
+14152	1277	4528	0.128606742393323	0.128606742393323
+14153	4528	9289	0.132757697104501	0.132757697104501
+14154	9289	9290	0.133347126872573	0.133347126872573
+14155	9290	9291	0.0102673262572307	0.0102673262572307
+14156	9291	6745	0.131970868855064	0.131970868855064
+14157	6745	6145	0.131356474267846	0.131356474267846
+14158	6145	4019	0.135781040149455	0.135781040149455
+14159	4019	7023	0.135014116939136	0.135014116939136
+14162	9272	3401	0.0502252760733361	0.0502252760733361
+14163	3401	9220	0.0499780107614713	0.0499780107614713
+17968	8778	10231	0.0192769916187002	0.0192769916187002
+14164	9220	8375	0.0494394335916504	0.0494394335916504
+14165	8375	9278	0.0493971533103994	0.0493971533103994
+14167	7444	9292	0.0498509119548639	0.0498509119548639
+14168	9292	7161	0.0504322249542888	0.0504322249542888
+14169	7161	9293	0.049549545616498	0.049549545616498
+14671	5473	9414	0.169600878974653	0.169600878974653
+14170	9293	7773	0.0509361632349417	0.0509361632349417
+14171	7773	9039	0.0499454477956979	0.0499454477956979
+14172	9039	1114	0.0547655871790504	0.0547655871790504
+14173	1114	9294	0.0447798115689078	0.0447798115689078
+14174	9294	7494	0.0527731793085291	0.0527731793085291
+14175	7494	9170	0.0488063990880333	0.0488063990880333
+14176	9170	3836	0.0502683027746479	0.0502683027746479
+14180	7818	2938	0.0876396467302253	0.0876396467302253
+14181	2938	6809	0.0888992165922937	0.0888992165922937
+14182	6809	1960	0.772041478396669	0.772041478396669
+17800	8536	8859	0.0293889142934455	0.0293889142934455
+14183	1960	9295	0.960771522024492	0.960771522024492
+14184	7571	9296	0.161476693063143	0.161476693063143
+14185	9296	8888	0.0634729683022204	0.0634729683022204
+14187	9297	6334	0.0129309336441387	0.0129309336441387
+14188	6334	7083	0.0225608570291498	0.0225608570291498
+14189	7083	8784	0.107920119748436	0.107920119748436
+14190	8784	8791	0.106332666658533	0.106332666658533
+14191	8791	3157	0.106749034536814	0.106749034536814
+14192	3157	4976	0.101195319793441	0.101195319793441
+14193	4976	9298	0.0996902493641346	0.0996902493641346
+14194	9298	9299	0.104226329823663	0.104226329823663
+14195	9299	6538	0.0493134523648135	0.0493134523648135
+14196	6538	5048	0.0489874238643872	0.0489874238643872
+14197	5048	8001	0.0994531494791736	0.0994531494791736
+14198	8001	985	0.0994551795792203	0.0994551795792203
+14199	985	5104	0.0491411684949994	0.0491411684949994
+14201	8831	9300	0.0488242916251385	0.0488242916251385
+14202	9300	7149	0.0497002324101769	0.0497002324101769
+14203	7149	2393	0.0492946529104208	0.0492946529104208
+14204	2393	5115	0.0502354677891233	0.0502354677891233
+14205	5115	9301	0.0497154080261439	0.0497154080261439
+14206	9301	4714	0.049399080188397	0.049399080188397
+14207	4714	8872	0.0991624253785381	0.0991624253785381
+14208	8872	7353	0.0988972303255353	0.0988972303255353
+14209	7353	5412	0.107964313206197	0.107964313206197
+14210	5412	3145	0.0906444248702148	0.0906444248702148
+14211	3145	3919	0.0988223626592478	0.0988223626592478
+18204	6875	8356	0.205977621151269	0.205977621151269
+14212	3919	3918	0.0189862588635382	0.0189862588635382
+14213	3918	1010	0.0826936905404967	0.0826936905404967
+14214	1010	6261	0.0974734196824701	0.0974734196824701
+14215	6261	8730	0.0989075877241795	0.0989075877241795
+14216	8730	7153	0.0605847994240266	0.0605847994240266
+14217	7153	5021	0.0499889577891061	0.0499889577891061
+14218	5021	9302	0.0549823108734392	0.0549823108734392
+14219	9302	3342	0.0335617577180335	0.0335617577180335
+14220	3342	3352	0.0674788037125104	0.0674788037125104
+14221	3352	7886	0.0299418452790484	0.0299418452790484
+14222	7886	7319	0.0732493043433617	0.0732493043433617
+14223	7319	7320	0.0259215863697348	0.0259215863697348
+14224	7320	7977	0.0775267077551995	0.0775267077551995
+14225	7977	7980	0.0233987016260196	0.0233987016260196
+14226	7980	2061	0.0796038188827741	0.0796038188827741
+14227	2061	8870	0.0167451229489977	0.0167451229489977
+14228	8870	2647	0.0876006586657796	0.0876006586657796
+14229	2647	8860	0.0114861984991212	0.0114861984991212
+14231	4113	8862	0.00848374045935965	0.00848374045935965
+14232	8862	8687	0.0949896568056219	0.0949896568056219
+14234	6694	8024	0.0782864986898227	0.0782864986898227
+14235	8024	8017	0.0158816052839578	0.0158816052839578
+18205	8356	10280	0.196081618210442	0.196081618210442
+14236	8017	7681	0.0911745487086236	0.0911745487086236
+14237	7681	3454	0.0980849682512979	0.0980849682512979
+14238	3454	6017	0.0971271293907499	0.0971271293907499
+14239	6017	9303	0.0906101063303862	0.0906101063303862
+14240	9303	3884	0.022021804982538	0.022021804982538
+14241	3884	9304	0.0244079810975188	0.0244079810975188
+14242	9304	852	0.0462417773626911	0.0462417773626911
+14243	852	847	0.0318832988859635	0.0318832988859635
+14244	847	9305	0.0129480432587025	0.0129480432587025
+14245	9305	7103	0.0469858120705144	0.0469858120705144
+14246	7103	7098	0.0440436114993002	0.0440436114993002
+14247	7098	8567	0.0448162532507988	0.0448162532507988
+14248	8567	8696	0.0173715559267549	0.0173715559267549
+14249	8696	8157	0.112872102261494	0.112872102261494
+14251	7606	7263	0.0986452262534628	0.0986452262534628
+14252	7263	7596	0.0935891946661749	0.0935891946661749
+14253	7596	2019	0.0979493336941006	0.0979493336941006
+14254	2019	2009	0.0254598809515577	0.0254598809515577
+14255	2009	9306	0.0651506123907477	0.0651506123907477
+14256	9306	2765	0.0942796454050606	0.0942796454050606
+14257	2765	7004	0.0945020258355606	0.0945020258355606
+14258	7004	2269	0.094510288095609	0.094510288095609
+14259	2269	3597	0.0938178496086605	0.0938178496086605
+14260	3597	7519	0.0940495689740582	0.0940495689740582
+14261	7519	2097	0.0954278502201834	0.0954278502201834
+14262	2097	5979	0.093364277402532	0.093364277402532
+14263	5979	7668	0.0947328877466294	0.0947328877466294
+14264	7668	2333	0.0940581587738673	0.0940581587738673
+14290	7340	2847	0.0976411590956878	0.0976411590956878
+14291	2847	3488	0.099134038329873	0.099134038329873
+14265	2333	9307	2.72967592410639	2.72967592410639
+14266	7939	9297	0.0419487931711618	0.0419487931711618
+14268	9308	8124	0.0322650869587369	0.0322650869587369
+14270	6489	4610	0.147433811602258	0.147433811602258
+14271	4610	9309	0.176778253451623	0.176778253451623
+14272	9309	9310	0.173976128689665	0.173976128689665
+14273	9310	661	0.00410310170227956	0.00410310170227956
+14274	661	9311	0.181937703339546	0.181937703339546
+14275	9311	9312	0.00955167864142152	0.00955167864142152
+14276	9312	5465	0.170285054650927	0.170285054650927
+14277	5465	9313	0.170744821866598	0.170744821866598
+14279	1959	9314	0.0338130460518869	0.0338130460518869
+14280	6865	9315	0.0139507857568572	0.0139507857568572
+14304	3303	9322	0.10510832723533	0.10510832723533
+14282	1952	1061	0.0629715521271105	0.0629715521271105
+14283	1061	1698	0.0954893713474356	0.0954893713474356
+14284	1698	7830	0.0914331784434328	0.0914331784434328
+14285	7830	6672	0.0912502234487567	0.0912502234487567
+14287	3115	6289	0.0998478865183477	0.0998478865183477
+14288	6289	6153	0.0969141122634902	0.0969141122634902
+14289	6153	7340	0.100591515239683	0.100591515239683
+14292	3488	5347	0.102266398355838	0.102266398355838
+14293	5347	5385	0.100999909961237	0.100999909961237
+14294	5385	2941	0.100298515709498	0.100298515709498
+14295	2941	6815	0.100200854484763	0.100200854484763
+14296	6815	9316	0.597950743493465	0.597950743493465
+14299	9318	9319	0.0328706223087289	0.0328706223087289
+14300	9319	9320	0.0460951861554719	0.0460951861554719
+14332	8959	603	0.0768028618845699	0.0768028618845699
+14301	9320	9321	0.0066600520489618	0.0066600520489618
+14302	9321	6181	0.104280480431139	0.104280480431139
+14303	6181	3303	0.107915728386056	0.107915728386056
+14305	9322	7829	0.125883411444605	0.125883411444605
+14306	7829	9323	0.0108681676592021	0.0108681676592021
+14339	5536	6469	0.142307267119589	0.142307267119589
+14309	2191	9060	0.337657954437192	0.337657954437192
+14312	8501	9324	0.0507516559976904	0.0507516559976904
+14313	9324	8418	0.0529402152835436	0.0529402152835436
+14314	8418	9204	0.0536170041098827	0.0536170041098827
+16428	9891	9892	0.0636662665142278	0.0636662665142278
+14316	9204	8416	0.0537868101405785	0.0537868101405785
+14317	8416	4388	0.0529171329453403	0.0529171329453403
+14318	4388	9325	0.0509479826022637	0.0509479826022637
+14319	9325	3012	0.0488022545854277	0.0488022545854277
+14320	3012	9326	0.0106897373905654	0.0106897373905654
+14321	9326	9327	0.0465239604768105	0.0465239604768105
+14322	9327	5968	0.0526629141875595	0.0526629141875595
+14323	5968	7574	0.106363762970419	0.106363762970419
+14324	7574	3677	0.190331060201359	0.190331060201359
+14326	604	9328	0.0383191315904674	0.0383191315904674
+14327	9328	8962	0.0878512488922689	0.0878512488922689
+14336	2420	3233	0.140764271648617	0.140764271648617
+14337	3233	5753	0.137661630591373	0.137661630591373
+14338	5753	5536	0.137436976875483	0.137436976875483
+14340	6469	8679	0.121371092902246	0.121371092902246
+14341	8679	9329	0.0309595800848719	0.0309595800848719
+20573	10860	10861	0.0279030600601915	0.0279030600601915
+14342	6914	8116	0.133600464645887	0.133600464645887
+14343	8116	2483	0.133445859176034	0.133445859176034
+14344	2483	2482	0.047686047945258	0.047686047945258
+14345	2482	2821	0.0880230568241511	0.0880230568241511
+14346	2821	1413	0.131238509050086	0.131238509050086
+14347	1413	1353	0.132733599584258	0.132733599584258
+14348	1353	7767	0.0733149237137966	0.0733149237137966
+14350	6729	2454	0.137919009046371	0.137919009046371
+14351	2454	3222	0.134234515444875	0.134234515444875
+14352	3222	5743	0.134597141931663	0.134597141931663
+14353	5743	5520	0.133175062767026	0.133175062767026
+14355	6454	6914	0.135018185869381	0.135018185869381
+14358	9331	5721	0.0487615183925519	0.0487615183925519
+14359	5721	7455	0.0500566721474228	0.0500566721474228
+14360	7455	7439	0.0502188861539984	0.0502188861539984
+14361	7439	9332	0.0497229240568787	0.0497229240568787
+14362	9332	7179	0.0495263907597367	0.0495263907597367
+14363	7179	6514	0.0494836674166392	0.0494836674166392
+14364	6514	7769	0.0494751212766029	0.0494751212766029
+14365	7769	8353	0.0493044680149371	0.0493044680149371
+14366	8353	1088	0.0496035740367965	0.0496035740367965
+14367	1088	9333	0.0494070055394434	0.0494070055394434
+18206	10280	8329	0.00812836711491393	0.00812836711491393
+14368	9333	7511	0.0493300687211978	0.0493300687211978
+14369	7511	9334	0.0505963663421883	0.0505963663421883
+14370	9334	3859	0.0512115816031079	0.0512115816031079
+14371	3859	7593	0.0500990561172611	0.0500990561172611
+14372	7593	5584	0.0522011302499861	0.0522011302499861
+14376	6393	4066	0.134479200667361	0.134479200667361
+17290	7744	10084	0.402391291558362	0.402391291558362
+14377	4066	8345	0.135023999423797	0.135023999423797
+14378	8345	9290	0.135014881750995	0.135014881750995
+14380	9290	8343	0.132811220384574	0.132811220384574
+14381	8343	4290	0.133533987407519	0.133533987407519
+14382	4290	9335	0.135902936474728	0.135902936474728
+14383	9335	3489	0.0587665939642116	0.0587665939642116
+14384	3489	7712	0.0755904198902593	0.0755904198902593
+14385	7712	27	0.134715758792357	0.134715758792357
+14386	27	2969	0.137103389587981	0.137103389587981
+14387	2969	9336	0.0109860620784292	0.0109860620784292
+14388	9336	9337	0.167759812178903	0.167759812178903
+14389	9337	9206	0.00926254133366712	0.00926254133366712
+14390	9206	8977	0.0113535458246787	0.0113535458246787
+14391	8977	8972	0.0088289433819593	0.0088289433819593
+14392	8972	3592	0.0571990081351957	0.0571990081351957
+14393	3592	9338	0.0469245704560806	0.0469245704560806
+14394	9338	9339	0.0729443531618577	0.0729443531618577
+14395	9339	8232	0.00668286428887123	0.00668286428887123
+14396	8232	9340	0.00979627303730314	0.00979627303730314
+14397	9340	9341	0.118389238398527	0.118389238398527
+14398	9341	4525	0.00524840053732967	0.00524840053732967
+14399	4525	9342	0.013599142214923	0.013599142214923
+17917	5630	5173	0.1998812615077	0.1998812615077
+14400	9342	5242	0.122003116630053	0.122003116630053
+14401	5242	6892	0.132288650893496	0.132288650893496
+14402	6892	9343	0.135024052446379	0.135024052446379
+14403	9343	1682	0.135717283468362	0.135717283468362
+14404	1682	9344	0.13652220484586	0.13652220484586
+14405	9344	9345	0.105458278319657	0.105458278319657
+14406	9345	2418	0.102009831688775	0.102009831688775
+14407	2418	3242	0.101232559655988	0.101232559655988
+14408	3242	5748	0.0982858511104491	0.0982858511104491
+14409	5748	374	0.0623624460797668	0.0623624460797668
+14410	374	5523	0.0701701821949803	0.0701701821949803
+14411	5523	6457	0.135950108709595	0.135950108709595
+14412	6457	6915	0.143043041710545	0.143043041710545
+14413	6915	8113	0.201708935806819	0.201708935806819
+14414	8113	2832	0.20096393469179	0.20096393469179
+14415	2832	9346	0.204633312594591	0.204633312594591
+14416	9346	414	0.202451705011007	0.202451705011007
+14417	414	9347	0.0102632917291373	0.0102632917291373
+14419	9348	9349	0.0562572963351917	0.0562572963351917
+14420	9349	8300	0.00966827703924115	0.00966827703924115
+14421	8300	6777	0.0385409578619094	0.0385409578619094
+14422	6777	1544	0.0462211024255861	0.0462211024255861
+14423	1544	7912	0.0490573153021717	0.0490573153021717
+14424	7912	1233	0.049290008691593	0.049290008691593
+14426	6137	1235	0.0484278864865507	0.0484278864865507
+14427	1235	4023	0.0513600630217092	0.0513600630217092
+14429	9350	6747	0.132068580931606	0.132068580931606
+14430	6747	6147	0.133962898476652	0.133962898476652
+14431	6147	4021	0.132523387247295	0.132523387247295
+14432	4021	7025	0.136778977327424	0.136778977327424
+14433	7025	7395	0.133533581691074	0.133533581691074
+14434	7395	3404	0.129273092410981	0.129273092410981
+14437	6743	6143	0.132668974575322	0.132668974575322
+14439	4017	7021	0.135416440349126	0.135416440349126
+15949	9764	9765	0.0507119344408952	0.0507119344408952
+14440	7021	2253	0.0670945211351968	0.0670945211351968
+14441	2253	7391	0.0705505249778064	0.0705505249778064
+14442	7391	8378	0.0284601613193826	0.0284601613193826
+14443	8378	9352	0.0168078916798857	0.0168078916798857
+14444	9352	9164	0.0309569561418734	0.0309569561418734
+14445	9164	3399	0.0498252251835071	0.0498252251835071
+14446	3399	9201	0.0503897904067021	0.0503897904067021
+14447	9201	8373	0.0497143012199282	0.0497143012199282
+14448	8373	9353	0.0509790068650631	0.0509790068650631
+14449	9353	7441	0.0496189650212473	0.0496189650212473
+14450	7441	7159	0.100702050774509	0.100702050774509
+14451	7159	9354	0.0494661713985568	0.0494661713985568
+14452	9354	7771	0.0505861336269105	0.0505861336269105
+14453	7771	9120	0.0493839312690347	0.0493839312690347
+14454	9120	1112	0.0512647827333792	0.0512647827333792
+14455	1112	9355	0.0498795134320378	0.0498795134320378
+14456	9355	7492	0.0488194630548967	0.0488194630548967
+14457	7492	9168	0.0520827219058429	0.0520827219058429
+14460	9356	8961	0.0504011792295747	0.0504011792295747
+14461	8961	3748	0.0493839208030821	0.0493839208030821
+14462	3748	6769	0.0968984775923487	0.0968984775923487
+14463	6769	6149	0.102435146849327	0.102435146849327
+14465	3994	7051	0.102115193238577	0.102115193238577
+14466	7051	1408	0.0946641824527164	0.0946641824527164
+14467	1408	7388	0.085462530975882	0.085462530975882
+14468	7388	7384	0.0170925061959903	0.0170925061959903
+18773	9634	9642	0.177090825598433	0.177090825598433
+14469	7384	3431	0.0989346539047275	0.0989346539047275
+14470	3431	7700	0.0518438186201772	0.0518438186201772
+14471	7700	5704	0.048946112444104	0.048946112444104
+14472	5704	9357	0.0519385112225497	0.0519385112225497
+14473	9357	7431	0.0487842422429383	0.0487842422429383
+14474	7431	9358	0.0504551193593522	0.0504551193593522
+14475	9358	7172	0.0479047859915454	0.0479047859915454
+14476	7172	6792	0.0511502123352556	0.0511502123352556
+14477	6792	7632	0.00188047440472113	0.00188047440472113
+14478	7632	7787	0.0496192518214323	0.0496192518214323
+14480	9359	8535	0.0508077855400009	0.0508077855400009
+14481	8535	6765	0.145782759028854	0.145782759028854
+14482	6765	3990	0.201170058672575	0.201170058672575
+14484	1252	9360	0.0508116162596578	0.0508116162596578
+14485	9360	2713	0.151002345273532	0.151002345273532
+14486	2713	9361	0.150151679268698	0.150151679268698
+14487	9361	9345	0.0467087251829664	0.0467087251829664
+14489	604	9362	0.304555126012675	0.304555126012675
+19303	10466	10464	0.0570509910756543	0.0570509910756543
+14490	9362	3931	0.0491525010465484	0.0491525010465484
+14491	3931	5621	0.101973762448865	0.101973762448865
+14492	5621	3706	0.101962569966911	0.101962569966911
+14493	3706	712	0.103443032392629	0.103443032392629
+14494	712	9192	0.0968373320357312	0.0968373320357312
+14495	9192	9363	0.0080975223718546	0.0080975223718546
+14496	9363	8516	0.0893732443225825	0.0893732443225825
+14497	8516	4192	0.13424362136155	0.13424362136155
+14498	4192	2518	0.136440133151325	0.136440133151325
+14499	2518	6729	0.134978640871206	0.134978640871206
+14500	6729	1227	0.0997687727623418	0.0997687727623418
+14501	1227	4806	0.0366740513167213	0.0366740513167213
+14502	4806	4807	0.0623613194343192	0.0623613194343192
+14503	4807	9364	0.0735708513932139	0.0735708513932139
+14505	2172	9365	0.10218559205586	0.10218559205586
+14506	9365	6421	0.131466128237451	0.131466128237451
+14507	6421	4627	0.133072729014262	0.133072729014262
+14508	4627	1251	0.132619751836754	0.132619751836754
+14509	1251	9366	0.0509582244384895	0.0509582244384895
+14510	9366	4559	0.0827794726054668	0.0827794726054668
+14511	4559	2712	0.0689589814233185	0.0689589814233185
+14512	2712	2728	0.0619836012735683	0.0619836012735683
+14513	2728	9367	0.087518882590742	0.087518882590742
+14514	9367	9344	0.0476225838725891	0.0476225838725891
+14515	9344	9368	0.00985438954363147	0.00985438954363147
+14516	9368	9369	0.0491094576501381	0.0491094576501381
+18778	10124	10345	0.0125614259192805	0.0125614259192805
+14517	9369	7774	0.00626697755243391	0.00626697755243391
+14518	7774	6761	0.141378168804538	0.141378168804538
+14519	6761	3985	0.199192140414955	0.199192140414955
+14521	7053	7044	0.0653254811284965	0.0653254811284965
+14522	7044	7387	0.0682830004024069	0.0682830004024069
+14523	7387	3430	0.133588924605445	0.133588924605445
+14524	3430	7686	0.0503796411863715	0.0503796411863715
+14525	7686	5703	0.0508582113883613	0.0508582113883613
+14526	5703	9370	0.0488667197641872	0.0488667197641872
+14527	9370	7429	0.0516445969542144	0.0516445969542144
+14528	7429	9371	0.0490112318671292	0.0490112318671292
+14529	9371	7171	0.0508482971319457	0.0508482971319457
+14530	7171	7624	0.0496771306838175	0.0496771306838175
+14531	7624	7786	0.0493747865229187	0.0493747865229187
+14532	7786	6545	0.0503324450079726	0.0503324450079726
+14533	6545	1130	0.0509050056370777	0.0509050056370777
+14534	1130	9372	0.0485943238040251	0.0485943238040251
+14535	9372	7501	0.0507738202300539	0.0507738202300539
+14536	7501	3847	0.101870167526128	0.101870167526128
+14537	3847	9373	0.0504389434046066	0.0504389434046066
+14538	9373	5568	0.0510557052627446	0.0510557052627446
+14539	5568	7550	0.0950790701641584	0.0950790701641584
+18779	10345	10346	0.00436025817920743	0.00436025817920743
+14540	7550	9374	0.691166878065482	0.691166878065482
+14542	9375	3750	0.0991970412293978	0.0991970412293978
+14543	3750	6775	0.030090245676364	0.030090245676364
+14544	6775	6770	0.06895159402243	0.06895159402243
+14545	6770	6151	0.0638158634824408	0.0638158634824408
+14546	6151	6150	0.0359509846886602	0.0359509846886602
+14547	6150	3996	0.0963309366011696	0.0963309366011696
+14548	3996	7052	0.102479688313932	0.102479688313932
+14549	7052	7045	0.0330120960596164	0.0330120960596164
+14550	7045	1410	0.0660204937565387	0.0660204937565387
+14551	1410	7375	0.0682166301368544	0.0682166301368544
+14552	7375	7385	0.0295959064634691	0.0295959064634691
+14553	7385	3434	0.103723384358152	0.103723384358152
+14554	3434	7763	0.0498679267683769	0.0498679267683769
+14555	7763	5714	0.0489397855227354	0.0489397855227354
+14556	5714	9376	0.0504544990745908	0.0504544990745908
+14557	9376	7434	0.0512120959316622	0.0512120959316622
+14558	7434	9377	0.0478236988076173	0.0478236988076173
+14559	9377	7173	0.0504644501870281	0.0504644501870281
+14560	7173	6757	0.0487932478126772	0.0487932478126772
+14561	6757	7788	0.0524425771479912	0.0524425771479912
+14562	7788	6629	0.0465854765801166	0.0465854765801166
+14563	6629	1135	0.050756073904441	0.050756073904441
+14564	1135	6996	0.0489590899927541	0.0489590899927541
+14565	6996	7502	0.0500614988346772	0.0500614988346772
+14566	7502	9378	0.0592142721743878	0.0592142721743878
+14567	9378	9379	0.0408406813526211	0.0408406813526211
+14568	9379	7525	0.051644217383113	0.051644217383113
+14569	7525	9380	0.00488834581127681	0.00488834581127681
+14570	9380	9381	0.0137184453378057	0.0137184453378057
+14571	9381	5577	0.0352923239739852	0.0352923239739852
+14572	5577	9382	0.0499195542635391	0.0499195542635391
+14573	9382	9383	0.00207675636441744	0.00207675636441744
+14574	9383	9384	0.047500863548095	0.047500863548095
+14575	9384	9385	0.692939297157353	0.692939297157353
+14576	9347	9386	0.0638147684012153	0.0638147684012153
+14578	9386	7985	0.00659385915044033	0.00659385915044033
+14579	7985	9389	0.0876122732807676	0.0876122732807676
+14581	9390	9391	0.0645406329993705	0.0645406329993705
+14583	9391	413	0.0102638039419597	0.0102638039419597
+14584	413	9392	0.19657163498794	0.19657163498794
+14586	2833	2489	0.134959283423391	0.134959283423391
+14587	2489	8106	0.133489509437131	0.133489509437131
+14588	8106	9375	0.13422540798818	0.13422540798818
+14589	9375	5534	0.213451017222507	0.213451017222507
+14590	5534	9356	0.201724072155003	0.201724072155003
+14591	9356	9393	0.10196574773319	0.10196574773319
+14592	9393	9359	0.100498646625457	0.100498646625457
+14593	9359	9394	0.0995312761976722	0.0995312761976722
+14594	9394	9368	0.101332513335273	0.101332513335273
+14595	9368	9395	0.0524188937894899	0.0524188937894899
+14597	7373	1659	0.103861210410172	0.103861210410172
+14598	1659	7753	0.101665764300136	0.101665764300136
+14599	7753	6893	0.102477314257262	0.102477314257262
+14600	6893	5249	0.10178809746081	0.10178809746081
+14601	5249	9396	0.145009648698155	0.145009648698155
+14602	9396	5880	0.0121536325330439	0.0121536325330439
+14603	5880	9397	0.00548191654733534	0.00548191654733534
+14606	8233	9399	0.00646043089308406	0.00646043089308406
+14607	9399	3593	0.11814466181621	0.11814466181621
+14608	3593	8990	0.0502713142680652	0.0502713142680652
+14610	8994	8444	0.0112418070839832	0.0112418070839832
+14611	8444	9400	0.0106637167987107	0.0106637167987107
+14612	9400	9401	0.175022698409133	0.175022698409133
+14613	9401	2970	0.0101077489563562	0.0101077489563562
+15358	9566	9564	0.0244609132808449	0.0244609132808449
+15359	9564	9567	0.0131773798008107	0.0131773798008107
+18780	10346	10347	0.0407216504299826	0.0407216504299826
+14614	2970	8339	0.136426769448966	0.136426769448966
+14615	8339	9348	0.135169766224191	0.135169766224191
+17064	4880	9474	0.196578675384766	0.196578675384766
+14616	9348	9402	0.134813162708373	0.134813162708373
+14618	9350	8341	0.135569890655856	0.135569890655856
+14619	8341	9291	0.132813255317002	0.132813255317002
+14620	9291	9403	0.135124075128598	0.135124075128598
+14621	9403	9351	0.135070525267418	0.135070525267418
+14622	9351	6393	0.134155373542404	0.134155373542404
+14624	9393	8920	0.0508713694865286	0.0508713694865286
+14625	8920	6767	0.14583235659915	0.14583235659915
+14626	6767	3992	0.20138079206452	0.20138079206452
+14628	9389	6049	0.0198174454501223	0.0198174454501223
+14629	6049	5790	0.202409458864074	0.202409458864074
+14630	5790	9404	0.390889741592557	0.390889741592557
+14631	9389	8000	0.0874325326194809	0.0874325326194809
+14632	8000	9390	0.00587109212749533	0.00587109212749533
+14634	9405	9387	0.104292734331338	0.104292734331338
+14643	6926	912	0.0399977157837286	0.0399977157837286
+14645	3853	9379	0.0160272455480019	0.0160272455480019
+14646	9379	8109	0.188409381404142	0.188409381404142
+14647	8109	9407	0.202174997774683	0.202174997774683
+18781	10347	10348	0.0132995316754344	0.0132995316754344
+14649	5569	7551	0.0943021955909244	0.0943021955909244
+14650	7551	9408	0.692224615113747	0.692224615113747
+14651	7543	9409	0.0534301345278006	0.0534301345278006
+14652	6725	4821	0.0796194906426482	0.0796194906426482
+14653	4821	2511	0.108135424106199	0.108135424106199
+14654	2511	8224	0.0376491716837282	0.0376491716837282
+14787	9415	9416	0.31094582672675	0.31094582672675
+14791	2891	8923	0.457832400708685	0.457832400708685
+14793	5024	3335	0.0983906046596767	0.0983906046596767
+14795	7882	7337	0.102026433082927	0.102026433082927
+14796	7337	7986	0.092185977990205	0.092185977990205
+14797	7986	2055	0.0946262859427162	0.0946262859427162
+14798	2055	2661	0.105023750774947	0.105023750774947
+14799	2661	4134	0.100547305543173	0.100547305543173
+14800	4134	6697	0.0891067622100312	0.0891067622100312
+14801	6697	8020	0.0955965901798936	0.0955965901798936
+14802	8020	7684	0.0959578997394599	0.0959578997394599
+14803	7684	3458	0.0944062286409825	0.0944062286409825
+14804	3458	9418	0.046227752797198	0.046227752797198
+14805	9418	6020	0.0461318959590008	0.0461318959590008
+14806	6020	9419	0.0476773807861996	0.0476773807861996
+19851	10660	10659	0.00933491084100046	0.00933491084100046
+14807	9419	9420	0.0464971294902911	0.0464971294902911
+14808	9420	9421	0.0470997921907546	0.0470997921907546
+14809	9421	858	0.0457230540386264	0.0457230540386264
+14810	858	453	0.0467078777528092	0.0467078777528092
+14811	453	7106	0.0457758284617094	0.0457758284617094
+14812	7106	457	0.0455135048722811	0.0455135048722811
+14813	457	9422	0.0463689143813771	0.0463689143813771
+14815	9423	9424	0.00582356405087118	0.00582356405087118
+14817	9425	6432	0.0926350815349589	0.0926350815349589
+14818	6432	4657	0.117278685803448	0.117278685803448
+14819	4657	1280	0.116593491044555	0.116593491044555
+14820	1280	4531	0.132186730302242	0.132186730302242
+14951	7670	9457	3.41600373692151	3.41600373692151
+14952	3583	7612	0.0941905477613176	0.0941905477613176
+14953	7612	7265	0.0936588343585109	0.0936588343585109
+14955	7584	2001	0.0944700456489753	0.0944700456489753
+14956	2001	3361	0.0949233780276755	0.0949233780276755
+14957	3361	2755	0.0936752171867012	0.0936752171867012
+14958	2755	7006	0.0959502415519421	0.0959502415519421
+14959	7006	2281	0.099513679348955	0.099513679348955
+14960	2281	3582	0.100891029071921	0.100891029071921
+14961	3582	7528	0.100887947066067	0.100887947066067
+14962	7528	2136	0.103412071247308	0.103412071247308
+14963	2136	5993	0.100671897064821	0.100671897064821
+14964	5993	7673	0.0999667195935639	0.0999667195935639
+14986	8886	7162	0.0452381047162121	0.0452381047162121
+14985	8878	8886	0.104437941202429	0.104437941202429
+14987	7162	9309	0.0512658726512666	0.0512658726512666
+15109	7996	6927	0.0217805821755954	0.0217805821755954
+15110	6927	5675	0.030815905152866	0.030815905152866
+14965	7673	9461	2.89733038736532	2.89733038736532
+14966	8151	7610	0.094248596661074	0.094248596661074
+15088	2328	9485	2.88346551451846	2.88346551451846
+15089	9486	3468	0.447301506508283	0.447301506508283
+15090	3468	3445	0.0309512876225537	0.0309512876225537
+15091	3445	7699	0.105014135175069	0.105014135175069
+15092	7699	9487	0.105691765273947	0.105691765273947
+15093	9487	6684	0.102061996358298	0.102061996358298
+15094	6684	4128	0.108739719526669	0.108739719526669
+15095	4128	9488	0.104836941153267	0.104836941153267
+15096	9488	2082	0.105803010632854	0.105803010632854
+15097	2082	7334	0.1052078044876	0.1052078044876
+15101	9489	2994	0.0812267643509346	0.0812267643509346
+15105	2996	4851	0.0525302115232072	0.0525302115232072
+15106	4851	7227	0.0344830493164063	0.0344830493164063
+15107	7227	2369	0.0550241369558443	0.0550241369558443
+15108	2369	7996	0.056554238974086	0.056554238974086
+16370	9877	8705	0.102117755919592	0.102117755919592
+16371	8705	9486	0.014467692878557	0.014467692878557
+16373	8076	3329	0.0677844820507112	0.0677844820507112
+16374	3329	7880	0.139626392785753	0.139626392785753
+16375	7880	7333	0.105584363104376	0.105584363104376
+16376	7333	2081	0.10500807653965	0.10500807653965
+16377	2081	2678	0.105119136499329	0.105119136499329
+16491	6692	8028	0.103532298857838	0.103532298857838
+16379	4127	6683	0.108621189217377	0.108621189217377
+16385	9881	9882	0.0163548118473388	0.0163548118473388
+16386	9882	9458	0.0203986664758761	0.0203986664758761
+16394	3281	9883	0.00468216635493236	0.00468216635493236
+16396	9884	9458	0.0218243339760988	0.0218243339760988
+16398	9883	9884	0.00648970201006769	0.00648970201006769
+16400	9885	9886	0.267423928903385	0.267423928903385
+16401	9886	9880	0.296075289776302	0.296075289776302
+16403	9878	9881	0.0274154521009071	0.0274154521009071
+16404	9881	9887	0.0188694353495207	0.0188694353495207
+16405	9887	9888	0.0187489585891175	0.0187489585891175
+19509	10534	10535	0.00388440521802765	0.00388440521802765
+16425	3407	9890	0.502103946549802	0.502103946549802
+16426	9890	3331	0.0251683632208894	0.0251683632208894
+16481	7888	3680	0.0532502584498927	0.0532502584498927
+16483	4595	8006	0.101626087251738	0.101626087251738
+16484	8006	580	0.022127419381672	0.022127419381672
+16485	580	7979	0.165894151722243	0.165894151722243
+16486	7979	9923	0.0456395565118553	0.0456395565118553
+16487	9923	2066	0.0539845223115493	0.0539845223115493
+16488	2066	2641	0.100182277305196	0.100182277305196
+16489	2641	4107	0.0977431302735631	0.0977431302735631
+16490	4107	6692	0.10418977795868	0.10418977795868
+16492	8028	7698	0.0982299872130606	0.0982299872130606
+16493	7698	3443	0.0993337912559461	0.0993337912559461
+16494	3443	6011	0.101499429536563	0.101499429536563
+16495	6011	3878	0.0977083732706848	0.0977083732706848
+16496	3878	9924	0.0991972529095445	0.0991972529095445
+16497	9924	420	0.100553893040038	0.100553893040038
+16504	8592	9925	0.120377099914021	0.120377099914021
+16505	9925	9926	0.107491921110891	0.107491921110891
+16506	9926	9927	0.123107053114174	0.123107053114174
+16517	8288	3009	0.0410924117477314	0.0410924117477314
+16519	9451	4779	0.246284579163	0.246284579163
+16520	4779	6557	0.132912762129515	0.132912762129515
+16521	6557	9306	0.107414375743234	0.107414375743234
+16523	5147	9150	0.0526798805531595	0.0526798805531595
+16527	862	703	0.202686588734239	0.202686588734239
+16528	703	9924	0.202942846886287	0.202942846886287
+16533	9141	9155	0.0471076181125112	0.0471076181125112
+16549	9936	8118	0.163748197039451	0.163748197039451
+16550	8118	4329	0.102460572786022	0.102460572786022
+16551	4329	9932	0.0509040459853039	0.0509040459853039
+16552	9932	5034	0.0506801147751554	0.0506801147751554
+16553	5034	9935	0.0507841642169636	0.0507841642169636
+16554	9935	7991	0.0519996695117493	0.0519996695117493
+16555	7991	9939	0.0501954054420559	0.0501954054420559
+16557	2889	8382	0.106173445564903	0.106173445564903
+16558	8382	8542	0.105198351895408	0.105198351895408
+16559	8542	4730	0.104923019039301	0.104923019039301
+16560	4730	6797	0.109090547930583	0.109090547930583
+16561	6797	7349	0.101581569748298	0.101581569748298
+16562	7349	5395	0.107089477151985	0.107089477151985
+16563	5395	8556	0.104796077599276	0.104796077599276
+17270	82	7309	0.202171029293651	0.202171029293651
+16564	8556	3897	0.106860413590027	0.106860413590027
+16565	3897	1030	0.106538064092827	0.106538064092827
+16566	1030	6272	0.104663636918357	0.104663636918357
+16567	6272	9940	0.0522044777389819	0.0522044777389819
+16568	9940	9941	0.0539741744852114	0.0539741744852114
+16570	5969	9942	0.0525274850765404	0.0525274850765404
+16571	9942	9943	0.0464624768491459	0.0464624768491459
+16572	9943	3013	0.00948387351005329	0.00948387351005329
+16573	3013	9944	0.0499659888588949	0.0499659888588949
+16574	9944	4387	0.0525459349585223	0.0525459349585223
+16575	4387	8415	0.053989635677053	0.053989635677053
+16576	8415	9945	0.0518942546071768	0.0518942546071768
+16577	9945	8419	0.054710567315966	0.054710567315966
+16578	8419	9946	0.0495941326709913	0.0495941326709913
+16579	9946	8502	0.0543577768356107	0.0543577768356107
+16580	8502	8537	0.0523876514778538	0.0523876514778538
+16581	8537	9591	0.106159293603162	0.106159293603162
+16582	9591	9318	0.0186755424929809	0.0186755424929809
+16584	3674	9947	0.0925100597395306	0.0925100597395306
+16585	9947	9936	0.0741653442201567	0.0741653442201567
+16586	9936	5811	0.0698256524972049	0.0698256524972049
+16587	5811	7575	0.109874082628797	0.109874082628797
+16588	7575	8407	0.0534887493842637	0.0534887493842637
+16589	8407	5969	0.0514820185730379	0.0514820185730379
+16615	5811	5357	0.148515460139762	0.148515460139762
+16616	5357	8119	0.104815937410374	0.104815937410374
+16621	9938	9956	0.0146143299800706	0.0146143299800706
+16622	9956	9957	0.0128596804561102	0.0128596804561102
+16624	9958	9959	0.0111717692412778	0.0111717692412778
+16625	9959	9960	0.00928483420505699	0.00928483420505699
+16626	9960	9938	0.0070355984277229	0.0070355984277229
+16628	9961	9962	0.526903283655783	0.526903283655783
+16630	9963	9312	1.46582798607179	1.46582798607179
+16633	9965	9966	0.00412165910041822	0.00412165910041822
+16634	9966	9967	0.0757681110838303	0.0757681110838303
+16638	9965	9957	0.0717225435233069	0.0717225435233069
+16640	9964	9958	0.0807216833328343	0.0807216833328343
+16642	9967	9956	0.0290555152245672	0.0290555152245672
+16645	565	7092	0.0721739648747923	0.0721739648747923
+16646	7092	9969	0.0060839008927764	0.0060839008927764
+16658	651	9973	0.109528403212781	0.109528403212781
+16660	3165	8089	0.106908291090671	0.106908291090671
+16662	9927	8897	0.00902355166325831	0.00902355166325831
+16663	8897	8899	0.00817755039331079	0.00817755039331079
+16665	8896	8898	0.0955954321276197	0.0955954321276197
+16666	8898	3166	0.0120380596695599	0.0120380596695599
+16726	3074	5275	0.102580698126288	0.102580698126288
+16727	5275	6866	0.0979724094285353	0.0979724094285353
+17386	5920	919	0.177782086780631	0.177782086780631
+16728	6866	5172	0.198907590330119	0.198907590330119
+16730	8563	6368	0.270917565484422	0.270917565484422
+16731	6368	9149	0.131210826087923	0.131210826087923
+16779	73	3512	0.203753724402901	0.203753724402901
+16780	3512	4254	0.201507995491671	0.201507995491671
+16781	4254	8742	0.199898657335298	0.199898657335298
+16782	8742	8713	0.201418841949	0.201418841949
+16784	3511	4252	0.198740800817733	0.198740800817733
+16785	4252	8741	0.201811596521788	0.201811596521788
+16786	8741	8712	0.201811329628688	0.201811329628688
+16794	4264	8747	0.202686112287629	0.202686112287629
+16795	8747	8718	0.200629598901607	0.200629598901607
+16797	4264	9864	0.0549036584382557	0.0549036584382557
+16798	9864	6516	0.0494449113838383	0.0494449113838383
+16799	6516	9855	0.048981731510525	0.048981731510525
+16800	9855	6160	0.0501282016561891	0.0501282016561891
+16801	6160	9852	0.0487763612951203	0.0487763612951203
+16802	9852	2738	0.0474245519497852	0.0474245519497852
+16803	2738	9267	0.050437767682916	0.050437767682916
+16804	9267	4512	0.0485383641713966	0.0485383641713966
+16805	4512	9858	0.0494525517955229	0.0494525517955229
+16807	3171	9861	0.047855446066228	0.047855446066228
+16808	9861	4996	0.0491871460939442	0.0491871460939442
+16810	728	3665	0.0984709387661759	0.0984709387661759
+16811	3665	7315	0.0976596112157836	0.0976596112157836
+16812	7315	4586	0.099898936211385	0.099898936211385
+16813	4586	8032	0.100609280081376	0.100609280081376
+16814	8032	6372	0.100607138332673	0.100607138332673
+16815	6372	10015	0.0481181392934118	0.0481181392934118
+16816	10015	4826	0.0474935217651045	0.0474935217651045
+16817	4826	8954	0.102669069502609	0.102669069502609
+16818	8954	8956	0.0962963283421786	0.0962963283421786
+16819	8956	10016	0.0513191391251647	0.0513191391251647
+16820	10016	8816	0.0499640269903021	0.0499640269903021
+16821	8816	8828	0.0154260311566384	0.0154260311566384
+16822	8828	8206	0.163758839265649	0.163758839265649
+16824	7312	87	0.200996583193063	0.200996583193063
+16825	87	3523	0.203555810471145	0.203555810471145
+16826	3523	4264	0.199602301480838	0.199602301480838
+16828	7312	3648	0.154169800390109	0.154169800390109
+16832	10017	593	0.487939330962151	0.487939330962151
+16851	8718	9866	0.0548710295017979	0.0548710295017979
+16854	9854	6162	0.0501051333475743	0.0501051333475743
+16855	6162	9851	0.0483439490024107	0.0483439490024107
+16856	9851	2740	0.0471290060929331	0.0471290060929331
+16857	2740	9863	0.0493697108471136	0.0493697108471136
+16858	9863	5231	0.0496606668462506	0.0496606668462506
+16859	5231	9857	0.0497084193128251	0.0497084193128251
+16860	9857	3173	0.0501789646371779	0.0501789646371779
+16861	3173	9860	0.0494391268160734	0.0494391268160734
+16862	9860	4998	0.0489685461673918	0.0489685461673918
+16863	4998	10023	0.0484162493280967	0.0484162493280967
+16864	10023	730	0.0507353905968115	0.0507353905968115
+16865	730	7061	0.101358904320696	0.101358904320696
+16867	8718	5830	0.204166330856198	0.204166330856198
+16868	5830	7737	0.202033972193846	0.202033972193846
+16869	7737	10024	0.307945705057077	0.307945705057077
+16870	594	7303	0.202197872623945	0.202197872623945
+16871	7303	66	0.20266387330283	0.20266387330283
+16872	66	3507	0.204877942956717	0.204877942956717
+16873	3507	233	0.199133503403233	0.199133503403233
+16874	233	8739	0.200473333247617	0.200473333247617
+16876	9203	4390	0.147691017735613	0.147691017735613
+16878	1943	10025	0.122583563426404	0.122583563426404
+16879	10025	7860	0.110082433757866	0.110082433757866
+16880	7860	4679	0.101138191051348	0.101138191051348
+16881	4679	4942	0.0999327202014087	0.0999327202014087
+16882	4942	7214	0.0998696563081419	0.0998696563081419
+16883	7214	4928	0.0376169687692631	0.0376169687692631
+16884	4928	9636	0.014060573587084	0.014060573587084
+16886	9870	1167	0.138451400347842	0.138451400347842
+16887	1167	887	0.138706454254422	0.138706454254422
+16888	887	4471	0.139683302205089	0.139683302205089
+16890	9488	1170	0.13939401140641	0.13939401140641
+16891	1170	890	0.137058995578611	0.137058995578611
+16892	890	4474	0.140851028519895	0.140851028519895
+16893	4474	2796	0.132878137732711	0.132878137732711
+16894	2796	5265	0.13228574865076	0.13228574865076
+16895	5265	10026	0.123565762779561	0.123565762779561
+16896	5633	7143	0.082551113540924	0.082551113540924
+16899	8743	4255	0.199339176026767	0.199339176026767
+16905	6305	6456	0.135927811837651	0.135927811837651
+16906	6456	5521	0.134557743068365	0.134557743068365
+16907	5521	5744	0.134669392965434	0.134669392965434
+16908	5744	3224	0.133413468985769	0.133413468985769
+16909	3224	2456	0.134335811293817	0.134335811293817
+16910	2456	9365	0.137895860915298	0.137895860915298
+16911	9365	1677	0.134681074434199	0.134681074434199
+16912	1677	10027	0.135027096454707	0.135027096454707
+16913	10027	6891	0.134223449290887	0.134223449290887
+16914	6891	5239	0.133857055503606	0.133857055503606
+16915	5239	4520	0.134947645289316	0.134947645289316
+16916	4520	8229	0.133768415422039	0.133768415422039
+16917	8229	6091	0.136267738734572	0.136267738734572
+16918	6091	7927	0.0726325260844626	0.0726325260844626
+16919	7927	7846	0.0557691009082279	0.0557691009082279
+16920	7846	9410	0.0110872018563396	0.0110872018563396
+16921	9410	6730	0.0681749492551086	0.0681749492551086
+16922	6730	10028	0.0472579211328822	0.0472579211328822
+16923	10028	2954	0.0113307920442751	0.0113307920442751
+16924	2954	10029	0.0100409346238736	0.0100409346238736
+16925	10029	6168	0.125005736653953	0.125005736653953
+16926	6168	7701	0.0662611499745025	0.0662611499745025
+16927	7701	8987	0.0202942911891754	0.0202942911891754
+16928	8987	9213	0.01474166778393	0.01474166778393
+16929	9213	7708	0.0256851882115953	0.0256851882115953
+16930	7708	10030	0.0413405317485577	0.0413405317485577
+16931	10030	10031	0.036234422910969	0.036234422910969
+16932	10031	9423	0.0490701245377313	0.0490701245377313
+16934	10027	6419	0.132846643372958	0.132846643372958
+16935	6419	4626	0.132395451164353	0.132395451164353
+16936	4626	1249	0.132966501814055	0.132966501814055
+16937	1249	4558	0.132618380312988	0.132618380312988
+16938	4558	2727	0.131821083937229	0.131821083937229
+16939	2727	9343	0.133429127887654	0.133429127887654
+16941	8228	10032	0.0522172382940556	0.0522172382940556
+16942	10032	4519	0.0809723084454978	0.0809723084454978
+16943	4519	5238	0.135835767836828	0.135835767836828
+16944	5238	6890	0.133656501060031	0.133656501060031
+16945	6890	8682	0.133080513446367	0.133080513446367
+16946	8682	10033	0.014533820296874	0.014533820296874
+16947	10033	10034	0.045058130648326	0.045058130648326
+16948	10034	10035	0.0185816236497386	0.0185816236497386
+16949	10035	1675	0.0576680457580287	0.0576680457580287
+16950	1675	9364	0.135024432224183	0.135024432224183
+16955	10039	10040	0.0721995210382621	0.0721995210382621
+16958	10037	10041	0.0717852961267022	0.0717852961267022
+16966	10043	10031	0.025182886777608	0.025182886777608
+16969	10045	10039	0.0209823477511839	0.0209823477511839
+16971	8478	9438	0.0521271400869927	0.0521271400869927
+16972	9438	8905	0.0558565070780073	0.0558565070780073
+16974	8478	4846	0.326789742990523	0.326789742990523
+17070	9465	4599	0.173875508685798	0.173875508685798
+16976	8474	1065	0.0530498075975429	0.0530498075975429
+16977	1065	1604	0.0517738709202157	0.0517738709202157
+16978	1604	2199	0.109121538786623	0.109121538786623
+16979	2199	4846	0.101668961251418	0.101668961251418
+16981	8583	10046	0.0456665785984412	0.0456665785984412
+16982	10046	8467	0.0226345136731024	0.0226345136731024
+16983	8467	9624	0.0229241644266869	0.0229241644266869
+16985	2321	10047	0.097235186001144	0.097235186001144
+16987	4279	6406	0.146870704035985	0.146870704035985
+16988	6406	635	0.144187230253749	0.144187230253749
+16989	635	5325	0.14662773102424	0.14662773102424
+16990	5325	2031	0.146219173461136	0.146219173461136
+19672	10610	10608	0.149537813443153	0.149537813443153
+16991	2031	7082	0.144853503450252	0.144853503450252
+16992	7082	5509	0.146165117461088	0.146165117461088
+16993	5509	4460	0.146698487596664	0.146698487596664
+16994	4460	6579	0.146306787683811	0.146306787683811
+16995	6579	8050	0.147127627497255	0.147127627497255
+16996	8050	998	0.0663040704360148	0.0663040704360148
+16997	998	8404	0.225438240771773	0.225438240771773
+16998	8404	9322	0.147049060577026	0.147049060577026
+16999	9322	8853	0.146215405021224	0.146215405021224
+17000	8853	7901	0.148314641191611	0.148314641191611
+17001	7901	8294	0.139664345335099	0.139664345335099
+17002	8294	8275	0.153027219017765	0.153027219017765
+17003	8275	5787	0.145945595293254	0.145945595293254
+17004	5787	4818	0.144804477618788	0.144804477618788
+17005	4818	10048	0.148574277364319	0.148574277364319
+17006	10048	10049	0.141579838501947	0.141579838501947
+17007	10049	10050	0.0340492732837983	0.0340492732837983
+17012	10052	2402	0.196242393649725	0.196242393649725
+17032	8989	10060	0.00622693936167768	0.00622693936167768
+17033	10060	10061	0.0756461423573197	0.0756461423573197
+17034	10061	2960	0.00915137839377932	0.00915137839377932
+17036	9211	23	0.0239583762029722	0.0239583762029722
+17042	1225	7845	0.140995210775646	0.140995210775646
+17043	7845	6089	0.129051193087075	0.129051193087075
+17044	6089	8226	0.135326560563343	0.135326560563343
+17107	6692	328	0.0434519039634918	0.0434519039634918
+17046	1226	8903	0.113651762618459	0.113651762618459
+17048	10065	6628	1.29415946940766	1.29415946940766
+17050	10066	4340	0.062140618563636	0.062140618563636
+17051	4340	5636	0.138107358521106	0.138107358521106
+17052	5636	3565	0.143998480732308	0.143998480732308
+17053	3565	824	0.136450026224328	0.136450026224328
+17054	824	7840	0.139827641423356	0.139827641423356
+17055	7840	10067	0.139718785770158	0.139718785770158
+17056	10067	8131	0.276864248380317	0.276864248380317
+17058	2251	4883	0.177313835055438	0.177313835055438
+17059	4883	9473	0.195033286388948	0.195033286388948
+17060	9473	5482	0.176110607852179	0.176110607852179
+17187	10072	4065	0.107057267328692	0.107057267328692
+17188	4065	8344	0.135746766447532	0.135746766447532
+17189	8344	9289	0.134278993416053	0.134278993416053
+17190	9289	8342	0.133553201715071	0.133553201715071
+17191	8342	4289	0.132478531756059	0.132478531756059
+17192	4289	8346	0.0683305663670944	0.0683305663670944
+17193	8346	9426	0.0684183152680821	0.0684183152680821
+17194	9426	3584	0.0602567059919197	0.0602567059919197
+17195	3584	7710	0.0737335540738928	0.0737335540738928
+17196	7710	26	0.134781615428443	0.134781615428443
+17197	26	2966	0.136258381357618	0.136258381357618
+17256	4853	9479	0.17362135223772	0.17362135223772
+17257	9479	5456	0.178335939458279	0.178335939458279
+17258	5456	10081	0.171904914212928	0.171904914212928
+17259	10081	9468	0.0143846440391869	0.0143846440391869
+17260	9468	651	0.173171640777506	0.173171640777506
+17261	651	9463	0.177611656329381	0.177611656329381
+17262	9463	4619	0.178590206270819	0.178590206270819
+17263	4619	6483	0.145677633501431	0.145677633501431
+17264	6483	5356	0.195804224423801	0.195804224423801
+17272	3269	7248	0.202454633754466	0.202454633754466
+17273	7248	1925	0.201278474909205	0.201278474909205
+17274	1925	6124	0.199550873736161	0.199550873736161
+17275	6124	3214	0.201694321030812	0.201694321030812
+17277	8746	4263	0.201096167532594	0.201096167532594
+17278	4263	3522	0.200484985070532	0.200484985070532
+17279	3522	86	0.203786942061633	0.203786942061633
+17280	86	7311	0.202274691239897	0.202274691239897
+17313	8120	4330	0.101819432050732	0.101819432050732
+17314	4330	9933	0.0499862309964707	0.0499862309964707
+17315	9933	5036	0.0532026214375408	0.0532026214375408
+17316	5036	9934	0.0508858224299175	0.0508858224299175
+17317	9934	7989	0.0496485523816978	0.0496485523816978
+17318	7989	10087	0.0512786229284607	0.0512786229284607
+17319	10087	2893	0.052637962933787	0.052637962933787
+17320	2893	8384	0.104983198266762	0.104983198266762
+17321	8384	8544	0.106333933974543	0.106333933974543
+17322	8544	4732	0.104863197448763	0.104863197448763
+17323	4732	6799	0.109607467159477	0.109607467159477
+17325	7351	5397	0.105666168592591	0.105666168592591
+17326	5397	10067	0.0531956914071383	0.0531956914071383
+17327	10067	8558	0.0516135381916136	0.0516135381916136
+17328	8558	3899	0.109335032698536	0.109335032698536
+17329	3899	1035	0.101631825737619	0.101631825737619
+17330	1035	10070	0.0547697896222192	0.0547697896222192
+17331	10070	6274	0.051631982755097	0.051631982755097
+17332	6274	10071	0.0521047224845183	0.0521047224845183
+17333	10071	10088	0.0548081026494783	0.0548081026494783
+17334	10088	581	0.115692672611639	0.115692672611639
+17335	581	3544	1.0812915383048	1.0812915383048
+17336	3544	10089	0.426746641833072	0.426746641833072
+17337	10089	8702	0.015131733429425	0.015131733429425
+17338	8702	8151	0.097451189179214	0.097451189179214
+17340	1827	3084	0.201158270757163	0.201158270757163
+17341	3084	3196	0.201063388532037	0.201063388532037
+17342	3196	6111	0.203191571447184	0.203191571447184
+17343	6111	1904	0.198857964292004	0.198857964292004
+17344	1904	7240	0.195269710490606	0.195269710490606
+17345	7240	3253	0.196518038239943	0.196518038239943
+17347	10090	3086	0.200629327787617	0.200629327787617
+17348	3086	3198	0.202620201680719	0.202620201680719
+17349	3198	6113	0.202237159025195	0.202237159025195
+17350	6113	1907	0.200888583811516	0.200888583811516
+17351	1907	7242	0.194884252844044	0.194884252844044
+17352	7242	9217	0.00483789456398776	0.00483789456398776
+17353	9217	3256	0.188566052149982	0.188566052149982
+17354	3256	9215	0.0119202066492219	0.0119202066492219
+17355	9215	7298	0.204144558375252	0.204144558375252
+17356	7298	41	0.19415380637197	0.19415380637197
+17357	41	3541	0.205611824864656	0.205611824864656
+17358	3541	4237	0.201941106279095	0.201941106279095
+17359	4237	1797	0.206450634390855	0.206450634390855
+17360	1797	6524	0.103413068253841	0.103413068253841
+17377	9185	10092	0.0314361336881962	0.0314361336881962
+17384	10093	10094	0.234828178944131	0.234828178944131
+17401	4251	8740	0.200540582414647	0.200540582414647
+17403	10096	4253	0.402448073126268	0.402448073126268
+17404	4253	71	0.405085488859101	0.405085488859101
+17409	7246	3265	0.200993245572831	0.200993245572831
+17410	3265	7307	0.200743622516842	0.200743622516842
+17411	7307	77	0.204688793990349	0.204688793990349
+17413	10097	10082	0.0500367848211035	0.0500367848211035
+17415	10098	10099	0.0500389645311151	0.0500389645311151
+17416	10099	10082	0.0162280043989145	0.0162280043989145
+17418	10100	10101	0.0207018118679025	0.0207018118679025
+17430	10092	10048	0.0309885486655971	0.0309885486655971
+17431	10048	8614	0.0518778938210734	0.0518778938210734
+17432	8614	8472	0.0531907688732488	0.0531907688732488
+17433	8472	1066	0.0523689032311119	0.0523689032311119
+17434	1066	1606	0.051557001219416	0.051557001219416
+17435	1606	8366	0.139200065042292	0.139200065042292
+17437	6713	10092	0.0743345743256074	0.0743345743256074
+17441	3193	3081	0.201349842824614	0.201349842824614
+17442	3081	10108	0.178416289777232	0.178416289777232
+17444	3193	6109	0.202397968765167	0.202397968765167
+17445	6109	1899	0.201875824929032	0.201875824929032
+17446	1899	7237	0.199007784951822	0.199007784951822
+17447	7237	3247	0.203972993087409	0.203972993087409
+17449	10109	7288	0.156689817874906	0.156689817874906
+17450	7288	33	0.190916174685026	0.190916174685026
+17451	33	3532	0.205910894729705	0.205910894729705
+17452	3532	6522	0.0640042155752525	0.0640042155752525
+17454	3078	3192	0.201894846275699	0.201894846275699
+17455	3192	6108	0.201673919779454	0.201673919779454
+17456	6108	1898	0.20260827746412	0.20260827746412
+17457	1898	7236	0.20276033286578	0.20276033286578
+17458	7236	3246	0.202520180127379	0.202520180127379
+17459	3246	10110	0.0550544054800148	0.0550544054800148
+17460	10110	7286	0.154666066923182	0.154666066923182
+17461	7286	29	0.190176683040096	0.190176683040096
+17463	1900	7238	0.196467409698081	0.196467409698081
+17464	7238	3249	0.197271278467775	0.197271278467775
+17465	3249	7293	0.215893772854934	0.215893772854934
+17466	7293	35	0.191661158901488	0.191661158901488
+17467	35	3534	0.208592623812739	0.208592623812739
+17468	3534	6523	0.163291338158479	0.163291338158479
+17470	10108	5278	0.0774622106782589	0.0774622106782589
+17471	5278	3080	0.101220750760019	0.101220750760019
+17472	3080	3193	0.201400503113628	0.201400503113628
+17474	5940	471	0.312751802930415	0.312751802930415
+18580	7765	5716	0.0511772806374418	0.0511772806374418
+17491	10112	10093	0.359402757134602	0.359402757134602
+17492	10093	10113	0.194903624807864	0.194903624807864
+17493	10113	2201	0.0582804268216835	0.0582804268216835
+17494	2201	10114	0.186967502007765	0.186967502007765
+17495	10114	8390	0.0733141120559894	0.0733141120559894
+17496	8390	10115	0.462273198293161	0.462273198293161
+17498	9631	400	0.267469433354519	0.267469433354519
+17531	10127	4931	0.0143150280274793	0.0143150280274793
+17499	400	10116	0.288854082427149	0.288854082427149
+17500	10116	10117	0.226779392941661	0.226779392941661
+17539	8982	8937	0.19614593492264	0.19614593492264
+17501	10117	10118	0.252256323985904	0.252256323985904
+17502	10118	8413	0.301706026949727	0.301706026949727
+17504	10094	9835	0.207906613588927	0.207906613588927
+17542	10131	10132	0.234004969584105	0.234004969584105
+17547	8426	8983	0.15801309875704	0.15801309875704
+17550	10130	10134	0.614829488291655	0.614829488291655
+17551	7135	4849	0.106906878995063	0.106906878995063
+17552	4849	915	0.103932392061615	0.103932392061615
+17553	915	2299	0.103080430089244	0.103080430089244
+17554	2299	10137	0.014910815675823	0.014910815675823
+17556	10137	9054	0.0810396295718394	0.0810396295718394
+17558	10138	6943	0.064892686762443	0.064892686762443
+17559	6943	8140	0.201702874937987	0.201702874937987
+17560	8140	10139	0.469612869716675	0.469612869716675
+17562	7137	211	0.0939410437080962	0.0939410437080962
+17563	211	480	0.0535285680999835	0.0535285680999835
+17598	6899	5259	0.128421696790864	0.128421696790864
+17566	8539	10140	0.135369629803794	0.135369629803794
+17568	10141	10142	0.0931846548427409	0.0931846548427409
+17575	10147	10148	0.0907607828573939	0.0907607828573939
+17576	10148	9823	0.350917184183612	0.350917184183612
+17577	9823	9805	0.0148959688810153	0.0148959688810153
+17578	9805	10149	0.0247571116201832	0.0247571116201832
+17579	10149	8243	0.229215025506836	0.229215025506836
+17580	8243	9502	0.0511227471188157	0.0511227471188157
+17581	9502	7326	0.0563854594047154	0.0563854594047154
+17582	7326	5762	0.0999481200631645	0.0999481200631645
+17583	5762	7873	0.0518041802099649	0.0518041802099649
+17584	7873	10150	0.102000136506063	0.102000136506063
+17585	10150	5014	0.098101103191891	0.098101103191891
+17586	5014	5058	0.089850875454823	0.089850875454823
+18718	7866	4048	0.178217561946718	0.178217561946718
+17587	5058	10151	0.211959888507267	0.211959888507267
+17589	215	9282	0.125167866609679	0.125167866609679
+17591	213	9816	0.299047510838406	0.299047510838406
+17593	9229	9826	0.176982927136907	0.176982927136907
+17595	6940	10152	0.0583015149781026	0.0583015149781026
+18120	6030	10257	0.0455676937571294	0.0455676937571294
+17597	5060	6899	0.402535335538281	0.402535335538281
+17599	5259	2791	0.130368767280199	0.130368767280199
+17600	2791	4469	0.135446736738612	0.135446736738612
+17601	4469	884	0.138505584507757	0.138505584507757
+17602	884	1164	0.139078051750381	0.139078051750381
+17603	1164	9871	0.139057579408235	0.139057579408235
+17604	9871	8075	0.138249096495162	0.138249096495162
+17605	8075	10153	0.00462704346608534	0.00462704346608534
+17606	10153	3043	0.14110788802663	0.14110788802663
+17607	3043	6341	0.135895639019006	0.135895639019006
+17608	6341	4343	0.137400774019599	0.137400774019599
+17609	4343	5639	0.138956387861239	0.138956387861239
+17610	5639	3570	0.141821620771527	0.141821620771527
+17611	3570	830	0.137661147763222	0.137661147763222
+17612	830	7843	0.140550687821679	0.140550687821679
+17613	7843	10088	0.137593188904098	0.137593188904098
+17614	10088	9941	0.137660243266343	0.137660243266343
+17615	9941	8135	0.139584464123887	0.139584464123887
+17616	8135	3690	0.141707714550209	0.141707714550209
+17617	3690	4596	0.241404416022683	0.241404416022683
+17619	5016	3319	0.0948083090873271	0.0948083090873271
+17620	3319	8996	0.0798486506362173	0.0798486506362173
+17621	8996	7874	0.0190759275307072	0.0190759275307072
+17622	7874	5755	0.0623471034770475	0.0623471034770475
+17623	5755	5758	0.0361266791563275	0.0361266791563275
+17624	5758	7327	0.0520708883616353	0.0520708883616353
+17626	5016	10154	0.164101634929309	0.164101634929309
+17627	10155	2882	0.710681950052773	0.710681950052773
+17629	8136	6947	0.130119100803365	0.130119100803365
+17630	6947	10156	0.0163542378359644	0.0163542378359644
+17631	10156	10157	0.00955659663824098	0.00955659663824098
+17632	10157	10158	0.00677541465471327	0.00677541465471327
+17633	10158	10152	0.00293705056146173	0.00293705056146173
+17634	10152	6939	0.0371287028604903	0.0371287028604903
+17636	3318	10150	0.0438638328395073	0.0438638328395073
+17714	9945	8394	0.147641485758692	0.147641485758692
+17659	10160	586	0.405583280940818	0.405583280940818
+17672	10163	8930	0.930392444069162	0.930392444069162
+17675	9053	10164	0.0371557833436508	0.0371557833436508
+17693	2913	2780	0.0748123840669465	0.0748123840669465
+17694	2780	7147	0.116677483921202	0.116677483921202
+17696	9056	10047	0.141134759881648	0.141134759881648
+17698	7147	5254	0.0284105210258417	0.0284105210258417
+17699	5254	10166	0.132906284217118	0.132906284217118
+17701	6403	10167	0.108541157226703	0.108541157226703
+17703	6403	6401	0.049228330409525	0.049228330409525
+17705	10168	10169	0.0501555453420122	0.0501555453420122
+17707	10047	10169	0.0474349977604191	0.0474349977604191
+17708	10169	9056	0.0939811582148226	0.0939811582148226
+17710	9947	3675	0.0669754214474556	0.0669754214474556
+17712	9204	9945	0.144775125391256	0.144775125391256
+17715	8394	2691	0.147869553829969	0.147869553829969
+17716	2691	8040	0.145836065451416	0.145836065451416
+17717	8040	6567	0.144877875233717	0.144877875233717
+17718	6567	4448	0.14778294563884	0.14778294563884
+17719	4448	8414	0.0749502518363333	0.0749502518363333
+17720	8414	5496	0.069451420913351	0.069451420913351
+17721	5496	7070	0.148876703091943	0.148876703091943
+17722	7070	2040	0.14567151330703	0.14567151330703
+17723	2040	8073	0.130264739930752	0.130264739930752
+17725	8076	3328	0.0639927694114461	0.0639927694114461
+17728	7879	7332	0.105697567981392	0.105697567981392
+17730	2080	2677	0.104069678874741	0.104069678874741
+17731	2677	4126	0.107112553379611	0.107112553379611
+17732	4126	6682	0.108353172096875	0.108353172096875
+17734	7925	5320	0.0826824039230849	0.0826824039230849
+17735	5320	2041	0.146468953410165	0.146468953410165
+17736	2041	7072	0.146479190259677	0.146479190259677
+17737	7072	5498	0.148482454254276	0.148482454254276
+17738	5498	4450	0.145207190897223	0.145207190897223
+17739	4450	6569	0.147094399400618	0.147094399400618
+17740	6569	8042	0.145385409804858	0.145385409804858
+17741	8042	2693	0.146247210391541	0.146247210391541
+17742	2693	8396	0.145676314519276	0.145676314519276
+17743	8396	9946	0.148129197746433	0.148129197746433
+17744	9946	9324	0.145860656071838	0.145860656071838
+17745	9324	10171	0.0856023563285992	0.0856023563285992
+17746	10171	7893	0.060719319188507	0.060719319188507
+17747	7893	10172	0.145992330998255	0.145992330998255
+17749	8285	5779	0.146744468691812	0.146744468691812
+17750	5779	8575	0.145685998707777	0.145685998707777
+17752	6706	10173	0.0983542102154105	0.0983542102154105
+17754	8485	10174	0.145917669946454	0.145917669946454
+17755	10174	4934	0.364858401137942	0.364858401137942
+17757	8073	5319	0.0151134525874084	0.0151134525874084
+17758	5319	2906	0.0542680076543073	0.0542680076543073
+17760	9487	1173	0.143948575233632	0.143948575233632
+17761	1173	893	0.138648954033686	0.138648954033686
+17762	893	4476	0.138420042799995	0.138420042799995
+17763	4476	2799	0.139158608638433	0.139158608638433
+17764	2799	5267	0.125667753140422	0.125667753140422
+17765	5267	6904	0.122725840536987	0.122725840536987
+17766	6904	7758	0.206944002479267	0.206944002479267
+17767	7758	6358	0.203735904589123	0.203735904589123
+17768	6358	2391	0.110758482838084	0.110758482838084
+17769	2391	7822	0.137036631860385	0.137036631860385
+17771	9877	903	0.274330614761652	0.274330614761652
+17772	903	9481	0.129817379023696	0.129817379023696
+17775	5984	2102	0.100487934544075	0.100487934544075
+17776	2102	6508	0.243143603771944	0.243143603771944
+17778	6993	399	0.279873647693424	0.279873647693424
+17779	399	10175	0.059173942672277	0.059173942672277
+17780	10175	6196	0.0719242777998184	0.0719242777998184
+17782	6196	10175	0.0719242777998184	0.0719242777998184
+17784	10175	10177	0.187235722056553	0.187235722056553
+17789	998	8512	0.0641582208600105	0.0641582208600105
+17790	8512	3305	0.0698159988608895	0.0698159988608895
+17802	9953	10171	0.0758245915635617	0.0758245915635617
+17803	10171	8417	0.0691188092256886	0.0691188092256886
+17804	8417	7892	0.0154287387029138	0.0154287387029138
+17805	7892	9203	0.0639309073349984	0.0639309073349984
+17844	5741	5515	0.1393794725611	0.1393794725611
+17807	998	2698	0.471311768879255	0.471311768879255
+17809	2563	997	0.102700798846865	0.102700798846865
+17811	9490	10181	0.787839518624737	0.787839518624737
+17813	10182	10183	0.017972037737444	0.017972037737444
+17814	8277	10182	0.0269375538426571	0.0269375538426571
+17824	10189	9815	0.381548994115635	0.381548994115635
+17826	10190	2445	0.108497544218855	0.108497544218855
+17827	2445	3235	0.140113229632804	0.140113229632804
+17828	3235	5740	0.13721905173768	0.13721905173768
+17829	5740	5514	0.142685575827079	0.142685575827079
+17830	5514	6451	0.135469883258712	0.135469883258712
+17831	6451	6918	0.118104639956123	0.118104639956123
+17832	6918	8114	0.200145379388081	0.200145379388081
+17841	10191	2446	0.12170288352426	0.12170288352426
+17842	2446	3236	0.138990302772576	0.138990302772576
+17843	3236	5741	0.138828799197264	0.138828799197264
+17845	5515	6452	0.137212079229824	0.137212079229824
+17846	6452	6919	0.118102418388258	0.118102418388258
+17847	6919	8115	0.204539971673672	0.204539971673672
+17848	8115	2817	0.195950897476267	0.195950897476267
+17850	1418	10192	0.0403415193863986	0.0403415193863986
+17854	10196	10197	0.298773764193864	0.298773764193864
+17858	10197	10201	0.0878537760845695	0.0878537760845695
+17859	10202	292	0.12590153135235	0.12590153135235
+17860	292	10203	0.0920635687067585	0.0920635687067585
+17862	8296	912	0.421752257927472	0.421752257927472
+17863	912	7280	0.346969669094077	0.346969669094077
+17865	7279	911	0.343598202777143	0.343598202777143
+17866	911	8296	0.421457000722742	0.421457000722742
+17899	10211	10209	0.112127267328736	0.112127267328736
+17868	10204	293	0.122668884457017	0.122668884457017
+17870	7280	10204	0.11154380602626	0.11154380602626
+17872	7280	10202	0.113468069847095	0.113468069847095
+17874	10203	305	0.0245172766294025	0.0245172766294025
+17876	10205	9191	0.0917966102805814	0.0917966102805814
+17877	9191	9065	0.0437309955207218	0.0437309955207218
+17879	305	7972	0.0096955565592884	0.0096955565592884
+17880	7972	289	0.0364664216753188	0.0364664216753188
+17882	291	10205	0.0247656280633611	0.0247656280633611
+17884	5356	3010	0.0411976507153233	0.0411976507153233
+17885	3010	9955	0.055133452370554	0.055133452370554
+17887	4390	9202	0.103596100254428	0.103596100254428
+17888	9202	10172	0.106228487315193	0.106228487315193
+17889	10172	8635	0.104885206719794	0.104885206719794
+17890	8635	10207	0.0526738998782486	0.0526738998782486
+17891	10207	8290	0.0540408904782361	0.0540408904782361
+17893	10181	10208	0.34674805442663	0.34674805442663
+17895	9277	9062	0.54179107306149	0.54179107306149
+17897	10209	10210	0.15255018083046	0.15255018083046
+17901	9277	10208	0.265946775924501	0.265946775924501
+17902	10208	10211	0.215451375996435	0.215451375996435
+17904	4431	5085	0.143171262303537	0.143171262303537
+17905	5085	2810	0.11012443165944	0.11012443165944
+17906	2810	4675	0.158582360684903	0.158582360684903
+17908	10212	9184	0.112885017008347	0.112885017008347
+17909	9184	10213	0.167377068446941	0.167377068446941
+18960	10410	7220	0.0501782415904674	0.0501782415904674
+17922	6563	8888	0.042430320182906	0.042430320182906
+18662	7647	10214	0.0701815380438801	0.0701815380438801
+17924	6563	9296	0.044068382651895	0.044068382651895
+17926	10215	7090	0.0147548324313622	0.0147548324313622
+17928	10216	4749	0.0152354550229313	0.0152354550229313
+17930	7570	10217	0.020843135953545	0.020843135953545
+17931	10217	10218	0.00309719141124637	0.00309719141124637
+17932	10218	10219	0.0172058483004327	0.0172058483004327
+17933	10219	10220	0.0101474090092483	0.0101474090092483
+17934	10220	10221	0.0360135260366549	0.0360135260366549
+17972	4922	2816	0.0400924263132539	0.0400924263132539
+17974	2816	6585	0.00731734573972315	0.00731734573972315
+17975	6585	5367	0.200230086509337	0.200230086509337
+17976	5367	7125	0.155428268463703	0.155428268463703
+17977	7125	613	0.178580861083004	0.178580861083004
+17978	613	10025	0.175711834233665	0.175711834233665
+17979	10025	5802	0.173776139007193	0.173776139007193
+17981	10240	4687	0.0705066389488715	0.0705066389488715
+17983	4687	4687	0.000550727458732684	0.000550727458732684
+17984	4687	4687	0.000550727458732684	0.000550727458732684
+18009	8002	984	0.100041012213977	0.100041012213977
+17985	4687	10240	0.0700034048729296	0.0700034048729296
+18666	5656	5188	0.106406434125344	0.106406434125344
+17988	7225	10241	0.0510702903225008	0.0510702903225008
+17989	10241	10242	0.042886354540747	0.042886354540747
+17990	10242	10243	0.00251406456949564	0.00251406456949564
+17991	10243	10244	0.0456685462506317	0.0456685462506317
+17992	10244	6646	0.0418628731234282	0.0418628731234282
+17993	6646	10245	0.0664019508555837	0.0664019508555837
+17994	10245	3947	0.060646848519195	0.060646848519195
+17995	3947	5379	0.0623892176423501	0.0623892176423501
+17997	1213	10080	0.0402726084737909	0.0402726084737909
+17998	10080	10246	0.108362052771117	0.108362052771117
+17999	10246	10095	0.0546330327153493	0.0546330327153493
+18000	10095	8786	0.0549646837479	0.0549646837479
+18001	8786	8792	0.105830391023483	0.105830391023483
+18002	8792	3158	0.105240490373796	0.105240490373796
+18159	4090	6035	0.19402761072914	0.19402761072914
+18003	3158	4977	0.10185576028858	0.10185576028858
+18004	4977	10247	0.0996051433548501	0.0996051433548501
+18005	10247	9657	0.103966153648075	0.103966153648075
+18006	9657	6607	0.0489689324196462	0.0489689324196462
+18007	6607	5049	0.0497044916016373	0.0497044916016373
+18008	5049	8002	0.0987213073079673	0.0987213073079673
+18010	984	5105	0.0497125648622764	0.0497125648622764
+18011	5105	8832	0.0485496698653307	0.0485496698653307
+18012	8832	9412	0.0501680163419149	0.0501680163419149
+18013	9412	7150	0.0490112280018507	0.0490112280018507
+18014	7150	2798	0.0490643527188194	0.0490643527188194
+18015	2798	5116	0.0499797709026575	0.0499797709026575
+18016	5116	9330	0.049524695482998	0.049524695482998
+18017	9330	4715	0.0504823610322626	0.0504823610322626
+18018	4715	8873	0.0985202776506121	0.0985202776506121
+18019	8873	7354	0.0991107696717597	0.0991107696717597
+18020	7354	5413	0.108951695628557	0.108951695628557
+18022	8149	8697	0.098981334337126	0.098981334337126
+18023	8697	10248	0.0156545770448285	0.0156545770448285
+18025	10248	7104	0.0902072497093339	0.0902072497093339
+18026	7104	449	0.046531670732617	0.046531670732617
+18027	449	854	0.0445732430501775	0.0445732430501775
+18028	854	10249	0.0446596776858281	0.0446596776858281
+18029	10249	9698	0.0482515561513205	0.0482515561513205
+18030	9698	10250	0.0474036186605965	0.0474036186605965
+18031	10250	6018	0.047797038051314	0.047797038051314
+18032	6018	10251	0.0473952539943275	0.0473952539943275
+18033	10251	3455	0.0464887102201997	0.0464887102201997
+18034	3455	7682	0.0950045363584629	0.0950045363584629
+19711	10628	10629	0.0313669947000456	0.0313669947000456
+18035	7682	8018	0.0938092255843609	0.0938092255843609
+18036	8018	6695	0.0944228486315978	0.0944228486315978
+18037	6695	4132	0.0905761672491303	0.0905761672491303
+18727	7644	9832	0.176300161007389	0.176300161007389
+18729	6212	7649	0.275730709453964	0.275730709453964
+18038	4132	8863	0.0309494848264702	0.0309494848264702
+18039	8863	2633	0.0676202306028496	0.0676202306028496
+18040	2633	8861	0.0311034897002001	0.0311034897002001
+18041	8861	2052	0.0676910103216562	0.0676910103216562
+18042	2052	8871	0.0313177900642343	0.0313177900642343
+18043	8871	7982	0.067271802615166	0.067271802615166
+18044	7982	7981	0.0326778162339826	0.0326778162339826
+18045	7981	7321	0.0976461329299173	0.0976461329299173
+18046	7321	7887	0.0987923725207189	0.0987923725207189
+18047	7887	3343	0.0990941084892765	0.0990941084892765
+18048	3343	5022	0.0986991080291596	0.0986991080291596
+18049	5022	8729	0.0995709770506032	0.0995709770506032
+18050	8729	6262	0.0984844587143486	0.0984844587143486
+18051	6262	1012	0.100435040495632	0.100435040495632
+18052	1012	3920	0.0983845018704443	0.0983845018704443
+18053	3920	3146	0.0986126436689597	0.0986126436689597
+18054	3146	5413	0.0895267655685447	0.0895267655685447
+18056	7083	10246	0.183851267240735	0.183851267240735
+19713	10624	10625	0.048946191319968	0.048946191319968
+18057	10246	3811	0.198873820859187	0.198873820859187
+18058	3811	5919	0.153816946395634	0.153816946395634
+18059	5919	918	0.176756350909337	0.176756350909337
+18060	918	2205	0.200653782293274	0.200653782293274
+18061	2205	4854	0.158832380963048	0.158832380963048
+18062	4854	9478	0.174098421618631	0.174098421618631
+18063	9478	5457	0.176480352381434	0.176480352381434
+18065	10252	9243	0.056682383190515	0.056682383190515
+18067	9110	10252	0.0330932350677699	0.0330932350677699
+18069	10253	6203	0.215345161639468	0.215345161639468
+18071	9115	10254	0.0491155354462148	0.0491155354462148
+18075	10254	10255	0.0642041289943666	0.0642041289943666
+18076	10255	10253	0.0461489416178021	0.0461489416178021
+18077	10253	9108	0.280904320228077	0.280904320228077
+18106	4661	10263	0.0487469518611321	0.0487469518611321
+18107	10263	1291	0.0497384845482417	0.0497384845482417
+18108	1291	10264	0.0496989025904687	0.0496989025904687
+18109	10264	4563	0.0505706606603651	0.0505706606603651
+18110	4563	10265	0.0486836289638941	0.0486836289638941
+18111	10265	6287	0.0497296125808977	0.0497296125808977
+18112	6287	10135	0.0504212055729903	0.0504212055729903
+18113	10135	2731	0.0489350482169507	0.0489350482169507
+18114	2731	6420	0.048465461986869	0.048465461986869
+18115	6420	5790	0.0578817224647719	0.0578817224647719
+18117	8844	10266	0.374943168729483	0.374943168729483
+18166	2719	9346	0.101115603929332	0.101115603929332
+18167	9346	9392	0.0111914858812043	0.0111914858812043
+18168	9392	3751	0.0968414516342271	0.0968414516342271
+18169	3751	10278	0.0782538471461698	0.0782538471461698
+18175	4073	6058	0.198316836648763	0.198316836648763
+18176	6058	5798	0.200796475018558	0.200796475018558
+18197	6750	5252	0.185979531851002	0.185979531851002
+18198	5252	3974	0.035323188020151	0.035323188020151
+18200	9357	2431	0.202519432604137	0.202519432604137
+18201	2431	9370	0.199383622965617	0.199383622965617
+18202	9370	1686	0.206118508992277	0.206118508992277
+18203	1686	6875	0.204292305654176	0.204292305654176
+18588	6666	1137	0.0495387040987843	0.0495387040987843
+18589	1137	6968	0.0501615414722825	0.0501615414722825
+18590	6968	7504	0.0501273333828588	0.0501273333828588
+18591	7504	9407	0.0988444534637431	0.0988444534637431
+18592	9407	7479	0.0538727285881741	0.0538727285881741
+18593	7479	5581	0.0510099428615072	0.0510099428615072
+18594	5581	10328	0.0992130715738959	0.0992130715738959
+18595	10328	10329	0.693578278671619	0.693578278671619
+18597	1845	2579	0.175048810960168	0.175048810960168
+18598	2579	5177	0.17911429796522	0.17911429796522
+18599	5177	10332	0.0225943601934419	0.0225943601934419
+18604	6211	7648	0.275618961394926	0.275618961394926
+18605	7648	8065	0.262676196305861	0.262676196305861
+18711	2590	5183	0.178568260386205	0.178568260386205
+18712	5183	5651	0.104244503206479	0.104244503206479
+18747	6210	10338	0.0125158344567017	0.0125158344567017
+18748	10338	10206	0.0559739547988456	0.0559739547988456
+18749	10206	10338	0.0559739547988456	0.0559739547988456
+18751	2596	5186	0.177768815603995	0.177768815603995
+18758	2588	5182	0.176322049262719	0.176322049262719
+18759	5182	5650	0.106248688527315	0.106248688527315
+18765	10339	10341	0.0322810460432902	0.0322810460432902
+18767	4492	10342	0.0173161946805903	0.0173161946805903
+18768	10342	10341	0.00848220864637094	0.00848220864637094
+18770	5616	10343	0.00845077111169589	0.00845077111169589
+18771	10343	10344	0.0509950035054565	0.0509950035054565
+18772	10344	9634	0.100553817919852	0.100553817919852
+18950	6234	7639	0.179364622734642	0.179364622734642
+18789	10350	10131	1.72659496196287	1.72659496196287
+18791	10210	10350	0.0784105528331039	0.0784105528331039
+18793	9064	10351	0.108141289805084	0.108141289805084
+18795	10351	8944	0.165792281012932	0.165792281012932
+18797	8946	8970	0.101566925839608	0.101566925839608
+18805	431	8911	0.368100622266312	0.368100622266312
+18807	8935	10353	0.0653020622045421	0.0653020622045421
+18865	217	6354	0.250152442533131	0.250152442533131
+18867	10372	10373	0.00433033984408308	0.00433033984408308
+18809	2956	8964	0.839971785186466	0.839971785186466
+18811	10353	8914	0.0131507104865587	0.0131507104865587
+18813	10354	8436	0.0634565167907247	0.0634565167907247
+18815	8440	10354	0.130317184994069	0.130317184994069
+18818	8431	4422	0.07184295360215	0.07184295360215
+18820	8435	10355	0.137076541565926	0.137076541565926
+18825	9181	10356	0.159461421615407	0.159461421615407
+18827	10357	10358	0.20146281055654	0.20146281055654
+18829	9180	10359	0.028613707454695	0.028613707454695
+18833	10360	10361	0.0535066603860974	0.0535066603860974
+18835	10361	10362	0.0845690343766548	0.0845690343766548
+18836	10362	9179	0.0218653086870073	0.0218653086870073
+19605	10512	10584	0.0688213399515618	0.0688213399515618
+20576	10864	10865	0.0279630258161778	0.0279630258161778
+18838	10363	8434	0.438288246661524	0.438288246661524
+18840	8433	10364	0.0515496120111284	0.0515496120111284
+18842	10365	10363	0.0256601639624377	0.0256601639624377
+18844	10364	10365	0.0354783965202197	0.0354783965202197
+18848	10367	8387	0.416611762681733	0.416611762681733
+18850	10366	10367	0.0267687636085769	0.0267687636085769
+18852	10368	10369	0.0527715034881913	0.0527715034881913
+18854	10370	10368	0.0348446889076446	0.0348446889076446
+18856	10371	10370	0.031482834490968	0.031482834490968
+18858	9836	10370	0.0328670117804623	0.0328670117804623
+18921	10399	10400	0.0895277934361984	0.0895277934361984
+18922	10400	10401	0.16717380860502	0.16717380860502
+18923	10402	10383	0.0291115464827756	0.0291115464827756
+18924	10383	10403	0.0309778660865677	0.0309778660865677
+18925	10403	10390	0.0429604527526701	0.0429604527526701
+18927	10404	10405	0.0626862314087788	0.0626862314087788
+18930	10406	10405	0.108269005965165	0.108269005965165
+18932	1241	6737	0.0570520014832054	0.0570520014832054
+18934	8100	6923	0.164900679548878	0.164900679548878
+18936	6923	8099	0.163064822440362	0.163064822440362
+18938	7928	8098	0.0730856765280865	0.0730856765280865
+18940	4039	4644	0.0827836448037734	0.0827836448037734
+18943	10407	7448	0.103189406011465	0.103189406011465
+19852	10659	3379	0.102335766847439	0.102335766847439
+18945	4142	10108	0.0206474020512083	0.0206474020512083
+18947	5674	2620	0.178145491343884	0.178145491343884
+18948	2620	5201	0.177501253416424	0.177501253416424
+18949	5201	6234	0.174487220572856	0.174487220572856
+18951	7639	8773	0.176238488140281	0.176238488140281
+18952	8773	8053	0.178917033730472	0.178917033730472
+18953	8053	6598	0.176988972177145	0.176988972177145
+18954	6598	10243	0.175681180141988	0.175681180141988
+18956	1841	7856	0.0582284853716934	0.0582284853716934
+18957	7856	4669	0.101085168807405	0.101085168807405
+18979	1764	4509	0.0491583937075752	0.0491583937075752
+18980	4509	4971	0.0991296803100638	0.0991296803100638
+18981	4971	1516	0.0482432726972035	0.0482432726972035
+18982	1516	5304	0.0536166306041211	0.0536166306041211
+18983	5304	7951	0.0505628420768163	0.0505628420768163
+18984	7951	7950	0.0124795676036534	0.0124795676036534
+18985	7950	1083	0.0132964314605761	0.0132964314605761
+18986	1083	8958	0.019091432638578	0.019091432638578
+18987	8958	1750	0.0565301426139895	0.0565301426139895
+18988	1750	6636	0.100698502633469	0.100698502633469
+18989	6636	5425	0.0992142460676437	0.0992142460676437
+18990	5425	7398	0.100582854167636	0.100582854167636
+18992	5674	10413	0.0446816032988726	0.0446816032988726
+18993	10413	6641	0.0419959523464037	0.0419959523464037
+18994	6641	3958	0.140215488391596	0.140215488391596
+18997	9265	10213	0.108979878639585	0.108979878639585
+19957	10683	10676	0.203409384148671	0.203409384148671
+18998	10213	9182	0.221716360786737	0.221716360786737
+18999	9182	4360	0.00485021965067944	0.00485021965067944
+19000	4360	6082	0.123504109096694	0.123504109096694
+19240	10459	8221	0.147319836582293	0.147319836582293
+19002	1269	4533	0.203350040591983	0.203350040591983
+19003	4533	8579	0.198512187124204	0.198512187124204
+19005	1841	2613	0.177111353706323	0.177111353706323
+19006	2613	10414	0.0530626159965885	0.0530626159965885
+19007	10414	5196	0.124494794308613	0.124494794308613
+19008	5196	6239	0.171651899926933	0.171651899926933
+19010	4186	4182	0.0154308679587021	0.0154308679587021
+19011	4182	3367	0.101326829934178	0.101326829934178
+19012	3367	3370	0.0389167828857067	0.0389167828857067
+19013	3370	10415	0.0493793417329401	0.0493793417329401
+19014	10415	7424	0.0519282840216647	0.0519282840216647
+19015	7424	10416	0.0508505433229276	0.0508505433229276
+19016	10416	7831	0.0497300351350067	0.0497300351350067
+19017	7831	9197	0.188452322853961	0.188452322853961
+19019	5549	10417	0.0198343104325793	0.0198343104325793
+19020	10417	2562	0.366597076665755	0.366597076665755
+19021	2562	9783	0.236171353579108	0.236171353579108
+19022	9783	9781	0.00643634199106272	0.00643634199106272
+19958	10676	10668	0.135367639799285	0.135367639799285
+19023	9781	9160	0.00367738923970995	0.00367738923970995
+19025	9156	9260	0.0939135311905937	0.0939135311905937
+19040	10419	435	0.0296899237003876	0.0296899237003876
+19042	6361	6912	0.413025051484806	0.413025051484806
+19043	6912	5272	0.122458972713872	0.122458972713872
+19044	5272	2806	0.132101617817113	0.132101617817113
+19045	2806	9480	0.135002111088791	0.135002111088791
+19046	9480	901	0.134968752710231	0.134968752710231
+19048	9486	9873	0.018915562611857	0.018915562611857
+19049	9873	3055	0.182137362251337	0.182137362251337
+19050	3055	9669	0.205422822851571	0.205422822851571
+19051	9669	4352	0.202508200405289	0.202508200405289
+19052	4352	7924	0.0557579828978423	0.0557579828978423
+19053	7924	7923	0.106391305814005	0.106391305814005
+19054	7923	3580	0.0580075342624614	0.0580075342624614
+19055	3580	788	0.184224770380015	0.184224770380015
+19056	788	10089	0.199795465587569	0.199795465587569
+19057	10089	491	0.20084069572648	0.20084069572648
+19058	491	489	0.205477824650125	0.205477824650125
+19059	489	4589	0.272976340428597	0.272976340428597
+19060	4589	1978	0.12991989572877	0.12991989572877
+19061	1978	1994	0.0147512164813181	0.0147512164813181
+19062	1994	705	0.187141061542779	0.187141061542779
+19063	705	642	0.0623803538473296	0.0623803538473296
+19064	642	10422	0.140896965982946	0.140896965982946
+19067	9469	4898	0.180547202392339	0.180547202392339
+19068	4898	4899	0.0469687370152221	0.0469687370152221
+19069	4899	9422	0.11449972298661	0.11449972298661
+19070	9422	2230	0.0888113879114828	0.0888113879114828
+19071	2230	961	0.0851419553312056	0.0851419553312056
+19072	961	5943	0.118166848545009	0.118166848545009
+19073	5943	8869	0.0594604755013997	0.0594604755013997
+19074	8869	3766	0.149125823202066	0.149125823202066
+19075	3766	10248	0.200641473563849	0.200641473563849
+19076	10248	1211	0.0471365210908597	0.0471365210908597
+19077	1211	8567	0.147435833594552	0.147435833594552
+19078	8567	6541	0.161851618274563	0.161851618274563
+19079	6541	4746	0.176177241775495	0.176177241775495
+19081	4159	2359	0.17021782028236	0.17021782028236
+19082	2359	9694	0.178145500592375	0.178145500592375
+19083	9694	5170	0.174004040417809	0.174004040417809
+19085	6362	6447	0.0914589915157797	0.0914589915157797
+19086	6447	2399	0.0149004167256546	0.0149004167256546
+19087	2399	9454	0.2205749898237	0.2205749898237
+19089	519	831	0.121986604363099	0.121986604363099
+19090	831	10147	0.141772461765667	0.141772461765667
+19091	10147	10428	0.0119979325853114	0.0119979325853114
+19093	8145	9501	0.0198122134799104	0.0198122134799104
+19094	9501	1751	0.0440125388452957	0.0440125388452957
+19095	1751	6012	0.168131959250809	0.168131959250809
+19096	6012	832	0.205336624614562	0.205336624614562
+19097	832	518	0.168135736431663	0.168135736431663
+19098	518	6513	0.0279910233322091	0.0279910233322091
+19099	6513	10419	0.0139795197071191	0.0139795197071191
+19102	10049	8612	0.0522928783615643	0.0522928783615643
+19103	8612	8474	0.0521996072275175	0.0521996072275175
+19142	5220	8777	0.146640601075408	0.146640601075408
+19105	10430	10358	0.245136281681027	0.245136281681027
+19108	5628	9568	0.110078124608504	0.110078124608504
+19110	8421	10357	0.296407311680596	0.296407311680596
+19114	2386	9558	0.0348995825647377	0.0348995825647377
+19115	9558	8798	0.125658984531748	0.125658984531748
+19120	8185	9450	0.339524971346509	0.339524971346509
+19121	9450	8690	0.0176125961717604	0.0176125961717604
+19122	8690	7659	0.0477249226862614	0.0477249226862614
+19123	7659	6718	0.103225505465316	0.103225505465316
+19125	2190	8128	0.151455687504874	0.151455687504874
+19126	8128	7827	0.106341251390527	0.106341251390527
+19127	7827	10432	0.221434541654845	0.221434541654845
+19128	10432	6961	0.0131395719721806	0.0131395719721806
+19129	6961	10433	0.0134328380462519	0.0134328380462519
+19130	10433	10434	0.0869062764565781	0.0869062764565781
+19131	10434	8597	0.00983583049657532	0.00983583049657532
+19132	8597	10435	0.0222534876112211	0.0222534876112211
+19134	10050	3168	0.0821216282435351	0.0821216282435351
+19141	7961	5220	0.0901667996290929	0.0901667996290929
+19144	8388	10437	0.320984694668417	0.320984694668417
+19146	10437	6962	0.186002986440568	0.186002986440568
+19147	6962	10438	0.0184374963317956	0.0184374963317956
+19148	10438	1881	0.209774050468257	0.209774050468257
+19149	1881	8569	0.224745848084877	0.224745848084877
+19150	8569	9988	0.0831717180377924	0.0831717180377924
+19151	9988	8477	0.0648356679758423	0.0648356679758423
+19152	8477	8463	0.0835421546655635	0.0835421546655635
+19960	9517	10684	0.210192276965542	0.210192276965542
+19154	8800	8811	0.31904932389546	0.31904932389546
+19162	10428	3871	0.0534454265709194	0.0534454265709194
+19163	3871	840	0.0992542187222657	0.0992542187222657
+19164	840	4272	0.128018795895479	0.128018795895479
+19166	9283	10439	0.0445989165425857	0.0445989165425857
+19168	10440	9282	0.395349042842448	0.395349042842448
+19170	7136	2300	0.0954980884416659	0.0954980884416659
+19171	2300	6804	0.197911548357853	0.197911548357853
+19173	7956	8539	0.0718200140953678	0.0718200140953678
+19174	8539	9282	0.0117697082839477	0.0117697082839477
+19176	10442	1349	0.0573473302810492	0.0573473302810492
+19178	10443	8521	0.0309849382045455	0.0309849382045455
+19180	10151	10440	0.0401979143660666	0.0401979143660666
+19182	10439	5059	0.220890379574485	0.220890379574485
+19183	5059	5013	0.0908635547178716	0.0908635547178716
+19184	5013	3349	0.0925982666666752	0.0925982666666752
+19185	3349	7877	0.0609717199349519	0.0609717199349519
+19186	7877	5761	0.0981025803398981	0.0981025803398981
+19187	5761	7325	0.0996396951750833	0.0996396951750833
+19961	10684	10674	0.204298559687633	0.204298559687633
+19188	7325	2064	0.0938077886809335	0.0938077886809335
+20575	10863	10864	0.0111548544892698	0.0111548544892698
+19189	2064	2650	0.094440127839499	0.094440127839499
+19801	7638	6235	0.180302575380181	0.180302575380181
+19190	2650	10444	0.141197448312795	0.141197448312795
+19191	10444	9821	0.0323105619062287	0.0323105619062287
+19192	9821	9822	0.0144436267959073	0.0144436267959073
+19193	9822	3476	0.28088366035949	0.28088366035949
+19194	3476	10445	0.0704996285836985	0.0704996285836985
+19195	10445	10428	0.0905303391563005	0.0905303391563005
+19197	10167	10442	0.0431387292722099	0.0431387292722099
+19199	8408	8568	0.191490020507546	0.191490020507546
+19200	8568	10012	0.119004756390235	0.119004756390235
+19335	8631	10474	0.189944426919074	0.189944426919074
+19201	10012	8461	0.097400081996938	0.097400081996938
+19203	4275	3348	0.0888431357806069	0.0888431357806069
+19204	3348	7876	0.0640319779657538	0.0640319779657538
+19205	7876	5760	0.0967358830871852	0.0967358830871852
+19206	5760	7324	0.101239369924108	0.101239369924108
+19207	7324	2063	0.0946165731852714	0.0946165731852714
+19208	2063	2649	0.0935569331707932	0.0935569331707932
+19209	2649	4105	0.0971375052394303	0.0971375052394303
+19210	4105	6689	0.0855494277301445	0.0855494277301445
+19211	6689	356	0.101026474697068	0.101026474697068
+19212	356	7688	0.0921469063041614	0.0921469063041614
+19213	7688	3475	0.0946165920204556	0.0946165920204556
+19215	6939	9228	0.0827641347919428	0.0827641347919428
+19216	9228	6380	0.0767643689707359	0.0767643689707359
+19217	6380	5058	0.0447215279971903	0.0447215279971903
+19219	5015	3318	0.0976390934138488	0.0976390934138488
+19221	7829	10449	0.170073568021036	0.170073568021036
+19222	9276	9490	0.227893235973284	0.227893235973284
+19224	5808	10450	0.0444182254226453	0.0444182254226453
+19228	10452	10453	0.00899294746602318	0.00899294746602318
+19262	561	8788	0.108355823884287	0.108355823884287
+19264	10465	10081	0.106367191723871	0.106367191723871
+19265	10081	9467	0.08060964495203	0.08060964495203
+19376	8634	10174	0.107642527980188	0.107642527980188
+19283	1943	10467	0.139113140483037	0.139113140483037
+19284	10467	1941	0.145058671955531	0.145058671955531
+19309	10472	10450	0.0244300101434338	0.0244300101434338
+19310	10450	6986	0.0907684588887198	0.0907684588887198
+19311	6986	649	0.0550434251335652	0.0550434251335652
+19312	649	9973	0.0116984093357102	0.0116984093357102
+19313	9973	6700	0.0127993614182147	0.0127993614182147
+20578	10796	10801	0.065843170036926	0.065843170036926
+19315	5030	10465	0.0131766099040461	0.0131766099040461
+19316	10465	339	0.0452586039857602	0.0452586039857602
+19317	339	10468	0.0402192785877108	0.0402192785877108
+19318	10468	1941	0.0852977829408983	0.0852977829408983
+19319	1941	610	0.177606555639393	0.177606555639393
+19320	610	4852	0.177691892562915	0.177691892562915
+19321	4852	2203	0.156985921773534	0.156985921773534
+19324	5917	1620	0.152034755665853	0.152034755665853
+19325	1620	1212	0.201729915857126	0.201729915857126
+19326	1212	8782	0.0140233440789759	0.0140233440789759
+19336	4837	9074	0.0183273901669081	0.0183273901669081
+19338	9315	9317	0.0726807266351068	0.0726807266351068
+19339	9317	8692	0.104147766047402	0.104147766047402
+19341	9315	1952	0.0315809029571794	0.0315809029571794
+19343	10140	10142	0.0644750868788433	0.0644750868788433
+19344	10142	10475	0.0151531719907858	0.0151531719907858
+19345	10475	7137	0.053510410167183	0.053510410167183
+19347	480	9282	0.132450958735296	0.132450958735296
+19348	9282	10138	0.0564427245863012	0.0564427245863012
+19350	8464	10476	0.175984833399768	0.175984833399768
+19352	10047	5253	0.112186249238367	0.112186249238367
+19353	5253	2320	0.0249537355545513	0.0249537355545513
+19355	10166	6401	0.0992919669903468	0.0992919669903468
+19359	10479	9948	0.0516511853374245	0.0516511853374245
+19360	9948	8509	0.0517093587612889	0.0517093587612889
+19362	6189	10479	0.146782090008868	0.146782090008868
+19387	10455	5805	0.0524139320350963	0.0524139320350963
+19364	10047	10168	0.0607581388382602	0.0607581388382602
+19365	10168	10480	0.0679196955639713	0.0679196955639713
+19366	10480	6401	0.0390713513194924	0.0390713513194924
+19367	6401	10481	0.052200136280437	0.052200136280437
+19368	10481	6166	0.221487121294822	0.221487121294822
+19369	6166	4284	0.1514940030025	0.1514940030025
+19371	2320	2779	0.107781391844326	0.107781391844326
+20580	10867	10868	0.0137448223074376	0.0137448223074376
+20581	10868	10869	0.0278742902489333	0.0278742902489333
+19372	2779	2913	0.05305189541044	0.05305189541044
+19374	8509	9595	0.106794270102757	0.106794270102757
+19375	9595	8634	0.102427753876907	0.102427753876907
+19377	10174	10482	0.096139738297761	0.096139738297761
+19378	10482	9194	0.00978224253563326	0.00978224253563326
+19380	4397	3002	0.108243017625134	0.108243017625134
+19381	3002	10484	0.0989194559777293	0.0989194559777293
+19382	10484	5962	0.00617092845740214	0.00617092845740214
+19383	5962	10485	0.00542857584263607	0.00542857584263607
+19384	10485	10459	0.0472755549262459	0.0472755549262459
+19385	10459	7579	0.0528643874539915	0.0528643874539915
+19429	7287	32	0.190572580502828	0.190572580502828
+19386	7579	10455	0.0523778989124976	0.0523778989124976
+19423	10488	7294	0.0690612889349745	0.0690612889349745
+19424	7294	36	0.192538942320683	0.192538942320683
+19388	5805	10462	0.081956103355699	0.081956103355699
+19389	10462	8768	0.0169741195442503	0.0169741195442503
+19391	6189	9950	0.0503550239981861	0.0503550239981861
+19392	9950	7557	0.0535053183585621	0.0535053183585621
+19393	7557	9952	0.0524048074288428	0.0524048074288428
+19394	9952	10429	0.0135095901515659	0.0135095901515659
+19396	10479	9627	0.0675900234291702	0.0675900234291702
+19400	3201	6115	0.203275445399412	0.203275445399412
+19401	6115	1910	0.199619230795837	0.199619230795837
+19402	1910	9218	0.202850123370343	0.202850123370343
+19403	9218	9216	0.20345414072247	0.20345414072247
+19404	9216	7300	0.200631055524996	0.200631055524996
+19405	7300	45	0.202263602143448	0.202263602143448
+19406	45	3545	0.200651259904661	0.200651259904661
+19407	3545	4239	0.201942446714699	0.201942446714699
+19408	4239	1800	0.2054130837632	0.2054130837632
+19409	1800	8710	0.197537787183869	0.197537787183869
+19410	8710	6527	0.132676718293593	0.132676718293593
+19695	8145	9492	0.255789380087541	0.255789380087541
+19697	10419	10619	0.294868097569216	0.294868097569216
+19806	10411	7868	0.176421872480467	0.176421872480467
+19698	10619	10620	0.511264415982815	0.511264415982815
+19699	6199	496	0.110329672635447	0.110329672635447
+19700	496	10419	0.128549351195957	0.128549351195957
+19704	10623	10624	0.299844457035978	0.299844457035978
+19705	10624	10625	0.048946191319968	0.048946191319968
+19706	10625	10626	0.0564187161790662	0.0564187161790662
+19707	10626	10627	0.261222980592435	0.261222980592435
+19717	10626	10634	0.247667737296111	0.247667737296111
+19925	10679	9511	0.20648099094332	0.20648099094332
+19926	9511	4579	0.132833459370163	0.132833459370163
+19930	10680	10673	0.208792718350027	0.208792718350027
+19931	10673	7131	0.201766496696079	0.201766496696079
+19933	626	10681	0.1702021482017	0.1702021482017
+19934	5672	10665	0.0500710082270115	0.0500710082270115
+19935	10665	7218	0.0509007134728753	0.0509007134728753
+19937	252	10245	0.178490785331426	0.178490785331426
+19938	10245	7120	0.17638987203806	0.17638987203806
+19939	7120	9641	0.177259535907282	0.177259535907282
+19944	10675	10682	0.203454780542957	0.203454780542957
+19945	10682	9518	0.211007495388792	0.211007495388792
+19946	9518	4583	0.129742461291969	0.129742461291969
+19948	10646	7221	0.050795229275335	0.050795229275335
+19949	7221	10672	0.0490058421037179	0.0490058421037179
+19950	10672	4950	0.0520761745786515	0.0520761745786515
+19954	10414	5089	0.112638269786332	0.112638269786332
+19956	9520	10683	0.208034746403896	0.208034746403896
+19992	10649	10664	0.050141841785608	0.050141841785608
+19993	10664	10683	0.0505455538112256	0.0505455538112256
+19994	10683	5590	0.0494937724947863	0.0494937724947863
+19995	5590	10661	0.0507309659863408	0.0507309659863408
+19996	10661	7533	0.0505856564507496	0.0505856564507496
+19997	7533	10689	0.686347942133366	0.686347942133366
+19998	8645	2200	0.0278160442123186	0.0278160442123186
+20003	2200	10693	0.020138493184414	0.020138493184414
+20004	10693	10443	0.00475150856262823	0.00475150856262823
+20006	8461	9621	0.0222962026291256	0.0222962026291256
+20007	9621	10690	0.0515741214544805	0.0515741214544805
+20026	9466	8724	0.0514719719174867	0.0514719719174867
+20027	8724	5029	0.0566937822140094	0.0566937822140094
+20028	5029	4595	0.0969267875718062	0.0969267875718062
+20030	5321	630	0.142142547339574	0.142142547339574
+20031	630	2908	0.116052443784823	0.116052443784823
+20039	10696	5549	0.959761090863438	0.959761090863438
+20040	5549	9172	0.201153438061066	0.201153438061066
+20042	140	1484	0.198676673012775	0.198676673012775
+20043	1484	3760	0.212665318664513	0.212665318664513
+20044	3760	4181	0.394425022611864	0.394425022611864
+20045	4181	7302	0.250045496408828	0.250045496408828
+20046	7302	9078	0.0121023798774685	0.0121023798774685
+419	418	419	0.0843359701726921	0.0843359701726921
+20049	9127	9931	0.188027723664679	0.188027723664679
+20051	9189	10417	0.27289630775387	0.27289630775387
+20052	10417	10698	0.903351534370563	0.903351534370563
+20055	5803	10456	0.063915425232113	0.063915425232113
+20056	10456	8278	0.0463525975312068	0.0463525975312068
+20057	8278	7582	0.0531670184257572	0.0531670184257572
+20586	10860	10865	0.0197306093936785	0.0197306093936785
+20058	7582	10460	0.0605194201118807	0.0605194201118807
+20059	10460	5965	0.08096413889014	0.08096413889014
+20060	5965	7403	0.00793698029885246	0.00793698029885246
+20061	7403	7216	0.100604138655543	0.100604138655543
+20062	7216	2998	0.041051117053356	0.041051117053356
+20064	4930	9632	0.0194691711485179	0.0194691711485179
+20066	8788	8794	0.107030125953622	0.107030125953622
+20067	8794	8875	0.105785558321332	0.105785558321332
+20068	8875	7355	0.0541942506273543	0.0541942506273543
+20069	7355	8881	0.0482515848497253	0.0482515848497253
+20070	8881	7128	0.0482774346717123	0.0482774346717123
+20071	7128	9311	0.0491067830497851	0.0491067830497851
+20072	9311	9658	0.100701059147573	0.100701059147573
+20073	9658	5054	0.0949533068688616	0.0949533068688616
+20074	5054	5041	0.0261633102483298	0.0261633102483298
+20075	5041	6318	0.0238469793810048	0.0238469793810048
+20077	8004	7999	0.0412811844037432	0.0412811844037432
+20078	7999	5161	0.00972594837361757	0.00972594837361757
+20079	5161	976	0.0450966381773304	0.0450966381773304
+20080	976	9235	0.0690703393173828	0.0690703393173828
+20081	9235	8835	0.0284556853366966	0.0284556853366966
+20082	8835	7138	0.0744435936983682	0.0744435936983682
+20083	7138	7152	0.0242079619729824	0.0242079619729824
+20084	7152	5018	0.0530487604133438	0.0530487604133438
+20085	5018	5127	0.027179522018167	0.027179522018167
+20086	5127	5120	0.017329383802427	0.017329383802427
+20087	5120	9413	0.051025645765313	0.051025645765313
+20088	9413	4720	0.0442143222009164	0.0442143222009164
+20089	4720	6788	0.103544897956421	0.103544897956421
+20090	6788	7360	0.101885712989061	0.101885712989061
+20091	7360	5420	0.104686903511504	0.104686903511504
+20092	5420	8551	0.104297582912284	0.104297582912284
+20093	8551	3891	0.113854917229397	0.113854917229397
+20094	3891	1021	0.10275177677768	0.10275177677768
+20095	1021	10069	0.0524825810706004	0.0524825810706004
+20096	10069	6266	0.0519011168646154	0.0519011168646154
+20097	6266	8727	0.107637396904871	0.107637396904871
+20098	8727	5027	0.0851589615138914	0.0851589615138914
+20099	5027	3339	0.11913667157964	0.11913667157964
+20100	3339	7884	0.0947347804724537	0.0947347804724537
+20101	7884	7339	0.0992406279882494	0.0992406279882494
+20588	10840	3589	0.00659451799404467	0.00659451799404467
+20102	7339	7978	0.0297388680985265	0.0297388680985265
+20103	7978	8546	0.0509861753484279	0.0509861753484279
+20105	2065	2068	0.0539613780445048	0.0539613780445048
+20106	2068	2651	0.0458462130492323	0.0458462130492323
+20107	2651	2668	0.0527824371940605	0.0527824371940605
+20108	2668	4106	0.0471315276476818	0.0471315276476818
+20109	4106	4138	0.0531150768123695	0.0531150768123695
+20110	4138	6691	0.0513109258939151	0.0513109258939151
+20111	6691	6699	0.049849518680298	0.049849518680298
+20112	6699	8027	0.0540642003294053	0.0540642003294053
+20113	8027	8022	0.0351680439773276	0.0351680439773276
+20114	8022	7697	0.0642576699742132	0.0642576699742132
+20116	7687	3442	0.0653852338257918	0.0653852338257918
+20117	3442	3465	0.0302046503739114	0.0302046503739114
+20118	3465	10643	0.044572996690839	0.044572996690839
+20119	10643	6010	0.0210253210935206	0.0210253210935206
+20120	6010	6022	0.0302819861909932	0.0302819861909932
+20121	6022	3877	0.0720170103408001	0.0720170103408001
+20122	3877	9699	0.0188604413742797	0.0188604413742797
+20123	9699	862	0.0931148831029757	0.0931148831029757
+20124	862	7102	0.0867114852734781	0.0867114852734781
+20125	7102	10422	0.0971484542236891	0.0971484542236891
+20126	10422	8701	0.0148135271633134	0.0148135271633134
+20127	8701	8159	0.0903601598115808	0.0903601598115808
+20128	8159	8147	0.0485272097981868	0.0485272097981868
+20129	8147	7605	0.046972846594418	0.046972846594418
+20130	7605	7256	0.0980906813073136	0.0980906813073136
+20131	7256	7592	0.0949493294075893	0.0949493294075893
+20132	7592	2011	0.0535765472330524	0.0535765472330524
+20133	2011	9174	0.0440404642371946	0.0440404642371946
+20134	9174	10644	0.101018897202585	0.101018897202585
+20135	10644	2752	0.0964161425505398	0.0964161425505398
+12318	2500	2501	0.00534847597168918	0.00534847597168918
+20137	6988	7015	0.0469900401605619	0.0469900401605619
+20138	7015	2275	0.0506564830109395	0.0506564830109395
+20139	2275	8216	0.0480971521401402	0.0480971521401402
+20140	8216	3600	0.0492447661071067	0.0492447661071067
+20141	3600	8213	0.0494471155350359	0.0494471155350359
+20142	8213	7515	0.0477024371424333	0.0477024371424333
+20143	7515	7526	0.0508405166895622	0.0508405166895622
+20144	7526	4566	0.0460266764289813	0.0460266764289813
+20145	4566	2124	0.0528615774272691	0.0528615774272691
+20146	2124	5990	0.094672374588883	0.094672374588883
+20147	5990	7671	0.0990838490707958	0.0990838490707958
+20179	10247	9298	0.182738392624498	0.182738392624498
+20180	9298	6549	0.169619845811395	0.169619845811395
+20182	4768	6330	0.178054483343927	0.178054483343927
+20183	6330	9308	0.0134883336553362	0.0134883336553362
+20148	7671	10702	3.41813541281698	3.41813541281698
+20149	425	10112	0.0131850564749253	0.0131850564749253
+20186	8247	10155	0.516700602330837	0.516700602330837
+20187	10155	3322	0.265485774934506	0.265485774934506
+20188	3322	10706	0.131436234594263	0.131436234594263
+20189	10139	10705	0.06021736831636	0.06021736831636
+20195	8510	10708	0.0176825351734809	0.0176825351734809
+20197	10708	8571	0.116072750239478	0.116072750239478
+20199	5783	8281	0.147480988666932	0.147480988666932
+20200	8281	8293	0.145093730312322	0.145093730312322
+20201	8293	7900	0.146177040292133	0.146177040292133
+20202	7900	8854	0.145687210047232	0.145687210047232
+20203	8854	9321	0.148905174298523	0.148905174298523
+20206	8401	5454	0.142235461954992	0.142235461954992
+20207	5454	8504	0.00556744232684514	0.00556744232684514
+20208	8504	8047	0.149428079475645	0.149428079475645
+20209	8047	6575	0.142472133135735	0.142472133135735
+20210	6575	4456	0.146389787991077	0.146389787991077
+20211	4456	5504	0.146266130363807	0.146266130363807
+20264	10722	5574	0.00764881869126048	0.00764881869126048
+20317	10737	10730	0.156440332314784	0.156440332314784
+20319	10738	10739	0.00846222116823016	0.00846222116823016
+20570	10858	10856	0.341000703608857	0.341000703608857
+20572	10859	10860	0.0100014874858022	0.0100014874858022
+20784	10945	10292	0.00633905697400916	0.00633905697400916
+321	153	154	0.039197729386179	0.039197729386179
+18675	1570	2751	0.10523982327052	0.10523982327052
+20591	10795	10802	0.0763744143850755	0.0763744143850755
+20216	632	6405	0.146056665643101	0.146056665643101
+20217	6405	4277	0.144766275996567	0.144766275996567
+20218	4277	2913	0.0337236702585465	0.0337236702585465
+20250	9384	8111	0.200921327710714	0.200921327710714
+20251	8111	10328	0.204798818746646	0.204798818746646
+\.
diff --git a/src/bdDijkstra/test/pgtap/bdDijkstra-compare-dijkstra.sql b/src/bdDijkstra/test/pgtap/bdDijkstra-compare-dijkstra.sql
new file mode 100644
index 0000000..6ed3d87
--- /dev/null
+++ b/src/bdDijkstra/test/pgtap/bdDijkstra-compare-dijkstra.sql
@@ -0,0 +1,73 @@
+\i setup.sql
+
+SET client_min_messages TO ERROR;
+
+SELECT plan(544);
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+CREATE or REPLACE FUNCTION bddijkstra_compare_dijkstra(cant INTEGER default 17)
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+inner_sql TEXT;
+dijkstra_sql TEXT;
+bddijkstra_sql TEXT;
+BEGIN
+
+    FOR i IN 1.. cant  LOOP
+        FOR j IN 2.. cant BY 2 LOOP
+
+            -- DIRECTED
+            inner_sql := 'SELECT id, source, target, cost, reverse_cost FROM edge_table';
+            dijkstra_sql := 'SELECT seq,node,edge,cost::text,agg_cost::text FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+
+            bddijkstra_sql := 'SELECT seq,node,edge,cost::text,agg_cost::text FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+
+            inner_sql := 'SELECT id, source, target, cost FROM edge_table';
+            dijkstra_sql := 'SELECT  seq,node,edge,cost::text,agg_cost::text FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+
+            bddijkstra_sql := 'SELECT  seq,node,edge,cost::text,agg_cost::text FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+            -- UNDIRECTED
+            inner_sql := 'SELECT id, source, target, cost, reverse_cost FROM edge_table';
+            dijkstra_sql := 'SELECT  seq,node,edge,cost::text,agg_cost::text FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+
+            bddijkstra_sql := 'SELECT  seq,node,edge,cost::text,agg_cost::text FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+
+            inner_sql := 'SELECT id, source, target, cost FROM edge_table';
+            dijkstra_sql := 'SELECT  seq,node,edge,cost::text,agg_cost::text FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+
+            bddijkstra_sql := 'SELECT  seq,node,edge,cost::text,agg_cost::text FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+
+        END LOOP;
+    END LOOP;
+
+    RETURN;
+END
+$BODY$
+language plpgsql;
+
+
+SELECT * from bddijkstra_compare_dijkstra();
+
+
+
+SELECT * FROM finish();
+ROLLBACK;
+
diff --git a/src/bdDijkstra/test/pgtap/bdDijkstra-innerQuery.sql b/src/bdDijkstra/test/pgtap/bdDijkstra-innerQuery.sql
new file mode 100644
index 0000000..d4af4b4
--- /dev/null
+++ b/src/bdDijkstra/test/pgtap/bdDijkstra-innerQuery.sql
@@ -0,0 +1,116 @@
+\i setup.sql
+
+SELECT plan(47);
+SET client_min_messages TO ERROR;
+
+
+SELECT has_function('pgr_bddijkstra',
+    ARRAY['text', 'bigint', 'bigint', 'boolean']);
+
+SELECT function_returns('pgr_bddijkstra',
+    ARRAY['text', 'bigint', 'bigint', 'boolean'],
+    'setof record');
+
+CREATE OR REPLACE FUNCTION test_anyInteger(fn TEXT, params TEXT[], parameter TEXT) 
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+start_sql TEXT;
+end_sql TEXT;
+query TEXT;
+p TEXT;
+BEGIN
+    start_sql = 'select * from ' || fn || '($$ SELECT ';
+    FOREACH  p IN ARRAY params LOOP
+        IF p = parameter THEN CONTINUE;
+        END IF;
+        start_sql = start_sql || p || ', ';
+    END LOOP;
+    end_sql = ' FROM edge_table $$, 2, 3, true)';
+    
+    query := start_sql || parameter || '::SMALLINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::INTEGER ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::BIGINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+
+    query := start_sql || parameter || '::REAL ' || end_sql;
+    RETURN query SELECT throws_ok(query);
+
+    query := start_sql || parameter || '::FLOAT8 ' || end_sql;
+    RETURN query SELECT throws_ok(query);
+END;
+$BODY$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION test_anyNumerical(fn TEXT, params TEXT[], parameter TEXT) 
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+start_sql TEXT;
+end_sql TEXT;
+query TEXT;
+p TEXT;
+BEGIN
+    start_sql = 'select * from ' || fn || '($$ SELECT ';
+    FOREACH  p IN ARRAY params LOOP
+        IF p = parameter THEN CONTINUE;
+        END IF;
+        start_sql = start_sql || p || ', ';
+    END LOOP;
+    end_sql = ' FROM edge_table $$, 2, 3, true)';
+    
+    query := start_sql || parameter || '::SMALLINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::INTEGER ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::BIGINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+
+    query := start_sql || parameter || '::REAL ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+
+    query := start_sql || parameter || '::FLOAT8 ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+END;
+$BODY$ LANGUAGE plpgsql;
+
+--with reverse cost
+SELECT test_anyInteger('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'id');
+SELECT test_anyInteger('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'source');
+SELECT test_anyInteger('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'target');
+SELECT test_anyNumerical('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'cost');
+SELECT test_anyNumerical('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'reverse_cost');
+
+
+--without reverse cost
+SELECT test_anyInteger('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'id');
+SELECT test_anyInteger('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'source');
+SELECT test_anyInteger('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'target');
+SELECT test_anyNumerical('pgr_bddijkstra',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'cost');
+
+
+SELECT finish();
+ROLLBACK;
diff --git a/src/bdDijkstra/test/pgtap/bdDijkstra-types-check.sql b/src/bdDijkstra/test/pgtap/bdDijkstra-types-check.sql
new file mode 100644
index 0000000..9cb9836
--- /dev/null
+++ b/src/bdDijkstra/test/pgtap/bdDijkstra-types-check.sql
@@ -0,0 +1,54 @@
+\i setup.sql
+
+
+SELECT plan(6);
+
+SELECT can(ARRAY['pgr_bddijkstra']);
+
+
+--V2.4+
+SELECT has_function('pgr_bddijkstra',
+    ARRAY['text','bigint','bigint','boolean']);
+SELECT function_returns('pgr_bddijkstra',
+    ARRAY['text','bigint','bigint','boolean'],
+    'setof record');
+
+-- testing for the signature that they return the correct names & columns
+
+PREPARE v21q00 AS
+SELECT pg_typeof(seq)::text AS t1, pg_typeof(path_seq)::text AS t2,
+    pg_typeof(node)::text AS t5, pg_typeof(edge)::text AS t6,
+    pg_typeof(cost)::text AS t7, pg_typeof(agg_cost)::TEXT AS t8 
+    FROM ( 
+        SELECT * FROM pgr_bddijkstra(
+            'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+            2, 3, true) ) AS a
+    limit 1
+;
+
+PREPARE v21q01 AS
+SELECT  'integer'::text AS t1,'integer'::text AS t2,
+    'bigint'::text AS t5, 'bigint'::text AS t6,
+    'double precision'::text AS t7, 'double precision'::text AS t8;
+
+SELECT set_eq('v21q00', 'v21q01','Expected columns names & types in version 2.4');
+
+
+-- CHECKING WORKS WITH & WITOUT REVERSE COST
+
+PREPARE v20q1 AS
+SELECT * FROM pgr_bddijkstra(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3, true);
+
+PREPARE v20q3 AS
+SELECT * FROM pgr_bddijkstra(
+    'SELECT id, source, target, cost FROM edge_table',
+    2, 3, false);
+
+SELECT lives_ok('v20q1','with reverse cost');
+SELECT lives_ok('v20q3','with NO reverse cost');
+
+
+SELECT finish();
+ROLLBACK;
diff --git a/src/bdDijkstra/test/test.conf b/src/bdDijkstra/test/test.conf
new file mode 100644
index 0000000..eece83e
--- /dev/null
+++ b/src/bdDijkstra/test/test.conf
@@ -0,0 +1,17 @@
+#!/usr/bin/perl -w
+
+%main::tests = (
+    'any' => {
+        'comment' => 'pgr_pdDijkstra (new signature) old large test',
+        'data' => ["large.data" ],
+        'tests' => [qw(
+            bdDijkstra-large
+            doc-pgr_bdDijkstra
+            )],
+        'documentation' => [qw(
+            doc-pgr_bdDijkstra
+            )]
+    },
+);
+
+1;
diff --git a/src/bd_astar/doc/doc-bdAstar.queries b/src/bd_astar/doc/doc-bdAstar.queries
index ff55d9b..7c3f360 100644
--- a/src/bd_astar/doc/doc-bdAstar.queries
+++ b/src/bd_astar/doc/doc-bdAstar.queries
@@ -1,5 +1,7 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_bdAStar(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, x1, y1, x2, y2
diff --git a/src/bd_astar/doc/pgr_bdAstar.rst b/src/bd_astar/doc/pgr_bdAstar.rst
index 5c4fa9b..c4bdd05 100644
--- a/src/bd_astar/doc/pgr_bdAstar.rst
+++ b/src/bd_astar/doc/pgr_bdAstar.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -12,7 +12,7 @@
 pgr_bdAstar - Bi-directional A* Shortest Path
 ===============================================================================
 
-.. index:: 
+.. index::
 	single: bdAstar(Complete Signaature)
 
 Name
@@ -97,6 +97,6 @@ See Also
 -------------------------------------------------------------------------------
 
 * :ref:`type_cost_result`
-* :ref:`bd_dijkstra`
+* :ref:`pgr_bddijkstra`
 * http://en.wikipedia.org/wiki/Bidirectional_search
 * http://en.wikipedia.org/wiki/A*_search_algorithm
diff --git a/src/bd_astar/src/BiDirAStar.cpp b/src/bd_astar/src/BiDirAStar.cpp
index d71f61e..af6f634 100644
--- a/src/bd_astar/src/BiDirAStar.cpp
+++ b/src/bd_astar/src/BiDirAStar.cpp
@@ -32,14 +32,11 @@ THE SOFTWARE.
 
 ********************************************************************PGR-MIT*/
 
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./BiDirAStar.h"
 
 #include <math.h>
-#include "./BiDirAStar.h"
+
+#include "./../../common/src/pgr_alloc.hpp"
 
 BiDirAStar::BiDirAStar(void) {
 }
@@ -88,10 +85,10 @@ void BiDirAStar::initall(int maxNode) {
 
 void BiDirAStar::deleteall() {
     // DBG("Calling BiDirAStar::deleteall\n");
-    delete [] m_pFParent;
-    delete [] m_pRParent;
-    delete [] m_pFCost;
-    delete [] m_pRCost;
+    delete m_pFParent;
+    delete m_pRParent;
+    delete m_pFCost;
+    delete m_pRCost;
     // DBG("Leaving BiDirAStar::deleteall\n");
 }
 
@@ -359,7 +356,7 @@ int BiDirAStar:: bidir_astar(edge_astar_t *edges, size_t edge_count, int maxNode
         m_vecPath.push_back(pelement);
 
         // Transfer data path to path_element_t format and allocate memory and populate the pointer
-        *path = (path_element_t *) malloc(sizeof(path_element_t) * (m_vecPath.size() + 1));
+        *path = pgr_alloc(m_vecPath.size(), *path);
         *path_count = m_vecPath.size();
 
         for (size_t i = 0; i < *path_count; i++) {
diff --git a/src/bd_astar/src/bdastar.c b/src/bd_astar/src/bdastar.c
index 205e4be..4d64e05 100644
--- a/src/bd_astar/src/bdastar.c
+++ b/src/bd_astar/src/bdastar.c
@@ -23,20 +23,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <search.h>
 
 #include "../../common/src/pgr_types.h"
-#include "../../common/src/postgres_connection.h"
 #include "./bdastar_driver.h"
 
 
@@ -68,6 +62,7 @@ static int
 fetch_edge_astar_columns(SPITupleTable *tuptable,
              edge_astar_columns_t *edge_columns,
              bool has_reverse_cost) {
+    if (tuptable) {}
   edge_columns->id = SPI_fnumber(SPI_tuptable->tupdesc, "id");
   edge_columns->source = SPI_fnumber(SPI_tuptable->tupdesc, "source");
   edge_columns->target = SPI_fnumber(SPI_tuptable->tupdesc, "target");
@@ -208,7 +203,7 @@ static int compute_shortest_path_astar(char* sql, int source_vertex_id,
 #endif  // _MSC_VER
   char *err_msg;
   int ret = -1;
-  register int z;
+  size_t z;
 
   int s_count = 0;
   int t_count = 0;
@@ -327,6 +322,7 @@ static int compute_shortest_path_astar(char* sql, int source_vertex_id,
     (*path)[z].vertex_id += v_min_id;
   }
   if (ret < 0) {
+      pfree(path);
       elog(ERROR, "Error computing path: %s", err_msg);
   }
   pgr_SPI_finish();
@@ -338,10 +334,9 @@ PG_FUNCTION_INFO_V1(bidir_astar_shortest_path);
 PGDLLEXPORT Datum
 bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
   FuncCallContext     *funcctx;
-  uint32_t                  call_cntr;
-  uint32_t                  max_calls;
   TupleDesc            tuple_desc;
   path_element_t      *path;
+  path = NULL;
 
   /* stuff done only on the first call of the function */
   if (SRF_IS_FIRSTCALL()) {
@@ -361,7 +356,7 @@ bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
 #ifdef DEBUG
       ret =
 #endif
-         compute_shortest_path_astar(pgr_text2char(PG_GETARG_TEXT_P(0)),
+         compute_shortest_path_astar(text_to_cstring(PG_GETARG_TEXT_P(0)),
                     PG_GETARG_INT32(1),
                     PG_GETARG_INT32(2),
                     PG_GETARG_BOOL(3),
@@ -371,10 +366,10 @@ bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
 #ifdef DEBUG
       PGR_DBG("Ret is %i", ret);
       if (ret >= 0) {
-          int i;
+          size_t i;
           for (i = 0; i < path_count; i++) {
-              PGR_DBG("Step # %i vertex_id  %i ", i, path[i].vertex_id);
-              PGR_DBG("        edge_id    %i ", path[i].edge_id);
+              PGR_DBG("Step # %ld vertex_id  %ld ", i, path[i].vertex_id);
+              PGR_DBG("        edge_id    %ld ", path[i].edge_id);
               PGR_DBG("        cost       %f ", path[i].cost);
           }
       }
@@ -382,7 +377,11 @@ bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
 
       /* total number of tuples to be returned */
       PGR_DBG("Conting tuples number\n");
+#if PGSQL_VERSION > 95
+      funcctx->max_calls = path_count;
+#else
       funcctx->max_calls = (uint32_t)path_count;
+#endif
       funcctx->user_fctx = path;
 
       PGR_DBG("Path count %lu", path_count);
@@ -398,14 +397,11 @@ bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
 
   funcctx = SRF_PERCALL_SETUP();
 
-  call_cntr = (uint32_t)funcctx->call_cntr;
-  max_calls = (uint32_t)funcctx->max_calls;
   tuple_desc = funcctx->tuple_desc;
   path = (path_element_t*) funcctx->user_fctx;
 
-  PGR_DBG("Trying to allocate some memory\n");
 
-  if (call_cntr < max_calls) {   /* do when there is more left to send */
+  if (funcctx->call_cntr < funcctx->max_calls) {   /* do when there is more left to send */
       HeapTuple    tuple;
       Datum        result;
       Datum *values;
@@ -414,13 +410,13 @@ bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
       values = palloc(4 * sizeof(Datum));
       nulls = palloc(4 * sizeof(bool));
 
-      values[0] = Int32GetDatum(call_cntr);
+      values[0] = Int32GetDatum(funcctx->call_cntr);
       nulls[0] = false;
-      values[1] = Int32GetDatum(path[call_cntr].vertex_id);
+      values[1] = Int32GetDatum(path[funcctx->call_cntr].vertex_id);
       nulls[1] = false;
-      values[2] = Int32GetDatum(path[call_cntr].edge_id);
+      values[2] = Int32GetDatum(path[funcctx->call_cntr].edge_id);
       nulls[2] = false;
-      values[3] = Float8GetDatum(path[call_cntr].cost);
+      values[3] = Float8GetDatum(path[funcctx->call_cntr].cost);
       nulls[3] = false;
 
       PGR_DBG("Heap making\n");
@@ -441,8 +437,6 @@ bidir_astar_shortest_path(PG_FUNCTION_ARGS) {
 
       SRF_RETURN_NEXT(funcctx, result);
   } else {   /* do when there is no more left */
-      PGR_DBG("Freeing path");
-      if (path) free(path);
       SRF_RETURN_DONE(funcctx);
   }
 }
diff --git a/src/bd_astar/src/bdastar_driver.cpp b/src/bd_astar/src/bdastar_driver.cpp
index 79c8e3a..c8dcac3 100644
--- a/src/bd_astar/src/bdastar_driver.cpp
+++ b/src/bd_astar/src/bdastar_driver.cpp
@@ -32,15 +32,11 @@ THE SOFTWARE.
 
 ********************************************************************PGR-MIT*/
 
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
 
 
+#include "./bdastar_driver.h"
 #include <exception>
 #include "./BiDirAStar.h"
-#include "./bdastar_driver.h"
 
 int bdastar_wrapper(edge_astar_t *edges, size_t edge_count, int maxnode,
                   int source_vertex_id, int target_vertex_id,
diff --git a/src/bd_astar/test/CMakeLists.txt b/src/bd_astar/test/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/bd_astar/test/bd_astar-any-01.result b/src/bd_astar/test/bd_astar-any-01.result
index 4e51168..f3dfc90 100644
--- a/src/bd_astar/test/bd_astar-any-01.result
+++ b/src/bd_astar/test/bd_astar-any-01.result
@@ -1,101 +1,101 @@
-0|5700|20787|0.006774
-1|10932|20756|0.040876
-2|10931|20797|0.002564
-3|7661|20796|0.002581
-4|10943|20776|0.040800
-5|10941|20772|0.005720
-6|3415|20771|0.007463
-7|10940|20841|0.187594
-8|10952|20812|0.005045
-9|7034|20811|0.004532
-10|10951|20833|0.177477
-11|10944|20779|0.008539
-12|8910|20778|0.006447
-13|10929|20835|0.071114
-14|10948|20794|0.013276
-15|8908|12990|0.013157
-16|8325|13831|0.009169
-17|3753|13830|0.196045
-18|6774|13829|0.032840
-19|8304|13828|0.117213
-20|9205|13827|0.010639
-21|8994|13165|0.012931
-22|8977|13164|0.008029
-23|8976|13163|0.069895
-24|8993|13162|0.009638
-25|8351|13161|0.099016
-26|8992|13160|0.187353
-27|8991|13159|0.018649
-28|2962|13158|0.071931
-29|1285|13157|0.118340
-30|8989|13156|0.006317
-31|8988|13155|0.079185
-32|21|13154|0.057101
-33|6436|13153|0.083288
-34|637|13152|0.099744
-35|8987|13151|0.057786
-36|398|13150|0.120005
-37|8496|13149|0.069498
-38|8986|13148|0.014323
-39|8985|13167|0.070884
-40|8451|11869|0.006925
-41|476|11868|0.196533
-42|529|11867|0.005677
-43|8450|11871|0.118857
-44|8452|11878|0.083250
-45|8455|11880|0.048821
-46|8456|11883|0.064572
-47|1807|11882|0.101185
-48|8457|11894|0.046805
-49|8465|15481|0.180992
-50|8522|15480|0.016198
-51|9621|15479|0.209882
-52|2808|15478|0.019312
-53|8311|15477|0.113487
-54|8583|16981|0.045667
-55|10046|16982|0.022635
-56|8467|16983|0.022924
-57|9624|15487|0.034042
-58|8468|11899|0.018103
-59|3170|19357|0.047698
-60|9949|19358|0.059093
-61|10479|19359|0.051651
-62|9948|19360|0.051709
-63|8509|19374|0.106794
-64|9595|19375|0.102428
-65|8634|19376|0.107643
-66|10174|19377|0.096140
-67|10482|19378|0.009782
-68|9194|19379|0.102702
-69|4397|19380|0.108243
-70|3002|19381|0.098919
-71|10484|19382|0.006171
-72|5962|19383|0.005429
-73|10485|19384|0.047276
-74|10459|19385|0.052864
-75|7579|19386|0.052378
-76|10455|19387|0.052414
-77|5805|19388|0.081956
-78|10462|19389|0.016974
-79|8768|12598|0.059630
-80|8767|19290|0.117748
-81|10470|19289|0.065769
-82|10469|19288|0.066230
-83|10468|19287|0.111281
-84|9967|16642|0.029056
-85|9956|16621|0.014614
-86|9938|16626|0.007036
-87|9960|16649|0.081206
-88|9968|16650|0.012230
-89|9969|16647|0.012368
-90|5457|6266|0.055134
-91|5458|6267|0.053860
-92|5459|6268|0.109859
-93|5460|6269|0.104952
-94|5461|6270|0.053766
-95|5462|6271|0.046800
-96|5463|12897|0.170300
-97|8880|15060|0.049014
-98|7101|15059|0.047811
-99|9313|15058|0.044674
-100|6733|-1|0.000000
+0|5700|20787|0.006774
+1|10932|20756|0.040876
+2|10931|20797|0.002564
+3|7661|20796|0.002581
+4|10943|20776|0.040800
+5|10941|20772|0.005720
+6|3415|20771|0.007463
+7|10940|20841|0.187594
+8|10952|20812|0.005045
+9|7034|20811|0.004532
+10|10951|20833|0.177477
+11|10944|20779|0.008539
+12|8910|20778|0.006447
+13|10929|20835|0.071114
+14|10948|20794|0.013276
+15|8908|12990|0.013157
+16|8325|13831|0.009169
+17|3753|13830|0.196045
+18|6774|13829|0.032840
+19|8304|13828|0.117213
+20|9205|13827|0.010639
+21|8994|13165|0.012931
+22|8977|13164|0.008029
+23|8976|13163|0.069895
+24|8993|13162|0.009638
+25|8351|13161|0.099016
+26|8992|13160|0.187353
+27|8991|13159|0.018649
+28|2962|13158|0.071931
+29|1285|13157|0.118340
+30|8989|13156|0.006317
+31|8988|13155|0.079185
+32|21|13154|0.057101
+33|6436|13153|0.083288
+34|637|13152|0.099744
+35|8987|13151|0.057786
+36|398|13150|0.120005
+37|8496|13149|0.069498
+38|8986|13148|0.014323
+39|8985|13167|0.070884
+40|8451|11869|0.006925
+41|476|11868|0.196533
+42|529|11867|0.005677
+43|8450|11871|0.118857
+44|8452|11878|0.083250
+45|8455|11880|0.048821
+46|8456|11883|0.064572
+47|1807|11882|0.101185
+48|8457|11894|0.046805
+49|8465|15481|0.180992
+50|8522|15480|0.016198
+51|9621|15479|0.209882
+52|2808|15478|0.019312
+53|8311|15477|0.113487
+54|8583|16981|0.045667
+55|10046|16982|0.022635
+56|8467|16983|0.022924
+57|9624|15487|0.034042
+58|8468|11899|0.018103
+59|3170|19357|0.047698
+60|9949|19358|0.059093
+61|10479|19359|0.051651
+62|9948|19360|0.051709
+63|8509|19374|0.106794
+64|9595|19375|0.102428
+65|8634|19376|0.107643
+66|10174|19377|0.096140
+67|10482|19378|0.009782
+68|9194|19379|0.102702
+69|4397|19380|0.108243
+70|3002|19381|0.098919
+71|10484|19382|0.006171
+72|5962|19383|0.005429
+73|10485|19384|0.047276
+74|10459|19385|0.052864
+75|7579|19386|0.052378
+76|10455|19387|0.052414
+77|5805|19388|0.081956
+78|10462|19389|0.016974
+79|8768|12598|0.059630
+80|8767|19290|0.117748
+81|10470|19289|0.065769
+82|10469|19288|0.066230
+83|10468|19287|0.111281
+84|9967|16642|0.029056
+85|9956|16621|0.014614
+86|9938|16626|0.007036
+87|9960|16649|0.081206
+88|9968|16650|0.012230
+89|9969|16647|0.012368
+90|5457|6266|0.055134
+91|5458|6267|0.053860
+92|5459|6268|0.109859
+93|5460|6269|0.104952
+94|5461|6270|0.053766
+95|5462|6271|0.046800
+96|5463|12897|0.170300
+97|8880|15060|0.049014
+98|7101|15059|0.047811
+99|9313|15058|0.044674
+100|6733|-1|0.000000
diff --git a/src/bd_astar/test/bd_astar-any-02.result b/src/bd_astar/test/bd_astar-any-02.result
index ae93722..16cfcae 100644
--- a/src/bd_astar/test/bd_astar-any-02.result
+++ b/src/bd_astar/test/bd_astar-any-02.result
@@ -1,60 +1,60 @@
-0|6585|17975|0.200230
-1|5367|17976|0.155428
-2|7125|17977|0.178581
-3|613|17978|0.175712
-4|10025|17979|0.173776
-5|5802|6758|0.013489
-6|5803|6759|0.065176
-7|5804|6760|0.008679
-8|5805|6761|0.145097
-9|5806|6762|0.146807
-10|5807|6763|0.097186
-11|5808|6764|0.050569
-12|5809|20663|0.169650
-13|4620|20662|0.023243
-14|5774|20661|0.120390
-15|6482|20660|0.002769
-16|5957|20659|0.087952
-17|8289|20658|0.048701
-18|10884|20657|0.009212
-19|10883|20656|0.080500
-20|9954|20655|0.075280
-21|4390|16876|0.147691
-22|9203|17805|0.063931
-23|7892|17804|0.015429
-24|8417|17803|0.069119
-25|10171|17802|0.075825
-26|9953|17801|0.045079
-27|8859|17800|0.029389
-28|8536|17799|0.072658
-29|10180|17798|0.076558
-30|9592|17797|0.027637
-31|9318|17796|0.114755
-32|10179|17795|0.007150
-33|10178|17794|0.087467
-34|8402|17793|0.062258
-35|6179|17792|0.109483
-36|8508|17791|0.036248
-37|3305|17790|0.069816
-38|8512|17789|0.064158
-39|998|17807|0.471312
-40|2698|2743|0.102019
-41|2563|9039|0.341756
-42|2043|9040|0.587619
-43|4280|9041|0.145996
-44|2317|9042|0.268754
-45|7135|9043|0.121251
-46|4276|9044|0.145396
-47|6167|9045|0.583394
-48|7136|9046|0.043099
-49|7137|19345|0.053510
-50|10475|19344|0.015153
-51|10142|19343|0.064475
-52|10140|17566|0.135370
-53|8539|17565|0.057338
-54|10138|17558|0.064893
-55|6943|17559|0.201703
-56|8140|17560|0.469613
-57|10139|20189|0.060217
-58|10705|20185|0.055053
-59|8247|-1|0.000000
+0|6585|17975|0.200230
+1|5367|17976|0.155428
+2|7125|17977|0.178581
+3|613|17978|0.175712
+4|10025|17979|0.173776
+5|5802|6758|0.013489
+6|5803|6759|0.065176
+7|5804|6760|0.008679
+8|5805|6761|0.145097
+9|5806|6762|0.146807
+10|5807|6763|0.097186
+11|5808|6764|0.050569
+12|5809|20663|0.169650
+13|4620|20662|0.023243
+14|5774|20661|0.120390
+15|6482|20660|0.002769
+16|5957|20659|0.087952
+17|8289|20658|0.048701
+18|10884|20657|0.009212
+19|10883|20656|0.080500
+20|9954|20655|0.075280
+21|4390|16876|0.147691
+22|9203|17805|0.063931
+23|7892|17804|0.015429
+24|8417|17803|0.069119
+25|10171|17802|0.075825
+26|9953|17801|0.045079
+27|8859|17800|0.029389
+28|8536|17799|0.072658
+29|10180|17798|0.076558
+30|9592|17797|0.027637
+31|9318|17796|0.114755
+32|10179|17795|0.007150
+33|10178|17794|0.087467
+34|8402|17793|0.062258
+35|6179|17792|0.109483
+36|8508|17791|0.036248
+37|3305|17790|0.069816
+38|8512|17789|0.064158
+39|998|17807|0.471312
+40|2698|2743|0.102019
+41|2563|9039|0.341756
+42|2043|9040|0.587619
+43|4280|9041|0.145996
+44|2317|9042|0.268754
+45|7135|9043|0.121251
+46|4276|9044|0.145396
+47|6167|9045|0.583394
+48|7136|9046|0.043099
+49|7137|19345|0.053510
+50|10475|19344|0.015153
+51|10142|19343|0.064475
+52|10140|17566|0.135370
+53|8539|17565|0.057338
+54|10138|17558|0.064893
+55|6943|17559|0.201703
+56|8140|17560|0.469613
+57|10139|20189|0.060217
+58|10705|20185|0.055053
+59|8247|-1|0.000000
diff --git a/src/bd_astar/test/bd_astar-any-03.result b/src/bd_astar/test/bd_astar-any-03.result
index cbd1bc5..e8ee6ec 100644
--- a/src/bd_astar/test/bd_astar-any-03.result
+++ b/src/bd_astar/test/bd_astar-any-03.result
@@ -1,2 +1,2 @@
-0|9426|14822|0.060319
-1|3606|-1|0.000000
+0|9426|14822|0.060319
+1|3606|-1|0.000000
diff --git a/src/bd_astar/test/bd_astar-any-04.result b/src/bd_astar/test/bd_astar-any-04.result
index 5988b27..a0cf228 100644
--- a/src/bd_astar/test/bd_astar-any-04.result
+++ b/src/bd_astar/test/bd_astar-any-04.result
@@ -1,2 +1,2 @@
-0|3606|14822|0.060319
-1|9426|-1|0.000000
+0|3606|14822|0.060319
+1|9426|-1|0.000000
diff --git a/src/bd_astar/test/bd_astar-any-05.result b/src/bd_astar/test/bd_astar-any-05.result
index 73c2014..63d314b 100644
--- a/src/bd_astar/test/bd_astar-any-05.result
+++ b/src/bd_astar/test/bd_astar-any-05.result
@@ -1,101 +1,101 @@
-0|6733|15058|0.044674
-1|9313|15059|0.047811
-2|7101|15060|0.049014
-3|8880|12897|0.170300
-4|5463|6271|0.046800
-5|5462|6270|0.053766
-6|5461|6269|0.104952
-7|5460|6268|0.109859
-8|5459|6267|0.053860
-9|5458|6266|0.055134
-10|5457|16647|0.012368
-11|9969|16650|0.012230
-12|9968|16649|0.081206
-13|9960|16626|0.007036
-14|9938|16621|0.014614
-15|9956|16642|0.029056
-16|9967|19287|0.111281
-17|10468|19288|0.066230
-18|10469|19289|0.065769
-19|10470|19290|0.117748
-20|8767|12598|0.059630
-21|8768|19389|0.016974
-22|10462|19388|0.081956
-23|5805|19387|0.052414
-24|10455|19386|0.052378
-25|7579|19385|0.052864
-26|10459|19384|0.047276
-27|10485|19383|0.005429
-28|5962|19382|0.006171
-29|10484|19381|0.098919
-30|3002|19380|0.108243
-31|4397|19379|0.102702
-32|9194|19378|0.009782
-33|10482|19377|0.096140
-34|10174|19376|0.107643
-35|8634|19375|0.102428
-36|9595|19374|0.106794
-37|8509|19360|0.051709
-38|9948|19359|0.051651
-39|10479|19358|0.059093
-40|9949|19357|0.047698
-41|3170|11899|0.018103
-42|8468|15487|0.034042
-43|9624|16983|0.022924
-44|8467|16982|0.022635
-45|10046|16981|0.045667
-46|8583|15477|0.113487
-47|8311|15478|0.019312
-48|2808|15479|0.209882
-49|9621|15480|0.016198
-50|8522|15481|0.180992
-51|8465|11894|0.046805
-52|8457|11882|0.101185
-53|1807|11883|0.064572
-54|8456|11880|0.048821
-55|8455|11878|0.083250
-56|8452|11871|0.118857
-57|8450|11867|0.005677
-58|529|11868|0.196533
-59|476|11869|0.006925
-60|8451|13167|0.070884
-61|8985|13148|0.014323
-62|8986|13149|0.069498
-63|8496|13150|0.120005
-64|398|13151|0.057786
-65|8987|13152|0.099744
-66|637|13153|0.083288
-67|6436|13154|0.057101
-68|21|13155|0.079185
-69|8988|13156|0.006317
-70|8989|13157|0.118340
-71|1285|13158|0.071931
-72|2962|13159|0.018649
-73|8991|13160|0.187353
-74|8992|13161|0.099016
-75|8351|13162|0.009638
-76|8993|13163|0.069895
-77|8976|13164|0.008029
-78|8977|13165|0.012931
-79|8994|13827|0.010639
-80|9205|13828|0.117213
-81|8304|13829|0.032840
-82|6774|13830|0.196045
-83|3753|13831|0.009169
-84|8325|12990|0.013157
-85|8908|20794|0.013276
-86|10948|20835|0.071114
-87|10929|20778|0.006447
-88|8910|20779|0.008539
-89|10944|20833|0.177477
-90|10951|20811|0.004532
-91|7034|20812|0.005045
-92|10952|20841|0.187594
-93|10940|20771|0.007463
-94|3415|20772|0.005720
-95|10941|20776|0.040800
-96|10943|20796|0.002581
-97|7661|20797|0.002564
-98|10931|20756|0.040876
-99|10932|20787|0.006774
-100|5700|-1|0.000000
+0|6733|15058|0.044674
+1|9313|15059|0.047811
+2|7101|15060|0.049014
+3|8880|12897|0.170300
+4|5463|6271|0.046800
+5|5462|6270|0.053766
+6|5461|6269|0.104952
+7|5460|6268|0.109859
+8|5459|6267|0.053860
+9|5458|6266|0.055134
+10|5457|16647|0.012368
+11|9969|16650|0.012230
+12|9968|16649|0.081206
+13|9960|16626|0.007036
+14|9938|16621|0.014614
+15|9956|16642|0.029056
+16|9967|19287|0.111281
+17|10468|19288|0.066230
+18|10469|19289|0.065769
+19|10470|19290|0.117748
+20|8767|12598|0.059630
+21|8768|19389|0.016974
+22|10462|19388|0.081956
+23|5805|19387|0.052414
+24|10455|19386|0.052378
+25|7579|19385|0.052864
+26|10459|19384|0.047276
+27|10485|19383|0.005429
+28|5962|19382|0.006171
+29|10484|19381|0.098919
+30|3002|19380|0.108243
+31|4397|19379|0.102702
+32|9194|19378|0.009782
+33|10482|19377|0.096140
+34|10174|19376|0.107643
+35|8634|19375|0.102428
+36|9595|19374|0.106794
+37|8509|19360|0.051709
+38|9948|19359|0.051651
+39|10479|19358|0.059093
+40|9949|19357|0.047698
+41|3170|11899|0.018103
+42|8468|15487|0.034042
+43|9624|16983|0.022924
+44|8467|16982|0.022635
+45|10046|16981|0.045667
+46|8583|15477|0.113487
+47|8311|15478|0.019312
+48|2808|15479|0.209882
+49|9621|15480|0.016198
+50|8522|15481|0.180992
+51|8465|11894|0.046805
+52|8457|11882|0.101185
+53|1807|11883|0.064572
+54|8456|11880|0.048821
+55|8455|11878|0.083250
+56|8452|11871|0.118857
+57|8450|11867|0.005677
+58|529|11868|0.196533
+59|476|11869|0.006925
+60|8451|13167|0.070884
+61|8985|13148|0.014323
+62|8986|13149|0.069498
+63|8496|13150|0.120005
+64|398|13151|0.057786
+65|8987|13152|0.099744
+66|637|13153|0.083288
+67|6436|13154|0.057101
+68|21|13155|0.079185
+69|8988|13156|0.006317
+70|8989|13157|0.118340
+71|1285|13158|0.071931
+72|2962|13159|0.018649
+73|8991|13160|0.187353
+74|8992|13161|0.099016
+75|8351|13162|0.009638
+76|8993|13163|0.069895
+77|8976|13164|0.008029
+78|8977|13165|0.012931
+79|8994|13827|0.010639
+80|9205|13828|0.117213
+81|8304|13829|0.032840
+82|6774|13830|0.196045
+83|3753|13831|0.009169
+84|8325|12990|0.013157
+85|8908|20794|0.013276
+86|10948|20835|0.071114
+87|10929|20778|0.006447
+88|8910|20779|0.008539
+89|10944|20833|0.177477
+90|10951|20811|0.004532
+91|7034|20812|0.005045
+92|10952|20841|0.187594
+93|10940|20771|0.007463
+94|3415|20772|0.005720
+95|10941|20776|0.040800
+96|10943|20796|0.002581
+97|7661|20797|0.002564
+98|10931|20756|0.040876
+99|10932|20787|0.006774
+100|5700|-1|0.000000
diff --git a/src/bd_astar/test/bd_astar-any-06.result b/src/bd_astar/test/bd_astar-any-06.result
index 134a8f5..6585a35 100644
--- a/src/bd_astar/test/bd_astar-any-06.result
+++ b/src/bd_astar/test/bd_astar-any-06.result
@@ -1,60 +1,60 @@
-0|8247|20185|0.055053
-1|10705|20189|0.060217
-2|10139|17560|0.469613
-3|8140|17559|0.201703
-4|6943|17558|0.064893
-5|10138|17565|0.057338
-6|8539|17566|0.135370
-7|10140|19343|0.064475
-8|10142|19344|0.015153
-9|10475|19345|0.053510
-10|7137|9046|0.043099
-11|7136|9045|0.583394
-12|6167|9044|0.145396
-13|4276|9043|0.121251
-14|7135|9042|0.268754
-15|2317|9041|0.145996
-16|4280|9040|0.587619
-17|2043|9039|0.341756
-18|2563|2743|0.102019
-19|2698|17807|0.471312
-20|998|17789|0.064158
-21|8512|17790|0.069816
-22|3305|17791|0.036248
-23|8508|17792|0.109483
-24|6179|17793|0.062258
-25|8402|17794|0.087467
-26|10178|17795|0.007150
-27|10179|17796|0.114755
-28|9318|17797|0.027637
-29|9592|17798|0.076558
-30|10180|17799|0.072658
-31|8536|17800|0.029389
-32|8859|17801|0.045079
-33|9953|17802|0.075825
-34|10171|17803|0.069119
-35|8417|17804|0.015429
-36|7892|17805|0.063931
-37|9203|16876|0.147691
-38|4390|20655|0.075280
-39|9954|20656|0.080500
-40|10883|20657|0.009212
-41|10884|20658|0.048701
-42|8289|20659|0.087952
-43|5957|20660|0.002769
-44|6482|20661|0.120390
-45|5774|20662|0.023243
-46|4620|20663|0.169650
-47|5809|6764|0.050569
-48|5808|6763|0.097186
-49|5807|6762|0.146807
-50|5806|6761|0.145097
-51|5805|6760|0.008679
-52|5804|6759|0.065176
-53|5803|6758|0.013489
-54|5802|17979|0.173776
-55|10025|17978|0.175712
-56|613|17977|0.178581
-57|7125|17976|0.155428
-58|5367|17975|0.200230
-59|6585|-1|0.000000
+0|8247|20185|0.055053
+1|10705|20189|0.060217
+2|10139|17560|0.469613
+3|8140|17559|0.201703
+4|6943|17558|0.064893
+5|10138|17565|0.057338
+6|8539|17566|0.135370
+7|10140|19343|0.064475
+8|10142|19344|0.015153
+9|10475|19345|0.053510
+10|7137|9046|0.043099
+11|7136|9045|0.583394
+12|6167|9044|0.145396
+13|4276|9043|0.121251
+14|7135|9042|0.268754
+15|2317|9041|0.145996
+16|4280|9040|0.587619
+17|2043|9039|0.341756
+18|2563|2743|0.102019
+19|2698|17807|0.471312
+20|998|17789|0.064158
+21|8512|17790|0.069816
+22|3305|17791|0.036248
+23|8508|17792|0.109483
+24|6179|17793|0.062258
+25|8402|17794|0.087467
+26|10178|17795|0.007150
+27|10179|17796|0.114755
+28|9318|17797|0.027637
+29|9592|17798|0.076558
+30|10180|17799|0.072658
+31|8536|17800|0.029389
+32|8859|17801|0.045079
+33|9953|17802|0.075825
+34|10171|17803|0.069119
+35|8417|17804|0.015429
+36|7892|17805|0.063931
+37|9203|16876|0.147691
+38|4390|20655|0.075280
+39|9954|20656|0.080500
+40|10883|20657|0.009212
+41|10884|20658|0.048701
+42|8289|20659|0.087952
+43|5957|20660|0.002769
+44|6482|20661|0.120390
+45|5774|20662|0.023243
+46|4620|20663|0.169650
+47|5809|6764|0.050569
+48|5808|6763|0.097186
+49|5807|6762|0.146807
+50|5806|6761|0.145097
+51|5805|6760|0.008679
+52|5804|6759|0.065176
+53|5803|6758|0.013489
+54|5802|17979|0.173776
+55|10025|17978|0.175712
+56|613|17977|0.178581
+57|7125|17976|0.155428
+58|5367|17975|0.200230
+59|6585|-1|0.000000
diff --git a/src/bd_astar/test/doc-bdAstar.test.sql b/src/bd_astar/test/doc-bdAstar.test.sql
index 7bba7de..639cf40 100644
--- a/src/bd_astar/test/doc-bdAstar.test.sql
+++ b/src/bd_astar/test/doc-bdAstar.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
 --              PGR_pgr_bdAStar
@@ -15,4 +14,3 @@ SELECT * FROM pgr_bdAStar(
      FROM edge_table ',
     4, 10, true, true);
 \echo --q3
-ROLLBACK;
diff --git a/src/bd_astar/tester/ans1.txt b/src/bd_astar/tester/ans1.txt
index e914abb..0434fd7 100644
--- a/src/bd_astar/tester/ans1.txt
+++ b/src/bd_astar/tester/ans1.txt
@@ -1,101 +1,101 @@
-5700	|20787	|0.006774
-10932	|20756	|0.040876
-10931	|20797	|0.002564
-7661	|20796	|0.002581
-10943	|20776	|0.040800
-10941	|20772	|0.005720
-3415	|20771	|0.007463
-10940	|20841	|0.187594
-10952	|20812	|0.005045
-7034	|20811	|0.004532
-10951	|20833	|0.177477
-10944	|20779	|0.008539
-8910	|20778	|0.006447
-10929	|20835	|0.071114
-10948	|20794	|0.013276
-8908	|12990	|0.013157
-8325	|13831	|0.009169
-3753	|13830	|0.196045
-6774	|13829	|0.032840
-8304	|13828	|0.117213
-9205	|13827	|0.010639
-8994	|13165	|0.012931
-8977	|13164	|0.008029
-8976	|13163	|0.069895
-8993	|13162	|0.009638
-8351	|13161	|0.099016
-8992	|13160	|0.187353
-8991	|13159	|0.018649
-2962	|13158	|0.071931
-1285	|13157	|0.118340
-8989	|13156	|0.006317
-8988	|13155	|0.079185
-21	|13154	|0.057101
-6436	|13153	|0.083288
-637	|13152	|0.099744
-8987	|13151	|0.057786
-398	|13150	|0.120005
-8496	|13149	|0.069498
-8986	|13148	|0.014323
-8985	|13167	|0.070884
-8451	|11869	|0.006925
-476	|11868	|0.196533
-529	|11867	|0.005677
-8450	|11871	|0.118857
-8452	|11878	|0.083250
-8455	|11880	|0.048821
-8456	|11883	|0.064572
-1807	|11882	|0.101185
-8457	|11894	|0.046805
-8465	|15481	|0.180992
-8522	|15480	|0.016198
-9621	|15479	|0.209882
-2808	|15478	|0.019312
-8311	|15477	|0.113487
-8583	|16981	|0.045667
-10046	|16982	|0.022635
-8467	|16983	|0.022924
-9624	|15487	|0.034042
-8468	|11899	|0.018103
-3170	|19357	|0.047698
-9949	|19358	|0.059093
-10479	|19359	|0.051651
-9948	|19360	|0.051709
-8509	|19374	|0.106794
-9595	|19375	|0.102428
-8634	|19376	|0.107643
-10174	|19377	|0.096140
-10482	|19378	|0.009782
-9194	|19379	|0.102702
-4397	|19380	|0.108243
-3002	|19381	|0.098919
-10484	|19382	|0.006171
-5962	|19383	|0.005429
-10485	|19384	|0.047276
-10459	|19385	|0.052864
-7579	|19386	|0.052378
-10455	|19387	|0.052414
-5805	|19388	|0.081956
-10462	|19389	|0.016974
-8768	|12598	|0.059630
-8767	|19290	|0.117748
-10470	|19289	|0.065769
-10469	|19288	|0.066230
-10468	|19287	|0.111281
-9967	|16642	|0.029056
-9956	|16621	|0.014614
-9938	|16626	|0.007036
-9960	|16649	|0.081206
-9968	|16650	|0.012230
-9969	|16647	|0.012368
-5457	|6266	|0.055134
-5458	|6267	|0.053860
-5459	|6268	|0.109859
-5460	|6269	|0.104952
-5461	|6270	|0.053766
-5462	|6271	|0.046800
-5463	|12897	|0.170300
-8880	|15060	|0.049014
-7101	|15059	|0.047811
-9313	|15058	|0.044674
-6733	|-1	|0.000000
+5700	|20787	|0.006774
+10932	|20756	|0.040876
+10931	|20797	|0.002564
+7661	|20796	|0.002581
+10943	|20776	|0.040800
+10941	|20772	|0.005720
+3415	|20771	|0.007463
+10940	|20841	|0.187594
+10952	|20812	|0.005045
+7034	|20811	|0.004532
+10951	|20833	|0.177477
+10944	|20779	|0.008539
+8910	|20778	|0.006447
+10929	|20835	|0.071114
+10948	|20794	|0.013276
+8908	|12990	|0.013157
+8325	|13831	|0.009169
+3753	|13830	|0.196045
+6774	|13829	|0.032840
+8304	|13828	|0.117213
+9205	|13827	|0.010639
+8994	|13165	|0.012931
+8977	|13164	|0.008029
+8976	|13163	|0.069895
+8993	|13162	|0.009638
+8351	|13161	|0.099016
+8992	|13160	|0.187353
+8991	|13159	|0.018649
+2962	|13158	|0.071931
+1285	|13157	|0.118340
+8989	|13156	|0.006317
+8988	|13155	|0.079185
+21	|13154	|0.057101
+6436	|13153	|0.083288
+637	|13152	|0.099744
+8987	|13151	|0.057786
+398	|13150	|0.120005
+8496	|13149	|0.069498
+8986	|13148	|0.014323
+8985	|13167	|0.070884
+8451	|11869	|0.006925
+476	|11868	|0.196533
+529	|11867	|0.005677
+8450	|11871	|0.118857
+8452	|11878	|0.083250
+8455	|11880	|0.048821
+8456	|11883	|0.064572
+1807	|11882	|0.101185
+8457	|11894	|0.046805
+8465	|15481	|0.180992
+8522	|15480	|0.016198
+9621	|15479	|0.209882
+2808	|15478	|0.019312
+8311	|15477	|0.113487
+8583	|16981	|0.045667
+10046	|16982	|0.022635
+8467	|16983	|0.022924
+9624	|15487	|0.034042
+8468	|11899	|0.018103
+3170	|19357	|0.047698
+9949	|19358	|0.059093
+10479	|19359	|0.051651
+9948	|19360	|0.051709
+8509	|19374	|0.106794
+9595	|19375	|0.102428
+8634	|19376	|0.107643
+10174	|19377	|0.096140
+10482	|19378	|0.009782
+9194	|19379	|0.102702
+4397	|19380	|0.108243
+3002	|19381	|0.098919
+10484	|19382	|0.006171
+5962	|19383	|0.005429
+10485	|19384	|0.047276
+10459	|19385	|0.052864
+7579	|19386	|0.052378
+10455	|19387	|0.052414
+5805	|19388	|0.081956
+10462	|19389	|0.016974
+8768	|12598	|0.059630
+8767	|19290	|0.117748
+10470	|19289	|0.065769
+10469	|19288	|0.066230
+10468	|19287	|0.111281
+9967	|16642	|0.029056
+9956	|16621	|0.014614
+9938	|16626	|0.007036
+9960	|16649	|0.081206
+9968	|16650	|0.012230
+9969	|16647	|0.012368
+5457	|6266	|0.055134
+5458	|6267	|0.053860
+5459	|6268	|0.109859
+5460	|6269	|0.104952
+5461	|6270	|0.053766
+5462	|6271	|0.046800
+5463	|12897	|0.170300
+8880	|15060	|0.049014
+7101	|15059	|0.047811
+9313	|15058	|0.044674
+6733	|-1	|0.000000
diff --git a/src/bd_astar/tester/ans2.txt b/src/bd_astar/tester/ans2.txt
index 69839e0..60579c7 100644
--- a/src/bd_astar/tester/ans2.txt
+++ b/src/bd_astar/tester/ans2.txt
@@ -1,60 +1,60 @@
-6585	|17975	|0.200230
-5367	|17976	|0.155428
-7125	|17977	|0.178581
-613	|17978	|0.175712
-10025	|17979	|0.173776
-5802	|6758	|0.013489
-5803	|6759	|0.065176
-5804	|6760	|0.008679
-5805	|6761	|0.145097
-5806	|6762	|0.146807
-5807	|6763	|0.097186
-5808	|6764	|0.050569
-5809	|20663	|0.169650
-4620	|20662	|0.023243
-5774	|20661	|0.120390
-6482	|20660	|0.002769
-5957	|20659	|0.087952
-8289	|20658	|0.048701
-10884	|20657	|0.009212
-10883	|20656	|0.080500
-9954	|20655	|0.075280
-4390	|16876	|0.147691
-9203	|17805	|0.063931
-7892	|17804	|0.015429
-8417	|17803	|0.069119
-10171	|17802	|0.075825
-9953	|17801	|0.045079
-8859	|17800	|0.029389
-8536	|17799	|0.072658
-10180	|17798	|0.076558
-9592	|17797	|0.027637
-9318	|17796	|0.114755
-10179	|17795	|0.007150
-10178	|17794	|0.087467
-8402	|17793	|0.062258
-6179	|17792	|0.109483
-8508	|17791	|0.036248
-3305	|17790	|0.069816
-8512	|17789	|0.064158
-998	|17807	|0.471312
-2698	|2743	|0.102019
-2563	|9039	|0.341756
-2043	|9040	|0.587619
-4280	|9041	|0.145996
-2317	|9042	|0.268754
-7135	|9043	|0.121251
-4276	|9044	|0.145396
-6167	|9045	|0.583394
-7136	|9046	|0.043099
-7137	|19345	|0.053510
-10475	|19344	|0.015153
-10142	|19343	|0.064475
-10140	|17566	|0.135370
-8539	|17565	|0.057338
-10138	|17558	|0.064893
-6943	|17559	|0.201703
-8140	|17560	|0.469613
-10139	|20189	|0.060217
-10705	|20185	|0.055053
-8247	|-1	|0.000000
+6585	|17975	|0.200230
+5367	|17976	|0.155428
+7125	|17977	|0.178581
+613	|17978	|0.175712
+10025	|17979	|0.173776
+5802	|6758	|0.013489
+5803	|6759	|0.065176
+5804	|6760	|0.008679
+5805	|6761	|0.145097
+5806	|6762	|0.146807
+5807	|6763	|0.097186
+5808	|6764	|0.050569
+5809	|20663	|0.169650
+4620	|20662	|0.023243
+5774	|20661	|0.120390
+6482	|20660	|0.002769
+5957	|20659	|0.087952
+8289	|20658	|0.048701
+10884	|20657	|0.009212
+10883	|20656	|0.080500
+9954	|20655	|0.075280
+4390	|16876	|0.147691
+9203	|17805	|0.063931
+7892	|17804	|0.015429
+8417	|17803	|0.069119
+10171	|17802	|0.075825
+9953	|17801	|0.045079
+8859	|17800	|0.029389
+8536	|17799	|0.072658
+10180	|17798	|0.076558
+9592	|17797	|0.027637
+9318	|17796	|0.114755
+10179	|17795	|0.007150
+10178	|17794	|0.087467
+8402	|17793	|0.062258
+6179	|17792	|0.109483
+8508	|17791	|0.036248
+3305	|17790	|0.069816
+8512	|17789	|0.064158
+998	|17807	|0.471312
+2698	|2743	|0.102019
+2563	|9039	|0.341756
+2043	|9040	|0.587619
+4280	|9041	|0.145996
+2317	|9042	|0.268754
+7135	|9043	|0.121251
+4276	|9044	|0.145396
+6167	|9045	|0.583394
+7136	|9046	|0.043099
+7137	|19345	|0.053510
+10475	|19344	|0.015153
+10142	|19343	|0.064475
+10140	|17566	|0.135370
+8539	|17565	|0.057338
+10138	|17558	|0.064893
+6943	|17559	|0.201703
+8140	|17560	|0.469613
+10139	|20189	|0.060217
+10705	|20185	|0.055053
+8247	|-1	|0.000000
diff --git a/src/bd_astar/tester/ans3.txt b/src/bd_astar/tester/ans3.txt
index 0412f67..c7bfec2 100644
--- a/src/bd_astar/tester/ans3.txt
+++ b/src/bd_astar/tester/ans3.txt
@@ -1,2 +1,2 @@
-9426	|14822	|0.060319
-3606	|-1	|0.000000
+9426	|14822	|0.060319
+3606	|-1	|0.000000
diff --git a/src/bd_astar/tester/ans4.txt b/src/bd_astar/tester/ans4.txt
index d499d34..94026f5 100644
--- a/src/bd_astar/tester/ans4.txt
+++ b/src/bd_astar/tester/ans4.txt
@@ -1,2 +1,2 @@
-3606	|14822	|0.060319
-9426	|-1	|0.000000
+3606	|14822	|0.060319
+9426	|-1	|0.000000
diff --git a/src/bd_astar/tester/ans5.txt b/src/bd_astar/tester/ans5.txt
index 2ce61fa..a5cdc1d 100644
--- a/src/bd_astar/tester/ans5.txt
+++ b/src/bd_astar/tester/ans5.txt
@@ -1,101 +1,101 @@
-6733	|15058	|0.044674
-9313	|15059	|0.047811
-7101	|15060	|0.049014
-8880	|12897	|0.170300
-5463	|6271	|0.046800
-5462	|6270	|0.053766
-5461	|6269	|0.104952
-5460	|6268	|0.109859
-5459	|6267	|0.053860
-5458	|6266	|0.055134
-5457	|16647	|0.012368
-9969	|16650	|0.012230
-9968	|16649	|0.081206
-9960	|16626	|0.007036
-9938	|16621	|0.014614
-9956	|16642	|0.029056
-9967	|19287	|0.111281
-10468	|19288	|0.066230
-10469	|19289	|0.065769
-10470	|19290	|0.117748
-8767	|12598	|0.059630
-8768	|19389	|0.016974
-10462	|19388	|0.081956
-5805	|19387	|0.052414
-10455	|19386	|0.052378
-7579	|19385	|0.052864
-10459	|19384	|0.047276
-10485	|19383	|0.005429
-5962	|19382	|0.006171
-10484	|19381	|0.098919
-3002	|19380	|0.108243
-4397	|19379	|0.102702
-9194	|19378	|0.009782
-10482	|19377	|0.096140
-10174	|19376	|0.107643
-8634	|19375	|0.102428
-9595	|19374	|0.106794
-8509	|19360	|0.051709
-9948	|19359	|0.051651
-10479	|19358	|0.059093
-9949	|19357	|0.047698
-3170	|11899	|0.018103
-8468	|15487	|0.034042
-9624	|16983	|0.022924
-8467	|16982	|0.022635
-10046	|16981	|0.045667
-8583	|15477	|0.113487
-8311	|15478	|0.019312
-2808	|15479	|0.209882
-9621	|15480	|0.016198
-8522	|15481	|0.180992
-8465	|11894	|0.046805
-8457	|11882	|0.101185
-1807	|11883	|0.064572
-8456	|11880	|0.048821
-8455	|11878	|0.083250
-8452	|11871	|0.118857
-8450	|11867	|0.005677
-529	|11868	|0.196533
-476	|11869	|0.006925
-8451	|13167	|0.070884
-8985	|13148	|0.014323
-8986	|13149	|0.069498
-8496	|13150	|0.120005
-398	|13151	|0.057786
-8987	|13152	|0.099744
-637	|13153	|0.083288
-6436	|13154	|0.057101
-21	|13155	|0.079185
-8988	|13156	|0.006317
-8989	|13157	|0.118340
-1285	|13158	|0.071931
-2962	|13159	|0.018649
-8991	|13160	|0.187353
-8992	|13161	|0.099016
-8351	|13162	|0.009638
-8993	|13163	|0.069895
-8976	|13164	|0.008029
-8977	|13165	|0.012931
-8994	|13827	|0.010639
-9205	|13828	|0.117213
-8304	|13829	|0.032840
-6774	|13830	|0.196045
-3753	|13831	|0.009169
-8325	|12990	|0.013157
-8908	|20794	|0.013276
-10948	|20835	|0.071114
-10929	|20778	|0.006447
-8910	|20779	|0.008539
-10944	|20833	|0.177477
-10951	|20811	|0.004532
-7034	|20812	|0.005045
-10952	|20841	|0.187594
-10940	|20771	|0.007463
-3415	|20772	|0.005720
-10941	|20776	|0.040800
-10943	|20796	|0.002581
-7661	|20797	|0.002564
-10931	|20756	|0.040876
-10932	|20787	|0.006774
-5700	|-1	|0.000000
+6733	|15058	|0.044674
+9313	|15059	|0.047811
+7101	|15060	|0.049014
+8880	|12897	|0.170300
+5463	|6271	|0.046800
+5462	|6270	|0.053766
+5461	|6269	|0.104952
+5460	|6268	|0.109859
+5459	|6267	|0.053860
+5458	|6266	|0.055134
+5457	|16647	|0.012368
+9969	|16650	|0.012230
+9968	|16649	|0.081206
+9960	|16626	|0.007036
+9938	|16621	|0.014614
+9956	|16642	|0.029056
+9967	|19287	|0.111281
+10468	|19288	|0.066230
+10469	|19289	|0.065769
+10470	|19290	|0.117748
+8767	|12598	|0.059630
+8768	|19389	|0.016974
+10462	|19388	|0.081956
+5805	|19387	|0.052414
+10455	|19386	|0.052378
+7579	|19385	|0.052864
+10459	|19384	|0.047276
+10485	|19383	|0.005429
+5962	|19382	|0.006171
+10484	|19381	|0.098919
+3002	|19380	|0.108243
+4397	|19379	|0.102702
+9194	|19378	|0.009782
+10482	|19377	|0.096140
+10174	|19376	|0.107643
+8634	|19375	|0.102428
+9595	|19374	|0.106794
+8509	|19360	|0.051709
+9948	|19359	|0.051651
+10479	|19358	|0.059093
+9949	|19357	|0.047698
+3170	|11899	|0.018103
+8468	|15487	|0.034042
+9624	|16983	|0.022924
+8467	|16982	|0.022635
+10046	|16981	|0.045667
+8583	|15477	|0.113487
+8311	|15478	|0.019312
+2808	|15479	|0.209882
+9621	|15480	|0.016198
+8522	|15481	|0.180992
+8465	|11894	|0.046805
+8457	|11882	|0.101185
+1807	|11883	|0.064572
+8456	|11880	|0.048821
+8455	|11878	|0.083250
+8452	|11871	|0.118857
+8450	|11867	|0.005677
+529	|11868	|0.196533
+476	|11869	|0.006925
+8451	|13167	|0.070884
+8985	|13148	|0.014323
+8986	|13149	|0.069498
+8496	|13150	|0.120005
+398	|13151	|0.057786
+8987	|13152	|0.099744
+637	|13153	|0.083288
+6436	|13154	|0.057101
+21	|13155	|0.079185
+8988	|13156	|0.006317
+8989	|13157	|0.118340
+1285	|13158	|0.071931
+2962	|13159	|0.018649
+8991	|13160	|0.187353
+8992	|13161	|0.099016
+8351	|13162	|0.009638
+8993	|13163	|0.069895
+8976	|13164	|0.008029
+8977	|13165	|0.012931
+8994	|13827	|0.010639
+9205	|13828	|0.117213
+8304	|13829	|0.032840
+6774	|13830	|0.196045
+3753	|13831	|0.009169
+8325	|12990	|0.013157
+8908	|20794	|0.013276
+10948	|20835	|0.071114
+10929	|20778	|0.006447
+8910	|20779	|0.008539
+10944	|20833	|0.177477
+10951	|20811	|0.004532
+7034	|20812	|0.005045
+10952	|20841	|0.187594
+10940	|20771	|0.007463
+3415	|20772	|0.005720
+10941	|20776	|0.040800
+10943	|20796	|0.002581
+7661	|20797	|0.002564
+10931	|20756	|0.040876
+10932	|20787	|0.006774
+5700	|-1	|0.000000
diff --git a/src/bd_astar/tester/ans6.txt b/src/bd_astar/tester/ans6.txt
index 8f220c6..046e7bc 100644
--- a/src/bd_astar/tester/ans6.txt
+++ b/src/bd_astar/tester/ans6.txt
@@ -1,60 +1,60 @@
-8247	|20185	|0.055053
-10705	|20189	|0.060217
-10139	|17560	|0.469613
-8140	|17559	|0.201703
-6943	|17558	|0.064893
-10138	|17565	|0.057338
-8539	|17566	|0.135370
-10140	|19343	|0.064475
-10142	|19344	|0.015153
-10475	|19345	|0.053510
-7137	|9046	|0.043099
-7136	|9045	|0.583394
-6167	|9044	|0.145396
-4276	|9043	|0.121251
-7135	|9042	|0.268754
-2317	|9041	|0.145996
-4280	|9040	|0.587619
-2043	|9039	|0.341756
-2563	|2743	|0.102019
-2698	|17807	|0.471312
-998	|17789	|0.064158
-8512	|17790	|0.069816
-3305	|17791	|0.036248
-8508	|17792	|0.109483
-6179	|17793	|0.062258
-8402	|17794	|0.087467
-10178	|17795	|0.007150
-10179	|17796	|0.114755
-9318	|17797	|0.027637
-9592	|17798	|0.076558
-10180	|17799	|0.072658
-8536	|17800	|0.029389
-8859	|17801	|0.045079
-9953	|17802	|0.075825
-10171	|17803	|0.069119
-8417	|17804	|0.015429
-7892	|17805	|0.063931
-9203	|16876	|0.147691
-4390	|20655	|0.075280
-9954	|20656	|0.080500
-10883	|20657	|0.009212
-10884	|20658	|0.048701
-8289	|20659	|0.087952
-5957	|20660	|0.002769
-6482	|20661	|0.120390
-5774	|20662	|0.023243
-4620	|20663	|0.169650
-5809	|6764	|0.050569
-5808	|6763	|0.097186
-5807	|6762	|0.146807
-5806	|6761	|0.145097
-5805	|6760	|0.008679
-5804	|6759	|0.065176
-5803	|6758	|0.013489
-5802	|17979	|0.173776
-10025	|17978	|0.175712
-613	|17977	|0.178581
-7125	|17976	|0.155428
-5367	|17975	|0.200230
-6585	|-1	|0.000000
+8247	|20185	|0.055053
+10705	|20189	|0.060217
+10139	|17560	|0.469613
+8140	|17559	|0.201703
+6943	|17558	|0.064893
+10138	|17565	|0.057338
+8539	|17566	|0.135370
+10140	|19343	|0.064475
+10142	|19344	|0.015153
+10475	|19345	|0.053510
+7137	|9046	|0.043099
+7136	|9045	|0.583394
+6167	|9044	|0.145396
+4276	|9043	|0.121251
+7135	|9042	|0.268754
+2317	|9041	|0.145996
+4280	|9040	|0.587619
+2043	|9039	|0.341756
+2563	|2743	|0.102019
+2698	|17807	|0.471312
+998	|17789	|0.064158
+8512	|17790	|0.069816
+3305	|17791	|0.036248
+8508	|17792	|0.109483
+6179	|17793	|0.062258
+8402	|17794	|0.087467
+10178	|17795	|0.007150
+10179	|17796	|0.114755
+9318	|17797	|0.027637
+9592	|17798	|0.076558
+10180	|17799	|0.072658
+8536	|17800	|0.029389
+8859	|17801	|0.045079
+9953	|17802	|0.075825
+10171	|17803	|0.069119
+8417	|17804	|0.015429
+7892	|17805	|0.063931
+9203	|16876	|0.147691
+4390	|20655	|0.075280
+9954	|20656	|0.080500
+10883	|20657	|0.009212
+10884	|20658	|0.048701
+8289	|20659	|0.087952
+5957	|20660	|0.002769
+6482	|20661	|0.120390
+5774	|20662	|0.023243
+4620	|20663	|0.169650
+5809	|6764	|0.050569
+5808	|6763	|0.097186
+5807	|6762	|0.146807
+5806	|6761	|0.145097
+5805	|6760	|0.008679
+5804	|6759	|0.065176
+5803	|6758	|0.013489
+5802	|17979	|0.173776
+10025	|17978	|0.175712
+613	|17977	|0.178581
+7125	|17976	|0.155428
+5367	|17975	|0.200230
+6585	|-1	|0.000000
diff --git a/src/bd_astar/tester/input.txt b/src/bd_astar/tester/input.txt
index 6541bf2..35fb2f3 100644
--- a/src/bd_astar/tester/input.txt
+++ b/src/bd_astar/tester/input.txt
@@ -1,7 +1,7 @@
-ways.txt 5700 6733 bdd1.txt ans1.txt
-ways.txt 6585 8247 bdd2.txt ans2.txt
-ways.txt 9426 3606 bdd3.txt ans3.txt
-ways.txt 3606 9426 bdd4.txt ans4.txt
-ways.txt 6733 5700 bdd5.txt ans5.txt
-ways.txt 8247 6585 bdd6.txt ans6.txt
-
+ways.txt 5700 6733 bdd1.txt ans1.txt
+ways.txt 6585 8247 bdd2.txt ans2.txt
+ways.txt 9426 3606 bdd3.txt ans3.txt
+ways.txt 3606 9426 bdd4.txt ans4.txt
+ways.txt 6733 5700 bdd5.txt ans5.txt
+ways.txt 8247 6585 bdd6.txt ans6.txt
+
diff --git a/src/bd_dijkstra/doc/doc-bdDijkstra.queries b/src/bd_dijkstra/doc/doc-bdDijkstra.queries
index f6ba4fc..c37c49a 100644
--- a/src/bd_dijkstra/doc/doc-bdDijkstra.queries
+++ b/src/bd_dijkstra/doc/doc-bdDijkstra.queries
@@ -1,30 +1,34 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_bdDijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
-    4, 10, false, false);
+    2, 3, false, false);
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
  seq | id1 | id2 | cost 
 -----+-----+-----+------
-   0 |   4 |     |    0
-   1 |   3 |     |    0
-   2 |   2 |     |    1
-   3 |   5 |     |    1
-   4 |  10 |     |    0
-(5 rows)
+   0 |   2 |   4 |    1
+   1 |   5 |   8 |    1
+   2 |   6 |   5 |    1
+   3 |   3 |  -1 |    0
+(4 rows)
 
 --q2
 SELECT * FROM pgr_bdDijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
-    4, 10, true, true);
+    2, 3, true, true);
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
  seq | id1 | id2 | cost 
 -----+-----+-----+------
-   0 |   4 |     |    1
-   1 |   3 |     |    1
-   2 |   2 |     |    1
-   3 |   5 |     |    1
-   4 |  10 |     |    0
-(5 rows)
+   0 |   2 |   4 |    1
+   1 |   5 |   8 |    1
+   2 |   6 |   9 |    1
+   3 |   9 |  16 |    1
+   4 |   4 |   3 |    1
+   5 |   3 |  -1 |    0
+(6 rows)
 
 --q3
 ROLLBACK;
diff --git a/src/bd_dijkstra/doc/pgr_bdDijkstra.rst b/src/bd_dijkstra/doc/pgr_bdDijkstra.rst
deleted file mode 100644
index ced7ae3..0000000
--- a/src/bd_dijkstra/doc/pgr_bdDijkstra.rst
+++ /dev/null
@@ -1,95 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _bd_dijkstra:
-
-pgr_bdDijkstra - Bi-directional Dijkstra Shortest Path
-===============================================================================
-
-.. index:: 
-	single: bdDijkstra(Complete Signature)
-
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_bdDijkstra`` - Returns the shortest path using Bidirectional Dijkstra algorithm.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-This is a bi-directional Dijkstra search algorithm. It searches from the source toward the distination and at the same time from the destination to the source and terminates whe these to searches meet in the middle. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows, that make up a path.
-
-.. code-block:: sql
-
-  pgr_costResult[] pgr_bdDijkstra(sql text, source integer, target integer,
-                                  directed boolean, has_rcost boolean);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-  .. code-block:: sql
-
-    SELECT id, source, target, cost [,reverse_cost] FROM edge_table
-
-
-  :id: ``int4`` identifier of the edge
-  :source: ``int4`` identifier of the source vertex
-  :target: ``int4`` identifier of the target vertex
-  :cost: ``float8`` value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph.
-  :reverse_cost: (optional) the cost for the reverse traversal of the edge. This is only used when the ``directed`` and ``has_rcost`` parameters are ``true`` (see the above remark about negative costs).
-
-:source: ``int4`` id of the start point
-:target: ``int4`` id of the end point
-:directed: ``true`` if the graph is directed
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   node ID
-:id2:   edge ID (``-1`` for the last row)
-:cost:  cost to traverse from ``id1`` using ``id2``
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-* Without ``reverse_cost``
-
-.. literalinclude:: doc-bdDijkstra.queries
-   :start-after: --q1
-   :end-before: --q2
-
-* With ``reverse_cost``
-
-.. literalinclude:: doc-bdDijkstra.queries
-   :start-after: --q2
-   :end-before: --q3
-
-
-The queries use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`type_cost_result`
-* :ref:`bd_astar`
-* http://en.wikipedia.org/wiki/Bidirectional_search
-* http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
-
diff --git a/src/bd_dijkstra/sql/CMakeLists.txt b/src/bd_dijkstra/sql/CMakeLists.txt
index 71444c4..b49de6f 100644
--- a/src/bd_dijkstra/sql/CMakeLists.txt
+++ b/src/bd_dijkstra/sql/CMakeLists.txt
@@ -1,6 +1,7 @@
 # Append in local scope
 list(APPEND PACKAGE_SQL_FILES
-    ${CMAKE_CURRENT_SOURCE_DIR}/routing_bd_dijkstra.sql)
+    ${CMAKE_CURRENT_SOURCE_DIR}/bdDijkstra-v2.sql
+    )
 
 # set in parent scope
 set(PACKAGE_SQL_FILES "${PACKAGE_SQL_FILES}" PARENT_SCOPE)
diff --git a/src/astar/sql/astarV2.0.sql b/src/bd_dijkstra/sql/bdDijkstra-v2.sql
similarity index 66%
copy from src/astar/sql/astarV2.0.sql
copy to src/bd_dijkstra/sql/bdDijkstra-v2.sql
index b83075d..2a66df3 100644
--- a/src/astar/sql/astarV2.0.sql
+++ b/src/bd_dijkstra/sql/bdDijkstra-v2.sql
@@ -1,8 +1,11 @@
 /*PGR-GNU*****************************************************************
 
-Copyright (c) 2015 pgRouting developers
+Copyright (c) 2016 pgRouting developers
 Mail: project at pgrouting.org
 
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+mail: vicky_vergara at hotmail.com
+
 ------
 
 This program is free software; you can redistribute it and/or modify
@@ -23,27 +26,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 
 -- V2 signature
-CREATE OR REPLACE FUNCTION pgr_astar(edges_sql TEXT, source_id INTEGER, target_id INTEGER, directed BOOLEAN, has_rcost BOOLEAN)
+CREATE OR REPLACE FUNCTION pgr_bdDijkstra(edges_sql TEXT, start_vid INTEGER, end_vid INTEGER, directed BOOLEAN, has_rcost BOOLEAN)
 RETURNS SETOF pgr_costresult AS
 $BODY$
 DECLARE
 has_reverse BOOLEAN;
 sql TEXT;
 BEGIN
-    RAISE NOTICE 'Deprecated signature of function pgr_astar';
-    has_reverse =_pgr_parameter_check('astar', edges_sql, false);
+    RAISE NOTICE 'Deprecated Signature of pgr_bdDijkstra';
+    has_reverse =_pgr_parameter_check('dijkstra', edges_sql, false);
     sql = edges_sql;
     IF (has_reverse != has_rcost) THEN
         IF (has_reverse) THEN
-            sql = 'SELECT id, source, target, cost, x1,y1, x2, y2 FROM (' || edges_sql || ') a';
+            sql = 'SELECT id, source, target, cost FROM (' || edges_sql || ') a';
         ELSE
             raise EXCEPTION 'has_rcost set to true but reverse_cost not found';
         END IF;
     END IF;
 
-    RETURN query SELECT seq - 1 AS seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost 
-    FROM pgr_astar(sql, source_id, target_id, directed);
-END
+    RETURN query SELECT seq-1 AS seq, node::integer AS id1, edge::integer AS id2, cost
+    FROM _pgr_bdDijkstra(sql, start_vid, end_vid, directed, false);
+  END
 $BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100
diff --git a/src/bd_dijkstra/sql/routing_bd_dijkstra.sql b/src/bd_dijkstra/sql/routing_bd_dijkstra.sql
deleted file mode 100644
index f6d62ac..0000000
--- a/src/bd_dijkstra/sql/routing_bd_dijkstra.sql
+++ /dev/null
@@ -1,39 +0,0 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
------------------------------------------------------------------------
--- Core function for bi_directional_dijkstra_shortest_path computation
--- See README for description
------------------------------------------------------------------------
---
---
-
-CREATE OR REPLACE FUNCTION pgr_bdDijkstra(
-		sql text, 
-		source_vid integer, 
-        target_vid integer, 
-        directed boolean, 
-        has_reverse_cost boolean)
-        RETURNS SETOF pgr_costResult
-        AS '$libdir/${PGROUTING_LIBRARY_NAME}', 'bidir_dijkstra_shortest_path'
-        LANGUAGE c IMMUTABLE STRICT;
-
diff --git a/src/bd_dijkstra/src/BiDirDijkstra.cpp b/src/bd_dijkstra/src/BiDirDijkstra.cpp
deleted file mode 100644
index e9fa103..0000000
--- a/src/bd_dijkstra/src/BiDirDijkstra.cpp
+++ /dev/null
@@ -1,460 +0,0 @@
-/*PGR-MIT*****************************************************************
-
-* $Id$
-*
-* Project: pgRouting bdsp and bdastar algorithms
-* Purpose:
-* Author:   Razequl Islam <ziboncsedu at gmail.com>
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-MIT*/
-
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <queue>
-#include <vector>
-#include <functional>
-
-#include "BiDirDijkstra.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-
-
-BiDirDijkstra::BiDirDijkstra(void) {
-}
-
-BiDirDijkstra::~BiDirDijkstra(void) {
-}
-
-void BiDirDijkstra::init() {
-    // max_edge_id = 0;
-    // max_node_id = 0;
-}
-
-/*
-    Initialization and allocation of memories.
-*/
-void BiDirDijkstra::initall(int maxNode) {
-    int i;
-    m_vecPath.clear();
-    // DBG("BiDirDijkstra::initall: allocating m_pFParent, m_pRParent maxNode: %d\n", maxNode+1);
-    m_pFParent = new PARENT_PATH[maxNode + 1];
-    m_pRParent = new PARENT_PATH[maxNode + 1];
-    // DBG("BiDirDijkstra::initall: allocated m_pFParent, m_pRParent\n");
-
-    // DBG("BiDirDijkstra::initall: allocating m_pFCost, m_pRCost maxNode: %d\n", maxNode+1);
-    m_pFCost = new double[maxNode + 1];
-    m_pRCost = new double[maxNode + 1];
-    // DBG("BiDirDijkstra::initall: allocated m_pFCost, m_pRCost\n");
-
-    for (i = 0; i <= maxNode; i++) {
-        m_pFParent[i].par_Node = -2;
-        m_pRParent[i].par_Node = -2;
-        m_pFCost[i] = INF;
-        m_pRCost[i] = INF;
-    }
-    m_MinCost = INF;
-    m_MidNode = -1;
-
-    // DBG("BiDirDijkstra::initall: m_vecNodeVector.reserve(%d)\n", maxNode + 1);
-    // reserve space for nodes
-    m_vecNodeVector.reserve(maxNode + 1);
-    // DBG("           space reserved!\n");
-}
-
-/*
-    Delete the allocated memories to avoid memory leak.
-*/
-void BiDirDijkstra::deleteall() {
-    std::vector<GraphNodeInfo*>::iterator itNode;
-    for (itNode = m_vecNodeVector.begin(); itNode != m_vecNodeVector.end(); itNode++) {
-        delete *itNode;
-    }
-    m_vecNodeVector.clear();
-    std::vector<GraphEdgeInfo*>::iterator itEdge;
-    for (itEdge = m_vecEdgeVector.begin(); itEdge != m_vecEdgeVector.end(); itEdge++) {
-        delete *itEdge;
-    }
-    m_vecEdgeVector.clear();
-    delete [] m_pFParent;
-    delete [] m_pRParent;
-    delete [] m_pFCost;
-    delete [] m_pRCost;
-}
-
-/*
-    Get the current cost from source to the current node if direction is 1 else the cost to reach target from the current node.
-*/
-double BiDirDijkstra::getcost(int node_id, int dir) {
-    if (dir == 1) {
-        return(m_pFCost[node_id]);
-    } else {
-        return(m_pRCost[node_id]);
-    }
-}
-/*
-    Set the forward or reverse cost list depending on dir (1 for forward search and -1 for reverse search.
-*/
-void BiDirDijkstra::setcost(int node_id, int dir, double c) {
-    if (dir == 1) {
-        m_pFCost[node_id] = c;
-    } else {
-        m_pRCost[node_id] = c;
-    }
-}
-
-void BiDirDijkstra::setparent(int node_id, int dir, int parnode, int paredge) {
-    if (dir == 1) {
-        m_pFParent[node_id].par_Node = parnode;
-        m_pFParent[node_id].par_Edge = paredge;
-    } else {
-        m_pRParent[node_id].par_Node = parnode;
-        m_pRParent[node_id].par_Edge = paredge;
-    }
-}
-
-/*
-    Reconstruct path for forward search. It is like normal dijkstra. The parent array contains the parent of the current node and there is a -1 in the source.
-    So one need to recurse up to the source and then add the current node and edge to the list.
-*/
-void BiDirDijkstra::fconstruct_path(int node_id) {
-    if (m_pFParent[node_id].par_Node == -1)
-        return;
-    fconstruct_path(m_pFParent[node_id].par_Node);
-    path_element_t pt;
-    pt.vertex_id = m_pFParent[node_id].par_Node;
-    pt.edge_id = m_pFParent[node_id].par_Edge;
-    pt.cost = m_pFCost[node_id] - m_pFCost[m_pFParent[node_id].par_Node];
-    m_vecPath.push_back(pt);
-}
-
-/*
-    Reconstruct path for the reverse search. In this case the subsequent node is stored in the parent and the target contains a -1. So one need to add the node
-    and edge to the list and then recurse through the parent up to hitting a -1.
-*/
-
-void BiDirDijkstra::rconstruct_path(int node_id) {
-    path_element_t pt;
-    if (m_pRParent[node_id].par_Node == -1) {
-        pt.vertex_id = node_id;
-        pt.edge_id = -1;
-        pt.cost = 0.0;
-        return;
-    }
-    pt.vertex_id = node_id;
-    pt.cost = m_pRCost[node_id] - m_pRCost[m_pRParent[node_id].par_Node];
-    pt.edge_id = m_pRParent[node_id].par_Edge;
-    m_vecPath.push_back(pt);
-    rconstruct_path(m_pRParent[node_id].par_Node);
-}
-
-/*
-    This is the main exploration module. The parameter dir indicates whether the exploration will be in forward or reverser direction. The reference to the corresponding
-    que is also passed as parameter que. The current node and the current costs are also available as parameter.
-*/
-
-void BiDirDijkstra::explore(int cur_node, double cur_cost, int dir, std::priority_queue<PDI, std::vector<PDI>, std::greater<PDI> > &que) {
-    int i;
-    // Number of connected edges
-    int con_edge = static_cast<int>(m_vecNodeVector[cur_node]->Connected_Edges_Index.size());
-    double edge_cost;
-
-    for (i = 0; i < con_edge; i++) {
-        int edge_index = m_vecNodeVector[cur_node]->Connected_Edges_Index[i];
-        // Get the edge from the edge list.
-        GraphEdgeInfo edge = *m_vecEdgeVector[edge_index];
-        // Get the connected node
-        int new_node = m_vecNodeVector[cur_node]->Connected_Nodes[i];
-
-        if (cur_node == edge.StartNode) {
-            // Current node is the startnode of the edge. For forward search it should use forward cost, otherwise it should use the reverse cost,
-            // i.e. if the reverse direction is valid then this node may be visited from the end node.
-            if (dir > 0)
-                edge_cost = edge.Cost;
-            else
-                edge_cost = edge.ReverseCost;
-
-            // Check if the direction is valid for exploration
-            if (edge.Direction == 0 ||  edge_cost >= 0.0) {
-                // Check if the current edge gives better result
-                if (cur_cost + edge_cost < getcost(new_node, dir)) {
-                    // explore the node, and push it in the queue
-                    setcost(new_node, dir, cur_cost + edge_cost);
-                    setparent(new_node, dir, cur_node, edge.EdgeID);
-                    que.push(std::make_pair(cur_cost + edge_cost, new_node));
-
-                    // Update the minimum cost found so far.
-                    if (getcost(new_node, dir) + getcost(new_node, dir * -1) < m_MinCost) {
-                        m_MinCost = getcost(new_node, dir) + getcost(new_node, dir * -1);
-                        m_MidNode = new_node;
-                    }
-                }
-            }
-        } else {
-            // Current node is the endnode of the edge. For forward search it should use reverse cost, otherwise it should use the forward cost,
-            // i.e. if the forward direction is valid then this node may be visited from the start node.
-            if (dir > 0)
-                edge_cost = edge.ReverseCost;
-            else
-                edge_cost = edge.Cost;
-
-            // Check if the direction is valid for exploration
-            if (edge.Direction == 0 ||  edge_cost >= 0.0) {
-                // Check if the current edge gives better result
-                if (cur_cost + edge_cost < getcost(new_node, dir)) {
-                    setcost(new_node, dir, cur_cost + edge_cost);
-                    setparent(new_node, dir, cur_node, edge.EdgeID);
-                    que.push(std::make_pair(cur_cost + edge_cost, new_node));
-
-                    // Update the minimum cost found so far.
-                    if (getcost(new_node, dir) + getcost(new_node, dir * -1) < m_MinCost) {
-                        m_MinCost = getcost(new_node, dir) + getcost(new_node, dir * -1);
-                        m_MidNode = new_node;
-                    }
-                }
-            }
-        }
-    }
-}
-
-/*
-    This is the entry function that the wrappers should call. Most of the parameters are trivial. maxNode refers to Maximum
-    node id. As we run node based exploration cost, parent etc will be based on maximam node id.
-*/
-
-
-int BiDirDijkstra::bidir_dijkstra(edge_t *edges, unsigned int edge_count, int maxNode, int start_vertex, int end_vertex,
-                path_element_t **path, int *path_count, char **err_msg) {
-    max_node_id = maxNode;
-    max_edge_id = -1;
-
-    // Allocate memory for local storage like cost and parent holder
-    // DBG("calling initall(maxNode = %d)\n", maxNode);
-    initall(maxNode);
-
-    // construct the graph from the edge list, i.e. populate node and edge data structures
-    // DBG("Calling construct_graph\n");
-    construct_graph(edges, edge_count, maxNode);
-
-
-    // int nodeCount = m_vecNodeVector.size();
-    // DBG("Setting up std::priority_queue\n");
-    std::priority_queue<PDI, std::vector<PDI>, std::greater<PDI> > fque;
-    std::priority_queue<PDI, std::vector<PDI>, std::greater<PDI> > rque;
-
-    // DBG("calling m_vecPath.clear()\n");
-    m_vecPath.clear();
-
-    // Initialize the forward search
-    m_pFParent[start_vertex].par_Node = -1;
-    m_pFParent[start_vertex].par_Edge = -1;
-    m_pFCost[start_vertex] = 0.0;
-    fque.push(std::make_pair(0.0, start_vertex));
-
-    // Initialize the reverse search
-    m_pRParent[end_vertex].par_Node = -1;
-    m_pRParent[end_vertex].par_Edge = -1;
-    m_pRCost[end_vertex] = 0.0;
-    rque.push(std::make_pair(0.0, end_vertex));
-
-    int i;
-    // int new_node;
-    int cur_node;
-    // int dir;
-
-/*
-    The main loop. The algorithm is as follows:
-    1. IF the sum of the current minimum of both heap is greater than so far found path, we cannot get any better, so break the loop.
-    2. IF the reverse heap minimum is lower than the forward heap minimum, explore from reverse direction.
-    3. ELSE explore from the forward directtion.
-*/
-
-    while (!fque.empty() &&  !rque.empty()) {
-        PDI fTop = fque.top();
-        PDI rTop = rque.top();
-        if (fTop.first + rTop.first > m_MinCost)  // We are done, there is no path with lower cost
-            break;
-
-        if (rTop.first < fTop.first) {
-            //  Explore from reverse queue
-            cur_node = rTop.second;
-            int dir = -1;
-            rque.pop();
-            explore(cur_node, rTop.first, dir, rque);
-        } else {
-            // Explore from forward queue
-            cur_node = fTop.second;
-            int dir = 1;
-            fque.pop();
-            explore(cur_node, fTop.first, dir, fque);
-        }
-    }
-
-/*
-    Path reconstruction part. m_MidNode is the joining point where two searches meet to make a shortest path. It is updated in explore.
-    If it contains -1, then no path is found. Other wise we have a shortest path and that is reconstructed in the m_vecPath.
-*/
-    if (m_MidNode == -1) {
-        *err_msg = (char *)"Path Not Found";
-        deleteall();
-        return -1;
-    } else {
-        // reconstruct path from forward search
-        fconstruct_path(m_MidNode);
-        // reconstruct path from backward search
-        rconstruct_path(m_MidNode);
-
-        // insert the last row in the path trace (having edge_id = -1 and cost = 0.0)
-        path_element_t pelement;
-        pelement.vertex_id = end_vertex;
-        pelement.edge_id = -1;
-        pelement.cost = 0.0;
-        m_vecPath.push_back(pelement);
-
-        // Transfer data path to path_element_t format and allocate memory and populate the pointer
-
-        // DBG("BiDirDijkstra::bidir_dijkstra: allocating path m_vecPath.size = %d\n", m_vecPath.size() + 1);
-        // *path = (path_element_t *) malloc(sizeof(path_element_t) * (m_vecPath.size() + 1));
-        *path = NULL;
-        *path = pgr_alloc(m_vecPath.size(), (*path));
-        *path_count = static_cast<int>(m_vecPath.size());
-        // DBG("BiDirDijkstra::bidir_dijkstra: allocated path\n");
-
-        for (i = 0; i < *path_count; i++) {
-            (*path)[i].vertex_id = m_vecPath[i].vertex_id;
-            (*path)[i].edge_id = m_vecPath[i].edge_id;
-            (*path)[i].cost = m_vecPath[i].cost;
-        }
-    }
-    // DBG("calling deleteall\n");
-    deleteall();
-    // DBG("back from deleteall\n");
-    return 0;
-}
-
-/*
-    Populate the member variables of the class using the edge list. Basically there is a node list and an edge list. Each node contains the list of adjacent nodes and
-    corresponding edge indices from edge list that connect this node with the adjacent nodes.
-*/
-
-bool BiDirDijkstra::construct_graph(edge_t* edges, int edge_count, int maxNode) {
-    int i;
-
-    /*
-    // Create a dummy node
-    DBG("Create a dummy node\n");
-    GraphNodeInfo nodeInfo;
-    DBG("calling nodeInfo.Connected_Edges_Index.clear\n");
-    nodeInfo.Connected_Edges_Index.clear();
-    DBG("calling nodeInfo.Connected_Nodes.clear\n");
-    nodeInfo.Connected_Nodes.clear();
-    */
-
-    // Insert the dummy node into the node list. This acts as place holder. Also change the nodeId so that nodeId and node index in the vector are same.
-    // There may be some nodes here that does not appear in the edge list. The size of the list is up to maxNode which is equal to maximum node id.
-    // DBG("m_vecNodeVector.push_back for 0 - %d\n", maxNode);
-    for (i = 0; i <= maxNode; i++) {
-        // Create a dummy node
-        GraphNodeInfo* nodeInfo = new GraphNodeInfo();
-        nodeInfo->Connected_Edges_Index.clear();
-        nodeInfo->Connected_Nodes.clear();
-
-        nodeInfo->NodeID = i;
-        m_vecNodeVector.push_back(nodeInfo);
-    }
-
-    // Process each edge from the edge list and update the member data structures accordingly.
-    // DBG("reserving space for m_vecEdgeVector.reserve(%d)\n", edge_count);
-    m_vecEdgeVector.reserve(edge_count);
-    // DBG("calling addEdge in a loop\n");
-    for (i = 0; i < edge_count; i++) {
-        addEdge(edges[i]);
-    }
-
-    return true;
-}
-
-/*
-    Process the edge and populate the member nodelist and edgelist. The nodelist already contains up to maxNode dummy entries with nodeId same as index. Now the
-    connectivity information needs to be updated.
-*/
-
-bool BiDirDijkstra::addEdge(edge_t edgeIn) {
-    // long lTest;
-
-    // Check if the edge is already processed.
-    Long2LongMap::iterator itMap = m_mapEdgeId2Index.find(edgeIn.id);
-    if (itMap != m_mapEdgeId2Index.end())
-        return false;
-
-
-    // Create a GraphEdgeInfo using the information of the current edge
-    GraphEdgeInfo *newEdge = new GraphEdgeInfo();
-    newEdge->EdgeID = static_cast<int>(edgeIn.id);
-    newEdge->EdgeIndex = static_cast<int>(m_vecEdgeVector.size());
-    newEdge->StartNode = static_cast<int>(edgeIn.source);
-    newEdge->EndNode = static_cast<int>(edgeIn.target);
-    newEdge->Cost = edgeIn.cost;
-    newEdge->ReverseCost = edgeIn.reverse_cost;
-
-    // Set the direction. If both cost and reverse cost has positive value the edge is bidirectional and direction field is 0. If cost is positive and reverse cost
-    // negative then the edge is unidirectional with direction = 1 (goes from source to target) otherwise it is unidirectional with direction = -1 (goes from target
-    // to source). Another way of creating unidirectional edge is assigning big values in cost or reverse_cost. In that case the direction is still zero and this case
-    // is handled in the algorithm automatically.
-    if (newEdge->Cost >= 0.0 &&  newEdge->ReverseCost >= 0) {
-        newEdge->Direction = 0;
-    } else if (newEdge->Cost >= 0.0) {
-        newEdge->Direction = 1;
-    } else {
-        newEdge->Direction = -1;
-    }
-
-    // Update max_edge_id
-    if (edgeIn.id > max_edge_id) {
-        max_edge_id = static_cast<int>(edgeIn.id);
-    }
-
-    // Update max_node_id
-    if (newEdge->StartNode > max_node_id) {
-        return false;  // max_node_id = newEdge.StartNode;
-    }
-    if (newEdge->EndNode > max_node_id) {
-        return false;  // max_node_id = newEdge.EdgeIndex;
-    }
-
-    // update connectivity information for the start node.
-    m_vecNodeVector[newEdge->StartNode]->Connected_Nodes.push_back(newEdge->EndNode);
-    m_vecNodeVector[newEdge->StartNode]->Connected_Edges_Index.push_back(newEdge->EdgeIndex);
-
-    // update connectivity information for the start node.
-    m_vecNodeVector[newEdge->EndNode]->Connected_Nodes.push_back(newEdge->StartNode);
-    m_vecNodeVector[newEdge->EndNode]->Connected_Edges_Index.push_back(newEdge->EdgeIndex);
-
-
-
-    // Adding edge to the list
-    m_mapEdgeId2Index.insert(std::make_pair(newEdge->EdgeID, m_vecEdgeVector.size()));
-    m_vecEdgeVector.push_back(newEdge);
-
-    return true;
-}
diff --git a/src/bd_dijkstra/src/BiDirDijkstra.h b/src/bd_dijkstra/src/BiDirDijkstra.h
deleted file mode 100644
index c4ae4a3..0000000
--- a/src/bd_dijkstra/src/BiDirDijkstra.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*PGR-MIT*****************************************************************
-
-* $Id$
-*
-* Project: pgRouting bdsp and bdastar algorithms
-* Purpose:
-* Author:   Razequl Islam <ziboncsedu at gmail.com>
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-MIT*/
-
-#ifndef SRC_BD_DIJKSTRA_SRC_BIDIRDIJKSTRA_H_
-#define SRC_BD_DIJKSTRA_SRC_BIDIRDIJKSTRA_H_
-#pragma once
-
-#include <vector>
-#include <map>
-#include <queue>
-#include <utility>
-#include <functional>
-
-#include "../../common/src/pgr_types.h"
-#include "./bdsp_driver.h"
-
-#define INF 1e15
-
-
-
-typedef std::vector<int64_t> LongVector;
-typedef std::vector<LongVector> VectorOfLongVector;
-typedef std::pair<double, int> PDI;
-
-typedef struct {
-    int par_Node;
-    int par_Edge;
-} PARENT_PATH;
-
-typedef struct {
-    int NodeID;
-    std::vector<int> Connected_Nodes;
-    std::vector<int> Connected_Edges_Index;
-} GraphNodeInfo;
-
-struct GraphEdgeInfo {
- public:
-    int EdgeID;
-    int EdgeIndex;
-    int Direction;
-    double Cost;
-    double ReverseCost;
-    int StartNode;
-    int EndNode;
-};
-
-typedef std::vector<GraphEdgeInfo*> GraphEdgeVector;
-typedef std::map<int64_t, LongVector> Long2LongVectorMap;
-typedef std::map<int64_t, int64_t> Long2LongMap;
-typedef std::vector<GraphNodeInfo*> GraphNodeVector;
-
-
-class BiDirDijkstra {
- public:
-     BiDirDijkstra(void);
-     ~BiDirDijkstra(void);
-
-     int bidir_dijkstra(edge_t *edges, unsigned int edge_count, int maxNode, int start_vertex, int end_vertex,
-             path_element_t **path, int *path_count, char **err_msg);
-
-
- private:
-     bool construct_graph(edge_t *edges, int edge_count, int maxNode);
-     void fconstruct_path(int node_id);
-     void rconstruct_path(int node_id);
-     bool addEdge(edge_t edgeIn);
-     bool connectEdge(GraphEdgeInfo& firstEdge, GraphEdgeInfo& secondEdge, bool bIsStartNodeSame);
-     void init();
-     void initall(int maxNode);
-     void deleteall();
-     void explore(int cur_node, double cur_cost, int dir, std::priority_queue<PDI, std::vector<PDI>, std::greater<PDI> > &que);
-     double getcost(int node_id, int dir);
-     void setcost(int node_id, int dir, double c);
-     void setparent(int node_id, int dir, int parnode, int paredge);
-
- private:
-     GraphEdgeVector m_vecEdgeVector;
-     Long2LongMap m_mapEdgeId2Index;
-     Long2LongVectorMap m_mapNodeId2Edge;
-     GraphNodeVector m_vecNodeVector;
-     int max_node_id;
-     int max_edge_id;
-     int m_lStartNodeId;
-     int m_lEndNodeId;
-
-     double m_MinCost;
-     int m_MidNode;
-     std::vector <path_element_t> m_vecPath;
-     PARENT_PATH *m_pFParent;
-     PARENT_PATH *m_pRParent;
-     double *m_pFCost;
-     double *m_pRCost;
-};
-
-#endif  // SRC_BD_DIJKSTRA_SRC_BIDIRDIJKSTRA_H_
diff --git a/src/bd_dijkstra/src/CMakeLists.txt b/src/bd_dijkstra/src/CMakeLists.txt
deleted file mode 100644
index 161833f..0000000
--- a/src/bd_dijkstra/src/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-ADD_LIBRARY(bd_dijkstra OBJECT 
-    bdsp.c 
-    bdsp_driver.cpp 
-    BiDirDijkstra.cpp)
-
diff --git a/src/bd_dijkstra/src/bdsp.c b/src/bd_dijkstra/src/bdsp.c
deleted file mode 100644
index f09e6f6..0000000
--- a/src/bd_dijkstra/src/bdsp.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*PGR-MIT*****************************************************************
-
-* $Id$
-*
-* Project: pgRouting bdsp and bdastar algorithms
-* Purpose:
-* Author:   Razequl Islam <ziboncsedu at gmail.com>
-Copyright (c) 2015 pgRouting developers
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-MIT*/
-
-
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-#include "fmgr.h"
-
-
-
-#include "bdsp_driver.h"
-
-
-#undef DEBUG
-#include "../../common/src/debug_macro.h"
-#include "../../common/src/pgr_types.h"
-#include "../../common/src/postgres_connection.h"
-
-// The number of tuples to fetch from the SPI cursor at each iteration
-#define TUPLIMIT 1000
-
-PGDLLEXPORT Datum bidir_dijkstra_shortest_path(PG_FUNCTION_ARGS);
-
-typedef struct edge_columns {
-  int id;
-  int source;
-  int target;
-  int cost;
-  int reverse_cost;
-} edge_columns_t;
-
-
-
-/*
- * This function fetches the edge columns from the SPITupleTable.
- *
-*/
-static int
-fetch_edge_columns(SPITupleTable *tuptable, edge_columns_t *edge_columns,
-                   bool has_reverse_cost) {
-  edge_columns->id = SPI_fnumber(SPI_tuptable->tupdesc, "id");
-  edge_columns->source = SPI_fnumber(SPI_tuptable->tupdesc, "source");
-  edge_columns->target = SPI_fnumber(SPI_tuptable->tupdesc, "target");
-  edge_columns->cost = SPI_fnumber(SPI_tuptable->tupdesc, "cost");
-
-  if (edge_columns->id == SPI_ERROR_NOATTRIBUTE ||
-      edge_columns->source == SPI_ERROR_NOATTRIBUTE ||
-      edge_columns->target == SPI_ERROR_NOATTRIBUTE ||
-      edge_columns->cost == SPI_ERROR_NOATTRIBUTE) {
-      elog(ERROR, "Error, query must return columns "
-           "'id', 'source', 'target' and 'cost'");
-      return -1;
-  }
-
-  if (SPI_gettypeid(SPI_tuptable->tupdesc, edge_columns->source) != INT4OID ||
-      SPI_gettypeid(SPI_tuptable->tupdesc, edge_columns->target) != INT4OID ||
-      SPI_gettypeid(SPI_tuptable->tupdesc, edge_columns->cost) != FLOAT8OID) {
-      elog(ERROR, "Error, columns 'source', 'target' must be of type int4, 'cost' must be of type float8");
-      return -1;
-  }
-
-  PGR_DBG("columns: id %i source %i target %i cost %i",
-      edge_columns->id, edge_columns->source,
-      edge_columns->target, edge_columns->cost);
-
-  if (has_reverse_cost) {
-      edge_columns->reverse_cost = SPI_fnumber(SPI_tuptable->tupdesc,
-                                               "reverse_cost");
-
-      if (edge_columns->reverse_cost == SPI_ERROR_NOATTRIBUTE) {
-          elog(ERROR, "Error, reverse_cost is used, but query did't return "
-               "'reverse_cost' column");
-          return -1;
-      }
-
-      if (SPI_gettypeid(SPI_tuptable->tupdesc, edge_columns->reverse_cost)
-            != FLOAT8OID) {
-          elog(ERROR, "Error, columns 'reverse_cost' must be of type float8");
-          return -1;
-      }
-
-      PGR_DBG("columns: reverse_cost cost %i", edge_columns->reverse_cost);
-  }
-
-  return 0;
-}
-
-/*
- * To fetch a edge from Tuple.
- *
- */
-
-static void
-fetch_edge(HeapTuple *tuple, TupleDesc *tupdesc,
-           edge_columns_t *edge_columns, edge_t *target_edge) {
-  Datum binval;
-  bool isnull;
-
-  binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->id, &isnull);
-  if (isnull) elog(ERROR, "id contains a null value");
-  target_edge->id = DatumGetInt32(binval);
-
-  binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->source, &isnull);
-  if (isnull) elog(ERROR, "source contains a null value");
-  target_edge->source = DatumGetInt32(binval);
-
-  binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->target, &isnull);
-  if (isnull) elog(ERROR, "target contains a null value");
-  target_edge->target = DatumGetInt32(binval);
-
-  binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->cost, &isnull);
-  if (isnull) elog(ERROR, "cost contains a null value");
-  target_edge->cost = DatumGetFloat8(binval);
-
-  if (edge_columns->reverse_cost != -1) {
-      binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->reverse_cost,
-                             &isnull);
-      if (isnull) elog(ERROR, "reverse_cost contains a null value");
-      target_edge->reverse_cost = DatumGetFloat8(binval);
-  }
-}
-
-static int compute_bidirsp(char* sql, int64_t start_vertex,
-                                 int64_t end_vertex, bool directed,
-                                 bool has_reverse_cost,
-                                 path_element_t **path, int *path_count) {
-  void *SPIplan;
-  Portal SPIportal;
-  bool moredata = TRUE;
-  size_t ntuples;
-  edge_t *edges = NULL;
-  size_t total_tuples = 0;
-#ifndef _MSC_VER
-  edge_columns_t edge_columns = {.id = -1, .source = -1, .target = -1,
-                                 .cost = -1, .reverse_cost = -1};
-#else  //  _MSC_VER
-  edge_columns_t edge_columns = {-1, -1, -1, -1, -1};
-#endif  //  _MSC_VER
-  int64_t v_max_id = 0;
-  int64_t v_min_id = INT_MAX;
-
-  int s_count = 0;
-  int t_count = 0;
-
-  char *err_msg;
-  int ret = -1;
-  int64_t z;
-
-  PGR_DBG("start shortest_path\n");
-
-  pgr_SPI_connect();
-  SPIplan = pgr_SPI_prepare(sql);
-  SPIportal = pgr_SPI_cursor_open(SPIplan);
-
-  while (moredata == TRUE) {
-      SPI_cursor_fetch(SPIportal, TRUE, TUPLIMIT);
-
-      if (edge_columns.id == -1) {
-          if (fetch_edge_columns(SPI_tuptable, &edge_columns,
-                                 has_reverse_cost) == -1) {
-            pgr_SPI_finish();
-            return -1;
-          }
-      }
-
-      ntuples = SPI_processed;
-      total_tuples += ntuples;
-      if (!edges)
-        edges = palloc(total_tuples * sizeof(edge_t));
-      else
-        edges = repalloc(edges, total_tuples * sizeof(edge_t));
-
-      if (edges == NULL) {
-          elog(ERROR, "Out of memory");
-            pgr_SPI_finish();
-            return -1;
-      }
-
-      if (ntuples > 0) {
-          uint64_t t;
-          SPITupleTable *tuptable = SPI_tuptable;
-          TupleDesc tupdesc = SPI_tuptable->tupdesc;
-
-          for (t = 0; t < ntuples; t++) {
-              HeapTuple tuple = tuptable->vals[t];
-              fetch_edge(&tuple, &tupdesc, &edge_columns,
-                         &edges[total_tuples - ntuples + t]);
-          }
-          SPI_freetuptable(tuptable);
-      } else {
-          moredata = FALSE;
-      }
-  }
-
-  // defining min and max vertex id
-
-  PGR_DBG("Total %ld tuples", total_tuples);
-
-  for (z = 0; z < (int64_t)total_tuples; z++) {
-    if (edges[z].source < v_min_id) v_min_id = edges[z].source;
-    if (edges[z].source > v_max_id) v_max_id = edges[z].source;
-    if (edges[z].target < v_min_id) v_min_id = edges[z].target;
-    if (edges[z].target > v_max_id) v_max_id = edges[z].target;
-    // PGR_DBG("%i <-> %i", v_min_id, v_max_id);
-  }
-
-  //::::::::::::::::::::::::::::::::::::
-  //:: reducing vertex id (renumbering)
-  //::::::::::::::::::::::::::::::::::::
-  for (z = 0; z < (int64_t)total_tuples; z++) {
-    // check if edges[] contains source and target
-    if (edges[z].source == start_vertex ||  edges[z].target == start_vertex)
-      ++s_count;
-    if (edges[z].source == end_vertex ||  edges[z].target == end_vertex)
-      ++t_count;
-
-    edges[z].source -= v_min_id;
-    edges[z].target -= v_min_id;
-    // PGR_DBG("%i - %i", edges[z].source, edges[z].target);
-  }
-
-  PGR_DBG("Total %ld tuples", total_tuples);
-
-  if (s_count == 0) {
-    elog(ERROR, "Start vertex was not found.");
-    return -1;
-  }
-
-  if (t_count == 0) {
-    elog(ERROR, "Target vertex was not found.");
-    return -1;
-  }
-
-  start_vertex -= v_min_id;
-  end_vertex   -= v_min_id;
-
-  // v_max_id -= v_min_id;
-
-  PGR_DBG("Calling bidirsp_wrapper(edges, %ld, %ld, %ld, %ld, %d, %d, ...)\n",
-        total_tuples, v_max_id + 2, start_vertex, end_vertex,
-        directed, has_reverse_cost);
-
-  ret = bidirsp_wrapper(edges, (unsigned int)total_tuples, (int)v_max_id + 2, (int)start_vertex, (int)end_vertex,
-                       directed, has_reverse_cost,
-                       path, path_count, &err_msg);
-
-  PGR_DBG("Back from bidirsp_wrapper() ret: %d", ret);
-  if (ret < 0) {
-      elog(ERROR, "Error computing path: %s", err_msg);
-  }
-
-  PGR_DBG("*path_count = %i\n", *path_count);
-
-  //::::::::::::::::::::::::::::::::
-  //:: restoring original vertex id
-  //::::::::::::::::::::::::::::::::
-  for (z = 0; z < *path_count; z++) {
-    // PGR_DBG("vetex %i\n", (*path)[z].vertex_id);
-    (*path)[z].vertex_id+= v_min_id;
-  }
-
-  PGR_DBG("ret = %i\n", ret);
-
-  pgr_SPI_finish();
-  return 0;
-}
-
-
-PG_FUNCTION_INFO_V1(bidir_dijkstra_shortest_path);
-PGDLLEXPORT Datum
-bidir_dijkstra_shortest_path(PG_FUNCTION_ARGS) {
-  FuncCallContext     *funcctx;
-  uint32_t                  call_cntr;
-  uint32_t                  max_calls;
-  TupleDesc            tuple_desc;
-  path_element_t      *path;
-  // char *               sql;
-
-
-  // stuff done only on the first call of the function
-  if (SRF_IS_FIRSTCALL()) {
-      MemoryContext   oldcontext;
-      int path_count = 0;
-#ifdef DEBUG
-      int ret = -1;
-#endif
-      int i;
-
-      // create a function context for cross-call persistence
-      funcctx = SRF_FIRSTCALL_INIT();
-
-      // switch to memory context appropriate for multiple function calls
-      oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
-
-      // verify that the first 5 args are not NULL
-      for (i = 0; i < 5; i++)
-        if (PG_ARGISNULL(i)) {
-            elog(ERROR, "bidir_dijkstra_shortest_path(): Argument %i may not be NULL", i+1);
-        }
-
-      PGR_DBG("Calling compute_bidirsp");
-
-#ifdef DEBUG
-      ret =
-#endif
-        compute_bidirsp(pgr_text2char(PG_GETARG_TEXT_P(0)),
-                                   (int64_t)PG_GETARG_INT32(1),
-                                   (int64_t)PG_GETARG_INT32(2),
-                                   PG_GETARG_BOOL(3),
-                                   PG_GETARG_BOOL(4),
-                                   &path, &path_count);
-#ifdef DEBUG
-    double total_cost = 0;
-      PGR_DBG("Ret is %i", ret);
-      if (ret >= 0) {
-          int i;
-          for (i = 0; i < path_count; i++) {
-             // PGR_DBG("Step %i vertex_id %i ", i, path[i].vertex_id);
-             // PGR_DBG("        edge_id    %i ", path[i].edge_id);
-             // PGR_DBG("        cost       %f ", path[i].cost);
-              total_cost+= path[i].cost;
-            }
-        }
-        PGR_DBG("Total cost is: %f", total_cost);
-#endif
-
-      // total number of tuples to be returned
-      funcctx->max_calls = (uint32_t)path_count;
-      funcctx->user_fctx = path;
-
-      funcctx->tuple_desc =
-          BlessTupleDesc(RelationNameGetTupleDesc("pgr_costResult"));
-
-      MemoryContextSwitchTo(oldcontext);
-  }
-
-  // stuff done on every call of the function
-  funcctx = SRF_PERCALL_SETUP();
-
-  call_cntr = (uint32_t)funcctx->call_cntr;
-  max_calls = (uint32_t)funcctx->max_calls;
-  tuple_desc = funcctx->tuple_desc;
-  path = (path_element_t*) funcctx->user_fctx;
-
-  if (call_cntr < max_calls) {   // do when there is more left to send
-      HeapTuple    tuple;
-      Datum        result;
-      Datum *values;
-      bool* nulls;
-
-      values = palloc(4 * sizeof(Datum));
-      nulls = palloc(4 * sizeof(bool));
-
-      values[0] = Int32GetDatum(call_cntr);
-      nulls[0] = false;
-      values[1] = Int32GetDatum(path[call_cntr].vertex_id);
-      nulls[1] = false;
-      values[2] = Int32GetDatum(path[call_cntr].edge_id);
-      nulls[3] = false;
-      values[3] = Float8GetDatum(path[call_cntr].cost);
-      nulls[3] = false;
-
-      tuple = heap_form_tuple(tuple_desc, values, nulls);
-
-      // make the tuple into a datum
-      result = HeapTupleGetDatum(tuple);
-
-      // clean up (this is not really necessary)
-      pfree(values);
-      pfree(nulls);
-
-      SRF_RETURN_NEXT(funcctx, result);
-  } else {   // do when there is no more left
-      PGR_DBG("Going to free path");
-      if (path) free(path);
-      SRF_RETURN_DONE(funcctx);
-  }
-}
diff --git a/src/bd_dijkstra/src/bdsp_driver.cpp b/src/bd_dijkstra/src/bdsp_driver.cpp
deleted file mode 100644
index a7c7d45..0000000
--- a/src/bd_dijkstra/src/bdsp_driver.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*PGR-MIT*****************************************************************
-
-* $Id$
-*
-* Project: pgRouting bdsp and bdastar algorithms
-* Purpose:
-* Author:   Razequl Islam <ziboncsedu at gmail.com>
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-MIT*/
-
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include "./bdsp_driver.h"
-
-#include <exception>
-#include "./BiDirDijkstra.h"
-
-
-
-int bidirsp_wrapper(
-        edge_t *edges,
-        unsigned int edge_count,
-        int maxNode,
-        int start_vertex,
-        int end_vertex,
-        bool directed,
-        bool has_reverse_cost,
-        path_element_t **path,
-        int *path_count,
-        char **err_msg
-        ) {
-    int res;
-
-    try {
-        // DBG("Calling BiDirDijkstra initializer.\n");
-        BiDirDijkstra bddijkstra;
-        // DBG("BiDirDijkstra initialized\n");
-        res = bddijkstra.bidir_dijkstra(edges, edge_count, maxNode, start_vertex, end_vertex, path, path_count, err_msg);
-        // TODO(someone) this are an unused parameters have to be used
-        if (has_reverse_cost) {}
-        if (directed) {}
-    }
-    catch(std::exception& e) {
-        // DBG("catch(std::exception e.what: %s\n", e.what());
-        *err_msg = (char *) e.what();
-        return -1;
-    }
-    catch(...) {
-        // DBG("catch(...\n");
-        *err_msg = (char *) "Caught unknown exception!";
-        return -1;
-    }
-
-    // DBG("Back from bddijkstra.bidir_dijkstra()\n");
-    if (res < 0)
-        return res;
-    return 0;
-}
diff --git a/src/bd_dijkstra/src/bdsp_driver.h b/src/bd_dijkstra/src/bdsp_driver.h
deleted file mode 100644
index 1320763..0000000
--- a/src/bd_dijkstra/src/bdsp_driver.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*PGR-GNU*****************************************************************
-
- * Bi Directional Shortest path algorithm for PostgreSQL
- *
- * Copyright (c) 2005 Sylvain Pasche
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-#ifndef SRC_BD_DIJKSTRA_SRC_BDSP_DRIVER_H_
-#define SRC_BD_DIJKSTRA_SRC_BDSP_DRIVER_H_
-
-#if defined(_MSC_VER) &&  _MSC_VER < 1600
-#define ELOG_H
-#endif
-#include "../../common/src/pgr_types.h"
-
-typedef pgr_edge_t edge_t;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int bidirsp_wrapper(edge_t *edges,
-            unsigned int edge_count,
-            int maxNode,
-            int start_vertex,
-            int end_vertex,
-            bool directed,
-            bool has_reverse_cost,
-            path_element_t **path,
-            int *path_count,
-            char **err_msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_BD_DIJKSTRA_SRC_BDSP_DRIVER_H_
diff --git a/src/bd_dijkstra/test/CMakeLists.txt b/src/bd_dijkstra/test/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/bd_dijkstra/test/bd_dijkstra-any-01.result b/src/bd_dijkstra/test/bd_dijkstra-any-01.result
index 4e51168..a83377b 100644
--- a/src/bd_dijkstra/test/bd_dijkstra-any-01.result
+++ b/src/bd_dijkstra/test/bd_dijkstra-any-01.result
@@ -1,101 +1,102 @@
-0|5700|20787|0.006774
-1|10932|20756|0.040876
-2|10931|20797|0.002564
-3|7661|20796|0.002581
-4|10943|20776|0.040800
-5|10941|20772|0.005720
-6|3415|20771|0.007463
-7|10940|20841|0.187594
-8|10952|20812|0.005045
-9|7034|20811|0.004532
-10|10951|20833|0.177477
-11|10944|20779|0.008539
-12|8910|20778|0.006447
-13|10929|20835|0.071114
-14|10948|20794|0.013276
-15|8908|12990|0.013157
-16|8325|13831|0.009169
-17|3753|13830|0.196045
-18|6774|13829|0.032840
-19|8304|13828|0.117213
-20|9205|13827|0.010639
-21|8994|13165|0.012931
-22|8977|13164|0.008029
-23|8976|13163|0.069895
-24|8993|13162|0.009638
-25|8351|13161|0.099016
-26|8992|13160|0.187353
-27|8991|13159|0.018649
-28|2962|13158|0.071931
-29|1285|13157|0.118340
-30|8989|13156|0.006317
-31|8988|13155|0.079185
-32|21|13154|0.057101
-33|6436|13153|0.083288
-34|637|13152|0.099744
-35|8987|13151|0.057786
-36|398|13150|0.120005
-37|8496|13149|0.069498
-38|8986|13148|0.014323
-39|8985|13167|0.070884
-40|8451|11869|0.006925
-41|476|11868|0.196533
-42|529|11867|0.005677
-43|8450|11871|0.118857
-44|8452|11878|0.083250
-45|8455|11880|0.048821
-46|8456|11883|0.064572
-47|1807|11882|0.101185
-48|8457|11894|0.046805
-49|8465|15481|0.180992
-50|8522|15480|0.016198
-51|9621|15479|0.209882
-52|2808|15478|0.019312
-53|8311|15477|0.113487
-54|8583|16981|0.045667
-55|10046|16982|0.022635
-56|8467|16983|0.022924
-57|9624|15487|0.034042
-58|8468|11899|0.018103
-59|3170|19357|0.047698
-60|9949|19358|0.059093
-61|10479|19359|0.051651
-62|9948|19360|0.051709
-63|8509|19374|0.106794
-64|9595|19375|0.102428
-65|8634|19376|0.107643
-66|10174|19377|0.096140
-67|10482|19378|0.009782
-68|9194|19379|0.102702
-69|4397|19380|0.108243
-70|3002|19381|0.098919
-71|10484|19382|0.006171
-72|5962|19383|0.005429
-73|10485|19384|0.047276
-74|10459|19385|0.052864
-75|7579|19386|0.052378
-76|10455|19387|0.052414
-77|5805|19388|0.081956
-78|10462|19389|0.016974
-79|8768|12598|0.059630
-80|8767|19290|0.117748
-81|10470|19289|0.065769
-82|10469|19288|0.066230
-83|10468|19287|0.111281
-84|9967|16642|0.029056
-85|9956|16621|0.014614
-86|9938|16626|0.007036
-87|9960|16649|0.081206
-88|9968|16650|0.012230
-89|9969|16647|0.012368
-90|5457|6266|0.055134
-91|5458|6267|0.053860
-92|5459|6268|0.109859
-93|5460|6269|0.104952
-94|5461|6270|0.053766
-95|5462|6271|0.046800
-96|5463|12897|0.170300
-97|8880|15060|0.049014
-98|7101|15059|0.047811
-99|9313|15058|0.044674
-100|6733|-1|0.000000
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|5700|20787|0.006774
+1|10932|20756|0.040876
+2|10931|20797|0.002564
+3|7661|20796|0.002581
+4|10943|20776|0.040800
+5|10941|20772|0.005720
+6|3415|20771|0.007463
+7|10940|20841|0.187594
+8|10952|20812|0.005045
+9|7034|20811|0.004532
+10|10951|20833|0.177477
+11|10944|20779|0.008539
+12|8910|20778|0.006447
+13|10929|20835|0.071114
+14|10948|20794|0.013276
+15|8908|12990|0.013157
+16|8325|13831|0.009169
+17|3753|13830|0.196045
+18|6774|13829|0.032840
+19|8304|13828|0.117213
+20|9205|13827|0.010639
+21|8994|13165|0.012931
+22|8977|13164|0.008029
+23|8976|13163|0.069895
+24|8993|13162|0.009638
+25|8351|13161|0.099016
+26|8992|13160|0.187353
+27|8991|13159|0.018649
+28|2962|13158|0.071931
+29|1285|13157|0.118340
+30|8989|13156|0.006317
+31|8988|13155|0.079185
+32|21|13154|0.057101
+33|6436|13153|0.083288
+34|637|13152|0.099744
+35|8987|13151|0.057786
+36|398|13150|0.120005
+37|8496|13149|0.069498
+38|8986|13148|0.014323
+39|8985|13167|0.070884
+40|8451|11869|0.006925
+41|476|11868|0.196533
+42|529|11867|0.005677
+43|8450|11871|0.118857
+44|8452|11878|0.083250
+45|8455|11880|0.048821
+46|8456|11883|0.064572
+47|1807|11882|0.101185
+48|8457|11894|0.046805
+49|8465|15481|0.180992
+50|8522|15480|0.016198
+51|9621|15479|0.209882
+52|2808|15478|0.019312
+53|8311|15477|0.113487
+54|8583|16981|0.045667
+55|10046|16982|0.022635
+56|8467|16983|0.022924
+57|9624|15487|0.034042
+58|8468|11899|0.018103
+59|3170|19357|0.047698
+60|9949|19358|0.059093
+61|10479|19359|0.051651
+62|9948|19360|0.051709
+63|8509|19374|0.106794
+64|9595|19375|0.102428
+65|8634|19376|0.107643
+66|10174|19377|0.096140
+67|10482|19378|0.009782
+68|9194|19379|0.102702
+69|4397|19380|0.108243
+70|3002|19381|0.098919
+71|10484|19382|0.006171
+72|5962|19383|0.005429
+73|10485|19384|0.047276
+74|10459|19385|0.052864
+75|7579|19386|0.052378
+76|10455|19387|0.052414
+77|5805|19388|0.081956
+78|10462|19389|0.016974
+79|8768|12598|0.059630
+80|8767|19290|0.117748
+81|10470|19289|0.065769
+82|10469|19288|0.066230
+83|10468|19287|0.111281
+84|9967|16642|0.029056
+85|9956|16621|0.014614
+86|9938|16626|0.007036
+87|9960|16649|0.081206
+88|9968|16650|0.012230
+89|9969|16647|0.012368
+90|5457|6266|0.055134
+91|5458|6267|0.053860
+92|5459|6268|0.109859
+93|5460|6269|0.104952
+94|5461|6270|0.053766
+95|5462|6271|0.046800
+96|5463|12897|0.170300
+97|8880|15060|0.049014
+98|7101|15059|0.047811
+99|9313|15058|0.044674
+100|6733|-1|0.000000
diff --git a/src/bd_dijkstra/test/bd_dijkstra-any-02.result b/src/bd_dijkstra/test/bd_dijkstra-any-02.result
index ae93722..a2bfe1d 100644
--- a/src/bd_dijkstra/test/bd_dijkstra-any-02.result
+++ b/src/bd_dijkstra/test/bd_dijkstra-any-02.result
@@ -1,60 +1,61 @@
-0|6585|17975|0.200230
-1|5367|17976|0.155428
-2|7125|17977|0.178581
-3|613|17978|0.175712
-4|10025|17979|0.173776
-5|5802|6758|0.013489
-6|5803|6759|0.065176
-7|5804|6760|0.008679
-8|5805|6761|0.145097
-9|5806|6762|0.146807
-10|5807|6763|0.097186
-11|5808|6764|0.050569
-12|5809|20663|0.169650
-13|4620|20662|0.023243
-14|5774|20661|0.120390
-15|6482|20660|0.002769
-16|5957|20659|0.087952
-17|8289|20658|0.048701
-18|10884|20657|0.009212
-19|10883|20656|0.080500
-20|9954|20655|0.075280
-21|4390|16876|0.147691
-22|9203|17805|0.063931
-23|7892|17804|0.015429
-24|8417|17803|0.069119
-25|10171|17802|0.075825
-26|9953|17801|0.045079
-27|8859|17800|0.029389
-28|8536|17799|0.072658
-29|10180|17798|0.076558
-30|9592|17797|0.027637
-31|9318|17796|0.114755
-32|10179|17795|0.007150
-33|10178|17794|0.087467
-34|8402|17793|0.062258
-35|6179|17792|0.109483
-36|8508|17791|0.036248
-37|3305|17790|0.069816
-38|8512|17789|0.064158
-39|998|17807|0.471312
-40|2698|2743|0.102019
-41|2563|9039|0.341756
-42|2043|9040|0.587619
-43|4280|9041|0.145996
-44|2317|9042|0.268754
-45|7135|9043|0.121251
-46|4276|9044|0.145396
-47|6167|9045|0.583394
-48|7136|9046|0.043099
-49|7137|19345|0.053510
-50|10475|19344|0.015153
-51|10142|19343|0.064475
-52|10140|17566|0.135370
-53|8539|17565|0.057338
-54|10138|17558|0.064893
-55|6943|17559|0.201703
-56|8140|17560|0.469613
-57|10139|20189|0.060217
-58|10705|20185|0.055053
-59|8247|-1|0.000000
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|6585|17975|0.200230
+1|5367|17976|0.155428
+2|7125|17977|0.178581
+3|613|17978|0.175712
+4|10025|17979|0.173776
+5|5802|6758|0.013489
+6|5803|6759|0.065176
+7|5804|6760|0.008679
+8|5805|6761|0.145097
+9|5806|6762|0.146807
+10|5807|6763|0.097186
+11|5808|6764|0.050569
+12|5809|20663|0.169650
+13|4620|20662|0.023243
+14|5774|20661|0.120390
+15|6482|20660|0.002769
+16|5957|20659|0.087952
+17|8289|20658|0.048701
+18|10884|20657|0.009212
+19|10883|20656|0.080500
+20|9954|20655|0.075280
+21|4390|16876|0.147691
+22|9203|17805|0.063931
+23|7892|17804|0.015429
+24|8417|17803|0.069119
+25|10171|17802|0.075825
+26|9953|17801|0.045079
+27|8859|17800|0.029389
+28|8536|17799|0.072658
+29|10180|17798|0.076558
+30|9592|17797|0.027637
+31|9318|17796|0.114755
+32|10179|17795|0.007150
+33|10178|17794|0.087467
+34|8402|17793|0.062258
+35|6179|17792|0.109483
+36|8508|17791|0.036248
+37|3305|17790|0.069816
+38|8512|17789|0.064158
+39|998|17807|0.471312
+40|2698|2743|0.102019
+41|2563|9039|0.341756
+42|2043|9040|0.587619
+43|4280|9041|0.145996
+44|2317|9042|0.268754
+45|7135|9043|0.121251
+46|4276|9044|0.145396
+47|6167|9045|0.583394
+48|7136|9046|0.043099
+49|7137|19345|0.053510
+50|10475|19344|0.015153
+51|10142|19343|0.064475
+52|10140|17566|0.135370
+53|8539|17565|0.057338
+54|10138|17558|0.064893
+55|6943|17559|0.201703
+56|8140|17560|0.469613
+57|10139|20189|0.060217
+58|10705|20185|0.055053
+59|8247|-1|0.000000
diff --git a/src/bd_dijkstra/test/bd_dijkstra-any-03.result b/src/bd_dijkstra/test/bd_dijkstra-any-03.result
index 2a83d54..1da08ed 100644
--- a/src/bd_dijkstra/test/bd_dijkstra-any-03.result
+++ b/src/bd_dijkstra/test/bd_dijkstra-any-03.result
@@ -1,2 +1,3 @@
-0|14822|14822|0.060319
-1|-1|-1|0.000000
+NOTICE: Deprecated Signature of pgr_bdDijkstra
+0|14822|14822|0.060319
+1|-1|-1|0.000000
diff --git a/src/bd_dijkstra/test/bd_dijkstra-any-04.result b/src/bd_dijkstra/test/bd_dijkstra-any-04.result
index 5988b27..59b94cc 100644
--- a/src/bd_dijkstra/test/bd_dijkstra-any-04.result
+++ b/src/bd_dijkstra/test/bd_dijkstra-any-04.result
@@ -1,2 +1,3 @@
-0|3606|14822|0.060319
-1|9426|-1|0.000000
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|3606|14822|0.060319
+1|9426|-1|0.000000
diff --git a/src/bd_dijkstra/test/bd_dijkstra-any-05.result b/src/bd_dijkstra/test/bd_dijkstra-any-05.result
index 73c2014..c092c44 100644
--- a/src/bd_dijkstra/test/bd_dijkstra-any-05.result
+++ b/src/bd_dijkstra/test/bd_dijkstra-any-05.result
@@ -1,101 +1,102 @@
-0|6733|15058|0.044674
-1|9313|15059|0.047811
-2|7101|15060|0.049014
-3|8880|12897|0.170300
-4|5463|6271|0.046800
-5|5462|6270|0.053766
-6|5461|6269|0.104952
-7|5460|6268|0.109859
-8|5459|6267|0.053860
-9|5458|6266|0.055134
-10|5457|16647|0.012368
-11|9969|16650|0.012230
-12|9968|16649|0.081206
-13|9960|16626|0.007036
-14|9938|16621|0.014614
-15|9956|16642|0.029056
-16|9967|19287|0.111281
-17|10468|19288|0.066230
-18|10469|19289|0.065769
-19|10470|19290|0.117748
-20|8767|12598|0.059630
-21|8768|19389|0.016974
-22|10462|19388|0.081956
-23|5805|19387|0.052414
-24|10455|19386|0.052378
-25|7579|19385|0.052864
-26|10459|19384|0.047276
-27|10485|19383|0.005429
-28|5962|19382|0.006171
-29|10484|19381|0.098919
-30|3002|19380|0.108243
-31|4397|19379|0.102702
-32|9194|19378|0.009782
-33|10482|19377|0.096140
-34|10174|19376|0.107643
-35|8634|19375|0.102428
-36|9595|19374|0.106794
-37|8509|19360|0.051709
-38|9948|19359|0.051651
-39|10479|19358|0.059093
-40|9949|19357|0.047698
-41|3170|11899|0.018103
-42|8468|15487|0.034042
-43|9624|16983|0.022924
-44|8467|16982|0.022635
-45|10046|16981|0.045667
-46|8583|15477|0.113487
-47|8311|15478|0.019312
-48|2808|15479|0.209882
-49|9621|15480|0.016198
-50|8522|15481|0.180992
-51|8465|11894|0.046805
-52|8457|11882|0.101185
-53|1807|11883|0.064572
-54|8456|11880|0.048821
-55|8455|11878|0.083250
-56|8452|11871|0.118857
-57|8450|11867|0.005677
-58|529|11868|0.196533
-59|476|11869|0.006925
-60|8451|13167|0.070884
-61|8985|13148|0.014323
-62|8986|13149|0.069498
-63|8496|13150|0.120005
-64|398|13151|0.057786
-65|8987|13152|0.099744
-66|637|13153|0.083288
-67|6436|13154|0.057101
-68|21|13155|0.079185
-69|8988|13156|0.006317
-70|8989|13157|0.118340
-71|1285|13158|0.071931
-72|2962|13159|0.018649
-73|8991|13160|0.187353
-74|8992|13161|0.099016
-75|8351|13162|0.009638
-76|8993|13163|0.069895
-77|8976|13164|0.008029
-78|8977|13165|0.012931
-79|8994|13827|0.010639
-80|9205|13828|0.117213
-81|8304|13829|0.032840
-82|6774|13830|0.196045
-83|3753|13831|0.009169
-84|8325|12990|0.013157
-85|8908|20794|0.013276
-86|10948|20835|0.071114
-87|10929|20778|0.006447
-88|8910|20779|0.008539
-89|10944|20833|0.177477
-90|10951|20811|0.004532
-91|7034|20812|0.005045
-92|10952|20841|0.187594
-93|10940|20771|0.007463
-94|3415|20772|0.005720
-95|10941|20776|0.040800
-96|10943|20796|0.002581
-97|7661|20797|0.002564
-98|10931|20756|0.040876
-99|10932|20787|0.006774
-100|5700|-1|0.000000
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|6733|15058|0.044674
+1|9313|15059|0.047811
+2|7101|15060|0.049014
+3|8880|12897|0.170300
+4|5463|6271|0.046800
+5|5462|6270|0.053766
+6|5461|6269|0.104952
+7|5460|6268|0.109859
+8|5459|6267|0.053860
+9|5458|6266|0.055134
+10|5457|16647|0.012368
+11|9969|16650|0.012230
+12|9968|16649|0.081206
+13|9960|16626|0.007036
+14|9938|16621|0.014614
+15|9956|16642|0.029056
+16|9967|19287|0.111281
+17|10468|19288|0.066230
+18|10469|19289|0.065769
+19|10470|19290|0.117748
+20|8767|12598|0.059630
+21|8768|19389|0.016974
+22|10462|19388|0.081956
+23|5805|19387|0.052414
+24|10455|19386|0.052378
+25|7579|19385|0.052864
+26|10459|19384|0.047276
+27|10485|19383|0.005429
+28|5962|19382|0.006171
+29|10484|19381|0.098919
+30|3002|19380|0.108243
+31|4397|19379|0.102702
+32|9194|19378|0.009782
+33|10482|19377|0.096140
+34|10174|19376|0.107643
+35|8634|19375|0.102428
+36|9595|19374|0.106794
+37|8509|19360|0.051709
+38|9948|19359|0.051651
+39|10479|19358|0.059093
+40|9949|19357|0.047698
+41|3170|11899|0.018103
+42|8468|15487|0.034042
+43|9624|16983|0.022924
+44|8467|16982|0.022635
+45|10046|16981|0.045667
+46|8583|15477|0.113487
+47|8311|15478|0.019312
+48|2808|15479|0.209882
+49|9621|15480|0.016198
+50|8522|15481|0.180992
+51|8465|11894|0.046805
+52|8457|11882|0.101185
+53|1807|11883|0.064572
+54|8456|11880|0.048821
+55|8455|11878|0.083250
+56|8452|11871|0.118857
+57|8450|11867|0.005677
+58|529|11868|0.196533
+59|476|11869|0.006925
+60|8451|13167|0.070884
+61|8985|13148|0.014323
+62|8986|13149|0.069498
+63|8496|13150|0.120005
+64|398|13151|0.057786
+65|8987|13152|0.099744
+66|637|13153|0.083288
+67|6436|13154|0.057101
+68|21|13155|0.079185
+69|8988|13156|0.006317
+70|8989|13157|0.118340
+71|1285|13158|0.071931
+72|2962|13159|0.018649
+73|8991|13160|0.187353
+74|8992|13161|0.099016
+75|8351|13162|0.009638
+76|8993|13163|0.069895
+77|8976|13164|0.008029
+78|8977|13165|0.012931
+79|8994|13827|0.010639
+80|9205|13828|0.117213
+81|8304|13829|0.032840
+82|6774|13830|0.196045
+83|3753|13831|0.009169
+84|8325|12990|0.013157
+85|8908|20794|0.013276
+86|10948|20835|0.071114
+87|10929|20778|0.006447
+88|8910|20779|0.008539
+89|10944|20833|0.177477
+90|10951|20811|0.004532
+91|7034|20812|0.005045
+92|10952|20841|0.187594
+93|10940|20771|0.007463
+94|3415|20772|0.005720
+95|10941|20776|0.040800
+96|10943|20796|0.002581
+97|7661|20797|0.002564
+98|10931|20756|0.040876
+99|10932|20787|0.006774
+100|5700|-1|0.000000
diff --git a/src/bd_dijkstra/test/bd_dijkstra-any-06.result b/src/bd_dijkstra/test/bd_dijkstra-any-06.result
index 134a8f5..771d25b 100644
--- a/src/bd_dijkstra/test/bd_dijkstra-any-06.result
+++ b/src/bd_dijkstra/test/bd_dijkstra-any-06.result
@@ -1,60 +1,61 @@
-0|8247|20185|0.055053
-1|10705|20189|0.060217
-2|10139|17560|0.469613
-3|8140|17559|0.201703
-4|6943|17558|0.064893
-5|10138|17565|0.057338
-6|8539|17566|0.135370
-7|10140|19343|0.064475
-8|10142|19344|0.015153
-9|10475|19345|0.053510
-10|7137|9046|0.043099
-11|7136|9045|0.583394
-12|6167|9044|0.145396
-13|4276|9043|0.121251
-14|7135|9042|0.268754
-15|2317|9041|0.145996
-16|4280|9040|0.587619
-17|2043|9039|0.341756
-18|2563|2743|0.102019
-19|2698|17807|0.471312
-20|998|17789|0.064158
-21|8512|17790|0.069816
-22|3305|17791|0.036248
-23|8508|17792|0.109483
-24|6179|17793|0.062258
-25|8402|17794|0.087467
-26|10178|17795|0.007150
-27|10179|17796|0.114755
-28|9318|17797|0.027637
-29|9592|17798|0.076558
-30|10180|17799|0.072658
-31|8536|17800|0.029389
-32|8859|17801|0.045079
-33|9953|17802|0.075825
-34|10171|17803|0.069119
-35|8417|17804|0.015429
-36|7892|17805|0.063931
-37|9203|16876|0.147691
-38|4390|20655|0.075280
-39|9954|20656|0.080500
-40|10883|20657|0.009212
-41|10884|20658|0.048701
-42|8289|20659|0.087952
-43|5957|20660|0.002769
-44|6482|20661|0.120390
-45|5774|20662|0.023243
-46|4620|20663|0.169650
-47|5809|6764|0.050569
-48|5808|6763|0.097186
-49|5807|6762|0.146807
-50|5806|6761|0.145097
-51|5805|6760|0.008679
-52|5804|6759|0.065176
-53|5803|6758|0.013489
-54|5802|17979|0.173776
-55|10025|17978|0.175712
-56|613|17977|0.178581
-57|7125|17976|0.155428
-58|5367|17975|0.200230
-59|6585|-1|0.000000
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|8247|20185|0.055053
+1|10705|20189|0.060217
+2|10139|17560|0.469613
+3|8140|17559|0.201703
+4|6943|17558|0.064893
+5|10138|17565|0.057338
+6|8539|17566|0.135370
+7|10140|19343|0.064475
+8|10142|19344|0.015153
+9|10475|19345|0.053510
+10|7137|9046|0.043099
+11|7136|9045|0.583394
+12|6167|9044|0.145396
+13|4276|9043|0.121251
+14|7135|9042|0.268754
+15|2317|9041|0.145996
+16|4280|9040|0.587619
+17|2043|9039|0.341756
+18|2563|2743|0.102019
+19|2698|17807|0.471312
+20|998|17789|0.064158
+21|8512|17790|0.069816
+22|3305|17791|0.036248
+23|8508|17792|0.109483
+24|6179|17793|0.062258
+25|8402|17794|0.087467
+26|10178|17795|0.007150
+27|10179|17796|0.114755
+28|9318|17797|0.027637
+29|9592|17798|0.076558
+30|10180|17799|0.072658
+31|8536|17800|0.029389
+32|8859|17801|0.045079
+33|9953|17802|0.075825
+34|10171|17803|0.069119
+35|8417|17804|0.015429
+36|7892|17805|0.063931
+37|9203|16876|0.147691
+38|4390|20655|0.075280
+39|9954|20656|0.080500
+40|10883|20657|0.009212
+41|10884|20658|0.048701
+42|8289|20659|0.087952
+43|5957|20660|0.002769
+44|6482|20661|0.120390
+45|5774|20662|0.023243
+46|4620|20663|0.169650
+47|5809|6764|0.050569
+48|5808|6763|0.097186
+49|5807|6762|0.146807
+50|5806|6761|0.145097
+51|5805|6760|0.008679
+52|5804|6759|0.065176
+53|5803|6758|0.013489
+54|5802|17979|0.173776
+55|10025|17978|0.175712
+56|613|17977|0.178581
+57|7125|17976|0.155428
+58|5367|17975|0.200230
+59|6585|-1|0.000000
diff --git a/src/bd_dijkstra/test/doc-bdDijkstra.result b/src/bd_dijkstra/test/doc-bdDijkstra.result
index c43ef68..fbfb422 100644
--- a/src/bd_dijkstra/test/doc-bdDijkstra.result
+++ b/src/bd_dijkstra/test/doc-bdDijkstra.result
@@ -1,13 +1,15 @@
 --q1
-0|4||0
-1|3||0
-2|2||1
-3|5||1
-4|10||0
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|2|4|1
+1|5|8|1
+2|6|5|1
+3|3|-1|0
 --q2
-0|4||1
-1|3||1
-2|2||1
-3|5||1
-4|10||0
+NOTICE:  Deprecated Signature of pgr_bdDijkstra
+0|2|4|1
+1|5|8|1
+2|6|9|1
+3|9|16|1
+4|4|3|1
+5|3|-1|0
 --q3
diff --git a/src/bd_dijkstra/test/doc-bdDijkstra.test.sql b/src/bd_dijkstra/test/doc-bdDijkstra.test.sql
index ca6abb5..150a83f 100644
--- a/src/bd_dijkstra/test/doc-bdDijkstra.test.sql
+++ b/src/bd_dijkstra/test/doc-bdDijkstra.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
 --              PGR_bdDijkstra
@@ -8,10 +7,9 @@ BEGIN;
 \echo --q1
 SELECT * FROM pgr_bdDijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
-    4, 10, false, false);
+    2, 3, false, false);
 \echo --q2
 SELECT * FROM pgr_bdDijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
-    4, 10, true, true);
+    2, 3, true, true);
 \echo --q3
-ROLLBACK;
diff --git a/src/bd_dijkstra/test/pgtap/bdDijkstra-types-check.sql b/src/bd_dijkstra/test/pgtap/bdDijkstra-types-check.sql
index cab18ba..0190f57 100644
--- a/src/bd_dijkstra/test/pgtap/bdDijkstra-types-check.sql
+++ b/src/bd_dijkstra/test/pgtap/bdDijkstra-types-check.sql
@@ -2,12 +2,23 @@
 \i setup.sql
 -- TESTING DOCUMNETATIONS INFORMATION
 
-SELECT plan(17);
+SELECT plan(29);
+
+--SET client_min_messages TO WARNING;
 
 -- RECEIVES 5 PARAMETERS
+SELECT todo_start('remove on version 3.0');
+SELECT hasnt_function('pgr_bddijkstra',
+    ARRAY['text','integer','integer','boolean','boolean'],
+    'Remove old signature on version 3.0');
+SELECT todo_end();
 
-SELECT has_function('pgr_bddijkstra',ARRAY['text', 'integer', 'integer', 'boolean', 'boolean']);
-SELECT function_returns('pgr_bddijkstra', 'setof pgr_costresult','Returns set of costResult[]');
+
+SELECT has_function('pgr_bddijkstra',
+    ARRAY['text', 'integer', 'integer', 'boolean', 'boolean']);
+SELECT function_returns('pgr_bddijkstra',
+    ARRAY['text', 'integer', 'integer', 'boolean', 'boolean'],
+    'setof pgr_costresult','Returns set of costResult[]');
 
 
 -- CHECKING THE INNER QUERY
@@ -22,86 +33,118 @@ SELECT lives_ok('q1', 'edges query accepts INTEGER & FLOAT');
 
 
 
-SELECT todo_start('issue #140 must accept ANY-INTEGER and ANY-NUMERICAL');
--- some test pass because the code is not checking
 
+-- id
 SELECT lives_ok(
     'SELECT * FROM pgr_bddijkstra(
-        ''SELECT id::BIGINT, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT  FROM edge_table'',
-        2, 3, true, true)',
-        'id accepts BIGINT');
-SELECT lives_ok(
+        ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT  FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::BIGINT, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::SMALLINT, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'id accepts SMALLINT');
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::REAL, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::FLOAT, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+
 
+-- source
 SELECT lives_ok(
     'SELECT * FROM pgr_bddijkstra(
-        ''SELECT id::INTEGER, source::BIGINT, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'source accepts BIGINT');
-SELECT lives_ok(
+        ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::SMALLINT, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'source accepts SMALLINT');
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::BIGINT, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::REAL, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::FLOAT, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
 
+-- target
 SELECT lives_ok(
     'SELECT * FROM pgr_bddijkstra(
-        ''SELECT id::INTEGER, source::INTEGER, target::BIGINT, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'target accepts BIGINT');
-SELECT lives_ok(
+        ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::SMALLINT, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'target accepts SMALLINT');
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::INTEGER, target::BIGINT, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::INTEGER, target::REAL, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::INTEGER, target::FLOAT, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
 
+
+-- cost
 SELECT lives_ok(
     'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::BIGINT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'cost accepts BIGINT');
-SELECT lives_ok(
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::INTEGER, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'cost accepts INTEGER');
-SELECT lives_ok(
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::SMALLINT, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'cost accepts SMALLINT');
-SELECT lives_ok(
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::REAL, reverse_cost::FLOAT FROM edge_table'',
-        2, 3, true, true)',
-        'cost accepts REAL');
+        2, 3, true, true)');
 
+-- reverse_cost
 SELECT lives_ok(
     'SELECT * FROM pgr_bddijkstra(
+        ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table'',
+        2, 3, true, true)');
+SELECT throws_ok(
+    'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::BIGINT FROM edge_table'',
-        2, 3, true, true)',
-        'reverse_cost accepts BIGINT');
-SELECT lives_ok(
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::INTEGER FROM edge_table'',
-        2, 3, true, true)',
-        'reverse_cost accepts INTEGER');
-SELECT lives_ok(
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::SMALLINT FROM edge_table'',
-        2, 3, true, true)',
-        'reverse_cost accepts SMALLINT');
-SELECT lives_ok(
+        2, 3, true, true)');
+SELECT throws_ok(
     'SELECT * FROM pgr_bddijkstra(
         ''SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::REAL FROM edge_table'',
-        2, 3, true, true)',
-        'reverse_cost accepts REAL');
-
-
-SELECT todo_end();
+        2, 3, true, true)');
 
 
 
diff --git a/src/bd_dijkstra/test/pgtap/v2-bdDijkstra-compare-dijkstra.sql b/src/bd_dijkstra/test/pgtap/v2-bdDijkstra-compare-dijkstra.sql
new file mode 100644
index 0000000..e8be9e4
--- /dev/null
+++ b/src/bd_dijkstra/test/pgtap/v2-bdDijkstra-compare-dijkstra.sql
@@ -0,0 +1,99 @@
+\i setup.sql
+
+SELECT plan(2312);
+
+SET client_min_messages TO ERROR;
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+CREATE or REPLACE FUNCTION bddijkstra_compare_dijkstra(cant INTEGER default 17)
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+inner_sql TEXT;
+dijkstra_sql TEXT;
+bddijkstra_sql TEXT;
+BEGIN
+
+    FOR i IN 1.. cant LOOP
+        FOR j IN 1.. cant LOOP
+
+            -- DIRECTED
+            inner_sql := 'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, true)';
+
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, true)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, false)';
+
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, false)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+
+
+            -- DIRECTED & NOT HAS_RCOST
+            inner_sql := 'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, false)';
+
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, false)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+
+
+            -- UNDIRECTED
+            inner_sql := 'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, true)';
+
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, true)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, false)';
+
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, false)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+
+
+            -- UNDIRECTED & NOT HAS_RCOST
+            inner_sql := 'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, false)';
+
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, false)';
+            RETURN query SELECT set_eq(bddijkstra_sql, dijkstra_sql, bddijkstra_sql);
+
+            -- EXEPTION: when HAS_RCOST = true but no has_rcost found
+            inner_sql := 'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table';
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true, true)';
+            RETURN query SELECT throws_ok(bddijkstra_sql);
+            bddijkstra_sql := 'SELECT * FROM pgr_bddijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false, true)';
+            RETURN query SELECT throws_ok(bddijkstra_sql);
+
+        END LOOP;
+    END LOOP;
+
+    RETURN;
+END
+$BODY$
+language plpgsql;
+
+SELECT * from bddijkstra_compare_dijkstra();
+
+
+SELECT * FROM finish();
+ROLLBACK;
+
diff --git a/src/bd_dijkstra/test/test.conf b/src/bd_dijkstra/test/test.conf
index bd9032a..030969d 100644
--- a/src/bd_dijkstra/test/test.conf
+++ b/src/bd_dijkstra/test/test.conf
@@ -5,6 +5,7 @@
         'comment' => 'Bi-directional Dijkstra test for any versions.',
         'data' => ['bd_dijkstra-any-00.data'],
         'tests' => [qw(
+            doc-bdDijkstra
             bd_dijkstra-any-01
             bd_dijkstra-any-02
             bd_dijkstra-any-03
diff --git a/src/common/doc/types/cost_result.rst b/src/common/doc/cost_result.rst
similarity index 98%
rename from src/common/doc/types/cost_result.rst
rename to src/common/doc/cost_result.rst
index 7e70987..c5f7950 100644
--- a/src/common/doc/types/cost_result.rst
+++ b/src/common/doc/cost_result.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,10 +9,10 @@
 
 .. _type_cost_result:
 
-pgr_costResult[] 
+pgr_costResult[]
 ===============================================================================
 
-.. index:: 
+.. index::
     single: pgr_costResult[]
 
 Name
@@ -45,7 +45,7 @@ Description
 pgr_costResult3[] - Multiple Path Results with Cost
 ===============================================================================
 
-.. index:: 
+.. index::
     single: pgr_costResult3[]
 
 Name
diff --git a/src/common/doc/types/geom_result.rst b/src/common/doc/geom_result.rst
similarity index 97%
rename from src/common/doc/types/geom_result.rst
rename to src/common/doc/geom_result.rst
index e47fe6e..bc9e522 100644
--- a/src/common/doc/types/geom_result.rst
+++ b/src/common/doc/geom_result.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,10 +9,10 @@
 
 .. _type_geom_result:
 
-pgr_geomResult[] 
+pgr_geomResult[]
 ===============================================================================
 
-.. index:: 
+.. index::
 	single: pgr_geomResult[]
 
 Name
diff --git a/src/common/doc/pgr_version.rst b/src/common/doc/pgr_version.rst
index 4267479..49352af 100644
--- a/src/common/doc/pgr_version.rst
+++ b/src/common/doc/pgr_version.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,10 +9,10 @@
 
 .. _pgr_version:
 
-pgr_version 
+pgr_version
 ===============================================================================
 
-.. index:: 
+.. index::
 	single: version()
 
 Name
@@ -70,13 +70,9 @@ Examples
 
     SELECT version, boost FROM pgr_version();
 
-      version  | boost  
+      version  | boost
     -----------+--------
      2.2.0-dev | 1.49.0
     (1 row)
 
 
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`pgr_versionless` to compare two version numbers
diff --git a/src/common/doc/types/index.rst b/src/common/doc/types_index.rst
similarity index 99%
rename from src/common/doc/types/index.rst
rename to src/common/doc/types_index.rst
index 62f9c8f..8cbd943 100644
--- a/src/common/doc/types/index.rst
+++ b/src/common/doc/types_index.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
diff --git a/src/common/doc/utilities/end_point.rst b/src/common/doc/utilities/end_point.rst
deleted file mode 100644
index 3400cf5..0000000
--- a/src/common/doc/utilities/end_point.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_end_point:
-
-pgr_endPoint - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_endPoint`` — Returns an end point of a (multi)linestring geometry.
-
-.. note:: This function is intended for the developer's aid. 
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns the geometry of the end point of the first LINESTRING of ``geom``. 
-
-.. code-block:: sql
-
-	text pgr_startPoint(geometry geom);
-
-
-Description
--------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:geom: ``geometry`` Geometry of a MULTILINESTRING or LINESTRING.
-
-Returns the geometry of the end point of the first LINESTRING of ``geom``. 
-
-
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_start_point` to get the start point of a (multi)linestring.
-
diff --git a/src/common/doc/utilities/get_column_name.rst b/src/common/doc/utilities/get_column_name.rst
deleted file mode 100644
index f25b273..0000000
--- a/src/common/doc/utilities/get_column_name.rst
+++ /dev/null
@@ -1,88 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_get_column_name:
-
-pgr_getColumnName - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_getColumnName`` — Retrieves the name of the column as is stored in the postgres administration tables.
-
-.. note:: This function is intended for the developer’s aid.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns a ``text`` contining the registered name of the column.
-
-.. code-block:: sql
-
-	text pgr_getColumnName(tab text, col text);
-
-
-Description
--------------------------------------------------------------------------------
-
-Parameters
-
-:tab: ``text`` table name with or without schema component.
-:col: ``text`` column name to be retrieved.
-
-Returns 
-
-  - ``text`` containing the registered name of the column.
-  - ``NULL`` when :
-
-    * The table “tab” is not found or
-    * Column “col” is not found in table “tab” in the postgres administration tables.
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. code-block:: sql
-
-    SELECT pgr_getColumnName('edge_table','the_geom');
-    
-     pgr_iscolumnintable 
-    ---------------------
-     the_geom
-    (1 row)
-
-    SELECT pgr_getColumnName('edge_table','The_Geom');
-    
-     pgr_iscolumnintable 
-    ---------------------
-     the_geom
-    (1 row)
-
-The queries use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_is_column_in_table` to check only for the existence of the column.
-* :ref:`pgr_get_table_name` to retrieve the name of the table as is stored in the postgres administration tables.
-
diff --git a/src/common/doc/utilities/get_table_name.rst b/src/common/doc/utilities/get_table_name.rst
deleted file mode 100644
index 61a3e91..0000000
--- a/src/common/doc/utilities/get_table_name.rst
+++ /dev/null
@@ -1,106 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_get_table_name:
-
-pgr_getTableName - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_getTableName`` — Retrieves the name of the column as is stored in the postgres administration tables.
-
-.. note:: This function is intended for the developer’s aid.
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns a record containing the registered names of the table and of the schema it belongs to.
-
-.. code-block:: sql
-
-	(text sname, text tname)  pgr_getTableName(text tab)
-
-
-Description
--------------------------------------------------------------------------------
-
-Parameters
-
-:tab: ``text`` table name with or without schema component.
-
-Returns 
-
-:sname:
-
-  - ``text`` containing the registered name of the schema of table "tab".
-
-    * when the schema was not provided in "tab" the current schema is used.
-
-  - ``NULL`` when :
-
-    * The schema is not found in the postgres administration tables.
-
-:tname:
-
-  - ``text`` containing the registered name of the table "tab".
-  - ``NULL`` when :
-
-    * The schema is not found in the postgres administration tables.
-    * The table "tab" is not registered under the schema ``sname`` in the postgres administration tables
-
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. code-block:: sql
-
-    SELECT * from pgr_getTableName('edge_table');
-    
-     sname  |   tname    
-    --------+------------
-     public | edge_table
-    (1 row)
-
-    SELECT * from pgr_getTableName('EdgeTable');
-
-     sname  |   tname    
-    --------+------------
-     public | 
-    (1 row)
-
-    SELECT * from pgr_getTableName('data.Edge_Table');
-     sname | tname 
-    -------+-------
-           | 
-    (1 row)
-
-
-The examples use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_is_column_in_table` to check only for the existence of the column.
-* :ref:`pgr_get_table_name` to retrieve the name of the table as is stored in the postgres administration tables.
-
diff --git a/src/common/doc/utilities/is_column_in_table.rst b/src/common/doc/utilities/is_column_in_table.rst
deleted file mode 100644
index d44ba17..0000000
--- a/src/common/doc/utilities/is_column_in_table.rst
+++ /dev/null
@@ -1,89 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_is_column_in_table:
-
-pgr_isColumnInTable - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_isColumnInTable`` — Check if a column is in the table.
-
-.. note:: This function is intended for the developer’s aid.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns ``true`` when the column “col” is in table “tab”.
-
-.. code-block:: sql
-
-	boolean pgr_isColumnInTable(text tab, text col);
-
-
-Description
--------------------------------------------------------------------------------
-
-:tab: ``text`` Table name with or without schema component.
-:col: ``text`` Column name to be checked for.
-
-Returns:
-
-  -  ``true`` when the column “col” is in table “tab”.
-  -  ``false`` when:
-
-    * The table "tab" is not found or
-    * Column “col” is not found in table “tab” 
- 
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. code-block:: sql
-
-    SELECT pgr_isColumnInTable('edge_table','x1');
-
-     pgr_iscolumnintable 
-    ---------------------
-     t
-    (1 row)
-
-    SELECT pgr_isColumnInTable('public.edge_table','foo');
-
-     pgr_iscolumnintable
-    ---------------------
-     f
-    (1 row)
-
-
-
-The example use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_is_column_indexed` to check if the column is indexed.
-* :ref:`pgr_get_column_name` to get the name of the column as is stored in the postgres administration tables.
-* :ref:`pgr_get_table_name` to get the name of the table as is stored in the postgres administration tables.
-
diff --git a/src/common/doc/utilities/is_column_indexed.rst b/src/common/doc/utilities/is_column_indexed.rst
deleted file mode 100644
index aa38c8e..0000000
--- a/src/common/doc/utilities/is_column_indexed.rst
+++ /dev/null
@@ -1,90 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_is_column_indexed:
-
-pgr_isColumnIndexed - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_isColumnIndexed`` — Check if a column in a table is indexed.
-
-.. note:: This function is intended for the developer’s aid.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns ``true`` when the column “col” in table “tab” is indexed.
-
-.. code-block:: sql
-
-	boolean pgr_isColumnIndexed(text tab, text col);
-
-
-Description
--------------------------------------------------------------------------------
-
-:tab: ``text`` Table name with or without schema component.
-:col: ``text`` Column name to be checked for.
-
-Returns:
-
-  -  ``true`` when the column “col” in table “tab” is indexed.
-  -  ``false`` when:
-
-    * The table "tab" is not found or
-    * Column “col” is not found in table “tab” or
-    * Column "col" in table "tab" is not indexed
- 
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. code-block:: sql
-
-    SELECT pgr_isColumnIndexed('edge_table','x1');
-
-     pgr_iscolumnindexed 
-    ---------------------
-     f
-    (1 row)
-
-    SELECT pgr_isColumnIndexed('public.edge_table','cost');
-
-     pgr_iscolumnindexed 
-    ---------------------
-     f
-    (1 row)
-
-
-
-The example use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_is_column_in_table` to check only for the existence of the column in the table.
-* :ref:`pgr_get_column_name` to get the name of the column as is stored in the postgres administration tables.
-* :ref:`pgr_get_table_name` to get the name of the table as is stored in the postgres administration tables.
-
diff --git a/src/common/doc/utilities/point_to_id.rst b/src/common/doc/utilities/point_to_id.rst
deleted file mode 100644
index 11d010d..0000000
--- a/src/common/doc/utilities/point_to_id.rst
+++ /dev/null
@@ -1,66 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_point_to_id:
-
-pgr_pointToId - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_pointToId`` — Inserts a point into a vertices table and returns the corresponig id.
-
-.. note:: This function is intended for the developer's aid.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-This function returns the ``id`` of the row in the vertices table that corresponds to the ``point`` geometry 
-
-.. code-block:: sql
-
-	bigint pgr_pointToId(geometry point, double precision tolerance,text vertname text,integer srid)
-
-
-Description
--------------------------------------------------------------------------------
-
-:point: ``geometry`` "POINT" geometry to be inserted.
-:tolerance: ``float8`` Snapping tolerance of disconnected edges. (in projection unit)
-:vertname: ``text`` Vertices table name WITH schema included.
-:srid: ``integer`` SRID of the geometry point.
-
-This function returns the id of the row that corresponds to the ``point`` geometry 
-
-  - When the ``point`` geometry already exists in the vertices table ``vertname``, it returns the corresponding ``id``.
-  - When the ``point`` geometry is not found in the vertices table ``vertname``, the function inserts the ``point`` and returns the corresponding ``id`` of the newly created vertex.
- 
-.. warning:: The function do not perform any checking of the parameters. Any validation has to be done before calling this function.
-
-.. rubric:: History
-
-* Renamed in version 2.0.0
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_createVerticesTable <pgr_create_vert_table>` to create a topology based on the geometry.
-* :ref:`pgr_createTopology <pgr_create_topology>` to create a topology based on the geometry.
-
-
diff --git a/src/common/doc/utilities/quote_ident.rst b/src/common/doc/utilities/quote_ident.rst
deleted file mode 100644
index 84dcbb5..0000000
--- a/src/common/doc/utilities/quote_ident.rst
+++ /dev/null
@@ -1,124 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_quote_ident:
-
-pgr_quote_ident  - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_quote_ident`` — Quotes the input text to be used as an identifier in an SQL statement string.
-
-.. note:: This function is intended for the developer's aid. 
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns the given identifier ``idname`` suitably quoted to be used as an identifier in an SQL statement string. 
-
-.. code-block:: sql
-
-	text pgr_quote_ident(text idname);
-
-
-Description
--------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:idname: ``text`` Name of an SQL identifier. Can include ``.`` dot notation for schemas.table identifiers
-
-Returns the given string suitably quoted to be used as an identifier in an SQL statement string. 
-
-  - When the identifier ``idname`` contains on or more ``.`` separators, each component is suitably quoted to be used in an SQL string.
-
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-Everything is lower case so nothing needs to be quoted.
-
-.. code-block:: sql
-
-	SELECT pgr_quote_ident('the_geom');
-
-	pgr_quote_ident  
-	---------------
-           the_geom
-	(1 row)
-
-
-	SELECT pgr_quote_ident('public.edge_table');
-
-	  pgr_quote_ident  
-	-------------------
-	 public.edge_table
-	(1 row)
-
-The column is upper case so its double quoted.
-
-.. code-block:: sql
-
-	SELECT pgr_quote_ident('edge_table.MYGEOM');
-
-	   pgr_quote_ident 
-	-------------------
-	 edge_table."MYGEOM"
-	(1 row)
-
-	SELECT pgr_quote_ident('public.edge_table.MYGEOM');
-
-	       pgr_quote_ident 
-	---------------------------
-	 public.edge_table."MYGEOM"
-	(1 row)
-
-
-The schema name has a capital letter so its double quoted.
-
-.. code-block:: sql
-
-	SELECT pgr_quote_ident('Myschema.edge_table');
-
-	    pgr_quote_ident   
-	----------------------
-	 "Myschema".edge_table
-	(1 row)
-
-Ignores extra ``.`` separators.
-
-.. code-block:: sql
-
-	SELECT pgr_quote_ident('Myschema...edge_table');
-
-	   pgr_quote_ident   
-	---------------------
-	 "Myschema".edge_table
-	(1 row)
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_get_table_name` to get the name of the table as is stored in the postgres administration tables.
-
diff --git a/src/common/doc/utilities/start_point.rst b/src/common/doc/utilities/start_point.rst
deleted file mode 100644
index b0fca55..0000000
--- a/src/common/doc/utilities/start_point.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_start_point:
-
-pgr_startPoint  - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_startPoint`` — Returns a start point of a (multi)linestring geometry.
-
-.. note:: This function is intended for the developer's aid. 
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns the geometry of the start point of the first LINESTRING of ``geom``. 
-
-.. code-block:: sql
-
-	geometry pgr_startPoint(geometry geom);
-
-
-Description
--------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:geom: ``geometry`` Geometry of a MULTILINESTRING or LINESTRING.
-
-Returns the geometry of the start point of the first LINESTRING of ``geom``. 
-
-
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_end_Point` to get the end point of a (multi)linestring.
-
diff --git a/src/common/doc/utilities/versionless.rst b/src/common/doc/utilities/versionless.rst
deleted file mode 100644
index b833d2c..0000000
--- a/src/common/doc/utilities/versionless.rst
+++ /dev/null
@@ -1,68 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_versionless:
-
-pgr_versionless - Deprecated Function
-===============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_versionless`` — Compare two version numbers.
-
-.. note:: This function is intended for the developer’s aid.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Returns ``true`` if the first version number is smaller than the second version number. Otherwise returns ``false``.
-
-.. code-block:: sql
-
-	boolean pgr_versionless(text v1, text v2);
-
-
-Description
--------------------------------------------------------------------------------
-
-:v1: ``text`` first version number
-:v2: ``text`` second version number
-
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-.. code-block:: sql
-
-    SELECT pgr_versionless('2.0.1', '2.1');
-
-     pgr_versionless 
-    -----------------
-     t
-    (1 row)
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`developer` for the tree layout of the project.
-* :ref:`pgr_version` to get the current version of pgRouting.
diff --git a/src/common/sql/pgrouting.control.in b/src/common/sql/pgrouting.control.in
index ac30832..5950049 100644
--- a/src/common/sql/pgrouting.control.in
+++ b/src/common/sql/pgrouting.control.in
@@ -1,6 +1,6 @@
 # pgRouting Extension
 comment = 'pgRouting Extension'
-default_version = '${PGROUTING_VERSION_STRING}'
+default_version = '${PGROUTING_VERSION}'
 relocatable = true
 requires = 'plpgsql'
 requires = 'postgis'
diff --git a/src/common/sql/pgrouting_version.sql b/src/common/sql/pgrouting_version.sql
index b16d881..deaf474 100644
--- a/src/common/sql/pgrouting_version.sql
+++ b/src/common/sql/pgrouting_version.sql
@@ -5,30 +5,29 @@
 -- This file is release unde an MIT-X license.
 -- -------------------------------------------------------------------
 
+/*
+.. function:: pgr_version()
+
+   Author: Stephen Woodbridge <woodbri at imaptools.com>
+
+   Returns the version of pgrouting,Git build,Git hash, Git branch and boost
+*/
+
 CREATE OR REPLACE FUNCTION pgr_version()
 RETURNS TABLE(
 		"version" varchar, 
 		tag varchar,
-		--build varchar,
 		hash varchar,
 		branch varchar,
 		boost varchar
 	) AS
 $BODY$
-/*
-.. function:: pgr_version()
-
-   Author: Stephen Woodbridge <woodbri at imaptools.com>
-
-   Returns the version of pgrouting,Git build,Git hash, Git branch and boost
-*/
 
 DECLARE
 
 BEGIN
-    RETURN QUERY SELECT '${PGROUTING_VERSION_STRING}'::varchar AS version, 
-    					'${PGROUTING_GIT_TAG}'::varchar AS tag, 
-                        --'${PGROUTING_GIT_BUILD}'::varchar AS build, 
+    RETURN QUERY SELECT '${PGROUTING_VERSION}'::varchar AS version, 
+    					'${PGROUTING_FULL_VERSION}'::varchar AS tag, 
                         '${PGROUTING_GIT_HASH}'::varchar AS hash, 
                         '${PGROUTING_GIT_BRANCH}'::varchar AS branch, 
                         '${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}'::varchar AS boost;
diff --git a/src/common/sql/utilities_pgr.sql b/src/common/sql/utilities_pgr.sql
index 830b441..ce4f0d5 100644
--- a/src/common/sql/utilities_pgr.sql
+++ b/src/common/sql/utilities_pgr.sql
@@ -190,93 +190,6 @@ LANGUAGE plpgsql VOLATILE STRICT;
 
 
 /************************************************************************
-.. function:: _pgr_createIndex(tab, col,indextype)
-              _pgr_createIndex(sname,tname,colname,indextypes)
-              
-   if the column is not indexed it creates a 'gist' index otherwise a 'btree' index
-   Examples:  
-	* 	 select  _pgr_createIndex('tab','col','btree');
-	* 	 select  _pgr_createIndex('myschema','mytable','col','gist');
-	* 	 perform 'select _pgr_createIndex('||quote_literal('tab')||','||quote_literal('col')||','||quote_literal('btree'))' ;
-	* 	 perform 'select _pgr_createIndex('||quote_literal('myschema')||','||quote_literal('mytable')||','||quote_literal('col')||','||quote_literal('gist')')' ;
-   Precondition:
-      sname.tname.colname is a valid column on table tname in schema sname
-      indext  is the indexType btree or gist
-   Postcondition:
-      sname.tname.colname its indexed using the indextype
-
-  
-   Author: Vicky Vergara <vicky_vergara at hotmail.com>>
-
-  HISTORY
-     Created: 2014/JUL/28 
-************************************************************************/
-/*
-CREATE OR REPLACE FUNCTION _pgr_createIndex(
-    sname text, tname text, colname text, indext text,
-    IN reportErrs int default 1, IN fnName text default '_pgr_createIndex')
-RETURNS void AS
-$BODY$
-DECLARE
-    debuglevel text;
-    naming record;
-    tabname text;
-    query text;
-    msgKind int;
-BEGIN
-  msgKind = 0; -- debug_
-
-  execute 'show client_min_messages' into debuglevel;
-  tabname=_pgr_quote_ident(sname||'.'||tname);
-  perform _pgr_msg(msgKind, fnName, 'Checking ' || colname || ' column in ' || tabname || ' is indexed');
-    IF (_pgr_isColumnIndexed(sname,tname,colname, 0, fnName)) then
-       perform _pgr_msg(msgKind, fnName);
-    else
-      if indext = 'gist' then
-        query = 'create  index '||_pgr_quote_ident(tname||'_'||colname||'_idx')||' 
-                         on '||tabname||' using gist('||quote_ident(colname)||')';
-      else
-        query = 'create  index '||_pgr_quote_ident(tname||'_'||colname||'_idx')||' 
-                         on '||tabname||' using btree('||quote_ident(colname)||')';
-      end if;
-      perform _pgr_msg(msgKind, fnName, 'Adding index ' || tabname || '_' ||  colname || '_idx');
-      perform _pgr_msg(msgKind, fnName, ' Using ' ||  query);
-      set client_min_messages  to warning;
-      BEGIN
-        execute query;
-        EXCEPTION WHEN others THEN
-          perform _pgr_onError( true, reportErrs, fnName,
-            'Could not create index on:' || cname, SQLERRM);
-      END;
-      execute 'set client_min_messages  to '|| debuglevel;
-      perform _pgr_msg(msgKind, fnName);
-    END IF;
-END;
-
-$BODY$
-  LANGUAGE plpgsql VOLATILE STRICT;
-
-
-CREATE OR REPLACE FUNCTION _pgr_createIndex(tabname text, colname text, indext text,
-    IN reportErrs int default 1, IN fnName text default '_pgr_createIndex')
-RETURNS void AS
-$BODY$
-DECLARE
-    naming record;
-    sname text;
-    tname text;
-
-BEGIN
-    select * from _pgr_getTableName(tabname, 2, fnName)  into naming;
-    sname=naming.sname;
-    tname=naming.tname;
-    execute _pgr_createIndex(sname, tname, colname, indext, reportErrs, fnName);
-END;
-
-$BODY$
-  LANGUAGE plpgsql VOLATILE STRICT;
-*/
-/************************************************************************
 .. function:: _pgr_get_statement( sql ) returns the original statement if its a prepared statement
 
     Returns:
diff --git a/src/common/src/CMakeLists.txt b/src/common/src/CMakeLists.txt
index bc34b64..ac26041 100644
--- a/src/common/src/CMakeLists.txt
+++ b/src/common/src/CMakeLists.txt
@@ -1,5 +1,6 @@
 ADD_LIBRARY(common OBJECT 
     postgres_connection.c
+    e_report.c
     restrictions_input.c
     basePath_SSEC.cpp
 
@@ -19,4 +20,5 @@ ADD_LIBRARY(common OBJECT
     ch_vertex.cpp
     ch_edge.cpp
     basic_edge.cpp
+    pgr_alloc.cpp
     )
diff --git a/src/common/src/arrays_input.c b/src/common/src/arrays_input.c
index d57508e..d2cb14c 100644
--- a/src/common/src/arrays_input.c
+++ b/src/common/src/arrays_input.c
@@ -22,183 +22,114 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include <postgres.h>
+#include "./postgres_connection.h"
+
 #include "utils/lsyscache.h"
 #include "catalog/pg_type.h"
 #include "utils/array.h"
 
 
-// #define DEBUG
 #include "./pgr_types.h"
 #include "./time_msg.h"
 #include "./debug_macro.h"
 #include "./arrays_input.h"
+#include <assert.h>
 
-
-int64_t* pgr_get_bigIntArray(size_t *arrlen, ArrayType *input) {
-    int         ndims;
-    bool       *nulls;
-    Oid         i_eltype;
-    int16       i_typlen;
-    bool        i_typbyval;
-    char        i_typalign;
-    Datum      *i_data;
-    int         i;
-    int         n;
-    int64_t      *data;
+static
+int64_t*
+pgr_get_bigIntArr(ArrayType *v, size_t *arrlen, bool allow_empty) {
     clock_t start_t = clock();
+    int64_t *c_array = NULL;;
 
-    PGR_DBG("Getting integer array");
-    /* get input array element type */
-    i_eltype = ARR_ELEMTYPE(input);
-    get_typlenbyvalalign(i_eltype, &i_typlen, &i_typbyval, &i_typalign);
+    Oid     element_type = ARR_ELEMTYPE(v);
+    int    *dim = ARR_DIMS(v);
+    int     ndim = ARR_NDIM(v);
+    int     nitems = ArrayGetNItems(ndim, dim);
+    Datum  *elements;
+    bool   *nulls;
+    int16   typlen;
+    bool    typbyval;
+    char    typalign;
 
-    /* validate input data type */
-    switch (i_eltype) {
-        case INT2OID:
-        case INT4OID:
-        case INT8OID:
-            break;
-        default:
-            elog(ERROR, "Expected array of ANY-INTEGER");
-            return (int64_t*) NULL;
-            break;
-    }
+    assert((*arrlen) == 0);
 
-    /* get various pieces of data from the input array */
-    ndims = ARR_NDIM(input);
-    n = (*ARR_DIMS(input));
-    (*arrlen) = (size_t)(n);
 
-    if (ndims != 1) {
-        elog(ERROR, "One dimension expected");
+    if (allow_empty && (ndim == 0 || nitems <= 0)) {
+        PGR_DBG("ndim %i nitems % i", ndim, nitems);
+        return (int64_t*) NULL;
     }
+    /* the array is not empty*/
 
-    /* get src data */
-    deconstruct_array(input, i_eltype, i_typlen, i_typbyval, i_typalign,
-            &i_data, &nulls, &n);
-
-    /* construct a C array */
-    data = (int64_t *) malloc((*arrlen) * sizeof(int64_t));
-
-    if (!data) {
-        elog(ERROR, "Out of memory!");
+    if (ndim != 1) {
+        elog(ERROR, "One dimension expected");
+        return (int64_t*)NULL;
     }
 
-    PGR_DBG("array size %ld", (*arrlen));
-
-    for (i = 0; i < (*arrlen); i++) {
-        if (nulls[i]) {
-            free(data);
-            elog(ERROR, "NULL value found in Array!");
-        } else {
-            switch (i_eltype) {
-                case INT2OID:
-                    data[i] = (int64_t) DatumGetInt16(i_data[i]);
-                    break;
-                case INT4OID:
-                    data[i] = (int64_t) DatumGetInt32(i_data[i]);
-                    break;
-                case INT8OID:
-                    data[i] = DatumGetInt64(i_data[i]);
-                    break;
-            }
-        }
+    if (nitems <= 0) {
+        elog(ERROR, "No elements found");
+        return (int64_t*)NULL;
     }
 
-    pfree(nulls);
-    pfree(i_data);
-
-    PGR_DBG("Finished processing array");
-    time_msg(" reading Array", start_t, clock());
-    return (int64_t*)data;
-}
-
-
-
-int64_t* pgr_get_bigIntArray_allowEmpty(size_t *arrlen, ArrayType *input) {
-    int         ndims;
-    bool       *nulls;
-    Oid         i_eltype;
-    int16       i_typlen;
-    bool        i_typbyval;
-    char        i_typalign;
-    Datum      *i_data;
-    int         i;
-    int         n;
-    int64_t      *data;
-    clock_t start_t = clock();
-
-    PGR_DBG("Getting integer array");
-    /* get input array element type */
-    i_eltype = ARR_ELEMTYPE(input);
-    get_typlenbyvalalign(i_eltype, &i_typlen, &i_typbyval, &i_typalign);
+    get_typlenbyvalalign(element_type,
+            &typlen, &typbyval, &typalign);
 
     /* validate input data type */
-    switch (i_eltype) {
+    switch (element_type) {
         case INT2OID:
         case INT4OID:
         case INT8OID:
             break;
         default:
             elog(ERROR, "Expected array of ANY-INTEGER");
-            return (int64_t*) NULL;
+            return (int64_t*)NULL;
             break;
     }
 
-    /* get various pieces of data from the input array */
-    ndims = ARR_NDIM(input);
-    n = (*ARR_DIMS(input));
-    (*arrlen) = (size_t)(n);
-    // PGR_DBG("dimensions %d", ndims);
-    // PGR_DBG("array size %ld", (*arrlen));
+    deconstruct_array(v, element_type, typlen, typbyval,
+            typalign, &elements, &nulls,
+            &nitems);
 
-    if (ndims == 0) {
-        (*arrlen) = 0;
-        PGR_DBG("array size %ld", (*arrlen));
-        return (int64_t*) NULL;
-    }
-
-    if (ndims > 1) {
-        elog(ERROR, "Expected less than two dimension");
-    }
-
-    /* get src data */
-    deconstruct_array(input, i_eltype, i_typlen, i_typbyval, i_typalign,
-            &i_data, &nulls, &n);
-
-    /* construct a C array */
-    data = (int64_t *) malloc((*arrlen) * sizeof(int64_t));
-
-    if (!data) {
+    c_array = (int64_t *) palloc(sizeof(int64_t) * (size_t)nitems);
+    if (!c_array) {
         elog(ERROR, "Out of memory!");
     }
 
-    PGR_DBG("array size %ld", (*arrlen));
 
-    for (i = 0; i < (*arrlen); i++) {
+    int i;
+    for (i = 0; i < nitems; i++) {
         if (nulls[i]) {
-            free(data);
+            pfree(c_array);
             elog(ERROR, "NULL value found in Array!");
         } else {
-            switch (i_eltype) {
+            switch (element_type) {
                 case INT2OID:
-                    data[i] = (int64_t) DatumGetInt16(i_data[i]);
+                    c_array[i] = (int64_t) DatumGetInt16(elements[i]);
                     break;
                 case INT4OID:
-                    data[i] = (int64_t) DatumGetInt32(i_data[i]);
+                    c_array[i] = (int64_t) DatumGetInt32(elements[i]);
                     break;
                 case INT8OID:
-                    data[i] = DatumGetInt64(i_data[i]);
+                    c_array[i] = DatumGetInt64(elements[i]);
                     break;
             }
         }
     }
+    (*arrlen) = (size_t)nitems;
 
+    pfree(elements);
     pfree(nulls);
-    pfree(i_data);
+    PGR_DBG("Array size %ld", (*arrlen));
+    time_msg("reading Array", start_t, clock());
+    return c_array;
+}
+
 
-    PGR_DBG("Finished processing array");
-    time_msg(" reading Array", start_t, clock());
-    return (int64_t*)data;
+int64_t* pgr_get_bigIntArray(size_t *arrlen, ArrayType *input) {
+    return pgr_get_bigIntArr(input, arrlen, false);
+}
+
+
+
+int64_t* pgr_get_bigIntArray_allowEmpty(size_t *arrlen, ArrayType *input) {
+    return pgr_get_bigIntArr(input, arrlen, true);
 }
diff --git a/src/common/src/basePath_SSEC.cpp b/src/common/src/basePath_SSEC.cpp
index 6fd668f..b28c955 100644
--- a/src/common/src/basePath_SSEC.cpp
+++ b/src/common/src/basePath_SSEC.cpp
@@ -21,21 +21,15 @@ along with this program; if not, write to the Free Software
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
+#include "./basePath_SSEC.hpp"
 
-
-#include "basePath_SSEC.hpp"
 #include <deque>
 #include <iostream>
 #include <algorithm>
-#include "./pgr_types.h"
+#include <utility>
 
+#include "./pgr_types.h"
+#include "./pgr_assert.h"
 
 void Path::push_front(Path_t data) {
     path.push_front(data);
@@ -48,7 +42,8 @@ void Path::push_back(Path_t data) {
 }
 
 void Path::reverse() {
-    // std::swap(m_start_id, m_end_id);
+    std::swap(m_start_id, m_end_id);
+    if (path.size() <= 1) return;
     std::deque< Path_t > newpath;
     for (size_t i = 0; i < path.size(); ++i) {
         newpath.push_front({
@@ -67,7 +62,6 @@ void Path::reverse() {
 }
 
 
-
 void Path::clear() {
     path.clear();
     m_tot_cost = 0;
@@ -98,6 +92,8 @@ Path Path::getSubpath(unsigned int j) const {
     for (auto i = path.begin(); i != path.begin() + j; ++i) {
         result.push_back((*i));
     }
+    pgassert(result.tot_cost() != 0);
+    pgassert(this->tot_cost() != 0);
     return result;
 }
 
@@ -119,6 +115,57 @@ void Path::appendPath(const Path &o_path) {
 }
 
 
+/*!
+ 
+    Path: 2 -> 9
+    seq   node    edge    cost    agg_cost
+    0     2       4       1       0
+    1     5       8       1       1
+    2     6       9       1       2
+    3     9       -1      0       3
+    Path: 9 -> 3
+    seq   node    edge    cost    agg_cost
+    0     9       16      1       0
+    1     4       3       1       1
+    2     3       -1      0       2
+    Path: 2 -> 3
+    seq   node    edge    cost    agg_cost
+    0     2       4       1       0
+    1     5       8       1       1
+    2     6       9       1       2
+    3     9       16      1       3
+    4     4       3       1       4
+    5     3       -1      0       5
+
+ */
+void Path::append(const Path &other) {
+    pgassert(m_end_id == other.m_start_id);
+    if (other.m_start_id == other.m_end_id) {
+        pgassert(other.path.empty());
+        return;
+    }
+    if (m_start_id == m_end_id) {
+        pgassert(path.empty());
+        *this = other;
+        return;
+    }
+    pgassert(path.back().cost == 0);
+    pgassert(path.back().edge == -1);
+
+    m_end_id = other.m_end_id;
+
+    auto last = path.back();
+    auto agg_cost = last.agg_cost;
+
+    path.pop_back();
+
+    for (auto item : other.path) {
+        item.agg_cost += agg_cost;
+        push_back(item);
+    }
+}
+
+
 void Path::generate_postgres_data(
         General_path_element_t **postgres_data,
         size_t &sequence) const {
diff --git a/src/common/src/basePath_SSEC.hpp b/src/common/src/basePath_SSEC.hpp
index 1964b10..99d23d0 100644
--- a/src/common/src/basePath_SSEC.hpp
+++ b/src/common/src/basePath_SSEC.hpp
@@ -22,20 +22,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_COMMON_SRC_BASEPATH_SSEC_HPP_
+#define SRC_COMMON_SRC_BASEPATH_SSEC_HPP_
 #pragma once
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
+
+
+#include <boost/config.hpp>
+#include <boost/graph/adjacency_list.hpp>
 
 
 #include <deque>
+#include <vector>
 #include <iostream>
 #include <algorithm>
 #include "./pgr_types.h"
+#include "./pgr_base_graph.hpp"
+
 
 class Path {
     typedef std::deque< Path_t >::iterator pthIt;
@@ -52,6 +54,7 @@ class Path {
     Path(int64_t s_id, int64_t e_id)
         : m_start_id(s_id), m_end_id(e_id), m_tot_cost(0)
     {}
+    Path(const Path&) = default;
     int64_t start_id() const {return m_start_id;}
     void start_id(int64_t value) {m_start_id = value;}
     int64_t end_id()  const {return m_end_id;}
@@ -104,6 +107,7 @@ class Path {
 
     bool isEqual(const Path &subpath) const;
     void appendPath(const Path &o_path);
+    void append(const Path &other);
     void empty_path(unsigned int d_vertex);
 
     void get_pg_dd_path(
@@ -209,6 +213,119 @@ class Path {
         }
         return count;
     }
+
+
+    template <typename G , typename V> Path(
+            G &graph,
+            V v_source,
+            double distance,
+            const std::vector<V> &predecessors,
+            const std::vector<double> &distances) :
+        m_start_id(graph.graph[v_source].id),
+        m_end_id(graph.graph[v_source].id) {
+        for (V i = 0; i < distances.size(); ++i) {
+            if (distances[i] <= distance) {
+                auto cost = distances[i] - distances[predecessors[i]];
+                auto edge_id = graph.get_edge_id(predecessors[i], i, cost);
+                push_back(
+                        {graph[i].id,
+                        edge_id, cost,
+                        distances[i]});
+            }
+        }
+    }
+
+
+
+    template <typename G , typename V> Path(
+            const G &graph,
+            const V v_source,
+            const V v_target,
+            const std::vector<V> &predecessors,
+            const std::vector<double> &distances,
+            bool only_cost,
+            bool normal = true) :
+        m_start_id(graph.graph[v_source].id),
+        m_end_id(graph.graph[v_target].id) {
+            if (!only_cost) {
+                complete_path(graph,
+                        v_source,
+                        v_target,
+                        predecessors,
+                        distances,
+                        normal);
+                return;
+            }
+            /*
+             * only_cost
+             */
+            if (v_target != predecessors[v_target]) {
+                push_front(
+                        {graph.graph[v_target].id,
+                        -1,
+                        distances[v_target],
+                        distances[v_target]});
+            }
+            return;
+        }
+
+    /*! @brief constructs a path based on results
+     *
+     * Normal = false for reversed search path like in pgr_bdDijkstra
+     */
+    template <typename G , typename V> void complete_path(
+            const G &graph,
+            const V v_source,
+            const V v_target,
+            const std::vector<V> &predecessors,
+            const std::vector<double> &distances,
+            bool normal) {
+        // no path was found
+        if (v_target == predecessors[v_target]) {
+            return;
+        }
+
+        /*
+         * set the target
+         */
+        auto target = v_target;
+
+        /*
+         * the last stop is the target
+         */
+        push_front(
+                {graph.graph[target].id, -1,
+                0,  distances[target]});
+
+        /*
+         * get the path
+         */
+        while (target != v_source) {
+            /*
+             * done when the predecesor of the target is the target
+             */
+            if (target == predecessors[target]) break;
+
+            /*
+             * Inserting values in the path
+             */
+            auto cost = distances[target] - distances[predecessors[target]];
+            auto vertex_id = graph.graph[predecessors[target]].id;
+            auto edge_id = normal?
+                graph.get_edge_id(predecessors[target], target, cost)
+                : graph.get_edge_id(target, predecessors[target], cost);
+
+            push_front({
+                    vertex_id,
+                    edge_id,
+                    cost,
+                    distances[target] - cost});
+            target = predecessors[target];
+        }
+
+        return;
+    }
 };
 
 
+#endif  // SRC_COMMON_SRC_BASEPATH_SSEC_HPP_
diff --git a/src/common/src/basic_edge.cpp b/src/common/src/basic_edge.cpp
index 1a26931..7ff0480 100644
--- a/src/common/src/basic_edge.cpp
+++ b/src/common/src/basic_edge.cpp
@@ -21,13 +21,6 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
 
 #include "./basic_edge.h"
 
@@ -37,7 +30,6 @@ namespace pgrouting {
     void Basic_edge::cp_members(const Basic_edge &other) {
         this->id = other.id;
         this->cost = other.cost;
-        this->first = other.first;
     }
 
 }  // namespace pgrouting
diff --git a/src/common/src/basic_edge.h b/src/common/src/basic_edge.h
index 811c2ee..fdf09a7 100644
--- a/src/common/src/basic_edge.h
+++ b/src/common/src/basic_edge.h
@@ -41,7 +41,6 @@ class Basic_edge{
 
      int64_t id;
      double cost;
-     bool first;  // originally was true (source, target) false (target, source)
 };
 
 }  // namespace pgrouting
diff --git a/src/common/src/basic_vertex.cpp b/src/common/src/basic_vertex.cpp
index 7f4d7b3..e39b13d 100644
--- a/src/common/src/basic_vertex.cpp
+++ b/src/common/src/basic_vertex.cpp
@@ -21,20 +21,14 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
 
+#include "./basic_vertex.h"
 
 #include <vector>
 #include <algorithm>
-
 #include <sstream>
-#include "./basic_vertex.h"
+#include <ostream>
+
 #include "./pgr_types.h"
 #include "./pgr_assert.h"
 
diff --git a/src/common/src/basic_vertex.h b/src/common/src/basic_vertex.h
index 7373d00..12532e7 100644
--- a/src/common/src/basic_vertex.h
+++ b/src/common/src/basic_vertex.h
@@ -27,10 +27,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #pragma once
 
 #include <vector>
+#include <ostream>
 
 #include "./pgr_types.h"
 
 
+
 namespace pgrouting {
 
 class Basic_vertex {
diff --git a/src/common/src/ch_edge.cpp b/src/common/src/ch_edge.cpp
index 5875cf7..3c87ce5 100644
--- a/src/common/src/ch_edge.cpp
+++ b/src/common/src/ch_edge.cpp
@@ -28,97 +28,50 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  ********************************************************************PGR-GNU*/
 
 #include "./ch_edge.h"
+
 namespace pgrouting {
-namespace contraction {
-
-void Edge::cp_members(const Edge &other, std::ostringstream& log) {
-        log << "Copying members of edge\n";
-        log << other;
-        #if 0
-        this->cost = other.cost;
-        log << "after copying cost of edge\n";
-        log << *this;
-        this->first = other.first;
-        log << "after copying first of edge\n";
-        log << *this;
-        this->source = other.source;
-        log << "after copying source of edge\n";
-        log << *this;
-        this->target = other.target;
-        log << "after copying target of edge\n";
-        log << *this;
-        this->m_contracted_vertices += other.contracted_vertices();
-        log << "after adding contracted vertices\n";
-        log << *this;
-        #endif
-        this->cost = other.cost;
-        this->id = other.id;
-        this->first = other.first;
-        this->source = other.source;
-        this->target = other.target;
-        this->m_contracted_vertices += other.contracted_vertices();
-        #if 0
-        log << "copying eid: " << other.id << "\n";
-        this->id = other.id;
-        // log << "after copying id of edge\n";
-        log << *this;
-        #endif
-    }
-
-
-void Edge::cp_members(const Edge &other) {
-        
-        this->cost = other.cost;
-        this->id = other.id;
-        this->first = other.first;
-        this->source = other.source;
-        this->target = other.target;
-        this->m_contracted_vertices += other.contracted_vertices();
-    }
-
-void Edge::cp_members(const Basic_edge &other) {
-        this->id = other.id;
-        this->cost = other.cost;
-        this->first = other.first;
-    }
-bool Edge::has_contracted_vertices() const {
-    if (m_contracted_vertices.size() == 0)
-        return false;
-    return true;
+
+void
+CH_edge::cp_members(const CH_edge &other) {
+    this->cost = other.cost;
+    this->id = other.id;
+    this->m_contracted_vertices += other.contracted_vertices();
+}
+
+
+bool
+CH_edge::has_contracted_vertices() const {
+    return !m_contracted_vertices.empty();
 }
 
-const Identifiers<int64_t>& Edge::contracted_vertices() const {
+const Identifiers<int64_t>&
+CH_edge::contracted_vertices() const {
     return m_contracted_vertices;
 }
 
 
-void Edge::add_contracted_vertex(Vertex& v, int64_t vid) {
-    // adding the id(boost graph) of the contracted vertex v
+void
+CH_edge::add_contracted_vertex(CH_vertex& v, int64_t vid) {
     m_contracted_vertices += vid;
-    // adding the ids of the contracted vertices of the given vertex v
     m_contracted_vertices += v.contracted_vertices();
-    // empty the contracted vertices of the given vertex v
     v.clear_contracted_vertices();
 }
 
-void Edge::add_contracted_edge_vertices(Edge &e) {
-    // adding the ids of the contracted vertices of the given edge e
+void
+CH_edge::add_contracted_edge_vertices(CH_edge &e) {
     m_contracted_vertices += e.contracted_vertices();
-    // empty the contracted vertices of the given edge e
     e.clear_contracted_vertices();
 }
 
-std::ostream& operator <<(std::ostream& os, const Edge& e) {
-    os << "{\n    id: " << e.id << ",\n";
-    os << "    source: " << e.source << ",\n";
-    os << "    target: " << e.target << ",\n";
-    os << "    cost: " << e.cost << ",\n";
-    os << "    first: " << e.first << ",\n";
-    os << "    contracted vertices: ";
-    os << e.contracted_vertices();
-    os << "\n}";
-    os << "\n";
+std::ostream& operator <<(std::ostream& os, const CH_edge& e) {
+    os << "{id: " << e.id << ",\t"
+        << "source: " << e.source << ",\t"
+        << "target: " << e.target << ",\t"
+        << "cost: " << e.cost << ",\t"
+        << "contracted vertices: "
+        << e.contracted_vertices()
+        << "}";
     return os;
 }
-}  // namespace contraction
+
 }  // namespace pgrouting
diff --git a/src/common/src/ch_edge.h b/src/common/src/ch_edge.h
index f5a424a..c0c75fb 100644
--- a/src/common/src/ch_edge.h
+++ b/src/common/src/ch_edge.h
@@ -34,42 +34,39 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include <iostream>
 #include <sstream>
 #include "./ch_vertex.h"
-#include "./basic_edge.h"
+// #include "./basic_edge.h"
+
 namespace pgrouting {
-namespace contraction {
 
-class Edge {
+class CH_edge {
  public:
-     Edge() = default;
-     Edge(int64_t eid, int64_t source, int64_t target, double cost) :
-         id(eid), source(source),
-         target(target), cost(cost), first(true) {}
-     Edge(int64_t eid, int64_t source, int64_t target,
-             double cost, bool first) :
+     CH_edge() = default;
+
+     CH_edge(int64_t eid, int64_t source, int64_t target, double cost) :
          id(eid), source(source),
-         target(target), cost(cost), first(first) {}
+         target(target), cost(cost) {}
+
+     void cp_members(const CH_edge &other);
+
+     void add_contracted_vertex(CH_vertex& v, int64_t vid);
+     void add_contracted_edge_vertices(CH_edge& e);
 
-     void cp_members(const Edge &other, std::ostringstream& log);
-     void cp_members(const Edge &other);
-     void cp_members(const Basic_edge &other);
-     void add_contracted_vertex(Vertex& v, int64_t vid);
-     void add_contracted_edge_vertices(Edge& e);
      bool has_contracted_vertices() const;
-     void clear_contracted_vertices() { m_contracted_vertices.clear(); }
+
+     void clear_contracted_vertices() {m_contracted_vertices.clear();}
      const Identifiers<int64_t>& contracted_vertices() const;
-     friend std::ostream& operator <<(std::ostream& os, const Edge& e);
+     friend std::ostream& operator <<(std::ostream& os, const CH_edge& e);
 
  public:
      int64_t id;
      int64_t source;
      int64_t target;
      double cost;
-     bool first;
+
  private:
      Identifiers<int64_t> m_contracted_vertices;
 };
 
-}  // namespace contraction
 }  // namespace pgrouting
 
 #endif  // SRC_COMMON_SRC_CH_EDGE_H_
diff --git a/src/common/src/ch_vertex.cpp b/src/common/src/ch_vertex.cpp
index 7ed5a99..c057748 100644
--- a/src/common/src/ch_vertex.cpp
+++ b/src/common/src/ch_vertex.cpp
@@ -26,95 +26,39 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
+
+#include "./ch_vertex.h"
+
 #include <algorithm>
 #include <vector>
-#include "./ch_vertex.h"
 
 namespace pgrouting {
-namespace contraction {
 
 
-const Identifiers<int64_t>& Vertex::contracted_vertices() const {
+const Identifiers<int64_t>&
+    CH_vertex::contracted_vertices() const {
     return m_contracted_vertices;
 }
 
 
-bool Vertex::has_contracted_vertices() const {
+bool CH_vertex::has_contracted_vertices() const {
     if (m_contracted_vertices.size() == 0)
         return false;
     return true;
 }
 
-void Vertex::add_contracted_vertex(Vertex& v, int64_t vid) {
-    // adding the id(boost graph) of the contracted vertex v
+void CH_vertex::add_contracted_vertex(CH_vertex& v, int64_t vid) {
     m_contracted_vertices += vid;
-    // adding the ids of the contracted vertices of the given vertex v
     m_contracted_vertices += v.contracted_vertices();
-    // empty the contracted vertices of the given vertex v
     v.clear_contracted_vertices();
 }
 
-std::ostream& operator <<(std::ostream& os, const Vertex& v) {
-    os << "{\n    id: " << v.id << ",\n";
-    os << "    contracted vertices: ";
-    os << v.contracted_vertices();
-    os << "\n}";
-    os << "\n";
+std::ostream& operator <<(std::ostream& os, const CH_vertex& v) {
+    os << "{id: " << v.id << ",\t"
+     << "contracted vertices: "
+     << v.contracted_vertices()
+     << "}";
     return os;
 }
 
-
-size_t
-check_vertices(
-    std::vector < Vertex > vertices) {
-    auto count(vertices.size());
-    std::stable_sort(
-        vertices.begin(), vertices.end(),
-        [](const Vertex &lhs, const Vertex &rhs)
-        {return lhs.id < rhs.id;});
-    vertices.erase(
-        std::unique(
-            vertices.begin(), vertices.end(),
-            [](const Vertex &lhs, const Vertex &rhs)
-            {return lhs.id == rhs.id;}), vertices.end());
-    return count - vertices.size();
-}
-
-std::vector < Vertex >
-extract_vertices(
-    const std::vector <pgr_edge_t > &data_edges) {
-    std::vector< Vertex > vertices;
-    if (data_edges.empty()) return vertices;
-    vertices.reserve(data_edges.size() * 2);
-    for (const auto edge : data_edges) {
-        Vertex v_source(edge, true);
-        vertices.push_back(v_source);
-
-        Vertex v_target(edge, false);
-        vertices.push_back(v_target);
-    }
-    /*
-     * sort and delete duplicates
-     */
-    std::stable_sort(
-        vertices.begin(), vertices.end(),
-        [](const Vertex &lhs, const Vertex &rhs)
-        {return lhs.id < rhs.id;});
-    vertices.erase(
-        std::unique(
-            vertices.begin(), vertices.end(),
-            [](const Vertex &lhs, const Vertex &rhs)
-            {return lhs.id == rhs.id;}), vertices.end());
-    return vertices;
-}
-
-std::vector < Vertex >
-extract_vertices(
-    const pgr_edge_t *data_edges,
-    int64_t count) {
-    return extract_vertices(
-        std::vector < pgr_edge_t >(data_edges, data_edges + count));
-}
-
-}  // namespace contraction
 }  // namespace pgrouting
diff --git a/src/common/src/ch_vertex.h b/src/common/src/ch_vertex.h
index aebe9b5..6e986ff 100644
--- a/src/common/src/ch_vertex.h
+++ b/src/common/src/ch_vertex.h
@@ -36,41 +36,40 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./identifiers.hpp"
 
 namespace pgrouting {
-namespace contraction {
 
-
-class Vertex {
+class CH_vertex {
  public:
     int64_t id;
-    Vertex() = default;
-    Vertex(const Vertex &) = default;
-    Vertex(const pgr_edge_t &other, bool is_source) :
+    CH_vertex() = default;
+    CH_vertex(const CH_vertex &) = default;
+    CH_vertex(const pgr_edge_t &other, bool is_source) :
       id(is_source? other.source : other.target)
       {}
-    void cp_members(const Vertex &other) {
+    void cp_members(const CH_vertex &other) {
         this->id = other.id;
     }
-    void add_contracted_vertex(Vertex& v, int64_t vid);
+    void add_contracted_vertex(CH_vertex& v, int64_t vid);
     void add_vertex_id(int64_t vid) {m_contracted_vertices += vid;}
     const Identifiers<int64_t>& contracted_vertices() const;
     bool has_contracted_vertices() const;
     void clear_contracted_vertices() {m_contracted_vertices.clear();}
-    friend std::ostream& operator <<(std::ostream& os, const Vertex& v);
+    friend std::ostream& operator <<(std::ostream& os, const CH_vertex& v);
  private:
     Identifiers<int64_t> m_contracted_vertices;
 };
 
 size_t
-check_vertices(std::vector < Vertex > vertices);
+check_vertices(std::vector < CH_vertex > vertices);
 
-std::vector < Vertex >
+#if 0
+std::vector < CH_vertex >
 extract_vertices(
     const pgr_edge_t *data_edges, int64_t count);
 
-std::vector < Vertex >
+std::vector < CH_vertex >
 extract_vertices(
     const std::vector < pgr_edge_t > &data_edges);
-
-}  // namespace contraction
+#endif
 }  // namespace pgrouting
+
 #endif  // SRC_COMMON_SRC_CH_VERTEX_H_
diff --git a/src/common/src/coordinates_input.c b/src/common/src/coordinates_input.c
index cfca56d..e41a525 100644
--- a/src/common/src/coordinates_input.c
+++ b/src/common/src/coordinates_input.c
@@ -22,12 +22,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-// #define DEBUG
-#include "./coordinates_input.h"
+#include "./postgres_connection.h"
 
+#include "./coordinates_input.h"
 #include "./debug_macro.h"
 #include "./pgr_types.h"
-#include "./postgres_connection.h"
 #include "./get_check_data.h"
 #include "./time_msg.h"
 
@@ -133,6 +132,8 @@ void pgr_get_coordinates(
         }
     }
 
+    SPI_cursor_close(SPIportal);
+
 
     if (total_tuples == 0) {
         (*total_coordinates) = 0;
diff --git a/src/common/src/debug_macro.h b/src/common/src/debug_macro.h
index 63bb809..952fde1 100644
--- a/src/common/src/debug_macro.h
+++ b/src/common/src/debug_macro.h
@@ -28,10 +28,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #pragma once
 
 #ifndef NDEBUG
-#include <postgres.h>
+
+#include "./postgres_connection.h"
 
 #define PGR_DBG(...) \
-    elog(DEBUG2, __VA_ARGS__)
+    elog(DEBUG3, __VA_ARGS__)
 #else
 #define PGR_DBG(...) do { ; } while (0)
 #endif
diff --git a/src/common/src/e_report.c b/src/common/src/e_report.c
new file mode 100644
index 0000000..9e95a32
--- /dev/null
+++ b/src/common/src/e_report.c
@@ -0,0 +1,123 @@
+/*PGR-GNU*****************************************************************
+File: e_report.c
+
+Function's developer:
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+Mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ ********************************************************************PGR-GNU*/
+
+#include "./postgres_connection.h"
+#include "./debug_macro.h"
+#include "./e_report.h"
+
+void
+pgr_notice(
+        char* notice) {
+    PGR_DBG("Returned notice message = %s", notice);
+
+    if (notice) {
+        ereport(NOTICE,
+                (errmsg("%s", notice)));
+    }
+}
+
+void
+pgr_notice2(
+        char* log,
+        char* notice) {
+    PGR_DBG("Returned log message = %s", log);
+    PGR_DBG("Returned notice message = %s", notice);
+
+    if (log) {
+        pgr_notice(notice);
+        return;
+    }
+
+    if (notice) {
+        ereport(NOTICE,
+                (errmsg("%s", notice),
+                 errhint("%s", log)));
+    }
+}
+
+void
+pgr_error(char* err) {
+    PGR_DBG("Returned error message = %s", err);
+
+#if 0
+    char *error = NULL;
+    if (*err_msg) {
+        error = pgr_cstring2char(*err_msg);
+        free(*err_msg);
+    }
+#endif
+    if (err) {
+        ereport(ERROR,
+                (errmsg_internal("Unexpected"),
+                 errhint("%s", err)));
+    }
+}
+
+void
+pgr_error2(
+        char* log,
+        char* err) {
+    PGR_DBG("Returned log message = %s", log);
+    PGR_DBG("Returned error message = %s", err);
+
+    if (err) {
+        ereport(ERROR,
+                (errmsg_internal("%s", err),
+                 errhint("%s", log)));
+    }
+}
+
+void
+pgr_global_report(
+        char* log,
+        char* notice,
+        char* err) {
+    if (!notice && log) {
+        ereport(DEBUG1,
+                (errmsg_internal("%s", log)));
+    }
+
+    if (notice) {
+        if (log) {
+            ereport(NOTICE,
+                    (errmsg_internal("%s", notice),
+                     errhint("%s", log)));
+        } else {
+            ereport(NOTICE,
+                    (errmsg_internal("%s", notice)));
+        }
+    }
+
+    if (err) {
+        if (log) {
+            ereport(ERROR,
+                    (errmsg_internal("%s", err),
+                     errhint("%s", log)));
+        } else {
+            ereport(ERROR,
+                    (errmsg_internal("%s", err)));
+        }
+    }
+}
diff --git a/src/common/src/e_report.h b/src/common/src/e_report.h
new file mode 100644
index 0000000..aa8d7a7
--- /dev/null
+++ b/src/common/src/e_report.h
@@ -0,0 +1,136 @@
+/*PGR-GNU*****************************************************************
+File: e_report.h
+
+Function's developer:
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+Mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ ********************************************************************PGR-GNU*/
+
+#pragma once
+
+/*! @name Postgres ereport
+ *  Send notice or error to postgreSQL (cleans the char *)
+ *
+ *  From the C++ err_msg, log_msg, notice_msg are returned as a (char *),
+ *
+ *  Before exiting the C code the pointers need to be freed:
+ *   - This task can be done when there is no error,
+ *   - Call to ERROR, gives the control back to postgreSQL 
+ *     - leaves a leak
+ *
+ * on C++ side, the message to be returned;
+ * ~~~~{.c}
+ * std::ostringstream log;
+ * log << "the messaage";
+ * log_msg = strdup(log.str().c_str());
+ * ~~~~
+ *
+ *
+ *  The char* messages are cleared.
+ *  New messages are made with palloc
+ *
+ *  when there is ERROR then postgreSQL takes over control
+ *
+ *  @warning When error: Free all data not created with palloc before calling
+ *
+ */
+///@{
+/*! @brief notice & error
+ *
+ *  ~~~~{.c}
+ *  pgr_notice(&log_msg, &notice_msg, &error_msg);
+ *
+ *  precondition: before calling ereport
+ *      assert(!*log_msg);
+ *      assert(!*notice_msg);
+ *      assert(!*error_msg);
+ *  ~~~~
+ */
+void
+pgr_global_report(
+        char* log_msg,
+        char* notice_msg,
+        char* error_msg);
+
+/*! @brief notice with no hint
+ *
+ *  ~~~~{.c}
+ *  pgr_notice(&log_msg, &notice_msg);
+ *
+ *  precondition: before calling ereport
+ *      assert(!log_msg);
+ *      assert(!notice_msg);
+ *  ~~~~
+ */
+void
+pgr_notice(
+        char* notice_msg
+        );
+
+/*! @brief notice with hint
+ *
+ *  ~~~~{.c}
+ *  pgr_notice(&log_msg, &notice_msg);
+ *
+ *  precondition: before calling ereport
+ *      assert(!log_msg);
+ *      assert(!notice_msg);
+ *  ~~~~
+ */
+void
+pgr_notice2(
+        char* log_msg,
+        char* notice_msg
+        );
+
+/*! @brief error with no hint
+ *
+ * 
+ *  ~~~~{.c}
+ *  if (err_msg) {
+ *      pfree(<data>);
+ *  }
+ *  pgr_error(&error_msg);
+ *
+ *  precondition: before calling ereport
+ *      assert(!*error_msg);
+ *  ~~~~
+ */
+void
+pgr_error(char* error_msg);
+
+/*! @brief error with hint
+ *
+ *  ~~~~{.c}
+ *  if (err_msg) {
+ *      pfree(<data>);
+ *  }
+ *  pgr_error(&log_msg, &error_msg);
+ *
+ *  precondition: before calling ereport
+ *      assert(!*log_msg);
+ *      assert(!*error_msg);
+ *  ~~~~
+ */
+void
+pgr_error2(
+        char* log_msg,
+        char* error_msg);
+///@}
diff --git a/src/common/src/edges_input.c b/src/common/src/edges_input.c
index f5cd114..d2028db 100644
--- a/src/common/src/edges_input.c
+++ b/src/common/src/edges_input.c
@@ -22,10 +22,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-// #define DEBUG
+#include "./postgres_connection.h"
 #include "./debug_macro.h"
 #include "./pgr_types.h"
-#include "./postgres_connection.h"
 #include "./get_check_data.h"
 #include "./edges_input.h"
 #include "./time_msg.h"
@@ -61,7 +60,8 @@ void fetch_edge(
         int64_t *default_id,
         float8 default_rcost,
         pgr_edge_t *edge,
-        size_t *valid_edges) {
+        size_t *valid_edges,
+        bool normal) {
     if (column_found(info[0].colNumber)) {
         edge->id = pgr_SPI_getBigInt(tuple, tupdesc, info[0]);
     } else {
@@ -69,8 +69,14 @@ void fetch_edge(
         ++(*default_id);
     }
 
-    edge->source = pgr_SPI_getBigInt(tuple, tupdesc,  info[1]);
-    edge->target = pgr_SPI_getBigInt(tuple, tupdesc, info[2]);
+    if (normal) {
+        edge->source = pgr_SPI_getBigInt(tuple, tupdesc,  info[1]);
+        edge->target = pgr_SPI_getBigInt(tuple, tupdesc, info[2]);
+    } else {
+        edge->target = pgr_SPI_getBigInt(tuple, tupdesc,  info[1]);
+        edge->source = pgr_SPI_getBigInt(tuple, tupdesc, info[2]);
+    }
+
     edge->cost = pgr_SPI_getFloat8(tuple, tupdesc, info[3]);
 
     if (column_found(info[4].colNumber)) {
@@ -205,8 +211,6 @@ get_edges_9_columns(
             size_t t;
             SPITupleTable *tuptable = SPI_tuptable;
             TupleDesc tupdesc = SPI_tuptable->tupdesc;
-            PGR_DBG("processing %ld edge tupĺes", ntuples);
-
             for (t = 0; t < ntuples; t++) {
                 HeapTuple tuple = tuptable->vals[t];
                 fetch_edge_with_xy(&tuple, &tupdesc, info,
@@ -220,15 +224,15 @@ get_edges_9_columns(
         }
     }
 
+    SPI_cursor_close(SPIportal);
 
     if (total_tuples == 0 || valid_edges == 0) {
-        PGR_DBG("NO edges found");
-        return;
+        PGR_DBG("No edges found");
     }
 
     (*total_edges) = total_tuples;
-    PGR_DBG("Finish reading %ld edges, %ld", total_tuples, (*total_edges));
-    time_msg(" reading Edges with xy", start_t, clock());
+    PGR_DBG("Finish reading %ld edges", total_tuples);
+    time_msg("reading edges", start_t, clock());
 }
 
 
@@ -239,7 +243,8 @@ get_edges_5_columns(
         char *sql,
         pgr_edge_t **edges,
         size_t *totalTuples,
-        bool ignore_id) {
+        bool ignore_id,
+        bool normal) {
     clock_t start_t = clock();
 
     const int tuple_limit = 1000000;
@@ -305,14 +310,13 @@ get_edges_5_columns(
             size_t t;
             SPITupleTable *tuptable = SPI_tuptable;
             TupleDesc tupdesc = SPI_tuptable->tupdesc;
-            PGR_DBG("processing %ld edge tupĺes", ntuples);
-
             for (t = 0; t < ntuples; t++) {
                 HeapTuple tuple = tuptable->vals[t];
                 fetch_edge(&tuple, &tupdesc, info,
                         &default_id, -1,
                         &(*edges)[total_tuples - ntuples + t],
-                        &valid_edges);
+                        &valid_edges,
+                        normal);
             }
             SPI_freetuptable(tuptable);
         } else {
@@ -320,16 +324,15 @@ get_edges_5_columns(
         }
     }
 
+    SPI_cursor_close(SPIportal);
 
     if (total_tuples == 0 || valid_edges == 0) {
-        (*totalTuples) = 0;
-        PGR_DBG("NO edges");
-        return;
+        PGR_DBG("No edges found");
     }
 
     (*totalTuples) = total_tuples;
-    PGR_DBG("Finish reading %ld edges, %ld", total_tuples, (*totalTuples));
-    time_msg(" reading Edges", start_t, clock());
+    PGR_DBG("Reading %ld edges", total_tuples);
+    time_msg("reading edges", start_t, clock());
 }
 
 static
@@ -398,14 +401,14 @@ get_edges_flow(
             size_t t;
             SPITupleTable *tuptable = SPI_tuptable;
             TupleDesc tupdesc = SPI_tuptable->tupdesc;
-            PGR_DBG("processing %lu edge tupĺes", ntuples);
 
             for (t = 0; t < ntuples; t++) {
                 HeapTuple tuple = tuptable->vals[t];
                 fetch_edge(&tuple, &tupdesc, info,
                            &default_id, -1,
                            &(*edges)[total_tuples - ntuples + t],
-                           &valid_edges);
+                           &valid_edges,
+                           true);
             }
             SPI_freetuptable(tuptable);
         } else {
@@ -413,16 +416,15 @@ get_edges_flow(
         }
     }
 
+    SPI_cursor_close(SPIportal);
 
     if (total_tuples == 0 || valid_edges == 0) {
-        (*totalTuples) = 0;
-        PGR_DBG("NO edges");
-        return;
+        PGR_DBG("No edges found");
     }
 
     (*totalTuples) = total_tuples;
-    PGR_DBG("Finish reading %ld edges, %ld", total_tuples, (*totalTuples));
-    time_msg(" reading Edges", start_t, clock());
+    PGR_DBG("Reading %ld edges", total_tuples);
+    time_msg("reading edges", start_t, clock());
 }
 
 static
@@ -484,9 +486,11 @@ get_edges_basic(
 
         if (ntuples > 0) {
             if ((*edges) == NULL)
-                (*edges) = (pgr_basic_edge_t *)palloc0(total_tuples * sizeof(pgr_basic_edge_t));
+                (*edges) = (pgr_basic_edge_t *)palloc0(
+                        total_tuples * sizeof(pgr_basic_edge_t));
             else
-                (*edges) = (pgr_basic_edge_t *)repalloc((*edges), total_tuples * sizeof(pgr_basic_edge_t));
+                (*edges) = (pgr_basic_edge_t *)repalloc(
+                        (*edges), total_tuples * sizeof(pgr_basic_edge_t));
 
             if ((*edges) == NULL) {
                 elog(ERROR, "Out of memory");
@@ -495,7 +499,6 @@ get_edges_basic(
             size_t t;
             SPITupleTable *tuptable = SPI_tuptable;
             TupleDesc tupdesc = SPI_tuptable->tupdesc;
-            PGR_DBG("processing %ld edge tupĺes", ntuples);
 
             for (t = 0; t < ntuples; t++) {
                 HeapTuple tuple = tuptable->vals[t];
@@ -510,18 +513,18 @@ get_edges_basic(
         }
     }
 
+    SPI_cursor_close(SPIportal);
 
     if (total_tuples == 0 || valid_edges == 0) {
-        (*totalTuples) = 0;
-        PGR_DBG("NO edges");
-        return;
+        PGR_DBG("No edges found");
     }
 
     (*totalTuples) = total_tuples;
-    PGR_DBG("Finish reading %ld edges, %ld", total_tuples, (*totalTuples));
-    time_msg(" reading Edges", start_t, clock());
+    PGR_DBG("Reading %ld edges", total_tuples);
+    time_msg("reading edges", start_t, clock());
 }
 
+/* select id, source, target, capacity, reverse_capacity */
 void
 pgr_get_flow_edges(
     char *sql,
@@ -531,24 +534,40 @@ pgr_get_flow_edges(
     get_edges_flow(sql, edges, total_edges, ignore_id);
 }
 
+/* select id, source, target, cost, reverse_cost */
 void
 pgr_get_edges(
         char *edges_sql,
         pgr_edge_t **edges,
         size_t *total_edges) {
     bool ignore_id = false;
-    get_edges_5_columns(edges_sql, edges, total_edges, ignore_id);
+    bool normal = true;
+    get_edges_5_columns(edges_sql, edges, total_edges, ignore_id, normal);
 }
 
+/* select id, source AS target, target AS source, cost, reverse_cost */
+void
+pgr_get_edges_reversed(
+        char *edges_sql,
+        pgr_edge_t **edges,
+        size_t *total_edges) {
+    bool ignore_id = false;
+    bool normal = false;
+    get_edges_5_columns(edges_sql, edges, total_edges, ignore_id, normal);
+}
+
+/* select source, target, cost, reverse_cost */
 void
 pgr_get_edges_no_id(
         char *edges_sql,
         pgr_edge_t **edges,
         size_t *total_edges) {
     bool ignore_id = true;
-    get_edges_5_columns(edges_sql, edges, total_edges, ignore_id);
+    bool normal = true;
+    get_edges_5_columns(edges_sql, edges, total_edges, ignore_id, normal);
 }
 
+/* select id, source, target, cost, reverse_cost, x1, y1, x2, y2 */
 void
 pgr_get_edges_xy(
         char *edges_sql,
@@ -556,6 +575,12 @@ pgr_get_edges_xy(
         size_t *total_edges) {
     get_edges_9_columns(edges_sql, edges, total_edges, true);
 }
+
+/* select id,
+ * source AS target,
+ * target AS source,
+ * cost, reverse_cost,
+ * x1, y1, x2, y2 */
 void
 pgr_get_edges_xy_reversed(
         char *edges_sql,
@@ -564,11 +589,12 @@ pgr_get_edges_xy_reversed(
     get_edges_9_columns(edges_sql, edges, total_edges, false);
 }
 
+/* used in flow algorithms */
 void
 pgr_get_basic_edges(
-    char *sql,
-    pgr_basic_edge_t **edges,
-    size_t *total_edges) {
+        char *sql,
+        pgr_basic_edge_t **edges,
+        size_t *total_edges) {
     bool ignore_id = false;
     get_edges_basic(sql, edges, total_edges, ignore_id);
 }
diff --git a/src/common/src/edges_input.h b/src/common/src/edges_input.h
index 5585f7d..20130d0 100644
--- a/src/common/src/edges_input.h
+++ b/src/common/src/edges_input.h
@@ -49,8 +49,6 @@ void pgr_get_edges_no_id(
 
 
 
-
-
 /*! @brief basic edge_sql
 
 For queries of the type:
@@ -67,6 +65,10 @@ void pgr_get_edges(
         char *edges_sql,
         pgr_edge_t **edges,
         size_t *total_edges);
+void pgr_get_edges_reversed(
+        char *edges_sql,
+        pgr_edge_t **edges,
+        size_t *total_edges);
 
 
 
@@ -149,6 +151,8 @@ void pgr_get_basic_edges(
     pgr_basic_edge_t **edges,
     size_t *total_edges);
 
+
+
 /* **************** FOR USERS DOCUMENTATION
 basic_edges_sql_start
 
diff --git a/src/common/src/get_check_data.c b/src/common/src/get_check_data.c
index 62e1144..6e4528f 100644
--- a/src/common/src/get_check_data.c
+++ b/src/common/src/get_check_data.c
@@ -22,12 +22,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include <postgres.h>
+#include "./../../common/src/postgres_connection.h"
+
 #include "catalog/pg_type.h"
-#include "executor/spi.h"
 
 
-// #define DEBUG
 #include "./pgr_types.h"
 #include "./debug_macro.h"
 #include "./get_check_data.h"
@@ -49,7 +48,9 @@ static
 bool
 fetch_column_info(
         Column_info_t *info) {
+#if 0
     PGR_DBG("Fetching column info of %s", info->name);
+#endif
     info->colNumber =  SPI_fnumber(SPI_tuptable->tupdesc, info->name);
     if (info->strict && !column_found(info->colNumber)) {
         elog(ERROR, "Column '%s' not Found", info->name);
@@ -59,7 +60,9 @@ fetch_column_info(
         if (SPI_result == SPI_ERROR_NOATTRIBUTE) {
             elog(ERROR, "Type of column '%s' not Found", info->name);
         }
+#if 0
         PGR_DBG("Column %s found: %lu", info->name, info->type);
+#endif
         return true;
     }
     PGR_DBG("Column %s not found", info->name);
@@ -181,7 +184,9 @@ pgr_SPI_getBigInt(HeapTuple *tuple, TupleDesc *tupdesc, Column_info_t info) {
                     "Unexpected Column type of %s. Expected ANY-INTEGER",
                     info.name);
     }
+#if 0
     PGR_DBG("Variable: %s Value: %ld", info.name, value);
+#endif
     return value;
 }
 
@@ -215,16 +220,16 @@ pgr_SPI_getFloat8(HeapTuple *tuple, TupleDesc *tupdesc, Column_info_t info) {
                     "Unexpected Column type of %s. Expected ANY-NUMERICAL",
                     info.name);
     }
+#if 0
     PGR_DBG("Variable: %s Value: %lf", info.name, value);
+#endif
     return value;
 }
 
+/**
+ * under development
+ */
 char*
 pgr_SPI_getText(HeapTuple *tuple, TupleDesc *tupdesc,  Column_info_t info) {
-    char* value = NULL;
-    char* val = NULL;
-    val = SPI_getvalue(*tuple, *tupdesc, info.colNumber);
-    value = DatumGetCString(&val);
-    pfree(val);
-    return value;
+    return DatumGetCString(SPI_getvalue(*tuple, *tupdesc, info.colNumber));
 }
diff --git a/src/common/src/get_check_data.h b/src/common/src/get_check_data.h
index 85ac8a8..5140119 100644
--- a/src/common/src/get_check_data.h
+++ b/src/common/src/get_check_data.h
@@ -34,8 +34,8 @@ void pgr_fetch_column_info(
 
 void pgr_check_any_integer_type(Column_info_t info);
 void pgr_check_any_numerical_type(Column_info_t info);
-void pgr_check_text_type(Column_info_t info);
 void pgr_check_char_type(Column_info_t info);
+void pgr_check_text_type(Column_info_t info);
 void pgr_check_boolean_type(Column_info_t info);
 
 
diff --git a/src/common/src/identifiers.hpp b/src/common/src/identifiers.hpp
index fef8b60..6860c3d 100644
--- a/src/common/src/identifiers.hpp
+++ b/src/common/src/identifiers.hpp
@@ -27,8 +27,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-
+#ifndef SRC_COMMON_SRC_IDENTIFIERS_HPP_
+#define SRC_COMMON_SRC_IDENTIFIERS_HPP_
 #pragma once
+
 #include <set>
 #include <algorithm>
 #include <sstream>
@@ -39,20 +41,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 template <typename T>
 class Identifiers {
  public:
+    typedef typename std::set<T>::iterator iterator;
+    typedef typename std::set<T>::const_iterator const_iterator;
+
     Identifiers<T>() = default;
+    /* TODO avoid pointers */
     Identifiers<T>(T* container, size_t size) {
         for (size_t i = 0; i < size; ++i) {
             m_ids.insert(container[i]);
         }
     }
+
     const std::set<T>& ids() const;
     size_t size() const { return m_ids.size(); }
-    typedef typename std::set<T>::iterator iterator;
-    typedef typename std::set<T>::const_iterator const_iterator;
     //! \brief Returns true when the set is empty
     inline bool empty() const { return m_ids.empty(); }
     inline void clear() { m_ids.clear(); }
-    bool has(const T other) const;
+    bool has(const T element) const;
     bool isDisjoint(const T other) const;
     bool isDisjoint(const Identifiers<T> &other) const;
     void insert(const Identifiers<T> &other);
@@ -63,6 +68,10 @@ class Identifiers {
     const_iterator end() const { return m_ids.end(); }
     bool operator ==(const Identifiers<T> &other) const;
     const T& operator[](size_t index) const;
+
+    //! @name  mathematical set operations
+    /// @{
+
     Identifiers<T> operator +(const T &other) const;
     Identifiers<T> operator *(const T &other) const;
     Identifiers<T> operator -(const T &other) const;
@@ -75,6 +84,8 @@ class Identifiers {
     Identifiers<T>& operator +=(const Identifiers<T> &other);
     Identifiers<T>& operator *=(const Identifiers<T> &other);
     Identifiers<T>& operator -=(const Identifiers<T> &other);
+    /// @}
+
     template<T>
     friend std::ostream& operator<<(
             std::ostream& os,
@@ -348,3 +359,6 @@ const T& Identifiers<T>::operator[](size_t index) const {
         }
         return *std::next(m_ids.begin(), index);
 }
+
+
+#endif  // SRC_COMMON_SRC_IDENTIFIERS_HPP_
diff --git a/src/common/src/matrixRows_input.c b/src/common/src/matrixRows_input.c
index e227af0..313c5c6 100644
--- a/src/common/src/matrixRows_input.c
+++ b/src/common/src/matrixRows_input.c
@@ -22,10 +22,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-// #define DEBUG
+#include "./postgres_connection.h"
+
 #include "./debug_macro.h"
 #include "./pgr_types.h"
-#include "./postgres_connection.h"
 #include "./get_check_data.h"
 #include "./time_msg.h"
 #include "./matrixRows_input.h"
@@ -121,6 +121,8 @@ void pgr_get_matrixRows(
         }
     }
 
+    SPI_cursor_close(SPIportal);
+
 
     if (total_tuples == 0) {
         (*total_rows) = 0;
diff --git a/src/common/src/debug_macro.h b/src/common/src/pgr_alloc.cpp
similarity index 75%
copy from src/common/src/debug_macro.h
copy to src/common/src/pgr_alloc.cpp
index 63bb809..3ba4c28 100644
--- a/src/common/src/debug_macro.h
+++ b/src/common/src/pgr_alloc.cpp
@@ -1,6 +1,5 @@
 /*PGR-GNU*****************************************************************
-
-File: debug_macro.h
+File: pgr_palloc.cpp
 
 Copyright (c) 2015 Celia Virginia Vergara Castillo
 Mail: vicky_vergara at hotmail.com
@@ -23,17 +22,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_COMMON_SRC_DEBUG_MACRO_H_
-#define SRC_COMMON_SRC_DEBUG_MACRO_H_
-#pragma once
-
-#ifndef NDEBUG
-#include <postgres.h>
+#include "./pgr_alloc.hpp"
+#include <string>
 
-#define PGR_DBG(...) \
-    elog(DEBUG2, __VA_ARGS__)
-#else
-#define PGR_DBG(...) do { ; } while (0)
-#endif
+char *
+pgr_msg(const std::string &msg) {
+    char* duplicate = NULL;
+    duplicate = pgr_alloc(msg.size() + 1, duplicate);
+    memcpy(duplicate, msg.c_str(), msg.size());
+    duplicate[msg.size()] = '\0';
+    return duplicate;
+}
 
-#endif  // SRC_COMMON_SRC_DEBUG_MACRO_H_
diff --git a/src/common/src/pgr_alloc.hpp b/src/common/src/pgr_alloc.hpp
index 72a28af..67d6c9a 100644
--- a/src/common/src/pgr_alloc.hpp
+++ b/src/common/src/pgr_alloc.hpp
@@ -21,16 +21,25 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
+
+#ifndef SRC_COMMON_SRC_PGR_ALLOC_HPP_
+#define SRC_COMMON_SRC_PGR_ALLOC_HPP_
 #pragma once
-#if defined(__MINGW32__) || defined(_MSC_VER)
+
+
+extern "C" {
+#if PGSQL_VERSION < 94
+#ifdef __MINGW32__
 #include <winsock2.h>
 #include <windows.h>
-#ifdef open
-#undef open
 #endif
 #endif
 
-#include <stdlib.h>
+#include "./postgres_connection.h"
+#include <utils/palloc.h>
+}
+
+#include <string>
 
 /*! \fn pgr_alloc(std::size_t size, T *ptr)
  
@@ -47,13 +56,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  */
 
+
 template <typename T>
 T*
-pgr_alloc(std::size_t size, T *ptr) {
+pgr_alloc(std::size_t size, T* ptr) {
     if (!ptr) {
-        ptr = (T*) malloc(size * sizeof(T));
+        ptr = static_cast<T*>(SPI_palloc(size * sizeof(T)));
     } else {
-        ptr = (T*) realloc(ptr, size * sizeof(T));
+        ptr = static_cast<T*>(SPI_repalloc(ptr, size * sizeof(T)));
     }
-    return (T*) ptr;
+    return ptr;
 }
+
+template <typename T>
+T*
+pgr_free(T* ptr) {
+    if (ptr) {
+        pfree(ptr);
+    }
+    return nullptr;
+}
+
+char *
+pgr_msg(const std::string &msg);
+
+#endif  // SRC_COMMON_SRC_PGR_ALLOC_HPP_
diff --git a/src/common/src/pgr_assert.cpp b/src/common/src/pgr_assert.cpp
index 4f2d77d..69dfcb7 100644
--- a/src/common/src/pgr_assert.cpp
+++ b/src/common/src/pgr_assert.cpp
@@ -10,6 +10,7 @@
  *
  *****************************************************************PGR-MIT*/
 #include "./pgr_assert.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
@@ -17,20 +18,10 @@
 #ifdef __linux__
 #include <execinfo.h>
 #endif
+
 #include <string>
 #include <exception>
 
-#if 0
-#ifdef assert
-#undef assert
-#endif
-
-#ifndef __STRING
-#define __STRING(x) #x
-#endif
-
-#define __TOSTRING(x) __STRING(x)
-#endif
 
 std::string get_backtrace() {
 #ifdef __linux__
diff --git a/src/common/src/pgr_base_graph.hpp b/src/common/src/pgr_base_graph.hpp
index 25c5153..d9517d7 100644
--- a/src/common/src/pgr_base_graph.hpp
+++ b/src/common/src/pgr_base_graph.hpp
@@ -22,18 +22,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_COMMON_SRC_PGR_BASE_GRAPH_HPP_
+#define SRC_COMMON_SRC_PGR_BASE_GRAPH_HPP_
 #pragma once
-#if defined(__MinGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#undef min
-#undef max
-#ifdef open
-#undef open
-#endif
-#endif
-
-
 
 #include <boost/graph/iteration_macros.hpp>
 #include <boost/config.hpp>
@@ -56,6 +47,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./basic_edge.h"
 #include "./pgr_assert.h"
 
+namespace pgrouting {
+
 /*! @brief boost::graph simplified to pgRouting needs
 
   This class gives the handling basics of a boost::graph of kind G
@@ -86,7 +79,7 @@ Data obtained from postgresql is stored in
 A C array of pgr_edge_t type.
 
 ~~~~{.c}
-std::vector< T_V > 
+std::vector< T_V >
 extract_vertices(pgr_edge_t *, size_t)
 ~~~~
 
@@ -95,7 +88,7 @@ Data obtained from postgresql is stored in
 o a vector container.
 
 ~~~~{.c}
-std::vector< T_V > 
+std::vector< T_V >
 extract_vertices(std::vector< pgr_edge_t >)
 ~~~~
 
@@ -112,19 +105,19 @@ The code is prepared to be used for:
 boost::adjacency_list
 < boost::vecS,  // not tested with other values
 boost::vecS,  // not tested with other values
-boost::undirectedS,  // USinG UNDIRECTED 
+boost::undirectedS,  // USinG UNDIRECTED
 Basic_vertex,  // the vertex class
 Basic_edge >   // the edge class
 ~~~~
 
 
 
-Eample Usage:
+Example Usage:
 =============
 
 For this example we will use:
 - Basic_vertex
-- Basic_edge 
+- Basic_edge
 - pgr_edge_t
 
 
@@ -134,7 +127,7 @@ Create Graph type
 ~~~~{.c}
 typedef typename
 graph::Pgr_base_graph <
-boost::adjacency_list < 
+boost::adjacency_list <
 boost::vecS,
     boost::vecS,
     boost::bidirectionalS,
@@ -158,7 +151,7 @@ Vector of unique vertices of the graph
 ~~~~{.c}
 size_t total_edges;
 pgr_edge_t *my_edges = NULL;
-pgr_get_edges(edges_sql, &my_edges, &total_tuples); 
+pgr_get_edges(edges_sql, &my_edges, &total_tuples);
 std::vector< Basic_Vertex > vertices(pgrouting::extract_vertices(my_edges));
 ~~~~
 
@@ -202,21 +195,20 @@ pgrouting::DirectedGraph digraph(
   - the vertices are inserted
 
 
-Fill the graph 
+Fill the graph
 ---------------------
 
 After initializing the graph with the vertices, the edges can be added.
 
 ~~~~{.c}
 // inserting edges from a C array
-digraph.graph_insert_data(my_edges, total_edges);
+digraph.insert_edges(my_edges, total_edges);
 
 // adding more edges to the graph from a vector container
-digraph.graph_insert_data(new_edges);
+digraph.insert_edges(new_edges);
 ~~~~
 
 */
-namespace pgrouting {
 
 namespace graph {
 template <class G, typename Vertex, typename Edge>
@@ -225,13 +217,13 @@ class Pgr_base_graph;
 }  // namespace graph
 
 
-/** @name Graph types 
+/** @name Graph types
   Type      |   pgRouting
   :---------: | :---------------------
   UndirectedGraph | Basic undirected graph
   DirectedGraph | Basic directed graph
-  xyUndirectedGraph | X & Y values stored on the vertex 
-  xyDirectedGraph | X & Y values stored on the vertex 
+  xyUndirectedGraph | X & Y values stored on the vertex
+  xyDirectedGraph | X & Y values stored on the vertex
   */
 //@{
 typedef graph::Pgr_base_graph <
@@ -258,20 +250,6 @@ boost::adjacency_list < boost::listS, boost::vecS,
     XY_vertex, Basic_edge >,
     XY_vertex, Basic_edge > xyDirectedGraph;
 
-#if 0
-// TODO(Rohith) this is only used on internal query tests
-typedef graph::Pgr_base_graph <
-boost::adjacency_list < boost::listS, boost::vecS,
-    boost::undirectedS,
-    contraction::Vertex, Basic_edge >,
-    contraction::Vertex, Basic_edge > CUndirectedGraph;
-
-typedef graph::Pgr_base_graph <
-boost::adjacency_list < boost::listS, boost::vecS,
-    boost::bidirectionalS,
-    contraction::Vertex, Basic_edge >,
-    contraction::Vertex, Basic_edge > CDirectedGraph;
-#endif
 //@}
 
 
@@ -293,6 +271,7 @@ class Pgr_base_graph {
        */
      //@{
      typedef G B_G;
+     typedef T_E G_T_E;
      typedef typename boost::graph_traits < G >::vertex_descriptor V;
      typedef typename boost::graph_traits < G >::edge_descriptor E;
      typedef typename boost::graph_traits < G >::vertex_iterator V_i;
@@ -383,10 +362,10 @@ class Pgr_base_graph {
          }
 
 
-     //! @name Insert data
+     //! @name Insert edges
      //@{
      /*! @brief Inserts *count* edges of type *T* into the graph
-      *  
+      *
       *  Converts the edges to a std::vector<T> & calls the overloaded
       *  twin function.
       *
@@ -394,29 +373,30 @@ class Pgr_base_graph {
       *  @param count
       */
      template < typename T >
-         void graph_insert_data(const T *edges, int64_t count) {
-             graph_insert_data(std::vector < T >(edges, edges + count));
+         void insert_edges(const T *edges, int64_t count) {
+             insert_edges(std::vector < T >(edges, edges + count));
          }
+
      /*! @brief Inserts *count* edges of type *pgr_edge_t* into the graph
 
         The set of edges should not have an illegal vertex defined
-        
+
         When the graph is empty calls:
         - @b extract_vertices
         and throws an exception if there are illegal vertices.
-        
-        
+
+
         When developing:
           - if an illegal vertex is found an exception is thrown
           - That means that the set of vertices should be checked in the
             code that is being developed
-        
+
         No edge is inserted when there is an error on the vertices
 
         @param edges
       */
      template < typename T >
-         void graph_insert_data(const std::vector < T > &edges) {
+         void insert_edges(const std::vector < T > &edges) {
 #if 0
              // This code does not work with contraction
              if (num_vertices() == 0) {
@@ -437,21 +417,21 @@ class Pgr_base_graph {
       * PRECONDITIONS:
       * ~~~~~{.c}
       * precondition(boost::num_vertices(graph) == 0);
-      * for (vertex : vertices) 
+      * for (vertex : vertices)
       *    precondition(!has_vertex(vertex.id));
       * ~~~~~
       *
       * POSTCONDITIONS:
       * ~~~~~{.c}
       * postcondition(boost::num_vertices(graph) == vertices.size());
-      * for (vertex : vertices) 
+      * for (vertex : vertices)
       *    precondition(has_vertex(vertex.id));
       * ~~~~~
       */
      void add_vertices(std::vector< T_V > vertices);
 
  public:
-     //! @name boost wrappers
+     //! @name boost wrappers with original id
      //@{
      //! @brief get the out-degree  of a vertex
 
@@ -466,6 +446,14 @@ class Pgr_base_graph {
          }
          return out_degree(get_V(vertex_id));
      }
+     degree_size_type in_degree(int64_t vertex_id) const {
+         if (!has_vertex(vertex_id)) {
+             return 0;
+         }
+         return is_directed()?
+             in_degree(get_V(vertex_id))
+             :  out_degree(get_V(vertex_id));
+     }
 
 
      /*! @brief get the vertex descriptor of the vertex
@@ -502,12 +490,55 @@ class Pgr_base_graph {
          return vertices_map.find(vid) != vertices_map.end();
      }
 
-     //! @brief True when vid is in the graph
+
+
+     //! @name to be or not to be
+     //@{
+
+     bool is_directed() const {return m_gType == DIRECTED;}
+     bool is_undirected() const {return m_gType == UNDIRECTED;}
+     bool is_source(V v_idx, E e_idx) const {return v_idx == source(e_idx);}
+     bool is_target(V v_idx, E e_idx) const {return v_idx == target(e_idx);}
+
+     //@}
+
+     //! @name boost wrappers with V
+     //@{
+
+
+     T_E& operator[](E e_idx) {return graph[e_idx];}
+     const T_E& operator[](E e_idx) const {return graph[e_idx];}
+
+     T_V& operator[](V v_idx) {return graph[v_idx];}
+     const T_V& operator[](V v_idx) const {return graph[v_idx];}
+
+     V source(E e_idx) const {return boost::source(e_idx, graph);}
+     V target(E e_idx) const {return boost::target(e_idx, graph);}
+     V adjacent(V v_idx, E e_idx) const {
+         pgassert(is_source(v_idx, e_idx) || is_target(v_idx, e_idx));
+         return is_source(v_idx, e_idx)?
+             target(e_idx) :
+             source(e_idx);
+     }
+
+
+     /*! @brief in degree of a vertex
+      *
+      * - when its undirected there is no "concept" of in degree
+      *   - out degree is returned
+      * - on directed in degree of vertex is returned
+      */
      degree_size_type in_degree(V &v) const {
-         return boost::in_degree(v, graph);
+         return is_directed()?
+             boost::in_degree(v, graph) :
+             boost::out_degree(v, graph);
      }
 
-     //! @brief True when vid is in the graph
+     /*! @brief out degree of a vertex
+      *
+      * regardles of undirected or directed graph
+      * - out degree is returned
+      */
      degree_size_type out_degree(V &v) const {
          return boost::out_degree(v, graph);
      }
@@ -586,9 +617,9 @@ class Pgr_base_graph {
                      out != out_end; ++out) {
                  log << ' '
                      << g.graph[*out].id << "=("
-                     << g.graph[source(*out, g.graph)].id << ", "
-                     << g.graph[target(*out, g.graph)].id << ") = "
-                     << g.graph[*out].cost <<"@t";
+                     << g[g.source(*out)].id << ", "
+                     << g[g.target(*out)].id << ") = "
+                     << g.graph[*out].cost <<"\t";
              }
              log << std::endl;
          }
@@ -602,10 +633,6 @@ class Pgr_base_graph {
 
      size_t num_vertices() const { return boost::num_vertices(graph);}
 
-     T_V operator[](V v) const {
-         return graph[v];
-     }
-
 
      void graph_add_edge(const T_E &edge);
 
@@ -631,10 +658,10 @@ Pgr_base_graph< G, T_V, T_E >::disconnect_edge(int64_t p_from, int64_t p_to) {
     // store the edges that are going to be removed
     for (boost::tie(out, out_end) = out_edges(g_from, graph);
             out != out_end; ++out) {
-        if (target(*out, graph) == g_to) {
+        if (target(*out) == g_to) {
             d_edge.id = graph[*out].id;
-            d_edge.source = graph[source(*out, graph)].id;
-            d_edge.target = graph[target(*out, graph)].id;
+            d_edge.source = graph[source(*out)].id;
+            d_edge.target = graph[target(*out)].id;
             d_edge.cost = graph[*out].cost;
             removed_edges.push_back(d_edge);
         }
@@ -664,8 +691,8 @@ Pgr_base_graph< G, T_V, T_E >::disconnect_out_going_edge(
                 out != out_end; ++out) {
             if (graph[*out].id  == edge_id) {
                 d_edge.id = graph[*out].id;
-                d_edge.source = graph[source(*out, graph)].id;
-                d_edge.target = graph[target(*out, graph)].id;
+                d_edge.source = graph[source(*out)].id;
+                d_edge.target = graph[target(*out)].id;
                 d_edge.cost = graph[*out].cost;
                 removed_edges.push_back(d_edge);
                 boost::remove_edge((*out), graph);
@@ -694,8 +721,8 @@ Pgr_base_graph< G, T_V, T_E >::disconnect_vertex(V vertex) {
     for (boost::tie(out, out_end) = out_edges(vertex, graph);
             out != out_end; ++out) {
         d_edge.id = graph[*out].id;
-        d_edge.source = graph[source(*out, graph)].id;
-        d_edge.target = graph[target(*out, graph)].id;
+        d_edge.source = graph[source(*out)].id;
+        d_edge.target = graph[target(*out)].id;
         d_edge.cost = graph[*out].cost;
         removed_edges.push_back(d_edge);
     }
@@ -706,8 +733,8 @@ Pgr_base_graph< G, T_V, T_E >::disconnect_vertex(V vertex) {
         for (boost::tie(in, in_end) = in_edges(vertex, graph);
                 in != in_end; ++in) {
             d_edge.id = graph[*in].id;
-            d_edge.source = graph[source(*in, graph)].id;
-            d_edge.target = graph[target(*in, graph)].id;
+            d_edge.source = graph[source(*in)].id;
+            d_edge.target = graph[target(*in)].id;
             d_edge.cost = graph[*in].cost;
             removed_edges.push_back(d_edge);
         }
@@ -736,13 +763,13 @@ Pgr_base_graph< G, T_V, T_E >::get_edge_id(
     E e;
     EO_i out_i, out_end;
     V v_source, v_target;
-    double minCost =  std::numeric_limits<double>::max();
+    double minCost =  (std::numeric_limits<double>::max)();
     int64_t minEdge = -1;
     for (boost::tie(out_i, out_end) = boost::out_edges(from, graph);
             out_i != out_end; ++out_i) {
         e = *out_i;
-        v_target = target(e, graph);
-        v_source = source(e, graph);
+        v_target = target(e);
+        v_source = source(e);
         if ((from == v_source) && (to == v_target)
                 && (distance == graph[e].cost))
             return graph[e].id;
@@ -807,7 +834,6 @@ Pgr_base_graph< G, T_V, T_E >::graph_add_edge(const T &edge) {
             boost::add_edge(vm_s, vm_t, graph);
         graph[e].cost = edge.cost;
         graph[e].id = edge.id;
-        graph[e].first = true;
     }
 
     if (edge.reverse_cost >= 0) {
@@ -816,7 +842,6 @@ Pgr_base_graph< G, T_V, T_E >::graph_add_edge(const T &edge) {
 
         graph[e].cost = edge.reverse_cost;
         graph[e].id = edge.id;
-        graph[e].first = false;
     }
 }
 
@@ -841,3 +866,5 @@ Pgr_base_graph< G, T_V, T_E >::add_vertices(
 
 }  // namespace graph
 }  // namespace pgrouting
+
+#endif  // SRC_COMMON_SRC_PGR_BASE_GRAPH_HPP_
diff --git a/src/common/src/pgr_types.h b/src/common/src/pgr_types.h
index 0615cd2..4ac8339 100644
--- a/src/common/src/pgr_types.h
+++ b/src/common/src/pgr_types.h
@@ -27,14 +27,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #pragma once
 
 
-#ifndef __cplusplus
+#ifdef __cplusplus
+
+#include <cstddef>
+
+#else  // __cplusplus
 
 // for bool
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-pedantic"
+#endif
+
 #include <postgres.h>
 
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
 // For NULL & size_t
 #include <stdlib.h>
-#endif
+
+
+#endif  // __cplusplus
 
 // For int64_t etc
 #include <stdint.h>
@@ -79,12 +93,12 @@ typedef struct {
 /*
  * This one is for processing
  */
-typedef struct {
+struct Path_t{
     int64_t node;
     int64_t edge;
     double cost;
     double agg_cost;
-} Path_t;
+};
 
 /*
  * This ones are for returning the info to postgres
@@ -189,6 +203,22 @@ struct {
     expectType eType;
 } Column_info_t;
 
+
+/**************************************************************************
+ * return type for contraction
+ * ***********************************************************************/
+typedef struct {
+    int64_t id;
+    char* type;
+    int64_t source;
+    int64_t target;
+    double cost;
+    int64_t *contracted_vertices;
+    int contracted_vertices_size;
+} pgr_contracted_blob;
+
+
+
 enum graphType {UNDIRECTED = 0, DIRECTED};
 
 /**************************************************************************
@@ -208,16 +238,16 @@ typedef struct {
 } Customer_t;
 
 /*
-    OUT seq INTEGER,        done in the .c code
-    OUT vehicle_seq INTEGER,
-    OUT vehicle_id INTEGER,
-    OUT order_id BIGINT,
-    OUT travelTime FLOAT,
-    OUT arrivalTime FLOAT,
-    OUT waitTime FLOAT,
-    OUT serviceTime FLOAT,
-    OUT departureTime FLOAT,
-*/
+   OUT seq INTEGER,        done in the .c code
+   OUT vehicle_seq INTEGER,
+   OUT vehicle_id INTEGER,
+   OUT order_id BIGINT,
+   OUT travelTime FLOAT,
+   OUT arrivalTime FLOAT,
+   OUT waitTime FLOAT,
+   OUT serviceTime FLOAT,
+   OUT departureTime FLOAT,
+   */
 
 typedef struct  {
     int vehicle_id;
diff --git a/src/common/src/points_input.c b/src/common/src/points_input.c
index 18b3f2d..e44edea 100644
--- a/src/common/src/points_input.c
+++ b/src/common/src/points_input.c
@@ -22,9 +22,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#include "./postgres_connection.h"
 #include "./debug_macro.h"
 #include "./pgr_types.h"
-#include "./postgres_connection.h"
 #include "./get_check_data.h"
 #include "./points_input.h"
 
diff --git a/src/common/src/postgres_connection.c b/src/common/src/postgres_connection.c
index 9137bf3..d82e85f 100644
--- a/src/common/src/postgres_connection.c
+++ b/src/common/src/postgres_connection.c
@@ -22,14 +22,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include <postgres.h>
+#include "./postgres_connection.h"
+#include "utils/builtins.h"
+
 #include "catalog/pg_type.h"
-#include "executor/spi.h"
 
+#include <string.h>
 
-// #define DEBUG
 #include "./debug_macro.h"
-#include "./postgres_connection.h"
 
 void
 pgr_send_error(int errcode) {
@@ -49,19 +49,29 @@ pgr_send_error(int errcode) {
 
 
 char*
-pgr_text2char(text *in) {
-    char *out = palloc(VARSIZE(in));
+pgr_cstring2char(const char *inStr) {
+
+    if(!inStr) return NULL;
 
-    memcpy(out, VARDATA(in), VARSIZE(in) - VARHDRSZ);
-    out[VARSIZE(in) - VARHDRSZ] = '\0';
-    return out;
+    char *outStr;
+    outStr = palloc(strlen(inStr));
+    if (!outStr) return NULL;
+
+    memcpy(outStr, inStr, strlen(inStr));
+
+    outStr[strlen(inStr)] = '\0';
+
+    return outStr;
 }
 
 
+
 // http://www.postgresql.org/docs/9.4/static/spi-spi-finish.html
 void
 pgr_SPI_finish(void) {
+#if 0
     PGR_DBG("Disconnecting SPI");
+#endif
     int code = SPI_OK_FINISH;
     code = SPI_finish();
     if (code != SPI_OK_FINISH) {  // SPI_ERROR_UNCONNECTED
@@ -71,7 +81,9 @@ pgr_SPI_finish(void) {
 
 void
 pgr_SPI_connect(void) {
+#if 0
     PGR_DBG("Connecting to SPI");
+#endif
     int SPIcode;
     SPIcode = SPI_connect();
     if (SPIcode  != SPI_OK_CONNECT) {
@@ -81,7 +93,9 @@ pgr_SPI_connect(void) {
 
 SPIPlanPtr
 pgr_SPI_prepare(char* sql) {
+#if 0
     PGR_DBG("Preparing Plan");
+#endif
     SPIPlanPtr SPIplan;
     SPIplan = SPI_prepare(sql, 0, NULL);
     if (SPIplan  == NULL) {
@@ -92,7 +106,9 @@ pgr_SPI_prepare(char* sql) {
 
 Portal
 pgr_SPI_cursor_open(SPIPlanPtr SPIplan) {
+#if 0
     PGR_DBG("Opening Portal");
+#endif
     Portal SPIportal;
     SPIportal = SPI_cursor_open(NULL, SPIplan, NULL, NULL, true);
     if (SPIportal == NULL) {
diff --git a/src/common/src/postgres_connection.h b/src/common/src/postgres_connection.h
index 0e89b40..ffbad67 100644
--- a/src/common/src/postgres_connection.h
+++ b/src/common/src/postgres_connection.h
@@ -25,15 +25,53 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #define SRC_COMMON_SRC_POSTGRES_CONNECTION_H_
 #pragma once
 
+
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-pedantic"
+#endif
+
 #include <postgres.h>
+
+
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wsign-conversion"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
 #include "executor/spi.h"
 
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#pragma GCC diagnostic pop
+#pragma GCC diagnostic pop
+#endif
+
+#include "utils/builtins.h"  // for text_to_cstring
+
+#if PGSQL_VERSION > 92
+#include "access/htup_details.h"
+#endif
+
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+#include <funcapi.h>
+#include <fmgr.h>
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
 
 void pgr_send_error(int errcode);
 void pgr_SPI_finish(void);
 void pgr_SPI_connect(void);
 SPIPlanPtr pgr_SPI_prepare(char* sql);
 Portal pgr_SPI_cursor_open(SPIPlanPtr SPIplan);
-char* pgr_text2char(text *in);
+char* pgr_cstring2char(const char *inStr);
 
 #endif  // SRC_COMMON_SRC_POSTGRES_CONNECTION_H_
diff --git a/src/common/src/restrictions_input.c b/src/common/src/restrictions_input.c
index a39a193..b4dde83 100644
--- a/src/common/src/restrictions_input.c
+++ b/src/common/src/restrictions_input.c
@@ -23,13 +23,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 ********************************************************************PGR-GNU*/
 
 
-#include <postgres.h>
-#include "executor/spi.h"
-
+#include "./postgres_connection.h"
 #include "./debug_macro.h"
 #include "./pgr_types.h"
 #include "./time_msg.h"
-#include "./postgres_connection.h"
 #include "./get_check_data.h"
 #include "./restrictions_input.h"
 
@@ -143,6 +140,8 @@ pgr_get_restriction_data(
         }
     }
 
+    SPI_cursor_close(SPIportal);
+
     if (total_tuples == 0) {
         (*total_restrictions) = 0;
         PGR_DBG("NO restrictions");
diff --git a/src/common/src/time_msg.c b/src/common/src/time_msg.c
index 81c10ce..cd0cac5 100644
--- a/src/common/src/time_msg.c
+++ b/src/common/src/time_msg.c
@@ -23,14 +23,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-#include "./time_msg.h"
 #include <time.h>
-#include <postgres.h>
+#include "./postgres_connection.h"
+
+#include "./time_msg.h"
 
 
 void time_msg(char *msg, clock_t start_t, clock_t end_t) {
     double elapsed_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
-    elog(DEBUG1, "Elapsed time for %s: %lfsec = (%lf - %f) / CLOCKS_PER_SEC ",
+    elog(DEBUG2, "Elapsed time for %s:\n %lf sec = (%lf - %f) / CLOCKS_PER_SEC ",
             msg,
             elapsed_t,
             (double) end_t,
diff --git a/src/common/src/xy_vertex.cpp b/src/common/src/xy_vertex.cpp
index 802b281..5fb0978 100644
--- a/src/common/src/xy_vertex.cpp
+++ b/src/common/src/xy_vertex.cpp
@@ -21,19 +21,12 @@
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
 
+#include "./xy_vertex.h"
 
 #include <vector>
 #include <algorithm>
 
-#include "./xy_vertex.h"
 #include "./pgr_types.h"
 #include "./pgr_assert.h"
 
diff --git a/src/common/src/xy_vertex.h b/src/common/src/xy_vertex.h
index dccdf8a..34e4276 100644
--- a/src/common/src/xy_vertex.h
+++ b/src/common/src/xy_vertex.h
@@ -26,6 +26,13 @@
 #define SRC_COMMON_SRC_XY_VERTEX_H_
 #pragma once
 
+#ifdef Max
+#undef Max
+#endif
+#ifdef Min
+#undef Min
+#endif
+
 #include <CGAL/Simple_cartesian.h>
 #include <vector>
 
diff --git a/src/contraction/doc/contraction.rst b/src/contraction/doc/contraction-family.rst
similarity index 98%
rename from src/contraction/doc/contraction.rst
rename to src/contraction/doc/contraction-family.rst
index dca8433..707d718 100644
--- a/src/contraction/doc/contraction.rst
+++ b/src/contraction/doc/contraction-family.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -10,16 +10,21 @@
 
 .. _contraction:
 
-Contraction
+Contraction - Family of functions
 ===============================================================================
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 :ref:`pgr_contractGraph`
 
+.. toctree::
+    :hidden:
+
+    pgr_contractGraph
+
 Introduction
 -------------
 
@@ -300,7 +305,7 @@ This implementation, cycles ``max_cycles`` times through ``operations_order`` .
 
     <input>
     do max_cycles times {
-        for (operation in operations_order) 
+        for (operation in operations_order)
          { do operation }
     }
     <output>
@@ -319,11 +324,11 @@ The original graph:
 .. image:: images/undirected_sampledata_a.png
 
 After doing a dead end contraction operation:
-    
+
 .. image:: images/undirected_sampledata_b.png
 
 Doing a linear contraction operation to the graph above
-    
+
 .. image:: images/undirected_sampledata_c.png
 
 
@@ -419,16 +424,16 @@ Verify visually the updates.
    :start-after: -- q9
    :end-before: -- q10
 
-- vertices that belong to the contracted graph are the non contracted vertices 
+- vertices that belong to the contracted graph are the non contracted vertices
 
 .. literalinclude:: doc-contraction.queries
    :start-after: -- q10
    :end-before: -- case1
 
-.. rubric:: case 1: Both source and target belong to the contracted graph. 
+.. rubric:: case 1: Both source and target belong to the contracted graph.
 
 Inspecting the contracted graph above, vertex 3 and vertex 11 are part of the contracted graph. In the following query:
- 
+
  - vertices_in_graph hold the vertices that belong to the contracted graph.
  - when selecting the edges, only edges that have the source and the target in that set are the edges belonging to the contracted graph, that is done in the WHERE clause.
 
@@ -474,7 +479,7 @@ The results, on the contracted graph match the results as if it was done on the
 .. rubric:: case 4: Source belongs to the contracted graph, while target belongs to an vertex subgraph.
 
 Inspecting the contracted graph above, vertex 3 is part of the contracted graph and vertex 7 belongs to the contracted subgraph of vertex 5. In the following query:
- 
+
  - expand7 holds the contracted vertices of vertex where vertex 7 belongs. (belongs to vertex 5)
  - vertices_in_graph hold the vertices that belong to the contracted graph and the contracted vertices of vertex 5.
  - when selecting the edges, only edges that have the source and the target in that set are the edges belonging to the contracted graph, that is done in the WHERE clause.
@@ -513,7 +518,7 @@ See Also
 
 * http://www.cs.cmu.edu/afs/cs/academic/class/15210-f12/www/lectures/lecture16.pdf
 * http://algo2.iti.kit.edu/documents/routeplanning/geisberger_dipl.pdf
-* The queries use :ref:`pgr_contractGraph` function and the :ref:`sampledata` network. 
+* The queries use :ref:`pgr_contractGraph` function and the :ref:`sampledata` network.
 
 .. rubric:: Indices and tables
 
diff --git a/src/contraction/doc/doc-contractGraph.queries b/src/contraction/doc/doc-contractGraph.queries
index 247c655..7b3757f 100644
--- a/src/contraction/doc/doc-contractGraph.queries
+++ b/src/contraction/doc/doc-contractGraph.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 -- q1
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table',
@@ -54,3 +58,5 @@ ARRAY[2]);
 (4 rows)
 
 -- q5
+ROLLBACK;
+ROLLBACK
diff --git a/src/contraction/doc/doc-contraction.queries b/src/contraction/doc/doc-contraction.queries
index 46cbaf3..ef82961 100644
--- a/src/contraction/doc/doc-contraction.queries
+++ b/src/contraction/doc/doc-contraction.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 -- q00
 SELECT id, source, target, cost, reverse_cost FROM edge_table;
  id | source | target | cost | reverse_cost 
@@ -23,7 +27,7 @@ SELECT id, source, target, cost, reverse_cost FROM edge_table;
 (18 rows)
 
 -- q01
-SET client_min_messages TO error;
+SET client_min_messages TO ERROR;
 SET
 -- q1
 ALTER TABLE edge_table ADD contracted_vertices BIGINT[];
@@ -34,6 +38,8 @@ ALTER TABLE edge_table ADD is_contracted BOOLEAN DEFAULT false;
 ALTER TABLE
 ALTER TABLE edge_table_vertices_pgr ADD is_contracted BOOLEAN DEFAULT false;
 ALTER TABLE
+SET client_min_messages TO NOTICE;
+SET
 -- q2
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table',
@@ -352,3 +358,5 @@ SELECT * FROM pgr_dijkstra($$
 (5 rows)
 
 -- end
+ROLLBACK;
+ROLLBACK
diff --git a/src/contraction/doc/pgr_contractGraph.rst b/src/contraction/doc/pgr_contractGraph.rst
index e511bec..284eedc 100644
--- a/src/contraction/doc/pgr_contractGraph.rst
+++ b/src/contraction/doc/pgr_contractGraph.rst
@@ -7,28 +7,25 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-   INSTRUCTIONS
-   - if section consists of only one value then use this file as index.rst
-   - change [...] (including the square braquets) to appropriate values
-   - one file / function,  may signatures of the same function go in the same file
-
 .. _pgr_contractGraph:
 
 pgr_contractGraph - Proposed
 ===============================================================================
 
-``pgr_contractGraph`` — Performs graph contraction and returns the contracted vertices and edges. 
-
+``pgr_contractGraph`` — Performs graph contraction and returns the contracted vertices and edges.
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.3.0
+
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
+
 
 Synopsis
 -------------
@@ -40,12 +37,12 @@ Characteristics
 
 The main Characteristics are:
   - Process is done only on edges with positive costs.
-  
+
   - There are two types of contraction methods used namely,
 
     - Dead End Contraction
     - Linear Contraction
-  
+
   - The values returned include the added edges and contracted vertices.
 
   - The returned values are ordered as follows:
@@ -61,7 +58,7 @@ Signature Summary:
 The pgr_contractGraph function has the following signatures:
 
 .. code-block:: none
-    
+
     pgr_contractGraph(edges_sql, contraction_order)
     pgr_contractGraph(edges_sql, contraction_order, max_cycles, forbidden_vertices, directed)
 
@@ -78,7 +75,7 @@ Minimal signature
 .......................................
 
 .. code-block:: none
-       
+
     pgr_contractGraph(edges_sql, contraction_order)
 
 :Example: Making a dead end contraction and a linear contraction.
@@ -91,7 +88,7 @@ Complete signature
 .......................................
 
 .. code-block:: none
-       
+
     pgr_contractGraph(edges_sql, contraction_order, max_cycles, forbidden_vertices, directed)
 
 :Example: Making a dead end contraction and a linear contraction and vertex 2 is forbidden from contraction
@@ -101,7 +98,7 @@ Complete signature
    :end-before: -- q3
 
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
@@ -134,7 +131,7 @@ The function returns a single row. The columns of the row are:
 Column                       Type                Description
 ============================ =================   ===================================================================
 **seq**                      ``INTEGER``         Sequential value starting from **1**.
-**type**                     ``TEXT``            Type of the `id`. 
+**type**                     ``TEXT``            Type of the `id`.
                                                   - 'v' when `id` is an identifier of a vertex.
                                                   - 'e' when `id` is an identifier of an edge.
 **id**                       ``BIGINT``          Identifier of:
@@ -142,7 +139,7 @@ Column                       Type                Description
 
                                                     - The vertex belongs to the edge_table passed as a parameter.
                                                   * the edge when `type = 'e'`.
-                                                  
+
                                                     - The `id` is a decreasing sequence starting from **-1**.
 
                                                     - Representing a pseudo `id` as is not incorporated into the edge_table.
diff --git a/src/contraction/src/contractGraph.c b/src/contraction/src/contractGraph.c
index c2e51d6..5b16f8e 100644
--- a/src/contraction/src/contractGraph.c
+++ b/src/contraction/src/contractGraph.c
@@ -5,9 +5,9 @@ Generated with Template by:
 Copyright (c) 2015 pgRouting developers
 Mail: project at pgrouting.org
 
-Function's developer: 
+Function's developer:
 Copyright (c) 2016 Rohith Reddy
-Mail: 
+Mail:
 
 ------
 
@@ -27,164 +27,148 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
 #include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 #include "utils/lsyscache.h"
-#include "utils/builtins.h"
-#include "fmgr.h"
 
 #ifndef INT8ARRAYOID
 #define INT8ARRAYOID    1016
 #endif
-/*
-  Uncomment when needed
-*/
 
-// #define DEBUG
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
+#include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./structs.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./contractGraph_driver.h"
 
 PGDLLEXPORT Datum contractGraph(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(contractGraph);
 
 
-/********************************************************************/
-/*                          MODIFY AS NEEDED                        */
 static
 void
 process(char* edges_sql,
-        int64_t *forbidden_vertices,
-        int64_t *contraction_order,
-        size_t size_forbidden_vertices,
-        size_t size_contraction_order,
+        ArrayType* order,
         int num_cycles,
+        ArrayType* forbidden,
+
         bool directed,
         pgr_contracted_blob **result_tuples,
         size_t *result_count) {
+    /*
+     * nothing to do
+     */
+    if (num_cycles < 1) return;
+
     pgr_SPI_connect();
-    PGR_DBG("num_cycles %d ", num_cycles);
-    PGR_DBG("directed %d ", directed);
-    PGR_DBG("edges_sql %s", edges_sql);
-    PGR_DBG("Load data");
-    pgr_edge_t *edges = NULL;
-    size_t total_tuples = 0;
-    // TODO (Rohith) decide if is a requirement (ERROR) or not
-    if (num_cycles < 1) {
-        // TODO (Rohith) if ERROR free edges_sql, and the arrays
-        PGR_DBG("Required: at least one cycle\n");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
-        pgr_SPI_finish();
-        return;
-    }
-    for (size_t i = 0; i < size_contraction_order; ++i) {
-            if (is_valid_contraction(contraction_order[i]) != 1) {
-                PGR_DBG("Error: Enter a valid Contraction Type\n");
-                (*result_count) = 0;
-                (*result_tuples) = NULL;
-                pgr_SPI_finish();
-                return;
-            }
-    }
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
-    PGR_DBG("finished Loading");
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+
+    size_t size_forbidden_vertices = 0;
+    int64_t* forbidden_vertices =
+        pgr_get_bigIntArray_allowEmpty(
+                &size_forbidden_vertices,
+                forbidden);
+    PGR_DBG("size_forbidden_vertices %ld", size_forbidden_vertices);
+
+    size_t size_contraction_order = 0;
+    int64_t* contraction_order =
+        pgr_get_bigIntArray(
+                &size_contraction_order,
+                order);
+    PGR_DBG("size_contraction_order %ld ", size_contraction_order);
+
+
+    size_t total_edges = 0;
+    pgr_edge_t* edges = NULL;
+    pgr_get_edges(edges_sql, &edges, &total_edges);
+    if (total_edges == 0) {
+        if (forbidden_vertices) pfree(forbidden_vertices);
+        if (contraction_order) pfree(contraction_order);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
-    PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-#if 1
+
+    PGR_DBG("Starting timer");
+    clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
     do_pgr_contractGraph(
-            edges,
-            total_tuples,
-            forbidden_vertices,
-            size_forbidden_vertices,
-            contraction_order,
-            size_contraction_order,
+            edges, total_edges,
+            forbidden_vertices, size_forbidden_vertices,
+            contraction_order, size_contraction_order,
             num_cycles,
             directed,
-            result_tuples,
-            result_count,
+            result_tuples, result_count,
+            &log_msg,
+            &notice_msg,
             &err_msg);
-#endif
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-    free(err_msg);
-    pfree(edges);
+
+    time_msg("processing pgr_contraction()", start_t, clock());
+
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (forbidden_vertices) pfree(forbidden_vertices);
+    if (contraction_order) pfree(contraction_order);
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
-PG_FUNCTION_INFO_V1(contractGraph);
 PGDLLEXPORT Datum
 contractGraph(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    size_t              call_cntr;
-    size_t               max_calls;
     TupleDesc            tuple_desc;
+
+    /**********************************************************************/
     pgr_contracted_blob  *result_tuples = NULL;
     size_t result_count = 0;
-    int64_t* contraction_order;
-    int64_t* forbidden_vertices;
-    size_t size_contraction_order;
-    size_t size_forbidden_vertices;
+    /**********************************************************************/
+
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
         funcctx = SRF_FIRSTCALL_INIT();
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
         /*
-            edges_sql TEXT,
-            contraction_order BIGINT[],
-            max_cycles integer DEFAULT 1,
-            forbidden_vertices BIGINT[] DEFAULT ARRAY[]::BIGINT[],
-            directed BOOLEAN DEFAULT true
-         **********************************************************************/ 
-
-        forbidden_vertices = (int64_t*)
-            pgr_get_bigIntArray_allowEmpty(&size_forbidden_vertices , PG_GETARG_ARRAYTYPE_P(3));
-        PGR_DBG("size_forbidden_vertices %ld", size_forbidden_vertices);
-
-        contraction_order = (int64_t*)
-            pgr_get_bigIntArray(&size_contraction_order, PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("size_contraction_order %ld ", size_contraction_order);
-#if 1
-        PGR_DBG("Calling process");
+           edges_sql TEXT,
+           contraction_order BIGINT[],
+           max_cycles integer DEFAULT 1,
+           forbidden_vertices BIGINT[] DEFAULT ARRAY[]::BIGINT[],
+           directed BOOLEAN DEFAULT true,
+
+         **********************************************************************/
+
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                forbidden_vertices,
-                contraction_order,
-                size_forbidden_vertices,
-                size_contraction_order,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
                 PG_GETARG_INT32(2),
+                PG_GETARG_ARRAYTYPE_P(3),
                 PG_GETARG_BOOL(4),
                 &result_tuples,
                 &result_count);
-#endif
-        PGR_DBG("Cleaning arrays");
-        free(contraction_order);
-        free(forbidden_vertices);
-        PGR_DBG("Returned %d tuples\n", (int)result_count);
+
+
+        /**********************************************************************/
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -192,54 +176,72 @@ contractGraph(PG_FUNCTION_ARGS) {
         funcctx->tuple_desc = tuple_desc;
         MemoryContextSwitchTo(oldcontext);
     }
+
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = funcctx->call_cntr;
-    max_calls = funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (pgr_contracted_blob*) funcctx->user_fctx;
-    if (call_cntr < max_calls) {
+
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple   tuple;
         Datum       result;
         Datum       *values;
-        Datum       *contracted_vertices_array;
         char        *nulls;
-        ArrayType * arrayType;
         int16 typlen;
-        bool typbyval;
-        char typalign;
-        values =(Datum *)palloc(7 * sizeof(Datum));
-        nulls = palloc(7 * sizeof(bool));
+        size_t      call_cntr = funcctx->call_cntr;
+
+        /**********************************************************************/
+        size_t numb = 7;
+        values =(Datum *)palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
         size_t i;
-        for (i = 0; i < 7; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
-        int contracted_vertices_size =
-            (int)result_tuples[call_cntr].contracted_vertices_size;
-        contracted_vertices_array = (Datum *)palloc(sizeof(Datum) *
+
+        size_t contracted_vertices_size =
+            (size_t)result_tuples[call_cntr].contracted_vertices_size;
+
+        Datum* contracted_vertices_array;
+        contracted_vertices_array = (Datum*) palloc(sizeof(Datum) *
                 (size_t)contracted_vertices_size);
+
         for (i = 0; i < contracted_vertices_size; ++i) {
-            PGR_DBG("Storing contracted vertex %ld", result_tuples[call_cntr].contracted_vertices[i]);
+            PGR_DBG("Storing contracted vertex %ld",
+                    result_tuples[call_cntr].contracted_vertices[i]);
             contracted_vertices_array[i] =
                 Int64GetDatum(result_tuples[call_cntr].contracted_vertices[i]);
         }
+
+        bool typbyval;
+        char typalign;
         get_typlenbyvalalign(INT8OID, &typlen, &typbyval, &typalign);
-        arrayType =  construct_array(contracted_vertices_array,
-                contracted_vertices_size,
+        ArrayType* arrayType;
+        /*
+         * https://doxygen.postgresql.org/arrayfuncs_8c.html
+
+         ArrayType* construct_array(
+         Datum*     elems,
+         int     nelems,
+         Oid     elmtype, int elmlen, bool elmbyval, char elmalign
+         )
+         */
+        arrayType =  construct_array(
+                contracted_vertices_array,
+                (int)contracted_vertices_size,
                 INT8OID,  typlen, typbyval, typalign);
+        /*
+           void TupleDescInitEntry(
+           TupleDesc   desc,
+           AttrNumber      attributeNumber,
+           const char *    attributeName,
+           Oid     oidtypeid,
+           int32   typmod,
+           int     attdim
+           )
+           */
         TupleDescInitEntry(tuple_desc, (AttrNumber) 4, "contracted_vertices",
                 INT8ARRAYOID, -1, 0);
 
-#if 1
-        PGR_DBG("%ld | %s | %ld | %ld | %f | %d",
-        result_tuples[call_cntr].id,
-        result_tuples[call_cntr].type,
-        result_tuples[call_cntr].source,
-        result_tuples[call_cntr].target,
-        result_tuples[call_cntr].cost,
-        result_tuples[call_cntr].contracted_vertices_size);
-#endif
-        PGR_DBG("Storing complete\n");
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = CStringGetTextDatum(result_tuples[call_cntr].type);
         values[2] = Int64GetDatum(result_tuples[call_cntr].id);
@@ -247,21 +249,19 @@ contractGraph(PG_FUNCTION_ARGS) {
         values[4] = Int64GetDatum(result_tuples[call_cntr].source);
         values[5] = Int64GetDatum(result_tuples[call_cntr].target);
         values[6] = Float8GetDatum(result_tuples[call_cntr].cost);
-        // values[7] = Int32GetDatum(result_tuples[call_cntr].contracted_vertices_size);
+
         /*********************************************************************/
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
-        // cleaning up the contracted vertices array
-        if (result_tuples[call_cntr].contracted_vertices) {
-            free(result_tuples[call_cntr].contracted_vertices);
+
+        /*
+         *  cleaning up the contracted vertices array
+         */
+        if (result_tuples[funcctx->call_cntr].contracted_vertices) {
+            pfree(result_tuples[funcctx->call_cntr].contracted_vertices);
         }
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        PGR_DBG("Freeing values");
-        if (result_tuples) free(result_tuples);
         SRF_RETURN_DONE(funcctx);
     }
-    PGR_DBG("End of Function");
 }
-
diff --git a/src/contraction/src/contractGraph_driver.cpp b/src/contraction/src/contractGraph_driver.cpp
index 74525f8..7bd11d4 100644
--- a/src/contraction/src/contractGraph_driver.cpp
+++ b/src/contraction/src/contractGraph_driver.cpp
@@ -5,9 +5,9 @@ Generated with Template by:
 Copyright (c) 2015 pgRouting developers
 Mail: project at pgrouting.org
 
-Function's developer: 
+Function's developer:
 Copyright (c) 2016 Rohith Reddy
-Mail: 
+Mail:
 
 ------
 
@@ -27,43 +27,150 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
+#include "./contractGraph_driver.h"
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-
-#ifdef unlink
-#undef unlink
-#endif
-
-#endif
-
-
-// #define DEBUG
 #include <string.h>
 #include <sstream>
 #include <deque>
 #include <vector>
-#include "./contractGraph_driver.h"
 
+#include "./pgr_contractionGraph.hpp"
 #include "./pgr_contract.hpp"
 
+#include "./../../common/src/pgr_alloc.hpp"
 #include "./../../common/src/pgr_types.h"
-#include "./structs.h"
 
-#include "./../../common/src/pgr_alloc.hpp"
-#include "./../../common/src/identifiers.hpp"
+static
+bool
+is_valid_contraction(int64_t number) {
+    switch (number) {
+        case 1:
+        case 2:
+            return true;
+            break;
+        default:
+            return false;
+            break;
+    }
+}
+
+
+template <typename G>
+static void process_contraction(
+        G &graph,
+        const std::vector< pgr_edge_t > &edges,
+        const std::vector< int64_t > forbidden_vertices,
+        const std::vector< int64_t > contraction_order,
+        int64_t max_cycles,
+        Identifiers<int64_t> &remaining_vertices,
+        std::vector< pgrouting::CH_edge > &shortcut_edges,
+        std::ostringstream &log,
+        std::ostringstream &err) {
+    graph.insert_edges(edges);
+    /*
+     * this check does not ignore vertices ids that do not belong to the graph
+     */
+    log << "Checking for valid forbidden vertices\n";
+    for (const auto vertex : forbidden_vertices) {
+        if (!graph.has_vertex(vertex)) {
+            err << "Invalid forbidden vertex: " << vertex << "\n";
+            return;
+        }
+    }
+
+    Identifiers<typename G::V> forbid_vertices;
+    for (const auto &vertex : forbidden_vertices) {
+        if (graph.has_vertex(vertex)) {
+            forbid_vertices.insert(graph.get_V(vertex));
+        }
+    }
+
+#ifndef NDEBUG
+    log << "Before contraction\n";
+    graph.print_graph(log);
+#endif
+
+    /*
+     * Function call to get the contracted graph.
+     */
+    pgrouting::contraction::Pgr_contract<G> result(graph,
+            forbid_vertices,
+            contraction_order,
+            max_cycles, remaining_vertices,
+            shortcut_edges, log);
+
+#ifndef NDEBUG
+    log << "After contraction\n";
+    log << graph;
+    log << "Remaining Vertices:" << "\n";
+    for (const auto vertex : remaining_vertices) {
+        log << vertex << "\n";
+    }
+    log << "Added Edges:" << "\n";
+    for (const auto edge : shortcut_edges) {
+        log << edge << "\n";
+    }
+#endif
+}
+
+template <typename G>
+static
+void get_postgres_result(
+        G &graph,
+        const Identifiers<int64_t> remaining_vertices,
+        const std::vector< pgrouting::CH_edge > shortcut_edges,
+        pgr_contracted_blob **return_tuples) {
+    (*return_tuples) = pgr_alloc(
+            remaining_vertices.size() + shortcut_edges.size(),
+            (*return_tuples));
+
+    size_t sequence = 0;
+
+    for (auto id : remaining_vertices) {
+        int64_t* contracted_vertices = NULL;
+        auto ids = graph.get_contracted_vertices(id);
+        contracted_vertices = pgr_alloc(
+                   ids.size(), contracted_vertices);
+        int count = 0;
+        for (const auto id : ids) {
+            contracted_vertices[count++] = id;
+        }
+        (*return_tuples)[sequence] = {id, const_cast<char*>("v"), -1, -1, -1.00,
+            contracted_vertices, count};
+
+        ++sequence;
+    }
+
+    for (auto edge : shortcut_edges) {
+        int64_t* contracted_vertices = NULL;
+        auto ids = graph.get_ids(edge.contracted_vertices());
+
+        contracted_vertices = pgr_alloc(
+                   ids.size(), contracted_vertices);
+        int count = 0;
+        for (const auto id : ids) {
+            contracted_vertices[count++] = id;
+        }
+        (*return_tuples)[sequence] = {edge.id, const_cast<char*>("e"),
+            edge.source, edge.target, edge.cost,
+            contracted_vertices, count};
+
+        ++sequence;
+    }
+}
+
+
 
 
 /************************************************************
-    edges_sql TEXT,
-    contraction_order BIGINT[],
-    forbidden_vertices BIGINT[] DEFAULT ARRAY[]::BIGINT[],
-    max_cycles integer DEFAULT 1,
-    directed BOOLEAN DEFAULT true
+  edges_sql TEXT,
+  contraction_order BIGINT[],
+  forbidden_vertices BIGINT[] DEFAULT ARRAY[]::BIGINT[],
+  max_cycles integer DEFAULT 1,
+  directed BOOLEAN DEFAULT true
  ***********************************************************/
-    void
-    do_pgr_contractGraph(
+void
+do_pgr_contractGraph(
         pgr_edge_t  *data_edges,
         size_t total_edges,
         int64_t *forbidden_vertices,
@@ -74,204 +181,135 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
         bool directed,
         pgr_contracted_blob **return_tuples,
         size_t *return_count,
-        char ** err_msg) {
-        std::ostringstream log;
-        try {
-            std::ostringstream debug;
-            graphType gType = directed? DIRECTED: UNDIRECTED;
-            std::vector< pgr_edge_t > edges(data_edges, data_edges + total_edges);
-            std::vector < pgrouting::contraction::Vertex > vertices(pgrouting::contraction::extract_vertices(edges));
-            Identifiers<int64_t> remaining_vertices;
-            std::vector< pgrouting::contraction::Edge > shortcut_edges;
-
-            log << "Original Graph: \n" <<
+        char **log_msg,
+        char **notice_msg,
+        char **err_msg) {
+    std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
+    try {
+        pgassert(total_edges != 0);
+        pgassert(size_contraction_order != 0);
+        pgassert(max_cycles != 0);
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert(*return_count == 0);
+
+        std::ostringstream debug;
+        /*
+         * Converting to C++ structures
+         */
+        std::vector<pgr_edge_t> edges(data_edges, data_edges + total_edges);
+        std::vector<int64_t> forbid(
+                forbidden_vertices,
+                forbidden_vertices + size_forbidden_vertices);
+        std::vector<int64_t> ordering(
+                contraction_order,
+                contraction_order + size_contraction_order);
+
+        for (const auto o : ordering) {
+            if (!is_valid_contraction(o)) {
+                *err_msg = pgr_msg("Invalid Contraction Type found");
+                log << "Contraction type " << o << " not valid";
+                *log_msg = pgr_msg(log.str().c_str());
+                return;
+            }
+        }
+
+
+        /*
+         * Extracting vertices of the graph
+         */
+        Identifiers<int64_t> remaining_vertices;
+        std::vector< pgrouting::CH_edge > shortcut_edges;
+
+#ifndef NDEBUG
+        log << "Original Graph: \n" <<
             std::setprecision(32);
-            for (const auto edge : edges) {
-                log << "id = " << edge.id
+        for (const auto edge : edges) {
+            log << "id = " << edge.id
                 << "\tsource = " << edge.source
                 << "\ttarget = " << edge.target
                 << "\tcost = " << edge.cost
                 << "\treverse_cost = " << edge.reverse_cost
                 << ")\n";
-            }
-            log << "size_contraction_order " << size_contraction_order << "\n";
-            log << "contraction_order: " <<"{ ";
-            for (size_t i = 0; i < size_contraction_order; ++i) {
-                log << contraction_order[i] << ", ";
-            }
-            log << " }\n";
+        }
+        log << "size_contraction_order " << ordering.size() << "\n";
+        log << "contraction_order: " <<"{ ";
+        for (const auto o : ordering) {
+            log << o << ", ";
+        }
+        log << " }\n";
 
-            log << "size_forbidden_vertices " << size_forbidden_vertices << "\n";
-            log << "forbidden_vertices" << "{ ";
-            for (size_t i = 0; i < size_forbidden_vertices; ++i) {
-                log << forbidden_vertices[i] << ", ";
-            }
-            log << " }\n";
-            log << "max_cycles " << max_cycles << "\n";
-            log << "directed " << gType << "\n";
-
-            if (directed) {
-                log << "Working with directed Graph\n";
-                pgrouting::CHDirectedGraph digraph(vertices, gType);
-                digraph.graph_insert_data(data_edges, total_edges);
-                log << "Checking for valid forbidden vertices\n";
-                for (size_t i = 0; i < size_forbidden_vertices; ++i) {
-                    if (!digraph.has_vertex(forbidden_vertices[i])) {
-                        log << "Invalid forbidden vertex: " << forbidden_vertices[i] << "\n";
-                        *err_msg = strdup(log.str().c_str());
-                        return;
-                    }
-                }
-                Identifiers<int64_t> forbid_vertices(forbidden_vertices,
-                    size_forbidden_vertices);
-                log << "Before contraction\n";
-                digraph.print_graph(log);
-                /* Function call to get the contracted graph. */
-                pgr_contractGraph(digraph,
-                    forbid_vertices,
-                    contraction_order, size_contraction_order,
-                    max_cycles, remaining_vertices,
-                    shortcut_edges, debug);
-
-                log << "After contraction\n";
-                digraph.print_graph(log);
-                log << debug.str().c_str() << "\n";
-                (*return_tuples) = pgr_alloc(remaining_vertices.size()+shortcut_edges.size(), (*return_tuples));
-                size_t sequence = 0;
-                int i = 1;
-                log << "Remaining Vertices:" << "\n";
-                for (const auto vertex : remaining_vertices) {
-                    log << vertex << "\n";
-                }
-                char *type;
-                for (auto id : remaining_vertices) {
-                    type = strdup("v");
-                    int64_t *contracted_vertices = NULL;
-                    int contracted_vertices_size = 0;
-                    digraph.get_contracted_vertices(&contracted_vertices,
-                        contracted_vertices_size, id);
-                    (*return_tuples)[sequence] = {i, id, type, -1, -1, -1.00,
-                        contracted_vertices, contracted_vertices_size};
-                        i++;
-                        ++sequence;
-                    }
-                    log << "Added Edges:" << "\n";
-                    for (const auto edge : shortcut_edges) {
-                        log << edge << "\n";
-                    }
-                    for (auto edge : shortcut_edges) {
-                        type = strdup("e");
-                        int64_t *contracted_vertices = NULL;
-                        int contracted_vertices_size = 0;
-                        digraph.get_ids(&contracted_vertices,
-                            contracted_vertices_size, edge.contracted_vertices());
-                        (*return_tuples)[sequence] = {i, edge.id, type,
-                            edge.source, edge.target, edge.cost,
-                            contracted_vertices, contracted_vertices_size};
-                            i++;
-                            ++sequence;
-                        }
-
-                        (*return_count) = sequence;
-                        log << "Returning from driver\n";
-                    } else {
-                        log << "Working with Undirected Graph\n";
-
-                        pgrouting::CHUndirectedGraph undigraph(vertices, gType);
-                        undigraph.graph_insert_data(data_edges, total_edges);
-                        log << "Checking for valid forbidden vertices\n";
-                        for (size_t i = 0; i < size_forbidden_vertices; ++i) {
-                            if (!undigraph.has_vertex(forbidden_vertices[i])) {
-                                log << "Invalid forbidden vertex: " << forbidden_vertices[i] << "\n";
-                                *err_msg = strdup(log.str().c_str());
-                                return;
-                            }
-                        }
-                        Identifiers<int64_t> forbid_vertices(forbidden_vertices,
-                            size_forbidden_vertices);
-                        log << "Before contraction\n";
-                        undigraph.print_graph(log);
-                        /* Function call to get the contracted graph. */
-                        pgr_contractGraph(undigraph,
-                            forbid_vertices,
-                            contraction_order, size_contraction_order,
-                            max_cycles, remaining_vertices,
-                            shortcut_edges, debug);
-                        log << debug.str().c_str() << "\n";
-                        log << "After contraction\n";
-                        undigraph.print_graph(log);
-                        log << "Size of remaining_vertices: " << remaining_vertices.size() << std::endl;
-                        (*return_tuples) = pgr_alloc(remaining_vertices.size()+shortcut_edges.size(), (*return_tuples));
-                        size_t sequence = 0;
-                        int i = 1;
-                        log << "Remaining Vertices:" << "\n";
-                        for (const auto vertex : remaining_vertices) {
-                            log << vertex << "\n";
-                        }
-                        char *type;
-                        for (auto id : remaining_vertices) {
-                            type = strdup("v");
-                            int64_t *contracted_vertices = NULL;
-                            int contracted_vertices_size = 0;
-                            undigraph.get_contracted_vertices(&contracted_vertices,
-                                contracted_vertices_size, id);
-                            (*return_tuples)[sequence] = {i, id, type, -1, -1, -1.00,
-                                contracted_vertices, contracted_vertices_size};
-                                i++;
-                                ++sequence;
-                            }
-                            log << "Added Edges:" << "\n";
-                            for (const auto edge : shortcut_edges) {
-                                log << edge << "\n";
-                            }
-                            for (auto edge : shortcut_edges) {
-                                type = strdup("e");
-                                int64_t *contracted_vertices = NULL;
-                                int contracted_vertices_size = 0;
-                                undigraph.get_ids(&contracted_vertices,
-                                    contracted_vertices_size, edge.contracted_vertices());
-                                (*return_tuples)[sequence] = {i, edge.id, type,
-                                    edge.source, edge.target, edge.cost,
-                                    contracted_vertices, contracted_vertices_size};
-                                    i++;
-                                    ++sequence;
-                                }
-                                (*return_count) = sequence;
-                            }
-#ifndef DEBUG
-                            *err_msg = strdup("OK");
-#else
-                            *err_msg = strdup(log.str().c_str());
+        log << "size_forbidden_vertices " << forbid.size() << "\n";
+        log << "forbidden_vertices" << "{ ";
+        for (const auto vertex : forbid) {
+            log << vertex << ", ";
+        }
+        log << " }\n";
+        log << "max_cycles " << max_cycles << "\n";
+        log << "directed " << directed << "\n";
 #endif
-                        }
-                        catch (AssertFailedException &except) {
-                            log << except.what() << "\n";
-                            *err_msg = strdup(log.str().c_str());
-                        } catch (std::exception& except) {
-                            log << except.what() << "\n";
-                            *err_msg = strdup(log.str().c_str());
-                        } catch(...) {
-                            log << "Caught unknown exception!\n";
-                            *err_msg = strdup(log.str().c_str());
-                        }
-                    }
-
-                    int is_valid_contraction(int64_t number) {
-                        switch (number) {
-                            case 1:
-                            return 1;
-                            break;
-                            case 2:
-                            return 1;
-                            break;
-                            default:
-                            return -1;
-                            break;
-                        }
-                    }
 
+        graphType gType = directed? DIRECTED: UNDIRECTED;
+        if (directed) {
+            log << "Working with directed Graph\n";
+            pgrouting::CHDirectedGraph digraph(gType);
+
+            process_contraction(digraph, edges, forbid, ordering,
+                    max_cycles,
+                    remaining_vertices, shortcut_edges,
+                    log, err);
+
+            get_postgres_result(
+                    digraph,
+                    remaining_vertices,
+                    shortcut_edges,
+                    return_tuples);
+        } else {
+            log << "Working with Undirected Graph\n";
 
+            pgrouting::CHUndirectedGraph undigraph(gType);
+            process_contraction(undigraph, edges, forbid, ordering,
+                    max_cycles,
+                    remaining_vertices, shortcut_edges,
+                    log, err);
 
+            get_postgres_result(
+                    undigraph,
+                    remaining_vertices,
+                    shortcut_edges,
+                    return_tuples);
+        }
 
+        (*return_count) = remaining_vertices.size()+shortcut_edges.size();
 
 
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    }
+}
diff --git a/src/contraction/src/contractGraph_driver.h b/src/contraction/src/contractGraph_driver.h
index d6724af..21b09f7 100644
--- a/src/contraction/src/contractGraph_driver.h
+++ b/src/contraction/src/contractGraph_driver.h
@@ -28,9 +28,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 #ifndef SRC_CONTRACTION_SRC_CONTRACTGRAPH_DRIVER_H_
 #define SRC_CONTRACTION_SRC_CONTRACTGRAPH_DRIVER_H_
+#pragma once
 
 #include "./../../common/src/pgr_types.h"
-#include "./structs.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -55,8 +55,10 @@ extern "C" {
         bool directed,
         pgr_contracted_blob **return_tuples,
         size_t *return_count,
-        char ** err_msg);
-    int is_valid_contraction(int64_t number);
+        char **log_msg,
+        char **notice_msg,
+        char **err_msg);
+
 
 #ifdef __cplusplus
 }
diff --git a/src/contraction/src/pgr_contract.hpp b/src/contraction/src/pgr_contract.hpp
index 28512aa..5e008fb 100644
--- a/src/contraction/src/pgr_contract.hpp
+++ b/src/contraction/src/pgr_contract.hpp
@@ -27,418 +27,157 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_CONTRACTION_SRC_PGR_CONTRACT_HPP_
+#define SRC_CONTRACTION_SRC_PGR_CONTRACT_HPP_
 #pragma once
-#include <stack>
-#include <iostream>
-#include <sstream>
+
 #include <deque>
-#include <queue>
-#include <string>
-#include <utility>
-#include <functional>
 #include <vector>
-#include <map>
+#include "../../common/src/pgr_assert.h"
 
 #include "./pgr_contractionGraph.hpp"
-#include "./pgr_deadEndContraction.hpp"
 #include "./pgr_linearContraction.hpp"
-#include "../../common/src/pgr_assert.h"
-
-
-template < class G > class Pgr_contract;
-
-template < class G >
-void perform_deadEnd(G &graph,
-    Identifiers<int64_t> forbidden_vertices,
-    std::ostringstream& debug) {
-    pgrouting::Pgr_deadEndContraction<G> deadendContractor;
-    debug << "Setting forbidden_vertices";
-    deadendContractor.setForbiddenVertices(graph, forbidden_vertices
-        , debug);
-
-    deadendContractor.calculateVertices(graph, debug);
-    try {
-        deadendContractor.doContraction(graph, debug);
-    }
-    catch ( ... ) {
-        debug << "Caught unknown exception!\n";
-    }
-}
-
-#if 1
+#include "./pgr_deadEndContraction.hpp"
 
-template < class G >
-void perform_linear(G &graph,
-    Identifiers<int64_t>& forbidden_vertices,
-    std::ostringstream& debug) {
-    std::ostringstream linear_debug;
-    pgrouting::Pgr_linearContraction<G> linearContractor;
-    linearContractor.setForbiddenVertices(graph, forbidden_vertices
-        , linear_debug);
-    linearContractor.calculateVertices(graph, linear_debug);
-    try {
-        linearContractor.doContraction(graph, linear_debug);
-    }
-    catch ( ... ) {
-        linear_debug << "Caught unknown exception!\n";
-    }
-    debug << linear_debug.str().c_str() << "\n";
-}
-#endif
+namespace pgrouting {
+namespace contraction {
 
 
 template < class G >
-void pgr_contractGraph(
-    G &graph, Identifiers<int64_t> forbidden_vertices,
-    int64_t *contraction_order,
-    size_t size_contraction_order,
-    int64_t max_cycles,
-    Identifiers<int64_t> &remaining_vertices,
-    std::vector<pgrouting::contraction::Edge> &shortcut_edges,
-    std::ostringstream& debug) {
-    std::deque<int64_t> contract_order;
-    //  push -1 to indicate the start of the queue
-    contract_order.push_back(-1);
-    for (size_t i = 0; i < size_contraction_order; ++i) {
-        contract_order.push_back(contraction_order[i]);
-    }
-    for (int64_t i = 0; i < max_cycles; ++i) {
-        int64_t front = contract_order.front();
-        debug << "Starting cycle " << i+1 << "\n";
-        contract_order.pop_front();
-        contract_order.push_back(front);
-        front = contract_order.front();
-        while (front != -1) {
-            switch (front) {
-                case -1:
-                debug << "Finished cycle " << i+1 << std::endl;
-                break;
-                default:
-                debug << "contraction "<< front << " asked" << std::endl;
-                if (front == 1) {
-                    debug << "Graph before dead end contraction" << std::endl;
-                    graph.print_graph(debug);
-                    debug << "Performing dead end contraction" << std::endl;
-                    perform_deadEnd(graph, forbidden_vertices, debug);
-                    debug << "Graph after dead end contraction" << std::endl;
-                    graph.print_graph(debug);
-                } else if (front == 2) {
-                    debug << "Graph before linear contraction" << std::endl;
-                    graph.print_graph(debug);
-                    debug << "Performing linear contraction" << std::endl;
-                    perform_linear(graph, forbidden_vertices, debug);
-                    debug << "Graph after linear contraction" << std::endl;
-                    graph.print_graph(debug);
-                }
-                contract_order.pop_front();
-                contract_order.push_back(front);
-                front = contract_order.front();
-            }
-        }
-    }
-    graph.get_changed_vertices(remaining_vertices);
-    debug << "Printing shortcuts\n";
-    for (auto shortcut : graph.shortcuts) {
-        debug << shortcut;
-        shortcut_edges.push_back(shortcut);
-    }
-}
-
-bool is_valid_contraction_number(int number) {
-    switch (number) {
-        case -2:
-        return false;
-        break;
-        case -1:
-        return false;
-        break;
-        case 0:
-        return true;
-        break;
-        case 1:
-        return true;
-        break;
-        default:
-        return false;
-        break;
-    }
-}
-
-template < class G >
 class Pgr_contract {
- public:
-    /** @name Graph related types
-       Type      |     boost meaning     |   pgRouting meaning
-       :---------: | :-------------------- | :----------------------
-       G        | boost::adjacency_list |   Graph
-       V        | vertex_descriptor     |   Think of it as local ID of a vertex
-       E        | edge_descriptor       |   Think of it as local ID of an edge
-       V_i      | vertex_iterator       |   To cycle the vertices of the Graph
-       E_i      | edge_iterator         |   To cycle the edges of the Graph
-       EO_i     | out_edge_iterator     |   To cycle the out going edges of a vertex
-       EI_i     | in_edge_iterator      |   To cycle the in coming edges of a vertex (only in bidirectional graphs)
-    */
-     // @{
     typedef typename G::V V;
-    typedef typename G::E E;
-    typedef typename G::V_i V_i;
-    typedef typename G::E_i E_i;
-    typedef typename G::EO_i EO_i;
-    #if 0
-    typedef typename G::degree_to_V_i degree_to_V_i;
-    #endif
-    typedef typename G::EI_i EI_i;
-    // @}
-    // ! @name Framework related functions
-    // @{
-    /*! \brief Disconnects all incoming and outgoing edges from the vertex
-     *  Calls the disconnect_vertex function of the graph with assertions
-     *  @param graph
-     *  @param vertex_id
-     */
-    void disconnectVertex(G &graph, int64_t vertex_id);
-    /*! \brief Stores the ids of those vertices forbidden from contraction in a set
-     *  Stores them in the set *forbidden_vertices*
-     *  @param forbidden_vertices
-     *  @param size_forbidden_vertices
-     */
-    void setForbiddenVertices(int64_t *forbidden_vertices,
-    size_t size_forbidden_vertices);
-
-    /*! \brief Stores ids of all the vertices of the graph in a set
-     *  Stores them in the set *all_vertices*
-     *  @param graph
-     */
-    void getAllVertices(G &graph);
-
-    /*! \brief Stores the set of ids of those vertices which are not contracted
-     *  Stores them in the set *non_contracted*
-     */
-    void getNonContractedVertices();
-
-    /*! \brief Returns a set of ids of all those vertices adjacent to vertex 
-     *  with id *vertex_id* 
-     *  Calls the disconnect_vertex function of the graph with assertions
-     *  @param graph
-     *  @param vertex_id
-     */
-    Identifiers<int64_t> getAdjacentVertices(G &graph, int64_t vertex_id);
-    /*! \brief Writes the string form of identifier class to the *stream*
-     *  @param stream
-     *  @param identifiers
-     */
-    void print_identifiers(std::ostringstream& stream, Identifiers<int64_t> identifiers);
-
-    /*! \brief Writes the string form of forbidden vertices to the *stream*
-     *  @param stream
-     */
-    void print_forbidden_vertices(std::ostringstream& stream);
-
-    /*! \brief Writes the string form of all vertices to the *stream*
-     *  @param stream
-     */
-    void print_all_vertices(std::ostringstream& stream);
-
-    /*! \brief Writes the string form of non contracted vertices to the *stream*
-     *  @param stream
-     */
-    void print_non_contracted_vertices(std::ostringstream& stream);
-
-    // @}
-    // ! @name Dead end contraction related functions
-    // @{
-
-    /*! \brief Checks whether a vertex is a dead end vertex
-     *  @param graph
-     *  @param vertex_id
-     */
-    bool is_dead_end(G &graph, int64_t vertex_id) const;
-
-    /*! \brief Stores ids of dead end vertices of the graph in a set
-     *  Stores them in the set *dead_end_vertices*
-     *  @param graph
-     */
-    void getDeadEndSet(G &graph);
-
-    /*! \brief Writes the string form of dead end vertices to the *stream*
-     *  @param stream
-     */
-    void print_dead_end_vertices(std::ostringstream& stream);
-
-    // @}
-
-    // bool is_connected(G &graph, V v) const;
-    #if 0
-    void contract_to_level(
-        G &graph,
-        int64_t level);
-    #endif
 
-    #if 0
-    void dead_end_contraction(G &graph);
-    void remove_2_degree_vertices(G &graph);
 
+    void perform_deadEnd(G &graph,
+            Identifiers<V> forbidden_vertices,
+            std::ostringstream& debug) {
+        Pgr_deadend<G> deadendContractor;
+        debug << "Setting forbidden_vertices";
+        deadendContractor.setForbiddenVertices(forbidden_vertices);
 
-    void calculateDegrees(G &graph);
-
-    void degreeMap(G &graph, std::ostringstream& dmap);
-
-    void getGraphName(std::ostringstream& name, Contraction_type ctype);
-
-    int64_t getGraph_string(G &graph, std::ostringstream& estring);
-
-    void getRemovedE_string(G &graph, std::ostringstream& estring);
-
-    void getRemovedV_string(std::ostringstream& vstring);
-
-    void getPseudoE_string(std::ostringstream& pstring);
-
-    typedef typename std::map<V, std::deque<Edge> > removed_V;
-    typedef typename std::map<V, std::deque<Edge> >::iterator removed_V_i;
-    typedef typename std::map<int64_t, std::pair<int64_t, int64_t> > psuedo_E;
-    typedef typename std::map<int64_t, std::pair<int64_t, int64_t> >::iterator psuedo_E_i;
-    typedef std::map< int, std::priority_queue<int64_t, std::vector<int64_t>, std::greater<int64_t> > > degree_to_V;
-    //  typedef std::map< int, std::vector<int64_t> > degree_to_V;
-    typedef typename std::vector<V>::iterator Q_i;
-    #endif
-
- private:
-    int64_t last_edge_id;
-    // ! Used for storing the ids of all vertices of the graph
-    Identifiers<int64_t> all;
-    // ! Used for storing the ids of dead end vertices of the graph
-    Identifiers<int64_t> dead_end;
-    // ! Used for storing the ids of vertices of the graph which are not contracted
-    Identifiers<int64_t> non_contracted;
-    // ! Used for storing the ids of vertices forbidden from contraction
-    Identifiers<int64_t> forbidden;
-    #if 0
-    removed_V removedVertices;
-    psuedo_E pseudoEdges;
-    degree_to_V degree_to_V_map;
-    #endif
-    // set of dead_end_vertices;
-    // Identifiers<V> dead_end_vertices;
-};
-
-
-/******************** IMPLEMENTATION ******************/
-template < class G >
-void Pgr_contract< G >::disconnectVertex(G &graph, int64_t vertex_id) {
-    pgassert(graph.is_connected(vertex_id));
-    pgassert(is_dead_end(vertex_id));
-    graph.disconnect_vertex(vertex_id);
-    pgassert(!graph.is_connected(vertex_id));
-}
-
-template < class G >
-void Pgr_contract< G >::setForbiddenVertices(int64_t *forbidden_vertices,
-    size_t size_forbidden_vertices ) {
-    for (int64_t i = 0; i < size_forbidden_vertices; ++i) {
-            forbidden += forbidden_vertices[i];
+        deadendContractor.calculateVertices(graph);
+        try {
+            deadendContractor.doContraction(graph);
+        }
+        catch ( ... ) {
+            debug << "Caught unknown exception!\n";
         }
-}
-
-template <class G>
-void Pgr_contract< G >::getAllVertices(G &graph) {
-    // Identifiers<int64_t> dead_end_vertices;
-    V_i vi;
-    for (vi = vertices(graph.graph).first; vi != vertices(graph.graph).second; ++vi) {
-        //  debug << "Checking vertex " << graph.graph[(*vi)].id << '\n';
-            all += graph.graph[(*vi)].id;
     }
-}
 
-template <class G>
-void Pgr_contract< G >::getNonContractedVertices() {
-    non_contracted = all - dead_end;
-}
 
-template < class G >
-Identifiers<int64_t> Pgr_contract< G >::getAdjacentVertices(G &graph, int64_t vertex_id) {
-    EO_i out, out_end;
-    EI_i in, in_end;
-    V v;
-    Identifiers<int64_t> adjacent_vertices_set;
-    if (!graph.has_vertex(vertex_id)) {
-            return adjacent_vertices_set;
-    }
-    v = graph.get_V(vertex_id);
-    for (boost::tie(out, out_end) = out_edges(v, graph.graph);
-            out != out_end; ++out) {
-            adjacent_vertices_set += graph.graph[target(*out, graph.graph)].id;
+    void perform_linear(G &graph,
+            Identifiers<V>& forbidden_vertices,
+            std::ostringstream& debug) {
+        std::ostringstream linear_debug;
+        Pgr_linear<G> linearContractor;
+        linearContractor.setForbiddenVertices(forbidden_vertices);
+        linearContractor.calculateVertices(graph);
+        try {
+            linearContractor.doContraction(graph);
         }
-    for (boost::tie(in, in_end) = in_edges(v, graph.graph);
-            in != in_end; ++in) {
-            adjacent_vertices_set += graph.graph[source(*in, graph.graph)].id;
+        catch ( ... ) {
+            linear_debug << "Caught unknown exception!\n";
         }
-    return adjacent_vertices_set;
-}
-
-template <class G>
-void Pgr_contract< G >::print_identifiers(std::ostringstream& stream, Identifiers<int64_t> identifiers) {
-    stream << identifiers << '\n';
-}
-
-template <class G>
-void Pgr_contract< G >::print_forbidden_vertices(std::ostringstream& stream) {
-    stream << forbidden << '\n';
-}
-
-template <class G>
-void Pgr_contract< G >::print_all_vertices(std::ostringstream& stream) {
-    stream << all << '\n';
-}
-
+        debug << linear_debug.str().c_str() << "\n";
+    }
 
-template <class G>
-void Pgr_contract< G >::print_non_contracted_vertices(std::ostringstream& stream) {
-    stream << non_contracted << '\n';
-}
 
-template < class G >
-bool Pgr_contract< G >::is_dead_end(G &graph, int64_t vertex_id) const {
-    // debug << "in_degree: " << graph.in_degree(vertex_id) << '\n';
-    // debug << "out_degree: " << graph.out_degree(vertex_id) << '\n';
-    V v;
-    if (!graph.has_vertex(vertex_id)) {
-            return false;
-    }
-    v = graph.get_V(vertex_id);
-    if (graph.out_degree(v) == 1 && graph.in_degree(v) == 0) return true;
-    if (graph.out_degree(v) == 0 && graph.in_degree(v) == 1) return true;
-    if (graph.out_degree(v) == 1 && graph.in_degree(v) == 1) {
-        int64_t incoming_edge_id, outgoing_edge_id;
-        EO_i out, out_end;
-        EI_i in, in_end;
-        for (boost::tie(out, out_end) = out_edges(v, graph.graph);
-                        out != out_end; ++out) {
-            outgoing_edge_id = graph.graph[*out].id;
+ public:
+    Pgr_contract(
+            G &graph,
+            Identifiers<V> forbidden_vertices,
+            std::vector<int64_t> contraction_order,
+            int64_t max_cycles,
+            Identifiers<int64_t> &remaining_vertices,
+            std::vector<pgrouting::CH_edge> &shortcut_edges,
+            std::ostringstream& debug) {
+        std::deque<int64_t> contract_order;
+        //  push -1 to indicate the start of the queue
+        contract_order.push_back(-1);
+        contract_order.insert(
+                contract_order.end(),
+                contraction_order.begin(), contraction_order.end());
+        for (int64_t i = 0; i < max_cycles; ++i) {
+            int64_t front = contract_order.front();
+            debug << "Starting cycle " << i+1 << "\n";
+            contract_order.pop_front();
+            contract_order.push_back(front);
+            front = contract_order.front();
+            while (front != -1) {
+                switch (front) {
+                    case -1:
+                        debug << "Finished cycle " << i+1 << std::endl;
+                        break;
+                    default:
+                        debug << "contraction "<< front
+                            << " asked" << std::endl;
+                        if (front == 1) {
+#ifndef NDEBUG
+                            debug << "Graph before dead end contraction"
+                                << std::endl;
+                            graph.print_graph(debug);
+                            debug << "Performing dead end contraction"
+                                << std::endl;
+#endif
+                            perform_deadEnd(graph, forbidden_vertices, debug);
+#ifndef NDEBUG
+                            debug << "Graph after dead end contraction"
+                                << std::endl;
+                            graph.print_graph(debug);
+#endif
+                        } else if (front == 2) {
+#ifndef NDEBUG
+                            debug << "Graph before linear contraction"
+                                << std::endl;
+                            graph.print_graph(debug);
+                            debug << "Performing linear contraction"
+                                << std::endl;
+#endif
+                            perform_linear(graph, forbidden_vertices, debug);
+#ifndef NDEBUG
+                            debug << "Graph after linear contraction"
+                                << std::endl;
+                            graph.print_graph(debug);
+#endif
+                        }
+                        contract_order.pop_front();
+                        contract_order.push_back(front);
+                        front = contract_order.front();
+                }
+            }
         }
-        for (boost::tie(in, in_end) = in_edges(v, graph.graph);
-                        in != in_end; ++in) {
-            incoming_edge_id = graph.graph[*in].id;
+        remaining_vertices = graph.get_changed_vertices();
+        debug << "Printing shortcuts\n";
+        for (auto shortcut : graph.shortcuts) {
+            debug << shortcut;
+            shortcut_edges.push_back(shortcut);
         }
-        if (incoming_edge_id == outgoing_edge_id)
-            return true;
-        return false;
     }
-    return false;
-}
 
-template <class G>
-void Pgr_contract< G >::getDeadEndSet(G &graph) {
-    V_i vi;
-    for (vi = vertices(graph.graph).first; vi != vertices(graph.graph).second; ++vi) {
-        //  debug << "Checking vertex " << graph.graph[(*vi)].id << '\n';
-        if (is_dead_end(graph, graph.graph[(*vi)].id)) {
-            //  debug << "Adding " << graph.graph[(*vi)].id << "to dead end" << '\n';
-            dead_end += graph.graph[(*vi)].id;
+#if 0
+    bool is_valid_contraction_number(int number) {
+        switch (number) {
+            case -2:
+                return false;
+                break;
+            case -1:
+                return false;
+                break;
+            case 0:
+                return true;
+                break;
+            case 1:
+                return true;
+                break;
+            default:
+                return false;
+                break;
         }
     }
-}
+#endif
+};
+
+}  // namespace contraction
+}  // namespace pgrouting
 
-template <class G>
-void Pgr_contract< G >::print_dead_end_vertices(std::ostringstream& stream) {
-    stream << dead_end << '\n';
-}
+#endif  // SRC_CONTRACTION_SRC_PGR_CONTRACT_HPP_
diff --git a/src/contraction/src/pgr_contractionGraph.hpp b/src/contraction/src/pgr_contractionGraph.hpp
index 4b607a8..3025f0e 100644
--- a/src/contraction/src/pgr_contractionGraph.hpp
+++ b/src/contraction/src/pgr_contractionGraph.hpp
@@ -5,9 +5,9 @@ Generated with Template by:
 Copyright (c) 2015 pgRouting developers
 Mail: project at pgrouting.org
 
-Function's developer: 
+Function's developer:
 Copyright (c) 2016 Rohith Reddy
-Mail: 
+Mail:
 
 ------
 
@@ -27,27 +27,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
+#ifndef SRC_CONTRACTION_SRC_PGR_CONTRACTIONGRAPH_HPP_
+#define SRC_CONTRACTION_SRC_PGR_CONTRACTIONGRAPH_HPP_
 #pragma once
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-
-#ifdef open
-#undef open
-#endif
-
-#ifdef unlink
-#undef unlink
-#endif
-
-#endif
-
 
 #include <limits>
 #include <algorithm>
 #include <vector>
-#include <map>
+
 #include "../../common/src/pgr_base_graph.hpp"
 
 
@@ -61,470 +49,252 @@ class Pgr_contractionGraph;
     typedef  graph::Pgr_contractionGraph <
     boost::adjacency_list < boost::listS, boost::vecS,
     boost::undirectedS,
-    contraction::Vertex, contraction::Edge >,
-    contraction::Vertex, contraction::Edge > CHUndirectedGraph;
+    CH_vertex, CH_edge >,
+    CH_vertex, CH_edge > CHUndirectedGraph;
 
     typedef  graph::Pgr_contractionGraph <
     boost::adjacency_list < boost::listS, boost::vecS,
     boost::bidirectionalS,
-    contraction::Vertex, contraction::Edge >,
-    contraction::Vertex, contraction::Edge > CHDirectedGraph;
+    CH_vertex, CH_edge >,
+    CH_vertex, CH_edge > CHDirectedGraph;
 
 namespace graph {
 
 template <class G, typename T_V, typename T_E>
 class Pgr_contractionGraph : public Pgr_base_graph<G, T_V, T_E> {
  public:
-            typedef typename boost::graph_traits < G >::vertex_descriptor V;
-            typedef typename boost::graph_traits < G >::edge_descriptor E;
-            typedef typename boost::graph_traits < G >::vertex_iterator V_i;
-            typedef typename boost::graph_traits < G >::edge_iterator E_i;
-            typedef typename boost::graph_traits < G >::out_edge_iterator EO_i;
-            typedef typename boost::graph_traits < G >::in_edge_iterator EI_i;
-            typedef typename std::map< int64_t, V > id_to_V;
-            typedef typename id_to_V::const_iterator LI;
-            Identifiers<V> removed_vertices;
-            std::vector< T_E > shortcuts;
-            typedef typename boost::graph_traits < G >::degree_size_type       degree_size_type;
-
-                    /*! @brief Binary function that accepts two elements , and returns a value convertible to bool.
-                        Used as a compare function to sort the edges in increasing order of edge id 
-                    */
-                        static bool compareById(const T_E &edge1, const T_E &edge2) {
-                            return edge1.id > edge2.id;
-                        }
-
-                    /*!
-                    Prepares the _graph_ to be of type *gtype* with vertices as *vertices*
-                    */
-                    Pgr_contractionGraph< G , T_V, T_E >(const std::vector< T_V > &vertices, graphType gtype)
-                    : Pgr_base_graph< G , T_V, T_E >(vertices, gtype) {
-                    }
-
-                    /*!
-                    Prepares the _graph_ to be of type *gtype*
-                    */
-                    explicit Pgr_contractionGraph< G , T_V, T_E >(graphType gtype)
-                    : Pgr_base_graph< G , T_V, T_E >(gtype) {
-                    }
-
-                    // ! @name Insert data
-                    // @{
-                    /*! \brief Inserts *count* edges of type *T* into the graph
-                    *  
-                    *  Converts the edges to a std::vector<T> & calls the overloaded
-                    *  twin function.
-                    *
-                    *  @param edges
-                    *  @param count
-                    */
-                    template < typename T >
-                    void graph_insert_data(const T *edges, int64_t count) {
-                        graph_insert_data(std::vector < T >(edges, edges + count));
-                    }
-                    /*! \brief Inserts vector of edges of type *T* into the graph
-                    *  
-                    *  @param edges
-                    */
-                    template < typename T >
-                    void graph_insert_data(const std::vector < T > &edges) {
-                        for (const auto edge : edges) {
-                            graph_add_edge(edge);
-                        }
-                    }
-                    // @}
-
-                    // ! @brief True when *v* is in the graph
-                    /*!
-                    True when 
-                        - Indegree of *v* is 0 &
-                        - Outdegree of *v* is 0
-                    @param [in] v vertex_id
-                    */
-                    bool is_connected(int64_t v) const {
-                        if (this->in_degree(this->get_V(v)) == 0 && this->out_degree(this->get_V(v)) == 0) {
-                            return false;
-                        }
-                        return true;
-                    }
-
-                    // ! @brief get the vertex descriptor of the vertex adjacent to *v*
-                    /*!
-                    - Degree of *v* is 1                    
-                    @param [in] v vertex_descriptor
-                    @return V: The vertex descriptor of the vertex adjacent to *v*
-                    */
-                    V find_adjacent_vertex(V v) const {
-                        EO_i out, out_end;
-                        EI_i in, in_end;
-                        V out_vertex, in_vertex;
-                        out_vertex = in_vertex = -1;
-                        for (boost::tie(out, out_end) = out_edges(v, this->graph);
-                            out != out_end; ++out) {
-                            out_vertex = target(*out, this->graph);
-                    }
-                    for (boost::tie(in, in_end) = in_edges(v, this->graph);
-                        in != in_end; ++in) {
-                        in_vertex = source(*in, this->graph);
-                }
-                if (in_vertex == -1)
-                    return out_vertex;
-                else if (out_vertex == -1)
-                    return in_vertex;
-                else if (out_vertex == in_vertex)
-                    return in_vertex;
-                return out_vertex;
-            }
-
-                    /*! @brief get the vertex descriptors of adjacent vertices of *v*
-                    @param [in] v vertex_descriptor
-                    @return Identifiers<V>: The set of vertex descriptors adjacent to the given vertex *v*
-                    */
-                    Identifiers<V> find_adjacent_vertices(V v) const {
-                        EO_i out, out_end;
-                        EI_i in, in_end;
-                        Identifiers<V> adjacent_vertices;
-                        V out_vertex, in_vertex;
-                        out_vertex = in_vertex = -1;
-                        for (boost::tie(out, out_end) = out_edges(v, this->graph);
-                            out != out_end; ++out) {
-                            out_vertex = target(*out, this->graph);
-                        adjacent_vertices += out_vertex;
-                    }
-                    for (boost::tie(in, in_end) = in_edges(v, this->graph);
-                        in != in_end; ++in) {
-                        in_vertex = source(*in, this->graph);
-                    adjacent_vertices += in_vertex;
-                }
-                return adjacent_vertices;
-            }
-
-            T_V& operator[](V v) {
-                return this->graph[v];
-            }
-
-            T_E& operator[](E e) {
-                return this->graph[e];
-            }
-
-                    /*! @brief get the user ids given the boost graph ids in string format
-                    @param [in] log string
-                    @param [in] boost_ids The set of boost graph ids of vertices
-                    */
-                    void get_ids(std::ostringstream &log,
-                        Identifiers<int64_t> boost_ids) {
-                        log << "{";
-                        for (auto id : boost_ids) {
-                            log << this->graph[id].id << ", ";
-                        }
-                        log << "}";
-                    }
-
-                    /*! @brief get the user ids given the boost graph ids in array format
-                    @param [in] boost_ids The set of boost graph ids of vertices
-                    @param [in] contracted_vertices The array of contracted vertices
-                    @param [in] contracted_vertices_size The size of the array of contracted vertices
-                    */
-                    void get_ids(int64_t **contracted_vertices,
-                        int &contracted_vertices_size,
-                        Identifiers<int64_t> boost_ids) {
-                        contracted_vertices_size = (int)boost_ids.size();
-                        (*contracted_vertices) = (int64_t*)malloc(sizeof(int64_t)*contracted_vertices_size);
-                        int64_t count = 0;
-                        for (auto id : boost_ids) {
-                            (*contracted_vertices)[count++] = this->graph[id].id;
-                        }
-                    }
-
-                    /*! @brief get the remaining vertices of the graph after contraction
-                    @param [in] remaining_vertices The vector of vertices remaining after contraction
-                    */
-                    void get_remaining_vertices(std::vector<T_V>& remaining_vertices) {
-                        for (auto vi = vertices(this->graph).first; vi != vertices(this->graph).second; ++vi) {
-                            if (!removed_vertices.has(*vi)) {
-                                remaining_vertices.push_back(this->graph[*vi]);
-                            }
-                        }
-                    }
-
-                    /*! @brief get the vertices of the graph with atleast one contracted vertex 
-                    @param [in] remaining_vertices The set of vertices with atleast one contracted vertex
-                    */
-                    void get_changed_vertices(Identifiers<int64_t>& remaining_vertices) {
-                        // log << "remaining_vertices\n";
-                        for (auto vi = vertices(this->graph).first; vi != vertices(this->graph).second; ++vi) {
-                            if (!removed_vertices.has(*vi) && this->graph[*vi].has_contracted_vertices()) {
-                                remaining_vertices += this->graph[*vi].id;
-                            }
-                        }
-                    }
-
-                    /*! @brief get the edges of the graph that are added during contraction
-                    @param [in] shortcut_edges The vector of edges added during contraction
-                    */
-                    void get_shortcuts(std::vector<T_E>& shortcut_edges) {
-                        // log << "Getting shortcuts\n";
-                        for (auto shortcut : shortcuts) {
-                            // log << shortcut;
-                            shortcut_edges.push_back(shortcut);
-                        }
-                        std::sort(shortcut_edges.begin(), shortcut_edges.end(), compareById);
-                    }
-
-                    /*! @brief get the edge with minimum cost between two vertices
-                    @param [in] source vertex_descriptor of source vertex
-                    @param [in] destination vertex_descriptor of target vertex
-                    @return E: The edge descriptor of the edge with minimum cost
-                    */
-                    E get_min_cost_edge(V source, V destination) {
-                        E e;
-                        EO_i out_i, out_end;
-                        E min_cost_edge;
-                        double min_cost = std::numeric_limits<double>::max();
-                        for (boost::tie(out_i, out_end) = boost::out_edges(source, this->graph);
-                            out_i != out_end; ++out_i) {
-                            e = *out_i;
-                        if (target(e, this->graph) == destination) {
-                            if (this->graph[e].cost < min_cost) {
-                                min_cost = this->graph[e].cost;
-                                min_cost_edge = e;
-                            }
-                        }
-                    }
-                        // log << "Min cost edge from " << this->graph[source].id << " to " << this->graph[destination].id << std::endl;
-                        // log << this->graph[min_cost_edge];
-                    return min_cost_edge;
-                }
-
-                    /*! @brief get the in-degree of a vertex from its neighbor
-                    @param [in] vertex vertex_descriptor of the given vertex
-                    @param [in] neighbor vertex_descriptor of neighbor 
-                    @return degree_size_type: The in-degree of *vertex* from *neighbor*
-                    */
-                    degree_size_type in_degree_from_vertex(V vertex, V neighbor) {
-                        degree_size_type degree = 0;
-                        EI_i in_i, in_end;
-                        E e;
-                        for (boost::tie(in_i, in_end) = boost::in_edges(vertex, this->graph);
-                            in_i != in_end; ++in_i) {
-                            e = *in_i;
-
-                        if (source(e, this->graph) == neighbor) {
-                            degree++;
-                        }
-                    }
-                    return degree;
-                }
-                    /*! @brief get the out-degree of a vertex to its neighbor
-                    @param [in] vertex vertex_descriptor of the given vertex
-                    @param [in] neighbor vertex_descriptor of neighbor 
-                    @return degree_size_type: The out-degree of *vertex* to *neighbor*
-                    */
-                    degree_size_type out_degree_to_vertex(V vertex, V neighbor) {
-                        degree_size_type degree = 0;
-                        EO_i out_i, out_end;
-                        E e;
-                        for (boost::tie(out_i, out_end) = boost::out_edges(vertex, this->graph);
-                            out_i != out_end; ++out_i) {
-                            e = *out_i;
-
-                        if (target(e, this->graph) == neighbor) {
-                            degree++;
-                        }
-                    }
-                    return degree;
-                }
-
-                    /*! @brief print the edges added during contraction
-                    */
-                void print_shortcuts(std::ostringstream& log) {
-                    log << "Printing shortcuts\n";
-                    for (auto shortcut : shortcuts) {
-                        log << shortcut;
-                    }
-                }
-
-                    /*! @brief print the graph with contracted vertices of
-                        all vertices and edges
-                    */
-                        void print_graph(std::ostringstream &log) {
-                            EO_i out, out_end;
-                            for (auto vi = vertices(this->graph).first; vi != vertices(this->graph).second; ++vi) {
-                                if ((*vi) >= this->m_num_vertices) break;
-                                log << this->graph[(*vi)].id << "(" << (*vi) << ")"
-                                << this->graph[(*vi)].contracted_vertices() << std::endl;
-                                log << " out_edges_of(" << this->graph[(*vi)].id << "):";
-                                for (boost::tie(out, out_end) = out_edges(*vi, this->graph);
-                                    out != out_end; ++out) {
-                                    log << ' ' << this->graph[*out].id << "=(" << this->graph[source(*out, this->graph)].id
-                                << ", " << this->graph[target(*out, this->graph)].id << ") = "
-                                <<  this->graph[*out].cost <<"\t";
-                            }
-                            log << std::endl;
-                        }
-                    }
-
-                    /*! @brief get the contracted vertex ids of a given vertex in string format
-                    @param [in] vid vertex_id
-                    @param [in] log stringstream which stores the vertex ids of contracted vertices of *vid*
-                    */
-                    void get_contracted_vertices(std::ostringstream &log, int64_t vid) {
-                        if (!this->has_vertex(vid)) return;
-                        V v = this->get_V(vid);
-                        log << "{";
-                        for (auto vertex : this->graph[v].contracted_vertices()) {
-                            log << this->graph[vertex].id << ", ";
-                        }
-                        log << "}";
-                    }
-
-
-                    /*! @brief get the contracted vertex ids of a given vertex in string format
-                    @param [in] vid vertex_id
-                    @param [in] contracted_vertices The array of contracted vertices of *vid*
-                    @param [in] contracted_vertices_size The size of the array of contracted vertices of *vid*
-                    */
-                    void get_contracted_vertices(int64_t **contracted_vertices,
-                        int &contracted_vertices_size, int64_t vid) {
-                        if (!this->has_vertex(vid)) return;
-                        V v = this->get_V(vid);
-                        contracted_vertices_size = (int)this->graph[v].contracted_vertices().size();
-                        (*contracted_vertices) = (int64_t*)malloc(sizeof(int64_t)*contracted_vertices_size);
-                        int64_t count = 0;
-                        for (auto vertex : this->graph[v].contracted_vertices()) {
-                            (*contracted_vertices)[count++] = this->graph[vertex].id;
-                        }
-                    }
-
-                    /*! @brief add the contracted vertices of an edge *e* to the vertex *v*
-                    @param [in] v vertex_descriptor
-                    @param [in] e Edge of type *T_E*
-                    */
-                    void add_contracted_edge_vertices(V v, T_E &e) {
-                        for (auto vid : e.contracted_vertices()) {
-                            this->graph[v].add_vertex_id(vid);
-                        }
-                        e.clear_contracted_vertices();
-                    }
-
-                    /*! \brief Inserts an edge of type *T* into the graph
-                     *  @param edge
-                     */
-                    template < typename T>
-                     void graph_add_edge(const T &edge) {
-                        bool inserted;
-                        E e;
-                        if ((edge.cost < 0) && (edge.reverse_cost < 0))
-                            return;
-                            /*
-                             * true: for source
-                             * false: for target
-                             */
-                             auto vm_s = this->get_V(T_V(edge, true));
-                             auto vm_t = this->get_V(T_V(edge, false));
-                             pgassert(this->vertices_map.find(edge.source) != this->vertices_map.end());
-                             pgassert(this->vertices_map.find(edge.target) != this->vertices_map.end());
-                             if (edge.cost >= 0) {
-                                boost::tie(e, inserted) =
-                                boost::add_edge(vm_s, vm_t, this->graph);
-                                this->graph[e].cost = edge.cost;
-                                this->graph[e].id = edge.id;
-                                this->graph[e].first = true;
-                                this->graph[e].source = edge.source;
-                                this->graph[e].target = edge.target;
-                            }
-                            if (edge.reverse_cost >= 0) {
-                                boost::tie(e, inserted) =
-                                boost::add_edge(vm_t, vm_s, this->graph);
-
-                                this->graph[e].cost = edge.reverse_cost;
-                                this->graph[e].id = edge.id;
-                                this->graph[e].first = false;
-                                this->graph[e].target = edge.source;
-                                this->graph[e].source = edge.target;
-                            }
-                        }
-
-                    /*! \brief add edges(shortuct) to the graph during contraction
-                    @param [in] edge of type *T_E* is to be added
-                    @param [in] log string stream used for debugging purposes
-                    */  
-                    void graph_add_shortcut(const T_E &edge, std::ostringstream& log) {
-                        bool inserted;
-                        E e;
-                        if (edge.cost < 0)
-                            return;
-                        /*
-                         * true: for source
-                         * false: for target
-                         */
-                         log << "Graph before adding shortcut\n";
-                         print_graph(log);
-                         pgassert(this->vertices_map.find(edge.source) != this->vertices_map.end());
-                         pgassert(this->vertices_map.find(edge.target) != this->vertices_map.end());
-                         auto vm_s = this->get_V(edge.source);
-                         auto vm_t = this->get_V(edge.target);
-                         log << "Adding edge between " << this->graph[vm_s] << ", "
-                         << this->graph[vm_t] << std::endl;
-
-                         if (edge.cost >= 0) {
-                            boost::tie(e, inserted) =
-                            boost::add_edge(vm_s, vm_t, this->graph);
-                            log << "inserted: " << inserted << std::endl;
-                            this->graph[e].cp_members(edge, log);
-                            log << this->graph[e];
-                            // this->graph[e].id = this->graph[e].eid;
-                            log << "Graph after adding shortcut\n";
-                            print_graph(log);
-                            T_E shortcut;
-                            shortcut.cp_members(edge, log);
-                            shortcuts.push_back(shortcut);
-                        }
-                    }
-
-                    /*! \brief Disconnects all incoming and outgoing edges from the vertex
-                    boost::graph doesn't recommend th to insert/remove vertices, so a vertex removal is
-                    simulated by disconnecting the vertex from the graph
-                    - No edge is disconnected if the vertices id's do not exist in the graph
-                    - All removed edges are stored for future reinsertion
-                    - All parallel edges are disconnected (automatically by boost)
-                    @param [in] vertex original vertex id of the starting point of the edge
-                    @param [in] log string stream used for debugging purposes
-                    */   
-                    void disconnect_vertex(std::ostringstream &log, V vertex) {
-                        T_E d_edge;
-                        EO_i out, out_end;
-                        log << "Disconnecting current vertex " << this->graph[vertex].id << "\n";
-                        removed_vertices += vertex;
-                        //  store the edges that are going to be removed
-                        for (boost::tie(out, out_end) = out_edges(vertex, this->graph);
-                            out != out_end; ++out) {
-                            d_edge.id = this->graph[*out].id;
-                        d_edge.source = this->graph[source(*out, this->graph)].id;
-                        d_edge.target = this->graph[target(*out, this->graph)].id;
-                        d_edge.cost = this->graph[*out].cost;
-                        this->removed_edges.push_back(d_edge);
-                    }
-
-                        //  special case
-                    if (this->m_gType == DIRECTED) {
-                        EI_i in, in_end;
-                        for (boost::tie(in, in_end) = in_edges(vertex, this->graph);
-                            in != in_end; ++in) {
-                            d_edge.id = this->graph[*in].id;
-                        d_edge.source = this->graph[source(*in, this->graph)].id;
-                        d_edge.target = this->graph[target(*in, this->graph)].id;
-                        d_edge.cost = this->graph[*in].cost;
-                        this->removed_edges.push_back(d_edge);
-                    }
-                }
-                try {
-                    boost::clear_vertex(vertex, this->graph);
-                }
-                catch ( ... ) {
-                    log << "Caught unknown exception!\n";
-                }
-            }
+     typedef typename boost::graph_traits < G >::vertex_descriptor V;
+     typedef typename boost::graph_traits < G >::edge_descriptor E;
+     typedef typename boost::graph_traits < G >::vertex_iterator V_i;
+     typedef typename boost::graph_traits < G >::edge_iterator E_i;
+     typedef typename boost::graph_traits < G >::out_edge_iterator EO_i;
+     typedef typename boost::graph_traits < G >::in_edge_iterator EI_i;
+     typedef typename boost::graph_traits < G >::degree_size_type
+         degree_size_type;
+
+     Identifiers<V> removed_vertices;
+     std::vector<T_E> shortcuts;
+
+     /*! @brief Binary function that accepts two elements , and returns a value convertible to bool.
+       Used as a compare function to sort the edges in increasing order of edge id
+       */
+     static bool compareById(const T_E &edge1, const T_E &edge2) {
+         return edge1.id > edge2.id;
+     }
+
+     /*!
+       Prepares the _graph_ to be of type *gtype*
+       */
+     explicit Pgr_contractionGraph< G , T_V, T_E >(graphType gtype)
+         : Pgr_base_graph< G , T_V, T_E >(gtype) {
+         }
+
+     /*! @brief get the vertex descriptors of adjacent vertices of *v*
+       @param [in] v vertex_descriptor
+       @return Identifiers<V>: The set of vertex descriptors adjacent to the given vertex *v*
+       */
+     Identifiers<V> find_adjacent_vertices(V v) const {
+         EO_i out, out_end;
+         EI_i in, in_end;
+         Identifiers<V> adjacent_vertices;
+
+         for (boost::tie(out, out_end) = out_edges(v, this->graph);
+                 out != out_end; ++out) {
+             adjacent_vertices += this->adjacent(v, *out);
+         }
+         for (boost::tie(in, in_end) = in_edges(v, this->graph);
+                 in != in_end; ++in) {
+             adjacent_vertices += this->adjacent(v, *in);
+         }
+         return adjacent_vertices;
+     }
+
+
+     std::vector<int64_t> get_ids(
+             Identifiers<int64_t> boost_ids) const {
+         std::vector<int64_t> ids(boost_ids.size());
+         size_t count = 0;
+         for (auto id : boost_ids) {
+             ids[count++] = this->graph[id].id;
+         }
+         return ids;
+     }
+
+
+     /*! @brief vertices with at least one contracted vertex
+      *
+       @result The vids Identifiers with at least one contracted vertex
+       */
+     Identifiers<int64_t> get_changed_vertices() {
+        Identifiers<int64_t> vids;
+         for (auto vi = vertices(this->graph).first;
+                 vi != vertices(this->graph).second;
+                 ++vi) {
+             if (!removed_vertices.has(*vi)
+                     && this->graph[*vi].has_contracted_vertices()) {
+                 vids += this->graph[*vi].id;
+             }
+         }
+         return vids;
+     }
+
+
+     /*! @brief get the edge with minimum cost between two vertices
+       @param [in] source vertex_descriptor of source vertex
+       @param [in] destination vertex_descriptor of target vertex
+       @return E: The edge descriptor of the edge with minimum cost
+       */
+     E get_min_cost_edge(V source, V destination) {
+         EO_i out_i, out_end;
+         E min_cost_edge;
+         double min_cost = (std::numeric_limits<double>::max)();
+         for (boost::tie(out_i, out_end) =
+                 boost::out_edges(source, this->graph);
+                 out_i != out_end; ++out_i) {
+             auto e = *out_i;
+             if (this->target(e) == destination) {
+                 if (this->graph[e].cost < min_cost) {
+                     min_cost = this->graph[e].cost;
+                     min_cost_edge = e;
+                 }
+             }
+         }
+         return min_cost_edge;
+     }
+
+     /*! @brief The number of edges from @b neighbor to @b vertex
+
+       @param [in] vertex is the target of the edges
+       @param [in] neighbor is the source of the edges
+       @return degree_size_type: The in-degree of *vertex* from *neighbor*
+       */
+     degree_size_type in_degree_from_vertex(V vertex, V neighbor) {
+         return out_degree_to_vertex(neighbor, vertex);
+     }
+
+     /*! @brief The number of edges from @b vertex to @b neighbor
+
+       @param [in] vertex vertex_descriptor of the given vertex
+       @param [in] neighbor vertex_descriptor of neighbor
+       @return degree_size_type: The out-degree of *vertex* to *neighbor*
+       */
+     degree_size_type out_degree_to_vertex(V vertex, V neighbor) {
+         degree_size_type degree = 0;
+         EO_i out_i, out_end;
+         for (boost::tie(out_i, out_end) =
+                 boost::out_edges(vertex, this->graph);
+                 out_i != out_end; ++out_i) {
+             if (this->is_directed()
+                     && (this->is_source(vertex, *out_i)
+                         && this->is_target(neighbor, *out_i))) {
+                 degree++;
+             } else if (this->is_undirected() &&
+                     this->adjacent(vertex, *out_i) == neighbor) {
+                 degree++;
+             }
+         }
+         return degree;
+     }
+
+
+     /*! @brief print the graph with contracted vertices of
+       all vertices and edges
+       */
+     void print_graph(std::ostringstream &log) {
+         EO_i out, out_end;
+         for (auto vi = vertices(this->graph).first;
+                 vi != vertices(this->graph).second;
+                 ++vi) {
+             if ((*vi) >= this->m_num_vertices) break;
+             log << this->graph[*vi].id << "(" << (*vi) << ")"
+                 << this->graph[*vi].contracted_vertices() << std::endl;
+             log << " out_edges_of(" << this->graph[*vi].id << "):";
+             for (boost::tie(out, out_end) = out_edges(*vi, this->graph);
+                     out != out_end; ++out) {
+                 log << ' ' << this->graph[*out].id
+                     << "=(" << this->graph[this->source(*out)].id
+                     << ", " << this->graph[this->target(*out)].id << ") = "
+                     <<  this->graph[*out].cost <<"\t";
+             }
+             log << std::endl;
+         }
+     }
+
+
+
+     /*! @brief get the contracted vertex ids of a given vertex in array format
+       @param [in] vid vertex_id
+
+       @returns ids of contracted_vertices
+       */
+     std::vector<int64_t> get_contracted_vertices(int64_t vid) {
+         if (!this->has_vertex(vid)) return std::vector<int64_t>();
+         auto  v = this->get_V(vid);
+         std::vector<int64_t> ids(this->graph[v].contracted_vertices().size());
+
+         size_t count = 0;
+         for (auto idx :  this->graph[v].contracted_vertices()) {
+             ids[count++] =  this->graph[idx].id;
+         }
+         return ids;
+     }
+
+
+
+
+
+     /*! @brief add the contracted vertices of an edge *e* to the vertex *v*
+       @param [in] v vertex_descriptor
+       @param [in] e Edge of type *T_E*
+       */
+     void add_contracted_edge_vertices(V v, T_E &e) {
+         for (auto vid : e.contracted_vertices()) {
+             this->graph[v].add_vertex_id(vid);
+         }
+         e.clear_contracted_vertices();
+     }
+
+
+     /*! @brief add edges(shortuct) to the graph during contraction
+
+       a -> b -> c
+
+       a -> c
+
+       edge (a, c) is a new edge e
+       e.contracted_vertices = b + b.contracted vertices
+       b is "removed" disconnected from the graph
+       - by removing all edges to/from b
+
+
+       @param [in] edge of type *T_E* is to be added
+       */
+
+     void add_shortcut(const T_E &edge) {
+         std::ostringstream log;
+         bool inserted;
+         E e;
+         if (edge.cost < 0)
+             return;
+
+         pgassert(this->vertices_map.find(edge.source)
+                 != this->vertices_map.end());
+         pgassert(this->vertices_map.find(edge.target)
+                 != this->vertices_map.end());
+
+         auto vm_s = this->get_V(edge.source);
+         auto vm_t = this->get_V(edge.target);
+
+         boost::tie(e, inserted) =
+             boost::add_edge(vm_s, vm_t, this->graph);
+
+         this->graph[e].cp_members(edge);
+
+         shortcuts.push_back(edge);
+     }
 };
+
 }  // namespace graph
 }  // namespace pgrouting
+
+#endif  // SRC_CONTRACTION_SRC_PGR_CONTRACTIONGRAPH_HPP_
diff --git a/src/contraction/src/pgr_deadEndContraction.hpp b/src/contraction/src/pgr_deadEndContraction.hpp
index c1aac90..a2b2ecf 100644
--- a/src/contraction/src/pgr_deadEndContraction.hpp
+++ b/src/contraction/src/pgr_deadEndContraction.hpp
@@ -1,5 +1,5 @@
 /*PGR-GNU*****************************************************************
-File: pgr_contractionGraph.c
+File: pgr_deadend.hpp
 
 Generated with Template by:
 Copyright (c) 2015 pgRouting developers
@@ -26,204 +26,383 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
+
+#ifndef SRC_CONTRACTION_SRC_PGR_DEADENDCONTRACTION_HPP_
+#define SRC_CONTRACTION_SRC_PGR_DEADENDCONTRACTION_HPP_
 #pragma once
-#ifdef __MINGW32__
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
+
 
 #include <queue>
 #include <functional>
 #include <vector>
 #include "../../common/src/identifiers.hpp"
+
 namespace pgrouting {
+namespace contraction {
+
 template < class G >
-class Pgr_deadEndContraction {
+class Pgr_deadend {
+ private:
+     typedef typename G::V V;
+     typedef typename G::E E;
+
  public:
-                typedef typename G::V V;
-                typedef typename G::E E;
-                typedef typename G::V_i V_i;
-                typedef typename G::E_i E_i;
-                typedef typename G::EO_i EO_i;
-                typedef typename G::EI_i EI_i;
-                void setForbiddenVertices(G &graph,
-                        Identifiers<int64_t> forbidden_vertices,
-                        std::ostringstream& debug);
-                void setForbiddenVertices(G &graph, int64_t *forbidden_vertices,
-                        size_t size_forbidden_vertices,
-                        std::ostringstream& debug);
-                void calculateVertices(G &graph,
-                        std::ostringstream& debug);
-                bool is_dead_end(G &graph, V v,
-                        std::ostringstream& debug);
-                void add_if_dead_end(G &graph, V v,
-                        std::ostringstream& debug);
-                void doContraction(G &graph,
-                        std::ostringstream& debug);
+     void setForbiddenVertices(
+             Identifiers<V> forbidden_vertices);
+
+     void calculateVertices(G &graph);
+     /// @brief true when \b v is a dead end
+     bool is_dead_end(G &graph, V v);
+     void add_if_dead_end(G &graph, V v);
+     void doContraction(G &graph);
 
  private:
-                Identifiers<V> deadendVertices;
-                Identifiers<V> forbiddenVertices;
+     Identifiers<V> deadendVertices;
+     Identifiers<V> forbiddenVertices;
+     std::ostringstream debug;
 };
 
-    template < class G >
-        void Pgr_deadEndContraction< G >::setForbiddenVertices(G &graph,
-                Identifiers<int64_t> forbidden_vertices,
-                std::ostringstream& debug) {
-            debug << "Setting forbidden vertices\n";
-            for (auto forbiddenVertex : forbidden_vertices) {
-                forbiddenVertices += graph.get_V(forbiddenVertex);
-            }
-        }
+/******* IMPLEMENTATION ************/
+template < class G >
+void
+Pgr_deadend< G >::setForbiddenVertices(
+        Identifiers<V> forbidden_vertices) {
+#ifndef NDEBUG
+    debug << "Setting forbidden vertices\n";
+#endif
+    forbiddenVertices = forbidden_vertices;
+}
 
-    template < class G >
-        void Pgr_deadEndContraction< G >::setForbiddenVertices(G &graph,
-                int64_t *forbidden_vertices,
-                size_t size_forbidden_vertices,
-                std::ostringstream& debug) {
-            debug << "Setting forbidden vertices\n";
-            for (int64_t i = 0; i < size_forbidden_vertices; ++i) {
-                forbiddenVertices += graph.get_V(forbidden_vertices[i]);
-            }
+
+template < class G >
+void Pgr_deadend<G>::calculateVertices(G &graph) {
+    debug << "Calculating vertices\n";
+
+    for (auto vi = vertices(graph.graph).first;
+            vi != vertices(graph.graph).second;
+            ++vi) {
+#ifndef NDEBUG
+        debug << "Checking vertex " << graph[(*vi)].id << '\n';
+#endif
+        if (is_dead_end(graph, *vi)) {
+#ifndef NDEBUG
+            debug << "Adding " << graph[(*vi)].id << " to dead end" << '\n';
+#endif
+            deadendVertices += (*vi);
         }
+    }
+    deadendVertices -= forbiddenVertices;
+}
 
-    template < class G >
-        void Pgr_deadEndContraction<G>::calculateVertices(G &graph,
-                std::ostringstream& debug) {
-            debug << "Calculating vertices\n";
-            V_i vi;
-            for (vi = vertices(graph.graph).first; vi != vertices(graph.graph).second; ++vi) {
-                debug << "Checking vertex " << graph.graph[(*vi)].id << '\n';
-                if (is_dead_end(graph, *vi, debug)) {
-                    debug << "Adding " << graph.graph[(*vi)].id << " to dead end" << '\n';
-                    deadendVertices += (*vi);
-                }
-            }
-            deadendVertices -= forbiddenVertices;
+template < class G >
+bool Pgr_deadend<G>::is_dead_end(G &graph, V v) {
+#ifndef NDEBUG
+    debug << "Is dead end: " << graph.graph[v].id << "?\n";
+#endif
+
+    if (forbiddenVertices.has(v)) {
+        /**
+         * - fobbiden_vertices
+         *   - Not considered as dead end
+         */
+
+        return false;
+    }
+
+    if (graph.is_undirected()) {
+        /**
+         * undirected:
+         * ----------
+         *   - There is only one adjacent vertex:
+         *   - All adjcent edges are from a single vertex
+         *
+
+         @dot
+         graph G {
+         graph [rankdir=LR];
+         subgraph cluster0 {
+         node [shape=point,height=0.2,style=filled,color=black];
+         style=filled;
+         color=lightgrey;
+         a0; a1; a2;
+         label = "rest of graph";
+         }
+         v [color=green];
+         v -- a0;
+         v -- a0;
+         }
+         @enddot
+
+         */
+        Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(v);
+        if (adjacent_vertices.size() == 1) {
+            return true;
         }
+        return false;
+    }
 
-    template < class G >
-        bool Pgr_deadEndContraction<G>::is_dead_end(G &graph, V v,
-                std::ostringstream& debug) {
-            debug << "Is dead end: " << graph.graph[v].id << "?\n";
-            // debug << "in_degree: " << graph.in_degree(vertex_id) << '\n';
-            // debug << "out_degree: " << graph.out_degree(vertex_id) << '\n';
-            // if(graph.out_degree(v) == 1 && graph.in_degree(v) == 0) return true;
-            // if(graph.out_degree(v) == 0 && graph.in_degree(v) == 1) return true;
-            if (graph.m_gType == UNDIRECTED) {
-                /* the condition in case of undirected graph
-                   is all incoming edges come from a single vertex
-                */
-                debug << "undirected\nAdjacent Vertices\n";
-                Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(v);
-                debug << adjacent_vertices;
-                //  only one adjacent vertex
-                if (adjacent_vertices.size() == 1)
-                    return true;
-                else
-                    return false;
-            } else {
-            if (graph.out_degree(v) == 1 && graph.in_degree(v) == 1) {
-                int64_t incoming_edge_id = -1;
-                int64_t outgoing_edge_id = -2;
-                EO_i out, out_end;
-                EI_i in, in_end;
-                for (boost::tie(out, out_end) = out_edges(v, graph.graph);
-                        out != out_end; ++out) {
-                    outgoing_edge_id = graph.graph[*out].id;
-                }
-                for (boost::tie(in, in_end) = in_edges(v, graph.graph);
-                        in != in_end; ++in) {
-                    incoming_edge_id = graph.graph[*in].id;
-                }
-                if (incoming_edge_id == outgoing_edge_id) {
-                    debug << "Yes\n";
-                    return true;
-                }
-                debug << "No\n";
-                return false;
-            }
-            //  additional cases
-            if (graph.out_degree(v) == 0 && graph.in_degree(v) > 0) {
-                return true;
-             }
-             /*  dead start
-             if (graph.in_degree(v) == 0 && graph.out_degree(v) > 0) {
-                return true;
-             }
-             */
-            debug << "No\n";
-            return false;
+    pgassert(graph.is_directed());
+    /*
+     * directed graph
+     *
+     * is dead end when:
+     *  (2) one incoming edge, no outgoing edge (dead end)
+     *  (3) one outgoing edge, one incoming edge
+     *       and both are from/to the same vertex
+     *  (4) many incoming edges
+     *       and no outgoing edges
+     *  (5) many outgoing edges TODO but all go to same vertex
+     *       and no incoming edges
+     *
+     * NOT dead end when:
+     *  (3) one outgoing edge, one incoming edge
+     *       and both from/to different vertex
+     *
+     * note: when contracting case 4 & 5, the vertex has to be
+     *       part of all the adjacent vertices
+     */
+
+    if (graph.in_degree(v) == 0 && graph.out_degree(v) == 1) {
+        /**
+         * directed
+         * ----------
+         *  case (1):  (dead start)
+         *   - one outgoing edge,
+         *   - no incoming edge
+         *
+
+         @dot
+         digraph G {
+         graph [rankdir=LR];
+         subgraph cluster0 {
+         node [shape=point,height=0.2,style=filled,color=black];
+         style=filled;
+         color=lightgrey;
+         a0; a1; a2;
+         label = "rest of graph";
+         }
+         v [color=green];
+         v -> a0;
+         }
+         @enddot
+
+         */
+        return true;
+    }
+
+    if (graph.in_degree(v) == 1 && graph.out_degree(v) == 0) {
+        /**
+         * case (2):  (dead end)
+         *   - no outgoing edge,
+         *   - one incoming edge
+         *
+
+         @dot
+         digraph G {
+         graph [rankdir=LR];
+         subgraph cluster0 {
+         node [shape=point,height=0.2,style=filled,color=black];
+         style=filled;
+         color=lightgrey;
+         a0; a1; a2;
+         label = "rest of graph";
+         }
+         v [color=green];
+         a0 -> v;
+         }
+         @enddot
+
+         */
+        return true;
+    }
+
+    if (graph.out_degree(v) == 1 && graph.in_degree(v) == 1) {
+        /**
+         * case (3):
+         *   - one outgoing edge,
+         *   - one incoming edge
+         *   - one adjacent vertex
+         *
+
+         @dot
+         digraph G {
+         graph [rankdir=LR];
+         subgraph cluster0 {
+         node [shape=point,height=0.2,style=filled,color=black];
+         style=filled;
+         color=lightgrey;
+         a0; a1; a2;
+         label = "rest of graph";
+         }
+         v [color=green];
+         v -> a0;
+         a0 -> v;
+         }
+         @enddot
+
+         */
+        auto out_e = *(out_edges(v, graph.graph).first);
+        auto in_e = *(in_edges(v, graph.graph).first);
+
+        auto out_v = graph.is_source(v, out_e) ?
+            graph.target(out_e) : graph.source(out_e);
+        auto in_v = graph.is_source(v, in_e) ?
+            graph.target(in_e) : graph.source(in_e);
+
+        if (out_v == in_v) {
+            return true;
         }
         return false;
+    }
+
+    if (graph.in_degree(v) > 0 && graph.out_degree(v) == 0) {
+        /**
+         * case (4):
+         *   - no outgoing edge,
+         *   - many incoming edges
+         *
+         *
+
+         @dot
+         digraph G {
+         graph [rankdir=LR];
+         subgraph cluster0 {
+         node [shape=point,height=0.2,style=filled,color=black];
+         style=filled;
+         color=lightgrey;
+         a0; a1; a2;
+         label = "rest of graph";
+         }
+         v [color=green];
+         a0 -> v;
+         a1 -> v;
+         a0 -> v;
+         }
+         @enddot
+
+         */
+        return true;
+    }
+
+    if (graph.in_degree(v) > 0 && graph.out_degree(v) > 0) {
+        /**
+         * case (5):
+         *   - many outgoing edge,
+         *   - many incoming edges
+         *   - All adjacent edges are from a single vertex
+         *
+         *
+
+         @dot
+         digraph G {
+         graph [rankdir=LR];
+         subgraph cluster0 {
+         node [shape=point,height=0.2,style=filled,color=black];
+         style=filled;
+         color=lightgrey;
+         a0; a1; a2;
+         label = "rest of graph";
+         }
+         v [color=green];
+         a0 -> v;
+         a0 -> v;
+         v -> a0;
+         v -> a0;
+         }
+         @enddot
+
+         */
+
+        auto adjacent_vertices = graph.find_adjacent_vertices(v);
+        if (adjacent_vertices.size() == 1) {
+            return true;
         }
+    }
+    debug << "Is Not Dead End\n";
+    return false;
+}
 
-    template < class G >
-        void Pgr_deadEndContraction<G>::add_if_dead_end(G &graph, V v,
-                std::ostringstream& debug) {
-            debug << "Adding if dead end\n";
-            if (is_dead_end(graph, v, debug)) {
-                deadendVertices += v;
-            } else {
-                debug << "Not dead end\n";
-            }
+template < class G >
+void
+Pgr_deadend<G>::add_if_dead_end(G &graph, V v) {
+    if (is_dead_end(graph, v)) {
+        deadendVertices += v;
+    }
+}
+
+template < class G >
+void
+Pgr_deadend<G>::doContraction(G &graph) {
+#ifndef NDEBUG
+    debug << "Performing contraction\n";
+#endif
+    std::priority_queue<V, std::vector<V>, std::greater<V> > deadendPriority;
+
+    for (V deadendVertex : deadendVertices) {
+        deadendPriority.push(deadendVertex);
+    }
+
+    while (!deadendPriority.empty()) {
+        V current_vertex = deadendPriority.top();
+        deadendPriority.pop();
+
+        if (!is_dead_end(graph, current_vertex)) {
+            continue;
         }
 
-    template < class G >
-        void Pgr_deadEndContraction<G>::doContraction(G &graph,
-                std::ostringstream& debug) {
-            debug << "Performing contraction\n";
-            std::priority_queue<V, std::vector<V>, std::greater<V> > deadendPriority;
-            for (V deadendVertex : deadendVertices) {
-                deadendPriority.push(deadendVertex);
+        Identifiers<V> adjacent_vertices =
+            graph.find_adjacent_vertices(current_vertex);
+
+        for (auto adjacent_vertex : adjacent_vertices) {
+#ifndef NDEBUG
+            debug << "Contracting current vertex "
+                << graph[current_vertex].id << std::endl;
+#endif
+            graph[adjacent_vertex].add_contracted_vertex(
+                    graph[current_vertex], current_vertex);
+
+#ifndef NDEBUG
+            debug << "Adding contracted vertices of the edge\n";
+#endif
+            auto o_edges = out_edges(current_vertex, graph.graph);
+            for (auto out = o_edges.first;
+                    out != o_edges.second;
+                    ++out) {
+                debug << graph.graph[*out];
+                graph.add_contracted_edge_vertices(
+                        adjacent_vertex, graph[*out]);
+            }
+            auto i_edges = in_edges(current_vertex, graph.graph);
+            for (auto in = i_edges.first;
+                    in != i_edges.second; ++in) {
+#ifndef NDEBUG
+                debug << graph.graph[*in];
+#endif
+                graph.add_contracted_edge_vertices(adjacent_vertex, graph[*in]);
             }
-            // debug << "Dead end vertices" << std::endl;
-            // debug << deadendVertices;
-            while (!deadendPriority.empty()) {
-                V current_vertex = deadendPriority.top();
-                deadendPriority.pop();
-                if (!is_dead_end(graph, current_vertex, debug)) {
-                    continue;
-                }
-                Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(current_vertex);
-                for (auto adjacent_vertex : adjacent_vertices) {
-                    // debug << "Current Vertex: "<< graph[current_vertex].id << std::endl;
-                    // debug << "Adjacent Vertex: "<< graph[adjacent_vertex].id << std::endl;
-                debug << "Contracting current vertex "<< graph[current_vertex].id << std::endl;
-                graph[adjacent_vertex].add_contracted_vertex(graph[current_vertex], current_vertex);
-                //  Adding contracted vertices of the edge
-                EO_i out, out_end;
-                EI_i in, in_end;
-                debug << "Adding contracted vertices of the edge\n";
-                for (boost::tie(out, out_end) = out_edges(current_vertex, graph.graph);
-                        out != out_end; ++out) {
-                        debug << graph.graph[*out];
-                        graph.add_contracted_edge_vertices(adjacent_vertex, graph.graph[*out]);
-                    }
-                for (boost::tie(in, in_end) = in_edges(current_vertex, graph.graph);
-                        in != in_end; ++in) {
-                        debug << graph.graph[*in];
-                        graph.add_contracted_edge_vertices(adjacent_vertex, graph.graph[*in]);
-                    }
-                debug << "Current Vertex:\n";
-                debug << graph[current_vertex];
-                // debug << graph.graph[current_vertex].print_vertex(debug, graph.graph);
-                debug << "Adjacent Vertex:\n";
-                // debug << graph.graph[adjacent_vertex].print_vertex(debug, graph.graph);
-                debug << graph[adjacent_vertex];
-                graph.disconnect_vertex(debug, current_vertex);
-                deadendVertices -= current_vertex;
-                debug << "Adjacent vertex dead_end?: " << is_dead_end(graph, adjacent_vertex, debug) << std::endl;
-                if (is_dead_end(graph, adjacent_vertex, debug)
-                 && !forbiddenVertices.has(adjacent_vertex)) {
-                    deadendVertices += adjacent_vertex;
-                    deadendPriority.push(adjacent_vertex);
-                }
-                }
+#ifndef NDEBUG
+            debug << "Current Vertex:\n";
+            debug << graph[current_vertex];
+            debug << "Adjacent Vertex:\n";
+            debug << graph[adjacent_vertex];
+#endif
+            graph.disconnect_vertex(current_vertex);
+            deadendVertices -= current_vertex;
+#ifndef NDEBUG
+            debug << "Adjacent vertex dead_end?: "
+                << is_dead_end(graph, adjacent_vertex)
+                << std::endl;
+#endif
+            if (is_dead_end(graph, adjacent_vertex)
+                    && !forbiddenVertices.has(adjacent_vertex)) {
+                deadendVertices += adjacent_vertex;
+                deadendPriority.push(adjacent_vertex);
             }
         }
+    }
+}
 
+}  // namespace contraction
 }  // namespace pgrouting
+
+#endif  // SRC_CONTRACTION_SRC_PGR_DEADENDCONTRACTION_HPP_
diff --git a/src/contraction/src/pgr_linearContraction.hpp b/src/contraction/src/pgr_linearContraction.hpp
index a72e164..6c36e54 100644
--- a/src/contraction/src/pgr_linearContraction.hpp
+++ b/src/contraction/src/pgr_linearContraction.hpp
@@ -1,5 +1,5 @@
 /*PGR-GNU*****************************************************************
-File: pgr_contractionGraph.c
+File: pgr_linear.c
 
 Generated with Template by:
 Copyright (c) 2015 pgRouting developers
@@ -26,234 +26,249 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
+
+#ifndef SRC_CONTRACTION_SRC_PGR_LINEARCONTRACTION_HPP_
+#define SRC_CONTRACTION_SRC_PGR_LINEARCONTRACTION_HPP_
 #pragma once
-#ifdef __MINGW32__
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
-#include <functional>
+
+
 #include <queue>
+#include <functional>
 #include <vector>
+
 #include "../../common/src/identifiers.hpp"
+
+
 namespace pgrouting {
+namespace contraction {
+
 template < class G >
-class Pgr_linearContraction {
+class Pgr_linear {
+ private:
+     typedef typename G::V V;
+     typedef typename G::E E;
+     typedef typename G::V_i V_i;
+     typedef typename G::E_i E_i;
+     typedef typename G::EO_i EO_i;
+     typedef typename G::EI_i EI_i;
+     typedef typename G::degree_size_type degree_size_type;
+
+
  public:
-                typedef typename G::V V;
-                typedef typename G::E E;
-                typedef typename G::V_i V_i;
-                typedef typename G::E_i E_i;
-                typedef typename G::EO_i EO_i;
-                typedef typename G::EI_i EI_i;
-                typedef typename G::degree_size_type degree_size_type;
-                Pgr_linearContraction():last_edge_id(0) {}
-                void setForbiddenVertices(G &graph,
-                        Identifiers<int64_t> forbidden_vertices,
-                        std::ostringstream& debug);
-                void setForbiddenVertices(G &graph, int64_t *forbidden_vertices,
-                        size_t size_forbidden_vertices,
-                        std::ostringstream& debug);
-                void calculateVertices(G &graph,
-                        std::ostringstream& debug);
-                void doContraction(G &graph,
-                        std::ostringstream& debug);
+     Pgr_linear():last_edge_id(0) {}
+     void setForbiddenVertices(
+             Identifiers<V> forbidden_vertices);
+     void calculateVertices(G &graph);
+     void doContraction(G &graph);
+
+ private:
+     int64_t get_next_id() {
+         return --last_edge_id;
+     }
+
+     bool is_linear(G &graph, V v);
+     void add_if_linear(G &graph, V v);
+     void add_edge_pair(V vertex, int64_t &incoming_eid,
+             int64_t &outgoing_eid);
+     void add_shortcut(G &graph, V vertex,
+             E incoming_edge,
+             E outgoing_edge);
+     void add_shortcut(G &graph,
+             pgrouting::CH_edge &shortcut);
 
  private:
-                Identifiers<V> linearVertices;
-                Identifiers<V> forbiddenVertices;
-                int64_t last_edge_id;
-                bool is_linear(G &graph, V v,
-                        std::ostringstream& debug);
-                void add_if_linear(G &graph, V v,
-                        std::ostringstream& debug);
-                void add_edge_pair(V vertex, int64_t &incoming_eid,
-                        int64_t &outgoing_eid,
-                        std::ostringstream& debug);
-                void add_shortcut(G &graph, V vertex,
-                        E incoming_edge,
-                        E outgoing_edge,
-                        std::ostringstream& debug);
-                void add_shortcut(G &graph,
-                        pgrouting::contraction::Edge &shortcut,
-                        std::ostringstream& debug);
-                int64_t& get_next_id() {
-                    return --last_edge_id;
-                }
+     Identifiers<V> linearVertices;
+     Identifiers<V> forbiddenVertices;
+
+     int64_t last_edge_id;
+     std::ostringstream debug;
 };
 
-    template < class G >
-        void Pgr_linearContraction< G >::setForbiddenVertices(G &graph,
-                Identifiers<int64_t> forbidden_vertices,
-                std::ostringstream& debug) {
-            debug << "Setting forbidden vertices\n";
-            for (auto forbiddenVertex : forbidden_vertices) {
-                forbiddenVertices += graph.get_V(forbiddenVertex);
-            }
-        }
+/*************** IMPLEMENTTION **************/
 
-    template < class G >
-        void Pgr_linearContraction< G >::setForbiddenVertices(G &graph,
-                int64_t *forbidden_vertices,
-                size_t size_forbidden_vertices,
-                std::ostringstream& debug) {
-            debug << "Setting forbidden vertices\n";
-            for (int64_t i = 0; i < size_forbidden_vertices; ++i) {
-                forbiddenVertices += graph.get_V(forbidden_vertices[i]);
-            }
-        }
+template < class G >
+void
+Pgr_linear< G >::setForbiddenVertices(
+        Identifiers<V> forbidden_vertices) {
+    debug << "Setting forbidden vertices\n";
+    forbiddenVertices = forbidden_vertices;
+}
 
-    template < class G >
-        bool Pgr_linearContraction<G>::is_linear(G &graph, V v,
-                std::ostringstream& debug) {
-            degree_size_type in_degree, out_degree;
-            in_degree = graph.in_degree(v);
-            out_degree = graph.out_degree(v);
-            Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(v);
-            if (adjacent_vertices.size() == 2) {
-                if (in_degree > 0 && out_degree > 0) {
-                    debug << graph.graph[v].id << " is linear " << std::endl;
-                    return true;
-                }
-            }
-            debug << graph.graph[v].id << " is not linear " << std::endl;
-            return false;
+
+template < class G >
+bool Pgr_linear<G>::is_linear(G &graph, V v) {
+    degree_size_type in_degree, out_degree;
+    in_degree = graph.in_degree(v);
+    out_degree = graph.out_degree(v);
+    Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(v);
+    if (adjacent_vertices.size() == 2) {
+        if (in_degree > 0 && out_degree > 0) {
+            debug << graph.graph[v].id << " is linear " << std::endl;
+            return true;
         }
+    }
+    debug << graph.graph[v].id << " is not linear " << std::endl;
+    return false;
+}
 
-    template < class G >
-        void Pgr_linearContraction<G>::calculateVertices(G &graph,
-                std::ostringstream& debug) {
-            debug << "Calculating vertices\n";
-            V_i vi;
-            for (vi = vertices(graph.graph).first; vi != vertices(graph.graph).second; ++vi) {
-                debug << "Checking vertex " << graph.graph[(*vi)].id << '\n';
-                if (is_linear(graph, *vi, debug)) {
-                    // debug << "Adding " << graph.graph[(*vi)].id << " to linear" << '\n';
-                    linearVertices += (*vi);
-                }
-            }
-            linearVertices -= forbiddenVertices;
+template < class G >
+void Pgr_linear<G>::calculateVertices(G &graph) {
+    debug << "Calculating vertices\n";
+    V_i vi;
+    for (vi = vertices(graph.graph).first;
+            vi != vertices(graph.graph).second;
+            ++vi) {
+        debug << "Checking vertex " << graph.graph[(*vi)].id << '\n';
+        if (is_linear(graph, *vi)) {
+            linearVertices += (*vi);
         }
+    }
+    linearVertices -= forbiddenVertices;
+}
 
 
 
-    template < class G >
-        void Pgr_linearContraction<G>::doContraction(G &graph,
-                std::ostringstream& debug) {
-            std::ostringstream contraction_debug;
-            contraction_debug << "Performing contraction\n";
-            std::priority_queue<V, std::vector<V>, std::greater<V> > linearPriority;
-            for (V linearVertex : linearVertices) {
-                linearPriority.push(linearVertex);
+template < class G >
+void Pgr_linear<G>::doContraction(G &graph) {
+    std::ostringstream contraction_debug;
+    contraction_debug << "Performing contraction\n";
+    std::priority_queue<V, std::vector<V>, std::greater<V> > linearPriority;
+    for (const auto linearVertex : linearVertices) {
+        linearPriority.push(linearVertex);
+    }
+    contraction_debug << "Linear vertices" << std::endl;
+    for (const auto v : linearVertices) {
+        contraction_debug << graph[v].id << ", ";
+    }
+    contraction_debug << std::endl;
+    while (!linearPriority.empty()) {
+        V current_vertex = linearPriority.top();
+        linearPriority.pop();
+        if (!is_linear(graph, current_vertex)) {
+            linearVertices -= current_vertex;
+            continue;
+        }
+        Identifiers<V> adjacent_vertices =
+            graph.find_adjacent_vertices(current_vertex);
+        pgassert(adjacent_vertices.size() == 2);
+        V vertex_1 = adjacent_vertices[0];
+        V vertex_2 = adjacent_vertices[1];
+        contraction_debug << "Adjacent vertices\n";
+        contraction_debug << graph[vertex_1].id
+            << ", " << graph[vertex_2].id
+            << std::endl;
+
+        if (graph.m_gType == DIRECTED) {
+            if (graph.out_degree_to_vertex(vertex_1, current_vertex) > 0 &&
+                    graph.in_degree_from_vertex(vertex_2, current_vertex) > 0) {
+                E e1 = graph.get_min_cost_edge(vertex_1,
+                        current_vertex);
+                E e2 = graph.get_min_cost_edge(current_vertex,
+                        vertex_2);
+                add_shortcut(graph, current_vertex, e1, e2);
             }
-            contraction_debug << "Linear vertices" << std::endl;
-            for (auto v : linearVertices) {
-                contraction_debug << graph[v].id << ", ";
+
+            if (graph.out_degree_to_vertex(vertex_2, current_vertex) > 0 &&
+                    graph.in_degree_from_vertex(vertex_1, current_vertex) > 0) {
+                E e1 = graph.get_min_cost_edge(vertex_2,
+                        current_vertex);
+                E e2 = graph.get_min_cost_edge(current_vertex,
+                        vertex_1);
+                add_shortcut(graph, current_vertex, e1, e2);
             }
-            contraction_debug << std::endl;
-            while (!linearPriority.empty()) {
-                V current_vertex = linearPriority.top();
-                linearPriority.pop();
-                if (!is_linear(graph, current_vertex, debug)) {
-                    linearVertices -= current_vertex;
-                    continue;
-                }
-                Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(current_vertex);
-                pgassert(adjacent_vertices.size() == 2);
-                V vertex_1 = adjacent_vertices[0];
-                V vertex_2 = adjacent_vertices[1];
-                contraction_debug << "Adjacent vertices\n";
-                contraction_debug << graph[vertex_1].id << ", " << graph[vertex_2].id << std::endl;
-                
-                if (graph.m_gType == DIRECTED) {
-                    if (graph.out_degree_to_vertex(vertex_1, current_vertex) > 0
-                            && graph.in_degree_from_vertex(vertex_2, current_vertex) > 0) {
-                        E e1 = graph.get_min_cost_edge(vertex_1,
-                                current_vertex);
-                        E e2 = graph.get_min_cost_edge(current_vertex,
-                                vertex_2);
-                        add_shortcut(graph, current_vertex, e1, e2, contraction_debug);
-                    }
-
-                    if (graph.out_degree_to_vertex(vertex_2, current_vertex) > 0
-                            && graph.in_degree_from_vertex(vertex_1, current_vertex) > 0) {
-                        E e1 = graph.get_min_cost_edge(vertex_2,
-                                current_vertex);
-                        E e2 = graph.get_min_cost_edge(current_vertex,
-                                vertex_1);
-                        add_shortcut(graph, current_vertex, e1, e2, contraction_debug);
-                    }
-                } else if (graph.m_gType == UNDIRECTED) {
-                    if (graph.out_degree_to_vertex(vertex_1, current_vertex) > 0
-                            && graph.in_degree_from_vertex(vertex_2, current_vertex) > 0) {
-                        contraction_debug << "UNDIRECTED graph before contraction\n";
-                        graph.print_graph(contraction_debug);
-                        E e1 = graph.get_min_cost_edge(vertex_1,
-                                current_vertex);
-                        E e2 = graph.get_min_cost_edge(current_vertex,
-                                vertex_2);
-                        add_shortcut(graph, current_vertex, e1, e2, contraction_debug);
-                    }
-                }
-
-                graph.disconnect_vertex(contraction_debug, current_vertex);
-                linearVertices -= current_vertex;
-                if (is_linear(graph, vertex_1, debug)
-                        && !forbiddenVertices.has(vertex_1)) {
-                    linearPriority.push(vertex_1);
-                    linearVertices += vertex_1;
-                }
-                if (is_linear(graph, vertex_2, debug)
-                        && !forbiddenVertices.has(vertex_2)) {
-                    linearPriority.push(vertex_2);
-                    linearVertices += vertex_2;
-                }
+        } else if (graph.m_gType == UNDIRECTED) {
+            if (graph.out_degree_to_vertex(vertex_1, current_vertex) > 0 &&
+                    graph.in_degree_from_vertex(vertex_2, current_vertex) > 0) {
+                contraction_debug << "UNDIRECTED graph before contraction\n";
+                graph.print_graph(contraction_debug);
+                E e1 = graph.get_min_cost_edge(vertex_1,
+                        current_vertex);
+                E e2 = graph.get_min_cost_edge(current_vertex,
+                        vertex_2);
+                add_shortcut(graph, current_vertex, e1, e2);
             }
-            debug << contraction_debug.str().c_str() << "\n";
         }
 
-
-
-    template < class G >
-        void Pgr_linearContraction<G>::add_shortcut(G &graph, V vertex,
-                E incoming_edge,
-                E outgoing_edge,
-                std::ostringstream& debug) {
-            if (graph.m_gType == UNDIRECTED) {
-                Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(vertex);
-                V vertex_1 = adjacent_vertices[0];
-                V vertex_2 = adjacent_vertices[1];
-                E shortcut_E;
-                contraction::Edge shortcut(get_next_id(), graph[vertex_1].id,
-                        graph[vertex_2].id,
-                        graph[incoming_edge].cost + graph[outgoing_edge].cost);
-                shortcut.add_contracted_vertex(graph[vertex], vertex);
-                shortcut.add_contracted_edge_vertices(graph[incoming_edge]);
-                shortcut.add_contracted_edge_vertices(graph[outgoing_edge]);
-                debug << "Adding shortcut\n";
-                debug << shortcut;
-                graph.graph_add_shortcut(shortcut, debug);
-                debug << "Added shortcut\n";
-            } else if (graph.m_gType == DIRECTED) {
-                contraction::Edge shortcut(get_next_id(), graph[incoming_edge].source,
-                        graph[outgoing_edge].target,
-                        graph[incoming_edge].cost + graph[outgoing_edge].cost);
-                shortcut.add_contracted_vertex(graph[vertex], vertex);
-                shortcut.add_contracted_edge_vertices(graph[incoming_edge]);
-                shortcut.add_contracted_edge_vertices(graph[outgoing_edge]);
-                debug << "Adding shortcut\n";
-                debug << shortcut;
-                graph.graph_add_shortcut(shortcut, debug);
-                debug << "Added shortcut\n";
-            }
+        graph.disconnect_vertex(current_vertex);
+        linearVertices -= current_vertex;
+        if (is_linear(graph, vertex_1)
+                && !forbiddenVertices.has(vertex_1)) {
+            linearPriority.push(vertex_1);
+            linearVertices += vertex_1;
         }
-        template < class G >
-        void Pgr_linearContraction<G>::add_shortcut(G &graph,
-                pgrouting::contraction::Edge &shortcut,
-                std::ostringstream& debug) {
-                graph.graph_add_shortcut(shortcut, debug);
+        if (is_linear(graph, vertex_2)
+                && !forbiddenVertices.has(vertex_2)) {
+            linearPriority.push(vertex_2);
+            linearVertices += vertex_2;
         }
+    }
+    debug << contraction_debug.str().c_str() << "\n";
+}
 
+
+/*! \brief add edges(shortuct) to the graph during contraction
+
+  a --incomming--> b ---outgoing--> c
+
+  a -> c
+
+  edge (a, c) is a new edge: @b shortcut
+  e.contracted_vertices = b + b.contracted vertices
+  b is "removed" disconnected from the graph
+  - by removing all edges to/from b
+  */
+
+template < class G >
+void
+Pgr_linear<G>::add_shortcut(
+        G &graph, V vertex,
+        E incoming_edge,
+        E outgoing_edge) {
+    pgassert(incoming_edge != outgoing_edge);
+
+    auto a = graph.adjacent(vertex, incoming_edge);
+    auto c = graph.adjacent(vertex, outgoing_edge);
+    pgassert(a != vertex);
+    pgassert(a != c);
+    pgassert(vertex != c);
+
+    if (graph.is_undirected()) {
+        Identifiers<V> adjacent_vertices = graph.find_adjacent_vertices(vertex);
+        V vertex_1 = adjacent_vertices[0];
+        V vertex_2 = adjacent_vertices[1];
+        E shortcut_E;
+        CH_edge shortcut(get_next_id(), graph[vertex_1].id,
+                graph[vertex_2].id,
+                graph[incoming_edge].cost + graph[outgoing_edge].cost);
+        shortcut.add_contracted_vertex(graph[vertex], vertex);
+        shortcut.add_contracted_edge_vertices(graph[incoming_edge]);
+        shortcut.add_contracted_edge_vertices(graph[outgoing_edge]);
+        debug << "Adding shortcut\n";
+        debug << shortcut;
+        graph.add_shortcut(shortcut);
+        debug << "Added shortcut\n";
+    } else {
+        CH_edge shortcut(
+                get_next_id(),
+                graph[a].id,
+                graph[c].id,
+                graph[incoming_edge].cost + graph[outgoing_edge].cost);
+        shortcut.add_contracted_vertex(graph[vertex], vertex);
+        shortcut.add_contracted_edge_vertices(graph[incoming_edge]);
+        shortcut.add_contracted_edge_vertices(graph[outgoing_edge]);
+        debug << "Adding shortcut\n";
+        debug << shortcut;
+        graph.add_shortcut(shortcut);
+        debug << "Added shortcut\n";
+    }
+}
+template < class G >
+void Pgr_linear<G>::add_shortcut(G &graph,
+        pgrouting::CH_edge &shortcut) {
+    graph.add_shortcut(shortcut);
+}
+
+}  // namespace contraction
 }  // namespace pgrouting
+
+#endif  // SRC_CONTRACTION_SRC_PGR_LINEARCONTRACTION_HPP_
diff --git a/src/contraction/src/structs.h b/src/contraction/src/structs.h
deleted file mode 100644
index 6be78fb..0000000
--- a/src/contraction/src/structs.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: structs.h
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2016 Rohith Reddy
-Mail: 
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-#ifndef SRC_CONTRACTION_SRC_STRUCTS_H_
-#define SRC_CONTRACTION_SRC_STRUCTS_H_
-
-#ifndef __cplusplus
-#include "postgres.h"
-#endif
-#include <stdint.h>
-
-typedef struct {
-    int64_t seq;
-    int64_t id;
-    char *type;
-    int64_t source;
-    int64_t target;
-    double cost;
-    int64_t *contracted_vertices;
-    int contracted_vertices_size;
-} pgr_contracted_blob;
-
-
-#endif  // SRC_CONTRACTION_SRC_STRUCTS_H_
diff --git a/src/contraction/test/directed-deadend.result b/src/contraction/test/directed-deadend.result
new file mode 100644
index 0000000..34baa1d
--- /dev/null
+++ b/src/contraction/test/directed-deadend.result
@@ -0,0 +1,11 @@
+--q1 Checking dead end contraction for single edge
+1|v|2|{1}|-1|-1|-1
+--q2 Checking dead end contraction for two edges
+1|v|3|{1,2}|-1|-1|-1
+--q3 Checking dead end contraction for sample data
+1|v|2|{1}|-1|-1|-1
+2|v|5|{7,8}|-1|-1|-1
+3|v|10|{13}|-1|-1|-1
+4|v|15|{14}|-1|-1|-1
+5|v|17|{16}|-1|-1|-1
+--q5 Checking dead end contraction for a graph with no dead end vertex
diff --git a/src/contraction/test/directed-deadend.test.sql b/src/contraction/test/directed-deadend.test.sql
new file mode 100644
index 0000000..117ad16
--- /dev/null
+++ b/src/contraction/test/directed-deadend.test.sql
@@ -0,0 +1,44 @@
+
+
+/*
+\echo --q0 Checking for valid contraction
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 1',
+    ARRAY[-1]::integer[], 1, ARRAY[]::BIGINT[], true);
+*/
+-- \echo --q0 -------------------------------------------
+
+\echo --q1 Checking dead end contraction for single edge
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 1',
+    ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q1 -------------------------------------------
+
+\echo --q2 Checking dead end contraction for two edges
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id < 3',
+    ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q2 -------------------------------------------
+
+\echo --q3 Checking dead end contraction for sample data
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q3 -------------------------------------------
+
+/*
+-- this test fails becuse parameter is wrong
+\echo --q4 Checking that forbidden vertices can only be one dimensional or empty
+SELECT * FROM pgr_contractGraph(
+	'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 1',
+	ARRAY[ [2,3,4,5], [4,5,6,7] ]::BIGINT[][], ARRAY[0]::integer[], 1, true);
+-- \echo --q4 -------------------------------------------
+*/
+
+\echo --q5 Checking dead end contraction for a graph with no dead end vertex
+SELECT * FROM pgr_contractGraph(
+	'SELECT id, source, target, cost, reverse_cost FROM edge_table 
+	WHERE id = 2 OR id = 4 OR id = 5 OR id = 8',
+	ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q5 -------------------------------------------
+
diff --git a/src/contraction/test/directed-development.result b/src/contraction/test/directed-development.result
index 952269c..6a1b034 100644
--- a/src/contraction/test/directed-development.result
+++ b/src/contraction/test/directed-development.result
@@ -1,4 +1,3 @@
---q0 Checking for valid contraction
 --q1 Checking dead end contraction for single edge
 1|v|2|{1}|-1|-1|-1
 --q2 Checking dead end contraction for two edges
@@ -34,17 +33,18 @@
 7|e|-4|{12}|11|9|2
 --q12 Checking linear contraction, dead end for sample data
 1|v|2|{1}|-1|-1|-1
-2|v|10|{13}|-1|-1|-1
-3|v|15|{14}|-1|-1|-1
-4|v|17|{16}|-1|-1|-1
-5|e|-1|{4}|9|3|2
-6|e|-2|{8}|5|7|2
-7|e|-3|{8}|7|5|2
-8|e|-4|{12}|11|9|2
+2|v|5|{7,8}|-1|-1|-1
+3|v|10|{13}|-1|-1|-1
+4|v|15|{14}|-1|-1|-1
+5|v|17|{16}|-1|-1|-1
+6|e|-1|{4}|9|3|2
+7|e|-2|{8}|5|7|2
+8|e|-3|{8}|7|5|2
+9|e|-4|{12}|11|9|2
 --q13 Checking linear contraction for a square like graph
 1|e|-1|{2}|3|5|2
 2|e|-2|{2,5}|3|6|3
 --q14 Checking linear contraction, dead end for a square like graph
 1|v|3|{2,5,6}|-1|-1|-1
 2|e|-1|{2}|3|5|2
-3|e|-2|{2,5}|3|6|3
\ No newline at end of file
+3|e|-2|{2,5}|3|6|3
diff --git a/src/contraction/test/directed-development.test.sql b/src/contraction/test/directed-development.test.sql
index e527df4..11de63a 100644
--- a/src/contraction/test/directed-development.test.sql
+++ b/src/contraction/test/directed-development.test.sql
@@ -1,60 +1,93 @@
-BEGIN;
-SET client_min_messages TO WARNING;
-
 
+/*
+-- this test fails becuse parameter is wrong
 \echo --q0 Checking for valid contraction
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 1',
     ARRAY[-1]::integer[], 1, ARRAY[]::BIGINT[], true);
+*/
 -- \echo --q0 -------------------------------------------
 
 \echo --q1 Checking dead end contraction for single edge
+-- GRAPH: 1 <=> 2
+-- EXPECTED
+--    1 | v    |  2 | {1}                 |     -1 |     -1 |   -1
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 1',
     ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+
+
 -- \echo --q1 -------------------------------------------
 
 \echo --q2 Checking dead end contraction for two edges
+--GRAPH: 1 <=> 2 <- 3 
+-- EXPECTED
+--   1 | v    |  3 | {1,2}               |     -1 |     -1 |   -1
+
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id < 3',
     ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+
+
 -- \echo --q2 -------------------------------------------
 
 \echo --q3 Checking dead end contraction for sample data
+
+-- EXPECTED
+--   1 | v    |  2 | {1}                 |     -1 |     -1 |   -1
+--   2 | v    |  5 | {7,8}               |     -1 |     -1 |   -1
+--   3 | v    | 10 | {13}                |     -1 |     -1 |   -1
+--   4 | v    | 15 | {14}                |     -1 |     -1 |   -1
+--   5 | v    | 17 | {16}                |     -1 |     -1 |   -1
+
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table',
     ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
--- \echo --q3 -------------------------------------------
 
-/*
--- this test fails becuse parameter is wrong
-\echo --q4 Checking that forbidden vertices can only be one dimensional or empty
-SELECT * FROM pgr_contractGraph(
-	'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 1',
-	ARRAY[ [2,3,4,5], [4,5,6,7] ]::BIGINT[][], ARRAY[0]::integer[], 1, true);
--- \echo --q4 -------------------------------------------
-*/
+
+-- \echo --q3 -------------------------------------------
 
 \echo --q5 Checking dead end contraction for a graph with no dead end vertex
+-- 5 <- 6 
+-- "    ^
+-- 2 <- 3 
+
+-- EXPECTED
+-- (empty)
+
 SELECT * FROM pgr_contractGraph(
 	'SELECT id, source, target, cost, reverse_cost FROM edge_table 
 	WHERE id = 2 OR id = 4 OR id = 5 OR id = 8',
 	ARRAY[1]::integer[], 1, ARRAY[]::BIGINT[], true);
+
 -- \echo --q5 -------------------------------------------
 
 \echo --q6 Checking for linear vertices case 1
+-- GRPAH 1 <=> 2 
+-- EXPECTED
+--   1 | e    | -1 | {3}                 |      4 |      6 |    2
+
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table 
     WHERE id = 3 OR id = 5',
     ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+
 -- \echo --q6 -------------------------------------------
 
 
 \echo --q7 Checking for linear vertices case 2
+-- GRAPH 10 <=> 5 <=> 6 
+-- EXPECTED
+--   1 | e    | -1 | {5}                 |      6 |     10 |    2
+--   2 | e    | -2 | {5}                 |     10 |      6 |    2
+-- New edges:  6 <=> 10
+
+
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table 
     WHERE id = 8 OR id = 10',
     ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+
 -- \echo --q7 -------------------------------------------
 
 
@@ -97,6 +130,16 @@ SELECT * FROM pgr_contractGraph(
 -- \echo --q13 -------------------------------------------
 
 \echo --q14 Checking linear contraction, dead end for a square like graph
+-- GRAPH
+-- 5 <- 6 
+-- "    ^
+-- 2 <- 3 
+-- 1|v|3|{2,5,6}|-1|-1|-1
+-- 2|e|-1|{2}|3|5|2
+-- 3|e|-2|{2,5}|3|6|3
+
+-- 3 -> 5 
+
 SELECT * FROM pgr_contractGraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table 
     WHERE id = 2 OR id = 4 OR id = 5 OR id = 8',
@@ -104,4 +147,3 @@ SELECT * FROM pgr_contractGraph(
 
 
 
-ROLLBACK;
diff --git a/src/contraction/test/directed-linear.result b/src/contraction/test/directed-linear.result
new file mode 100644
index 0000000..99d451f
--- /dev/null
+++ b/src/contraction/test/directed-linear.result
@@ -0,0 +1,17 @@
+--q6 Checking for linear vertices case 1
+1|e|-1|{3}|4|6|2
+--q7 Checking for linear vertices case 2
+1|e|-1|{5}|6|10|2
+2|e|-2|{5}|10|6|2
+--q8 Checking for linear vertices case 3
+1|e|-1|{2}|3|5|2
+--q9 Checking for linear vertices case 4
+1|e|-1|{6}|3|9|2
+--q10 Checking linear contraction for sample data
+1|e|-1|{4}|9|3|2
+2|e|-2|{8}|5|7|2
+3|e|-3|{8}|7|5|2
+4|e|-4|{12}|11|9|2
+--q13 Checking linear contraction for a square like graph
+1|e|-1|{2}|3|5|2
+2|e|-2|{2,5}|3|6|3
diff --git a/src/contraction/test/directed-linear.test.sql b/src/contraction/test/directed-linear.test.sql
new file mode 100644
index 0000000..9eb7af6
--- /dev/null
+++ b/src/contraction/test/directed-linear.test.sql
@@ -0,0 +1,45 @@
+
+\echo --q6 Checking for linear vertices case 1
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table 
+    WHERE id = 3 OR id = 5',
+    ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q6 -------------------------------------------
+
+
+\echo --q7 Checking for linear vertices case 2
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table 
+    WHERE id = 8 OR id = 10',
+    ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q7 -------------------------------------------
+
+
+\echo --q8 Checking for linear vertices case 3
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table 
+    WHERE id = 2 OR id = 4',
+    ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q8 -------------------------------------------
+
+\echo --q9 Checking for linear vertices case 4
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table 
+    WHERE id = 5 OR id = 9',
+    ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q9 -------------------------------------------
+
+\echo --q10 Checking linear contraction for sample data
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table' ,
+    ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q10 -------------------------------------------
+
+
+\echo --q13 Checking linear contraction for a square like graph
+SELECT * FROM pgr_contractGraph(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table 
+    WHERE id = 2 OR id = 4 OR id = 5 OR id = 8',
+    ARRAY[2]::integer[], 1, ARRAY[]::BIGINT[], true);
+-- \echo --q13 -------------------------------------------
+
diff --git a/src/contraction/test/doc-contractGraph.test.sql b/src/contraction/test/doc-contractGraph.test.sql
index 7715be9..59d4c71 100644
--- a/src/contraction/test/doc-contractGraph.test.sql
+++ b/src/contraction/test/doc-contractGraph.test.sql
@@ -18,4 +18,4 @@ ARRAY[1]);
     'SELECT id, source, target, cost, reverse_cost FROM edge_table',
 ARRAY[2]);
 
-\echo -- q5
\ No newline at end of file
+\echo -- q5
diff --git a/src/contraction/test/doc-contraction.test.sql b/src/contraction/test/doc-contraction.test.sql
index 7731ced..a576b15 100644
--- a/src/contraction/test/doc-contraction.test.sql
+++ b/src/contraction/test/doc-contraction.test.sql
@@ -2,13 +2,14 @@
 SELECT id, source, target, cost, reverse_cost FROM edge_table;
 \echo -- q01
 
-SET client_min_messages TO error;
+SET client_min_messages TO ERROR;
 \echo -- q1
 ALTER TABLE edge_table ADD contracted_vertices BIGINT[];
 ALTER TABLE edge_table_vertices_pgr ADD contracted_vertices BIGINT[];
 ALTER TABLE edge_table ADD is_contracted BOOLEAN DEFAULT false;
 ALTER TABLE edge_table_vertices_pgr ADD is_contracted BOOLEAN DEFAULT false;
 
+SET client_min_messages TO NOTICE;
 \echo -- q2
 -- showing original results
 SELECT * FROM pgr_contractGraph(
diff --git a/src/contraction/test/expand_graph.test.sql b/src/contraction/test/expand_graph.test.sql
index 1acf978..3df993e 100644
--- a/src/contraction/test/expand_graph.test.sql
+++ b/src/contraction/test/expand_graph.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 \echo 'step 1: Initial edge table'
 
@@ -168,53 +167,3 @@ END;
    $total$ LANGUAGE plpgsql;
 
 
-/*
--- Testing the update function
-   SELECT * FROM pgr_update_contraction_columns(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    ARRAY[]::BIGINT[], ARRAY[0, 1]::integer[], 1, true );
-
-SELECT  'step 9: Creating the edge table and vertex table of the contracted graph';
-
-CREATE TABLE contracted_edge_table_vertices_pgr AS
-SELECT *
-FROM edge_table_vertices_pgr WHERE is_contracted = false;
-
-CREATE TABLE contracted_edge_table AS
-SELECT *
-FROM edge_table WHERE source IN (SELECT id FROM contracted_edge_table_vertices_pgr)
-AND target IN (SELECT id FROM contracted_edge_table_vertices_pgr);
-
-SELECT 'step 10: Edge table after modification';
-
-SELECT id, source, target, cost, reverse_cost, is_contracted, contracted_vertices FROM edge_table ORDER BY id;
-
-SELECT 'step 11: Vertex table after modification';
-
-SELECT id, is_contracted, contracted_vertices FROM edge_table_vertices_pgr  ORDER BY id;
-
-SELECT 'step 12: Edge table representing the contracted graph';
-
-SELECT id, source, target, cost, reverse_cost, is_contracted, contracted_vertices FROM contracted_edge_table  ORDER BY id;
-
-SELECT 'step 13: Vertex table representing the contracted graph';
-
-SELECT id, is_contracted, contracted_vertices FROM contracted_edge_table_vertices_pgr  ORDER BY id;
-
-SELECT 'step 14: Expanding the contracted graph......';
-
--- Testing the expand function
-   SELECT * FROM pgr_expand_contracted_graph(
-    'edge_table', 'edge_table_vertices_pgr',
-    'contracted_edge_table', 'contracted_edge_table_vertices_pgr');
-
-SELECT 'step 15: Edge table representing the expanded graph';
-
-SELECT id, source, target, cost, reverse_cost, is_contracted, contracted_vertices FROM contracted_edge_table  ORDER BY id;
-
-SELECT 'step 16: Vertex table representing the expanded graph';
-
-SELECT id, is_contracted, contracted_vertices FROM contracted_edge_table_vertices_pgr  ORDER BY id;
-*/
-
-ROLLBACK;
diff --git a/src/contraction/test/expand_graph_without_function.test.sql b/src/contraction/test/expand_graph_without_function.test.sql
index a4bfbf5..998f7d9 100644
--- a/src/contraction/test/expand_graph_without_function.test.sql
+++ b/src/contraction/test/expand_graph_without_function.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 SELECT 'step 1: Initial edge table';
 
@@ -34,53 +33,3 @@ SELECT 'step 8: Vertex table after adding columns';
 
 SELECT id, is_contracted, contracted_vertices FROM edge_table_vertices_pgr;
 
-
-/*
--- Testing the update function
-   SELECT * FROM pgr_update_contraction_columns(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    ARRAY[]::BIGINT[], ARRAY[0, 1]::integer[], 1, true );
-
-SELECT  'step 9: Creating the edge table and vertex table of the contracted graph';
-
-CREATE TABLE contracted_edge_table_vertices_pgr AS
-SELECT *
-FROM edge_table_vertices_pgr WHERE is_contracted = false;
-
-CREATE TABLE contracted_edge_table AS
-SELECT *
-FROM edge_table WHERE source IN (SELECT id FROM contracted_edge_table_vertices_pgr)
-AND target IN (SELECT id FROM contracted_edge_table_vertices_pgr);
-
-SELECT 'step 10: Edge table after modification';
-
-SELECT id, source, target, cost, reverse_cost, is_contracted, contracted_vertices FROM edge_table ORDER BY id;
-
-SELECT 'step 11: Vertex table after modification';
-
-SELECT id, is_contracted, contracted_vertices FROM edge_table_vertices_pgr  ORDER BY id;
-
-SELECT 'step 12: Edge table representing the contracted graph';
-
-SELECT id, source, target, cost, reverse_cost, is_contracted, contracted_vertices FROM contracted_edge_table  ORDER BY id;
-
-SELECT 'step 13: Vertex table representing the contracted graph';
-
-SELECT id, is_contracted, contracted_vertices FROM contracted_edge_table_vertices_pgr  ORDER BY id;
-
-SELECT 'step 14: Expanding the contracted graph......';
-
--- Testing the expand function
-   SELECT * FROM pgr_expand_contracted_graph(
-    'edge_table', 'edge_table_vertices_pgr',
-    'contracted_edge_table', 'contracted_edge_table_vertices_pgr');
-
-SELECT 'step 15: Edge table representing the expanded graph';
-
-SELECT id, source, target, cost, reverse_cost, is_contracted, contracted_vertices FROM contracted_edge_table  ORDER BY id;
-
-SELECT 'step 16: Vertex table representing the expanded graph';
-
-SELECT id, is_contracted, contracted_vertices FROM contracted_edge_table_vertices_pgr  ORDER BY id;
-*/
-ROLLBACK;
diff --git a/src/contraction/test/pgtap/contraction-types-check.sql b/src/contraction/test/pgtap/contraction-types-check.sql
index 40827db..bead151 100644
--- a/src/contraction/test/pgtap/contraction-types-check.sql
+++ b/src/contraction/test/pgtap/contraction-types-check.sql
@@ -215,7 +215,7 @@ SELECT * FROM pgr_contractgraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table',
 ARRAY[1]::smallint[], 1, ARRAY[ ]::bigint[]);
 
-SELECT throws_ok('q1', 'XX000', 'Expected less than two dimension',
+SELECT throws_ok('q1', 'XX000', 'One dimension expected',
 'Throws because forbidden_vertices is BIGINT[][]');
 
 SELECT throws_ok('q2', 'XX000', 'One dimension expected',
@@ -234,4 +234,4 @@ SELECT lives_ok('q12');
 SELECT lives_ok('q13');
 
 SELECT finish();
-ROLLBACK;
\ No newline at end of file
+ROLLBACK;
diff --git a/src/contraction/test/pgtap/directed_dead_end.sql b/src/contraction/test/pgtap/directed_dead_end.sql
index a06416c..8c752bd 100644
--- a/src/contraction/test/pgtap/directed_dead_end.sql
+++ b/src/contraction/test/pgtap/directed_dead_end.sql
@@ -22,7 +22,7 @@ PREPARE v2e1q11 AS
 SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  
 FROM ( VALUES (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
 
-SELECT set_eq('v2e1q10', 'v2e1q11', '1: Directed graph with single edge and no forbidden vertices');
+SELECT set_eq('v2e1q10', 'v2e1q11', 'SINGLE EDGE 1: Directed graph with single edge and no forbidden vertices');
 
 -- 1 is forbidden vertex
 
@@ -37,7 +37,7 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
 FROM ( VALUES (1, 'v', 1, ARRAY[2]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
 
 
-SELECT set_eq('v2e1q20', 'v2e1q21', '1: Directed graph with single edge and 1 as forbidden vertex');
+SELECT set_eq('v2e1q20', 'v2e1q21', 'SINGLE EDGE 2: Directed graph with single edge and 1 as forbidden vertex');
 
 
 -- TWO EDGES
@@ -52,7 +52,7 @@ PREPARE v3e2q11 AS
 SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  
 FROM ( VALUES (1, 'v', 4, ARRAY[2, 3]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
 
-SELECT set_eq('v3e2q10', 'v3e2q11', '1: Directed graph two edges and no forbidden vertices');
+SELECT set_eq('v3e2q10', 'v3e2q11', 'TWO EDGES 1: Directed graph two edges and no forbidden vertices');
 
 -- 3 is forbidden
 PREPARE v3e2q20 AS
@@ -62,9 +62,9 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
 
 PREPARE v3e2q21 AS
 SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  
-FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
+FROM ( VALUES (1, 'v', 3, ARRAY[2,4]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
 
-SELECT set_eq('v3e2q20', 'v3e2q21', '2: Directed graph with two edges and vertex 3 as forbidden vertex');
+SELECT set_eq('v3e2q20', 'v3e2q21', 'TWO EDGES 2: Directed graph with two edges and vertex 3 as forbidden vertex');
 
 -- 2 is forbidden
 PREPARE v3e2q30 AS
@@ -72,7 +72,11 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 2 OR id = 3',
     ARRAY[1]::INTEGER[], 1, ARRAY[2]::integer[], true);
 
-SELECT set_eq('v3e2q30', 'qempty', '2: Directed graph with two edges and vertex 2 as forbidden vertex');
+PREPARE v3e2q31 AS
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  
+FROM ( VALUES (1, 'v', 2, ARRAY[3,4]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
+
+SELECT set_eq('v3e2q30', 'v3e2q31', 'TWO EDGES 3: Directed graph with two edges and vertex 2 as forbidden vertex');
 
 -- no forbidden vertices
 PREPARE v3e2q40 AS
@@ -81,8 +85,11 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::integer[], 1, ARRAY[]::integer[], true);
 
 PREPARE v3e2q41 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 6, ARRAY[11]::bigint[], -1, -1, -1), (2, 'v', 10, ARRAY[11]::integer[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
-SELECT set_eq('v3e2q40', 'v3e2q41', '3: Directed graph with two edges and no forbidden vertices');
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  
+FROM (VALUES (1, 'v', 10, ARRAY[6,11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
+
+SELECT set_eq('v3e2q40', 'v3e2q41', 'TWO EDGES 4: Directed graph with two edges and no forbidden vertices');
+
 
 -- 11 is forbidden
 PREPARE v3e2q50 AS
@@ -90,7 +97,11 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 11 or id = 12',
     ARRAY[1]::INTEGER[], 1, ARRAY[11]::integer[], true);
 
-SELECT set_eq('v3e2q50', 'qempty', '3: Directed graph with two edges and vertex 11 as forbidden vertex');
+PREPARE v3e2q51 AS
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  
+FROM (VALUES (1, 'v', 11, ARRAY[6,10]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost ) ;
+
+SELECT set_eq('v3e2q50', 'v3e2q51', 'TWO EDGES 5: Directed graph with two edges and no forbidden vertices');
 
 -- no forbidden
 PREPARE v3e2q60 AS
@@ -99,9 +110,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::integer[], 1, ARRAY[]::integer[], true);
 
 PREPARE v3e2q61 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1), (2, 'v', 10, ARRAY[11]::integer[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v3e2q60', 'v3e2q61', '4: Directed graph with two edges and no forbidden vertices');
+SELECT set_eq('v3e2q60', 'v3e2q61', 'TWO EDGES 6: Directed graph with two edges and no forbidden vertices');
 
 -- 2 is forbidden
 PREPARE v3e2q70 AS
@@ -110,9 +125,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[2]::integer[], true);
 
 PREPARE v3e2q71 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 10, ARRAY[11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[3]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v3e2q70', 'v3e2q71', '4: Directed graph with two edges and 2 is forbidden vertex');
+SELECT set_eq('v3e2q70', 'v3e2q71', 'TWO EDGES 7: Directed graph with two edges and 2 is forbidden vertex');
 
 -- 11 is forbidden
 PREPARE v3e2q80 AS
@@ -121,9 +140,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[11]::integer[], true);
 
 PREPARE v3e2q81 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v3e2q80', 'v3e2q81', '4: Directed graph with two edges and 11 is forbidden vertex');
+SELECT set_eq('v3e2q80', 'v3e2q81', 'TWO EDGES 8: Directed graph with two edges and 11 is forbidden vertex');
 
 
 -- THREE EDGES
@@ -134,9 +157,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::integer[], 1, ARRAY[]::integer[], true);
 
 PREPARE v4e3q11 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[6, 11, 12]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 12, ARRAY[3, 6, 11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e3q10', 'v4e3q11', '5: Directed graph with three edges and no forbidden vertices');
+SELECT set_eq('v4e3q10', 'v4e3q11', 'THREE EDGES 1: Directed graph with three edges and no forbidden vertices');
 
 -- 3 is forbidden
 PREPARE v4e3q20 AS
@@ -145,9 +171,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3]::integer[], true);
 
 PREPARE v4e3q21 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[6, 11, 12]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[6, 11, 12]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v4e3q20', 'v4e3q21', 'THREE EDGES 2: Directed graph with three edges and 3 is forbidden vertex');
 
-SELECT set_eq('v4e3q20', 'v4e3q21', '5: Directed graph with three edges and 3 is forbidden vertex');
 
 -- 6 is forbidden
 PREPARE v4e3q30 AS
@@ -156,9 +186,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[6]::integer[], true);
 
 PREPARE v4e3q31 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 6, ARRAY[11, 12]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 6, ARRAY[3, 11, 12]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v4e3q30', 'v4e3q31', 'THREE EDGES 3: Directed graph with three edges and 6 is forbidden vertex');
 
-SELECT set_eq('v4e3q30', 'v4e3q31', '5: Directed graph with three edges and 6 is forbidden vertex');
 
 -- 11 is forbidden
 PREPARE v4e3q40 AS
@@ -167,16 +201,19 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[11]::integer[], true);
 
 PREPARE v4e3q41 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 11, ARRAY[12]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
-SELECT set_eq('v4e3q40', 'v4e3q41', '5: Directed graph with three edges and 11 is forbidden vertex');
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 11, ARRAY[3,6,12]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT set_eq('v4e3q40', 'v4e3q41', 'THREE EDGES 4: Directed graph with three edges and 11 is forbidden vertex');
 
 -- 12 is forbidden
 PREPARE v4e3q50 AS
 SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM pgr_contractgraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 5 or id = 11 or id = 13',
-    ARRAY[1]::INTEGER[], 1, ARRAY[12]::integer[], true);
+    ARRAY[1]::INTEGER[], 1, ARRAY[3,6,12]::integer[], true);
 
-SELECT set_eq('v4e3q50', 'qempty', '5: Directed graph with three edges and 12 is forbidden vertex');
+SELECT set_eq('v4e3q50', 'qempty', 'THREE EDGES 5: Directed graph with three edges and 12 is forbidden vertex');
 
 -- no forbidden vertices
 PREPARE v5e3q10 AS
@@ -185,9 +222,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::integer[], 1, ARRAY[]::integer[], true);
 
 PREPARE v5e3q11 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 4, ARRAY[2, 3]::bigint[], -1, -1, -1), (2, 'v', 10, ARRAY[11]::integer[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 4, ARRAY[2, 3]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v5e3q10', 'v5e3q11', '7: Directed graph with three edges and no forbidden vertices');
+SELECT set_eq('v5e3q10', 'v5e3q11', 'THREE EDGES 6: Directed graph with three edges and no forbidden vertices');
 
 -- 11 is forbidden
 PREPARE v5e3q20 AS
@@ -196,9 +237,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[11]::integer[], true);
 
 PREPARE v5e3q21 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 4, ARRAY[2, 3]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 4, ARRAY[2, 3]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v5e3q20', 'v5e3q21', '7: Directed graph with three edges and 11 is forbidden vertex');
+SELECT set_eq('v5e3q20', 'v5e3q21', 'THREE EDGES 7: Directed graph with three edges and 11 is forbidden vertex');
 
 -- 2 is forbidden
 PREPARE v5e3q30 AS
@@ -207,9 +252,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[2]::integer[], true);
 
 PREPARE v5e3q31 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 10, ARRAY[11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[3,4]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v5e3q30', 'v5e3q31', '7: Directed graph with three edges and 2 is forbidden vertex');
+SELECT set_eq('v5e3q30', 'v5e3q31', 'THREE EDGES 8: Directed graph with three edges and 2 is forbidden vertex');
 
 -- 3 is forbidden
 PREPARE v5e3q40 AS
@@ -218,9 +267,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3]::integer[], true);
 
 PREPARE v5e3q41 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1), (2, 'v', 10, ARRAY[11]::integer[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2,4]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost);
 
-SELECT set_eq('v5e3q40', 'v5e3q41', '7: Directed graph with three edges and 3 is forbidden vertex');
+SELECT set_eq('v5e3q40', 'v5e3q41', 'THREE EDGES 9: Directed graph with three edges and 3 is forbidden vertex');
 
 -- 2 and 11 are forbidden
 PREPARE v5e3q50 AS
@@ -228,17 +281,31 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 2 or id = 3 or id = 12',
     ARRAY[1]::INTEGER[], 1, ARRAY[2, 11]::integer[], true);
 
-SELECT set_eq('v5e3q50', 'qempty', '7: Directed graph with three edges and 2 and 11 are forbidden vertices');
+PREPARE v5e3q51 AS
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[3,4]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost);
+
+SELECT set_eq('v5e3q50', 'v5e3q51', 'THREE EDGES 10: Directed graph with three edges and 2 and 11 are forbidden vertices');
 
 -- 3 and 11 are forbidden
 PREPARE v5e3q60 AS
 SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM pgr_contractgraph(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 2 or id = 3 or id = 12',
     ARRAY[1]::INTEGER[], 1, ARRAY[3, 11]::integer[], true);
+
 PREPARE v5e3q61 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1)) AS t(seq, type, id, contracted_vertices, source, target, cost );
-SELECT set_eq('v5e3q60', 'v5e3q61', '7: Directed graph with three edges and 3 and 11 are forbidden vertices');
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2,4]::bigint[], -1, -1, -1),
+    (2, 'v', 11, ARRAY[10]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v5e3q60', 'v5e3q61', 'THREE EDGES 11: Directed graph with three edges and 3 and 11 are forbidden vertices');
 
+-- EDGES 1 3 6
 -- no forbidden vertices
 PREPARE v6e3q10 AS
 SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM pgr_contractgraph(
@@ -246,9 +313,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::integer[], 1, ARRAY[]::integer[], true);
 
 PREPARE v6e3q11 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1), (2, 'v', 4, ARRAY[3]::integer[], -1, -1, -1), (3, 'v', 8, ARRAY[7]::integer[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1),
+    (2, 'v', 4, ARRAY[3]::integer[], -1, -1, -1),
+    (3, 'v', 8, ARRAY[7]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q10', 'v6e3q11', '8: Directed graph with three edges and no forbidden vertices');
+SELECT set_eq('v6e3q10', 'v6e3q11', 'THREE EDGES 12: Directed graph with three edges and no forbidden vertices');
 
 -- 1 is forbidden
 PREPARE v6e3q20 AS
@@ -257,9 +329,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[1]::integer[], true);
 
 PREPARE v6e3q21 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 1, ARRAY[2]::bigint[], -1, -1, -1), (2, 'v', 4, ARRAY[3]::integer[], -1, -1, -1), (3, 'v', 8, ARRAY[7]::integer[], -1, -1, -1)  ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 1, ARRAY[2]::bigint[], -1, -1, -1),
+    (2, 'v', 4, ARRAY[3]::integer[], -1, -1, -1),
+    (3, 'v', 8, ARRAY[7]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q20', 'v6e3q21', '8: Directed graph with three edges and 1 is forbidden vertex');
+SELECT set_eq('v6e3q20', 'v6e3q21', 'THREE EDGES 13: Directed graph with three edges and 1 is forbidden vertex');
 
 -- 3 is forbidden
 PREPARE v6e3q30 AS
@@ -268,9 +345,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3]::integer[], true);
 
 PREPARE v6e3q31 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1), (2, 'v', 8, ARRAY[7]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1),
+    (2, 'v', 3, ARRAY[4]::bigint[], -1, -1, -1),
+    (3, 'v', 8, ARRAY[7]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q30', 'v6e3q31', '8: Directed graph with three edges and 3 is forbidden vertex');
+SELECT set_eq('v6e3q30', 'v6e3q31', 'THREE EDGES 14: Directed graph with three edges and 3 is forbidden vertex');
 
 -- 7 is forbidden
 PREPARE v6e3q40 AS
@@ -279,9 +361,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[7]::integer[], true);
 
 PREPARE v6e3q41 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1), (2, 'v', 4, ARRAY[3]::integer[], -1, -1, -1), (3, 'v', 7, ARRAY[8]::integer[], -1, -1, -1)  ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1),
+    (2, 'v', 4, ARRAY[3]::integer[], -1, -1, -1),
+    (3, 'v', 7, ARRAY[8]::integer[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q40', 'v6e3q41', '8: Directed graph with three edges and 7 is forbidden vertex');
+SELECT set_eq('v6e3q40', 'v6e3q41', 'THREE EDGES 15: Directed graph with three edges and 7 is forbidden vertex');
 
 -- 1 and 3 are forbidden
 PREPARE v6e3q50 AS
@@ -290,9 +377,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[1, 3]::integer[], true);
 
 PREPARE v6e3q51 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 1, ARRAY[2]::bigint[],  -1, -1, -1), (2, 'v', 8, ARRAY[7]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 1, ARRAY[2]::bigint[], -1, -1, -1),
+    (2, 'v', 3, ARRAY[4]::bigint[], -1, -1, -1),
+    (3, 'v', 8, ARRAY[7]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q50', 'v6e3q51', '8: Directed graph with three edges and 1 and 3 are forbidden vertices');
+SELECT set_eq('v6e3q50', 'v6e3q51', 'THREE EDGES 16: Directed graph with three edges and 1 and 3 are forbidden vertices');
 
 -- 3 and 7 are forbidden
 PREPARE v6e3q60 AS
@@ -301,9 +393,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3, 7]::integer[], true);
 
 PREPARE v6e3q61 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1), (2, 'v', 7, ARRAY[8]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[1]::bigint[], -1, -1, -1),
+    (2, 'v', 3, ARRAY[4]::bigint[], -1, -1, -1),
+    (3, 'v', 7, ARRAY[8]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q60', 'v6e3q61', '8: Directed graph with three edges and 3 and 7 are forbidden vertices');
+SELECT set_eq('v6e3q60', 'v6e3q61', 'THREE EDGES 17: Directed graph with three edges and 3 and 7 are forbidden vertices');
 
 -- 1 and 7 are forbidden
 PREPARE v6e3q70 AS
@@ -312,9 +409,14 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[1, 7]::integer[], true);
 
 PREPARE v6e3q71 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 1, ARRAY[2]::bigint[], -1, -1, -1), (2, 'v', 4, ARRAY[3]::bigint[], -1, -1, -1), (3, 'v', 7, ARRAY[8]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 1, ARRAY[2]::bigint[], -1, -1, -1),
+    (2, 'v', 4, ARRAY[3]::bigint[], -1, -1, -1),
+    (3, 'v', 7, ARRAY[8]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v6e3q70', 'v6e3q71', '8: Directed graph with three edges and 1 and 7 are forbidden vertices');
+SELECT set_eq('v6e3q70', 'v6e3q71', 'THREE EDGES 18: Directed graph with three edges and 1 and 7 are forbidden vertices');
 
 
 -- FOUR EDGES
@@ -325,9 +427,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::integer[], 1, ARRAY[]::integer[], true);
 
 PREPARE v4e4q11 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 4, ARRAY[2, 3, 6, 11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 11, ARRAY[2, 3, 4, 6]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q10', 'v4e4q11', '9: Directed graph with four edges and no forbidden vertices');
+SELECT set_eq('v4e4q10', 'v4e4q11', 'FOUR EDGES 1: Directed graph with four edges and no forbidden vertices');
 
 -- 2 is forbidden
 PREPARE v4e4q20 AS
@@ -336,9 +441,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[2]::integer[], true);
 
 PREPARE v4e4q21 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[6, 11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 2, ARRAY[3, 4, 6, 11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q20', 'v4e4q21', '9: Directed graph with four edges and 2 is forbidden vertex');
+SELECT set_eq('v4e4q20', 'v4e4q21', 'FOUR EDGES 2: Directed graph with four edges and 2 is forbidden vertex');
 
 -- 3 is forbidden
 PREPARE v4e4q30 AS
@@ -347,8 +455,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3]::integer[], true);
 
 PREPARE v4e4q31 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2, 6, 11]::bigint[], -1, -1, -1)) AS t(seq, type, id, contracted_vertices, source, target, cost );
-SELECT set_eq('v4e4q30', 'v4e4q31', '9: Directed graph with four edges and 3 is forbidden vertex');
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2, 4, 6, 11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v4e4q30', 'v4e4q31', 'FOUR EDGES 3: Directed graph with four edges and 3 is forbidden vertex');
 
 -- 6 is forbidden
 PREPARE v4e4q40 AS
@@ -357,8 +469,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[6]::integer[], true);
 
 PREPARE v4e4q41 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1), (2, 'v', 6, ARRAY[11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
-SELECT set_eq('v4e4q40', 'v4e4q41', '9: Directed graph with four edges and 6 is forbidden vertex');
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 6, ARRAY[2,3,4,11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v4e4q40', 'v4e4q41', 'FOUR EDGES 4: Directed graph with four edges and 6 is forbidden vertex');
 
 -- 11 is forbidden
 PREPARE v4e4q50 AS
@@ -367,8 +483,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[11]::integer[], true);
 
 PREPARE v4e4q51 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
-SELECT set_eq('v4e4q50', 'v4e4q51', '9: Directed graph with four edges and 11 is forbidden vertex');
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 11, ARRAY[2,3,4,6]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v4e4q50', 'v4e4q51', 'FOUR EDGES 5: Directed graph with four edges and 11 is forbidden vertex');
 
 
 -- 2,3 are forbidden
@@ -378,9 +498,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[2, 3]::integer[], true);
 
 PREPARE v4e4q61 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[6, 11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[4, 6, 11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q60', 'v4e4q61', '9: Directed graph with four edges and 2 and 3 is forbidden vertex');
+SELECT set_eq('v4e4q60', 'v4e4q61', 'FOUR EDGES 6: Directed graph with four edges and 2 and 3 is forbidden vertex');
 
 
 -- 2,6 are forbidden
@@ -390,9 +513,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[2, 6]::integer[], true);
 
 PREPARE v4e4q71 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 6, ARRAY[11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[4]::bigint[], -1, -1, -1),
+    (2, 'v', 6, ARRAY[11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q70', 'v4e4q71', '9: Directed graph with four edges and 2 and 6 forbidden vertex');
+SELECT set_eq('v4e4q70', 'v4e4q71', 'FOUR EDGES 7: Directed graph with four edges and 2 and 6 forbidden vertex');
 
 -- 2,11 are forbidden
 PREPARE v4e4q80 AS
@@ -400,7 +527,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     'SELECT id, source, target, cost, reverse_cost FROM edge_table WHERE id = 2 or id = 3 or id = 5 or id = 11',
     ARRAY[1]::INTEGER[], 1, ARRAY[2, 11]::integer[], true);
 
-SELECT set_eq('v4e4q80', 'qempty', '9: Directed graph with four edges and 2 and 11 forbidden vertex');
+PREPARE v4e4q81 AS
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[4]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
+
+SELECT set_eq('v4e4q80', 'v4e4q81', 'FOUR EDGES 8: Directed graph with four edges and 2 and 11 forbidden vertex');
 
 -- 3,6 are forbidden
 PREPARE v4e4q90 AS
@@ -409,9 +542,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3, 6]::integer[], true);
 
 PREPARE v4e4q91 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1), (2, 'v', 6, ARRAY[11]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2,4]::bigint[], -1, -1, -1),
+    (2, 'v', 6, ARRAY[11]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q90', 'v4e4q91', '9: Directed graph with four edges and 3 and 6 forbidden vertex');
+SELECT set_eq('v4e4q90', 'v4e4q91', 'FOUR EDGES 9: Directed graph with four edges and 3 and 6 forbidden vertex');
 
 -- 3,11 are forbidden
 PREPARE v4e4q100 AS
@@ -420,9 +557,12 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[3, 11]::integer[], true);
 
 PREPARE v4e4q101 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 3, ARRAY[2,4]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q100', 'v4e4q101', '9: Directed graph with four edges and 3 and 11 forbidden vertex');
+SELECT set_eq('v4e4q100', 'v4e4q101', 'FOUR EDGES 10: Directed graph with four edges and 3 and 11 forbidden vertex');
 
 -- 6,11 are forbidden
 PREPARE v4e4q110 AS
@@ -431,10 +571,13 @@ SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source
     ARRAY[1]::INTEGER[], 1, ARRAY[6, 11]::integer[], true);
 
 PREPARE v4e4q111 AS
-SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost  FROM ( VALUES (1, 'v', 3, ARRAY[2]::bigint[], -1, -1, -1) ) AS t(seq, type, id, contracted_vertices, source, target, cost );
+SELECT seq, type, id, unnest(contracted_vertices) AS contracted_vertices, source, target, cost
+FROM (VALUES
+    (1, 'v', 6, ARRAY[2,3,4]::bigint[], -1, -1, -1)
+) AS t(seq, type, id, contracted_vertices, source, target, cost );
 
-SELECT set_eq('v4e4q110', 'v4e4q111', '9: Directed graph with four edges and 6 and 11 forbidden vertex');
+SELECT set_eq('v4e4q110', 'v4e4q111', 'FOUR EDGES 11: Directed graph with four edges and 6 and 11 forbidden vertex');
 
 
 SELECT finish();
-ROLLBACK;
\ No newline at end of file
+ROLLBACK;
diff --git a/src/contraction/test/proof_of_concept.test.sql b/src/contraction/test/proof_of_concept.test.sql
index 377e306..4d045f1 100644
--- a/src/contraction/test/proof_of_concept.test.sql
+++ b/src/contraction/test/proof_of_concept.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 \echo Adding an additional column to store if its part of the contracted graph
 ALTER TABLE edge_table ADD is_contracted BOOLEAN DEFAULT false;
@@ -87,4 +86,3 @@ SELECT * FROM pgr_dijkstra($$
         AND is_contracted=false$$,
     3, 9, false);
 
-ROLLBACK;
diff --git a/src/contraction/test/proof_of_concept_1.test.sql b/src/contraction/test/proof_of_concept_1.test.sql
index dfdbead..7ac86c3 100644
--- a/src/contraction/test/proof_of_concept_1.test.sql
+++ b/src/contraction/test/proof_of_concept_1.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 \echo Adding an additional column to store if its part of the contracted graph
 ALTER TABLE edge_table ADD is_contracted BOOLEAN DEFAULT false;
@@ -67,4 +66,3 @@ SELECT * FROM
 pgr_dijkstra('SELECT id, source, target, cost, reverse_cost FROM edge_table where source IN (3, 5, 6, 7, 8, 9, 11, 15, 17) AND target IN (3, 5, 6, 7, 8, 9, 11, 15, 17) AND is_contracted=false',
 3, 9, false);
 
-ROLLBACK;
diff --git a/src/contraction/test/return_types.test.sql b/src/contraction/test/return_types.test.sql
index af2afa9..58014e0 100644
--- a/src/contraction/test/return_types.test.sql
+++ b/src/contraction/test/return_types.test.sql
@@ -7,7 +7,6 @@ int	(-2,147,483,648) to (2,147,483,647)
 /*
 Testing for ids > 10^8
 */
-BEGIN;
 
 \echo --q1
 UPDATE edge_table
@@ -68,4 +67,3 @@ SELECT * FROM pgr_contractGraph(
 
 \echo --q11
 
-ROLLBACK;
\ No newline at end of file
diff --git a/src/contraction/test/test.conf b/src/contraction/test/test.conf
index 8459b76..4e98f98 100644
--- a/src/contraction/test/test.conf
+++ b/src/contraction/test/test.conf
@@ -13,6 +13,8 @@
             expand_graph
             doc-contraction
             directed-development
+            directed-deadend
+            directed-linear
             doc-contractGraph
             )],
 
diff --git a/src/convenience/doc/doc-conversion.queries b/src/convenience/doc/doc-conversion.queries
index 9e78e5e..083eeda 100644
--- a/src/convenience/doc/doc-conversion.queries
+++ b/src/convenience/doc/doc-conversion.queries
@@ -1,25 +1,3 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License AS published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
 BEGIN;
 BEGIN
 SET client_min_messages TO NOTICE;
@@ -82,6 +60,7 @@ SELECT * FROM pgr_pointstovids(
     'edge_table'
 );
 NOTICE:  Deperecated function: pgr_textToPoints
+NOTICE:  Deperecated function: pgr_pointsToVids
  pgr_pointstovids 
 ------------------
  {1,2,3,5}
diff --git a/src/convenience/doc/doc-matrix.queries b/src/convenience/doc/doc-matrix.queries
index d96de48..179cf13 100644
--- a/src/convenience/doc/doc-matrix.queries
+++ b/src/convenience/doc/doc-matrix.queries
@@ -19,6 +19,7 @@ SELECT * from pgr_tsp(
 );
 NOTICE:  Deperecated function: pgr_textToPoints
 NOTICE:  Deprecated function pgr_pointsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
  seq | id 
 -----+----
    0 |  1
@@ -46,6 +47,7 @@ SELECT * FROM pgr_vidstodmatrix(
     'edge_table');
 NOTICE:  Deperecated function: pgr_textToPoints
 NOTICE:  Deperecated function: pgr_textToPoints
+NOTICE:  Deperecated function: pgr_pointsToVids
 NOTICE:  Deprecated function pgr_vidsToDMatrix
                   dmatrix                  |    ids    
 -------------------------------------------+-----------
@@ -63,7 +65,9 @@ SELECT * FROM pgr_tsp(
 );
 NOTICE:  Deperecated function: pgr_textToPoints
 NOTICE:  Deperecated function: pgr_textToPoints
+NOTICE:  Deperecated function: pgr_pointsToVids
 NOTICE:  Deprecated function pgr_vidsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
  seq | id 
 -----+----
    0 |  1
@@ -103,6 +107,7 @@ SELECT * FROM pgr_tsp(
     1
 );
 NOTICE:  Deprecated function pgr_vidsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
  seq | id 
 -----+----
    0 |  1
diff --git a/src/convenience/doc/pgr_flipEdges.rst b/src/convenience/doc/pgr_flipEdges.rst
deleted file mode 100644
index 849ace7..0000000
--- a/src/convenience/doc/pgr_flipEdges.rst
+++ /dev/null
@@ -1,73 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_flip_edges:
-
-pgr_flipEdges - Deprecated Function
-==============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
-------------------------------------------------------------------------------
-
-``pgr_flipEdges`` - flip the edges in an array of geometries so the connect end to end. 
-
-Synopsis
-------------------------------------------------------------------------------
-
-The function returns:
-
-  - ``geometry[]`` An array of the input geometries with the geometries flipped end to end such that the geometries are oriented as a path from start to end.
-
-.. code-block:: sql
-
-        geometry[] pgr_flipEdges(ga geometry[])
-
-
-Description
------------------------------------------------------------------------------
-
-Given an array of linestrings that are supposedly connected end to end like the results of a route, check the edges and flip any end for end if they do not connect with the previous seegment and return the array with the segments flipped as appropriate.
-
-.. rubric:: Parameters
-
-:ga: ``geometry[]`` An array of geometries, like the results of a routing query.
-
-.. warning::
-
-    * No checking is done for edges that do not connect.
-    * Input geometries MUST be LINESTRING or MULTILINESTRING.
-    * Only the first LINESTRING of a MULTILINESTRING is considered.
-
-.. rubric:: History
-
-* Deprecated in version 2.3.0
-* Proposed in version 2.1.0
-
-
-Examples
------------------------------------------------------------------------------
-
-.. literalinclude:: doc-conversion.queries
-   :start-after: --q2
-   :end-before: --q3
-
-See also
---------
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/src/convenience/doc/pgr_pointToEdgeNode.rst b/src/convenience/doc/pgr_pointToEdgeNode.rst
index 64bc55b..72ef049 100644
--- a/src/convenience/doc/pgr_pointToEdgeNode.rst
+++ b/src/convenience/doc/pgr_pointToEdgeNode.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -21,9 +21,9 @@ Name
 ``pgr_pointToEdgeNode`` - Converts a point to a ``vertex_id`` based on closest edge.
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
 Synopsis
@@ -78,8 +78,6 @@ The example uses the :ref:`sampledata` network.
 See Also
 -----------------------------------------------------------------------------
 
-* :ref:`pgr_points_to_vids` - convert an array of point geometries into vertex ids.
-
 
 .. rubric:: Indices and tables
 
diff --git a/src/convenience/doc/pgr_pointsToDMatrix.rst b/src/convenience/doc/pgr_pointsToDMatrix.rst
deleted file mode 100644
index 2a5f35d..0000000
--- a/src/convenience/doc/pgr_pointsToDMatrix.rst
+++ /dev/null
@@ -1,84 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_points_to_dmatrix:
-
-pgr_pointsToDMatrix - Deprecated Function
-==============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
-------------------------------------------------------------------------------
-
-``pgr_pointsToDMatrix`` - Creates a distance matrix from an array of points.
-
-Synopsis
-------------------------------------------------------------------------------
-
-Create a distance symmetric distance matrix suitable for TSP using Euclidean distances based on the st_distance(). You might want to create a variant of this the uses st_distance_sphere() or st_distance_spheriod() or some other function.
-
-The function returns:
-
-  - ``record`` - with two fields as describe here
-        * :dmatrix: ``float8[]`` - the distance matrix suitable to pass to pgrTSP() function.
-        * :ids: ``integer[]`` - an array of ids for the distance matrix.
-
-.. code-block:: sql
-
-        record pgr_pointsToDMatrix(pnts geometry[], OUT dmatrix double precision[], OUT ids integer[])
-
-
-Description
------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:pnts: ``geometry[]`` - An array of point geometries.
-
-.. warning::
-
-    The generated matrix will be symmetric as required for pgr_TSP.
-
-.. rubric:: History
-
-* Proposed in version 2.1.0
-
-
-Examples
------------------------------------------------------------------------------
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q1
-   :end-before: --q1.1
-
-This example shows how this can be used in the context of feeding the results into pgr_tsp() function.
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q1.1
-   :end-before: --q2
-
-
-See Also
------------------------------------------------------------------------------
-
-* :ref:`pgr_vids_to_dmatrix2`
-* :ref:`pgr_vids_to_dmatrix`
-* :ref:`pgr_tsp-V2.0`
-
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/src/convenience/doc/pgr_pointsToVids.rst b/src/convenience/doc/pgr_pointsToVids.rst
deleted file mode 100644
index f9fc384..0000000
--- a/src/convenience/doc/pgr_pointsToVids.rst
+++ /dev/null
@@ -1,83 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_points_to_vids:
-
-pgr_pointsToVids - Proposed
-==============================================================================
-
-.. index::
-        single: pointsToVids(Complete Signature) --proposed
-
-
-Name
-------------------------------------------------------------------------------
-
-``pgr_pointsToVids`` - Converts an array of point geometries into vertex ids.
-
-
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
-
-
-Synopsis
-------------------------------------------------------------------------------
-
-Given an array of point geometries and an edge table and a max search tol distance the function converts points into vertex ids using pgr_pointtoedgenode().
-
-The function returns:
-
-  - ``integer[]`` - An array of ``vertex_id``.
-
-.. code-block:: sql
-
-        integer[] pgr_pointsToVids(pnts geometry[], edges text, tol float8 DEFAULT(0.01))
-
-
-Description
------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:pnts: ``geometry[]`` - An array of point geometries.
-:edges: ``text`` - The edge table to be used for the conversion.
-:tol: ``float8`` - The maximum search distance for locating the closest edge.
-
-.. warning::
-
-    You need to check the results for any vids=-1 which indicates if failed to locate an edge.
-
-.. rubric:: History
-
-* Proposed in version 2.1.0
-
-
-Examples
------------------------------------------------------------------------------
-
-.. literalinclude:: doc-conversion.queries
-   :start-after: --q4
-   :end-before: --q5
-
-
-This example uses the :ref:`sampledata` network.
-
-
-See Also
------------------------------------------------------------------------------
-
-* :ref:`pgr_point_to_edgenode` - convert a point geometry to the closest vertex_id of an edge..
-
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/src/convenience/doc/pgr_textToPoints.rst b/src/convenience/doc/pgr_textToPoints.rst
deleted file mode 100644
index 2467443..0000000
--- a/src/convenience/doc/pgr_textToPoints.rst
+++ /dev/null
@@ -1,71 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_text_to_points:
-
-pgr_textToPoints - Deprecated Function
-==============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
-------------------------------------------------------------------------------
-
-``pgr_textToPoints`` - Converts a text string of the format "x,y;x,y;x,y;..." into and array of point geometries.
-
-Synopsis
-------------------------------------------------------------------------------
-
-Given a text string of the format "x,y;x,y;x,y;..." and the srid to use, split the string and create and array point geometries. 
-
-The function returns:
-
-  - 
-
-.. code-block:: sql
-
-        integer pgr_textToPoints(pnts text, srid integer DEFAULT(4326))
-
-
-Description
------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:pnts: ``text`` A text string of the format "x,y;x,y;x,y;..." where x is longitude and y is latitude if use values in lat-lon.
-:srid: ``integer`` The SRID to use when constructing the point geometry. If the paratmeter is absent it defaults to ``SRID:4326``.
-
-.. rubric:: History
-
-* Proposed in version 2.1.0
-
-
-Examples
------------------------------------------------------------------------------
-
-.. literalinclude:: doc-conversion.queries
-   :start-after: --q3
-   :end-before: --q4
-
-
-See Also
------------------------------------------------------------------------------
-
-* :ref:`pgr_point_to_edgenode`
-* :ref:`pgr_points_to_vids`
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
-
diff --git a/src/convenience/doc/pgr_vidsToDMatrix.rst b/src/convenience/doc/pgr_vidsToDMatrix.rst
deleted file mode 100644
index 899165c..0000000
--- a/src/convenience/doc/pgr_vidsToDMatrix.rst
+++ /dev/null
@@ -1,101 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_vids_to_dmatrix:
-
-pgr_vidsToDMatrix - Deprecated Function
-==============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
-------------------------------------------------------------------------------
-
-``pgr_vidsToDMatrix`` - Creates a distances matrix from an array of ``vertex_id``.
-
-Synopsis
-------------------------------------------------------------------------------
-
-This function takes an array of ``vertex_id``, the original array of points used to generate the array of ``vertex_id``, an edge table name and a tol. It then computes kdijkstra() distances for each vertex to all the other vertices and creates a symmetric distance matrix suitable for TSP. The pnt array and the tol are used to establish a BBOX for limiting selection of edges. The extents of the points is expanded by tol.
-
-The function returns:
-
-  - ``record`` - with two fields as describe here
-        * :dmatrix: ``float8[]`` - the distance matrix suitable to pass to pgrTSP() function.
-        * :ids: ``integer[]`` - an array of ids for the distance matrix.
-                  
-
-.. code-block:: sql
-
-        record pgr_vidsToDMatrix(IN vids integer[], IN pnts geometry[], IN edges text, tol float8 DEFAULT(0.1), OUT dmatrix double precision[], OUT ids integer[])
-
-
-Description
------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:vids: ``integer[]`` - An array of ``vertex_id``.
-:pnts: ``geometry[]`` - An array of point geometries that approximates the extents of the ``vertex_id``.
-:edges: ``text`` - The edge table to be used for the conversion.
-:tol: ``float8`` - The amount to expand the BBOX extents of ``pnts`` when building the graph.
-
-.. warning::
-
-    * we compute a symmetric matrix because TSP requires that so the distances are better the Euclidean but but are not perfect
-    * kdijkstra() can fail to find a path between some of the vertex ids. We to not detect this other than the cost might get set to -1.0, so the dmatrix should be checked for this as it makes it invalid for TSP
-
-.. rubric:: History
-
-* Proposed in version 2.1.0
-
-
-Examples
------------------------------------------------------------------------------
-
-This example uses existing data of points.
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q2
-   :end-before: --q2.1
-
-This example uses points that are not part of the graph.
-    - :ref:`pgr_text_to_points` - is used to convert the locations into point geometries.
-    - :ref:`pgr_points_to_vids` - to convert the array of point geometries into vertex ids.
-
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q2.1
-   :end-before: --q2.2
-
-
-This example shows how this can be used in the context of feeding the results into pgr_tsp() function.
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q2.2
-   :end-before: --q3
-
-This example uses the :ref:`sampledata` network.
-
-
-See Also
------------------------------------------------------------------------------
-
-* :ref:`pgr_vids_to_dmatrix2`
-* :ref:`pgr_text_to_points`
-* :ref:`pgr_tsp-V2.0`
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
diff --git a/src/convenience/doc/pgr_vidsToDMatrix2.rst b/src/convenience/doc/pgr_vidsToDMatrix2.rst
deleted file mode 100644
index 880b52f..0000000
--- a/src/convenience/doc/pgr_vidsToDMatrix2.rst
+++ /dev/null
@@ -1,92 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_vids_to_dmatrix2:
-
-pgr_vidsToDMatrix - Deprecated Function
-==============================================================================
-
-.. warning:: This function is deprecated!!!
-
-    * Is no longer supported.
-    * May be removed from future versions.
-    * There is no replacement.
-
-Name
-------------------------------------------------------------------------------
-
-``pgr_vidsToDMatrix`` - Creates a distances matrix from an array of ``vertex_id``.
-
-Synopsis
-------------------------------------------------------------------------------
-
-This function takes an array of ``vertex_id``, a ``sql`` statement to select the edges, and some boolean arguments to control the behavior. It then computes kdijkstra() distances for each vertex to all the other vertices and creates a distance matrix suitable for TSP.
-
-The function returns:
-
-    * :dmatrix: ``float8[]`` - the distance matrix suitable to pass to pgr_TSP() function.
-
-.. code-block:: sql
-
-        pgr_vidsToDMatrix(IN sql text, IN vids integer[], IN directed boolean, IN has_reverse_cost boolean, IN want_symmetric boolean, OUT dmatrix double precision[])
-
-
-
-Description
------------------------------------------------------------------------------
-
-.. rubric:: Parameters
-
-:sql: ``text`` - A SQL statement to select the edges needed for the solution.
-:vids: ``integer[]`` - An array of ``vertex_id``.
-:directed: ``boolean`` - A flag to indicate if the graph is directed.
-:has_reverse_cost: ``boolean`` - A flag to indicate if the SQL has a column ``reverse_cost``.
-:want_symmetric: ``boolean`` - A flag to indicate if you want a symmetric or asymmetric matrix. You will need a symmetric matrix for pgr_TSP(). If the matriix is asymmetric, the then the cell(i,j) and cell(j,i) will be set to the average of those two cells except if one or the other are -1.0 then it will take the value of the other cell. If both are negative they will be left alone.
-
-.. warning::
-
-    * kdijkstra() can fail to find a path between some of the vertex ids. We to not detect this other than the cost might get set to -1.0, so the dmatrix should be checked for this as it makes it invalid for TSP
-
-
-
-.. rubric:: History
-
-* Proposed in version 2.1.0
-
-
-Examples
------------------------------------------------------------------------------
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q3
-   :end-before: --q4
-
-
-This example shows how this can be used in the context of feeding the results into pgr_tsp() function.
-
-.. literalinclude:: doc-matrix.queries
-   :start-after: --q4
-   :end-before: --q5
-
-
-This example uses the :ref:`sampledata` network.
-
-
-See Also
------------------------------------------------------------------------------
-
-* :ref:`pgr_vids_to_dmatrix`
-* :ref:`pgr_text_to_points`
-* :ref:`pgr_tsp-V2.0`
-
-
-.. rubric:: Indices and tables
-
-* :ref:`genindex`
-* :ref:`search`
diff --git a/src/convenience/sql/CMakeLists.txt b/src/convenience/sql/CMakeLists.txt
index 00ee38f..afc5cc9 100644
--- a/src/convenience/sql/CMakeLists.txt
+++ b/src/convenience/sql/CMakeLists.txt
@@ -2,7 +2,6 @@
 LIST(APPEND PACKAGE_SQL_FILES
     ${CMAKE_CURRENT_SOURCE_DIR}/pgrouting_conversion_tools.sql
     ${CMAKE_CURRENT_SOURCE_DIR}/pgrouting_dmatrix_tools.sql
-    ${CMAKE_CURRENT_SOURCE_DIR}/pgr_fakeContraction.sql
     ${CMAKE_CURRENT_SOURCE_DIR}/pgr_vidsToDMatrix.sql
 )
 
diff --git a/src/convenience/sql/pgr_fakeContraction.sql b/src/convenience/sql/pgr_fakeContraction.sql
deleted file mode 100644
index 365cffc..0000000
--- a/src/convenience/sql/pgr_fakeContraction.sql
+++ /dev/null
@@ -1,56 +0,0 @@
-create type contraction_vertex as (seq int, id int, type char, contracted text);
-create or replace function pgr_fakeContraction(edges text, ch_order integer[])
-    returns setof contraction_vertex  as
-$body$
-declare
-	cv contraction_vertex%ROWTYPE;
-	row record;
-begin
-	if ch_order = ARRAY[1] then
-		-- dealing with dead end contraction
-		for row in SELECT * FROM (
-			VALUES
-			(1, 2, 'v', '{1}'),
-			(2, 3, 'v', '{}'),
-			(3, 4, 'v', '{}'),
-			(4, 5, 'v', '{7, 8}'),
-			(5, 6, 'v', '{}'),
-			(6, 9, 'v', '{}'),
-			(7, 10, 'v', '{13}'),
-			(8, 11, 'v', '{}'),
-			(9, 13, 'v', '{}'),
-			(10, 15, 'v', '{14}'),
-			(11, 17, 'v', '{16}'))  
-		AS t (seq, id, type, contracted) loop
-		cv.seq := row.seq;
-		cv.id := row.id;
-		cv.type := row.type;
-		cv.contracted := row.contracted;
-		return next cv;
-		end loop;
-	end if;
-	if ch_order = ARRAY[1, 2] then
-		-- dealing with dead end and linear contraction
-		for row in SELECT * FROM (
-			VALUES
-			(1, -1, 'e', '{1, 2}'),
-			(2, -2, 'e', '{4}'),
-			(3, -3, 'e', '{10, 13}'),
-			(4, -4, 'e', '{12}'),
-			(5, 5, 'v', '{7, 8}'),
-			(6, 6, 'v', '{}'),
-			(7, 9, 'v', '{}'),
-			(8, 11, 'v', '{}'),
-			(9, 15, 'v', '{14}'),
-			(10, 17, 'v', '{16}'))  
-		AS t (seq, id, type, contracted) loop
-		cv.seq := row.seq;
-		cv.id := row.id;
-		cv.type := row.type;
-		cv.contracted := row.contracted;
-		return next cv;
-		end loop;
-	end if;
-end;
-$body$
-language 'plpgsql' ;
diff --git a/src/convenience/sql/pgrouting_conversion_tools.sql b/src/convenience/sql/pgrouting_conversion_tools.sql
index 57a0ba5..ca9a58d 100644
--- a/src/convenience/sql/pgrouting_conversion_tools.sql
+++ b/src/convenience/sql/pgrouting_conversion_tools.sql
@@ -173,6 +173,7 @@ declare
     g geometry;
     
 begin
+    RAISE NOTICE 'Deperecated function: pgr_pointsToVids';
     -- cycle through each point and locate the nearest edge and vertex on that edge
     for g in select unnest(pnts) loop
         v := v || pgr_pointtoedgenode(edges, g, tol);
diff --git a/src/convenience/test/doc-conversion.result b/src/convenience/test/doc-conversion.result
index 574fcd2..c7db8f3 100644
--- a/src/convenience/test/doc-conversion.result
+++ b/src/convenience/test/doc-conversion.result
@@ -21,5 +21,6 @@ POINT(3 1)
 POINT(2 2)
 --q4
 NOTICE:  Deperecated function: pgr_textToPoints
+NOTICE:  Deperecated function: pgr_pointsToVids
 {1,2,3,5}
 --q5
diff --git a/src/convenience/test/doc-conversion.test.sql b/src/convenience/test/doc-conversion.test.sql
index 4514499..5a49f71 100644
--- a/src/convenience/test/doc-conversion.test.sql
+++ b/src/convenience/test/doc-conversion.test.sql
@@ -1,27 +1,3 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License AS published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-BEGIN;
-SET client_min_messages TO NOTICE;
 \echo --q1
 SELECT * FROM pgr_pointtoedgenode('edge_table', 'POINT(2 0)'::geometry, 0.02);
 SELECT * FROM pgr_pointtoedgenode('edge_table', 'POINT(3 2)'::geometry, 0.02);
@@ -48,4 +24,3 @@ SELECT * FROM pgr_pointstovids(
     'edge_table'
 );
 \echo --q5
-ROLLBACK;
diff --git a/src/convenience/test/doc-matrix.result b/src/convenience/test/doc-matrix.result
index 8493a2b..1a5b06e 100644
--- a/src/convenience/test/doc-matrix.result
+++ b/src/convenience/test/doc-matrix.result
@@ -5,6 +5,7 @@ NOTICE:  Deprecated function pgr_pointsToDMatrix
 --q1.1
 NOTICE:  Deperecated function: pgr_textToPoints
 NOTICE:  Deprecated function pgr_pointsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|3
 2|2
@@ -15,12 +16,15 @@ NOTICE:  Deprecated function pgr_vidsToDMatrix
 --q2.1
 NOTICE:  Deperecated function: pgr_textToPoints
 NOTICE:  Deperecated function: pgr_textToPoints
+NOTICE:  Deperecated function: pgr_pointsToVids
 NOTICE:  Deprecated function pgr_vidsToDMatrix
 {{0,1,4,2},{1,0,3,1},{4,3,0,2},{2,1,2,0}}|{1,2,3,5}
 --q2.2
 NOTICE:  Deperecated function: pgr_textToPoints
 NOTICE:  Deperecated function: pgr_textToPoints
+NOTICE:  Deperecated function: pgr_pointsToVids
 NOTICE:  Deprecated function pgr_vidsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|2
 2|3
@@ -32,6 +36,7 @@ NOTICE:  Deprecated function pgr_vidsToDMatrix
 {{0,1,2,2},{1,0,1,1},{2,1,0,2},{2,1,2,0}}
 --q4
 NOTICE:  Deprecated function pgr_vidsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|2
 2|3
diff --git a/src/convenience/test/doc-matrix.test.sql b/src/convenience/test/doc-matrix.test.sql
index 362dcae..94b2263 100644
--- a/src/convenience/test/doc-matrix.test.sql
+++ b/src/convenience/test/doc-matrix.test.sql
@@ -1,6 +1,3 @@
-BEGIN;
-
-SET client_min_messages TO NOTICE;
 
 \echo --q1
 SELECT * FROM pgr_pointstodmatrix(pgr_texttopoints('2,0;2,1;3,1;2,2', 0));
@@ -56,4 +53,3 @@ SELECT * FROM pgr_tsp(
 );
 \echo --q5
 
-ROLLBACK;
diff --git a/src/convenience/test/test.conf b/src/convenience/test/test.conf
index a4011ac..ffac8cb 100644
--- a/src/convenience/test/test.conf
+++ b/src/convenience/test/test.conf
@@ -6,9 +6,11 @@
         'data' => ['sampledata.data'],
         'tests' => [qw( 
             vidstodmatrix-any-01
-            doc-matrix
             doc-conversion
             )],
+        'linux' => [qw( 
+            doc-matrix
+            )],
 
         'documentation' => [qw(
             doc-matrix
diff --git a/src/convenience/test/vidstodmatrix-any-01.test.sql b/src/convenience/test/vidstodmatrix-any-01.test.sql
index db1a2ed..c3ea7bf 100644
--- a/src/convenience/test/vidstodmatrix-any-01.test.sql
+++ b/src/convenience/test/vidstodmatrix-any-01.test.sql
@@ -21,7 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-BEGIN;
 SET client_min_messages TO NOTICE;
     select * from pgr_vidsToDMatrix(
         'select id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost from edge_table',
@@ -32,4 +31,3 @@ SET client_min_messages TO NOTICE;
         'select id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost from edge_table',
         array[1,5,13,11,12,4],
         true, true, true);
-    ROLLBACK;
diff --git a/src/costMatrix/doc/costMatrix.rst b/src/costMatrix/doc/cost-category.rst
similarity index 59%
copy from src/costMatrix/doc/costMatrix.rst
copy to src/costMatrix/doc/cost-category.rst
index 3b01c49..83bff70 100644
--- a/src/costMatrix/doc/costMatrix.rst
+++ b/src/costMatrix/doc/cost-category.rst
@@ -7,52 +7,35 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-.. _CostMatrix:
+.. _Cost:
 
-Cost Matrix
+Cost - Category
 ===============================================================================
 
-  - :ref:`pgr_dijkstraCostMatrix`
-  - :ref:`pgr_withPointsCostMatrix`
+.. index from here
 
+* :ref:`pgr_aStarCost`
+* :ref:`pgr_dijkstraCost`
+* :ref:`pgr_withPointsCost`
 
-.. include:: ../../proposedNext.rst
+.. index to here
+
+.. include:: proposed.rst
     :start-after: begin-warning
     :end-before: end-warning
 
-
- 
 General Information
 -------------------------------------------------------------------------------
 
-Sinopsis
-...................
-
-:ref:`tsp` needs as input a symmetric cost matrix and no edge `(u, v)` must value :math:`\infty`.
-
-This collection of functions will return a cost matrix in form of a table.
-
 
 Characteristics
 ................
 
 The main Characteristics are:
 
-* Can be used as input to :ref:`pgr_tsp`.
-
-  * :directly: when the resulting matrix is symmetric and there is no :math:`\infty` value.
-  * It will be the users responsibility to make the matrix symmetric.
-
-    * By using geometric or harmonic average of the non symmetric values.
-    * By using max or min the non symmetric values.
-    * By setting the upper triangle to be the mirror image of the lower triangle.
-    * By setting the lower triangle to be the mirror image of the upper triangle.
-
-  * It is also the users responsibility to fix an :math:`\infty` value.
-
 * Each function works as part of the family it belongs to.
 * It does not return a path.
-* Returns the sum of the costs of the shortest path for pair combination of nodes in the graph.
+* Returns the sum of the costs of the resulting path(s) for pair combination of nodes in the graph.
 * Process is done only on edges with positive costs.
 * Values are returned when there is a path.
 
@@ -72,22 +55,18 @@ The main Characteristics are:
 
   * The  `agg_cost` of `(u, v)` is the same as for `(v, u)`.
 
-* Any duplicated value in the `start_vids` are ignored.
+* Any duplicated value in the `start_vids` or in `end_vids` are ignored.
 
 * The returned values are ordered:
 
   * `start_vid` ascending
   * `end_vid` ascending
 
-* Running time: approximately :math:`O(| start\_vids | * (V \log V + E))`
-
 
 
 See Also
 ................
 
-* :ref:`pgr_tsp`
-
 .. rubric:: Indices and tables
 
 * :ref:`genindex`
diff --git a/src/costMatrix/doc/costMatrix.rst b/src/costMatrix/doc/costMatrix-category.rst
similarity index 90%
rename from src/costMatrix/doc/costMatrix.rst
rename to src/costMatrix/doc/costMatrix-category.rst
index 3b01c49..c6b3e78 100644
--- a/src/costMatrix/doc/costMatrix.rst
+++ b/src/costMatrix/doc/costMatrix-category.rst
@@ -9,23 +9,33 @@
 
 .. _CostMatrix:
 
-Cost Matrix
+Cost Matrix - Category
 ===============================================================================
 
-  - :ref:`pgr_dijkstraCostMatrix`
-  - :ref:`pgr_withPointsCostMatrix`
+.. index from here
 
+* :ref:`pgr_aStarCostMatrix`
+* :ref:`pgr_dijkstraCostMatrix`
+* :ref:`pgr_withPointsCostMatrix`
 
-.. include:: ../../proposedNext.rst
+.. index to here
+
+.. include:: proposed.rst
     :start-after: begin-warning
     :end-before: end-warning
 
+.. toctree::
+    :hidden:
+
+    pgr_aStarCostMatrix
+    pgr_dijkstraCostMatrix
+    pgr_withPointsCostMatrix
+
 
- 
 General Information
 -------------------------------------------------------------------------------
 
-Sinopsis
+Synopsis
 ...................
 
 :ref:`tsp` needs as input a symmetric cost matrix and no edge `(u, v)` must value :math:`\infty`.
diff --git a/src/costMatrix/doc/doc-pgr_fooDmatrix.queries b/src/costMatrix/doc/doc-pgr_fooDmatrix.queries
index 59da6ee..8fe65ed 100644
--- a/src/costMatrix/doc/doc-pgr_fooDmatrix.queries
+++ b/src/costMatrix/doc/doc-pgr_fooDmatrix.queries
@@ -1,6 +1,6 @@
 BEGIN;
 BEGIN
-SET client_min_messages TO WARNING;
+SET client_min_messages TO NOTICE;
 SET
 -- dijkstra q1
 SELECT * FROM pgr_dijkstraCostMatrix(
@@ -128,5 +128,69 @@ SELECT * FROM pgr_TSP(
 (5 rows)
 
 -- withPoints q4
+-- astar q1
+SELECT * FROM pgr_aStarCostMatrix(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5)
+);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         1 |       2 |        1
+         1 |       3 |        6
+         1 |       4 |        5
+         2 |       1 |        1
+         2 |       3 |        5
+         2 |       4 |        4
+         3 |       1 |        2
+         3 |       2 |        1
+         3 |       4 |        3
+         4 |       1 |        3
+         4 |       2 |        2
+         4 |       3 |        1
+(12 rows)
+
+-- astar q2
+SELECT * FROM pgr_aStarCostMatrix(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
+    directed := false, heuristic := 2
+);
+ start_vid | end_vid | agg_cost 
+-----------+---------+----------
+         1 |       2 |        1
+         1 |       3 |        2
+         1 |       4 |        3
+         2 |       1 |        1
+         2 |       3 |        1
+         2 |       4 |        2
+         3 |       1 |        2
+         3 |       2 |        1
+         3 |       4 |        1
+         4 |       1 |        3
+         4 |       2 |        2
+         4 |       3 |        1
+(12 rows)
+
+-- astar q3
+SELECT * FROM pgr_TSP(
+    $$
+    SELECT * FROM pgr_aStarCostMatrix(
+        'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+        (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
+        directed:= false, heuristic := 2
+    )
+    $$,
+    randomize := false
+);
+ seq | node | cost | agg_cost 
+-----+------+------+----------
+   1 |    1 |    1 |        0
+   2 |    2 |    1 |        1
+   3 |    3 |    1 |        2
+   4 |    4 |    3 |        3
+   5 |    1 |    0 |        6
+(5 rows)
+
+-- astar q4
 ROLLBACK;
 ROLLBACK
diff --git a/src/costMatrix/doc/pgr_dijkstraCostMatrix.rst b/src/costMatrix/doc/pgr_aStarCostMatrix.rst
similarity index 55%
copy from src/costMatrix/doc/pgr_dijkstraCostMatrix.rst
copy to src/costMatrix/doc/pgr_aStarCostMatrix.rst
index 30494ce..2d5eaeb 100644
--- a/src/costMatrix/doc/pgr_dijkstraCostMatrix.rst
+++ b/src/costMatrix/doc/pgr_aStarCostMatrix.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -7,40 +7,42 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-.. _pgr_dijkstraCostMatrix:
+.. _pgr_aStarCostMatrix:
 
-pgr_dijkstraCostMatrix - proposed
+pgr_aStarCostMatrix - proposed
 ===============================================================================
 
 Name
 -------------------------------------------------------------------------------
 
-``pgr_dijkstraCostMatrix`` - Calculates the a cost matrix using pgr_dijktras.
+``pgr_aStarCostMatrix`` - Calculates the a cost matrix using :ref:`pgr_aStar`.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.4.0
+
 Synopsis
 -------------------------------------------------------------------------------
 
-Using Dijkstra algorithm, calculate and return a cost matrix.
+Using aStar algorithm, calculate and return a cost matrix.
 
 Signature Summary
 -----------------
 
 .. code-block:: none
 
-    pgr_dijkstraCostMatrix(edges_sql, start_vids)
-    pgr_dijkstraCostMatrix(edges_sql, start_vids, directed)
+    pgr_aStarCostMatrix(edges_sql, vids)
+    pgr_aStarCostMatrix(edges_sql, vids, directed, heuristic, factor, epsilon)
     RETURNS SET OF (start_vid, end_vid, agg_cost)
 
 
@@ -49,7 +51,7 @@ Signatures
 -------------------------------------------------------------------------------
 
 .. index::
-    single: dijkstraCostMatrix(Minimal Use) - Proposed
+    single: aStarCostMatrix(Minimal Use) - Proposed
 
 Minimal Signature
 ...............................................................................
@@ -59,7 +61,7 @@ The minimal signature:
 
 .. code-block:: none
 
-    pgr_dijkstraCostMatrix(edges_sql, start_vid)
+    pgr_aStarCostMatrix(edges_sql, vids)
     RETURNS SET OF (start_vid, end_vid, agg_cost)
 
 
@@ -67,19 +69,19 @@ The minimal signature:
 
 
 .. literalinclude:: doc-pgr_fooDmatrix.queries
-   :start-after: -- dijkstra q1
-   :end-before: -- dijkstra q2
+   :start-after: -- astar q1
+   :end-before: -- astar q2
 
 
 .. index::
-    single: dijkstraCostMatrix(Complete Signature) - Proposed
+    single: aStarCostMatrix(Complete Signature) - Proposed
 
 Complete Signature
 ...............................................................................
 
 .. code-block:: none
 
-    pgr_dijkstraCostMatrix(edges_sql, start_vids, directed:=true)
+    pgr_aStarCostMatrix(edges_sql, vids, directed, heuristic, factor, epsilon)
     RETURNS SET OF (start_vid, end_vid, agg_cost)
 
 
@@ -88,17 +90,16 @@ Complete Signature
 This example returns a symmetric cost matrix.
 
 .. literalinclude:: doc-pgr_fooDmatrix.queries
-   :start-after: -- dijkstra q2
-   :end-before: -- dijkstra q3
+   :start-after: -- astar q2
+   :end-before: -- astar q3
 
 
 Description of the Signatures
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
-    :start-after: basic_edges_sql_start
-    :end-before: basic_edges_sql_end
-
+.. include:: pgRouting-concepts.rst
+    :start-after: xy_edges_sql_start
+    :end-before: xy_edges_sql_end
 
 
 Description of the parameters of the signatures
@@ -108,15 +109,31 @@ Description of the parameters of the signatures
 Parameter        Type                   Description
 ================ ====================== =================================================
 **edges_sql**    ``TEXT``               Edges SQL query as described above.
-**start_vids**   ``ARRAY[ANY-INTEGER]`` Array of identifiers of the vertices.
-**directed**     ``BOOLEAN``            (optional). When ``false`` the graph is considered as Undirected. Default is ``true`` which considers the graph as Directed.
+**vids**         ``ARRAY[ANY-INTEGER]`` Array of vertices_identifiers.
+**directed**     ``BOOLEAN``            - Optional.
+
+                                          - When ``false`` the graph is considered as Undirected.
+                                          - Default is ``true`` which considers the graph as Directed.
+
+**heuristic**    ``INTEGER``            (optional). Heuristic number. Current valid values 0~5. Default ``5``
+
+                                          - 0: h(v) = 0 (Use this value to compare with pgr_dijkstra)
+                                          - 1: h(v) abs(max(dx, dy))
+                                          - 2: h(v) abs(min(dx, dy))
+                                          - 3: h(v) = dx * dx + dy * dy
+                                          - 4: h(v) = sqrt(dx * dx + dy * dy)
+                                          - 5: h(v) = abs(dx) + abs(dy)
+
+**factor**       ``FLOAT``              (optional). For units manipulation. :math:`factor > 0`.  Default ``1``.
+**epsilon**      ``FLOAT``              (optional). For less restricted results. :math:`epsilon >= 1`.  Default ``1``.
 ================ ====================== =================================================
 
 
 
-.. Description of the return values
+.. include:: pgRouting-concepts.rst
+    :start-after: return_cost_start
+    :end-before: return_cost_end
 
-.. include:: dmatrix_return_values.txt
 
 
 Examples
@@ -125,14 +142,14 @@ Examples
 :Example: Use with tsp
 
 .. literalinclude:: doc-pgr_fooDmatrix.queries
-   :start-after: -- dijkstra q3
-   :end-before: -- dijkstra q4
+   :start-after: -- astar q3
+   :end-before: -- astar q4
 
 
 See Also
 -------------------------------------------------------------------------------
 
-* :ref:`dijkstra`
+* :ref:`astar`
 * :ref:`costMatrix`
 * :ref:`tsp`
 * The queries use the :ref:`sampledata` network.
diff --git a/src/costMatrix/doc/pgr_dijkstraCostMatrix.rst b/src/costMatrix/doc/pgr_dijkstraCostMatrix.rst
index 30494ce..c7cc3f4 100644
--- a/src/costMatrix/doc/pgr_dijkstraCostMatrix.rst
+++ b/src/costMatrix/doc/pgr_dijkstraCostMatrix.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -18,17 +18,18 @@ Name
 ``pgr_dijkstraCostMatrix`` - Calculates the a cost matrix using pgr_dijktras.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
-
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.3.0
+
 Synopsis
 -------------------------------------------------------------------------------
 
@@ -95,7 +96,7 @@ This example returns a symmetric cost matrix.
 Description of the Signatures
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
@@ -113,10 +114,9 @@ Parameter        Type                   Description
 ================ ====================== =================================================
 
 
-
-.. Description of the return values
-
-.. include:: dmatrix_return_values.txt
+.. include:: pgRouting-concepts.rst
+    :start-after: return_cost_start
+    :end-before: return_cost_end
 
 
 Examples
diff --git a/src/costMatrix/doc/pgr_withPointsCostMatrix.rst b/src/costMatrix/doc/pgr_withPointsCostMatrix.rst
index 4217401..1a11c6f 100644
--- a/src/costMatrix/doc/pgr_withPointsCostMatrix.rst
+++ b/src/costMatrix/doc/pgr_withPointsCostMatrix.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,17 +19,19 @@ Name
 ``pgr_withPointsCostMatrix`` - Calculates the shortest path and returns only the aggregate cost of the shortest path(s) found, for the combination of points given.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.2.0
+
 
 Signature Summary
 -------------------------------------------------------------------------------
@@ -40,7 +42,7 @@ Signature Summary
     pgr_withPointsCostMatrix(edges_sql, points_sql, start_vids, directed, driving_side)
     RETURNS SET OF (start_vid, end_vid, agg_cost)
 
-.. note:: There is no **details** flag, unlike the other members of the withPoints family of functions.  
+.. note:: There is no **details** flag, unlike the other members of the withPoints family of functions.
 
 
 Signatures
@@ -101,11 +103,11 @@ Description of the Signatures
     description of the sql queries
 
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../../common/src/points_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: points_sql_start
     :end-before: points_sql_end
 
@@ -129,10 +131,9 @@ Parameter        Type                   Description
 ================ ====================== =================================================
 
 
-
-.. Description of the return values
-
-.. include:: dmatrix_return_values.txt
+.. include:: pgRouting-concepts.rst
+    :start-after: return_cost_start
+    :end-before: return_cost_end
 
 
 Examples
diff --git a/src/costMatrix/sql/CMakeLists.txt b/src/costMatrix/sql/CMakeLists.txt
index 11f8d6c..aaab586 100644
--- a/src/costMatrix/sql/CMakeLists.txt
+++ b/src/costMatrix/sql/CMakeLists.txt
@@ -2,12 +2,8 @@
 LIST(APPEND PACKAGE_SQL_FILES
     ${CMAKE_CURRENT_SOURCE_DIR}/withPointsCostMatrix.sql
     ${CMAKE_CURRENT_SOURCE_DIR}/dijkstraCostMatrix.sql
+    ${CMAKE_CURRENT_SOURCE_DIR}/astarCostMatrix.sql
 
-    #for version 3.0
-    #${CMAKE_CURRENT_SOURCE_DIR}/astarCostMatrix.sql
-
-    # coded but not used
-    #${CMAKE_CURRENT_SOURCE_DIR}/eucledianCostMatrix.sql
     )
 
 # set in parent scope
diff --git a/src/costMatrix/sql/eucledianCostMatrix.sql b/src/costMatrix/sql/eucledianCostMatrix.sql
deleted file mode 100644
index fbbe3db..0000000
--- a/src/costMatrix/sql/eucledianCostMatrix.sql
+++ /dev/null
@@ -1,92 +0,0 @@
--- vertices_sql has the form
--- SELECT id, the_geom FROM .....
-
-CREATE OR REPLACE FUNCTION pgr_eucledianCostMatrix(vertices_sql TEXT,
-    OUT start_vid BIGINT,
-    OUT end_vid BIGINT,
-    OUT agg_cost DOUBLE PRECISION)
-RETURNS SETOF RECORD AS
-$BODY$
-DECLARE
-    sql text;
-    rec record;
-    has_the_geom BOOLEAN DEFAULT false;
-    has_id BOOLEAN DEFAULT false;
-    has_x BOOLEAN DEFAULT false;
-    has_y BOOLEAN DEFAULT false;
-    
-BEGIN
-
-    sql := 'CREATE TABLE ___tmp  AS ' || vertices_sql ;
-    EXECUTE sql;
-
-    RETURN query SELECT * FROM pgr_eucledianDMatrix('___tmp'::regclass);
-
-    DROP TABLE ___tmp;
-    RETURN;
-
-END
-$BODY$
-language plpgsql volatile cost 10;
-
-CREATE OR REPLACE FUNCTION pgr_eucledianCostMatrix(
-    vertices_sql regclass,
-    OUT start_vid BIGINT,
-    OUT end_vid BIGINT,
-    OUT agg_cost DOUBLE PRECISION)
-RETURNS SETOF RECORD AS
-$BODY$
-DECLARE
-    sql text;
-    which INTEGER := 0;
-    rec record;
-    has_the_geom BOOLEAN DEFAULT false;
-    has_id BOOLEAN DEFAULT false;
-    has_x BOOLEAN DEFAULT false;
-    has_y BOOLEAN DEFAULT false;
-    
-BEGIN
-    sql = format('SELECT id, the_geom from %I ', vertices_sql);
-    BEGIN
-        EXECUTE sql || 'LIMIT 1';
-        which := 1;
-        EXCEPTION WHEN OTHERS THEN
-        which := 0;
-    END;
-
-    IF which = 0 THEN
-        sql = format('SELECT id, x, y from %I ', vertices_sql);
-        BEGIN
-            EXECUTE sql || 'LIMIT 1';
-            which := 2;
-            EXCEPTION WHEN OTHERS THEN
-                RAISE EXCEPTION 'An expected column was not found in the query (3)'
-                USING HINT = 'Please verify columns: (id, the_geom) or (id, x, y) columns';
-        END;
-    END IF;
-
-
-    IF which = 1 THEN
-        sql := 'WITH
-        vertices AS (' || sql || '),
-        distances AS (SELECT DISTINCT a.id::BIGINT AS start_id, b.id::BIGINT as end_id, ST_Distance(a.the_geom, b.the_geom) as distance
-            FROM  vertices AS a, vertices AS b
-            WHERE a.id != b.id
-            ORDER BY start_id, end_id)
-        SELECT * from distances';
-    ELSE 
-        sql := 'WITH
-        vertices AS (' || sql || '),
-        distances AS (SELECT DISTINCT a.id::BIGINT AS start_id, b.id::BIGINT as end_id, ST_Distance(ST_MakePoint(a.x,a.y), ST_MakePoint(b.x,b.y)) as distance
-            FROM  vertices AS a, vertices AS b
-            WHERE a.id != b.id
-            ORDER BY start_id, end_id)
-        SELECT * from distances';
-    END IF;
-
-    BEGIN
-        RETURN query EXECUTE sql;
-    END;
-END
-$BODY$
-language plpgsql volatile cost 10;
diff --git a/src/costMatrix/test/doc-pgr_fooDmatrix-mac.test.sql b/src/costMatrix/test/doc-pgr_fooDmatrix-mac.test.sql
index cacbf7f..007e026 100644
--- a/src/costMatrix/test/doc-pgr_fooDmatrix-mac.test.sql
+++ b/src/costMatrix/test/doc-pgr_fooDmatrix-mac.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 SET client_min_messages TO WARNING;
 \echo -- dijkstra q1
@@ -48,4 +47,3 @@ SELECT * FROM pgr_TSP(
 );
 \echo -- withPoints q4
 
-ROLLBACK;
diff --git a/src/costMatrix/test/doc-pgr_fooDmatrix-windows.test.sql b/src/costMatrix/test/doc-pgr_fooDmatrix-windows.test.sql
index cacbf7f..007e026 100644
--- a/src/costMatrix/test/doc-pgr_fooDmatrix-windows.test.sql
+++ b/src/costMatrix/test/doc-pgr_fooDmatrix-windows.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 SET client_min_messages TO WARNING;
 \echo -- dijkstra q1
@@ -48,4 +47,3 @@ SELECT * FROM pgr_TSP(
 );
 \echo -- withPoints q4
 
-ROLLBACK;
diff --git a/src/costMatrix/test/doc-pgr_fooDmatrix.result b/src/costMatrix/test/doc-pgr_fooDmatrix.result
index 5a20003..5841300 100644
--- a/src/costMatrix/test/doc-pgr_fooDmatrix.result
+++ b/src/costMatrix/test/doc-pgr_fooDmatrix.result
@@ -64,3 +64,36 @@
 4|6|1.3|3.9
 5|-6|0|5.2
 -- withPoints q4
+-- astar q1
+1|2|1
+1|3|6
+1|4|5
+2|1|1
+2|3|5
+2|4|4
+3|1|2
+3|2|1
+3|4|3
+4|1|3
+4|2|2
+4|3|1
+-- astar q2
+1|2|1
+1|3|2
+1|4|3
+2|1|1
+2|3|1
+2|4|2
+3|1|2
+3|2|1
+3|4|1
+4|1|3
+4|2|2
+4|3|1
+-- astar q3
+1|1|1|0
+2|2|1|1
+3|3|1|2
+4|4|3|3
+5|1|0|6
+-- astar q4
diff --git a/src/costMatrix/test/doc-pgr_fooDmatrix.test.sql b/src/costMatrix/test/doc-pgr_fooDmatrix.test.sql
index cacbf7f..5a4ce39 100644
--- a/src/costMatrix/test/doc-pgr_fooDmatrix.test.sql
+++ b/src/costMatrix/test/doc-pgr_fooDmatrix.test.sql
@@ -1,6 +1,7 @@
-BEGIN;
 
-SET client_min_messages TO WARNING;
+------------------------
+-- dijkstra
+------------------------
 \echo -- dijkstra q1
 SELECT * FROM pgr_dijkstraCostMatrix(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table',
@@ -25,7 +26,9 @@ SELECT * FROM pgr_TSP(
 );
 \echo -- dijkstra q4
 
+------------------------
 -- withPoints
+------------------------
 \echo -- withPoints q1
 SELECT * FROM pgr_withPointsCostMatrix(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
@@ -48,4 +51,32 @@ SELECT * FROM pgr_TSP(
 );
 \echo -- withPoints q4
 
-ROLLBACK;
+
+------------------------
+-- pgr_aStar
+------------------------
+\echo -- astar q1
+SELECT * FROM pgr_aStarCostMatrix(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5)
+);
+\echo -- astar q2
+SELECT * FROM pgr_aStarCostMatrix(
+    'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+    (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
+    directed := false, heuristic := 2
+);
+\echo -- astar q3
+SELECT * FROM pgr_TSP(
+    $$
+    SELECT * FROM pgr_aStarCostMatrix(
+        'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
+        (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
+        directed:= false, heuristic := 2
+    )
+    $$,
+    randomize := false
+);
+\echo -- astar q4
+
+
diff --git a/src/dijkstra/doc/dijkstra.rst b/src/dijkstra/doc/dijkstra-family.rst
similarity index 82%
rename from src/dijkstra/doc/dijkstra.rst
rename to src/dijkstra/doc/dijkstra-family.rst
index ddeeb89..e0dcf8e 100644
--- a/src/dijkstra/doc/dijkstra.rst
+++ b/src/dijkstra/doc/dijkstra-family.rst
@@ -12,20 +12,27 @@
 Dijkstra - Family of functions
 ===============================================================================
 
-  - :ref:`pgr_dijkstra` - Dijkstra's algorithm for the shortest paths.
+.. index from here
 
-The following algorithms are based on pgr_dijkstra
+* :ref:`pgr_dijkstra` - Dijkstra's algorithm for the shortest paths.
+* :ref:`pgr_dijkstraCost` - Get the aggregate cost of the shortest paths.
+* :ref:`pgr_dijkstraCostMatrix` - Use pgr_dijkstra to create a costs matrix.
+* :ref:`pgr_drivingDistance` - Use pgr_dijkstra to calculate catchament information.
+* :ref:`pgr_ksp` - Use Yen algorithm with pgr_dijkstra to get the K shortest paths.
+* :ref:`pgr_dijkstraVia` - Get a route of a seuence of vertices.
 
-  - :ref:`pgr_dijkstraCost` - Get the aggregate cost of the shortest paths.
-  - :ref:`pgr_drivingDistance` - Get catchament information.
-  - :ref:`pgr_ksp` - Get the aggregate cost of the shortest paths.
+.. index to here
 
 
 .. toctree::
     :hidden:
 
-    ./pgr_dijkstra
-    ./pgr_dijkstraCost
+    pgr_dijkstra
+    pgr_dijkstraCost
+    pgr_dijkstraCostMatrix
+    pgr_drivingDistance
+    pgr_KSP
+    pgr_dijkstraVia
 
 
 The problem definition (Advanced documentation)
@@ -91,11 +98,11 @@ Then:
   \varnothing &\quad \text{otherwise} \\
   \end{cases}
 
-:math:`\boldsymbol{\pi} = \{(path_\seq_i, node_i, edge_i, cost_i, agg\_cost_i)\}`
+:math:`\boldsymbol{\pi} = \{(path\_seq_i, node_i, edge_i, cost_i, agg\_cost_i)\}`
 
 where:
-  - :math:`path_\seq_i = i`
-  - :math:`path_\seq_{| \pi |} = | \pi |`
+  - :math:`path\_seq_i = i`
+  - :math:`path\_seq_{| \pi |} = | \pi |`
   - :math:`node_i \in V`
   - :math:`node_1 = start_{vid}`
   - :math:`node_{| \pi |}  = end_{vid}`
@@ -107,7 +114,7 @@ where:
 
 
 In other words: The algorithm returns a the shortest path between :math:`start_{vid}` and :math:`end_{vid}` , if it exists, in terms of a sequence of nodes  and of edges,
-  - :math:`path_\seq` indicates the relative position in the path of the :math:`node` or :math:`edge`.
+  - :math:`path\_seq` indicates the relative position in the path of the :math:`node` or :math:`edge`.
   - :math:`cost` is the cost of the edge to be used to go to the next node.
   - :math:`agg\_cost` is the cost from the :math:`start_{vid}` up to the node.
 
diff --git a/src/dijkstra/doc/doc-pgr_dijkstra.queries b/src/dijkstra/doc/doc-pgr_dijkstra.queries
index 9bd3a04..a61fe72 100644
--- a/src/dijkstra/doc/doc-pgr_dijkstra.queries
+++ b/src/dijkstra/doc/doc-pgr_dijkstra.queries
@@ -247,8 +247,8 @@ SELECT * FROM pgr_dijkstra(
 -----+----------+-----------+------+------+------+----------
    1 |        1 |         2 |    2 |    4 |    1 |        0
    2 |        2 |         2 |    5 |   -1 |    0 |        1
-   3 |        1 |        11 |   11 |   11 |    1 |        0
-   4 |        2 |        11 |    6 |    8 |    1 |        1
+   3 |        1 |        11 |   11 |   12 |    1 |        0
+   4 |        2 |        11 |   10 |   10 |    1 |        1
    5 |        3 |        11 |    5 |   -1 |    0 |        2
 (5 rows)
 
@@ -409,8 +409,8 @@ SELECT * FROM pgr_dijkstra(
 -----+----------+-----------+------+------+------+----------
    1 |        1 |         2 |    2 |    4 |    1 |        0
    2 |        2 |         2 |    5 |   -1 |    0 |        1
-   3 |        1 |        11 |   11 |   11 |    1 |        0
-   4 |        2 |        11 |    6 |    8 |    1 |        1
+   3 |        1 |        11 |   11 |   12 |    1 |        0
+   4 |        2 |        11 |   10 |   10 |    1 |        1
    5 |        3 |        11 |    5 |   -1 |    0 |        2
 (5 rows)
 
@@ -604,8 +604,6 @@ SELECT * FROM pgr_dijkstra(
    2 |        2 |         2 |       3 |    3 |   -1 |    0 |        1
 (2 rows)
 
-SET client_min_messages TO NOTICE;
-SET
 SELECT * FROM pgr_dijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
     2, 3,
diff --git a/src/dijkstra/doc/doc-pgr_dijkstraCost.queries b/src/dijkstra/doc/doc-pgr_dijkstraCost.queries
index 6cb2411..ddb9a9b 100644
--- a/src/dijkstra/doc/doc-pgr_dijkstraCost.queries
+++ b/src/dijkstra/doc/doc-pgr_dijkstraCost.queries
@@ -1,5 +1,7 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_dijkstraCost(
     'select id, source, target, cost, reverse_cost from edge_table',
@@ -79,5 +81,5 @@ SELECT * FROM pgr_dijkstraCost(
 (6 rows)
 
 --q8
-ROLLBACK
+ROLLBACK;
 ROLLBACK
diff --git a/src/dijkstra/doc/doc-pgr_dijkstraVia.queries b/src/dijkstra/doc/doc-pgr_dijkstraVia.queries
index 3dcbdfd..241fd80 100644
--- a/src/dijkstra/doc/doc-pgr_dijkstraVia.queries
+++ b/src/dijkstra/doc/doc-pgr_dijkstraVia.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q00
 SELECT * FROM pgr_dijkstraVia(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table order by id',
@@ -126,3 +130,5 @@ WHERE node = 9 and (agg_cost  <> 0 or seq = 1);
   11 |              8 |    9 |        2 | visits
 (2 rows)
 
+ROLLBACK;
+ROLLBACK
diff --git a/src/dijkstra/doc/pgr_dijkstra.rst b/src/dijkstra/doc/pgr_dijkstra.rst
index c690894..ef8608b 100644
--- a/src/dijkstra/doc/pgr_dijkstra.rst
+++ b/src/dijkstra/doc/pgr_dijkstra.rst
@@ -15,11 +15,15 @@ pgr_dijkstra
 ``pgr_dijkstra`` — Returns the shortest path(s) using Dijkstra algorithm.
 In particular, the Dijkstra algorithm implemented by Boost.Graph.
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.html
 
    Boost Graph Inside
 
+.. rubric:: Availability
+
+* pgr_dijkstra(one to one) 2.0.0, signature change 2.1.0
+* pgr_dijkstra(other signatures) 2.1.0
 
 Synopsis
 -------------------------------------------------------------------------------
@@ -84,7 +88,7 @@ Minimal signature
     pgr_dijkstra(TEXT edges_sql, BIGINT start_vid, BIGINT end_vid)
     RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost) or EMPTY SET
 
-The minimal signature is for a **directed** graph from one ``start_vid`` to one ``end_vid``:
+The minimal signature is for a **directed** graph from one ``start_vid`` to one ``end_vid``.
 
 :Example:
 
@@ -210,32 +214,34 @@ The extra ``start_vid`` and ``end_vid`` in the result is used to distinguish to
 Description of the Signatures
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../sql/dijkstra.sql
-    :start-after: pgr_dijkstra_parameters_start
-    :end-before: pgr_dijkstra_parameters_end
 
+.. pgr_dijkstra_parameters_start
 
-Description of the return values
+Description of the parameters of the signatures
 ...............................................................................
 
-Returns set of ``(seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)``
+============== ================== ======== =================================================
+Column         Type               Default     Description
+============== ================== ======== =================================================
+**sql**        ``TEXT``                    SQL query as described above.
+**start_vid**  ``BIGINT``                  Identifier of the starting vertex of the path.
+**start_vids** ``ARRAY[BIGINT]``           Array of identifiers of starting vertices.
+**end_vid**    ``BIGINT``                  Identifier of the ending vertex of the path.
+**end_vids**   ``ARRAY[BIGINT]``           Array of identifiers of ending vertices.
+**directed**   ``BOOLEAN``        ``true`` - When ``true`` Graph is considered `Directed`
+                                           - When ``false`` the graph is considered as `Undirected`.
+============== ================== ======== =================================================
+
+.. pgr_dijkstra_parameters_end
+
 
-============== ========== =================================================
-Column         Type       Description
-============== ========== =================================================
-**seq**        ``INT``    Sequential value starting from **1**.
-**path_seq**   ``INT``    Relative position in the path. Has value **1** for the beginning of a path.
-**start_vid**  ``BIGINT`` Identifier of the starting vertex. Used when multiple starting vetrices are in the query.
-**end_vid**    ``BIGINT`` Identifier of the ending vertex. Used when multiple ending vertices are in the query.
-**node**       ``BIGINT`` Identifier of the node in the path from ``start_vid`` to ``end_vid``.
-**edge**       ``BIGINT`` Identifier of the edge used to go from ``node`` to the next node in the path sequence. ``-1`` for the last node of the path.
-**cost**       ``FLOAT``  Cost to traverse from ``node`` using ``edge`` to the next node in the path sequence.
-**agg_cost**   ``FLOAT``  Aggregate cost from ``start_v`` to ``node``.
-============== ========== =================================================
+.. include:: pgRouting-concepts.rst
+    :start-after: return_path_start
+    :end-before: return_path_end
 
 
 Additional Examples
@@ -313,11 +319,6 @@ The examples in this section use the following:
    :end-before: -- q18
 
 
-.. rubric:: History
-
-* Added functionality in version 2.1.0
-* Renamed in version 2.0.0
-
 
 See Also
 -------------------------------------------------------------------------------
diff --git a/src/dijkstra/doc/pgr_dijkstraCost.rst b/src/dijkstra/doc/pgr_dijkstraCost.rst
index 0533e5d..32fd5ae 100644
--- a/src/dijkstra/doc/pgr_dijkstraCost.rst
+++ b/src/dijkstra/doc/pgr_dijkstraCost.rst
@@ -9,7 +9,7 @@
 
 .. _pgr_dijkstraCost:
 
-pgr_dijkstraCost 
+pgr_dijkstraCost
 ===============================================================================
 
 
@@ -21,11 +21,15 @@ Synopsis
 Using Dijkstra algorithm implemented by Boost.Graph, and extract only the
 aggregate cost of the shortest path(s) found, for the combination of vertices given.
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.html
 
    Boost Graph Inside
 
+.. rubric:: Availability
+
+* pgr_dijkstraCost(all signatures) 2.2.0
+
 The ``pgr_dijkstraCost`` algorithm, is a good choice to calculate the sum of the costs
 of the shortest path for a subset of pairs of nodes of the graph.
 We make use of the Boost's implementation of dijkstra which runs in
@@ -208,28 +212,17 @@ This signature performs a Dijkstra from each ``start_vid`` in  ``start_vids`` to
 Description of the Signatures
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../sql/dijkstra.sql
+.. include:: ./pgr_dijkstra.rst
     :start-after: pgr_dijkstra_parameters_start
     :end-before: pgr_dijkstra_parameters_end
 
-
-
-Description of the return values
-...............................................................................
-
-Returns set of ``(start_vid, end_vid, agg_cost)``
-
-============= ============= =================================================
-Column        Type          Description
-============= ============= =================================================
-**start_vid** ``BIGINT``    Identifier of the starting vertex.
-**end_vid**   ``BIGINT``    Identifier of the ending vertex.
-**agg_cost**  ``FLOAT``     Aggregate cost of the shortest path from ``start_vid`` to ``end_vid``.
-============= ============= =================================================
+.. include:: pgRouting-concepts.rst
+    :start-after: return_cost_start
+    :end-before: return_cost_end
 
 
 Additional Examples
@@ -248,10 +241,6 @@ Additional Examples
     :end-before: --q8
 
 
-.. rubric:: History
-
-* New in version  2.2.0
-
 
 See Also
 -------------------------------------------------------------------------------
diff --git a/src/dijkstra/doc/pgr_dijkstraVia.rst b/src/dijkstra/doc/pgr_dijkstraVia.rst
index e8480fe..e1deb6e 100644
--- a/src/dijkstra/doc/pgr_dijkstraVia.rst
+++ b/src/dijkstra/doc/pgr_dijkstraVia.rst
@@ -20,11 +20,13 @@ Name
 a list of vertices.
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.2.0
+
 
 Synopsis
 -------------------------------------------------------------------------------
@@ -91,11 +93,11 @@ Complete Signature
 Description of the Signature
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../sql/dijkstraVia.sql
+.. include:: ../sql_queries/dijkstraVia.sql
     :start-after: pgr_dijkstra_via_parameters_start
     :end-before: pgr_dijkstra_via_parameters_end
 
diff --git a/src/dijkstra/doc/pgr_dijkstra_v2.rst b/src/dijkstra/doc/pgr_dijkstra_v2.rst
deleted file mode 100644
index c136224..0000000
--- a/src/dijkstra/doc/pgr_dijkstra_v2.rst
+++ /dev/null
@@ -1,113 +0,0 @@
-..
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_dijkstra_v2:
-
-pgr_dijkstra - Deprecated Signature
-===============================================================================
-
-.. warning:: This function signature is deprecated!!!
-
-    * That means it has been replaced by new signature(s)
-    * This signature is no longer supported, and may be removed from future versions.
-    * All code that use this function signature should be converted to use its replacement :ref:`pgr_dijkstra` (One to One).
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_dijkstra`` — Returns the shortest path using Dijkstra algorithm.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-Dijkstra's algorithm, conceived by Dutch computer scientist Edsger Dijkstra in 1956. It is a graph search algorithm that solves the single-source shortest path problem for a graph with non-negative edge path costs, producing a shortest path tree. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows, that make up a path.
-
-.. code-block:: sql
-
-	pgr_costResult[] pgr_dijkstra(text sql, integer source, integer target,
-	                           boolean directed, boolean has_rcost);
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-	.. code-block:: sql
-
-		SELECT id, source, target, cost [,reverse_cost] FROM edge_table
-
-
-	:id: ``int4`` identifier of the edge
-	:source: ``int4`` identifier of the source vertex
-	:target: ``int4`` identifier of the target vertex
-	:cost: ``float8`` value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph.
-	:reverse_cost: ``float8`` (optional) the cost for the reverse traversal of the edge. This is only used when the ``directed`` and ``has_rcost`` parameters are ``true`` (see the above remark about negative costs).
-
-:source: ``int4`` id of the start point
-:target: ``int4`` id of the end point
-:directed: ``true`` if the graph is directed
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   node ID
-:id2:   edge ID (``-1`` for the last row)
-:cost:  cost to traverse from ``id1`` using ``id2``
-
-
-.. rubric:: History
-
-* Renamed in version 2.0.0
-
-
-Examples: Directed
--------------------------------------------------------------------------------
-
-* Without ``reverse_cost``
-
-.. literalinclude:: dijkstra-v2.queries
-   :start-after: --q1
-   :end-before: --q2
-
-
-* With ``reverse_cost``
-
-.. literalinclude:: dijkstra-v2.queries
-   :start-after: --q2
-   :end-before: --q3
-
-
-
-Examples: Undirected
--------------------------------------------------------------------------------
-
-* Without ``reverse_cost``
-
-.. literalinclude:: dijkstra-v2.queries
-   :start-after: --q3
-   :end-before: --q4
-
-
-* With ``reverse_cost``
-
-.. literalinclude:: dijkstra-v2.queries
-   :start-after: --q4
-   :end-before: --q5
-
-
-The queries use the :ref:`sampledata` network.
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`dijkstra`, :ref:`pgr_dijkstra`
-* :ref:`type_cost_result`
-* http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
diff --git a/src/dijkstra/sql/dijkstra.sql b/src/dijkstra/sql/dijkstra.sql
index bfe4bc9..7ff9dd0 100644
--- a/src/dijkstra/sql/dijkstra.sql
+++ b/src/dijkstra/sql/dijkstra.sql
@@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-/* ********** FOR USERS DOCUMENTATION
+/*FOR USERS DOCUMENTATION
 
 The following applies to:
     pgr_dijkstra
@@ -50,7 +50,7 @@ Column         Type               Default     Description
 
 pgr_dijkstra_parameters_end
 
-*/
+FOR-USER*/
 
 CREATE OR REPLACE FUNCTION _pgr_dijkstra(edges_sql TEXT, start_vid BIGINT, end_vid BIGINT, directed BOOLEAN,
     only_cost BOOLEAN DEFAULT false,
diff --git a/src/dijkstra/sql/dijkstraVia.sql b/src/dijkstra/sql/dijkstraVia.sql
index 8ab1076..a15d465 100644
--- a/src/dijkstra/sql/dijkstraVia.sql
+++ b/src/dijkstra/sql/dijkstraVia.sql
@@ -25,7 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-/* ******** FOR USERS DOCUMENTATION
+/*FOR USERS DOCUMENTATION
 
 pgr_dijkstra_via_parameters_start
 
@@ -47,7 +47,7 @@ Parameter           Type                   Default   Description
 
 pgr_dijkstra_via_parameters_end
 
-*/
+USER*/
 
 
 CREATE OR REPLACE FUNCTION pgr_dijkstraVia(
diff --git a/src/dijkstra/src/CMakeLists.txt b/src/dijkstra/src/CMakeLists.txt
index 974cfe7..e3b688d 100644
--- a/src/dijkstra/src/CMakeLists.txt
+++ b/src/dijkstra/src/CMakeLists.txt
@@ -5,9 +5,5 @@ ADD_LIBRARY(dijkstra OBJECT
         many_to_many_dijkstra.c
         dijkstraVia.c
 
-
-        one_to_one_dijkstra_driver.cpp
-        one_to_many_dijkstra_driver.cpp
         many_to_many_dijkstra_driver.cpp 
-        many_to_one_dijkstra_driver.cpp
         dijkstraVia_driver.cpp)
diff --git a/src/dijkstra/src/dijkstraVia.c b/src/dijkstra/src/dijkstraVia.c
index 5192822..bc93d9f 100644
--- a/src/dijkstra/src/dijkstraVia.c
+++ b/src/dijkstra/src/dijkstraVia.c
@@ -25,38 +25,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
-  Uncomment when needed
-*/
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./dijkstraVia_driver.h"
 
 PGDLLEXPORT Datum dijkstraVia(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(dijkstraVia);
 
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
 static
 void
-process( char* edges_sql,
-        int64_t *via_vidsArr,
-        size_t size_via_vidsArr,
+process(char* edges_sql,
+        ArrayType *vias,
         bool directed,
         bool strict,
         bool U_turn_on_edge,
@@ -64,67 +50,64 @@ process( char* edges_sql,
         size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
-    pgr_edge_t *edges;
-    edges = NULL;
-    size_t total_tuples;
-    total_tuples = 0;
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
+    int64_t* via_vidsArr = NULL;
+    size_t size_via_vidsArr = 0;
+    via_vidsArr = (int64_t*) pgr_get_bigIntArray(&size_via_vidsArr, vias);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    pgr_edge_t* edges = NULL;
+    size_t total_edges = 0;
+    pgr_get_edges(edges_sql, &edges, &total_edges);
+
+    if (total_edges == 0) {
+        if (via_vidsArr) pfree(via_vidsArr);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
-    PGR_DBG("directed: %d", directed);
-    PGR_DBG("strict: %d", strict);
-    PGR_DBG("U_turn_on_edge: %d", U_turn_on_edge);
-
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-
-    char *err_msg = (char *)"";
-    do_pgr_dijkstraViaVertex(
-            edges,
-            total_tuples,
-            via_vidsArr,
-            size_via_vidsArr,
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_dijkstraVia(
+            edges, total_edges,
+            via_vidsArr, size_via_vidsArr,
             directed,
             strict,
             U_turn_on_edge,
             result_tuples,
             result_count,
+            &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing Dijkstra Via", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
+    time_msg("processing pgr_dijkstraVia", start_t, clock());
 
-    free(err_msg);
-    pfree(edges);
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (via_vidsArr) pfree(via_vidsArr);
     pgr_SPI_finish();
 }
-/*                                                                             */
-/*******************************************************************************/
 
-PG_FUNCTION_INFO_V1(dijkstraVia);
+
 PGDLLEXPORT Datum
 dijkstraVia(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t               call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
+    /**********************************************************************/
     Routes_t  *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -132,39 +115,33 @@ dijkstraVia(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   
+        /**********************************************************************
          * pgr_dijkstraVia(edges_sql text,
          *   vertices anyarray,
          *   directed boolean default true,
          *   strict boolean default false,
          *   U_turn_on_edge boolean default false,
-         *******************************************************************************/
-
-        PGR_DBG("Initializing arrays");
-        int64_t* via_vidsArr;
-        size_t size_via_vidsArr;
-        via_vidsArr = (int64_t*) pgr_get_bigIntArray(&size_via_vidsArr, PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("Via VertexArr size %ld ", size_via_vidsArr);
+         **********************************************************************/
 
-        PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                via_vidsArr, size_via_vidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
                 PG_GETARG_BOOL(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_BOOL(4),
                 &result_tuples,
                 &result_count);
 
-        PGR_DBG("Cleaning arrays");
-        free(via_vidsArr);
-        /*                                                                             */
-        /*******************************************************************************/
+        /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -175,26 +152,35 @@ dijkstraVia(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (Routes_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
-
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
-        //    OUT seq BIGINT, OUT path_id BIGINT, OUT path_seq BIGINT, OUT start_vid BIGINT, OUT end_vid BIGINT, OUT node BIGINT, OUT edge BIGINT, OUT cost FLOAT, OUT agg_cost FLOAT, OUT route_agg_cost FLOAT)
+        size_t       call_cntr = funcctx->call_cntr;
+
+        /**********************************************************************/
+        /*
+           OUT seq INTEGER,
+           OUT path_id INTEGER,
+           OUT path_seq INTEGER,
+           OUT start_vid BIGINT,
+           OUT end_vid BIGINT,
+           OUT node BIGINT,
+           OUT edge BIGINT,
+           OUT cost FLOAT,
+           OUT agg_cost FLOAT,
+           OUT route_agg_cost FLOAT
+           */
 
         size_t numb_out = 10;
         values = palloc(numb_out * sizeof(Datum));
         nulls = palloc(numb_out * sizeof(bool));
         size_t i;
-        for(i = 0; i< numb_out; ++i) {
+        for (i = 0; i< numb_out; ++i) {
             nulls[i] = false;
         }
 
@@ -210,15 +196,12 @@ dijkstraVia(PG_FUNCTION_ARGS) {
         values[8] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
         values[9] = Float8GetDatum(result_tuples[call_cntr].route_agg_cost);
 
-        /*******************************************************************************/
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/dijkstra/src/dijkstraVia_driver.cpp b/src/dijkstra/src/dijkstraVia_driver.cpp
index 0af2721..8599df4 100644
--- a/src/dijkstra/src/dijkstraVia_driver.cpp
+++ b/src/dijkstra/src/dijkstraVia_driver.cpp
@@ -25,20 +25,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
+#include "./dijkstraVia_driver.h"
 
 #include <sstream>
 #include <deque>
 #include <vector>
-#include "./pgr_dijkstra.hpp"
-#include "./dijkstraVia_driver.h"
-#include "./../../common/src/pgr_alloc.hpp"
 
+#include "./pgr_dijkstra.hpp"
 
+#include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
 
 
@@ -66,28 +62,33 @@ pgr_dijkstraViaVertex(
             continue;
         }
 
-        // Delete uTurn edges only valid for paths that are not the first path
+        // Delete U Turn edges only valid for paths that are not the first path
         if (!U_turn_on_edge && i > 1) {
-            // we can only delete if there is was a path, that is at least one edge size
+            /*
+             * Can only delete if there was a path,
+             * that is at least one edge size
+             */
             if (path.size() > 1) {
-                // Delete from the graph the last edge if its outgoing also
-                // edge to be removed = second to last edge path[i].edge;
+                /*
+                 * Delete from the graph the last edge if its outgoing also
+                 * edge to be removed = second to last edge path[i].edge;
+                 */
                 int64_t edge_to_be_removed = path[path.size() - 2].edge;
                 int64_t last_vertex_of_path = prev_vertex;
 
                 // and the current vertex is not a dead end
                 if (graph.out_degree(last_vertex_of_path) > 1) {
-                log << "departing from " << last_vertex_of_path
-                    << " deleting edge " << edge_to_be_removed << "\n";
-                    graph.disconnect_out_going_edge(last_vertex_of_path, edge_to_be_removed);
+                    log << "\ndeparting from " << last_vertex_of_path
+                        << " deleting edge " << edge_to_be_removed << "\n";
+                    graph.disconnect_out_going_edge(
+                            last_vertex_of_path,
+                            edge_to_be_removed);
                 }
             }
         }
 
-        path.clear();
-
-        log << "from " << prev_vertex << " to " << vertex << "\n";
-        pgr_dijkstra(graph, path, prev_vertex, vertex);
+        log << "\nfrom " << prev_vertex << " to " << vertex;
+        path = pgr_dijkstra(graph, prev_vertex, vertex);
 
         if (!U_turn_on_edge && i > 1) {
             graph.restore_graph();
@@ -96,8 +97,9 @@ pgr_dijkstraViaVertex(
                  *  no path was found with the deleted edge
                  *  try with the edge back in the graph
                  */
-                log << "WAS empty so again from " << prev_vertex << " to " << vertex << "\n";
-                pgr_dijkstra(graph, path, prev_vertex, vertex);
+                log << "\nEmpty so again from "
+                    << prev_vertex << " to " << vertex;
+                path = pgr_dijkstra(graph, prev_vertex, vertex);
             }
         }
 
@@ -160,42 +162,59 @@ get_route(
     return sequence;
 }
 
-// CREATE OR REPLACE FUNCTION pgr_dijkstraViaVertices(sql text, vertices anyarray, directed boolean default true,
 void
-do_pgr_dijkstraViaVertex(
-        pgr_edge_t  *data_edges,    size_t total_tuples,
-        int64_t  *via_vidsArr,      size_t size_via_vidsArr,
+do_pgr_dijkstraVia(
+        pgr_edge_t* data_edges,    size_t total_edges,
+        int64_t* via_vidsArr,     size_t size_via_vidsArr,
         bool directed,
         bool strict,
         bool U_turn_on_edge,
-        Routes_t **return_tuples,   size_t *return_count,
-        char ** err_msg) {
+        Routes_t** return_tuples,   size_t* return_count,
+
+        char** log_msg,
+        char** notice_msg,
+        char** err_msg) {
     std::ostringstream log;
+    std::ostringstream err;
+    std::ostringstream notice;
+
     try {
-        if (total_tuples == 1) {
-            log << "Required: more than one tuple\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
+        pgassert(total_edges != 0);
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert(*return_count == 0);
 
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
         std::deque< Path >paths;
-        log << "Inserting vertices into a c++ vector structure\n";
-        std::vector< int64_t > via_vertices(via_vidsArr, via_vidsArr + size_via_vidsArr);
+        log << "\nInserting vertices into a c++ vector structure";
+        std::vector< int64_t > via_vertices(
+                via_vidsArr, via_vidsArr + size_via_vidsArr);
 
         if (directed) {
-            log << "Working with directed Graph\n";
+            log << "\nWorking with directed Graph";
             pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_tuples);
-            pgr_dijkstraViaVertex(digraph, via_vertices, paths, strict, U_turn_on_edge, log);
+            digraph.insert_edges(data_edges, total_edges);
+            pgr_dijkstraViaVertex(
+                    digraph,
+                    via_vertices,
+                    paths,
+                    strict,
+                    U_turn_on_edge,
+                    log);
         } else {
-            log << "Working with Undirected Graph\n";
+            log << "\nWorking with Undirected Graph";
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_tuples);
-            pgr_dijkstraViaVertex(undigraph, via_vertices, paths, strict, U_turn_on_edge, log);
+            undigraph.insert_edges(data_edges, total_edges);
+            pgr_dijkstraViaVertex(
+                    undigraph,
+                    via_vertices,
+                    paths,
+                    strict,
+                    U_turn_on_edge,
+                    log);
         }
 
         size_t count(count_tuples(paths));
@@ -203,30 +222,43 @@ do_pgr_dijkstraViaVertex(
         if (count == 0) {
             (*return_tuples) = NULL;
             (*return_count) = 0;
-            log <<
-                "No paths found\n";
-            *err_msg = strdup(log.str().c_str());
+            notice <<
+                "No paths found";
+            *log_msg = pgr_msg(notice.str().c_str());
             return;
         }
 
         // get the space required to store all the paths
         (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
+        log << "\nConverting a set of paths into the tuples";
         (*return_count) = (get_route(return_tuples, paths));
         (*return_tuples)[count - 1].edge = -2;
 
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-    } catch ( ... ) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
 
 
-
-
-
diff --git a/src/dijkstra/src/dijkstraVia_driver.h b/src/dijkstra/src/dijkstraVia_driver.h
index a0550b2..7da7893 100644
--- a/src/dijkstra/src/dijkstraVia_driver.h
+++ b/src/dijkstra/src/dijkstraVia_driver.h
@@ -25,8 +25,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_DIJKSTRAVIAVERTEX_SRC_DIJKSTRAVIAVERTEX_DRIVER_H_
-#define SRC_DIJKSTRAVIAVERTEX_SRC_DIJKSTRAVIAVERTEX_DRIVER_H_
+#ifndef SRC_DIJKSTRA_SRC_DIJKSTRAVIA_DRIVER_H_
+#define SRC_DIJKSTRA_SRC_DIJKSTRAVIA_DRIVER_H_
+#pragma once
 
 #include "./../../common/src/pgr_types.h"
 
@@ -34,20 +35,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 extern "C" {
 #endif
 
-    //  CREATE OR REPLACE FUNCTION pgr_dijkstraViaVertices(sql text, vertices anyarray, directed boolean default true,
+    /*
+       CREATE OR REPLACE FUNCTION pgr_dijkstraViaVertices(
+       sql text,
+       vertices anyarray,
+       directed boolean default true,
+       */
     void
-        do_pgr_dijkstraViaVertex(
-                pgr_edge_t  *data_edges,  size_t total_tuples,
+        do_pgr_dijkstraVia(
+                pgr_edge_t  *data_edges,  size_t total_edges,
                 int64_t  *via_vidsArr,    size_t size_via_vidsArr,
                 bool directed,
                 bool strict,
                 bool U_turn_on_edge,
                 Routes_t **return_tuples, size_t *return_count,
-                char ** err_msg);
 
+                char** log_msg,
+                char** notice_msg,
+                char** err_msg);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  // SRC_DIJKSTRAVIAVERTEX_SRC_DIJKSTRAVIAVERTEX_DRIVER_H_
+#endif  // SRC_DIJKSTRA_SRC_DIJKSTRAVIA_DRIVER_H_
diff --git a/src/dijkstra/src/many_to_many_dijkstra.c b/src/dijkstra/src/many_to_many_dijkstra.c
index f9e282c..cab39ef 100644
--- a/src/dijkstra/src/many_to_many_dijkstra.c
+++ b/src/dijkstra/src/many_to_many_dijkstra.c
@@ -28,103 +28,108 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
-   Uncomment when needed
-   */
-
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./many_to_many_dijkstra_driver.h"
 
 PGDLLEXPORT Datum many_to_many_dijkstra(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(many_to_many_dijkstra);
 
-
-/******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
 static
 void
 process(
         char* edges_sql,
-        int64_t *start_vidsArr, size_t size_start_vidsArr,
-        int64_t *end_vidsArr, size_t size_end_vidsArr,
+        ArrayType *starts,
+        ArrayType *ends,
         bool directed,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
+    int64_t* start_vidsArr = NULL;
+    size_t size_start_vidsArr = 0;
+    start_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_start_vidsArr, starts);
+
+    int64_t* end_vidsArr = NULL;
+    size_t size_end_vidsArr = 0;
+    end_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_end_vidsArr, ends);
+
     pgr_edge_t *edges = NULL;
-    size_t total_tuples = 0;
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
+    size_t total_edges = 0;
+    pgr_get_edges(edges_sql, &edges, &total_edges);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+
+    if (total_edges == 0) {
+        if (end_vidsArr) pfree(end_vidsArr);
+        if (start_vidsArr) pfree(start_vidsArr);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-
-    char *err_msg = NULL;
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
     do_pgr_many_to_many_dijkstra(
-            edges,
-            total_tuples,
-            start_vidsArr,
-            size_start_vidsArr,
-            end_vidsArr,
-            size_end_vidsArr,
+            edges, total_edges,
+            start_vidsArr, size_start_vidsArr,
+            end_vidsArr, size_end_vidsArr,
+
             directed,
             only_cost,
+            true,  // normal
+
             result_tuples,
             result_count,
+
+            &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing Dijkstra many to many", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
 
-    free(err_msg);
-    pfree(edges);
+    if (only_cost) {
+        time_msg("processing pgr_dijkstraCost(many to many)", start_t, clock());
+    } else {
+        time_msg("processing pgr_dijkstra(many to many)", start_t, clock());
+    }
+
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (start_vidsArr) pfree(start_vidsArr);
+    if (end_vidsArr) pfree(end_vidsArr);
     pgr_SPI_finish();
 }
-/*                                                                           */
-/*****************************************************************************/
 
-PG_FUNCTION_INFO_V1(many_to_many_dijkstra);
 PGDLLEXPORT Datum
 many_to_many_dijkstra(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
-    General_path_element_t  *result_tuples = 0;
+    /**********************************************************************/
+    General_path_element_t  *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                        */
-    /**************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -132,44 +137,31 @@ many_to_many_dijkstra(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*********************************************************************/
-        /*                          MODIFY AS NEEDED                         */
-        // CREATE OR REPLACE FUNCTION pgr_dijkstra(
-        // sql text,
-        // start_vids anyarray,
-        // end_vids anyarray,
-        // directed boolean default true,
-
-        PGR_DBG("Initializing arrays");
-        int64_t* start_vidsArr;
-        size_t size_start_vidsArr;
-        start_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_start_vidsArr, PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("start_vidsArr size %ld ", size_start_vidsArr);
-
-        int64_t* end_vidsArr;
-        size_t size_end_vidsArr;
-        end_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_end_vidsArr, PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("end_vidsArr size %ld ", size_end_vidsArr);
-
-        PGR_DBG("Calling process");
+        /**********************************************************************/
+        // pgr_dijkstra(
+        // sql TEXT,
+        // start_vids ANYARRAY,
+        // end_vids ANYARRAY,
+        // directed BOOLEAN default true,
+        // only_cost BOOLEAN default false
+
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                start_vidsArr, size_start_vidsArr,
-                end_vidsArr, size_end_vidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_ARRAYTYPE_P(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_BOOL(4),
                 &result_tuples,
                 &result_count);
 
-        PGR_DBG("Cleaning arrays");
-        free(end_vidsArr);
-        free(start_vidsArr);
-        /*                                                                   */
-        /*********************************************************************/
+        /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
+
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -184,33 +176,32 @@ many_to_many_dijkstra(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
+        size_t       call_cntr = funcctx->call_cntr;
 
-        /*********************************************************************/
-        /*                          MODIFY AS NEEDED                         */
-        // OUT seq integer,
+        /**********************************************************************/
+        // OUT seq INTEGER,
         // OUT path_seq INTEGER,
-        // OUT start_vid,
+        // OUT start_vid BIGINT,
         // OUT end_vid BIGINT,
-        // OUT node bigint,
-        // OUT edge bigint,
-        // OUT cost float,
-        // OUT agg_cost float)
+        // OUT node BIGINT,
+        // OUT edge BIGINT,
+        // OUT cost FLOAT,
+        // OUT agg_cost FLOAT)
 
-        values = palloc(8 * sizeof(Datum));
-        nulls = palloc(8 * sizeof(bool));
+        size_t numb = 8;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
         size_t i;
-        for (i = 0; i < 8; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
 
@@ -222,15 +213,12 @@ many_to_many_dijkstra(PG_FUNCTION_ARGS) {
         values[5] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[6] = Float8GetDatum(result_tuples[call_cntr].cost);
         values[7] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*********************************************************************/
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/dijkstra/src/many_to_many_dijkstra_driver.cpp b/src/dijkstra/src/many_to_many_dijkstra_driver.cpp
index 0db5d04..f0ee9dd 100644
--- a/src/dijkstra/src/many_to_many_dijkstra_driver.cpp
+++ b/src/dijkstra/src/many_to_many_dijkstra_driver.cpp
@@ -27,21 +27,50 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
+#include "./many_to_many_dijkstra_driver.h"
 
 #include <sstream>
 #include <deque>
 #include <vector>
-#include <set>
+#include <algorithm>
+
 #include "./pgr_dijkstra.hpp"
-#include "./many_to_many_dijkstra_driver.h"
 
 #include "../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
 
+template < class G >
+std::deque< Path >
+pgr_dijkstra(
+        G &graph,
+        std::vector < int64_t > sources,
+        std::vector < int64_t > targets,
+        bool only_cost,
+        bool normal) {
+    std::sort(sources.begin(), sources.end());
+    sources.erase(
+            std::unique(sources.begin(), sources.end()),
+            sources.end());
+
+    std::sort(targets.begin(), targets.end());
+    targets.erase(
+            std::unique(targets.begin(), targets.end()),
+            targets.end());
+
+    Pgr_dijkstra< G > fn_dijkstra;
+    auto paths = fn_dijkstra.dijkstra(graph, sources, targets, only_cost);
+
+    if (!normal) {
+        for (auto &path : paths) {
+            path.reverse();
+        }
+    }
+    return paths;
+}
+
+
+
 // CREATE OR REPLACE FUNCTION pgr_dijkstra(
 // sql text,
 // start_vids anyarray,
@@ -50,75 +79,97 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 void
 do_pgr_many_to_many_dijkstra(
         pgr_edge_t  *data_edges,
-        size_t total_tuples,
+        size_t total_edges,
         int64_t  *start_vidsArr,
         size_t size_start_vidsArr,
         int64_t  *end_vidsArr,
         size_t size_end_vidsArr,
         bool directed,
         bool only_cost,
+        bool normal,
         General_path_element_t **return_tuples,
         size_t *return_count,
+        char ** log_msg,
+        char ** notice_msg,
         char ** err_msg) {
     std::ostringstream log;
+    std::ostringstream err;
+    std::ostringstream notice;
+
     try {
+        pgassert(total_edges != 0);
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert(*return_count == 0);
+
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
+        log << "Inserting vertices into a c++ vector structure";
+        std::vector<int64_t>
+            start_vertices(start_vidsArr, start_vidsArr + size_start_vidsArr);
+        std::vector< int64_t >
+            end_vertices(end_vidsArr, end_vidsArr + size_end_vidsArr);
+
         std::deque< Path >paths;
-        log << "Inserting vertices into a c++ vector structure\n";
-        std::set< int64_t >
-            s_start_vertices(start_vidsArr, start_vidsArr + size_start_vidsArr);
-        std::set< int64_t >
-            s_end_vertices(end_vidsArr, end_vidsArr + size_end_vidsArr);
-
-        std::vector< int64_t > start_vertices(s_start_vertices.begin(), s_start_vertices.end());
-        std::vector< int64_t > end_vertices(s_end_vertices.begin(), s_end_vertices.end());
         if (directed) {
-            log << "Working with directed Graph\n";
+            log << "\nWorking with directed Graph";
             pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_tuples);
-            pgr_dijkstra(digraph, paths, start_vertices, end_vertices, only_cost);
+            digraph.insert_edges(data_edges, total_edges);
+            paths = pgr_dijkstra(
+                    digraph,
+                    start_vertices, end_vertices,
+                    only_cost, normal);
         } else {
-            log << "Working with Undirected Graph\n";
+            log << "\nWorking with Undirected Graph";
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_tuples);
-            pgr_dijkstra(undigraph, paths, start_vertices, end_vertices, only_cost);
+            undigraph.insert_edges(data_edges, total_edges);
+            paths = pgr_dijkstra(
+                    undigraph,
+                    start_vertices, end_vertices,
+                    only_cost, normal);
         }
 
-
         size_t count(0);
-
         count = count_tuples(paths);
 
         if (count == 0) {
             (*return_tuples) = NULL;
             (*return_count) = 0;
-            log <<
-                "No paths found between Starting and any of the Ending vertices\n";
-            *err_msg = strdup(log.str().c_str());
+            notice <<
+                "No paths found";
+            *log_msg = pgr_msg(notice.str().c_str());
             return;
         }
 
         (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
+        log << "\nConverting a set of paths into the tuples";
         (*return_count) = (collapse_paths(return_tuples, paths));
 
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch ( ... ) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
-
-
-
-
-
diff --git a/src/dijkstra/src/many_to_many_dijkstra_driver.h b/src/dijkstra/src/many_to_many_dijkstra_driver.h
index 78b2ccf..3bc8b17 100644
--- a/src/dijkstra/src/many_to_many_dijkstra_driver.h
+++ b/src/dijkstra/src/many_to_many_dijkstra_driver.h
@@ -42,23 +42,26 @@ extern "C" {
     //  start_vids anyarray,
     //  end_vids anyarray,
     //  directed boolean default true,
-    void
-        do_pgr_many_to_many_dijkstra(
-                pgr_edge_t  *data_edges,
-                size_t total_tuples,
-                int64_t  *start_vidsArr,
-                size_t size_start_vidsArr,
-                int64_t  *end_vidsArr,
-                size_t size_end_vidsArr,
-                bool directed,
-                bool only_cost,
-                General_path_element_t **return_tuples,
-                size_t *return_count,
-                char ** err_msg);
+    void do_pgr_many_to_many_dijkstra(
+            pgr_edge_t  *data_edges,
+            size_t total_tuples,
+            int64_t  *start_vidsArr,
+            size_t size_start_vidsArr,
+            int64_t  *end_vidsArr,
+            size_t size_end_vidsArr,
+            bool directed,
+            bool only_cost,
+            bool normal,
 
+            General_path_element_t **return_tuples,
+            size_t *return_count,
+
+            char** log_msg,
+            char** notice_msg,
+            char** err_msg);
 
 #ifdef __cplusplus
-}
+    }
 #endif
 
 #endif  // SRC_DIJKSTRA_SRC_MANY_TO_MANY_DIJKSTRA_DRIVER_H_
diff --git a/src/dijkstra/src/many_to_one_dijkstra.c b/src/dijkstra/src/many_to_one_dijkstra.c
index 6fe7845..a82a1a4 100644
--- a/src/dijkstra/src/many_to_one_dijkstra.c
+++ b/src/dijkstra/src/many_to_one_dijkstra.c
@@ -28,40 +28,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
-
-#include "fmgr.h"
 
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./many_to_one_dijkstra_driver.h"
+#include "./many_to_many_dijkstra_driver.h"
 
 PGDLLEXPORT Datum many_to_one_dijkstra(PG_FUNCTION_ARGS);
-/******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
+PG_FUNCTION_INFO_V1(many_to_one_dijkstra);
+
 static
 void
 process(
         char* edges_sql,
-        int64_t *start_vidsArr,
-        size_t size_start_vidsArr,
+        ArrayType *starts,
         int64_t end_vid,
         bool directed,
         bool only_cost,
@@ -69,62 +54,73 @@ process(
         size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
+    int64_t* start_vidsArr = NULL;
+    size_t size_start_vidsArr = 0;
+    start_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_start_vidsArr, starts);
+
     pgr_edge_t *edges = NULL;
-    size_t total_tuples = 0;
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
+    size_t total_edges = 0;
+    pgr_get_edges_reversed(edges_sql, &edges, &total_edges);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    if (total_edges == 0) {
+        if (start_vidsArr) pfree(start_vidsArr);
         pgr_SPI_finish();
         return;
     }
 
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
-
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_to_many_dijkstra(
+            edges, total_edges,
+            &end_vid, 1,
+            start_vidsArr, size_start_vidsArr,
 
-    char *err_msg = NULL;
-    do_pgr_many_to_one_dijkstra(
-            edges,
-            total_tuples,
-            start_vidsArr,
-            size_start_vidsArr,
-            end_vid,
             directed,
             only_cost,
+            false,  // data is reversed
             result_tuples,
             result_count,
+
+            &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing Dijkstra many to one", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
 
-    free(err_msg);
-    pfree(edges);
+    if (only_cost) {
+        time_msg("processing pgr_dijkstraCost(many to one)", start_t, clock());
+    } else {
+        time_msg("processing pgr_dijkstra(many to one)", start_t, clock());
+    }
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (start_vidsArr) pfree(start_vidsArr);
+
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
-PG_FUNCTION_INFO_V1(many_to_one_dijkstra);
 PGDLLEXPORT Datum
 many_to_one_dijkstra(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
-    General_path_element_t  *result_tuples = 0;
+    /**********************************************************************/
+    General_path_element_t  *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                        */
-    /**************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -132,37 +128,29 @@ many_to_one_dijkstra(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*********************************************************************/
-        /*                          MODIFY AS NEEDED                         */
-        // CREATE OR REPLACE FUNCTION pgr_dijkstra(
-        // sql text,
-        // start_vids anyarray,
+        /**********************************************************************/
+        // pgr_dijkstra(
+        // sql TEXT,
+        // start_vids ANYARRAY,
         // end_vid BIGINT,
         // directed BOOLEAN default true,
+        // only_cost BOOLEAN default false
 
-        PGR_DBG("Initializing arrays");
-        int64_t* start_vidsArr;
-        size_t size_start_vidsArr;
-        start_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_start_vidsArr, PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("start_vidsArr size %ld ", size_start_vidsArr);
-
-        PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                start_vidsArr, size_start_vidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
                 PG_GETARG_INT64(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_BOOL(4),
                 &result_tuples,
                 &result_count);
 
-        PGR_DBG("Cleaning arrays");
-        free(start_vidsArr);
-        /*                                                                   */
-        /*********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -177,37 +165,34 @@ many_to_one_dijkstra(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
+        size_t       call_cntr = funcctx->call_cntr;
 
-        /*********************************************************************/
-        /*                          MODIFY AS NEEDED                         */
+        /**********************************************************************/
         // OUT seq INTEGER,
         // OUT path_seq INTEGER,
         // OUT start_vid BIGINT,
-        // OUT end_vid BIGINT,
         // OUT node BIGINT,
         // OUT edge BIGINT,
         // OUT cost FLOAT,
         // OUT agg_cost FLOAT)
 
-        values = palloc(7 * sizeof(Datum));
-        nulls = palloc(7 * sizeof(bool));
+        size_t numb = 7;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
         size_t i;
-        for (i = 0; i < 7; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
         values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
@@ -215,15 +200,12 @@ many_to_one_dijkstra(PG_FUNCTION_ARGS) {
         values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
         values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*********************************************************************/
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/dijkstra/src/many_to_one_dijkstra_driver.cpp b/src/dijkstra/src/many_to_one_dijkstra_driver.cpp
deleted file mode 100644
index 7bd5243..0000000
--- a/src/dijkstra/src/many_to_one_dijkstra_driver.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: many_to_one_dijkstra_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: vicky_vergara at hotmail.com
-
-Copyright (c) 2015 pgRouting developers
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <sstream>
-#include <deque>
-#include <vector>
-#include <set>
-#include "./pgr_dijkstra.hpp"
-#include "./many_to_one_dijkstra_driver.h"
-
-#include "../../common/src/pgr_alloc.hpp"
-#include "./../../common/src/pgr_types.h"
-
-// CREATE OR REPLACE FUNCTION pgr_dijkstra(
-// sql text,
-// start_vids anyarray,
-// end_vid BIGINT,
-// directed BOOLEAN default true,
-void
-do_pgr_many_to_one_dijkstra(
-        pgr_edge_t  *data_edges,
-        size_t total_tuples,
-        int64_t  *start_vidsArr,
-        size_t size_start_vidsArr,
-        int64_t end_vid,
-        bool directed,
-        bool only_cost,
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** err_msg) {
-    std::ostringstream log;
-    try {
-        graphType gType = directed? DIRECTED: UNDIRECTED;
-
-        std::deque< Path >paths;
-        log << "Inserting vertices into a c++ vector structure\n";
-        std::set< int64_t > s_start_vertices(start_vidsArr, start_vidsArr + size_start_vidsArr);
-        std::vector< int64_t > start_vertices(s_start_vertices.begin(), s_start_vertices.end());
-
-        if (directed) {
-            log << "Working with directed Graph\n";
-            pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_tuples);
-            pgr_dijkstra(digraph, paths, start_vertices, end_vid, only_cost);
-        } else {
-            log << "Working with Undirected Graph\n";
-            pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_tuples);
-            pgr_dijkstra(undigraph, paths, start_vertices, end_vid, only_cost);
-        }
-
-
-        size_t count(0);
-        count = count_tuples(paths);
-
-
-        if (count == 0) {
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            log <<
-                "No paths found between Starting and any of the Ending vertices\n";
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
-        (*return_count) = (collapse_paths(return_tuples, paths));
-
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch ( ... ) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/dijkstra/src/many_to_one_dijkstra_driver.h b/src/dijkstra/src/many_to_one_dijkstra_driver.h
deleted file mode 100644
index 4179606..0000000
--- a/src/dijkstra/src/many_to_one_dijkstra_driver.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: many_to_one_dijkstra_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: vicky_vergara at hotmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_DIJKSTRA_SRC_MANY_TO_ONE_DIJKSTRA_DRIVER_H_
-#define SRC_DIJKSTRA_SRC_MANY_TO_ONE_DIJKSTRA_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    //  CREATE OR REPLACE FUNCTION pgr_dijkstra(
-    //  sql text,
-    //  start_vids anyarray,
-    //  end_vid BIGINT,
-    //  directed BOOLEAN default true,
-    void
-        do_pgr_many_to_one_dijkstra(
-                pgr_edge_t  *data_edges,
-                size_t total_tuples,
-                int64_t  *start_vidsArr,
-                size_t size_start_vidsArr,
-                int64_t end_vid,
-                bool directed,
-                bool only_cost,
-                General_path_element_t **return_tuples,
-                size_t *return_count,
-                char ** err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_DIJKSTRA_SRC_MANY_TO_ONE_DIJKSTRA_DRIVER_H_
diff --git a/src/dijkstra/src/one_to_many_dijkstra.c b/src/dijkstra/src/one_to_many_dijkstra.c
index 5244dae..de9f4b0 100644
--- a/src/dijkstra/src/one_to_many_dijkstra.c
+++ b/src/dijkstra/src/one_to_many_dijkstra.c
@@ -27,103 +27,102 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./one_to_many_dijkstra_driver.h"
+#include "./many_to_many_dijkstra_driver.h"
 
 PGDLLEXPORT Datum one_to_many_dijkstra(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(one_to_many_dijkstra);
 
 
-/******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
 static
 void
 process(
         char* edges_sql,
         int64_t start_vid,
-        int64_t *end_vidsArr,
-        size_t size_end_vidsArr,
+        ArrayType *ends,
         bool directed,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
+    int64_t* end_vidsArr = NULL;;
+    size_t size_end_vidsArr = 0;
+    end_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_end_vidsArr, ends);
+
     pgr_edge_t *edges = NULL;
-    size_t total_tuples = 0;
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
+    size_t total_edges = 0;
+    pgr_get_edges(edges_sql, &edges, &total_edges);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    if (total_edges == 0) {
+        if (end_vidsArr) pfree(end_vidsArr);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_to_many_dijkstra(
+            edges, total_edges,
+            &start_vid, 1,
+            end_vidsArr, size_end_vidsArr,
 
-    char *err_msg = NULL;
-    do_pgr_one_to_many_dijkstra(
-            edges,
-            total_tuples,
-            start_vid,
-            end_vidsArr,
-            size_end_vidsArr,
             directed,
             only_cost,
+            true,  // normal
+
             result_tuples,
             result_count,
+
+            &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing Dijkstra one to many", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
 
-    free(err_msg);
-    pfree(edges);
+    if (only_cost) {
+        time_msg("processing pgr_dijkstraCost(one to many)", start_t, clock());
+    } else {
+        time_msg("processing pgr_dijkstra(one to many)", start_t, clock());
+    }
+
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (end_vidsArr) pfree(end_vidsArr);
+
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
-PG_FUNCTION_INFO_V1(one_to_many_dijkstra);
 PGDLLEXPORT Datum
 one_to_many_dijkstra(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
+    /**********************************************************************/
     General_path_element_t  *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                        */
-    /**************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -132,36 +131,31 @@ one_to_many_dijkstra(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
-        // CREATE OR REPLACE FUNCTION pgr_dijkstra(sql text,
-        // start_vid bigint,
-        // end_vids anyarray,
-        // directed boolean default true,
-        // only_cost boolean default false
-
-        PGR_DBG("Initializing arrays");
-        int64_t* end_vidsArr;
-        size_t size_end_vidsArr;
-        end_vidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_end_vidsArr, PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("targetsArr size %ld ", size_end_vidsArr);
-
-        PGR_DBG("Calling process");
+        // pgr_dijkstra(
+        // sql TEXT,
+        // start_vid BIGINT,
+        // end_vids ANYARRAY,
+        // directed BOOLEAN default true,
+        // only_cost BOOLEAN default false
+
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
-                end_vidsArr, size_end_vidsArr,
+                PG_GETARG_ARRAYTYPE_P(2),
                 PG_GETARG_BOOL(3),
                 PG_GETARG_BOOL(4),
                 &result_tuples,
                 &result_count);
 
-        PGR_DBG("Cleaning arrays");
-        free(end_vidsArr);
-        /*                                                                    */
         /**********************************************************************/
 
+
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
+
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -176,37 +170,34 @@ one_to_many_dijkstra(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
+        size_t       call_cntr = funcctx->call_cntr;
 
-        /*********************************************************************/
-        /*                          MODIFY AS NEEDED                         */
-        // OUT seq integer,
+        /**********************************************************************/
+        // OUT seq INTEGER,
         // OUT path_seq INTEGER,
         // OUT end_vid BIGINT,
-        // OUT node bigint,
-        // OUT edge bigint,
-        // OUT cost float,
-        // OUT agg_cost float)
-
-        values = palloc(7 * sizeof(Datum));
-        nulls = palloc(7 * sizeof(bool));
+        // OUT node BIGINT,
+        // OUT edge BIGINT,
+        // OUT cost FLOAT,
+        // OUT agg_cost FLOAT)
 
+        size_t numb = 7;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
         size_t i;
-        for (i = 0; i < 7; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
         values[2] = Int64GetDatum(result_tuples[call_cntr].end_id);
@@ -214,16 +205,12 @@ one_to_many_dijkstra(PG_FUNCTION_ARGS) {
         values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
         values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*********************************************************************/
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/src/dijkstra/src/one_to_many_dijkstra_driver.cpp b/src/dijkstra/src/one_to_many_dijkstra_driver.cpp
deleted file mode 100644
index f654aef..0000000
--- a/src/dijkstra/src/one_to_many_dijkstra_driver.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: one_to_many_dijkstra_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: vicky_vergara at hotmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <sstream>
-#include <deque>
-#include <vector>
-#include <set>
-#include "./pgr_dijkstra.hpp"
-#include "./one_to_many_dijkstra_driver.h"
-
-#include "../../common/src/pgr_alloc.hpp"
-#include "./../../common/src/pgr_types.h"
-
-// CREATE OR REPLACE FUNCTION pgr_dijkstra(sql text, start_vid bigint, end_vids anyarray, directed boolean default true,
-void
-do_pgr_one_to_many_dijkstra(
-        pgr_edge_t  *data_edges,
-        size_t total_tuples,
-        int64_t start_vid,
-        int64_t  *end_vidsArr,
-        size_t size_end_vidsArr,
-        bool directed,
-        bool only_cost,
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** err_msg) {
-  std::ostringstream log;
-  try {
-    graphType gType = directed? DIRECTED: UNDIRECTED;
-
-    std::deque< Path >paths;
-    log << "Inserting vertices into a c++ vector structure\n";
-    std::set< int64_t > s_end_vertices(end_vidsArr, end_vidsArr + size_end_vidsArr);
-    std::vector< int64_t > end_vertices(s_end_vertices.begin(), s_end_vertices.end());
-
-
-    if (directed) {
-        log << "Working with directed Graph\n";
-        pgrouting::DirectedGraph digraph(gType);
-        digraph.graph_insert_data(data_edges, total_tuples);
-        pgr_dijkstra(digraph, paths, start_vid, end_vertices, only_cost);
-    } else {
-        log << "Working with Undirected Graph\n";
-        pgrouting::UndirectedGraph undigraph(gType);
-        undigraph.graph_insert_data(data_edges, total_tuples);
-        pgr_dijkstra(undigraph, paths, start_vid, end_vertices, only_cost);
-    }
-
-    size_t count(0);
-    count = count_tuples(paths);
-
-
-    if (count == 0) {
-        (*return_tuples) = NULL;
-        (*return_count) = 0;
-        log <<
-            "No paths found between Starting and any of the Ending vertices\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-
-    (*return_tuples) = pgr_alloc(count, (*return_tuples));
-    log << "Converting a set of paths into the tuples\n";
-    (*return_count) = (collapse_paths(return_tuples, paths));
-
-#ifndef DEBUG
-    *err_msg = strdup("OK");
-#else
-    *err_msg = strdup(log.str().c_str());
-#endif
-
-    return;
-  } catch ( ... ) {
-      log << "Caught unknown exception!\n";
-      *err_msg = strdup("Caught unknown exception!\n");
-      return;
-  }
-}
-
-
-
-
-
diff --git a/src/dijkstra/src/one_to_many_dijkstra_driver.h b/src/dijkstra/src/one_to_many_dijkstra_driver.h
deleted file mode 100644
index ff73f50..0000000
--- a/src/dijkstra/src/one_to_many_dijkstra_driver.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: one_to_many_dijkstra_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: vicky_vergara at hotmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_DIJKSTRA_SRC_ONE_TO_MANY_DIJKSTRA_DRIVER_H_
-#define SRC_DIJKSTRA_SRC_ONE_TO_MANY_DIJKSTRA_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    // CREATE OR REPLACE FUNCTION pgr_dijkstra(
-    // sql text,
-    // start_vid bigint,
-    // end_vids anyarray,
-    // directed boolean default true,
-    void
-        do_pgr_one_to_many_dijkstra(
-                pgr_edge_t  *data_edges,
-                size_t total_tuples,
-                int64_t start_vid,
-                int64_t  *end_vidsArr,
-                size_t size_end_vidsArr,
-                bool directed,
-                bool only_cost,
-                General_path_element_t **return_tuples,
-                size_t *return_count,
-                char **err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_DIJKSTRA_SRC_ONE_TO_MANY_DIJKSTRA_DRIVER_H_
diff --git a/src/dijkstra/src/one_to_one_dijkstra.c b/src/dijkstra/src/one_to_one_dijkstra.c
index da20582..674205d 100644
--- a/src/dijkstra/src/one_to_one_dijkstra.c
+++ b/src/dijkstra/src/one_to_one_dijkstra.c
@@ -27,30 +27,20 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
+#include "./../../common/src/postgres_connection.h"
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
-#include "./one_to_one_dijkstra_driver.h"
+#include "./many_to_many_dijkstra_driver.h"
 
 PG_MODULE_MAGIC;
 
 PGDLLEXPORT Datum one_to_one_dijkstra(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(one_to_one_dijkstra);
 
-/******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
 static
 void
 process(
@@ -61,70 +51,74 @@ process(
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    pgr_SPI_connect();
-
-    PGR_DBG("Load data");
-    pgr_edge_t *edges = NULL;
-
     if (start_vid == end_vid) {
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
-        pgr_SPI_finish();
         return;
     }
 
-    size_t total_tuples = 0;
-    pgr_get_edges(edges_sql, &edges, &total_tuples);
+    pgr_SPI_connect();
+
+    pgr_edge_t *edges = NULL;
+    size_t total_edges = 0;
+    pgr_get_edges(edges_sql, &edges, &total_edges);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    if (total_edges == 0) {
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    char *err_msg = NULL;
-    do_pgr_one_to_one_dijkstra(
-            edges,
-            total_tuples,
-            start_vid,
-            end_vid,
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_to_many_dijkstra(
+            edges, total_edges,
+            &start_vid, 1,
+            &end_vid, 1,
+
             directed,
             only_cost,
+            true,  // normal
+
             result_tuples,
             result_count,
+
+            &log_msg,
+            &notice_msg,
             &err_msg);
 
-    time_msg(" processing Dijkstra one to one", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
+    if (only_cost) {
+        time_msg("processing pgr_dijkstraCost(one to one)", start_t, clock());
+    } else {
+        time_msg("processing pgr_dijkstra(one to one)", start_t, clock());
+    }
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
 
-    free(err_msg);
-    pfree(edges);
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
-PG_FUNCTION_INFO_V1(one_to_one_dijkstra);
+
 PGDLLEXPORT Datum
 one_to_one_dijkstra(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
+    /**********************************************************************/
     General_path_element_t  *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                        */
-    /**************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -133,15 +127,14 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
-        // CREATE OR REPLACE FUNCTION pgr_dijkstra(
-        // sql text, start_vids BIGINT,
+        // pgr_dijkstra(
+        // sql TEXT,
+        // start_vids BIGINT,
         // end_vid BIGINT,
         // directed BOOLEAN default true,
 
-        PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
                 PG_GETARG_INT64(2),
                 PG_GETARG_BOOL(3),
@@ -149,10 +142,14 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
                 &result_tuples,
                 &result_count);
 
-        /*                                                                    */
         /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
+
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -167,19 +164,17 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
+        size_t       call_cntr = funcctx->call_cntr;
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
         // OUT seq INTEGER,
         // OUT path_seq INTEGER,
         // OUT node BIGINT,
@@ -187,16 +182,16 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
         // OUT cost FLOAT,
         // OUT agg_cost FLOAT
 
-        values = palloc(6 * sizeof(Datum));
-        nulls = palloc(6 * sizeof(bool));
+        size_t numb = 6;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
 
         size_t i;
-        for (i = 0; i < 6; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
         values[2] = Int64GetDatum(result_tuples[call_cntr].node);
@@ -209,10 +204,6 @@ one_to_one_dijkstra(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/src/dijkstra/src/one_to_one_dijkstra_driver.cpp b/src/dijkstra/src/one_to_one_dijkstra_driver.cpp
deleted file mode 100644
index 2fb8e48..0000000
--- a/src/dijkstra/src/one_to_one_dijkstra_driver.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: one_to_one_dijkstra_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: vicky_vergara at hotmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <sstream>
-#include <deque>
-#include <vector>
-#include "./pgr_dijkstra.hpp"
-#include "./one_to_one_dijkstra_driver.h"
-
-
-#include "../../common/src/pgr_alloc.hpp"
-#include "./../../common/src/pgr_types.h"
-
-// CREATE OR REPLACE FUNCTION pgr_dijkstra(
-// sql text,
-// start_vids BIGINT,
-// end_vid BIGINT,
-//  directed BOOLEAN default true,
-
-void
-do_pgr_one_to_one_dijkstra(
-        pgr_edge_t  *data_edges,
-        size_t total_tuples,
-        int64_t start_vid,
-        int64_t end_vid,
-        bool directed,
-        bool only_cost,
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** err_msg) {
-  std::ostringstream log;
-  try {
-      graphType gType = directed? DIRECTED: UNDIRECTED;
-
-      Path path;
-
-      if (directed) {
-          log << "Working with directed Graph\n";
-          pgrouting::DirectedGraph digraph(gType);
-          digraph.graph_insert_data(data_edges, total_tuples);
-          pgr_dijkstra(digraph, path, start_vid, end_vid, only_cost);
-      } else {
-          log << "Working with Undirected Graph\n";
-          pgrouting::UndirectedGraph undigraph(gType);
-          undigraph.graph_insert_data(data_edges, total_tuples);
-          pgr_dijkstra(undigraph, path, start_vid, end_vid, only_cost);
-      }
-
-      size_t count(0);
-
-      count = path.size();
-
-      if (count == 0) {
-          (*return_tuples) = NULL;
-          (*return_count) = 0;
-          log <<
-              "No paths found between Starting and any of the Ending vertices\n";
-          *err_msg = strdup(log.str().c_str());
-          return;
-      }
-
-      (*return_tuples) = pgr_alloc(count, (*return_tuples));
-      size_t sequence = 0;
-      path.generate_postgres_data(return_tuples, sequence);
-      (*return_count) = sequence;
-
-#ifndef DEBUG
-      *err_msg = strdup("OK");
-#else
-      *err_msg = strdup(log.str().c_str());
-#endif
-
-      return;
-  } catch ( ... ) {
-      log << "Caught unknown exception!\n";
-      *err_msg = strdup(log.str().c_str());
-      return;
-  }
-}
-
-
-
-
-
diff --git a/src/dijkstra/src/pgr_dijkstra.hpp b/src/dijkstra/src/pgr_dijkstra.hpp
index b07f2bd..d394e95 100644
--- a/src/dijkstra/src/pgr_dijkstra.hpp
+++ b/src/dijkstra/src/pgr_dijkstra.hpp
@@ -24,26 +24,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_DIJKSTRA_SRC_PGR_DIJKSTRA_HPP_
+#define SRC_DIJKSTRA_SRC_PGR_DIJKSTRA_HPP_
 #pragma once
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef unlink
-#undef unlink
-#endif
-#endif
-
-
-#include <deque>
-#include <vector>
-
 #include <boost/config.hpp>
-
-
 #include <boost/graph/adjacency_list.hpp>
 #include <boost/graph/dijkstra_shortest_paths.hpp>
 
+#include <deque>
+#include <set>
+#include <vector>
+#include <algorithm>
+
 #include "./../../common/src/basePath_SSEC.hpp"
 #include "./../../common/src/pgr_base_graph.hpp"
 #if 0
@@ -56,73 +49,93 @@ template < class G > class Pgr_dijkstra;
 // for development
 
 template < class G >
-void pgr_drivingDistance(
+std::deque<Path>
+pgr_drivingDistance(
         G &graph,
-        std::deque< Path > &paths,
         std::vector< int64_t > start_vids,
         double distance,
         bool equicost) {
     Pgr_dijkstra< G > fn_dijkstra;
-    fn_dijkstra.drivingDistance(graph, paths, start_vids, distance, equicost);
+    return fn_dijkstra.drivingDistance(graph, start_vids, distance, equicost);
 }
 
 
 template < class G >
-void
+Path
 pgr_drivingDistance(
         G &graph,
-        Path &path,
         int64_t  source,
         double distance) {
     Pgr_dijkstra< G > fn_dijkstra;
-    fn_dijkstra.drivingDistance(graph, path, source, distance);
+    return fn_dijkstra.drivingDistance(graph, source, distance);
 }
 
 
+/* 1 to 1*/
 template < class G >
-void
+Path
 pgr_dijkstra(
         G &graph,
-        Path &path,
         int64_t source,
         int64_t target,
         bool only_cost = false) {
     Pgr_dijkstra< G > fn_dijkstra;
-    fn_dijkstra.dijkstra(graph, path, source, target, only_cost);
+    return fn_dijkstra.dijkstra(graph, source, target, only_cost);
 }
 
+/* 1 to many*/
 template < class G >
-void
+std::deque<Path>
 pgr_dijkstra(
         G &graph,
-        std::deque<Path> &paths,
         int64_t  source,
-        const std::vector< int64_t > &targets,
+        std::vector< int64_t > targets,
         bool only_cost = false) {
+    std::sort(targets.begin(), targets.end());
+    targets.erase(
+            std::unique(targets.begin(), targets.end()),
+            targets.end());
     Pgr_dijkstra< G > fn_dijkstra;
-    fn_dijkstra.dijkstra(graph, paths, source, targets, only_cost);
+    return fn_dijkstra.dijkstra(graph, source, targets, only_cost);
 }
 
+/* many to 1*/
 template < class G >
-void
-pgr_dijkstra(G &graph,
-        std::deque<Path> &paths,
-        const std::vector< int64_t > &sources,
+std::deque<Path>
+pgr_dijkstra(
+        G &graph,
+        std::vector< int64_t > sources,
         int64_t  target,
         bool only_cost = false) {
+    std::sort(sources.begin(), sources.end());
+    sources.erase(
+            std::unique(sources.begin(), sources.end()),
+            sources.end());
+
     Pgr_dijkstra< G > fn_dijkstra;
-    fn_dijkstra.dijkstra(graph, paths, sources, target, only_cost);
+    return fn_dijkstra.dijkstra(graph, sources, target, only_cost);
 }
 
+/* Many to Many */
 template < class G >
-void
+std::deque<Path>
 pgr_dijkstra(
-        G &graph, std::deque<Path> &paths,
-        const std::vector< int64_t > &sources,
-        const std::vector< int64_t > &targets,
+        G &graph,
+        std::vector< int64_t > sources,
+        std::vector< int64_t > targets,
         bool only_cost = false) {
+    std::sort(sources.begin(), sources.end());
+    sources.erase(
+            std::unique(sources.begin(), sources.end()),
+            sources.end());
+
+    std::sort(targets.begin(), targets.end());
+    targets.erase(
+            std::unique(targets.begin(), targets.end()),
+            targets.end());
+
     Pgr_dijkstra< G > fn_dijkstra;
-    fn_dijkstra.dijkstra(graph, paths, sources, targets, only_cost);
+    return fn_dijkstra.dijkstra(graph, sources, targets, only_cost);
 }
 
 
@@ -137,16 +150,16 @@ class Pgr_dijkstra {
      //! @name drivingDistance
      //@{
      //! 1 to distance
-     void drivingDistance(
-             G &graph,
-             Path &path,
-             int64_t start_vertex,
-             double distance);
+     Path
+         drivingDistance(
+                 G &graph,
+                 int64_t start_vertex,
+                 double distance);
 
 
      //! many to distance
-     void drivingDistance(
-             G &graph, std::deque< Path > &paths,
+     std::deque<Path> drivingDistance(
+             G &graph,
              std::vector< int64_t > start_vertex,
              double distance,
              bool equiCostFlag);
@@ -155,33 +168,29 @@ class Pgr_dijkstra {
      //! @name Dijkstra
      //@{
      //! one to one
-     void dijkstra(
+     Path dijkstra(
              G &graph,
-             Path &path,
              int64_t start_vertex,
              int64_t end_vertex,
              bool only_cost = false);
 
      //! Many to one
-     void dijkstra(
+     std::deque<Path> dijkstra(
              G &graph,
-             std::deque< Path > &paths,
              const std::vector < int64_t > &start_vertex,
              int64_t end_vertex,
              bool only_cost = false);
 
      //! Many to Many
-     void dijkstra(
+     std::deque<Path> dijkstra(
              G &graph,
-             std::deque< Path > &paths,
              const std::vector< int64_t > &start_vertex,
              const std::vector< int64_t > &end_vertex,
              bool only_cost = false);
 
      //! one to Many
-     void dijkstra(
+     std::deque<Path> dijkstra(
              G &graph,
-             std::deque< Path > &paths,
              int64_t start_vertex,
              const std::vector< int64_t > &end_vertex,
              bool only_cost = false);
@@ -206,12 +215,6 @@ class Pgr_dijkstra {
              V source,
              const std::vector< V > &targets);
 
-     void get_nodesInDistance(
-             G &graph,
-             Path &path,
-             V source,
-             double distance);
-
      void clear() {
          predecessors.clear();
          distances.clear();
@@ -219,30 +222,25 @@ class Pgr_dijkstra {
      }
 
 
-     void get_path(
-             const G &graph,
-             V source,
-             V target,
-             Path &path) const;
-     void get_cost(
-             const G &graph,
-             V source,
-             V target,
-             Path &path) const;
 
 
      // used when multiple goals
-     void get_path(
+     std::deque<Path> get_paths(
              const G &graph,
-             std::deque< Path > &paths,
              V source,
-             std::vector< V > &targets) const;
+             std::vector< V > &targets,
+             bool only_cost) const {
+         std::deque<Path> paths;
+         for (const auto target : targets) {
+             paths.push_back(Path(
+                         graph,
+                         source, target,
+                         predecessors, distances,
+                         only_cost, true));
+         }
+         return paths;
+     }
 
-     void get_cost(
-             const G &graph,
-             std::deque< Path > &paths,
-             V source,
-             std::vector< V > &targets) const;
 
 
      //! @name members;
@@ -330,150 +328,12 @@ class Pgr_dijkstra {
 /******************** IMPLEMENTTION ******************/
 
 
-template < class G >
-void
-Pgr_dijkstra< G >::get_nodesInDistance(
-        G &graph,
-        Path &path,
-        V source,
-        double distance) {
-    path.clear();
-    double cost;
-    int64_t edge_id;
-    Path r_path(graph[source].id, graph[source].id);
-    for (V i = 0; i < distances.size(); ++i) {
-        if (distances[i] <= distance) {
-            cost = distances[i] - distances[predecessors[i]];
-            edge_id = graph.get_edge_id(predecessors[i], i, cost);
-            r_path.push_back(
-                    {graph[i].id,
-                    edge_id, cost,
-                    distances[i]});
-        }
-    }
-    path = r_path;
-}
-
-
-template < class G >
-void
-Pgr_dijkstra< G >::get_path(
-        const G &graph,
-        std::deque< Path > &paths,
-        V source,
-        std::vector< V > &targets) const {
-    Path path;
-    typename std::vector< V >::iterator s_it;
-    for (s_it = targets.begin(); s_it != targets.end(); ++s_it) {
-        path.clear();
-        get_path(graph, source, *s_it, path);
-        paths.push_back(path);
-    }
-}
-
-template < class G >
-void
-Pgr_dijkstra< G >::get_path(
-        const G &graph,
-        V source,
-        V target,
-        Path &r_path) const {
-    // backup of the target
-    V target_back = target;
-    uint64_t from(graph.graph[source].id);
-    uint64_t to(graph.graph[target].id);
-
-    // no path was found
-    if (target == predecessors[target]) {
-        r_path.clear();
-        return;
-    }
-
-    // find out how large is the path
-    int64_t result_size = 1;
-    while (target != source) {
-        if (target == predecessors[target]) break;
-        result_size++;
-        target = predecessors[target];
-    }
-
-    // recover the target
-    target = target_back;
-
-    // variables that are going to be stored
-    int64_t vertex_id;
-    int64_t edge_id;
-    double cost;
-
-    // working from the last to the beginning
-
-    // initialize the sequence
-    auto seq = result_size;
-    // the last stop is the target
-    Path path(from, to);
-    path.push_front(
-            {graph.graph[target].id, -1,
-            0,  distances[target]});
-
-    while (target != source) {
-        // we are done when the predecesor of the target is the target
-        if (target == predecessors[target]) break;
-        // values to be inserted in the path
-        --seq;
-        cost = distances[target] - distances[predecessors[target]];
-        vertex_id = graph.graph[predecessors[target]].id;
-        edge_id = graph.get_edge_id(predecessors[target], target, cost);
-
-        path.push_front({vertex_id, edge_id,
-                cost, (distances[target] - cost)});
-        target = predecessors[target];
-    }
-    r_path = path;
-    return;
-}
-
-template < class G >
-void
-Pgr_dijkstra< G >::get_cost(
-        const G &graph,
-        std::deque< Path > &paths,
-        V source,
-        std::vector< V > &targets) const {
-    Path path;
-    for (auto s_it = targets.begin(); s_it != targets.end(); ++s_it) {
-        path.clear();
-        get_cost(graph, source, *s_it, path);
-        paths.push_back(path);
-    }
-}
-
-
-template < class G >
-void
-Pgr_dijkstra< G >::get_cost(
-        const G &graph,
-        V source,
-        V target,
-        Path &r_path) const {
-    // backup of the target
-    int64_t from(graph.graph[source].id);
-    int64_t to(graph.graph[target].id);
-
-    // no path was found
-    if (target == predecessors[target]) {
-        r_path.clear();
-    } else {
-        Path path(from, to);
-        path.push_front(
-                {to, -1, distances[target], distances[target]});
-        r_path = path;
-    }
-}
 
-template < class G >
 // preparation for many to distance
-void
-Pgr_dijkstra< G >::drivingDistance(G &graph, std::deque< Path > &paths,
+template < class G >
+std::deque< Path >
+Pgr_dijkstra< G >::drivingDistance(
+        G &graph,
         std::vector< int64_t > start_vertex,
         double distance,
         bool equicost) {
@@ -484,25 +344,23 @@ Pgr_dijkstra< G >::drivingDistance(G &graph, std::deque< Path > &paths,
 
 
     // perform the algorithm
+    std::deque< Path > paths;
     for (const auto &vertex : start_vertex) {
-        Path path;
-        drivingDistance(graph, path, vertex, distance);
-        paths.push_back(path);
+        paths.push_back(
+                drivingDistance(graph, vertex, distance));
     }
     if (equicost) {
         equi_cost(paths);
     }
+    return paths;
 }
 
 template < class G >
-void
+Path
 Pgr_dijkstra< G >::drivingDistance(
         G &graph,
-        Path &path,
         int64_t start_vertex,
         double distance) {
-
-
     clear();
 
     predecessors.resize(graph.num_vertices());
@@ -513,28 +371,28 @@ Pgr_dijkstra< G >::drivingDistance(
         /* The node has to be in the path*/
         Path p(start_vertex, start_vertex);
         p.push_back({start_vertex, -1, 0, 0});
-        path = p;
-        return;
+        return p;
     }
 
     auto v_source(graph.get_V(start_vertex));;
-    dijkstra_1_to_distance(graph, v_source, distance); 
-    get_nodesInDistance(graph, path, v_source, distance);
+    dijkstra_1_to_distance(graph, v_source, distance);
+
+    auto path = Path(graph, v_source, distance, predecessors, distances);
+
     std::sort(path.begin(), path.end(),
             [](const Path_t &l, const  Path_t &r)
             {return l.node < r.node;});
     std::stable_sort(path.begin(), path.end(),
             [](const Path_t &l, const  Path_t &r)
             {return l.agg_cost < r.agg_cost;});
-    return;
+    return path;
 }
 
 //! Dijkstra 1 to 1
 template < class G >
-void
+Path
 Pgr_dijkstra< G >::dijkstra(
         G &graph,
-        Path &path,
         int64_t start_vertex,
         int64_t end_vertex,
         bool only_cost) {
@@ -547,8 +405,7 @@ Pgr_dijkstra< G >::dijkstra(
 
     if (!graph.has_vertex(start_vertex)
             || !graph.has_vertex(end_vertex)) {
-        path.clear();
-        return;
+        return Path(start_vertex, end_vertex);
     }
 
     // get the graphs source and target
@@ -559,20 +416,18 @@ Pgr_dijkstra< G >::dijkstra(
     dijkstra_1_to_1(graph, v_source, v_target);
 
     // get the results
-    if (only_cost) {
-        get_cost(graph, v_source, v_target, path);
-    } else {
-        get_path(graph, v_source, v_target, path);
-    }
-    return;
+    return Path(
+            graph,
+            v_source, v_target,
+            predecessors, distances,
+            only_cost, true);
 }
 
 //! Dijkstra 1 to many
 template < class G >
-void
+std::deque<Path>
 Pgr_dijkstra< G >::dijkstra(
         G &graph,
-        std::deque< Path > &paths,
         int64_t start_vertex,
         const std::vector< int64_t > &end_vertex,
         bool only_cost) {
@@ -583,11 +438,12 @@ Pgr_dijkstra< G >::dijkstra(
     distances.resize(graph.num_vertices());
 
     // get the graphs source and target
-    if (!graph.has_vertex(start_vertex)) return;
+    if (!graph.has_vertex(start_vertex))
+        return std::deque<Path>();
     auto v_source(graph.get_V(start_vertex));
 
     std::set< V > s_v_targets;
-    for (const auto &vertex : end_vertex) {    
+    for (const auto &vertex : end_vertex) {
         if (graph.has_vertex(vertex)) {
             s_v_targets.insert(graph.get_V(vertex));
         }
@@ -597,56 +453,54 @@ Pgr_dijkstra< G >::dijkstra(
     // perform the algorithm
     dijkstra_1_to_many(graph, v_source, v_targets);
 
+    std::deque< Path > paths;
     // get the results // route id are the targets
-    if (only_cost) {
-        get_cost(graph, paths, v_source, v_targets);
-    } else {
-        get_path(graph, paths, v_source, v_targets);
-    }
+    paths = get_paths(graph, v_source, v_targets, only_cost);
 
     std::stable_sort(paths.begin(), paths.end(),
             [](const Path &e1, const Path &e2)->bool {
             return e1.end_id() < e2.end_id();
             });
 
-    return;
+    return paths;
 }
 
 // preparation for many to 1
 template < class G >
-void
+std::deque<Path>
 Pgr_dijkstra< G >::dijkstra(
-        G &graph, std::deque< Path > &paths,
+        G &graph,
         const std::vector < int64_t > &start_vertex,
         int64_t end_vertex,
         bool only_cost) {
-    // perform the algorithm // a call for each of the sources
+    std::deque<Path> paths;
+
     for (const auto &start : start_vertex) {
-        Path path;
-        // each call cleans the local structures
-        dijkstra(graph, path, start, end_vertex, only_cost);
-        paths.push_back(path);
+        paths.push_back(
+                dijkstra(graph, start, end_vertex, only_cost));
     }
 
     std::stable_sort(paths.begin(), paths.end(),
             [](const Path &e1, const Path &e2)->bool {
             return e1.start_id() < e2.start_id();
             });
-    return;
+    return paths;
 }
 
 
 // preparation for many to many
 template < class G >
-void
+std::deque<Path>
 Pgr_dijkstra< G >::dijkstra(
-        G &graph, std::deque< Path > &paths,
+        G &graph,
         const std::vector< int64_t > &start_vertex,
         const std::vector< int64_t > &end_vertex,
         bool only_cost) {
     // a call to 1 to many is faster for each of the sources
+    std::deque<Path> paths;
     for (const auto &start : start_vertex) {
-        dijkstra(graph, paths, start, end_vertex, only_cost);
+        auto r_paths = dijkstra(graph, start, end_vertex, only_cost);
+        paths.insert(paths.begin(), r_paths.begin(), r_paths.end());
     }
 
     std::sort(paths.begin(), paths.end(),
@@ -657,7 +511,7 @@ Pgr_dijkstra< G >::dijkstra(
             [](const Path &e1, const Path &e2)->bool {
             return e1.start_id() < e2.start_id();
             });
-    return;
+    return paths;
 }
 
 
@@ -672,12 +526,13 @@ Pgr_dijkstra< G >::dijkstra_1_to_1(
     try {
         boost::dijkstra_shortest_paths(graph.graph, source,
                 boost::predecessor_map(&predecessors[0])
-                .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
+                .weight_map(get(&G::G_T_E::cost, graph.graph))
                 .distance_map(&distances[0])
                 .visitor(dijkstra_one_goal_visitor(target)));
     }
     catch(found_goals &) {
         found = true;  // Target vertex found
+    } catch (...) {
     }
     return found;
 }
@@ -691,7 +546,7 @@ Pgr_dijkstra< G >::dijkstra_1_to_distance(G &graph, V source, double distance) {
     try {
         boost::dijkstra_shortest_paths(graph.graph, source,
                 boost::predecessor_map(&predecessors[0])
-                .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
+                .weight_map(get(&G::G_T_E::cost, graph.graph))
                 .distance_map(&distances[0])
                 .visitor(dijkstra_distance_visitor(
                         distance,
@@ -700,6 +555,7 @@ Pgr_dijkstra< G >::dijkstra_1_to_distance(G &graph, V source, double distance) {
     }
     catch(found_goals &) {
         found = true;
+    } catch (...) {
     }
     return found;
 }
@@ -715,13 +571,15 @@ Pgr_dijkstra< G >::dijkstra_1_to_many(
     try {
         boost::dijkstra_shortest_paths(graph.graph, source,
                 boost::predecessor_map(&predecessors[0])
-                .weight_map(get(&pgrouting::Basic_edge::cost, graph.graph))
+                .weight_map(get(&G::G_T_E::cost, graph.graph))
                 .distance_map(&distances[0])
                 .visitor(dijkstra_many_goal_visitor(targets)));
     }
     catch(found_goals &) {
         found = true;  // Target vertex found
+    } catch (...) {
     }
     return found;
 }
 
+#endif  // SRC_DIJKSTRA_SRC_PGR_DIJKSTRA_HPP_
diff --git a/src/dijkstra/test/CMakeLists.txt b/src/dijkstra/test/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/dijkstra/test/dijkstra-v2.test.sql b/src/dijkstra/test/dijkstra-v2.test.sql
index 5f537f9..9615059 100644
--- a/src/dijkstra/test/dijkstra-v2.test.sql
+++ b/src/dijkstra/test/dijkstra-v2.test.sql
@@ -4,8 +4,6 @@
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
 
-SET client_min_messages TO NOTICE;
-
 \echo --q1
 SELECT * FROM pgr_dijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
diff --git a/src/dijkstra/test/doc-pgr_dijkstra.result b/src/dijkstra/test/doc-pgr_dijkstra.result
index 72a9caf..f9dbedd 100644
--- a/src/dijkstra/test/doc-pgr_dijkstra.result
+++ b/src/dijkstra/test/doc-pgr_dijkstra.result
@@ -101,8 +101,8 @@
 3|3|5|-1|0|2
 1|1|2|2|4|1|0
 2|2|2|5|-1|0|1
-3|1|11|11|11|1|0
-4|2|11|6|8|1|1
+3|1|11|11|12|1|0
+4|2|11|10|10|1|1
 5|3|11|5|-1|0|2
 1|1|3|2|2|1|0
 2|2|3|3|-1|0|1
@@ -144,8 +144,8 @@
 3|3|5|-1|0|2
 1|1|2|2|4|1|0
 2|2|2|5|-1|0|1
-3|1|11|11|11|1|0
-4|2|11|6|8|1|1
+3|1|11|11|12|1|0
+4|2|11|10|10|1|1
 5|3|11|5|-1|0|2
 1|1|3|2|4|1|0
 2|2|3|5|8|1|1
diff --git a/src/dijkstra/test/doc-pgr_dijkstra.test.sql b/src/dijkstra/test/doc-pgr_dijkstra.test.sql
index 55640ac..41aa7b9 100644
--- a/src/dijkstra/test/doc-pgr_dijkstra.test.sql
+++ b/src/dijkstra/test/doc-pgr_dijkstra.test.sql
@@ -1,5 +1,3 @@
-BEGIN;
-SET client_min_messages TO NOTICE;
 
 \echo -- q1
 SELECT * FROM pgr_dijkstra(
@@ -259,7 +257,6 @@ SELECT * FROM pgr_dijkstra(
     FALSE
 );
 -- Version 2.0
-SET client_min_messages TO NOTICE;
 SELECT * FROM pgr_dijkstra(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
     2, 3,
@@ -268,5 +265,3 @@ SELECT * FROM pgr_dijkstra(
 );
 \echo -- q18
 
-
-ROLLBACK;
diff --git a/src/dijkstra/test/doc-pgr_dijkstraCost.test.sql b/src/dijkstra/test/doc-pgr_dijkstraCost.test.sql
index eb274b1..7221344 100644
--- a/src/dijkstra/test/doc-pgr_dijkstraCost.test.sql
+++ b/src/dijkstra/test/doc-pgr_dijkstraCost.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 \echo --q1
 SELECT * FROM pgr_dijkstraCost(
     'select id, source, target, cost, reverse_cost from edge_table',
@@ -35,4 +34,3 @@ SELECT * FROM pgr_dijkstraCost(
             ARRAY[5, 3, 4], ARRAY[5, 3, 4]);
 
 \echo --q8
-ROLLBACK
diff --git a/src/dijkstra/test/pgtap/oneToOne_equiv_manyToMany.test.sql b/src/dijkstra/test/pgtap/oneToOne_equiv_manyToMany.test.sql
index 1e8c8b8..ba2b354 100644
--- a/src/dijkstra/test/pgtap/oneToOne_equiv_manyToMany.test.sql
+++ b/src/dijkstra/test/pgtap/oneToOne_equiv_manyToMany.test.sql
@@ -3,6 +3,8 @@
 
 SELECT plan(1);
 
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
 
 create or REPLACE FUNCTION foo(cant INTEGER default 18 )
 RETURNS SETOF TEXT AS
diff --git a/src/dijkstra/test/pgtap/oneToOne_equiv_manyToOne.test.sql b/src/dijkstra/test/pgtap/oneToOne_equiv_manyToOne.test.sql
index a5fd055..0c76ded 100644
--- a/src/dijkstra/test/pgtap/oneToOne_equiv_manyToOne.test.sql
+++ b/src/dijkstra/test/pgtap/oneToOne_equiv_manyToOne.test.sql
@@ -3,6 +3,8 @@
 
 SELECT plan(18);
 
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
 
 create or REPLACE FUNCTION foo(cant INTEGER default 18 )
 RETURNS SETOF TEXT AS
@@ -23,14 +25,14 @@ BEGIN
                 sql_Many := sql_Many ||', '; 
     END IF;
     sql_OneToOne := sql_OneToOne || 
-    '( SELECT seq, ' || j || 'as start_vid, ' || i || 'as end_vid, node, edge, cost, agg_cost  FROM pgr_dijkstra(
+    '( SELECT seq, ' || j || 'as start_vid, ' || i || 'as end_vid, node, edge, cost::text, agg_cost::text  FROM pgr_dijkstra(
             ''SELECT id, source, target, cost, reverse_cost FROM edge_table'', '
             || j || ', ' || i ||
             ') )';
     sql_Many := sql_Many || j ; 
 END LOOP;
 sql_Many := 
-' SELECT path_seq, start_vid, ' || i || ' as end_vid, node, edge, cost, agg_cost FROM pgr_dijkstra(
+' SELECT path_seq, start_vid, ' || i || ' as end_vid, node, edge, cost::text, agg_cost::text FROM pgr_dijkstra(
     ''SELECT id, source, target, cost, reverse_cost FROM edge_table'', '
     ' ARRAY[' || sql_Many || '], ' || i ||
     ' ) ';
diff --git a/src/dijkstra/test/pgtap/oneToOne_equiv_oneToMany.test.sql b/src/dijkstra/test/pgtap/oneToOne_equiv_oneToMany.test.sql
index 9bd98b6..5a69ef7 100644
--- a/src/dijkstra/test/pgtap/oneToOne_equiv_oneToMany.test.sql
+++ b/src/dijkstra/test/pgtap/oneToOne_equiv_oneToMany.test.sql
@@ -2,6 +2,8 @@
 
 SELECT plan(36);
 
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
 
 create or REPLACE FUNCTION foo(cant INTEGER default 18, flag boolean default true )
 RETURNS SETOF TEXT AS
diff --git a/src/dijkstra/test/pgtap/v2-equi-v3-undirected-N-reverse.test.sql b/src/dijkstra/test/pgtap/v2-equi-v3-undirected-N-reverse.test.sql
index 1884039..7301825 100644
--- a/src/dijkstra/test/pgtap/v2-equi-v3-undirected-N-reverse.test.sql
+++ b/src/dijkstra/test/pgtap/v2-equi-v3-undirected-N-reverse.test.sql
@@ -2,7 +2,10 @@
 SET client_min_messages = WARNING;
 
 
-SELECT plan(11);
+SELECT plan(9);
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
 
 -- all this queries are equivalent (give the same results)
 PREPARE q00 AS
@@ -82,8 +85,8 @@ SELECT seq, id1, id2, cost FROM pgr_dijkstra(
 
 
 
-    SELECT set_eq( 'q0', ARRAY[7, 8, 5, 10, 11], '1');
-    SELECT set_eq( 'q00', ARRAY[6, 7, 10, 12, -1], '2');
+    -- SELECT set_eq( 'q0', ARRAY[7, 8, 5, 10, 11], '1');
+    -- SELECT set_eq( 'q00', ARRAY[6, 7, 10, 12, -1], '2');
     SELECT set_eq( 'q1', 'q2', '3');
     SELECT set_eq( 'q1', 'q3', '4');
     SELECT set_eq( 'q1', 'q4', '5');
diff --git a/src/dijkstra/test/pgtap/v2-equi-v3-undirected-W-reverse.test.sql b/src/dijkstra/test/pgtap/v2-equi-v3-undirected-W-reverse.test.sql
index 73110fc..0ab0c50 100644
--- a/src/dijkstra/test/pgtap/v2-equi-v3-undirected-W-reverse.test.sql
+++ b/src/dijkstra/test/pgtap/v2-equi-v3-undirected-W-reverse.test.sql
@@ -4,6 +4,9 @@ SET client_min_messages = WARNING;
 
 SELECT plan(10);
 
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+
 -- all this queries are equivalent (give the same results)
 PREPARE q00 AS
 SELECT  id2 FROM pgr_dijkstra(
diff --git a/src/dijkstra/test/test.conf b/src/dijkstra/test/test.conf
index 84ddc0f..7173fc9 100644
--- a/src/dijkstra/test/test.conf
+++ b/src/dijkstra/test/test.conf
@@ -5,7 +5,6 @@
         'comment' => 'Dijkstra test for any versions.',
         'data' => [ ],
         'tests' => [qw(
-
             dijkstra-v2
             doc-pgr_dijkstra
             doc-pgr_dijkstraVia
@@ -17,6 +16,12 @@
             doc-pgr_dijkstraVia
             doc-pgr_dijkstraCost
             )]
+        ,'notests' => [qw(
+            dijkstra-v2
+            doc-pgr_dijkstraVia
+            doc-pgr_dijkstraCost
+            many_to_1
+            )]
     },
 
 #    'vpg-vpgis' => {}, # for version specific tests
diff --git a/src/dijkstra/tester/Makefile b/src/dijkstra/tester/Makefile
deleted file mode 100644
index 66718c4..0000000
--- a/src/dijkstra/tester/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-
-all: testit
-
-testit: testit.o boost_wrapper.o
-	g++ -g -O0 -o testit testit.o boost_wrapper.o -L/usr/lib -lm
-
-testit.o: testit.c
-	gcc -g -O0 -c testit.c
-
-boost_wrapper.o: boost_wrapper.cpp
-	g++ -g -O0 -I/usr/include -c boost_wrapper.cpp
-
-clean:
-	rm -f *.o testit
diff --git a/src/dijkstra/tester/boost_wrapper.cpp b/src/dijkstra/tester/boost_wrapper.cpp
deleted file mode 100644
index 22ee8bf..0000000
--- a/src/dijkstra/tester/boost_wrapper.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-/*
- * Shortest path algorithm for PostgreSQL
- *
- * Copyright (c) 2005 Sylvain Pasche
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-// Include C header first for windows build issue
-#include "dijkstra.h"
-#include <cfloat>
-
-#include <boost/config.hpp>
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-
-using namespace std;
-using namespace boost;
-
-// Maximal number of nodes in the path (to avoid infinite loops)
-#define MAX_NODES 100000000
-
-struct Vertex
-{
-    int id;
-    float8 cost;
-};
-
-
-int 
-boost_dijkstra(edge_t *edges, unsigned int count, int start_vertex, int end_vertex,
-	       bool directed, bool has_reverse_cost,
-	       path_element_t **path, int *path_count, char **err_msg)
-{
-try {
-
-    // FIXME: use a template for the directedS parameters
-    typedef adjacency_list < listS, vecS, directedS, no_property, Vertex> graph_t;
-
-    typedef graph_traits < graph_t >::vertex_descriptor vertex_descriptor;
-    typedef graph_traits < graph_t >::edge_descriptor edge_descriptor;
-    typedef std::pair<int, int> Edge;
-
-    // FIXME: compute this value
-    const unsigned int num_nodes = ((directed && has_reverse_cost ? 2 : 1) * count) + 100;
-
-    graph_t graph(num_nodes);
-
-    // commented out to fix APPLE build, is it needed?
-    //property_map<graph_t, edge_weight_t>::type weightmap = get(edge_weight, graph);
-
-    for (std::size_t j = 0; j < count; ++j)
-    {
-        double cost, rcost;
-        edge_descriptor e;
-        bool inserted;
-
-        tie(e, inserted) = add_edge(edges[j].source, edges[j].target, graph);
-
-        cost = (edges[j].cost < 0.0) ? DBL_MAX : edges[j].cost;
-        graph[e].cost = cost;
-        graph[e].id = edges[j].id;
-				
-        if (!directed || (directed && has_reverse_cost))
-        {
-            tie(e, inserted) = add_edge(edges[j].target, edges[j].source, graph);
-            graph[e].id = edges[j].id;
-
-            if (has_reverse_cost)
-            {
-                rcost = (edges[j].reverse_cost < 0.0) ? DBL_MAX : edges[j].reverse_cost;
-                graph[e].cost = rcost;
-            }
-            else 
-            {
-                graph[e].cost = cost;
-            }
-        }
-    }
-
-    std::vector<vertex_descriptor> predecessors(num_vertices(graph));
-
-    vertex_descriptor _source = vertex(start_vertex, graph);
-
-    if (_source < 0 /*|| _source >= num_nodes*/) 
-    {
-        *err_msg = (char *) "Starting vertex not found";
-        return -1;
-    }
-
-    vertex_descriptor _target = vertex(end_vertex, graph);
-    if (_target < 0 /*|| _target >= num_nodes*/)
-    {
-        *err_msg = (char *) "Ending vertex not found";
-        return -1;
-    }
-
-    std::vector<float8> distances(num_vertices(graph));
-    // calling Boost function
-    dijkstra_shortest_paths(graph, _source,
-                predecessor_map(&predecessors[0]).
-                weight_map(get(&Vertex::cost, graph))
-                .distance_map(&distances[0]));
-
-    vector<int> path_vect;
-    int max = MAX_NODES;
-    path_vect.push_back(_target);
-
-    while (_target != _source) 
-    {
-        if (_target == predecessors[_target]) 
-        {
-            *err_msg = (char *) "No path found";
-            return 0;
-        }
-        _target = predecessors[_target];
-
-        path_vect.push_back(_target);
-        if (!max--) 
-        {
-            *err_msg = (char *) "Overflow";
-            return -1;
-        }
-    }
-
-    *path = (path_element_t *) malloc(sizeof(path_element_t) * (path_vect.size() + 1));
-    *path_count = path_vect.size();
-
-    for(int i = path_vect.size() - 1, j = 0; i >= 0; i--, j++)
-    {
-        graph_traits < graph_t >::vertex_descriptor v_src;
-        graph_traits < graph_t >::vertex_descriptor v_targ;
-        graph_traits < graph_t >::edge_descriptor e;
-        graph_traits < graph_t >::out_edge_iterator out_i, out_end;
-
-        (*path)[j].vertex_id = path_vect.at(i);
-
-        (*path)[j].edge_id = -1;
-        (*path)[j].cost = distances[_target];
-	
-        if (i == 0) 
-        {
-            continue;
-        }
-
-        v_src = path_vect.at(i);
-        v_targ = path_vect.at(i - 1);
-        double cost = 99999999.9;
-        int edge_id = 0;
-
-        for (tie(out_i, out_end) = out_edges(v_src, graph); 
-             out_i != out_end; ++out_i)
-        {
-            graph_traits < graph_t >::vertex_descriptor v, targ;
-            e = *out_i;
-            v = source(e, graph);
-            targ = target(e, graph);
-								
-            if (targ == v_targ)
-            {
-                // if there are multiple parallel edges get the lowest cost
-                if (graph[*out_i].cost < cost)
-                {
-                    edge_id = graph[*out_i].id;
-                    cost = graph[*out_i].cost;
-                }
-            }
-        }
-        (*path)[j].edge_id = edge_id;
-        (*path)[j].cost = cost;
-    }
-
-    return EXIT_SUCCESS;
-  }
-  catch(...) {
-      *err_msg = (char *) "Unknown exception caught!";
-      return -1;
-  }
-}
diff --git a/src/dijkstra/tester/dijkstra.h b/src/dijkstra/tester/dijkstra.h
deleted file mode 100644
index ca9854f..0000000
--- a/src/dijkstra/tester/dijkstra.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-/*
- * Shortest path algorithm for PostgreSQL
- *
- * Copyright (c) 2005 Sylvain Pasche
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
- 
-#ifndef _DIJKSTRA_H
-#define _DIJKSTRA_H
-
-typedef double float8;
-
-typedef struct edge 
-{
-    int id;
-    int source;
-    int target;
-    float8 cost;
-    float8 reverse_cost;
-} edge_t;
-
-typedef struct path_element 
-{
-    int vertex_id;
-    int edge_id;
-    float8 cost;
-} path_element_t;
-
-#ifdef __cplusplus
-extern "C"
-#endif
-int boost_dijkstra(edge_t *edges, unsigned int count, int start_vertex, int end_vertex,
-		   bool directed, bool has_reverse_cost,
-                   path_element_t **path, int *path_count, char **err_msg);
-
-#endif
diff --git a/src/dijkstra/tester/testit.c b/src/dijkstra/tester/testit.c
deleted file mode 100644
index 05142f4..0000000
--- a/src/dijkstra/tester/testit.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-#include <stdlib.h>
-#include <stdio.h>
-#include <limits.h>
-#include <assert.h>
-
-typedef double float8;
-typedef int bool;
-
-typedef struct edge
-{
-    int id;
-    int source;
-    int target;
-    float8 cost;
-    float8 reverse_cost;
-} edge_t;
-
-typedef struct path_element
-{
-    int vertex_id;
-    int edge_id;
-    float8 cost;
-} path_element_t;
-
-#ifdef __cplusplus
-extern "C"
-#endif
-int boost_dijkstra(edge_t *edges, unsigned int count, int start_vertex,
-        int end_vertex, bool directed, bool has_reverse_cost,
-        path_element_t **path, int *path_count, char **err_msg);
-
-static edge_t edges[23] = {
-    {134034453,4401484,4401467,1491.35562366006,0.0},
-    {134034463,4401489,4401485,12.1046145920234,0.0},
-    {134034458,4401487,4401477,177.374061187772,0.0},
-    {134095663,4401465,4401476,2014.71852797927,0.0},
-    {134034459,4401485,4401487,201.968135582698,0.0},
-    {134095834,4401478,4401465,293.089423713387,0.0},
-    {134034461,4401488,4401489,418.687894948968,0.0},
-    {629678698,4415069,134860887,3776.78929640359,0.0},
-    {134034456,4401477,4401481,491.242305990214,0.0},
-    {134095832,4401482,4401487,76.1157555542275,0.0},
-    {134034465,4401490,4401489,1956.98967514724,0.0},
-    {134034454,4401483,4401486,1356.25190452873,0.0},
-    {134034462,4401487,4401478,17.2205341642897,0.0},
-    {134095833,4401477,4401478,2014.66722340654,0.0},
-    {134034455,4401485,4401483,53.5613132396201,0.0},
-    {134034467,4401488,4417647,2597.20106449741,0.0},
-    {134034452,4401483,4401467,350.071683838508,0.0},
-    {134034446,4401481,4401476,568.270689073724,0.0},
-    {134072383,4416226,4401482,322.141177736713,0.0},
-    {134034447,4401482,4401481,1522.8331095897,0.0},
-    {134034466,4401486,4401490,610.880612548267,0.0},
-    {134034468,4417647,4401486,507.803184036552,0.0},
-    {134034464,4401490,4401485,149.914370088613,0.0}
-};
-
-int main(void) {
-    int total_tuples = 23;
-    int i;
-
-    int ret;
-    char *err_msg = NULL;
-
-    int start_vertex = 4401489;
-    int end_vertex   = 4401483;
-
-    int v_min_id = LONG_MAX;
-    int v_max_id = 0;
-
-    int s_count = 0;
-    int t_count = 0;
-
-    path_element_t *path = NULL;
-    int path_count = 0;
-
-    for (i=0; i<total_tuples; i++) {
-        if(edges[i].source < v_min_id) v_min_id = edges[i].source;
-        if(edges[i].target < v_min_id) v_min_id = edges[i].target;
-        if(edges[i].source > v_max_id) v_max_id = edges[i].source;
-        if(edges[i].target > v_max_id) v_max_id = edges[i].target;
-    }
-    printf("%i <-> %i\n", v_min_id, v_max_id);
-
-    for (i=0; i<total_tuples; i++) {
-        if (edges[i].source == start_vertex || edges[i].target == start_vertex)
-            s_count++;
-        if (edges[i].source == end_vertex || edges[i].target == end_vertex)
-            t_count++;
-        edges[i].source -= v_min_id;
-        edges[i].target -= v_min_id;
-    }
-
-    assert(s_count);
-    assert(t_count);
-
-    start_vertex -= v_min_id;
-    end_vertex   -= v_min_id;
-
-    ret = boost_dijkstra(edges, total_tuples, start_vertex, end_vertex,
-                         0, 0, &path, &path_count, &err_msg);
-
-    if (ret < 0) {
-        printf("Error computing path: %s\n", err_msg);
-        exit(1);
-    }
-
-    printf("   seq:  vertex_id,    edge_id,       cost\n");
-    for (i=0; i<path_count; i++) {
-        path[i].vertex_id += v_min_id;
-        printf("%6d: %10d, %10d, %10.4f\n", i, path[i].vertex_id, path[i].edge_id, path[i].cost);
-    }
-
-    if (path) free(path);
-
-    exit(0);
-}
diff --git a/src/driving_distance/doc/doc-pgr_drivingDistance.queries b/src/driving_distance/doc/doc-pgr_drivingDistance.queries
index 4d0180f..b23f5be 100644
--- a/src/driving_distance/doc/doc-pgr_drivingDistance.queries
+++ b/src/driving_distance/doc/doc-pgr_drivingDistance.queries
@@ -1,3 +1,8 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
+--q1
 /*PGR-GNU*****************************************************************
 
 Copyright (c) 2015 pgRouting developers
@@ -25,11 +30,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 
 
-BEGIN;
-BEGIN
-SET client_min_messages TO NOTICE;
-SET
---q1
 SELECT * FROM pgr_drivingDistance(
         'SELECT id, source, target, cost, reverse_cost FROM edge_table',
         2, 3
diff --git a/src/driving_distance/doc/doc-pgr_drivingdistance-v2.queries b/src/driving_distance/doc/doc-pgr_drivingdistance-v2.queries
index 5fa1b9e..ef22884 100644
--- a/src/driving_distance/doc/doc-pgr_drivingdistance-v2.queries
+++ b/src/driving_distance/doc/doc-pgr_drivingdistance-v2.queries
@@ -2,6 +2,8 @@ BEGIN;
 BEGIN
 SET client_min_messages TO NOTICE;
 SET
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_drivingDistance(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
diff --git a/src/ksp/doc/ksp.rst.back b/src/driving_distance/doc/drivingDistance-category.rst
similarity index 52%
copy from src/ksp/doc/ksp.rst.back
copy to src/driving_distance/doc/drivingDistance-category.rst
index 0eec12f..460992e 100644
--- a/src/ksp/doc/ksp.rst.back
+++ b/src/driving_distance/doc/drivingDistance-category.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -7,18 +7,27 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-.. _ksp:
 
-pgr_ksp - Multiple shortest Paths based on Dijkstra
+.. _drivingDistance:
+
+Driving Distance - Category
 ===============================================================================
 
+.. index from here
+
+* :ref:`pgr_drivingDistance` - Driving Distance based on pgr_dijkstra
+* :ref:`pgr_withPointsDD` - Driving Distance based on pgr_withPoints
+* Post pocessing
+
+  * :ref:`pgr_alphaShape` - Alpha shape computation
+  * :ref:`pgr_points_as_polygon` - Polygon around set of points
 
+.. index to here
 
-  -  :ref:`pgr_ksp<pgr_ksp>` - Multiple shortest Paths based on Dijkstra
-  -  :ref:`pgr_withPointsKSP<pgr_withPointsKSP>` - Multiple shortest Paths based on Dijkstra
 
 .. toctree::
-        :hidden: 
+    :hidden:
 
-        ./pgr_ksp
+    pgr_alphaShape.rst
+    pgr_pointsAsPolygon.rst
 
diff --git a/src/driving_distance/doc/drivingDistance.rst b/src/driving_distance/doc/drivingDistance.rst
deleted file mode 100644
index c56a2eb..0000000
--- a/src/driving_distance/doc/drivingDistance.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-
-.. _drivingDistance:
-
-Driving Distance
-===============================================================================
-
-
-  - :ref:`pgr_drivingDistance` - Driving Distance based on pgr_dijkstra
-
-.. toctree::
-    :hidden:
-
-    ./pgr_drivingDistance.rst
-
-.. _pgr_driving_distance_post:
-
-Driving Distance post-processing
-===============================================================================
-
-  - :ref:`pgr_alphaShape` - Alpha shape computation
-  - :ref:`pgr_points_as_polygon` - Polygon around set of points
-
-.. toctree::
-    :hidden:
-
-    ./../../alpha_shape/doc/pgr_alphaShape.rst
-    ./../../alpha_shape/doc/pgr_pointsAsPolygon.rst
-
diff --git a/src/driving_distance/doc/pgr_drivingDistance.rst b/src/driving_distance/doc/pgr_drivingDistance.rst
index fac8f7c..ce9f63b 100644
--- a/src/driving_distance/doc/pgr_drivingDistance.rst
+++ b/src/driving_distance/doc/pgr_drivingDistance.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,11 +19,17 @@ Name
 ``pgr_drivingDistance`` - Returns the driving distance from a start node.
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability
+
+* pgr_drivingDistance(single vertex) 2.0.0, signature change 2.1.0
+* pgr_drivingDistance(multiple vertices) 2.1.0
+
+
 Synopsis
 -------------------------------------------------------------------------------
 
@@ -84,7 +90,7 @@ Driving Distance From Multiple Starting Vertices
 Description of the Signatures
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
diff --git a/src/driving_distance/doc/pgr_drivingDistance_v2.rst b/src/driving_distance/doc/pgr_drivingDistance_v2.rst
deleted file mode 100644
index 095e8f8..0000000
--- a/src/driving_distance/doc/pgr_drivingDistance_v2.rst
+++ /dev/null
@@ -1,97 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_driving_distance_v2:
-
-pgr_drivingDistance - Deprecated Signature
-===============================================================================
-
-.. warning:: This function signature is deprecated!!!
-
-    * That means it has been replaced by new signature(s)
-    * This signature is no longer supported, and may be removed from future versions.
-    * All code that use this function signature should be converted to use its replacement :ref:`pgr_drivingDistance`.
-
-
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_drivingDistance`` - Returns the driving distance from a start node.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-This function computes a Dijkstra shortest path solution them extracts the cost to get to each node in the network from the starting node. Using these nodes and costs it is possible to compute constant drive time polygons. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows, that make up a list of accessible points.
-
-.. code-block:: sql
-
-	pgr_costResult[] pgr_drivingDistance(text sql, integer source, double precision distance,
-                                      boolean directed, boolean has_rcost);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-	.. code-block:: sql
-
-		SELECT id, source, target, cost [,reverse_cost] FROM edge_table
-
-
-	:id: ``int4`` identifier of the edge
-	:source: ``int4`` identifier of the source vertex
-	:target: ``int4`` identifier of the target vertex
-	:cost: ``float8`` value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph.
-	:reverse_cost: (optional) the cost for the reverse traversal of the edge. This is only used when the ``directed`` and ``has_rcost`` parameters are ``true`` (see the above remark about negative costs).
-
-:source: ``int4`` id of the start point
-:distance: ``float8`` value in edge cost units (not in projection units - they might be different).
-:directed: ``true`` if the graph is directed
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   node ID
-:id2:   edge ID (this is probably not a useful item)
-:cost:  cost to get to this node ID
-
-.. warning::
-
-	You must reconnect to the database after ``CREATE EXTENSION pgrouting``. Otherwise the function will return ``Error computing path: std::bad_alloc``.
-
-
-.. rubric:: History
-
-* Renamed in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-* Without ``reverse_cost``
-* With ``reverse_cost``
-
-.. literalinclude:: doc-pgr_drivingdistance-v2.queries
-   :start-after: --q1
-   :end-before: --q2
-
-
-The queries use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`pgr_drivingDistance`
-* :ref:`pgr_alphashape` - Alpha shape computation
-* :ref:`pgr_points_as_polygon` - Polygon around set of points
diff --git a/src/driving_distance/sql/routing_dd.sql b/src/driving_distance/sql/routing_dd.sql
index b7b8198..32e8012 100644
--- a/src/driving_distance/sql/routing_dd.sql
+++ b/src/driving_distance/sql/routing_dd.sql
@@ -21,22 +21,46 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-CREATE OR REPLACE FUNCTION _pgr_drivingDistance(edges_sql text, start_vid bigint, distance float8, directed BOOLEAN, 
-       OUT seq integer, OUT node bigint, OUT edge bigint, OUT cost float, OUT agg_cost float)
+CREATE OR REPLACE FUNCTION pgr_drivingDistance(
+    edges_sql text,
+    start_vids anyarray,
+    distance FLOAT,
+    directed BOOLEAN DEFAULT TRUE,
+    equicost BOOLEAN DEFAULT FALSE,
+    OUT seq integer,
+    OUT from_v  bigint,
+    OUT node bigint,
+    OUT edge bigint,
+    OUT cost FLOAT,
+    OUT agg_cost FLOAT)
   RETURNS SETOF RECORD AS
-     '$libdir/${PGROUTING_LIBRARY_NAME}', 'driving_distance'
+     '$libdir/${PGROUTING_LIBRARY_NAME}', 'driving_many_to_dist'
  LANGUAGE c VOLATILE STRICT;
 
-CREATE OR REPLACE FUNCTION _pgr_drivingDistance(edges_sql text, start_vids anyarray, distance float8, directed BOOLEAN, equicost BOOLEAN, 
-       OUT seq integer, OUT start_v bigint, OUT node bigint, OUT edge bigint, OUT cost float, OUT agg_cost float)
+
+CREATE OR REPLACE FUNCTION pgr_drivingDistance(
+    edges_sql text,
+    start_vid bigint,
+    distance FLOAT8,
+    directed BOOLEAN DEFAULT TRUE,
+    OUT seq integer,
+    OUT node bigint,
+    OUT edge bigint,
+    OUT cost FLOAT,
+    OUT agg_cost FLOAT)
   RETURNS SETOF RECORD AS
-     '$libdir/${PGROUTING_LIBRARY_NAME}', 'driving_many_to_dist'
- LANGUAGE c VOLATILE STRICT;
+$BODY$
+    SELECT a.seq, a.node, a.edge, a.cost, a.agg_cost
+    FROM pgr_drivingDistance($1, ARRAY[$2]::BIGINT[], $3, $4, false) a;
+$BODY$
+LANGUAGE SQL VOLATILE
+COST 100
+ROWS 1000;
+
 
 
 -- OLD SIGNATURE
-CREATE OR REPLACE FUNCTION pgr_drivingDistance(edges_sql text, source bigint, distance float8, directed BOOLEAN, has_rcost BOOLEAN)
+CREATE OR REPLACE FUNCTION pgr_drivingDistance(edges_sql text, source bigint, distance FLOAT8, directed BOOLEAN, has_rcost BOOLEAN)
   RETURNS SETOF pgr_costresult AS
   $BODY$
   DECLARE
@@ -62,117 +86,10 @@ CREATE OR REPLACE FUNCTION pgr_drivingDistance(edges_sql text, source bigint, di
       END IF;
 
       RETURN query SELECT seq - 1 AS seq, node::integer AS id1, edge::integer AS id2, agg_cost AS cost
-                FROM _pgr_drivingDistance(sql, source, distance, directed);
+                FROM pgr_drivingDistance($1, ARRAY[$2]::BIGINT[], $3, $4, false);
   END
   $BODY$
   LANGUAGE plpgsql VOLATILE
   COST 100
   ROWS 1000;
 
-
-
-CREATE OR REPLACE FUNCTION pgr_drivingDistance(edges_sql text, start_v bigint, distance float8, directed BOOLEAN DEFAULT TRUE,
-       OUT seq integer, OUT node bigint, OUT edge bigint, OUT cost float, OUT agg_cost float)
-  RETURNS SETOF RECORD AS
-  $BODY$
-  DECLARE
-  BEGIN
-      RETURN query
-          SELECT * FROM _pgr_drivingDistance(edges_sql, start_v, distance, directed);
-  END
-  $BODY$
-  LANGUAGE plpgsql VOLATILE
-  COST 100
-  ROWS 1000;
-
-
--- the multi starting point
-CREATE OR REPLACE FUNCTION pgr_drivingDistance(sql text, start_v anyarray, distance float8, directed BOOLEAN DEFAULT TRUE, equicost BOOLEAN DEFAULT FALSE,
-       OUT seq integer, OUT from_v bigint, OUT node bigint, OUT edge bigint, OUT cost float, OUT agg_cost float)
-  RETURNS SETOF RECORD AS
-  $BODY$
-  DECLARE
-  BEGIN
-      RETURN query
-           SELECT * FROM _pgr_drivingDistance(sql, start_v, distance, directed, equicost);
-  END
-  $BODY$
-  LANGUAGE plpgsql VOLATILE
-  COST 100
-  ROWS 1000;
-
-
-/*
-
------------------------------------------------------------------------
--- Core function for alpha shape computation.
--- The sql should return vertex ids and x,y values. Return ordered
--- vertex ids. 
------------------------------------------------------------------------
-CREATE OR REPLACE FUNCTION pgr_alphashape(sql text, alpha float8 DEFAULT 0, OUT x float8, OUT y float8)
-    RETURNS SETOF record
-    AS '$libdir/librouting-2.2', 'alphashape'
-    LANGUAGE c IMMUTABLE STRICT;
-
-----------------------------------------------------------
--- Draws an alpha shape around given set of points.
--- ** This should be rewritten as an aggregate. **
-----------------------------------------------------------
-CREATE OR REPLACE FUNCTION pgr_pointsAsPolygon(query varchar, alpha float8 DEFAULT 0)
-	RETURNS geometry AS
-	$$
-	DECLARE
-		r record;
-		geoms geometry[];
-		vertex_result record;
-		i int;
-		n int;
-		spos int;
-		q text;
-		x float8[];
-		y float8[];
-
-	BEGIN
-		geoms := array[]::geometry[];
-		i := 1;
-
-		FOR vertex_result IN EXECUTE 'SELECT x, y FROM pgr_alphashape($1,$2) ' USING query, alpha
-		LOOP
-			x[i] = vertex_result.x;
-			y[i] = vertex_result.y;
-			i := i+1;
-		END LOOP;
-
-		n := i;
-		IF n = 1 THEN
-			RAISE NOTICE 'n = 1';
-			RETURN NULL;
-		END IF;
-
-		spos := 1;
-		q := 'SELECT ST_GeometryFromText(''POLYGON((';
-		FOR i IN 1..n LOOP
-			IF x[i] IS NULL AND y[i] IS NULL THEN
-				q := q || ', ' || x[spos] || ' ' || y[spos] || '))'',0) AS geom;';
-				EXECUTE q INTO r;
-				geoms := geoms || array[r.geom];
-				q := '';
-			ELSE
-				IF q = '' THEN
-					spos := i;
-					q := 'SELECT ST_GeometryFromText(''POLYGON((';
-				END IF;
-				IF i = spos THEN
-					q := q || x[spos] || ' ' || y[spos];
-				ELSE
-					q := q || ', ' || x[i] || ' ' || y[i];
-				END IF;
-			END IF;
-		END LOOP;
-
-		RETURN ST_BuildArea(ST_Collect(geoms));
-	END;
-	$$
-	LANGUAGE 'plpgsql' VOLATILE STRICT;
-    */
-
diff --git a/src/driving_distance/sql/withPoints_dd.sql b/src/driving_distance/sql/withPoints_dd.sql
index ae6ce7e..25b0807 100644
--- a/src/driving_distance/sql/withPoints_dd.sql
+++ b/src/driving_distance/sql/withPoints_dd.sql
@@ -22,43 +22,50 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
 CREATE OR REPLACE FUNCTION pgr_withPointsDD(
     edges_sql TEXT,
     points_sql TEXT,
-    start_pid BIGINT,
+    start_pid ANYARRAY,
     distance FLOAT,
 
     directed BOOLEAN DEFAULT TRUE,
     driving_side CHAR DEFAULT 'b', 
     details BOOLEAN DEFAULT FALSE, 
+    equicost BOOLEAN DEFAULT FALSE, 
 
     OUT seq INTEGER,
+    OUT start_vid BIGINT,
     OUT node BIGINT,
     OUT edge BIGINT,
     OUT cost FLOAT,
     OUT agg_cost FLOAT)
   RETURNS SETOF RECORD AS
-     '$libdir/${PGROUTING_LIBRARY_NAME}', 'withPoints_dd'
+     '$libdir/${PGROUTING_LIBRARY_NAME}', 'many_withPointsDD'
  LANGUAGE c VOLATILE STRICT;
 
+
 CREATE OR REPLACE FUNCTION pgr_withPointsDD(
     edges_sql TEXT,
     points_sql TEXT,
-    start_pid ANYARRAY,
+    start_pid BIGINT,
     distance FLOAT,
 
     directed BOOLEAN DEFAULT TRUE,
     driving_side CHAR DEFAULT 'b', 
     details BOOLEAN DEFAULT FALSE, 
-    equicost BOOLEAN DEFAULT FALSE, 
 
     OUT seq INTEGER,
-    OUT start_vid BIGINT,
     OUT node BIGINT,
     OUT edge BIGINT,
     OUT cost FLOAT,
     OUT agg_cost FLOAT)
   RETURNS SETOF RECORD AS
-     '$libdir/${PGROUTING_LIBRARY_NAME}', 'many_withPointsDD'
- LANGUAGE c VOLATILE STRICT;
+$BODY$
+    SELECT a.seq, a.node, a.edge, a.cost, a.agg_cost
+    FROM pgr_withPointsDD($1, $2, ARRAY[$3]::BIGINT[], $4, $5, $6, $7, false) a;
+$BODY$
+LANGUAGE SQL VOLATILE
+COST 100
+ROWS 1000;
+
+
diff --git a/src/driving_distance/src/CMakeLists.txt b/src/driving_distance/src/CMakeLists.txt
index a74d2fa..9d568df 100644
--- a/src/driving_distance/src/CMakeLists.txt
+++ b/src/driving_distance/src/CMakeLists.txt
@@ -1,9 +1,7 @@
 ADD_LIBRARY(driving_distance OBJECT
-    drivedist.c
     many_to_dist_driving_distance.c
-    boost_interface_drivedist.cpp
-
-    withPoints_dd.c
     many_to_dist_withPointsDD.c
+
+    drivedist_driver.cpp
     withPoints_dd_driver.cpp
  )
diff --git a/src/driving_distance/src/boost_interface_drivedist.cpp b/src/driving_distance/src/boost_interface_drivedist.cpp
deleted file mode 100644
index 1fdca34..0000000
--- a/src/driving_distance/src/boost_interface_drivedist.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: boost_interface_drivedist.cpp
-
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-vicky_vergara at hotmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- ********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
-
-#include "./boost_interface_drivedist.h"
-#include <sstream>
-#include <deque>
-#include <vector>
-#include <set>
-
-#include "./../../common/src/pgr_types.h"
-#include "../../common/src/pgr_alloc.hpp"
-#include "./../../dijkstra/src/pgr_dijkstra.hpp"
-
-
-
-
-void
-do_pgr_driving_many_to_dist(
-        pgr_edge_t  *data_edges, size_t total_tuples,
-        int64_t  *start_vertex, size_t s_len,
-        double distance,
-        bool directedFlag,
-        bool equiCostFlag,
-        General_path_element_t **ret_path, size_t *path_count,
-        char ** err_msg) {
-    try {
-        *ret_path = NULL;
-        *path_count = 0;
-
-        graphType gType = directedFlag? DIRECTED: UNDIRECTED;
-
-        std::deque< Path >paths;
-        std::set< int64_t > s_start_vertices(start_vertex, start_vertex + s_len);
-        std::vector< int64_t > start_vertices(s_start_vertices.begin(), s_start_vertices.end());
-
-        if (directedFlag) {
-            pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_tuples);
-            pgr_drivingDistance(digraph, paths, start_vertices, distance, equiCostFlag);
-        } else {
-            pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_tuples);
-            pgr_drivingDistance(undigraph, paths, start_vertices, distance, equiCostFlag);
-        }
-
-        size_t count(count_tuples(paths));
-
-
-        if (count == 0) {
-            *err_msg = strdup("NOTICE: No return values was found");
-            return;
-        }
-        *ret_path = pgr_alloc(count, (*ret_path));
-        auto trueCount(collapse_paths(ret_path, paths));
-        *path_count = trueCount;
-
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-        return;
-    } catch ( ... ) {
-        *err_msg = strdup("Caught unknown exception!");
-        if (ret_path) free(ret_path);
-        *path_count = 0;
-        return;
-    }
-}
-
-
-
-
-void
-do_pgr_driving_distance(
-        pgr_edge_t  *data_edges, size_t total_edges,
-        int64_t     start_vertex,
-        double      distance,
-        bool        directedFlag,
-        General_path_element_t **ret_path, size_t *path_count,
-        char                   **err_msg) {
-    std::ostringstream log;
-    try {
-        // if it already has values there will be a leak
-        // call with pointing to NULL
-        *ret_path = NULL;
-        *path_count = 0;
-
-        log << "NOTICE: Started processing pgr_drivingDistance for 1 start_vid\n";
-        // in c code this should have been checked:
-        //  1) start_vertex is in the data_edges  DONE
-
-        graphType gType = directedFlag? DIRECTED: UNDIRECTED;
-
-        Path path;
-
-
-        if (directedFlag) {
-            log << "NOTICE: Processing Directed graph\n";
-            pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(data_edges, total_edges);
-            pgr_drivingDistance(digraph, path, start_vertex, distance);
-        } else {
-            log << "NOTICE: Processing Undirected graph\n";
-            pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_edges);
-            pgr_drivingDistance(undigraph, path, start_vertex, distance);
-        }
-
-        log << "Returning number of tuples" << path.size() << "\n";
-        if (path.empty()) {
-            log << "NOTICE: it should have at least the one for it self";
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        log << "NOTICE: Calculating the number of tuples \n";
-        auto count = path.size();
-
-        log << "NOTICE Count: " << count << " tuples\n";
-
-        *ret_path = pgr_alloc(count, (*ret_path));
-
-        size_t sequence = 0;
-        path.get_pg_dd_path(ret_path, sequence);
-        *path_count = count;
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch ( ... ) {
-        log << "NOTICE: unknown exception cought";
-        *err_msg = strdup(log.str().c_str());
-        if (ret_path) free(ret_path);
-        *path_count = 0;
-        return;
-    }
-}
-
diff --git a/src/driving_distance/src/drivedist.c b/src/driving_distance/src/drivedist.c
deleted file mode 100644
index ec20422..0000000
--- a/src/driving_distance/src/drivedist.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: drivedist.c 
-
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:vicky_Vergara at hotmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-//#define DEBUG
-
-#include "fmgr.h"
-#include "./../../common/src/debug_macro.h"
-#include "./../../common/src/time_msg.h"
-#include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
-#include "./../../common/src/edges_input.h"
-#include "./boost_interface_drivedist.h"
-
-PGDLLEXPORT Datum driving_distance(PG_FUNCTION_ARGS);
-
-static
-void compute_driving_distance(
-     char* sql,
-     int64_t start_vertex,
-     float8 distance,
-     bool directed,
-     General_path_element_t **path, size_t *path_count) {
-  pgr_SPI_connect();
-
-  pgr_edge_t *edges = NULL;
-  size_t total_edges = 0;
-
-
-  char *err_msg = (char *)"";
-
-  PGR_DBG("Load data");
-
-  pgr_get_edges(sql, &edges, &total_edges);
-
-  if (total_edges == 0) {
-    PGR_DBG("No edges found");
-    *path = NULL;
-    (*path_count) = 0;
-    pgr_SPI_finish();
-    return;
-  }
-  PGR_DBG("total edges read %ld\n", total_edges);
-
-  clock_t start_t = clock();
-  do_pgr_driving_distance(edges, total_edges,
-                        start_vertex, distance,
-                        directed, 
-                        path, path_count, &err_msg);
-  time_msg(" processing Driving Distance one start", start_t, clock());
-
-
-  PGR_DBG("total tuples found %ld\n", *path_count);
-  PGR_DBG("Returned message = %s\n", err_msg);
-
-  pfree(edges);
-  pgr_SPI_finish();
-}
-
-
-PG_FUNCTION_INFO_V1(driving_distance);
-PGDLLEXPORT Datum
-driving_distance(PG_FUNCTION_ARGS) {
-  FuncCallContext     *funcctx;
-  uint32_t             call_cntr;
-  uint32_t             max_calls;
-  TupleDesc            tuple_desc;
-  General_path_element_t  *ret_path = 0;
-
-  /* stuff done only on the first call of the function */
-  if (SRF_IS_FIRSTCALL()) {
-      MemoryContext   oldcontext;
-      size_t path_count = 0;
-
-      /* create a function context for cross-call persistence */
-      funcctx = SRF_FIRSTCALL_INIT();
-
-      /* switch to memory context appropriate for multiple function calls */
-      oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
-
-      /*************************************************************************************************************
-                                        QUERY
-       CREATE OR REPLACE FUNCTION _pgr_drivingDistance(edges_sql text, start_vid bigint, distance float8, directed BOOLEAN,
-       OUT seq integer, OUT node bigint, OUT edge bigint, OUT cost float, OUT agg_cost float)
-      *************************************************************************************************************/
-      PGR_DBG("Sub query  %s\n", pgr_text2char(PG_GETARG_TEXT_P(0)));
-
-      compute_driving_distance(pgr_text2char(PG_GETARG_TEXT_P(0)),       // edges_sql
-                               PG_GETARG_INT64(1),         // start_vid
-                               PG_GETARG_FLOAT8(2),        // distance
-                               PG_GETARG_BOOL(3),          // directed
-                                  &ret_path, &path_count);
-
-      /* total number of tuples to be returned */
-      funcctx->max_calls = (uint32_t)path_count;
-      funcctx->user_fctx = ret_path;
-
-      if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
-            ereport(ERROR,
-                    (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                     errmsg("function returning record called in context "
-                            "that cannot accept type record")));
-
-      funcctx->tuple_desc = tuple_desc;
-
-      MemoryContextSwitchTo(oldcontext);
-  }
-
-  /* stuff done on every call of the function */
-  funcctx = SRF_PERCALL_SETUP();
-
-  call_cntr = (uint32_t)funcctx->call_cntr;
-  max_calls = (uint32_t)funcctx->max_calls;
-  tuple_desc = funcctx->tuple_desc;
-  ret_path = (General_path_element_t*) funcctx->user_fctx;
-
-  /* do when there is more left to send */
-  if (call_cntr < max_calls) {
-      HeapTuple    tuple;
-      Datum        result;
-      Datum *values;
-      bool* nulls;
-
-      values = palloc(5 * sizeof(Datum));
-      nulls = palloc(5 * sizeof(bool));
-
-      // TODO version 3.0 change to 
-      // values[0] = Int64GetDatum(ret_path[call_cntr].seq + 1);
-      nulls[0] = false;
-      nulls[1] = false;
-      nulls[2] = false;
-      nulls[3] = false;
-      nulls[4] = false;
-      values[0] = Int32GetDatum(ret_path[call_cntr].seq + 1);
-      values[1] = Int64GetDatum(ret_path[call_cntr].node);
-      values[2] = Int64GetDatum(ret_path[call_cntr].edge);
-      values[3] = Float8GetDatum(ret_path[call_cntr].cost);
-      values[4] = Float8GetDatum(ret_path[call_cntr].agg_cost);
-
-      tuple = heap_form_tuple(tuple_desc, values, nulls);
-
-      /* make the tuple into a datum */
-      result = HeapTupleGetDatum(tuple);
-
-      /* clean up (this is not really necessary) */
-      pfree(values);
-      pfree(nulls);
-
-      SRF_RETURN_NEXT(funcctx, result);
-  } else {
-      /* do when there is no more left */
-      if (ret_path) free(ret_path);
-      SRF_RETURN_DONE(funcctx);
-  }
-}
-
diff --git a/src/driving_distance/src/drivedist_driver.cpp b/src/driving_distance/src/drivedist_driver.cpp
new file mode 100644
index 0000000..442d8d3
--- /dev/null
+++ b/src/driving_distance/src/drivedist_driver.cpp
@@ -0,0 +1,118 @@
+/*PGR-GNU*****************************************************************
+File: boost_interface_drivedist.cpp
+
+Copyright (c) 2015 Celia Virginia Vergara Castillo
+vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ ********************************************************************PGR-GNU*/
+
+#include "./drivedist_driver.h"
+
+#include <sstream>
+#include <deque>
+#include <vector>
+
+#include "./../../dijkstra/src/pgr_dijkstra.hpp"
+
+#include "../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/pgr_types.h"
+
+
+
+
+void
+do_pgr_driving_many_to_dist(
+        pgr_edge_t  *data_edges, size_t total_edges,
+        int64_t *start_vertex, size_t s_len,
+        double distance,
+        bool directedFlag,
+        bool equiCostFlag,
+        General_path_element_t **return_tuples, size_t *return_count,
+        char **log_msg,
+        char **notice_msg,
+        char **err_msg) {
+    std::ostringstream log;
+    std::ostringstream err;
+    std::ostringstream notice;
+
+    try {
+        pgassert(total_edges != 0);
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert(*return_count == 0);
+        pgassert((*return_tuples) == NULL);
+
+        graphType gType = directedFlag? DIRECTED: UNDIRECTED;
+
+        std::deque<Path> paths;
+        std::vector<int64_t> start_vertices(start_vertex, start_vertex + s_len);
+
+        if (directedFlag) {
+            pgrouting::DirectedGraph digraph(gType);
+            digraph.insert_edges(data_edges, total_edges);
+            paths = pgr_drivingDistance(
+                    digraph, start_vertices, distance, equiCostFlag);
+        } else {
+            pgrouting::UndirectedGraph undigraph(gType);
+            undigraph.insert_edges(data_edges, total_edges);
+            paths = pgr_drivingDistance(
+                    undigraph, start_vertices, distance, equiCostFlag);
+        }
+
+        size_t count(count_tuples(paths));
+
+
+        if (count == 0) {
+            *notice_msg = pgr_msg("No return values was found");
+            return;
+        }
+        *return_tuples = pgr_alloc(count, (*return_tuples));
+        auto trueCount(collapse_paths(return_tuples, paths));
+        *return_count = trueCount;
+
+
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    }
+}
diff --git a/src/driving_distance/src/boost_interface_drivedist.h b/src/driving_distance/src/drivedist_driver.h
similarity index 63%
rename from src/driving_distance/src/boost_interface_drivedist.h
rename to src/driving_distance/src/drivedist_driver.h
index 5260e33..0162127 100644
--- a/src/driving_distance/src/boost_interface_drivedist.h
+++ b/src/driving_distance/src/drivedist_driver.h
@@ -22,10 +22,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_DRIVING_DISTANCE_SRC_BOOST_INTERFACE_DRIVEDIST_H_
-#define SRC_DRIVING_DISTANCE_SRC_BOOST_INTERFACE_DRIVEDIST_H_
+#ifndef SRC_DRIVING_DISTANCE_SRC_DRIVEDIST_DRIVER_H_
+#define SRC_DRIVING_DISTANCE_SRC_DRIVEDIST_DRIVER_H_
 
-#include "stdlib.h"
 #include "./../../common/src/pgr_types.h"
 
 #ifdef __cplusplus
@@ -33,23 +32,18 @@ extern "C" {
 #endif
 
     void do_pgr_driving_many_to_dist(
-            pgr_edge_t  * edges, size_t total_tuples,
-            int64_t  *start_vertex, size_t s_len,
+            pgr_edge_t* edges, size_t total_edges,
+            int64_t* start_vertex, size_t s_len,
             double distance,
             bool directed,
             bool equicost,
-            General_path_element_t **ret_path, size_t *path_count,
-            char ** err_msg);
-
-    void do_pgr_driving_distance(
-            pgr_edge_t  * edges, size_t total_tuples,
-            int64_t  start_vertex, double distance,
-            bool directed,
-            General_path_element_t **ret_path, size_t *path_count,
-            char ** err_msg);
+            General_path_element_t** return_tuples, size_t* return_count,
+            char **log_msg,
+            char **notice_msg,
+            char **err_msg);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  //  SRC_DRIVING_DISTANCE_SRC_BOOST_INTERFACE_DRIVEDIST_H_
+#endif  // SRC_DRIVING_DISTANCE_SRC_DRIVEDIST_DRIVER_H_
diff --git a/src/driving_distance/src/many_to_dist_driving_distance.c b/src/driving_distance/src/many_to_dist_driving_distance.c
index e1b09f6..4dec43b 100644
--- a/src/driving_distance/src/many_to_dist_driving_distance.c
+++ b/src/driving_distance/src/many_to_dist_driving_distance.c
@@ -22,119 +22,119 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-// #define DEBUG
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./boost_interface_drivedist.h"
+#include "./drivedist_driver.h"
 
 
+PGDLLEXPORT Datum driving_many_to_dist(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(driving_many_to_dist);
+
 
-static 
-void driving_many_to_dist_driver(
+static
+void process(
         char* sql,
-        int64_t *start_vertex, size_t num,
+        ArrayType *starts,
         float8 distance,
         bool directed,
-        bool equicost, 
-        General_path_element_t **path, size_t *path_count) {
+        bool equicost,
+        General_path_element_t **result_tuples,
+        size_t *result_count) {
     pgr_SPI_connect();
-    pgr_edge_t *edges = NULL;
-    size_t total_tuples = 0;
-
-
-    char *err_msg = (char *)"";
 
+    size_t size_start_vidsArr = 0;
+    int64_t* start_vidsArr = pgr_get_bigIntArray(&size_start_vidsArr, starts);
 
+    pgr_edge_t *edges = NULL;
+    size_t total_tuples = 0;
     pgr_get_edges(sql, &edges, &total_tuples);
 
     if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*path_count) = 0;
-        *path = NULL;
         return;
     }
 
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
     do_pgr_driving_many_to_dist(
             edges, total_tuples,
-            start_vertex, num,
+            start_vidsArr, size_start_vidsArr,
             distance,
             directed,
             equicost,
-            path, path_count, &err_msg);
-    time_msg(" processing DrivingDistance many starts", start_t, clock());
+            result_tuples, result_count,
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    time_msg("processing pgr_drivingDistance()",
+            start_t, clock());
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
 
-    pfree(edges);
-    pgr_SPI_finish(); 
-}
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (start_vidsArr) pfree(start_vidsArr);
 
-#ifndef _MSC_VER
-Datum driving_many_to_dist(PG_FUNCTION_ARGS);
-#else  // _MSC_VER
-PGDLLEXPORT Datum driving_many_to_dist(PG_FUNCTION_ARGS);
-#endif  // _MSC_VER
+    pgr_SPI_finish();
+}
 
 
-PG_FUNCTION_INFO_V1(driving_many_to_dist);
-#ifndef _MSC_VER
-Datum
-#else  // _MSC_VER
 PGDLLEXPORT Datum
-#endif
 driving_many_to_dist(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t                  call_cntr;
-    uint32_t                  max_calls;
     TupleDesc            tuple_desc;
-    General_path_element_t  *ret_path = 0;
 
-    /* stuff done only on the first call of the function */
+    /**********************************************************************/
+    General_path_element_t* result_tuples = 0;
+    size_t result_count = 0;
+    /**********************************************************************/
+
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
-        size_t path_count = 0;
 
-        /* create a function context for cross-call persistence */
         funcctx = SRF_FIRSTCALL_INIT();
-
-        /* switch to memory context appropriate for multiple function calls */
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
-        int64_t* sourcesArr;
-        size_t num;
-
-        sourcesArr = (int64_t*) pgr_get_bigIntArray(&num, PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("sourcesArr size %ld ", num);
+        /**********************************************************************/
 
         PGR_DBG("Calling driving_many_to_dist_driver");
-        driving_many_to_dist_driver(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),  // sql
-                sourcesArr, num,                     // array of sources
-                PG_GETARG_FLOAT8(2),                 // distance
-                PG_GETARG_BOOL(3),                   // directed
-                PG_GETARG_BOOL(4),                   // equicost
-                &ret_path, &path_count);
-
-        free(sourcesArr);
-
-        /* total number of tuples to be returned */
-        funcctx->max_calls = (uint32_t) path_count;
-        funcctx->user_fctx = ret_path;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        process(
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_FLOAT8(2),
+                PG_GETARG_BOOL(3),
+                PG_GETARG_BOOL(4),
+                &result_tuples, &result_count);
+
+        /**********************************************************************/
+
+
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
+        funcctx->user_fctx = result_tuples;
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -145,50 +145,42 @@ driving_many_to_dist(PG_FUNCTION_ARGS) {
         MemoryContextSwitchTo(oldcontext);
     }
 
-    /* stuff done on every call of the function */
     funcctx = SRF_PERCALL_SETUP();
 
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
-    ret_path = (General_path_element_t*) funcctx->user_fctx;
+    result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    /* do when there is more left to send */
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum *values;
         bool* nulls;
 
-        values = palloc(6 * sizeof(Datum));
-        nulls = palloc(6 * sizeof(bool));
-        // id, start_v, node, edge, cost, tot_cost
-        nulls[0] = false;
-        nulls[1] = false;
-        nulls[2] = false;
-        nulls[3] = false;
-        nulls[4] = false;
-        nulls[5] = false;
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int64GetDatum(ret_path[call_cntr].start_id);
-        values[2] = Int64GetDatum(ret_path[call_cntr].node);
-        values[3] = Int64GetDatum(ret_path[call_cntr].edge);
-        values[4] = Float8GetDatum(ret_path[call_cntr].cost);
-        values[5] = Float8GetDatum(ret_path[call_cntr].agg_cost);
-
+        /**********************************************************************/
+        size_t numb = 6;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
+
+        size_t i;
+        for (i = 0; i < numb; ++i) {
+            nulls[i] = false;
+        }
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
+
+        /**********************************************************************/
         tuple = heap_form_tuple(tuple_desc, values, nulls);
-
-        /* make the tuple into a datum */
         result = HeapTupleGetDatum(tuple);
 
-        /* clean up (this is not really necessary) */
         pfree(values);
         pfree(nulls);
 
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        /* do when there is no more left */
-        if (ret_path) free(ret_path);
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/driving_distance/src/many_to_dist_withPointsDD.c b/src/driving_distance/src/many_to_dist_withPointsDD.c
index c54b334..69d68d5 100644
--- a/src/driving_distance/src/many_to_dist_withPointsDD.c
+++ b/src/driving_distance/src/many_to_dist_withPointsDD.c
@@ -22,21 +22,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-// #define DEBUG
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./../../common/src/points_input.h"
@@ -45,31 +37,31 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 
 PGDLLEXPORT Datum many_withPointsDD(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(many_withPointsDD);
 
-static 
+static
 void process(
         char* edges_sql,
         char* points_sql,
-        int64_t *start_pids_arr, size_t size_arr,
+        ArrayType* starts,
         double distance,
 
         bool directed,
         char *driving_side,
         bool details,
-        bool equicost, 
+        bool equicost,
 
         General_path_element_t **result_tuples,
-        size_t *result_count  ){
+        size_t *result_count) {
+    driving_side[0] = estimate_drivingSide(driving_side[0]);
+    PGR_DBG("estimated driving side:%c", driving_side[0]);
 
-    driving_side[0] = (char) tolower(driving_side[0]);
-    PGR_DBG("driving side:%c",driving_side[0]);
-    if (! ((driving_side[0] == 'r')
-                || (driving_side[0] == 'l'))) {
-        driving_side[0] = 'b';
-    }
+    pgr_SPI_connect();
 
+    size_t total_starts = 0;
+    int64_t* start_pidsArr = pgr_get_bigIntArray(&total_starts, starts);
+    PGR_DBG("sourcesArr size %ld ", total_starts);
 
-    pgr_SPI_connect();
     Point_on_edge_t *points = NULL;
     size_t total_points = 0;
     pgr_get_points(points_sql, &points, &total_points);
@@ -84,7 +76,8 @@ void process(
 
     pgr_edge_t *edges_of_points = NULL;
     size_t total_edges_of_points = 0;
-    pgr_get_edges(edges_of_points_query, &edges_of_points, &total_edges_of_points);
+    pgr_get_edges(
+            edges_of_points_query, &edges_of_points, &total_edges_of_points);
 
     pgr_edge_t *edges = NULL;
     size_t total_edges = 0;
@@ -95,66 +88,66 @@ void process(
     free(edges_no_points_query);
 
     if ((total_edges + total_edges_of_points) == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+        if (edges) pfree(edges);
+        if (edges_of_points) pfree(edges_of_points);
+        if (points) pfree(points);
         pgr_SPI_finish();
         return;
     }
 
-    PGR_DBG("Starting processing");
-    char *err_msg = NULL;
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    int errcode = do_pgr_many_withPointsDD(
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_withPointsDD(
             edges,              total_edges,
             points,             total_points,
             edges_of_points,    total_edges_of_points,
-            start_pids_arr,     size_arr,
+            start_pidsArr,      total_starts,
             distance,
 
             directed,
             driving_side[0],
             details,
-            equicost, 
+            equicost,
 
             result_tuples,
             result_count,
+            &log_msg,
+            &notice_msg,
             &err_msg);
     time_msg(" processing withPointsDD many starts", start_t, clock());
 
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    if (!err_msg) free(err_msg);
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
 
-    pfree(edges);
-    pfree(edges_of_points);
-    pfree(points);
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (edges_of_points) pfree(edges_of_points);
+    if (points) pfree(points);
+    if (start_pidsArr) pfree(start_pidsArr);
     pgr_SPI_finish();
-
-    if (errcode) {
-        pgr_send_error(errcode);
-    }
 }
 
 
 
-PG_FUNCTION_INFO_V1(many_withPointsDD);
 PGDLLEXPORT Datum
 many_withPointsDD(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t                  call_cntr;
-    uint32_t                  max_calls;
     TupleDesc               tuple_desc;
 
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
+    /**********************************************************************/
     General_path_element_t  *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
+    /**********************************************************************/
 
 
     if (SRF_IS_FIRSTCALL()) {
@@ -163,8 +156,7 @@ many_withPointsDD(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // CREATE OR REPLACE FUNCTION pgr_withPointsDD(
         // edges_sql TEXT,
         // points_sql TEXT,
@@ -176,31 +168,30 @@ many_withPointsDD(PG_FUNCTION_ARGS) {
         // details BOOLEAN -- DEFAULT false,
         // equicost BOOLEAN -- DEFAULT false,
 
-        int64_t *sourcesArr;
-        size_t num;
-
-        sourcesArr = (int64_t*) pgr_get_bigIntArray(&num, PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("sourcesArr size %ld ", num);
 
         PGR_DBG("Calling driving_many_to_dist_driver");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),  // edges_sql
-                pgr_text2char(PG_GETARG_TEXT_P(1)),  // points_sql
-                sourcesArr, num,                     // start_pids array
-                PG_GETARG_FLOAT8(3),                 // distance
-
-                PG_GETARG_BOOL(4),                   // directed
-                pgr_text2char(PG_GETARG_TEXT_P(5)),  // driving side
-                PG_GETARG_BOOL(6),                   // details
-                PG_GETARG_BOOL(7),                   // equicost
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(1)),
+                PG_GETARG_ARRAYTYPE_P(2),
+                PG_GETARG_FLOAT8(3),
+
+                PG_GETARG_BOOL(4),
+                text_to_cstring(PG_GETARG_TEXT_P(5)),
+                PG_GETARG_BOOL(6),
+                PG_GETARG_BOOL(7),
                 &result_tuples, &result_count);
 
-        free(sourcesArr);
+        /**********************************************************************/
 
-        /* total number of tuples to be returned */
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -211,50 +202,44 @@ many_withPointsDD(PG_FUNCTION_ARGS) {
         MemoryContextSwitchTo(oldcontext);
     }
 
-    /* stuff done on every call of the function */
     funcctx = SRF_PERCALL_SETUP();
 
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    /* do when there is more left to send */
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum *values;
         bool* nulls;
 
-        values = palloc(6 * sizeof(Datum));
-        nulls = palloc(6 * sizeof(bool));
-        // id, start_v, node, edge, cost, tot_cost
-        nulls[0] = false;
-        nulls[1] = false;
-        nulls[2] = false;
-        nulls[3] = false;
-        nulls[4] = false;
-        nulls[5] = false;
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[4] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        /**********************************************************************/
+        size_t numb = 6;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
-        tuple = heap_form_tuple(tuple_desc, values, nulls);
+        size_t i;
+        for (i = 0; i < numb; ++i) {
+            nulls[i] = false;
+        }
+
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
 
-        /* make the tuple into a datum */
+        /**********************************************************************/
+
+        tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
 
-        /* clean up (this is not really necessary) */
         pfree(values);
         pfree(nulls);
 
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        /* do when there is no more left */
-        if (result_tuples) free(result_tuples);
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/driving_distance/src/withPoints_dd.c b/src/driving_distance/src/withPoints_dd.c
deleted file mode 100644
index f351922..0000000
--- a/src/driving_distance/src/withPoints_dd.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: withPoints_dd.c
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer: 
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail: 
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-
-#include "fmgr.h"
-#include "./../../common/src/pgr_types.h"
-#include "./../../common/src/time_msg.h"
-#include "./../../common/src/postgres_connection.h"
-#include "./../../common/src/edges_input.h"
-#include "./../../common/src/points_input.h"
-#include "./../../withPoints/src/get_new_queries.h"
-#include "./withPoints_dd_driver.h"
-// #define DEBUG
-#include "./../../common/src/debug_macro.h"
-
-PGDLLEXPORT Datum withPoints_dd(PG_FUNCTION_ARGS);
-
-
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
-static
-void
-process(
-        char* edges_sql,
-        char* points_sql,
-        int64_t start_pid,
-        double distance,
-
-        bool directed,
-        char *driving_side,
-        bool details,
-
-        General_path_element_t **result_tuples,
-        size_t *result_count) {
-
-    driving_side[0] = (char) tolower(driving_side[0]);
-    PGR_DBG("driving side:%c",driving_side[0]);
-    if (! ((driving_side[0] == 'r')
-                || (driving_side[0] == 'l'))) {
-        driving_side[0] = 'b'; 
-    }
-
-    pgr_SPI_connect();
-
-    Point_on_edge_t *points = NULL;
-    size_t total_points = 0;
-    pgr_get_points(points_sql, &points, &total_points);
-
-    char *edges_of_points_query = NULL;
-    char *edges_no_points_query = NULL;
-    get_new_queries(
-            edges_sql, points_sql,
-            &edges_of_points_query,
-            &edges_no_points_query);
-
-
-    pgr_edge_t *edges_of_points = NULL;
-    size_t total_edges_of_points = 0;
-    pgr_get_edges(edges_of_points_query, &edges_of_points, &total_edges_of_points);
-
-    pgr_edge_t *edges = NULL;
-    size_t total_edges = 0;
-    pgr_get_edges(edges_no_points_query, &edges, &total_edges);
-
-    PGR_DBG("freeing allocated memory not used anymore");
-    free(edges_of_points_query);
-    free(edges_no_points_query);
-
-    if ((total_edges + total_edges_of_points) == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
-        pgr_SPI_finish();
-        return;
-    }
-
-    PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    clock_t start_t = clock();
-    int errcode = do_pgr_withPointsDD(
-            edges,              total_edges,
-            points,             total_points,
-            edges_of_points,    total_edges_of_points,
-            start_pid,
-            distance,
-
-            driving_side[0],
-            details,
-            directed,
-
-            result_tuples,
-            result_count,
-            &err_msg);
-    time_msg(" processing withPointsDD one start", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    if (!err_msg) free(err_msg);
-
-    pfree(edges);
-    pfree(edges_of_points);
-    pfree(points);
-
-    pgr_SPI_finish();
-
-    if (errcode) {
-        pgr_send_error(errcode);
-    }
-
-}
-
-/*                                                                             */
-/*******************************************************************************/
-
-
-
-PG_FUNCTION_INFO_V1(withPoints_dd);
-PGDLLEXPORT Datum
-withPoints_dd(PG_FUNCTION_ARGS) {
-    FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
-    TupleDesc            tuple_desc;
-
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
-    General_path_element_t  *result_tuples = 0;
-    size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
-
-    if (SRF_IS_FIRSTCALL()) {
-        MemoryContext   oldcontext;
-        funcctx = SRF_FIRSTCALL_INIT();
-        oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
-
-
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
-        // CREATE OR REPLACE FUNCTION pgr_withPoint(
-        // edges_sql TEXT,
-        // points_sql TEXT,
-        // start_pid BIGINT,
-        // distance FLOAT,
-        //
-        // directed BOOLEAN -- DEFAULT true,
-        // driving_side CHAR -- DEFAULT 'b',
-        // details BOOLEAN -- DEFAULT false,
-
-        PGR_DBG("Calling process");
-        process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                pgr_text2char(PG_GETARG_TEXT_P(1)),
-                PG_GETARG_INT64(2),
-                PG_GETARG_FLOAT8(3),
-
-                PG_GETARG_BOOL(4),
-                pgr_text2char(PG_GETARG_TEXT_P(5)),
-                PG_GETARG_BOOL(6),
-                &result_tuples,
-                &result_count);
-
-        /*                                                                             */
-        /*******************************************************************************/
-
-        funcctx->max_calls = (uint32_t) result_count;
-        funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
-            ereport(ERROR,
-                    (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                     errmsg("function returning record called in context "
-                         "that cannot accept type record")));
-
-        funcctx->tuple_desc = tuple_desc;
-        MemoryContextSwitchTo(oldcontext);
-    }
-
-    funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
-    tuple_desc = funcctx->tuple_desc;
-    result_tuples = (General_path_element_t*) funcctx->user_fctx;
-
-    if (call_cntr < max_calls) {
-        HeapTuple    tuple;
-        Datum        result;
-        Datum        *values;
-        bool*        nulls;
-
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
-        // OUT seq BIGINT,
-        // OUT node BIGINT,
-        // OUT edge BIGINT,
-        // OUT cost FLOAT,
-        // OUT agg_cost FLOAT)
-
-
-        values = palloc(5 * sizeof(Datum));
-        nulls = palloc(5 * sizeof(bool));
-
-        size_t i;
-        for(i = 0; i < 6; ++i) {
-            nulls[i] = false;
-        }
-
-
-        // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[3] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[4] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*******************************************************************************/
-
-        tuple = heap_form_tuple(tuple_desc, values, nulls);
-        result = HeapTupleGetDatum(tuple);
-        SRF_RETURN_NEXT(funcctx, result);
-    } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
-        SRF_RETURN_DONE(funcctx);
-    }
-}
-
diff --git a/src/driving_distance/src/withPoints_dd_driver.cpp b/src/driving_distance/src/withPoints_dd_driver.cpp
index 69eb709..05cd363 100644
--- a/src/driving_distance/src/withPoints_dd_driver.cpp
+++ b/src/driving_distance/src/withPoints_dd_driver.cpp
@@ -28,30 +28,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 ********************************************************************PGR-GNU*/
 
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#endif
+#include "./withPoints_dd_driver.h"
 
 #include <sstream>
 #include <deque>
 #include <vector>
 #include <algorithm>
-#include <set>
 
 #include "./../../dijkstra/src/pgr_dijkstra.hpp"
 #include "./../../withPoints/src/pgr_withPoints.hpp"
-#include "./withPoints_dd_driver.h"
 
 
-#include "./../../common/src/pgr_types.h"
 #include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_types.h"
 
 
-/*******************************************************************************/
+/**********************************************************************/
 // CREATE OR REPLACE FUNCTION pgr_withPointsDD(
 // edges_sql TEXT,
 // points_sql TEXT,
@@ -64,13 +56,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 // equicost BOOLEAN -- DEFAULT false,
 
 
-int
+void
 do_pgr_many_withPointsDD(
         pgr_edge_t      *edges,             size_t total_edges,
         Point_on_edge_t *points_p,          size_t total_points,
         pgr_edge_t      *edges_of_points,   size_t total_edges_of_points,
 
-        int64_t  *start_pids_arr,    size_t s_len,
+        int64_t  *start_pidsArr,    size_t s_len,
         double distance,
 
         bool directed,
@@ -79,30 +71,49 @@ do_pgr_many_withPointsDD(
         bool equiCost,
 
         General_path_element_t **return_tuples, size_t *return_count,
-        char ** err_msg) {
+        char** log_msg,
+        char** notice_msg,
+        char** err_msg) {
     std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
     try {
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert((*return_count) == 0);
+        pgassert(edges);
+        pgassert(points_p);
+        pgassert(edges_of_points);
+        pgassert(start_pidsArr);
+
         /*
-         * This is the original state
+         * storing on C++ containers
          */
-        if (*err_msg) free(err_msg);
-        if (*return_tuples) free(return_tuples);
-        (*return_count) = 0;
+        std::vector<int64_t> start_vids(
+                start_pidsArr, start_pidsArr + s_len);
 
-        std::vector< Point_on_edge_t >
+        std::vector<Point_on_edge_t>
             points(points_p, points_p + total_points);
 
+        std::vector<pgr_edge_t> edges_to_modify(
+                edges_of_points, edges_of_points + total_edges_of_points);
+
+        log << "start_vids :";
+        for (const auto v : start_vids) log << v << ", ";
         /*
          * checking here is easier than on the C code
          */
         int errcode = check_points(points, log);
         if (errcode) {
-            return errcode;
+            *log_msg = strdup(log.str().c_str());
+            err << "Unexpected point(s) with same pid"
+                << " but different edge/fraction/side combination found.";
+            *err_msg = pgr_msg(err.str().c_str());
+            return;
         }
 
-        std::vector< pgr_edge_t >
-            edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
-
         std::vector< pgr_edge_t > new_edges;
         create_new_edges(
                 points,
@@ -111,36 +122,22 @@ do_pgr_many_withPointsDD(
                 new_edges,
                 log);
 
-        std::set< int64_t > s_start_vids(start_pids_arr, start_pids_arr + s_len);
-        std::vector< int64_t > start_vids(s_start_vids.begin(), s_start_vids.end());
-#if 0
-        std::set< int64_t > start_vids;
-
-        for (const auto start_pid : start_pids) {
-            for (const auto point : points) {
-                if (point.pid == start_pid) {
-                    start_vids.insert(point.vertex_id);
-                    break;
-                }
-            }
-        }
-#endif
-
-
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
         std::deque< Path >paths;
 
         if (directed) {
             pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
-            pgr_drivingDistance(digraph, paths, start_vids, distance, equiCost);
+            digraph.insert_edges(edges, total_edges);
+            digraph.insert_edges(new_edges);
+            paths = pgr_drivingDistance(
+                    digraph, start_vids, distance, equiCost);
         } else {
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
-            pgr_drivingDistance(undigraph, paths, start_vids, distance, equiCost);
+            undigraph.insert_edges(edges, total_edges);
+            undigraph.insert_edges(new_edges);
+            paths = pgr_drivingDistance(
+                    undigraph, start_vids, distance, equiCost);
         }
 
         for (auto &path : paths) {
@@ -163,157 +160,36 @@ do_pgr_many_withPointsDD(
 
 
         if (count == 0) {
-            *err_msg = strdup("NOTICE: No return values was found");
-            return 0;
+            *notice_msg = pgr_msg("No return values was found");
+            return;
         }
         *return_tuples = pgr_alloc(count, (*return_tuples));
         *return_count = collapse_paths(return_tuples, paths);
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-        return 0;
-    } catch ( ... ) {
-        *err_msg = strdup("Caught unknown exception!");
-        return 1000;
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
 
 
-// CREATE OR REPLACE FUNCTION pgr_withPointsDD(
-// edges_sql TEXT,
-// points_sql TEXT,
-// start_pid BIGINT,
-// end_pid BIGINT,
-//
-// driving_side CHAR -- DEFAULT 'b',
-// details BOOLEAN -- DEFAULT false,
-// directed BOOLEAN -- DEFAULT true,
-// equicost BOOLEAN -- DEFAULT false,
-
-int
-do_pgr_withPointsDD(
-        pgr_edge_t  *edges, size_t total_edges,
-        Point_on_edge_t  *points_p, size_t total_points,
-        pgr_edge_t  *edges_of_points, size_t total_edges_of_points,
-
-        int64_t start_vid,
-        double      distance,
-
-        char driving_side,
-        bool details,
-        bool directed,
-
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** err_msg) {
-    std::ostringstream log;
-    try {
-        /*
-         * This is the original state
-         */
-        if (*err_msg) free(err_msg);
-        if (*return_tuples) free(return_tuples);
-        (*return_count) = 0;
-
-        std::vector< Point_on_edge_t >
-            points(points_p, points_p + total_points);
-
-        /*
-         * checking here is easier than on the C code
-         */
-        int errcode = check_points(points, log);
-        if (errcode) {
-            return errcode;
-        }
-
-
-        std::vector< pgr_edge_t >
-            edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
-
-        std::vector< pgr_edge_t > new_edges;
-        create_new_edges(
-                points,
-                edges_to_modify,
-                driving_side,
-                new_edges,
-                log);
-
-#if 0
-        int64_t start_vid = 0;
-        for (const auto point : points) {
-            if (point.pid == start_pid) {
-                start_vid = point.vertex_id;
-            }
-        }
-#endif
-
-        graphType gType = directed? DIRECTED: UNDIRECTED;
-
-        Path path;
-
-        if (directed) {
-            log << "Working with directed Graph\n";
-            pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
-            pgr_drivingDistance(digraph, path, start_vid, distance);
-        } else {
-            log << "Working with undirected Graph\n";
-            pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
-            pgr_drivingDistance(undigraph, path, start_vid, distance);
-        }
-
-
-#if 0
-        path.print_path(log);
-        adjust_pids(points, path);
-        path.print_path(log);
-#endif
-
-        if (!details) {
-            eliminate_details_dd(path);
-        }
-        std::sort(path.begin(), path.end(),
-                [](const Path_t &l, const  Path_t &r)
-                {return l.node < r.node;});
-        std::stable_sort(path.begin(), path.end(),
-                [](const Path_t &l, const  Path_t &r)
-                {return l.agg_cost < r.agg_cost;});
-
-
-        auto count(path.size());
-
-        if (count == 0) {
-            return 0;
-        }
-
-
-        *return_tuples = NULL;
-        *return_tuples = pgr_alloc(count, (*return_tuples));
-
-        size_t sequence = 0;
-        path.get_pg_dd_path(return_tuples, sequence);
-
-        if (count != sequence) {
-            return 2;
-        }
-        (*return_count) = sequence;
-
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-        return 0;
-    } catch ( ... ) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-    }
-    return 1000;
-}
diff --git a/src/driving_distance/src/withPoints_dd_driver.h b/src/driving_distance/src/withPoints_dd_driver.h
index 322a838..4738109 100644
--- a/src/driving_distance/src/withPoints_dd_driver.h
+++ b/src/driving_distance/src/withPoints_dd_driver.h
@@ -26,6 +26,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_DRIVING_DISTANCE_SRC_WITHPOINTS_DD_DRIVER_H_
+#define SRC_DRIVING_DISTANCE_SRC_WITHPOINTS_DD_DRIVER_H_
 #pragma once
 
 #include "./../../common/src/pgr_types.h"
@@ -35,7 +37,7 @@ extern "C" {
 #endif
 
 
-    int do_pgr_many_withPointsDD(
+    void do_pgr_many_withPointsDD(
             pgr_edge_t      *edges,             size_t total_edges,
             Point_on_edge_t *points_p,          size_t total_points,
             pgr_edge_t      *edges_of_points,   size_t total_edges_of_points,
@@ -49,32 +51,13 @@ extern "C" {
             bool equiCost,
 
             General_path_element_t **return_tuples, size_t *return_count,
+            char** log_msg,
+            char** notice_msg,
             char ** err_msg);
 
 
-    //  CREATE OR REPLACE FUNCTION pgr_withPointKsp(
-    //  edges_sql TEXT,
-    //  points_sql TEXT,
-    //  start_pid BIGINT,
-    //  end_pid BIGINT,
-    //  directed BOOLEAN DEFAULT true,
-    int do_pgr_withPointsDD(
-            pgr_edge_t  *edges,             size_t total_edges,
-            Point_on_edge_t  *points,       size_t total_points,
-            pgr_edge_t  *edges_of_points,   size_t total_edges_of_points,
-
-            int64_t start_pid,
-            double  distance,
-
-            char driving_side,
-            bool details,
-            bool directed,
-
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char ** err_msg);
-
 #ifdef __cplusplus
 }
 #endif
 
+#endif  // SRC_DRIVING_DISTANCE_SRC_WITHPOINTS_DD_DRIVER_H_
diff --git a/src/driving_distance/test/doc-pgr_drivingDistance.test.sql b/src/driving_distance/test/doc-pgr_drivingDistance.test.sql
index fd9f488..4d61eb3 100644
--- a/src/driving_distance/test/doc-pgr_drivingDistance.test.sql
+++ b/src/driving_distance/test/doc-pgr_drivingDistance.test.sql
@@ -25,8 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 --              PGR_drivingDistance  V3
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
-BEGIN;
-    SET client_min_messages TO NOTICE;
 
 \echo --q1
 SELECT * FROM pgr_drivingDistance(
@@ -116,4 +114,3 @@ SELECT * FROM pgr_drivingDistance(
 
 \echo --q5
 
-ROLLBACK;
diff --git a/src/driving_distance/test/doc-pgr_drivingdistance-v2.test.sql b/src/driving_distance/test/doc-pgr_drivingdistance-v2.test.sql
index 9294643..285c5e5 100644
--- a/src/driving_distance/test/doc-pgr_drivingdistance-v2.test.sql
+++ b/src/driving_distance/test/doc-pgr_drivingdistance-v2.test.sql
@@ -3,8 +3,9 @@
 --              PGR_drivingDistance
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
-BEGIN;
-    SET client_min_messages TO NOTICE;
+
+SET client_min_messages TO NOTICE;
+
 \echo --q1
 SELECT * FROM pgr_drivingDistance(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
@@ -16,4 +17,3 @@ SELECT * FROM pgr_drivingDistance(
     7, 1.5, true, true
 ) ;
 \echo --q2
-ROLLBACK;
diff --git a/src/driving_distance/test/drivingdistance-any-00.test.sql b/src/driving_distance/test/drivingdistance-any-00.test.sql
index cb6db0a..4d7e890 100644
--- a/src/driving_distance/test/drivingdistance-any-00.test.sql
+++ b/src/driving_distance/test/drivingdistance-any-00.test.sql
@@ -1,8 +1,6 @@
 -- each ring will increase by 4 because it is on a square grid
 -- to find the start node number
--- select *, st_distance(st_makepoint(25,25), the_geom) from vertices_tmp where st_dwithin(st_makepoint(25,25), the_geom, 1.0) order by st_distance(st_makepoint(25,25), the_geom) limit 1;
-BEGIN;
-    SET client_min_messages TO NOTICE;
+-- SELECT *, st_distance(st_makepoint(25,25), the_geom) from vertices_tmp where st_dwithin(st_makepoint(25,25), the_geom, 1.0) order by st_distance(st_makepoint(25,25), the_geom) limit 1;
 
     -- create 50x50 grid of overlapping lines horizontal and vertical
 
@@ -21,9 +19,9 @@ BEGIN;
         PERFORM  addgeometrycolumn('ddunnoded', 'the_geom', ST_SRID('POINT(0 0)'::geometry), 'LINESTRING', 2);
 
         INSERT into ddunnoded (the_geom)
-        select st_astext(st_makeline(st_makepoint(0,s1), st_makepoint(51,s1))) from (select generate_series(1,50) as s1) as foo
+        SELECT st_astext(st_makeline(st_makepoint(0,s1), st_makepoint(51,s1))) from (SELECT generate_series(1,50) as s1) as foo
         union all
-        select st_astext(st_makeline(st_makepoint(s1,0), st_makepoint(s1,51))) from (select generate_series(1,50) as s1) as foo;
+        SELECT st_astext(st_makeline(st_makepoint(s1,0), st_makepoint(s1,51))) from (SELECT generate_series(1,50) as s1) as foo;
 
         -- node the grid so we can use it
         PERFORM pgr_nodenetwork('ddunnoded',0.000001);
@@ -43,7 +41,7 @@ BEGIN;
         PERFORM addgeometrycolumn('ddnoded2', 'the_geom', ST_SRID('POINT(0 0)'::geometry), 'LINESTRING', 2);
 
         insert into ddnoded2 (id, cost, the_geom)
-        select a.id, 1.0::float8 as cost, a.the_geom
+        SELECT a.id, 1.0::float8 as cost, a.the_geom
         from ddunnoded_noded a order by id, sub_id;
 
         -- now create a topology
@@ -56,13 +54,12 @@ BEGIN;
     END $$;
 
     --this are equivalent
-    select seq, id1, id2, round(cost::numeric, 2) from pgr_drivingdistance('select id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10, false, false);
-    select seq, node, edge, round(cost::numeric, 2), round(agg_cost::numeric,2) from pgr_drivingdistance('select id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10, false);
+    SELECT seq, id1, id2, round(cost::numeric, 2) from pgr_drivingdistance('SELECT id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10, false, false);
+    SELECT seq, node, edge, round(cost::numeric, 2), round(agg_cost::numeric,2) from pgr_drivingdistance('SELECT id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10, false);
 
 
     --- this ones are equivalent
-    select seq, node, edge, round(cost::numeric, 2), round(agg_cost::numeric,2) from pgr_drivingdistance('select id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10, true);
-    select seq, node, edge, round(cost::numeric, 2), round(agg_cost::numeric,2) from pgr_drivingdistance('select id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10);
+    SELECT seq, node, edge, round(cost::numeric, 2), round(agg_cost::numeric,2) from pgr_drivingdistance('SELECT id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10, true);
+    SELECT seq, node, edge, round(cost::numeric, 2), round(agg_cost::numeric,2) from pgr_drivingdistance('SELECT id, source, target, 1.0::float8 as cost from ddnoded2', 1274, 10);
 
 
-    ROLLBACK;
diff --git a/src/driving_distance/test/issue729.result b/src/driving_distance/test/issue729.result
new file mode 100644
index 0000000..61e6d74
--- /dev/null
+++ b/src/driving_distance/test/issue729.result
@@ -0,0 +1,5 @@
+NOTICE:  column "node_count" of relation "edge_table" does not exist, skipping
+NOTICE:  column "another_column" of relation "edge_table" does not exist, skipping
+NOTICE:  table "network" does not exist, skipping
+NOTICE:  column "node_count" of relation "network" does not exist, skipping
+NOTICE:  column "another_column" of relation "network" does not exist, skipping
diff --git a/src/driving_distance/test/issue729.test.sql b/src/driving_distance/test/issue729.test.sql
new file mode 100644
index 0000000..79e2f7d
--- /dev/null
+++ b/src/driving_distance/test/issue729.test.sql
@@ -0,0 +1,61 @@
+ALTER TABLE edge_table
+DROP COLUMN IF EXISTS node_count,
+ADD COLUMN node_count INTEGER;
+
+UPDATE edge_table AS edge_table
+SET node_count=count.sum
+FROM
+        (SELECT
+        from_v,
+        sum(node) AS sum
+        FROM
+            pgr_drivingDistance(
+            'SELECT id, source, target, ST_Length(the_geom) AS cost FROM edge_table',
+            ARRAY(SELECT DISTINCT source FROM edge_table),
+            1,
+            false)
+    GROUP BY from_v) AS count
+    WHERE edge_table.source=count.from_v
+    ;
+
+ALTER TABLE edge_table
+DROP COLUMN IF EXISTS another_column,
+ADD COLUMN another_column INTEGER;
+
+
+DROP TABLE IF EXISTS network;
+CREATE TABLE network AS
+SELECT *
+from (
+    VALUES
+    (1::int, 1::int, 2::int, 100::int),
+    (2::int, 2::int, 3::int, 100::int),
+    (3::int, 3::int, 4::int, 100::int),
+    (4::int, 5::int, 6::int, 100::int)
+) as t (id, source,target,cost);
+
+ALTER TABLE network
+DROP COLUMN IF EXISTS node_count,
+ADD COLUMN node_count INTEGER;
+
+UPDATE network AS network
+SET node_count=count.sum
+FROM
+(SELECT
+    from_v,
+    sum(node) AS sum
+    FROM
+    pgr_drivingDistance(
+        'SELECT id, source, target, cost FROM network',
+        ARRAY(SELECT DISTINCT source FROM network),
+        1,
+        false)
+    GROUP BY from_v) AS count
+WHERE network.source=count.from_v
+;
+
+ALTER TABLE network
+DROP COLUMN IF EXISTS another_column,
+ADD COLUMN another_column INTEGER;
+
+
diff --git a/src/driving_distance/test/test.conf b/src/driving_distance/test/test.conf
index a633183..cd14af3 100644
--- a/src/driving_distance/test/test.conf
+++ b/src/driving_distance/test/test.conf
@@ -8,6 +8,7 @@
             drivingdistance-any-00
             doc-pgr_drivingDistance
             doc-pgr_drivingdistance-v2
+            issue729
             )],
         'documentation' => [qw(
             doc-pgr_drivingDistance
diff --git a/src/internalQueryTests/src/testXYedges.c b/src/internalQueryTests/src/testXYedges.c
index 9ba9154..57617c3 100644
--- a/src/internalQueryTests/src/testXYedges.c
+++ b/src/internalQueryTests/src/testXYedges.c
@@ -27,24 +27,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
-  Uncomment when needed
-*/
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 
 #include "./testXYedges_driver.h"
@@ -98,6 +85,7 @@ process(char* edges_sql,
     PGR_DBG("Returned error message = %s\n", err_msg);
 
     if (err_msg) {
+        pgr_SPI_finish();
         elog(ERROR, "%s", err_msg);
         free(err_msg);
     }
@@ -110,7 +98,7 @@ PGDLLEXPORT Datum
 testXYedges(PG_FUNCTION_ARGS) {
     bool  result_bool = false;
     process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
+            text_to_cstring(PG_GETARG_TEXT_P(0)),
             &result_bool);
 
     PG_RETURN_BOOL(result_bool);
diff --git a/src/internalQueryTests/src/testXYedges_driver.cpp b/src/internalQueryTests/src/testXYedges_driver.cpp
index 21527c4..c88241e 100644
--- a/src/internalQueryTests/src/testXYedges_driver.cpp
+++ b/src/internalQueryTests/src/testXYedges_driver.cpp
@@ -27,22 +27,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
+#include "./testXYedges_driver.h"
 
 #include <sstream>
 #include <iomanip>
 #include <vector>
-#include "./testXYedges_driver.h"
 
-
-#include "./../../common/src/pgr_types.h"
-#include "./../../dijkstra/src/pgr_dijkstra.hpp"
 #include "./../../common/src/pgr_base_graph.hpp"
+#include "./../../dijkstra/src/pgr_dijkstra.hpp"
+
 #include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/pgr_types.h"
 
 /************************************************************
   edges_sql TEXT
@@ -82,12 +77,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
         {
             log << "Testing Directed ,  insertion using C array\n";
@@ -96,12 +90,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
+            graph.insert_edges(data_edges, total_edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
         {
             log << "Testing Directed ,  creating with vertices, insertion using vector\n";
@@ -110,12 +103,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
         {
             log << "Testing Directed ,  creating with vertices, insertion using C array\n";
@@ -124,12 +116,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
+            graph.insert_edges(data_edges, total_edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
 
         {
@@ -139,12 +130,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
         {
             log << "Testing Directed ,  insertion using C array\n";
@@ -153,12 +143,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
+            graph.insert_edges(data_edges, total_edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
         {
             log << "Testing Undirected ,  insertion using C array\n";
@@ -167,12 +156,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
+            graph.insert_edges(data_edges, total_edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
         {
             log << "Testing Undirected ,  creating with vertices, insertion using vector\n";
@@ -181,12 +169,11 @@ do_pgr_testXYedges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
         }
 
         *err_msg = NULL;
diff --git a/src/internalQueryTests/src/test_c_edges.c b/src/internalQueryTests/src/test_c_edges.c
index 26f0f52..42db34c 100644
--- a/src/internalQueryTests/src/test_c_edges.c
+++ b/src/internalQueryTests/src/test_c_edges.c
@@ -27,19 +27,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
 
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 
 #include "./test_c_edges_driver.h"
@@ -85,7 +77,7 @@ process(char *edges_sql,
             &err_msg);
 
     pfree(edges);
-    elog(NOTICE, "Returned log message = %s\n", log_msg);
+    PGR_DBG("Returned log message = %s\n", log_msg);
     if (log_msg) {
         elog(DEBUG1, "%s", log_msg);
         free(log_msg);
@@ -93,6 +85,7 @@ process(char *edges_sql,
     PGR_DBG("Returned error message = %s\n", err_msg);
 
     if (err_msg) {
+        pgr_SPI_finish();
         elog(ERROR, "%s", err_msg);
         free(err_msg);
     }
@@ -105,7 +98,7 @@ PGDLLEXPORT Datum
 test_c_edges(PG_FUNCTION_ARGS) {
     bool  result_bool = false;
     process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
+            text_to_cstring(PG_GETARG_TEXT_P(0)),
             &result_bool);
 
     PG_RETURN_BOOL(result_bool);
diff --git a/src/internalQueryTests/src/test_c_edges_driver.cpp b/src/internalQueryTests/src/test_c_edges_driver.cpp
index 14566c1..617f919 100644
--- a/src/internalQueryTests/src/test_c_edges_driver.cpp
+++ b/src/internalQueryTests/src/test_c_edges_driver.cpp
@@ -27,27 +27,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./test_c_edges_driver.h"
 
 #include <sstream>
 #include <iomanip>
 #include <vector>
-#include "./test_c_edges_driver.h"
-
-#include "./../../common/src/pgr_types.h"
 
-#include "./../../dijkstra/src/pgr_dijkstra.hpp"
-#if 0
-#include "./../../common/src/pgr_base_graph.hpp"
-#endif
 #include "./../../contraction/src/pgr_contractionGraph.hpp"
-#include "./../../common/src/pgr_assert.h"
+#include "./../../dijkstra/src/pgr_dijkstra.hpp"
 
+#include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/pgr_types.h"
 
 /************************************************************
   edges_sql TEXT
@@ -64,9 +54,8 @@ do_pgr_test_c_edges(
         pgassert(!(*log_msg));
         pgassert(!(*err_msg));
 
-        std::vector< pgr_edge_t > edges(data_edges, data_edges + total_edges);
-        std::vector < pgrouting::contraction::Vertex > vertices(pgrouting::contraction::extract_vertices(edges));
-
+        std::vector<pgr_edge_t> edges(data_edges, data_edges + total_edges);
+        auto vertices(pgrouting::extract_vertices(edges));
 
         log << "Original: \n" <<
             std::setprecision(9);
@@ -78,8 +67,7 @@ do_pgr_test_c_edges(
                 << "\treverse_cost = " << edge.reverse_cost
                 << ")\n";
         }
-        // TODO(Rohith) make the graph work with pgr_dijkstra
-        #if 0
+
         {
             log << "Testing Directed ,  insertion using vector\n";
             pgrouting::CHDirectedGraph graph(DIRECTED);
@@ -87,12 +75,11 @@ do_pgr_test_c_edges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
 
         }
         
@@ -103,42 +90,11 @@ do_pgr_test_c_edges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
-            log << graph;
-
-            log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
-
-        }
-        {
-            log << "Testing Directed ,  creating with vertices, insertion using vector\n";
-            pgrouting::CHDirectedGraph graph(vertices, DIRECTED);
-            log << "  - Created graph:\n";
-            log << graph;
-
-            log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(data_edges, total_edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
-
-        }
-        {
-            log << "Testing Directed ,  creating with vertices, insertion using C array\n";
-            pgrouting::CHDirectedGraph graph(vertices, DIRECTED);
-            log << "  - Created graph:\n";
-            log << graph;
-
-            log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
-            log << graph;
-
-            log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
+            pgr_dijkstra(graph, 2, 3, true);
 
         }
 
@@ -149,29 +105,13 @@ do_pgr_test_c_edges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
+            graph.insert_edges(edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
-
+            pgr_dijkstra(graph, 2, 3, true);
         }
-        {
-            log << "Testing Undirected ,  insertion using C array\n";
-            pgrouting::CHUndirectedGraph graph(UNDIRECTED);
-            log << "  - Created graph:\n";
-            log << graph;
-
-            log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
-            log << graph;
-
-            log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
 
-        }
         {
             log << "Testing Undirected ,  insertion using C array\n";
             pgrouting::CHUndirectedGraph graph(UNDIRECTED);
@@ -179,187 +119,86 @@ do_pgr_test_c_edges(
             log << graph;
 
             log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(data_edges, total_edges);
+            graph.insert_edges(data_edges, total_edges);
             log << graph;
 
             log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
-
-        }
-        {
-            log << "Testing Undirected ,  creating with vertices, insertion using vector\n";
-            pgrouting::CHUndirectedGraph graph(vertices, UNDIRECTED);
-            log << "  - Created graph:\n";
-            log << graph;
-
-            log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
-            log << graph;
-
-            log << "  - Can do a dijKstra:\n";
-            Path path;
-            pgr_dijkstra(graph, path, 2, 3, true);
-
+            pgr_dijkstra(graph, 2, 3, true);
         }
 
         {
-            log << "Testing Identifiers, creating with vertices, insertion using vector\n";
-            log << "  - Created graph:\n";
-            pgrouting::CHUndirectedGraph graph(vertices, UNDIRECTED);
-            log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
-            log << "  - All vertices:\n";
+            log << "Testing Identifiers\n";
+            pgrouting::CHUndirectedGraph graph(UNDIRECTED);
+            graph.insert_edges(edges);
+
             Identifiers<int64_t> all_vertices, contracted_vertices, remaining_vertices;
+
             for (const auto vertex: vertices) {
                 all_vertices.insert(graph.get_V(vertex.id));
-                //log << vertex;
             }
-            log << "    " << all_vertices;
-            log << "\n";
-            log << "  - Contracted vertices:\n";
             /*
-             1, 7, 8, 13, 14, 16
-            */
+               Contracted vertices:
+               1, 7, 8, 13, 14, 16
+               */
             contracted_vertices.insert(graph.get_V(1));
             contracted_vertices.insert(graph.get_V(7));
             contracted_vertices.insert(graph.get_V(8));
             contracted_vertices.insert(graph.get_V(13));
             contracted_vertices.insert(graph.get_V(14));
             contracted_vertices.insert(graph.get_V(16));
-            log << "    " << contracted_vertices;
-            log << "\n";
-            log << "  - Remaining vertices:\n";
+
             remaining_vertices = all_vertices - contracted_vertices;
-            log << "    " << remaining_vertices;
-            log << "\n";
+
+            log << "  - All vertices: "
+                << all_vertices
+                << "\n   - Contracted vertices: "
+                << contracted_vertices
+                << "\n  - Remaining vertices: "
+                << remaining_vertices
+                << "\n";
         }
 
         {
-            log << "Testing Vertex class, creating graph with vertices, insertion using vector\n";
-            log << "  - Created graph:\n";
-            pgrouting::CHDirectedGraph graph(vertices, UNDIRECTED);
-            log << "  - Inserting Edges:\n";
-            graph.graph_insert_data(edges);
-            int64_t vid1 = graph.get_V(1);
-            int64_t vid2 = graph.get_V(2);
-            int64_t vid5 = graph.get_V(5);
-            int64_t vid4 = graph.get_V(4);
-            int64_t vid7 = graph.get_V(7);
-            int64_t vid8 = graph.get_V(8);
-            int64_t vid10 = graph.get_V(10);
-            int64_t vid12 = graph.get_V(12);
-            int64_t vid13 = graph.get_V(13);
-            int64_t vid14 = graph.get_V(14);
-            int64_t vid15 = graph.get_V(15);
-            int64_t vid16 = graph.get_V(16);
-            int64_t vid17 = graph.get_V(17);
-
-            log << "  - id ----- V:\n";
-            log << "  " << 1 << " ----- " << vid1 << "\n";
-            log << "  " << 2 << " ----- " << vid2 << "\n";
-            log << "  " << 4 << " ----- " << vid4 << "\n";
-            log << "  " << 5 << " ----- " << vid5 << "\n";
-            log << "  " << 7 << " ----- " << vid7 << "\n";
-            log << "  " << 8 << " ----- " << vid8 << "\n";
-            log << "  " << 10 << " ----- " << vid10 << "\n";
-            log << "  " << 12 << " ----- " << vid12 << "\n";
-            log << "  " << 13 << " ----- " << vid13 << "\n";
-            log << "  " << 14 << " ----- " << vid14 << "\n";
-            log << "  " << 15 << " ----- " << vid15 << "\n";
-            log << "  " << 16 << " ----- " << vid16 << "\n";
-            log << "  " << 17 << " ----- " << vid17 << "\n";
-            pgrouting::contraction::Vertex v1 = graph[vid1];
-            pgrouting::contraction::Vertex v2 = graph[vid2];
-            pgrouting::contraction::Vertex v4 = graph[vid4];
-            pgrouting::contraction::Vertex v5 = graph[vid5];
-            pgrouting::contraction::Vertex v7 = graph[vid7];
-            pgrouting::contraction::Vertex v8 = graph[vid8];
-            pgrouting::contraction::Vertex v10 = graph[vid10];
-            pgrouting::contraction::Vertex v12 = graph[vid12];
-            pgrouting::contraction::Vertex v13 = graph[vid13];
-            pgrouting::contraction::Vertex v14 = graph[vid14];
-            pgrouting::contraction::Vertex v15 = graph[vid15];
-            pgrouting::contraction::Vertex v16 = graph[vid16];
-            pgrouting::contraction::Vertex v17 = graph[vid17];
+            log << "Testing CH_vertex class\n";
+
+            pgrouting::CHUndirectedGraph graph(DIRECTED);
+            graph.insert_edges(edges);
+
+            log << "id ----- V\n";
+            for (int64_t i = 1; i < 18; ++i) {
+            log << "  " << i << " ----- " <<  graph.get_V(i) << "\n";
+            }
+            auto vid1 = graph.get_V(1);
+            auto vid2 = graph.get_V(2);
+
+            auto v1 = graph[vid1];
+            auto v2 = graph[vid2];
+
 
             log << "  - Dead end contraction:\n";
             // vertex 1 is contracted to vertex 2
             v2.add_contracted_vertex(v1, vid1);
             log << "Vertex 1 is contracted to Vertex 2:\n";
-            log << v1;
-            log << v2;
-            // vertex 7 is contracted to vertex 8
-            v8.add_contracted_vertex(v7, vid7);
-            log << "Vertex 7 is contracted to Vertex 8:\n";
-            log << v7;
-            log << v8;
-            // vertex 8 is contracted to vertex 5
-            v5.add_contracted_vertex(v8, vid8);
-            log << "Vertex 8 is contracted to Vertex 5:\n";
-            log << v8;
-            log << v5;
-            // vertex 13 is contracted to vertex 10
-            v10.add_contracted_vertex(v13, vid13);
-            log << "Vertex 13 is contracted to Vertex 10:\n";
-            log << v13;
-            log << v10;
-            // vertex 14 is contracted to vertex 15
-            v15.add_contracted_vertex(v14, vid14);
-            log << "Vertex 14 is contracted to Vertex 15:\n";
-            log << v14;
-            log << v15;
-            // vertex 16 is contracted to vertex 17
-            v17.add_contracted_vertex(v16, vid16);
-            log << "Vertex 16 is contracted to Vertex 17:\n";
-            log << v16;
-            log << v17;
-
+            log << vid1 << v1 << "\n";
+            log << vid2 << v2 << "\n";
 
             log << "  - Linear contraction:\n";
-            pgrouting::contraction::Edge e1;
-            pgrouting::contraction::Edge e2;
-            pgrouting::contraction::Edge e3;
-            pgrouting::contraction::Edge e4;
+            pgrouting::CH_edge e1;
+            pgrouting::CH_edge e2;
+            pgrouting::CH_edge e3;
+            pgrouting::CH_edge e4;
+
             // vertex 2 is contracted to edge -1
+            log << "Vertex 1 is contracted to edge -1:\n";
             e1.id = -1;
+            e1.cost = 0;
             e1.source = 3;
             e1.target = 5;
-            log << "Vertex 1 is contracted to edge -1:\n";
             e1.add_contracted_vertex(v2, vid2);
-            log << e1;
-            // vertex 4 is contracted to edge -2
-            e2.id = -2;
-            e2.source = 3;
-            e2.target = 9;
-            log << "Vertex 4 is contracted to edge -2:\n";
-            e2.add_contracted_vertex(v4, vid4);
-            log << e2;
-            // vertex 10 is contracted to edge -3
-            e3.id = -3;
-            e3.source = 5;
-            e3.target = 11;
-            log << "Vertex 10 is contracted to edge -3:\n";
-            e3.add_contracted_vertex(v10, vid10);
-            log << e3;
-            // vertex 12 is contracted to edge -4
-            e4.id = -4;
-            e4.source = 9;
-            e4.target = 11;
-            log << "Vertex 12 is contracted to edge -4:\n";
-            e4.add_contracted_vertex(v12, vid12);
-            log << e4;
-            #if 0
-            
-            Pgr_contract<pgrouting::CDirectedGraph>  contractor;
-            contractor.getDeadEndSet(graph);
-            log << "  - Dead end vertices:\n";
-            contractor.print_dead_end_vertices(log);
-
-            #endif
+            log << vid2 << v2 << "\n";
+            log << e1 << "\n";
+            log << vid2 << v2 << "\n";
         }
-        #endif
-
 
         *err_msg = NULL;
         *log_msg = strdup(log.str().c_str());
diff --git a/src/internalQueryTests/src/test_matrixRows.c b/src/internalQueryTests/src/test_matrixRows.c
index b0efbb8..97e172f 100644
--- a/src/internalQueryTests/src/test_matrixRows.c
+++ b/src/internalQueryTests/src/test_matrixRows.c
@@ -27,24 +27,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
-  Uncomment when needed
-*/
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/matrixRows_input.h"
 
 #include "./test_matrixRows_driver.h"
@@ -99,6 +86,7 @@ process(char* matrix_rows_sql,
     PGR_DBG("Returned error message = %s\n", err_msg);
 
     if (err_msg) {
+        pgr_SPI_finish();
         elog(ERROR, "%s", err_msg);
         free(err_msg);
     }
@@ -113,7 +101,7 @@ test_matrixRows(PG_FUNCTION_ARGS) {
     bool  result_bool = false;
 
     process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
+            text_to_cstring(PG_GETARG_TEXT_P(0)),
             &result_bool);
 
     PG_RETURN_BOOL(result_bool);
diff --git a/src/internalQueryTests/src/test_matrixRows_driver.cpp b/src/internalQueryTests/src/test_matrixRows_driver.cpp
index 4177913..b0b1bc4 100644
--- a/src/internalQueryTests/src/test_matrixRows_driver.cpp
+++ b/src/internalQueryTests/src/test_matrixRows_driver.cpp
@@ -27,17 +27,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
+#include "./test_matrixRows_driver.h"
 
 #include <sstream>
 #include <iomanip>
 #include <vector>
 #include <cstring>
-#include "./test_matrixRows_driver.h"
+
 #include "./../../common/src/pgr_assert.h"
 
 bool do_pgr_test_matrixRows(
diff --git a/src/internalQueryTests/test/test.conf b/src/internalQueryTests/test/test.conf
index 34e9094..416e03e 100644
--- a/src/internalQueryTests/test/test.conf
+++ b/src/internalQueryTests/test/test.conf
@@ -6,19 +6,15 @@
         'data' => [ ],
         'debugtests' => [qw(
             XYedge
+            testCHedges
             )],
         'tests' => [qw(
             )],
         'documentation' => [qw(
             )],
         'nottested' => [qw(
-            testCHedges
             )]
     },
-
-#    'vpg-vpgis' => {}, # for version specific tests
-#    '8-1' => {},       # for pg 8.x and postgis 1.x
-#    '9.2-2.1' => {},   # for pg 9.2 and postgis 2.1
 );
 
 1;
diff --git a/src/internalQueryTests/test/testCHedges.result b/src/internalQueryTests/test/testCHedges.result
index 0e11ecd..718f4d2 100644
--- a/src/internalQueryTests/test/testCHedges.result
+++ b/src/internalQueryTests/test/testCHedges.result
@@ -1,682 +1 @@
-NOTICE:  Returned log message = Original: 
-id = 1	source = 1	target = 2	cost = 1	reverse_cost = 1)
-id = 2	source = 2	target = 3	cost = -1	reverse_cost = 1)
-id = 3	source = 3	target = 4	cost = -1	reverse_cost = 1)
-id = 4	source = 2	target = 5	cost = 1	reverse_cost = 1)
-id = 5	source = 3	target = 6	cost = 1	reverse_cost = -1)
-id = 6	source = 7	target = 8	cost = 1	reverse_cost = 1)
-id = 7	source = 8	target = 5	cost = 1	reverse_cost = 1)
-id = 8	source = 5	target = 6	cost = 1	reverse_cost = 1)
-id = 9	source = 6	target = 9	cost = 1	reverse_cost = 1)
-id = 10	source = 5	target = 10	cost = 1	reverse_cost = 1)
-id = 11	source = 6	target = 11	cost = 1	reverse_cost = -1)
-id = 12	source = 10	target = 11	cost = 1	reverse_cost = -1)
-id = 13	source = 11	target = 12	cost = 1	reverse_cost = -1)
-id = 14	source = 10	target = 13	cost = 1	reverse_cost = 1)
-id = 15	source = 9	target = 12	cost = 1	reverse_cost = 1)
-id = 16	source = 4	target = 9	cost = 1	reverse_cost = 1)
-id = 17	source = 14	target = 15	cost = 1	reverse_cost = 1)
-id = 18	source = 16	target = 17	cost = 1	reverse_cost = 1)
-Testing Directed ,  insertion using vector
-  - Created graph:
-  - Inserting Edges:
-  - Can do a dijKstra:
-Testing Directed ,  insertion using C array
-  - Created graph:
-  - Inserting Edges:
-  - Can do a dijKstra:
-Testing Directed ,  creating with vertices, insertion using vector
-  - Created graph:
-0:  out_edges_of({
-    id: 1,
-    contracted vertices: {}
-}
-):
-1:  out_edges_of({
-    id: 2,
-    contracted vertices: {}
-}
-):
-2:  out_edges_of({
-    id: 3,
-    contracted vertices: {}
-}
-):
-3:  out_edges_of({
-    id: 4,
-    contracted vertices: {}
-}
-):
-4:  out_edges_of({
-    id: 5,
-    contracted vertices: {}
-}
-):
-5:  out_edges_of({
-    id: 6,
-    contracted vertices: {}
-}
-):
-6:  out_edges_of({
-    id: 7,
-    contracted vertices: {}
-}
-):
-7:  out_edges_of({
-    id: 8,
-    contracted vertices: {}
-}
-):
-8:  out_edges_of({
-    id: 9,
-    contracted vertices: {}
-}
-):
-9:  out_edges_of({
-    id: 10,
-    contracted vertices: {}
-}
-):
-10:  out_edges_of({
-    id: 11,
-    contracted vertices: {}
-}
-):
-11:  out_edges_of({
-    id: 12,
-    contracted vertices: {}
-}
-):
-12:  out_edges_of({
-    id: 13,
-    contracted vertices: {}
-}
-):
-13:  out_edges_of({
-    id: 14,
-    contracted vertices: {}
-}
-):
-14:  out_edges_of({
-    id: 15,
-    contracted vertices: {}
-}
-):
-15:  out_edges_of({
-    id: 16,
-    contracted vertices: {}
-}
-):
-16:  out_edges_of({
-    id: 17,
-    contracted vertices: {}
-}
-):
-  - Inserting Edges:
-0:  out_edges_of({
-    id: 1,
-    contracted vertices: {}
-}
-): 1=(1, 2) = 1 at t
-1:  out_edges_of({
-    id: 2,
-    contracted vertices: {}
-}
-): 1=(2, 1) = 1 at t 4=(2, 5) = 1 at t
-2:  out_edges_of({
-    id: 3,
-    contracted vertices: {}
-}
-): 2=(3, 2) = 1 at t 5=(3, 6) = 1 at t
-3:  out_edges_of({
-    id: 4,
-    contracted vertices: {}
-}
-): 3=(4, 3) = 1 at t 16=(4, 9) = 1 at t
-4:  out_edges_of({
-    id: 5,
-    contracted vertices: {}
-}
-): 4=(5, 2) = 1 at t 7=(5, 8) = 1 at t 8=(5, 6) = 1 at t 10=(5, 10) = 1 at t
-5:  out_edges_of({
-    id: 6,
-    contracted vertices: {}
-}
-): 8=(6, 5) = 1 at t 9=(6, 9) = 1 at t 11=(6, 11) = 1 at t
-6:  out_edges_of({
-    id: 7,
-    contracted vertices: {}
-}
-): 6=(7, 8) = 1 at t
-7:  out_edges_of({
-    id: 8,
-    contracted vertices: {}
-}
-): 6=(8, 7) = 1 at t 7=(8, 5) = 1 at t
-8:  out_edges_of({
-    id: 9,
-    contracted vertices: {}
-}
-): 9=(9, 6) = 1 at t 15=(9, 12) = 1 at t 16=(9, 4) = 1 at t
-9:  out_edges_of({
-    id: 10,
-    contracted vertices: {}
-}
-): 10=(10, 5) = 1 at t 12=(10, 11) = 1 at t 14=(10, 13) = 1 at t
-10:  out_edges_of({
-    id: 11,
-    contracted vertices: {}
-}
-): 13=(11, 12) = 1 at t
-11:  out_edges_of({
-    id: 12,
-    contracted vertices: {}
-}
-): 15=(12, 9) = 1 at t
-12:  out_edges_of({
-    id: 13,
-    contracted vertices: {}
-}
-): 14=(13, 10) = 1 at t
-13:  out_edges_of({
-    id: 14,
-    contracted vertices: {}
-}
-): 17=(14, 15) = 1 at t
-14:  out_edges_of({
-    id: 15,
-    contracted vertices: {}
-}
-): 17=(15, 14) = 1 at t
-15:  out_edges_of({
-    id: 16,
-    contracted vertices: {}
-}
-): 18=(16, 17) = 1 at t
-16:  out_edges_of({
-    id: 17,
-    contracted vertices: {}
-}
-): 18=(17, 16) = 1 at t
-  - Can do a dijKstra:
-Testing Directed ,  creating with vertices, insertion using C array
-  - Created graph:
-0:  out_edges_of({
-    id: 1,
-    contracted vertices: {}
-}
-):
-1:  out_edges_of({
-    id: 2,
-    contracted vertices: {}
-}
-):
-2:  out_edges_of({
-    id: 3,
-    contracted vertices: {}
-}
-):
-3:  out_edges_of({
-    id: 4,
-    contracted vertices: {}
-}
-):
-4:  out_edges_of({
-    id: 5,
-    contracted vertices: {}
-}
-):
-5:  out_edges_of({
-    id: 6,
-    contracted vertices: {}
-}
-):
-6:  out_edges_of({
-    id: 7,
-    contracted vertices: {}
-}
-):
-7:  out_edges_of({
-    id: 8,
-    contracted vertices: {}
-}
-):
-8:  out_edges_of({
-    id: 9,
-    contracted vertices: {}
-}
-):
-9:  out_edges_of({
-    id: 10,
-    contracted vertices: {}
-}
-):
-10:  out_edges_of({
-    id: 11,
-    contracted vertices: {}
-}
-):
-11:  out_edges_of({
-    id: 12,
-    contracted vertices: {}
-}
-):
-12:  out_edges_of({
-    id: 13,
-    contracted vertices: {}
-}
-):
-13:  out_edges_of({
-    id: 14,
-    contracted vertices: {}
-}
-):
-14:  out_edges_of({
-    id: 15,
-    contracted vertices: {}
-}
-):
-15:  out_edges_of({
-    id: 16,
-    contracted vertices: {}
-}
-):
-16:  out_edges_of({
-    id: 17,
-    contracted vertices: {}
-}
-):
-  - Inserting Edges:
-0:  out_edges_of({
-    id: 1,
-    contracted vertices: {}
-}
-): 1=(1, 2) = 1 at t
-1:  out_edges_of({
-    id: 2,
-    contracted vertices: {}
-}
-): 1=(2, 1) = 1 at t 4=(2, 5) = 1 at t
-2:  out_edges_of({
-    id: 3,
-    contracted vertices: {}
-}
-): 2=(3, 2) = 1 at t 5=(3, 6) = 1 at t
-3:  out_edges_of({
-    id: 4,
-    contracted vertices: {}
-}
-): 3=(4, 3) = 1 at t 16=(4, 9) = 1 at t
-4:  out_edges_of({
-    id: 5,
-    contracted vertices: {}
-}
-): 4=(5, 2) = 1 at t 7=(5, 8) = 1 at t 8=(5, 6) = 1 at t 10=(5, 10) = 1 at t
-5:  out_edges_of({
-    id: 6,
-    contracted vertices: {}
-}
-): 8=(6, 5) = 1 at t 9=(6, 9) = 1 at t 11=(6, 11) = 1 at t
-6:  out_edges_of({
-    id: 7,
-    contracted vertices: {}
-}
-): 6=(7, 8) = 1 at t
-7:  out_edges_of({
-    id: 8,
-    contracted vertices: {}
-}
-): 6=(8, 7) = 1 at t 7=(8, 5) = 1 at t
-8:  out_edges_of({
-    id: 9,
-    contracted vertices: {}
-}
-): 9=(9, 6) = 1 at t 15=(9, 12) = 1 at t 16=(9, 4) = 1 at t
-9:  out_edges_of({
-    id: 10,
-    contracted vertices: {}
-}
-): 10=(10, 5) = 1 at t 12=(10, 11) = 1 at t 14=(10, 13) = 1 at t
-10:  out_edges_of({
-    id: 11,
-    contracted vertices: {}
-}
-): 13=(11, 12) = 1 at t
-11:  out_edges_of({
-    id: 12,
-    contracted vertices: {}
-}
-): 15=(12, 9) = 1 at t
-12:  out_edges_of({
-    id: 13,
-    contracted vertices: {}
-}
-): 14=(13, 10) = 1 at t
-13:  out_edges_of({
-    id: 14,
-    contracted vertices: {}
-}
-): 17=(14, 15) = 1 at t
-14:  out_edges_of({
-    id: 15,
-    contracted vertices: {}
-}
-): 17=(15, 14) = 1 at t
-15:  out_edges_of({
-    id: 16,
-    contracted vertices: {}
-}
-): 18=(16, 17) = 1 at t
-16:  out_edges_of({
-    id: 17,
-    contracted vertices: {}
-}
-): 18=(17, 16) = 1 at t
-  - Can do a dijKstra:
-Testing Undirected ,  insertion using vector
-  - Created graph:
-  - Inserting Edges:
-  - Can do a dijKstra:
-Testing Directed ,  insertion using C array
-  - Created graph:
-  - Inserting Edges:
-  - Can do a dijKstra:
-Testing Undirected ,  insertion using C array
-  - Created graph:
-  - Inserting Edges:
-  - Can do a dijKstra:
-Testing Undirected ,  creating with vertices, insertion using vector
-  - Created graph:
-0:  out_edges_of({
-    id: 1,
-    contracted vertices: {}
-}
-):
-1:  out_edges_of({
-    id: 2,
-    contracted vertices: {}
-}
-):
-2:  out_edges_of({
-    id: 3,
-    contracted vertices: {}
-}
-):
-3:  out_edges_of({
-    id: 4,
-    contracted vertices: {}
-}
-):
-4:  out_edges_of({
-    id: 5,
-    contracted vertices: {}
-}
-):
-5:  out_edges_of({
-    id: 6,
-    contracted vertices: {}
-}
-):
-6:  out_edges_of({
-    id: 7,
-    contracted vertices: {}
-}
-):
-7:  out_edges_of({
-    id: 8,
-    contracted vertices: {}
-}
-):
-8:  out_edges_of({
-    id: 9,
-    contracted vertices: {}
-}
-):
-9:  out_edges_of({
-    id: 10,
-    contracted vertices: {}
-}
-):
-10:  out_edges_of({
-    id: 11,
-    contracted vertices: {}
-}
-):
-11:  out_edges_of({
-    id: 12,
-    contracted vertices: {}
-}
-):
-12:  out_edges_of({
-    id: 13,
-    contracted vertices: {}
-}
-):
-13:  out_edges_of({
-    id: 14,
-    contracted vertices: {}
-}
-):
-14:  out_edges_of({
-    id: 15,
-    contracted vertices: {}
-}
-):
-15:  out_edges_of({
-    id: 16,
-    contracted vertices: {}
-}
-):
-16:  out_edges_of({
-    id: 17,
-    contracted vertices: {}
-}
-):
-  - Inserting Edges:
-0:  out_edges_of({
-    id: 1,
-    contracted vertices: {}
-}
-): 1=(1, 2) = 1 at t
-1:  out_edges_of({
-    id: 2,
-    contracted vertices: {}
-}
-): 1=(2, 1) = 1 at t 4=(2, 5) = 1 at t
-2:  out_edges_of({
-    id: 3,
-    contracted vertices: {}
-}
-): 2=(3, 2) = 1 at t 5=(3, 6) = 1 at t
-3:  out_edges_of({
-    id: 4,
-    contracted vertices: {}
-}
-): 3=(4, 3) = 1 at t 16=(4, 9) = 1 at t
-4:  out_edges_of({
-    id: 5,
-    contracted vertices: {}
-}
-): 4=(5, 2) = 1 at t 7=(5, 8) = 1 at t 8=(5, 6) = 1 at t 10=(5, 10) = 1 at t
-5:  out_edges_of({
-    id: 6,
-    contracted vertices: {}
-}
-): 8=(6, 5) = 1 at t 9=(6, 9) = 1 at t 11=(6, 11) = 1 at t
-6:  out_edges_of({
-    id: 7,
-    contracted vertices: {}
-}
-): 6=(7, 8) = 1 at t
-7:  out_edges_of({
-    id: 8,
-    contracted vertices: {}
-}
-): 6=(8, 7) = 1 at t 7=(8, 5) = 1 at t
-8:  out_edges_of({
-    id: 9,
-    contracted vertices: {}
-}
-): 9=(9, 6) = 1 at t 15=(9, 12) = 1 at t 16=(9, 4) = 1 at t
-9:  out_edges_of({
-    id: 10,
-    contracted vertices: {}
-}
-): 10=(10, 5) = 1 at t 12=(10, 11) = 1 at t 14=(10, 13) = 1 at t
-10:  out_edges_of({
-    id: 11,
-    contracted vertices: {}
-}
-): 13=(11, 12) = 1 at t
-11:  out_edges_of({
-    id: 12,
-    contracted vertices: {}
-}
-): 15=(12, 9) = 1 at t
-12:  out_edges_of({
-    id: 13,
-    contracted vertices: {}
-}
-): 14=(13, 10) = 1 at t
-13:  out_edges_of({
-    id: 14,
-    contracted vertices: {}
-}
-): 17=(14, 15) = 1 at t
-14:  out_edges_of({
-    id: 15,
-    contracted vertices: {}
-}
-): 17=(15, 14) = 1 at t
-15:  out_edges_of({
-    id: 16,
-    contracted vertices: {}
-}
-): 18=(16, 17) = 1 at t
-16:  out_edges_of({
-    id: 17,
-    contracted vertices: {}
-}
-): 18=(17, 16) = 1 at t
-  - Can do a dijKstra:
-Testing Identifiers, creating with vertices, insertion using vector
-  - Created graph:
-  - Inserting Edges:
-  - All vertices:
-    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, }
-  - Contracted vertices:
-    {0, 6, 7, 12, 13, 15, }
-  - Remaining vertices:
-    {1, 2, 3, 4, 5, 8, 9, 10, 11, 14, 16, }
-Testing Vertex class, creating graph with vertices, insertion using vector
-  - Created graph:
-  - Inserting Edges:
-  - id ----- V:
-  1 ----- 0
-  2 ----- 1
-  4 ----- 3
-  5 ----- 4
-  7 ----- 6
-  8 ----- 7
-  10 ----- 9
-  12 ----- 11
-  13 ----- 12
-  14 ----- 13
-  15 ----- 14
-  16 ----- 15
-  17 ----- 16
-  - Dead end contraction:
-Vertex 1 is contracted to Vertex 2:
-{
-    id: 1,
-    contracted vertices: {}
-}
-{
-    id: 2,
-    contracted vertices: {0, }
-}
-Vertex 7 is contracted to Vertex 8:
-{
-    id: 7,
-    contracted vertices: {}
-}
-{
-    id: 8,
-    contracted vertices: {6, }
-}
-Vertex 8 is contracted to Vertex 5:
-{
-    id: 8,
-    contracted vertices: {}
-}
-{
-    id: 5,
-    contracted vertices: {6, 7, }
-}
-Vertex 13 is contracted to Vertex 10:
-{
-    id: 13,
-    contracted vertices: {}
-}
-{
-    id: 10,
-    contracted vertices: {12, }
-}
-Vertex 14 is contracted to Vertex 15:
-{
-    id: 14,
-    contracted vertices: {}
-}
-{
-    id: 15,
-    contracted vertices: {13, }
-}
-Vertex 16 is contracted to Vertex 17:
-{
-    id: 16,
-    contracted vertices: {}
-}
-{
-    id: 17,
-    contracted vertices: {15, }
-}
-  - Linear contraction:
-Vertex 1 is contracted to edge -1:
-{
-    id: -1,
-    source: 3,
-    target: 5,
-    cost: 6.90898356e-310,
-    first: 64,
-    contracted vertices: {0, 1, }
-}
-Vertex 4 is contracted to edge -2:
-{
-    id: -2,
-    source: 3,
-    target: 9,
-    cost: 6.90898356e-310,
-    first: 96,
-    contracted vertices: {3, }
-}
-Vertex 10 is contracted to edge -3:
-{
-    id: -3,
-    source: 5,
-    target: 11,
-    cost: 6.90898356e-310,
-    first: 144,
-    contracted vertices: {9, 12, }
-}
-Vertex 12 is contracted to edge -4:
-{
-    id: -4,
-    source: 9,
-    target: 11,
-    cost: 6.95276435e-310,
-    first: 200,
-    contracted vertices: {11, }
-}
-
-
 t
diff --git a/src/internalQueryTests/test/testCHedges.test.sql b/src/internalQueryTests/test/testCHedges.test.sql
index 73a0584..ae50891 100644
--- a/src/internalQueryTests/test/testCHedges.test.sql
+++ b/src/internalQueryTests/test/testCHedges.test.sql
@@ -1,5 +1,3 @@
--- SET client_min_messages TO DEBUG;
-
 SELECT * FROM _pgr_test_c_edges(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table'
 );
diff --git a/src/kdijkstra/doc/pgr_kDijkstra.rst b/src/kdijkstra/doc/pgr_kDijkstra.rst
deleted file mode 100644
index fbec1f5..0000000
--- a/src/kdijkstra/doc/pgr_kDijkstra.rst
+++ /dev/null
@@ -1,128 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-
-.. _pgr_kdijkstra:
-
-pgr_kDijkstra - Deprecated Functions
-===============================================================================
-
-.. warning:: These functions are deprecated!!!
-
-    * It has been replaced by a new functions, are no longer supported, and may be removed from future versions.
-    * All code that uses the functions should be converted to use its replacement.
-
-
-Name
--------------------------------------------------------------------------------
-
-* ``pgr_kdijkstraCost`` - Returns the costs for K shortest paths using Dijkstra algorithm.
-
-.. warning:: Use :ref:`pgr_dijkstraCost` (One To Many) instead.
-
-* ``pgr_kdijkstraPath`` - Returns the paths for K shortest paths using Dijkstra algorithm.
-
-.. warning:: Use :ref:`pgr_dijkstra` (One To Many) instead.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-These functions allow you to have a single start node and multiple destination nodes and will compute the routes to all the destinations from the source node. Returns a set of :ref:`pgr_costResult <type_cost_result>` or :ref:`pgr_costResult3 <type_cost_result3>`. ``pgr_kdijkstraCost`` returns one record for each destination node and the cost is the total code of the route to that node. ``pgr_kdijkstraPath`` returns one record for every edge in that path from source to destination and the [...]
-
-.. code-block:: sql
-
-    pgr_costResult[] pgr_kdijkstraCost(text sql, integer source,
-                     integer[] targets, boolean directed, boolean has_rcost);
-
-    pgr_costResult3[] pgr_kdijkstraPath(text sql, integer source,
-                      integer[] targets, boolean directed, boolean has_rcost);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-    .. code-block:: sql
-
-        SELECT id, source, target, cost [,reverse_cost] FROM edge_table
-
-
-    :id: ``int4`` identifier of the edge
-    :source: ``int4`` identifier of the source vertex
-    :target: ``int4`` identifier of the target vertex
-    :cost: ``float8`` value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph.
-    :reverse_cost: (optional) the cost for the reverse traversal of the edge. This is only used when the ``directed`` and ``has_rcost`` parameters are ``true`` (see the above remark about negative costs).
-
-:source: ``int4`` id of the start point
-:targets: ``int4[]`` an array of ids of the end points
-:directed: ``true`` if the graph is directed
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-
-``pgr_kdijkstraCost`` returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   path vertex source id (this will always be source start point in the query).
-:id2:   path vertex target id
-:cost:  cost to traverse the path from ``id1`` to ``id2``. Cost will be -1.0 if there is no path to that target vertex id.
-
-
-``pgr_kdijkstraPath`` returns set of :ref:`type_cost_result3`:
-
-:seq:   row sequence
-:id1:   path target id (identifies the target path).
-:id2:   path edge source node id
-:id3:   path edge id (``-1`` for the last row)
-:cost:  cost to traverse this edge or -1.0 if there is no path to this target
-
-
-.. rubric:: History
-
-* Deprecated in version 2.0.0
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-* Returning a ``cost`` result
-
-
-.. literalinclude:: doc-kdijkstra.queries
-   :start-after: -- q1
-   :end-before: -- q2
-
-
-.. literalinclude:: doc-kdijkstra.queries
-   :start-after: -- q2
-   :end-before: -- q3
-
-
-* Returning a ``path`` result
-
-.. literalinclude:: doc-kdijkstra.queries
-   :start-after: -- q3
-   :end-before: -- q4
-
-There is no assurance that the result above will be ordered in the direction
-of flow of the route, ie: it might be reversed. You will need to check if
-``st_startPoint()`` of the route is the same as the start node location and
-if it is not then call ``st_reverse()`` to reverse the direction of the route.
-This behavior is a function of PostGIS functions ``st_linemerge()`` and 
-``st_union()`` and not pgRouting.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`pgr_dijkstraCost`, :ref:`pgr_dijkstra`
-* :ref:`type_cost_result`
-* http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
diff --git a/src/kdijkstra/test/doc-kdijkstra.test.sql b/src/kdijkstra/test/doc-kdijkstra.test.sql
index 86241cc..8604973 100644
--- a/src/kdijkstra/test/doc-kdijkstra.test.sql
+++ b/src/kdijkstra/test/doc-kdijkstra.test.sql
@@ -1,10 +1,8 @@
-BEGIN;
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
 --              PGR_kdijkstraPath
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
-SET client_min_messages TO NOTICE;
 \echo -- q1
 SELECT * FROM pgr_kdijkstraCost(
     'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
@@ -24,4 +22,3 @@ WHERE a.id3=b.id
 GROUP by id1
 ORDER by id1;
 \echo -- q4
-ROLLBACK;
diff --git a/src/ksp/doc/ksp.rst.back b/src/ksp/doc/KSP-category.rst
similarity index 62%
rename from src/ksp/doc/ksp.rst.back
rename to src/ksp/doc/KSP-category.rst
index 0eec12f..ba23ad9 100644
--- a/src/ksp/doc/ksp.rst.back
+++ b/src/ksp/doc/KSP-category.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -7,18 +7,17 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-.. _ksp:
 
-pgr_ksp - Multiple shortest Paths based on Dijkstra
-===============================================================================
+.. _KSP:
 
+KSP Category
+===============================================================================
 
+.. index from here
 
-  -  :ref:`pgr_ksp<pgr_ksp>` - Multiple shortest Paths based on Dijkstra
-  -  :ref:`pgr_withPointsKSP<pgr_withPointsKSP>` - Multiple shortest Paths based on Dijkstra
+* :ref:`pgr_KSP` - Driving Distance based on pgr_dijkstra
+* :ref:`pgr_withPointsKSP` - Driving Distance based on pgr_dijkstra
 
-.. toctree::
-        :hidden: 
+.. index to here
 
-        ./pgr_ksp
 
diff --git a/src/ksp/doc/doc-ksp-v2.queries b/src/ksp/doc/doc-ksp-v2.queries
index f09ee8e..d6885b1 100644
--- a/src/ksp/doc/doc-ksp-v2.queries
+++ b/src/ksp/doc/doc-ksp-v2.queries
@@ -1,3 +1,5 @@
+BEGIN;
+BEGIN
 SET client_min_messages TO NOTICE;
 SET
 --q1
@@ -45,3 +47,5 @@ NOTICE:  Deprecated function
 (12 rows)
 
 --q3
+ROLLBACK;
+ROLLBACK
diff --git a/src/ksp/doc/doc-ksp.queries b/src/ksp/doc/doc-ksp.queries
index 1667b58..c24eeb1 100644
--- a/src/ksp/doc/doc-ksp.queries
+++ b/src/ksp/doc/doc-ksp.queries
@@ -1,7 +1,9 @@
+BEGIN;
+BEGIN
 SET client_min_messages TO NOTICE;
 SET
 --q1
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, 
       true   
@@ -21,7 +23,7 @@ NOTICE:  Deprecated function
    9 |   1 |  12 |  -1 |    0
 (10 rows)
 
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2,
       directed:=true   
@@ -40,7 +42,7 @@ SELECT * FROM pgr_ksp(
   10 |       2 |        5 |   12 |   -1 |    0 |        4
 (10 rows)
 
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2
    );
@@ -59,7 +61,7 @@ SELECT * FROM pgr_ksp(
 (10 rows)
 
 --q2
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2
    );
@@ -77,7 +79,7 @@ SELECT * FROM pgr_ksp(
   10 |       2 |        5 |   12 |   -1 |    0 |        4
 (10 rows)
 
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, heap_paths:=true
    );
@@ -100,7 +102,7 @@ SELECT * FROM pgr_ksp(
   15 |       3 |        5 |   12 |   -1 |    0 |        4
 (15 rows)
 
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, true, true
    );
@@ -124,7 +126,7 @@ SELECT * FROM pgr_ksp(
 (15 rows)
 
 --q3
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, directed:=false
    );
@@ -142,7 +144,7 @@ SELECT * FROM pgr_ksp(
   10 |       2 |        5 |   12 |   -1 |    0 |        4
 (10 rows)
 
-SELECT * FROM pgr_ksp(
+SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, false, true
    );
@@ -173,7 +175,7 @@ SELECT * FROM pgr_ksp(
 (22 rows)
 
 --q4
-SELECT  * FROM pgr_ksp(
+SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 3, 2
    );
@@ -181,7 +183,7 @@ SELECT  * FROM pgr_ksp(
 -----+---------+----------+------+------+------+----------
 (0 rows)
 
-SELECT  * FROM pgr_ksp(
+SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2
    );
@@ -199,7 +201,7 @@ SELECT  * FROM pgr_ksp(
   10 |       2 |        5 |   12 |   -1 |    0 |        4
 (10 rows)
 
-SELECT   * FROM pgr_ksp(
+SELECT   * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, heap_paths:=true
    );
@@ -222,7 +224,7 @@ SELECT   * FROM pgr_ksp(
   15 |       3 |        5 |   12 |   -1 |    0 |        4
 (15 rows)
 
-SELECT  * FROM pgr_ksp(
+SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, true, true
    );
@@ -246,7 +248,7 @@ SELECT  * FROM pgr_ksp(
 (15 rows)
 
 --q5
-SELECT  * FROM pgr_ksp(
+SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, directed:=false
    );
@@ -264,7 +266,7 @@ SELECT  * FROM pgr_ksp(
   10 |       2 |        5 |   12 |   -1 |    0 |        4
 (10 rows)
 
-SELECT  * FROM pgr_ksp(
+SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, directed:=false, heap_paths:=true
    );
@@ -288,3 +290,5 @@ SELECT  * FROM pgr_ksp(
 (15 rows)
 
 --q6
+ROLLBACK;
+ROLLBACK
diff --git a/src/ksp/doc/pgr_ksp.rst b/src/ksp/doc/pgr_KSP.rst
similarity index 87%
rename from src/ksp/doc/pgr_ksp.rst
rename to src/ksp/doc/pgr_KSP.rst
index 57498f1..5b0d2b0 100644
--- a/src/ksp/doc/pgr_ksp.rst
+++ b/src/ksp/doc/pgr_KSP.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,20 +9,24 @@
 
 .. _pgr_ksp:
 
-pgr_ksp
+pgr_KSP
 ===============================================================================
 
 Name
 -------------------------------------------------------------------------------
 
-``pgr_ksp`` — Returns the "K" shortest paths.
+``pgr_KSP`` — Returns the "K" shortest paths.
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.0.0
+
+* Signature change 2.1.0
+
 
 Synopsis
 -------------------------------------------------------------------------------
@@ -34,15 +38,15 @@ Signature Summary
 
 .. code-block:: sql
 
-    pgr_ksp(edges_sql, start_vid, end_vid, K);
-    pgr_ksp(edges_sql, start_vid, end_vid, k, directed, heap_paths)
+    pgr_KSP(edges_sql, start_vid, end_vid, K);
+    pgr_KSP(edges_sql, start_vid, end_vid, k, directed, heap_paths)
     RETURNS SET OF (seq, path_id, path_seq, node, edge, cost, agg_cost) or EMPTY SET
 
 Signatures
 -------------------------------------------------------------------------------
 
-.. index:: 
-  single: ksp(Minimal Signature)
+.. index::
+  single: KSP(Minimal Signature)
 
 Minimal Signature
 ..................
@@ -53,7 +57,7 @@ Minimal Signature
     RETURNS SET OF (seq, path_id, path_seq, node, edge, cost, agg_cost) or EMPTY SET
 
 
-.. index:: 
+.. index::
   single: ksp(Complete Signature)
 
 Complete Signature
@@ -61,27 +65,29 @@ Complete Signature
 
 .. code-block:: sql
 
-    pgr_ksp(edges_sql, start_vid, end_vid, k, directed, heap_paths)
+    pgr_KSP(edges_sql, start_vid, end_vid, k, directed, heap_paths)
     RETURNS SET OF (seq, path_id, path_seq, node, edge, cost, agg_cost) or EMPTY SET
 
 
 Description of the Signatures
 -------------------------------------------------------------------------------
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
+Description of the parameters of the signatures
+..................................................
 
-============== ============ =================================================                                                                                                                                          
-Column         Type           Description                                                                                                                                                                                
+============== ============ =================================================
+Column         Type           Description
 ============== ============ =================================================
 **edges_sql**   ``TEXT``    SQL query as described above.
 **start_vid**   ``BIGINT``  Identifier of the starting vertex.
 **end_vid**     ``BIGINT``  Identifier of the ending vertex.
 **k**           ``INTEGER`` The desiered number of paths.
 **directed**    ``BOOLEAN`` (optional). When ``false`` the graph is considered as Undirected. Default is ``true`` which considers the graph as Directed.
-**heap_paths**  ``BOOLEAN`` (optional). When ``true`` returns all the paths stored in the process heap. Default is ``false`` which only returns ``k`` pahts. 
+**heap_paths**  ``BOOLEAN`` (optional). When ``true`` returns all the paths stored in the process heap. Default is ``false`` which only returns ``k`` pahts.
 ============== ============ =================================================
 
 Roughly, if the shortest path has ``N`` edges, the heap will contain about than ``N * k`` paths for small value of ``k`` and ``k > 1``.
diff --git a/src/ksp/doc/pgr_ksp_v2.rst b/src/ksp/doc/pgr_ksp_v2.rst
deleted file mode 100644
index d5f96d7..0000000
--- a/src/ksp/doc/pgr_ksp_v2.rst
+++ /dev/null
@@ -1,102 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_ksp_v2:
-
-pgr_ksp - Deprecated Signature
-===============================================================================
-
-.. warning:: This function signature is deprecated!!!
-
-    * That means it has been replaced by new signature(s)
-    * This signature is no longer supported, and may be removed from future versions.
-    * All code that use this function signature should be converted to use its replacement :ref:`pgr_ksp`.
-
-
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_ksp`` — Returns the "K" shortest paths.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-The K shortest path routing algorithm based on Yen's algorithm. "K" is the number of shortest paths desired. Returns a set of :ref:`pgr_costResult3 <type_cost_result3>` (seq, id1, id2, id3, cost) rows, that make up a path.
-
-.. code-block:: sql
-
-  pgr_costResult3[] pgr_ksp(sql text, source integer, target integer,
-                           paths integer, has_rcost boolean);
-
-
-Description
--------------------------------------------------------------------------------
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-  .. code-block:: sql
-
-    SELECT id, source, target, cost, [,reverse_cost] FROM edge_table
-
-
-  :id: ``int4`` identifier of the edge
-  :source: ``int4`` identifier of the source vertex
-  :target: ``int4`` identifier of the target vertex
-  :cost: ``float8`` value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph.
-  :reverse_cost: (optional) the cost for the reverse traversal of the edge. This is only used when ``has_rcost`` the parameter is ``true`` (see the above remark about negative costs).
-
-:source: ``int4`` id of the start point
-:target: ``int4`` id of the end point
-:paths: ``int4`` number of alternative routes
-:has_rcost: if ``true``, the ``reverse_cost`` column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
-
-Returns set of :ref:`type_cost_result`:
-
-:seq:   sequence for ording the results
-:id1:   route ID
-:id2:   node ID
-:id3:   edge ID (``0`` for the last row)
-:cost:  cost to traverse from ``id2`` using ``id3``
-
-KSP code base taken from http://code.google.com/p/k-shortest-paths/source.
-
-
-.. rubric:: History
-
-* New in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-* Without ``reverse_cost``
-
-.. literalinclude:: doc-ksp-v2.queries
-    :start-after: --q1
-    :end-before: --q2
-
-
-* With ``reverse_cost``
-
-.. literalinclude:: doc-ksp-v2.queries
-    :start-after: --q2
-    :end-before: --q3
-
-
-The queries use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`pgr_ksp`
-* :ref:`type_cost_result3`
-* http://en.wikipedia.org/wiki/K_shortest_path_routing
diff --git a/src/ksp/src/ksp.c b/src/ksp/src/ksp.c
index 403dbe9..b62b6a3 100644
--- a/src/ksp/src/ksp.c
+++ b/src/ksp/src/ksp.c
@@ -22,179 +22,173 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#include "fmgr.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
+#include "./../../common/src/postgres_connection.h"
 
-#include "./../../common/src/pgr_types.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
+#include "./../../common/src/pgr_types.h"
 #include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
+
 #include "./ksp_driver.h"
 
 PGDLLEXPORT Datum kshortest_path(PG_FUNCTION_ARGS);
-
+PG_FUNCTION_INFO_V1(kshortest_path);
 
 static
-void compute(char* sql, int64_t start_vertex,
-         int64_t end_vertex, int k,
-         bool directed,
-         bool heap_paths,
-         General_path_element_t **ksp_path, size_t *path_count) {
-  pgr_SPI_connect();
-  pgr_edge_t *edges = NULL;
-  size_t total_tuples = 0;
-
-  char *err_msg = NULL;
-
-  if (start_vertex == end_vertex) {
-    (*path_count) = 0;
-    *ksp_path = NULL;
-    pgr_SPI_finish();
-    return;
-  }
-
-  PGR_DBG("Load data");
-  pgr_get_edges(sql, &edges, &total_tuples);
-
-  PGR_DBG("Total %ld tuples in query:", total_tuples);
-  PGR_DBG("Calling do_pgr_ksp\n");
-  PGR_DBG("heap_paths = %i\n", heap_paths);
-
-  clock_t start_t = clock();
-  int errcode = do_pgr_ksp(edges, total_tuples,
-            start_vertex, end_vertex,
-            k, directed, heap_paths,
-            ksp_path, path_count, &err_msg);
-  time_msg(" processing KSP", start_t, clock());
+void compute(
+        char* edges_sql,
+        int64_t start_vertex,
+        int64_t end_vertex,
+        int k,
+        bool directed,
+        bool heap_paths,
+        General_path_element_t **ksp_path, size_t *path_count) {
+    pgr_SPI_connect();
+
+    PGR_DBG("Load data");
+    pgr_edge_t *edges = NULL;
+    size_t total_edges = 0;
+
+
+    if (start_vertex == end_vertex) {
+        pgr_SPI_finish();
+        return;
+    }
 
-  PGR_DBG("total tuples found %ld\n", *path_count);
-  PGR_DBG("Exit Status = %i\n", errcode);
-  PGR_DBG("Returned message = %s\n", err_msg);
+    pgr_get_edges(edges_sql, &edges, &total_edges);
+    PGR_DBG("Total %ld edges in query:", total_edges);
 
+    if (total_edges == 0) {
+        PGR_DBG("No edges found");
+        pgr_SPI_finish();
+        return;
+    }
 
 
-  if (err_msg) free(err_msg);
-  pfree(edges);
-  pgr_SPI_finish();
+    PGR_DBG("Calling do_pgr_ksp\n");
+    PGR_DBG("heap_paths = %i\n", heap_paths);
+
+    clock_t start_t = clock();
+    char *log_msg = NULL;
+    char *notice_msg = NULL;
+    char *err_msg = NULL;
+
+    do_pgr_ksp(
+            edges,
+            total_edges,
+            start_vertex,
+            end_vertex,
+            k,
+            directed,
+            heap_paths,
+            ksp_path,
+            path_count,
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+    time_msg(" processing KSP", start_t, clock());
+    PGR_DBG("total tuples found %ld\n", *path_count);
+
+    if (err_msg) {
+        if (*ksp_path) free(*ksp_path);
+    }
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
-  if (errcode) {
-      pgr_send_error(errcode);
-  }
+    pfree(edges);
+    pgr_SPI_finish();
 }
 
 
-PG_FUNCTION_INFO_V1(kshortest_path);
 PGDLLEXPORT Datum
 kshortest_path(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t               call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
-    General_path_element_t      *path;
-    //  void * toDel;
+    General_path_element_t      *path = NULL;
+    size_t result_count = 0;
 
     /* stuff done only on the first call of the function */
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
-        size_t path_count = 0;
-        path = NULL;
-
-        /* create a function context for cross-call persistence */
         funcctx = SRF_FIRSTCALL_INIT();
-
-        /* switch to memory context appropriate for multiple function calls */
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        // CREATE OR REPLACE FUNCTION _pgr_ksp(sql text, start_vid bigint, end_vid bigint, k integer, directed boolean, heap_paths boolean...
+        /*
+           CREATE OR REPLACE FUNCTION _pgr_ksp(
+           sql text,
+           start_vid bigint,
+           end_vid bigint,
+           k integer,
+           directed boolean,
+           heap_paths boolean
+           */
+        PGR_DBG("Calling process");
         compute(
-                pgr_text2char(PG_GETARG_TEXT_P(0)), /* SQL  */
+                text_to_cstring(PG_GETARG_TEXT_P(0)), /* SQL  */
                 PG_GETARG_INT64(1),   /* start_vid */
                 PG_GETARG_INT64(2),   /* end_vid */
                 PG_GETARG_INT32(3),   /* k */
                 PG_GETARG_BOOL(4),    /* directed */
                 PG_GETARG_BOOL(5),    /* heap_paths */
                 &path,
-                &path_count);
-        //      toDel = path;
+                &result_count);
+        PGR_DBG("Total number of tuples to be returned %ld \n", result_count);
 
-        PGR_DBG("Total number of tuples to be returned %ld \n", path_count);
+        /*                                                                    */
+        /**********************************************************************/
 
-        /* total number of tuples to be returned */
-        funcctx->max_calls = (uint32_t)path_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = path;
-
-        /* Build a tuple descriptor for our result type */
         if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
                          "that cannot accept type record\n")));
 
-        // funcctx->tuple_desc = BlessTupleDesc(RelationNameGetTupleDesc("__pgr_2i3b2f"));
         funcctx->tuple_desc = tuple_desc;
         MemoryContextSwitchTo(oldcontext);
     }
 
 
-    /* stuff done on every call of the function */
     funcctx = SRF_PERCALL_SETUP();
 
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
+
     tuple_desc = funcctx->tuple_desc;
     path = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {   /* do when there is more left to send */
-        PGR_DBG("returning %u \n", call_cntr);
+    if (funcctx->call_cntr < funcctx->max_calls) {   /* do when there is more left to send */
         HeapTuple    tuple;
         Datum        result;
-        /* //Datum values[4];
-        //bool nulls[4]; */
-
         Datum *values;
         bool* nulls;
 
-        values = (Datum *)palloc(7 * sizeof(Datum));
-        nulls = (bool *) palloc(7 * sizeof(bool));
-
-        nulls[0] = false;
-        nulls[1] = false;
-        nulls[2] = false;
-        nulls[3] = false;
-        nulls[4] = false;
-        nulls[5] = false;
-        nulls[6] = false;
-
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(path[call_cntr].start_id + 1);
-        values[2] = Int32GetDatum(path[call_cntr].seq);
-        values[3] = Int64GetDatum(path[call_cntr].node);
-        values[4] = Int64GetDatum(path[call_cntr].edge);
-        values[5] = Float8GetDatum(path[call_cntr].cost);
-        values[6] = Float8GetDatum(path[call_cntr].agg_cost);
+        values = palloc(7 * sizeof(Datum));
+        nulls = palloc(7 * sizeof(bool));
 
-        tuple = heap_form_tuple(tuple_desc, values, nulls);
 
-        /* make the tuple into a datum */
-        result = HeapTupleGetDatum(tuple);
+        size_t i;
+        for (i = 0; i < 7; ++i) {
+            nulls[i] = false;
+        }
 
-        /* clean up (this is not really necessary) */
-        pfree(values);
-        pfree(nulls);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(path[funcctx->call_cntr].start_id + 1);
+        values[2] = Int32GetDatum(path[funcctx->call_cntr].seq);
+        values[3] = Int64GetDatum(path[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(path[funcctx->call_cntr].edge);
+        values[5] = Float8GetDatum(path[funcctx->call_cntr].cost);
+        values[6] = Float8GetDatum(path[funcctx->call_cntr].agg_cost);
 
+        tuple = heap_form_tuple(tuple_desc, values, nulls);
+        result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {   /* do when there is no more left */
-        if (path == (General_path_element_t *) NULL) free(path);
         SRF_RETURN_DONE(funcctx);
     }
 }
-
-
diff --git a/src/ksp/src/ksp_driver.cpp b/src/ksp/src/ksp_driver.cpp
index 9cc911e..0e845c8 100644
--- a/src/ksp/src/ksp_driver.cpp
+++ b/src/ksp/src/ksp_driver.cpp
@@ -22,92 +22,106 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef open
-#undef open
-#endif
-#ifdef unlink
-#undef unlink
-#endif
-#endif
 
-#include <deque>
-#include <sstream>
+#include "./ksp_driver.h"
 
+#include <sstream>
+#include <deque>
+#include <vector>
 
-#include "./ksp_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
 #include "./pgr_ksp.hpp"
 
+#include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/pgr_types.h"
+
+#include "./../../common/src/pgr_base_graph.hpp"
 
 
-int  do_pgr_ksp(
-        pgr_edge_t  *data_edges, size_t total_tuples,
-        int64_t  start_vertex, int64_t  end_vertex,
-        int k, bool directedFlag, bool heap_paths,
-        General_path_element_t **ksp_path, size_t *path_count,
+
+void  do_pgr_ksp(
+        pgr_edge_t *data_edges,
+        size_t total_edges,
+        int64_t  start_vid,
+        int64_t  end_vid,
+        int k,
+        bool directed,
+        bool heap_paths,
+        General_path_element_t **return_tuples,
+        size_t *return_count,
+        char ** log_msg,
+        char ** notice_msg,
         char ** err_msg) {
+    std::ostringstream err;
+    std::ostringstream log;
+    std::ostringstream notice;
     try {
-        *ksp_path = NULL;
-        *path_count = 0;
-        std::ostringstream log;
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert(*return_count == 0);
+        pgassert(total_edges != 0);
+        log << "buuu";
 
-        graphType gType = directedFlag? DIRECTED: UNDIRECTED;
+        graphType gType = directed? DIRECTED: UNDIRECTED;
 
         std::deque< Path > paths;
 
-        if (directedFlag) {
+        if (directed) {
             pgrouting::DirectedGraph digraph(gType);
             Pgr_ksp< pgrouting::DirectedGraph > fn_yen;
-            digraph.graph_insert_data(data_edges, total_tuples);
-            paths = fn_yen.Yen(digraph, start_vertex, end_vertex, k, heap_paths);
+            digraph.insert_edges(data_edges, total_edges);
+            paths = fn_yen.Yen(digraph, start_vid, end_vid, k, heap_paths);
         } else {
             pgrouting::UndirectedGraph undigraph(gType);
             Pgr_ksp< pgrouting::UndirectedGraph > fn_yen;
-            undigraph.graph_insert_data(data_edges, total_tuples);
-            paths = fn_yen.Yen(undigraph, start_vertex, end_vertex, k, heap_paths);
+            undigraph.insert_edges(data_edges, total_edges);
+            paths = fn_yen.Yen(undigraph, start_vid, end_vid, k, heap_paths);
         }
 
 
         auto count(count_tuples(paths));
 
-        if (count == 0) {
-            *err_msg = strdup(
-                    "NOTICE: No paths found between Starting and Ending vertices");
-            return 0;
-        }
-
-        // get the space required to store all the paths
-        *ksp_path = NULL;
-        *ksp_path = pgr_alloc(count, (*ksp_path));
-
-        size_t sequence = 0;
-        int route_id = 0;
-        for (const auto &path : paths) {
-            if (path.size() > 0)
-                path.get_pg_ksp_path(ksp_path, sequence, route_id);
-            ++route_id;
+        if (!(count == 0)) {
+            // get the space required to store all the paths
+            *return_tuples = NULL;
+            *return_tuples = pgr_alloc(count, (*return_tuples));
+
+            size_t sequence = 0;
+            int route_id = 0;
+            for (const auto &path : paths) {
+                if (path.size() > 0)
+                    path.get_pg_ksp_path(return_tuples, sequence, route_id);
+                ++route_id;
+            }
         }
-
-        if (count != sequence) {
-            *err_msg = NULL;
-            return 2;
-        }
-        *path_count = count;
-
-#if 1
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-        return EXIT_SUCCESS;
-    } catch ( ... ) {
-        *err_msg = strdup("Caught unknown exception!");
-        if (ksp_path) free(ksp_path);
-        *path_count = 0;
-        return -1;
+        *return_count = count;
+
+        pgassert(*err_msg == NULL);
+        *log_msg = log.str().empty()?
+            nullptr :
+            strdup(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            nullptr :
+            strdup(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        if (*return_tuples) free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = strdup(err.str().c_str());
+        *log_msg = strdup(log.str().c_str());
+    } catch (std::exception& except) {
+        if (*return_tuples) free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = strdup(err.str().c_str());
+        *log_msg = strdup(log.str().c_str());
+    } catch(...) {
+        if (*return_tuples) free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = strdup(err.str().c_str());
+        *log_msg = strdup(log.str().c_str());
     }
 }
-
diff --git a/src/ksp/src/ksp_driver.h b/src/ksp/src/ksp_driver.h
index 62dac5e..cfc85ce 100644
--- a/src/ksp/src/ksp_driver.h
+++ b/src/ksp/src/ksp_driver.h
@@ -22,6 +22,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_KSP_SRC_KSP_DRIVER_H_
+#define SRC_KSP_SRC_KSP_DRIVER_H_
+
 #pragma once
 
 #include "./../../common/src/pgr_types.h"
@@ -30,13 +33,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 extern "C" {
 #endif
 
-    int  do_pgr_ksp(pgr_edge_t  * edges, size_t total_tuples,
-            int64_t  start_vertex, int64_t end_vertex,
-            int no_paths, bool directed, bool heap_paths,
-            General_path_element_t **ksp_path, size_t *path_count,
+    void  do_pgr_ksp(
+            pgr_edge_t  *data_edges,
+            size_t total_edges,
+            int64_t  start_vid,
+            int64_t end_vid,
+            int no_paths,
+            bool directed,
+            bool heap_paths,
+            General_path_element_t **return_tuples,
+            size_t *return_count,
+            char ** log_msg,
+            char ** notice_msg,
             char ** err_msg);
 
 #ifdef __cplusplus
 }
 #endif
 
+#endif  // SRC_KSP_SRC_KSP_DRIVER_H_
diff --git a/src/ksp/src/pgr_ksp.cpp b/src/ksp/src/pgr_ksp.cpp
index ddae481..ed692a9 100644
--- a/src/ksp/src/pgr_ksp.cpp
+++ b/src/ksp/src/pgr_ksp.cpp
@@ -21,17 +21,12 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef unlink
-#undef unlink
-#endif
-#endif
 
 
 #include <deque>
 #include <set>
+
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/basePath_SSEC.hpp"
 
 template < class G >
@@ -44,7 +39,7 @@ void Pgr_ksp< G >::getFirstSolution(G &graph) {
      Path path;
 
      Pgr_dijkstra< G > fn_dijkstra;
-     fn_dijkstra.dijkstra(graph, path, m_start, m_end);
+     path = fn_dijkstra.dijkstra(graph, m_start, m_end);
 
      if (path.empty()) return;
      curr_result_path = path;
@@ -55,29 +50,50 @@ template < class G>
 std::deque<Path>
 Pgr_ksp< G >::Yen(G &graph,
   int64_t  start_vertex, int64_t end_vertex, int K, bool heap_paths) {
+    /*
+     * No path: already in destination
+     */
+    if ((start_vertex == end_vertex) || (K == 0)) {
+        return std::deque<Path>();
+    }
+    /*
+     * no path: disconnected vertices
+     */
+    if (!graph.has_vertex(start_vertex)
+                || !graph.has_vertex(end_vertex)) {
+        return std::deque<Path>();
+    }
     m_ResultSet.clear();
     m_Heap.clear();
 
-    if ((start_vertex != end_vertex) && (K > 0)) {
-        if (!graph.has_vertex(start_vertex)
-                || !graph.has_vertex(end_vertex)) {
-            std::deque<Path> l_ResultList;
-            return l_ResultList;
-        }
-        v_source = graph.get_V(start_vertex);
-        v_target = graph.get_V(end_vertex);
-        m_start = start_vertex;
-        m_end = end_vertex;
-        executeYen(graph, K);
-    }
+    v_source = graph.get_V(start_vertex);
+    v_target = graph.get_V(end_vertex);
+    m_start = start_vertex;
+    m_end = end_vertex;
+    executeYen(graph, K);
 
     while (!m_ResultSet.empty()) {
         m_Heap.insert(*m_ResultSet.begin());
         m_ResultSet.erase(m_ResultSet.begin());
     }
     std::deque<Path> l_ResultList(m_Heap.begin(), m_Heap.end());
+
+    std::stable_sort(l_ResultList.begin(), l_ResultList.end(),
+            [](const Path &left, const Path &right) -> bool {
+            for (size_t i = 0 ; i < (std::min)(left.size(), right.size()); ++i) {
+            if (left[i].node < right[i].node) return true;
+            if (left[i].node > right[i].node) return false;
+            }
+            return false;
+            });
+
+    std::stable_sort(l_ResultList.begin(), l_ResultList.end(),
+            [](const Path &left, const Path &right) {
+            return left.size() < right.size();});
+
     if (!heap_paths && l_ResultList.size() > (size_t) K)
         l_ResultList.resize(K);
+
     return l_ResultList;
 }
 
@@ -90,17 +106,16 @@ void Pgr_ksp< G >::removeVertices(G &graph, const Path &subpath) {
 
 template < class G >
 void Pgr_ksp< G >::doNextCycle(G &graph) {
-    // REG_SIGINT
 
 
     int64_t spurNodeId;
-    Path rootPath;
-    Path spurPath;
 
-    for (unsigned int i = 0; i < curr_result_path.size() ; ++i) {
+
+    for (unsigned int i = 0; i < curr_result_path.size(); ++i) {
+
         spurNodeId = curr_result_path[i].node;
 
-        rootPath = curr_result_path.getSubpath(i);
+        auto rootPath = curr_result_path.getSubpath(i);
 
         for (const auto &path : m_ResultSet) {
             if (path.isEqual(rootPath)) {
@@ -110,14 +125,11 @@ void Pgr_ksp< G >::doNextCycle(G &graph) {
                 }
             }
         }
-        removeVertices(graph, rootPath);
 
+        removeVertices(graph, rootPath);
 
-        // THROW_ON_SIGINT
         Pgr_dijkstra< G > fn_dijkstra;
-        fn_dijkstra.dijkstra(graph, spurPath, spurNodeId, m_end);
-        // this->dijkstra(spurPath, spurNodeId , m_end);
-        // THROW_ON_SIGINT
+        auto spurPath = fn_dijkstra.dijkstra(graph, spurNodeId, m_end);
 
         if (spurPath.size() > 0) {
             rootPath.appendPath(spurPath);
@@ -125,8 +137,6 @@ void Pgr_ksp< G >::doNextCycle(G &graph) {
         }
 
         graph.restore_graph();
-        rootPath.clear();
-        spurPath.clear();
     }
 }
 
@@ -137,11 +147,19 @@ void Pgr_ksp< G >::executeYen(G &graph, int K) {
 
     if (m_ResultSet.size() == 0) return;  // no path found
 
-    while ( m_ResultSet.size() < (unsigned int) K ) {
+    while (m_ResultSet.size() < (unsigned int) K) {
         doNextCycle(graph);
-        if ( m_Heap.empty() ) break;
+        if (m_Heap.empty()) break;
         curr_result_path = *m_Heap.begin();
         m_ResultSet.insert(curr_result_path);
         m_Heap.erase(m_Heap.begin());
+        /*
+         * without the next line withpointsKSP hungs with:
+         *  c++ 4.6
+         *  Debug mode
+         */
+#ifndef NDEBUG
+        log << "end of while heap size" << m_Heap.size();
+#endif
     }
 }
diff --git a/src/ksp/src/pgr_ksp.hpp b/src/ksp/src/pgr_ksp.hpp
index 2b9effe..88cf202 100644
--- a/src/ksp/src/pgr_ksp.hpp
+++ b/src/ksp/src/pgr_ksp.hpp
@@ -24,19 +24,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 #pragma once
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef unlink
-#undef unlink
-#endif
-#endif
+#include "./../../dijkstra/src/pgr_dijkstra.hpp"
 
 #include <sstream>
 #include <deque>
 #include <vector>
 #include <set>
-#include "./../../dijkstra/src/pgr_dijkstra.hpp"
+#include <limits>
+
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/basePath_SSEC.hpp"
 
 template < class G >
@@ -49,19 +45,41 @@ class Pgr_ksp {
      class compPaths {
       public:
           bool operator()(const Path &p1, const Path &p2) const {
-              if (p1.tot_cost() != p2.tot_cost())
-                  return  (p1.tot_cost() < p2.tot_cost());
-
-              // paths costs are equal now we check by length
+              /*
+               * less cost is best
+               */
+              if (p1.tot_cost() > p2.tot_cost())
+                  return  false;
+              if (p1.tot_cost() < p2.tot_cost())
+                return  true;
+
+              pgassert(p1.tot_cost() == p2.tot_cost());
+
+              // paths costs are equal now check by length
+              if (p1.size() > p2.size())
+                  return false;
               if (p1.size() < p2.size())
-                  return (p1.size() < p2.size());
+                  return true;
 
-              // paths weights & lengths are equal now we check by ID
+              pgassert(p1.tot_cost() == p2.tot_cost());
+              pgassert(p1.size() == p2.size());
+
+              // paths weights & lengths are equal now check by node ID
               unsigned int i;
               for (i = 0; i < p1.size(); i++) {
-                  if (p1[i].node != p2[i].node)
-                      return (p1[i].node < p2[i].node);
+                  if (p1[i].node >  p2[i].node)
+                      return false;
+                  if (p1[i].node <  p2[i].node)
+                      return true;
+              }
+
+              pgassert(p1.tot_cost() == p2.tot_cost());
+              pgassert(p1.size() == p2.size());
+#ifdef NDEBUG
+              for (i = 0; i < p1.size(); i++) {
+                  pgassert(p1[i].node == p2[i].node);
               }
+#endif
 
               // we got here and everything is equal
               return false;
@@ -96,6 +114,8 @@ class Pgr_ksp {
      typedef std::set<Path, compPaths> pSet;
      pSet m_ResultSet;  //!< ordered set of shortest paths
      pSet m_Heap;  //!< the heap
+
+     std::ostringstream log;
 };
 
 #include "./pgr_ksp.cpp"
diff --git a/src/ksp/src/withPoints_ksp.c b/src/ksp/src/withPoints_ksp.c
index 540c62c..12ae5db 100644
--- a/src/ksp/src/withPoints_ksp.c
+++ b/src/ksp/src/withPoints_ksp.c
@@ -27,20 +27,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 
-
-#include "fmgr.h"
 #include "./../../common/src/pgr_types.h"
 #include "./../../common/src/time_msg.h"
-#include "./../../common/src/postgres_connection.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/points_input.h"
 #include "./../../withPoints/src/get_new_queries.h"
@@ -48,6 +40,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./../../common/src/debug_macro.h"
 
 PGDLLEXPORT Datum withPoints_ksp(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(withPoints_ksp);
 
 
 /*******************************************************************************/
@@ -111,9 +104,12 @@ process(
     }
 
     PGR_DBG("Starting processing");
-    char *err_msg = NULL;
     clock_t start_t = clock();
-    int errcode = do_pgr_withPointsKsp(
+
+    char *log_msg = NULL;
+    char *notice_msg = NULL;
+    char *err_msg = NULL;
+    do_pgr_withPointsKsp(
             edges,
             total_edges,
             points,
@@ -131,12 +127,18 @@ process(
 
             result_tuples,
             result_count,
+
+            &log_msg,
+            &notice_msg,
             &err_msg);
     time_msg(" processing withPointsKSP", start_t, clock());
 
     PGR_DBG("Returned message = %s\n", err_msg);
 
-    if (!err_msg) free(err_msg);
+    if (err_msg) {
+        if (*result_tuples) free(*result_tuples);
+    }
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
     pfree(edges);
     pfree(edges_of_points);
@@ -144,10 +146,6 @@ process(
 
     pgr_SPI_finish();
 
-    if (errcode) {
-        pgr_send_error(errcode);
-    }
-
 }
 
 /*                                                                             */
@@ -155,12 +153,8 @@ process(
 
 
 
-PG_FUNCTION_INFO_V1(withPoints_ksp);
-PGDLLEXPORT Datum
-withPoints_ksp(PG_FUNCTION_ARGS) {
+PGDLLEXPORT Datum withPoints_ksp(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t             call_cntr;
-    uint32_t             max_calls;
     TupleDesc            tuple_desc;
 
     /*******************************************************************************/
@@ -192,16 +186,16 @@ withPoints_ksp(PG_FUNCTION_ARGS) {
         // details BOOLEAN -- DEFAULT false,
 
         PGR_DBG("Calling process");
-        PGR_DBG("initial driving side:%s", pgr_text2char(PG_GETARG_TEXT_P(7)));
+        PGR_DBG("initial driving side:%s", text_to_cstring(PG_GETARG_TEXT_P(7)));
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                pgr_text2char(PG_GETARG_TEXT_P(1)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(1)),
                 PG_GETARG_INT64(2),
                 PG_GETARG_INT64(3),
                 PG_GETARG_INT32(4),
                 PG_GETARG_BOOL(5),
                 PG_GETARG_BOOL(6),
-                pgr_text2char(PG_GETARG_TEXT_P(7)),
+                text_to_cstring(PG_GETARG_TEXT_P(7)),
                 PG_GETARG_BOOL(8),
                 &result_tuples,
                 &result_count);
@@ -209,7 +203,11 @@ withPoints_ksp(PG_FUNCTION_ARGS) {
         /*                                                                             */
         /*******************************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
@@ -222,12 +220,10 @@ withPoints_ksp(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -247,26 +243,23 @@ withPoints_ksp(PG_FUNCTION_ARGS) {
            OUT seq INTEGER, OUT path_id INTEGER, OUT path_seq INTEGER,
            OUT node BIGINT, OUT edge BIGINT,
            OUT cost FLOAT, OUT agg_cost FLOAT)
-        */
+           */
 
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum((int)(result_tuples[call_cntr].start_id + 1));
-        values[2] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum((int)(result_tuples[funcctx->call_cntr].start_id + 1));
+        values[2] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
         /*******************************************************************************/
 
         tuple =heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/ksp/src/withPoints_ksp_driver.cpp b/src/ksp/src/withPoints_ksp_driver.cpp
index c2e478a..a42d099 100644
--- a/src/ksp/src/withPoints_ksp_driver.cpp
+++ b/src/ksp/src/withPoints_ksp_driver.cpp
@@ -27,19 +27,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#include "./withPoints_ksp_driver.h"
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
 
 #include <sstream>
 #include <deque>
 #include <vector>
+
 #include "./pgr_ksp.hpp"
-#include "./withPoints_ksp_driver.h"
+
 #include "./../../withPoints/src/pgr_withPoints.hpp"
 #include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 
 
 // CREATE OR REPLACE FUNCTION pgr_withPointsKSP(
@@ -55,8 +54,8 @@ do_pgr_withPointsKsp(
         pgr_edge_t  *edges,           size_t total_edges,
         Point_on_edge_t  *points_p,   size_t total_points,
         pgr_edge_t  *edges_of_points, size_t total_edges_of_points,
-        int64_t start_vid,
-        int64_t end_vid,
+        int64_t start_pid,
+        int64_t end_pid,
         int k,
         bool directed,
         bool heap_paths,
@@ -64,29 +63,41 @@ do_pgr_withPointsKsp(
         bool details,
         General_path_element_t **return_tuples,
         size_t *return_count,
+        char ** log_msg,
+        char ** notice_msg,
         char ** err_msg) {
+
     std::ostringstream log;
+    std::ostringstream err;
+    std::ostringstream notice;
     try {
-        /*
-         * This is the original state
-         */
-        if (*err_msg) free(err_msg);
-        if (*return_tuples) free(return_tuples);
-        (*return_count) = 0;
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert(*return_count == 0);
+        pgassert(total_edges != 0);
+
+        log << "entering do_pgr_withPointsKsp\n";
 
         std::vector< Point_on_edge_t >
             points(points_p, points_p + total_points);
 
-        int errcode = check_points(points, log);
+        log << "total points" << points.size() << "\n";
+
+        auto errcode = check_points(points, log);
         if (errcode) {
-            return errcode;
+            *log_msg = strdup(log.str().c_str());
+            err << "Unexpected point(s) with same pid but different edge/fraction/side combination found.";
+            *err_msg = strdup(err.str().c_str());
+            return -1;
         }
 
-
         std::vector< pgr_edge_t >
             edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
 
         std::vector< pgr_edge_t > new_edges;
+
         create_new_edges(
                 points,
                 edges_to_modify,
@@ -95,33 +106,51 @@ do_pgr_withPointsKsp(
                 log);
 
 
+
+        int64_t start_vid(start_pid);
+        int64_t end_vid(end_pid);
+
+        log << "start_pid" << start_pid << "\n";
+        log << "end_pid" << end_pid << "\n";
+        log << "driving_side" << driving_side << "\n";
+        log << "start_vid" << start_vid << "\n";
+        log << "end_vid" << end_vid << "\n";
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
         std::deque< Path > paths;
 
+        auto vertices(pgrouting::extract_vertices(edges, total_edges));
+        vertices = pgrouting::extract_vertices(vertices, new_edges);
+
+        log << "extracted vertices: ";
+        for (const auto v : vertices) {
+            log << v.id << ", ";
+        }
+        log << "\n";
+
         if (directed) {
             log << "Working with directed Graph\n";
-            pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
+            pgrouting::DirectedGraph digraph(vertices, gType);
+            digraph.insert_edges(edges, total_edges);
+            log << "graph after inserting edges\n";
+            log << digraph << "\n";
+
+            digraph.insert_edges(new_edges);
+            log << "graph after inserting new edges\n";
+            log << digraph << "\n";
+
             Pgr_ksp< pgrouting::DirectedGraph  > fn_yen;
             paths = fn_yen.Yen(digraph, start_vid, end_vid, k, heap_paths);
+            // pgassert(true==false);
         } else {
             log << "Working with undirected Graph\n";
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
+            undigraph.insert_edges(edges, total_edges);
+            undigraph.insert_edges(new_edges);
             Pgr_ksp< pgrouting::UndirectedGraph > fn_yen;
             paths = fn_yen.Yen(undigraph, start_vid, end_vid, k, heap_paths);
         }
 
-#if 0
-        for (auto &path : paths) {
-            path.print_path(log);
-            adjust_pids(points, path);
-            path.print_path(log);
-        }
-#endif
 
         if (!details) {
             for (auto &path : paths) {
@@ -153,15 +182,26 @@ do_pgr_withPointsKsp(
         (*return_count) = sequence;
 
 
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
+        *log_msg = strdup(log.str().c_str());
         return 0;
-    } catch ( ... ) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
+    } catch (AssertFailedException &except) {
+        if (*return_tuples) free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = strdup(err.str().c_str());
+        *log_msg = strdup(log.str().c_str());
+    } catch (std::exception &except) {
+        if (*return_tuples) free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = strdup(err.str().c_str());
+        *log_msg = strdup(log.str().c_str());
+    } catch(...) {
+        if (*return_tuples) free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = strdup(err.str().c_str());
+        *log_msg = strdup(log.str().c_str());
     }
     return 1000;
 }
diff --git a/src/ksp/src/withPoints_ksp_driver.h b/src/ksp/src/withPoints_ksp_driver.h
index fb09eec..2d95c2a 100644
--- a/src/ksp/src/withPoints_ksp_driver.h
+++ b/src/ksp/src/withPoints_ksp_driver.h
@@ -54,9 +54,12 @@ extern "C" {
 
             General_path_element_t **return_tuples,
             size_t *return_count,
+            char ** log_msg,
+            char ** notice_msg,
             char ** err_msg);
 
+
 #ifdef __cplusplus
-}
+    }
 #endif
 
diff --git a/src/ksp/test/doc-ksp-v2.test.sql b/src/ksp/test/doc-ksp-v2.test.sql
index 15beb93..55f8e64 100644
--- a/src/ksp/test/doc-ksp-v2.test.sql
+++ b/src/ksp/test/doc-ksp-v2.test.sql
@@ -1,4 +1,3 @@
-SET client_min_messages TO NOTICE;
 
 \echo --q1
 
diff --git a/src/ksp/test/doc-ksp.test.sql b/src/ksp/test/doc-ksp.test.sql
index 81d6b79..e68f2c1 100644
--- a/src/ksp/test/doc-ksp.test.sql
+++ b/src/ksp/test/doc-ksp.test.sql
@@ -1,42 +1,41 @@
 --------------------------------------------------------------------------------
---              PGR_ksp V3
+--              PGR_KSP V3
 --------------------------------------------------------------------------------
-SET client_min_messages TO NOTICE;
 
 \echo --q1
 
-   SELECT * FROM pgr_ksp(
+   SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, 
       true   -- takes the (V2.0) signature (has_rcost = true and works on directed graph)
    );
 
 
-   SELECT * FROM pgr_ksp(
+   SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2,
       directed:=true   -- takes the new signature
    );
 
-   SELECT * FROM pgr_ksp(
+   SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2
    );
 
 \echo --q2
 
-   SELECT * FROM pgr_ksp(
+   SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2
    );
   
 
-   SELECT * FROM pgr_ksp(
+   SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, heap_paths:=true
    );
 
-   SELECT * FROM pgr_ksp(
+   SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, true, true
    );
@@ -44,12 +43,12 @@ SET client_min_messages TO NOTICE;
 
 \echo --q3
 
-  SELECT * FROM pgr_ksp(
+  SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, directed:=false
    );
 
-  SELECT * FROM pgr_ksp(
+  SELECT * FROM pgr_KSP(
      'SELECT id, source, target, cost, reverse_cost FROM edge_table',
       2, 12, 2, false, true
    );
@@ -57,23 +56,23 @@ SET client_min_messages TO NOTICE;
 
 \echo --q4
 
-  SELECT  * FROM pgr_ksp(
+  SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 3, 2
    );
 
 
-  SELECT  * FROM pgr_ksp(
+  SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2
    );
 
-  SELECT   * FROM pgr_ksp(
+  SELECT   * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, heap_paths:=true
    );
 
-  SELECT  * FROM pgr_ksp(
+  SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, true, true
    );
@@ -81,12 +80,12 @@ SET client_min_messages TO NOTICE;
 
 \echo --q5
 
-  SELECT  * FROM pgr_ksp(
+  SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, directed:=false
    );
   
-  SELECT  * FROM pgr_ksp(
+  SELECT  * FROM pgr_KSP(
      'SELECT id, source, target, cost FROM edge_table',
       2, 12, 2, directed:=false, heap_paths:=true
    );
diff --git a/src/ksp/test/ksp-network.result b/src/ksp/test/ksp-network.result
index d5b5a80..9620cb7 100644
--- a/src/ksp/test/ksp-network.result
+++ b/src/ksp/test/ksp-network.result
@@ -1,184 +1,2 @@
 t|t|t
 t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
-t|t|t
diff --git a/src/ksp/test/ksp-network.test.sql b/src/ksp/test/ksp-network.test.sql
index c102968..223e7ea 100644
--- a/src/ksp/test/ksp-network.test.sql
+++ b/src/ksp/test/ksp-network.test.sql
@@ -1,5 +1,3 @@
-BEGIN;
-SET client_min_messages TO NOTICE;
 --
 -- Generate 15 shortest paths between nodes 4 and 5
 -- with auto detection
@@ -102,42 +100,17 @@ END $$;
 
 
 -- TESTS START
-/*
-SELECT seq, path_id, node, edge, round(cost::numeric, 4) from pgr_ksp(
-    'SELECT id, source, target, cost from network order by id',
-    4, 5::BIGINT,
-    15);
-
-SELECT path_id, round(sum(cost)::numeric,4) from pgr_ksp(
-    'SELECT id, source, target, cost from network order by id',
-    4, 5::BIGINT,
-    15) group by path_id order by path_id;
-*/
 
--- the equality conditions
-SELECT node = network.source,  edge = network.id, round(network.cost::numeric,4) = round(result.cost::numeric, 4) from pgr_ksp(
+SELECT DISTINCT node = network.source AS e1,  edge = network.id AS e2, round(network.cost::numeric,4) = round(result.cost::numeric, 4) AS e3
+FROM pgr_ksp(
     'SELECT id, source, target, cost from network order by id',
     4, 5::BIGINT,
-    15) result, network where id = edge order by seq;
-
+    15) result, network where id = edge order by e1, e2, e3;
 
---VERSION 2.0
-/*
-SELECT seq, path_id, node, edge, round(cost::numeric, 4), round(agg_cost::numeric,4) from pgr_ksp(
-    'SELECT id, source, target, cost from network order by id',
-    4, 5,
-    15);
-
-SELECT path_id, round(agg_cost::numeric,4) from pgr_ksp(
-    'SELECT id, source, target, cost from network order by id',
-    4, 5,
-    15) WHERE edge = -1;
-*/
 
--- the equality conditions
-SELECT node = network.source,  edge = network.id, round(network.cost::numeric,4) = round(result.cost::numeric, 4) from pgr_ksp(
+SELECT DISTINCT node = network.source AS e1,  edge = network.id AS e2, round(network.cost::numeric,4) = round(result.cost::numeric, 4) AS e3
+FROM pgr_ksp(
     'SELECT id, source, target, cost from network order by id',
     4, 5,
-    15) AS result, network WHERE id = edge ORDER BY seq;
+    15) result, network where id = edge order by e1, e2, e3;
 
-ROLLBACK;
diff --git a/src/ksp/test/test.conf b/src/ksp/test/test.conf
index a0541bc..7c69560 100644
--- a/src/ksp/test/test.conf
+++ b/src/ksp/test/test.conf
@@ -5,10 +5,9 @@
         'comment' => 'KSP',
         'data' => [''],
         'tests' => [qw(
-            ksp-network
-
-            doc-ksp
             doc-ksp-v2
+            doc-ksp
+            ksp-network
             )],
         'documentation' => [qw(
             doc-ksp
@@ -16,6 +15,7 @@
             )]
     },
 #    'vpg-vpgis' => {}, # for version specific tests
+    #       doc-ksp-v2
 #    '8-1' => {},       # for pg 8.x and postgis 1.x
 #    '9.2-2.1' => {},   # for pg 9.2 and postgis 2.1
 );
diff --git a/src/label_graph/doc/doc-pgr_labelGraph.queries b/src/label_graph/doc/doc-pgr_labelGraph.queries
index 245a3dc..5162e5f 100644
--- a/src/label_graph/doc/doc-pgr_labelGraph.queries
+++ b/src/label_graph/doc/doc-pgr_labelGraph.queries
@@ -1,8 +1,10 @@
 BEGIN;
 BEGIN
-SET client_min_messages TO ERROR;
+SET client_min_messages TO NOTICE;
 SET
 --q1
+SET client_min_messages TO WARNING;
+SET
 SELECT pgr_labelGraph('edge_table', 'id', 'source', 'target', 'subgraph');
  pgr_labelgraph 
 ----------------
@@ -18,7 +20,5 @@ SELECT subgraph, count(*) FROM edge_table group by subgraph;
 (3 rows)
 
 --q2
-SET client_min_messages TO DEBUG;
-SET
 ROLLBACK;
 ROLLBACK
diff --git a/src/label_graph/doc/pgr_labelGraph.rst b/src/label_graph/doc/pgr_labelGraph.rst
index 721bdc3..2464588 100644
--- a/src/label_graph/doc/pgr_labelGraph.rst
+++ b/src/label_graph/doc/pgr_labelGraph.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
    ****************************************************************************
     pgRouting Manual
@@ -19,9 +19,9 @@ Name
 
 ``pgr_labelGraph`` — Locates and labels sub-networks within a network which are not topologically connected.
 
-.. include:: ../../proposed.rst
-    :start-after: begin-warning
-    :end-before: end-warning
+.. include:: proposed.rst
+    :start-after: begin-warn-expr
+    :end-before: end-warn-expr
 
 
 Synopsis
@@ -33,9 +33,9 @@ The function returns:
 
   - ``OK`` when a column with provided name has been generated and populated successfully. All connected edges will have unique similar integer values. In case of ``rows_where`` condition, non participating rows will have -1 integer values.
   - ``FAIL`` when the processing cannot be finished due to some error. Notice will be thrown accordingly.
-  - ``rows_where condition generated 0 rows`` when passed SQL condition has not been fulfilled by any row. 
+  - ``rows_where condition generated 0 rows`` when passed SQL condition has not been fulfilled by any row.
 
-.. index:: 
+.. index::
 	single: labelGraph(Complete Signature) - Proposed
 
 .. code-block:: sql
@@ -52,7 +52,7 @@ A network behind any routing query may consist of sub-networks completely isolat
 - An island with no bridge connecting to the mainland.
 - An edge or mesh of edges failed to connect to other networks because of human negligence during data generation.
 - The data is not properly noded.
-- Topology creation failed to succeed. 
+- Topology creation failed to succeed.
 
 pgr_labelGraph() will create an integer column (with the name provided by the user) and will assign same integer values to all those edges in the network which are connected topologically. Thus better analysis regarding network structure is possible. In case of ``rows_where`` condition, non participating rows will have -1 integer values.
 
@@ -66,7 +66,7 @@ Function accepts the following parameters:
 :source: ``text`` Source column name generated after ``pgr_createTopology()``. Default is ``source``.
 :target: ``text`` Target column name generated after ``pgr_createTopology()``. Default is ``target``.
 :subgraph: ``text`` Column name which will hold the integer labels for each sub-graph. Default is ``subgraph``.
-:rows_where: ``text`` The SQL where condition. Default is ``true``, means the processing will be done on the whole table. 
+:rows_where: ``text`` The SQL where condition. Default is ``true``, means the processing will be done on the whole table.
 
 
 
diff --git a/src/label_graph/test/CMakeLists.txt b/src/label_graph/test/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/label_graph/test/doc-pgr_labelGraph.test.sql b/src/label_graph/test/doc-pgr_labelGraph.test.sql
index b539e81..3d8d7af 100644
--- a/src/label_graph/test/doc-pgr_labelGraph.test.sql
+++ b/src/label_graph/test/doc-pgr_labelGraph.test.sql
@@ -1,8 +1,5 @@
-BEGIN;
-SET client_min_messages TO ERROR;
 \echo --q1
+SET client_min_messages TO WARNING;
 SELECT pgr_labelGraph('edge_table', 'id', 'source', 'target', 'subgraph');
 SELECT subgraph, count(*) FROM edge_table group by subgraph;
 \echo --q2
-SET client_min_messages TO DEBUG;
-ROLLBACK;
diff --git a/src/label_graph/test/pgrouting_labelgraph.test.sql b/src/label_graph/test/pgrouting_labelgraph.test.sql
index 5160957..76b810d 100644
--- a/src/label_graph/test/pgrouting_labelgraph.test.sql
+++ b/src/label_graph/test/pgrouting_labelgraph.test.sql
@@ -20,8 +20,6 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
-set client_min_messages to warning;
-SET search_path TO public;
 drop table if exists "ways";
 
 -- The following should be OK
diff --git a/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql b/src/max_flow/doc/doc-pgr_maxFlow.queries
similarity index 72%
copy from src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
copy to src/max_flow/doc/doc-pgr_maxFlow.queries
index f8c5056..7957e35 100644
--- a/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
+++ b/src/max_flow/doc/doc-pgr_maxFlow.queries
@@ -1,62 +1,75 @@
---These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
---The edge in the edge table are augmented with road-like categories for capacity values.
-
-BEGIN;
-
-SET client_min_messages TO NOTICE;
-
-\echo -- q1
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, 11
-);
-
-\echo -- q2
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, ARRAY[11, 1, 13]
-);
-
-\echo -- q3
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], 11
-);
-
-\echo -- q4
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
-);
-
-\echo -- q5
-
-ROLLBACK;
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
+-- q1
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, 11
+);
+ pgr_maxflow 
+-------------
+         280
+(1 row)
+
+-- q2
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, ARRAY[11, 1, 13]
+);
+ pgr_maxflow 
+-------------
+         410
+(1 row)
+
+-- q3
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], 11
+);
+ pgr_maxflow 
+-------------
+         280
+(1 row)
+
+-- q4
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
+);
+ pgr_maxflow 
+-------------
+         460
+(1 row)
+
+-- q5
+ROLLBACK;
+ROLLBACK
diff --git a/src/max_flow/doc/maxFlow.rst b/src/max_flow/doc/flow-family.rst
similarity index 74%
rename from src/max_flow/doc/maxFlow.rst
rename to src/max_flow/doc/flow-family.rst
index 2e03328..3286af8 100644
--- a/src/max_flow/doc/maxFlow.rst
+++ b/src/max_flow/doc/flow-family.rst
@@ -9,27 +9,36 @@
 
 .. _maxFlow:
 
-Maximum Flow
+Flow - Family of functions
 ===================================
 
-  - :ref:`pgr_maxFlowPushRelabel` - Push and relabel algorithm implementation for maximum flow.
-  - :ref:`pgr_maxFlowEdmondsKarp` - Edmonds and Karp algorithm implementation for maximum flow.
-  - :ref:`pgr_maxFlowBoykovKolmogorov` - Boykov and Kolmogorov algorithm implementation for maximum flow.
+.. index from here
 
-The maximum flow through the graph is guaranteed to be the same with all implementations,
-but the actual flow through each edge may vary.
+* :ref:`pgr_maxFlow` - Only the Max flow calculation using Push and Relabel algorithm.
+* :ref:`pgr_maxFlowBoykovKolmogorov` - Boykov and Kolmogorov with details of flow on edges.
+* :ref:`pgr_maxFlowEdmondsKarp` - Edmonds and Karp algorithm with details of flow on edges.
+* :ref:`pgr_maxFlowPushRelabel` - Push and relabel algorithm with details of flow on edges.
+* Applications
+
+  * :ref:`pgr_edgeDisjointPaths` - Calculates edge disjoint paths between two groups of vertices.
+  * :ref:`pgr_maximumCardinalityMatching` - Calculates a maximum cardinality matching in a graph.
 
+.. index to here
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 .. toctree::
-        :hidden:
+    :hidden:
 
-        ./pgr_maxFlowPushRelabel
-        ./pgr_maxFlowEdmondsKarp
-        ./pgr_maxFlowBoykovKolmogorov
+    pgr_maxFlow
+    pgr_maxFlowBoykovKolmogorov
+    pgr_maxFlowEdmondsKarp
+    pgr_maxFlowPushRelabel
+    pgr_edgeDisjointPaths
+    pgr_maximumCardinalityMatching
 
 
 Problem definition
@@ -41,6 +50,8 @@ Additionally, the incoming and outgoing flow of a node must be equal except the
 
 Maximum flow algorithms calculate the maximum flow through the graph and the flow of each edge.
 
+The maximum flow through the graph is guaranteed to be the same with all implementations,
+but the actual flow through each edge may vary.
 Given the following query:
 
 pgr_maxFlow :math:`(edges\_sql, source\_vertex, sink\_vertex)`
diff --git a/src/max_flow/doc/maxFlowApplications.rst b/src/max_flow/doc/maxFlowApplications.rst
index 2af0a2f..620b2c5 100644
--- a/src/max_flow/doc/maxFlowApplications.rst
+++ b/src/max_flow/doc/maxFlowApplications.rst
@@ -18,9 +18,9 @@ Applications of Maximum Flow
 Maximum flow algorithms provide solutions to other graph problems.
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
 .. toctree::
diff --git a/src/max_flow/doc/pgr_edgeDisjointPaths.rst b/src/max_flow/doc/pgr_edgeDisjointPaths.rst
index c914dd4..ae9f8ff 100644
--- a/src/max_flow/doc/pgr_edgeDisjointPaths.rst
+++ b/src/max_flow/doc/pgr_edgeDisjointPaths.rst
@@ -18,12 +18,12 @@ Name
 
 ``pgr_edgeDisjointPaths`` — Calculates edge disjoint paths between two groups of vertices.
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/boykov_kolmogorov_max_flow.html
 
    Boost Graph Inside
diff --git a/src/max_flow/doc/pgr_maxFlowPushRelabel.rst b/src/max_flow/doc/pgr_maxFlow.rst
similarity index 57%
copy from src/max_flow/doc/pgr_maxFlowPushRelabel.rst
copy to src/max_flow/doc/pgr_maxFlow.rst
index b56ff46..327e1cb 100644
--- a/src/max_flow/doc/pgr_maxFlowPushRelabel.rst
+++ b/src/max_flow/doc/pgr_maxFlow.rst
@@ -7,30 +7,25 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-   INSTRUCTIONS
-   - if section consists of only one value then use this file as index.rst
-   - change [...] (including the square braquets) to appropriate values
-   - one file / function,  may signatures of the same function go in the same file
+.. _pgr_maxFlow:
 
-.. _pgr_maxFlowPushRelabel:
-
-pgr_maxFlowPushRelabel Proposed
+pgr_maxFlow Proposed
 ============================================
 
 
 Name
 ----
 
-``pgr_maxFlowPushRelabel`` — Calculates the maximum flow in a directed graph given a source and a destination.
+``pgr_maxFlow`` — Calculates the maximum flow in a directed graph given source(s) and sink(s).
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
-   :target: http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html 
+.. figure:: images/boost-inside.jpeg
+   :target: http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html
 
    Boost Graph Inside
 
@@ -39,7 +34,6 @@ Synopsis
 -------------------------------------------------------------------------------
 
 Calculates the maximum flow in a directed graph from a source node to a sink node.
-Edges must be weighted with non-negative capacities.
 
 Characteristics:
 ----------------
@@ -47,7 +41,8 @@ Characteristics:
 The main characterics are:
   - Calculates the flow/residual capacity for each edge. In the output, edges with zero flow are omitted.
   - The maximum flow through the graph can be calculated by aggregation on source/sink.
-  - Returns nothing if source and sink are the same.
+  - Edges must be weighted with non-negative capacities.
+  - Returns 0 if source and sink are the same.
   - Allows multiple sources and sinks.
   - Running time: :math:`O( V ^ 3)`
 
@@ -56,19 +51,18 @@ Signature Summary
 
 .. code-block:: none
 
-    pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertex)
-    pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertex)
-    pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertices)
-    pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
-      OR EMPTY SET
+    pgr_maxFlow(edges_sql, source_vertex,  sink_vertex)
+    pgr_maxFlow(edges_sql, source_vertices,  sink_vertex)
+    pgr_maxFlow(edges_sql, source_vertex,  sink_vertices)
+    pgr_maxFlow(edges_sql, source_vertices,  sink_vertices)
+    RETURNS BIGINT
 
 
 Signatures
 -----------------------
 
 .. index::
-    single: maxFlowPushRelabel(One to One) - Proposed
+    single: maxFlow(One to One) - Proposed
 
 One to One
 .....................................................................
@@ -77,19 +71,18 @@ Calculates the maximum flow from one source vertex to one sink vertex in a direc
 
 .. code-block:: none
 
-    pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
-      OR EMPTY SET
+    pgr_maxFlow(edges_sql, source_vertex,  sink_vertex)
+    RETURNS BIGINT
 
 :Example:
 
-.. literalinclude:: doc-pgr_maxFlowPushRelabel.queries
+.. literalinclude:: doc-pgr_maxFlow.queries
    :start-after: -- q1
    :end-before: -- q2
 
 
 .. index::
-    single: maxFlowPushRelabel(One to Many) - Proposed
+    single: maxFlow(One to Many) - Proposed
 
 One to Many
 .....................................................................
@@ -98,19 +91,18 @@ Ccalculates the maximum flow from one source vertex to many sink vertices in a d
 
 .. code-block:: none
 
-    pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
-      OR EMPTY SET
+    pgr_maxFlow(edges_sql, source_vertex,  sink_vertices)
+    RETURNS BIGINT
 
 :Example:
 
-.. literalinclude:: doc-pgr_maxFlowPushRelabel.queries
+.. literalinclude:: doc-pgr_maxFlow.queries
    :start-after: -- q2
    :end-before: -- q3
 
 
 .. index::
-    single: maxFlowPushRelabel(Many to One) - Proposed
+    single: maxFlow(Many to One) - Proposed
 
 Many to One
 .....................................................................
@@ -119,19 +111,18 @@ Calculates the maximum flow from many source vertices to one sink vertex in a di
 
 .. code-block:: none
 
-    pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
-      OR EMPTY SET
+    pgr_maxFlow(edges_sql, source_vertices,  sink_vertex)
+    RETURNS BIGINT
 
 :Example:
 
-.. literalinclude:: doc-pgr_maxFlowPushRelabel.queries
+.. literalinclude:: doc-pgr_maxFlow.queries
    :start-after: -- q3
    :end-before: -- q4
 
 
 .. index::
-    single: maxFlowPushRelabel(Many to Many) - Proposed
+    single: maxFlow(Many to Many) - Proposed
 
 Many to Many
 .....................................................................
@@ -140,13 +131,12 @@ Calculates the maximum flow from many sources to many sinks in a directed graph.
 
 .. code-block:: none
 
-    pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
-      OR EMPTY SET
+    pgr_maxFlow(edges_sql, source_vertices,  sink_vertices)
+    RETURNS BIGINT
 
 :Example:
 
-.. literalinclude:: doc-pgr_maxFlowPushRelabel.queries
+.. literalinclude:: doc-pgr_maxFlow.queries
    :start-after: -- q4
    :end-before: -- q5
 
@@ -185,25 +175,12 @@ Column            Type                   Description
 **sink_vertex**   ``BIGINT``             Identifier of the sink vertex(or vertices).
 ================= ====================== =================================================
 
-Description of the Return Values
-.....................................................................
-
-=====================  ====================  =================================================
-Column                 Type                  Description
-=====================  ====================  =================================================
-**seq**                ``INT``               Sequential value starting from **1**.
-**edge_id**            ``BIGINT``            Identifier of the edge in the original query(edges_sql).
-**source**             ``BIGINT``            Identifier of the first end point vertex of the edge.
-**target**             ``BIGINT``            Identifier of the second end point vertex of the edge.
-**flow**               ``BIGINT``            Flow through the edge in the direction (source, target).
-**residual_capacity**  ``BIGINT``            Residual capacity of the edge in the direction (source, target).
-=====================  ====================  =================================================
 
 See Also
 --------
 
 * :ref:`maxFlow`
-* http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html 
+* http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html
 * https://en.wikipedia.org/wiki/Push%E2%80%93relabel_maximum_flow_algorithm
 
 .. rubric:: Indices and tables
diff --git a/src/max_flow/doc/pgr_maxFlowBoykovKolmogorov.rst b/src/max_flow/doc/pgr_maxFlowBoykovKolmogorov.rst
index 435d12e..31d1f2b 100644
--- a/src/max_flow/doc/pgr_maxFlowBoykovKolmogorov.rst
+++ b/src/max_flow/doc/pgr_maxFlowBoykovKolmogorov.rst
@@ -25,13 +25,13 @@ Name
 
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/boykov_kolmogorov_max_flow.html
 
    Boost Graph Inside
@@ -65,7 +65,7 @@ Signature Summary
     pgr_maxFlowBoykovKolmogorov(edges_sql, source_vertices,  sink_vertex)
     pgr_maxFlowBoykovKolmogorov(edges_sql, source_vertex,  sink_vertices)
     pgr_maxFlowBoykovKolmogorov(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 
@@ -83,7 +83,7 @@ The available signature calculates the maximum flow from one source vertex to on
 .. code-block:: none
 
     pgr_maxFlowBoykovKolmogorov(edges_sql, source_vertex,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -125,7 +125,7 @@ The available signature calculates the maximum flow from many source vertices to
 .. code-block:: none
 
     pgr_maxFlowBoykovKolmogorov(edges_sql, source_vertices,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -146,7 +146,7 @@ The available signature calculates the maximum flow from many sources to many si
 .. code-block:: none
 
     pgr_maxFlowBoykovKolmogorov(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
diff --git a/src/max_flow/doc/pgr_maxFlowEdmondsKarp.rst b/src/max_flow/doc/pgr_maxFlowEdmondsKarp.rst
index b7a46aa..7bcf50b 100644
--- a/src/max_flow/doc/pgr_maxFlowEdmondsKarp.rst
+++ b/src/max_flow/doc/pgr_maxFlowEdmondsKarp.rst
@@ -20,12 +20,12 @@ Name
 ``pgr_maxFlowEdmondsKarp`` — Calculates the maximum flow in a directed graph given a source and a destination. Implemented by Boost Graph Library.
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/edmonds_karp_max_flow.html
 
    Boost Graph Inside
@@ -76,7 +76,7 @@ Calculates the maximum flow from one source vertex to one sink vertex on a `dire
 .. code-block:: none
 
     pgr_maxFlowEdmondsKarp(edges_sql, source_vertex,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -96,7 +96,7 @@ Calculates the maximum flow from one source vertex to many sink vertices on a `d
 .. code-block:: none
 
     pgr_maxFlowEdmondsKarp(edges_sql, source_vertex,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -116,7 +116,7 @@ Calculates the maximum flow from many source vertices to one sink vertex on a `d
 .. code-block:: none
 
     pgr_maxFlowEdmondsKarp(edges_sql, source_vertices,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -136,7 +136,7 @@ Calculates the maximum flow from many sources to many sinks on a `directed` grap
 .. code-block:: none
 
     pgr_maxFlowEdmondsKarp(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
diff --git a/src/max_flow/doc/pgr_maxFlowPushRelabel.rst b/src/max_flow/doc/pgr_maxFlowPushRelabel.rst
index b56ff46..0516895 100644
--- a/src/max_flow/doc/pgr_maxFlowPushRelabel.rst
+++ b/src/max_flow/doc/pgr_maxFlowPushRelabel.rst
@@ -24,13 +24,13 @@ Name
 ``pgr_maxFlowPushRelabel`` — Calculates the maximum flow in a directed graph given a source and a destination.
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
-   :target: http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html 
+.. figure:: images/boost-inside.jpeg
+   :target: http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html
 
    Boost Graph Inside
 
@@ -60,7 +60,7 @@ Signature Summary
     pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertex)
     pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertices)
     pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 
@@ -78,7 +78,7 @@ Calculates the maximum flow from one source vertex to one sink vertex in a direc
 .. code-block:: none
 
     pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -99,7 +99,7 @@ Ccalculates the maximum flow from one source vertex to many sink vertices in a d
 .. code-block:: none
 
     pgr_maxFlowPushRelabel(edges_sql, source_vertex,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -120,7 +120,7 @@ Calculates the maximum flow from many source vertices to one sink vertex in a di
 .. code-block:: none
 
     pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertex)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -141,7 +141,7 @@ Calculates the maximum flow from many sources to many sinks in a directed graph.
 .. code-block:: none
 
     pgr_maxFlowPushRelabel(edges_sql, source_vertices,  sink_vertices)
-    RETURNS SET OF (id, edge_id, source, target, flow, residual_capacity)
+    RETURNS SET OF (seq, edge_id, source, target, flow, residual_capacity)
       OR EMPTY SET
 
 :Example:
@@ -203,7 +203,7 @@ See Also
 --------
 
 * :ref:`maxFlow`
-* http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html 
+* http://www.boost.org/libs/graph/doc/push_relabel_max_flow.html
 * https://en.wikipedia.org/wiki/Push%E2%80%93relabel_maximum_flow_algorithm
 
 .. rubric:: Indices and tables
diff --git a/src/max_flow/doc/pgr_maximumCardinalityMatching.rst b/src/max_flow/doc/pgr_maximumCardinalityMatching.rst
index 4c86c5d..da642ff 100644
--- a/src/max_flow/doc/pgr_maximumCardinalityMatching.rst
+++ b/src/max_flow/doc/pgr_maximumCardinalityMatching.rst
@@ -19,12 +19,12 @@ Name
 ``pgr_maximumCardinalityMatching`` — Calculates a maximum cardinality matching in a graph.
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph/doc/maximum_matching.html
 
    Boost Graph Inside
@@ -60,7 +60,7 @@ Signature Summary
     pgr_MaximumCardinalityMatching(edges_sql)
     pgr_MaximumCardinalityMatching(edges_sql, directed)
 
-    RETURNS SET OF (id, edge_id, source, target)
+    RETURNS SET OF (seq, edge_id, source, target)
         OR EMPTY SET
 
 
@@ -78,7 +78,7 @@ Minimal signature
 .. code-block:: none
 
     pgr_MaximumCardinalityMatching(edges_sql)
-    RETURNS SET OF (id, edge_id, source, target) OR EMPTY SET
+    RETURNS SET OF (seq, edge_id, source, target) OR EMPTY SET
 
 The minimal signature calculates one possible maximum cardinality matching on a `directed` graph.
 
@@ -97,7 +97,7 @@ Complete signature
 .. code-block:: none
 
     pgr_MaximumCardinalityMatching(edges_sql, directed)
-    RETURNS SET OF (id, edge_id, source, target) OR EMPTY SET
+    RETURNS SET OF (seq, edge_id, source, target) OR EMPTY SET
 
 
 The complete signature calculates one possible maximum cardinality matching.
@@ -159,7 +159,7 @@ Column                 Type                  Description
 See Also
 --------
 
-* :ref:`maxFlowApplications`
+* :ref:`maxFlow`
 * http://www.boost.org/libs/graph/doc/maximum_matching.html
 * https://en.wikipedia.org/wiki/Matching_%28graph_theory%29
 * https://en.wikipedia.org/wiki/Ackermann_function
diff --git a/src/max_flow/sql/CMakeLists.txt b/src/max_flow/sql/CMakeLists.txt
index f134c84..c20d006 100644
--- a/src/max_flow/sql/CMakeLists.txt
+++ b/src/max_flow/sql/CMakeLists.txt
@@ -1,6 +1,7 @@
 # Append in local scope
 LIST(APPEND PACKAGE_SQL_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/max_flow.sql
+        ${CMAKE_CURRENT_SOURCE_DIR}/only_flow.sql
         ${CMAKE_CURRENT_SOURCE_DIR}/maximum_cardinality_matching.sql
         ${CMAKE_CURRENT_SOURCE_DIR}/edge_disjoint_paths.sql
 )
diff --git a/src/max_flow/sql/max_flow.sql b/src/max_flow/sql/max_flow.sql
index b9f9423..3e17829 100644
--- a/src/max_flow/sql/max_flow.sql
+++ b/src/max_flow/sql/max_flow.sql
@@ -35,6 +35,7 @@ CREATE OR REPLACE FUNCTION _pgr_maxflow(
     source_vertex BIGINT,
     sink_vertex BIGINT,
     algorithm TEXT DEFAULT 'push_relabel',
+    only_flow BOOLEAN DEFAULT false,
     OUT seq INTEGER,
     OUT edge_id BIGINT,
     OUT source BIGINT,
@@ -119,6 +120,7 @@ CREATE OR REPLACE FUNCTION _pgr_maxflow(
     source_vertex BIGINT,
     sink_vertices ANYARRAY,
     algorithm TEXT DEFAULT 'push_relabel',
+    only_flow BOOLEAN DEFAULT false,
     OUT seq INTEGER,
     OUT edge_id BIGINT,
     OUT source BIGINT,
@@ -203,6 +205,7 @@ CREATE OR REPLACE FUNCTION _pgr_maxflow(
     source_vertices ANYARRAY,
     sink_vertex BIGINT,
     algorithm TEXT DEFAULT 'push_relabel',
+    only_flow BOOLEAN DEFAULT false,
     OUT seq INTEGER,
     OUT edge_id BIGINT,
     OUT source BIGINT,
@@ -287,6 +290,7 @@ CREATE OR REPLACE FUNCTION _pgr_maxflow(
     source_vertices ANYARRAY,
     sink_vertices ANYARRAY,
     algorithm TEXT DEFAULT 'push_relabel',
+    only_flow BOOLEAN DEFAULT false,
     OUT seq INTEGER,
     OUT edge_id BIGINT,
     OUT source BIGINT,
@@ -359,3 +363,4 @@ CREATE OR REPLACE FUNCTION pgr_maxFlowEdmondsKarp(
   END
   $BODY$
   LANGUAGE plpgsql VOLATILE;
+
diff --git a/src/max_flow/sql/only_flow.sql b/src/max_flow/sql/only_flow.sql
new file mode 100644
index 0000000..c71cdb5
--- /dev/null
+++ b/src/max_flow/sql/only_flow.sql
@@ -0,0 +1,86 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2015 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+/***********************************
+        ONE TO ONE
+***********************************/
+
+CREATE OR REPLACE FUNCTION pgr_maxFlow(
+    edges_sql TEXT,
+    source_vertices BIGINT,
+    sink_vertices BIGINT
+    )
+  RETURNS BIGINT AS
+  $BODY$
+        SELECT coalesce(sum(flow), 0)::BIGINT
+        FROM _pgr_maxflow(_pgr_get_statement($1), $2, $3, algorithm := 'push_relabel', only_flow := true);
+  $BODY$
+  LANGUAGE SQL VOLATILE;
+
+/***********************************
+        ONE TO MANY
+***********************************/
+
+CREATE OR REPLACE FUNCTION pgr_maxFlow(
+    edges_sql TEXT,
+    source_vertices BIGINT,
+    sink_vertices ANYARRAY
+    )
+  RETURNS BIGINT AS
+  $BODY$
+        SELECT flow
+        FROM _pgr_maxflow(_pgr_get_statement($1), $2, $3, algorithm := 'push_relabel', only_flow := true);
+  $BODY$
+  LANGUAGE SQL VOLATILE;
+
+/***********************************
+        MANY TO ONE
+***********************************/
+
+CREATE OR REPLACE FUNCTION pgr_maxFlow(
+    edges_sql TEXT,
+    source_vertices ANYARRAY,
+    sink_vertices BIGINT
+    )
+  RETURNS BIGINT AS
+  $BODY$
+        SELECT flow
+        FROM _pgr_maxflow(_pgr_get_statement($1), $2, $3, algorithm := 'push_relabel', only_flow := true);
+  $BODY$
+  LANGUAGE SQL VOLATILE;
+
+/***********************************
+        MANY TO MANY
+***********************************/
+
+CREATE OR REPLACE FUNCTION pgr_maxFlow(
+    edges_sql TEXT,
+    source_vertices ANYARRAY,
+    sink_vertices ANYARRAY
+    )
+  RETURNS BIGINT AS
+  $BODY$
+        SELECT flow
+        FROM _pgr_maxflow(_pgr_get_statement($1), $2, $3, algorithm := 'push_relabel', only_flow := true);
+  $BODY$
+  LANGUAGE SQL VOLATILE;
diff --git a/src/max_flow/src/CMakeLists.txt b/src/max_flow/src/CMakeLists.txt
index aa26d81..483741b 100644
--- a/src/max_flow/src/CMakeLists.txt
+++ b/src/max_flow/src/CMakeLists.txt
@@ -11,15 +11,7 @@ ADD_LIBRARY(max_flow OBJECT
         edge_disjoint_paths_many_to_many.c
         edge_disjoint_paths_many_to_one.c
 
-        max_flow_one_to_one_driver.cpp
-        max_flow_many_to_many_driver.cpp
-        max_flow_one_to_many_driver.cpp
-        max_flow_many_to_one_driver.cpp
-
+        max_flow_driver.cpp
         maximum_cardinality_matching_driver.cpp
-
-        edge_disjoint_paths_one_to_one_driver.cpp
-        edge_disjoint_paths_one_to_many_driver.cpp
-        edge_disjoint_paths_many_to_many_driver.cpp
-        edge_disjoint_paths_many_to_one_driver.cpp
+        edge_disjoint_paths_driver.cpp
 )
diff --git a/src/max_flow/src/edge_disjoint_paths_many_to_many_driver.cpp b/src/max_flow/src/edge_disjoint_paths_driver.cpp
similarity index 58%
rename from src/max_flow/src/edge_disjoint_paths_many_to_many_driver.cpp
rename to src/max_flow/src/edge_disjoint_paths_driver.cpp
index 172ead6..00f3c4c 100644
--- a/src/max_flow/src/edge_disjoint_paths_many_to_many_driver.cpp
+++ b/src/max_flow/src/edge_disjoint_paths_driver.cpp
@@ -27,29 +27,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./pgr_edgedisjointpaths.hpp"
 
 #include <sstream>
 #include <vector>
 #include <set>
 
-#include "./pgr_edgedisjointpaths.hpp"
-#include "./edge_disjoint_paths_many_to_many_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
+#include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
-}
+
+#include "./edge_disjoint_paths_driver.h"
 
 void
-do_pgr_edge_disjoint_paths_many_to_many(
+do_pgr_edge_disjoint_paths(
     pgr_basic_edge_t *data_edges,
-    size_t total_tuples,
+    size_t total_edges,
     int64_t *source_vertices,
     size_t size_source_verticesArr,
     int64_t *sink_vertices,
@@ -57,9 +50,12 @@ do_pgr_edge_disjoint_paths_many_to_many(
     bool directed,
     General_path_element_t **return_tuples,
     size_t *return_count,
+    char** log_msg,
+    char** notice_msg,
     char **err_msg) {
     std::ostringstream log;
-
+    std::ostringstream notice;
+    std::ostringstream err;
     try {
         std::vector<General_path_element_t> path_elements;
         std::set<int64_t> set_source_vertices;
@@ -70,14 +66,17 @@ do_pgr_edge_disjoint_paths_many_to_many(
         for (size_t i = 0; i < size_sink_verticesArr; ++i) {
             set_sink_vertices.insert(sink_vertices[i]);
         }
-        PgrEdgeDisjointPathsGraph<FlowGraph> G;
 
-        // I use a directed graph since I'm dependent on directed graphs
+        pgrouting::flow::PgrEdgeDisjointPathsGraph<pgrouting::FlowGraph> G;
 
-        G.create_edge_disjoint_paths_graph(data_edges, total_tuples,
-                                           set_source_vertices,
-                                           set_sink_vertices, directed);
-        int64_t flow = G.boykov_kolmogorov();
+        /*
+         * boykov_kolmogorov is only for directed graphs
+         */
+
+        G.create_edge_disjoint_paths_graph(data_edges, total_edges,
+                set_source_vertices,
+                set_sink_vertices, directed);
+        auto flow = G.boykov_kolmogorov();
         G.get_edge_disjoint_paths(path_elements, flow);
 
         (*return_tuples) = pgr_alloc(path_elements.size(), (*return_tuples));
@@ -86,21 +85,30 @@ do_pgr_edge_disjoint_paths_many_to_many(
         }
         *return_count = path_elements.size();
 
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
+
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
-
-
-
-
-
diff --git a/src/max_flow/src/edge_disjoint_paths_many_to_many_driver.h b/src/max_flow/src/edge_disjoint_paths_driver.h
similarity index 84%
rename from src/max_flow/src/edge_disjoint_paths_many_to_many_driver.h
rename to src/max_flow/src/edge_disjoint_paths_driver.h
index 3c86396..f25dfe6 100644
--- a/src/max_flow/src/edge_disjoint_paths_many_to_many_driver.h
+++ b/src/max_flow/src/edge_disjoint_paths_driver.h
@@ -27,8 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_MANY_TO_MANY_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_MANY_TO_MANY_DRIVER_H_
+#ifndef SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_DRIVER_H_
+#define SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_DRIVER_H_
 
 #include "./../../common/src/pgr_types.h"
 
@@ -37,7 +37,7 @@ extern "C" {
 #endif
 
     void
-        do_pgr_edge_disjoint_paths_many_to_many(
+        do_pgr_edge_disjoint_paths(
             pgr_basic_edge_t *data_edges,
             size_t total_tuples,
             int64_t *source_vertices,
@@ -47,11 +47,13 @@ extern "C" {
             bool directed,
             General_path_element_t **return_tuples,
             size_t *return_count,
-            char **err_msg);
+            char** log_msg,
+            char** notice_msg,
+            char** err_msg);
 
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  // SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_MANY_TO_MANY_DRIVER_H_
+#endif  // SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_DRIVER_H_
diff --git a/src/max_flow/src/edge_disjoint_paths_many_to_many.c b/src/max_flow/src/edge_disjoint_paths_many_to_many.c
index 84c60bc..93c01ee 100644
--- a/src/max_flow/src/edge_disjoint_paths_many_to_many.c
+++ b/src/max_flow/src/edge_disjoint_paths_many_to_many.c
@@ -27,102 +27,101 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./edge_disjoint_paths_many_to_many_driver.h"
+#include "./edge_disjoint_paths_driver.h"
 
 PGDLLEXPORT Datum
 edge_disjoint_paths_many_to_many(PG_FUNCTION_ARGS);
 
-/******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
 static
 void
 process(
     char *edges_sql,
-    int64_t *source_vertices, size_t size_source_verticesArr,
-    int64_t *sink_vertices, size_t size_sink_verticesArr,
+    ArrayType *starts,
+    ArrayType *ends,
+
     bool directed,
     General_path_element_t **result_tuples,
     size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
-    pgr_basic_edge_t *edges = NULL;
+    size_t size_source_verticesArr = 0;
+    int64_t* source_vertices =
+        pgr_get_bigIntArray(&size_source_verticesArr, starts);
 
-    size_t total_tuples = 0;
+    size_t size_sink_verticesArr = 0;
+    int64_t* sink_vertices =
+        pgr_get_bigIntArray(&size_sink_verticesArr, ends);
 
-    pgr_get_basic_edges(edges_sql, &edges, &total_tuples);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    pgr_basic_edge_t *edges = NULL;
+    size_t total_edges = 0;
+
+    pgr_get_basic_edges(edges_sql, &edges, &total_edges);
+
+    if (total_edges == 0) {
+        if (source_vertices) pfree(source_vertices);
+        if (sink_vertices) pfree(sink_vertices);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    char *err_msg = NULL;
-    do_pgr_edge_disjoint_paths_many_to_many(
-        edges,
-        total_tuples,
-        source_vertices,
-        size_source_verticesArr,
-        sink_vertices,
-        size_sink_verticesArr,
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
+    do_pgr_edge_disjoint_paths(
+        edges, total_edges,
+        source_vertices, size_source_verticesArr,
+        sink_vertices, size_sink_verticesArr,
         directed,
-        result_tuples,
-        result_count,
+
+        result_tuples, result_count,
+
+        &log_msg,
+        &notice_msg,
         &err_msg);
 
-    time_msg("processing edge disjoint paths", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
+    time_msg("pgr_edgeDisjointPaths(many to many)", start_t, clock());
+
+    if (edges) pfree(edges);
+    if (source_vertices) pfree(source_vertices);
+    if (sink_vertices) pfree(sink_vertices);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
-    free(err_msg);
-    pfree(edges);
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
 PG_FUNCTION_INFO_V1(edge_disjoint_paths_many_to_many);
 PGDLLEXPORT Datum
 edge_disjoint_paths_many_to_many(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
-    General_path_element_t *result_tuples = 0;
+    General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -132,45 +131,29 @@ edge_disjoint_paths_many_to_many(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
 
-        int64_t *sink_vertices;
-        size_t size_sink_verticesArr;
-        sink_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_sink_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("sink_verticesArr size %ld ", size_sink_verticesArr);
-
-        int64_t *source_vertices;
-        size_t size_source_verticesArr;
-        source_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_source_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("source_verticesArr size %ld ", size_source_verticesArr);
-
-        PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            source_vertices, size_source_verticesArr,
-            sink_vertices, size_sink_verticesArr,
-            PG_GETARG_BOOL(3),
-            &result_tuples,
-            &result_count);
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_ARRAYTYPE_P(2),
+                PG_GETARG_BOOL(3),
+                &result_tuples,
+                &result_count);
 
-        free(source_vertices);
-        free(sink_vertices);
-
-        /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -178,12 +161,10 @@ edge_disjoint_paths_many_to_many(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
@@ -200,22 +181,18 @@ edge_disjoint_paths_many_to_many(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[5] = Int64GetDatum(result_tuples[call_cntr].edge);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].end_id);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[5] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/edge_disjoint_paths_many_to_one.c b/src/max_flow/src/edge_disjoint_paths_many_to_one.c
index a7919ff..bf2b8a6 100644
--- a/src/max_flow/src/edge_disjoint_paths_many_to_one.c
+++ b/src/max_flow/src/edge_disjoint_paths_many_to_one.c
@@ -28,29 +28,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 ********************************************************************PGR-GNU*/
 
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./edge_disjoint_paths_many_to_one_driver.h"
+
+#include "./edge_disjoint_paths_driver.h"
 
 PGDLLEXPORT Datum
 edge_disjoint_paths_many_to_one(PG_FUNCTION_ARGS);
@@ -61,68 +49,72 @@ static
 void
 process(
     char *edges_sql,
-    int64_t *source_vertices, size_t size_source_verticesArr,
+    ArrayType *starts,
     int64_t sink_vertex,
     bool directed,
     General_path_element_t **result_tuples,
     size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
-    pgr_basic_edge_t *edges = NULL;
-
-    size_t total_tuples = 0;
+    size_t size_source_verticesArr = 0;
+    int64_t* source_vertices =
+        pgr_get_bigIntArray(&size_source_verticesArr, starts);
 
-    pgr_get_basic_edges(edges_sql, &edges, &total_tuples);
+    pgr_basic_edge_t *edges = NULL;
+    size_t total_edges = 0;
+    pgr_get_basic_edges(edges_sql, &edges, &total_edges);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    if (total_edges == 0) {
+        if (source_vertices) pfree(source_vertices);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    char *err_msg = NULL;
-    do_pgr_edge_disjoint_paths_many_to_one(
-        edges,
-        total_tuples,
-        source_vertices,
-        size_source_verticesArr,
-        sink_vertex,
-        directed,
-        result_tuples,
-        result_count,
-        &err_msg);
-
-    time_msg("processing edge disjoint paths", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    free(err_msg);
-    pfree(edges);
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
+    do_pgr_edge_disjoint_paths(
+            edges, total_edges,
+            source_vertices, size_source_verticesArr,
+            &sink_vertex, 1,
+            directed,
+
+            result_tuples, result_count,
+
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    time_msg("pgr_edgeDisjointPaths(many_to_one)", start_t, clock());
+    if (edges) pfree(edges);
+    if (source_vertices) pfree(source_vertices);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
 PG_FUNCTION_INFO_V1(edge_disjoint_paths_many_to_one);
 PGDLLEXPORT Datum
 edge_disjoint_paths_many_to_one(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
-    General_path_element_t *result_tuples = 0;
+    General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -132,37 +124,29 @@ edge_disjoint_paths_many_to_one(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
-
-        int64_t *source_vertices;
-        size_t size_source_verticesArr;
-        source_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_source_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("source_verticesArr size %ld ", size_source_verticesArr);
 
-        PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            source_vertices, size_source_verticesArr,
-            PG_GETARG_INT64(2),
-            PG_GETARG_BOOL(3),
-            &result_tuples,
-            &result_count);
-
-        free(source_vertices);
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_INT64(2),
+                PG_GETARG_BOOL(3),
+                &result_tuples,
+                &result_count);
 
-        /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -170,43 +154,38 @@ edge_disjoint_paths_many_to_one(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
         bool *nulls;
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
 
-        values = palloc(5 * sizeof(Datum));
-        nulls = palloc(5 * sizeof(bool));
+        size_t numb = 5;
+        values = palloc(numb * sizeof(Datum));
+        nulls = palloc(numb * sizeof(bool));
 
         size_t i;
-        for (i = 0; i < 5; ++i) {
+        for (i = 0; i < numb; ++i) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/edge_disjoint_paths_many_to_one_driver.cpp b/src/max_flow/src/edge_disjoint_paths_many_to_one_driver.cpp
deleted file mode 100644
index d1d637b..0000000
--- a/src/max_flow/src/edge_disjoint_paths_many_to_one_driver.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: edge_disjoint_paths_many_to_one_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_edgedisjointpaths.hpp"
-#include "./edge_disjoint_paths_many_to_one_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-void
-do_pgr_edge_disjoint_paths_many_to_one(
-    pgr_basic_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t *source_vertices,
-    size_t size_source_verticesArr,
-    int64_t sink_vertex,
-    bool directed,
-    General_path_element_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        std::vector<General_path_element_t> path_elements;
-        std::set<int64_t> set_source_vertices;
-        std::set<int64_t> set_sink_vertices;
-        for (size_t i = 0; i < size_source_verticesArr; ++i) {
-            set_source_vertices.insert(source_vertices[i]);
-        }
-        set_sink_vertices.insert(sink_vertex);
-        PgrEdgeDisjointPathsGraph<FlowGraph> G;
-
-        // I use a directed graph since I'm dependent on directed graphs
-
-        G.create_edge_disjoint_paths_graph(data_edges, total_tuples,
-                                           set_source_vertices,
-                                           set_sink_vertices, directed);
-        int64_t flow = G.boykov_kolmogorov();
-        G.get_edge_disjoint_paths(path_elements, flow);
-
-        (*return_tuples) = pgr_alloc(path_elements.size(), (*return_tuples));
-        for (size_t i = 0; i < path_elements.size(); ++i) {
-            (*return_tuples)[i] = path_elements[i];
-        }
-        *return_count = path_elements.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/edge_disjoint_paths_many_to_one_driver.h b/src/max_flow/src/edge_disjoint_paths_many_to_one_driver.h
deleted file mode 100644
index 9c07464..0000000
--- a/src/max_flow/src/edge_disjoint_paths_many_to_one_driver.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: edge_disjoint_paths_many_to_one_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_MANY_TO_ONE_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_MANY_TO_ONE_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    void
-        do_pgr_edge_disjoint_paths_many_to_one(
-            pgr_basic_edge_t *data_edges,
-            size_t total_tuples,
-            int64_t *source_vertices,
-            size_t size_source_verticesArr,
-            int64_t sink_vertex,
-            bool directed,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char **err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_MANY_TO_ONE_DRIVER_H_
diff --git a/src/max_flow/src/edge_disjoint_paths_one_to_many.c b/src/max_flow/src/edge_disjoint_paths_one_to_many.c
index f7f89c1..5b9ebed 100644
--- a/src/max_flow/src/edge_disjoint_paths_one_to_many.c
+++ b/src/max_flow/src/edge_disjoint_paths_one_to_many.c
@@ -27,29 +27,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./edge_disjoint_paths_one_to_many_driver.h"
+#include "./edge_disjoint_paths_driver.h"
 
 PGDLLEXPORT Datum
 edge_disjoint_paths_one_to_many(PG_FUNCTION_ARGS);
@@ -61,48 +48,62 @@ void
 process(
     char *edges_sql,
     int64_t source_vertex,
-    int64_t *sink_vertices, size_t size_sink_verticesArr,
+    ArrayType *ends,
     bool directed,
     General_path_element_t **result_tuples,
     size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
-    pgr_basic_edge_t *edges = NULL;
+    size_t size_sink_verticesArr = 0;
+    int64_t* sink_vertices =
+        pgr_get_bigIntArray(&size_sink_verticesArr, ends);
 
-    size_t total_tuples = 0;
 
+    size_t total_tuples = 0;
+    pgr_basic_edge_t *edges = NULL;
     pgr_get_basic_edges(edges_sql, &edges, &total_tuples);
 
     if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+        if (sink_vertices) pfree(sink_vertices);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
     char *err_msg = NULL;
-    do_pgr_edge_disjoint_paths_one_to_many(
-        edges,
-        total_tuples,
-        source_vertex,
-        sink_vertices,
-        size_sink_verticesArr,
+    do_pgr_edge_disjoint_paths(
+
+        edges, total_tuples,
+        &source_vertex, 1,
+        sink_vertices, size_sink_verticesArr,
         directed,
-        result_tuples,
-        result_count,
+
+        result_tuples, result_count,
+
+        &log_msg,
+        &notice_msg,
         &err_msg);
 
-    time_msg("processing edge disjoint paths", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
+    time_msg("pgr_edgeDisjointPaths(one to many)", start_t, clock());
+
+
+    if (edges) pfree(edges);
+    if (sink_vertices) pfree(sink_vertices);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
-    free(err_msg);
-    pfree(edges);
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
     pgr_SPI_finish();
 }
 /*                                                                            */
@@ -112,14 +113,12 @@ PG_FUNCTION_INFO_V1(edge_disjoint_paths_one_to_many);
 PGDLLEXPORT Datum
 edge_disjoint_paths_one_to_many(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
     /*                          MODIFY AS NEEDED                              */
     /*                                                                        */
-    General_path_element_t *result_tuples = 0;
+    General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
     /*                                                                        */
     /**************************************************************************/
@@ -133,28 +132,22 @@ edge_disjoint_paths_one_to_many(PG_FUNCTION_ARGS) {
         /**********************************************************************/
         /*                          MODIFY AS NEEDED                          */
 
-        int64_t *sink_vertices;
-        size_t size_sink_verticesArr;
-        sink_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_sink_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("sink_verticesArr size %ld ", size_sink_verticesArr);
-
-        PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
+            text_to_cstring(PG_GETARG_TEXT_P(0)),
             PG_GETARG_INT64(1),
-            sink_vertices, size_sink_verticesArr,
+            PG_GETARG_ARRAYTYPE_P(2),
             PG_GETARG_BOOL(3),
             &result_tuples,
             &result_count);
 
-        free(sink_vertices);
-
         /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
             != TYPEFUNC_COMPOSITE) {
@@ -169,12 +162,10 @@ edge_disjoint_paths_one_to_many(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
@@ -192,20 +183,17 @@ edge_disjoint_paths_one_to_many(PG_FUNCTION_ARGS) {
         }
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].end_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/edge_disjoint_paths_one_to_many_driver.cpp b/src/max_flow/src/edge_disjoint_paths_one_to_many_driver.cpp
deleted file mode 100644
index dd15e64..0000000
--- a/src/max_flow/src/edge_disjoint_paths_one_to_many_driver.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: edge_disjoint_paths_one_to_many_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_edgedisjointpaths.hpp"
-#include "./edge_disjoint_paths_one_to_many_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-
-void
-do_pgr_edge_disjoint_paths_one_to_many(
-    pgr_basic_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t source_vertex,
-    int64_t *sink_vertices,
-    size_t size_sink_verticesArr,
-    bool directed,
-    General_path_element_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        std::vector<General_path_element_t> path_elements;
-        std::set<int64_t> set_source_vertices;
-        set_source_vertices.insert(source_vertex);
-        std::set<int64_t> set_sink_vertices;
-        for (size_t i = 0; i < size_sink_verticesArr; ++i) {
-            set_sink_vertices.insert(sink_vertices[i]);
-        }
-        PgrEdgeDisjointPathsGraph<FlowGraph> G;
-
-        // I use a directed graph since I'm dependent on directed graphs
-
-        G.create_edge_disjoint_paths_graph(data_edges, total_tuples,
-                                           set_source_vertices,
-                                           set_sink_vertices, directed);
-        int64_t flow = G.boykov_kolmogorov();
-        G.get_edge_disjoint_paths(path_elements, flow);
-
-        (*return_tuples) = pgr_alloc(path_elements.size(), (*return_tuples));
-        for (size_t i = 0; i < path_elements.size(); ++i) {
-            (*return_tuples)[i] = path_elements[i];
-        }
-        *return_count = path_elements.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/edge_disjoint_paths_one_to_many_driver.h b/src/max_flow/src/edge_disjoint_paths_one_to_many_driver.h
deleted file mode 100644
index d17e1c3..0000000
--- a/src/max_flow/src/edge_disjoint_paths_one_to_many_driver.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: edge_disjoint_paths_one_to_many_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_ONE_TO_MANY_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_ONE_TO_MANY_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    void
-        do_pgr_edge_disjoint_paths_one_to_many(
-            pgr_basic_edge_t *data_edges,
-            size_t total_tuples,
-            int64_t source_vertex,
-            int64_t *sink_vertices,
-            size_t size_sink_verticesArr,
-            bool directed,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char **err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_ONE_TO_MANY_DRIVER_H_
diff --git a/src/max_flow/src/edge_disjoint_paths_one_to_one.c b/src/max_flow/src/edge_disjoint_paths_one_to_one.c
index 9d6687c..c6536e6 100644
--- a/src/max_flow/src/edge_disjoint_paths_one_to_one.c
+++ b/src/max_flow/src/edge_disjoint_paths_one_to_one.c
@@ -27,27 +27,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
+#include "./../../common/src/postgres_connection.h"
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
-#include "./edge_disjoint_paths_one_to_one_driver.h"
+#include "./edge_disjoint_paths_driver.h"
 
 PGDLLEXPORT Datum
 edge_disjoint_paths_one_to_one(PG_FUNCTION_ARGS);
@@ -65,48 +52,54 @@ process(
     size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
-    pgr_basic_edge_t *edges = NULL;
 
     if (source_vertex == sink_vertex) {
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
 
     size_t total_tuples = 0;
-
+    pgr_basic_edge_t *edges = NULL;
     pgr_get_basic_edges(edges_sql, &edges, &total_tuples);
 
     if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
     char *err_msg = NULL;
-    do_pgr_edge_disjoint_paths_one_to_one(
-        edges,
-        total_tuples,
-        source_vertex,
-        sink_vertex,
+
+    do_pgr_edge_disjoint_paths(
+        edges, total_tuples,
+        &source_vertex, 1,
+        &sink_vertex, 1,
         directed,
         result_tuples,
         result_count,
+
+        &log_msg,
+        &notice_msg,
         &err_msg);
 
-    time_msg("processing edge disjoint paths", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
+    time_msg("pgr_edgeDisjointPaths(one to one)", start_t, clock());
 
-    free(err_msg);
-    pfree(edges);
+    if (edges) pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
     pgr_SPI_finish();
 }
 /*                                                                            */
@@ -116,14 +109,12 @@ PG_FUNCTION_INFO_V1(edge_disjoint_paths_one_to_one);
 PGDLLEXPORT Datum
 edge_disjoint_paths_one_to_one(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
     /*                          MODIFY AS NEEDED                              */
     /*                                                                        */
-    General_path_element_t *result_tuples = 0;
+    General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
     /*                                                                        */
     /**************************************************************************/
@@ -139,24 +130,28 @@ edge_disjoint_paths_one_to_one(PG_FUNCTION_ARGS) {
 
         PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            PG_GETARG_INT64(1),
-            PG_GETARG_INT64(2),
-            PG_GETARG_BOOL(3),
-            &result_tuples,
-            &result_count);
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_INT64(1),
+                PG_GETARG_INT64(2),
+                PG_GETARG_BOOL(3),
+                &result_tuples,
+                &result_count);
 
         /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -164,12 +159,10 @@ edge_disjoint_paths_one_to_one(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
@@ -187,19 +180,16 @@ edge_disjoint_paths_one_to_one(PG_FUNCTION_ARGS) {
         }
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].edge);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/edge_disjoint_paths_one_to_one_driver.cpp b/src/max_flow/src/edge_disjoint_paths_one_to_one_driver.cpp
deleted file mode 100644
index f121616..0000000
--- a/src/max_flow/src/edge_disjoint_paths_one_to_one_driver.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: edge_disjoint_paths_one_to_one_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_edgedisjointpaths.hpp"
-#include "./edge_disjoint_paths_one_to_one_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-void
-do_pgr_edge_disjoint_paths_one_to_one(
-    pgr_basic_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t source_vertex,
-    int64_t sink_vertex,
-    bool directed,
-    General_path_element_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        std::vector<General_path_element_t> path_elements;
-        std::set<int64_t> set_source_vertices;
-        set_source_vertices.insert(source_vertex);
-        std::set<int64_t> set_sink_vertices;
-        set_sink_vertices.insert(sink_vertex);
-        PgrEdgeDisjointPathsGraph<FlowGraph> G;
-
-        // I use a directed graph since I'm dependent on directed graphs
-
-        G.create_edge_disjoint_paths_graph(data_edges, total_tuples,
-                                           set_source_vertices,
-                                           set_sink_vertices, directed);
-        int64_t flow = G.boykov_kolmogorov();
-        G.get_edge_disjoint_paths(path_elements, flow);
-
-        (*return_tuples) = pgr_alloc(path_elements.size(), (*return_tuples));
-        for (size_t i = 0; i < path_elements.size(); ++i) {
-            (*return_tuples)[i] = path_elements[i];
-        }
-        *return_count = path_elements.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/edge_disjoint_paths_one_to_one_driver.h b/src/max_flow/src/edge_disjoint_paths_one_to_one_driver.h
deleted file mode 100644
index 1544995..0000000
--- a/src/max_flow/src/edge_disjoint_paths_one_to_one_driver.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: edge_disjoint_paths_one_to_one_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_ONE_TO_ONE_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_ONE_TO_ONE_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    void
-        do_pgr_edge_disjoint_paths_one_to_one(
-            pgr_basic_edge_t *data_edges,
-            size_t total_tuples,
-            int64_t source_vertex,
-            int64_t sink_vertex,
-            bool directed,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char **err_msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_MAX_FLOW_SRC_EDGE_DISJOINT_PATHS_ONE_TO_ONE_DRIVER_H_
diff --git a/src/max_flow/src/max_flow_driver.cpp b/src/max_flow/src/max_flow_driver.cpp
new file mode 100644
index 0000000..add4b2a
--- /dev/null
+++ b/src/max_flow/src/max_flow_driver.cpp
@@ -0,0 +1,152 @@
+/*PGR-GNU*****************************************************************
+File: max_flow_many_to_many_driver.cpp
+
+Generated with Template by:
+Copyright (c) 2015 pgRouting developers
+Mail: project at pgrouting.org
+
+Function's developer:
+Copyright (c) 2016 Andrea Nardelli
+Mail: nrd.nardelli at gmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+#include "./pgr_maxflow.hpp"
+
+#include <sstream>
+#include <vector>
+#include <set>
+
+#include "./max_flow_driver.h"
+
+#include "../../common/src/pgr_assert.h"
+#include "../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_types.h"
+
+
+void
+do_pgr_max_flow(
+        pgr_edge_t *data_edges,
+        size_t total_tuples,
+        int64_t *source_vertices,
+        size_t size_source_verticesArr,
+        int64_t *sink_vertices,
+        size_t size_sink_verticesArr,
+        char *algorithm,
+        bool only_flow,
+        pgr_flow_t **return_tuples,
+        size_t *return_count,
+        char** log_msg,
+        char** notice_msg,
+        char **err_msg) {
+    std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
+
+    try {
+        pgassert(data_edges);
+        pgassert(source_vertices);
+        pgassert(sink_vertices);
+
+        pgrouting::graph::PgrFlowGraph<pgrouting::FlowGraph> G;
+        std::set<int64_t> set_source_vertices;
+        std::set<int64_t> set_sink_vertices;
+        for (size_t i = 0; i < size_source_verticesArr; ++i) {
+            set_source_vertices.insert(source_vertices[i]);
+        }
+        for (size_t i = 0; i < size_sink_verticesArr; ++i) {
+            set_sink_vertices.insert(sink_vertices[i]);
+        }
+        std::set<int64_t> vertices(set_source_vertices);
+        vertices.insert(set_sink_vertices.begin(), set_sink_vertices.end());
+        if (vertices.size()
+                != (set_source_vertices.size() + set_sink_vertices.size())) {
+            *err_msg = pgr_msg("A source found as sink");
+            // TODO(vicky) return as hint the sources that are also sinks
+            return;
+        }
+
+
+
+        G.create_flow_graph(data_edges, total_tuples, set_source_vertices,
+                set_sink_vertices, algorithm);
+
+        int64_t max_flow;
+        if (strcmp(algorithm, "push_relabel") == 0) {
+            max_flow = G.push_relabel();
+        } else if (strcmp(algorithm, "edmonds_karp") == 0) {
+            max_flow = G.edmonds_karp();
+        } else if (strcmp(algorithm, "boykov_kolmogorov") == 0) {
+            max_flow = G.boykov_kolmogorov();
+        } else {
+            log << "Unspecified algorithm!\n";
+            *err_msg = pgr_msg(log.str().c_str());
+            (*return_tuples) = NULL;
+            (*return_count) = 0;
+            return;
+        }
+
+
+        std::vector<pgr_flow_t> flow_edges;
+
+        if (only_flow) {
+            pgr_flow_t edge;
+            edge.edge = -1;
+            edge.source = -1;
+            edge.target = -1;
+            edge.flow = max_flow;
+            edge.residual_capacity = -1;
+            flow_edges.push_back(edge);
+        } else {
+            G.get_flow_edges(flow_edges);
+        }
+        (*return_tuples) = pgr_alloc(flow_edges.size(), (*return_tuples));
+        for (size_t i = 0; i < flow_edges.size(); ++i) {
+            (*return_tuples)[i] = flow_edges[i];
+        }
+        *return_count = flow_edges.size();
+
+
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    }
+}
+
diff --git a/src/max_flow/src/max_flow_many_to_many_driver.h b/src/max_flow/src/max_flow_driver.h
similarity index 84%
rename from src/max_flow/src/max_flow_many_to_many_driver.h
rename to src/max_flow/src/max_flow_driver.h
index 397f74e..7706863 100644
--- a/src/max_flow/src/max_flow_many_to_many_driver.h
+++ b/src/max_flow/src/max_flow_driver.h
@@ -27,8 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#ifndef SRC_MAX_FLOW_SRC_MAX_FLOW_MANY_TO_MANY_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_MAX_FLOW_MANY_TO_MANY_DRIVER_H_
+#ifndef SRC_MAX_FLOW_SRC_MAX_FLOW_DRIVER_H_
+#define SRC_MAX_FLOW_SRC_MAX_FLOW_DRIVER_H_
 
 #include "./../../common/src/pgr_types.h"
 
@@ -37,7 +37,7 @@ extern "C" {
 #endif
 
     void
-        do_pgr_max_flow_many_to_many(
+        do_pgr_max_flow(
             pgr_edge_t *data_edges,
             size_t total_tuples,
             int64_t* source_vertices,
@@ -45,13 +45,16 @@ extern "C" {
             int64_t* sink_vertices,
             size_t size_sink_verticesArr,
             char* algorithm,
+            bool only_flow,
             pgr_flow_t **return_tuples,
             size_t *return_count,
-            char **err_msg);
+            char** log_msg,
+            char** notice_msg,
+            char** err_msg);
 
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  // SRC_MAX_FLOW_SRC_MAX_FLOW_MANY_TO_MANY_DRIVER_H_
+#endif  // SRC_MAX_FLOW_SRC_MAX_FLOW_DRIVER_H_
diff --git a/src/max_flow/src/max_flow_many_to_many.c b/src/max_flow/src/max_flow_many_to_many.c
index ec73b73..729b2a2 100644
--- a/src/max_flow/src/max_flow_many_to_many.c
+++ b/src/max_flow/src/max_flow_many_to_many.c
@@ -27,109 +27,127 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
 
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./max_flow_many_to_many_driver.h"
+#include "./max_flow_driver.h"
 
 PGDLLEXPORT Datum
 max_flow_many_to_many(PG_FUNCTION_ARGS);
 
-/******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
 static
 void
 process(
     char *edges_sql,
-    int64_t *source_vertices, size_t size_source_verticesArr,
-    int64_t *sink_vertices, size_t size_sink_verticesArr,
+    ArrayType *starts,
+    ArrayType *ends,
     char *algorithm,
+    bool only_flow,
     pgr_flow_t **result_tuples,
     size_t *result_count) {
-    pgr_SPI_connect();
-
     if (!(strcmp(algorithm, "push_relabel") == 0
-        || strcmp(algorithm, "edmonds_karp") == 0
-        || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
+                || strcmp(algorithm, "edmonds_karp") == 0
+                || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
         elog(ERROR, "Unknown algorithm");
     }
 
-    PGR_DBG("Load data");
+    pgr_SPI_connect();
+
+    size_t size_source_verticesArr = 0;
+    int64_t* source_vertices =
+        pgr_get_bigIntArray(&size_source_verticesArr, starts);
+
+    size_t size_sink_verticesArr = 0;
+    int64_t* sink_vertices =
+        pgr_get_bigIntArray(&size_sink_verticesArr, ends);
+
     pgr_edge_t *edges = NULL;
 
-    size_t total_tuples = 0;
+    size_t total_edges = 0;
 
     /* NOTE:
      * For flow, cost and reverse_cost are really capacity and reverse_capacity
      */
-    pgr_get_flow_edges(edges_sql, &edges, &total_tuples);
+    pgr_get_flow_edges(edges_sql, &edges, &total_edges);
 
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    if (total_edges == 0) {
+        if (source_vertices) pfree(source_vertices);
+        if (sink_vertices) pfree(sink_vertices);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
     char *err_msg = NULL;
-    do_pgr_max_flow_many_to_many(
-        edges,
-        total_tuples,
-        source_vertices, size_source_verticesArr,
-        sink_vertices, size_sink_verticesArr,
-        algorithm,
-        result_tuples,
-        result_count,
-        &err_msg);
-
-    time_msg("processing max flow", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    free(err_msg);
-    pfree(edges);
+
+    do_pgr_max_flow(
+            edges, total_edges,
+            source_vertices, size_source_verticesArr,
+            sink_vertices, size_sink_verticesArr,
+            algorithm,
+            only_flow,
+
+            result_tuples, result_count,
+
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    if (only_flow) {
+        time_msg("pgr_maxFlow(many to many)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "push_relabel") == 0) {
+        time_msg("pgr_maxFlowPushRelabel(many to many)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "edmonds_karp") == 0) {
+        time_msg("pgr_maxFlowEdmondsKarp(many to many)",
+                start_t, clock());
+    } else {
+        time_msg("pgr_maxFlowBoykovKolmogorov(many to many)",
+                start_t, clock());
+    }
+
+
+    if (edges) pfree(edges);
+    if (source_vertices) pfree(source_vertices);
+    if (sink_vertices) pfree(sink_vertices);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
+
 
 PG_FUNCTION_INFO_V1(max_flow_many_to_many);
 PGDLLEXPORT Datum
 max_flow_many_to_many(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
     pgr_flow_t *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -139,45 +157,31 @@ max_flow_many_to_many(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
-        PGR_DBG("Initializing arrays");
-        int64_t *source_vertices;
-        size_t size_source_verticesArr;
-        source_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_source_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("source_verticesArr size %ld ", size_source_verticesArr);
-
-        int64_t *sink_vertices;
-        size_t size_sink_verticesArr;
-        sink_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_sink_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("sink_verticesArr size %ld ", size_sink_verticesArr);
-
-        PGR_DBG("Calling process");
-        process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            source_vertices, size_source_verticesArr,
-            sink_vertices, size_sink_verticesArr,
-            pgr_text2char(PG_GETARG_TEXT_P(3)),
-            &result_tuples,
-            &result_count);
 
-        free(source_vertices);
-        free(sink_vertices);
+        process(
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_ARRAYTYPE_P(2),
+                text_to_cstring(PG_GETARG_TEXT_P(3)),
+                PG_GETARG_BOOL(4),
+                &result_tuples,
+                &result_count);
 
         /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -185,16 +189,15 @@ max_flow_many_to_many(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (pgr_flow_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
         bool *nulls;
+        size_t call_cntr = funcctx->call_cntr;
 
         /**********************************************************************/
         /*                          MODIFY AS NEEDED                          */
@@ -206,7 +209,6 @@ max_flow_many_to_many(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[2] = Int64GetDatum(result_tuples[call_cntr].source);
@@ -219,9 +221,6 @@ max_flow_many_to_many(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/max_flow_many_to_many_driver.cpp b/src/max_flow/src/max_flow_many_to_many_driver.cpp
deleted file mode 100644
index 1e9ad42..0000000
--- a/src/max_flow/src/max_flow_many_to_many_driver.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: max_flow_many_to_many_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_maxflow.hpp"
-#include "./max_flow_many_to_many_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-void
-do_pgr_max_flow_many_to_many(
-    pgr_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t *source_vertices,
-    size_t size_source_verticesArr,
-    int64_t *sink_vertices,
-    size_t size_sink_verticesArr,
-    char *algorithm,
-    pgr_flow_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        PgrFlowGraph<FlowGraph> G;
-        std::set<int64_t> set_source_vertices;
-        std::set<int64_t> set_sink_vertices;
-        for (size_t i = 0; i < size_source_verticesArr; ++i) {
-            set_source_vertices.insert(source_vertices[i]);
-        }
-        for (size_t i = 0; i < size_sink_verticesArr; ++i) {
-            set_sink_vertices.insert(sink_vertices[i]);
-        }
-
-        G.create_flow_graph(data_edges, total_tuples, set_source_vertices,
-                            set_sink_vertices, algorithm);
-
-        if (strcmp(algorithm, "push_relabel") == 0) {
-            G.push_relabel();
-        } else if (strcmp(algorithm, "edmonds_karp") == 0) {
-            G.edmonds_karp();
-        } else if (strcmp(algorithm, "boykov_kolmogorov") == 0) {
-            G.boykov_kolmogorov();
-        } else {
-            log << "Unspecified algorithm!\n";
-            *err_msg = strdup(log.str().c_str());
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            return;
-        }
-
-        std::vector<pgr_flow_t> flow_edges;
-        G.get_flow_edges(flow_edges);
-
-        (*return_tuples) = pgr_alloc(flow_edges.size(), (*return_tuples));
-        for (size_t i = 0; i < flow_edges.size(); ++i) {
-            (*return_tuples)[i] = flow_edges[i];
-        }
-        *return_count = flow_edges.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/max_flow_many_to_one.c b/src/max_flow/src/max_flow_many_to_one.c
index 7f02628..ccbef09 100644
--- a/src/max_flow/src/max_flow_many_to_one.c
+++ b/src/max_flow/src/max_flow_many_to_one.c
@@ -27,29 +27,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./max_flow_many_to_one_driver.h"
+#include "./max_flow_driver.h"
 
 PGDLLEXPORT Datum
 max_flow_many_to_one(PG_FUNCTION_ARGS);
@@ -60,57 +47,84 @@ static
 void
 process(
     char *edges_sql,
-    int64_t *source_vertices, size_t size_source_verticesArr,
+    ArrayType *starts,
     int64_t sink_vertex,
     char *algorithm,
+    bool only_flow,
     pgr_flow_t **result_tuples,
     size_t *result_count) {
-    pgr_SPI_connect();
-
     if (!(strcmp(algorithm, "push_relabel") == 0
         || strcmp(algorithm, "edmonds_karp") == 0
         || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
         elog(ERROR, "Unknown algorithm");
     }
 
-    PGR_DBG("Load data");
-    pgr_edge_t *edges = NULL;
+    pgr_SPI_connect();
 
-    size_t total_tuples = 0;
+    size_t size_source_verticesArr = 0;
+    int64_t* source_vertices =
+        pgr_get_bigIntArray(&size_source_verticesArr, starts);
 
     /* NOTE:
      * For flow, cost and reverse_cost are really capacity and reverse_capacity
      */
+    pgr_edge_t *edges = NULL;
+    size_t total_tuples = 0;
     pgr_get_flow_edges(edges_sql, &edges, &total_tuples);
 
     if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+        if (source_vertices) pfree(source_vertices);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
     char *err_msg = NULL;
-    do_pgr_max_flow_many_to_one(
-        edges,
-        total_tuples,
-        source_vertices, size_source_verticesArr,
-        sink_vertex,
-        algorithm,
-        result_tuples,
-        result_count,
-        &err_msg);
-
-    time_msg("processing max flow", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    free(err_msg);
-    pfree(edges);
+    do_pgr_max_flow(
+            edges, total_tuples,
+            source_vertices, size_source_verticesArr,
+            &sink_vertex, 1,
+            algorithm,
+            only_flow,
+
+            result_tuples, result_count,
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    if (only_flow) {
+        time_msg("pgr_maxFlow(many to many)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "push_relabel") == 0) {
+        time_msg("pgr_maxFlowPushRelabel(many to one)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "edmonds_karp") == 0) {
+        time_msg("pgr_maxFlowEdmondsKarp(many to one)",
+                start_t, clock());
+    } else {
+        time_msg("pgr_maxFlowBoykovKolmogorov(many to one)",
+                start_t, clock());
+    }
+
+    if (edges) pfree(edges);
+    if (source_vertices) pfree(source_vertices);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+
+
     pgr_SPI_finish();
 }
 /*                                                                            */
@@ -120,16 +134,11 @@ PG_FUNCTION_INFO_V1(max_flow_many_to_one);
 PGDLLEXPORT Datum
 max_flow_many_to_one(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
     pgr_flow_t *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -139,37 +148,30 @@ max_flow_many_to_one(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
-
-
-        int64_t *source_vertices;
-        size_t size_source_verticesArr;
-        source_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_source_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(1));
-        PGR_DBG("source_verticesArr size %ld ", size_source_verticesArr);
 
-        PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            source_vertices, size_source_verticesArr,
-            PG_GETARG_INT64(2),
-            pgr_text2char(PG_GETARG_TEXT_P(3)),
-            &result_tuples,
-            &result_count);
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_INT64(2),
+                text_to_cstring(PG_GETARG_TEXT_P(3)),
+                PG_GETARG_BOOL(4),
+                &result_tuples,
+                &result_count);
 
-        free(source_vertices);
-        /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -177,19 +179,17 @@ max_flow_many_to_one(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (pgr_flow_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
         bool *nulls;
+        size_t call_cntr = funcctx->call_cntr;
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
         values = palloc(6 * sizeof(Datum));
         nulls = palloc(6 * sizeof(bool));
 
@@ -198,7 +198,6 @@ max_flow_many_to_one(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[2] = Int64GetDatum(result_tuples[call_cntr].source);
@@ -211,9 +210,6 @@ max_flow_many_to_one(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/max_flow_many_to_one_driver.cpp b/src/max_flow/src/max_flow_many_to_one_driver.cpp
deleted file mode 100644
index ec81d36..0000000
--- a/src/max_flow/src/max_flow_many_to_one_driver.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: max_flow_many_to_one_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_maxflow.hpp"
-#include "./max_flow_many_to_one_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-void
-do_pgr_max_flow_many_to_one(
-    pgr_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t *source_vertices,
-    size_t size_source_verticesArr,
-    int64_t sink_vertex,
-    char *algorithm,
-    pgr_flow_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        PgrFlowGraph<FlowGraph> G;
-        std::set<int64_t> set_source_vertices;
-        std::set<int64_t> set_sink_vertices;
-        for (size_t i = 0; i < size_source_verticesArr; ++i) {
-            set_source_vertices.insert(source_vertices[i]);
-        }
-        set_sink_vertices.insert(sink_vertex);
-
-        G.create_flow_graph(data_edges,
-                            total_tuples,
-                            set_source_vertices,
-                            set_sink_vertices,
-                            algorithm);
-
-        if (strcmp(algorithm, "push_relabel") == 0) {
-            G.push_relabel();
-        } else if (strcmp(algorithm, "edmonds_karp") == 0) {
-            G.edmonds_karp();
-        } else if (strcmp(algorithm, "boykov_kolmogorov") == 0) {
-            G.boykov_kolmogorov();
-        } else {
-            log << "Unspecified algorithm!\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        std::vector<pgr_flow_t> flow_edges;
-        G.get_flow_edges(flow_edges);
-
-        (*return_tuples) = pgr_alloc(flow_edges.size(), (*return_tuples));
-        for (size_t i = 0; i < flow_edges.size(); ++i) {
-            (*return_tuples)[i] = flow_edges[i];
-        }
-        *return_count = flow_edges.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/max_flow_many_to_one_driver.h b/src/max_flow/src/max_flow_many_to_one_driver.h
deleted file mode 100644
index 116fa2b..0000000
--- a/src/max_flow/src/max_flow_many_to_one_driver.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: max_flow_many_to_one_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_MAX_FLOW_SRC_MAX_FLOW_MANY_TO_ONE_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_MAX_FLOW_MANY_TO_ONE_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    void
-        do_pgr_max_flow_many_to_one(
-            pgr_edge_t *data_edges,
-            size_t total_tuples,
-            int64_t* source_vertices,
-            size_t size_source_verticesArr,
-            int64_t sink_vertex,
-            char* algorithm,
-            pgr_flow_t **return_tuples,
-            size_t *return_count,
-            char **err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_MAX_FLOW_SRC_MAX_FLOW_MANY_TO_ONE_DRIVER_H_
diff --git a/src/max_flow/src/max_flow_one_to_many.c b/src/max_flow/src/max_flow_one_to_many.c
index 1e8cadf..e74bb33 100644
--- a/src/max_flow/src/max_flow_one_to_many.c
+++ b/src/max_flow/src/max_flow_one_to_many.c
@@ -27,109 +27,119 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
 
-// #define DEBUG
-
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
-#include "./max_flow_one_to_many_driver.h"
+#include "./max_flow_driver.h"
 
 PGDLLEXPORT Datum
 max_flow_one_to_many(PG_FUNCTION_ARGS);
 
 /******************************************************************************/
-/*                          MODIFY AS NEEDED                                  */
 static
 void
 process(
-    char *edges_sql,
-    int64_t source_vertex,
-    int64_t *sink_vertices, size_t size_sink_verticesArr,
-    char *algorithm,
-    pgr_flow_t **result_tuples,
-    size_t *result_count) {
-    pgr_SPI_connect();
-
+        char *edges_sql,
+        int64_t source_vertex,
+        ArrayType *ends,
+        char *algorithm,
+        bool only_flow,
+        pgr_flow_t **result_tuples,
+        size_t *result_count) {
     if (!(strcmp(algorithm, "push_relabel") == 0
-        || strcmp(algorithm, "edmonds_karp") == 0
-        || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
+                || strcmp(algorithm, "edmonds_karp") == 0
+                || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
         elog(ERROR, "Unknown algorithm");
     }
 
-    PGR_DBG("Load data");
-    pgr_edge_t *edges = NULL;
+    pgr_SPI_connect();
+
+    size_t size_sink_verticesArr = 0;
+    int64_t* sink_vertices =
+        pgr_get_bigIntArray(&size_sink_verticesArr, ends);
+
 
-    size_t total_tuples = 0;
 
     /* NOTE:
      * For flow, cost and reverse_cost are really capacity and reverse_capacity
      */
+    size_t total_tuples = 0;
+    pgr_edge_t *edges = NULL;
     pgr_get_flow_edges(edges_sql, &edges, &total_tuples);
 
     if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+        if (sink_vertices) pfree(sink_vertices);
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
     PGR_DBG("Starting processing");
     clock_t start_t = clock();
-    char *err_msg = NULL;
-    do_pgr_max_flow_one_to_many(
-        edges,
-        total_tuples,
-        source_vertex,
-        sink_vertices, size_sink_verticesArr,
-        algorithm,
-        result_tuples,
-        result_count,
-        &err_msg);
-
-    time_msg("processing max flow", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    free(err_msg);
-    pfree(edges);
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
+    do_pgr_max_flow(
+            edges, total_tuples,
+            &source_vertex, 1,
+            sink_vertices, size_sink_verticesArr,
+            algorithm,
+            only_flow,
+
+            result_tuples, result_count,
+
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    if (only_flow) {
+        time_msg("pgr_maxFlow(many to many)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "push_relabel") == 0) {
+        time_msg("pgr_maxFlowPushRelabel(one to many)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "edmonds_karp") == 0) {
+        time_msg("pgr_maxFlowEdmondsKarp(one to many)",
+                start_t, clock());
+    } else {
+        time_msg("pgr_maxFlowBoykovKolmogorov(one to many)",
+                start_t, clock());
+    }
+
+
+    if (edges) pfree(edges);
+    if (sink_vertices) pfree(sink_vertices);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
 PG_FUNCTION_INFO_V1(max_flow_one_to_many);
 PGDLLEXPORT Datum
 max_flow_one_to_many(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
     pgr_flow_t *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -139,37 +149,30 @@ max_flow_one_to_many(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
-
 
-        int64_t *sink_vertices;
-        size_t size_sink_verticesArr;
-        sink_vertices = (int64_t *)
-            pgr_get_bigIntArray(&size_sink_verticesArr,
-                                PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("sink_verticesArr size %ld ", size_sink_verticesArr);
-
-        PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            PG_GETARG_INT64(1),
-            sink_vertices, size_sink_verticesArr,
-            pgr_text2char(PG_GETARG_TEXT_P(3)),
-            &result_tuples,
-            &result_count);
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_INT64(1),
+                PG_GETARG_ARRAYTYPE_P(2),
+                text_to_cstring(PG_GETARG_TEXT_P(3)),
+                PG_GETARG_BOOL(4),
+                &result_tuples,
+                &result_count);
 
-        free(sink_vertices);
-        /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -177,19 +180,18 @@ max_flow_one_to_many(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (pgr_flow_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
         bool *nulls;
+        size_t call_cntr = funcctx->call_cntr;
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
+
         values = palloc(6 * sizeof(Datum));
         nulls = palloc(6 * sizeof(bool));
 
@@ -198,22 +200,19 @@ max_flow_one_to_many(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[2] = Int64GetDatum(result_tuples[call_cntr].source);
         values[3] = Int64GetDatum(result_tuples[call_cntr].target);
         values[4] = Int64GetDatum(result_tuples[call_cntr].flow);
         values[5] = Int64GetDatum(result_tuples[call_cntr].residual_capacity);
+
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/max_flow_one_to_many_driver.cpp b/src/max_flow/src/max_flow_one_to_many_driver.cpp
deleted file mode 100644
index ce2f2a9..0000000
--- a/src/max_flow/src/max_flow_one_to_many_driver.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: max_flow_one_to_many_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_maxflow.hpp"
-#include "./max_flow_one_to_many_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-void
-do_pgr_max_flow_one_to_many(
-    pgr_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t source_vertex,
-    int64_t *sink_vertices,
-    size_t size_sink_verticesArr,
-    char *algorithm,
-    pgr_flow_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        PgrFlowGraph<FlowGraph> G;
-        std::set<int64_t> set_source_vertices;
-        std::set<int64_t> set_sink_vertices;
-        set_source_vertices.insert(source_vertex);
-        for (size_t i = 0; i < size_sink_verticesArr; ++i) {
-            set_sink_vertices.insert(sink_vertices[i]);
-        }
-
-        G.create_flow_graph(data_edges,
-                            total_tuples,
-                            set_source_vertices,
-                            set_sink_vertices,
-                            algorithm);
-
-        if (strcmp(algorithm, "push_relabel") == 0) {
-            G.push_relabel();
-        } else if (strcmp(algorithm, "edmonds_karp") == 0) {
-            G.edmonds_karp();
-        } else if (strcmp(algorithm, "boykov_kolmogorov") == 0) {
-            G.boykov_kolmogorov();
-        } else {
-            log << "Unspecified algorithm!\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        std::vector<pgr_flow_t> flow_edges;
-        G.get_flow_edges(flow_edges);
-
-        (*return_tuples) = pgr_alloc(flow_edges.size(), (*return_tuples));
-        for (size_t i = 0; i < flow_edges.size(); ++i) {
-            (*return_tuples)[i] = flow_edges[i];
-        }
-        *return_count = flow_edges.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/max_flow_one_to_many_driver.h b/src/max_flow/src/max_flow_one_to_many_driver.h
deleted file mode 100644
index 415700d..0000000
--- a/src/max_flow/src/max_flow_one_to_many_driver.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: max_flow_one_to_many_driver.h
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_MAX_FLOW_SRC_MAX_FLOW_ONE_TO_MANY_DRIVER_H_
-#define SRC_MAX_FLOW_SRC_MAX_FLOW_ONE_TO_MANY_DRIVER_H_
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    void
-        do_pgr_max_flow_one_to_many(
-            pgr_edge_t *data_edges,
-            size_t total_tuples,
-            int64_t source_vertex,
-            int64_t* sink_vertices,
-            size_t size_sink_verticesArr,
-            char* algorithm,
-            pgr_flow_t **return_tuples,
-            size_t *return_count,
-            char **err_msg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_MAX_FLOW_SRC_MAX_FLOW_ONE_TO_MANY_DRIVER_H_
diff --git a/src/max_flow/src/max_flow_one_to_one.c b/src/max_flow/src/max_flow_one_to_one.c
index 6356331..427cc00 100644
--- a/src/max_flow/src/max_flow_one_to_one.c
+++ b/src/max_flow/src/max_flow_one_to_one.c
@@ -27,27 +27,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
+#include "./../../common/src/postgres_connection.h"
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
-#include "./max_flow_one_to_one_driver.h"
+#include "./max_flow_driver.h"
 
 PGDLLEXPORT Datum
 max_flow_one_to_one(PG_FUNCTION_ARGS);
@@ -57,65 +44,86 @@ max_flow_one_to_one(PG_FUNCTION_ARGS);
 static
 void
 process(
-    char *edges_sql,
-    int64_t source_vertex,
-    int64_t sink_vertex,
-    char *algorithm,
-    pgr_flow_t **result_tuples,
-    size_t *result_count) {
-    pgr_SPI_connect();
-
+        char *edges_sql,
+        int64_t source_vertex,
+        int64_t sink_vertex,
+        char *algorithm,
+        bool only_flow,
+        pgr_flow_t **result_tuples,
+        size_t *result_count) {
     if (!(strcmp(algorithm, "push_relabel") == 0
-        || strcmp(algorithm, "edmonds_karp") == 0
-        || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
+                || strcmp(algorithm, "edmonds_karp") == 0
+                || strcmp(algorithm, "boykov_kolmogorov") == 0)) {
         elog(ERROR, "Unknown algorithm");
     }
 
-    PGR_DBG("Load data");
-    pgr_edge_t *edges = NULL;
-
     if (source_vertex == sink_vertex) {
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
-        pgr_SPI_finish();
         return;
     }
 
-    size_t total_tuples = 0;
+    pgr_SPI_connect();
 
     /* NOTE:
      * For flow, cost and reverse_cost are really capacity and reverse_capacity
      */
+    size_t total_tuples = 0;
+    pgr_edge_t *edges = NULL;
     pgr_get_flow_edges(edges_sql, &edges, &total_tuples);
 
     if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    char *err_msg = NULL;
-    do_pgr_max_flow_one_to_one(
-        edges,
-        total_tuples,
-        source_vertex,
-        sink_vertex,
-        algorithm,
-        result_tuples,
-        result_count,
-        &err_msg);
-
-    time_msg("processing max flow", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    free(err_msg);
-    pfree(edges);
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
+    do_pgr_max_flow(
+            edges,
+            total_tuples,
+            &source_vertex, 1,
+            &sink_vertex, 1,
+            algorithm,
+            only_flow,
+
+            result_tuples, result_count,
+
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    if (only_flow) {
+        time_msg("pgr_maxFlow(one to one)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "push_relabel") == 0) {
+        time_msg("pgr_maxFlowPushRelabel(one to one)",
+                start_t, clock());
+    } else if (strcmp(algorithm, "edmonds_karp") == 0) {
+        time_msg("pgr_maxFlowEdmondsKarp(one to one)",
+                start_t, clock());
+    } else {
+        time_msg("pgr_maxFlowBoykovKolmogorov(one to one)",
+                start_t, clock());
+    }
+
+
+    if (edges) pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+
     pgr_SPI_finish();
 }
 /*                                                                            */
@@ -125,16 +133,11 @@ PG_FUNCTION_INFO_V1(max_flow_one_to_one);
 PGDLLEXPORT Datum
 max_flow_one_to_one(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
     pgr_flow_t *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -144,28 +147,30 @@ max_flow_one_to_one(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
 
-        PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            PG_GETARG_INT64(1),
-            PG_GETARG_INT64(2),
-            pgr_text2char(PG_GETARG_TEXT_P(3)),
-            &result_tuples,
-            &result_count);
-
-        /*                                                                    */
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_INT64(1),
+                PG_GETARG_INT64(2),
+                text_to_cstring(PG_GETARG_TEXT_P(3)),
+                PG_GETARG_BOOL(4),
+                &result_tuples,
+                &result_count);
+
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -173,19 +178,17 @@ max_flow_one_to_one(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (pgr_flow_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
         bool *nulls;
+        size_t call_cntr = funcctx->call_cntr;
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
 
         values = palloc(6 * sizeof(Datum));
         nulls = palloc(6 * sizeof(bool));
@@ -195,7 +198,6 @@ max_flow_one_to_one(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
         values[0] = Int32GetDatum(call_cntr + 1);
         values[1] = Int64GetDatum(result_tuples[call_cntr].edge);
         values[2] = Int64GetDatum(result_tuples[call_cntr].source);
@@ -208,9 +210,6 @@ max_flow_one_to_one(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/max_flow_one_to_one_driver.cpp b/src/max_flow/src/max_flow_one_to_one_driver.cpp
deleted file mode 100644
index 9140e5c..0000000
--- a/src/max_flow/src/max_flow_one_to_one_driver.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: max_flow_one_to_one_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2016 Andrea Nardelli
-Mail: nrd.nardelli at gmail.com
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <sstream>
-#include <vector>
-#include <set>
-
-#include "./pgr_maxflow.hpp"
-#include "./max_flow_one_to_one_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
-
-// #define DEBUG
-extern "C" {
-#include "./../../common/src/pgr_types.h"
-}
-
-void
-do_pgr_max_flow_one_to_one(
-    pgr_edge_t *data_edges,
-    size_t total_tuples,
-    int64_t source_vertex,
-    int64_t sink_vertex,
-    char *algorithm,
-    pgr_flow_t **return_tuples,
-    size_t *return_count,
-    char **err_msg) {
-    std::ostringstream log;
-
-    try {
-        PgrFlowGraph<FlowGraph> G;
-        std::set<int64_t> set_source_vertices;
-        set_source_vertices.insert(source_vertex);
-        std::set<int64_t> set_sink_vertices;
-        set_sink_vertices.insert(sink_vertex);
-
-        G.create_flow_graph(data_edges,
-                            total_tuples,
-                            set_source_vertices,
-                            set_sink_vertices,
-                            algorithm);
-
-        if (strcmp(algorithm, "push_relabel") == 0) {
-            G.push_relabel();
-        } else if (strcmp(algorithm, "edmonds_karp") == 0) {
-            G.edmonds_karp();
-        } else if (strcmp(algorithm, "boykov_kolmogorov") == 0) {
-            G.boykov_kolmogorov();
-        } else {
-            log << "Unspecified algorithm!\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        std::vector<pgr_flow_t> flow_edges;
-        G.get_flow_edges(flow_edges);
-
-        (*return_tuples) = pgr_alloc(flow_edges.size(), (*return_tuples));
-        for (size_t i = 0; i < flow_edges.size(); ++i) {
-            (*return_tuples)[i] = flow_edges[i];
-        }
-        *return_count = flow_edges.size();
-
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
-    }
-}
-
-
-
-
-
diff --git a/src/max_flow/src/maximum_cardinality_matching.c b/src/max_flow/src/maximum_cardinality_matching.c
index 5290ff3..5125abc 100644
--- a/src/max_flow/src/maximum_cardinality_matching.c
+++ b/src/max_flow/src/maximum_cardinality_matching.c
@@ -27,25 +27,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-/*
- * Uncomment when needed
- */
-
-// #define DEBUG
+#include "./../../common/src/postgres_connection.h"
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./maximum_cardinality_matching_driver.h"
 
@@ -64,58 +51,60 @@ process(
     size_t *result_count) {
     pgr_SPI_connect();
 
-    PGR_DBG("Load data");
     pgr_basic_edge_t *edges = NULL;
+    size_t total_edges = 0;
+    pgr_get_basic_edges(edges_sql, &edges, &total_edges);
 
-    size_t total_tuples = 0;
-
-    pgr_get_basic_edges(edges_sql, &edges, &total_tuples);
-
-    if (total_tuples == 0) {
-        PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
+    if (total_edges == 0) {
         pgr_SPI_finish();
         return;
     }
-    PGR_DBG("Total %ld tuples in query:", total_tuples);
 
-    PGR_DBG("Starting processing");
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
     char *err_msg = NULL;
+
     do_pgr_maximum_cardinality_matching(
-        edges,
-        directed,
-        total_tuples,
-        result_tuples,
-        result_count,
-        &err_msg);
-
-    time_msg("processing max flow", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
-
-    free(err_msg);
-    pfree(edges);
+            edges, total_edges,
+            directed,
+            result_tuples,
+            result_count,
+
+            &log_msg,
+            &notice_msg,
+            &err_msg);
+
+    time_msg("pgr_maximumCardinalityMatching()", start_t, clock());
+
+    if (edges) pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+
+
     pgr_SPI_finish();
 }
-/*                                                                            */
-/******************************************************************************/
 
 PG_FUNCTION_INFO_V1(maximum_cardinality_matching);
 PGDLLEXPORT Datum
 maximum_cardinality_matching(PG_FUNCTION_ARGS) {
     FuncCallContext *funcctx;
-    uint32_t call_cntr;
-    uint32_t max_calls;
     TupleDesc tuple_desc;
 
     /**************************************************************************/
-    /*                          MODIFY AS NEEDED                              */
-    /*                                                                        */
-    pgr_basic_edge_t *result_tuples = 0;
+    pgr_basic_edge_t *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                        */
     /**************************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
@@ -125,25 +114,27 @@ maximum_cardinality_matching(PG_FUNCTION_ARGS) {
 
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
         PGR_DBG("Calling process");
         process(
-            pgr_text2char(PG_GETARG_TEXT_P(0)),
-            PG_GETARG_BOOL(1),
-            &result_tuples,
-            &result_count);
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                PG_GETARG_BOOL(1),
+                &result_tuples,
+                &result_count);
 
-        /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
-            != TYPEFUNC_COMPOSITE) {
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("function returning record called in context "
-                                   "that cannot accept type record")));
+                     errmsg("function returning record called in context "
+                         "that cannot accept type record")));
         }
 
         funcctx->tuple_desc = tuple_desc;
@@ -151,19 +142,16 @@ maximum_cardinality_matching(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (pgr_basic_edge_t *) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple tuple;
         Datum result;
         Datum *values;
         bool *nulls;
 
         /**********************************************************************/
-        /*                          MODIFY AS NEEDED                          */
 
         values = palloc(4 * sizeof(Datum));
         nulls = palloc(4 * sizeof(bool));
@@ -174,20 +162,17 @@ maximum_cardinality_matching(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
-        // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int64GetDatum(result_tuples[call_cntr].edge_id);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].source);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].target);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge_id);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].source);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].target);
+
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/max_flow/src/maximum_cardinality_matching_driver.cpp b/src/max_flow/src/maximum_cardinality_matching_driver.cpp
index 9dc41f4..d4cb75e 100644
--- a/src/max_flow/src/maximum_cardinality_matching_driver.cpp
+++ b/src/max_flow/src/maximum_cardinality_matching_driver.cpp
@@ -27,45 +27,47 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./maximum_cardinality_matching_driver.h"
 
 #include <sstream>
 #include <vector>
 
 #include "./pgr_maximumcardinalitymatching.hpp"
-#include "./maximum_cardinality_matching_driver.h"
-#include "../../common/src/pgr_alloc.hpp"
 
-// #define DEBUG
-extern "C" {
+#include "./../../common/src/pgr_alloc.hpp"
+#include "../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
-}
+
 
 void
 do_pgr_maximum_cardinality_matching(
     pgr_basic_edge_t *data_edges,
-    bool directed,
     size_t total_tuples,
+    bool directed,
+
     pgr_basic_edge_t **return_tuples,
     size_t *return_count,
+
+    char** log_msg,
+    char** notice_msg,
     char **err_msg) {
     std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
 
     try {
         std::vector<pgr_basic_edge_t> matched_vertices;
 
         if (directed) {
-            PgrCardinalityGraph<BasicDirectedGraph> G;
+            pgrouting::flow::PgrCardinalityGraph<
+                pgrouting::BasicDirectedGraph> G;
             G.create_max_cardinality_graph(data_edges, total_tuples);
             std::vector<int64_t> mate_map(boost::num_vertices(G.boost_graph));
             G.maximum_cardinality_matching(mate_map);
             G.get_matched_vertices(matched_vertices, mate_map);
         } else {
-            PgrCardinalityGraph<BasicUndirectedGraph> G;
+            pgrouting::flow::PgrCardinalityGraph<
+                pgrouting::BasicUndirectedGraph> G;
             G.create_max_cardinality_graph(data_edges, total_tuples);
             std::vector<int64_t> mate_map(boost::num_vertices(G.boost_graph));
             G.maximum_cardinality_matching(mate_map);
@@ -78,21 +80,30 @@ do_pgr_maximum_cardinality_matching(
         }
         *return_count = matched_vertices.size();
 
-#ifndef DEBUG
-        *err_msg = strdup("OK");
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-
-        return;
-    } catch (...) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return;
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
+    } catch (AssertFailedException &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch(...) {
+        (*return_tuples) = pgr_free(*return_tuples);
+        (*return_count) = 0;
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
 
-
-
-
-
diff --git a/src/max_flow/src/maximum_cardinality_matching_driver.h b/src/max_flow/src/maximum_cardinality_matching_driver.h
index 958019d..a02fb74 100644
--- a/src/max_flow/src/maximum_cardinality_matching_driver.h
+++ b/src/max_flow/src/maximum_cardinality_matching_driver.h
@@ -39,10 +39,14 @@ extern "C" {
     void
         do_pgr_maximum_cardinality_matching(
             pgr_basic_edge_t *data_edges,
+            size_t total_edges,
             bool directed,
-            size_t total_tuples,
+
             pgr_basic_edge_t **return_tuples,
             size_t *return_count,
+
+            char** log_msg,
+            char** notice_msg,
             char **err_msg);
 
 
diff --git a/src/max_flow/src/pgr_edgedisjointpaths.hpp b/src/max_flow/src/pgr_edgedisjointpaths.hpp
index a3a8d73..c00b314 100644
--- a/src/max_flow/src/pgr_edgedisjointpaths.hpp
+++ b/src/max_flow/src/pgr_edgedisjointpaths.hpp
@@ -24,34 +24,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_MAX_FLOW_SRC_PGR_EDGEDISJOINTPATHS_HPP_
+#define SRC_MAX_FLOW_SRC_PGR_EDGEDISJOINTPATHS_HPP_
 #pragma once
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#ifdef unlink
-#undef unlink
-#endif
-#endif
-
 #include <boost/config.hpp>
 #include <boost/graph/adjacency_list.hpp>
 #include <boost/assert.hpp>
 
-#if 0
-#include "./../../common/src/signalhandler.h"
-#endif
-#include "./../../common/src/pgr_types.h"
 
 #include <map>
 #include <utility>
 #include <vector>
 #include <set>
+#include <limits>
 
+#include "./../../common/src/pgr_types.h"
 #include "pgr_maxflow.hpp"
 
-// user's functions
-// for development
+namespace pgrouting {
+namespace flow {    
 
 template<class G>
 class PgrEdgeDisjointPathsGraph {
@@ -98,10 +90,10 @@ class PgrEdgeDisjointPathsGraph {
   }
 
   void create_edge_disjoint_paths_graph(pgr_basic_edge_t *data_edges,
-                                        size_t total_tuples,
-                                        const std::set<int64_t> &source_vertices,
-                                        const std::set<int64_t> &sink_vertices,
-                                        bool directed) {
+          size_t total_tuples,
+          const std::set<int64_t> &source_vertices,
+          const std::set<int64_t> &sink_vertices,
+          bool directed) {
       std::set<int64_t> vertices;
       for (int64_t source : source_vertices) {
           vertices.insert(source);
@@ -128,7 +120,7 @@ class PgrEdgeDisjointPathsGraph {
               boost::add_edge(supersource, source, boost_graph);
           boost::tie(e_rev, added) =
               boost::add_edge(source, supersource, boost_graph);
-          capacity[e] = 999999999;
+          capacity[e] = (std::numeric_limits<int32_t>::max)();
           capacity[e_rev] = 0;
           rev[e] = e_rev;
           rev[e_rev] = e;
@@ -142,7 +134,7 @@ class PgrEdgeDisjointPathsGraph {
               boost::add_edge(sink, supersink, boost_graph);
           boost::tie(e1_rev, added) =
               boost::add_edge(supersink, sink, boost_graph);
-          capacity[e1] = 999999999;
+          capacity[e1] = (std::numeric_limits<int32_t>::max)();
           capacity[e1_rev] = 0;
           rev[e1] = e1_rev;
           rev[e1_rev] = e1;
@@ -246,7 +238,7 @@ class PgrEdgeDisjointPathsGraph {
           size_t j;
           for (j = 0; j < size - 1; j++) {
               General_path_element_t edge;
-              edge.seq = (int) (j + 1);
+              edge.seq = static_cast<int>(j + 1);
               edge.start_id = paths[i][0];
               edge.end_id = paths[i][size - 1];
               edge.node = paths[i][j];
@@ -258,7 +250,7 @@ class PgrEdgeDisjointPathsGraph {
               path_elements.push_back(edge);
           }
           General_path_element_t edge;
-          edge.seq = (int) (j + 1);
+          edge.seq = static_cast<int>(j + 1);
           edge.start_id = paths[i][0];
           edge.end_id = paths[i][size - 1];
           edge.node = paths[i][j];
@@ -267,3 +259,8 @@ class PgrEdgeDisjointPathsGraph {
       }
   }
 };
+
+}  // namespace flow
+}  // namespace pgrouting
+
+#endif  // SRC_MAX_FLOW_SRC_PGR_EDGEDISJOINTPATHS_HPP_
diff --git a/src/max_flow/src/pgr_maxflow.hpp b/src/max_flow/src/pgr_maxflow.hpp
index 4342c9a..231c54c 100644
--- a/src/max_flow/src/pgr_maxflow.hpp
+++ b/src/max_flow/src/pgr_maxflow.hpp
@@ -24,15 +24,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_MAX_FLOW_SRC_PGR_MAXFLOW_HPP_
+#define SRC_MAX_FLOW_SRC_PGR_MAXFLOW_HPP_
 #pragma once
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
 #ifdef unlink
 #undef unlink
 #endif
-#endif
 
 #include <boost/config.hpp>
 #include <boost/graph/adjacency_list.hpp>
@@ -40,20 +38,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include <boost/graph/edmonds_karp_max_flow.hpp>
 #include <boost/graph/boykov_kolmogorov_max_flow.hpp>
 
-#if 0
-#include "./../../common/src/signalhandler.h"
-#endif
-#include "./../../common/src/pgr_types.h"
 
 #include <map>
 #include <string>
 #include <utility>
 #include <vector>
 #include <set>
+#include <limits>
+
+#include "./../../common/src/pgr_types.h"
 
 
-// user's functions
-// for development
+namespace pgrouting {
 
 typedef boost::adjacency_list_traits<boost::vecS, boost::vecS, boost::directedS>
     Traits;
@@ -63,13 +59,16 @@ typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS,
         boost::property<boost::vertex_index_t, int64_t,
         boost::property<boost::vertex_color_t, boost::default_color_type,
         boost::property<boost::vertex_distance_t, int64_t,
-        boost::property<boost::vertex_predecessor_t, Traits::edge_descriptor> > > > >,
+        boost::property<boost::vertex_predecessor_t, Traits::edge_descriptor>
+        > > > >,
         // Edge properties
         boost::property<boost::edge_capacity_t, int64_t,
         boost::property<boost::edge_residual_capacity_t, int64_t,
         boost::property<boost::edge_reverse_t, Traits::edge_descriptor> > > >
     FlowGraph;
 
+namespace graph {
+
 template<class G>
 class PgrFlowGraph {
  public:
@@ -135,17 +134,18 @@ class PgrFlowGraph {
        * The same applies for sinks.
        * To avoid code repetition, a supersource/sink is used even in the one to one signature.
        */
-      std::set<int64_t> vertices;
-      for (int64_t source : source_vertices) {
-          vertices.insert(source);
-      }
-      for (int64_t sink : sink_vertices) {
-          vertices.insert(sink);
-      }
+
+      /*
+       * vertices = {sources} U {sink} U {edges.source} U {edge.target}
+       */
+      std::set<int64_t> vertices(source_vertices);
+      vertices.insert(sink_vertices.begin(), sink_vertices.end());
+
       for (size_t i = 0; i < total_tuples; ++i) {
           vertices.insert(data_edges[i].source);
           vertices.insert(data_edges[i].target);
       }
+
       for (int64_t id : vertices) {
           V v = add_vertex(boost_graph);
           id_to_V.insert(std::pair<int64_t, V>(id, v));
@@ -154,31 +154,7 @@ class PgrFlowGraph {
       bool added;
 
       V supersource = add_vertex(boost_graph);
-      for (int64_t source_id : source_vertices) {
-          V source = get_boost_vertex(source_id);
-          E e, e_rev;
-          boost::tie(e, added) =
-              boost::add_edge(supersource, source, boost_graph);
-          boost::tie(e_rev, added) =
-              boost::add_edge(source, supersource, boost_graph);
-          capacity[e] = 999999999;
-          capacity[e_rev] = 0;
-          rev[e] = e_rev;
-          rev[e_rev] = e;
-      }
-
       V supersink = add_vertex(boost_graph);
-      for (int64_t sink_id : sink_vertices) {
-          V sink = get_boost_vertex(sink_id);
-          E e, e_rev;
-          boost::tie(e, added) = boost::add_edge(sink, supersink, boost_graph);
-          boost::tie(e_rev, added) =
-              boost::add_edge(supersink, sink, boost_graph);
-          capacity[e] = 999999999;
-          capacity[e_rev] = 0;
-          rev[e] = e_rev;
-          rev[e_rev] = e;
-      }
 
       source_vertex = supersource;
       sink_vertex = supersink;
@@ -187,9 +163,9 @@ class PgrFlowGraph {
       rev = get(boost::edge_reverse, boost_graph);
       residual_capacity = get(boost::edge_residual_capacity, boost_graph);
 
-      /*
+      /* Inserting edges
        * Push-relabel requires each edge to be mapped to its reverse with capacity 0.
-       * The other algorithms have no such requirement. (I can have half as many edges)
+       * The other algorithms have no such requirement. (can have have as many edges)
        */
       if (strcmp(algorithm, "push_relabel") == 0) {
           for (size_t i = 0; i < total_tuples; ++i) {
@@ -239,6 +215,43 @@ class PgrFlowGraph {
               rev[e_rev] = e;
           }
       }
+      for (int64_t source_id : source_vertices) {
+          V source = get_boost_vertex(source_id);
+          int64_t total = 0;
+          for (auto edge = out_edges(source, boost_graph).first;
+                  edge != out_edges(source, boost_graph).second;
+                  ++edge) {
+             total += capacity[*edge];
+          }
+          E e, e_rev;
+          boost::tie(e, added) =
+              boost::add_edge(supersource, source, boost_graph);
+          boost::tie(e_rev, added) =
+              boost::add_edge(source, supersource, boost_graph);
+
+          capacity[e] = total;
+          /* From sources to supersource has 0 capacity*/
+          capacity[e_rev] = 0;
+          rev[e] = e_rev;
+          rev[e_rev] = e;
+      }
+      for (int64_t sink_id : sink_vertices) {
+          V sink = get_boost_vertex(sink_id);
+          E e, e_rev;
+          boost::tie(e, added) = boost::add_edge(sink, supersink, boost_graph);
+          boost::tie(e_rev, added) =
+              boost::add_edge(supersink, sink, boost_graph);
+          /*
+           * NOTE: int64_t crashes the server
+           */
+          /* From sinks to supersink has maximum capacity*/
+          capacity[e] = (std::numeric_limits<int32_t>::max)();
+          /* From supersink to sinks has 0 capacity*/
+          capacity[e_rev] = 0;
+          rev[e] = e_rev;
+          rev[e_rev] = e;
+      }
+
   }
 
   void get_flow_edges(std::vector<pgr_flow_t> &flow_edges) {
@@ -260,3 +273,8 @@ class PgrFlowGraph {
       }
   }
 };
+
+}  // namespace graph
+}  // namespace pgrouting
+
+#endif  // SRC_MAX_FLOW_SRC_PGR_MAXFLOW_HPP_
diff --git a/src/max_flow/src/pgr_maximumcardinalitymatching.hpp b/src/max_flow/src/pgr_maximumcardinalitymatching.hpp
index 5999533..405880b 100644
--- a/src/max_flow/src/pgr_maximumcardinalitymatching.hpp
+++ b/src/max_flow/src/pgr_maximumcardinalitymatching.hpp
@@ -24,24 +24,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_MAX_FLOW_SRC_PGR_MAXIMUMCARDINALITYMATCHING_HPP_
+#define SRC_MAX_FLOW_SRC_PGR_MAXIMUMCARDINALITYMATCHING_HPP_
 #pragma once
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
+#include "./../../common/src/pgr_types.h"
 #ifdef unlink
 #undef unlink
 #endif
-#endif
 
 #include <boost/config.hpp>
 #include <boost/graph/adjacency_list.hpp>
 #include <boost/graph/max_cardinality_matching.hpp>
 
-#if 0
-#include "./../../common/src/signalhandler.h"
-#endif
-#include "./../../common/src/pgr_types.h"
 
 #include <map>
 #include <vector>
@@ -49,14 +44,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include <set>
 
 
-// user's functions
-// for development
+
+
+namespace pgrouting {
 
 typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS>
     BasicUndirectedGraph;
 typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS>
     BasicDirectedGraph;
 
+namespace flow {
+
 template<class G>
 class PgrCardinalityGraph {
  public:
@@ -133,7 +131,8 @@ class PgrCardinalityGraph {
                */
               boost::tie(e, exists) =
                   boost::edge(*vi, mate_map[*vi], boost_graph);
-              if (((uint64_t)mate_map[*vi] != boost::graph_traits<G>::null_vertex())
+              if (((uint64_t)mate_map[*vi]
+                          != boost::graph_traits<G>::null_vertex())
                   && exists && !already_matched[*vi]
                   && !already_matched[mate_map[*vi]]) {
                   already_matched[*vi] = true;
@@ -151,7 +150,8 @@ class PgrCardinalityGraph {
                ++vi) {
               boost::tie(e, exists) =
                   boost::edge(*vi, mate_map[*vi], boost_graph);
-              if (((uint64_t)mate_map[*vi] != boost::graph_traits<G>::null_vertex())
+              if (((uint64_t)mate_map[*vi]
+                          != boost::graph_traits<G>::null_vertex())
                   && (*vi < (uint64_t)mate_map[*vi])) {
                   pgr_basic_edge_t matched_couple;
                   matched_couple.source = get_vertex_id(*vi);
@@ -168,3 +168,8 @@ class PgrCardinalityGraph {
                                            &mate_map[0]);
   }
 };
+
+}  // namespace flow
+}  // namespace pgrouting
+
+#endif  // SRC_MAX_FLOW_SRC_PGR_MAXIMUMCARDINALITYMATCHING_HPP_
diff --git a/src/max_flow/test/CMakeLists.txt b/src/max_flow/test/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/max_flow/test/doc-pgr_edgeDisjointPaths.test.sql b/src/max_flow/test/doc-pgr_edgeDisjointPaths.test.sql
index 74a1d35..db2e395 100644
--- a/src/max_flow/test/doc-pgr_edgeDisjointPaths.test.sql
+++ b/src/max_flow/test/doc-pgr_edgeDisjointPaths.test.sql
@@ -1,7 +1,5 @@
 --These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
 
-BEGIN;
-SET client_min_messages TO NOTICE;
 
 \echo -- q1
 SELECT * FROM pgr_edgeDisjointPaths(
@@ -35,4 +33,3 @@ SELECT * FROM pgr_edgeDisjointPaths(
 );
 
 \echo -- q6
-ROLLBACK;
diff --git a/src/max_flow/test/doc-pgr_maxFlow.result b/src/max_flow/test/doc-pgr_maxFlow.result
new file mode 100644
index 0000000..5e29fdb
--- /dev/null
+++ b/src/max_flow/test/doc-pgr_maxFlow.result
@@ -0,0 +1,9 @@
+-- q1
+280
+-- q2
+410
+-- q3
+280
+-- q4
+460
+-- q5
diff --git a/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql b/src/max_flow/test/doc-pgr_maxFlow.test.sql
similarity index 85%
copy from src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
copy to src/max_flow/test/doc-pgr_maxFlow.test.sql
index f8c5056..e4af301 100644
--- a/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
+++ b/src/max_flow/test/doc-pgr_maxFlow.test.sql
@@ -1,62 +1,59 @@
---These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
---The edge in the edge table are augmented with road-like categories for capacity values.
-
-BEGIN;
-
-SET client_min_messages TO NOTICE;
-
-\echo -- q1
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, 11
-);
-
-\echo -- q2
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, ARRAY[11, 1, 13]
-);
-
-\echo -- q3
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], 11
-);
-
-\echo -- q4
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
-);
-
-\echo -- q5
-
-ROLLBACK;
+--These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
+--The edge in the edge table are augmented with road-like categories for capacity values.
+
+
+
+\echo -- q1
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, 11
+);
+
+\echo -- q2
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, ARRAY[11, 1, 13]
+);
+
+\echo -- q3
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], 11
+);
+
+\echo -- q4
+SELECT * FROM pgr_maxFlow(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
+);
+
+\echo -- q5
+
diff --git a/src/max_flow/test/doc-pgr_maxFlowBoykovKolmogorov.test.sql b/src/max_flow/test/doc-pgr_maxFlowBoykovKolmogorov.test.sql
index 314acb5..9a3630c 100644
--- a/src/max_flow/test/doc-pgr_maxFlowBoykovKolmogorov.test.sql
+++ b/src/max_flow/test/doc-pgr_maxFlowBoykovKolmogorov.test.sql
@@ -1,60 +1,54 @@
---These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
---The edge in the edge table are augmented with road-like categories for capacity values.
-
-BEGIN;
-SET client_min_messages TO NOTICE;
-
-\echo -- q1
-SELECT * FROM pgr_maxFlowBoykovKolmogorov(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, 11
-);
-
-\echo -- q2
-SELECT * FROM pgr_maxFlowBoykovKolmogorov(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, ARRAY[1, 3, 11]
-);
-
-\echo -- q3
-SELECT * FROM pgr_maxFlowBoykovKolmogorov(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], 11
-);
-
-\echo -- q4
-SELECT * FROM pgr_maxFlowBoykovKolmogorov(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
-);
-
-\echo -- q5
-ROLLBACK;
+
+\echo -- q1
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, 11
+);
+
+\echo -- q2
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, ARRAY[1, 3, 11]
+);
+
+\echo -- q3
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], 11
+);
+
+\echo -- q4
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
+);
+
+\echo -- q5
diff --git a/src/max_flow/test/doc-pgr_maxFlowEdmondsKarp.test.sql b/src/max_flow/test/doc-pgr_maxFlowEdmondsKarp.test.sql
index 0be2d91..3de82bc 100644
--- a/src/max_flow/test/doc-pgr_maxFlowEdmondsKarp.test.sql
+++ b/src/max_flow/test/doc-pgr_maxFlowEdmondsKarp.test.sql
@@ -1,60 +1,57 @@
---These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
---The edge in the edge table are augmented with road-like categories for capacity values.
-
-BEGIN;
-SET client_min_messages TO NOTICE;
-
-\echo -- q1
-SELECT * FROM pgr_maxFlowEdmondsKarp(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, 11
-);
-
-\echo -- q2
-SELECT * FROM pgr_maxFlowEdmondsKarp(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-   , 6, ARRAY[1, 3, 11]
-);
-
-\echo -- q3
-SELECT * FROM pgr_maxFlowEdmondsKarp(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-   , ARRAY[6, 8, 12], 11
-);
-
-\echo -- q4
-SELECT * FROM pgr_maxFlowEdmondsKarp(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-   , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
-);
-
-\echo -- q5
-ROLLBACK;
+--These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
+--The edge in the edge table are augmented with road-like categories for capacity values.
+
+
+\echo -- q1
+SELECT * FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, 11
+);
+
+\echo -- q2
+SELECT * FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+   , 6, ARRAY[1, 3, 11]
+);
+
+\echo -- q3
+SELECT * FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+   , ARRAY[6, 8, 12], 11
+);
+
+\echo -- q4
+SELECT * FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+   , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
+);
+
+\echo -- q5
diff --git a/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql b/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
index f8c5056..1de13e3 100644
--- a/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
+++ b/src/max_flow/test/doc-pgr_maxFlowPushRelabel.test.sql
@@ -1,62 +1,59 @@
---These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
---The edge in the edge table are augmented with road-like categories for capacity values.
-
-BEGIN;
-
-SET client_min_messages TO NOTICE;
-
-\echo -- q1
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, 11
-);
-
-\echo -- q2
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , 6, ARRAY[11, 1, 13]
-);
-
-\echo -- q3
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], 11
-);
-
-\echo -- q4
-SELECT * FROM pgr_maxFlowPushRelabel(
-    'SELECT id,
-            source,
-            target,
-            c1.capacity as capacity,
-            c2.capacity as reverse_capacity
-    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
-    WHERE edge_table.reverse_category_id = c2.category_id
-    ORDER BY id'
-    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
-);
-
-\echo -- q5
-
-ROLLBACK;
+--These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
+--The edge in the edge table are augmented with road-like categories for capacity values.
+
+
+
+\echo -- q1
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, 11
+);
+
+\echo -- q2
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , 6, ARRAY[11, 1, 13]
+);
+
+\echo -- q3
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], 11
+);
+
+\echo -- q4
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id,
+            source,
+            target,
+            c1.capacity as capacity,
+            c2.capacity as reverse_capacity
+    FROM edge_table JOIN categories AS c1 USING(category_id), categories AS c2
+    WHERE edge_table.reverse_category_id = c2.category_id
+    ORDER BY id'
+    , ARRAY[6, 8, 12], ARRAY[1, 3, 11]
+);
+
+\echo -- q5
+
diff --git a/src/max_flow/test/doc-pgr_maximumCardinalityMatching.test.sql b/src/max_flow/test/doc-pgr_maximumCardinalityMatching.test.sql
index bb887f4..200ae9d 100644
--- a/src/max_flow/test/doc-pgr_maximumCardinalityMatching.test.sql
+++ b/src/max_flow/test/doc-pgr_maximumCardinalityMatching.test.sql
@@ -1,7 +1,5 @@
 --These tests used the sample data provided here: http://docs.pgrouting.org/2.2/en/doc/src/developer/sampledata.html#sampledata
 
-BEGIN;
-SET client_min_messages TO NOTICE;
 
 \echo -- q1
 SELECT * FROM pgr_maximumCardinalityMatching(
@@ -15,4 +13,3 @@ SELECT * FROM pgr_maximumCardinalityMatching(
 );
 
 \echo -- q3
-ROLLBACK;
diff --git a/src/max_flow/test/pgtap/flow-types-check.sql b/src/max_flow/test/pgtap/flow-types-check.sql
index 6b96ce6..31bd991 100644
--- a/src/max_flow/test/pgtap/flow-types-check.sql
+++ b/src/max_flow/test/pgtap/flow-types-check.sql
@@ -1,7 +1,7 @@
 \i setup.sql
 SET client_min_messages TO WARNING;
 
-SELECT plan(114);
+SELECT plan(123);
 --Boykov-Kolmogorov
 SELECT has_function('pgr_maxflowboykovkolmogorov');
 
@@ -90,6 +90,36 @@ SELECT function_returns('pgr_maxflowpushrelabel', ARRAY[
     'text', 'anyarray', 'anyarray'
     ], 'setof record');
 
+--pgr_max_flow
+SELECT has_function('pgr_maxflow');
+
+SELECT has_function('pgr_maxflow', ARRAY[
+    'text', 'bigint', 'bigint'
+    ]);
+SELECT has_function('pgr_maxflow', ARRAY[
+    'text', 'anyarray', 'bigint'
+    ]);
+SELECT has_function('pgr_maxflow', ARRAY[
+    'text', 'bigint', 'anyarray'
+    ]);
+SELECT has_function('pgr_maxflow', ARRAY[
+    'text', 'anyarray', 'anyarray'
+    ]);
+
+
+SELECT function_returns('pgr_maxflow', ARRAY[
+    'text', 'bigint', 'bigint'
+    ], 'bigint');
+SELECT function_returns('pgr_maxflow', ARRAY[
+    'text', 'bigint', 'anyarray'
+    ], 'bigint');
+SELECT function_returns('pgr_maxflow', ARRAY[
+    'text', 'anyarray', 'bigint'
+    ], 'bigint');
+SELECT function_returns('pgr_maxflow', ARRAY[
+    'text', 'anyarray', 'anyarray'
+    ], 'bigint');
+
 -- Push-relabel
 PREPARE pl_q_o2o AS
 SELECT pg_typeof(seq)::text AS t1, pg_typeof(edge_id)::text AS t2,
@@ -1365,4 +1395,4 @@ SELECT throws_ok('bk_rc5',
     'throws because reverse_capacity is TEXT');
 
 SELECT * FROM finish();
-ROLLBACK;
\ No newline at end of file
+ROLLBACK;
diff --git a/src/max_flow/test/pgtap/internet_example.sql b/src/max_flow/test/pgtap/internet_example.sql
new file mode 100644
index 0000000..661634f
--- /dev/null
+++ b/src/max_flow/test/pgtap/internet_example.sql
@@ -0,0 +1,144 @@
+\i setup.sql
+
+SELECT plan(3);
+
+
+/**************************** BOOST EXAMPLE ****************/
+
+CREATE TABLE boost_example(
+    id SERIAL PRIMARY KEY,
+    source BIGINT,
+    target BIGINT,
+    capacity INTEGER
+);
+
+INSERT INTO boost_example (source, target, capacity)
+VALUES 
+(1, 7,3),
+(1, 2, 20),
+(1, 3, 20),
+(2, 6,1),
+(2, 1, 20),
+(2, 4, 20),
+(3, 5,4),
+(3, 4, 20),
+(3, 1, 20),
+(4, 8,5),
+(4, 3, 20),
+(4, 2, 20),
+(5, 6, 20),
+(5, 7, 20),
+(6, 5, 20),
+(6, 8, 20),
+(7, 8, 20),
+(7, 5, 20),
+(8, 7, 20),
+(8, 6, 20)
+;
+
+
+/* NOTE: what is equal between the three algorithms is the maximum flow achieved */
+
+PREPARE boostSample1 AS
+SELECT sum(flow) FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id, source, target,capacity
+    FROM boost_example'
+   ,1, 8) WHERE source = 1;
+
+PREPARE boostSample2 AS
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id, source, target,capacity
+    FROM boost_example'
+   ,1, 8) WHERE source = 1;
+
+PREPARE boostSample3 AS
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id, source, target,capacity
+    FROM boost_example'
+   ,1, 8) WHERE source = 1;
+
+PREPARE boostSample4 AS
+SELECT sum(flow) FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id, source, target,capacity
+    FROM boost_example'
+   ,1, 8) WHERE target = 8;
+
+PREPARE boostSample5 AS
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id, source, target,capacity
+    FROM boost_example'
+   ,1, 8) WHERE target = 8;
+
+PREPARE boostSample6 AS
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id, source, target,capacity
+    FROM boost_example'
+   ,1, 8) WHERE target = 8;
+
+SELECT ('boostSample1',13, 'BOOST: pgr_maxFlowEdmondsKarp, flow from source is 13');
+SELECT ('boostSample4',13, 'BOOST: pgr_maxFlowEdmondsKarp, flow from source is 13');
+SELECT ('boostSample2',13, 'BOOST: pgr_maxFlowBoykovKolmogorov, flow from source is 13');
+SELECT ('boostSample5',13, 'BOOST: pgr_maxFlowBoykovKolmogorov, flow from source is 13');
+SELECT ('boostSample3',13, 'BOOST: pgr_maxFlowPushRelabel, flow from source is 13');
+SELECT ('boostSample6',13, 'BOOST: pgr_maxFlowPushRelabel, flow from source is 13');
+
+/**************************** WIKI EXAMPLE ****************/
+
+CREATE TABLE wiki_example(
+    id SERIAL PRIMARY KEY,
+    source BIGINT,
+    target BIGINT,
+    capacity INTEGER
+);
+
+/*
+S = 1, O = 2, P = 3, Q = 4, R = 5, T = 6
+*/
+INSERT INTO wiki_example(source, target, capacity)
+VALUES 
+(1, 2, 3),
+(1, 3, 3),
+(2, 3, 2),
+(2, 4, 3),
+(3, 5, 2),
+(4, 5, 4),
+(4, 6, 2),
+(5, 6, 3)
+;
+
+
+PREPARE wikiSample1 AS
+SELECT * FROM pgr_maxFlowEdmondsKarp(
+    'SELECT id, source, target,capacity
+    FROM wiki_example'
+   ,1, 6);
+
+PREPARE wikiSample2 AS
+SELECT * FROM pgr_maxFlowBoykovKolmogorov(
+    'SELECT id, source, target,capacity
+    FROM wiki_example'
+   ,1, 6);
+
+PREPARE wikiSample3 AS
+SELECT * FROM pgr_maxFlowPushRelabel(
+    'SELECT id, source, target,capacity
+    FROM wiki_example'
+   ,1, 6);
+
+PREPARE wikiresult AS
+SELECT *
+FROM (VALUES
+    (1, 1, 1, 2, 3, 0),
+    (2, 2, 1, 3, 2, 1),
+    (3, 4, 2, 4, 3, 0),
+    (4, 5, 3, 5, 2, 0),
+    (5, 6, 4, 5, 1, 3),
+    (6, 7, 4, 6, 2, 0),
+    (7, 8, 5, 6, 3, 0)
+) AS t(seq, edge_id, source, target, flow, residual_capacity);
+
+SELECT set_eq('wikiSample1', 'wikiresult', 'WIKI: pgr_maxFlowEdmondsKarp');
+SELECT set_eq('wikiSample2', 'wikiresult', 'WIKI: pgr_maxFlowBoykovKolmogorov');
+SELECT set_eq('wikiSample3', 'wikiresult', 'WIKI: pgr_maxFlowPushRelabel');
+
+ROLLBACK;
diff --git a/src/max_flow/test/test.conf b/src/max_flow/test/test.conf
index d22d99f..b765345 100644
--- a/src/max_flow/test/test.conf
+++ b/src/max_flow/test/test.conf
@@ -5,6 +5,7 @@
         'comment' => 'Max flow and applications test for any versions.',
         'data' => [ ],
         'tests' => [qw(
+            doc-pgr_maxFlow
             doc-pgr_maxFlowBoykovKolmogorov
             doc-pgr_maxFlowPushRelabel
             doc-pgr_maxFlowEdmondsKarp
@@ -12,6 +13,7 @@
             doc-pgr_edgeDisjointPaths
             )],
         'documentation' => [qw(
+            doc-pgr_maxFlow
             doc-pgr_maxFlowBoykovKolmogorov
             doc-pgr_maxFlowPushRelabel
             doc-pgr_maxFlowEdmondsKarp
diff --git a/src/pickDeliver/doc/CMakeLists.txt b/src/pickDeliver/doc/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pickDeliver/doc/doc-pickDeliver.queries b/src/pickDeliver/doc/doc-pickDeliver.queries
index 313cfa3..f4544d4 100644
--- a/src/pickDeliver/doc/doc-pickDeliver.queries
+++ b/src/pickDeliver/doc/doc-pickDeliver.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM _pgr_pickDeliver(
     'select * from customer order by id', 25, 200, 1, 30);
@@ -267,3 +271,5 @@ SELECT * FROM _pgr_pickDeliver(
 (127 rows)
 
 --q3
+ROLLBACK;
+ROLLBACK
diff --git a/src/pickDeliver/src/customers_input.c b/src/pickDeliver/src/customers_input.c
index e94c1e6..389484e 100644
--- a/src/pickDeliver/src/customers_input.c
+++ b/src/pickDeliver/src/customers_input.c
@@ -22,12 +22,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
+#include "./../../common/src/postgres_connection.h"
 
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/get_check_data.h"
 #include "./customers_input.h"
 
@@ -148,6 +146,8 @@ pgr_get_customers_data(
         }
     }
 
+    SPI_cursor_close(SPIportal);
+
     if (total_tuples == 0) {
         (*total_customers) = 0;
         PGR_DBG("NO customers");
diff --git a/src/pickDeliver/src/optimize.cpp b/src/pickDeliver/src/optimize.cpp
index c0e187c..6ae2732 100644
--- a/src/pickDeliver/src/optimize.cpp
+++ b/src/pickDeliver/src/optimize.cpp
@@ -27,8 +27,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include <algorithm>
 #include <limits>
 #include <set>
-#include "./solution.h"
+
 #include "./../../common/src/pgr_assert.h"
+
+#include "./solution.h"
 #include "./optimize.h"
 #include "./pgr_pickDeliver.h"
 
diff --git a/src/pickDeliver/src/order.cpp b/src/pickDeliver/src/order.cpp
index 0bd5cb6..101edd3 100644
--- a/src/pickDeliver/src/order.cpp
+++ b/src/pickDeliver/src/order.cpp
@@ -27,7 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 #include <set>
 #include "./../../common/src/pgr_assert.h"
-#include "pgr_pickDeliver.h"
+#include "./pgr_pickDeliver.h"
 #include "./order.h"
 
 namespace pgrouting {
diff --git a/src/pickDeliver/src/pgr_pickDeliver.cpp b/src/pickDeliver/src/pgr_pickDeliver.cpp
index 26849fc..dab1044 100644
--- a/src/pickDeliver/src/pgr_pickDeliver.cpp
+++ b/src/pickDeliver/src/pgr_pickDeliver.cpp
@@ -23,12 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./pgr_pickDeliver.h"
 
 #include <sstream>
 #include <string>
@@ -44,7 +39,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./solution.h"
 #include "./initial_solution.h"
 #include "./optimize.h"
-#include "./pgr_pickDeliver.h"
 
 namespace pgrouting {
 namespace vrp {
@@ -65,18 +59,20 @@ void
 Pgr_pickDeliver::solve() {
 #if 0
     solutions.push_back(Initial_solution(0, this));
-#endif
     solutions.push_back(Initial_solution(1, this));
 
     solutions.push_back(solve(solutions.back()));
+#endif
 
-#if 1
+#if 0
     solutions.push_back(Initial_solution(2, this));
     solutions.push_back(solve(solutions.back()));
     solutions.push_back(Initial_solution(3, this));
     solutions.push_back(solve(solutions.back()));
+#endif
     solutions.push_back(Initial_solution(4, this));
     solutions.push_back(solve(solutions.back()));
+#if 0
     solutions.push_back(Initial_solution(5, this));
     solutions.push_back(solve(solutions.back()));
     solutions.push_back(Initial_solution(6, this));
diff --git a/src/pickDeliver/src/pgr_pickDeliver.h b/src/pickDeliver/src/pgr_pickDeliver.h
index 9941a4e..8a72137 100644
--- a/src/pickDeliver/src/pgr_pickDeliver.h
+++ b/src/pickDeliver/src/pgr_pickDeliver.h
@@ -24,10 +24,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  ********************************************************************PGR-GNU*/
 #pragma once
 
-#ifdef __MINGW32__
-#include <winsock2.h>
-#include <windows.h>
-#endif
 
 #include "./../../common/src/pgr_types.h"
 
diff --git a/src/pickDeliver/src/pickDeliver.c b/src/pickDeliver/src/pickDeliver.c
index 31be79d..8e10609 100644
--- a/src/pickDeliver/src/pickDeliver.c
+++ b/src/pickDeliver/src/pickDeliver.c
@@ -27,21 +27,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
-
-// #define DEBUG
 
 #include "./../../common/src/debug_macro.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./customers_input.h"
 
 #include "./pickDeliver_driver.h"
@@ -138,8 +128,6 @@ PG_FUNCTION_INFO_V1(pickDeliver);
 PGDLLEXPORT Datum
 pickDeliver(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
     /**************************************************************************/
@@ -167,7 +155,7 @@ pickDeliver(PG_FUNCTION_ARGS) {
 
         PGR_DBG("Calling process");
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT32(1),
                 PG_GETARG_FLOAT8(2),
                 PG_GETARG_FLOAT8(3),
@@ -178,7 +166,11 @@ pickDeliver(PG_FUNCTION_ARGS) {
         /*                                                                   */
         /*********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -193,12 +185,10 @@ pickDeliver(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_vehicle_orders_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr <  funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -227,15 +217,15 @@ pickDeliver(PG_FUNCTION_ARGS) {
 
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].vehicle_id);
-        values[2] = Int32GetDatum(result_tuples[call_cntr].vehicle_seq);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].order_id);
-        values[4] = Float8GetDatum(result_tuples[call_cntr].travelTime);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].arrivalTime);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].waitTime);
-        values[7] = Float8GetDatum(result_tuples[call_cntr].serviceTime);
-        values[8] = Float8GetDatum(result_tuples[call_cntr].departureTime);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].vehicle_id);
+        values[2] = Int32GetDatum(result_tuples[funcctx->call_cntr].vehicle_seq);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].order_id);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].travelTime);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].arrivalTime);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].waitTime);
+        values[7] = Float8GetDatum(result_tuples[funcctx->call_cntr].serviceTime);
+        values[8] = Float8GetDatum(result_tuples[funcctx->call_cntr].departureTime);
 
         /*********************************************************************/
 
@@ -243,9 +233,6 @@ pickDeliver(PG_FUNCTION_ARGS) {
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/pickDeliver/src/pickDeliver_driver.cpp b/src/pickDeliver/src/pickDeliver_driver.cpp
index 72c8379..209d64e 100644
--- a/src/pickDeliver/src/pickDeliver_driver.cpp
+++ b/src/pickDeliver/src/pickDeliver_driver.cpp
@@ -28,21 +28,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  ********************************************************************PGR-GNU*/
 
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
 #include "./pickDeliver_driver.h"
+
 #include <string.h>
 #include <sstream>
 #include <string>
 #include <deque>
 #include <vector>
+
+#include "./pgr_pickDeliver.h"
+
 #include "./../../common/src/pgr_assert.h"
-#include "./../../common/src/pgr_types.h"
 #include "./../../common/src/pgr_alloc.hpp"
-#include "./pgr_pickDeliver.h"
 
 /************************************************************
   customers_sql TEXT,
diff --git a/src/pickDeliver/src/pickDeliver_driver.h b/src/pickDeliver/src/pickDeliver_driver.h
index babbc8b..037b69e 100644
--- a/src/pickDeliver/src/pickDeliver_driver.h
+++ b/src/pickDeliver/src/pickDeliver_driver.h
@@ -29,7 +29,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #ifndef SRC_PICKDELIVER_SRC_PICKDELIVER_DRIVER_H_
 #define SRC_PICKDELIVER_SRC_PICKDELIVER_DRIVER_H_
 
-#include <stddef.h>
 #include "./../../common/src/pgr_types.h"
 
 #ifdef __cplusplus
diff --git a/src/pickDeliver/src/solution.cpp b/src/pickDeliver/src/solution.cpp
index c210701..9bb9557 100644
--- a/src/pickDeliver/src/solution.cpp
+++ b/src/pickDeliver/src/solution.cpp
@@ -24,7 +24,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  ********************************************************************PGR-GNU*/
 
 
-
 #include <string>
 #include <vector>
 
diff --git a/src/pickDeliver/src/tw_node.cpp b/src/pickDeliver/src/tw_node.cpp
index 4a45521..af3cc4d 100644
--- a/src/pickDeliver/src/tw_node.cpp
+++ b/src/pickDeliver/src/tw_node.cpp
@@ -28,8 +28,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include <limits>
 #include <string>
 
-
 #include "./../../common/src/pgr_assert.h"
+
 #include "./pgr_pickDeliver.h"
 
 namespace pgrouting {
diff --git a/src/pickDeliver/src/vehicle.cpp b/src/pickDeliver/src/vehicle.cpp
index 8755e46..edc6908 100644
--- a/src/pickDeliver/src/vehicle.cpp
+++ b/src/pickDeliver/src/vehicle.cpp
@@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
+#include "./vehicle.h"
+
 #include <deque>
 #include <iostream>
 #include <algorithm>
@@ -34,9 +36,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 #include "../../common/src/pgr_assert.h"
 
-
 #include "./pgr_pickDeliver.h"
-#include "./vehicle.h"
 
 
 namespace pgrouting {
diff --git a/src/pickDeliver/src/vehicle.h b/src/pickDeliver/src/vehicle.h
index d09a351..f8f24f7 100644
--- a/src/pickDeliver/src/vehicle.h
+++ b/src/pickDeliver/src/vehicle.h
@@ -51,7 +51,7 @@ namespace vrp {
  *   Class my_vehicle : public vechicle
  * ~~~~
  *
- * @note All members return @b true when the operation is succesfull
+ * @note All members return @b true when the operation is successful
  *
  * A vehicle is a sequence of @ref Vehicle_node 
  * from @b starting site to @b ending site.
diff --git a/src/pickDeliver/src/vehicle_node.cpp b/src/pickDeliver/src/vehicle_node.cpp
index 68caea3..b904490 100644
--- a/src/pickDeliver/src/vehicle_node.cpp
+++ b/src/pickDeliver/src/vehicle_node.cpp
@@ -24,10 +24,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  ********************************************************************PGR-GNU*/
 
 
-
-#include <cassert>
 #include "./vehicle_node.h"
 
+
 namespace pgrouting {
 namespace vrp {
 
diff --git a/src/pickDeliver/src/vehicle_pickDeliver.cpp b/src/pickDeliver/src/vehicle_pickDeliver.cpp
index 0cb64f5..5a0176e 100644
--- a/src/pickDeliver/src/vehicle_pickDeliver.cpp
+++ b/src/pickDeliver/src/vehicle_pickDeliver.cpp
@@ -22,6 +22,9 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
+
+#include "./vehicle_pickDeliver.h"
+
 #include <iostream>
 #include <deque>
 #include <set>
@@ -33,7 +36,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./../../common/src/pgr_assert.h"
 #include "./order.h"
 #include "./vehicle.h"
-#include "./vehicle_pickDeliver.h"
 #include "./pgr_pickDeliver.h"
 
 
@@ -223,7 +225,9 @@ Vehicle_pickDeliver::push_back(const Order &order) {
     evaluate(m_path.size() - 3);
 
     pgassert(has_order(order));
+#if 0
     pgassert(!has_cv());
+#endif
     invariant();
 }
 
@@ -238,7 +242,9 @@ Vehicle_pickDeliver::push_front(const Order &order) {
     evaluate(1);
 
     pgassert(has_order(order));
+#if 0
     pgassert(!has_cv());
+#endif
     invariant();
 }
 
diff --git a/src/pickDeliver/test/jet_customers.result b/src/pickDeliver/test/jet_customers.result
index 346e1d5..b701e82 100644
--- a/src/pickDeliver/test/jet_customers.result
+++ b/src/pickDeliver/test/jet_customers.result
@@ -1,31 +1,31 @@
 1|1|1|0|0|0.|0|0|0.
-2|1|2|15|0.305203210992283|0.31|0|30|30.31
-3|1|3|13|0|30.31|0|30|60.31
-4|1|4|11|0|60.31|0|30|90.31
-5|1|5|9|0|90.31|0|30|120.31
-6|1|6|25|0.328105166067223|120.63|0|30|150.63
-7|1|7|23|0|150.63|0|30|180.63
-8|1|8|18|0|180.63|0|30|210.63
-9|1|9|10|0|210.63|0|30|240.63
-10|1|10|2|0|240.63|0|30|270.63
-11|1|11|27|0|270.63|0|30|300.63
-12|1|12|22|0.414019323220547|301.05|0|30|331.05
-13|1|13|16|0|331.05|0|30|361.05
-14|1|14|8|0|361.05|0|30|391.05
-15|1|15|28|0|391.05|0|30|421.05
-16|1|16|26|0.409882910109704|421.46|0|30|451.46
-17|1|17|21|0|451.46|0|30|481.46
-18|1|18|19|0|481.46|0|30|511.46
-19|1|19|17|0|511.46|0|30|541.46
-20|1|20|14|0|541.46|0|30|571.46
-21|1|21|6|0|571.46|0|30|601.46
-22|1|22|7|0.587132864009502|602.04|0|30|632.04
-23|1|23|5|0|632.04|0|30|662.04
-24|1|24|3|0|662.04|0|30|692.04
-25|1|25|1|0|692.04|0|30|722.04
-26|1|26|24|1.33232503541741|723.38|0|30|753.38
-27|1|27|20|0|753.38|0|30|783.38
-28|1|28|12|0|783.38|0|30|813.38
-29|1|29|4|0|813.38|0|30|843.38
-30|1|30|0|1.79089502763283|845.17|0|0|845.17
-31|-1|0|0|5.1675635374495|0.|0|840|845.17
+2|1|2|27|0.617668195716762|0.62|0|30|30.62
+3|1|3|25|0|30.62|0|30|60.62
+4|1|4|2|0|60.62|0|30|90.62
+5|1|5|23|0|90.62|0|30|120.62
+6|1|6|26|0.714478831037001|121.33|0|30|151.33
+7|1|7|19|0|151.33|0|30|181.33
+8|1|8|7|0.587132864009502|181.92|0|30|211.92
+9|1|9|5|0|211.92|0|30|241.92
+10|1|10|3|0|241.92|0|30|271.92
+11|1|11|1|0|271.92|0|30|301.92
+12|1|12|12|1.33232503541741|303.25|0|30|333.25
+13|1|13|4|0|333.25|0|30|363.25
+14|1|14|24|0|363.25|0|30|393.25
+15|1|15|20|0|393.25|0|30|423.25
+16|1|16|21|1.7278440323131|424.98|0|30|454.98
+17|1|17|6|0|454.98|0|30|484.98
+18|1|18|17|0|484.98|0|30|514.98
+19|1|19|14|0|514.98|0|30|544.98
+20|1|20|13|0.415245710393256|545.39|0|30|575.39
+21|1|21|11|0|575.39|0|30|605.39
+22|1|22|9|0|605.39|0|30|635.39
+23|1|23|15|0|635.39|0|30|665.39
+24|1|24|10|0.328105166067223|665.72|0|30|695.72
+25|1|25|18|0|695.72|0|30|725.72
+26|1|26|8|0.414019323220547|726.14|0|30|756.14
+27|1|27|28|0|756.14|0|30|786.14
+28|1|28|22|0|786.14|0|30|816.14
+29|1|29|16|0|816.14|0|30|846.14
+30|1|30|0|0.292249893070981|846.43|0|0|846.43
+31|-1|0|0|6.42906905124578|0.|0|840|846.43
diff --git a/src/pickDeliver/test/pickDeliver.data b/src/pickDeliver/test/pickDeliver.data
index aecce0d..ba2018e 100644
--- a/src/pickDeliver/test/pickDeliver.data
+++ b/src/pickDeliver/test/pickDeliver.data
@@ -1,120 +1,120 @@
-DROP TABLE IF EXISTS customer CASCADE;
-CREATE TABLE customer (
-    id INTEGER NOT NULL PRIMARY KEY,
-    x INTEGER,
-    y INTEGER,
-    demand INTEGER,
-    openTime INTEGER,
-    closeTime INTEGER, 
-    serviceTime INTEGER, 
-    pindex INTEGER,
-    dindex INTEGER 
-    );
-copy customer (id, x, y, demand, openTime, closeTime, serviceTime, pindex, dindex) from stdin;
-0	40	50	0	0	1236	0	0	0
-1	45	68	-10	912	967	90	11	0
-2	45	70	-20	825	870	90	6	0
-3	42	66	10	65	146	90	0	75
-4	42	68	-10	727	782	90	9	0
-5	42	65	10	15	67	90	0	7
-6	40	69	20	621	702	90	0	2
-7	40	66	-10	170	225	90	5	0
-8	38	68	20	255	324	90	0	10
-9	38	70	10	534	605	90	0	4
-10	35	66	-20	357	410	90	8	0
-11	35	69	10	448	505	90	0	1
-12	25	85	-20	652	721	90	18	0
-13	22	75	30	30	92	90	0	17
-14	22	85	-40	567	620	90	16	0
-15	20	80	-10	384	429	90	19	0
-16	20	85	40	475	528	90	0	14
-17	18	75	-30	99	148	90	13	0
-18	15	75	20	179	254	90	0	12
-19	15	80	10	278	345	90	0	15
-20	30	50	10	10	73	90	0	24
-21	30	52	-10	914	965	90	30	0
-22	28	52	-20	812	883	90	28	0
-23	28	55	10	732	777	0	0	103
-24	25	50	-10	65	144	90	20	0
-25	25	52	40	169	224	90	0	27
-26	25	55	-10	622	701	90	29	0
-27	23	52	-40	261	316	90	25	0
-28	23	55	20	546	593	90	0	22
-29	20	50	10	358	405	90	0	26
-30	20	55	10	449	504	90	0	21
-31	10	35	-30	200	237	90	32	0
-32	10	40	30	31	100	90	0	31
-33	8	40	40	87	158	90	0	37
-34	8	45	-30	751	816	90	38	0
-35	5	35	10	283	344	90	0	39
-36	5	45	10	665	716	0	0	105
-37	2	40	-40	383	434	90	33	0
-38	0	40	30	479	522	90	0	34
-39	0	45	-10	567	624	90	35	0
-40	35	30	-20	264	321	90	42	0
-41	35	32	-10	166	235	90	43	0
-42	33	32	20	68	149	90	0	40
-43	33	35	10	16	80	90	0	41
-44	32	30	10	359	412	90	0	46
-45	30	30	10	541	600	90	0	48
-46	30	32	-10	448	509	90	44	0
-47	30	35	-10	1054	1127	90	49	0
-48	28	30	-10	632	693	90	45	0
-49	28	35	10	1001	1066	90	0	47
-50	26	32	10	815	880	90	0	52
-51	25	30	10	725	786	0	0	101
-52	25	35	-10	912	969	90	50	0
-53	44	5	20	286	347	90	0	58
-54	42	10	40	186	257	90	0	60
-55	42	15	-40	95	158	90	57	0
-56	40	5	30	385	436	90	0	59
-57	40	15	40	35	87	90	0	55
-58	38	5	-20	471	534	90	53	0
-59	38	15	-30	651	740	90	56	0
-60	35	5	-40	562	629	90	54	0
-61	50	30	-10	531	610	90	67	0
-62	50	35	20	262	317	90	0	68
-63	50	40	50	171	218	90	0	74
-64	48	30	10	632	693	0	0	102
-65	48	40	10	76	129	90	0	72
-66	47	35	10	826	875	90	0	69
-67	47	40	10	12	77	90	0	61
-68	45	30	-20	734	777	90	62	0
-69	45	35	-10	916	969	90	66	0
-70	95	30	-30	387	456	90	81	0
-71	95	35	20	293	360	90	0	77
-72	53	30	-10	450	505	90	65	0
-73	92	30	-10	478	551	90	76	0
-74	53	35	-50	353	412	90	63	0
-75	45	65	-10	997	1068	90	3	0
-76	90	35	10	203	260	90	0	73
-77	88	30	-20	574	643	90	71	0
-78	88	35	20	109	170	0	0	104
-79	87	30	10	668	731	90	0	80
-80	85	25	-10	769	820	90	79	0
-81	85	35	30	47	124	90	0	70
-82	75	55	20	369	420	90	0	85
-83	72	55	-20	265	338	90	87	0
-84	70	58	20	458	523	90	0	89
-85	68	60	-20	555	612	90	82	0
-86	66	55	10	173	238	90	0	91
-87	65	55	20	85	144	90	0	83
-88	65	60	-10	645	708	90	90	0
-89	63	58	-20	737	802	90	84	0
-90	60	55	10	20	84	90	0	88
-91	60	60	-10	836	889	90	86	0
-92	67	85	20	368	441	90	0	93
-93	65	85	-20	475	518	90	92	0
-94	65	82	-10	285	336	90	96	0
-95	62	80	-20	196	239	90	98	0
-96	60	80	10	95	156	90	0	94
-97	60	85	30	561	622	0	0	106
-98	58	75	20	30	84	90	0	95
-99	55	80	-20	743	820	90	100	0
-100	55	85	20	647	726	90	0	99
-101	25	30	-10	725	786	90	51	0
-102	48	30	-10	632	693	90	64	0
-103	28	55	-10	732	777	90	23	0
-104	88	35	-20	109	170	90	78	0
-105	5	45	-10	665	716	90	36	0
-106	60	85	-30	561	622	90	97	0
+DROP TABLE IF EXISTS customer CASCADE;
+CREATE TABLE customer (
+    id INTEGER NOT NULL PRIMARY KEY,
+    x INTEGER,
+    y INTEGER,
+    demand INTEGER,
+    openTime INTEGER,
+    closeTime INTEGER, 
+    serviceTime INTEGER, 
+    pindex INTEGER,
+    dindex INTEGER 
+    );
+copy customer (id, x, y, demand, openTime, closeTime, serviceTime, pindex, dindex) from stdin;
+0	40	50	0	0	1236	0	0	0
+1	45	68	-10	912	967	90	11	0
+2	45	70	-20	825	870	90	6	0
+3	42	66	10	65	146	90	0	75
+4	42	68	-10	727	782	90	9	0
+5	42	65	10	15	67	90	0	7
+6	40	69	20	621	702	90	0	2
+7	40	66	-10	170	225	90	5	0
+8	38	68	20	255	324	90	0	10
+9	38	70	10	534	605	90	0	4
+10	35	66	-20	357	410	90	8	0
+11	35	69	10	448	505	90	0	1
+12	25	85	-20	652	721	90	18	0
+13	22	75	30	30	92	90	0	17
+14	22	85	-40	567	620	90	16	0
+15	20	80	-10	384	429	90	19	0
+16	20	85	40	475	528	90	0	14
+17	18	75	-30	99	148	90	13	0
+18	15	75	20	179	254	90	0	12
+19	15	80	10	278	345	90	0	15
+20	30	50	10	10	73	90	0	24
+21	30	52	-10	914	965	90	30	0
+22	28	52	-20	812	883	90	28	0
+23	28	55	10	732	777	0	0	103
+24	25	50	-10	65	144	90	20	0
+25	25	52	40	169	224	90	0	27
+26	25	55	-10	622	701	90	29	0
+27	23	52	-40	261	316	90	25	0
+28	23	55	20	546	593	90	0	22
+29	20	50	10	358	405	90	0	26
+30	20	55	10	449	504	90	0	21
+31	10	35	-30	200	237	90	32	0
+32	10	40	30	31	100	90	0	31
+33	8	40	40	87	158	90	0	37
+34	8	45	-30	751	816	90	38	0
+35	5	35	10	283	344	90	0	39
+36	5	45	10	665	716	0	0	105
+37	2	40	-40	383	434	90	33	0
+38	0	40	30	479	522	90	0	34
+39	0	45	-10	567	624	90	35	0
+40	35	30	-20	264	321	90	42	0
+41	35	32	-10	166	235	90	43	0
+42	33	32	20	68	149	90	0	40
+43	33	35	10	16	80	90	0	41
+44	32	30	10	359	412	90	0	46
+45	30	30	10	541	600	90	0	48
+46	30	32	-10	448	509	90	44	0
+47	30	35	-10	1054	1127	90	49	0
+48	28	30	-10	632	693	90	45	0
+49	28	35	10	1001	1066	90	0	47
+50	26	32	10	815	880	90	0	52
+51	25	30	10	725	786	0	0	101
+52	25	35	-10	912	969	90	50	0
+53	44	5	20	286	347	90	0	58
+54	42	10	40	186	257	90	0	60
+55	42	15	-40	95	158	90	57	0
+56	40	5	30	385	436	90	0	59
+57	40	15	40	35	87	90	0	55
+58	38	5	-20	471	534	90	53	0
+59	38	15	-30	651	740	90	56	0
+60	35	5	-40	562	629	90	54	0
+61	50	30	-10	531	610	90	67	0
+62	50	35	20	262	317	90	0	68
+63	50	40	50	171	218	90	0	74
+64	48	30	10	632	693	0	0	102
+65	48	40	10	76	129	90	0	72
+66	47	35	10	826	875	90	0	69
+67	47	40	10	12	77	90	0	61
+68	45	30	-20	734	777	90	62	0
+69	45	35	-10	916	969	90	66	0
+70	95	30	-30	387	456	90	81	0
+71	95	35	20	293	360	90	0	77
+72	53	30	-10	450	505	90	65	0
+73	92	30	-10	478	551	90	76	0
+74	53	35	-50	353	412	90	63	0
+75	45	65	-10	997	1068	90	3	0
+76	90	35	10	203	260	90	0	73
+77	88	30	-20	574	643	90	71	0
+78	88	35	20	109	170	0	0	104
+79	87	30	10	668	731	90	0	80
+80	85	25	-10	769	820	90	79	0
+81	85	35	30	47	124	90	0	70
+82	75	55	20	369	420	90	0	85
+83	72	55	-20	265	338	90	87	0
+84	70	58	20	458	523	90	0	89
+85	68	60	-20	555	612	90	82	0
+86	66	55	10	173	238	90	0	91
+87	65	55	20	85	144	90	0	83
+88	65	60	-10	645	708	90	90	0
+89	63	58	-20	737	802	90	84	0
+90	60	55	10	20	84	90	0	88
+91	60	60	-10	836	889	90	86	0
+92	67	85	20	368	441	90	0	93
+93	65	85	-20	475	518	90	92	0
+94	65	82	-10	285	336	90	96	0
+95	62	80	-20	196	239	90	98	0
+96	60	80	10	95	156	90	0	94
+97	60	85	30	561	622	0	0	106
+98	58	75	20	30	84	90	0	95
+99	55	80	-20	743	820	90	100	0
+100	55	85	20	647	726	90	0	99
+101	25	30	-10	725	786	90	51	0
+102	48	30	-10	632	693	90	64	0
+103	28	55	-10	732	777	90	23	0
+104	88	35	-20	109	170	90	78	0
+105	5	45	-10	665	716	90	36	0
+106	60	85	-30	561	622	90	97	0
diff --git a/src/proposed.rst b/src/proposed.rst
deleted file mode 100644
index b02566e..0000000
--- a/src/proposed.rst
+++ /dev/null
@@ -1,104 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _proposed:
-
-Experimental and Proposed functions
-===============================================================================
-
-:ref:`proposed`
-
-
-..
-   begin-warning
-
-.. warning:: These are proposed functions
-
-  - They are not officially of the current release.
-  - They likely will not be officially be part of the next release:
-
-    - The functions might not make use of ANY-INTEGER and ANY-NUMERICAL
-    - Name might change.
-    - Signature might change.
-    - Functionality might change.
-    - pgTap tests might be missing.
-    - Might need c/c++ coding.
-    - May lack documentation.
-    - Documentation if any might need to be rewritten.
-    - Documentation examples might need to be automatically generated.
-    - Might need a lot of feedback from the comunity.
-    - Might depend on a proposed function of pgRouting
-    - Might depend on a deprecated function of pgRouting
-
-..
-   end-warning
-
-
-Proposed functions
-------------------------------------------------
-
-- :ref:`contraction` - Reduce network size using contraction techniques
-
-  - :ref:`pgr_contractgraph` - Reduce network size using contraction techniques
-
-- :ref:`maxFlow`
-
-  - :ref:`pgr_maxFlowPushRelabel` - Maximum flow using push&relabel algorithm.
-  - :ref:`pgr_maxFlowEdmondsKarp` - Maximum flow using Edmonds&Karp algorithm.
-  - :ref:`pgr_maxFlowBoykovKolmogorov` - Maximum flow using Boykov&Kolmogorov algorithm.
-  
-- :ref:`maxFlowApplications`
-
-  - :ref:`pgr_maximumCardinalityMatching` - Calculates a maximum cardinality matching.
-  - :ref:`pgr_edgeDisjointPaths` - Calculates edge disjoint paths.
-
-- convenience
-
-  -  :ref:`pgr_point_to_edgenode` - convert a point geometry to a ``vertex_id`` based on closest edge.
-  -  :ref:`pgr_points_to_vids` - convert an array of point geometries into vertex ids.
-
-- graph analysis
-
-  -  :ref:`pgr_labelGraph` - Analyze / label  subgraphs within a network
-
-- Vehicle Routing Problems
-
-  -  :ref:`pgr_gsocvrppdtw` - VRP Pickup & Delivery (Euclidean)
-  -  :ref:`pgr_vrp_basic` - VRP One Depot
-
-
-.. toctree::
-  :hidden:
-
-  ../src/contraction/doc/contraction
-  ../src/contraction/doc/pgr_contractGraph
-  ../src/max_flow/doc/maxFlow
-  ../src/max_flow/doc/maxFlowApplications
-
-  ../src/convenience/doc/pgr_pointToEdgeNode
-  ../src/convenience/doc/pgr_pointsToVids
-  ../src/label_graph/doc/pgr_labelGraph
-  ../src/vrppdtw/doc/pgr_gsoc_vrppdtw
-  ../src/vrp_basic/doc/pgr_vrpOneDepot
-
-
-
-
-
-
-
-..  
-  The template
-   ------------
-    - :ref:`pgr_funnyDijkstra`
-    .. toctree::
-    :hidden:
-    ..
-     ../src/funnyDijkstra/doc/pgr_funnyDijkstra.rst
-
diff --git a/src/proposedNext.rst b/src/proposedNext.rst
deleted file mode 100644
index 68200e2..0000000
--- a/src/proposedNext.rst
+++ /dev/null
@@ -1,71 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _proposedNext:
-
-Stable proposed Functions
-==================================
-
-..
-    from-here
-    :ref:`proposedNext`
-
-..
-    begin-warning
-
-.. warning::
-
-    These are proposed functions for next mayor release.
-
-      - They are not officially in the current release.
-      - They will likely officially be part of the next mayor release:
-
-        - The functions make use of ANY-INTEGER and ANY-NUMERICAL
-        - Name might not change. (But still can)
-        - Signature might not change. (But still can)
-        - Functionality might not change. (But still can)
-        - pgTap tests have being done. But might need more.
-        - Documentation might need refinement.
-
-..
-    end-warning
-
-
-- As part of the :ref:`dijkstra`
-
-  - :ref:`pgr_dijkstraCostMatrix` Use pgr_dijkstra to calculate a cost matrix.
-  - :ref:`pgr_dijkstraVia` - Use pgr_dijkstra to make a route via vertices.
-
-- A new :ref:`withPoints`
-
-  - :ref:`pgr_withPoints` - Route from/to points anywhere on the graph.
-  - :ref:`pgr_withPointsCost` - Costs of the shortest paths.
-  - :ref:`pgr_withPointsCostMatrix` - Use pgr_withPoints to calculate a cost matrix.
-  - :ref:`pgr_withPointsKSP` - K shortest paths with points.
-  - :ref:`pgr_withPointsDD` - Driving distance.
-
-
-- A new Section
-
-  - :ref:`CostMatrix`
-
-
-..
-    to-here
-
-.. toctree::
-    :hidden:
-
-    ../src/costMatrix/doc/pgr_dijkstraCostMatrix
-    ../src/dijkstra/doc/pgr_dijkstraVia
-
-    ../src/withPoints/doc/withPoints
-
-    ../src/costMatrix/doc/costMatrix
-
diff --git a/src/routingFunctions.rst b/src/routingFunctions.rst
deleted file mode 100644
index 828ce75..0000000
--- a/src/routingFunctions.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-
-.. _routing_functions:
-
-*******************************************************************************
-Routing Functions
-*******************************************************************************
-
-..
-    from-here
-
-
-- :ref:`All pairs<all_pairs>` - All pair of vertices.
-
-  - :ref:`pgr_floydWarshall<pgr_floydWarshall>` - Floyd-Warshall's Algorithm
-  - :ref:`pgr_johnson<pgr_johnson>`- Johnson’s Algorithm
-
-- :ref:`pgr_astar<pgr_astar>` - Shortest Path A*
-- :ref:`pgr_bdAstar<bd_astar>` - Bi-directional A* Shortest Path
-- :ref:`pgr_bdDijkstra<bd_dijkstra>` - Bi-directional Dijkstra Shortest Path
-- :ref:`dijkstra<dijkstra>` - Dijkstra family functions
-
-  - :ref:`pgr_dijkstra` - Dijkstra's shortest path algorithm.
-  - :ref:`pgr_dijkstraCost` - Use pgr_dijkstra to calculate the costs of the shortest paths.
-      
-- :ref:`Driving Distance<drivingDistance>` - Driving Distance
-
-  - :ref:`pgr_drivingDistance<pgr_drivingDistance>` - Driving Distance
-
-  - Post processing
-
-    - :ref:`pgr_alphaShape` - Alpha shape computation
-    - :ref:`pgr_points_as_polygon` - Polygon around set of points
-
-- :ref:`pgr_ksp<pgr_ksp>` - K-Shortest Path
-- :ref:`pgr_trsp<trsp>` - Turn Restriction Shortest Path (TRSP)
-- :ref:`tsp`
-
-  - :ref:`pgr_TSP<pgr_TSP>` - When input is a cost matrix.
-  - :ref:`pgr_eucledianTSP<pgr_eucledianTSP>` - When input are coordinates.
-
-..
-    to-here
-
-.. toctree::
-    :hidden:
-
-    ../src/allpairs/doc/allpairs
-    ../src/astar/doc/pgr_astar
-    ../src/bd_astar/doc/pgr_bdAstar
-    ../src/bd_dijkstra/doc/pgr_bdDijkstra
-    ../src/dijkstra/doc/dijkstra
-    ../src/driving_distance/doc/drivingDistance
-    ../src/ksp/doc/pgr_ksp
-    ../src/tsp/doc/tsp
-    ../src/trsp/doc/pgr_trsp
-
diff --git a/src/topology/doc/doc-pgr_analyzeGraph.queries b/src/topology/doc/doc-pgr_analyzeGraph.queries
index ca91813..b98fe3c 100644
--- a/src/topology/doc/doc-pgr_analyzeGraph.queries
+++ b/src/topology/doc/doc-pgr_analyzeGraph.queries
@@ -317,7 +317,7 @@ NOTICE:                      Ring geometries: 0
 (1 row)
 
 SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',
-        rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
+    rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
 NOTICE:  PROCESSING:
 NOTICE:  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt','mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)')
 NOTICE:  Performing checks, please wait ...
@@ -338,7 +338,7 @@ NOTICE:                      Ring geometries: 0
 (1 row)
 
 SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',
-        rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
+    rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
 NOTICE:  PROCESSING:
 NOTICE:  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt','mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)')
 NOTICE:  Performing checks, please wait ...
@@ -363,7 +363,7 @@ DROP TABLE
 CREATE TABLE otherTable AS  (SELECT 'myhouse'::text AS place, st_point(2.5,2.5) AS other_geom) ;
 SELECT 1
 SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',
-        rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
+    rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
 NOTICE:  PROCESSING:
 NOTICE:  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt','mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='myhouse')')
 NOTICE:  Performing checks, please wait ...
@@ -384,7 +384,7 @@ NOTICE:                      Ring geometries: 0
 (1 row)
 
 SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',
-        rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
+    rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
 NOTICE:  PROCESSING:
 NOTICE:  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt','mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='myhouse')')
 NOTICE:  Performing checks, please wait ...
diff --git a/src/topology/doc/doc-pgr_createTopology.queries b/src/topology/doc/doc-pgr_createTopology.queries
index 04a87d7..a20f5f9 100644
--- a/src/topology/doc/doc-pgr_createTopology.queries
+++ b/src/topology/doc/doc-pgr_createTopology.queries
@@ -28,7 +28,7 @@ UPDATE edge_table SET source = NULL,  target = NULL;
 UPDATE 18
 --q2
 SELECT  pgr_createTopology('edge_table', 0.001,
-        'the_geom', 'id', 'source', 'target');
+    'the_geom', 'id', 'source', 'target');
 NOTICE:  PROCESSING:
 NOTICE:  pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
 NOTICE:  Performing checks, please wait .....
@@ -47,7 +47,7 @@ SET client_min_messages TO NOTICE;
 SET
 --q3
 SELECT  pgr_createTopology('edge_table', 0.001,
-        'id', 'the_geom');
+    'id', 'the_geom');
 NOTICE:  PROCESSING:
 NOTICE:  pgr_createTopology('edge_table', 0.001, 'id', 'the_geom', 'source', 'target', rows_where := 'true', clean := f)
 NOTICE:  Performing checks, please wait .....
@@ -67,7 +67,7 @@ UPDATE edge_table SET source = NULL,  target = NULL;
 UPDATE 18
 --q4
 SELECT  pgr_createTopology('edge_table', 0.001,
-        the_geom:='the_geom', id:='id', source:='source', target:='target');
+    the_geom:='the_geom', id:='id', source:='source', target:='target');
  pgr_createtopology 
 --------------------
  OK
@@ -80,7 +80,7 @@ UPDATE edge_table SET source = NULL,  target = NULL;
 UPDATE 18
 --q5
 SELECT  pgr_createTopology('edge_table', 0.001,
-        source:='source', id:='id', target:='target', the_geom:='the_geom');
+    source:='source', id:='id', target:='target', the_geom:='the_geom');
  pgr_createtopology 
 --------------------
  OK
@@ -109,7 +109,7 @@ SELECT  pgr_createTopology('edge_table', 0.001, rows_where:='id < 10');
 --q7.1
 --q8
 SELECT  pgr_createTopology('edge_table', 0.001,
-        rows_where:='the_geom && (SELECT st_buffer(the_geom, 0.05) FROM edge_table WHERE id=5)');
+    rows_where:='the_geom && (SELECT st_buffer(the_geom, 0.05) FROM edge_table WHERE id=5)');
  pgr_createtopology 
 --------------------
  OK
@@ -120,7 +120,7 @@ SELECT  pgr_createTopology('edge_table', 0.001,
 CREATE TABLE otherTable AS  (SELECT 100 AS gid,  st_point(2.5, 2.5) AS other_geom);
 SELECT 1
 SELECT  pgr_createTopology('edge_table', 0.001,
-        rows_where:='the_geom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
+    rows_where:='the_geom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
  pgr_createtopology 
 --------------------
  OK
@@ -194,14 +194,14 @@ SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='
 (1 row)
 
 SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', 
-        rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
+    rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
  pgr_createtopology 
 --------------------
  OK
 (1 row)
 
 SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', 
-        rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
+    rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
  pgr_createtopology 
 --------------------
  OK
@@ -210,14 +210,14 @@ SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='
 --q15.1
 --q16
 SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', 
-        rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
+    rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
  pgr_createtopology 
 --------------------
  OK
 (1 row)
 
 SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', 
-        rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
+    rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
  pgr_createtopology 
 --------------------
  OK
diff --git a/src/topology/doc/pgr_analyzeGraph.rst b/src/topology/doc/pgr_analyzeGraph.rst
index 9b8ae88..e8feffe 100644
--- a/src/topology/doc/pgr_analyzeGraph.rst
+++ b/src/topology/doc/pgr_analyzeGraph.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -25,14 +25,14 @@ Synopsis
 The function returns:
 
   - ``OK`` after the analysis has finished.
-  - ``FAIL`` when the analysis was not completed due to an error. 
+  - ``FAIL`` when the analysis was not completed due to an error.
 
-.. index:: 
+.. index::
 	single: analyzeGraph(Complete Signature)
 
 .. code-block:: sql
 
-	varchar pgr_analyzeGraph(text edge_table, double precision tolerance, 
+	varchar pgr_analyzeGraph(text edge_table, double precision tolerance,
                            text the_geom:='the_geom', text id:='id',
                            text source:='source',text target:='target',text rows_where:='true')
 
@@ -44,7 +44,7 @@ Description
 The  edge table to be analyzed must contain a source column and a target column filled with id's of the vertices of the segments and the corresponding vertices table <edge_table>_vertices_pgr that stores the vertices information.
 
   - Use :ref:`pgr_createVerticesTable <pgr_create_vert_table>` to create the vertices table.
-  - Use :ref:`pgr_createTopology <pgr_create_topology>` to create the topology and the vertices table. 
+  - Use :ref:`pgr_createTopology <pgr_create_topology>` to create the topology and the vertices table.
 
 .. rubric:: Parameters
 
@@ -52,10 +52,10 @@ The analyze graph function accepts the following parameters:
 
 :edge_table: ``text`` Network table name. (may contain the schema name as well)
 :tolerance: ``float8`` Snapping tolerance of disconnected edges. (in projection unit)
-:the_geom: ``text``  Geometry column name of the network table. Default value is ``the_geom``.  
-:id: ``text``  Primary key column name of the network table. Default value is ``id``. 
+:the_geom: ``text``  Geometry column name of the network table. Default value is ``the_geom``.
+:id: ``text``  Primary key column name of the network table. Default value is ``id``.
 :source: ``text`` Source column name of the network table. Default value is ``source``.
-:target: ``text``  Target column name of the network table.  Default value is ``target``. 
+:target: ``text``  Target column name of the network table.  Default value is ``target``.
 :rows_where: ``text``   Condition to select  a subset or rows.  Default value is ``true`` to indicate all rows.
 
 The function returns:
@@ -66,7 +66,7 @@ The function returns:
     * Fills completely the ``cnt`` and ``chk`` columns of the vertices table.
     * Returns the analysis of the section of the network defined by  ``rows_where``
 
-  - ``FAIL`` when the analysis was not completed due to an error. 
+  - ``FAIL`` when the analysis was not completed due to an error.
 
     * The vertices table is not found.
     * A required column of the Network table is not found or is not of the appropriate type.
@@ -82,10 +82,10 @@ The vertices table can be created with :ref:`pgr_createVerticesTable <pgr_create
 The structure of the vertices table is:
 
 :id: ``bigint`` Identifier of the vertex.
-:cnt: ``integer`` Number of vertices in the edge_table that reference this vertex. 
-:chk: ``integer``  Indicator that the vertex might have a problem. 
+:cnt: ``integer`` Number of vertices in the edge_table that reference this vertex.
+:chk: ``integer``  Indicator that the vertex might have a problem.
 :ein: ``integer`` Number of vertices in the edge_table that reference this vertex as incoming. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`.
-:eout: ``integer`` Number of vertices in the edge_table that reference this vertex as outgoing. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`. 
+:eout: ``integer`` Number of vertices in the edge_table that reference this vertex as outgoing. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`.
 :the_geom: ``geometry`` Point geometry of the vertex.
 
 .. rubric:: History
@@ -94,8 +94,8 @@ The structure of the vertices table is:
 
 Usage when the edge table's columns MATCH the default values:
 -------------------------------------------------------------------------------
- 
-.. rubric:: The simplest way to use pgr_analyzeGraph is: 
+
+.. rubric:: The simplest way to use pgr_analyzeGraph is:
 
 .. code-block:: sql
 
@@ -110,7 +110,7 @@ Usage when the edge table's columns MATCH the default values:
 
 We get the same result as the simplest way to use the function.
 
-.. warning::  | An error would occur when the arguments are not given in the appropriate order: In this example, the column ``id`` of the table ``mytable`` is passed to the function as the geometry column, and the geometry column ``the_geom`` is passed to the function as the id column. 
+.. warning::  | An error would occur when the arguments are not given in the appropriate order: In this example, the column ``id`` of the table ``mytable`` is passed to the function as the geometry column, and the geometry column ``the_geom`` is passed to the function as the id column.
  | ``SELECT  pgr_analyzeGraph('edge_table',0.001,'id','the_geom','source','target');``
  | ERROR: Can not determine the srid of the geometry "id" in table public.edge_table
 
@@ -158,7 +158,7 @@ Selecting the rows where the geometry is near the geometry of the row with ``gid
 
 Usage when the edge table's columns DO NOT MATCH the default values:
 -------------------------------------------------------------------------------
- 
+
 For the following table
 
 .. code-block:: sql
@@ -167,7 +167,7 @@ For the following table
 	CREATE TABLE mytable AS (SELECT id AS gid, source AS src ,target AS tgt , the_geom AS mygeom FROM edge_table);
 	SELECT pgr_createTopology('mytable',0.001,'mygeom','gid','src','tgt');
 
-.. rubric:: Using positional notation: 
+.. rubric:: Using positional notation:
 
 The arguments need to be given in the order described in the parameters:
 
@@ -256,7 +256,7 @@ Examples
 	NOTICE:  Potential gaps found near dead ends: 1
 	NOTICE:               Intersections detected: 1
 	NOTICE:                      Ring geometries: 0
-	
+
 	 pgr_analyzeGraph
 	--------------------
 	 OK
@@ -298,7 +298,7 @@ Examples
 	NOTICE:  Potential gaps found near dead ends: 1
 	NOTICE:               Intersections detected: 1
 	NOTICE:                      Ring geometries: 0
-	
+
 	 pgr_analyzeGraph
 	--------------------
 	 OK
@@ -321,7 +321,7 @@ Examples
 	NOTICE:  Potential gaps found near dead ends: 0
 	NOTICE:               Intersections detected: 0
 	NOTICE:                      Ring geometries: 0
-	
+
 	 pgr_analyzeGraph
 	--------------------
 	 OK
@@ -335,7 +335,7 @@ Examples
     NOTICE:  Rows with NULL geometry or NULL id: 0
     NOTICE:  Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
     NOTICE:  ----------------------------------------------
-	
+
 	 pgr_analyzeGraph
 	--------------------
 	 OK
@@ -356,12 +356,12 @@ Examples
     NOTICE:  Potential gaps found near dead ends: 0
     NOTICE:               Intersections detected: 0
     NOTICE:                      Ring geometries: 0
-	
+
 	 pgr_analyzeGraph
 	--------------------
 	 OK
 	(1 row)
-                         
+
 
 The examples use the :ref:`sampledata` network.
 
diff --git a/src/topology/doc/pgr_analyzeOneWay.rst b/src/topology/doc/pgr_analyzeOneWay.rst
index 8e344f7..8ed5716 100644
--- a/src/topology/doc/pgr_analyzeOneWay.rst
+++ b/src/topology/doc/pgr_analyzeOneWay.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -22,16 +22,16 @@ Name
 Synopsis
 -------------------------------------------------------------------------------
 
-This function analyzes oneway streets in a graph and identifies any flipped segments. 
+This function analyzes oneway streets in a graph and identifies any flipped segments.
 
-.. index:: 
+.. index::
 	single: analyzeOneway(Complete Signature)
 
 .. code-block:: sql
 
-	text pgr_analyzeOneway(geom_table text, 
-			       text[] s_in_rules, text[] s_out_rules, 
-                               text[] t_in_rules, text[] t_out_rules, 
+	text pgr_analyzeOneway(geom_table text,
+			       text[] s_in_rules, text[] s_out_rules,
+                               text[] t_in_rules, text[] t_out_rules,
 			       text oneway='oneway', text source='source', text target='target',
 			       boolean two_way_if_null=true);
 
@@ -50,7 +50,7 @@ So by counting the number of edges entering and exiting each node we can identif
 The  edge table to be analyzed must contain a source column and a target column filled with id's of the vertices of the segments and the corresponding vertices table <edge_table>_vertices_pgr that stores the vertices information.
 
   - Use :ref:`pgr_createVerticesTable <pgr_create_vert_table>` to create the vertices table.
-  - Use :ref:`pgr_createTopology <pgr_create_topology>` to create the topology and the vertices table. 
+  - Use :ref:`pgr_createTopology <pgr_create_topology>` to create the topology and the vertices table.
 
 .. rubric:: Parameters
 
@@ -61,7 +61,7 @@ The  edge table to be analyzed must contain a source column and a target column
 :t_out_rules: ``text[]`` target node **out** rules
 :oneway: ``text`` oneway column name name of the network table. Default value is ``oneway``.
 :source: ``text`` Source column name of the network table. Default value is ``source``.
-:target: ``text``  Target column name of the network table.  Default value is ``target``. 
+:target: ``text``  Target column name of the network table.  Default value is ``target``.
 :two_way_if_null: ``boolean`` flag to treat oneway NULL values as bi-directional.  Default value is ``true``.
 
 .. note:: It is strongly recommended to use the named notation. See :ref:`pgr_createVerticesTable <pgr_create_vert_table>` or :ref:`pgr_createTopology <pgr_create_topology>` for examples.
@@ -74,7 +74,7 @@ The function returns:
     * Uses the vertices table: <edge_table>_vertices_pgr.
     * Fills completely the ``ein`` and ``eout`` columns of the vertices table.
 
-  - ``FAIL`` when the analysis was not completed due to an error. 
+  - ``FAIL`` when the analysis was not completed due to an error.
 
     * The vertices table is not found.
     * A required column of the Network table is not found or is not of the appropriate type.
@@ -91,7 +91,7 @@ The structure of the vertices table is:
 :id: ``bigint`` Identifier of the vertex.
 :cnt: ``integer`` Number of vertices in the edge_table that reference this vertex. See :ref:`pgr_analyzeGgraph <pgr_analyze_graph>`.
 :chk: ``integer``  Indicator that the vertex might have a problem. See :ref:`pgr_analyzeGraph <pgr_analyze_graph>`.
-:ein: ``integer`` Number of vertices in the edge_table that reference this vertex as incoming. 
+:ein: ``integer`` Number of vertices in the edge_table that reference this vertex as incoming.
 :eout: ``integer`` Number of vertices in the edge_table that reference this vertex as outgoing.
 :the_geom: ``geometry`` Point geometry of the vertex.
 
@@ -106,7 +106,7 @@ Examples
 
 .. code-block:: sql
 
-	SELECT pgr_analyzeOneway('edge_table', 
+	SELECT pgr_analyzeOneway('edge_table',
         ARRAY['', 'B', 'TF'],
         ARRAY['', 'B', 'FT'],
         ARRAY['', 'B', 'FT'],
@@ -121,7 +121,7 @@ Examples
 	NOTICE:  Analysis 100% complete ...
 	NOTICE:  Found 0 potential problems in directionality
 
-	pgr_analyzeoneway 
+	pgr_analyzeoneway
 	-------------------
 	OK
 	(1 row)
diff --git a/src/topology/doc/pgr_createTopology.rst b/src/topology/doc/pgr_createTopology.rst
index 7f2c4c5..17a5b02 100644
--- a/src/topology/doc/pgr_createTopology.rst
+++ b/src/topology/doc/pgr_createTopology.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -24,14 +24,14 @@ Synopsis
 The function returns:
 
   - ``OK`` after the network topology has been built and the vertices table created.
-  - ``FAIL`` when the network topology was not built due to an error. 
+  - ``FAIL`` when the network topology was not built due to an error.
 
-.. index:: 
+.. index::
 	single: createTopology(Complete Signature)
 
 .. code-block:: none
 
-	varchar pgr_createTopology(text edge_table, double precision tolerance, 
+	varchar pgr_createTopology(text edge_table, double precision tolerance,
                            text the_geom:='the_geom', text id:='id',
                            text source:='source',text target:='target',
                            text rows_where:='true', boolean clean:=false)
@@ -47,10 +47,10 @@ The topology creation function accepts the following parameters:
 
 :edge_table: ``text`` Network table name. (may contain the schema name AS well)
 :tolerance: ``float8`` Snapping tolerance of disconnected edges. (in projection unit)
-:the_geom: ``text``  Geometry column name of the network table. Default value is ``the_geom``.  
-:id: ``text``  Primary key column name of the network table. Default value is ``id``. 
+:the_geom: ``text``  Geometry column name of the network table. Default value is ``the_geom``.
+:id: ``text``  Primary key column name of the network table. Default value is ``id``.
 :source: ``text`` Source column name of the network table. Default value is ``source``.
-:target: ``text``  Target column name of the network table.  Default value is ``target``. 
+:target: ``text``  Target column name of the network table.  Default value is ``target``.
 :rows_where: ``text``   Condition to SELECT a subset or rows.  Default value is ``true`` to indicate
  all rows that where ``source`` or ``target`` have a null value, otherwise the condition is used.
 :clean: ``boolean`` Clean any previous topology.  Default value is ``false``.
@@ -95,7 +95,7 @@ The structure of the vertices table is:
 :cnt: ``integer`` Number of vertices in the edge_table that reference this vertex. See :ref:`pgr_analyzeGraph <pgr_analyze_graph>`.
 :chk: ``integer``  Indicator that the vertex might have a problem. See :ref:`pgr_analyzeGraph <pgr_analyze_graph>`.
 :ein: ``integer`` Number of vertices in the edge_table that reference this vertex AS incoming. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`.
-:eout: ``integer`` Number of vertices in the edge_table that reference this vertex AS outgoing. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`. 
+:eout: ``integer`` Number of vertices in the edge_table that reference this vertex AS outgoing. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`.
 :the_geom: ``geometry`` Point geometry of the vertex.
 
 .. rubric:: History
@@ -104,8 +104,8 @@ The structure of the vertices table is:
 
 Usage when the edge table's columns MATCH the default values:
 -------------------------------------------------------------------------------
- 
-.. rubric:: The simplest way to use pgr_createTopology is: 
+
+.. rubric:: The simplest way to use pgr_createTopology is:
 
 .. literalinclude:: doc-pgr_createTopology.queries
    :start-after: --q1
@@ -124,7 +124,7 @@ We get the same result AS the simplest way to use the function.
 
 .. warning::  | An error would occur when the arguments are not given in the appropriate order:
     | In this example, the column ``id`` of the table ``ege_table`` is passed to the function as the geometry column,
-    | and the geometry column ``the_geom`` is passed to the function as the id column. 
+    | and the geometry column ``the_geom`` is passed to the function as the id column.
 
     .. literalinclude:: doc-pgr_createTopology.queries
        :start-after: --q3
@@ -173,14 +173,14 @@ Selecting the rows where the geometry is near the geometry of the row with ``gid
 
 Usage when the edge table's columns DO NOT MATCH the default values:
 -------------------------------------------------------------------------------
- 
+
 For the following table
 
 .. literalinclude:: doc-pgr_createTopology.queries
    :start-after: --q10
    :end-before: --q10.1
 
-.. rubric:: Using positional notation: 
+.. rubric:: Using positional notation:
 
 The arguments need to be given in the order described in the parameters.
 
diff --git a/src/topology/doc/pgr_createVerticesTable.rst b/src/topology/doc/pgr_createVerticesTable.rst
index 8872b01..d7ffa04 100644
--- a/src/topology/doc/pgr_createVerticesTable.rst
+++ b/src/topology/doc/pgr_createVerticesTable.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,7 +9,7 @@
 
 .. _pgr_create_vert_table:
 
-pgr_createVerticesTable 
+pgr_createVerticesTable
 ===============================================================================
 
 Name
@@ -24,9 +24,9 @@ Synopsis
 The function returns:
 
   - ``OK`` after the vertices table has been reconstructed.
-  - ``FAIL`` when the vertices table was not reconstructed due to an error. 
+  - ``FAIL`` when the vertices table was not reconstructed due to an error.
 
-.. index:: 
+.. index::
 	single: createVerticesTable(Complete Signature)
 
 .. code-block:: sql
@@ -44,9 +44,9 @@ Description
 The reconstruction of the vertices table  function accepts the following parameters:
 
 :edge_table: ``text`` Network table name. (may contain the schema name as well)
-:the_geom: ``text``  Geometry column name of the network table. Default value is ``the_geom``.  
+:the_geom: ``text``  Geometry column name of the network table. Default value is ``the_geom``.
 :source: ``text`` Source column name of the network table. Default value is ``source``.
-:target: ``text``  Target column name of the network table.  Default value is ``target``. 
+:target: ``text``  Target column name of the network table.  Default value is ``target``.
 :rows_where: ``text``   Condition to SELECT a subset or rows.  Default value is ``true`` to indicate all rows.
 
 .. warning::
@@ -66,7 +66,7 @@ The function returns:
     * Creates a vertices table: <edge_table>_vertices_pgr.
     * Fills ``id`` and ``the_geom`` columns of the vertices table based on the source and target columns of the edge table.
 
-  - ``FAIL`` when the vertices table was not reconstructed due to an error. 
+  - ``FAIL`` when the vertices table was not reconstructed due to an error.
 
     * A required column of the Network table is not found or is not of the appropriate type.
     * The condition is not well formed.
@@ -83,7 +83,7 @@ The structure of the vertices table is:
 :cnt: ``integer`` Number of vertices in the edge_table that reference this vertex. See :ref:`pgr_analyzeGraph <pgr_analyze_graph>`.
 :chk: ``integer``  Indicator that the vertex might have a problem. See :ref:`pgr_analyzeGraph <pgr_analyze_graph>`.
 :ein: ``integer`` Number of vertices in the edge_table that reference this vertex as incoming. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`.
-:eout: ``integer`` Number of vertices in the edge_table that reference this vertex as outgoing. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`. 
+:eout: ``integer`` Number of vertices in the edge_table that reference this vertex as outgoing. See :ref:`pgr_analyzeOneway <pgr_analyze_oneway>`.
 :the_geom: ``geometry`` Point geometry of the vertex.
 
 .. rubric:: History
@@ -92,8 +92,8 @@ The structure of the vertices table is:
 
 Usage when the edge table's columns MATCH the default values:
 -------------------------------------------------------------------------------
- 
-.. rubric:: The simplest way to use pgr_createVerticesTable is: 
+
+.. rubric:: The simplest way to use pgr_createVerticesTable is:
 
 .. code-block:: sql
 
@@ -108,7 +108,7 @@ Usage when the edge table's columns MATCH the default values:
 
 We get the same result as the simplest way to use the function.
 
-.. warning::  | An error would occur when the arguments are not given in the appropriate order: In this example, the column source column ``source`` of the table ``mytable`` is passed to the function as the geometry column, and the geometry column ``the_geom`` is passed to the function as the source column. 
+.. warning::  | An error would occur when the arguments are not given in the appropriate order: In this example, the column source column ``source`` of the table ``mytable`` is passed to the function as the geometry column, and the geometry column ``the_geom`` is passed to the function as the source column.
  | ``SELECT  pgr_createVerticesTable('edge_table','source','the_geom','target');``
 
 
@@ -149,14 +149,14 @@ Selecting the rows where the geometry is near the geometry of the row with ``gid
 .. code-block:: sql
 
 	DROP TABLE IF EXISTS otherTable;
-	CREATE TABLE otherTable AS  (SELECT 100 AS gid, st_point(2.5,2.5) AS other_geom) ; 
+	CREATE TABLE otherTable AS  (SELECT 100 AS gid, st_point(2.5,2.5) AS other_geom) ;
 	SELECT  pgr_createVerticesTable('edge_table',rows_where:='the_geom && (select st_buffer(othergeom,0.5) FROM otherTable WHERE gid=100)');
 
 
 
 Usage when the edge table's columns DO NOT MATCH the default values:
 -------------------------------------------------------------------------------
- 
+
 For the following table
 
 .. code-block:: sql
@@ -164,7 +164,7 @@ For the following table
 	DROP TABLE IF EXISTS mytable;
 	CREATE TABLE mytable AS (SELECT id AS gid, the_geom AS mygeom,source AS src ,target AS tgt FROM edge_table) ;
 
-.. rubric:: Using positional notation: 
+.. rubric:: Using positional notation:
 
 The arguments need to be given in the order described in the parameters:
 
@@ -220,7 +220,7 @@ Selecting the rows where the geometry is near the geometry of the row with ``gid
 .. code-block:: sql
 
 	DROP TABLE IF EXISTS otherTable;
-	CREATE TABLE otherTable AS  (SELECT 100 AS gid, st_point(2.5,2.5) AS other_geom) ; 
+	CREATE TABLE otherTable AS  (SELECT 100 AS gid, st_point(2.5,2.5) AS other_geom) ;
 	SELECT  pgr_createVerticesTable('mytable','mygeom','src','tgt',
 	                            rows_where:='the_geom && (SELECT st_buffer(othergeom,0.5) FROM otherTable WHERE gid=100)');
 
@@ -247,8 +247,8 @@ Examples
     NOTICE:                              Edges processed: 18
     NOTICE:  Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
     NOTICE:  ----------------------------------------------
-               
-	 pgr_createVerticesTable 
+
+	 pgr_createVerticesTable
 	--------------------
 	 OK
 	(1 row)
diff --git a/src/topology/doc/pgr_nodeNetwork.rst b/src/topology/doc/pgr_nodeNetwork.rst
index 918608c..712316f 100644
--- a/src/topology/doc/pgr_nodeNetwork.rst
+++ b/src/topology/doc/pgr_nodeNetwork.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -26,14 +26,14 @@ Synopsis
 
 The function reads edges from a not "noded" network table and writes the "noded" edges into a new table.
 
-.. index:: 
+.. index::
 	single: pgr_NodeNetwork(Complete Signature)
 
 .. code-block:: sql
 
     pgr_nodenetwork(edge_table, tolerance, id, text the_geom, table_ending, rows_where, outall)
     RETURNS TEXT
-  
+
 
 Description
 -------------------------------------------------------------------------------
@@ -42,7 +42,7 @@ A common problem associated with bringing GIS data into pgRouting is the fact th
 
 What we mean by "noded" is that at every intersection in the road network all the edges will be broken into separate road segments. There are cases like an over-pass and under-pass intersection where you can not traverse from the over-pass to the under-pass, but this function does not have the ability to detect and accommodate those situations.
 
-This function reads the ``edge_table`` table, that has a primary key column ``id`` and geometry column named ``the_geom`` and intersect all the segments in it against all the other segments and then creates a table ``edge_table_noded``. It uses the ``tolerance`` for deciding that multiple nodes within the tolerance are considered the same node. 
+This function reads the ``edge_table`` table, that has a primary key column ``id`` and geometry column named ``the_geom`` and intersect all the segments in it against all the other segments and then creates a table ``edge_table_noded``. It uses the ``tolerance`` for deciding that multiple nodes within the tolerance are considered the same node.
 
 Parameters
 
@@ -52,7 +52,7 @@ Parameters
 :the_geom: ``text`` Geometry column name of the network table. Default value is ``the_geom``.
 :table_ending: ``text`` Suffix for the new table's. Default value is ``noded``.
 
-The output table will have for  ``edge_table_noded``  
+The output table will have for  ``edge_table_noded``
 
 :id: ``bigint`` Unique identifier for the table
 :old_id: ``bigint``  Identifier of the edge in original table
@@ -82,11 +82,11 @@ Let's create the topology for the data in :ref:`sampledata`
 	NOTICE:  Rows with NULL geometry or NULL id: 0
 	NOTICE:  Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
 	NOTICE:  ----------------------------------------------
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	 OK
 	(1 row)
-	
+
 Now we can analyze the network.
 
 .. code-block:: sql
@@ -106,7 +106,7 @@ Now we can analyze the network.
 	NOTICE:  Potential gaps found near dead ends: 1
 	NOTICE:               Intersections detected: 1
 	NOTICE:                      Ring geometries: 0
- 	pgr_analyzegraph 
+ 	pgr_analyzegraph
 	------------------
  	 OK
 	(1 row)
@@ -128,17 +128,17 @@ The analysis tell us that the network has a gap and and an intersection. We try
 	NOTICE:         Total New segments: 21
 	NOTICE:   New Table: public.edge_table_noded
 	NOTICE:  ----------------------------------
- 	pgr_nodenetwork 
+ 	pgr_nodenetwork
 	-----------------
  	 OK
 	(1 row)
-	
+
 Inspecting the generated table, we can see that edges 13,14 and 18 has been segmented
 
 .. code-block:: sql
 
 	SELECT old_id,sub_id FROM edge_table_noded ORDER BY old_id,sub_id;
- 	 old_id | sub_id 
+ 	 old_id | sub_id
 	--------+--------
   	 1      |      1
   	 2      |      1
@@ -162,7 +162,7 @@ Inspecting the generated table, we can see that edges 13,14 and 18 has been segm
  	 18     |      1
  	 18     |      2
 	(21 rows)
-		
+
 We can create the topology of the new network
 
 .. code-block:: sql
@@ -176,16 +176,16 @@ We can create the topology of the new network
 	NOTICE:  Rows with NULL geometry or NULL id: 0
 	NOTICE:  Vertices table for table public.edge_table_noded is: public.edge_table_noded_vertices_pgr
 	NOTICE:  ----------------------------------------------
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	 OK
 	(1 row)
-	
+
 Now let's analyze the new topology
 
 .. code-block:: sql
 
-	SELECT pgr_analyzegraph('edge_table_noded', 0.001); 
+	SELECT pgr_analyzegraph('edge_table_noded', 0.001);
 	NOTICE:  PROCESSING:
 	NOTICE:  pgr_analyzeGraph('edge_table_noded',0.001,'the_geom','id','source','target','true')
 	NOTICE:  Performing checks, pelase wait...
@@ -200,7 +200,7 @@ Now let's analyze the new topology
 	NOTICE:  Potential gaps found near dead ends: 0
 	NOTICE:               Intersections detected: 0
 	NOTICE:                      Ring geometries: 0
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	 OK
 	(1 row)
@@ -225,24 +225,24 @@ Images
 
 	.. Rubric:: Before Image
 
-	.. image:: images/before_node_net.png 
+	.. image:: images/before_node_net.png
 		:scale: 60%
-		:alt: before image 
+		:alt: before image
 		:align: left
 
 
 	.. Rubric:: After Image
 
-	.. image:: images/after_node_net.png 
+	.. image:: images/after_node_net.png
 		:scale: 60%
-		:alt: after image 
+		:alt: after image
 		:align: left
 
 
 Comparing the results
 -------------------------------------------------------------------------------
 
-Comparing with the Analysis in the original edge_table, we see that.  
+Comparing with the Analysis in the original edge_table, we see that.
 
 +------------------+-----------------------------------------+--------------------------------------------------------------+
 |                  |                Before                   |                        After                                 |
@@ -275,7 +275,7 @@ Now, we are going to include the segments 13-1, 13-2 14-1, 14-2 ,18-1 and 18-2 i
 
    - Add a column old_id into edge_table, this column is going to keep track the id of the original edge
    - Insert only the segmented edges, that is, the ones whose max(sub_id) >1
- 
+
 .. code-block:: sql
 
 	alter table edge_table drop column if exists old_id;
@@ -284,7 +284,7 @@ Now, we are going to include the segments 13-1, 13-2 14-1, 14-2 ,18-1 and 18-2 i
    		(with
        		segmented as (select old_id,count(*) as i from edge_table_noded group by old_id)
    		select  segments.old_id,dir,cost,reverse_cost,segments.the_geom
-       			from edge_table as edges join edge_table_noded as segments on (edges.id = segments.old_id) 
+       			from edge_table as edges join edge_table_noded as segments on (edges.id = segments.old_id)
        			where edges.id in (select old_id from segmented where i>1) );
 
 We recreate the topology:
@@ -301,7 +301,7 @@ We recreate the topology:
 	NOTICE:  Rows with NULL geometry or NULL id: 0
 	NOTICE:  Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
 	NOTICE:  ----------------------------------------------
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	OK
 	(1 row)
@@ -328,7 +328,7 @@ To get the same analysis results as the topology of edge_table_noded, we do the
 	NOTICE:  Potential gaps found near dead ends: 0
 	NOTICE:               Intersections detected: 0
 	NOTICE:                      Ring geometries: 0
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	OK
 	(1 row)
@@ -354,7 +354,7 @@ To get the same analysis results as the original edge_table, we do the following
 	NOTICE:  Potential gaps found near dead ends: 1
 	NOTICE:               Intersections detected: 1
 	NOTICE:                      Ring geometries: 0
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	OK
 	(1 row)
@@ -379,7 +379,7 @@ Or we can analyze everything because, maybe edge 18 is an overpass, edge 14 is a
 	NOTICE:  Potential gaps found near dead ends: 0
 	NOTICE:               Intersections detected: 5
 	NOTICE:                      Ring geometries: 0
- 	pgr_createtopology 
+ 	pgr_createtopology
 	--------------------
  	OK
 	(1 row)
diff --git a/src/topology/doc/topology.rst b/src/topology/doc/topology-functions.rst
similarity index 82%
rename from src/topology/doc/topology.rst
rename to src/topology/doc/topology-functions.rst
index a3aefbb..67e78e0 100644
--- a/src/topology/doc/topology.rst
+++ b/src/topology/doc/topology-functions.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,25 +9,25 @@
 
 .. _topology_functions:
 
-Topology Functions
+Topology - Family of Functions
 ===============================================================================
 
-The pgRouting's topology of a network, represented with an edge table with source and target attributes and a vertices table associated with it. 
-Depending on the algorithm, you can create a topology or just reconstruct the vertices table, You can analyze the topology, 
+The pgRouting's topology of a network, represented with an edge table with source and target attributes and a vertices table associated with it.
+Depending on the algorithm, you can create a topology or just reconstruct the vertices table, You can analyze the topology,
 We also provide a function to node an unoded network.
 
-  -  :ref:`pgr_create_topology` -  to create a topology based on the geometry. 
+  -  :ref:`pgr_create_topology` -  to create a topology based on the geometry.
   -  :ref:`pgr_create_vert_table` - to reconstruct the vertices table based on the source and target information.
   -  :ref:`pgr_analyze_graph`  - to analyze the edges and vertices of the edge table.
   -  :ref:`pgr_analyze_oneway` - to analyze directionality of the edges.
   -  :ref:`pgr_node_network`  -to create nodes to a not noded edge table.
 
 .. toctree::
-  :hidden: 
+  :hidden:
 
-  ./pgr_createTopology
-  ./pgr_createVerticesTable
-  ./pgr_analyzeGraph
-  ./pgr_analyzeOneWay
-  ./pgr_nodeNetwork
+  pgr_createTopology
+  pgr_createVerticesTable
+  pgr_analyzeGraph
+  pgr_analyzeOneWay
+  pgr_nodeNetwork
 
diff --git a/src/topology/test/analyzeOneway-any.test.sql b/src/topology/test/analyzeOneway-any.test.sql
index 3c08288..36123e8 100644
--- a/src/topology/test/analyzeOneway-any.test.sql
+++ b/src/topology/test/analyzeOneway-any.test.sql
@@ -1,9 +1,7 @@
-BEGIN;
 ---------------------------------------------------------------------------------------
 --            pgr_analyzeOneway
 ---------------------------------------------------------------------------------------
 
-SET client_min_messages TO NOTICE;
 
 SELECT pgr_analyzeOneway('edge_table',
 ARRAY['', 'B', 'TF'],
@@ -11,4 +9,3 @@ ARRAY['', 'B', 'FT'],
 ARRAY['', 'B', 'FT'],
 ARRAY['', 'B', 'TF'],
 oneway:='dir');
-ROLLBACK;
diff --git a/src/topology/test/createVertTab-any.test.sql b/src/topology/test/createVertTab-any.test.sql
index 8fa90c7..2fbbc3f 100644
--- a/src/topology/test/createVertTab-any.test.sql
+++ b/src/topology/test/createVertTab-any.test.sql
@@ -1,10 +1,8 @@
-BEGIN;
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
 --                  PGR_createVerticesTable
 ------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------
-SET client_min_messages TO NOTICE;
 
 --    SELECT pgr_createTopology('edge_table',0.001);
 	 SELECT  pgr_createVerticesTable('edge_table');
@@ -38,4 +36,3 @@ SET client_min_messages TO NOTICE;
 -------------------------------------
 	SELECT pgr_createVerticesTable('edge_table');
 
-ROLLBACK;
diff --git a/src/topology/test/doc-pgr_analyzeGraph.test.sql b/src/topology/test/doc-pgr_analyzeGraph.test.sql
index 21514cc..24fd1e3 100644
--- a/src/topology/test/doc-pgr_analyzeGraph.test.sql
+++ b/src/topology/test/doc-pgr_analyzeGraph.test.sql
@@ -1,52 +1,49 @@
 
-BEGIN;
 
 
-    ------------------------------------------------------------------------------------------------------
-    ------------------------------------------------------------------------------------------------------
-    --              PGR_analyzegraph
-    ------------------------------------------------------------------------------------------------------
-    ------------------------------------------------------------------------------------------------------
-    SET client_min_messages TO NOTICE;
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+--              PGR_analyzegraph
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
 
-    SELECT  pgr_createTopology('edge_table',0.001, clean := true);
-    SELECT  pgr_analyzeGraph('edge_table',0.001);
-    SELECT  pgr_analyzeGraph('edge_table',0.001,'the_geom','id','source','target');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,'id','the_geom','source','target');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,the_geom:='the_geom',id:='id',source:='source',target:='target');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,source:='source',id:='id',target:='target',the_geom:='the_geom');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,source:='source');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id < 10');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='the_geom && (SELECT st_buffer(the_geom,0.05) FROM edge_table WHERE id=5)');
-    CREATE TABLE otherTable AS  (SELECT 100 AS gid, st_point(2.5,2.5) AS other_geom) ;
-    SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='the_geom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE gid=100)');
-    CREATE TABLE mytable AS (SELECT id AS gid, source AS src ,target AS tgt , the_geom AS mygeom FROM edge_table);
-    SELECT pgr_createTopology('mytable',0.001,'mygeom','gid','src','tgt', clean := true);
-    SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt');
-    SELECT  pgr_analyzeGraph('mytable',0.0001,'gid','mygeom','src','tgt');
-    SELECT  pgr_analyzeGraph('mytable',0.001,the_geom:='mygeom',id:='gid',source:='src',target:='tgt');
-    SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom');
-    SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',rows_where:='gid < 10');
-    SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',rows_where:='gid < 10');
-    SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',
-        rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
-    SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',
-        rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
-    DROP TABLE IF EXISTS otherTable;
-    CREATE TABLE otherTable AS  (SELECT 'myhouse'::text AS place, st_point(2.5,2.5) AS other_geom) ;
-    SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',
-        rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
-    SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',
-        rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
-    --------------------
-    SELECT  pgr_createTopology('edge_table',0.001, clean := true);
-    SELECT pgr_analyzeGraph('edge_table', 0.001);
-    SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id < 10');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id >= 10');
-    SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id < 17');
+SELECT  pgr_createTopology('edge_table',0.001, clean := true);
+SELECT  pgr_analyzeGraph('edge_table',0.001);
+SELECT  pgr_analyzeGraph('edge_table',0.001,'the_geom','id','source','target');
+SELECT  pgr_analyzeGraph('edge_table',0.001,'id','the_geom','source','target');
+SELECT  pgr_analyzeGraph('edge_table',0.001,the_geom:='the_geom',id:='id',source:='source',target:='target');
+SELECT  pgr_analyzeGraph('edge_table',0.001,source:='source',id:='id',target:='target',the_geom:='the_geom');
+SELECT  pgr_analyzeGraph('edge_table',0.001,source:='source');
+SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id < 10');
+SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='the_geom && (SELECT st_buffer(the_geom,0.05) FROM edge_table WHERE id=5)');
+CREATE TABLE otherTable AS  (SELECT 100 AS gid, st_point(2.5,2.5) AS other_geom) ;
+SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='the_geom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE gid=100)');
+CREATE TABLE mytable AS (SELECT id AS gid, source AS src ,target AS tgt , the_geom AS mygeom FROM edge_table);
+SELECT pgr_createTopology('mytable',0.001,'mygeom','gid','src','tgt', clean := true);
+SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt');
+SELECT  pgr_analyzeGraph('mytable',0.0001,'gid','mygeom','src','tgt');
+SELECT  pgr_analyzeGraph('mytable',0.001,the_geom:='mygeom',id:='gid',source:='src',target:='tgt');
+SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom');
+SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',rows_where:='gid < 10');
+SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',rows_where:='gid < 10');
+SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',
+    rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
+SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',
+    rows_where:='mygeom && (SELECT st_buffer(mygeom,1) FROM mytable WHERE gid=5)');
+DROP TABLE IF EXISTS otherTable;
+CREATE TABLE otherTable AS  (SELECT 'myhouse'::text AS place, st_point(2.5,2.5) AS other_geom) ;
+SELECT  pgr_analyzeGraph('mytable',0.001,'mygeom','gid','src','tgt',
+    rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
+SELECT  pgr_analyzeGraph('mytable',0.001,source:='src',id:='gid',target:='tgt',the_geom:='mygeom',
+    rows_where:='mygeom && (SELECT st_buffer(other_geom,1) FROM otherTable WHERE place='||quote_literal('myhouse')||')');
+--------------------
+SELECT  pgr_createTopology('edge_table',0.001, clean := true);
+SELECT pgr_analyzeGraph('edge_table', 0.001);
+SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id < 10');
+SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id >= 10');
+SELECT  pgr_analyzeGraph('edge_table',0.001,rows_where:='id < 17');
 
-    -- Simulate removal of edges
-    SELECT pgr_createTopology('edge_table', 0.001,rows_where:='id <17', clean := true);
-    SELECT pgr_analyzeGraph('edge_table', 0.001);
+-- Simulate removal of edges
+SELECT pgr_createTopology('edge_table', 0.001,rows_where:='id <17', clean := true);
+SELECT pgr_analyzeGraph('edge_table', 0.001);
 
-    ROLLBACK;
diff --git a/src/topology/test/doc-pgr_createTopology.test.sql b/src/topology/test/doc-pgr_createTopology.test.sql
index 4fb8fd2..b7db2d2 100644
--- a/src/topology/test/doc-pgr_createTopology.test.sql
+++ b/src/topology/test/doc-pgr_createTopology.test.sql
@@ -1,119 +1,117 @@
-BEGIN;
-    ------------------------------------------------------------------------------------------------------
-    ------------------------------------------------------------------------------------------------------
-    ------------------------------------------------------------------------------------------------------
-    --                pgr_createTopology
-    ------------------------------------------------------------------------------------------------------
-    ------------------------------------------------------------------------------------------------------
-    ------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+--                pgr_createTopology
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+
 \set VERBOSITY terse
 
-    SET client_min_messages TO NOTICE;
-    DROP TABLE edge_table_vertices_pgr;
-    UPDATE edge_table SET source = NULL,  target = NULL;
-    \echo --q1
-    SELECT  pgr_createTopology('edge_table', 0.001);
-    \echo --q1.1
-
-    DROP TABLE edge_table_vertices_pgr;
-    UPDATE edge_table SET source = NULL,  target = NULL;
-    \echo --q2
-    SELECT  pgr_createTopology('edge_table', 0.001,
-        'the_geom', 'id', 'source', 'target');
-    \echo --q2.1
-
-    SET client_min_messages TO NOTICE;
-    \echo --q3
-    SELECT  pgr_createTopology('edge_table', 0.001,
-        'id', 'the_geom');
-    \echo --q3.1
-
-    SET client_min_messages TO WARNING;
-    DROP TABLE edge_table_vertices_pgr;
-    UPDATE edge_table SET source = NULL,  target = NULL;
-    \echo --q4
-    SELECT  pgr_createTopology('edge_table', 0.001,
-        the_geom:='the_geom', id:='id', source:='source', target:='target');
-    \echo --q4.1
-
-    DROP TABLE edge_table_vertices_pgr;
-    UPDATE edge_table SET source = NULL,  target = NULL;
-    \echo --q5
-    SELECT  pgr_createTopology('edge_table', 0.001,
-        source:='source', id:='id', target:='target', the_geom:='the_geom');
-    \echo --q5.1
-
-    DROP TABLE edge_table_vertices_pgr;
-    UPDATE edge_table SET source = NULL,  target = NULL;
-    \echo --q6
-    SELECT  pgr_createTopology('edge_table', 0.001, source:='source');
-    \echo --q6.1
-
-    \echo --q7
-    SELECT  pgr_createTopology('edge_table', 0.001, rows_where:='id < 10');
-    \echo --q7.1
-
-    \echo --q8
-    SELECT  pgr_createTopology('edge_table', 0.001,
-        rows_where:='the_geom && (SELECT st_buffer(the_geom, 0.05) FROM edge_table WHERE id=5)');
-    \echo --q8.1
-
-    \echo --q9
-    CREATE TABLE otherTable AS  (SELECT 100 AS gid,  st_point(2.5, 2.5) AS other_geom);
-    SELECT  pgr_createTopology('edge_table', 0.001,
-        rows_where:='the_geom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
-    \echo --q9.1
-
-    -- THE NEXT SECTION
-
-    \echo --q10
-    CREATE TABLE mytable AS (SELECT id AS gid,  the_geom AS mygeom, source AS src , target AS tgt FROM edge_table) ;
-    \echo --q10.1
-
-    \echo --q11
-    SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', clean := TRUE);
-    \echo --q11.1
-
-    DROP TABLE mytable_vertices_pgr;
-    UPDATE mytable SET src = NULL,  tgt = NULL;
-    SET client_min_messages TO NOTICE;
-    \echo --q12
-    SELECT  pgr_createTopology('mytable', 0.001, 'gid', 'mygeom', 'src', 'tgt');
-    \echo --q12.1
-    SET client_min_messages TO WARNING;
-
-    \echo --q13
-    SELECT  pgr_createTopology('mytable', 0.001, the_geom:='mygeom', id:='gid', source:='src', target:='tgt');
-    \echo --q13.1
-
-    DROP TABLE mytable_vertices_pgr;
-    UPDATE mytable SET src = NULL,  tgt = NULL;
-    \echo --q14
-    SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom');
-    \echo --q14.1
-
-    \echo --q15
-    SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', rows_where:='gid < 10');
-    SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', rows_where:='gid < 10');
-    SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', 
-        rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
-    SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', 
-        rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
-    \echo --q15.1
-
-    \echo --q16
-    SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', 
-        rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
-    SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', 
-        rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
-    \echo --q16.1
-
-    -------------------------------------------------------------------------------
-    SET client_min_messages TO NOTICE;
-    \echo --q17
-    SELECT pgr_createTopology('edge_table',  0.001, rows_where:='id < 6', clean := true);
-    SELECT pgr_createTopology('edge_table',  0.001);
-    \echo --q17.1
-
-    SET client_min_messages TO NOTICE;
-    ROLLBACK;	
+DROP TABLE edge_table_vertices_pgr;
+UPDATE edge_table SET source = NULL,  target = NULL;
+\echo --q1
+SELECT  pgr_createTopology('edge_table', 0.001);
+\echo --q1.1
+
+DROP TABLE edge_table_vertices_pgr;
+UPDATE edge_table SET source = NULL,  target = NULL;
+\echo --q2
+SELECT  pgr_createTopology('edge_table', 0.001,
+    'the_geom', 'id', 'source', 'target');
+\echo --q2.1
+
+SET client_min_messages TO NOTICE;
+\echo --q3
+SELECT  pgr_createTopology('edge_table', 0.001,
+    'id', 'the_geom');
+\echo --q3.1
+
+SET client_min_messages TO WARNING;
+DROP TABLE edge_table_vertices_pgr;
+UPDATE edge_table SET source = NULL,  target = NULL;
+\echo --q4
+SELECT  pgr_createTopology('edge_table', 0.001,
+    the_geom:='the_geom', id:='id', source:='source', target:='target');
+\echo --q4.1
+
+DROP TABLE edge_table_vertices_pgr;
+UPDATE edge_table SET source = NULL,  target = NULL;
+\echo --q5
+SELECT  pgr_createTopology('edge_table', 0.001,
+    source:='source', id:='id', target:='target', the_geom:='the_geom');
+\echo --q5.1
+
+DROP TABLE edge_table_vertices_pgr;
+UPDATE edge_table SET source = NULL,  target = NULL;
+\echo --q6
+SELECT  pgr_createTopology('edge_table', 0.001, source:='source');
+\echo --q6.1
+
+\echo --q7
+SELECT  pgr_createTopology('edge_table', 0.001, rows_where:='id < 10');
+\echo --q7.1
+
+\echo --q8
+SELECT  pgr_createTopology('edge_table', 0.001,
+    rows_where:='the_geom && (SELECT st_buffer(the_geom, 0.05) FROM edge_table WHERE id=5)');
+\echo --q8.1
+
+\echo --q9
+CREATE TABLE otherTable AS  (SELECT 100 AS gid,  st_point(2.5, 2.5) AS other_geom);
+SELECT  pgr_createTopology('edge_table', 0.001,
+    rows_where:='the_geom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
+\echo --q9.1
+
+-- THE NEXT SECTION
+
+\echo --q10
+CREATE TABLE mytable AS (SELECT id AS gid,  the_geom AS mygeom, source AS src , target AS tgt FROM edge_table) ;
+\echo --q10.1
+
+\echo --q11
+SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', clean := TRUE);
+\echo --q11.1
+
+DROP TABLE mytable_vertices_pgr;
+UPDATE mytable SET src = NULL,  tgt = NULL;
+SET client_min_messages TO NOTICE;
+\echo --q12
+SELECT  pgr_createTopology('mytable', 0.001, 'gid', 'mygeom', 'src', 'tgt');
+\echo --q12.1
+SET client_min_messages TO WARNING;
+
+\echo --q13
+SELECT  pgr_createTopology('mytable', 0.001, the_geom:='mygeom', id:='gid', source:='src', target:='tgt');
+\echo --q13.1
+
+DROP TABLE mytable_vertices_pgr;
+UPDATE mytable SET src = NULL,  tgt = NULL;
+\echo --q14
+SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom');
+\echo --q14.1
+
+\echo --q15
+SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', rows_where:='gid < 10');
+SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', rows_where:='gid < 10');
+SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', 
+    rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
+SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', 
+    rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
+\echo --q15.1
+
+\echo --q16
+SELECT  pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', 
+    rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
+SELECT  pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', 
+    rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
+\echo --q16.1
+
+-------------------------------------------------------------------------------
+SET client_min_messages TO NOTICE;
+\echo --q17
+SELECT pgr_createTopology('edge_table',  0.001, rows_where:='id < 6', clean := true);
+SELECT pgr_createTopology('edge_table',  0.001);
+\echo --q17.1
+
+SET client_min_messages TO NOTICE;
diff --git a/src/topology/test/nodeNetwork-any.test.sql b/src/topology/test/nodeNetwork-any.test.sql
index ec894d2..0c272a4 100644
--- a/src/topology/test/nodeNetwork-any.test.sql
+++ b/src/topology/test/nodeNetwork-any.test.sql
@@ -1,8 +1,6 @@
-BEGIN;
 --                pgr_nodeNetwork
 --------------------------------------------------------------------------------
 
-SET client_min_messages TO NOTICE;
 
 SELECT pgr_createTopology('edge_table', 0.001, clean := TRUE);
 SELECT pgr_analyzegraph('edge_table', 0.001);
@@ -24,4 +22,3 @@ SELECT pgr_analyzegraph('edge_table', 0.001,rows_where:='id not in (select old_i
 SELECT pgr_analyzegraph('edge_table', 0.001,rows_where:='old_id is null');
 SELECT pgr_analyzegraph('edge_table', 0.001);
 
-ROLLBACK;
diff --git a/src/trsp/doc/README.md b/src/trsp/doc/README.md
index 8f42aeb..c2a6c5a 100644
--- a/src/trsp/doc/README.md
+++ b/src/trsp/doc/README.md
@@ -1,4 +1,10 @@
-# Notes on pgr_trsp for version 2.3.2
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
+ROLLBACK;
+ROLLBACK
+# Notes on pgr_trsp for version 2.4.0
 Table of contents
 * [Introduction](#introduction)
   * [The restriction](#the-restriction)
@@ -46,17 +52,18 @@ $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, 32, 33::TEXT AS via_pa
 therefore the shortest path expected are as if there was no restriction involved
 # The Vertices signature version
 ## (Vertices) No path representation differences
-Original code of pgr_trsp throws Error to represent no path found
-Sometimes it crasses the server
+Original function code
+* Sometimes it crasses the server when no path was found
+* Sometimes represents with Error a no path found
+* Forcing the user to use the wrapper or the replacement function
+
+Calls to the original function of is no longer allowed without restrictions
 ```
 SELECT * FROM _pgr_trsp(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-1, 15, true, true
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
+    1, 15, true, true
 );
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
 ```
 dijkstra returns EMPTY SET to represent no path found
 ```
@@ -83,17 +90,14 @@ SELECT * FROM pgr_TRSP(
 ```
 pgr_trsp use the original code when there are restrictions
 therefore throws Error to represent no path found
-Can get a server crash
 ```
 SELECT * FROM pgr_trsp(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-1, 15, true, true,
-$$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, 32, 33::TEXT AS via_path$$
+     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
+     1, 15, true, true,
+     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
+CONTEXT:  PL/pgSQL function pgr_trsp(text,integer,integer,boolean,boolean,text) line 29 at RETURN QUERY
 ```
 ## routing from/to same location
 using dijkstra to verify (1 to 1)
@@ -120,13 +124,12 @@ SELECT * FROM pgr_TRSP(
 
 ```
 call forcing the use of the original code (1 to 1)
-therefore is expected to return Error to represent no path found
-but "finds" a path when there should be no path.
+* not longer allowed without restrictions
+
 ```
 SELECT * FROM _pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-    1, 1,  
-    true, true
+    1, 1,  true, true
 );
  seq | id1 | id2 | cost 
 -----+-----+-----+------
@@ -220,14 +223,14 @@ SELECT * FROM pgr_TRSP(
 (2 rows)
 
 ```
-call to the original function (2 to 3)
-does not find the shortest path
+call forcing the use of the original code
+* not longer allowed without restrictions
+
 ```
 SELECT * FROM _pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     2, 3,
-    false, 
-    true
+    false, true
 );
  seq | id1 | id2 | cost 
 -----+-----+-----+------
@@ -246,8 +249,7 @@ does not find the shortest path
 SELECT * FROM pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     2, 3,
-    false, 
-    true,
+    false, true,
     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
  seq | id1 | id2 | cost 
@@ -284,17 +286,18 @@ SELECT * FROM _pgr_trsp(
 ```
 # The Edges signature version
 ## (Edges) No path representation differences
-Original code of pgr_trsp throws Error to represent no path found
-Can get a server crash
+Original function code
+* Sometimes it crasses the server when no path was found
+* Sometimes represents with Error a no path found
+* Forcing the user to use the wrapper or the replacement function
+
+Calls to the original function of is no longer allowed without restrictions
 ```
 SELECT * FROM _pgr_trsp(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-1, 0.5, 17, 0.5, true, true
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
+    1, 0.5, 17, 0.5, true, true
 );
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
 ```
 pgr_withPoints returns EMPTY SET to represent no path found
 ```
@@ -316,9 +319,8 @@ Remember that one characteristic of a path is that for a path of N edges it has
 For this example, suppose points, where the pid are different even if the edge and fraction are different.
 One point might be on the left side other on the right side, pgr_trsp does not take into account
 the side of the point
-Using the original code (with and without restrictions) it returns a path
-of N edge and N vertex instead of N edge and N+1 vertices
-* with out restrictions
+calls forcing the use of the original code
+* not longer allowed without restrictions
 
 ```
 SELECT * FROM _pgr_trsp(
@@ -669,7 +671,7 @@ SELECT * FROM pgr_withPoints(
 ```
 * Vertex 6 is on edge 8 at 1 fraction
 * Vertex 6 is also edge 11 at 0 fraction
-* The *_pgr_trsp* is used because at least one of the "points" is an actual vertex
+* Undefined behaviour when at least one of the "points" is an actual vertex
 
 ```
 SELECT * FROM pgr_trsp(
@@ -681,10 +683,7 @@ SELECT * FROM pgr_trsp(
 );
  seq | id1 | id2 | cost 
 -----+-----+-----+------
-   0 |   6 |   8 |    1
-   1 |   5 |   4 |    1
-   2 |   2 |   1 |  0.6
-(3 rows)
+(0 rows)
 
 SELECT * FROM pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
@@ -695,41 +694,32 @@ SELECT * FROM pgr_trsp(
 );
  seq | id1 | id2 | cost 
 -----+-----+-----+------
-   0 |   6 |   8 |    1
-   1 |   5 |   4 |    1
-   2 |   2 |   1 |  0.6
-(3 rows)
+(0 rows)
 
 ```
 # pgr_trspViaVertices
 ## pgr_trspViaVertices No path representation differences
-pgr_trspViaVertices throws error when a path on the route was not found
-this example no path is found (vertex 15 is disconnected) from the big graph
-can crash the server
+pgr_trspViaVertices uses _pgr_trsp which as mentioned before
+* Sometimes it crasses the server when no path was found
+* Sometimes represents with Error a no path found
+* Forcing the user to use the wrapper or the replacement function
+
+Calls to the original function of is no longer allowed without restrictions
 ```
 SELECT * FROM _pgr_trspViaVertices(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-ARRAY[1, 15, 2],
-false, true
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
+    ARRAY[1, 15, 2],
+    false, true
 );
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
-```
-In this example there exists a path from 2 to 1 but only complete routes are processed
-can crash the server
-```
+ERROR:  Error computing path: Path Not Found
+CONTEXT:  PL/pgSQL function _pgr_trspviavertices(text,integer[],boolean,boolean,text) line 23 at FOR over SELECT rows
 SELECT * FROM _pgr_trspViaVertices(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-ARRAY[1, 15, 2, 1],
-false,
-true
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
+    ARRAY[1, 15, 2, 1],
+    false, true
 );
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
+CONTEXT:  PL/pgSQL function _pgr_trspviavertices(text,integer[],boolean,boolean,text) line 23 at FOR over SELECT rows
 ```
 **pgr_dijkstraVia** returning what paths of the route it finds or EMPTY SET when non is found
 this case none is found
@@ -780,24 +770,19 @@ therefore the expected result is EMPTY SET to represent no route was found
 SELECT * FROM pgr_TRSPViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true
+    false, true
 );
  seq | id1 | id2 | id3 | cost 
 -----+-----+-----+-----+------
 (0 rows)
 
 ```
-Using the original code
-Because there is no path from 1 to 1 then there is no complete route 1 to 1 to 2
-therefore the expected result is Error to represent no route was found
-gives a result even that there is no path from 1 to 1
+Calls to the original function of is no longer allowed without restrictions
 ```
 SELECT * FROM _pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true
+    false, true
 );
  seq | id1 | id2 | id3 | cost 
 -----+-----+-----+-----+------
@@ -819,8 +804,7 @@ with restrictions the original code is used
 SELECT * FROM pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true,
+    false, true,
     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
  seq | id1 | id2 | id3 | cost 
@@ -843,8 +827,7 @@ Using explicitly the original code
 SELECT * FROM _pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true,
+    false, true,
     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
  seq | id1 | id2 | id3 | cost 
@@ -895,7 +878,7 @@ SELECT * FROM pgr_TRSPViaVertices(
 (3 rows)
 
 ```
-forcing to use the original code, it give not give the shortest path from 2 to 3
+Calls to the original function of is no longer allowed without restrictions
 ```
 SELECT * FROM _pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
@@ -948,7 +931,8 @@ SELECT * FROM pgr_trspViaEdges(
 ```
 A temporay wraper function is used when:
 * There are no restrictions
-* No point is a vertex in disguise (with pcts value of 0)
+* Before: No point is a vertex in disguise (with pcts value of 0)
+* Now: c$Undefined behaviour when a point is a vertex in disguise (with pcts value of 0)
 
 Internaly:
 * builds a new graph and calls pgr_dijkstraVia
@@ -960,7 +944,7 @@ What it returns
 * the points are renumbered to -1, -2 .. -N
 * if a point is part of a path it will show on the path
 
-Note: I dont mention the wrapper name due to the fact that this is not official documentation
+Note: I do not mention the wrapper name due to the fact that this is not official documentation
 Note: I will use *_pgr_withPointsVia* as the wrapper name just for sake of this notes
 Example excution
 ```
@@ -983,20 +967,19 @@ SELECT * FROM _pgr_withPointsVia(
 ## pgr_trspViaEdges No path representation differences
 This example no path is found (edge 17 is disconnected) from the big graph.
 * There is a vertex in disguise (fraction 0 or 1)
-* *pgr_trspViaEdges* original code is used
-* throws error to represent no route was not found
-* sometimes crashes the server
+* Undefined behaviour
 
 ```
 SELECT * FROM pgr_trspViaEdges(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-ARRAY[1, 17, 1], ARRAY[0,0.5,0.5],
-false, true
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
+    ARRAY[1, 17, 1], ARRAY[0,0.5,0.5],
+    false, true
 );
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ seq | id1 | id2 | id3 | cost 
+-----+-----+-----+-----+------
+   1 |     |     |     |     
+(1 row)
+
 ```
 This example no path is found (edge 17 is disconnected) from the big graph.
 * Has a restriction
@@ -1098,7 +1081,7 @@ SELECT * FROM pgr_trspViaEdges(
 ```
 Routing points & vertices
 * vertex 6 is on edge 11 with fraction 0
-original code is used
+* Undefined behavior
 ```
 SELECT * FROM pgr_trspViaEdges(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
@@ -1119,11 +1102,11 @@ SELECT * FROM pgr_trspViaEdges(
    2 |   1 |   2 |   4 |    1
    3 |   1 |   5 |  10 |    1
    4 |   1 |  10 |  12 |  0.6
-   5 |   2 |  -1 |  12 |  0.4
-   6 |   2 |  11 |  13 |    1
-   7 |   2 |  12 |  15 |    1
-   8 |   2 |   9 |   9 |    1
-   9 |   2 |   6 |  -1 |    0
-(9 rows)
+   5 |   1 |  -2 |  -1 |    0
+(5 rows)
 
 ```
+BEGIN;
+BEGIN
+ROLLBACK;
+ROLLBACK
diff --git a/src/trsp/doc/doc-trsp.queries b/src/trsp/doc/doc-trsp.queries
index 78aaa01..df8cb9e 100644
--- a/src/trsp/doc/doc-trsp.queries
+++ b/src/trsp/doc/doc-trsp.queries
@@ -1,5 +1,7 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_trsp(
         'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
diff --git a/src/trsp/doc/pgr_trsp.rst b/src/trsp/doc/pgr_trsp.rst
index 1c82361..3d6a97a 100644
--- a/src/trsp/doc/pgr_trsp.rst
+++ b/src/trsp/doc/pgr_trsp.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -12,7 +12,7 @@
 pgr_trsp - Turn Restriction Shortest Path (TRSP)
 ===============================================================================
 
-.. index:: 
+.. index::
 	single: trsp(text,integer,integer,boolean,boolean)
 	single: trsp(text,integer,integer,boolean,boolean,text)
 	single: trspViaVertices(text,integer,double precision,integer,double precision,boolean,boolean)
@@ -37,7 +37,7 @@ The turn restricted shorthest path (TRSP) is a shortest path algorithm that can
 
 .. code-block:: sql
 
-	pgr_costResult[] pgr_trsp(sql text, source_edge integer, source_pos float8, 
+	pgr_costResult[] pgr_trsp(sql text, source_edge integer, source_pos float8,
 	                target_edge integer, target_pos float8,
                     directed boolean, has_rcost boolean [,restrict_sql text]);
 
@@ -56,7 +56,7 @@ The turn restricted shorthest path (TRSP) is a shortest path algorithm that can
 Description
 -------------------------------------------------------------------------------
 
-The Turn Restricted Shortest Path algorithm (TRSP) is similar to the :ref:`shooting_star` in that you can specify turn restrictions.
+The Turn Restricted Shortest Path algorithm (TRSP) is similar to the shooting star in that you can specify turn restrictions.
 
 The TRSP setup is mostly the same as :ref:`Dijkstra shortest path <pgr_dijkstra>` with the addition of an optional turn restriction table. This provides an easy way of adding turn restrictions to a road network by placing them in a separate table.
 
@@ -93,7 +93,7 @@ Another variant of TRSP allows to specify **EDGE id** of source and target toget
 
 :source_edge: ``int4`` **EDGE id** of the start edge
 :source_pos: ``float8`` fraction of 1 defines the position on the start edge
-:target_edge: ``int4`` **EDGE id** of the end edge 
+:target_edge: ``int4`` **EDGE id** of the end edge
 :target_pos: ``float8`` fraction of 1 defines the position on the end edge
 
 Returns set of :ref:`type_cost_result`:
diff --git a/src/trsp/sql/routing_trsp.sql b/src/trsp/sql/routing_trsp.sql
deleted file mode 100644
index 62e0088..0000000
--- a/src/trsp/sql/routing_trsp.sql
+++ /dev/null
@@ -1,31 +0,0 @@
------------------------------------------------------------------------
--- Core function for time_dependent_shortest_path computation
--- See README for description
------------------------------------------------------------------------
---TODO - Do we need to add another sql text for the query on time-dependent-weights table?
---     - For now just checking with static data, so the query is similar to shortest_paths.
-
-CREATE OR REPLACE FUNCTION pgr_trsp(
-		sql text, 
-		source_vid integer, 
-        target_vid integer, 
-        directed boolean, 
-        has_reverse_cost boolean, 
-        turn_restrict_sql text DEFAULT null)
-        RETURNS SETOF pgr_costResult
-        AS '$libdir/librouting-2.1', 'turn_restrict_shortest_path_vertex'
-        LANGUAGE 'c' IMMUTABLE;
-
-CREATE OR REPLACE FUNCTION pgr_trsp(
-		sql text, 
-		source_eid integer, 
-        source_pos float8,
-        target_eid integer,
-        target_pos float8,
-        directed boolean, 
-        has_reverse_cost boolean, 
-        turn_restrict_sql text DEFAULT null)
-        RETURNS SETOF pgr_costResult
-        AS '$libdir/librouting-2.1', 'turn_restrict_shortest_path_edge'
-        LANGUAGE 'c' IMMUTABLE;
-
diff --git a/src/trsp/sql/routing_trsp_vias.sql b/src/trsp/sql/routing_trsp_vias.sql
index 76473c7..0a8982a 100644
--- a/src/trsp/sql/routing_trsp_vias.sql
+++ b/src/trsp/sql/routing_trsp_vias.sql
@@ -1,4 +1,27 @@
-create or replace function pgr_trspViaVertices(sql text, vids integer[], directed boolean, has_reverse_cost boolean, turn_restrict_sql text DEFAULT NULL::text)
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2013 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+create or replace function _pgr_trspViaVertices(sql text, vids integer[], directed boolean, has_reverse_cost boolean, turn_restrict_sql text DEFAULT NULL::text)
     RETURNS SETOF pgr_costresult3 AS
 $body$
 /*
@@ -55,7 +78,7 @@ $body$
 
 ----------------------------------------------------------------------------------------------------------
 
-create or replace function pgr_trspViaEdges(sql text, eids integer[], pcts float8[], directed boolean, has_reverse_cost boolean, turn_restrict_sql text DEFAULT NULL::text)
+create or replace function _pgr_trspViaEdges(sql text, eids integer[], pcts float8[], directed boolean, has_reverse_cost boolean, turn_restrict_sql text DEFAULT NULL::text)
     RETURNS SETOF pgr_costresult3 AS
 $body$
 /*
@@ -84,7 +107,7 @@ begin
     for i in 1 .. array_length(eids, 1)-1 loop
         seq2 := seq2 + 1;
         for rr in select a.seq, seq2 as id1, a.id1 as id2, a.id2 as id3, a.cost
-                    from pgr_trsp(sql,
+                    from _pgr_trsp(sql,
                                   eids[i], pcts[i],
                                   eids[i+1], pcts[i+1],
                                   directed,
@@ -141,7 +164,7 @@ $body$
 
 
 ----------------------------------------------------------------------------------------------------------
-/*this via functions are not documented they will be deleted on 2.2*/
+/*this via functions are not documented they will be deleted on 2.2
 
 create or replace function pgr_trsp(sql text, vids integer[], directed boolean, has_reverse_cost boolean, turn_restrict_sql text DEFAULT NULL::text)
     RETURNS SETOF pgr_costresult AS
@@ -166,3 +189,4 @@ $body$
     language plpgsql stable
     cost 100
     rows 1000;
+*/
diff --git a/src/trsp/sql/trsp_V2.2.sql b/src/trsp/sql/trsp_V2.2.sql
index ccb2428..a6f868f 100644
--- a/src/trsp/sql/trsp_V2.2.sql
+++ b/src/trsp/sql/trsp_V2.2.sql
@@ -192,7 +192,7 @@ BEGIN
         END IF;
     END IF;
 
-    IF (turn_restrict_sql IS NULL OR length(turn_restrict_sql) = 0) AND (source_pos NOT IN (0,1) AND target_pos NOT IN (0,1)) THEN
+    IF (turn_restrict_sql IS NULL OR length(turn_restrict_sql) = 0) THEN
         -- no restrictions then its a with points
         RETURN query SELECT a.seq-1 AS seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost
         FROM pgr_withpoints(new_sql,
diff --git a/src/trsp/sql/viaEdges_v2.2.sql b/src/trsp/sql/viaEdges_v2.2.sql
new file mode 100644
index 0000000..4a42b29
--- /dev/null
+++ b/src/trsp/sql/viaEdges_v2.2.sql
@@ -0,0 +1,85 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+/* trspViaEdges
+
+ - when contradiction (has rcost but does not want it):
+   - the call is made to trsp only with cost column
+
+ - When there are no restrictions:
+   a call to _pgr_withPointsVia
+ - Else 
+   a call to _pgr_trspViaEdges
+     - which calls repetedly the original C/C++ code
+*/
+
+
+------------------------------
+-- pgr_trspViaEdges Wrapper
+------------------------------
+CREATE OR REPLACE FUNCTION pgr_trspViaEdges(
+    sql TEXT,
+    eids INTEGER[],
+    pcts float[],
+    directed BOOLEAN,
+    has_rcost BOOLEAN,
+    turn_restrict_sql text DEFAULT NULL::TEXT)
+    RETURNS SETOF pgr_costresult3 AS
+$BODY$
+DECLARE
+    i INTEGER;
+    rr pgr_costresult3;
+    lrr pgr_costresult3;
+    first BOOLEAN := true;
+    seq INTEGER := 0;
+    seq2 INTEGER :=0;
+    has_reverse BOOLEAN;
+    edges_sql TEXT;
+
+BEGIN
+    has_reverse =_pgr_parameter_check('dijkstra', sql, false);
+    edges_sql := sql;
+    IF (has_reverse != has_rcost) THEN
+        IF (has_reverse) THEN
+            edges_sql = 'SELECT id, source, target, cost FROM (' || sql || ') a';
+        ELSE
+            raise EXCEPTION 'has_rcost set to true but reverse_cost not found';
+        END IF;
+    END IF;
+
+    IF (turn_restrict_sql IS NULL OR length(turn_restrict_sql) = 0) THEN
+        -- no restrictions then its a _pgr_withPointsVia
+        RETURN query SELECT seq-1 AS seq, node::INTEGER AS id1, edge::INTEGER AS id2, cost
+        FROM _pgr_withPointsVia(edges_sql, eids, pcts, directed)
+        RETURN;
+    END IF;
+
+
+    -- make the call to the original code
+    RETURN query SELECT * FROM _pgr_trspViaEdges(edges_sql, eids, pcts, directed, has_rcost, turn_restrict_sql);
+
+END;
+$BODY$
+LANGUAGE plpgsql VOLATILE
+cost 100
+rows 1000;
diff --git a/src/trsp/sql/viaVertices_v2.2.sql b/src/trsp/sql/viaVertices_v2.2.sql
new file mode 100644
index 0000000..b1205f0
--- /dev/null
+++ b/src/trsp/sql/viaVertices_v2.2.sql
@@ -0,0 +1,82 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+/* trspViaVertices
+
+ - when contradiction (has rcost but does not want it):
+   - the call is made to trsp only with cost column
+
+ - When there are no restrictions:
+   a call to pgr_dijkstraVia
+ - Else 
+   a call to _pgr_trspViaVertices
+     - which calls repetedly the original C/C++ code
+*/
+
+------------------------------
+-- pgr_trspViaVertices Wrapper
+------------------------------
+CREATE OR REPLACE FUNCTION pgr_trspViaVertices(
+    edges_sql TEXT,
+    via_vids ANYARRAY,
+    directed BOOLEAN,
+    has_rcost BOOLEAN,
+    restrictions_sql TEXT DEFAULT NULL)
+RETURNS SETOF pgr_costResult3 AS
+$BODY$
+DECLARE
+has_reverse BOOLEAN;
+new_sql TEXT;
+BEGIN
+
+    has_reverse =_pgr_parameter_check('dijkstra', edges_sql, false);
+
+    new_sql := edges_sql;
+    IF (has_reverse != has_rcost) THEN  -- user contradiction
+        IF (has_reverse) THEN  -- it has reverse_cost but user don't want it.
+            new_sql :=
+               'WITH old_sql AS (' || edges_sql || ')' ||
+                '   SELECT id, source, target, cost FROM old_sql';
+        ELSE -- it does not have reverse_cost but user wants it
+            RAISE EXCEPTION 'Error, reverse_cost is used, but query did''t return ''reverse_cost'' column'
+            USING ERRCODE := 'XX000';
+        END IF;
+    END IF;
+
+    IF (restrictions_sql IS NULL OR length(restrictions_sql) = 0) THEN
+        RETURN query SELECT (row_number() over())::INTEGER, path_id:: INTEGER, node::INTEGER,
+            (CASE WHEN edge = -2 THEN -1 ELSE edge END)::INTEGER, cost
+            FROM pgr_dijkstraVia(new_sql, via_vids, directed, strict:=true) WHERE edge != -1;
+        RETURN;
+    END IF;
+
+
+    -- make the call without contradiction from part of the user
+    RETURN query SELECT * FROM _pgr_trspViaVertices(new_sql, via_vids::INTEGER[], directed, has_rcost, restrictions_sql);
+END
+$BODY$
+LANGUAGE plpgsql VOLATILE
+COST 100
+ROWS 1000;
+
+
diff --git a/src/trsp/src/GraphDefinition.cpp b/src/trsp/src/GraphDefinition.cpp
old mode 100644
new mode 100755
index 8e0c2b4..b8b3af5
--- a/src/trsp/src/GraphDefinition.cpp
+++ b/src/trsp/src/GraphDefinition.cpp
@@ -5,8 +5,8 @@
 #endif
 
 
-#include "GraphDefinition.h"
 #include <functional>
+#include "GraphDefinition.h"
 
 // -------------------------------------------------------------------------
 GraphDefinition::GraphDefinition(void)
@@ -104,30 +104,26 @@ double GraphDefinition::getRestrictionCost(
     bool isStart)
 {
     double cost = 0.0;
-    auto edge_id = new_edge.m_lEdgeID;
+    long edge_id = new_edge.m_lEdgeID;
     if(m_ruleTable.find(edge_id) == m_ruleTable.end())
     {    
         return(0.0);
     }
     std::vector<Rule> vecRules = m_ruleTable[edge_id];
-    // int ruleIndex;
-    auto totalRule = vecRules.size();
-    auto st_edge_ind = edge_ind;
-    for(size_t ruleIndex = 0; ruleIndex < totalRule; ruleIndex++)
+    long st_edge_ind = edge_ind;
+    for(const auto &rule : vecRules)
     {
         bool flag = true;
-        auto total_edge = vecRules[ruleIndex].precedencelist.size();
-        // int i;
         int v_pos = (isStart?0:1);
         edge_ind = st_edge_ind;
-        for(size_t i = 0; i < total_edge; i++)
+        for(auto const &precedence : rule.precedencelist)
         {
             if(edge_ind == -1)
             {
                 flag = false;
                 break;
             }
-            if(vecRules[ruleIndex].precedencelist[i] != m_vecEdgeVector[edge_ind]->m_lEdgeID)
+            if(precedence != m_vecEdgeVector[edge_ind]->m_lEdgeID)
             {
                 flag = false;
                 break;
@@ -137,7 +133,7 @@ double GraphDefinition::getRestrictionCost(
             edge_ind = parent_ind;
         }
         if(flag)
-            cost += vecRules[ruleIndex].cost;
+            cost += rule.cost;
     }
     return cost;
 }
@@ -152,14 +148,12 @@ void GraphDefinition::explore(
     std::priority_queue<PDP, std::vector<PDP>,
     std::greater<PDP> > &que)
 {
-    unsigned int i;
     double extCost = 0.0;
     GraphEdgeInfo* new_edge;
-    // int new_node;
     double totalCost;
-    for(i = 0; i < vecIndex.size(); i++)
+    for(const auto &index : vecIndex)
     {
-        new_edge = m_vecEdgeVector[vecIndex[i]];
+        new_edge = m_vecEdgeVector[index];
         extCost = 0.0;
         if(m_bIsturnRestrictOn)
         {
@@ -169,18 +163,16 @@ void GraphDefinition::explore(
         {
             if(new_edge->m_dCost >= 0.0)
             {
-                //new_node = new_edge->m_lEndNode;
-                
                 if(isStart)
                     totalCost = m_dCost[cur_edge.m_lEdgeIndex].endCost + new_edge->m_dCost + extCost;
                 else
                     totalCost = m_dCost[cur_edge.m_lEdgeIndex].startCost + new_edge->m_dCost + extCost;
-                if(totalCost < m_dCost[vecIndex[i]].endCost)
+                if(totalCost < m_dCost[index].endCost)
                 {
-                    m_dCost[vecIndex[i]].endCost = totalCost;
+                    m_dCost[index].endCost = totalCost;
                     parent[new_edge->m_lEdgeIndex].v_pos[0] = (isStart?0:1);
                     parent[new_edge->m_lEdgeIndex].ed_ind[0] = cur_edge.m_lEdgeIndex;
-                    que.push(PDP((double)totalCost, PIB((int)new_edge->m_lEdgeIndex, (bool)true)));
+                    que.push(std::make_pair(totalCost, std::make_pair(new_edge->m_lEdgeIndex, true)));
                 }
             }
         }
@@ -188,17 +180,16 @@ void GraphDefinition::explore(
         {
             if(new_edge->m_dReverseCost >= 0.0)
             {
-                // new_node = new_edge->m_lStartNode;
                 if(isStart)
                     totalCost = m_dCost[cur_edge.m_lEdgeIndex].endCost + new_edge->m_dReverseCost + extCost;
                 else
                     totalCost = m_dCost[cur_edge.m_lEdgeIndex].startCost + new_edge->m_dReverseCost + extCost;
-                if(totalCost < m_dCost[vecIndex[i]].startCost)
+                if(totalCost < m_dCost[index].startCost)
                 {
-                    m_dCost[vecIndex[i]].startCost = totalCost;
+                    m_dCost[index].startCost = totalCost;
                     parent[new_edge->m_lEdgeIndex].v_pos[1] = (isStart?0:1);
                     parent[new_edge->m_lEdgeIndex].ed_ind[1] = cur_edge.m_lEdgeIndex;
-                    que.push(PDP((double)totalCost, PIB((int)new_edge->m_lEdgeIndex, (bool)false)));
+                    que.push(std::make_pair(totalCost, std::make_pair(new_edge->m_lEdgeIndex, false)));
                 }
             }
         }
@@ -214,7 +205,7 @@ int GraphDefinition::multi_dijkstra(
     bool directed,
     bool has_reverse_cost, 
     path_element_t **path,
-    size_t *path_count,
+    int *path_count,
     char **err_msg,
     std::vector<PDVI> &ruleList)
 {
@@ -222,44 +213,38 @@ int GraphDefinition::multi_dijkstra(
     if(ruleList.size() > 0)
     {
     m_ruleTable.clear();
-    auto total_rule = ruleList.size();
-    // int i;
     LongVector vecsource;
-    // int kk;
-    for(size_t i = 0; i < total_rule; i++)
-    {
-        Rule rule;
-        rule.cost = ruleList[i].first;
-        // int j;
-        auto seq_cnt = ruleList[i].second.size();
-        for(size_t j = 1; j < seq_cnt; j++)
-        {
-            rule.precedencelist.push_back(ruleList[i].second[j]);
-        }
-        auto dest_edge_id = ruleList[i].second[0];
-        if(m_ruleTable.find(dest_edge_id) != m_ruleTable.end())
-        {
-            m_ruleTable[dest_edge_id].push_back(rule);
-        }
-        else
-        {
-            std::vector<Rule> temprules;
-            temprules.clear();
-            temprules.push_back(rule);
-            m_ruleTable[dest_edge_id] = temprules;
-        }
+    for(const auto &rule : ruleList)
+    {
+	std::vector<long> temp_precedencelist;
+	temp_precedencelist.clear();
+	for(auto const &seq : rule.second)
+	{
+	    temp_precedencelist.push_back(seq);
+	}
+	int dest_edge_id = rule.second[0];
+	if(m_ruleTable.find(dest_edge_id) != m_ruleTable.end())
+	{
+	    m_ruleTable[dest_edge_id].push_back(Rule(rule.first, temp_precedencelist));
+	}
+	else
+	{
+	    std::vector<Rule> temprules;
+	    temprules.clear();
+	    temprules.push_back(Rule(rule.first, temp_precedencelist));
+	    m_ruleTable.insert(std::make_pair(dest_edge_id, temprules));
+	}
     }
-    
     m_bIsturnRestrictOn = true;
     }
     parent = new PARENT_PATH[edge_count + 1];
     m_dCost = new CostHolder[edge_count + 1];
     m_vecPath.clear();
-    // int i;
-    auto total_vertices = vertices.size();
-    for(size_t i = 0; i < total_vertices - 1; i++)
+    size_t i;
+    size_t total_vertices = vertices.size();
+    for(i = 0; i < total_vertices - 1; i++)
     {
-    int ret = my_dijkstra1(vertices[i], vertices[i + 1], edge_count, err_msg);
+    int ret = my_dijkstra(vertices[i], vertices[i + 1], edge_count, err_msg);
     if(ret < 0)
     {
         deleteall();
@@ -268,9 +253,9 @@ int GraphDefinition::multi_dijkstra(
     }
 
     *path = (path_element_t *) malloc(sizeof(path_element_t) * (m_vecPath.size() + 1));
-    *path_count = m_vecPath.size();
+    *path_count = static_cast<int>(m_vecPath.size());
 
-    for(size_t i = 0; i < *path_count; i++)
+    for(int i = 0; i < *path_count; i++)
     {
     (*path)[i].vertex_id = m_vecPath[i].vertex_id;
     (*path)[i].edge_id = m_vecPath[i].edge_id;
@@ -282,7 +267,7 @@ int GraphDefinition::multi_dijkstra(
 
 
 // -------------------------------------------------------------------------
-int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edge_count, char **err_msg)
+int GraphDefinition::my_dijkstra(long start_vertex, long end_vertex, unsigned int edge_count, char **err_msg)
 {
     if(!m_bIsGraphConstructed)
     {
@@ -314,9 +299,9 @@ int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edg
     LongVector vecsource = m_mapNodeId2Edge[start_vertex];
     GraphEdgeInfo* cur_edge = NULL;
 
-    for(i = 0; i < vecsource.size(); i++)
+    for(const auto &source : vecsource)
     {
-    cur_edge = m_vecEdgeVector[vecsource[i]];
+    cur_edge = m_vecEdgeVector[source];
     if(cur_edge->m_lStartNode == start_vertex)
     {
         if(cur_edge->m_dCost >= 0.0)
@@ -324,8 +309,7 @@ int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edg
         m_dCost[cur_edge->m_lEdgeIndex].endCost= cur_edge->m_dCost;
         parent[cur_edge->m_lEdgeIndex].v_pos[0] = -1;
         parent[cur_edge->m_lEdgeIndex].ed_ind[0] = -1;
-        //que.push(std::make_pair(cur_edge->m_dCost, std::make_pair(cur_edge->m_lEdgeIndex, true)));
-        que.push(PDP(cur_edge->m_dCost, PIB((int)cur_edge->m_lEdgeIndex, true)));
+        que.push(std::make_pair(cur_edge->m_dCost, std::make_pair(cur_edge->m_lEdgeIndex, true)));
         }
     }
     else
@@ -335,13 +319,11 @@ int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edg
         m_dCost[cur_edge->m_lEdgeIndex].startCost = cur_edge->m_dReverseCost;
         parent[cur_edge->m_lEdgeIndex].v_pos[1] = -1;
         parent[cur_edge->m_lEdgeIndex].ed_ind[1] = -1;
-        //que.push(std::make_pair(cur_edge->m_dReverseCost, std::make_pair(cur_edge->m_lEdgeIndex, false)));
-        que.push(PDP(cur_edge->m_dReverseCost, PIB((int)cur_edge->m_lEdgeIndex, false)));
+        que.push(std::make_pair(cur_edge->m_dReverseCost, std::make_pair(cur_edge->m_lEdgeIndex, false)));
         }
     }
     }
     
-    // int new_node;
     long cur_node = -1;
 
     while(!que.empty())
@@ -350,7 +332,6 @@ int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edg
     que.pop();
     int cured_index = cur_pos.second.first;
     cur_edge = m_vecEdgeVector[cured_index];
-    //GraphEdgeInfo* new_edge;
 
     if(cur_pos.second.second)      // explore edges connected to end node
     {
@@ -379,15 +360,12 @@ int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edg
     }
     else
     {
-    // double total_cost;  //set but not used
     if(cur_node == cur_edge->m_lStartNode)
     {
-        // total_cost = m_dCost[cur_edge->m_lEdgeIndex].startCost;
         construct_path(cur_edge->m_lEdgeIndex, 1);
     }
     else
     {
-        // total_cost = m_dCost[cur_edge->m_lEdgeIndex].endCost;
         construct_path(cur_edge->m_lEdgeIndex, 0);
     }
     path_element_t pelement;
@@ -401,8 +379,8 @@ int GraphDefinition::my_dijkstra1(long start_vertex, long end_vertex, size_t edg
 
 
 // -------------------------------------------------------------------------
-int GraphDefinition::my_dijkstra4(edge_t *edges, unsigned int edge_count, long start_edge_id, double start_part, long end_edge_id, double end_part, bool directed, bool has_reverse_cost,
-                path_element_t **path, size_t *path_count, char **err_msg, std::vector<PDVI> &ruleList)
+int GraphDefinition::my_dijkstra(edge_t *edges, unsigned int edge_count, int start_edge_id, double start_part, int end_edge_id, double end_part, bool directed, bool has_reverse_cost,
+                path_element_t **path, int *path_count, char **err_msg, std::vector<PDVI> &ruleList)
 {
     if(!m_bIsGraphConstructed)
     {
@@ -492,53 +470,49 @@ int GraphDefinition::my_dijkstra4(edge_t *edges, unsigned int edge_count, long s
         }
     }
 
-    return(my_dijkstra3(edges, edge_count, start_vertex, end_vertex, directed, has_reverse_cost, path, path_count, err_msg, ruleList));
+    return(my_dijkstra(edges, edge_count, start_vertex, end_vertex, directed, has_reverse_cost, path, path_count, err_msg, ruleList));
 }
 
 
 // -------------------------------------------------------------------------
-int GraphDefinition:: my_dijkstra3(edge_t *edges, unsigned int edge_count, long start_vertex, long end_vertex, bool directed, bool has_reverse_cost,
-                                  path_element_t **path, size_t *path_count, char **err_msg, std::vector<PDVI> &ruleList)
+int GraphDefinition:: my_dijkstra(edge_t *edges, unsigned int edge_count, long start_vertex, long end_vertex, bool directed, bool has_reverse_cost,
+                                  path_element_t **path, int *path_count, char **err_msg, std::vector<PDVI> &ruleList)
 {
     m_ruleTable.clear();
-    auto total_rule = ruleList.size();
-    // int i;
     LongVector vecsource;
-    unsigned int kk;
-    for(size_t i = 0; i < total_rule; i++)
+    for (const auto &rule : ruleList)
     {
-        Rule rule;
-        rule.cost = ruleList[i].first;
-        // int j;
-        auto seq_cnt = ruleList[i].second.size();
-        for(size_t j = 1; j < seq_cnt; j++)
+        size_t j;
+        size_t seq_cnt = rule.second.size();
+	std::vector<long> temp_precedencelist;
+	temp_precedencelist.clear();
+        for(j = 1; j < seq_cnt; j++)
         {
-            rule.precedencelist.push_back(ruleList[i].second[j]);
+            temp_precedencelist.push_back(rule.second[j]);
         }
-        int dest_edge_id = ruleList[i].second[0];
+        int dest_edge_id = rule.second[0];
         if(m_ruleTable.find(dest_edge_id) != m_ruleTable.end())
         {
-            m_ruleTable[dest_edge_id].push_back(rule);
+            m_ruleTable[dest_edge_id].push_back(Rule(rule.first, temp_precedencelist));
         }
         else
         {
             std::vector<Rule> temprules;
             temprules.clear();
-            temprules.push_back(rule);
-            //m_ruleTable.insert(std::make_pair(dest_edge_id, temprules));
-            m_ruleTable[dest_edge_id] =  temprules;
+            temprules.push_back(Rule(rule.first, temp_precedencelist));
+            m_ruleTable.insert(std::make_pair(dest_edge_id, temprules));
         }
     
         if(isStartVirtual)
         {
-            if(seq_cnt == 2 && ruleList[i].second[1] == m_lStartEdgeId)
+            if(seq_cnt == 2 && rule.second[1] == m_lStartEdgeId)
             {
                 vecsource = m_mapNodeId2Edge[start_vertex];
-                for(kk = 0; kk < vecsource.size(); kk++)
+		for(const auto &source : vecsource)
                 {
-                    rule.precedencelist.clear();
-                    rule.precedencelist.push_back(m_vecEdgeVector[vecsource[kk]]->m_lEdgeID);
-                    m_ruleTable.at(dest_edge_id).push_back(rule);
+                    temp_precedencelist.clear();
+                    temp_precedencelist.push_back(m_vecEdgeVector[source]->m_lEdgeID);
+                    m_ruleTable[dest_edge_id].push_back(Rule(rule.first, temp_precedencelist));
                 }
             }
         }
@@ -549,21 +523,20 @@ int GraphDefinition:: my_dijkstra3(edge_t *edges, unsigned int edge_count, long
         {
             std::vector<Rule> tmpRules = m_ruleTable[m_lEndEdgeId];
             vecsource = m_mapNodeId2Edge[end_vertex];
-            for(kk = 0; kk < vecsource.size(); kk++)
+	    for(const auto &source : vecsource)
             {
-                //m_ruleTable.insert(std::make_pair(m_vecEdgeVector[vecsource[kk]]->m_lEdgeID, tmpRules));
-                m_ruleTable[m_vecEdgeVector[vecsource[kk]]->m_lEdgeID] = tmpRules;
+                m_ruleTable.insert(std::make_pair(m_vecEdgeVector[source]->m_lEdgeID, tmpRules));
             }
         }
     }
     m_bIsturnRestrictOn = true;
-    return(my_dijkstra2(edges, edge_count, start_vertex, end_vertex, directed, has_reverse_cost, path, path_count, err_msg));
+    return(my_dijkstra(edges, edge_count, start_vertex, end_vertex, directed, has_reverse_cost, path, path_count, err_msg));
 }
 
 
 // -------------------------------------------------------------------------
-int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long start_vertex, long end_vertex, bool directed, bool has_reverse_cost,
-                path_element_t **path, size_t *path_count, char **err_msg)
+int GraphDefinition:: my_dijkstra(edge_t *edges, unsigned int edge_count, long start_vertex, long end_vertex, bool directed, bool has_reverse_cost,
+                path_element_t **path, int *path_count, char **err_msg)
 {
     if(!m_bIsGraphConstructed)
     {
@@ -601,9 +574,9 @@ int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long
     LongVector vecsource = m_mapNodeId2Edge[start_vertex];
     GraphEdgeInfo* cur_edge = NULL;
 
-    for(i = 0; i < vecsource.size(); i++)
+    for(const auto &source: vecsource)
     {
-        cur_edge = m_vecEdgeVector[vecsource[i]];
+        cur_edge = m_vecEdgeVector[source];
         if(cur_edge->m_lStartNode == start_vertex)
         {
             if(cur_edge->m_dCost >= 0.0)
@@ -611,8 +584,7 @@ int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long
                 m_dCost[cur_edge->m_lEdgeIndex].endCost= cur_edge->m_dCost;
                 parent[cur_edge->m_lEdgeIndex].v_pos[0] = -1;
                 parent[cur_edge->m_lEdgeIndex].ed_ind[0] = -1;
-                //que.push(std::make_pair(cur_edge->m_dCost, std::make_pair(cur_edge->m_lEdgeIndex, true)));
-                que.push(PDP(cur_edge->m_dCost, PIB((int)cur_edge->m_lEdgeIndex, true)));
+                que.push(std::make_pair(cur_edge->m_dCost, std::make_pair(cur_edge->m_lEdgeIndex, true)));
             }
         }
         else
@@ -622,16 +594,10 @@ int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long
                 m_dCost[cur_edge->m_lEdgeIndex].startCost = cur_edge->m_dReverseCost;
                 parent[cur_edge->m_lEdgeIndex].v_pos[1] = -1;
                 parent[cur_edge->m_lEdgeIndex].ed_ind[1] = -1;
-                //que.push(std::make_pair(cur_edge->m_dReverseCost, std::make_pair(cur_edge->m_lEdgeIndex, false)));
-                que.push(PDP(cur_edge->m_dReverseCost, PIB((int)cur_edge->m_lEdgeIndex, false)));
+                que.push(std::make_pair(cur_edge->m_dReverseCost, std::make_pair(cur_edge->m_lEdgeIndex, false)));
             }
         }
     }
-    //parent[start_vertex].v_id = -1;
-    //parent[start_vertex].ed_id = -1;
-    //m_dCost[start_vertex] = 0.0;
-
-    // int new_node;
     long cur_node = -1;
 
     while(!que.empty())
@@ -640,7 +606,6 @@ int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long
         que.pop();
         int cured_index = cur_pos.second.first;
         cur_edge = m_vecEdgeVector[cured_index];
-        //GraphEdgeInfo* new_edge;
 
         if(cur_pos.second.second)      // explore edges connected to end node
         {
@@ -702,9 +667,9 @@ int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long
         }
         
         *path = (path_element_t *) malloc(sizeof(path_element_t) * (m_vecPath.size() + 1));
-        *path_count = m_vecPath.size();
+        *path_count = static_cast<int>(m_vecPath.size());
 
-        for(size_t i = 0; i < *path_count; i++)
+        for(int i = 0; i < *path_count; i++)
         {
             (*path)[i].vertex_id = m_vecPath[i].vertex_id;
             (*path)[i].edge_id = m_vecPath[i].edge_id;
@@ -727,7 +692,7 @@ int GraphDefinition:: my_dijkstra2(edge_t *edges, unsigned int edge_count, long
 
 
 // -------------------------------------------------------------------------
-bool GraphDefinition::get_single_cost(double total_cost, path_element_t **path, size_t *path_count)
+bool GraphDefinition::get_single_cost(double total_cost, path_element_t **path, int *path_count)
 {
     GraphEdgeInfo* start_edge_info = m_vecEdgeVector[m_mapEdgeId2Index[m_lStartEdgeId]];
     if(m_dEndPart >= m_dStartpart)
@@ -837,7 +802,7 @@ bool GraphDefinition::addEdge(edge_t edgeIn)
     newEdge->m_vecEndConnedtedEdge.clear();
     newEdge->m_vecRestrictedEdge.clear();
     newEdge->m_lEdgeID = edgeIn.id;
-    newEdge->m_lEdgeIndex = (long)m_vecEdgeVector.size();    
+    newEdge->m_lEdgeIndex = m_vecEdgeVector.size();    
     newEdge->m_lStartNode = edgeIn.source;
     newEdge->m_lEndNode = edgeIn.target;
     newEdge->m_dCost = edgeIn.cost;
@@ -863,7 +828,7 @@ bool GraphDefinition::addEdge(edge_t edgeIn)
     {
         //Connect current edge with existing edge with start node
         //connectEdge(
-        long lEdgeCount = (long)itNodeMap->second.size();
+        long lEdgeCount = itNodeMap->second.size();
         long lEdgeIndex;
         for(lEdgeIndex = 0; lEdgeIndex < lEdgeCount; lEdgeIndex++)
         {
@@ -879,7 +844,7 @@ bool GraphDefinition::addEdge(edge_t edgeIn)
     {
         //Connect current edge with existing edge with end node
         //connectEdge(
-        long lEdgeCount = (long)itNodeMap->second.size();
+        long lEdgeCount = itNodeMap->second.size();
         long lEdgeIndex;
         for(lEdgeIndex = 0; lEdgeIndex < lEdgeCount; lEdgeIndex++)
         {
@@ -896,8 +861,7 @@ bool GraphDefinition::addEdge(edge_t edgeIn)
 
 
     //Adding edge to the list
-    //m_mapEdgeId2Index.insert(std::make_pair(newEdge->m_lEdgeID, m_vecEdgeVector.size()));
-    m_mapEdgeId2Index[newEdge->m_lEdgeID] = (long)m_vecEdgeVector.size();
+    m_mapEdgeId2Index.insert(std::make_pair(newEdge->m_lEdgeID, m_vecEdgeVector.size()));
     m_vecEdgeVector.push_back(newEdge);
 
     //
diff --git a/src/trsp/src/GraphDefinition.h b/src/trsp/src/GraphDefinition.h
index 2ea1944..41f35a9 100644
--- a/src/trsp/src/GraphDefinition.h
+++ b/src/trsp/src/GraphDefinition.h
@@ -9,7 +9,6 @@
 #include <iostream>
 #include <functional>
 
-
 #include "trsp.h"
 
 //using namespace std;
@@ -43,10 +42,11 @@ typedef struct{
     int v_pos[2];
 } PARENT_PATH;
 
-typedef struct{
+typedef struct Rule{
     double cost;
     std::vector<long> precedencelist;
-} Rule;
+    Rule(double c, std::vector<long> p) : cost(c), precedencelist(p) { }
+}Rule;
 
 typedef struct{
     double startCost, endCost;
@@ -90,34 +90,34 @@ public:
     GraphDefinition(void);
     ~GraphDefinition(void);
 
-    int my_dijkstra1(long start_vertex, long end_vertex,
-                    size_t edge_count, char** err_msg);
+    int my_dijkstra(long start_vertex, long end_vertex,
+                    unsigned int edge_count, char** err_msg);
 
-    int my_dijkstra2(edge_t *edges, unsigned int edge_count,
+    int my_dijkstra(edge_t *edges, unsigned int edge_count,
                     long start_vertex, long end_vertex,
                     bool directed, bool has_reverse_cost,
-                    path_element_t **path, size_t *path_count,
+                    path_element_t **path, int *path_count,
                     char **err_msg);
 
-    int my_dijkstra3(edge_t *edges, unsigned int edge_count,
+    int my_dijkstra(edge_t *edges, unsigned int edge_count,
                     long start_vertex, long end_vertex,
                     bool directed, bool has_reverse_cost,
-                    path_element_t **path, size_t *path_count,
+                    path_element_t **path, int *path_count,
                     char **err_msg,
                     std::vector<PDVI> &ruleList);
 
-    int my_dijkstra4(edge_t *edges, unsigned int edge_count,
-                    long start_edge, double start_part,
-                    long end_edge, double end_part,
+    int my_dijkstra(edge_t *edges, unsigned int edge_count,
+                    int start_edge, double start_part,
+                    int end_edge, double end_part,
                     bool directed, bool has_reverse_cost,
-                    path_element_t **path, size_t *path_count,
+                    path_element_t **path, int *path_count,
                     char **err_msg,
                     std::vector<PDVI> &ruleList);
 
     int multi_dijkstra(edge_t *edges, unsigned int edge_count,
                        std::vector<int> vertices,
                        bool directed, bool has_reverse_cost,
-                       path_element_t **path, size_t *path_count,
+                       path_element_t **path, int *path_count,
                        char **err_msg,
                        std::vector<PDVI> &ruleList);
 
@@ -131,7 +131,7 @@ private:
     double getRestrictionCost(long cur_node, GraphEdgeInfo& new_edge, bool isStart);
     bool addEdge(edge edgeIn);
     bool connectEdge(GraphEdgeInfo& firstEdge, GraphEdgeInfo& secondEdge, bool bIsStartNodeSame);
-    bool get_single_cost(double total_cost, path_element_t **path, size_t *path_count);
+    bool get_single_cost(double total_cost, path_element_t **path, int *path_count);
     void init();
     void deleteall();
 
@@ -140,9 +140,9 @@ private:
     Long2LongMap m_mapEdgeId2Index;
     Long2LongVectorMap m_mapNodeId2Edge;
     long max_node_id;
-    long max_edge_id;
-    long m_lStartEdgeId;
-    long m_lEndEdgeId;
+    int max_edge_id;
+    int m_lStartEdgeId;
+    int m_lEndEdgeId;
     double m_dStartpart;
     double m_dEndPart;
     bool isStartVirtual;
diff --git a/src/trsp/src/trsp.c b/src/trsp/src/trsp.c
index 7bb40c7..21e0bf1 100644
--- a/src/trsp/src/trsp.c
+++ b/src/trsp/src/trsp.c
@@ -1,26 +1,3 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
 #include "postgres.h"
 #include "executor/spi.h"
 #include "funcapi.h"
@@ -32,21 +9,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "fmgr.h"
 #include "trsp.h"
 
-#include "./../../common/src/debug_macro.h"
-
 PGDLLEXPORT Datum turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS);
 PGDLLEXPORT Datum turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS);
 
-#if 0
 #undef DEBUG
 //#define DEBUG 1
 
 #ifdef DEBUG
-#define PGR_DBG(format, arg...)                     \
+#define DBG(format, arg...)                     \
     elog(NOTICE, format , ## arg)
 #else
-#define PGR_DBG(format, arg...) do { ; } while (0)
-#endif
+#define DBG(format,...) do { ; } while (0)
 #endif
 
 // The number of tuples to fetch from the SPI cursor at each iteration
@@ -87,7 +60,7 @@ text2char(text *in)
 static int
 finish(int code, int ret)
 {
-  PGR_DBG("In finish, trying to disconnect from spi %d",ret);
+  DBG("In finish, trying to disconnect from spi %d",ret);
   code = SPI_finish();
   if (code  != SPI_OK_FINISH )
   {
@@ -156,7 +129,7 @@ fetch_edge_columns(SPITupleTable *tuptable, edge_columns_t *edge_columns,
       return -1;
     }
 
-  PGR_DBG("columns: id %i source %i target %i cost %i", 
+  DBG("columns: id %i source %i target %i cost %i", 
       edge_columns->id, edge_columns->source, 
       edge_columns->target, edge_columns->cost);
 
@@ -179,7 +152,7 @@ fetch_edge_columns(SPITupleTable *tuptable, edge_columns_t *edge_columns,
           return -1;
         }
 
-      PGR_DBG("columns: reverse_cost cost %i", edge_columns->reverse_cost);
+      DBG("columns: reverse_cost cost %i", edge_columns->reverse_cost);
     }
     
   return 0;
@@ -227,7 +200,7 @@ fetch_edge(HeapTuple *tuple, TupleDesc *tupdesc,
     }
 
   /*
-  PGR_DBG("edge: %i, %i, %i, %f, %f", target_edge->id, target_edge->source,
+  DBG("edge: %i, %i, %i, %f, %f", target_edge->id, target_edge->source,
     target_edge->target, target_edge->cost, target_edge->reverse_cost);
   */
 }
@@ -260,7 +233,7 @@ fetch_restrict(HeapTuple *tuple, TupleDesc *tupdesc,
   rest->to_cost = DatumGetFloat8(binval);
   char *str = DatumGetCString(SPI_getvalue(*tuple, *tupdesc, restrict_columns->via_path));
 
-  //PGR_DBG("restriction: %f, %i, %s", rest->to_cost, rest->target_id, str);
+  //DBG("restriction: %f, %i, %s", rest->to_cost, rest->target_id, str);
 
   if (str != NULL) {
     char* pch = NULL;
@@ -271,7 +244,7 @@ fetch_restrict(HeapTuple *tuple, TupleDesc *tupdesc,
     while (pch != NULL && ci < MAX_RULE_LENGTH)
     {
       rest->via[ci] = atoi(pch);
-      //PGR_DBG("    rest->via[%i]=%i", ci, rest->via[ci]);
+      //DBG("    rest->via[%i]=%i", ci, rest->via[ci]);
       ci++;
       pch = (char *)strtok (NULL, " ,");
     }
@@ -284,25 +257,25 @@ fetch_restrict(HeapTuple *tuple, TupleDesc *tupdesc,
 static int compute_trsp(
     char* sql,
     int dovertex,
-    long start_id,
+    int start_id,
     double start_pos,
-    long end_id,
+    int end_id,
     double end_pos,
     bool directed, 
     bool has_reverse_cost,
     char* restrict_sql,
     path_element_t **path,
-    uint32_t *path_count) 
+    int *path_count) 
 {
 
   int SPIcode;
   SPIPlanPtr SPIplan;
   Portal SPIportal;
   bool moredata = TRUE;
-  size_t ntuples;
+  int ntuples;
 
   edge_t *edges = NULL;
-  size_t total_tuples = 0;
+  int total_tuples = 0;
 #ifndef _MSC_VER
   edge_columns_t edge_columns = {.id= -1, .source= -1, .target= -1, 
                                  .cost= -1, .reverse_cost= -1};
@@ -310,17 +283,11 @@ static int compute_trsp(
   edge_columns_t edge_columns = {-1, -1, -1, -1, -1};
 #endif //_MSC_VER
   restrict_t *restricts = NULL;
-  size_t total_restrict_tuples = 0;
-
-#ifndef _MSC_VER
+  int total_restrict_tuples = 0;
   restrict_columns_t restrict_columns = {.target_id= -1, .via_path= -1,
                                  .to_cost= -1};
-#else // _MSC_VER
-  restrict_columns_t restrict_columns = {-1, -1, -1};
-#endif //_MSC_VER
-
-  long v_max_id=0;
-  long v_min_id=INT_MAX;
+  int v_max_id=0;
+  int v_min_id=INT_MAX;
 
   /* track if start and end are both in edge tuples */
   int s_count = 0;
@@ -328,9 +295,9 @@ static int compute_trsp(
 
   char *err_msg;
   int ret = -1;
-  uint32_t z;
+  register int z;
 
-  PGR_DBG("start turn_restrict_shortest_path\n");
+  DBG("start turn_restrict_shortest_path\n");
         
   SPIcode = SPI_connect();
   if (SPIcode  != SPI_OK_CONNECT) {
@@ -350,7 +317,7 @@ static int compute_trsp(
   }
 
   while (moredata == TRUE) {
-      //PGR_DBG("calling SPI_cursor_fetch");
+      //DBG("calling SPI_cursor_fetch");
       SPI_cursor_fetch(SPIportal, TRUE, TUPLIMIT);
 
       if (SPI_tuptable == NULL) {
@@ -366,7 +333,7 @@ static int compute_trsp(
 
       ntuples = SPI_processed;
 
-      //PGR_DBG("Reading edges: %i - %i", total_tuples, total_tuples+ntuples);
+      //DBG("Reading edges: %i - %i", total_tuples, total_tuples+ntuples);
 
       total_tuples += ntuples;
 
@@ -381,19 +348,19 @@ static int compute_trsp(
               return finish(SPIcode, ret);	  
           }
 
-          uint32_t t;
+          int t;
           SPITupleTable *tuptable = SPI_tuptable;
           TupleDesc tupdesc = SPI_tuptable->tupdesc;
                 
           for (t = 0; t < ntuples; t++) {
-              //if (t%100 == 0) { PGR_DBG("    t: %i", t); }
+              //if (t%100 == 0) { DBG("    t: %i", t); }
               HeapTuple tuple = tuptable->vals[t];
               fetch_edge(&tuple, &tupdesc, &edge_columns, 
                          &edges[total_tuples - ntuples + t]);
           }
-          //PGR_DBG("calling SPI_freetuptable");
+          //DBG("calling SPI_freetuptable");
           SPI_freetuptable(tuptable);
-          //PGR_DBG("back from SPI_freetuptable");
+          //DBG("back from SPI_freetuptable");
       } 
       else {
           moredata = FALSE;
@@ -403,7 +370,7 @@ static int compute_trsp(
 
   //defining min and max vertex id
       
-  //PGR_DBG("Total %i edge tuples", total_tuples);
+  //DBG("Total %i edge tuples", total_tuples);
     
   for(z=0; z<total_tuples; z++) {
     if(edges[z].source<v_min_id)
@@ -418,7 +385,7 @@ static int compute_trsp(
     if(edges[z].target>v_max_id)
       v_max_id=edges[z].target;      
 								        
-    //PGR_DBG("%i <-> %i", v_min_id, v_max_id);
+    //DBG("%i <-> %i", v_min_id, v_max_id);
 							
   }
 	
@@ -443,12 +410,12 @@ static int compute_trsp(
     edges[z].source-=v_min_id;
     edges[z].target-=v_min_id;
     edges[z].cost = edges[z].cost;
-    //PGR_DBG("edgeID: %i SRc:%i - %i, cost: %f", edges[z].id,edges[z].source, edges[z].target,edges[z].cost);      
+    //DBG("edgeID: %i SRc:%i - %i, cost: %f", edges[z].id,edges[z].source, edges[z].target,edges[z].cost);      
     
   }
 
-  PGR_DBG("Min vertex id: %ld , Max vid: %ld",v_min_id,v_max_id);
-  PGR_DBG("Total %ld edge tuples", total_tuples);
+  DBG("Min vertex id: %i , Max vid: %i",v_min_id,v_max_id);
+  DBG("Total %i edge tuples", total_tuples);
 
   if(s_count == 0) {
     elog(ERROR, "Start id was not found.");
@@ -465,10 +432,10 @@ static int compute_trsp(
       end_id   -= v_min_id;
   }
   
-  PGR_DBG("Fetching restriction tuples\n");
+  DBG("Fetching restriction tuples\n");
         
   if (restrict_sql == NULL) {
-      PGR_DBG("Sql for restrictions is null.");
+      DBG("Sql for restrictions is null.");
   }
   else {
       SPIplan = SPI_prepare(restrict_sql, 0, NULL);
@@ -488,7 +455,7 @@ static int compute_trsp(
 
           if (restrict_columns.target_id == -1) {
               if (fetch_restrict_columns(SPI_tuptable, &restrict_columns) == -1) {
-                PGR_DBG("fetch_restrict_columns failed!");
+                DBG("fetch_restrict_columns failed!");
                 return finish(SPIcode, ret);
               }
           }
@@ -496,7 +463,7 @@ static int compute_trsp(
           ntuples = SPI_processed;
           total_restrict_tuples += ntuples;
 
-          //PGR_DBG("Reading Restrictions: %i", total_restrict_tuples);
+          //DBG("Reading Restrictions: %i", total_restrict_tuples);
 
           if (ntuples > 0) {
               if (!restricts)
@@ -509,7 +476,7 @@ static int compute_trsp(
                   return finish(SPIcode, ret);
               }
 
-              uint32_t t;
+              int t;
               SPITupleTable *tuptable = SPI_tuptable;
               TupleDesc tupdesc = SPI_tuptable->tupdesc;
 
@@ -531,50 +498,50 @@ static int compute_trsp(
 #ifdef DEBUG_OFF
     int t;
     for (t=0; t<total_restrict_tuples; t++) {
-        PGR_DBG("restricts: %.2f, %i, %i, %i, %i, %i, %i", restricts[t].to_cost, restricts[t].target_id, restricts[t].via[0], restricts[t].via[1], restricts[t].via[2], restricts[t].via[3], restricts[t].via[4]);
+        DBG("restricts: %.2f, %i, %i, %i, %i, %i, %i", restricts[t].to_cost, restricts[t].target_id, restricts[t].via[0], restricts[t].via[1], restricts[t].via[2], restricts[t].via[3], restricts[t].via[4]);
     }
 #endif
 
-  PGR_DBG("Total %ld restriction tuples", total_restrict_tuples);
+  DBG("Total %i restriction tuples", total_restrict_tuples);
 
   if (dovertex) {
-      PGR_DBG("Calling trsp_node_wrapper\n");
+      DBG("Calling trsp_node_wrapper\n");
       /** hack always returns 0 -1 when installed on EDB VC++ 64-bit without this **/
       #if defined(__MINGW64__) 
-      //  elog(NOTICE,"Calling trsp_node_wrapper\n");
+        // elog(NOTICE,"Calling trsp_node_wrapper\n");
       #endif
-      ret = trsp_node_wrapper(edges, (uint32_t)total_tuples, 
-                        restricts, (uint32_t)total_restrict_tuples,
+      ret = trsp_node_wrapper(edges, total_tuples, 
+                        restricts, total_restrict_tuples,
                         start_id, end_id,
                         directed, has_reverse_cost,
                         path, path_count, &err_msg);
   }
   else {
-      PGR_DBG("Calling trsp_edge_wrapper\n");
-      ret = trsp_edge_wrapper(edges, (uint32_t)total_tuples, 
-                        restricts, (uint32_t)total_restrict_tuples,
+      DBG("Calling trsp_edge_wrapper\n");
+      ret = trsp_edge_wrapper(edges, total_tuples, 
+                        restricts, total_restrict_tuples,
                         start_id, start_pos, end_id, end_pos,
                         directed, has_reverse_cost,
                         path, path_count, &err_msg);
   }
 
-  PGR_DBG("Message received from inside:");
-  PGR_DBG("%s",err_msg);
+  DBG("Message received from inside:");
+  DBG("%s",err_msg);
 
-  //PGR_DBG("SIZE %i\n",*path_count);
+  //DBG("SIZE %i\n",*path_count);
 
   //::::::::::::::::::::::::::::::::
   //:: restoring original vertex id
   //::::::::::::::::::::::::::::::::
   for(z=0;z<*path_count;z++) {
-    //PGR_DBG("vetex %i\n",(*path)[z].vertex_id);
+    //DBG("vetex %i\n",(*path)[z].vertex_id);
     if (z || (*path)[z].vertex_id != -1)
         (*path)[z].vertex_id+=v_min_id;
   }
 
-  PGR_DBG("ret = %i\n", ret);
+  DBG("ret = %i\n", ret);
 
-  PGR_DBG("*path_count = %i\n", *path_count);
+  DBG("*path_count = %i\n", *path_count);
 
   if (ret < 0)
     {
@@ -594,8 +561,8 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
 {
 	
   FuncCallContext     *funcctx;
-  uint32_t                  call_cntr;
-  uint32_t                  max_calls;
+  int                  call_cntr;
+  int                  max_calls;
   TupleDesc            tuple_desc;
   path_element_t      *path;
   char *               sql;
@@ -604,7 +571,7 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
   // stuff done only on the first call of the function 
   if (SRF_IS_FIRSTCALL()) {
       MemoryContext   oldcontext;
-      uint32_t path_count = 0;
+      int path_count = 0;
 
       int ret = -1;
       if (ret == -1) {}; // to avoid warning set but not used
@@ -631,7 +598,7 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
             sql = NULL;
       }
 
-	  PGR_DBG("Calling compute_trsp");
+	  DBG("Calling compute_trsp");
 
 
       ret =
@@ -648,19 +615,19 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
                                    &path, &path_count);
 #ifdef DEBUG
 	double total_cost = 0;
-      PGR_DBG("Ret is %i", ret);
+      DBG("Ret is %i", ret);
       if (ret >= 0) 
         {
           int i;
           for (i = 0; i < path_count; i++) 
             {
-         //     PGR_DBG("Step %i vertex_id  %i ", i, path[i].vertex_id);
-           //   PGR_DBG("        edge_id    %i ", path[i].edge_id);
-             // PGR_DBG("        cost       %f ", path[i].cost);
+         //     DBG("Step %i vertex_id  %i ", i, path[i].vertex_id);
+           //   DBG("        edge_id    %i ", path[i].edge_id);
+             // DBG("        cost       %f ", path[i].cost);
               total_cost+=path[i].cost;
             }
         }
-        PGR_DBG("Total cost is: %f",total_cost);
+        DBG("Total cost is: %f",total_cost);
 #endif
 
       // total number of tuples to be returned 
@@ -676,8 +643,8 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
   // stuff done on every call of the function 
   funcctx = SRF_PERCALL_SETUP();
 
-  call_cntr = (uint32_t)funcctx->call_cntr;
-  max_calls = (uint32_t)funcctx->max_calls;
+  call_cntr = funcctx->call_cntr;
+  max_calls = funcctx->max_calls;
   tuple_desc = funcctx->tuple_desc;
   path = (path_element_t*) funcctx->user_fctx;
 
@@ -689,7 +656,7 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
       bool* nulls;
 
       values = palloc(4 * sizeof(Datum));
-      nulls = palloc(4 * sizeof(bool));
+      nulls = palloc(4 * sizeof(char));
 
       values[0] = Int32GetDatum(call_cntr);
       nulls[0] = false;
@@ -713,7 +680,7 @@ turn_restrict_shortest_path_vertex(PG_FUNCTION_ARGS)
     }
   else    // do when there is no more left 
     {
-      PGR_DBG("Going to free path");
+      DBG("Going to free path");
       if (path) free(path);
       SRF_RETURN_DONE(funcctx);
     }
@@ -725,8 +692,8 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
 {
 	
   FuncCallContext     *funcctx;
-  uint32_t                  call_cntr;
-  uint32_t                  max_calls;
+  int                  call_cntr;
+  int                  max_calls;
   TupleDesc            tuple_desc;
   path_element_t      *path;
   char *               sql;
@@ -734,7 +701,7 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
   // stuff done only on the first call of the function 
   if (SRF_IS_FIRSTCALL()) {
       MemoryContext   oldcontext;
-      uint32_t path_count = 0;
+      int path_count = 0;
 #ifdef DEBUG
       int ret = -1;
 #endif
@@ -780,7 +747,7 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
             sql = NULL;
       }
 
-	  PGR_DBG("Calling compute_trsp");
+	  DBG("Calling compute_trsp");
 
 #ifdef DEBUG
       ret =
@@ -797,19 +764,19 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
                                    &path, &path_count);
 #ifdef DEBUG
 	double total_cost = 0;
-      PGR_DBG("Ret is %i", ret);
+      DBG("Ret is %i", ret);
       if (ret >= 0) 
         {
           int i;
           for (i = 0; i < path_count; i++) 
             {
-         //     PGR_DBG("Step %i vertex_id  %i ", i, path[i].vertex_id);
-           //   PGR_DBG("        edge_id    %i ", path[i].edge_id);
-             // PGR_DBG("        cost       %f ", path[i].cost);
+         //     DBG("Step %i vertex_id  %i ", i, path[i].vertex_id);
+           //   DBG("        edge_id    %i ", path[i].edge_id);
+             // DBG("        cost       %f ", path[i].cost);
               total_cost+=path[i].cost;
             }
         }
-        PGR_DBG("Total cost is: %f",total_cost);
+        DBG("Total cost is: %f",total_cost);
 #endif
 
       // total number of tuples to be returned 
@@ -825,8 +792,8 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
   // stuff done on every call of the function 
   funcctx = SRF_PERCALL_SETUP();
 
-  call_cntr = (uint32_t)funcctx->call_cntr;
-  max_calls = (uint32_t)funcctx->max_calls;
+  call_cntr = funcctx->call_cntr;
+  max_calls = funcctx->max_calls;
   tuple_desc = funcctx->tuple_desc;
   path = (path_element_t*) funcctx->user_fctx;
 
@@ -838,7 +805,7 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
       bool* nulls;
 
       values = palloc(4 * sizeof(Datum));
-      nulls = palloc(4 * sizeof(bool));
+      nulls = palloc(4 * sizeof(char));
 
       values[0] = Int32GetDatum(call_cntr);
       nulls[0] = false;
@@ -862,7 +829,7 @@ turn_restrict_shortest_path_edge(PG_FUNCTION_ARGS)
     }
   else    // do when there is no more left 
     {
-      PGR_DBG("Going to free path");
+      DBG("Going to free path");
       if (path) free(path);
       SRF_RETURN_DONE(funcctx);
     }
diff --git a/src/trsp/src/trsp.h b/src/trsp/src/trsp.h
index fa427ed..03961cc 100644
--- a/src/trsp/src/trsp.h
+++ b/src/trsp/src/trsp.h
@@ -24,21 +24,21 @@
 
 #define MAX_RULE_LENGTH 5
 
-#include <stdint.h>
+#include "postgres.h"
 
 typedef struct edge
 {
-    long id;
+    int id;
     long source;
     long target;
-    double cost;
-    double reverse_cost;
+    float8 cost;
+    float8 reverse_cost;
 } edge_t;
 
 typedef struct restrict_struct
 {
 		int target_id;
-		double to_cost;
+		float8 to_cost;
         int via[MAX_RULE_LENGTH];
 } 
 restrict_t;
@@ -47,45 +47,45 @@ typedef struct path_element
 {
     long vertex_id;
     long edge_id;
-    double cost;
+    float8 cost;
 } path_element_t;
 
 #ifdef __cplusplus
-extern "C" {
+extern "C"
 #endif
 
 int trsp_node_wrapper(
 			edge_t *edges, 
-			uint32_t edge_count, 
+			unsigned int edge_count, 
 			restrict_t *restricts, 
-			uint32_t restrict_count,
-			long start_vertex, 
-			long end_vertex,
+			int restrict_count,
+			int start_vertex, 
+			int end_vertex,
 		    bool directed, 
 		    bool has_reverse_cost,
             path_element_t **path, 
-            uint32_t *path_count, 
+            int *path_count, 
             char **err_msg
             );
 
+#ifdef __cplusplus
+extern "C"
+#endif
+
 int trsp_edge_wrapper(
 			edge_t *edges, 
-			uint32_t edge_count, 
+			unsigned int edge_count, 
 			restrict_t *restricts, 
-			uint32_t restrict_count,
-			long start_edge, 
+			int restrict_count,
+			int start_edge, 
             double start_pos,
-			long end_edge,
+			int end_edge,
             double end_pos,
 		    bool directed, 
 		    bool has_reverse_cost,
             path_element_t **path, 
-            uint32_t *path_count, 
+            int *path_count, 
             char **err_msg
             );
-#ifdef __cplusplus
-}
-#endif
-
 
 #endif
diff --git a/src/trsp/src/trsp_core.cpp b/src/trsp/src/trsp_core.cpp
index e237399..21801c5 100644
--- a/src/trsp/src/trsp_core.cpp
+++ b/src/trsp/src/trsp_core.cpp
@@ -1,27 +1,4 @@
-/*PGR-GNU*****************************************************************
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#ifdef __MINGW32__
 #include <winsock2.h>
 #include <windows.h>
 #endif
@@ -32,15 +9,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 int trsp_node_wrapper(
     edge_t *edges,
-    uint32_t edge_count,
+    unsigned int edge_count,
     restrict_t *restricts,
-    uint32_t restrict_count,
-    long start_vertex,
-    long end_vertex,
+    int restrict_count,
+    int start_vertex,
+    int end_vertex,
     bool directed,
     bool has_reverse_cost,
     path_element_t **path,
-    uint32_t *path_count,
+    int *path_count,
     char **err_msg
     )
 {
@@ -48,9 +25,9 @@ int trsp_node_wrapper(
 
         std::vector<PDVI> ruleTable;
 
-        int j;
+        int i, j;
         ruleTable.clear();
-        for (size_t i=0; i<restrict_count; i++) {
+        for (i=0; i<restrict_count; i++) {
             std::vector<int> seq;
             seq.clear();
             seq.push_back(restricts[i].target_id);
@@ -61,10 +38,8 @@ int trsp_node_wrapper(
             ruleTable.push_back(make_pair(restricts[i].to_cost, seq));
         }
 
-        size_t count;
         GraphDefinition gdef;
-        int res = gdef.my_dijkstra3(edges, edge_count, start_vertex, end_vertex, directed, has_reverse_cost, path, &count, err_msg, ruleTable);
-        *path_count = static_cast<uint32_t> (count);
+        int res = gdef.my_dijkstra(edges, edge_count, start_vertex, end_vertex, directed, has_reverse_cost, path, path_count, err_msg, ruleTable);
 
 
         if (res < 0)
@@ -84,17 +59,17 @@ int trsp_node_wrapper(
 
 int trsp_edge_wrapper(
     edge_t *edges,
-    uint32_t edge_count,
+    unsigned int edge_count,
     restrict_t *restricts,
-    uint32_t restrict_count,
-    long start_edge,
+    int restrict_count,
+    int start_edge,
     double start_pos,
-    long end_edge,
+    int end_edge,
     double end_pos,
     bool directed,
     bool has_reverse_cost,
     path_element_t **path,
-    uint32_t *path_count,
+    int *path_count,
     char **err_msg
     )
 {
@@ -102,9 +77,9 @@ int trsp_edge_wrapper(
 
         std::vector<PDVI> ruleTable;
 
-        int j;
+        int i, j;
         ruleTable.clear();
-        for (size_t i=0; i<restrict_count; i++) {
+        for (i=0; i<restrict_count; i++) {
             std::vector<int> seq;
             seq.clear();
             seq.push_back(restricts[i].target_id);
@@ -116,9 +91,7 @@ int trsp_edge_wrapper(
         }
 
         GraphDefinition gdef;
-        size_t count;
-        int res = gdef.my_dijkstra4(edges, edge_count, start_edge, start_pos, end_edge, end_pos, directed, has_reverse_cost, path, &count, err_msg, ruleTable);
-        *path_count = static_cast<uint32_t>(count);
+        int res = gdef.my_dijkstra(edges, edge_count, start_edge, start_pos, end_edge, end_pos, directed, has_reverse_cost, path, path_count, err_msg, ruleTable);
 
 
         if (res < 0)
diff --git a/src/trsp/src/utils.h b/src/trsp/src/utils.h
index a6eb131..86d3b14 100644
--- a/src/trsp/src/utils.h
+++ b/src/trsp/src/utils.h
@@ -80,10 +80,10 @@ public:
 		return vecTokens.size();
 	}
 
-	bool getToken(std::string& strToken, size_t iTokenIndex)
+	bool getToken(std::string& strToken, long iTokenIndex)
 	{
-		auto lTokenCount = vecTokens.size();
-		if(iTokenIndex < lTokenCount)
+		long lTokenCount = vecTokens.size();
+		if(iTokenIndex < 0 || iTokenIndex < lTokenCount)
 		{
 			strToken = vecTokens[iTokenIndex];
 			return true;
diff --git a/src/trsp/test/doc-trsp.test.sql b/src/trsp/test/doc-trsp.test.sql
index 68091c8..183de73 100644
--- a/src/trsp/test/doc-trsp.test.sql
+++ b/src/trsp/test/doc-trsp.test.sql
@@ -1,6 +1,5 @@
 
 
-BEGIN;
     ------------------------------------------------------------------------------------------------------
     ------------------------------------------------------------------------------------------------------
     --              PGR_pgr_trsp
@@ -53,4 +52,3 @@ BEGIN;
         coalesce('',''||via_path,'''') AS via_path FROM restrictions');
     
 \echo --q6
-    ROLLBACK;
diff --git a/src/trsp/test/issue693.test.sql b/src/trsp/test/issue693.test.sql
index 0f179c5..aae3fa1 100644
--- a/src/trsp/test/issue693.test.sql
+++ b/src/trsp/test/issue693.test.sql
@@ -1,5 +1,4 @@
 
-BEGIN;
 
     CREATE TABLE routing (gid serial, length integer, source integer, target integer, reverse_cost integer);
     INSERT INTO routing (length, source, target, reverse_cost) VALUES
@@ -13,4 +12,3 @@ BEGIN;
           1, 0.1, 1, 0.9, false, true
     );
 
-    ROLLBACK;
diff --git a/src/trsp/test/issue704.result b/src/trsp/test/issue704.result
index 9cf304b..658e0f7 100644
--- a/src/trsp/test/issue704.result
+++ b/src/trsp/test/issue704.result
@@ -1,5 +1,4 @@
 q1
-0|-1|582877|229.0450
 q2
 0|-1|582877|229.0450
 1|-2|-1|0.0000
diff --git a/src/trsp/test/test.conf b/src/trsp/test/test.conf
index b5a35c2..b4d1d30 100644
--- a/src/trsp/test/test.conf
+++ b/src/trsp/test/test.conf
@@ -11,10 +11,11 @@
             issue693
             issue704
             issue717
-            trsp_notes_v2.3.2
+            trsp_notes_v2.4.0
             )],
         'documentation' => [qw(
-            trsp_notes_v2.3.2
+            trsp_notes_v2.4.0
+            issue704
             doc-trsp
             )]
     },
diff --git a/src/trsp/test/trsp-any-02.test.sql b/src/trsp/test/trsp-any-02.test.sql
index 2e611f5..7130d2d 100644
--- a/src/trsp/test/trsp-any-02.test.sql
+++ b/src/trsp/test/trsp-any-02.test.sql
@@ -1,4 +1,3 @@
-BEGIN;
 
 CREATE TABLE restrictions2 (
     rid integer NOT NULL,
@@ -27,4 +26,3 @@ select * from pgr_trsp(
     -- include the turn restrictions
     'select to_cost, teid as target_id, feid||coalesce('',''||via,'''') as via_path from restrictions2');
 
-ROLLBACK;
diff --git a/src/trsp/test/trsp_notes_v2.3.2.result b/src/trsp/test/trsp_notes_v2.4.0.result
similarity index 76%
rename from src/trsp/test/trsp_notes_v2.3.2.result
rename to src/trsp/test/trsp_notes_v2.4.0.result
index 505ee4e..e2db9c7 100644
--- a/src/trsp/test/trsp_notes_v2.3.2.result
+++ b/src/trsp/test/trsp_notes_v2.4.0.result
@@ -1,4 +1,4 @@
-# Notes on pgr_trsp for version 2.3.2
+# Notes on pgr_trsp for version 2.4.0
 Table of contents
 * [Introduction](#introduction)
   * [The restriction](#the-restriction)
@@ -46,17 +46,14 @@ $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, 32, 33::TEXT AS via_pa
 therefore the shortest path expected are as if there was no restriction involved
 # The Vertices signature version
 ## (Vertices) No path representation differences
-Original code of pgr_trsp throws Error to represent no path found
-Sometimes it crasses the server
+Original function code
+* Sometimes it crasses the server when no path was found
+* Sometimes represents with Error a no path found
+* Forcing the user to use the wrapper or the replacement function
+
+Calls to the original function of is no longer allowed without restrictions
 ```
-SELECT * FROM _pgr_trsp(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-1, 15, true, true
-);
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
 ```
 dijkstra returns EMPTY SET to represent no path found
 ```
@@ -67,17 +64,9 @@ therefore returns EMPTY SET to represent no path found
 ```
 pgr_trsp use the original code when there are restrictions
 therefore throws Error to represent no path found
-Can get a server crash
 ```
-SELECT * FROM pgr_trsp(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-1, 15, true, true,
-$$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, 32, 33::TEXT AS via_path$$
-);
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
+CONTEXT:  PL/pgSQL function pgr_trsp(text,integer,integer,boolean,boolean,text) line 29 at RETURN QUERY
 ```
 ## routing from/to same location
 using dijkstra to verify (1 to 1)
@@ -88,8 +77,8 @@ therefore is expected to return EMPTY SET to represent no path found
 ```
 ```
 call forcing the use of the original code (1 to 1)
-therefore is expected to return Error to represent no path found
-but "finds" a path when there should be no path.
+* not longer allowed without restrictions
+
 ```
 0|1|1|1
 1|2|4|1
@@ -139,8 +128,9 @@ using the replacement function because there are no restrictions (2 to 3)
 0|2|2|1
 1|3|-1|0
 ```
-call to the original function (2 to 3)
-does not find the shortest path
+call forcing the use of the original code
+* not longer allowed without restrictions
+
 ```
 0|2|4|1
 1|5|8|1
@@ -171,17 +161,14 @@ does not find the shortest path
 ```
 # The Edges signature version
 ## (Edges) No path representation differences
-Original code of pgr_trsp throws Error to represent no path found
-Can get a server crash
+Original function code
+* Sometimes it crasses the server when no path was found
+* Sometimes represents with Error a no path found
+* Forcing the user to use the wrapper or the replacement function
+
+Calls to the original function of is no longer allowed without restrictions
 ```
-SELECT * FROM _pgr_trsp(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-1, 0.5, 17, 0.5, true, true
-);
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
 ```
 pgr_withPoints returns EMPTY SET to represent no path found
 ```
@@ -192,9 +179,8 @@ Remember that one characteristic of a path is that for a path of N edges it has
 For this example, suppose points, where the pid are different even if the edge and fraction are different.
 One point might be on the left side other on the right side, pgr_trsp does not take into account
 the side of the point
-Using the original code (with and without restrictions) it returns a path
-of N edge and N vertex instead of N edge and N+1 vertices
-* with out restrictions
+calls forcing the use of the original code
+* not longer allowed without restrictions
 
 ```
 0|-1|1|0
@@ -345,45 +331,23 @@ Showing *pgr_withPoints* results of the shortest path from vid 6 to pid 1
 ```
 * Vertex 6 is on edge 8 at 1 fraction
 * Vertex 6 is also edge 11 at 0 fraction
-* The *_pgr_trsp* is used because at least one of the "points" is an actual vertex
+* Undefined behaviour when at least one of the "points" is an actual vertex
 
 ```
-0|6|8|1
-1|5|4|1
-2|2|1|0.6
-0|6|8|1
-1|5|4|1
-2|2|1|0.6
 ```
 # pgr_trspViaVertices
 ## pgr_trspViaVertices No path representation differences
-pgr_trspViaVertices throws error when a path on the route was not found
-this example no path is found (vertex 15 is disconnected) from the big graph
-can crash the server
-```
-SELECT * FROM _pgr_trspViaVertices(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-ARRAY[1, 15, 2],
-false, true
-);
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+pgr_trspViaVertices uses _pgr_trsp which as mentioned before
+* Sometimes it crasses the server when no path was found
+* Sometimes represents with Error a no path found
+* Forcing the user to use the wrapper or the replacement function
+
+Calls to the original function of is no longer allowed without restrictions
 ```
-In this example there exists a path from 2 to 1 but only complete routes are processed
-can crash the server
-```
-SELECT * FROM _pgr_trspViaVertices(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-ARRAY[1, 15, 2, 1],
-false,
-true
-);
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+ERROR:  Error computing path: Path Not Found
+CONTEXT:  PL/pgSQL function _pgr_trspviavertices(text,integer[],boolean,boolean,text) line 23 at FOR over SELECT rows
+ERROR:  Error computing path: Path Not Found
+CONTEXT:  PL/pgSQL function _pgr_trspviavertices(text,integer[],boolean,boolean,text) line 23 at FOR over SELECT rows
 ```
 **pgr_dijkstraVia** returning what paths of the route it finds or EMPTY SET when non is found
 this case none is found
@@ -404,10 +368,7 @@ Because there is no path from 1 to 1 then there is no complete route 1 to 1 to 2
 therefore the expected result is EMPTY SET to represent no route was found
 ```
 ```
-Using the original code
-Because there is no path from 1 to 1 then there is no complete route 1 to 1 to 2
-therefore the expected result is Error to represent no route was found
-gives a result even that there is no path from 1 to 1
+Calls to the original function of is no longer allowed without restrictions
 ```
 1|1|1|1|1
 2|1|2|4|1
@@ -460,7 +421,7 @@ the replacement function **pgr_dijkstraVia** is used because there are no restri
 2|2|3|2|1
 3|2|2|-1|0
 ```
-forcing to use the original code, it give not give the shortest path from 2 to 3
+Calls to the original function of is no longer allowed without restrictions
 ```
 1|1|2|4|1
 2|1|5|8|1
@@ -493,7 +454,8 @@ Exaple execution
 ```
 A temporay wraper function is used when:
 * There are no restrictions
-* No point is a vertex in disguise (with pcts value of 0)
+* Before: No point is a vertex in disguise (with pcts value of 0)
+* Now: c$Undefined behaviour when a point is a vertex in disguise (with pcts value of 0)
 
 Internaly:
 * builds a new graph and calls pgr_dijkstraVia
@@ -505,7 +467,7 @@ What it returns
 * the points are renumbered to -1, -2 .. -N
 * if a point is part of a path it will show on the path
 
-Note: I dont mention the wrapper name due to the fact that this is not official documentation
+Note: I do not mention the wrapper name due to the fact that this is not official documentation
 Note: I will use *_pgr_withPointsVia* as the wrapper name just for sake of this notes
 Example excution
 ```
@@ -519,20 +481,10 @@ Example excution
 ## pgr_trspViaEdges No path representation differences
 This example no path is found (edge 17 is disconnected) from the big graph.
 * There is a vertex in disguise (fraction 0 or 1)
-* *pgr_trspViaEdges* original code is used
-* throws error to represent no route was not found
-* sometimes crashes the server
+* Undefined behaviour
 
 ```
-SELECT * FROM pgr_trspViaEdges(
-$$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-ARRAY[1, 17, 1], ARRAY[0,0.5,0.5],
-false, true
-);
-server closed the connection unexpectedly
-This probably means the server terminated abnormally
-before or while processing the request.
-The connection to the server was lost. Attempting reset: Failed.
+1||||
 ```
 This example no path is found (edge 17 is disconnected) from the big graph.
 * Has a restriction
@@ -590,15 +542,11 @@ when originalcode is used (because there is a restriction)
 ```
 Routing points & vertices
 * vertex 6 is on edge 11 with fraction 0
-original code is used
+* Undefined behavior
 ```
 1|1|-1|1|0.6
 2|1|2|4|1
 3|1|5|10|1
 4|1|10|12|0.6
-5|2|-1|12|0.4
-6|2|11|13|1
-7|2|12|15|1
-8|2|9|9|1
-9|2|6|-1|0
+5|1|-2|-1|0
 ```
diff --git a/src/trsp/test/trsp_notes_v2.3.2.test.sql b/src/trsp/test/trsp_notes_v2.4.0.test.sql
similarity index 84%
rename from src/trsp/test/trsp_notes_v2.3.2.test.sql
rename to src/trsp/test/trsp_notes_v2.4.0.test.sql
index a1e538a..e333de8 100644
--- a/src/trsp/test/trsp_notes_v2.3.2.test.sql
+++ b/src/trsp/test/trsp_notes_v2.4.0.test.sql
@@ -1,4 +1,5 @@
-\echo # Notes on pgr_trsp for version 2.3.2
+ROLLBACK;
+\echo # Notes on pgr_trsp for version 2.4.0
 
 \echo Table of contents
 
@@ -58,17 +59,17 @@
 \echo # The Vertices signature version
 ------------------
 \echo ## (Vertices) No path representation differences
-\echo Original code of pgr_trsp throws Error to represent no path found
-\echo Sometimes it crasses the server
+\echo Original function code
+\echo  * Sometimes it crasses the server when no path was found
+\echo  * Sometimes represents with Error a no path found
+\echo  * Forcing the user to use the wrapper or the replacement function
+\echo 
+\echo Calls to the original function of is no longer allowed without restrictions
 \echo '\`\`\`'
-\echo SELECT * FROM _pgr_trsp(
-\echo     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
-\echo     1, 15, true, true
-\echo );  
-\echo server closed the connection unexpectedly
-\echo This probably means the server terminated abnormally
-\echo before or while processing the request.
-\echo The connection to the server was lost. Attempting reset: Failed.
+SELECT * FROM _pgr_trsp(
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
+    1, 15, true, true
+);  
 \echo '\`\`\`'
 
 \echo dijkstra returns EMPTY SET to represent no path found
@@ -79,8 +80,6 @@ SELECT * FROM pgr_dijkstra(
 );  
 \echo '\`\`\`'
 
-
-
 \echo pgr_trsp use the pgr_dijkstra when there are no restrictions
 \echo therefore returns EMPTY SET to represent no path found
 \echo '\`\`\`'
@@ -92,17 +91,12 @@ SELECT * FROM pgr_TRSP(
 
 \echo pgr_trsp use the original code  when there are restrictions
 \echo therefore throws Error to represent no path found
-\echo Can get a server crash
 \echo '\`\`\`'
-\echo SELECT * FROM pgr_trsp(
-\echo     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
-\echo     1, 15, true, true,
-\echo     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
-\echo );  
-\echo server closed the connection unexpectedly
-\echo This probably means the server terminated abnormally
-\echo before or while processing the request.
-\echo The connection to the server was lost. Attempting reset: Failed.
+ SELECT * FROM pgr_trsp(
+     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
+     1, 15, true, true,
+     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
+);  
 \echo '\`\`\`'
 
 
@@ -129,13 +123,12 @@ SELECT * FROM pgr_TRSP(
 
 
 \echo call forcing the use of the original code (1 to 1)
-\echo therefore is expected to return Error to represent no path found
-\echo but "finds" a path when there should be no path.
+\echo * not longer allowed without restrictions
+\echo 
 \echo '\`\`\`'
 SELECT * FROM _pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-    1, 1,  
-    true, true
+    1, 1,  true, true
 );
 \echo '\`\`\`'
 
@@ -187,14 +180,14 @@ SELECT * FROM pgr_TRSP(
 );
 \echo '\`\`\`'
 
-\echo call to the original function (2 to 3)
-\echo does not find the shortest path
+\echo call forcing the use of the original code
+\echo * not longer allowed without restrictions
+\echo 
 \echo '\`\`\`'
 SELECT * FROM _pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     2, 3,
-    false, 
-    true
+    false, true
 );
 \echo '\`\`\`'
 
@@ -204,8 +197,7 @@ SELECT * FROM _pgr_trsp(
 SELECT * FROM pgr_trsp(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     2, 3,
-    false, 
-    true,
+    false, true,
     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
 \echo '\`\`\`'
@@ -227,17 +219,17 @@ SELECT * FROM _pgr_trsp(
 
 ------------------HERE
 \echo ## (Edges) No path representation differences
-\echo Original code of pgr_trsp throws Error to represent no path found
-\echo Can get a server crash
+\echo Original function code
+\echo  * Sometimes it crasses the server when no path was found
+\echo  * Sometimes represents with Error a no path found
+\echo  * Forcing the user to use the wrapper or the replacement function
+\echo 
+\echo Calls to the original function of is no longer allowed without restrictions
 \echo '\`\`\`'
-\echo SELECT * FROM _pgr_trsp(
-\echo     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
-\echo     1, 0.5, 17, 0.5, true, true
-\echo );  
-\echo server closed the connection unexpectedly
-\echo This probably means the server terminated abnormally
-\echo before or while processing the request.
-\echo The connection to the server was lost. Attempting reset: Failed.
+SELECT * FROM _pgr_trsp(
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost  FROM edge_table$$,
+    1, 0.5, 17, 0.5, true, true
+);  
 \echo '\`\`\`'
 \echo pgr_withPoints returns EMPTY SET to represent no path found
 \echo '\`\`\`'
@@ -259,9 +251,8 @@ SELECT * FROM pgr_withPoints(
 \echo One point might be on the left side other on the right side, pgr_trsp does not take into account
 \echo the side of the point
 
-\echo Using the original code (with and without restrictions) it returns a path
-\echo of N edge and N vertex instead of N edge and N+1 vertices
-\echo * with out restrictions
+\echo calls forcing the use of the original code
+\echo * not longer allowed without restrictions
 \echo 
 \echo '\`\`\`'
 SELECT * FROM _pgr_trsp(
@@ -507,7 +498,7 @@ SELECT * FROM pgr_withPoints(
 
 \echo * Vertex 6 is on edge 8 at 1 fraction
 \echo * Vertex 6 is also edge 11 at 0 fraction
-\echo * The *_pgr_trsp* is used because at least one of the "points" is an actual vertex
+\echo * Undefined behaviour when at least one of the "points" is an actual vertex
 \echo
 \echo '\`\`\`'
 SELECT * FROM pgr_trsp(
@@ -532,35 +523,23 @@ SELECT * FROM pgr_trsp(
 ------------------
 \echo ## pgr_trspViaVertices No path representation differences
 
-\echo pgr_trspViaVertices throws error when a path on the route was not found
-\echo this example no path is found (vertex 15 is disconnected) from the big graph
-\echo can crash the server
-\echo '\`\`\`'
-\echo SELECT * FROM _pgr_trspViaVertices(
-\echo     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-\echo     ARRAY[1, 15, 2],
-\echo     false, true
-\echo );
-\echo server closed the connection unexpectedly
-\echo This probably means the server terminated abnormally
-\echo before or while processing the request.
-\echo The connection to the server was lost. Attempting reset: Failed.
-\echo '\`\`\`'
-
-
-\echo In this example there exists a path from 2 to 1 but only complete routes are processed
-\echo can crash the server
+\echo pgr_trspViaVertices uses _pgr_trsp which as mentioned before
+\echo  * Sometimes it crasses the server when no path was found
+\echo  * Sometimes represents with Error a no path found
+\echo  * Forcing the user to use the wrapper or the replacement function
+\echo 
+\echo Calls to the original function of is no longer allowed without restrictions
 \echo '\`\`\`'
-\echo SELECT * FROM _pgr_trspViaVertices(
-\echo     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-\echo     ARRAY[1, 15, 2, 1],
-\echo     false, 
-\echo     true
-\echo );
-\echo server closed the connection unexpectedly
-\echo This probably means the server terminated abnormally
-\echo before or while processing the request.
-\echo The connection to the server was lost. Attempting reset: Failed.
+SELECT * FROM _pgr_trspViaVertices(
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
+    ARRAY[1, 15, 2],
+    false, true
+);
+SELECT * FROM _pgr_trspViaVertices(
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
+    ARRAY[1, 15, 2, 1],
+    false, true
+);
 \echo '\`\`\`'
 
 \echo **pgr_dijkstraVia** returning what paths of the route it finds or EMPTY SET when non is found
@@ -603,21 +582,16 @@ SELECT * FROM pgr_dijkstraVia(
 SELECT * FROM pgr_TRSPViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true
+    false, true
 );
 \echo '\`\`\`'
 
-\echo Using the original code
-\echo Because there is no path from 1 to 1 then there is no complete route 1 to 1 to 2
-\echo therefore the expected result is Error to represent no route was found
-\echo gives a result even that there is no path from 1 to 1
+\echo Calls to the original function of is no longer allowed without restrictions
 \echo '\`\`\`'
 SELECT * FROM _pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true
+    false, true
 );
 \echo '\`\`\`'
 
@@ -626,8 +600,7 @@ SELECT * FROM _pgr_trspViaVertices(
 SELECT * FROM pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true,
+    false, true,
     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
 \echo '\`\`\`'
@@ -638,8 +611,7 @@ SELECT * FROM pgr_trspViaVertices(
 SELECT * FROM _pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
     ARRAY[1, 1, 2],
-    false, 
-    true,
+    false, true,
     $$SELECT 100::float AS to_cost, 25::INTEGER AS target_id, '32, 33'::TEXT AS via_path$$
 );
 \echo '\`\`\`'
@@ -667,7 +639,7 @@ SELECT * FROM pgr_TRSPViaVertices(
 );
 \echo '\`\`\`'
 
-\echo forcing to use the original code, it give not give the shortest path from 2 to 3
+\echo Calls to the original function of is no longer allowed without restrictions
 \echo '\`\`\`'
 SELECT * FROM _pgr_trspViaVertices(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
@@ -706,7 +678,8 @@ SELECT * FROM pgr_trspViaEdges(
 \echo '\`\`\`'
 \echo A temporay wraper function is used when: 
 \echo * There are no restrictions
-\echo * No point is a vertex in disguise (with pcts value of 0)
+\echo * Before: No point is a vertex in disguise (with pcts value of 0)
+\echo * Now: c$Undefined behaviour when a point is a vertex in disguise (with pcts value of 0)
 \echo
 \echo Internaly:
 \echo * builds a new graph and calls pgr_dijkstraVia
@@ -718,7 +691,7 @@ SELECT * FROM pgr_trspViaEdges(
 \echo * the points are renumbered to -1, -2 .. -N 
 \echo * if a point is part of a path it will show on the path
 \echo
-\echo Note: I dont mention the wrapper name due to the fact that this is not official documentation
+\echo Note: I do not mention the wrapper name due to the fact that this is not official documentation
 \echo Note: I will use *_pgr_withPointsVia* as the wrapper name just for sake of this notes
 
 \echo Example excution
@@ -736,20 +709,14 @@ SELECT * FROM _pgr_withPointsVia(
 
 \echo This example no path is found (edge 17 is disconnected) from the big graph.
 \echo * There is a vertex in disguise (fraction 0 or 1)
-\echo * *pgr_trspViaEdges* original code is used
-\echo * throws error to represent no route was not found
-\echo * sometimes crashes the server
+\echo * Undefined behaviour
 \echo
 \echo '\`\`\`'
-\echo SELECT * FROM pgr_trspViaEdges(
-\echo     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
-\echo     ARRAY[1, 17, 1], ARRAY[0,0.5,0.5],
-\echo     false, true
-\echo );
-\echo server closed the connection unexpectedly
-\echo This probably means the server terminated abnormally
-\echo before or while processing the request.
-\echo The connection to the server was lost. Attempting reset: Failed.
+SELECT * FROM pgr_trspViaEdges(
+    $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
+    ARRAY[1, 17, 1], ARRAY[0,0.5,0.5],
+    false, true
+);
 \echo '\`\`\`'
 
 
@@ -828,7 +795,7 @@ SELECT * FROM pgr_trspViaEdges(
 
 \echo Routing points & vertices
 \echo * vertex 6 is on edge 11 with fraction 0
-\echo original code is used
+\echo  * Undefined behavior
 \echo '\`\`\`'
 SELECT * FROM pgr_trspViaEdges(
     $$SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table$$,
@@ -844,3 +811,4 @@ SELECT * FROM pgr_trspViaEdges(
     true
 );
 \echo '\`\`\`'
+BEGIN;
diff --git a/src/trsp/test/trsp_vias-any-04.test.sql b/src/trsp/test/trsp_vias-any-04.test.sql
index bbe198c..7cf1489 100644
--- a/src/trsp/test/trsp_vias-any-04.test.sql
+++ b/src/trsp/test/trsp_vias-any-04.test.sql
@@ -21,7 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-BEGIN;
 
 
     SELECT * FROM pgr_trspViaVertices(
@@ -60,4 +59,3 @@ BEGIN;
         -- include the turn restrictions
         'SELECT to_cost, target_id::INTEGER, from_edge||coalesce('',''||via_path,'''') AS via_path FROM restrictions');
     \echo '---------------------------'
-    ROLLBACK;
diff --git a/src/tsp/doc/tsp.rst b/src/tsp/doc/TSP-family.rst
similarity index 60%
rename from src/tsp/doc/tsp.rst
rename to src/tsp/doc/TSP-family.rst
index f10faf5..8d6bc14 100644
--- a/src/tsp/doc/tsp.rst
+++ b/src/tsp/doc/TSP-family.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -9,41 +9,27 @@
 
 .. _tsp:
 
-Traveling Sales Person
+Traveling Sales Person - Family of functions
 ===============================================================================
 
-- :ref:`pgr_TSP` - When input is given as matrix cell information.
-- :ref:`pgr_eucledianTSP` - When input are coordinates.
-
-.. toctree::
-    :hidden:
+.. index from here
 
-    ./pgr_tsp
-    ./pgr_eucledianTSP
+* :ref:`pgr_TSP` - When input is given as matrix cell information.
+* :ref:`pgr_eucledianTSP` - When input are coordinates.
 
-.. NOTE:: These signatures are being deprecated
+.. index to here
 
-    .. code-block:: sql
-
-       -- (1)
-       pgr_costResult[] pgr_tsp(sql text, start_id integer) 
-       pgr_costResult[] pgr_tsp(sql text, start_id integer, end_id integer)
-
-       -- (2)
-       record[] pgr_tsp(matrix float[][], start integer)
-       record[] pgr_tsp(matrix float[][], start integer, end integer)
+.. toctree::
+    :hidden:
 
-    - See http://docs.pgrouting.org/2.2/en/src/common/doc/types/cost_result.html 
-    - See http://docs.pgrouting.org/2.2/en/src/tsp/doc/pgr_tsp.html
-    - For more details, see tsp_deprecated_.
+    pgr_TSP
+    pgr_eucledianTSP
 
-    Use :ref:`pgr_eucledianTSP` insteadi of (1).
-    Use :ref:`pgr_TSP` instead of (2).
 
-General Information 
+General Information
 ------------------------------------
 
-Origin 
+Origin
 ..........
 
 The traveling sales person problem was studied in the 18th century by mathematicians
@@ -53,20 +39,20 @@ A discussion about the work of Hamilton & Kirkman
 can be found in the book **Graph Theory (Biggs et  al. 1976)**.
 
 * ISBN-13: 978-0198539162
-* ISBN-10: 0198539169 
+* ISBN-10: 0198539169
 
 It is believed that the general form of the TSP have been first studied by Kalr Menger in Vienna and Harvard.
 The problem  was  later promoted by Hassler, Whitney  &  Merrill at Princeton.
-A detailed  description about the connection between Menger & Whitney, and the development of the  
+A detailed  description about the connection between Menger & Whitney, and the development of the
 TSP can be found in  `On the history of combinatorial optimization (till 1960) <http://www.cwi.nl/~lex/files/histco.ps>`_
 
-Problem Definition 
+Problem Definition
 ...................
 
 Given a collection of cities and travel cost between each pair,
 find the cheapest way for visiting all of the cities and returning to the starting point.
 
-Characteristics 
+Characteristics
 ................
 
 - The travel costs are symmetric:
@@ -92,10 +78,10 @@ TSP & Simulated Annealing
 The simulated annealing algorithm was originally inspired from the process of
 annealing in metal work.
 
-    Annealing involves heating and cooling a material to
-    alter its physical properties due to the changes in its internal structure.
-    As the metal cools its new structure becomes fixed,
-    consequently causing the metal to retain its newly obtained properties.
+Annealing involves heating and cooling a material to
+alter its physical properties due to the changes in its internal structure.
+As the metal cools its new structure becomes fixed,
+consequently causing the metal to retain its newly obtained properties. [C001]_
 
 
 .. rubric:: Pseudocode
@@ -136,18 +122,18 @@ simulated annealing process.
 
 To cool down faster to the next temperature:
 
-    - max_changes_per_temperature: limits the number of changes in the solution per temperature 
-    - max_consecutive_non_changes: limits the number of consecutive non changes per temperature
+- max_changes_per_temperature: limits the number of changes in the solution per temperature
+- max_consecutive_non_changes: limits the number of consecutive non changes per temperature
 
 This is done by doing some book keeping on the times **solution ← snew;** is executed.
 
-    - max_changes_per_temperature: Increases by one when **solution** changes
-    - max_consecutive_non_changes: Reset to 0 when **solution** changes, and increased each **try**
+- max_changes_per_temperature: Increases by one when **solution** changes
+- max_consecutive_non_changes: Reset to 0 when **solution** changes, and increased each **try**
 
 Additionally to stop the algorithm at a higher temperature than the desired one:
 
-    - max_processing_time: limits the time the simulated annealing is performed.
-    - book keeping is done to see if there was a change in **solution** on the last temperature
+- max_processing_time: limits the time the simulated annealing is performed.
+- book keeping is done to see if there was a change in **solution** on the last temperature
 
 Note that, if no change was found in the first **max_consecutive_non_changes** tries, then the
 simulated annealing will stop.
@@ -209,69 +195,24 @@ A recommendation is to play with the values and see what fits to the particular
     description of control parameters
 
 
-.. include:: tsp_parameters.txt 
-
-
-.. _tsp_deprecated:
-
-Deprecated functionality
-.........................
-
-The old functionality is deprecated:
+.. include:: tsp_parameters.txt
 
-* User can not control the execution.
-* Not all valuable information is returned.
-* Some returned column don not have meaningful names.
 
 
-:Example:
 
-Using the old functionality, for example
-
-* `id` can not be of type `BIGINT`.
-* `id1` and `id2` are meningless column names.
-* Needs an index as parameter for the starting node.
-
-.. literalinclude:: doc-tsp.queries
-   :start-after: -- q1
-   :end-before: -- q2
-
-With the new functionality:
-
-* `id` can be of type `BIGINT` .
-* There is an aggregate cost column.
-* Instead of an index it uses the node identifier for the starting node.
-
-.. literalinclude:: doc-tsp.queries
-   :start-after: -- q2
-   :end-before: -- q3
-
-:Example:
-
-Using the old functionality, for example
-
-* `id`, `source`, `target` can not be of type `BIGINT`.
-* It does not return the `cost` column.
-* Needs an index as parameter for the starting node.
-* The identifiers in the result does not correspond to the indentifiers given as input.
+See Also
+.........................
 
-.. literalinclude:: doc-tsp.queries
-   :start-after: -- q3
-   :end-before: -- q4
+.. rubric:: References
 
-With the new functionality:
+.. [C001] `Simulated annaeling algorithm for beginners <http://www.theprojectspot.com/tutorial-post/simulated-annealing-algorithm-for-beginners/6>`_
 
-* `id`, `source`, `target` can be of type `BIGINT`, 
-* There is an aggregate cost column and a cost column in the results.
-* Instead of an index it uses the node identifier for the starting node.
+* http://en.wikipedia.org/wiki/Traveling_salesman_problem
+* http://en.wikipedia.org/wiki/Simulated_annealing
 
-.. literalinclude:: doc-tsp.queries
-   :start-after: -- q4
-   :end-before: -- q5
+.. rubric:: Indices and tables
 
+* :ref:`genindex`
+* :ref:`search`
 
-See Also
-.........................
 
-  * http://en.wikipedia.org/wiki/Traveling_salesman_problem
-  * http://en.wikipedia.org/wiki/Simulated_annealing
diff --git a/src/tsp/doc/doc-pgr_TSP.queries b/src/tsp/doc/doc-pgr_TSP.queries
index abd0633..374dd6b 100644
--- a/src/tsp/doc/doc-pgr_TSP.queries
+++ b/src/tsp/doc/doc-pgr_TSP.queries
@@ -1,4 +1,6 @@
-SET client_min_messages TO WARNING;
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
 SET
 -- q1
 WITH
@@ -71,3 +73,5 @@ SELECT * FROM pgr_TSP(
 (6 rows)
 
 -- q4
+ROLLBACK;
+ROLLBACK
diff --git a/src/tsp/doc/doc-pgr_eucledianTSP.queries b/src/tsp/doc/doc-pgr_eucledianTSP.queries
index 3fa21f4..8067930 100644
--- a/src/tsp/doc/doc-pgr_eucledianTSP.queries
+++ b/src/tsp/doc/doc-pgr_eucledianTSP.queries
@@ -1,6 +1,6 @@
 BEGIN;
 BEGIN
-SET client_min_messages TO WARNING;
+SET client_min_messages TO NOTICE;
 SET
 -- q1
 WITH
@@ -49,7 +49,7 @@ SELECT* from pgr_eucledianTSP(
 (18 rows)
 
 -- q3
-SET client_min_messages TO NOTICE;
+SET client_min_messages TO DEBUG1;
 SET
 SELECT* from pgr_eucledianTSP(
     $$
@@ -58,7 +58,7 @@ SELECT* from pgr_eucledianTSP(
     tries_per_temperature := 0,
     randomize := false
 );
-NOTICE:  pgr_eucledianTSP Processing Information 
+DEBUG:  pgr_eucledianTSP Processing Information
 Initializing tsp class ---> tsp.greedyInitial ---> tsp.annealing ---> OK
 
 Cycle(100) 	total changes =0	0 were because  delta energy < 0
diff --git a/src/tsp/doc/doc-tsp.queries b/src/tsp/doc/doc-tsp.queries
index 84d11b5..d67eac0 100644
--- a/src/tsp/doc/doc-tsp.queries
+++ b/src/tsp/doc/doc-tsp.queries
@@ -1,6 +1,6 @@
 BEGIN;
 BEGIN
-SET client_min_messages TO WARNING;
+SET client_min_messages TO NOTICE;
 SET
 -- q1
 SELECT * FROM pgr_TSP(
@@ -64,54 +64,38 @@ SELECT * FROM pgr_eucledianTSP(
 SELECT * FROM pgr_TSP(
     (SELECT * FROM pgr_vidsToDMatrix(
             'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
-            (SELECT array_agg(id) from edge_table_vertices_pgr WHERE id < 14)::INTEGER[], false , true, true)
+            ARRAY[8,11,12,13]::INTEGER[], false , true, true)
     ),
     1
 );
+NOTICE:  Deprecated function pgr_vidsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
  seq | id 
 -----+----
    0 |  1
    1 |  2
    2 |  3
-   3 |  8
-   4 | 11
-   5 |  5
-   6 | 10
-   7 | 12
-   8 |  9
-   9 |  6
-  10 |  7
-  11 |  4
-  12 |  0
-(13 rows)
+   3 |  0
+(4 rows)
 
 -- q4
 SELECT * FROM pgr_TSP(
     $$
     SELECT * FROM pgr_dijkstraCostMatrix(
         'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-        (SELECT array_agg(id) from edge_table_vertices_pgr WHERE id < 14), false)
+        ARRAY[8,11,12,13]::INTEGER[], false)
     $$,
-    1,
+    8,
     randomize := false
 );
  seq | node | cost | agg_cost 
 -----+------+------+----------
-   1 |    1 |    3 |        0
-   2 |    4 |    1 |        3
-   3 |    9 |    1 |        4
-   4 |   12 |    1 |        5
-   5 |   11 |    2 |        6
-   6 |   13 |    1 |        8
-   7 |   10 |    1 |        9
-   8 |    5 |    2 |       10
-   9 |    7 |    1 |       12
-  10 |    8 |    2 |       13
-  11 |    6 |    1 |       15
-  12 |    3 |    1 |       16
-  13 |    2 |    1 |       17
-  14 |    1 |    0 |       18
-(14 rows)
+   1 |    8 |    3 |        0
+   2 |   11 |    1 |        3
+   3 |   12 |    3 |        4
+   4 |   13 |    3 |        7
+   5 |    8 |    0 |       10
+(5 rows)
 
 -- q5
 ROLLBACK;
diff --git a/src/tsp/doc/pgr_tsp.rst b/src/tsp/doc/pgr_TSP.rst
similarity index 93%
rename from src/tsp/doc/pgr_tsp.rst
rename to src/tsp/doc/pgr_TSP.rst
index 60a139c..3649937 100644
--- a/src/tsp/doc/pgr_tsp.rst
+++ b/src/tsp/doc/pgr_TSP.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -17,6 +17,10 @@ Name
 
 * ``pgr_TSP`` - Returns a route that visits all the nodes exactly once.
 
+.. rubric:: Availability: 2.0.0
+
+* Signature changed 2.3.0
+
 
 Synopsis
 -------------------------------------------------------------------------------
@@ -24,9 +28,9 @@ Synopsis
 The travelling salesman problem (TSP) or travelling salesperson problem asks the following question:
 
   - Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?
-   
+
 This implementation uses simulated annealing to return the approximate solution when the input is given in the form of matrix cell contents.
-The matrix informetion must be symmetrical.
+The matrix information must be symmetrical.
 
 
 Signature Summary
@@ -46,11 +50,9 @@ Signature Summary
 Signatures
 -------------------------------------------------------------------------------
 
-.. NOTE:: The following only aplies to the new signature(s)
-
 
 .. index::
-    single: TSP(Basic Use) -- New Signature
+    single: TSP(Basic Use)
 
 Basic Use
 ...............................................................................
@@ -60,7 +62,7 @@ Basic Use
     pgr_TSP(matrix_cell_sql)
     RETURNS SETOF (seq, node, cost, agg_cost)
 
-:Example: 
+:Example:
 
 Because the documentation examples are auto generated and tested for non changing results,
 and the default is to have random execution, the example is wrapping the actual call.
@@ -73,7 +75,7 @@ and the default is to have random execution, the example is wrapping the actual
     TODO Intermediate Use
 
 .. index::
-    single: TSP(Complete Signature) -- New Signature
+    single: TSP(Complete Signature)
 
 Complete Signature
 ...............................................................................
@@ -156,14 +158,6 @@ The queries use the :ref:`sampledata` network.
 
 
 
-.. rubric:: History
-
-* Rewritten in version 2.3.0
-* Renamed in version 2.0.0
-* GAUL dependency removed in version 2.0.0
-
-
-
 See Also
 -------------------------------------------------------------------------------
 
diff --git a/src/tsp/doc/pgr_eucledianTSP.rst b/src/tsp/doc/pgr_eucledianTSP.rst
index 1cabd1d..0880bc8 100644
--- a/src/tsp/doc/pgr_eucledianTSP.rst
+++ b/src/tsp/doc/pgr_eucledianTSP.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -15,7 +15,9 @@ pgr_eucledianTSP
 Name
 -------------------------------------------------------------------------------
 
-* ``pgr_eucledianTSP`` - Returns a route that visits all the coordinates pairs exactly once.
+``pgr_eucledianTSP`` - Returns a route that visits all the coordinates pairs exactly once.
+
+.. rubric:: Availability: 2.3.0
 
 
 Synopsis
@@ -24,7 +26,7 @@ Synopsis
 The travelling salesman problem (TSP) or travelling salesperson problem asks the following question:
 
   - Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?
-   
+
 This implementation uses simulated annealing to return the approximate solution when the input is given in the form of coordinates.
 
 Signature Summary
@@ -56,7 +58,7 @@ Minimal Signature
     pgr_eucledianTSP(coordinates_sql)
     RETURNS SETOF (seq, node, cost, agg_cost)
 
-:Example: 
+:Example:
 
 Because the documentation examples are auto generated and tested for non changing results,
 and the default is to have random execution, the example is wrapping the actual call.
diff --git a/src/tsp/doc/pgr_tsp-V2.0.rst b/src/tsp/doc/pgr_tsp-V2.0.rst
deleted file mode 100644
index d27df47..0000000
--- a/src/tsp/doc/pgr_tsp-V2.0.rst
+++ /dev/null
@@ -1,255 +0,0 @@
-.. 
-   ****************************************************************************
-    pgRouting Manual
-    Copyright(c) pgRouting Contributors
-
-    This documentation is licensed under a Creative Commons Attribution-Share
-    Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
-   ****************************************************************************
-
-.. _pgr_tsp-V2.0:
-
-pgr_tsp -Deprecated Signatures
-===============================================================================
-
-.. warning:: These functions signatures are deprecated!!!
-
-    * That means they has been replaced by new signatures.
-    * These signatures are no longer supported, and may be removed from future versions.
-    * All code that use these functions signatures should be converted to use its replacement.
-
-Name
--------------------------------------------------------------------------------
-
-* ``pgr_tsp`` - Returns the best route from a start node via a list of nodes.
-
-.. warning:: Use :ref:`pgr_eucledianTSP` instead.  
-
-* ``pgr_tsp`` - Returns the best route order when passed a disance matrix.
-
-.. warning:: Use :ref:`pgr_TSP` instead.  
-
-* ``_pgr_makeDistanceMatrix`` - Returns a Eucleadian distance Matrix from the points provided in the sql result.
-
-.. warning:: There is no replacement.
-
-
-Synopsis
--------------------------------------------------------------------------------
-
-The travelling salesman problem (TSP) or travelling salesperson problem asks the following question: Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city? This algorithm uses simulated annealing to return a high quality approximate solution. Returns a set of :ref:`pgr_costResult <type_cost_result>` (seq, id1, id2, cost) rows, that make up a path.
-
-.. code-block:: sql
-
-	pgr_costResult[] pgr_tsp(sql text, start_id integer);
-	pgr_costResult[] pgr_tsp(sql text, start_id integer, end_id integer);
-
-
-Returns a set of (seq integer, id1 integer, id2 integer, cost float8) that is the best order to visit the nodes in the matrix. ``id1`` is the index into the distance matrix. ``id2`` is the point id from the sql.
-
-If no ``end_id`` is supplied or it is -1 or equal to the start_id then the TSP result is assumed to be a circluar loop returning back to the start. If ``end_id`` is supplied then the route is assumed to start and end the the designated ids. 
-
-.. code-block:: sql
-
-    record[] pgr_tsp(matrix float[][], start integer)
-    record[] pgr_tsp(matrix float[][], start integer, end integer)
-
-
-Description
--------------------------------------------------------------------------------
-
-.. rubric:: With Euclidean distances
-
-The TSP solver is based on ordering the points using straight line (euclidean) distance [#f0]_ between nodes. The implementation is using an approximation algorithm that is very fast. It is not an exact solution, but it is guaranteed that a solution is returned after certain number of iterations.
-
-:sql: a SQL query, which should return a set of rows with the following columns:
-
-	.. code-block:: sql
-
-		SELECT id, x, y FROM vertex_table
-
-	:id: ``int4`` identifier of the vertex
-	:x: ``float8`` x-coordinate
-	:y: ``float8`` y-coordinate
-
-:start_id: ``int4`` id of the start point
-:end_id: ``int4`` id of the end point, This is *OPTIONAL*, if include the route is optimized from start to end, otherwise it is assumed that the start and the end are the same point.
-
-
-The function returns set of :ref:`type_cost_result`:
-
-:seq:   row sequence
-:id1:   internal index to the distance matric
-:id2:   ``id`` of the node
-:cost:  cost to traverse from the current node to the next node.
-
-.. rubric:: Create a distance matrix
-
-For users that need a distance matrix we have a simple function that takes SQL in ``sql`` as described above and returns a record with ``dmatrix`` and ``ids``.
-
-    .. code-block:: sql
-    
-        SELECT dmatrix, ids from _pgr_makeDistanceMatrix('SELECT id, x, y FROM vertex_table');
-
-The function returns a record of ``dmatrix``, ``ids``:
-
-:dmatrix: ``float8[][]`` a symeteric Euclidean distance matrix based on ``sql``.
-:ids: ``integer[]`` an array of ids as they are ordered in the distance matrix.
-
-
-.. rubric:: With distance matrix
-
-For users, that do not want to use Euclidean distances, we also provode the ability to pass a distance matrix that we will solve and return an ordered list of nodes for the best order to visit each. It is up to the user to fully populate the distance matrix. 
-
-:matrix: ``float[][]`` distance matrix of points
-:start: ``int4`` index of the start point
-:end: ``int4`` (optional) index of the end node
-
-The ``end`` node is an optional parameter, you can just leave it out if you want a loop where the ``start`` is the depot and the route returns back to the depot. If you include the ``end`` parameter, we optimize the path from ``start`` to ``end`` and minimize the distance of the route while include the remaining points.
-
-The distance matrix is a multidimensional `PostgreSQL array type <http://www.postgresql.org/docs/9.1/static/arrays.html>`_ that must be ``N x N`` in size. 
-
-The result will be N records of ``[ seq, id ]``:
-
-:seq: row sequence
-:id: index into the matrix
-
-
-.. rubric:: Footnotes
-
-.. [#f0] There was some thought given to pre-calculating the driving distances between the nodes using Dijkstra, but then I read a paper (unfortunately I don't remember who wrote it), where it was proved that the quality of TSP with euclidean distance is only slightly worse than one with real distance in case of normal city layout. In case of very sparse network or rivers and bridges it becomes more inaccurate, but still wholly satisfactory. Of course it is nice to have exact solution, b [...]
-
-
-.. rubric:: History
-
-* Renamed in version 2.0.0
-* GAUL dependency removed in version 2.0.0
-
-
-Examples
--------------------------------------------------------------------------------
-
-* Using SQL parameter (all points from the table, atarting from 6 and ending at 5). We have listed two queries in this example, the first might vary from system to system because there are multiple equivalent answers. The second query should be stable in that the length optimal route should be the same regardless of order.
-
-
-
-.. code-block:: sql
-
-    CREATE TABLE vertex_table (
-        id serial,
-        x double precision,
-        y double precision
-    );
-
-    INSERT INTO vertex_table VALUES
-    (1,2,0), (2,2,1), (3,3,1), (4,4,1), (5,0,2), (6,1,2), (7,2,2),
-    (8,3,2), (9,4,2), (10,2,3), (11,3,3), (12,4,3), (13,2,4);
-
-    SELECT seq, id1, id2, round(cost::numeric, 2) AS cost
-      FROM pgr_tsp('SELECT id, x, y FROM vertex_table ORDER BY id', 6, 5);
-
-     seq | id1 | id2 | cost
-    -----+-----+-----+------
-       0 |   5 |   6 | 1.00
-       1 |   6 |   7 | 1.00
-       2 |   7 |   8 | 1.41
-       3 |   1 |   2 | 1.00
-       4 |   0 |   1 | 1.41
-       5 |   2 |   3 | 1.00
-       6 |   3 |   4 | 1.00
-       7 |   8 |   9 | 1.00
-       8 |  11 |  12 | 1.00
-       9 |  10 |  11 | 1.41
-      10 |  12 |  13 | 1.00
-      11 |   9 |  10 | 2.24
-      12 |   4 |   5 | 1.00
-    (13 rows)
-
-    SELECT round(sum(cost)::numeric, 4) as cost
-   FROM pgr_tsp('SELECT id, x, y FROM vertex_table ORDER BY id', 6, 5);
-
-      cost
-    ---------
-     15.4787
-    (1 row)
-
-
-
-* Using distance matrix (A loop starting from 1)
-
-When using just the start node you are getting a loop that starts with 1, in this case, and travels through the other nodes and is implied to return to the start node from the last one in the list. Since this is a circle there are at least two possible paths, one clockwise and one counter-clockwise that will have the same length and be equall valid. So in the following example it is also possible to get back a sequence of ids = {1,0,3,2} instead of the {1,2,3,0} sequence listed below.
-
-.. code-block:: sql
-
-	SELECT seq, id FROM pgr_tsp('{{0,1,2,3},{1,0,4,5},{2,4,0,6},{3,5,6,0}}'::float8[],1);
-
-	 seq | id 
-	-----+----
-	   0 |  1
-	   1 |  2
-	   2 |  3
-	   3 |  0
-	(4 rows)
-
-* Using distance matrix (Starting from 1, ending at 2)
-
-.. code-block:: sql
-
-	SELECT seq, id FROM pgr_tsp('{{0,1,2,3},{1,0,4,5},{2,4,0,6},{3,5,6,0}}'::float8[],1,2);
-
-	 seq | id 
-	-----+----
-	   0 |  1
-	   1 |  0
-	   2 |  3
-	   3 |  2
-	(4 rows)
-
-* Using the vertices table edge_table_vertices_pgr generated by :ref:`pgr_create_topology`. Again we have two queries where the first might vary and the second is based on the overal path length.
-
-.. code-block:: sql
-
-	SELECT seq, id1, id2, round(cost::numeric, 2) AS cost
-   FROM pgr_tsp('SELECT id::integer, st_x(the_geom) as x,st_x(the_geom) as y FROM edge_table_vertices_pgr  ORDER BY id', 6, 5);
-
-     seq | id1 | id2 | cost
-    -----+-----+-----+------
-       0 |   5 |   6 | 0.00
-       1 |  10 |  11 | 0.00
-       2 |   2 |   3 | 1.41
-       3 |   3 |   4 | 0.00
-       4 |  11 |  12 | 0.00
-       5 |   8 |   9 | 0.71
-       6 |  15 |  16 | 0.00
-       7 |  16 |  17 | 2.12
-       8 |   1 |   2 | 0.00
-       9 |  14 |  15 | 1.41
-      10 |   7 |   8 | 1.41
-      11 |   6 |   7 | 0.71
-      12 |  13 |  14 | 2.12
-      13 |   0 |   1 | 0.00
-      14 |   9 |  10 | 0.00
-      15 |  12 |  13 | 0.00
-      16 |   4 |   5 | 1.41
-    (17 rows)
-
-    SELECT round(sum(cost)::numeric, 4) as cost
-       FROM pgr_tsp('SELECT id::integer, st_x(the_geom) as x,st_x(the_geom) as y FROM edge_table_vertices_pgr  ORDER BY id', 6, 5);
-
-      cost
-    ---------
-     11.3137
-    (1 row)
-
-
-The queries use the :ref:`sampledata` network.
-
-
-See Also
--------------------------------------------------------------------------------
-
-* :ref:`tsp`, :ref:`pgr_TSP`, :ref:`pgr_eucledianTSP`
-
-* :ref:`type_cost_result`
-* http://en.wikipedia.org/wiki/Traveling_salesman_problem
-* http://en.wikipedia.org/wiki/Simulated_annealing
diff --git a/src/tsp/doc/tsp_parameters.txt b/src/tsp/doc/tsp_parameters.txt
index 9b5ebb1..3397fbf 100644
--- a/src/tsp/doc/tsp_parameters.txt
+++ b/src/tsp/doc/tsp_parameters.txt
@@ -27,8 +27,8 @@ Parameter                       Type         Default       Description
 **cooling_factor**              ``FLOAT``    `0.9`         Value between between 0 and 1 (not including) used to calculate the next temperature.
 **randomize**                   ``BOOLEAN``  `true`        Choose the random seed
 
-                                                             - true: Use current time as seed
-                                                             - false: Use `1` as seed. Using this value will get the same results with the same data in each execution.
+                                                           - true: Use current time as seed
+                                                           - false: Use `1` as seed. Using this value will get the same results with the same data in each execution.
 
 =============================== ===========  ============  =================================================
 
diff --git a/src/tsp/sql/CMakeLists.txt b/src/tsp/sql/CMakeLists.txt
index 7f647e9..4f7445e 100644
--- a/src/tsp/sql/CMakeLists.txt
+++ b/src/tsp/sql/CMakeLists.txt
@@ -1,18 +1,16 @@
 # Append in local scope
 LIST(APPEND PACKAGE_SQL_FILES
-    #This are the old signature
-    ${CMAKE_CURRENT_SOURCE_DIR}/routing_tsp.sql
+    # This are the old signature
+    ${CMAKE_CURRENT_SOURCE_DIR}/tsp_v2.0_matrix.sql
+    # this file wrap pgr_tsp with pgr_eucledianTSP
+    ${CMAKE_CURRENT_SOURCE_DIR}/tsp_v2.0_coordinates.sql
+    # This file has vidstodmatrix
     ${CMAKE_CURRENT_SOURCE_DIR}/routing_tsp_wrappers.sql
 
     #this one implements the new tsp
     ${CMAKE_CURRENT_SOURCE_DIR}/TSP.sql
     ${CMAKE_CURRENT_SOURCE_DIR}/eucledianTSP.sql
 
-    #this file wrap pgr_tsp with pgr_eucledianTSP
-    ${CMAKE_CURRENT_SOURCE_DIR}/tsp_v2.0_coordinates.sql
-
-    
-    #${CMAKE_CURRENT_SOURCE_DIR}/_makeMatrix.sql
 )
 
 # set in parent scope
diff --git a/src/tsp/sql/TSP.sql b/src/tsp/sql/TSP.sql
index 610d62c..89e7b82 100644
--- a/src/tsp/sql/TSP.sql
+++ b/src/tsp/sql/TSP.sql
@@ -1,4 +1,28 @@
+/*PGR-GNU*****************************************************************
 
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
 CREATE OR REPLACE FUNCTION pgr_TSP(
     matrix_row_sql TEXT,
     start_id BIGINT DEFAULT 0,
diff --git a/src/tsp/sql/_makeMatrix.sql b/src/tsp/sql/_makeMatrix.sql
deleted file mode 100644
index 7d50069..0000000
--- a/src/tsp/sql/_makeMatrix.sql
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-UNUSED CODE
-*/
--- vertices_sql has the form
--- SELECT id, the_geom FROM .....
-
-CREATE OR REPLACE FUNCTION _pgr_makeMatrix(
-    matrix_sql regclass,
-    OUT dmatrix double precision[],
-    OUT ids BIGINT[]
-)
-AS
-$BODY$
-DECLARE
-    sql text;
-    count_sql text;
-    ids_sql text;
-    rec record;
-    dummy_row double precision[];
-    n INTEGER; -- size of matrix
-    has_the_geom BOOLEAN DEFAULT false;
-    
-BEGIN
-    dmatrix := array[]::double precision[];
-    ids := array[]::integer[];
-    sql = format('SELECT start_vid, end_vid, agg_cost FROM %I ', matrix_sql);
-    BEGIN
-        EXECUTE sql || 'LIMIT 1';
-        EXCEPTION WHEN OTHERS THEN
-            RAISE EXCEPTION 'An expected column was not found in the query 1'
-            USING HINT = 'Please verify columns: (start_vid, end_vid, agg_cost)';
-    END;
-
-    count_sql = format('SELECT count(DISTINCT start_vid) AS count FROM %I', matrix_sql);
-    EXECUTE count_sql INTO rec;
-    n := rec.count;
-
-    ids_sql = format('SELECT DISTINCT start_vid FROM %I ORDER BY start_vid', matrix_sql);
-    FOR rec IN EXECUTE ids_sql LOOP
-        ids := ids || rec.start_vid;
-    END LOOP;
-
-    FOR i in 1 .. n LOOP
-        dummy_row := dummy_row || '+Infinity'::float8;
-    END LOOP;
-
-    FOR i in 1 .. n LOOP
-        dmatrix := dmatrix || ARRAY[dummy_row];
-    END LOOP;
-
-    FOR i IN 1 .. n LOOP
-        dmatrix[i][i] :=  0.0;
-    END LOOP;
-
-    sql = format('
-    WITH 
-      ids AS (SELECT DISTINCT start_vid FROM %I ORDER by start_vid),
-      distinct_ids AS (SELECT DISTINCT row_number() over () AS id, start_vid FROM ids),
-      renumbered1 AS (SELECT id AS new_start_vid,  end_vid, agg_cost FROM distinct_ids JOIN %I USING (start_vid) ORDER BY new_start_vid, end_vid),
-      renumbered2 AS (SELECT new_start_vid,  id AS new_end_vid, agg_cost FROM distinct_ids JOIN renumbered1 ON (start_vid = end_vid))
-      SELECT new_start_vid AS start_vid, new_end_vid AS end_vid, agg_cost from renumbered2 ORDER BY new_start_vid', matrix_sql,matrix_sql);
-
-    FOR rec IN EXECUTE sql LOOP
-        dmatrix[rec.start_vid][rec.end_vid] := rec.agg_cost;
-    END LOOP;
-
-END
-$BODY$
-language plpgsql stable cost 10;
diff --git a/src/tsp/sql/eucledianTSP.sql b/src/tsp/sql/eucledianTSP.sql
index 7d6ceac..fb1b513 100644
--- a/src/tsp/sql/eucledianTSP.sql
+++ b/src/tsp/sql/eucledianTSP.sql
@@ -1,4 +1,28 @@
+/*PGR-GNU*****************************************************************
 
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
 CREATE OR REPLACE FUNCTION pgr_eucledianTSP(
     coordinates_sql TEXT,
     start_id BIGINT DEFAULT 0,
diff --git a/src/tsp/sql/routing_tsp.sql b/src/tsp/sql/routing_tsp.sql
deleted file mode 100644
index 913f4a3..0000000
--- a/src/tsp/sql/routing_tsp.sql
+++ /dev/null
@@ -1,49 +0,0 @@
-/*PGR-MIT*****************************************************************
-
---
--- Copyright (c) 2013 Stephen Woodbridge
---
--- This files is released under an MIT-X license.
-
-------
-MIT/X license
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-********************************************************************PGR-MIT*/
-
-
------------------------------------------------------------------------
--- Core function for TSP
------------------------------------------------------------------------
-/*
- * select seq, id from pgr_tsp(matrix float8[][], start int,
- *                             OUT seq int, OUT id int);
-*/
--- endpt does not work, and is ignored in the code at the moment
--- we hope to support it in the future but the tsp algorithm needs to
--- change or be replaced to support this functionality.
-CREATE OR REPLACE FUNCTION pgr_tsp(matrix float8[][], startpt integer, endpt integer DEFAULT -1, OUT seq integer, OUT id integer)
-
---CREATE OR REPLACE FUNCTION pgr_tsp(matrix float8[][], startpt integer, OUT seq integer, OUT id integer)
-    RETURNS SETOF record
-    AS '$libdir/${PGROUTING_LIBRARY_NAME}', 'tsp_matrix'
-    LANGUAGE c IMMUTABLE STRICT;
diff --git a/src/tsp/sql/routing_tsp_wrappers.sql b/src/tsp/sql/routing_tsp_wrappers.sql
index 9e242f5..a9099ce 100644
--- a/src/tsp/sql/routing_tsp_wrappers.sql
+++ b/src/tsp/sql/routing_tsp_wrappers.sql
@@ -61,47 +61,3 @@ end;
 $body$
 language plpgsql stable cost 10;
 
-/*
-
-create or replace function pgr_tsp(sql text, start_id integer, end_id integer default (-1))
-    returns setof pgr_costResult as
-$body$
-declare
-    sid integer;
-    eid integer;
-    
-begin
-
-    return query with dm  as (
-        select * from _pgr_makeDistanceMatrix( sql )
-    ),
-    ids as (
-        select (row_number() over (order by id asc))-1 as rnum, id
-          from (
-                select unnest(ids) as id
-                  from dm
-                ) foo
-    ), 
-    t as (
-        select a.seq, b.rnum, b.id
-          from pgr_tsp(
-                   (select dmatrix from dm),
-                   (select rnum from ids where id=start_id)::integer,
-                   (case when end_id = -1 then -1 else (select rnum from ids where id=end_id) end)::integer
-               ) a,
-               ids b
-         where a.id=b.rnum
-    ),
-    r as (
-        select array_agg(t.rnum) as rnum from t 
-    )
-    select t.seq::integer, 
-           t.rnum::integer as id1, 
-           t.id::integer as id2, 
-           dm.dmatrix[r.rnum[t.seq+1]+1][r.rnum[(t.seq+1)%array_length(r.rnum, 1)+1]+1]::float8 as cost
-      from t, dm, r;
-end;
-$body$
-language plpgsql volatile cost 50 rows 50;
-
-*/
diff --git a/src/tsp/sql/tsp_v2.0_coordinates.sql b/src/tsp/sql/tsp_v2.0_coordinates.sql
index 047cae1..77a237b 100644
--- a/src/tsp/sql/tsp_v2.0_coordinates.sql
+++ b/src/tsp/sql/tsp_v2.0_coordinates.sql
@@ -1,4 +1,28 @@
+/*PGR-GNU*****************************************************************
 
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
 /*
     Old signature has:
     sql: id INTEGER, x FLOAT, y FLOAT
@@ -17,14 +41,9 @@ debuglevel TEXT;
 n BIGINT;
 
 BEGIN
-    -- checking the fixed columns and data types of the integers
-    EXECUTE 'SHOW client_min_messages' INTO debuglevel;
-
-    EXECUTE 'SET client_min_messages TO NOTICE';
     RAISE NOTICE 'Deprecated Signature pgr_tsp(sql, integer, integer)';
-    EXECUTE 'set client_min_messages  to '|| debuglevel;
 
-    table_sql := 'CREATE TABLE ___tmp  AS ' || sql ;
+    table_sql := 'CREATE TEMP TABLE ___tmp ON COMMIT DROP AS ' || sql ;
     EXECUTE table_sql;
 
 
@@ -54,7 +73,6 @@ BEGIN
     EXECUTE 'SELECT count(*) AS n FROM (' || sql || ') AS __a__' INTO rec;
     n = rec.n;
 
-    EXECUTE 'SET client_min_messages TO ERROR';
     RETURN query
         SELECT (seq - 1)::INTEGER AS seq, node::INTEGER AS id1, node::INTEGER AS id2, cost
         FROM pgr_eucledianTSP(sql, start_id, end_id,
@@ -65,7 +83,6 @@ BEGIN
 
             randomize := false) WHERE seq <= n;
     DROP TABLE ___tmp;
-    EXECUTE 'set client_min_messages  to '|| debuglevel;
 
 END;
 $body$
diff --git a/src/tsp/sql/tsp_v2.0_matrix.sql b/src/tsp/sql/tsp_v2.0_matrix.sql
new file mode 100644
index 0000000..6021967
--- /dev/null
+++ b/src/tsp/sql/tsp_v2.0_matrix.sql
@@ -0,0 +1,95 @@
+/*PGR-GNU*****************************************************************
+
+Copyright (c) 2016 pgRouting developers
+Mail: project at pgrouting.org
+
+Copyright (c) 2016 Celia Virginia Vergara Castillo
+mail: vicky_vergara at hotmail.com
+
+------
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+********************************************************************PGR-GNU*/
+
+CREATE OR REPLACE FUNCTION _pgr_unnest_matrix(matrix float8[][], OUT start_vid integer, OUT end_vid integer, out agg_cost float8)
+RETURNS SETOF record AS 
+
+$body$
+DECLARE
+
+m float8[];
+
+BEGIN
+    start_vid = 1;
+    foreach m slice 1 in  ARRAY matrix
+    LOOP
+        end_vid = 1;
+        foreach agg_cost in  ARRAY m
+        LOOP
+            RETURN next;
+            end_vid = end_vid + 1;
+        END LOOP;
+        start_vid = start_vid + 1;
+    END LOOP;
+END;
+$body$
+language plpgsql volatile cost 500 ROWS 50;
+
+
+
+CREATE OR REPLACE FUNCTION pgr_tsp(
+    matrix float8[][],
+    startpt INTEGER,
+    endpt INTEGER DEFAULT -1,
+    OUT seq INTEGER,
+    OUT id INTEGER)
+RETURNS SETOF record AS
+$body$
+DECLARE
+table_sql TEXT;
+debuglevel TEXT;
+BEGIN
+    RAISE NOTICE 'Deprecated Signature pgr_tsp(float8[][], integer, integer)';
+
+    CREATE TEMP TABLE ___tmp2 ON COMMIT DROP AS SELECT * FROM _pgr_unnest_matrix( matrix );
+
+
+    startpt := startpt + 1;
+    IF endpt = -1 THEN endpt := startpt;
+    END IF;
+
+    
+    RETURN QUERY
+    WITH 
+    result AS (
+        SELECT * FROM pgr_TSP(
+        $$SELECT * FROM ___tmp2 $$,
+        startpt, endpt,
+
+        tries_per_temperature :=  500 :: INTEGER,
+        max_changes_per_temperature := 30 :: INTEGER,
+        max_consecutive_non_changes := 500 :: INTEGER,
+
+        randomize:=false)
+    )
+    SELECT (row_number() over(ORDER BY result.seq) - 1)::INTEGER AS seq, (result.node - 1)::INTEGER AS id
+
+    FROM result WHERE NOT(result.node = startpt AND result.seq != 1);
+
+    DROP TABLE ___tmp2;
+END;
+$body$
+language plpgsql volatile cost 500 ROWS 50;
diff --git a/src/tsp/src/CMakeLists.txt b/src/tsp/src/CMakeLists.txt
index fe87114..ed24e17 100644
--- a/src/tsp/src/CMakeLists.txt
+++ b/src/tsp/src/CMakeLists.txt
@@ -9,7 +9,4 @@ ADD_LIBRARY(tsp OBJECT
     eucledianDmatrix.cpp
     tour.cpp
 
-    #Code for the old signature
-    tsp2.c
-    tsplib.c
     )
diff --git a/src/tsp/src/Dmatrix.cpp b/src/tsp/src/Dmatrix.cpp
index 5c242a2..fb6033d 100644
--- a/src/tsp/src/Dmatrix.cpp
+++ b/src/tsp/src/Dmatrix.cpp
@@ -22,12 +22,6 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#undef min
-#undef max
-#endif
 
 #include "./Dmatrix.h"
 
@@ -38,9 +32,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include <vector>
 #include <cmath>
 
+#include "./tour.h"
 #include "../../common/src/pgr_assert.h"
 
-#include "./tour.h"
 
 namespace pgrouting {
 namespace tsp {
@@ -54,7 +48,7 @@ Dmatrix::tourCost(const Tour &tour) const {
     for (const auto &id : tour.cities) {
         if (id == tour.cities.front()) continue;
 
-        pgassert(distance(prev_id, id) != std::numeric_limits<double>::max());
+        pgassert(distance(prev_id, id) != (std::numeric_limits<double>::max)());
 
         total_cost += costs[prev_id][id];
         prev_id = id;
@@ -103,13 +97,12 @@ Dmatrix::get_id(size_t id) const {
  */
 Dmatrix::Dmatrix(const std::vector < Matrix_cell_t > &data_costs) {
     set_ids(data_costs);
-    costs.resize(ids.size());
-    for (auto &row : costs) {
-        row.resize(ids.size());
-        for (auto &cell : row) {
-            cell = std::numeric_limits<double>::max();
-        }
-    }
+    costs.resize(
+            ids.size(),
+            std::vector<double>(
+                ids.size(),
+                (std::numeric_limits<double>::max)()));
+
     for (const auto &data : data_costs) {
         costs[get_index(data.from_vid)][get_index(data.to_vid)] = data.cost;
     }
@@ -123,7 +116,8 @@ bool
 Dmatrix::has_no_infinity() const {
     for (const auto &row : costs) {
         for (const auto &val : row) {
-            if (val == std::numeric_limits<double>::max()) return false;
+            if (val == (std::numeric_limits<double>::infinity)()) return false;
+            if (val == (std::numeric_limits<double>::max)()) return false;
         }
     }
     return true;
@@ -185,7 +179,10 @@ std::ostream& operator<<(std::ostream &log, const Dmatrix &matrix) {
                 << "," << matrix.get_index(matrix.ids[j]) << ")"
                 << "\t = " << cost
                 << "\t = " << matrix.costs[i][j]
-                << "\t = " << matrix.costs[j][i] << "\n";
+                << "\t = " << matrix.costs[j][i]
+                << "=inf:" <<  (matrix.costs[i][j] == (std::numeric_limits<double>::infinity)())
+                << "=inf:" <<  (matrix.costs[j][i] == (std::numeric_limits<double>::infinity)())
+                << "\n";
             ++j;
         }
         ++i;
@@ -195,7 +192,8 @@ std::ostream& operator<<(std::ostream &log, const Dmatrix &matrix) {
             for (size_t k = 0; k < matrix.costs.size(); ++k) {
                 log << matrix.costs[i][k] << " <= ("
                     << matrix.costs[i][j] << " + "  << matrix.costs[j][k] << ")"
-                    << (matrix.costs[i][k] <= (matrix.costs[i][j] + matrix.costs[j][k]))
+                    << (matrix.costs[i][k]
+                            <= (matrix.costs[i][j] + matrix.costs[j][k]))
                     << "\n";
             }
         }
diff --git a/src/tsp/src/eucledianDmatrix.cpp b/src/tsp/src/eucledianDmatrix.cpp
index 3e10097..908621a 100644
--- a/src/tsp/src/eucledianDmatrix.cpp
+++ b/src/tsp/src/eucledianDmatrix.cpp
@@ -23,19 +23,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
 
+#include "./eucledianDmatrix.h"
 
 #include <algorithm>
 #include <vector>
 #include <cmath>
-#include "../../common/src/pgr_assert.h"
 
-#include "./eucledianDmatrix.h"
 #include "./tour.h"
+#include "../../common/src/pgr_assert.h"
+
 
 namespace pgrouting {
 namespace tsp {
diff --git a/src/tsp/src/eucledianTSP.c b/src/tsp/src/eucledianTSP.c
index cadff5b..9c45799 100644
--- a/src/tsp/src/eucledianTSP.c
+++ b/src/tsp/src/eucledianTSP.c
@@ -27,22 +27,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
-
-#define DEBUG
 
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/coordinates_input.h"
 #include "./eucledianTSP_driver.h"
 
@@ -79,7 +70,8 @@ process(
      * errors in parameters
      */
     if (initial_temperature < final_temperature) {
-        elog(ERROR, "Condition not met: initial_temperature > final_temperature");
+        elog(ERROR, "Condition not met: initial_temperature"
+               " > final_temperature");
     }
     if (final_temperature <= 0) {
         elog(ERROR, "Condition not met: final_temperature > 0");
@@ -113,12 +105,14 @@ process(
         return;
     }
 
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
     do_pgr_eucledianTSP(
-            coordinates,
-            total_coordinates,
+            coordinates, total_coordinates,
             start_vid,
             end_vid,
             initial_temperature,
@@ -132,19 +126,24 @@ process(
             result_tuples,
             result_count,
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing eucledianTSP", start_t, clock());
-    if (log_msg) {
-        elog(NOTICE, "%s", log_msg);
-        free(log_msg);
-    }
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+
+    time_msg("eucledianTSP", start_t, clock());
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
     }
 
-    pfree(coordinates);
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (coordinates) pfree(coordinates);
+
     pgr_SPI_finish();
 }
 /*                                                                            */
@@ -154,8 +153,6 @@ PG_FUNCTION_INFO_V1(eucledianTSP);
 PGDLLEXPORT Datum
 eucledianTSP(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
     /**************************************************************************/
@@ -195,7 +192,7 @@ eucledianTSP(PG_FUNCTION_ARGS) {
            */
 
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
                 PG_GETARG_INT64(2),
 
@@ -215,7 +212,12 @@ eucledianTSP(PG_FUNCTION_ARGS) {
         /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
+
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -230,12 +232,10 @@ eucledianTSP(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -258,20 +258,16 @@ eucledianTSP(PG_FUNCTION_ARGS) {
         }
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[2] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[3] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[2] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[3] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/src/tsp/src/eucledianTSP_driver.cpp b/src/tsp/src/eucledianTSP_driver.cpp
index e118e5c..01b745b 100644
--- a/src/tsp/src/eucledianTSP_driver.cpp
+++ b/src/tsp/src/eucledianTSP_driver.cpp
@@ -27,23 +27,19 @@
  *
  *  ******************************************************************** PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
 
+#include "./eucledianTSP_driver.h"
 
 #include <string.h>
 #include <sstream>
 #include <vector>
 #include <algorithm>
 
-#include "./eucledianTSP_driver.h"
+#include "./pgr_tsp.hpp"
 #include "./eucledianDmatrix.h"
 
-#include "./pgr_tsp.hpp"
-#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 
 void
 do_pgr_eucledianTSP(
@@ -64,9 +60,11 @@ do_pgr_eucledianTSP(
         General_path_element_t **return_tuples,
         size_t *return_count,
         char **log_msg,
+        char **notice_msg,
         char **err_msg) {
-    std::ostringstream err;
     std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
 
     try {
         std::vector< Coordinate_t > coordinates(
@@ -75,7 +73,6 @@ do_pgr_eucledianTSP(
 
         pgrouting::tsp::eucledianDmatrix costs(coordinates);
 
-        double real_cost = -1;
 
         size_t idx_start = costs.has_id(start_vid) ?
             costs.get_index(start_vid) : 0;
@@ -83,14 +80,24 @@ do_pgr_eucledianTSP(
         size_t idx_end = costs.has_id(end_vid) ?
             costs.get_index(end_vid) : 0;
 
-        if (costs.has_id(start_vid) && costs.has_id(end_vid) && start_vid != end_vid) {
-            /* An ending vertex needs to be by the starting vertex */
+        /* The ending vertex needs to be by the starting vertex */
+        double real_cost = 0;
+        if (costs.has_id(start_vid)
+                && costs.has_id(end_vid)
+                && start_vid != end_vid) {
+            /*
+             * Saving the real cost (distance)  between the start_vid and end_vid
+             */
             real_cost = costs.distance(idx_start, idx_end);
+            /*
+             * Temporarly setting the cost between the start_vid and end_vid to 0
+             */
             costs.set(idx_start, idx_end, 0);
         }
 
 
-        log << "pgr_eucledianTSP Processing Information \nInitializing tsp class --->";
+        log << "pgr_eucledianTSP Processing Information\n"
+            << "Initializing tsp class --->";
         pgrouting::tsp::TSP<pgrouting::tsp::eucledianDmatrix> tsp(costs);
 
 
@@ -109,13 +116,20 @@ do_pgr_eucledianTSP(
                 max_consecutive_non_changes,
                 randomize,
                 time_limit);
-        log << " OK\n";
-        log << tsp.get_log();
-        log << tsp.get_stats();
+         log << " OK\n";
+         log << tsp.get_log();
+         log << tsp.get_stats();
+
 
         auto bestTour(tsp.get_tour());
 
-        if (costs.has_id(start_vid) && costs.has_id(end_vid) && start_vid != end_vid) {
+        /* The ending vertex needs to be by the starting vertex */
+        if (costs.has_id(start_vid)
+                && costs.has_id(end_vid)
+                && start_vid != end_vid) {
+            /*
+             * Restoring the real cost (distance)  between the start_vid and end_vid
+             */
             costs.set(idx_start, idx_end, real_cost);
         }
 
@@ -131,7 +145,9 @@ do_pgr_eucledianTSP(
                 start_ptr,
                 bestTour.cities.end());
 
-        if (costs.has_id(start_vid) && costs.has_id(end_vid) && start_vid != end_vid) {
+        if (costs.has_id(start_vid)
+                && costs.has_id(end_vid)
+                && start_vid != end_vid) {
             if (*(bestTour.cities.begin() + 1) == idx_end) {
                 std::reverse(
                         bestTour.cities.begin() + 1,
@@ -182,26 +198,30 @@ do_pgr_eucledianTSP(
             ++seq;
         }
 
-        *log_msg = strdup(log.str().c_str());
-        (*err_msg) = NULL;
-        return;
+        pgassert(!log.str().empty());
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
     } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     } catch(...) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
diff --git a/src/tsp/src/eucledianTSP_driver.h b/src/tsp/src/eucledianTSP_driver.h
index a97abb0..bbc0d07 100644
--- a/src/tsp/src/eucledianTSP_driver.h
+++ b/src/tsp/src/eucledianTSP_driver.h
@@ -29,7 +29,6 @@
 
 #ifndef SRC_TSP_SRC_EUCLEDIANTSP_DRIVER_H_
 #define SRC_TSP_SRC_EUCLEDIANTSP_DRIVER_H_
-
 #pragma once
 
 #include "../../common/src/pgr_types.h"
@@ -56,6 +55,7 @@ do_pgr_eucledianTSP(
         General_path_element_t **results,
         size_t *total_results,
         char **log_msg,
+        char **notice_msg,
         char **err_msg);
 
 #ifdef __cplusplus
diff --git a/src/tsp/src/newTSP.c b/src/tsp/src/newTSP.c
index 08913c3..8c5768a 100644
--- a/src/tsp/src/newTSP.c
+++ b/src/tsp/src/newTSP.c
@@ -27,22 +27,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
  ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
-
-#define DEBUG
 
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/matrixRows_input.h"
 #include "./newTSP_driver.h"
 
@@ -80,7 +71,8 @@ process(
      */
 
     if (initial_temperature < final_temperature) {
-        elog(ERROR, "Condition not met: initial_temperature > final_temperature");
+        elog(ERROR, "Condition not met: initial_temperature"
+               " > final_temperature");
     }
     if (final_temperature <= 0) {
         elog(ERROR, "Condition not met: final_temperature > 0");
@@ -114,12 +106,15 @@ process(
         return;
     }
 
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
     do_pgr_tsp(
-            distances,
-            total_distances,
+            distances, total_distances,
             start_vid,
             end_vid,
             initial_temperature,
@@ -133,19 +128,24 @@ process(
             result_tuples,
             result_count,
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing eucledianTSP", start_t, clock());
-    if (log_msg) {
-        elog(NOTICE, "%s", log_msg);
-        free(log_msg);
-    }
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+
+    time_msg("eucledianTSP", start_t, clock());
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_tuples) = NULL;
+        (*result_count) = 0;
     }
 
-    pfree(distances);
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (distances) pfree(distances);
+
     pgr_SPI_finish();
 }
 /*                                                                            */
@@ -155,8 +155,6 @@ PG_FUNCTION_INFO_V1(newTSP);
 PGDLLEXPORT Datum
 newTSP(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
     /**************************************************************************/
@@ -196,7 +194,7 @@ newTSP(PG_FUNCTION_ARGS) {
            */
 
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
                 PG_GETARG_INT64(2),
 
@@ -216,7 +214,12 @@ newTSP(PG_FUNCTION_ARGS) {
         /*                                                                    */
         /**********************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
+
         funcctx->user_fctx = result_tuples;
         if (get_call_result_type(fcinfo, NULL, &tuple_desc)
                 != TYPEFUNC_COMPOSITE) {
@@ -231,12 +234,10 @@ newTSP(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
@@ -259,19 +260,16 @@ newTSP(PG_FUNCTION_ARGS) {
         }
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[2] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[3] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[2] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[3] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
         /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/tsp/src/newTSP_driver.cpp b/src/tsp/src/newTSP_driver.cpp
index 239baa6..f3af088 100644
--- a/src/tsp/src/newTSP_driver.cpp
+++ b/src/tsp/src/newTSP_driver.cpp
@@ -27,23 +27,18 @@
  *
  *  ******************************************************************** PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./newTSP_driver.h"
 
 #include <string.h>
 #include <sstream>
 #include <vector>
 #include <algorithm>
 
-#include "./newTSP_driver.h"
 #include "./Dmatrix.h"
-
 #include "./pgr_tsp.hpp"
-#include "./../../common/src/pgr_assert.h"
+
 #include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
 
 void
 do_pgr_tsp(
@@ -64,12 +59,14 @@ do_pgr_tsp(
         General_path_element_t **return_tuples,
         size_t *return_count,
         char **log_msg,
+        char **notice_msg,
         char **err_msg) {
-    std::ostringstream err;
     std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
 
     try {
-        std::vector < Matrix_cell_t > data_costs(
+        std::vector <Matrix_cell_t> data_costs(
                 distances,
                 distances + total_distances);
 
@@ -77,15 +74,13 @@ do_pgr_tsp(
 
         if (!costs.has_no_infinity()) {
             err << "An Infinity value was found on the Matrix";
-            *err_msg = strdup(err.str().c_str());
-            *log_msg = strdup(log.str().c_str());
+            *err_msg = pgr_msg(err.str().c_str());
             return;
         }
 
         if (!costs.is_symmetric()) {
             err << "A Non symmetric Matrix was given as input";
-            *err_msg = strdup(err.str().c_str());
-            *log_msg = strdup(log.str().c_str());
+            *err_msg = pgr_msg(err.str().c_str());
             return;
         }
 
@@ -97,14 +92,17 @@ do_pgr_tsp(
         size_t idx_end = costs.has_id(end_vid) ?
             costs.get_index(end_vid) : 0;
 
-        if (costs.has_id(start_vid) && costs.has_id(end_vid) && start_vid != end_vid) {
+        if (costs.has_id(start_vid)
+                && costs.has_id(end_vid)
+                && start_vid != end_vid) {
             /* An ending vertex needs to be by the starting vertex */
             real_cost = costs.distance(idx_start, idx_end);
             costs.set(idx_start, idx_end, 0);
         }
 
 
-        log << "pgr_eucledianTSP Processing Information \nInitializing tsp class --->";
+        log << "pgr_eucledianTSP Processing Information \n"
+            << "Initializing tsp class --->";
         pgrouting::tsp::TSP<pgrouting::tsp::Dmatrix> tsp(costs);
 
 
@@ -129,7 +127,9 @@ do_pgr_tsp(
 
         auto bestTour(tsp.get_tour());
 
-        if (costs.has_id(start_vid) && costs.has_id(end_vid) && start_vid != end_vid) {
+        if (costs.has_id(start_vid)
+                && costs.has_id(end_vid)
+                && start_vid != end_vid) {
             costs.set(idx_start, idx_end, real_cost);
         }
 
@@ -147,7 +147,9 @@ do_pgr_tsp(
                 start_ptr,
                 bestTour.cities.end());
 
-        if (costs.has_id(start_vid) && costs.has_id(end_vid) && start_vid != end_vid) {
+        if (costs.has_id(start_vid)
+                && costs.has_id(end_vid)
+                && start_vid != end_vid) {
             if (*(bestTour.cities.begin() + 1) == idx_end) {
                 std::reverse(
                         bestTour.cities.begin() + 1,
@@ -198,26 +200,29 @@ do_pgr_tsp(
             ++seq;
         }
 
-        *log_msg = strdup(log.str().c_str());
-        (*err_msg) = NULL;
-        return;
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
     } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     } catch(...) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(err.str().c_str());
-        *log_msg = strdup(log.str().c_str());
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
 }
diff --git a/src/tsp/src/newTSP_driver.h b/src/tsp/src/newTSP_driver.h
index 82c6180..bd6b324 100644
--- a/src/tsp/src/newTSP_driver.h
+++ b/src/tsp/src/newTSP_driver.h
@@ -55,6 +55,7 @@ do_pgr_tsp(
         General_path_element_t **results,
         size_t *total_results,
         char **log_msg,
+        char **notice_msg,
         char **err_msg);
 
 #ifdef __cplusplus
diff --git a/src/tsp/src/pgr_tsp.cpp b/src/tsp/src/pgr_tsp.cpp
index f696a5f..bc4b693 100644
--- a/src/tsp/src/pgr_tsp.cpp
+++ b/src/tsp/src/pgr_tsp.cpp
@@ -27,17 +27,12 @@
  *
  *  ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#undef min
-#undef max
-#endif
 
 #include "./pgr_tsp.hpp"
 
 #include <time.h>
 
+#include <utility>
 #include <iomanip>
 #include <limits>
 #include <vector>
@@ -120,7 +115,7 @@ TSP<MATRIX>::find_closest_city(
 #endif
 
     size_t best_city = 0;
-    auto best_distance = std::numeric_limits<double>::max();
+    auto best_distance = (std::numeric_limits<double>::max)();
 #ifndef NDEBUG
     bool found(false);
 #endif
@@ -342,7 +337,8 @@ TSP<MATRIX>::getDeltaSwap(size_t posA, size_t posE) const {
     auto f = current_tour.cities[succ(posE, n)];
 
 #ifndef NDEBUG
-    auto delta = distance(b, e) + distance(e, c) + distance(d, a) + distance(a, f)
+    auto delta = distance(b, e)
+        + distance(e, c) + distance(d, a) + distance(a, f)
         - distance(b, a) - distance(a, c)  - distance(d, e) - distance(e, f);
     auto new_tour(current_tour);
     new_tour.swap(posA, posE);
@@ -383,7 +379,8 @@ TSP<MATRIX>::getDeltaReverse(size_t posA, size_t posC) const {
 
 
 #ifndef NDEBUG
-    auto delta = distance(a, c) + distance(b, d) - distance(a, b) - distance(c, d);
+    auto delta =
+        distance(a, c) + distance(b, d) - distance(a, b) - distance(c, d);
     auto new_tour(current_tour);
     new_tour.reverse(posA, posC);
     auto exactDelta = tourCost(new_tour) - tourCost(current_tour);
@@ -486,9 +483,13 @@ TSP<MATRIX>::annealing(
 
                             auto energyChange = getDeltaReverse(c1, c2);
 
-                            if ( (energyChange < 0 && epsilon < std::fabs(energyChange))
+                            if ( (energyChange < 0
+                                        && epsilon < std::fabs(energyChange))
                                     || (0 < energyChange
-                                        &&  (static_cast<double>(std::rand()) / static_cast<double>(RAND_MAX))  < exp(-energyChange / temperature))) {
+                                        &&  (
+                                            static_cast<double>(std::rand()) /
+                                            static_cast<double>(RAND_MAX))
+                                        < exp(-energyChange / temperature))) {
                                 if (energyChange < 0) ++enchg;
                                 ++reverse_count;
                                 ++pathchg;
@@ -501,6 +502,10 @@ TSP<MATRIX>::annealing(
                         break;
                 case 1: {
                             /* slide */
+                            if (n <= 3) {
+                                break;
+                            }
+
                             pgassert(n > 3);
 
                             auto first = std::rand() % n;
@@ -518,13 +523,19 @@ TSP<MATRIX>::annealing(
                                 last + (place - first) + 1;
 
 
-                            pgassert((place < first || place > last) && (first < last));
+                            pgassert((place < first
+                                        || place > last)
+                                    && (first < last));
 
-                            auto energyChange = getDeltaSlide(place, first, last);
+                            auto energyChange = getDeltaSlide(
+                                    place, first, last);
 
-                            if ((energyChange < 0 && epsilon < std::fabs(energyChange))
+                            if ((energyChange < 0
+                                        && epsilon < std::fabs(energyChange))
                                     || (0 < energyChange
-                                        &&  (static_cast<double>(std::rand()) / static_cast<double>(RAND_MAX))  < exp(-energyChange / temperature))) {
+                                        &&  (static_cast<double>(std::rand())
+                                            / static_cast<double>(RAND_MAX))
+                                        < exp(-energyChange / temperature))) {
                                 if (energyChange < 0) ++enchg;
                                 ++slide_count;
                                 ++pathchg;
@@ -546,7 +557,8 @@ TSP<MATRIX>::annealing(
 
         swapClimb();
         clock_t current_time(clock());
-        double elapsed_time = static_cast<double>(current_time - start_time) / CLOCKS_PER_SEC;
+        double elapsed_time = static_cast<double>(
+                current_time - start_time) / CLOCKS_PER_SEC;
         if (time_limit < elapsed_time) {
             break;
         }
diff --git a/src/tsp/src/pgr_tsp.hpp b/src/tsp/src/pgr_tsp.hpp
index 37cf422..9456d55 100644
--- a/src/tsp/src/pgr_tsp.hpp
+++ b/src/tsp/src/pgr_tsp.hpp
@@ -26,6 +26,9 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
  *  ********************************************************************PGR-GNU*/
+
+#ifndef SRC_TSP_SRC_PGR_TSP_HPP_
+#define SRC_TSP_SRC_PGR_TSP_HPP_
 #pragma once
 
 #include <sstream>
@@ -142,3 +145,5 @@ class TSP: public MATRIX {
 }  // namespace pgrouting
 
 #include "pgr_tsp.cpp"
+
+#endif   // SRC_TSP_SRC_PGR_TSP_HPP_
diff --git a/src/tsp/src/tsp.h b/src/tsp/src/tsp.h
deleted file mode 100644
index 5cb4481..0000000
--- a/src/tsp/src/tsp.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*PGR-GNU*****************************************************************
-
- * Traveling Salesman Problem solution algorithm for PostgreSQL
- *
- * Copyright (c) 2006 Anton A. Patrushev, Orkney, Inc.
- * Copyright (c) 2013 Stephen Woodbridge, iMaptools.com.
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-/*
- * This code is deprecated
- */
-
-#ifndef SRC_TSP_SRC_TSP_H_
-#define SRC_TSP_SRC_TSP_H_
-
-// define the type of object for the distance matrix
-#define DTYPE double
-
-#include "postgres.h"
-#include "../../common/src/pgr_types.h"
-
-typedef struct point {
-  int id;
-  float8 x;
-  float8 y;
-} point_t;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-  int find_tsp_solution(int num, DTYPE *dist, int *p_ids, int source, int end, DTYPE *fit, char* err_msg);
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_TSP_SRC_TSP_H_
diff --git a/src/tsp/src/tsp2.c b/src/tsp/src/tsp2.c
deleted file mode 100644
index 9c297b0..0000000
--- a/src/tsp/src/tsp2.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/*PGR-MIT*****************************************************************
-
- * Traveling Sales Problem solver for pgRouting and PostgreSQL
- *
- * Copyright 2013, Stephen Woodbridge, iMaptools.com
- * This program is released under an MIT-X license.
- *
-
-------
-MIT/X license
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-********************************************************************PGR-MIT*/
-
-/*
- * This code is deprecated
- */
-
-#include "./tsp.h"
-#include <math.h>
-
-#include "postgres.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#include "utils/array.h"
-#include "utils/lsyscache.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
-#include "fmgr.h"
-
-PGDLLEXPORT Datum tsp_matrix(PG_FUNCTION_ARGS);
-
-#undef DEBUG
-#include "../../common/src/debug_macro.h"
-
-#if 0
-#ifndef INFINITY
-#ifndef _MSC_VER
-#define INFINITY (1.0/0.0)
-#else  // _MSC_VER
-#define INFINITY (DBL_MAX + DBL_MAX);
-#endif  // _MSC_VER
-#endif
-#endif
-
-// The number of tuples to fetch from the SPI cursor at each iteration
-#define TUPLIMIT 1000
-
-
-static DTYPE *get_pgarray(int *num, ArrayType *input) {
-    int         ndims, *dims;  // , *lbs;
-    bool       *nulls;
-    Oid         i_eltype;
-    int16       i_typlen;
-    bool        i_typbyval;
-    char        i_typalign;
-    Datum      *i_data;
-    int         i, n;
-    DTYPE      *data;
-
-    /* get input array element type */
-    i_eltype = ARR_ELEMTYPE(input);
-    get_typlenbyvalalign(i_eltype, &i_typlen, &i_typbyval, &i_typalign);
-
-
-    /* validate input data type */
-    switch (i_eltype) {
-    case INT2OID:
-    case INT4OID:
-    case FLOAT4OID:
-    case FLOAT8OID:
-            break;
-    default:
-            elog(ERROR, "Invalid input data type");
-            break;
-    }
-
-    /* get various pieces of data from the input array */
-    ndims = ARR_NDIM(input);
-    dims = ARR_DIMS(input);
-    // lbs = ARR_LBOUND(input);
-
-    if (ndims != 2 || dims[0] != dims[1]) {
-        elog(ERROR, "Error: matrix[num][num] in its definition.");
-    }
-
-    /* get src data */
-    deconstruct_array(input, i_eltype, i_typlen, i_typbyval, i_typalign,
-&i_data, &nulls, &n);
-
-    PGR_DBG("get_pgarray: ndims=%d, n=%d", ndims, n);
-
-#ifdef DEBUG
-    for (i = 0; i < ndims; i++) {
-        // PGR_DBG("   dims[%d]=%d, lbs[%d]=%d", i, dims[i], i, lbs[i]);
-        PGR_DBG("   dims[%d]=%d", i, dims[i]);
-    }
-#endif
-
-    /* construct a C array */
-    data = (DTYPE *) palloc((size_t)(n) * sizeof(DTYPE));
-    if (!data) {
-        elog(ERROR, "Error: Out of memory!");
-    }
-
-    for (i = 0; i < n; i++) {
-        if (nulls[i]) {
-            data[i] = (DTYPE) 0;
-        } else {
-            switch (i_eltype) {
-                case INT2OID:
-                    data[i] = (DTYPE) DatumGetInt16(i_data[i]);
-                    break;
-                case INT4OID:
-                    data[i] = (DTYPE) DatumGetInt32(i_data[i]);
-                    break;
-                case FLOAT4OID:
-                    data[i] = (DTYPE) DatumGetFloat4(i_data[i]);
-                    break;
-                case FLOAT8OID:
-                    data[i] = (DTYPE) DatumGetFloat8(i_data[i]);
-                    break;
-            }
-            /* we assume negative values are INFINTY */
-            /********************************************************
-               TODO: based on trying to add an endpt it is likely
-               that this will not work and you will get and error in
-               findEulerianPath
-            **********************************************************/
-            if (data[i] < 0) {
-                data[i] = (DTYPE) 0;
-                nulls[i] = true;
-            }
-        }
-        PGR_DBG("    data[%d]=%.4f", i, data[i]);
-    }
-
-    pfree(nulls);
-    pfree(i_data);
-
-    *num = dims[0];
-
-    return data;
-}
-
-
-// macro to store distance values as matrix[num][num]
-#define D(i, j) matrix[(i) * num + j]
-
-static int solve_tsp(DTYPE *matrix, int num, int start, int end, int **results) {
-    int ret;
-    int i;
-    int *ids;
-    DTYPE fit;
-    char *err_msg = NULL;
-
-    PGR_DBG("In solve_tsp: num: %d, start: %d, end: %d", num, start, end);
-
-    if (num < 4)
-        elog(ERROR, "Error TSP requires four or more locations to optimize. Only %d were supplied.", num);
-
-    if (start < 0 || start >= num)
-        elog(ERROR, "Error start must be in the range of 0 <= start(%d) < num(%d).", start, num);
-
-    if (end >= num)
-        elog(ERROR, "Error end must be in the range of 0 <= end(%d) < num(%d).", end, num);
-
-    /* if start and end are the same this is the same as setting end = -1 */
-    if (start == end)
-        end = -1;
-
-    /*
-       fix up matrix id we have an end point
-       basically set D(start,end)=INFINITY and D(end,start)=0.0
-    */
-    if (end >= 0) {
-        PGR_DBG("Updating start end costs");
-        D(start, end) = 0.0;
-        D(end, start) = 0.0;
-    }
-
-    PGR_DBG("Alloc ids");
-
-    ids = (int *) malloc((size_t)(num) * sizeof(int));
-    if (!ids) {
-        elog(ERROR, "Error: Out of memory (solve_tsp)");
-    }
-
-    for (i = 0; i < num; i++) {
-        ids[i] = i;
-    }
-
-    PGR_DBG("Calling find_tsp_solution");
-
-// int find_tsp_solution(int num, DTYPE *dist, int *p_ids, int source, DTYPE *fit, char* err_msg);
-    ret = find_tsp_solution(num, matrix, ids, start, end, &fit, err_msg);
-    if (ret < 0) {
-        elog(ERROR, "Error solving TSP, %s", err_msg);
-    }
-
-    PGR_DBG("TSP solved, Score: %f", fit);
-
-    *results = ids;
-    return ret;
-}
-
-/*
- * select seq, id from pgr_tsp(matrix float8[][], start int,
- *                             OUT seq int, OUT id int);
-*/
-
-PG_FUNCTION_INFO_V1(tsp_matrix);
-PGDLLEXPORT Datum
-tsp_matrix(PG_FUNCTION_ARGS) {
-    FuncCallContext     *funcctx;
-    uint32_t                  call_cntr;
-    uint32_t                  max_calls;
-    TupleDesc            tuple_desc;
-    // AttInMetadata       *attinmeta;
-
-    DTYPE               *matrix;
-    int                 *tsp_res;
-    int                  num;
-
-    /* stuff done only on the first call of the function */
-    if (SRF_IS_FIRSTCALL()) {
-        MemoryContext   oldcontext;
-        // int path_count;
-        int ret = -1;
-
-        /* create a function context for cross-call persistence */
-        funcctx = SRF_FIRSTCALL_INIT();
-
-        /* switch to memory context appropriate for multiple function calls */
-        oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
-
-        matrix = get_pgarray(&num, PG_GETARG_ARRAYTYPE_P(0));
-
-        ret = solve_tsp(matrix, num,
-                        PG_GETARG_INT32(1),  // start index
-                        PG_GETARG_INT32(2),  // end  index
-                        &tsp_res);
-
-        pfree(matrix);
-        if (ret < 0) {
-            elog(ERROR, "Error, failed to solve TSP.");
-        }
-
-        funcctx->max_calls = (uint32_t)num;
-        funcctx->user_fctx = tsp_res;
-
-        /* Build a tuple descriptor for our result type */
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
-            ereport(ERROR,
-                    (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                     errmsg("function returning record called in context "
-                            "that cannot accept type record")));
-
-        funcctx->tuple_desc = BlessTupleDesc(tuple_desc);
-
-        /*
-         * generate attribute metadata needed later to produce tuples from raw
-         * C strings
-         */
-        // attinmeta = TupleDescGetAttInMetadata(tuple_desc);
-        // funcctx->attinmeta = attinmeta;
-
-        MemoryContextSwitchTo(oldcontext);
-    }
-
-    /* stuff done on every call of the function */
-    funcctx = SRF_PERCALL_SETUP();
-
-    call_cntr  = (uint32_t)funcctx->call_cntr;
-    max_calls  = (uint32_t)funcctx->max_calls;
-    tuple_desc = funcctx->tuple_desc;
-    tsp_res    = funcctx->user_fctx;
-
-    PGR_DBG("Trying to allocate some memory");
-    PGR_DBG("call_cntr = %i, max_calls = %i", call_cntr, max_calls);
-
-    if (call_cntr < max_calls) {   /* do when there is more left to send */
-        HeapTuple    tuple;
-        Datum        result;
-        Datum *values;
-        bool* nulls;
-
-        values = palloc(2 * sizeof(Datum));
-        nulls = palloc(2 * sizeof(bool));
-
-        values[0] = Int32GetDatum(call_cntr);
-        nulls[0] = false;
-        values[1] = Int32GetDatum(tsp_res[call_cntr]);
-        nulls[1] = false;
-
-        PGR_DBG("RESULT: %d, %d", call_cntr, tsp_res[call_cntr]);
-
-        PGR_DBG("Heap making");
-
-        tuple = heap_form_tuple(tuple_desc, values, nulls);
-
-        PGR_DBG("Datum making");
-
-        /* make the tuple into a datum */
-        result = HeapTupleGetDatum(tuple);
-
-        PGR_DBG("RESULT: seq:%d, id:%d", call_cntr, tsp_res[call_cntr]);
-        PGR_DBG("Trying to free some memory");
-
-        /* clean up (this is not really necessary) */
-        pfree(values);
-        pfree(nulls);
-
-
-        SRF_RETURN_NEXT(funcctx, result);
-    } else {   /* do when there is no more left */
-        PGR_DBG("Freeing tsp_res");
-        free(tsp_res);
-
-        PGR_DBG("Ending function");
-        SRF_RETURN_DONE(funcctx);
-    }
-}
-
diff --git a/src/tsp/src/tsplib.c b/src/tsp/src/tsplib.c
deleted file mode 100644
index 3b9c8d3..0000000
--- a/src/tsp/src/tsplib.c
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- * THIS CODE IS DEPRECATED
- */
-
-/*PGR-MIT*****************************************************************
-
-*  $Id: tsplib.c, v 1.1 2006/05/13 23:39:56 woodbri Exp $
-*
-*  tsplib
-*  Copyright 2005, 2013, Stephen Woodbridge, All rights Reserved
-*  This file is released under MIT-X license as part of pgRouting.
-
-------
-MIT/X license
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files(the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-********************************************************************PGR-MIT*/
-
-/*
-**********************************************************************
-*
-*  tsplib.c
-*
-*  Routine to calculate the node order for a Traveling Salesman Problem
-*  from a distance matrix.
-*
-*  $Log: tsplib.c, v $
-*  Revision 1.1  2006/05/13 23:39:56  woodbri
-*  Initial checkin of IMT::TSP module.
-*
-*  Initial revision created from router tsp2.c
-*
-**********************************************************************
-*
-* Simulated annealing and a non symmetric
-* Euclidian Traveling Salesman Problem.
-*
-* Solution based on local search heuristics for
-* non-crossing paths and nearest neighbors
-*
-* Storage Requirements: 4n ints
-*
-* Problem: given an nXn matrix of costs for n cities in the plane,
-* find a permutation pi_1, pi_2, ..., pi_n of 1, 2, ..., n that
-* minimizes sum for 1<=i<n D(pi_i, pi_i+1), where D(i, j) is the
-* euclidian distance between cities i and j from the matrix
-*
-* This means that the ith row is the "from" city and the jth column
-* is the cost to the "to" city.
-*
-* NOTE: costs are assumed to be ints, so scaling them to meters or
-* some other int would be advisable.
-*
-* NOTE: the internal cost calculations ASSUME a symmetric matrix. There
-* are notes of what needs to be updated, but all D(i, j)s need to be
-* reviewed because order is important for asymetric cases.
-*
-* Note: with n cities, there is(n-1)!/2 possible tours.
-* factorial(10)=3628800  factorial(50)=3E+64  factorial(150)=5.7E+262
-* If we could check one tour per clock cycle on a 100 MHZ computer, we
-* would still need to wait approximately 10^236 times the age of the
-* universe to explore all tours for 150 cities.
-*
-* Derivied from code 1995 by Maugis Lionel(Sofreavia) on sid1
-* that was placed in the public domain.
-*************************************************************************/
-
-// #ifdef __MINGW64__
-// #define ELOG_H
-// #include <winsock2.h>
-// #endif
-#include <postgres.h>
-#include <string.h>    /* memcpy */
-#include <math.h>      /* exp    */
-
-#include "./tsp.h"
-
-#undef DEBUG
-// #define DEBUG 1
-#include "../../common/src/debug_macro.h"
-
-
-#define T_INIT                        100
-#define FINAL_T                       0.1
-#define COOLING                       0.9 /* to lower down T(< 1) */
-#define TRIES_PER_T                   500*n
-#define IMPROVED_PATH_PER_T           60*n
-
-/*
- *   MACHINE INDEPENDENT RANDOM NUMBER GENERATOR
- *   Written by:  DIMACS (modified for TSP)
-*/
-
-#define PRANDMAX 1000000000
-static int a;
-static int b;
-static int arr[55];
-
-static
-int Rand(void);
-
-static
-void initRand(int seed) {
-    int i, ii;
-    int last, next;
-
-    seed %= PRANDMAX;
-    if (seed < 0) seed += PRANDMAX;
-
-    arr[0] = last = seed;
-    next = 1;
-    for (i = 1; i < 55; i++) {
-        ii =(21 * i) % 55;
-        arr[ii] = next;
-        next = last - next;
-        if (next < 0)
-            next += PRANDMAX;
-        last = arr[ii];
-    }
-    a = 0;
-    b = 24;
-    for (i = 0; i < 165; i++)
-        last = Rand();
-}
-
-static
-int Rand(void) {
-    int t;
-
-    if (a-- == 0)
-        a = 54;
-    if (b-- == 0)
-        b = 54;
-
-    t = arr[a] - arr[b];
-
-    if (t < 0)
-        t += PRANDMAX;
-
-    arr[a] = t;
-
-    return t;
-}
-
-#define RREAL ((double)Rand()/PRANDMAX)
-#define RANDOM Rand
-#define unifRand(n) (Rand()%n)
-
-
-/*
- * Defs
- */
-
-typedef int Path[3];      /* specify how to change path */
-
-typedef struct tspstruct {
-    int n;
-    DTYPE maxd;
-    DTYPE *dist;
-    DTYPE bestlen;
-    int *iorder;
-    int *jorder;
-    int *border;  //  best order we find
-    float b[4];
-} TSP;
-
-#define MOD(i, n)   ((i) %(n) >= 0 ?(i) %(n) :(i) %(n) +(n))
-#define D(x, y) dist[(x)*n+y]
-
-#define MIN(a, b)((a) < (b)?(a) : (b))
-#define MAX(a, b)((a) > (b)?(a) : (b))
-#define sqr(x)  ((x)*(x))
-
-/*
- * Prim's approximated TSP tour
- * See also [Cristophides'92]
- */
-static
-int findEulerianPath(TSP *tsp) {
-    int *mst, *arc;
-    int i, j, k, l, a;
-    int n, *iorder, *jorder;
-    DTYPE d;
-    DTYPE maxd;
-    DTYPE *dist;
-    DTYPE *dis;
-
-    jorder = tsp->jorder;
-    iorder = tsp->iorder;
-    dist   = tsp->dist;
-    maxd   = tsp->maxd;
-    n      = tsp->n;
-
-    if (!(mst =(int*) palloc((size_t) n * sizeof(int))) ||
-        !(arc =(int*) palloc((size_t) n * sizeof(int))) ||
-        !(dis =(DTYPE*) palloc((size_t) n * sizeof(DTYPE))) ) {
-        elog(ERROR, "Failed to allocate memory!");
-        return -1;
-    }
-    // PGR_DBG("findEulerianPath: 1");
-
-    k = -1;
-    j = -1;
-    d = maxd;
-    dis[0] = -1;
-    for (i = 1; i < n; i++) {
-        dis[i] = D(i, 0);
-        arc[i] = 0;
-        if (d > dis[i]) {
-            d = dis[i];
-            j = i;
-        }
-    }
-    // PGR_DBG("findEulerianPath: j=%d", j);
-
-    if (j == -1)
-        elog(ERROR, "Error TSP fail to findEulerianPath, check your distance matrix is valid.");
-
-    /*
-     * O(n^2) Minimum Spanning Trees by Prim and Jarnick
-     * for graphs with adjacency matrix.
-     */
-    for (a = 0; a < n - 1; a++) {
-        mst[a] = j * n + arc[j]; /* join fragment j with MST */
-        dis[j] = -1;
-        d = maxd;
-        for (i = 0; i < n; i++) {
-            if (dis[i] >= 0) {
-                /* not connected yet */
-                if (dis[i] > D(i, j)) {
-                    dis[i] = D(i, j);
-                    arc[i] = j;
-                }
-                if (d > dis[i]) {
-                    d = dis[i];
-                    k = i;
-                }
-            }
-        }
-        j = k;
-    }
-    // PGR_DBG("findEulerianPath: 3");
-
-    /*
-     * Preorder Tour of MST
-     */
-#define VISITED(x) jorder[x]
-#define NQ(x) arc[l++] = x
-#define DQ()  arc[--l]
-#define EMPTY (l == 0)
-
-    for (i = 0; i < n; i++) VISITED(i) = 0;
-    k = 0; l = 0; d = 0; NQ(0);
-    while (!EMPTY) {
-        i = DQ();
-        if (!VISITED(i)) {
-            iorder[k++] = i;
-            VISITED(i)  = 1;
-            for (j = 0; j < n - 1; j++) /* push all kids of i */ {
-                if (i == mst[j]%n) NQ(mst[j]/n);
-            }
-        }
-    }
-    // PGR_DBG("findEulerianPath: 4");
-
-    return 0;
-}
-
-static
-DTYPE pathLength(TSP *tsp) {
-    unsigned int i;
-    DTYPE len = 0;
-
-    int* iorder = tsp->iorder;
-    DTYPE *dist   = tsp->dist;
-    int  n = tsp->n;
-
-    for (i = 0; (int)i < (int)(n-1); i++) {
-        len += D(iorder[i], iorder[i+1]);
-    }
-    len += D(iorder[n-1], iorder[0]); /* close path */
-    return(len);
-}
-
-/*
- * Local Search Heuristics
- *  b-------a        b       a
- *  .       .   =>   .\     /.
- *  . d...e .        . e...d .
- *  ./     \.        .       .
- *  c       f        c-------f
- */
-static
-DTYPE getThreeWayCost(TSP *tsp, Path p) {
-    int a, b, c, d, e, f;
-    int *iorder = tsp->iorder;
-    DTYPE *dist   = tsp->dist;
-    int n       = tsp->n;
-
-    a = iorder[MOD(p[0]-1, n)];
-    b = iorder[p[0]];
-    c = iorder[p[1]];
-    d = iorder[MOD(p[1]+1, n)];
-    e = iorder[p[2]];
-    f = iorder[MOD(p[2]+1, n)];
-
-    return(D(a, d) + D(e, b) + D(c, f) - D(a, b) - D(c, d) - D(e, f));
-        /* add cost between d and e if non symmetric TSP */
-}
-
-static
-void doThreeWay(TSP *tsp, Path p) {
-    int i, count, m1, m2, m3, a, b, c, d, e, f;
-    int *iorder = tsp->iorder;
-    int *jorder = tsp->jorder;
-    int n       = tsp->n;
-
-    a = MOD(p[0]-1, n);
-    b = p[0];
-    c = p[1];
-    d = MOD(p[1]+1, n);
-    e = p[2];
-    f = MOD(p[2]+1, n);
-
-    m1 = MOD(n+c-b, n)+1;  /* num cities from b to c */
-    m2 = MOD(n+a-f, n)+1;  /* num cities from f to a */
-    m3 = MOD(n+e-d, n)+1;  /* num cities from d to e */
-
-    count = 0;
-    /* [b..c] */
-    for (i = 0; i < m1; i++) jorder[count++] = iorder[MOD(i+b, n)];
-
-    /* [f..a] */
-    for (i = 0; i < m2; i++) jorder[count++] = iorder[MOD(i+f, n)];
-
-    /* [d..e] */
-    for (i = 0; i < m3; i++) jorder[count++] = iorder[MOD(i+d, n)];
-
-    /* copy segment back into iorder */
-    for (i = 0; i < n; i++) iorder[i] = jorder[i];
-}
-
-/*
- *   c..b       c..b
- *    \/    =>  |  |
- *    /\        |  |
- *   a  d       a  d
- */
-static
-DTYPE getReverseCost(TSP *tsp, Path p) {
-    int a, b, c, d;
-    int *iorder = tsp->iorder;
-    DTYPE *dist   = tsp->dist;
-    int n       = tsp->n;
-
-    a = iorder[MOD(p[0]-1, n)];
-    b = iorder[p[0]];
-    c = iorder[p[1]];
-    d = iorder[MOD(p[1]+1, n)];
-
-    return(D(d, b) + D(c, a) - D(a, b) - D(c, d));
-    /* add cost between c and b if non symmetric TSP */
-}
-static void doReverse(TSP *tsp, Path p) {
-    int i, nswaps, first, last, tmp;
-    int *iorder = tsp->iorder;
-    int n       = tsp->n;
-
-
-    /* reverse path b...c */
-    nswaps =(MOD(p[1]-p[0], n)+1)/2;
-    for (i = 0; i < nswaps; i++) {
-        first = MOD(p[0]+i, n);
-        last  = MOD(p[1]-i, n);
-        tmp   = iorder[first];
-        iorder[first] = iorder[last];
-        iorder[last]  = tmp;
-    }
-}
-
-static
-void annealing(TSP *tsp) {
-    Path   p;
-    int    i, j, pathchg;
-    int    numOnPath, numNotOnPath;
-    DTYPE    pathlen;
-    int    n = tsp->n;
-    double energyChange, T;
-
-    pathlen = pathLength(tsp);
-
-    for (T = T_INIT; T > FINAL_T; T *= COOLING)  /* annealing schedule */ {
-        pathchg = 0;
-        for (j = 0; j < TRIES_PER_T; j++) {
-            do {
-                p[0] = unifRand(n);
-                p[1] = unifRand(n);
-                /* non-empty path */
-                if (p[0] == p[1]) p[1] = MOD(p[0]+1, n);
-                numOnPath = MOD(p[1]-p[0], n) + 1;
-                numNotOnPath = n - numOnPath;
-            } while (numOnPath < 2 || numNotOnPath < 2); /* non-empty path */
-
-            if (RANDOM() % 2) /*  threeWay */ {
-                do {
-                    p[2] = MOD(unifRand(numNotOnPath)+p[1]+1, n);
-                } while (p[0] == MOD(p[2]+1, n)); /* avoids a non-change */
-
-                energyChange = getThreeWayCost(tsp, p);
-                if (energyChange < 0 || RREAL < exp(-energyChange/T)) {
-                    pathchg++;
-                    pathlen += energyChange;
-                    doThreeWay(tsp, p);
-                }
-            } else {
-                /* path Reverse */
-                energyChange = getReverseCost(tsp, p);
-                if (energyChange < 0 || RREAL < exp(-energyChange/T)) {
-                    pathchg++;
-                    pathlen += energyChange;
-                    doReverse(tsp, p);
-                }
-            }
-            //  if the new length is better than best then save it as best
-            if (pathlen < tsp->bestlen) {
-                tsp->bestlen = pathlen;
-                for (i = 0; i < tsp->n; i++) tsp->border[i] = tsp->iorder[i];
-            }
-            if (pathchg > IMPROVED_PATH_PER_T) break; /* finish early */
-        }
-        PGR_DBG("T:%f L:%f B:%f C:%d", T, pathlen, tsp->bestlen, pathchg);
-        if (pathchg == 0) break;   /* if no change then quit */
-    }
-}
-
-
-static
-void reverse(int num, int *ids) {
-    int i, j, t;
-    for (i = 0, j = num - 1; i < j; i++, j--) {
-        t = ids[j];
-        ids[j] = ids[i];
-        ids[i] = t;
-    }
-}
-
-
-int find_tsp_solution(int num, DTYPE *cost, int *ids, int start, int end, DTYPE *total_len, char *err_msg) {
-    int   i, j;
-    int   istart = 0;
-    int   jstart = 0;
-    int   iend = -1;
-    int   jend = -1;
-    int   rev = 0;
-    TSP   tsp;
-    int64_t  seed = -314159L;
-    DTYPE blength;
-
-    PGR_DBG("sizeof(int64_t)=%d", (int)sizeof(int64_t));
-
-    initRand((int) seed);
-
-#ifdef DEBUG
-    char bufff[2048];
-    int nnn;
-    PGR_DBG("---------- Matrix[%d][%d] ---------------------\n", num, num);
-    for (i = 0; i < num; i++) {
-        sprintf(bufff, "%d:", i);
-        nnn = 0;
-        for (j = 0; j < num; j++) {
-            nnn += sprintf(bufff + nnn, "\t%.4f", cost[i * num + j]);
-        }
-        PGR_DBG("%s", bufff);
-    }
-#endif
-
-    /* initialize tsp struct */
-    tsp.n = num;
-    tsp.dist   = NULL;
-    tsp.iorder = NULL;
-    tsp.jorder = NULL;
-    tsp.border = NULL;
-
-    if (!(tsp.iorder =(int*) palloc((size_t) tsp.n * sizeof(int)))   ||
-        !(tsp.jorder =(int*) palloc((size_t) tsp.n * sizeof(int)))   ||
-        !(tsp.border =(int*) palloc((size_t) tsp.n * sizeof(int)))   ) {
-            elog(FATAL, "Memory allocation failed!");
-            return -1;
-        }
-
-    tsp.dist = cost;
-    tsp.maxd = 0;
-    for (i=0; i < tsp.n * tsp.n; i++) {
-        tsp.maxd = MAX(tsp.maxd, cost[i]);
-    }
-
-    /* identity permutation */
-    for (i = 0; i < tsp.n; i++) tsp.iorder[i] = i;
-
-    tsp.bestlen = pathLength(&tsp);
-    for (i = 0; i < tsp.n; i++) tsp.border[i] = tsp.iorder[i];
-
-    PGR_DBG("Initial Path Length: %.4f", tsp.bestlen);
-
-    /*
-     * Set up first eulerian path iorder to be improved by
-     * simulated annealing.
-     */
-    if (findEulerianPath(&tsp))
-        return -1;
-
-    blength = pathLength(&tsp);
-    if (blength < tsp.bestlen) {
-        tsp.bestlen = blength;
-        for (i = 0; i < tsp.n; i++) tsp.border[i] = tsp.iorder[i];
-    }
-
-    PGR_DBG("Approximated Path Length: %.4f", blength);
-
-    annealing(&tsp);
-
-    *total_len = pathLength(&tsp);
-    PGR_DBG("Final Path Length: %.4f", *total_len);
-
-    *total_len = tsp.bestlen;
-    for (i = 0; i < tsp.n; i++) tsp.iorder[i] = tsp.border[i];
-    PGR_DBG("Best Path Length: %.4f", *total_len);
-
-    //  reorder ids[] with start as first
-
-#ifdef DEBUG
-    for (i = 0; i < tsp.n; i++) {
-        PGR_DBG("i: %d, ids[i]: %d, io[i]: %d, jo[i]: %d, jo[io[i]]: %d",
-            i, ids[i], tsp.iorder[i], tsp.jorder[i], tsp.jorder[tsp.iorder[i]]);
-    }
-#endif
-
-    //  get index of start node in ids
-    for (i=0; i < tsp.n; i++) {
-        if (ids[i] == start) istart = i;
-        if (ids[i] == end)   iend = i;
-    }
-    PGR_DBG("istart: %d, iend: %d", istart, iend);
-
-    //  get the idex of start in iorder
-    for (i=0; i < tsp.n; i++) {
-        if (tsp.iorder[i] == istart) jstart = i;
-        if (tsp.iorder[i] == iend)   jend = i;
-    }
-    PGR_DBG("jstart: %d, jend: %d", jstart, jend);
-
-    /*
-     * If the end is specified and the end point and it follow start
-     * then we swap start and end and extract the list backwards
-     * and later we reverse the list for the desired order.
-    */
-    if ((jend > 0 && jend == jstart+1) ||(jend == 0 && jstart == tsp.n-1)) {
-        int tmp = jend;
-        jend = jstart;
-        jstart = tmp;
-        rev = 1;
-        PGR_DBG("reversed start and end: jstart: %d, jend: %d", jstart, jend);
-    }
-
-    //  copy ids to tsp.jorder so we can rewrite ids
-    memcpy(tsp.jorder, ids, (size_t) tsp.n * sizeof(int));
-
-    //  write reordered ids into ids[]
-    //  remember at this point jorder is our list if ids
-    for (i=jstart, j = 0; i < tsp.n; i++, j++)
-        ids[j] = tsp.jorder[tsp.iorder[i]];
-
-    for (i=0; i < jstart; i++, j++)
-        ids[j] = tsp.jorder[tsp.iorder[i]];
-
-    //  if we reversed the order above, now put it correct.
-    if (rev) {
-        int tmp = jend;
-        jend = jstart;
-        jstart = tmp;
-        reverse(tsp.n, ids);
-    }
-
-#ifdef DEBUG
-    PGR_DBG("ids getting returned!");
-    for (i=0; i < tsp.n; i++) {
-        PGR_DBG("i: %d, ids[i]: %d, io[i]: %d, jo[i]: %d",
-            i, ids[i], tsp.iorder[i], tsp.jorder[i]);
-    }
-#endif
-
-    PGR_DBG("tsplib: jstart=%d, jend=%d, n=%d, j=%d", jstart, jend, tsp.n, j);
-
-    return 0;
-}
-
-/* EOF */
diff --git a/src/tsp/test/development/gr9882-tsp.test.sql b/src/tsp/test/development/gr9882-tsp.test.sql
index 5e69d87..701b34f 100644
--- a/src/tsp/test/development/gr9882-tsp.test.sql
+++ b/src/tsp/test/development/gr9882-tsp.test.sql
@@ -1,9903 +1,9903 @@
--- http://www.math.uwaterloo.ca/tsp/world/countries.html#GR
-
--- NAME : gr9882
--- COMMENT : 9882 locations in Greece
--- COMMENT : Derived from National Imagery and Mapping Agency data
--- TYPE : TSP
--- DIMENSION : 9882
--- EDGE_WEIGHT_TYPE : EUC_2D
--- NODE_COORD_SECTION
-
-DROP TABLE IF EXISTS gr9882;
-CREATE TABLE gr9882 (id BIGINT, x FLOAT, y FLOAT, the_geom geometry);
-COPY gr9882 (id, x, y) FROM stdin WITH DELIMITER ' ';
-1 34816.6667 24100.0000
-2 34833.3333 24083.3333
-3 34850.0000 24050.0000
-4 34850.0000 24083.3333
-5 34850.0000 24116.6667
-6 34866.6667 24083.3333
-7 34933.3333 24800.0000
-8 34933.3333 24916.6667
-9 34966.6667 24883.3333
-10 34966.6667 24933.3333
-11 34966.6667 24950.0000
-12 34966.6667 25033.3333
-13 34966.6667 25133.3333
-14 34966.6667 25250.0000
-15 34983.3333 24750.0000
-16 34983.3333 24850.0000
-17 34983.3333 24916.6667
-18 34983.3333 24983.3333
-19 34983.3333 25000.0000
-20 34983.3333 25016.6667
-21 34983.3333 25150.0000
-22 34983.3333 25166.6667
-23 34983.3333 25200.0000
-24 34983.3333 25216.6667
-25 34983.3333 25266.6667
-26 34983.3333 25283.3333
-27 34983.3333 25316.6667
-28 34983.3333 25333.3333
-29 35000.0000 24816.6667
-30 35000.0000 24900.0000
-31 35000.0000 24933.3333
-32 35000.0000 25033.3333
-33 35000.0000 25066.6667
-34 35000.0000 25133.3333
-35 35000.0000 25150.0000
-36 35000.0000 25366.6667
-37 35000.0000 25383.3333
-38 35000.0000 25483.3333
-39 35000.0000 25516.6667
-40 35000.0000 25533.3333
-41 35000.0000 25583.3333
-42 35000.0000 25633.3333
-43 35016.6667 24783.3333
-44 35016.6667 24800.0000
-45 35016.6667 24833.3333
-46 35016.6667 24866.6667
-47 35016.6667 24883.3333
-48 35016.6667 24900.0000
-49 35016.6667 24916.6667
-50 35016.6667 24950.0000
-51 35016.6667 24966.6667
-52 35016.6667 25000.0000
-53 35016.6667 25066.6667
-54 35016.6667 25083.3333
-55 35016.6667 25116.6667
-56 35016.6667 25166.6667
-57 35016.6667 25200.0000
-58 35016.6667 25416.6667
-59 35016.6667 25516.6667
-60 35016.6667 25533.3333
-61 35016.6667 25550.0000
-62 35016.6667 25583.3333
-63 35016.6667 25683.3333
-64 35016.6667 25750.0000
-65 35016.6667 25833.3333
-66 35016.6667 26100.0000
-67 35016.6667 26116.6667
-68 35033.3333 24783.3333
-69 35033.3333 24833.3333
-70 35033.3333 24933.3333
-71 35033.3333 25150.0000
-72 35033.3333 25233.3333
-73 35033.3333 25250.0000
-74 35033.3333 25266.6667
-75 35033.3333 25283.3333
-76 35033.3333 25383.3333
-77 35033.3333 25433.3333
-78 35033.3333 25450.0000
-79 35033.3333 25483.3333
-80 35033.3333 25500.0000
-81 35033.3333 25550.0000
-82 35033.3333 25566.6667
-83 35033.3333 25600.0000
-84 35033.3333 25666.6667
-85 35033.3333 25750.0000
-86 35033.3333 25766.6667
-87 35033.3333 25900.0000
-88 35033.3333 25950.0000
-89 35033.3333 25966.6667
-90 35033.3333 25983.3333
-91 35033.3333 26150.0000
-92 35050.0000 24816.6667
-93 35050.0000 24833.3333
-94 35050.0000 24866.6667
-95 35050.0000 24900.0000
-96 35050.0000 24950.0000
-97 35050.0000 25050.0000
-98 35050.0000 25066.6667
-99 35050.0000 25100.0000
-100 35050.0000 25116.6667
-101 35050.0000 25183.3333
-102 35050.0000 25300.0000
-103 35050.0000 25333.3333
-104 35050.0000 25383.3333
-105 35050.0000 25416.6667
-106 35050.0000 25450.0000
-107 35050.0000 25500.0000
-108 35050.0000 25550.0000
-109 35050.0000 25633.3333
-110 35050.0000 25666.6667
-111 35050.0000 25783.3333
-112 35050.0000 25800.0000
-113 35050.0000 25833.3333
-114 35050.0000 25883.3333
-115 35050.0000 25950.0000
-116 35050.0000 26050.0000
-117 35050.0000 26066.6667
-118 35050.0000 26100.0000
-119 35050.0000 26116.6667
-120 35050.0000 26150.0000
-121 35050.0000 26183.3333
-122 35066.6667 24766.6667
-123 35066.6667 24816.6667
-124 35066.6667 24866.6667
-125 35066.6667 24883.3333
-126 35066.6667 24916.6667
-127 35066.6667 24933.3333
-128 35066.6667 24966.6667
-129 35066.6667 25016.6667
-130 35066.6667 25033.3333
-131 35066.6667 25083.3333
-132 35066.6667 25100.0000
-133 35066.6667 25116.6667
-134 35066.6667 25133.3333
-135 35066.6667 25200.0000
-136 35066.6667 25216.6667
-137 35066.6667 25233.3333
-138 35066.6667 25300.0000
-139 35066.6667 25566.6667
-140 35066.6667 25716.6667
-141 35066.6667 25750.0000
-142 35066.6667 25816.6667
-143 35066.6667 25866.6667
-144 35066.6667 25966.6667
-145 35066.6667 26016.6667
-146 35066.6667 26083.3333
-147 35066.6667 26116.6667
-148 35083.3333 24733.3333
-149 35083.3333 24833.3333
-150 35083.3333 24866.6667
-151 35083.3333 24883.3333
-152 35083.3333 24916.6667
-153 35083.3333 24933.3333
-154 35083.3333 24950.0000
-155 35083.3333 24966.6667
-156 35083.3333 25033.3333
-157 35083.3333 25050.0000
-158 35083.3333 25083.3333
-159 35083.3333 25100.0000
-160 35083.3333 25183.3333
-161 35083.3333 25216.6667
-162 35083.3333 25233.3333
-163 35083.3333 25250.0000
-164 35083.3333 25266.6667
-165 35083.3333 25283.3333
-166 35083.3333 25333.3333
-167 35083.3333 25366.6667
-168 35083.3333 25400.0000
-169 35083.3333 25566.6667
-170 35083.3333 25583.3333
-171 35083.3333 25650.0000
-172 35083.3333 25716.6667
-173 35083.3333 25766.6667
-174 35083.3333 25816.6667
-175 35083.3333 25833.3333
-176 35083.3333 25916.6667
-177 35083.3333 25933.3333
-178 35083.3333 25950.0000
-179 35083.3333 25966.6667
-180 35083.3333 25983.3333
-181 35083.3333 26033.3333
-182 35083.3333 26050.0000
-183 35083.3333 26066.6667
-184 35083.3333 26083.3333
-185 35083.3333 26100.0000
-186 35083.3333 26133.3333
-187 35083.3333 26166.6667
-188 35100.0000 24683.3333
-189 35100.0000 24783.3333
-190 35100.0000 24833.3333
-191 35100.0000 24850.0000
-192 35100.0000 24916.6667
-193 35100.0000 24966.6667
-194 35100.0000 25000.0000
-195 35100.0000 25066.6667
-196 35100.0000 25083.3333
-197 35100.0000 25166.6667
-198 35100.0000 25183.3333
-199 35100.0000 25216.6667
-200 35100.0000 25250.0000
-201 35100.0000 25283.3333
-202 35100.0000 25300.0000
-203 35100.0000 25350.0000
-204 35100.0000 25366.6667
-205 35100.0000 25383.3333
-206 35100.0000 25400.0000
-207 35100.0000 25416.6667
-208 35100.0000 25683.3333
-209 35100.0000 25800.0000
-210 35100.0000 25866.6667
-211 35100.0000 25950.0000
-212 35100.0000 26066.6667
-213 35100.0000 26083.3333
-214 35100.0000 26133.3333
-215 35100.0000 26266.6667
-216 35116.6667 24616.6667
-217 35116.6667 24750.0000
-218 35116.6667 24766.6667
-219 35116.6667 24816.6667
-220 35116.6667 24866.6667
-221 35116.6667 24900.0000
-222 35116.6667 24916.6667
-223 35116.6667 24933.3333
-224 35116.6667 24950.0000
-225 35116.6667 25000.0000
-226 35116.6667 25116.6667
-227 35116.6667 25133.3333
-228 35116.6667 25216.6667
-229 35116.6667 25233.3333
-230 35116.6667 25250.0000
-231 35116.6667 25266.6667
-232 35116.6667 25283.3333
-233 35116.6667 25300.0000
-234 35116.6667 25333.3333
-235 35116.6667 25716.6667
-236 35116.6667 25733.3333
-237 35116.6667 25800.0000
-238 35116.6667 25850.0000
-239 35116.6667 25883.3333
-240 35116.6667 25983.3333
-241 35116.6667 26016.6667
-242 35116.6667 26066.6667
-243 35116.6667 26083.3333
-244 35116.6667 26100.0000
-245 35116.6667 26150.0000
-246 35116.6667 26216.6667
-247 35116.6667 26233.3333
-248 35133.3333 24600.0000
-249 35133.3333 24650.0000
-250 35133.3333 24733.3333
-251 35133.3333 24816.6667
-252 35133.3333 24900.0000
-253 35133.3333 24916.6667
-254 35133.3333 24950.0000
-255 35133.3333 24983.3333
-256 35133.3333 25000.0000
-257 35133.3333 25016.6667
-258 35133.3333 25033.3333
-259 35133.3333 25066.6667
-260 35133.3333 25083.3333
-261 35133.3333 25116.6667
-262 35133.3333 25150.0000
-263 35133.3333 25166.6667
-264 35133.3333 25183.3333
-265 35133.3333 25216.6667
-266 35133.3333 25233.3333
-267 35133.3333 25266.6667
-268 35133.3333 25333.3333
-269 35133.3333 25533.3333
-270 35133.3333 25666.6667
-271 35133.3333 25900.0000
-272 35133.3333 25950.0000
-273 35133.3333 26016.6667
-274 35133.3333 26033.3333
-275 35133.3333 26066.6667
-276 35133.3333 26100.0000
-277 35133.3333 26116.6667
-278 35133.3333 26166.6667
-279 35133.3333 26216.6667
-280 35133.3333 26250.0000
-281 35150.0000 24633.3333
-282 35150.0000 24666.6667
-283 35150.0000 24716.6667
-284 35150.0000 24733.3333
-285 35150.0000 24750.0000
-286 35150.0000 24766.6667
-287 35150.0000 24783.3333
-288 35150.0000 24816.6667
-289 35150.0000 24833.3333
-290 35150.0000 25033.3333
-291 35150.0000 25200.0000
-292 35150.0000 25233.3333
-293 35150.0000 25266.6667
-294 35150.0000 25300.0000
-295 35150.0000 25350.0000
-296 35150.0000 25466.6667
-297 35150.0000 25533.3333
-298 35150.0000 25550.0000
-299 35150.0000 25566.6667
-300 35150.0000 25583.3333
-301 35150.0000 25633.3333
-302 35150.0000 25866.6667
-303 35150.0000 25916.6667
-304 35150.0000 25966.6667
-305 35150.0000 26016.6667
-306 35150.0000 26083.3333
-307 35150.0000 26100.0000
-308 35150.0000 26166.6667
-309 35150.0000 26183.3333
-310 35150.0000 26250.0000
-311 35166.6667 24450.0000
-312 35166.6667 24483.3333
-313 35166.6667 24516.6667
-314 35166.6667 24533.3333
-315 35166.6667 24583.3333
-316 35166.6667 24716.6667
-317 35166.6667 24733.3333
-318 35166.6667 24783.3333
-319 35166.6667 25000.0000
-320 35166.6667 25066.6667
-321 35166.6667 25100.0000
-322 35166.6667 25116.6667
-323 35166.6667 25200.0000
-324 35166.6667 25250.0000
-325 35166.6667 25333.3333
-326 35166.6667 25350.0000
-327 35166.6667 25366.6667
-328 35166.6667 25433.3333
-329 35166.6667 25450.0000
-330 35166.6667 25483.3333
-331 35166.6667 25650.0000
-332 35166.6667 25700.0000
-333 35166.6667 25933.3333
-334 35166.6667 25950.0000
-335 35166.6667 25983.3333
-336 35166.6667 26016.6667
-337 35166.6667 26033.3333
-338 35166.6667 26050.0000
-339 35166.6667 26100.0000
-340 35166.6667 26116.6667
-341 35166.6667 26166.6667
-342 35166.6667 26183.3333
-343 35166.6667 26250.0000
-344 35183.3333 24233.3333
-345 35183.3333 24416.6667
-346 35183.3333 24450.0000
-347 35183.3333 24516.6667
-348 35183.3333 24533.3333
-349 35183.3333 24550.0000
-350 35183.3333 24583.3333
-351 35183.3333 24666.6667
-352 35183.3333 24683.3333
-353 35183.3333 24733.3333
-354 35183.3333 25016.6667
-355 35183.3333 25033.3333
-356 35183.3333 25066.6667
-357 35183.3333 25216.6667
-358 35183.3333 25250.0000
-359 35183.3333 25283.3333
-360 35183.3333 25316.6667
-361 35183.3333 25333.3333
-362 35183.3333 25366.6667
-363 35183.3333 25433.3333
-364 35183.3333 25500.0000
-365 35183.3333 25516.6667
-366 35183.3333 25600.0000
-367 35183.3333 25616.6667
-368 35183.3333 25666.6667
-369 35183.3333 25683.3333
-370 35183.3333 25716.6667
-371 35183.3333 25900.0000
-372 35183.3333 25966.6667
-373 35183.3333 26033.3333
-374 35183.3333 26050.0000
-375 35183.3333 26066.6667
-376 35183.3333 26100.0000
-377 35183.3333 26116.6667
-378 35183.3333 26150.0000
-379 35183.3333 26183.3333
-380 35200.0000 24066.6667
-381 35200.0000 24083.3333
-382 35200.0000 24150.0000
-383 35200.0000 24166.6667
-384 35200.0000 24233.3333
-385 35200.0000 24266.6667
-386 35200.0000 24283.3333
-387 35200.0000 24316.6667
-388 35200.0000 24383.3333
-389 35200.0000 24400.0000
-390 35200.0000 24416.6667
-391 35200.0000 24450.0000
-392 35200.0000 24483.3333
-393 35200.0000 24500.0000
-394 35200.0000 24566.6667
-395 35200.0000 24633.3333
-396 35200.0000 24650.0000
-397 35200.0000 24683.3333
-398 35200.0000 25000.0000
-399 35200.0000 25033.3333
-400 35200.0000 25083.3333
-401 35200.0000 25100.0000
-402 35200.0000 25166.6667
-403 35200.0000 25183.3333
-404 35200.0000 25200.0000
-405 35200.0000 25216.6667
-406 35200.0000 25250.0000
-407 35200.0000 25266.6667
-408 35200.0000 25316.6667
-409 35200.0000 25333.3333
-410 35200.0000 25350.0000
-411 35200.0000 25366.6667
-412 35200.0000 25383.3333
-413 35200.0000 25466.6667
-414 35200.0000 25483.3333
-415 35200.0000 25583.3333
-416 35200.0000 25616.6667
-417 35200.0000 25650.0000
-418 35200.0000 25666.6667
-419 35200.0000 25683.3333
-420 35200.0000 25700.0000
-421 35200.0000 26116.6667
-422 35200.0000 26250.0000
-423 35200.0000 26266.6667
-424 35216.6667 24066.6667
-425 35216.6667 24083.3333
-426 35216.6667 24100.0000
-427 35216.6667 24183.3333
-428 35216.6667 24200.0000
-429 35216.6667 24216.6667
-430 35216.6667 24266.6667
-431 35216.6667 24500.0000
-432 35216.6667 24516.6667
-433 35216.6667 24533.3333
-434 35216.6667 24600.0000
-435 35216.6667 24616.6667
-436 35216.6667 24683.3333
-437 35216.6667 24700.0000
-438 35216.6667 24716.6667
-439 35216.6667 25000.0000
-440 35216.6667 25033.3333
-441 35216.6667 25050.0000
-442 35216.6667 25200.0000
-443 35216.6667 25216.6667
-444 35216.6667 25266.6667
-445 35216.6667 25300.0000
-446 35216.6667 25333.3333
-447 35216.6667 25350.0000
-448 35216.6667 25383.3333
-449 35216.6667 25466.6667
-450 35216.6667 25516.6667
-451 35216.6667 25533.3333
-452 35216.6667 25550.0000
-453 35216.6667 25600.0000
-454 35216.6667 25650.0000
-455 35216.6667 25683.3333
-456 35216.6667 25700.0000
-457 35216.6667 26033.3333
-458 35216.6667 26216.6667
-459 35216.6667 26266.6667
-460 35233.3333 23633.3333
-461 35233.3333 23683.3333
-462 35233.3333 23966.6667
-463 35233.3333 24016.6667
-464 35233.3333 24083.3333
-465 35233.3333 24116.6667
-466 35233.3333 24133.3333
-467 35233.3333 24216.6667
-468 35233.3333 24350.0000
-469 35233.3333 24383.3333
-470 35233.3333 24400.0000
-471 35233.3333 24450.0000
-472 35233.3333 24466.6667
-473 35233.3333 24516.6667
-474 35233.3333 24633.3333
-475 35233.3333 24650.0000
-476 35233.3333 24666.6667
-477 35233.3333 24700.0000
-478 35233.3333 24983.3333
-479 35233.3333 25000.0000
-480 35233.3333 25016.6667
-481 35233.3333 25033.3333
-482 35233.3333 25166.6667
-483 35233.3333 25183.3333
-484 35233.3333 25216.6667
-485 35233.3333 25233.3333
-486 35233.3333 25350.0000
-487 35233.3333 25366.6667
-488 35233.3333 25433.3333
-489 35233.3333 25450.0000
-490 35233.3333 25466.6667
-491 35233.3333 25616.6667
-492 35233.3333 25683.3333
-493 35233.3333 25700.0000
-494 35233.3333 25716.6667
-495 35250.0000 23550.0000
-496 35250.0000 23583.3333
-497 35250.0000 23666.6667
-498 35250.0000 23683.3333
-499 35250.0000 23716.6667
-500 35250.0000 23783.3333
-501 35250.0000 23816.6667
-502 35250.0000 24150.0000
-503 35250.0000 24166.6667
-504 35250.0000 24183.3333
-505 35250.0000 24216.6667
-506 35250.0000 24250.0000
-507 35250.0000 24300.0000
-508 35250.0000 24316.6667
-509 35250.0000 24333.3333
-510 35250.0000 24433.3333
-511 35250.0000 24450.0000
-512 35250.0000 24500.0000
-513 35250.0000 24533.3333
-514 35250.0000 24566.6667
-515 35250.0000 24600.0000
-516 35250.0000 24633.3333
-517 35250.0000 24650.0000
-518 35250.0000 24683.3333
-519 35250.0000 24983.3333
-520 35250.0000 25033.3333
-521 35250.0000 25066.6667
-522 35250.0000 25116.6667
-523 35250.0000 25166.6667
-524 35250.0000 25233.3333
-525 35250.0000 25250.0000
-526 35250.0000 25300.0000
-527 35250.0000 25333.3333
-528 35250.0000 25350.0000
-529 35250.0000 25383.3333
-530 35250.0000 25416.6667
-531 35250.0000 25550.0000
-532 35250.0000 25616.6667
-533 35250.0000 25633.3333
-534 35250.0000 25650.0000
-535 35250.0000 25666.6667
-536 35250.0000 25683.3333
-537 35250.0000 26250.0000
-538 35266.6667 23616.6667
-539 35266.6667 23650.0000
-540 35266.6667 23683.3333
-541 35266.6667 23700.0000
-542 35266.6667 23716.6667
-543 35266.6667 23733.3333
-544 35266.6667 23750.0000
-545 35266.6667 23816.6667
-546 35266.6667 24133.3333
-547 35266.6667 24283.3333
-548 35266.6667 24300.0000
-549 35266.6667 24333.3333
-550 35266.6667 24350.0000
-551 35266.6667 24433.3333
-552 35266.6667 24516.6667
-553 35266.6667 24583.3333
-554 35266.6667 24650.0000
-555 35266.6667 25000.0000
-556 35266.6667 25016.6667
-557 35266.6667 25050.0000
-558 35266.6667 25116.6667
-559 35266.6667 25133.3333
-560 35266.6667 25183.3333
-561 35266.6667 25216.6667
-562 35266.6667 25233.3333
-563 35266.6667 25250.0000
-564 35266.6667 25283.3333
-565 35266.6667 25300.0000
-566 35266.6667 25366.6667
-567 35266.6667 25416.6667
-568 35266.6667 25566.6667
-569 35266.6667 25583.3333
-570 35266.6667 25650.0000
-571 35266.6667 25666.6667
-572 35266.6667 25716.6667
-573 35266.6667 26266.6667
-574 35283.3333 23616.6667
-575 35283.3333 23633.3333
-576 35283.3333 23650.0000
-577 35283.3333 23666.6667
-578 35283.3333 23683.3333
-579 35283.3333 23700.0000
-580 35283.3333 23733.3333
-581 35283.3333 23750.0000
-582 35283.3333 23766.6667
-583 35283.3333 23783.3333
-584 35283.3333 23816.6667
-585 35283.3333 23833.3333
-586 35283.3333 23966.6667
-587 35283.3333 24183.3333
-588 35283.3333 24200.0000
-589 35283.3333 24333.3333
-590 35283.3333 24350.0000
-591 35283.3333 24366.6667
-592 35283.3333 24383.3333
-593 35283.3333 24416.6667
-594 35283.3333 24466.6667
-595 35283.3333 24483.3333
-596 35283.3333 24500.0000
-597 35283.3333 24516.6667
-598 35283.3333 24883.3333
-599 35283.3333 25033.3333
-600 35283.3333 25050.0000
-601 35283.3333 25066.6667
-602 35283.3333 25083.3333
-603 35283.3333 25100.0000
-604 35283.3333 25133.3333
-605 35283.3333 25183.3333
-606 35283.3333 25233.3333
-607 35283.3333 25266.6667
-608 35283.3333 25300.0000
-609 35283.3333 25316.6667
-610 35283.3333 25333.3333
-611 35283.3333 25466.6667
-612 35283.3333 25500.0000
-613 35283.3333 25616.6667
-614 35283.3333 25633.3333
-615 35283.3333 25666.6667
-616 35283.3333 25700.0000
-617 35300.0000 23516.6667
-618 35300.0000 23583.3333
-619 35300.0000 23600.0000
-620 35300.0000 23616.6667
-621 35300.0000 23633.3333
-622 35300.0000 23650.0000
-623 35300.0000 23683.3333
-624 35300.0000 23700.0000
-625 35300.0000 23716.6667
-626 35300.0000 23783.3333
-627 35300.0000 23800.0000
-628 35300.0000 24183.3333
-629 35300.0000 24316.6667
-630 35300.0000 24350.0000
-631 35300.0000 24366.6667
-632 35300.0000 24383.3333
-633 35300.0000 24400.0000
-634 35300.0000 24416.6667
-635 35300.0000 24450.0000
-636 35300.0000 24466.6667
-637 35300.0000 24500.0000
-638 35300.0000 24533.3333
-639 35300.0000 24583.3333
-640 35300.0000 24800.0000
-641 35300.0000 24816.6667
-642 35300.0000 24833.3333
-643 35300.0000 24900.0000
-644 35300.0000 24916.6667
-645 35300.0000 24933.3333
-646 35300.0000 25016.6667
-647 35300.0000 25083.3333
-648 35300.0000 25100.0000
-649 35300.0000 25150.0000
-650 35300.0000 25166.6667
-651 35300.0000 25233.3333
-652 35300.0000 25250.0000
-653 35300.0000 25300.0000
-654 35300.0000 25366.6667
-655 35300.0000 25383.3333
-656 35300.0000 25433.3333
-657 35300.0000 25516.6667
-658 35300.0000 25566.6667
-659 35300.0000 25583.3333
-660 35300.0000 25600.0000
-661 35300.0000 25616.6667
-662 35300.0000 25650.0000
-663 35300.0000 25666.6667
-664 35300.0000 25733.3333
-665 35316.6667 23533.3333
-666 35316.6667 23616.6667
-667 35316.6667 23650.0000
-668 35316.6667 23666.6667
-669 35316.6667 23683.3333
-670 35316.6667 23700.0000
-671 35316.6667 23716.6667
-672 35316.6667 23733.3333
-673 35316.6667 23750.0000
-674 35316.6667 23783.3333
-675 35316.6667 23800.0000
-676 35316.6667 23816.6667
-677 35316.6667 24200.0000
-678 35316.6667 24300.0000
-679 35316.6667 24316.6667
-680 35316.6667 24333.3333
-681 35316.6667 24350.0000
-682 35316.6667 24416.6667
-683 35316.6667 24450.0000
-684 35316.6667 24533.3333
-685 35316.6667 24616.6667
-686 35316.6667 24683.3333
-687 35316.6667 24800.0000
-688 35316.6667 24833.3333
-689 35316.6667 24850.0000
-690 35316.6667 24916.6667
-691 35316.6667 24950.0000
-692 35316.6667 25050.0000
-693 35316.6667 25133.3333
-694 35316.6667 25166.6667
-695 35316.6667 25183.3333
-696 35316.6667 25283.3333
-697 35316.6667 25316.6667
-698 35316.6667 25366.6667
-699 35316.6667 25383.3333
-700 35316.6667 25566.6667
-701 35316.6667 25600.0000
-702 35316.6667 25616.6667
-703 35316.6667 25650.0000
-704 35316.6667 25666.6667
-705 35316.6667 25683.3333
-706 35316.6667 25716.6667
-707 35316.6667 25733.3333
-708 35333.3333 23550.0000
-709 35333.3333 23600.0000
-710 35333.3333 23650.0000
-711 35333.3333 23700.0000
-712 35333.3333 23716.6667
-713 35333.3333 23733.3333
-714 35333.3333 23750.0000
-715 35333.3333 23766.6667
-716 35333.3333 23783.3333
-717 35333.3333 23800.0000
-718 35333.3333 23816.6667
-719 35333.3333 23833.3333
-720 35333.3333 23900.0000
-721 35333.3333 24183.3333
-722 35333.3333 24283.3333
-723 35333.3333 24300.0000
-724 35333.3333 24333.3333
-725 35333.3333 24350.0000
-726 35333.3333 24383.3333
-727 35333.3333 24400.0000
-728 35333.3333 24416.6667
-729 35333.3333 24466.6667
-730 35333.3333 24483.3333
-731 35333.3333 24500.0000
-732 35333.3333 24516.6667
-733 35333.3333 24616.6667
-734 35333.3333 24666.6667
-735 35333.3333 24683.3333
-736 35333.3333 24700.0000
-737 35333.3333 24716.6667
-738 35333.3333 24733.3333
-739 35333.3333 24750.0000
-740 35333.3333 24766.6667
-741 35333.3333 24783.3333
-742 35333.3333 24800.0000
-743 35333.3333 24816.6667
-744 35333.3333 24833.3333
-745 35333.3333 24850.0000
-746 35333.3333 24866.6667
-747 35333.3333 24883.3333
-748 35333.3333 25066.6667
-749 35333.3333 25083.3333
-750 35333.3333 25116.6667
-751 35333.3333 25133.3333
-752 35333.3333 25150.0000
-753 35333.3333 25166.6667
-754 35333.3333 25250.0000
-755 35333.3333 25350.0000
-756 35333.3333 25616.6667
-757 35333.3333 25633.3333
-758 35333.3333 25666.6667
-759 35333.3333 25700.0000
-760 35333.3333 25733.3333
-761 35333.3333 25750.0000
-762 35350.0000 23583.3333
-763 35350.0000 23600.0000
-764 35350.0000 23633.3333
-765 35350.0000 23666.6667
-766 35350.0000 23683.3333
-767 35350.0000 23700.0000
-768 35350.0000 23833.3333
-769 35350.0000 24166.6667
-770 35350.0000 24183.3333
-771 35350.0000 24200.0000
-772 35350.0000 24216.6667
-773 35350.0000 24233.3333
-774 35350.0000 24250.0000
-775 35350.0000 24266.6667
-776 35350.0000 24283.3333
-777 35350.0000 24316.6667
-778 35350.0000 24400.0000
-779 35350.0000 24416.6667
-780 35350.0000 24433.3333
-781 35350.0000 24450.0000
-782 35350.0000 24516.6667
-783 35350.0000 24533.3333
-784 35350.0000 24550.0000
-785 35350.0000 24566.6667
-786 35350.0000 24583.3333
-787 35350.0000 24600.0000
-788 35350.0000 24633.3333
-789 35350.0000 24666.6667
-790 35350.0000 24683.3333
-791 35350.0000 24716.6667
-792 35350.0000 24733.3333
-793 35350.0000 24750.0000
-794 35350.0000 24766.6667
-795 35350.0000 24783.3333
-796 35350.0000 24816.6667
-797 35350.0000 24833.3333
-798 35350.0000 24850.0000
-799 35350.0000 24866.6667
-800 35350.0000 24916.6667
-801 35350.0000 24966.6667
-802 35366.6667 23550.0000
-803 35366.6667 23566.6667
-804 35366.6667 23583.3333
-805 35366.6667 23600.0000
-806 35366.6667 23616.6667
-807 35366.6667 23633.3333
-808 35366.6667 23650.0000
-809 35366.6667 23666.6667
-810 35366.6667 23700.0000
-811 35366.6667 23733.3333
-812 35366.6667 23783.3333
-813 35366.6667 23850.0000
-814 35366.6667 23866.6667
-815 35366.6667 24150.0000
-816 35366.6667 24166.6667
-817 35366.6667 24250.0000
-818 35366.6667 24266.6667
-819 35366.6667 24466.6667
-820 35366.6667 24483.3333
-821 35366.6667 24500.0000
-822 35366.6667 24533.3333
-823 35366.6667 24566.6667
-824 35366.6667 24583.3333
-825 35366.6667 24600.0000
-826 35366.6667 24616.6667
-827 35366.6667 24633.3333
-828 35366.6667 24666.6667
-829 35366.6667 24700.0000
-830 35366.6667 24716.6667
-831 35366.6667 24766.6667
-832 35366.6667 24883.3333
-833 35366.6667 25016.6667
-834 35383.3333 23633.3333
-835 35383.3333 23666.6667
-836 35383.3333 23733.3333
-837 35383.3333 23766.6667
-838 35383.3333 23816.6667
-839 35383.3333 23850.0000
-840 35383.3333 23866.6667
-841 35383.3333 23900.0000
-842 35383.3333 23966.6667
-843 35383.3333 24100.0000
-844 35383.3333 24116.6667
-845 35383.3333 24133.3333
-846 35383.3333 24150.0000
-847 35383.3333 24166.6667
-848 35383.3333 24183.3333
-849 35383.3333 24200.0000
-850 35383.3333 24216.6667
-851 35383.3333 24233.3333
-852 35383.3333 24250.0000
-853 35383.3333 24600.0000
-854 35383.3333 24616.6667
-855 35383.3333 24683.3333
-856 35383.3333 24733.3333
-857 35383.3333 24950.0000
-858 35383.3333 24966.6667
-859 35400.0000 23550.0000
-860 35400.0000 23566.6667
-861 35400.0000 23600.0000
-862 35400.0000 23616.6667
-863 35400.0000 23633.3333
-864 35400.0000 23666.6667
-865 35400.0000 23683.3333
-866 35400.0000 23716.6667
-867 35400.0000 23733.3333
-868 35400.0000 23766.6667
-869 35400.0000 23783.3333
-870 35400.0000 23850.0000
-871 35400.0000 23900.0000
-872 35400.0000 23916.6667
-873 35400.0000 23933.3333
-874 35400.0000 23950.0000
-875 35400.0000 23983.3333
-876 35400.0000 24066.6667
-877 35400.0000 24083.3333
-878 35400.0000 24100.0000
-879 35400.0000 24133.3333
-880 35400.0000 24150.0000
-881 35400.0000 24166.6667
-882 35400.0000 24183.3333
-883 35400.0000 24200.0000
-884 35400.0000 24216.6667
-885 35400.0000 24233.3333
-886 35400.0000 24250.0000
-887 35400.0000 24700.0000
-888 35400.0000 24716.6667
-889 35400.0000 24733.3333
-890 35400.0000 24750.0000
-891 35400.0000 24783.3333
-892 35400.0000 24883.3333
-893 35400.0000 24983.3333
-894 35400.0000 26916.6667
-895 35400.0000 26933.3333
-896 35400.0000 26950.0000
-897 35416.6667 23566.6667
-898 35416.6667 23583.3333
-899 35416.6667 23633.3333
-900 35416.6667 23650.0000
-901 35416.6667 23683.3333
-902 35416.6667 23700.0000
-903 35416.6667 23750.0000
-904 35416.6667 23783.3333
-905 35416.6667 23850.0000
-906 35416.6667 23933.3333
-907 35416.6667 24016.6667
-908 35416.6667 24033.3333
-909 35416.6667 24050.0000
-910 35416.6667 24066.6667
-911 35416.6667 24083.3333
-912 35416.6667 24100.0000
-913 35416.6667 24116.6667
-914 35416.6667 24133.3333
-915 35416.6667 24150.0000
-916 35416.6667 24183.3333
-917 35416.6667 24200.0000
-918 35416.6667 24216.6667
-919 35416.6667 24233.3333
-920 35416.6667 24250.0000
-921 35416.6667 24700.0000
-922 35416.6667 24716.6667
-923 35416.6667 24783.3333
-924 35416.6667 26933.3333
-925 35433.3333 23583.3333
-926 35433.3333 23633.3333
-927 35433.3333 23666.6667
-928 35433.3333 23683.3333
-929 35433.3333 23700.0000
-930 35433.3333 23716.6667
-931 35433.3333 23750.0000
-932 35433.3333 23766.6667
-933 35433.3333 23783.3333
-934 35433.3333 23833.3333
-935 35433.3333 23850.0000
-936 35433.3333 23916.6667
-937 35433.3333 23933.3333
-938 35433.3333 24033.3333
-939 35433.3333 24050.0000
-940 35433.3333 24066.6667
-941 35433.3333 24116.6667
-942 35433.3333 24166.6667
-943 35433.3333 24183.3333
-944 35433.3333 24200.0000
-945 35433.3333 24233.3333
-946 35450.0000 23583.3333
-947 35450.0000 23600.0000
-948 35450.0000 23616.6667
-949 35450.0000 23633.3333
-950 35450.0000 23650.0000
-951 35450.0000 23666.6667
-952 35450.0000 23683.3333
-953 35450.0000 23700.0000
-954 35450.0000 23716.6667
-955 35450.0000 23733.3333
-956 35450.0000 23750.0000
-957 35450.0000 23766.6667
-958 35450.0000 23783.3333
-959 35450.0000 23800.0000
-960 35450.0000 23833.3333
-961 35450.0000 23866.6667
-962 35450.0000 23900.0000
-963 35450.0000 23916.6667
-964 35450.0000 24016.6667
-965 35450.0000 24033.3333
-966 35450.0000 24050.0000
-967 35450.0000 24116.6667
-968 35450.0000 24166.6667
-969 35450.0000 24200.0000
-970 35450.0000 24216.6667
-971 35450.0000 24233.3333
-972 35466.6667 23566.6667
-973 35466.6667 23600.0000
-974 35466.6667 23616.6667
-975 35466.6667 23633.3333
-976 35466.6667 23650.0000
-977 35466.6667 23666.6667
-978 35466.6667 23683.3333
-979 35466.6667 23700.0000
-980 35466.6667 23716.6667
-981 35466.6667 23733.3333
-982 35466.6667 23750.0000
-983 35466.6667 23766.6667
-984 35466.6667 23783.3333
-985 35466.6667 23800.0000
-986 35466.6667 23816.6667
-987 35466.6667 23833.3333
-988 35466.6667 23850.0000
-989 35466.6667 23866.6667
-990 35466.6667 23883.3333
-991 35466.6667 23900.0000
-992 35466.6667 23916.6667
-993 35466.6667 23933.3333
-994 35466.6667 23950.0000
-995 35466.6667 23966.6667
-996 35466.6667 23983.3333
-997 35466.6667 24066.6667
-998 35466.6667 24100.0000
-999 35466.6667 24116.6667
-1000 35466.6667 24133.3333
-1001 35466.6667 24150.0000
-1002 35466.6667 27133.3333
-1003 35483.3333 23583.3333
-1004 35483.3333 23600.0000
-1005 35483.3333 23650.0000
-1006 35483.3333 23666.6667
-1007 35483.3333 23683.3333
-1008 35483.3333 23700.0000
-1009 35483.3333 23716.6667
-1010 35483.3333 23733.3333
-1011 35483.3333 23750.0000
-1012 35483.3333 23766.6667
-1013 35483.3333 23783.3333
-1014 35483.3333 23800.0000
-1015 35483.3333 23816.6667
-1016 35483.3333 23833.3333
-1017 35483.3333 23850.0000
-1018 35483.3333 23866.6667
-1019 35483.3333 23900.0000
-1020 35483.3333 23916.6667
-1021 35483.3333 23950.0000
-1022 35483.3333 23966.6667
-1023 35483.3333 23983.3333
-1024 35483.3333 24000.0000
-1025 35483.3333 24016.6667
-1026 35483.3333 24033.3333
-1027 35483.3333 24066.6667
-1028 35483.3333 27116.6667
-1029 35483.3333 27183.3333
-1030 35500.0000 23600.0000
-1031 35500.0000 23616.6667
-1032 35500.0000 23633.3333
-1033 35500.0000 23650.0000
-1034 35500.0000 23666.6667
-1035 35500.0000 23683.3333
-1036 35500.0000 23700.0000
-1037 35500.0000 23716.6667
-1038 35500.0000 23733.3333
-1039 35500.0000 23750.0000
-1040 35500.0000 23766.6667
-1041 35500.0000 23783.3333
-1042 35500.0000 23800.0000
-1043 35500.0000 23816.6667
-1044 35500.0000 23833.3333
-1045 35500.0000 23850.0000
-1046 35500.0000 23866.6667
-1047 35500.0000 23883.3333
-1048 35500.0000 23900.0000
-1049 35500.0000 23933.3333
-1050 35500.0000 23966.6667
-1051 35500.0000 23983.3333
-1052 35500.0000 24000.0000
-1053 35500.0000 24016.6667
-1054 35500.0000 24033.3333
-1055 35500.0000 27233.3333
-1056 35516.6667 23600.0000
-1057 35516.6667 23616.6667
-1058 35516.6667 23633.3333
-1059 35516.6667 23750.0000
-1060 35516.6667 23783.3333
-1061 35516.6667 23816.6667
-1062 35516.6667 23850.0000
-1063 35516.6667 23866.6667
-1064 35516.6667 23883.3333
-1065 35516.6667 23916.6667
-1066 35516.6667 23933.3333
-1067 35516.6667 23966.6667
-1068 35516.6667 23983.3333
-1069 35516.6667 24000.0000
-1070 35516.6667 24033.3333
-1071 35516.6667 24050.0000
-1072 35516.6667 24083.3333
-1073 35516.6667 24100.0000
-1074 35516.6667 24116.6667
-1075 35516.6667 24133.3333
-1076 35516.6667 24150.0000
-1077 35516.6667 27133.3333
-1078 35533.3333 23733.3333
-1079 35533.3333 23750.0000
-1080 35533.3333 23766.6667
-1081 35533.3333 23783.3333
-1082 35533.3333 23800.0000
-1083 35533.3333 24083.3333
-1084 35533.3333 24100.0000
-1085 35533.3333 24116.6667
-1086 35533.3333 24150.0000
-1087 35533.3333 24183.3333
-1088 35533.3333 27150.0000
-1089 35550.0000 23750.0000
-1090 35550.0000 23766.6667
-1091 35550.0000 23783.3333
-1092 35550.0000 24150.0000
-1093 35550.0000 24166.6667
-1094 35550.0000 27166.6667
-1095 35550.0000 27183.3333
-1096 35566.6667 23600.0000
-1097 35566.6667 23750.0000
-1098 35566.6667 23766.6667
-1099 35566.6667 24100.0000
-1100 35566.6667 24133.3333
-1101 35600.0000 23716.6667
-1102 35616.6667 27116.6667
-1103 35633.3333 27150.0000
-1104 35666.6667 23733.3333
-1105 35683.3333 27150.0000
-1106 35733.3333 27183.3333
-1107 35750.0000 27216.6667
-1108 35766.6667 27183.3333
-1109 35800.0000 27216.6667
-1110 35866.6667 23300.0000
-1111 35883.3333 23283.3333
-1112 35900.0000 27216.6667
-1113 35900.0000 27250.0000
-1114 35950.0000 27766.6667
-1115 35966.6667 27866.6667
-1116 36000.0000 27816.6667
-1117 36016.6667 27933.3333
-1118 36050.0000 27816.6667
-1119 36050.0000 27883.3333
-1120 36066.6667 27933.3333
-1121 36083.3333 27800.0000
-1122 36083.3333 27850.0000
-1123 36083.3333 28083.3333
-1124 36100.0000 27833.3333
-1125 36100.0000 28016.6667
-1126 36116.6667 27750.0000
-1127 36133.3333 29583.3333
-1128 36150.0000 22983.3333
-1129 36150.0000 23016.6667
-1130 36150.0000 23033.3333
-1131 36150.0000 27783.3333
-1132 36150.0000 27850.0000
-1133 36150.0000 27950.0000
-1134 36166.6667 22966.6667
-1135 36166.6667 22983.3333
-1136 36166.6667 23000.0000
-1137 36183.3333 22950.0000
-1138 36183.3333 22966.6667
-1139 36183.3333 22983.3333
-1140 36183.3333 23000.0000
-1141 36183.3333 28133.3333
-1142 36200.0000 22950.0000
-1143 36200.0000 22966.6667
-1144 36200.0000 22983.3333
-1145 36200.0000 23000.0000
-1146 36216.6667 22916.6667
-1147 36216.6667 22950.0000
-1148 36216.6667 22966.6667
-1149 36216.6667 22983.3333
-1150 36216.6667 27600.0000
-1151 36216.6667 27616.6667
-1152 36216.6667 27866.6667
-1153 36233.3333 22950.0000
-1154 36233.3333 22966.6667
-1155 36233.3333 22983.3333
-1156 36233.3333 23000.0000
-1157 36233.3333 23083.3333
-1158 36233.3333 27850.0000
-1159 36250.0000 22933.3333
-1160 36250.0000 22950.0000
-1161 36250.0000 22983.3333
-1162 36250.0000 23000.0000
-1163 36250.0000 27716.6667
-1164 36250.0000 27966.6667
-1165 36250.0000 28016.6667
-1166 36250.0000 28166.6667
-1167 36266.6667 22950.0000
-1168 36266.6667 22966.6667
-1169 36266.6667 22983.3333
-1170 36266.6667 23083.3333
-1171 36266.6667 27900.0000
-1172 36266.6667 27916.6667
-1173 36283.3333 22950.0000
-1174 36283.3333 22966.6667
-1175 36283.3333 27866.6667
-1176 36283.3333 27950.0000
-1177 36300.0000 22966.6667
-1178 36300.0000 22983.3333
-1179 36300.0000 28150.0000
-1180 36316.6667 22933.3333
-1181 36316.6667 22950.0000
-1182 36316.6667 28050.0000
-1183 36333.3333 22950.0000
-1184 36333.3333 22966.6667
-1185 36333.3333 22983.3333
-1186 36333.3333 27950.0000
-1187 36350.0000 22950.0000
-1188 36350.0000 25400.0000
-1189 36350.0000 25450.0000
-1190 36350.0000 25766.6667
-1191 36350.0000 27983.3333
-1192 36366.6667 22950.0000
-1193 36383.3333 25433.3333
-1194 36383.3333 25450.0000
-1195 36383.3333 25466.6667
-1196 36399.1667 27423.6111
-1197 36400.0000 22483.3333
-1198 36400.0000 25450.0000
-1199 36400.0000 25483.3333
-1200 36400.0000 28083.3333
-1201 36400.0000 28116.6667
-1202 36400.0000 28166.6667
-1203 36415.8333 27385.0000
-1204 36416.6667 22483.3333
-1205 36416.6667 25433.3333
-1206 36416.6667 25450.0000
-1207 36416.6667 28183.3333
-1208 36420.8333 27371.3889
-1209 36433.3333 22466.6667
-1210 36433.3333 22483.3333
-1211 36433.3333 25333.3333
-1212 36433.3333 25350.0000
-1213 36433.3333 25416.6667
-1214 36433.3333 25433.3333
-1215 36433.3333 28216.6667
-1216 36449.1667 27348.3333
-1217 36450.0000 22466.6667
-1218 36450.0000 22483.3333
-1219 36450.0000 28250.0000
-1220 36458.6111 27318.6111
-1221 36466.6667 22433.3333
-1222 36466.6667 22450.0000
-1223 36466.6667 22466.6667
-1224 36466.6667 23166.6667
-1225 36466.6667 25366.6667
-1226 36466.6667 25383.3333
-1227 36466.6667 25400.0000
-1228 36483.3333 22366.6667
-1229 36483.3333 22383.3333
-1230 36483.3333 22400.0000
-1231 36483.3333 22416.6667
-1232 36483.3333 22450.0000
-1233 36483.3333 22483.3333
-1234 36483.3333 22500.0000
-1235 36483.3333 22950.0000
-1236 36483.3333 23100.0000
-1237 36483.3333 23150.0000
-1238 36500.0000 22366.6667
-1239 36500.0000 22383.3333
-1240 36500.0000 22400.0000
-1241 36500.0000 22416.6667
-1242 36500.0000 22433.3333
-1243 36500.0000 22466.6667
-1244 36500.0000 22483.3333
-1245 36500.0000 23083.3333
-1246 36516.6667 22366.6667
-1247 36516.6667 22383.3333
-1248 36516.6667 22400.0000
-1249 36516.6667 22416.6667
-1250 36516.6667 22466.6667
-1251 36516.6667 22483.3333
-1252 36516.6667 22983.3333
-1253 36516.6667 23050.0000
-1254 36516.6667 23066.6667
-1255 36516.6667 23083.3333
-1256 36533.3333 22366.6667
-1257 36533.3333 22383.3333
-1258 36533.3333 22400.0000
-1259 36533.3333 22416.6667
-1260 36533.3333 22433.3333
-1261 36533.3333 22450.0000
-1262 36533.3333 22466.6667
-1263 36533.3333 22983.3333
-1264 36533.3333 23083.3333
-1265 36533.3333 23116.6667
-1266 36533.3333 27850.0000
-1267 36550.0000 22400.0000
-1268 36550.0000 22416.6667
-1269 36550.0000 22450.0000
-1270 36550.0000 22983.3333
-1271 36550.0000 23000.0000
-1272 36550.0000 23016.6667
-1273 36550.0000 23033.3333
-1274 36550.0000 23050.0000
-1275 36550.0000 23100.0000
-1276 36550.0000 26350.0000
-1277 36558.6111 27175.5556
-1278 36566.6667 22400.0000
-1279 36566.6667 22416.6667
-1280 36566.6667 22466.6667
-1281 36566.6667 22483.3333
-1282 36566.6667 22966.6667
-1283 36566.6667 22983.3333
-1284 36566.6667 23000.0000
-1285 36566.6667 23016.6667
-1286 36566.6667 23033.3333
-1287 36566.6667 23050.0000
-1288 36574.1667 27177.7778
-1289 36583.3333 22400.0000
-1290 36583.3333 22416.6667
-1291 36583.3333 22466.6667
-1292 36583.3333 23033.3333
-1293 36600.0000 22366.6667
-1294 36600.0000 22383.3333
-1295 36600.0000 22400.0000
-1296 36600.0000 22416.6667
-1297 36600.0000 22966.6667
-1298 36600.0000 23050.0000
-1299 36600.0000 24916.6667
-1300 36600.0000 24933.3333
-1301 36600.0000 27833.3333
-1302 36603.3333 27177.7778
-1303 36611.3889 27133.3333
-1304 36616.6667 22383.3333
-1305 36616.6667 22400.0000
-1306 36616.6667 22466.6667
-1307 36616.6667 22483.3333
-1308 36616.6667 22500.0000
-1309 36616.6667 22916.6667
-1310 36616.6667 22983.3333
-1311 36616.6667 23000.0000
-1312 36616.6667 24950.0000
-1313 36617.7778 27170.8333
-1314 36633.3333 22383.3333
-1315 36633.3333 22400.0000
-1316 36633.3333 22466.6667
-1317 36633.3333 22483.3333
-1318 36633.3333 22500.0000
-1319 36633.3333 22883.3333
-1320 36633.3333 22950.0000
-1321 36633.3333 23000.0000
-1322 36633.3333 23016.6667
-1323 36633.3333 23033.3333
-1324 36633.3333 24900.0000
-1325 36633.3333 24916.6667
-1326 36650.0000 22383.3333
-1327 36650.0000 22400.0000
-1328 36650.0000 22416.6667
-1329 36650.0000 22433.3333
-1330 36650.0000 22466.6667
-1331 36650.0000 22500.0000
-1332 36650.0000 22900.0000
-1333 36650.0000 22966.6667
-1334 36650.0000 23016.6667
-1335 36650.0000 24883.3333
-1336 36662.7778 27119.4444
-1337 36666.6667 22366.6667
-1338 36666.6667 22383.3333
-1339 36666.6667 22433.3333
-1340 36666.6667 22450.0000
-1341 36666.6667 22466.6667
-1342 36666.6667 22483.3333
-1343 36666.6667 22500.0000
-1344 36666.6667 22533.3333
-1345 36666.6667 22550.0000
-1346 36666.6667 22933.3333
-1347 36666.6667 22983.3333
-1348 36666.6667 23016.6667
-1349 36683.3333 22383.3333
-1350 36683.3333 22416.6667
-1351 36683.3333 22433.3333
-1352 36683.3333 22450.0000
-1353 36683.3333 22466.6667
-1354 36683.3333 22483.3333
-1355 36683.3333 22516.6667
-1356 36683.3333 22833.3333
-1357 36683.3333 22916.6667
-1358 36683.3333 22933.3333
-1359 36683.3333 22966.6667
-1360 36683.3333 23033.3333
-1361 36683.3333 23050.0000
-1362 36683.3333 25333.3333
-1363 36700.0000 22383.3333
-1364 36700.0000 22466.6667
-1365 36700.0000 22483.3333
-1366 36700.0000 22533.3333
-1367 36700.0000 22900.0000
-1368 36700.0000 22916.6667
-1369 36700.0000 22933.3333
-1370 36700.0000 22950.0000
-1371 36700.0000 23033.3333
-1372 36700.0000 24483.3333
-1373 36700.0000 24533.3333
-1374 36700.0000 25116.6667
-1375 36716.6667 22350.0000
-1376 36716.6667 22366.6667
-1377 36716.6667 22383.3333
-1378 36716.6667 22400.0000
-1379 36716.6667 22416.6667
-1380 36716.6667 22433.3333
-1381 36716.6667 22466.6667
-1382 36716.6667 22500.0000
-1383 36716.6667 22866.6667
-1384 36716.6667 22950.0000
-1385 36716.6667 22983.3333
-1386 36733.3333 22333.3333
-1387 36733.3333 22350.0000
-1388 36733.3333 22416.6667
-1389 36733.3333 22433.3333
-1390 36733.3333 22450.0000
-1391 36733.3333 22466.6667
-1392 36733.3333 22483.3333
-1393 36733.3333 22500.0000
-1394 36733.3333 22550.0000
-1395 36733.3333 22566.6667
-1396 36733.3333 22866.6667
-1397 36733.3333 22900.0000
-1398 36733.3333 23033.3333
-1399 36733.3333 24433.3333
-1400 36733.3333 25283.3333
-1401 36750.0000 22333.3333
-1402 36750.0000 22450.0000
-1403 36750.0000 22466.6667
-1404 36750.0000 22500.0000
-1405 36750.0000 22516.6667
-1406 36750.0000 22533.3333
-1407 36750.0000 22566.6667
-1408 36750.0000 22800.0000
-1409 36750.0000 22933.3333
-1410 36750.0000 22966.6667
-1411 36750.0000 23000.0000
-1412 36750.0000 23016.6667
-1413 36750.0000 23066.6667
-1414 36750.0000 24416.6667
-1415 36750.0000 24433.3333
-1416 36750.0000 24533.3333
-1417 36766.6667 21900.0000
-1418 36766.6667 22316.6667
-1419 36766.6667 22416.6667
-1420 36766.6667 22433.3333
-1421 36766.6667 22466.6667
-1422 36766.6667 22500.0000
-1423 36766.6667 22933.3333
-1424 36766.6667 23083.3333
-1425 36766.6667 24516.6667
-1426 36766.6667 27083.3333
-1427 36783.3333 21883.3333
-1428 36783.3333 21916.6667
-1429 36783.3333 22333.3333
-1430 36783.3333 22416.6667
-1431 36783.3333 22450.0000
-1432 36783.3333 22466.6667
-1433 36783.3333 22483.3333
-1434 36783.3333 22516.6667
-1435 36783.3333 22533.3333
-1436 36783.3333 22550.0000
-1437 36783.3333 22900.0000
-1438 36783.3333 23050.0000
-1439 36783.3333 23083.3333
-1440 36783.3333 25800.0000
-1441 36783.3333 27150.0000
-1442 36800.0000 21766.6667
-1443 36800.0000 21800.0000
-1444 36800.0000 21833.3333
-1445 36800.0000 21866.6667
-1446 36800.0000 21916.6667
-1447 36800.0000 21950.0000
-1448 36800.0000 22316.6667
-1449 36800.0000 22333.3333
-1450 36800.0000 22416.6667
-1451 36800.0000 22450.0000
-1452 36800.0000 22466.6667
-1453 36800.0000 22483.3333
-1454 36800.0000 22500.0000
-1455 36800.0000 22516.6667
-1456 36800.0000 22533.3333
-1457 36800.0000 22783.3333
-1458 36800.0000 22850.0000
-1459 36800.0000 22916.6667
-1460 36800.0000 23050.0000
-1461 36800.0000 24583.3333
-1462 36800.0000 25783.3333
-1463 36800.0000 25816.6667
-1464 36800.0000 27116.6667
-1465 36816.6667 21700.0000
-1466 36816.6667 21750.0000
-1467 36816.6667 21800.0000
-1468 36816.6667 21833.3333
-1469 36816.6667 21850.0000
-1470 36816.6667 21883.3333
-1471 36816.6667 21900.0000
-1472 36816.6667 21916.6667
-1473 36816.6667 21933.3333
-1474 36816.6667 22283.3333
-1475 36816.6667 22300.0000
-1476 36816.6667 22316.6667
-1477 36816.6667 22416.6667
-1478 36816.6667 22433.3333
-1479 36816.6667 22450.0000
-1480 36816.6667 22550.0000
-1481 36816.6667 23033.3333
-1482 36816.6667 26966.6667
-1483 36833.3333 21766.6667
-1484 36833.3333 21800.0000
-1485 36833.3333 21833.3333
-1486 36833.3333 21866.6667
-1487 36833.3333 21883.3333
-1488 36833.3333 21916.6667
-1489 36833.3333 22300.0000
-1490 36833.3333 22316.6667
-1491 36833.3333 22333.3333
-1492 36833.3333 22350.0000
-1493 36833.3333 22400.0000
-1494 36833.3333 22433.3333
-1495 36833.3333 22483.3333
-1496 36833.3333 22550.0000
-1497 36833.3333 22583.3333
-1498 36833.3333 22616.6667
-1499 36833.3333 22683.3333
-1500 36833.3333 22700.0000
-1501 36833.3333 22733.3333
-1502 36833.3333 22783.3333
-1503 36833.3333 22800.0000
-1504 36833.3333 22850.0000
-1505 36833.3333 23000.0000
-1506 36833.3333 25450.0000
-1507 36833.3333 25866.6667
-1508 36833.3333 25900.0000
-1509 36850.0000 21733.3333
-1510 36850.0000 21750.0000
-1511 36850.0000 21766.6667
-1512 36850.0000 21816.6667
-1513 36850.0000 21833.3333
-1514 36850.0000 21866.6667
-1515 36850.0000 21916.6667
-1516 36850.0000 22266.6667
-1517 36850.0000 22283.3333
-1518 36850.0000 22316.6667
-1519 36850.0000 22350.0000
-1520 36850.0000 22416.6667
-1521 36850.0000 22450.0000
-1522 36850.0000 22466.6667
-1523 36850.0000 22500.0000
-1524 36850.0000 22600.0000
-1525 36850.0000 22666.6667
-1526 36850.0000 22683.3333
-1527 36850.0000 22733.3333
-1528 36850.0000 23000.0000
-1529 36850.0000 27083.3333
-1530 36850.0000 27166.6667
-1531 36850.0000 27216.6667
-1532 36866.6667 21700.0000
-1533 36866.6667 21716.6667
-1534 36866.6667 21750.0000
-1535 36866.6667 21766.6667
-1536 36866.6667 21783.3333
-1537 36866.6667 21816.6667
-1538 36866.6667 21833.3333
-1539 36866.6667 21866.6667
-1540 36866.6667 21900.0000
-1541 36866.6667 22316.6667
-1542 36866.6667 22466.6667
-1543 36866.6667 22500.0000
-1544 36866.6667 22683.3333
-1545 36866.6667 22700.0000
-1546 36866.6667 22900.0000
-1547 36866.6667 23016.6667
-1548 36866.6667 25466.6667
-1549 36866.6667 25516.6667
-1550 36883.3333 21716.6667
-1551 36883.3333 21866.6667
-1552 36883.3333 21900.0000
-1553 36883.3333 22233.3333
-1554 36883.3333 22250.0000
-1555 36883.3333 22283.3333
-1556 36883.3333 22400.0000
-1557 36883.3333 22416.6667
-1558 36883.3333 22483.3333
-1559 36883.3333 22516.6667
-1560 36883.3333 22550.0000
-1561 36883.3333 22566.6667
-1562 36883.3333 22666.6667
-1563 36883.3333 22700.0000
-1564 36883.3333 22800.0000
-1565 36883.3333 22983.3333
-1566 36883.3333 25516.6667
-1567 36883.3333 27150.0000
-1568 36883.3333 27283.3333
-1569 36883.3333 27300.0000
-1570 36900.0000 21750.0000
-1571 36900.0000 21766.6667
-1572 36900.0000 21816.6667
-1573 36900.0000 21850.0000
-1574 36900.0000 21866.6667
-1575 36900.0000 21900.0000
-1576 36900.0000 21916.6667
-1577 36900.0000 22250.0000
-1578 36900.0000 22266.6667
-1579 36900.0000 22450.0000
-1580 36900.0000 22650.0000
-1581 36900.0000 22716.6667
-1582 36900.0000 22850.0000
-1583 36900.0000 22966.6667
-1584 36900.0000 23000.0000
-1585 36900.0000 25566.6667
-1586 36900.0000 25983.3333
-1587 36900.0000 26000.0000
-1588 36916.6667 21700.0000
-1589 36916.6667 21833.3333
-1590 36916.6667 21850.0000
-1591 36916.6667 21866.6667
-1592 36916.6667 21900.0000
-1593 36916.6667 21916.6667
-1594 36916.6667 22150.0000
-1595 36916.6667 22233.3333
-1596 36916.6667 22250.0000
-1597 36916.6667 22266.6667
-1598 36916.6667 22433.3333
-1599 36916.6667 22450.0000
-1600 36916.6667 22750.0000
-1601 36916.6667 23000.0000
-1602 36916.6667 25983.3333
-1603 36933.3333 21833.3333
-1604 36933.3333 21883.3333
-1605 36933.3333 22150.0000
-1606 36933.3333 22166.6667
-1607 36933.3333 22183.3333
-1608 36933.3333 22200.0000
-1609 36933.3333 22466.6667
-1610 36933.3333 22483.3333
-1611 36933.3333 22533.3333
-1612 36933.3333 22816.6667
-1613 36933.3333 24683.3333
-1614 36933.3333 24733.3333
-1615 36933.3333 27150.0000
-1616 36950.0000 21700.0000
-1617 36950.0000 21733.3333
-1618 36950.0000 21750.0000
-1619 36950.0000 21783.3333
-1620 36950.0000 21816.6667
-1621 36950.0000 21850.0000
-1622 36950.0000 21866.6667
-1623 36950.0000 21883.3333
-1624 36950.0000 21933.3333
-1625 36950.0000 22166.6667
-1626 36950.0000 22183.3333
-1627 36950.0000 22216.6667
-1628 36950.0000 22233.3333
-1629 36950.0000 22250.0000
-1630 36950.0000 22416.6667
-1631 36950.0000 22450.0000
-1632 36950.0000 22466.6667
-1633 36950.0000 22766.6667
-1634 36950.0000 24750.0000
-1635 36950.0000 26983.3333
-1636 36966.6667 21700.0000
-1637 36966.6667 21733.3333
-1638 36966.6667 21750.0000
-1639 36966.6667 21816.6667
-1640 36966.6667 21850.0000
-1641 36966.6667 21866.6667
-1642 36966.6667 21900.0000
-1643 36966.6667 22150.0000
-1644 36966.6667 22166.6667
-1645 36966.6667 22200.0000
-1646 36966.6667 22233.3333
-1647 36966.6667 22400.0000
-1648 36966.6667 22416.6667
-1649 36966.6667 22450.0000
-1650 36966.6667 22466.6667
-1651 36966.6667 22650.0000
-1652 36966.6667 22983.3333
-1653 36966.6667 24716.6667
-1654 36966.6667 24733.3333
-1655 36966.6667 24750.0000
-1656 36966.6667 26966.6667
-1657 36966.6667 27016.6667
-1658 36983.3333 21666.6667
-1659 36983.3333 21716.6667
-1660 36983.3333 21766.6667
-1661 36983.3333 21783.3333
-1662 36983.3333 21800.0000
-1663 36983.3333 21833.3333
-1664 36983.3333 21850.0000
-1665 36983.3333 21883.3333
-1666 36983.3333 22150.0000
-1667 36983.3333 22183.3333
-1668 36983.3333 22316.6667
-1669 36983.3333 22400.0000
-1670 36983.3333 22433.3333
-1671 36983.3333 22466.6667
-1672 36983.3333 22500.0000
-1673 36983.3333 22516.6667
-1674 36983.3333 22533.3333
-1675 36983.3333 22566.6667
-1676 36983.3333 22850.0000
-1677 36983.3333 22883.3333
-1678 36983.3333 22983.3333
-1679 36983.3333 24683.3333
-1680 36983.3333 24716.6667
-1681 36983.3333 24733.3333
-1682 36983.3333 25066.6667
-1683 36983.3333 26933.3333
-1684 36983.3333 26950.0000
-1685 36983.3333 27000.0000
-1686 37000.0000 21666.6667
-1687 37000.0000 21683.3333
-1688 37000.0000 21716.6667
-1689 37000.0000 21750.0000
-1690 37000.0000 21850.0000
-1691 37000.0000 21883.3333
-1692 37000.0000 21916.6667
-1693 37000.0000 21933.3333
-1694 37000.0000 22150.0000
-1695 37000.0000 22166.6667
-1696 37000.0000 22183.3333
-1697 37000.0000 22250.0000
-1698 37000.0000 22300.0000
-1699 37000.0000 22383.3333
-1700 37000.0000 22500.0000
-1701 37000.0000 22700.0000
-1702 37000.0000 25166.6667
-1703 37016.6667 21633.3333
-1704 37016.6667 21733.3333
-1705 37016.6667 21750.0000
-1706 37016.6667 21800.0000
-1707 37016.6667 21833.3333
-1708 37016.6667 21883.3333
-1709 37016.6667 21900.0000
-1710 37016.6667 21933.3333
-1711 37016.6667 21950.0000
-1712 37016.6667 21966.6667
-1713 37016.6667 22266.6667
-1714 37016.6667 22416.6667
-1715 37016.6667 22450.0000
-1716 37016.6667 22466.6667
-1717 37016.6667 22483.3333
-1718 37016.6667 22783.3333
-1719 37016.6667 25183.3333
-1720 37016.6667 26983.3333
-1721 37033.3333 21783.3333
-1722 37033.3333 21800.0000
-1723 37033.3333 21866.6667
-1724 37033.3333 21883.3333
-1725 37033.3333 21916.6667
-1726 37033.3333 21933.3333
-1727 37033.3333 21966.6667
-1728 37033.3333 22083.3333
-1729 37033.3333 22116.6667
-1730 37033.3333 22133.3333
-1731 37033.3333 22183.3333
-1732 37033.3333 22216.6667
-1733 37033.3333 22233.3333
-1734 37033.3333 22366.6667
-1735 37033.3333 22416.6667
-1736 37033.3333 22433.3333
-1737 37033.3333 22450.0000
-1738 37033.3333 22466.6667
-1739 37033.3333 22483.3333
-1740 37033.3333 22516.6667
-1741 37033.3333 22566.6667
-1742 37033.3333 22616.6667
-1743 37033.3333 22833.3333
-1744 37033.3333 22983.3333
-1745 37033.3333 25083.3333
-1746 37033.3333 25433.3333
-1747 37033.3333 26966.6667
-1748 37050.0000 21600.0000
-1749 37050.0000 21666.6667
-1750 37050.0000 21700.0000
-1751 37050.0000 21716.6667
-1752 37050.0000 21766.6667
-1753 37050.0000 21800.0000
-1754 37050.0000 21816.6667
-1755 37050.0000 21850.0000
-1756 37050.0000 21883.3333
-1757 37050.0000 21933.3333
-1758 37050.0000 21950.0000
-1759 37050.0000 22016.6667
-1760 37050.0000 22083.3333
-1761 37050.0000 22100.0000
-1762 37050.0000 22166.6667
-1763 37050.0000 22183.3333
-1764 37050.0000 22366.6667
-1765 37050.0000 22400.0000
-1766 37050.0000 22416.6667
-1767 37050.0000 22433.3333
-1768 37050.0000 22450.0000
-1769 37050.0000 22783.3333
-1770 37050.0000 22900.0000
-1771 37050.0000 25133.3333
-1772 37050.0000 25200.0000
-1773 37050.0000 25233.3333
-1774 37050.0000 25250.0000
-1775 37050.0000 25400.0000
-1776 37050.0000 25483.3333
-1777 37050.0000 25500.0000
-1778 37050.0000 25533.3333
-1779 37050.0000 26933.3333
-1780 37066.6667 21583.3333
-1781 37066.6667 21600.0000
-1782 37066.6667 21633.3333
-1783 37066.6667 21700.0000
-1784 37066.6667 21750.0000
-1785 37066.6667 21783.3333
-1786 37066.6667 21816.6667
-1787 37066.6667 21883.3333
-1788 37066.6667 21933.3333
-1789 37066.6667 21966.6667
-1790 37066.6667 21983.3333
-1791 37066.6667 22000.0000
-1792 37066.6667 22066.6667
-1793 37066.6667 22083.3333
-1794 37066.6667 22100.0000
-1795 37066.6667 22166.6667
-1796 37066.6667 22216.6667
-1797 37066.6667 22350.0000
-1798 37066.6667 22366.6667
-1799 37066.6667 22383.3333
-1800 37066.6667 22416.6667
-1801 37066.6667 22433.3333
-1802 37066.6667 22450.0000
-1803 37066.6667 22583.3333
-1804 37066.6667 22783.3333
-1805 37066.6667 22800.0000
-1806 37066.6667 22816.6667
-1807 37066.6667 22850.0000
-1808 37066.6667 22916.6667
-1809 37066.6667 22933.3333
-1810 37066.6667 25116.6667
-1811 37066.6667 25133.3333
-1812 37066.6667 25400.0000
-1813 37066.6667 25433.3333
-1814 37066.6667 25450.0000
-1815 37066.6667 25466.6667
-1816 37066.6667 25483.3333
-1817 37066.6667 25500.0000
-1818 37066.6667 25516.6667
-1819 37083.3333 21666.6667
-1820 37083.3333 21766.6667
-1821 37083.3333 21783.3333
-1822 37083.3333 21800.0000
-1823 37083.3333 21833.3333
-1824 37083.3333 21866.6667
-1825 37083.3333 21900.0000
-1826 37083.3333 21916.6667
-1827 37083.3333 21933.3333
-1828 37083.3333 21950.0000
-1829 37083.3333 21966.6667
-1830 37083.3333 21983.3333
-1831 37083.3333 22000.0000
-1832 37083.3333 22033.3333
-1833 37083.3333 22050.0000
-1834 37083.3333 22100.0000
-1835 37083.3333 22216.6667
-1836 37083.3333 22350.0000
-1837 37083.3333 22366.6667
-1838 37083.3333 22416.6667
-1839 37083.3333 22433.3333
-1840 37083.3333 22566.6667
-1841 37083.3333 22650.0000
-1842 37083.3333 22800.0000
-1843 37083.3333 22833.3333
-1844 37083.3333 22900.0000
-1845 37083.3333 25150.0000
-1846 37083.3333 25166.6667
-1847 37083.3333 25200.0000
-1848 37083.3333 25216.6667
-1849 37083.3333 25416.6667
-1850 37083.3333 25500.0000
-1851 37083.3333 25533.3333
-1852 37083.3333 25583.3333
-1853 37100.0000 21633.3333
-1854 37100.0000 21716.6667
-1855 37100.0000 21750.0000
-1856 37100.0000 21766.6667
-1857 37100.0000 21816.6667
-1858 37100.0000 21833.3333
-1859 37100.0000 21850.0000
-1860 37100.0000 21966.6667
-1861 37100.0000 21983.3333
-1862 37100.0000 22000.0000
-1863 37100.0000 22033.3333
-1864 37100.0000 22050.0000
-1865 37100.0000 22066.6667
-1866 37100.0000 22233.3333
-1867 37100.0000 22250.0000
-1868 37100.0000 22366.6667
-1869 37100.0000 22433.3333
-1870 37100.0000 22450.0000
-1871 37100.0000 22533.3333
-1872 37100.0000 22733.3333
-1873 37100.0000 22800.0000
-1874 37100.0000 22866.6667
-1875 37100.0000 22883.3333
-1876 37100.0000 25383.3333
-1877 37100.0000 25400.0000
-1878 37100.0000 25433.3333
-1879 37100.0000 25483.3333
-1880 37100.0000 26866.6667
-1881 37116.6667 21583.3333
-1882 37116.6667 21733.3333
-1883 37116.6667 21766.6667
-1884 37116.6667 21800.0000
-1885 37116.6667 21833.3333
-1886 37116.6667 21933.3333
-1887 37116.6667 21966.6667
-1888 37116.6667 22033.3333
-1889 37116.6667 22066.6667
-1890 37116.6667 22250.0000
-1891 37116.6667 22333.3333
-1892 37116.6667 22350.0000
-1893 37116.6667 22383.3333
-1894 37116.6667 22866.6667
-1895 37116.6667 25233.3333
-1896 37116.6667 25416.6667
-1897 37116.6667 25433.3333
-1898 37116.6667 25516.6667
-1899 37116.6667 25533.3333
-1900 37116.6667 25816.6667
-1901 37116.6667 26866.6667
-1902 37133.3333 21683.3333
-1903 37133.3333 21750.0000
-1904 37133.3333 21766.6667
-1905 37133.3333 21816.6667
-1906 37133.3333 21866.6667
-1907 37133.3333 21883.3333
-1908 37133.3333 21916.6667
-1909 37133.3333 21966.6667
-1910 37133.3333 21983.3333
-1911 37133.3333 22000.0000
-1912 37133.3333 22016.6667
-1913 37133.3333 22033.3333
-1914 37133.3333 22066.6667
-1915 37133.3333 22333.3333
-1916 37133.3333 22450.0000
-1917 37133.3333 22583.3333
-1918 37133.3333 24450.0000
-1919 37133.3333 24466.6667
-1920 37133.3333 24500.0000
-1921 37133.3333 24516.6667
-1922 37133.3333 26850.0000
-1923 37150.0000 21583.3333
-1924 37150.0000 21766.6667
-1925 37150.0000 21783.3333
-1926 37150.0000 21800.0000
-1927 37150.0000 21833.3333
-1928 37150.0000 21850.0000
-1929 37150.0000 21883.3333
-1930 37150.0000 21966.6667
-1931 37150.0000 22033.3333
-1932 37150.0000 22050.0000
-1933 37150.0000 22083.3333
-1934 37150.0000 22233.3333
-1935 37150.0000 22433.3333
-1936 37150.0000 22900.0000
-1937 37150.0000 24433.3333
-1938 37150.0000 24450.0000
-1939 37150.0000 24500.0000
-1940 37150.0000 24516.6667
-1941 37150.0000 25466.6667
-1942 37150.0000 25533.3333
-1943 37150.0000 25550.0000
-1944 37150.0000 26866.6667
-1945 37166.6667 21616.6667
-1946 37166.6667 21666.6667
-1947 37166.6667 21700.0000
-1948 37166.6667 21716.6667
-1949 37166.6667 21750.0000
-1950 37166.6667 21783.3333
-1951 37166.6667 21833.3333
-1952 37166.6667 21883.3333
-1953 37166.6667 21916.6667
-1954 37166.6667 21983.3333
-1955 37166.6667 22033.3333
-1956 37166.6667 22066.6667
-1957 37166.6667 22083.3333
-1958 37166.6667 22133.3333
-1959 37166.6667 22316.6667
-1960 37166.6667 22416.6667
-1961 37166.6667 22450.0000
-1962 37166.6667 22500.0000
-1963 37166.6667 22666.6667
-1964 37166.6667 22716.6667
-1965 37166.6667 22866.6667
-1966 37166.6667 22900.0000
-1967 37166.6667 24433.3333
-1968 37166.6667 24450.0000
-1969 37166.6667 24483.3333
-1970 37166.6667 26800.0000
-1971 37166.6667 26833.3333
-1972 37183.3333 21600.0000
-1973 37183.3333 21616.6667
-1974 37183.3333 21683.3333
-1975 37183.3333 21750.0000
-1976 37183.3333 21766.6667
-1977 37183.3333 21816.6667
-1978 37183.3333 21850.0000
-1979 37183.3333 21933.3333
-1980 37183.3333 22050.0000
-1981 37183.3333 22183.3333
-1982 37183.3333 22200.0000
-1983 37183.3333 22233.3333
-1984 37183.3333 22300.0000
-1985 37183.3333 22316.6667
-1986 37183.3333 22550.0000
-1987 37183.3333 22600.0000
-1988 37183.3333 22683.3333
-1989 37183.3333 22900.0000
-1990 37183.3333 24483.3333
-1991 37183.3333 24516.6667
-1992 37183.3333 25550.0000
-1993 37200.0000 21616.6667
-1994 37200.0000 21783.3333
-1995 37200.0000 21800.0000
-1996 37200.0000 21883.3333
-1997 37200.0000 21933.3333
-1998 37200.0000 21966.6667
-1999 37200.0000 22000.0000
-2000 37200.0000 22016.6667
-2001 37200.0000 22050.0000
-2002 37200.0000 22083.3333
-2003 37200.0000 22166.6667
-2004 37200.0000 22266.6667
-2005 37200.0000 22283.3333
-2006 37200.0000 22316.6667
-2007 37200.0000 22350.0000
-2008 37200.0000 22366.6667
-2009 37200.0000 22400.0000
-2010 37200.0000 22783.3333
-2011 37200.0000 22883.3333
-2012 37200.0000 24500.0000
-2013 37216.6667 21600.0000
-2014 37216.6667 21633.3333
-2015 37216.6667 21650.0000
-2016 37216.6667 21666.6667
-2017 37216.6667 21683.3333
-2018 37216.6667 21716.6667
-2019 37216.6667 21733.3333
-2020 37216.6667 21750.0000
-2021 37216.6667 21850.0000
-2022 37216.6667 21950.0000
-2023 37216.6667 21966.6667
-2024 37216.6667 22033.3333
-2025 37216.6667 22283.3333
-2026 37216.6667 22300.0000
-2027 37216.6667 22883.3333
-2028 37233.3333 21650.0000
-2029 37233.3333 21666.6667
-2030 37233.3333 21800.0000
-2031 37233.3333 21816.6667
-2032 37233.3333 21850.0000
-2033 37233.3333 21866.6667
-2034 37233.3333 21900.0000
-2035 37233.3333 21933.3333
-2036 37233.3333 21966.6667
-2037 37233.3333 21983.3333
-2038 37233.3333 22016.6667
-2039 37233.3333 22033.3333
-2040 37233.3333 22133.3333
-2041 37233.3333 22166.6667
-2042 37233.3333 22183.3333
-2043 37233.3333 22200.0000
-2044 37233.3333 22250.0000
-2045 37233.3333 22266.6667
-2046 37233.3333 22283.3333
-2047 37233.3333 22500.0000
-2048 37233.3333 22533.3333
-2049 37233.3333 22850.0000
-2050 37250.0000 21666.6667
-2051 37250.0000 21683.3333
-2052 37250.0000 21700.0000
-2053 37250.0000 21716.6667
-2054 37250.0000 21733.3333
-2055 37250.0000 21783.3333
-2056 37250.0000 21816.6667
-2057 37250.0000 21833.3333
-2058 37250.0000 21966.6667
-2059 37250.0000 21983.3333
-2060 37250.0000 22000.0000
-2061 37250.0000 22016.6667
-2062 37250.0000 22116.6667
-2063 37250.0000 22183.3333
-2064 37250.0000 22333.3333
-2065 37250.0000 22550.0000
-2066 37250.0000 22833.3333
-2067 37250.0000 22866.6667
-2068 37250.0000 23150.0000
-2069 37266.6667 21750.0000
-2070 37266.6667 21766.6667
-2071 37266.6667 21866.6667
-2072 37266.6667 21900.0000
-2073 37266.6667 21933.3333
-2074 37266.6667 21950.0000
-2075 37266.6667 21966.6667
-2076 37266.6667 21983.3333
-2077 37266.6667 22000.0000
-2078 37266.6667 22016.6667
-2079 37266.6667 22166.6667
-2080 37266.6667 22250.0000
-2081 37266.6667 22316.6667
-2082 37266.6667 22533.3333
-2083 37266.6667 22650.0000
-2084 37266.6667 22683.3333
-2085 37266.6667 23150.0000
-2086 37283.3333 21700.0000
-2087 37283.3333 21716.6667
-2088 37283.3333 21816.6667
-2089 37283.3333 21850.0000
-2090 37283.3333 21900.0000
-2091 37283.3333 21916.6667
-2092 37283.3333 21933.3333
-2093 37283.3333 21966.6667
-2094 37283.3333 22050.0000
-2095 37283.3333 22066.6667
-2096 37283.3333 22150.0000
-2097 37283.3333 22166.6667
-2098 37283.3333 22200.0000
-2099 37283.3333 22350.0000
-2100 37283.3333 22366.6667
-2101 37283.3333 22650.0000
-2102 37283.3333 26766.6667
-2103 37300.0000 21716.6667
-2104 37300.0000 21750.0000
-2105 37300.0000 21766.6667
-2106 37300.0000 21783.3333
-2107 37300.0000 21816.6667
-2108 37300.0000 21833.3333
-2109 37300.0000 21850.0000
-2110 37300.0000 21883.3333
-2111 37300.0000 21916.6667
-2112 37300.0000 21950.0000
-2113 37300.0000 21966.6667
-2114 37300.0000 21983.3333
-2115 37300.0000 22000.0000
-2116 37300.0000 22050.0000
-2117 37300.0000 22116.6667
-2118 37300.0000 22150.0000
-2119 37300.0000 22250.0000
-2120 37300.0000 22500.0000
-2121 37300.0000 22766.6667
-2122 37300.0000 23183.3333
-2123 37300.0000 26516.6667
-2124 37316.6667 21733.3333
-2125 37316.6667 21816.6667
-2126 37316.6667 21833.3333
-2127 37316.6667 21850.0000
-2128 37316.6667 21866.6667
-2129 37316.6667 21883.3333
-2130 37316.6667 21916.6667
-2131 37316.6667 21933.3333
-2132 37316.6667 21950.0000
-2133 37316.6667 22000.0000
-2134 37316.6667 22066.6667
-2135 37316.6667 22083.3333
-2136 37316.6667 22133.3333
-2137 37316.6667 22150.0000
-2138 37316.6667 22183.3333
-2139 37316.6667 22233.3333
-2140 37316.6667 22283.3333
-2141 37316.6667 22316.6667
-2142 37316.6667 22650.0000
-2143 37316.6667 23150.0000
-2144 37316.6667 23166.6667
-2145 37316.6667 23416.6667
-2146 37316.6667 26533.3333
-2147 37333.3333 21766.6667
-2148 37333.3333 21833.3333
-2149 37333.3333 21866.6667
-2150 37333.3333 21883.3333
-2151 37333.3333 21900.0000
-2152 37333.3333 21933.3333
-2153 37333.3333 21950.0000
-2154 37333.3333 21966.6667
-2155 37333.3333 22033.3333
-2156 37333.3333 22116.6667
-2157 37333.3333 22133.3333
-2158 37333.3333 22200.0000
-2159 37333.3333 22233.3333
-2160 37333.3333 22300.0000
-2161 37333.3333 22316.6667
-2162 37333.3333 22500.0000
-2163 37333.3333 22550.0000
-2164 37333.3333 22683.3333
-2165 37333.3333 22700.0000
-2166 37333.3333 22750.0000
-2167 37333.3333 23150.0000
-2168 37333.3333 23500.0000
-2169 37350.0000 21700.0000
-2170 37350.0000 21733.3333
-2171 37350.0000 21750.0000
-2172 37350.0000 21850.0000
-2173 37350.0000 21866.6667
-2174 37350.0000 21916.6667
-2175 37350.0000 21933.3333
-2176 37350.0000 21950.0000
-2177 37350.0000 21966.6667
-2178 37350.0000 22066.6667
-2179 37350.0000 22150.0000
-2180 37350.0000 22183.3333
-2181 37350.0000 22400.0000
-2182 37350.0000 22433.3333
-2183 37350.0000 22550.0000
-2184 37350.0000 22583.3333
-2185 37350.0000 22600.0000
-2186 37350.0000 22666.6667
-2187 37350.0000 22733.3333
-2188 37350.0000 22766.6667
-2189 37350.0000 23316.6667
-2190 37350.0000 23350.0000
-2191 37350.0000 23450.0000
-2192 37350.0000 23466.6667
-2193 37350.0000 26566.6667
-2194 37366.6667 21700.0000
-2195 37366.6667 21750.0000
-2196 37366.6667 21816.6667
-2197 37366.6667 21900.0000
-2198 37366.6667 21983.3333
-2199 37366.6667 22016.6667
-2200 37366.6667 22050.0000
-2201 37366.6667 22100.0000
-2202 37366.6667 22133.3333
-2203 37366.6667 22150.0000
-2204 37366.6667 22216.6667
-2205 37366.6667 22266.6667
-2206 37366.6667 22283.3333
-2207 37366.6667 22300.0000
-2208 37366.6667 22333.3333
-2209 37366.6667 22383.3333
-2210 37366.6667 22400.0000
-2211 37366.6667 22466.6667
-2212 37366.6667 22500.0000
-2213 37366.6667 22533.3333
-2214 37366.6667 22550.0000
-2215 37366.6667 22633.3333
-2216 37366.6667 22716.6667
-2217 37366.6667 22750.0000
-2218 37366.6667 23216.6667
-2219 37366.6667 24883.3333
-2220 37383.3333 21750.0000
-2221 37383.3333 21766.6667
-2222 37383.3333 21816.6667
-2223 37383.3333 21833.3333
-2224 37383.3333 21850.0000
-2225 37383.3333 21883.3333
-2226 37383.3333 21916.6667
-2227 37383.3333 22033.3333
-2228 37383.3333 22083.3333
-2229 37383.3333 22116.6667
-2230 37383.3333 22133.3333
-2231 37383.3333 22166.6667
-2232 37383.3333 22200.0000
-2233 37383.3333 22233.3333
-2234 37383.3333 22300.0000
-2235 37383.3333 22450.0000
-2236 37383.3333 22500.0000
-2237 37383.3333 22566.6667
-2238 37383.3333 22650.0000
-2239 37383.3333 22683.3333
-2240 37383.3333 22733.3333
-2241 37383.3333 23150.0000
-2242 37383.3333 23250.0000
-2243 37383.3333 24400.0000
-2244 37383.3333 24433.3333
-2245 37383.3333 24883.3333
-2246 37383.3333 24900.0000
-2247 37383.3333 24916.6667
-2248 37400.0000 21683.3333
-2249 37400.0000 21716.6667
-2250 37400.0000 21733.3333
-2251 37400.0000 21816.6667
-2252 37400.0000 21850.0000
-2253 37400.0000 21883.3333
-2254 37400.0000 21916.6667
-2255 37400.0000 21933.3333
-2256 37400.0000 22016.6667
-2257 37400.0000 22100.0000
-2258 37400.0000 22133.3333
-2259 37400.0000 22183.3333
-2260 37400.0000 22216.6667
-2261 37400.0000 22250.0000
-2262 37400.0000 22316.6667
-2263 37400.0000 22600.0000
-2264 37400.0000 22616.6667
-2265 37400.0000 22650.0000
-2266 37400.0000 22716.6667
-2267 37400.0000 22733.3333
-2268 37400.0000 23233.3333
-2269 37400.0000 24400.0000
-2270 37400.0000 24450.0000
-2271 37400.0000 24883.3333
-2272 37400.0000 24900.0000
-2273 37400.0000 24916.6667
-2274 37400.0000 24933.3333
-2275 37400.0000 24950.0000
-2276 37400.0000 25266.6667
-2277 37416.6667 21666.6667
-2278 37416.6667 21700.0000
-2279 37416.6667 21850.0000
-2280 37416.6667 21866.6667
-2281 37416.6667 21950.0000
-2282 37416.6667 21966.6667
-2283 37416.6667 22000.0000
-2284 37416.6667 22033.3333
-2285 37416.6667 22050.0000
-2286 37416.6667 22083.3333
-2287 37416.6667 22100.0000
-2288 37416.6667 22116.6667
-2289 37416.6667 22166.6667
-2290 37416.6667 22233.3333
-2291 37416.6667 22266.6667
-2292 37416.6667 22366.6667
-2293 37416.6667 22400.0000
-2294 37416.6667 22466.6667
-2295 37416.6667 22566.6667
-2296 37416.6667 22583.3333
-2297 37416.6667 22600.0000
-2298 37416.6667 22766.6667
-2299 37416.6667 23133.3333
-2300 37416.6667 23150.0000
-2301 37416.6667 23316.6667
-2302 37416.6667 23350.0000
-2303 37416.6667 23383.3333
-2304 37416.6667 23400.0000
-2305 37416.6667 23466.6667
-2306 37416.6667 24433.3333
-2307 37416.6667 24883.3333
-2308 37416.6667 24900.0000
-2309 37416.6667 24916.6667
-2310 37416.6667 24933.3333
-2311 37416.6667 24950.0000
-2312 37416.6667 24966.6667
-2313 37433.3333 21666.6667
-2314 37433.3333 21716.6667
-2315 37433.3333 21733.3333
-2316 37433.3333 21766.6667
-2317 37433.3333 21833.3333
-2318 37433.3333 21950.0000
-2319 37433.3333 22000.0000
-2320 37433.3333 22050.0000
-2321 37433.3333 22116.6667
-2322 37433.3333 22300.0000
-2323 37433.3333 22416.6667
-2324 37433.3333 22533.3333
-2325 37433.3333 22616.6667
-2326 37433.3333 22633.3333
-2327 37433.3333 22650.0000
-2328 37433.3333 22683.3333
-2329 37433.3333 22733.3333
-2330 37433.3333 23183.3333
-2331 37433.3333 23300.0000
-2332 37433.3333 23400.0000
-2333 37433.3333 23466.6667
-2334 37433.3333 24900.0000
-2335 37433.3333 24916.6667
-2336 37433.3333 24950.0000
-2337 37450.0000 21683.3333
-2338 37450.0000 21733.3333
-2339 37450.0000 21750.0000
-2340 37450.0000 21866.6667
-2341 37450.0000 21916.6667
-2342 37450.0000 21950.0000
-2343 37450.0000 22033.3333
-2344 37450.0000 22066.6667
-2345 37450.0000 22100.0000
-2346 37450.0000 22116.6667
-2347 37450.0000 22150.0000
-2348 37450.0000 22166.6667
-2349 37450.0000 22250.0000
-2350 37450.0000 22366.6667
-2351 37450.0000 22400.0000
-2352 37450.0000 22416.6667
-2353 37450.0000 22433.3333
-2354 37450.0000 22450.0000
-2355 37450.0000 22466.6667
-2356 37450.0000 22566.6667
-2357 37450.0000 22583.3333
-2358 37450.0000 22616.6667
-2359 37450.0000 23233.3333
-2360 37450.0000 23266.6667
-2361 37450.0000 23283.3333
-2362 37450.0000 23483.3333
-2363 37450.0000 24416.6667
-2364 37450.0000 24900.0000
-2365 37450.0000 24933.3333
-2366 37450.0000 25333.3333
-2367 37450.0000 25400.0000
-2368 37466.6667 21650.0000
-2369 37466.6667 21700.0000
-2370 37466.6667 21800.0000
-2371 37466.6667 21966.6667
-2372 37466.6667 22000.0000
-2373 37466.6667 22083.3333
-2374 37466.6667 22116.6667
-2375 37466.6667 22166.6667
-2376 37466.6667 22200.0000
-2377 37466.6667 22333.3333
-2378 37466.6667 22366.6667
-2379 37466.6667 22383.3333
-2380 37466.6667 22400.0000
-2381 37466.6667 22416.6667
-2382 37466.6667 22433.3333
-2383 37466.6667 22450.0000
-2384 37466.6667 22516.6667
-2385 37466.6667 22616.6667
-2386 37466.6667 23166.6667
-2387 37466.6667 24916.6667
-2388 37466.6667 24933.3333
-2389 37483.3333 21650.0000
-2390 37483.3333 21683.3333
-2391 37483.3333 21716.6667
-2392 37483.3333 21733.3333
-2393 37483.3333 21816.6667
-2394 37483.3333 21833.3333
-2395 37483.3333 21900.0000
-2396 37483.3333 21933.3333
-2397 37483.3333 22016.6667
-2398 37483.3333 22033.3333
-2399 37483.3333 22083.3333
-2400 37483.3333 22116.6667
-2401 37483.3333 22133.3333
-2402 37483.3333 22150.0000
-2403 37483.3333 22283.3333
-2404 37483.3333 22366.6667
-2405 37483.3333 22416.6667
-2406 37483.3333 22433.3333
-2407 37483.3333 22466.6667
-2408 37483.3333 22733.3333
-2409 37483.3333 23000.0000
-2410 37483.3333 23016.6667
-2411 37483.3333 23266.6667
-2412 37483.3333 24916.6667
-2413 37483.3333 24933.3333
-2414 37500.0000 21650.0000
-2415 37500.0000 21700.0000
-2416 37500.0000 21766.6667
-2417 37500.0000 21800.0000
-2418 37500.0000 21850.0000
-2419 37500.0000 21866.6667
-2420 37500.0000 21916.6667
-2421 37500.0000 22100.0000
-2422 37500.0000 22116.6667
-2423 37500.0000 22166.6667
-2424 37500.0000 22450.0000
-2425 37500.0000 22466.6667
-2426 37500.0000 22483.3333
-2427 37500.0000 23016.6667
-2428 37500.0000 23033.3333
-2429 37500.0000 23050.0000
-2430 37500.0000 23066.6667
-2431 37500.0000 23183.3333
-2432 37500.0000 23366.6667
-2433 37500.0000 23383.3333
-2434 37500.0000 23450.0000
-2435 37516.6667 21600.0000
-2436 37516.6667 21650.0000
-2437 37516.6667 21733.3333
-2438 37516.6667 21750.0000
-2439 37516.6667 21766.6667
-2440 37516.6667 21883.3333
-2441 37516.6667 21950.0000
-2442 37516.6667 22066.6667
-2443 37516.6667 22116.6667
-2444 37516.6667 22233.3333
-2445 37516.6667 22300.0000
-2446 37516.6667 22316.6667
-2447 37516.6667 22366.6667
-2448 37516.6667 22383.3333
-2449 37516.6667 22416.6667
-2450 37516.6667 22433.3333
-2451 37516.6667 22450.0000
-2452 37516.6667 22583.3333
-2453 37516.6667 22700.0000
-2454 37516.6667 22733.3333
-2455 37516.6667 22850.0000
-2456 37516.6667 23083.3333
-2457 37516.6667 23100.0000
-2458 37516.6667 23116.6667
-2459 37516.6667 23200.0000
-2460 37516.6667 23283.3333
-2461 37516.6667 23300.0000
-2462 37516.6667 23366.6667
-2463 37516.6667 23383.3333
-2464 37516.6667 26016.6667
-2465 37533.3333 21700.0000
-2466 37533.3333 21733.3333
-2467 37533.3333 21750.0000
-2468 37533.3333 21800.0000
-2469 37533.3333 21816.6667
-2470 37533.3333 21850.0000
-2471 37533.3333 21916.6667
-2472 37533.3333 21950.0000
-2473 37533.3333 21983.3333
-2474 37533.3333 22016.6667
-2475 37533.3333 22266.6667
-2476 37533.3333 22283.3333
-2477 37533.3333 22316.6667
-2478 37533.3333 22350.0000
-2479 37533.3333 22416.6667
-2480 37533.3333 22433.3333
-2481 37533.3333 22700.0000
-2482 37533.3333 22716.6667
-2483 37533.3333 22883.3333
-2484 37533.3333 22916.6667
-2485 37533.3333 22966.6667
-2486 37533.3333 23083.3333
-2487 37533.3333 23133.3333
-2488 37533.3333 23150.0000
-2489 37533.3333 23183.3333
-2490 37533.3333 23200.0000
-2491 37533.3333 23233.3333
-2492 37533.3333 23283.3333
-2493 37533.3333 23350.0000
-2494 37533.3333 25166.6667
-2495 37533.3333 26000.0000
-2496 37550.0000 21600.0000
-2497 37550.0000 21683.3333
-2498 37550.0000 21783.3333
-2499 37550.0000 21816.6667
-2500 37550.0000 21866.6667
-2501 37550.0000 21916.6667
-2502 37550.0000 21933.3333
-2503 37550.0000 21983.3333
-2504 37550.0000 22083.3333
-2505 37550.0000 22216.6667
-2506 37550.0000 22283.3333
-2507 37550.0000 22366.6667
-2508 37550.0000 22416.6667
-2509 37550.0000 22716.6667
-2510 37550.0000 22850.0000
-2511 37550.0000 22866.6667
-2512 37550.0000 22883.3333
-2513 37550.0000 22916.6667
-2514 37550.0000 22983.3333
-2515 37550.0000 23116.6667
-2516 37550.0000 23166.6667
-2517 37550.0000 23200.0000
-2518 37550.0000 23366.6667
-2519 37550.0000 26000.0000
-2520 37550.0000 26016.6667
-2521 37566.6667 21583.3333
-2522 37566.6667 21633.3333
-2523 37566.6667 21700.0000
-2524 37566.6667 21750.0000
-2525 37566.6667 21783.3333
-2526 37566.6667 21950.0000
-2527 37566.6667 22033.3333
-2528 37566.6667 22383.3333
-2529 37566.6667 22466.6667
-2530 37566.6667 22683.3333
-2531 37566.6667 22800.0000
-2532 37566.6667 22833.3333
-2533 37566.6667 23066.6667
-2534 37566.6667 23150.0000
-2535 37566.6667 23250.0000
-2536 37566.6667 25150.0000
-2537 37566.6667 25166.6667
-2538 37566.6667 25183.3333
-2539 37566.6667 25200.0000
-2540 37566.6667 26000.0000
-2541 37566.6667 26116.6667
-2542 37583.3333 21566.6667
-2543 37583.3333 21616.6667
-2544 37583.3333 21666.6667
-2545 37583.3333 21733.3333
-2546 37583.3333 21816.6667
-2547 37583.3333 21866.6667
-2548 37583.3333 21916.6667
-2549 37583.3333 21950.0000
-2550 37583.3333 21983.3333
-2551 37583.3333 22016.6667
-2552 37583.3333 22083.3333
-2553 37583.3333 22233.3333
-2554 37583.3333 22283.3333
-2555 37583.3333 22366.6667
-2556 37583.3333 22533.3333
-2557 37583.3333 22566.6667
-2558 37583.3333 22750.0000
-2559 37583.3333 22883.3333
-2560 37583.3333 23166.6667
-2561 37583.3333 23233.3333
-2562 37583.3333 23383.3333
-2563 37583.3333 25150.0000
-2564 37583.3333 25166.6667
-2565 37583.3333 25183.3333
-2566 37583.3333 25200.0000
-2567 37583.3333 25216.6667
-2568 37583.3333 26016.6667
-2569 37583.3333 26233.3333
-2570 37600.0000 21550.0000
-2571 37600.0000 21583.3333
-2572 37600.0000 21683.3333
-2573 37600.0000 21750.0000
-2574 37600.0000 21800.0000
-2575 37600.0000 21816.6667
-2576 37600.0000 21866.6667
-2577 37600.0000 21883.3333
-2578 37600.0000 21900.0000
-2579 37600.0000 21916.6667
-2580 37600.0000 21950.0000
-2581 37600.0000 21983.3333
-2582 37600.0000 22033.3333
-2583 37600.0000 22050.0000
-2584 37600.0000 22400.0000
-2585 37600.0000 22516.6667
-2586 37600.0000 22683.3333
-2587 37600.0000 22800.0000
-2588 37600.0000 22816.6667
-2589 37600.0000 22833.3333
-2590 37600.0000 22950.0000
-2591 37600.0000 22966.6667
-2592 37600.0000 22983.3333
-2593 37600.0000 23050.0000
-2594 37600.0000 23333.3333
-2595 37600.0000 23350.0000
-2596 37600.0000 23366.6667
-2597 37600.0000 24283.3333
-2598 37600.0000 24300.0000
-2599 37600.0000 24333.3333
-2600 37600.0000 25083.3333
-2601 37600.0000 25133.3333
-2602 37600.0000 25150.0000
-2603 37600.0000 25166.6667
-2604 37600.0000 25183.3333
-2605 37600.0000 26250.0000
-2606 37616.6667 21516.6667
-2607 37616.6667 21600.0000
-2608 37616.6667 21633.3333
-2609 37616.6667 21650.0000
-2610 37616.6667 21700.0000
-2611 37616.6667 21716.6667
-2612 37616.6667 21766.6667
-2613 37616.6667 21800.0000
-2614 37616.6667 21833.3333
-2615 37616.6667 21866.6667
-2616 37616.6667 21900.0000
-2617 37616.6667 21916.6667
-2618 37616.6667 21933.3333
-2619 37616.6667 22100.0000
-2620 37616.6667 22216.6667
-2621 37616.6667 22333.3333
-2622 37616.6667 22433.3333
-2623 37616.6667 22466.6667
-2624 37616.6667 22550.0000
-2625 37616.6667 22600.0000
-2626 37616.6667 22666.6667
-2627 37616.6667 22766.6667
-2628 37616.6667 22800.0000
-2629 37616.6667 22850.0000
-2630 37616.6667 22983.3333
-2631 37616.6667 23000.0000
-2632 37616.6667 23033.3333
-2633 37616.6667 23333.3333
-2634 37616.6667 23350.0000
-2635 37616.6667 23400.0000
-2636 37616.6667 24283.3333
-2637 37616.6667 25050.0000
-2638 37616.6667 25116.6667
-2639 37616.6667 25133.3333
-2640 37616.6667 26183.3333
-2641 37628.6111 26791.3889
-2642 37633.3333 21500.0000
-2643 37633.3333 21683.3333
-2644 37633.3333 21750.0000
-2645 37633.3333 21833.3333
-2646 37633.3333 21850.0000
-2647 37633.3333 21866.6667
-2648 37633.3333 21883.3333
-2649 37633.3333 21900.0000
-2650 37633.3333 21933.3333
-2651 37633.3333 21950.0000
-2652 37633.3333 21983.3333
-2653 37633.3333 22083.3333
-2654 37633.3333 22150.0000
-2655 37633.3333 22166.6667
-2656 37633.3333 22300.0000
-2657 37633.3333 22533.3333
-2658 37633.3333 22683.3333
-2659 37633.3333 22733.3333
-2660 37633.3333 22766.6667
-2661 37633.3333 22783.3333
-2662 37633.3333 22800.0000
-2663 37633.3333 22816.6667
-2664 37633.3333 22933.3333
-2665 37633.3333 23066.6667
-2666 37633.3333 23083.3333
-2667 37633.3333 23116.6667
-2668 37633.3333 23150.0000
-2669 37633.3333 23366.6667
-2670 37633.3333 24316.6667
-2671 37633.3333 24350.0000
-2672 37633.3333 24383.3333
-2673 37633.3333 25033.3333
-2674 37633.3333 25050.0000
-2675 37633.3333 26083.3333
-2676 37650.0000 21316.6667
-2677 37650.0000 21433.3333
-2678 37650.0000 21500.0000
-2679 37650.0000 21533.3333
-2680 37650.0000 21616.6667
-2681 37650.0000 21633.3333
-2682 37650.0000 21650.0000
-2683 37650.0000 21683.3333
-2684 37650.0000 21700.0000
-2685 37650.0000 21733.3333
-2686 37650.0000 21750.0000
-2687 37650.0000 21850.0000
-2688 37650.0000 21900.0000
-2689 37650.0000 21933.3333
-2690 37650.0000 21950.0000
-2691 37650.0000 21983.3333
-2692 37650.0000 22333.3333
-2693 37650.0000 22416.6667
-2694 37650.0000 22766.6667
-2695 37650.0000 22800.0000
-2696 37650.0000 22816.6667
-2697 37650.0000 22833.3333
-2698 37650.0000 23066.6667
-2699 37650.0000 23083.3333
-2700 37650.0000 24100.0000
-2701 37650.0000 24300.0000
-2702 37650.0000 24383.3333
-2703 37650.0000 25016.6667
-2704 37658.8889 26780.8333
-2705 37663.8889 26882.5000
-2706 37666.6667 20816.6667
-2707 37666.6667 21316.6667
-2708 37666.6667 21533.3333
-2709 37666.6667 21550.0000
-2710 37666.6667 21616.6667
-2711 37666.6667 21633.3333
-2712 37666.6667 21783.3333
-2713 37666.6667 21816.6667
-2714 37666.6667 21833.3333
-2715 37666.6667 21866.6667
-2716 37666.6667 21916.6667
-2717 37666.6667 21933.3333
-2718 37666.6667 22183.3333
-2719 37666.6667 22366.6667
-2720 37666.6667 22450.0000
-2721 37666.6667 22483.3333
-2722 37666.6667 22583.3333
-2723 37666.6667 22666.6667
-2724 37666.6667 22750.0000
-2725 37666.6667 22766.6667
-2726 37666.6667 22783.3333
-2727 37666.6667 22816.6667
-2728 37666.6667 22850.0000
-2729 37666.6667 23133.3333
-2730 37666.6667 23983.3333
-2731 37666.6667 24016.6667
-2732 37666.6667 24033.3333
-2733 37666.6667 24050.0000
-2734 37666.6667 24316.6667
-2735 37666.6667 24333.3333
-2736 37666.6667 24350.0000
-2737 37672.7778 26831.9444
-2738 37675.5556 26769.1667
-2739 37678.6111 26801.3889
-2740 37679.7222 26861.1111
-2741 37683.3333 21316.6667
-2742 37683.3333 21333.3333
-2743 37683.3333 21366.6667
-2744 37683.3333 21383.3333
-2745 37683.3333 21450.0000
-2746 37683.3333 21483.3333
-2747 37683.3333 21500.0000
-2748 37683.3333 21516.6667
-2749 37683.3333 21550.0000
-2750 37683.3333 21583.3333
-2751 37683.3333 21616.6667
-2752 37683.3333 21650.0000
-2753 37683.3333 21683.3333
-2754 37683.3333 21783.3333
-2755 37683.3333 21833.3333
-2756 37683.3333 21866.6667
-2757 37683.3333 21916.6667
-2758 37683.3333 21966.6667
-2759 37683.3333 22033.3333
-2760 37683.3333 22133.3333
-2761 37683.3333 22183.3333
-2762 37683.3333 22300.0000
-2763 37683.3333 22516.6667
-2764 37683.3333 22616.6667
-2765 37683.3333 22716.6667
-2766 37683.3333 22750.0000
-2767 37683.3333 22816.6667
-2768 37683.3333 22833.3333
-2769 37683.3333 22966.6667
-2770 37683.3333 23150.0000
-2771 37683.3333 23350.0000
-2772 37683.3333 23450.0000
-2773 37683.3333 23483.3333
-2774 37684.7222 26759.1667
-2775 37686.6667 26918.8889
-2776 37691.9444 26948.3333
-2777 37692.5000 26774.1667
-2778 37692.7778 26588.0556
-2779 37698.3333 26618.6111
-2780 37699.4444 26746.1111
-2781 37700.0000 21333.3333
-2782 37700.0000 21416.6667
-2783 37700.0000 21466.6667
-2784 37700.0000 21516.6667
-2785 37700.0000 21566.6667
-2786 37700.0000 21783.3333
-2787 37700.0000 21916.6667
-2788 37700.0000 21950.0000
-2789 37700.0000 21966.6667
-2790 37700.0000 22050.0000
-2791 37700.0000 22133.3333
-2792 37700.0000 22433.3333
-2793 37700.0000 22483.3333
-2794 37700.0000 22550.0000
-2795 37700.0000 22750.0000
-2796 37700.0000 23066.6667
-2797 37700.0000 23366.6667
-2798 37700.0000 23500.0000
-2799 37700.0000 23516.6667
-2800 37700.0000 24116.6667
-2801 37703.6111 26905.5556
-2802 37704.7222 26839.4444
-2803 37706.6667 26771.3889
-2804 37707.7778 26669.1667
-2805 37708.6111 27018.0556
-2806 37709.7222 26749.7222
-2807 37709.7222 27046.9444
-2808 37710.2778 26685.8333
-2809 37710.8333 26700.0000
-2810 37711.6667 26804.1667
-2811 37713.6111 26975.5556
-2812 37714.1667 27059.1667
-2813 37716.1111 26782.2222
-2814 37716.6667 20783.3333
-2815 37716.6667 20833.3333
-2816 37716.6667 20983.3333
-2817 37716.6667 21333.3333
-2818 37716.6667 21350.0000
-2819 37716.6667 21416.6667
-2820 37716.6667 21433.3333
-2821 37716.6667 21483.3333
-2822 37716.6667 21566.6667
-2823 37716.6667 21583.3333
-2824 37716.6667 21616.6667
-2825 37716.6667 21650.0000
-2826 37716.6667 21716.6667
-2827 37716.6667 21833.3333
-2828 37716.6667 21950.0000
-2829 37716.6667 21983.3333
-2830 37716.6667 22100.0000
-2831 37716.6667 22150.0000
-2832 37716.6667 22250.0000
-2833 37716.6667 22316.6667
-2834 37716.6667 22350.0000
-2835 37716.6667 22600.0000
-2836 37716.6667 22650.0000
-2837 37716.6667 22750.0000
-2838 37716.6667 22833.3333
-2839 37716.6667 22883.3333
-2840 37716.6667 23350.0000
-2841 37716.6667 23450.0000
-2842 37716.6667 23466.6667
-2843 37716.6667 23483.3333
-2844 37716.6667 23500.0000
-2845 37716.6667 23516.6667
-2846 37716.6667 23950.0000
-2847 37716.6667 24050.0000
-2848 37716.6667 24116.6667
-2849 37718.0556 26861.9444
-2850 37719.1667 27000.2778
-2851 37726.3889 26690.0000
-2852 37727.2222 26822.2222
-2853 37728.6111 26908.3333
-2854 37730.8333 26829.4444
-2855 37733.3333 20816.6667
-2856 37733.3333 20833.3333
-2857 37733.3333 20916.6667
-2858 37733.3333 21350.0000
-2859 37733.3333 21366.6667
-2860 37733.3333 21383.3333
-2861 37733.3333 21400.0000
-2862 37733.3333 21416.6667
-2863 37733.3333 21466.6667
-2864 37733.3333 21500.0000
-2865 37733.3333 21516.6667
-2866 37733.3333 21533.3333
-2867 37733.3333 21550.0000
-2868 37733.3333 21666.6667
-2869 37733.3333 21700.0000
-2870 37733.3333 21783.3333
-2871 37733.3333 21933.3333
-2872 37733.3333 21950.0000
-2873 37733.3333 21983.3333
-2874 37733.3333 22016.6667
-2875 37733.3333 22200.0000
-2876 37733.3333 22283.3333
-2877 37733.3333 22300.0000
-2878 37733.3333 22500.0000
-2879 37733.3333 22516.6667
-2880 37733.3333 22533.3333
-2881 37733.3333 22683.3333
-2882 37733.3333 22716.6667
-2883 37733.3333 23466.6667
-2884 37733.3333 23483.3333
-2885 37733.3333 23516.6667
-2886 37733.3333 23950.0000
-2887 37733.3333 24000.0000
-2888 37733.3333 24016.6667
-2889 37733.3333 24050.0000
-2890 37733.3333 26583.3333
-2891 37735.2778 26945.0000
-2892 37738.0556 27000.5556
-2893 37738.3333 26745.2778
-2894 37741.3889 26715.5556
-2895 37747.2222 26728.6111
-2896 37750.0000 20783.3333
-2897 37750.0000 20816.6667
-2898 37750.0000 20950.0000
-2899 37750.0000 21316.6667
-2900 37750.0000 21333.3333
-2901 37750.0000 21366.6667
-2902 37750.0000 21433.3333
-2903 37750.0000 21450.0000
-2904 37750.0000 21466.6667
-2905 37750.0000 21516.6667
-2906 37750.0000 21550.0000
-2907 37750.0000 21683.3333
-2908 37750.0000 21883.3333
-2909 37750.0000 21900.0000
-2910 37750.0000 22000.0000
-2911 37750.0000 22016.6667
-2912 37750.0000 22050.0000
-2913 37750.0000 22083.3333
-2914 37750.0000 22100.0000
-2915 37750.0000 22183.3333
-2916 37750.0000 22416.6667
-2917 37750.0000 22483.3333
-2918 37750.0000 22833.3333
-2919 37750.0000 22883.3333
-2920 37750.0000 23000.0000
-2921 37750.0000 23433.3333
-2922 37750.0000 23450.0000
-2923 37750.0000 23483.3333
-2924 37750.0000 23516.6667
-2925 37750.0000 23533.3333
-2926 37750.0000 24916.6667
-2927 37750.0000 24933.3333
-2928 37750.0000 24950.0000
-2929 37750.0000 26983.3333
-2930 37750.2778 26716.1111
-2931 37751.1111 27005.5556
-2932 37751.6667 26592.2222
-2933 37754.4444 26677.2222
-2934 37755.2778 26738.3333
-2935 37755.8333 26715.8333
-2936 37757.2222 26607.2222
-2937 37757.2222 26976.9444
-2938 37758.0556 27024.4444
-2939 37758.8889 26946.3889
-2940 37759.1667 26660.0000
-2941 37761.3889 27009.7222
-2942 37766.6667 20800.0000
-2943 37766.6667 20816.6667
-2944 37766.6667 20866.6667
-2945 37766.6667 20916.6667
-2946 37766.6667 21333.3333
-2947 37766.6667 21500.0000
-2948 37766.6667 21616.6667
-2949 37766.6667 21666.6667
-2950 37766.6667 21833.3333
-2951 37766.6667 21866.6667
-2952 37766.6667 22016.6667
-2953 37766.6667 22083.3333
-2954 37766.6667 22116.6667
-2955 37766.6667 22150.0000
-2956 37766.6667 22183.3333
-2957 37766.6667 22216.6667
-2958 37766.6667 22250.0000
-2959 37766.6667 22383.3333
-2960 37766.6667 22483.3333
-2961 37766.6667 22566.6667
-2962 37766.6667 22966.6667
-2963 37766.6667 23133.3333
-2964 37766.6667 23433.3333
-2965 37766.6667 23483.3333
-2966 37766.6667 23516.6667
-2967 37766.6667 23533.3333
-2968 37766.6667 23966.6667
-2969 37766.6667 24033.3333
-2970 37766.6667 24916.6667
-2971 37766.6667 24933.3333
-2972 37766.6667 24950.0000
-2973 37767.7778 26966.9444
-2974 37769.7222 26919.7222
-2975 37772.2222 26658.8889
-2976 37773.3333 26685.8333
-2977 37776.3889 26893.8889
-2978 37778.0556 26673.3333
-2979 37779.1667 26993.3333
-2980 37779.4444 26751.6667
-2981 37783.3333 20683.3333
-2982 37783.3333 20716.6667
-2983 37783.3333 20783.3333
-2984 37783.3333 20800.0000
-2985 37783.3333 20833.3333
-2986 37783.3333 20850.0000
-2987 37783.3333 20866.6667
-2988 37783.3333 20900.0000
-2989 37783.3333 21300.0000
-2990 37783.3333 21316.6667
-2991 37783.3333 21400.0000
-2992 37783.3333 21466.6667
-2993 37783.3333 21566.6667
-2994 37783.3333 21633.3333
-2995 37783.3333 21683.3333
-2996 37783.3333 21716.6667
-2997 37783.3333 21866.6667
-2998 37783.3333 21933.3333
-2999 37783.3333 22033.3333
-3000 37783.3333 22066.6667
-3001 37783.3333 22116.6667
-3002 37783.3333 22150.0000
-3003 37783.3333 22283.3333
-3004 37783.3333 22316.6667
-3005 37783.3333 22433.3333
-3006 37783.3333 22866.6667
-3007 37783.3333 23900.0000
-3008 37783.3333 23916.6667
-3009 37783.3333 23950.0000
-3010 37783.3333 24066.6667
-3011 37783.3333 24083.3333
-3012 37783.3333 24883.3333
-3013 37783.3333 24933.3333
-3014 37783.3333 24950.0000
-3015 37783.3333 26850.0000
-3016 37784.4444 26828.6111
-3017 37789.4444 26666.3889
-3018 37790.2778 26683.8889
-3019 37790.2778 26704.4444
-3020 37792.2222 26828.8889
-3021 37792.5000 26696.6667
-3022 37796.1111 26812.5000
-3023 37797.5000 26859.1667
-3024 37798.3333 26738.3333
-3025 37798.6111 26706.1111
-3026 37799.1667 26750.8333
-3027 37800.0000 20683.3333
-3028 37800.0000 20733.3333
-3029 37800.0000 20766.6667
-3030 37800.0000 20783.3333
-3031 37800.0000 20800.0000
-3032 37800.0000 20833.3333
-3033 37800.0000 20850.0000
-3034 37800.0000 20866.6667
-3035 37800.0000 21300.0000
-3036 37800.0000 21350.0000
-3037 37800.0000 21383.3333
-3038 37800.0000 21433.3333
-3039 37800.0000 21466.6667
-3040 37800.0000 21533.3333
-3041 37800.0000 21566.6667
-3042 37800.0000 21583.3333
-3043 37800.0000 21616.6667
-3044 37800.0000 21633.3333
-3045 37800.0000 21716.6667
-3046 37800.0000 21750.0000
-3047 37800.0000 21816.6667
-3048 37800.0000 21900.0000
-3049 37800.0000 21950.0000
-3050 37800.0000 22000.0000
-3051 37800.0000 22016.6667
-3052 37800.0000 22200.0000
-3053 37800.0000 22250.0000
-3054 37800.0000 22283.3333
-3055 37800.0000 22583.3333
-3056 37800.0000 22716.6667
-3057 37800.0000 22800.0000
-3058 37800.0000 23050.0000
-3059 37800.0000 23883.3333
-3060 37800.0000 23983.3333
-3061 37800.0000 24050.0000
-3062 37800.0000 24866.6667
-3063 37800.0000 24900.0000
-3064 37800.0000 24916.6667
-3065 37800.0000 24933.3333
-3066 37800.0000 24950.0000
-3067 37801.1111 26803.3333
-3068 37801.3889 26745.5556
-3069 37802.2222 26841.3889
-3070 37802.7778 26812.2222
-3071 37805.8333 26815.2778
-3072 37806.6667 26732.2222
-3073 37808.3333 26794.7222
-3074 37808.6111 26738.8889
-3075 37816.6667 20683.3333
-3076 37816.6667 20766.6667
-3077 37816.6667 20800.0000
-3078 37816.6667 20833.3333
-3079 37816.6667 20850.0000
-3080 37816.6667 21266.6667
-3081 37816.6667 21283.3333
-3082 37816.6667 21350.0000
-3083 37816.6667 21383.3333
-3084 37816.6667 21416.6667
-3085 37816.6667 21583.3333
-3086 37816.6667 21616.6667
-3087 37816.6667 21700.0000
-3088 37816.6667 21850.0000
-3089 37816.6667 21866.6667
-3090 37816.6667 22000.0000
-3091 37816.6667 22133.3333
-3092 37816.6667 22150.0000
-3093 37816.6667 22166.6667
-3094 37816.6667 22333.3333
-3095 37816.6667 22516.6667
-3096 37816.6667 22533.3333
-3097 37816.6667 22666.6667
-3098 37816.6667 22700.0000
-3099 37816.6667 22750.0000
-3100 37816.6667 22866.6667
-3101 37816.6667 22933.3333
-3102 37816.6667 23000.0000
-3103 37816.6667 23783.3333
-3104 37816.6667 23800.0000
-3105 37816.6667 24050.0000
-3106 37816.6667 24833.3333
-3107 37816.6667 24883.3333
-3108 37816.6667 24900.0000
-3109 37816.6667 24916.6667
-3110 37816.6667 24933.3333
-3111 37816.6667 24950.0000
-3112 37833.3333 20750.0000
-3113 37833.3333 20766.6667
-3114 37833.3333 21300.0000
-3115 37833.3333 21383.3333
-3116 37833.3333 21433.3333
-3117 37833.3333 21450.0000
-3118 37833.3333 21533.3333
-3119 37833.3333 21566.6667
-3120 37833.3333 21583.3333
-3121 37833.3333 21600.0000
-3122 37833.3333 21700.0000
-3123 37833.3333 21766.6667
-3124 37833.3333 21833.3333
-3125 37833.3333 21850.0000
-3126 37833.3333 21933.3333
-3127 37833.3333 21983.3333
-3128 37833.3333 22000.0000
-3129 37833.3333 22100.0000
-3130 37833.3333 22116.6667
-3131 37833.3333 22166.6667
-3132 37833.3333 22316.6667
-3133 37833.3333 22383.3333
-3134 37833.3333 22566.6667
-3135 37833.3333 22583.3333
-3136 37833.3333 23016.6667
-3137 37833.3333 23033.3333
-3138 37833.3333 23800.0000
-3139 37833.3333 23866.6667
-3140 37833.3333 23916.6667
-3141 37833.3333 23966.6667
-3142 37833.3333 24816.6667
-3143 37833.3333 24900.0000
-3144 37833.3333 24916.6667
-3145 37833.3333 24933.3333
-3146 37850.0000 20650.0000
-3147 37850.0000 20700.0000
-3148 37850.0000 20783.3333
-3149 37850.0000 21116.6667
-3150 37850.0000 21150.0000
-3151 37850.0000 21216.6667
-3152 37850.0000 21250.0000
-3153 37850.0000 21316.6667
-3154 37850.0000 21366.6667
-3155 37850.0000 21383.3333
-3156 37850.0000 21433.3333
-3157 37850.0000 21450.0000
-3158 37850.0000 21500.0000
-3159 37850.0000 21516.6667
-3160 37850.0000 21566.6667
-3161 37850.0000 21616.6667
-3162 37850.0000 21766.6667
-3163 37850.0000 21800.0000
-3164 37850.0000 21983.3333
-3165 37850.0000 22016.6667
-3166 37850.0000 22066.6667
-3167 37850.0000 22083.3333
-3168 37850.0000 22116.6667
-3169 37850.0000 22150.0000
-3170 37850.0000 22166.6667
-3171 37850.0000 22216.6667
-3172 37850.0000 22316.6667
-3173 37850.0000 22416.6667
-3174 37850.0000 22600.0000
-3175 37850.0000 22666.6667
-3176 37850.0000 22800.0000
-3177 37850.0000 22883.3333
-3178 37850.0000 22916.6667
-3179 37850.0000 22983.3333
-3180 37850.0000 23000.0000
-3181 37850.0000 23766.6667
-3182 37850.0000 24783.3333
-3183 37850.0000 24916.6667
-3184 37850.0000 24933.3333
-3185 37866.6667 20650.0000
-3186 37866.6667 20666.6667
-3187 37866.6667 21116.6667
-3188 37866.6667 21150.0000
-3189 37866.6667 21183.3333
-3190 37866.6667 21200.0000
-3191 37866.6667 21266.6667
-3192 37866.6667 21300.0000
-3193 37866.6667 21350.0000
-3194 37866.6667 21433.3333
-3195 37866.6667 21450.0000
-3196 37866.6667 21483.3333
-3197 37866.6667 21500.0000
-3198 37866.6667 21616.6667
-3199 37866.6667 21650.0000
-3200 37866.6667 21750.0000
-3201 37866.6667 21850.0000
-3202 37866.6667 21900.0000
-3203 37866.6667 21950.0000
-3204 37866.6667 22016.6667
-3205 37866.6667 22033.3333
-3206 37866.6667 22066.6667
-3207 37866.6667 22116.6667
-3208 37866.6667 22166.6667
-3209 37866.6667 22383.3333
-3210 37866.6667 22416.6667
-3211 37866.6667 22450.0000
-3212 37866.6667 22466.6667
-3213 37866.6667 22533.3333
-3214 37866.6667 22783.3333
-3215 37866.6667 22900.0000
-3216 37866.6667 23000.0000
-3217 37866.6667 23750.0000
-3218 37866.6667 23933.3333
-3219 37866.6667 24816.6667
-3220 37866.6667 24833.3333
-3221 37866.6667 24850.0000
-3222 37866.6667 24866.6667
-3223 37866.6667 24883.3333
-3224 37883.3333 20700.0000
-3225 37883.3333 21133.3333
-3226 37883.3333 21200.0000
-3227 37883.3333 21233.3333
-3228 37883.3333 21250.0000
-3229 37883.3333 21283.3333
-3230 37883.3333 21316.6667
-3231 37883.3333 21366.6667
-3232 37883.3333 21383.3333
-3233 37883.3333 21416.6667
-3234 37883.3333 21433.3333
-3235 37883.3333 21450.0000
-3236 37883.3333 21500.0000
-3237 37883.3333 21550.0000
-3238 37883.3333 21583.3333
-3239 37883.3333 21683.3333
-3240 37883.3333 21900.0000
-3241 37883.3333 21916.6667
-3242 37883.3333 21983.3333
-3243 37883.3333 22016.6667
-3244 37883.3333 22050.0000
-3245 37883.3333 22150.0000
-3246 37883.3333 22333.3333
-3247 37883.3333 22466.6667
-3248 37883.3333 22483.3333
-3249 37883.3333 22566.6667
-3250 37883.3333 22633.3333
-3251 37883.3333 22733.3333
-3252 37883.3333 22833.3333
-3253 37883.3333 22883.3333
-3254 37883.3333 22950.0000
-3255 37883.3333 23416.6667
-3256 37883.3333 23433.3333
-3257 37883.3333 23733.3333
-3258 37883.3333 23750.0000
-3259 37883.3333 23933.3333
-3260 37883.3333 24016.6667
-3261 37883.3333 24733.3333
-3262 37900.0000 21233.3333
-3263 37900.0000 21266.6667
-3264 37900.0000 21350.0000
-3265 37900.0000 21383.3333
-3266 37900.0000 21400.0000
-3267 37900.0000 21450.0000
-3268 37900.0000 21466.6667
-3269 37900.0000 21500.0000
-3270 37900.0000 21533.3333
-3271 37900.0000 21550.0000
-3272 37900.0000 21600.0000
-3273 37900.0000 21650.0000
-3274 37900.0000 21766.6667
-3275 37900.0000 21833.3333
-3276 37900.0000 21916.6667
-3277 37900.0000 22000.0000
-3278 37900.0000 22033.3333
-3279 37900.0000 22050.0000
-3280 37900.0000 22083.3333
-3281 37900.0000 22116.6667
-3282 37900.0000 22133.3333
-3283 37900.0000 22150.0000
-3284 37900.0000 22333.3333
-3285 37900.0000 22466.6667
-3286 37900.0000 22600.0000
-3287 37900.0000 22650.0000
-3288 37900.0000 22733.3333
-3289 37900.0000 22933.3333
-3290 37900.0000 23416.6667
-3291 37900.0000 23483.3333
-3292 37900.0000 23733.3333
-3293 37900.0000 23750.0000
-3294 37900.0000 23883.3333
-3295 37900.0000 24733.3333
-3296 37900.0000 24750.0000
-3297 37900.0000 24766.6667
-3298 37900.0000 24783.3333
-3299 37900.0000 24833.3333
-3300 37900.0000 24916.6667
-3301 37916.6667 20700.0000
-3302 37916.6667 21183.3333
-3303 37916.6667 21200.0000
-3304 37916.6667 21233.3333
-3305 37916.6667 21250.0000
-3306 37916.6667 21283.3333
-3307 37916.6667 21333.3333
-3308 37916.6667 21400.0000
-3309 37916.6667 21416.6667
-3310 37916.6667 21433.3333
-3311 37916.6667 21466.6667
-3312 37916.6667 21500.0000
-3313 37916.6667 21533.3333
-3314 37916.6667 21666.6667
-3315 37916.6667 21716.6667
-3316 37916.6667 21750.0000
-3317 37916.6667 21800.0000
-3318 37916.6667 21866.6667
-3319 37916.6667 21933.3333
-3320 37916.6667 22133.3333
-3321 37916.6667 22166.6667
-3322 37916.6667 22200.0000
-3323 37916.6667 22283.3333
-3324 37916.6667 22300.0000
-3325 37916.6667 22316.6667
-3326 37916.6667 22516.6667
-3327 37916.6667 22616.6667
-3328 37916.6667 22700.0000
-3329 37916.6667 22883.3333
-3330 37916.6667 22983.3333
-3331 37916.6667 23000.0000
-3332 37916.6667 23150.0000
-3333 37916.6667 23466.6667
-3334 37916.6667 23500.0000
-3335 37916.6667 23716.6667
-3336 37916.6667 23733.3333
-3337 37916.6667 23966.6667
-3338 37933.3333 21150.0000
-3339 37933.3333 21266.6667
-3340 37933.3333 21316.6667
-3341 37933.3333 21333.3333
-3342 37933.3333 21350.0000
-3343 37933.3333 21400.0000
-3344 37933.3333 21466.6667
-3345 37933.3333 21566.6667
-3346 37933.3333 21616.6667
-3347 37933.3333 21633.3333
-3348 37933.3333 21650.0000
-3349 37933.3333 21750.0000
-3350 37933.3333 21850.0000
-3351 37933.3333 21916.6667
-3352 37933.3333 21966.6667
-3353 37933.3333 22000.0000
-3354 37933.3333 22033.3333
-3355 37933.3333 22050.0000
-3356 37933.3333 22083.3333
-3357 37933.3333 22100.0000
-3358 37933.3333 22166.6667
-3359 37933.3333 22183.3333
-3360 37933.3333 22200.0000
-3361 37933.3333 22333.3333
-3362 37933.3333 22633.3333
-3363 37933.3333 22716.6667
-3364 37933.3333 22800.0000
-3365 37933.3333 22833.3333
-3366 37933.3333 22850.0000
-3367 37933.3333 22933.3333
-3368 37933.3333 23033.3333
-3369 37933.3333 23533.3333
-3370 37933.3333 23700.0000
-3371 37933.3333 23733.3333
-3372 37933.3333 24716.6667
-3373 37933.3333 24766.6667
-3374 37933.3333 24800.0000
-3375 37950.0000 21316.6667
-3376 37950.0000 21350.0000
-3377 37950.0000 21366.6667
-3378 37950.0000 21383.3333
-3379 37950.0000 21400.0000
-3380 37950.0000 21416.6667
-3381 37950.0000 21450.0000
-3382 37950.0000 21483.3333
-3383 37950.0000 21500.0000
-3384 37950.0000 21533.3333
-3385 37950.0000 21550.0000
-3386 37950.0000 21700.0000
-3387 37950.0000 21716.6667
-3388 37950.0000 21766.6667
-3389 37950.0000 21850.0000
-3390 37950.0000 21933.3333
-3391 37950.0000 22016.6667
-3392 37950.0000 22133.3333
-3393 37950.0000 22316.6667
-3394 37950.0000 22350.0000
-3395 37950.0000 22566.6667
-3396 37950.0000 22650.0000
-3397 37950.0000 22750.0000
-3398 37950.0000 22783.3333
-3399 37950.0000 22800.0000
-3400 37950.0000 22833.3333
-3401 37950.0000 22966.6667
-3402 37950.0000 23533.3333
-3403 37950.0000 23633.3333
-3404 37950.0000 23666.6667
-3405 37950.0000 23700.0000
-3406 37950.0000 23716.6667
-3407 37950.0000 23766.6667
-3408 37950.0000 23850.0000
-3409 37950.0000 24750.0000
-3410 37950.0000 24800.0000
-3411 37966.6667 21250.0000
-3412 37966.6667 21266.6667
-3413 37966.6667 21283.3333
-3414 37966.6667 21300.0000
-3415 37966.6667 21333.3333
-3416 37966.6667 21350.0000
-3417 37966.6667 21400.0000
-3418 37966.6667 21516.6667
-3419 37966.6667 21550.0000
-3420 37966.6667 21633.3333
-3421 37966.6667 21666.6667
-3422 37966.6667 21700.0000
-3423 37966.6667 22050.0000
-3424 37966.6667 22083.3333
-3425 37966.6667 22116.6667
-3426 37966.6667 22566.6667
-3427 37966.6667 22633.3333
-3428 37966.6667 22766.6667
-3429 37966.6667 22783.3333
-3430 37966.6667 22816.6667
-3431 37966.6667 23200.0000
-3432 37966.6667 23366.6667
-3433 37966.6667 23450.0000
-3434 37966.6667 23483.3333
-3435 37966.6667 23516.6667
-3436 37966.6667 23566.6667
-3437 37966.6667 23633.3333
-3438 37966.6667 23650.0000
-3439 37966.6667 23683.3333
-3440 37966.6667 23750.0000
-3441 37966.6667 23800.0000
-3442 37966.6667 23916.6667
-3443 37966.6667 24000.0000
-3444 37966.6667 24483.3333
-3445 37966.6667 24733.3333
-3446 37966.6667 24750.0000
-3447 37966.6667 24766.6667
-3448 37983.3333 21266.6667
-3449 37983.3333 21316.6667
-3450 37983.3333 21350.0000
-3451 37983.3333 21400.0000
-3452 37983.3333 21416.6667
-3453 37983.3333 21450.0000
-3454 37983.3333 21466.6667
-3455 37983.3333 21583.3333
-3456 37983.3333 21666.6667
-3457 37983.3333 21733.3333
-3458 37983.3333 21766.6667
-3459 37983.3333 21800.0000
-3460 37983.3333 22000.0000
-3461 37983.3333 22066.6667
-3462 37983.3333 22133.3333
-3463 37983.3333 22266.6667
-3464 37983.3333 22350.0000
-3465 37983.3333 22466.6667
-3466 37983.3333 22483.3333
-3467 37983.3333 22516.6667
-3468 37983.3333 22566.6667
-3469 37983.3333 22650.0000
-3470 37983.3333 22733.3333
-3471 37983.3333 22783.3333
-3472 37983.3333 22966.6667
-3473 37983.3333 23350.0000
-3474 37983.3333 23533.3333
-3475 37983.3333 23666.6667
-3476 37983.3333 23683.3333
-3477 37983.3333 23733.3333
-3478 37983.3333 23766.6667
-3479 37983.3333 23816.6667
-3480 37983.3333 23866.6667
-3481 37983.3333 23883.3333
-3482 37983.3333 23900.0000
-3483 37983.3333 24016.6667
-3484 38000.0000 21316.6667
-3485 38000.0000 21350.0000
-3486 38000.0000 21366.6667
-3487 38000.0000 21383.3333
-3488 38000.0000 21516.6667
-3489 38000.0000 21666.6667
-3490 38000.0000 21716.6667
-3491 38000.0000 21766.6667
-3492 38000.0000 21916.6667
-3493 38000.0000 22000.0000
-3494 38000.0000 22133.3333
-3495 38000.0000 22266.6667
-3496 38000.0000 22366.6667
-3497 38000.0000 22466.6667
-3498 38000.0000 22483.3333
-3499 38000.0000 22533.3333
-3500 38000.0000 22566.6667
-3501 38000.0000 22650.0000
-3502 38000.0000 22733.3333
-3503 38000.0000 22750.0000
-3504 38000.0000 23350.0000
-3505 38000.0000 23433.3333
-3506 38000.0000 23583.3333
-3507 38000.0000 23666.6667
-3508 38000.0000 23683.3333
-3509 38000.0000 23700.0000
-3510 38000.0000 23733.3333
-3511 38000.0000 23800.0000
-3512 38000.0000 23883.3333
-3513 38000.0000 23916.6667
-3514 38000.0000 23950.0000
-3515 38016.6667 21366.6667
-3516 38016.6667 21383.3333
-3517 38016.6667 21400.0000
-3518 38016.6667 21416.6667
-3519 38016.6667 21433.3333
-3520 38016.6667 21466.6667
-3521 38016.6667 21550.0000
-3522 38016.6667 21566.6667
-3523 38016.6667 21600.0000
-3524 38016.6667 21633.3333
-3525 38016.6667 21700.0000
-3526 38016.6667 21733.3333
-3527 38016.6667 21766.6667
-3528 38016.6667 21900.0000
-3529 38016.6667 21966.6667
-3530 38016.6667 21983.3333
-3531 38016.6667 22233.3333
-3532 38016.6667 22250.0000
-3533 38016.6667 22266.6667
-3534 38016.6667 22416.6667
-3535 38016.6667 22483.3333
-3536 38016.6667 22500.0000
-3537 38016.6667 22616.6667
-3538 38016.6667 22650.0000
-3539 38016.6667 22683.3333
-3540 38016.6667 22716.6667
-3541 38016.6667 22733.3333
-3542 38016.6667 22750.0000
-3543 38016.6667 22983.3333
-3544 38016.6667 23666.6667
-3545 38016.6667 23700.0000
-3546 38016.6667 23733.3333
-3547 38016.6667 23750.0000
-3548 38016.6667 23766.6667
-3549 38016.6667 23833.3333
-3550 38016.6667 24000.0000
-3551 38016.6667 24266.6667
-3552 38016.6667 24283.3333
-3553 38016.6667 24333.3333
-3554 38016.6667 24416.6667
-3555 38016.6667 24450.0000
-3556 38016.6667 24466.6667
-3557 38016.6667 24516.6667
-3558 38016.6667 24533.3333
-3559 38016.6667 24550.0000
-3560 38016.6667 24566.6667
-3561 38033.3333 21366.6667
-3562 38033.3333 21466.6667
-3563 38033.3333 21500.0000
-3564 38033.3333 21550.0000
-3565 38033.3333 21633.3333
-3566 38033.3333 21700.0000
-3567 38033.3333 21716.6667
-3568 38033.3333 21733.3333
-3569 38033.3333 21750.0000
-3570 38033.3333 21800.0000
-3571 38033.3333 21866.6667
-3572 38033.3333 21883.3333
-3573 38033.3333 21900.0000
-3574 38033.3333 21933.3333
-3575 38033.3333 21966.6667
-3576 38033.3333 22000.0000
-3577 38033.3333 22116.6667
-3578 38033.3333 22250.0000
-3579 38033.3333 22266.6667
-3580 38033.3333 22333.3333
-3581 38033.3333 22366.6667
-3582 38033.3333 22483.3333
-3583 38033.3333 22533.3333
-3584 38033.3333 22566.6667
-3585 38033.3333 22583.3333
-3586 38033.3333 22600.0000
-3587 38033.3333 22666.6667
-3588 38033.3333 22716.6667
-3589 38033.3333 22733.3333
-3590 38033.3333 22950.0000
-3591 38033.3333 23166.6667
-3592 38033.3333 23500.0000
-3593 38033.3333 23533.3333
-3594 38033.3333 23700.0000
-3595 38033.3333 23733.3333
-3596 38033.3333 23750.0000
-3597 38033.3333 23766.6667
-3598 38033.3333 23783.3333
-3599 38033.3333 23800.0000
-3600 38033.3333 23916.6667
-3601 38033.3333 24316.6667
-3602 38033.3333 24400.0000
-3603 38033.3333 24416.6667
-3604 38033.3333 24433.3333
-3605 38033.3333 24500.0000
-3606 38033.3333 24533.3333
-3607 38050.0000 21316.6667
-3608 38050.0000 21350.0000
-3609 38050.0000 21366.6667
-3610 38050.0000 21383.3333
-3611 38050.0000 21450.0000
-3612 38050.0000 21483.3333
-3613 38050.0000 21550.0000
-3614 38050.0000 21583.3333
-3615 38050.0000 21666.6667
-3616 38050.0000 21700.0000
-3617 38050.0000 21750.0000
-3618 38050.0000 21766.6667
-3619 38050.0000 21783.3333
-3620 38050.0000 21816.6667
-3621 38050.0000 21850.0000
-3622 38050.0000 21866.6667
-3623 38050.0000 21916.6667
-3624 38050.0000 21933.3333
-3625 38050.0000 21983.3333
-3626 38050.0000 22016.6667
-3627 38050.0000 22066.6667
-3628 38050.0000 22316.6667
-3629 38050.0000 22350.0000
-3630 38050.0000 22450.0000
-3631 38050.0000 22500.0000
-3632 38050.0000 22533.3333
-3633 38050.0000 22550.0000
-3634 38050.0000 22583.3333
-3635 38050.0000 22600.0000
-3636 38050.0000 22616.6667
-3637 38050.0000 22650.0000
-3638 38050.0000 22683.3333
-3639 38050.0000 22933.3333
-3640 38050.0000 22966.6667
-3641 38050.0000 23016.6667
-3642 38050.0000 23683.3333
-3643 38050.0000 23766.6667
-3644 38050.0000 23800.0000
-3645 38050.0000 23833.3333
-3646 38050.0000 23866.6667
-3647 38050.0000 24316.6667
-3648 38050.0000 24366.6667
-3649 38050.0000 24383.3333
-3650 38050.0000 24416.6667
-3651 38050.0000 24533.3333
-3652 38050.0000 24550.0000
-3653 38066.6667 20733.3333
-3654 38066.6667 20750.0000
-3655 38066.6667 20783.3333
-3656 38066.6667 21350.0000
-3657 38066.6667 21400.0000
-3658 38066.6667 21433.3333
-3659 38066.6667 21500.0000
-3660 38066.6667 21516.6667
-3661 38066.6667 21550.0000
-3662 38066.6667 21600.0000
-3663 38066.6667 21616.6667
-3664 38066.6667 21650.0000
-3665 38066.6667 21666.6667
-3666 38066.6667 21683.3333
-3667 38066.6667 21716.6667
-3668 38066.6667 21733.3333
-3669 38066.6667 21750.0000
-3670 38066.6667 21766.6667
-3671 38066.6667 21800.0000
-3672 38066.6667 21850.0000
-3673 38066.6667 21900.0000
-3674 38066.6667 21933.3333
-3675 38066.6667 21950.0000
-3676 38066.6667 22033.3333
-3677 38066.6667 22233.3333
-3678 38066.6667 22316.6667
-3679 38066.6667 22333.3333
-3680 38066.6667 22350.0000
-3681 38066.6667 22400.0000
-3682 38066.6667 22450.0000
-3683 38066.6667 22500.0000
-3684 38066.6667 22516.6667
-3685 38066.6667 22633.3333
-3686 38066.6667 22650.0000
-3687 38066.6667 22666.6667
-3688 38066.6667 23500.0000
-3689 38066.6667 23583.3333
-3690 38066.6667 23700.0000
-3691 38066.6667 23766.6667
-3692 38066.6667 23783.3333
-3693 38066.6667 23816.6667
-3694 38066.6667 24000.0000
-3695 38066.6667 24316.6667
-3696 38066.6667 24333.3333
-3697 38066.6667 24350.0000
-3698 38066.6667 24433.3333
-3699 38066.6667 24533.3333
-3700 38083.3333 20716.6667
-3701 38083.3333 20733.3333
-3702 38083.3333 20750.0000
-3703 38083.3333 20783.3333
-3704 38083.3333 21383.3333
-3705 38083.3333 21466.6667
-3706 38083.3333 21483.3333
-3707 38083.3333 21500.0000
-3708 38083.3333 21533.3333
-3709 38083.3333 21566.6667
-3710 38083.3333 21583.3333
-3711 38083.3333 21616.6667
-3712 38083.3333 21633.3333
-3713 38083.3333 21666.6667
-3714 38083.3333 21733.3333
-3715 38083.3333 21766.6667
-3716 38083.3333 21833.3333
-3717 38083.3333 21900.0000
-3718 38083.3333 21916.6667
-3719 38083.3333 22033.3333
-3720 38083.3333 22100.0000
-3721 38083.3333 22133.3333
-3722 38083.3333 22166.6667
-3723 38083.3333 22216.6667
-3724 38083.3333 22333.3333
-3725 38083.3333 22350.0000
-3726 38083.3333 22416.6667
-3727 38083.3333 22433.3333
-3728 38083.3333 22483.3333
-3729 38083.3333 22533.3333
-3730 38083.3333 22583.3333
-3731 38083.3333 22600.0000
-3732 38083.3333 22616.6667
-3733 38083.3333 22633.3333
-3734 38083.3333 23183.3333
-3735 38083.3333 23216.6667
-3736 38083.3333 23516.6667
-3737 38083.3333 23700.0000
-3738 38083.3333 23733.3333
-3739 38083.3333 23983.3333
-3740 38083.3333 24283.3333
-3741 38083.3333 24316.6667
-3742 38083.3333 24333.3333
-3743 38083.3333 24366.6667
-3744 38083.3333 24383.3333
-3745 38083.3333 24533.3333
-3746 38083.3333 24566.6667
-3747 38100.0000 20716.6667
-3748 38100.0000 20750.0000
-3749 38100.0000 20766.6667
-3750 38100.0000 20783.3333
-3751 38100.0000 21416.6667
-3752 38100.0000 21450.0000
-3753 38100.0000 21466.6667
-3754 38100.0000 21483.3333
-3755 38100.0000 21516.6667
-3756 38100.0000 21533.3333
-3757 38100.0000 21550.0000
-3758 38100.0000 21600.0000
-3759 38100.0000 21616.6667
-3760 38100.0000 21633.3333
-3761 38100.0000 21666.6667
-3762 38100.0000 21700.0000
-3763 38100.0000 21716.6667
-3764 38100.0000 21733.3333
-3765 38100.0000 21816.6667
-3766 38100.0000 21833.3333
-3767 38100.0000 21916.6667
-3768 38100.0000 22033.3333
-3769 38100.0000 22100.0000
-3770 38100.0000 22133.3333
-3771 38100.0000 22166.6667
-3772 38100.0000 22233.3333
-3773 38100.0000 22283.3333
-3774 38100.0000 22316.6667
-3775 38100.0000 22333.3333
-3776 38100.0000 22350.0000
-3777 38100.0000 22366.6667
-3778 38100.0000 22450.0000
-3779 38100.0000 22483.3333
-3780 38100.0000 22533.3333
-3781 38100.0000 22566.6667
-3782 38100.0000 22583.3333
-3783 38100.0000 23666.6667
-3784 38100.0000 23816.6667
-3785 38100.0000 23883.3333
-3786 38100.0000 24250.0000
-3787 38100.0000 24333.3333
-3788 38100.0000 24400.0000
-3789 38100.0000 24433.3333
-3790 38100.0000 24483.3333
-3791 38100.0000 24566.6667
-3792 38116.6667 20516.6667
-3793 38116.6667 20533.3333
-3794 38116.6667 20550.0000
-3795 38116.6667 20566.6667
-3796 38116.6667 20583.3333
-3797 38116.6667 20633.3333
-3798 38116.6667 20650.0000
-3799 38116.6667 20750.0000
-3800 38116.6667 20766.6667
-3801 38116.6667 20783.3333
-3802 38116.6667 21466.6667
-3803 38116.6667 21483.3333
-3804 38116.6667 21500.0000
-3805 38116.6667 21516.6667
-3806 38116.6667 21566.6667
-3807 38116.6667 21583.3333
-3808 38116.6667 21600.0000
-3809 38116.6667 21633.3333
-3810 38116.6667 21650.0000
-3811 38116.6667 21666.6667
-3812 38116.6667 21716.6667
-3813 38116.6667 21783.3333
-3814 38116.6667 21900.0000
-3815 38116.6667 21933.3333
-3816 38116.6667 21966.6667
-3817 38116.6667 22066.6667
-3818 38116.6667 22083.3333
-3819 38116.6667 22116.6667
-3820 38116.6667 22216.6667
-3821 38116.6667 22283.3333
-3822 38116.6667 22383.3333
-3823 38116.6667 22400.0000
-3824 38116.6667 22433.3333
-3825 38116.6667 22466.6667
-3826 38116.6667 22483.3333
-3827 38116.6667 22533.3333
-3828 38116.6667 22550.0000
-3829 38116.6667 23400.0000
-3830 38116.6667 23833.3333
-3831 38116.6667 23850.0000
-3832 38116.6667 23866.6667
-3833 38116.6667 23883.3333
-3834 38116.6667 23950.0000
-3835 38116.6667 24216.6667
-3836 38116.6667 24300.0000
-3837 38116.6667 24316.6667
-3838 38116.6667 24483.3333
-3839 38116.6667 24500.0000
-3840 38116.6667 24583.3333
-3841 38133.3333 20500.0000
-3842 38133.3333 20516.6667
-3843 38133.3333 20533.3333
-3844 38133.3333 20550.0000
-3845 38133.3333 20566.6667
-3846 38133.3333 20583.3333
-3847 38133.3333 20616.6667
-3848 38133.3333 20716.6667
-3849 38133.3333 20733.3333
-3850 38133.3333 20750.0000
-3851 38133.3333 21400.0000
-3852 38133.3333 21466.6667
-3853 38133.3333 21533.3333
-3854 38133.3333 21550.0000
-3855 38133.3333 21566.6667
-3856 38133.3333 21583.3333
-3857 38133.3333 21600.0000
-3858 38133.3333 21633.3333
-3859 38133.3333 21700.0000
-3860 38133.3333 21716.6667
-3861 38133.3333 21766.6667
-3862 38133.3333 21783.3333
-3863 38133.3333 21833.3333
-3864 38133.3333 21900.0000
-3865 38133.3333 21916.6667
-3866 38133.3333 21983.3333
-3867 38133.3333 22150.0000
-3868 38133.3333 22200.0000
-3869 38133.3333 22216.6667
-3870 38133.3333 22233.3333
-3871 38133.3333 22283.3333
-3872 38133.3333 22316.6667
-3873 38133.3333 22333.3333
-3874 38133.3333 22366.6667
-3875 38133.3333 22383.3333
-3876 38133.3333 22400.0000
-3877 38133.3333 22416.6667
-3878 38133.3333 22433.3333
-3879 38133.3333 22450.0000
-3880 38133.3333 22466.6667
-3881 38133.3333 22483.3333
-3882 38133.3333 22516.6667
-3883 38133.3333 23800.0000
-3884 38133.3333 23850.0000
-3885 38133.3333 23883.3333
-3886 38133.3333 24000.0000
-3887 38133.3333 24250.0000
-3888 38133.3333 24366.6667
-3889 38133.3333 24383.3333
-3890 38133.3333 24466.6667
-3891 38133.3333 24483.3333
-3892 38133.3333 24533.3333
-3893 38133.3333 24566.6667
-3894 38150.0000 20500.0000
-3895 38150.0000 20550.0000
-3896 38150.0000 20566.6667
-3897 38150.0000 20733.3333
-3898 38150.0000 20750.0000
-3899 38150.0000 20783.3333
-3900 38150.0000 21516.6667
-3901 38150.0000 21550.0000
-3902 38150.0000 21616.6667
-3903 38150.0000 21650.0000
-3904 38150.0000 21666.6667
-3905 38150.0000 21733.3333
-3906 38150.0000 21750.0000
-3907 38150.0000 21800.0000
-3908 38150.0000 21833.3333
-3909 38150.0000 21850.0000
-3910 38150.0000 21866.6667
-3911 38150.0000 21900.0000
-3912 38150.0000 22033.3333
-3913 38150.0000 22066.6667
-3914 38150.0000 22166.6667
-3915 38150.0000 22183.3333
-3916 38150.0000 22200.0000
-3917 38150.0000 22266.6667
-3918 38150.0000 22283.3333
-3919 38150.0000 22300.0000
-3920 38150.0000 22316.6667
-3921 38150.0000 22333.3333
-3922 38150.0000 22350.0000
-3923 38150.0000 23233.3333
-3924 38150.0000 23533.3333
-3925 38150.0000 23716.6667
-3926 38150.0000 23833.3333
-3927 38150.0000 23850.0000
-3928 38150.0000 23866.6667
-3929 38150.0000 23966.6667
-3930 38150.0000 24233.3333
-3931 38150.0000 24316.6667
-3932 38150.0000 24350.0000
-3933 38150.0000 24383.3333
-3934 38150.0000 24400.0000
-3935 38166.6667 20483.3333
-3936 38166.6667 20550.0000
-3937 38166.6667 20600.0000
-3938 38166.6667 20666.6667
-3939 38166.6667 20683.3333
-3940 38166.6667 20700.0000
-3941 38166.6667 20716.6667
-3942 38166.6667 21416.6667
-3943 38166.6667 21450.0000
-3944 38166.6667 21466.6667
-3945 38166.6667 21483.3333
-3946 38166.6667 21666.6667
-3947 38166.6667 21683.3333
-3948 38166.6667 21700.0000
-3949 38166.6667 21716.6667
-3950 38166.6667 21733.3333
-3951 38166.6667 21816.6667
-3952 38166.6667 21850.0000
-3953 38166.6667 22000.0000
-3954 38166.6667 22066.6667
-3955 38166.6667 22100.0000
-3956 38166.6667 22133.3333
-3957 38166.6667 22233.3333
-3958 38166.6667 22266.6667
-3959 38166.6667 22283.3333
-3960 38166.6667 22316.6667
-3961 38166.6667 22333.3333
-3962 38166.6667 22350.0000
-3963 38166.6667 23333.3333
-3964 38166.6667 23416.6667
-3965 38166.6667 23783.3333
-3966 38166.6667 23866.6667
-3967 38166.6667 24000.0000
-3968 38166.6667 24233.3333
-3969 38166.6667 24250.0000
-3970 38166.6667 24266.6667
-3971 38166.6667 24316.6667
-3972 38183.3333 20383.3333
-3973 38183.3333 20400.0000
-3974 38183.3333 20416.6667
-3975 38183.3333 20433.3333
-3976 38183.3333 20483.3333
-3977 38183.3333 20533.3333
-3978 38183.3333 20583.3333
-3979 38183.3333 20683.3333
-3980 38183.3333 20700.0000
-3981 38183.3333 21383.3333
-3982 38183.3333 21416.6667
-3983 38183.3333 21433.3333
-3984 38183.3333 21683.3333
-3985 38183.3333 21700.0000
-3986 38183.3333 21716.6667
-3987 38183.3333 21733.3333
-3988 38183.3333 21750.0000
-3989 38183.3333 21766.6667
-3990 38183.3333 21816.6667
-3991 38183.3333 21950.0000
-3992 38183.3333 21983.3333
-3993 38183.3333 22066.6667
-3994 38183.3333 22133.3333
-3995 38183.3333 22150.0000
-3996 38183.3333 22183.3333
-3997 38183.3333 22266.6667
-3998 38183.3333 23150.0000
-3999 38183.3333 23383.3333
-4000 38183.3333 23500.0000
-4001 38183.3333 23516.6667
-4002 38183.3333 23550.0000
-4003 38183.3333 23850.0000
-4004 38183.3333 23916.6667
-4005 38183.3333 23983.3333
-4006 38183.3333 24033.3333
-4007 38183.3333 24200.0000
-4008 38183.3333 24233.3333
-4009 38183.3333 24266.6667
-4010 38183.3333 26016.6667
-4011 38200.0000 20383.3333
-4012 38200.0000 20400.0000
-4013 38200.0000 20416.6667
-4014 38200.0000 20433.3333
-4015 38200.0000 20516.6667
-4016 38200.0000 20666.6667
-4017 38200.0000 21700.0000
-4018 38200.0000 21733.3333
-4019 38200.0000 22000.0000
-4020 38200.0000 22050.0000
-4021 38200.0000 22083.3333
-4022 38200.0000 22116.6667
-4023 38200.0000 22150.0000
-4024 38200.0000 22166.6667
-4025 38200.0000 22200.0000
-4026 38200.0000 23050.0000
-4027 38200.0000 23116.6667
-4028 38200.0000 23966.6667
-4029 38200.0000 24200.0000
-4030 38216.6667 20383.3333
-4031 38216.6667 20400.0000
-4032 38216.6667 20500.0000
-4033 38216.6667 20516.6667
-4034 38216.6667 20616.6667
-4035 38216.6667 20650.0000
-4036 38216.6667 20666.6667
-4037 38216.6667 21716.6667
-4038 38216.6667 21733.3333
-4039 38216.6667 21750.0000
-4040 38216.6667 21766.6667
-4041 38216.6667 21783.3333
-4042 38216.6667 21800.0000
-4043 38216.6667 21816.6667
-4044 38216.6667 21900.0000
-4045 38216.6667 21966.6667
-4046 38216.6667 22033.3333
-4047 38216.6667 22066.6667
-4048 38216.6667 22100.0000
-4049 38216.6667 22116.6667
-4050 38216.6667 22133.3333
-4051 38216.6667 23266.6667
-4052 38216.6667 23316.6667
-4053 38216.6667 23500.0000
-4054 38216.6667 23550.0000
-4055 38216.6667 23616.6667
-4056 38216.6667 23783.3333
-4057 38216.6667 23833.3333
-4058 38216.6667 23866.6667
-4059 38216.6667 23883.3333
-4060 38216.6667 23916.6667
-4061 38216.6667 24250.0000
-4062 38233.3333 20366.6667
-4063 38233.3333 20383.3333
-4064 38233.3333 20400.0000
-4065 38233.3333 20416.6667
-4066 38233.3333 20483.3333
-4067 38233.3333 20600.0000
-4068 38233.3333 20650.0000
-4069 38233.3333 21733.3333
-4070 38233.3333 21750.0000
-4071 38233.3333 21766.6667
-4072 38233.3333 21783.3333
-4073 38233.3333 21916.6667
-4074 38233.3333 21966.6667
-4075 38233.3333 21983.3333
-4076 38233.3333 22033.3333
-4077 38233.3333 22083.3333
-4078 38233.3333 22100.0000
-4079 38233.3333 22116.6667
-4080 38233.3333 22133.3333
-4081 38233.3333 23216.6667
-4082 38233.3333 23416.6667
-4083 38233.3333 23800.0000
-4084 38233.3333 23900.0000
-4085 38233.3333 24216.6667
-4086 38233.3333 26000.0000
-4087 38233.3333 26050.0000
-4088 38233.3333 26066.6667
-4089 38233.3333 26083.3333
-4090 38233.3333 26100.0000
-4091 38250.0000 20383.3333
-4092 38250.0000 20400.0000
-4093 38250.0000 20600.0000
-4094 38250.0000 20650.0000
-4095 38250.0000 21733.3333
-4096 38250.0000 21750.0000
-4097 38250.0000 21800.0000
-4098 38250.0000 21933.3333
-4099 38250.0000 21950.0000
-4100 38250.0000 21966.6667
-4101 38250.0000 21983.3333
-4102 38250.0000 22000.0000
-4103 38250.0000 22016.6667
-4104 38250.0000 22050.0000
-4105 38250.0000 22083.3333
-4106 38250.0000 22116.6667
-4107 38250.0000 22983.3333
-4108 38250.0000 23066.6667
-4109 38250.0000 23183.3333
-4110 38250.0000 23266.6667
-4111 38250.0000 23466.6667
-4112 38250.0000 23700.0000
-4113 38250.0000 24200.0000
-4114 38250.0000 24216.6667
-4115 38250.0000 25933.3333
-4116 38250.0000 26033.3333
-4117 38250.0000 26066.6667
-4118 38250.0000 26083.3333
-4119 38250.0000 26100.0000
-4120 38266.6667 20466.6667
-4121 38266.6667 20683.3333
-4122 38266.6667 21733.3333
-4123 38266.6667 21750.0000
-4124 38266.6667 21766.6667
-4125 38266.6667 21783.3333
-4126 38266.6667 21816.6667
-4127 38266.6667 21833.3333
-4128 38266.6667 21900.0000
-4129 38266.6667 21916.6667
-4130 38266.6667 21933.3333
-4131 38266.6667 21966.6667
-4132 38266.6667 21983.3333
-4133 38266.6667 22000.0000
-4134 38266.6667 22016.6667
-4135 38266.6667 22050.0000
-4136 38266.6667 22916.6667
-4137 38266.6667 22966.6667
-4138 38266.6667 23116.6667
-4139 38266.6667 23233.3333
-4140 38266.6667 23566.6667
-4141 38266.6667 23800.0000
-4142 38266.6667 23816.6667
-4143 38266.6667 24166.6667
-4144 38266.6667 24183.3333
-4145 38266.6667 25916.6667
-4146 38266.6667 26066.6667
-4147 38266.6667 26083.3333
-4148 38266.6667 26100.0000
-4149 38283.3333 20433.3333
-4150 38283.3333 20466.6667
-4151 38283.3333 20583.3333
-4152 38283.3333 21766.6667
-4153 38283.3333 21800.0000
-4154 38283.3333 21866.6667
-4155 38283.3333 21883.3333
-4156 38283.3333 21900.0000
-4157 38283.3333 21966.6667
-4158 38283.3333 22000.0000
-4159 38283.3333 22033.3333
-4160 38283.3333 22766.6667
-4161 38283.3333 22783.3333
-4162 38283.3333 22800.0000
-4163 38283.3333 23266.6667
-4164 38283.3333 23350.0000
-4165 38283.3333 23583.3333
-4166 38283.3333 23750.0000
-4167 38283.3333 23800.0000
-4168 38283.3333 23816.6667
-4169 38283.3333 23833.3333
-4170 38283.3333 23866.6667
-4171 38283.3333 24133.3333
-4172 38283.3333 25983.3333
-4173 38283.3333 26083.3333
-4174 38300.0000 20483.3333
-4175 38300.0000 20550.0000
-4176 38300.0000 20566.6667
-4177 38300.0000 20583.3333
-4178 38300.0000 20600.0000
-4179 38300.0000 21783.3333
-4180 38300.0000 21800.0000
-4181 38300.0000 21833.3333
-4182 38300.0000 21900.0000
-4183 38300.0000 21950.0000
-4184 38300.0000 21983.3333
-4185 38300.0000 22000.0000
-4186 38300.0000 22016.6667
-4187 38300.0000 22550.0000
-4188 38300.0000 22583.3333
-4189 38300.0000 23116.6667
-4190 38300.0000 23150.0000
-4191 38300.0000 23166.6667
-4192 38300.0000 23266.6667
-4193 38300.0000 23316.6667
-4194 38300.0000 23383.3333
-4195 38300.0000 23500.0000
-4196 38300.0000 23733.3333
-4197 38300.0000 23750.0000
-4198 38300.0000 23900.0000
-4199 38300.0000 24116.6667
-4200 38300.0000 24200.0000
-4201 38300.0000 26016.6667
-4202 38300.0000 26066.6667
-4203 38300.0000 26100.0000
-4204 38300.0000 26116.6667
-4205 38316.6667 20416.6667
-4206 38316.6667 20466.6667
-4207 38316.6667 20550.0000
-4208 38316.6667 20566.6667
-4209 38316.6667 20583.3333
-4210 38316.6667 21816.6667
-4211 38316.6667 21850.0000
-4212 38316.6667 21983.3333
-4213 38316.6667 22583.3333
-4214 38316.6667 22900.0000
-4215 38316.6667 23116.6667
-4216 38316.6667 23183.3333
-4217 38316.6667 23316.6667
-4218 38316.6667 23333.3333
-4219 38316.6667 23450.0000
-4220 38316.6667 23533.3333
-4221 38316.6667 23616.6667
-4222 38316.6667 23633.3333
-4223 38316.6667 23800.0000
-4224 38316.6667 24150.0000
-4225 38316.6667 26050.0000
-4226 38316.6667 26100.0000
-4227 38316.6667 26133.3333
-4228 38333.3333 20550.0000
-4229 38333.3333 21566.6667
-4230 38333.3333 21766.6667
-4231 38333.3333 21850.0000
-4232 38333.3333 21866.6667
-4233 38333.3333 23133.3333
-4234 38333.3333 23316.6667
-4235 38333.3333 23733.3333
-4236 38333.3333 23783.3333
-4237 38333.3333 26000.0000
-4238 38333.3333 26083.3333
-4239 38333.3333 26100.0000
-4240 38333.3333 26116.6667
-4241 38350.0000 20616.6667
-4242 38350.0000 20683.3333
-4243 38350.0000 20716.6667
-4244 38350.0000 21533.3333
-4245 38350.0000 21566.6667
-4246 38350.0000 21600.0000
-4247 38350.0000 21633.3333
-4248 38350.0000 21650.0000
-4249 38350.0000 21700.0000
-4250 38350.0000 21716.6667
-4251 38350.0000 21733.3333
-4252 38350.0000 21750.0000
-4253 38350.0000 22783.3333
-4254 38350.0000 22916.6667
-4255 38350.0000 23016.6667
-4256 38350.0000 23483.3333
-4257 38350.0000 23583.3333
-4258 38350.0000 23666.6667
-4259 38350.0000 24100.0000
-4260 38350.0000 24150.0000
-4261 38350.0000 26083.3333
-4262 38366.6667 20566.6667
-4263 38366.6667 20583.3333
-4264 38366.6667 20600.0000
-4265 38366.6667 20716.6667
-4266 38366.6667 21433.3333
-4267 38366.6667 21533.3333
-4268 38366.6667 21566.6667
-4269 38366.6667 21633.3333
-4270 38366.6667 21666.6667
-4271 38366.6667 21716.6667
-4272 38366.6667 21750.0000
-4273 38366.6667 21766.6667
-4274 38366.6667 21783.3333
-4275 38366.6667 22083.3333
-4276 38366.6667 22133.3333
-4277 38366.6667 22200.0000
-4278 38366.6667 22233.3333
-4279 38366.6667 22250.0000
-4280 38366.6667 22283.3333
-4281 38366.6667 22833.3333
-4282 38366.6667 22933.3333
-4283 38366.6667 22966.6667
-4284 38366.6667 23016.6667
-4285 38366.6667 23066.6667
-4286 38366.6667 23083.3333
-4287 38366.6667 23100.0000
-4288 38366.6667 23450.0000
-4289 38366.6667 24183.3333
-4290 38366.6667 26133.3333
-4291 38383.3333 20533.3333
-4292 38383.3333 20550.0000
-4293 38383.3333 20566.6667
-4294 38383.3333 20583.3333
-4295 38383.3333 20666.6667
-4296 38383.3333 21500.0000
-4297 38383.3333 21533.3333
-4298 38383.3333 21566.6667
-4299 38383.3333 21600.0000
-4300 38383.3333 21633.3333
-4301 38383.3333 21683.3333
-4302 38383.3333 21716.6667
-4303 38383.3333 21800.0000
-4304 38383.3333 21850.0000
-4305 38383.3333 21916.6667
-4306 38383.3333 22116.6667
-4307 38383.3333 22383.3333
-4308 38383.3333 22633.3333
-4309 38383.3333 23000.0000
-4310 38383.3333 23400.0000
-4311 38383.3333 23600.0000
-4312 38383.3333 23633.3333
-4313 38383.3333 24050.0000
-4314 38383.3333 24066.6667
-4315 38383.3333 24083.3333
-4316 38383.3333 24116.6667
-4317 38383.3333 24133.3333
-4318 38383.3333 24166.6667
-4319 38383.3333 26016.6667
-4320 38383.3333 26100.0000
-4321 38400.0000 20550.0000
-4322 38400.0000 20566.6667
-4323 38400.0000 20583.3333
-4324 38400.0000 21266.6667
-4325 38400.0000 21433.3333
-4326 38400.0000 21483.3333
-4327 38400.0000 21533.3333
-4328 38400.0000 21550.0000
-4329 38400.0000 21650.0000
-4330 38400.0000 21733.3333
-4331 38400.0000 21750.0000
-4332 38400.0000 21766.6667
-4333 38400.0000 21783.3333
-4334 38400.0000 21800.0000
-4335 38400.0000 21816.6667
-4336 38400.0000 21833.3333
-4337 38400.0000 21866.6667
-4338 38400.0000 21883.3333
-4339 38400.0000 21900.0000
-4340 38400.0000 22000.0000
-4341 38400.0000 22016.6667
-4342 38400.0000 22050.0000
-4343 38400.0000 22150.0000
-4344 38400.0000 22716.6667
-4345 38400.0000 22933.3333
-4346 38400.0000 22983.3333
-4347 38400.0000 23600.0000
-4348 38400.0000 23616.6667
-4349 38400.0000 23633.3333
-4350 38400.0000 23766.6667
-4351 38400.0000 23800.0000
-4352 38400.0000 23883.3333
-4353 38400.0000 23916.6667
-4354 38400.0000 24050.0000
-4355 38400.0000 24083.3333
-4356 38400.0000 24100.0000
-4357 38400.0000 24133.3333
-4358 38400.0000 24166.6667
-4359 38400.0000 26016.6667
-4360 38416.6667 20550.0000
-4361 38416.6667 20566.6667
-4362 38416.6667 20650.0000
-4363 38416.6667 20666.6667
-4364 38416.6667 21250.0000
-4365 38416.6667 21283.3333
-4366 38416.6667 21316.6667
-4367 38416.6667 21466.6667
-4368 38416.6667 21516.6667
-4369 38416.6667 21566.6667
-4370 38416.6667 21616.6667
-4371 38416.6667 21633.3333
-4372 38416.6667 21750.0000
-4373 38416.6667 21766.6667
-4374 38416.6667 21783.3333
-4375 38416.6667 21816.6667
-4376 38416.6667 21833.3333
-4377 38416.6667 21850.0000
-4378 38416.6667 21866.6667
-4379 38416.6667 21883.3333
-4380 38416.6667 21900.0000
-4381 38416.6667 21933.3333
-4382 38416.6667 21950.0000
-4383 38416.6667 21966.6667
-4384 38416.6667 21983.3333
-4385 38416.6667 22000.0000
-4386 38416.6667 22016.6667
-4387 38416.6667 22050.0000
-4388 38416.6667 22100.0000
-4389 38416.6667 22183.3333
-4390 38416.6667 22216.6667
-4391 38416.6667 22316.6667
-4392 38416.6667 22533.3333
-4393 38416.6667 22816.6667
-4394 38416.6667 22833.3333
-4395 38416.6667 22983.3333
-4396 38416.6667 23000.0000
-4397 38416.6667 23016.6667
-4398 38416.6667 23350.0000
-4399 38416.6667 23516.6667
-4400 38416.6667 23650.0000
-4401 38416.6667 23683.3333
-4402 38416.6667 23816.6667
-4403 38416.6667 23833.3333
-4404 38416.6667 24033.3333
-4405 38416.6667 24100.0000
-4406 38416.6667 24133.3333
-4407 38416.6667 24200.0000
-4408 38416.6667 26133.3333
-4409 38433.3333 20550.0000
-4410 38433.3333 20566.6667
-4411 38433.3333 20583.3333
-4412 38433.3333 21283.3333
-4413 38433.3333 21350.0000
-4414 38433.3333 21416.6667
-4415 38433.3333 21516.6667
-4416 38433.3333 21600.0000
-4417 38433.3333 21633.3333
-4418 38433.3333 21716.6667
-4419 38433.3333 21750.0000
-4420 38433.3333 21766.6667
-4421 38433.3333 21833.3333
-4422 38433.3333 21866.6667
-4423 38433.3333 21950.0000
-4424 38433.3333 21966.6667
-4425 38433.3333 21983.3333
-4426 38433.3333 22066.6667
-4427 38433.3333 22116.6667
-4428 38433.3333 22416.6667
-4429 38433.3333 22450.0000
-4430 38433.3333 22666.6667
-4431 38433.3333 22833.3333
-4432 38433.3333 22883.3333
-4433 38433.3333 22900.0000
-4434 38433.3333 22916.6667
-4435 38433.3333 22966.6667
-4436 38433.3333 22983.3333
-4437 38433.3333 23033.3333
-4438 38433.3333 23300.0000
-4439 38433.3333 23400.0000
-4440 38433.3333 23600.0000
-4441 38433.3333 23633.3333
-4442 38433.3333 23650.0000
-4443 38433.3333 23666.6667
-4444 38433.3333 23683.3333
-4445 38433.3333 23883.3333
-4446 38433.3333 23900.0000
-4447 38433.3333 24033.3333
-4448 38433.3333 24066.6667
-4449 38433.3333 24116.6667
-4450 38433.3333 25966.6667
-4451 38450.0000 20533.3333
-4452 38450.0000 20550.0000
-4453 38450.0000 20566.6667
-4454 38450.0000 20583.3333
-4455 38450.0000 20633.3333
-4456 38450.0000 20650.0000
-4457 38450.0000 20666.6667
-4458 38450.0000 20683.3333
-4459 38450.0000 21116.6667
-4460 38450.0000 21233.3333
-4461 38450.0000 21383.3333
-4462 38450.0000 21400.0000
-4463 38450.0000 21516.6667
-4464 38450.0000 21583.3333
-4465 38450.0000 21600.0000
-4466 38450.0000 21633.3333
-4467 38450.0000 21666.6667
-4468 38450.0000 21683.3333
-4469 38450.0000 21700.0000
-4470 38450.0000 21800.0000
-4471 38450.0000 21816.6667
-4472 38450.0000 21916.6667
-4473 38450.0000 21983.3333
-4474 38450.0000 22000.0000
-4475 38450.0000 22033.3333
-4476 38450.0000 22150.0000
-4477 38450.0000 22233.3333
-4478 38450.0000 22300.0000
-4479 38450.0000 22366.6667
-4480 38450.0000 22816.6667
-4481 38450.0000 22833.3333
-4482 38450.0000 22866.6667
-4483 38450.0000 23000.0000
-4484 38450.0000 23216.6667
-4485 38450.0000 23683.3333
-4486 38450.0000 23816.6667
-4487 38450.0000 24000.0000
-4488 38450.0000 24016.6667
-4489 38450.0000 24083.3333
-4490 38450.0000 24116.6667
-4491 38450.0000 24133.3333
-4492 38450.0000 24150.0000
-4493 38450.0000 24166.6667
-4494 38466.6667 20550.0000
-4495 38466.6667 20566.6667
-4496 38466.6667 20583.3333
-4497 38466.6667 20633.3333
-4498 38466.6667 20650.0000
-4499 38466.6667 21266.6667
-4500 38466.6667 21366.6667
-4501 38466.6667 21500.0000
-4502 38466.6667 21566.6667
-4503 38466.6667 21583.3333
-4504 38466.6667 21600.0000
-4505 38466.6667 21616.6667
-4506 38466.6667 21650.0000
-4507 38466.6667 21700.0000
-4508 38466.6667 21733.3333
-4509 38466.6667 21800.0000
-4510 38466.6667 21816.6667
-4511 38466.6667 21866.6667
-4512 38466.6667 21933.3333
-4513 38466.6667 21950.0000
-4514 38466.6667 22100.0000
-4515 38466.6667 22183.3333
-4516 38466.6667 22466.6667
-4517 38466.6667 22783.3333
-4518 38466.6667 22800.0000
-4519 38466.6667 22866.6667
-4520 38466.6667 22950.0000
-4521 38466.6667 22966.6667
-4522 38466.6667 23000.0000
-4523 38466.6667 23283.3333
-4524 38466.6667 23583.3333
-4525 38466.6667 23600.0000
-4526 38466.6667 23650.0000
-4527 38466.6667 23766.6667
-4528 38466.6667 23966.6667
-4529 38466.6667 24116.6667
-4530 38466.6667 24150.0000
-4531 38466.6667 25916.6667
-4532 38466.6667 25966.6667
-4533 38466.6667 26116.6667
-4534 38483.3333 20666.6667
-4535 38483.3333 21100.0000
-4536 38483.3333 21250.0000
-4537 38483.3333 21283.3333
-4538 38483.3333 21350.0000
-4539 38483.3333 21416.6667
-4540 38483.3333 21450.0000
-4541 38483.3333 21583.3333
-4542 38483.3333 21633.3333
-4543 38483.3333 21650.0000
-4544 38483.3333 21666.6667
-4545 38483.3333 21766.6667
-4546 38483.3333 21833.3333
-4547 38483.3333 21850.0000
-4548 38483.3333 22016.6667
-4549 38483.3333 22033.3333
-4550 38483.3333 22050.0000
-4551 38483.3333 22083.3333
-4552 38483.3333 22166.6667
-4553 38483.3333 22183.3333
-4554 38483.3333 22366.6667
-4555 38483.3333 22400.0000
-4556 38483.3333 22500.0000
-4557 38483.3333 22583.3333
-4558 38483.3333 22883.3333
-4559 38483.3333 22933.3333
-4560 38483.3333 23100.0000
-4561 38483.3333 23233.3333
-4562 38483.3333 23450.0000
-4563 38483.3333 23550.0000
-4564 38483.3333 23750.0000
-4565 38483.3333 23800.0000
-4566 38483.3333 23900.0000
-4567 38483.3333 24116.6667
-4568 38483.3333 24133.3333
-4569 38483.3333 24166.6667
-4570 38483.3333 25916.6667
-4571 38483.3333 26050.0000
-4572 38500.0000 21350.0000
-4573 38500.0000 21383.3333
-4574 38500.0000 21483.3333
-4575 38500.0000 21516.6667
-4576 38500.0000 21550.0000
-4577 38500.0000 21583.3333
-4578 38500.0000 21600.0000
-4579 38500.0000 21616.6667
-4580 38500.0000 21633.3333
-4581 38500.0000 21650.0000
-4582 38500.0000 21666.6667
-4583 38500.0000 21700.0000
-4584 38500.0000 21800.0000
-4585 38500.0000 21833.3333
-4586 38500.0000 21850.0000
-4587 38500.0000 21883.3333
-4588 38500.0000 22133.3333
-4589 38500.0000 22233.3333
-4590 38500.0000 22383.3333
-4591 38500.0000 22800.0000
-4592 38500.0000 22850.0000
-4593 38500.0000 22883.3333
-4594 38500.0000 22933.3333
-4595 38500.0000 22983.3333
-4596 38500.0000 23166.6667
-4597 38500.0000 23266.6667
-4598 38500.0000 23616.6667
-4599 38500.0000 23966.6667
-4600 38500.0000 24016.6667
-4601 38500.0000 24083.3333
-4602 38500.0000 24116.6667
-4603 38500.0000 24133.3333
-4604 38500.0000 25916.6667
-4605 38516.6667 21283.3333
-4606 38516.6667 21383.3333
-4607 38516.6667 21433.3333
-4608 38516.6667 21466.6667
-4609 38516.6667 21533.3333
-4610 38516.6667 21550.0000
-4611 38516.6667 21566.6667
-4612 38516.6667 21666.6667
-4613 38516.6667 21683.3333
-4614 38516.6667 21716.6667
-4615 38516.6667 21766.6667
-4616 38516.6667 21783.3333
-4617 38516.6667 21833.3333
-4618 38516.6667 21866.6667
-4619 38516.6667 21883.3333
-4620 38516.6667 21916.6667
-4621 38516.6667 21950.0000
-4622 38516.6667 21966.6667
-4623 38516.6667 22166.6667
-4624 38516.6667 22383.3333
-4625 38516.6667 22550.0000
-4626 38516.6667 22733.3333
-4627 38516.6667 22783.3333
-4628 38516.6667 22950.0000
-4629 38516.6667 23033.3333
-4630 38516.6667 23633.3333
-4631 38516.6667 23650.0000
-4632 38516.6667 23783.3333
-4633 38516.6667 23850.0000
-4634 38516.6667 23983.3333
-4635 38516.6667 24000.0000
-4636 38516.6667 24033.3333
-4637 38516.6667 24100.0000
-4638 38516.6667 24133.3333
-4639 38516.6667 24150.0000
-4640 38516.6667 24166.6667
-4641 38516.6667 25883.3333
-4642 38516.6667 26216.6667
-4643 38533.3333 21083.3333
-4644 38533.3333 21183.3333
-4645 38533.3333 21216.6667
-4646 38533.3333 21366.6667
-4647 38533.3333 21383.3333
-4648 38533.3333 21400.0000
-4649 38533.3333 21416.6667
-4650 38533.3333 21433.3333
-4651 38533.3333 21450.0000
-4652 38533.3333 21500.0000
-4653 38533.3333 21533.3333
-4654 38533.3333 21550.0000
-4655 38533.3333 21566.6667
-4656 38533.3333 21683.3333
-4657 38533.3333 21700.0000
-4658 38533.3333 21766.6667
-4659 38533.3333 21816.6667
-4660 38533.3333 21833.3333
-4661 38533.3333 21900.0000
-4662 38533.3333 21916.6667
-4663 38533.3333 21933.3333
-4664 38533.3333 21983.3333
-4665 38533.3333 22033.3333
-4666 38533.3333 22100.0000
-4667 38533.3333 22200.0000
-4668 38533.3333 22266.6667
-4669 38533.3333 22383.3333
-4670 38533.3333 22500.0000
-4671 38533.3333 22850.0000
-4672 38533.3333 23016.6667
-4673 38533.3333 23100.0000
-4674 38533.3333 23716.6667
-4675 38533.3333 23816.6667
-4676 38533.3333 23850.0000
-4677 38533.3333 23916.6667
-4678 38533.3333 23933.3333
-4679 38533.3333 23983.3333
-4680 38533.3333 24050.0000
-4681 38533.3333 24066.6667
-4682 38533.3333 24083.3333
-4683 38533.3333 24116.6667
-4684 38533.3333 24133.3333
-4685 38533.3333 25566.6667
-4686 38533.3333 25933.3333
-4687 38533.3333 25950.0000
-4688 38533.3333 26100.0000
-4689 38533.3333 26116.6667
-4690 38550.0000 21233.3333
-4691 38550.0000 21333.3333
-4692 38550.0000 21366.6667
-4693 38550.0000 21383.3333
-4694 38550.0000 21533.3333
-4695 38550.0000 21650.0000
-4696 38550.0000 21666.6667
-4697 38550.0000 21700.0000
-4698 38550.0000 21800.0000
-4699 38550.0000 21816.6667
-4700 38550.0000 21866.6667
-4701 38550.0000 22016.6667
-4702 38550.0000 22066.6667
-4703 38550.0000 22116.6667
-4704 38550.0000 22166.6667
-4705 38550.0000 22416.6667
-4706 38550.0000 22833.3333
-4707 38550.0000 23083.3333
-4708 38550.0000 23783.3333
-4709 38550.0000 23850.0000
-4710 38550.0000 23900.0000
-4711 38550.0000 24000.0000
-4712 38550.0000 24050.0000
-4713 38550.0000 24083.3333
-4714 38550.0000 25850.0000
-4715 38550.0000 25933.3333
-4716 38566.6667 20916.6667
-4717 38566.6667 21100.0000
-4718 38566.6667 21300.0000
-4719 38566.6667 21633.3333
-4720 38566.6667 21650.0000
-4721 38566.6667 21666.6667
-4722 38566.6667 21683.3333
-4723 38566.6667 21700.0000
-4724 38566.6667 21850.0000
-4725 38566.6667 21916.6667
-4726 38566.6667 21966.6667
-4727 38566.6667 22016.6667
-4728 38566.6667 22150.0000
-4729 38566.6667 22700.0000
-4730 38566.6667 22750.0000
-4731 38566.6667 22783.3333
-4732 38566.6667 22866.6667
-4733 38566.6667 23100.0000
-4734 38566.6667 23216.6667
-4735 38566.6667 23283.3333
-4736 38566.6667 23600.0000
-4737 38566.6667 23633.3333
-4738 38566.6667 23766.6667
-4739 38566.6667 23816.6667
-4740 38566.6667 23833.3333
-4741 38566.6667 23850.0000
-4742 38566.6667 24050.0000
-4743 38566.6667 24066.6667
-4744 38566.6667 24083.3333
-4745 38566.6667 25866.6667
-4746 38566.6667 25883.3333
-4747 38566.6667 25916.6667
-4748 38566.6667 25950.0000
-4749 38566.6667 25983.3333
-4750 38566.6667 26033.3333
-4751 38583.3333 20550.0000
-4752 38583.3333 21066.6667
-4753 38583.3333 21150.0000
-4754 38583.3333 21166.6667
-4755 38583.3333 21233.3333
-4756 38583.3333 21383.3333
-4757 38583.3333 21450.0000
-4758 38583.3333 21616.6667
-4759 38583.3333 21633.3333
-4760 38583.3333 21650.0000
-4761 38583.3333 21666.6667
-4762 38583.3333 21683.3333
-4763 38583.3333 21716.6667
-4764 38583.3333 21750.0000
-4765 38583.3333 21833.3333
-4766 38583.3333 21883.3333
-4767 38583.3333 21933.3333
-4768 38583.3333 21983.3333
-4769 38583.3333 22050.0000
-4770 38583.3333 22333.3333
-4771 38583.3333 22416.6667
-4772 38583.3333 22666.6667
-4773 38583.3333 22750.0000
-4774 38583.3333 22800.0000
-4775 38583.3333 22950.0000
-4776 38583.3333 23033.3333
-4777 38583.3333 23550.0000
-4778 38583.3333 23633.3333
-4779 38583.3333 23716.6667
-4780 38583.3333 23766.6667
-4781 38583.3333 23800.0000
-4782 38583.3333 23833.3333
-4783 38583.3333 24050.0000
-4784 38583.3333 24066.6667
-4785 38583.3333 24083.3333
-4786 38583.3333 24100.0000
-4787 38583.3333 24116.6667
-4788 38583.3333 24133.3333
-4789 38583.3333 25916.6667
-4790 38583.3333 25966.6667
-4791 38583.3333 26016.6667
-4792 38600.0000 20883.3333
-4793 38600.0000 21083.3333
-4794 38600.0000 21183.3333
-4795 38600.0000 21316.6667
-4796 38600.0000 21400.0000
-4797 38600.0000 21450.0000
-4798 38600.0000 21483.3333
-4799 38600.0000 21500.0000
-4800 38600.0000 21550.0000
-4801 38600.0000 21566.6667
-4802 38600.0000 21583.3333
-4803 38600.0000 21600.0000
-4804 38600.0000 21650.0000
-4805 38600.0000 21666.6667
-4806 38600.0000 21733.3333
-4807 38600.0000 21800.0000
-4808 38600.0000 21850.0000
-4809 38600.0000 21933.3333
-4810 38600.0000 22050.0000
-4811 38600.0000 22116.6667
-4812 38600.0000 22183.3333
-4813 38600.0000 22500.0000
-4814 38600.0000 22716.6667
-4815 38600.0000 22766.6667
-4816 38600.0000 22850.0000
-4817 38600.0000 23216.6667
-4818 38600.0000 23550.0000
-4819 38600.0000 23666.6667
-4820 38600.0000 23783.3333
-4821 38600.0000 24083.3333
-4822 38600.0000 24100.0000
-4823 38600.0000 24116.6667
-4824 38616.6667 20600.0000
-4825 38616.6667 20666.6667
-4826 38616.6667 20683.3333
-4827 38616.6667 20933.3333
-4828 38616.6667 21216.6667
-4829 38616.6667 21300.0000
-4830 38616.6667 21316.6667
-4831 38616.6667 21383.3333
-4832 38616.6667 21450.0000
-4833 38616.6667 21500.0000
-4834 38616.6667 21516.6667
-4835 38616.6667 21533.3333
-4836 38616.6667 21566.6667
-4837 38616.6667 21600.0000
-4838 38616.6667 21616.6667
-4839 38616.6667 21683.3333
-4840 38616.6667 21700.0000
-4841 38616.6667 21783.3333
-4842 38616.6667 21883.3333
-4843 38616.6667 22200.0000
-4844 38616.6667 22550.0000
-4845 38616.6667 22650.0000
-4846 38616.6667 23116.6667
-4847 38616.6667 23166.6667
-4848 38616.6667 23233.3333
-4849 38616.6667 23533.3333
-4850 38616.6667 23566.6667
-4851 38616.6667 23700.0000
-4852 38616.6667 23733.3333
-4853 38616.6667 23750.0000
-4854 38616.6667 23883.3333
-4855 38616.6667 23950.0000
-4856 38616.6667 24050.0000
-4857 38616.6667 24066.6667
-4858 38616.6667 24083.3333
-4859 38616.6667 24116.6667
-4860 38633.3333 20600.0000
-4861 38633.3333 20633.3333
-4862 38633.3333 20650.0000
-4863 38633.3333 20716.6667
-4864 38633.3333 21150.0000
-4865 38633.3333 21183.3333
-4866 38633.3333 21350.0000
-4867 38633.3333 21366.6667
-4868 38633.3333 21400.0000
-4869 38633.3333 21416.6667
-4870 38633.3333 21433.3333
-4871 38633.3333 21450.0000
-4872 38633.3333 21466.6667
-4873 38633.3333 21483.3333
-4874 38633.3333 21566.6667
-4875 38633.3333 21583.3333
-4876 38633.3333 21616.6667
-4877 38633.3333 21666.6667
-4878 38633.3333 21683.3333
-4879 38633.3333 21700.0000
-4880 38633.3333 21716.6667
-4881 38633.3333 21733.3333
-4882 38633.3333 21800.0000
-4883 38633.3333 21983.3333
-4884 38633.3333 22016.6667
-4885 38633.3333 22100.0000
-4886 38633.3333 22183.3333
-4887 38633.3333 22216.6667
-4888 38633.3333 22500.0000
-4889 38633.3333 22533.3333
-4890 38633.3333 22583.3333
-4891 38633.3333 22733.3333
-4892 38633.3333 22766.6667
-4893 38633.3333 22883.3333
-4894 38633.3333 23083.3333
-4895 38633.3333 23600.0000
-4896 38633.3333 23616.6667
-4897 38633.3333 23633.3333
-4898 38633.3333 23933.3333
-4899 38633.3333 24050.0000
-4900 38633.3333 24066.6667
-4901 38633.3333 24083.3333
-4902 38633.3333 24100.0000
-4903 38633.3333 24133.3333
-4904 38650.0000 20683.3333
-4905 38650.0000 20783.3333
-4906 38650.0000 20933.3333
-4907 38650.0000 21283.3333
-4908 38650.0000 21383.3333
-4909 38650.0000 21416.6667
-4910 38650.0000 21450.0000
-4911 38650.0000 21483.3333
-4912 38650.0000 21533.3333
-4913 38650.0000 21550.0000
-4914 38650.0000 21616.6667
-4915 38650.0000 21650.0000
-4916 38650.0000 21683.3333
-4917 38650.0000 21750.0000
-4918 38650.0000 21766.6667
-4919 38650.0000 21833.3333
-4920 38650.0000 21916.6667
-4921 38650.0000 21966.6667
-4922 38650.0000 22033.3333
-4923 38650.0000 22066.6667
-4924 38650.0000 22416.6667
-4925 38650.0000 22466.6667
-4926 38650.0000 23000.0000
-4927 38650.0000 23166.6667
-4928 38650.0000 23183.3333
-4929 38650.0000 23583.3333
-4930 38650.0000 23900.0000
-4931 38666.6667 20566.6667
-4932 38666.6667 20600.0000
-4933 38666.6667 20650.0000
-4934 38666.6667 20700.0000
-4935 38666.6667 20766.6667
-4936 38666.6667 20783.3333
-4937 38666.6667 20933.3333
-4938 38666.6667 21083.3333
-4939 38666.6667 21150.0000
-4940 38666.6667 21316.6667
-4941 38666.6667 21366.6667
-4942 38666.6667 21383.3333
-4943 38666.6667 21433.3333
-4944 38666.6667 21500.0000
-4945 38666.6667 21516.6667
-4946 38666.6667 21533.3333
-4947 38666.6667 21616.6667
-4948 38666.6667 21633.3333
-4949 38666.6667 21716.6667
-4950 38666.6667 21733.3333
-4951 38666.6667 21816.6667
-4952 38666.6667 21833.3333
-4953 38666.6667 21866.6667
-4954 38666.6667 21900.0000
-4955 38666.6667 22000.0000
-4956 38666.6667 22433.3333
-4957 38666.6667 22566.6667
-4958 38666.6667 22666.6667
-4959 38666.6667 22883.3333
-4960 38666.6667 23083.3333
-4961 38666.6667 23783.3333
-4962 38666.6667 23816.6667
-4963 38683.3333 20583.3333
-4964 38683.3333 20616.6667
-4965 38683.3333 20666.6667
-4966 38683.3333 20683.3333
-4967 38683.3333 20700.0000
-4968 38683.3333 21266.6667
-4969 38683.3333 21366.6667
-4970 38683.3333 21416.6667
-4971 38683.3333 21466.6667
-4972 38683.3333 21483.3333
-4973 38683.3333 21533.3333
-4974 38683.3333 21666.6667
-4975 38683.3333 21750.0000
-4976 38683.3333 21800.0000
-4977 38683.3333 21833.3333
-4978 38683.3333 21866.6667
-4979 38683.3333 21900.0000
-4980 38683.3333 21983.3333
-4981 38683.3333 22200.0000
-4982 38683.3333 22333.3333
-4983 38683.3333 23000.0000
-4984 38683.3333 23583.3333
-4985 38683.3333 23733.3333
-4986 38683.3333 23766.6667
-4987 38683.3333 23783.3333
-4988 38700.0000 20616.6667
-4989 38700.0000 20633.3333
-4990 38700.0000 20683.3333
-4991 38700.0000 20700.0000
-4992 38700.0000 20716.6667
-4993 38700.0000 20933.3333
-4994 38700.0000 20966.6667
-4995 38700.0000 21000.0000
-4996 38700.0000 21033.3333
-4997 38700.0000 21183.3333
-4998 38700.0000 21283.3333
-4999 38700.0000 21333.3333
-5000 38700.0000 21350.0000
-5001 38700.0000 21366.6667
-5002 38700.0000 21450.0000
-5003 38700.0000 21600.0000
-5004 38700.0000 21650.0000
-5005 38700.0000 21700.0000
-5006 38700.0000 21733.3333
-5007 38700.0000 21783.3333
-5008 38700.0000 21933.3333
-5009 38700.0000 22033.3333
-5010 38700.0000 22183.3333
-5011 38700.0000 22250.0000
-5012 38700.0000 22283.3333
-5013 38700.0000 22350.0000
-5014 38700.0000 22416.6667
-5015 38700.0000 22633.3333
-5016 38700.0000 23583.3333
-5017 38716.6667 20583.3333
-5018 38716.6667 20600.0000
-5019 38716.6667 20666.6667
-5020 38716.6667 20683.3333
-5021 38716.6667 20733.3333
-5022 38716.6667 20933.3333
-5023 38716.6667 21083.3333
-5024 38716.6667 21166.6667
-5025 38716.6667 21466.6667
-5026 38716.6667 21516.6667
-5027 38716.6667 21533.3333
-5028 38716.6667 21566.6667
-5029 38716.6667 21650.0000
-5030 38716.6667 21683.3333
-5031 38716.6667 21700.0000
-5032 38716.6667 21800.0000
-5033 38716.6667 21866.6667
-5034 38716.6667 21966.6667
-5035 38716.6667 22366.6667
-5036 38716.6667 22400.0000
-5037 38716.6667 22466.6667
-5038 38716.6667 22483.3333
-5039 38716.6667 22550.0000
-5040 38716.6667 22583.3333
-5041 38716.6667 22700.0000
-5042 38716.6667 22883.3333
-5043 38716.6667 22933.3333
-5044 38716.6667 23050.0000
-5045 38716.6667 23433.3333
-5046 38716.6667 23450.0000
-5047 38716.6667 23733.3333
-5048 38716.6667 23750.0000
-5049 38733.3333 20650.0000
-5050 38733.3333 20666.6667
-5051 38733.3333 20983.3333
-5052 38733.3333 21116.6667
-5053 38733.3333 21350.0000
-5054 38733.3333 21450.0000
-5055 38733.3333 21466.6667
-5056 38733.3333 21516.6667
-5057 38733.3333 21650.0000
-5058 38733.3333 21666.6667
-5059 38733.3333 21700.0000
-5060 38733.3333 21716.6667
-5061 38733.3333 21733.3333
-5062 38733.3333 21916.6667
-5063 38733.3333 21933.3333
-5064 38733.3333 21966.6667
-5065 38733.3333 22000.0000
-5066 38733.3333 22233.3333
-5067 38733.3333 22333.3333
-5068 38733.3333 22400.0000
-5069 38733.3333 22450.0000
-5070 38733.3333 22666.6667
-5071 38733.3333 22733.3333
-5072 38733.3333 22750.0000
-5073 38733.3333 22933.3333
-5074 38733.3333 23333.3333
-5075 38733.3333 23416.6667
-5076 38733.3333 23483.3333
-5077 38750.0000 20600.0000
-5078 38750.0000 20616.6667
-5079 38750.0000 20650.0000
-5080 38750.0000 20683.3333
-5081 38750.0000 20716.6667
-5082 38750.0000 21033.3333
-5083 38750.0000 21066.6667
-5084 38750.0000 21133.3333
-5085 38750.0000 21200.0000
-5086 38750.0000 21400.0000
-5087 38750.0000 21433.3333
-5088 38750.0000 21450.0000
-5089 38750.0000 21516.6667
-5090 38750.0000 21533.3333
-5091 38750.0000 21616.6667
-5092 38750.0000 21666.6667
-5093 38750.0000 21683.3333
-5094 38750.0000 21700.0000
-5095 38750.0000 21750.0000
-5096 38750.0000 21783.3333
-5097 38750.0000 21816.6667
-5098 38750.0000 21850.0000
-5099 38750.0000 21916.6667
-5100 38750.0000 22166.6667
-5101 38750.0000 22216.6667
-5102 38750.0000 22266.6667
-5103 38750.0000 22450.0000
-5104 38750.0000 22616.6667
-5105 38750.0000 22700.0000
-5106 38750.0000 22783.3333
-5107 38750.0000 22950.0000
-5108 38750.0000 23033.3333
-5109 38750.0000 23400.0000
-5110 38750.0000 23433.3333
-5111 38750.0000 23583.3333
-5112 38750.0000 23666.6667
-5113 38750.0000 23733.3333
-5114 38766.6667 20633.3333
-5115 38766.6667 20650.0000
-5116 38766.6667 20716.6667
-5117 38766.6667 20883.3333
-5118 38766.6667 20983.3333
-5119 38766.6667 21400.0000
-5120 38766.6667 21416.6667
-5121 38766.6667 21433.3333
-5122 38766.6667 21483.3333
-5123 38766.6667 21583.3333
-5124 38766.6667 21616.6667
-5125 38766.6667 21700.0000
-5126 38766.6667 21750.0000
-5127 38766.6667 21783.3333
-5128 38766.6667 21800.0000
-5129 38766.6667 21883.3333
-5130 38766.6667 22133.3333
-5131 38766.6667 22366.6667
-5132 38766.6667 22400.0000
-5133 38766.6667 22450.0000
-5134 38766.6667 22616.6667
-5135 38766.6667 22650.0000
-5136 38766.6667 22850.0000
-5137 38766.6667 22900.0000
-5138 38766.6667 23316.6667
-5139 38766.6667 23433.3333
-5140 38766.6667 23550.0000
-5141 38766.6667 23700.0000
-5142 38783.3333 20616.6667
-5143 38783.3333 20650.0000
-5144 38783.3333 20666.6667
-5145 38783.3333 20700.0000
-5146 38783.3333 20833.3333
-5147 38783.3333 20883.3333
-5148 38783.3333 20900.0000
-5149 38783.3333 21033.3333
-5150 38783.3333 21116.6667
-5151 38783.3333 21283.3333
-5152 38783.3333 21433.3333
-5153 38783.3333 21450.0000
-5154 38783.3333 21483.3333
-5155 38783.3333 21533.3333
-5156 38783.3333 21616.6667
-5157 38783.3333 21633.3333
-5158 38783.3333 21683.3333
-5159 38783.3333 21716.6667
-5160 38783.3333 21866.6667
-5161 38783.3333 22083.3333
-5162 38783.3333 22366.6667
-5163 38783.3333 22416.6667
-5164 38783.3333 22583.3333
-5165 38783.3333 22783.3333
-5166 38783.3333 23266.6667
-5167 38783.3333 23300.0000
-5168 38783.3333 23333.3333
-5169 38783.3333 23400.0000
-5170 38783.3333 23433.3333
-5171 38783.3333 23500.0000
-5172 38800.0000 20716.6667
-5173 38800.0000 20766.6667
-5174 38800.0000 21166.6667
-5175 38800.0000 21366.6667
-5176 38800.0000 21450.0000
-5177 38800.0000 21466.6667
-5178 38800.0000 21516.6667
-5179 38800.0000 21583.3333
-5180 38800.0000 21616.6667
-5181 38800.0000 21633.3333
-5182 38800.0000 21650.0000
-5183 38800.0000 21716.6667
-5184 38800.0000 21733.3333
-5185 38800.0000 21800.0000
-5186 38800.0000 22050.0000
-5187 38800.0000 22116.6667
-5188 38800.0000 22200.0000
-5189 38800.0000 22383.3333
-5190 38800.0000 22416.6667
-5191 38800.0000 22450.0000
-5192 38800.0000 22466.6667
-5193 38800.0000 22500.0000
-5194 38800.0000 22533.3333
-5195 38800.0000 22550.0000
-5196 38800.0000 22700.0000
-5197 38800.0000 22716.6667
-5198 38800.0000 23350.0000
-5199 38800.0000 23433.3333
-5200 38800.0000 23483.3333
-5201 38800.0000 23500.0000
-5202 38800.0000 23516.6667
-5203 38800.0000 24583.3333
-5204 38816.6667 20650.0000
-5205 38816.6667 20683.3333
-5206 38816.6667 20716.6667
-5207 38816.6667 20750.0000
-5208 38816.6667 20833.3333
-5209 38816.6667 20916.6667
-5210 38816.6667 21016.6667
-5211 38816.6667 21233.3333
-5212 38816.6667 21333.3333
-5213 38816.6667 21366.6667
-5214 38816.6667 21383.3333
-5215 38816.6667 21400.0000
-5216 38816.6667 21433.3333
-5217 38816.6667 21466.6667
-5218 38816.6667 21500.0000
-5219 38816.6667 21616.6667
-5220 38816.6667 22000.0000
-5221 38816.6667 22016.6667
-5222 38816.6667 22166.6667
-5223 38816.6667 22433.3333
-5224 38816.6667 22600.0000
-5225 38816.6667 22650.0000
-5226 38816.6667 22683.3333
-5227 38816.6667 22733.3333
-5228 38816.6667 23233.3333
-5229 38816.6667 23250.0000
-5230 38816.6667 23266.6667
-5231 38816.6667 23366.6667
-5232 38816.6667 23416.6667
-5233 38816.6667 23450.0000
-5234 38833.3333 20683.3333
-5235 38833.3333 20700.0000
-5236 38833.3333 20750.0000
-5237 38833.3333 20900.0000
-5238 38833.3333 21000.0000
-5239 38833.3333 21066.6667
-5240 38833.3333 21183.3333
-5241 38833.3333 21250.0000
-5242 38833.3333 21416.6667
-5243 38833.3333 21466.6667
-5244 38833.3333 21516.6667
-5245 38833.3333 21533.3333
-5246 38833.3333 21583.3333
-5247 38833.3333 21600.0000
-5248 38833.3333 21616.6667
-5249 38833.3333 21633.3333
-5250 38833.3333 21716.6667
-5251 38833.3333 21733.3333
-5252 38833.3333 21800.0000
-5253 38833.3333 21966.6667
-5254 38833.3333 22050.0000
-5255 38833.3333 22083.3333
-5256 38833.3333 22166.6667
-5257 38833.3333 22400.0000
-5258 38833.3333 22416.6667
-5259 38833.3333 22450.0000
-5260 38833.3333 22883.3333
-5261 38833.3333 23250.0000
-5262 38833.3333 23283.3333
-5263 38833.3333 23333.3333
-5264 38833.3333 23366.6667
-5265 38833.3333 23400.0000
-5266 38833.3333 23466.6667
-5267 38833.3333 24533.3333
-5268 38850.0000 20950.0000
-5269 38850.0000 21333.3333
-5270 38850.0000 21383.3333
-5271 38850.0000 21450.0000
-5272 38850.0000 21466.6667
-5273 38850.0000 21516.6667
-5274 38850.0000 21633.3333
-5275 38850.0000 21916.6667
-5276 38850.0000 21933.3333
-5277 38850.0000 21966.6667
-5278 38850.0000 22183.3333
-5279 38850.0000 22216.6667
-5280 38850.0000 22366.6667
-5281 38850.0000 22383.3333
-5282 38850.0000 22433.3333
-5283 38850.0000 22466.6667
-5284 38850.0000 22866.6667
-5285 38850.0000 22900.0000
-5286 38850.0000 23050.0000
-5287 38850.0000 23066.6667
-5288 38850.0000 23100.0000
-5289 38850.0000 23116.6667
-5290 38850.0000 23133.3333
-5291 38850.0000 23250.0000
-5292 38850.0000 23283.3333
-5293 38850.0000 23300.0000
-5294 38850.0000 23400.0000
-5295 38866.6667 20800.0000
-5296 38866.6667 20983.3333
-5297 38866.6667 21000.0000
-5298 38866.6667 21016.6667
-5299 38866.6667 21033.3333
-5300 38866.6667 21066.6667
-5301 38866.6667 21166.6667
-5302 38866.6667 21283.3333
-5303 38866.6667 21350.0000
-5304 38866.6667 21366.6667
-5305 38866.6667 21500.0000
-5306 38866.6667 21516.6667
-5307 38866.6667 21566.6667
-5308 38866.6667 21583.3333
-5309 38866.6667 21616.6667
-5310 38866.6667 21633.3333
-5311 38866.6667 21666.6667
-5312 38866.6667 21683.3333
-5313 38866.6667 21700.0000
-5314 38866.6667 21733.3333
-5315 38866.6667 21750.0000
-5316 38866.6667 21766.6667
-5317 38866.6667 21783.3333
-5318 38866.6667 21966.6667
-5319 38866.6667 22033.3333
-5320 38866.6667 22133.3333
-5321 38866.6667 22200.0000
-5322 38866.6667 22233.3333
-5323 38866.6667 22350.0000
-5324 38866.6667 22750.0000
-5325 38866.6667 22966.6667
-5326 38866.6667 23216.6667
-5327 38866.6667 23233.3333
-5328 38866.6667 23366.6667
-5329 38866.6667 23400.0000
-5330 38883.3333 21200.0000
-5331 38883.3333 21550.0000
-5332 38883.3333 21566.6667
-5333 38883.3333 21600.0000
-5334 38883.3333 21650.0000
-5335 38883.3333 21700.0000
-5336 38883.3333 21750.0000
-5337 38883.3333 21800.0000
-5338 38883.3333 21833.3333
-5339 38883.3333 21966.6667
-5340 38883.3333 22050.0000
-5341 38883.3333 22100.0000
-5342 38883.3333 22116.6667
-5343 38883.3333 22200.0000
-5344 38883.3333 22216.6667
-5345 38883.3333 22250.0000
-5346 38883.3333 22266.6667
-5347 38883.3333 22316.6667
-5348 38883.3333 22400.0000
-5349 38883.3333 22416.6667
-5350 38883.3333 22433.3333
-5351 38883.3333 22466.6667
-5352 38883.3333 22483.3333
-5353 38883.3333 22716.6667
-5354 38883.3333 22783.3333
-5355 38883.3333 22816.6667
-5356 38883.3333 23050.0000
-5357 38883.3333 23166.6667
-5358 38900.0000 21100.0000
-5359 38900.0000 21316.6667
-5360 38900.0000 21333.3333
-5361 38900.0000 21450.0000
-5362 38900.0000 21566.6667
-5363 38900.0000 21583.3333
-5364 38900.0000 21600.0000
-5365 38900.0000 21633.3333
-5366 38900.0000 21716.6667
-5367 38900.0000 21766.6667
-5368 38900.0000 21866.6667
-5369 38900.0000 22033.3333
-5370 38900.0000 22050.0000
-5371 38900.0000 22066.6667
-5372 38900.0000 22100.0000
-5373 38900.0000 22116.6667
-5374 38900.0000 22166.6667
-5375 38900.0000 22216.6667
-5376 38900.0000 22233.3333
-5377 38900.0000 22283.3333
-5378 38900.0000 22333.3333
-5379 38900.0000 22366.6667
-5380 38900.0000 22433.3333
-5381 38900.0000 22583.3333
-5382 38900.0000 22733.3333
-5383 38900.0000 23033.3333
-5384 38900.0000 23050.0000
-5385 38900.0000 23066.6667
-5386 38900.0000 23133.3333
-5387 38900.0000 23166.6667
-5388 38900.0000 23183.3333
-5389 38900.0000 23216.6667
-5390 38900.0000 23266.6667
-5391 38900.0000 23333.3333
-5392 38900.0000 23350.0000
-5393 38900.0000 23400.0000
-5394 38904.1667 24563.0556
-5395 38916.6667 20883.3333
-5396 38916.6667 20950.0000
-5397 38916.6667 21200.0000
-5398 38916.6667 21216.6667
-5399 38916.6667 21266.6667
-5400 38916.6667 21483.3333
-5401 38916.6667 21633.3333
-5402 38916.6667 21666.6667
-5403 38916.6667 21683.3333
-5404 38916.6667 21783.3333
-5405 38916.6667 21916.6667
-5406 38916.6667 22000.0000
-5407 38916.6667 22166.6667
-5408 38916.6667 22216.6667
-5409 38916.6667 22233.3333
-5410 38916.6667 22300.0000
-5411 38916.6667 22550.0000
-5412 38916.6667 22616.6667
-5413 38916.6667 22650.0000
-5414 38916.6667 22700.0000
-5415 38916.6667 22800.0000
-5416 38916.6667 23116.6667
-5417 38916.6667 23183.3333
-5418 38916.6667 23200.0000
-5419 38916.6667 23216.6667
-5420 38933.3333 20850.0000
-5421 38933.3333 21150.0000
-5422 38933.3333 21400.0000
-5423 38933.3333 21433.3333
-5424 38933.3333 21600.0000
-5425 38933.3333 21700.0000
-5426 38933.3333 21716.6667
-5427 38933.3333 21916.6667
-5428 38933.3333 21983.3333
-5429 38933.3333 22016.6667
-5430 38933.3333 22033.3333
-5431 38933.3333 22116.6667
-5432 38933.3333 22250.0000
-5433 38933.3333 22350.0000
-5434 38933.3333 22400.0000
-5435 38933.3333 22416.6667
-5436 38933.3333 22733.3333
-5437 38933.3333 22783.3333
-5438 38933.3333 23066.6667
-5439 38933.3333 23150.0000
-5440 38933.3333 23166.6667
-5441 38933.3333 23283.3333
-5442 38933.3333 23366.6667
-5443 38933.3333 23416.6667
-5444 38950.0000 20733.3333
-5445 38950.0000 20750.0000
-5446 38950.0000 21183.3333
-5447 38950.0000 21200.0000
-5448 38950.0000 21416.6667
-5449 38950.0000 21516.6667
-5450 38950.0000 21600.0000
-5451 38950.0000 21650.0000
-5452 38950.0000 21666.6667
-5453 38950.0000 21883.3333
-5454 38950.0000 21966.6667
-5455 38950.0000 22050.0000
-5456 38950.0000 22150.0000
-5457 38950.0000 22200.0000
-5458 38950.0000 22216.6667
-5459 38950.0000 22316.6667
-5460 38950.0000 22516.6667
-5461 38950.0000 22633.3333
-5462 38950.0000 22833.3333
-5463 38950.0000 22916.6667
-5464 38950.0000 22966.6667
-5465 38950.0000 23100.0000
-5466 38950.0000 23150.0000
-5467 38950.0000 23183.3333
-5468 38950.0000 23266.6667
-5469 38962.5000 21150.0000
-5470 38966.6667 20783.3333
-5471 38966.6667 21166.6667
-5472 38966.6667 21183.3333
-5473 38966.6667 21200.0000
-5474 38966.6667 21216.6667
-5475 38966.6667 21283.3333
-5476 38966.6667 21316.6667
-5477 38966.6667 21333.3333
-5478 38966.6667 21450.0000
-5479 38966.6667 21483.3333
-5480 38966.6667 21566.6667
-5481 38966.6667 21616.6667
-5482 38966.6667 21716.6667
-5483 38966.6667 21866.6667
-5484 38966.6667 21966.6667
-5485 38966.6667 22000.0000
-5486 38966.6667 22100.0000
-5487 38966.6667 22116.6667
-5488 38966.6667 22166.6667
-5489 38966.6667 22200.0000
-5490 38966.6667 22450.0000
-5491 38966.6667 22500.0000
-5492 38966.6667 22800.0000
-5493 38966.6667 22900.0000
-5494 38966.6667 23150.0000
-5495 38966.6667 23166.6667
-5496 38966.6667 23233.3333
-5497 38966.6667 23300.0000
-5498 38966.6667 23350.0000
-5499 38976.3889 26368.3333
-5500 38983.3333 20783.3333
-5501 38983.3333 21300.0000
-5502 38983.3333 21350.0000
-5503 38983.3333 21366.6667
-5504 38983.3333 21383.3333
-5505 38983.3333 21400.0000
-5506 38983.3333 21433.3333
-5507 38983.3333 21616.6667
-5508 38983.3333 21683.3333
-5509 38983.3333 21816.6667
-5510 38983.3333 21900.0000
-5511 38983.3333 22000.0000
-5512 38983.3333 22566.6667
-5513 38983.3333 22850.0000
-5514 38983.3333 23233.3333
-5515 38983.3333 23316.6667
-5516 38983.3333 26383.3333
-5517 38983.3333 26400.0000
-5518 38988.3333 26311.3889
-5519 39000.0000 20700.0000
-5520 39000.0000 21150.0000
-5521 39000.0000 21166.6667
-5522 39000.0000 21200.0000
-5523 39000.0000 21250.0000
-5524 39000.0000 21300.0000
-5525 39000.0000 21383.3333
-5526 39000.0000 21466.6667
-5527 39000.0000 21600.0000
-5528 39000.0000 21616.6667
-5529 39000.0000 21633.3333
-5530 39000.0000 21716.6667
-5531 39000.0000 21733.3333
-5532 39000.0000 21800.0000
-5533 39000.0000 21850.0000
-5534 39000.0000 21916.6667
-5535 39000.0000 21933.3333
-5536 39000.0000 22000.0000
-5537 39000.0000 22116.6667
-5538 39000.0000 22216.6667
-5539 39000.0000 22266.6667
-5540 39000.0000 22350.0000
-5541 39000.0000 22933.3333
-5542 39000.0000 22950.0000
-5543 39000.0000 23116.6667
-5544 39000.0000 23200.0000
-5545 39000.0000 23250.0000
-5546 39000.0000 23333.3333
-5547 39000.0000 26316.6667
-5548 39016.6667 20916.6667
-5549 39016.6667 21200.0000
-5550 39016.6667 21266.6667
-5551 39016.6667 21316.6667
-5552 39016.6667 21383.3333
-5553 39016.6667 21400.0000
-5554 39016.6667 21550.0000
-5555 39016.6667 21683.3333
-5556 39016.6667 21700.0000
-5557 39016.6667 21766.6667
-5558 39016.6667 21783.3333
-5559 39016.6667 21816.6667
-5560 39016.6667 21900.0000
-5561 39016.6667 22133.3333
-5562 39016.6667 22250.0000
-5563 39016.6667 22616.6667
-5564 39016.6667 22850.0000
-5565 39016.6667 23033.3333
-5566 39016.6667 23233.3333
-5567 39016.6667 23250.0000
-5568 39016.6667 23300.0000
-5569 39019.1667 26365.8333
-5570 39026.3889 26307.7778
-5571 39028.8889 26321.1111
-5572 39029.7222 26448.3333
-5573 39033.3333 20733.3333
-5574 39033.3333 20750.0000
-5575 39033.3333 20866.6667
-5576 39033.3333 21083.3333
-5577 39033.3333 21150.0000
-5578 39033.3333 21300.0000
-5579 39033.3333 21316.6667
-5580 39033.3333 21450.0000
-5581 39033.3333 21583.3333
-5582 39033.3333 21666.6667
-5583 39033.3333 21700.0000
-5584 39033.3333 21733.3333
-5585 39033.3333 21816.6667
-5586 39033.3333 22066.6667
-5587 39033.3333 22116.6667
-5588 39033.3333 22283.3333
-5589 39033.3333 22333.3333
-5590 39033.3333 22400.0000
-5591 39033.3333 22416.6667
-5592 39033.3333 22516.6667
-5593 39033.3333 22800.0000
-5594 39033.3333 22950.0000
-5595 39033.3333 22966.6667
-5596 39033.3333 26316.6667
-5597 39036.3889 26444.4444
-5598 39039.4444 26201.1111
-5599 39039.4444 26454.7222
-5600 39045.5556 26454.4444
-5601 39046.3889 26533.0556
-5602 39048.3333 26497.2222
-5603 39050.0000 21033.3333
-5604 39050.0000 21116.6667
-5605 39050.0000 21150.0000
-5606 39050.0000 21166.6667
-5607 39050.0000 21216.6667
-5608 39050.0000 21250.0000
-5609 39050.0000 21266.6667
-5610 39050.0000 21283.3333
-5611 39050.0000 21300.0000
-5612 39050.0000 21366.6667
-5613 39050.0000 21450.0000
-5614 39050.0000 21466.6667
-5615 39050.0000 21533.3333
-5616 39050.0000 21566.6667
-5617 39050.0000 21583.3333
-5618 39050.0000 21633.3333
-5619 39050.0000 21750.0000
-5620 39050.0000 22316.6667
-5621 39050.0000 22450.0000
-5622 39050.0000 22950.0000
-5623 39050.0000 26266.6667
-5624 39050.0000 26316.6667
-5625 39055.8333 26451.1111
-5626 39056.9444 26545.0000
-5627 39066.6667 20700.0000
-5628 39066.6667 20750.0000
-5629 39066.6667 20933.3333
-5630 39066.6667 21016.6667
-5631 39066.6667 21033.3333
-5632 39066.6667 21050.0000
-5633 39066.6667 21100.0000
-5634 39066.6667 21116.6667
-5635 39066.6667 21150.0000
-5636 39066.6667 21183.3333
-5637 39066.6667 21216.6667
-5638 39066.6667 21233.3333
-5639 39066.6667 21266.6667
-5640 39066.6667 21283.3333
-5641 39066.6667 21400.0000
-5642 39066.6667 21450.0000
-5643 39066.6667 21466.6667
-5644 39066.6667 21483.3333
-5645 39066.6667 21516.6667
-5646 39066.6667 21533.3333
-5647 39066.6667 21550.0000
-5648 39066.6667 21633.3333
-5649 39066.6667 21683.3333
-5650 39066.6667 21733.3333
-5651 39066.6667 21800.0000
-5652 39066.6667 21883.3333
-5653 39066.6667 21983.3333
-5654 39066.6667 22066.6667
-5655 39066.6667 22116.6667
-5656 39066.6667 22183.3333
-5657 39066.6667 22483.3333
-5658 39066.6667 22550.0000
-5659 39066.6667 22800.0000
-5660 39066.6667 26566.6667
-5661 39066.6667 26583.3333
-5662 39081.1111 26183.3333
-5663 39083.3333 20716.6667
-5664 39083.3333 20750.0000
-5665 39083.3333 20866.6667
-5666 39083.3333 20916.6667
-5667 39083.3333 20933.3333
-5668 39083.3333 20950.0000
-5669 39083.3333 21016.6667
-5670 39083.3333 21050.0000
-5671 39083.3333 21083.3333
-5672 39083.3333 21100.0000
-5673 39083.3333 21150.0000
-5674 39083.3333 21200.0000
-5675 39083.3333 21250.0000
-5676 39083.3333 21266.6667
-5677 39083.3333 21283.3333
-5678 39083.3333 21383.3333
-5679 39083.3333 21433.3333
-5680 39083.3333 21483.3333
-5681 39083.3333 21500.0000
-5682 39083.3333 21566.6667
-5683 39083.3333 21583.3333
-5684 39083.3333 21633.3333
-5685 39083.3333 21650.0000
-5686 39083.3333 21833.3333
-5687 39083.3333 22150.0000
-5688 39083.3333 22316.6667
-5689 39083.3333 22350.0000
-5690 39083.3333 22416.6667
-5691 39083.3333 22783.3333
-5692 39083.3333 22866.6667
-5693 39083.3333 26433.3333
-5694 39083.3333 26550.0000
-5695 39083.3333 26566.6667
-5696 39085.0000 26370.0000
-5697 39100.0000 20700.0000
-5698 39100.0000 20883.3333
-5699 39100.0000 20950.0000
-5700 39100.0000 20983.3333
-5701 39100.0000 21000.0000
-5702 39100.0000 21016.6667
-5703 39100.0000 21083.3333
-5704 39100.0000 21100.0000
-5705 39100.0000 21150.0000
-5706 39100.0000 21233.3333
-5707 39100.0000 21266.6667
-5708 39100.0000 21283.3333
-5709 39100.0000 21433.3333
-5710 39100.0000 21500.0000
-5711 39100.0000 21516.6667
-5712 39100.0000 21666.6667
-5713 39100.0000 21783.3333
-5714 39100.0000 21816.6667
-5715 39100.0000 21850.0000
-5716 39100.0000 21866.6667
-5717 39100.0000 21983.3333
-5718 39100.0000 22200.0000
-5719 39100.0000 22233.3333
-5720 39100.0000 22266.6667
-5721 39100.0000 22350.0000
-5722 39100.0000 22416.6667
-5723 39100.0000 22716.6667
-5724 39100.0000 22866.6667
-5725 39100.0000 22900.0000
-5726 39100.0000 23066.6667
-5727 39100.0000 23083.3333
-5728 39100.0000 26166.6667
-5729 39100.0000 26383.3333
-5730 39100.0000 26433.3333
-5731 39100.0000 26516.6667
-5732 39100.0000 26550.0000
-5733 39102.5000 26552.5000
-5734 39103.8889 26241.3889
-5735 39105.0000 26440.2778
-5736 39105.5556 20637.7778
-5737 39105.8333 26218.6111
-5738 39110.5556 26411.1111
-5739 39116.6667 20900.0000
-5740 39116.6667 21016.6667
-5741 39116.6667 21050.0000
-5742 39116.6667 21083.3333
-5743 39116.6667 21133.3333
-5744 39116.6667 21150.0000
-5745 39116.6667 21200.0000
-5746 39116.6667 21216.6667
-5747 39116.6667 21233.3333
-5748 39116.6667 21250.0000
-5749 39116.6667 21416.6667
-5750 39116.6667 21466.6667
-5751 39116.6667 21516.6667
-5752 39116.6667 21583.3333
-5753 39116.6667 21633.3333
-5754 39116.6667 22050.0000
-5755 39116.6667 22100.0000
-5756 39116.6667 22200.0000
-5757 39116.6667 22450.0000
-5758 39116.6667 22466.6667
-5759 39116.6667 23100.0000
-5760 39116.6667 23733.3333
-5761 39116.6667 26413.0556
-5762 39132.7778 20631.3889
-5763 39133.3333 20600.0000
-5764 39133.3333 20633.3333
-5765 39133.3333 20666.6667
-5766 39133.3333 20816.6667
-5767 39133.3333 20916.6667
-5768 39133.3333 20933.3333
-5769 39133.3333 20950.0000
-5770 39133.3333 20983.3333
-5771 39133.3333 21050.0000
-5772 39133.3333 21066.6667
-5773 39133.3333 21116.6667
-5774 39133.3333 21200.0000
-5775 39133.3333 21216.6667
-5776 39133.3333 21250.0000
-5777 39133.3333 21416.6667
-5778 39133.3333 21450.0000
-5779 39133.3333 21483.3333
-5780 39133.3333 21500.0000
-5781 39133.3333 21516.6667
-5782 39133.3333 21566.6667
-5783 39133.3333 21650.0000
-5784 39133.3333 21700.0000
-5785 39133.3333 21783.3333
-5786 39133.3333 21800.0000
-5787 39133.3333 21816.6667
-5788 39133.3333 21950.0000
-5789 39133.3333 22016.6667
-5790 39133.3333 22116.6667
-5791 39133.3333 22150.0000
-5792 39133.3333 22300.0000
-5793 39133.3333 22350.0000
-5794 39133.3333 22383.3333
-5795 39133.3333 23166.6667
-5796 39133.3333 23266.6667
-5797 39133.3333 25933.3333
-5798 39133.3333 26000.0000
-5799 39133.3333 26400.0000
-5800 39133.3333 26416.6667
-5801 39133.3333 26516.6667
-5802 39146.1111 26529.7222
-5803 39148.0556 26514.4444
-5804 39150.0000 20233.3333
-5805 39150.0000 20583.3333
-5806 39150.0000 20666.6667
-5807 39150.0000 20700.0000
-5808 39150.0000 20816.6667
-5809 39150.0000 20866.6667
-5810 39150.0000 20933.3333
-5811 39150.0000 20983.3333
-5812 39150.0000 21116.6667
-5813 39150.0000 21133.3333
-5814 39150.0000 21150.0000
-5815 39150.0000 21183.3333
-5816 39150.0000 21200.0000
-5817 39150.0000 21233.3333
-5818 39150.0000 21250.0000
-5819 39150.0000 21266.6667
-5820 39150.0000 21283.3333
-5821 39150.0000 21383.3333
-5822 39150.0000 21400.0000
-5823 39150.0000 21433.3333
-5824 39150.0000 21450.0000
-5825 39150.0000 21483.3333
-5826 39150.0000 21616.6667
-5827 39150.0000 21650.0000
-5828 39150.0000 21666.6667
-5829 39150.0000 21783.3333
-5830 39150.0000 21833.3333
-5831 39150.0000 21866.6667
-5832 39150.0000 22183.3333
-5833 39150.0000 22250.0000
-5834 39150.0000 22283.3333
-5835 39150.0000 22300.0000
-5836 39150.0000 22366.6667
-5837 39150.0000 22566.6667
-5838 39150.0000 22683.3333
-5839 39150.0000 22716.6667
-5840 39150.0000 22750.0000
-5841 39150.0000 22766.6667
-5842 39150.0000 23083.3333
-5843 39150.0000 23200.0000
-5844 39150.0000 23850.0000
-5845 39150.0000 23866.6667
-5846 39156.6667 26521.6667
-5847 39166.6667 20183.3333
-5848 39166.6667 20566.6667
-5849 39166.6667 20600.0000
-5850 39166.6667 20716.6667
-5851 39166.6667 20750.0000
-5852 39166.6667 20933.3333
-5853 39166.6667 20950.0000
-5854 39166.6667 21000.0000
-5855 39166.6667 21033.3333
-5856 39166.6667 21116.6667
-5857 39166.6667 21133.3333
-5858 39166.6667 21166.6667
-5859 39166.6667 21183.3333
-5860 39166.6667 21200.0000
-5861 39166.6667 21216.6667
-5862 39166.6667 21266.6667
-5863 39166.6667 21433.3333
-5864 39166.6667 21466.6667
-5865 39166.6667 21516.6667
-5866 39166.6667 21700.0000
-5867 39166.6667 21766.6667
-5868 39166.6667 21816.6667
-5869 39166.6667 21833.3333
-5870 39166.6667 22166.6667
-5871 39166.6667 22416.6667
-5872 39166.6667 22466.6667
-5873 39166.6667 22516.6667
-5874 39166.6667 22600.0000
-5875 39166.6667 22616.6667
-5876 39166.6667 22633.3333
-5877 39166.6667 22650.0000
-5878 39166.6667 22783.3333
-5879 39166.6667 22850.0000
-5880 39166.6667 22883.3333
-5881 39166.6667 23216.6667
-5882 39166.6667 23283.3333
-5883 39166.6667 23350.0000
-5884 39166.6667 23483.3333
-5885 39166.6667 23616.6667
-5886 39166.6667 25933.3333
-5887 39166.6667 26050.0000
-5888 39166.6667 26066.6667
-5889 39166.6667 26133.3333
-5890 39166.6667 26500.0000
-5891 39180.5556 26486.3889
-5892 39183.3333 20166.6667
-5893 39183.3333 20183.3333
-5894 39183.3333 20200.0000
-5895 39183.3333 20633.3333
-5896 39183.3333 20716.6667
-5897 39183.3333 20783.3333
-5898 39183.3333 20983.3333
-5899 39183.3333 21083.3333
-5900 39183.3333 21150.0000
-5901 39183.3333 21183.3333
-5902 39183.3333 21333.3333
-5903 39183.3333 21383.3333
-5904 39183.3333 21416.6667
-5905 39183.3333 21433.3333
-5906 39183.3333 21450.0000
-5907 39183.3333 21466.6667
-5908 39183.3333 21483.3333
-5909 39183.3333 21500.0000
-5910 39183.3333 21616.6667
-5911 39183.3333 21650.0000
-5912 39183.3333 21683.3333
-5913 39183.3333 21733.3333
-5914 39183.3333 21766.6667
-5915 39183.3333 21783.3333
-5916 39183.3333 21866.6667
-5917 39183.3333 21966.6667
-5918 39183.3333 22133.3333
-5919 39183.3333 22383.3333
-5920 39183.3333 22600.0000
-5921 39183.3333 22683.3333
-5922 39183.3333 22766.6667
-5923 39183.3333 23216.6667
-5924 39183.3333 23250.0000
-5925 39183.3333 23283.3333
-5926 39183.3333 23333.3333
-5927 39183.3333 23616.6667
-5928 39183.3333 26416.6667
-5929 39183.8889 26406.3889
-5930 39197.2222 20530.2778
-5931 39199.4444 20184.4444
-5932 39200.0000 20166.6667
-5933 39200.0000 20183.3333
-5934 39200.0000 20566.6667
-5935 39200.0000 20616.6667
-5936 39200.0000 20650.0000
-5937 39200.0000 20666.6667
-5938 39200.0000 20733.3333
-5939 39200.0000 20883.3333
-5940 39200.0000 20933.3333
-5941 39200.0000 20983.3333
-5942 39200.0000 21083.3333
-5943 39200.0000 21150.0000
-5944 39200.0000 21166.6667
-5945 39200.0000 21216.6667
-5946 39200.0000 21350.0000
-5947 39200.0000 21400.0000
-5948 39200.0000 21416.6667
-5949 39200.0000 21566.6667
-5950 39200.0000 21616.6667
-5951 39200.0000 21650.0000
-5952 39200.0000 21683.3333
-5953 39200.0000 21750.0000
-5954 39200.0000 21933.3333
-5955 39200.0000 22083.3333
-5956 39200.0000 22100.0000
-5957 39200.0000 22250.0000
-5958 39200.0000 22316.6667
-5959 39200.0000 22333.3333
-5960 39200.0000 22450.0000
-5961 39200.0000 22483.3333
-5962 39200.0000 22516.6667
-5963 39200.0000 22583.3333
-5964 39200.0000 22733.3333
-5965 39200.0000 22750.0000
-5966 39200.0000 23216.6667
-5967 39200.0000 23333.3333
-5968 39200.0000 23916.6667
-5969 39200.0000 23966.6667
-5970 39200.0000 26016.6667
-5971 39206.6667 26212.5000
-5972 39210.8333 26461.3889
-5973 39216.6667 20116.6667
-5974 39216.6667 20133.3333
-5975 39216.6667 20150.0000
-5976 39216.6667 20166.6667
-5977 39216.6667 20500.0000
-5978 39216.6667 20533.3333
-5979 39216.6667 20633.3333
-5980 39216.6667 20783.3333
-5981 39216.6667 20850.0000
-5982 39216.6667 20883.3333
-5983 39216.6667 20900.0000
-5984 39216.6667 20950.0000
-5985 39216.6667 20983.3333
-5986 39216.6667 21033.3333
-5987 39216.6667 21066.6667
-5988 39216.6667 21200.0000
-5989 39216.6667 21233.3333
-5990 39216.6667 21250.0000
-5991 39216.6667 21300.0000
-5992 39216.6667 21316.6667
-5993 39216.6667 21333.3333
-5994 39216.6667 21350.0000
-5995 39216.6667 21366.6667
-5996 39216.6667 21416.6667
-5997 39216.6667 21450.0000
-5998 39216.6667 21616.6667
-5999 39216.6667 21783.3333
-6000 39216.6667 21816.6667
-6001 39216.6667 21866.6667
-6002 39216.6667 21983.3333
-6003 39216.6667 22016.6667
-6004 39216.6667 22050.0000
-6005 39216.6667 22516.6667
-6006 39216.6667 22566.6667
-6007 39216.6667 22600.0000
-6008 39216.6667 22616.6667
-6009 39216.6667 22650.0000
-6010 39216.6667 23933.3333
-6011 39216.6667 25850.0000
-6012 39216.6667 26033.3333
-6013 39216.6667 26050.0000
-6014 39216.6667 26200.0000
-6015 39219.1667 26206.6667
-6016 39219.7222 20518.8889
-6017 39225.5556 26439.4444
-6018 39227.7778 20158.8889
-6019 39229.4444 26457.7778
-6020 39230.0000 26218.6111
-6021 39232.7778 26208.0556
-6022 39233.3333 20133.3333
-6023 39233.3333 20150.0000
-6024 39233.3333 20166.6667
-6025 39233.3333 20600.0000
-6026 39233.3333 20616.6667
-6027 39233.3333 20650.0000
-6028 39233.3333 20683.3333
-6029 39233.3333 20716.6667
-6030 39233.3333 20866.6667
-6031 39233.3333 20883.3333
-6032 39233.3333 20933.3333
-6033 39233.3333 21050.0000
-6034 39233.3333 21100.0000
-6035 39233.3333 21150.0000
-6036 39233.3333 21183.3333
-6037 39233.3333 21216.6667
-6038 39233.3333 21233.3333
-6039 39233.3333 21316.6667
-6040 39233.3333 21333.3333
-6041 39233.3333 21366.6667
-6042 39233.3333 21383.3333
-6043 39233.3333 21433.3333
-6044 39233.3333 21450.0000
-6045 39233.3333 21516.6667
-6046 39233.3333 21600.0000
-6047 39233.3333 21633.3333
-6048 39233.3333 21666.6667
-6049 39233.3333 21683.3333
-6050 39233.3333 21766.6667
-6051 39233.3333 21783.3333
-6052 39233.3333 21800.0000
-6053 39233.3333 21866.6667
-6054 39233.3333 21950.0000
-6055 39233.3333 22250.0000
-6056 39233.3333 22666.6667
-6057 39233.3333 22683.3333
-6058 39233.3333 22700.0000
-6059 39233.3333 22766.6667
-6060 39233.3333 23200.0000
-6061 39233.3333 23216.6667
-6062 39233.3333 23250.0000
-6063 39233.3333 23283.3333
-6064 39233.3333 23300.0000
-6065 39233.3333 23316.6667
-6066 39233.3333 25983.3333
-6067 39233.3333 26000.0000
-6068 39233.3333 26050.0000
-6069 39236.3889 20131.6667
-6070 39236.6667 20539.7222
-6071 39239.1667 20485.0000
-6072 39240.2778 26200.5556
-6073 39248.0556 26271.6667
-6074 39250.0000 20533.3333
-6075 39250.0000 20566.6667
-6076 39250.0000 20583.3333
-6077 39250.0000 20616.6667
-6078 39250.0000 20633.3333
-6079 39250.0000 20750.0000
-6080 39250.0000 20783.3333
-6081 39250.0000 20833.3333
-6082 39250.0000 20983.3333
-6083 39250.0000 21000.0000
-6084 39250.0000 21016.6667
-6085 39250.0000 21033.3333
-6086 39250.0000 21050.0000
-6087 39250.0000 21133.3333
-6088 39250.0000 21166.6667
-6089 39250.0000 21183.3333
-6090 39250.0000 21200.0000
-6091 39250.0000 21233.3333
-6092 39250.0000 21316.6667
-6093 39250.0000 21383.3333
-6094 39250.0000 21400.0000
-6095 39250.0000 21500.0000
-6096 39250.0000 21550.0000
-6097 39250.0000 21666.6667
-6098 39250.0000 21716.6667
-6099 39250.0000 21733.3333
-6100 39250.0000 21833.3333
-6101 39250.0000 22050.0000
-6102 39250.0000 22100.0000
-6103 39250.0000 22183.3333
-6104 39250.0000 22216.6667
-6105 39250.0000 22383.3333
-6106 39250.0000 22450.0000
-6107 39250.0000 22483.3333
-6108 39250.0000 22583.3333
-6109 39250.0000 22616.6667
-6110 39250.0000 22750.0000
-6111 39250.0000 23183.3333
-6112 39250.0000 23266.6667
-6113 39250.0000 23283.3333
-6114 39250.0000 23300.0000
-6115 39250.0000 26100.0000
-6116 39266.6667 20533.3333
-6117 39266.6667 20566.6667
-6118 39266.6667 20600.0000
-6119 39266.6667 20700.0000
-6120 39266.6667 20800.0000
-6121 39266.6667 20850.0000
-6122 39266.6667 20883.3333
-6123 39266.6667 20950.0000
-6124 39266.6667 20983.3333
-6125 39266.6667 21000.0000
-6126 39266.6667 21016.6667
-6127 39266.6667 21166.6667
-6128 39266.6667 21183.3333
-6129 39266.6667 21216.6667
-6130 39266.6667 21300.0000
-6131 39266.6667 21333.3333
-6132 39266.6667 21366.6667
-6133 39266.6667 21383.3333
-6134 39266.6667 21433.3333
-6135 39266.6667 21483.3333
-6136 39266.6667 21533.3333
-6137 39266.6667 21550.0000
-6138 39266.6667 21583.3333
-6139 39266.6667 21600.0000
-6140 39266.6667 21666.6667
-6141 39266.6667 21700.0000
-6142 39266.6667 21716.6667
-6143 39266.6667 21933.3333
-6144 39266.6667 22033.3333
-6145 39266.6667 22083.3333
-6146 39266.6667 22150.0000
-6147 39266.6667 22216.6667
-6148 39266.6667 22333.3333
-6149 39266.6667 22416.6667
-6150 39266.6667 22466.6667
-6151 39266.6667 22516.6667
-6152 39266.6667 22750.0000
-6153 39266.6667 23166.6667
-6154 39266.6667 23950.0000
-6155 39266.6667 25966.6667
-6156 39266.6667 26066.6667
-6157 39266.6667 26150.0000
-6158 39270.0000 26287.5000
-6159 39275.0000 26376.6667
-6160 39280.8333 20427.7778
-6161 39283.3333 20450.0000
-6162 39283.3333 20550.0000
-6163 39283.3333 20600.0000
-6164 39283.3333 20633.3333
-6165 39283.3333 20666.6667
-6166 39283.3333 20683.3333
-6167 39283.3333 20700.0000
-6168 39283.3333 20766.6667
-6169 39283.3333 20800.0000
-6170 39283.3333 20900.0000
-6171 39283.3333 20933.3333
-6172 39283.3333 21000.0000
-6173 39283.3333 21033.3333
-6174 39283.3333 21050.0000
-6175 39283.3333 21066.6667
-6176 39283.3333 21100.0000
-6177 39283.3333 21116.6667
-6178 39283.3333 21133.3333
-6179 39283.3333 21200.0000
-6180 39283.3333 21233.3333
-6181 39283.3333 21266.6667
-6182 39283.3333 21283.3333
-6183 39283.3333 21333.3333
-6184 39283.3333 21366.6667
-6185 39283.3333 21383.3333
-6186 39283.3333 21416.6667
-6187 39283.3333 21433.3333
-6188 39283.3333 21450.0000
-6189 39283.3333 21466.6667
-6190 39283.3333 21483.3333
-6191 39283.3333 21500.0000
-6192 39283.3333 21533.3333
-6193 39283.3333 21566.6667
-6194 39283.3333 21583.3333
-6195 39283.3333 21600.0000
-6196 39283.3333 21700.0000
-6197 39283.3333 21733.3333
-6198 39283.3333 21750.0000
-6199 39283.3333 21783.3333
-6200 39283.3333 21800.0000
-6201 39283.3333 21850.0000
-6202 39283.3333 21900.0000
-6203 39283.3333 21966.6667
-6204 39283.3333 22050.0000
-6205 39283.3333 22116.6667
-6206 39283.3333 22283.3333
-6207 39283.3333 22550.0000
-6208 39283.3333 22650.0000
-6209 39283.3333 22816.6667
-6210 39283.3333 23183.3333
-6211 39283.3333 23216.6667
-6212 39283.3333 23266.6667
-6213 39284.1667 20402.2222
-6214 39300.0000 20366.6667
-6215 39300.0000 20483.3333
-6216 39300.0000 20550.0000
-6217 39300.0000 20683.3333
-6218 39300.0000 20716.6667
-6219 39300.0000 20766.6667
-6220 39300.0000 20800.0000
-6221 39300.0000 20866.6667
-6222 39300.0000 20900.0000
-6223 39300.0000 20983.3333
-6224 39300.0000 21016.6667
-6225 39300.0000 21200.0000
-6226 39300.0000 21216.6667
-6227 39300.0000 21283.3333
-6228 39300.0000 21316.6667
-6229 39300.0000 21400.0000
-6230 39300.0000 21416.6667
-6231 39300.0000 21533.3333
-6232 39300.0000 21683.3333
-6233 39300.0000 21700.0000
-6234 39300.0000 21716.6667
-6235 39300.0000 21733.3333
-6236 39300.0000 21833.3333
-6237 39300.0000 21933.3333
-6238 39300.0000 22050.0000
-6239 39300.0000 22066.6667
-6240 39300.0000 22133.3333
-6241 39300.0000 22200.0000
-6242 39300.0000 22383.3333
-6243 39300.0000 22500.0000
-6244 39300.0000 22600.0000
-6245 39300.0000 22616.6667
-6246 39300.0000 23116.6667
-6247 39300.0000 26133.3333
-6248 39300.0000 26183.3333
-6249 39311.6667 26219.7222
-6250 39311.6667 26333.8889
-6251 39312.7778 20357.7778
-6252 39313.6111 20427.7778
-6253 39316.6667 20333.3333
-6254 39316.6667 20433.3333
-6255 39316.6667 20450.0000
-6256 39316.6667 20500.0000
-6257 39316.6667 20583.3333
-6258 39316.6667 20600.0000
-6259 39316.6667 20616.6667
-6260 39316.6667 20700.0000
-6261 39316.6667 20766.6667
-6262 39316.6667 20800.0000
-6263 39316.6667 20883.3333
-6264 39316.6667 20933.3333
-6265 39316.6667 20950.0000
-6266 39316.6667 21000.0000
-6267 39316.6667 21016.6667
-6268 39316.6667 21033.3333
-6269 39316.6667 21083.3333
-6270 39316.6667 21216.6667
-6271 39316.6667 21300.0000
-6272 39316.6667 21433.3333
-6273 39316.6667 21466.6667
-6274 39316.6667 21500.0000
-6275 39316.6667 21700.0000
-6276 39316.6667 21716.6667
-6277 39316.6667 21783.3333
-6278 39316.6667 21800.0000
-6279 39316.6667 21816.6667
-6280 39316.6667 21866.6667
-6281 39316.6667 21883.3333
-6282 39316.6667 21900.0000
-6283 39316.6667 21916.6667
-6284 39316.6667 22233.3333
-6285 39316.6667 22300.0000
-6286 39316.6667 22316.6667
-6287 39316.6667 22500.0000
-6288 39316.6667 22633.3333
-6289 39316.6667 22683.3333
-6290 39316.6667 22716.6667
-6291 39316.6667 23100.0000
-6292 39316.6667 23133.3333
-6293 39317.5000 26244.1667
-6294 39328.6111 26279.4444
-6295 39333.3333 20450.0000
-6296 39333.3333 20600.0000
-6297 39333.3333 20716.6667
-6298 39333.3333 20733.3333
-6299 39333.3333 20766.6667
-6300 39333.3333 20783.3333
-6301 39333.3333 20883.3333
-6302 39333.3333 20900.0000
-6303 39333.3333 20916.6667
-6304 39333.3333 20933.3333
-6305 39333.3333 20950.0000
-6306 39333.3333 21000.0000
-6307 39333.3333 21050.0000
-6308 39333.3333 21066.6667
-6309 39333.3333 21083.3333
-6310 39333.3333 21183.3333
-6311 39333.3333 21233.3333
-6312 39333.3333 21266.6667
-6313 39333.3333 21300.0000
-6314 39333.3333 21333.3333
-6315 39333.3333 21400.0000
-6316 39333.3333 21416.6667
-6317 39333.3333 21433.3333
-6318 39333.3333 21466.6667
-6319 39333.3333 21483.3333
-6320 39333.3333 21500.0000
-6321 39333.3333 21516.6667
-6322 39333.3333 21683.3333
-6323 39333.3333 21833.3333
-6324 39333.3333 21866.6667
-6325 39333.3333 21950.0000
-6326 39333.3333 21983.3333
-6327 39333.3333 22016.6667
-6328 39333.3333 22100.0000
-6329 39333.3333 22150.0000
-6330 39333.3333 22366.6667
-6331 39333.3333 22383.3333
-6332 39333.3333 22416.6667
-6333 39333.3333 22433.3333
-6334 39333.3333 22450.0000
-6335 39333.3333 22500.0000
-6336 39333.3333 22550.0000
-6337 39333.3333 22583.3333
-6338 39333.3333 22700.0000
-6339 39333.3333 22766.6667
-6340 39333.3333 23016.6667
-6341 39333.3333 23033.3333
-6342 39333.3333 23050.0000
-6343 39333.3333 23116.6667
-6344 39333.3333 23133.3333
-6345 39333.3333 23150.0000
-6346 39333.3333 23216.6667
-6347 39333.3333 26183.3333
-6348 39333.3333 26216.6667
-6349 39334.7222 26311.3889
-6350 39344.7222 26362.5000
-6351 39348.0556 26321.6667
-6352 39350.0000 20416.6667
-6353 39350.0000 20433.3333
-6354 39350.0000 20450.0000
-6355 39350.0000 20550.0000
-6356 39350.0000 20583.3333
-6357 39350.0000 20650.0000
-6358 39350.0000 20700.0000
-6359 39350.0000 20750.0000
-6360 39350.0000 20766.6667
-6361 39350.0000 20800.0000
-6362 39350.0000 20883.3333
-6363 39350.0000 20916.6667
-6364 39350.0000 20950.0000
-6365 39350.0000 20966.6667
-6366 39350.0000 21000.0000
-6367 39350.0000 21016.6667
-6368 39350.0000 21033.3333
-6369 39350.0000 21050.0000
-6370 39350.0000 21066.6667
-6371 39350.0000 21100.0000
-6372 39350.0000 21150.0000
-6373 39350.0000 21183.3333
-6374 39350.0000 21200.0000
-6375 39350.0000 21216.6667
-6376 39350.0000 21266.6667
-6377 39350.0000 21283.3333
-6378 39350.0000 21300.0000
-6379 39350.0000 21316.6667
-6380 39350.0000 21333.3333
-6381 39350.0000 21350.0000
-6382 39350.0000 21450.0000
-6383 39350.0000 21466.6667
-6384 39350.0000 21500.0000
-6385 39350.0000 21533.3333
-6386 39350.0000 21666.6667
-6387 39350.0000 21683.3333
-6388 39350.0000 21750.0000
-6389 39350.0000 21766.6667
-6390 39350.0000 21833.3333
-6391 39350.0000 21900.0000
-6392 39350.0000 22083.3333
-6393 39350.0000 22216.6667
-6394 39350.0000 22266.6667
-6395 39350.0000 22300.0000
-6396 39350.0000 22333.3333
-6397 39350.0000 22500.0000
-6398 39350.0000 22550.0000
-6399 39350.0000 22616.6667
-6400 39350.0000 22833.3333
-6401 39350.0000 22866.6667
-6402 39350.0000 22900.0000
-6403 39350.0000 23066.6667
-6404 39350.0000 23083.3333
-6405 39350.0000 23200.0000
-6406 39360.8333 26263.6111
-6407 39361.3889 26295.8333
-6408 39366.6667 20283.3333
-6409 39366.6667 20400.0000
-6410 39366.6667 20533.3333
-6411 39366.6667 20566.6667
-6412 39366.6667 20583.3333
-6413 39366.6667 20700.0000
-6414 39366.6667 20783.3333
-6415 39366.6667 20866.6667
-6416 39366.6667 20883.3333
-6417 39366.6667 20950.0000
-6418 39366.6667 21016.6667
-6419 39366.6667 21033.3333
-6420 39366.6667 21050.0000
-6421 39366.6667 21066.6667
-6422 39366.6667 21100.0000
-6423 39366.6667 21116.6667
-6424 39366.6667 21133.3333
-6425 39366.6667 21200.0000
-6426 39366.6667 21216.6667
-6427 39366.6667 21233.3333
-6428 39366.6667 21266.6667
-6429 39366.6667 21283.3333
-6430 39366.6667 21300.0000
-6431 39366.6667 21333.3333
-6432 39366.6667 21400.0000
-6433 39366.6667 21416.6667
-6434 39366.6667 21533.3333
-6435 39366.6667 21600.0000
-6436 39366.6667 21616.6667
-6437 39366.6667 21633.3333
-6438 39366.6667 21666.6667
-6439 39366.6667 21816.6667
-6440 39366.6667 21916.6667
-6441 39366.6667 21966.6667
-6442 39366.6667 22000.0000
-6443 39366.6667 22083.3333
-6444 39366.6667 22133.3333
-6445 39366.6667 22400.0000
-6446 39366.6667 22516.6667
-6447 39366.6667 22766.6667
-6448 39366.6667 22950.0000
-6449 39366.6667 22983.3333
-6450 39366.6667 23066.6667
-6451 39366.6667 23183.3333
-6452 39366.6667 26166.6667
-6453 39366.6667 26283.3333
-6454 39368.8889 20303.8889
-6455 39373.6111 26303.6111
-6456 39383.3333 20066.6667
-6457 39383.3333 20083.3333
-6458 39383.3333 20116.6667
-6459 39383.3333 20383.3333
-6460 39383.3333 20483.3333
-6461 39383.3333 20566.6667
-6462 39383.3333 20583.3333
-6463 39383.3333 20700.0000
-6464 39383.3333 20850.0000
-6465 39383.3333 20900.0000
-6466 39383.3333 21000.0000
-6467 39383.3333 21016.6667
-6468 39383.3333 21033.3333
-6469 39383.3333 21050.0000
-6470 39383.3333 21066.6667
-6471 39383.3333 21100.0000
-6472 39383.3333 21133.3333
-6473 39383.3333 21183.3333
-6474 39383.3333 21200.0000
-6475 39383.3333 21216.6667
-6476 39383.3333 21233.3333
-6477 39383.3333 21250.0000
-6478 39383.3333 21266.6667
-6479 39383.3333 21283.3333
-6480 39383.3333 21400.0000
-6481 39383.3333 21466.6667
-6482 39383.3333 21633.3333
-6483 39383.3333 21700.0000
-6484 39383.3333 21766.6667
-6485 39383.3333 21816.6667
-6486 39383.3333 21866.6667
-6487 39383.3333 21916.6667
-6488 39383.3333 21983.3333
-6489 39383.3333 22233.3333
-6490 39383.3333 22266.6667
-6491 39383.3333 22333.3333
-6492 39383.3333 22350.0000
-6493 39383.3333 22500.0000
-6494 39383.3333 22516.6667
-6495 39383.3333 22566.6667
-6496 39383.3333 22750.0000
-6497 39383.3333 22916.6667
-6498 39383.3333 22966.6667
-6499 39383.3333 22983.3333
-6500 39383.3333 23000.0000
-6501 39383.3333 23050.0000
-6502 39383.3333 23183.3333
-6503 39400.0000 20050.0000
-6504 39400.0000 20066.6667
-6505 39400.0000 20083.3333
-6506 39400.0000 20333.3333
-6507 39400.0000 20350.0000
-6508 39400.0000 20366.6667
-6509 39400.0000 20383.3333
-6510 39400.0000 20416.6667
-6511 39400.0000 20483.3333
-6512 39400.0000 20566.6667
-6513 39400.0000 20783.3333
-6514 39400.0000 20816.6667
-6515 39400.0000 20966.6667
-6516 39400.0000 21016.6667
-6517 39400.0000 21050.0000
-6518 39400.0000 21066.6667
-6519 39400.0000 21083.3333
-6520 39400.0000 21100.0000
-6521 39400.0000 21116.6667
-6522 39400.0000 21283.3333
-6523 39400.0000 21333.3333
-6524 39400.0000 21366.6667
-6525 39400.0000 21600.0000
-6526 39400.0000 21633.3333
-6527 39400.0000 21666.6667
-6528 39400.0000 21700.0000
-6529 39400.0000 21733.3333
-6530 39400.0000 21750.0000
-6531 39400.0000 21800.0000
-6532 39400.0000 21816.6667
-6533 39400.0000 21900.0000
-6534 39400.0000 22016.6667
-6535 39400.0000 22066.6667
-6536 39400.0000 22200.0000
-6537 39400.0000 22216.6667
-6538 39400.0000 22416.6667
-6539 39400.0000 22433.3333
-6540 39400.0000 22466.6667
-6541 39400.0000 22716.6667
-6542 39400.0000 22733.3333
-6543 39400.0000 22983.3333
-6544 39400.0000 23133.3333
-6545 39400.0000 23166.6667
-6546 39405.2778 20253.0556
-6547 39416.6667 20016.6667
-6548 39416.6667 20066.6667
-6549 39416.6667 20083.3333
-6550 39416.6667 20300.0000
-6551 39416.6667 20316.6667
-6552 39416.6667 20366.6667
-6553 39416.6667 20383.3333
-6554 39416.6667 20500.0000
-6555 39416.6667 20550.0000
-6556 39416.6667 20566.6667
-6557 39416.6667 20616.6667
-6558 39416.6667 20633.3333
-6559 39416.6667 20700.0000
-6560 39416.6667 20766.6667
-6561 39416.6667 20783.3333
-6562 39416.6667 20816.6667
-6563 39416.6667 20833.3333
-6564 39416.6667 20850.0000
-6565 39416.6667 20866.6667
-6566 39416.6667 20900.0000
-6567 39416.6667 20916.6667
-6568 39416.6667 20933.3333
-6569 39416.6667 20950.0000
-6570 39416.6667 20983.3333
-6571 39416.6667 21016.6667
-6572 39416.6667 21033.3333
-6573 39416.6667 21050.0000
-6574 39416.6667 21066.6667
-6575 39416.6667 21083.3333
-6576 39416.6667 21100.0000
-6577 39416.6667 21116.6667
-6578 39416.6667 21266.6667
-6579 39416.6667 21383.3333
-6580 39416.6667 21483.3333
-6581 39416.6667 21500.0000
-6582 39416.6667 21533.3333
-6583 39416.6667 21583.3333
-6584 39416.6667 21600.0000
-6585 39416.6667 21633.3333
-6586 39416.6667 21700.0000
-6587 39416.6667 21733.3333
-6588 39416.6667 21750.0000
-6589 39416.6667 21783.3333
-6590 39416.6667 21800.0000
-6591 39416.6667 21966.6667
-6592 39416.6667 22100.0000
-6593 39416.6667 22166.6667
-6594 39416.6667 22383.3333
-6595 39416.6667 22433.3333
-6596 39416.6667 22616.6667
-6597 39416.6667 22650.0000
-6598 39416.6667 22933.3333
-6599 39416.6667 23133.3333
-6600 39416.6667 23150.0000
-6601 39419.7222 20084.1667
-6602 39424.4444 20073.0556
-6603 39433.3333 19983.3333
-6604 39433.3333 20000.0000
-6605 39433.3333 20050.0000
-6606 39433.3333 20283.3333
-6607 39433.3333 20333.3333
-6608 39433.3333 20400.0000
-6609 39433.3333 20433.3333
-6610 39433.3333 20466.6667
-6611 39433.3333 20483.3333
-6612 39433.3333 20533.3333
-6613 39433.3333 20550.0000
-6614 39433.3333 20633.3333
-6615 39433.3333 20683.3333
-6616 39433.3333 20716.6667
-6617 39433.3333 20733.3333
-6618 39433.3333 20750.0000
-6619 39433.3333 20766.6667
-6620 39433.3333 20783.3333
-6621 39433.3333 20833.3333
-6622 39433.3333 20883.3333
-6623 39433.3333 20916.6667
-6624 39433.3333 20950.0000
-6625 39433.3333 20983.3333
-6626 39433.3333 21016.6667
-6627 39433.3333 21033.3333
-6628 39433.3333 21050.0000
-6629 39433.3333 21083.3333
-6630 39433.3333 21100.0000
-6631 39433.3333 21116.6667
-6632 39433.3333 21216.6667
-6633 39433.3333 21350.0000
-6634 39433.3333 21366.6667
-6635 39433.3333 21383.3333
-6636 39433.3333 21433.3333
-6637 39433.3333 21516.6667
-6638 39433.3333 21533.3333
-6639 39433.3333 21566.6667
-6640 39433.3333 21666.6667
-6641 39433.3333 21716.6667
-6642 39433.3333 21750.0000
-6643 39433.3333 21766.6667
-6644 39433.3333 21833.3333
-6645 39433.3333 21866.6667
-6646 39433.3333 22050.0000
-6647 39433.3333 22100.0000
-6648 39433.3333 22133.3333
-6649 39433.3333 22183.3333
-6650 39433.3333 22300.0000
-6651 39433.3333 22333.3333
-6652 39433.3333 22683.3333
-6653 39433.3333 22750.0000
-6654 39433.3333 22883.3333
-6655 39433.3333 23116.6667
-6656 39436.1111 19978.3333
-6657 39450.0000 19983.3333
-6658 39450.0000 20000.0000
-6659 39450.0000 20066.6667
-6660 39450.0000 20266.6667
-6661 39450.0000 20283.3333
-6662 39450.0000 20300.0000
-6663 39450.0000 20316.6667
-6664 39450.0000 20400.0000
-6665 39450.0000 20450.0000
-6666 39450.0000 20533.3333
-6667 39450.0000 20600.0000
-6668 39450.0000 20683.3333
-6669 39450.0000 20716.6667
-6670 39450.0000 20733.3333
-6671 39450.0000 20766.6667
-6672 39450.0000 20816.6667
-6673 39450.0000 20833.3333
-6674 39450.0000 21000.0000
-6675 39450.0000 21016.6667
-6676 39450.0000 21033.3333
-6677 39450.0000 21066.6667
-6678 39450.0000 21083.3333
-6679 39450.0000 21100.0000
-6680 39450.0000 21116.6667
-6681 39450.0000 21233.3333
-6682 39450.0000 21250.0000
-6683 39450.0000 21316.6667
-6684 39450.0000 21333.3333
-6685 39450.0000 21366.6667
-6686 39450.0000 21383.3333
-6687 39450.0000 21416.6667
-6688 39450.0000 21466.6667
-6689 39450.0000 21483.3333
-6690 39450.0000 21500.0000
-6691 39450.0000 21516.6667
-6692 39450.0000 21533.3333
-6693 39450.0000 21550.0000
-6694 39450.0000 21566.6667
-6695 39450.0000 21800.0000
-6696 39450.0000 21833.3333
-6697 39450.0000 21966.6667
-6698 39450.0000 22083.3333
-6699 39450.0000 22150.0000
-6700 39450.0000 22250.0000
-6701 39450.0000 22333.3333
-6702 39450.0000 22350.0000
-6703 39450.0000 22483.3333
-6704 39450.0000 22533.3333
-6705 39450.0000 22550.0000
-6706 39450.0000 23100.0000
-6707 39450.0000 23116.6667
-6708 39458.0556 19958.0556
-6709 39466.6667 19916.6667
-6710 39466.6667 19933.3333
-6711 39466.6667 19950.0000
-6712 39466.6667 20316.6667
-6713 39466.6667 20333.3333
-6714 39466.6667 20350.0000
-6715 39466.6667 20366.6667
-6716 39466.6667 20416.6667
-6717 39466.6667 20433.3333
-6718 39466.6667 20516.6667
-6719 39466.6667 20666.6667
-6720 39466.6667 20716.6667
-6721 39466.6667 20750.0000
-6722 39466.6667 20816.6667
-6723 39466.6667 20833.3333
-6724 39466.6667 20850.0000
-6725 39466.6667 20900.0000
-6726 39466.6667 20916.6667
-6727 39466.6667 20966.6667
-6728 39466.6667 21033.3333
-6729 39466.6667 21050.0000
-6730 39466.6667 21083.3333
-6731 39466.6667 21100.0000
-6732 39466.6667 21250.0000
-6733 39466.6667 21283.3333
-6734 39466.6667 21316.6667
-6735 39466.6667 21350.0000
-6736 39466.6667 21366.6667
-6737 39466.6667 21416.6667
-6738 39466.6667 21433.3333
-6739 39466.6667 21450.0000
-6740 39466.6667 21533.3333
-6741 39466.6667 21566.6667
-6742 39466.6667 21616.6667
-6743 39466.6667 21666.6667
-6744 39466.6667 21700.0000
-6745 39466.6667 21733.3333
-6746 39466.6667 21833.3333
-6747 39466.6667 21866.6667
-6748 39466.6667 21900.0000
-6749 39466.6667 22083.3333
-6750 39466.6667 22166.6667
-6751 39466.6667 22216.6667
-6752 39466.6667 22283.3333
-6753 39466.6667 22450.0000
-6754 39466.6667 22500.0000
-6755 39466.6667 22733.3333
-6756 39466.6667 22916.6667
-6757 39474.4444 19931.9444
-6758 39483.3333 19916.6667
-6759 39483.3333 20266.6667
-6760 39483.3333 20300.0000
-6761 39483.3333 20333.3333
-6762 39483.3333 20400.0000
-6763 39483.3333 20466.6667
-6764 39483.3333 20500.0000
-6765 39483.3333 20566.6667
-6766 39483.3333 20666.6667
-6767 39483.3333 20850.0000
-6768 39483.3333 20866.6667
-6769 39483.3333 20883.3333
-6770 39483.3333 20916.6667
-6771 39483.3333 20966.6667
-6772 39483.3333 21033.3333
-6773 39483.3333 21050.0000
-6774 39483.3333 21066.6667
-6775 39483.3333 21083.3333
-6776 39483.3333 21100.0000
-6777 39483.3333 21316.6667
-6778 39483.3333 21333.3333
-6779 39483.3333 21533.3333
-6780 39483.3333 21550.0000
-6781 39483.3333 21716.6667
-6782 39483.3333 21850.0000
-6783 39483.3333 21900.0000
-6784 39483.3333 21983.3333
-6785 39483.3333 22200.0000
-6786 39483.3333 22266.6667
-6787 39483.3333 22600.0000
-6788 39483.3333 22700.0000
-6789 39483.3333 22950.0000
-6790 39483.3333 23100.0000
-6791 39495.8333 19873.0556
-6792 39500.0000 19916.6667
-6793 39500.0000 20266.6667
-6794 39500.0000 20316.6667
-6795 39500.0000 20366.6667
-6796 39500.0000 20383.3333
-6797 39500.0000 20416.6667
-6798 39500.0000 20433.3333
-6799 39500.0000 20466.6667
-6800 39500.0000 20500.0000
-6801 39500.0000 20533.3333
-6802 39500.0000 20650.0000
-6803 39500.0000 20683.3333
-6804 39500.0000 20750.0000
-6805 39500.0000 20866.6667
-6806 39500.0000 20916.6667
-6807 39500.0000 20950.0000
-6808 39500.0000 20966.6667
-6809 39500.0000 20983.3333
-6810 39500.0000 21000.0000
-6811 39500.0000 21033.3333
-6812 39500.0000 21050.0000
-6813 39500.0000 21083.3333
-6814 39500.0000 21316.6667
-6815 39500.0000 21350.0000
-6816 39500.0000 21516.6667
-6817 39500.0000 21533.3333
-6818 39500.0000 21616.6667
-6819 39500.0000 21683.3333
-6820 39500.0000 21783.3333
-6821 39500.0000 21900.0000
-6822 39500.0000 22016.6667
-6823 39500.0000 22050.0000
-6824 39500.0000 22150.0000
-6825 39500.0000 22250.0000
-6826 39500.0000 22450.0000
-6827 39500.0000 22550.0000
-6828 39500.0000 22633.3333
-6829 39500.0000 22650.0000
-6830 39500.0000 22700.0000
-6831 39500.0000 22883.3333
-6832 39500.0000 23066.6667
-6833 39516.6667 19866.6667
-6834 39516.6667 19900.0000
-6835 39516.6667 20350.0000
-6836 39516.6667 20433.3333
-6837 39516.6667 20550.0000
-6838 39516.6667 20566.6667
-6839 39516.6667 20600.0000
-6840 39516.6667 20633.3333
-6841 39516.6667 20683.3333
-6842 39516.6667 20733.3333
-6843 39516.6667 20800.0000
-6844 39516.6667 20816.6667
-6845 39516.6667 20950.0000
-6846 39516.6667 20983.3333
-6847 39516.6667 21050.0000
-6848 39516.6667 21066.6667
-6849 39516.6667 21083.3333
-6850 39516.6667 21150.0000
-6851 39516.6667 21600.0000
-6852 39516.6667 21650.0000
-6853 39516.6667 21666.6667
-6854 39516.6667 21700.0000
-6855 39516.6667 21750.0000
-6856 39516.6667 21800.0000
-6857 39516.6667 21866.6667
-6858 39516.6667 21950.0000
-6859 39516.6667 22083.3333
-6860 39516.6667 22100.0000
-6861 39516.6667 22116.6667
-6862 39516.6667 22316.6667
-6863 39516.6667 22466.6667
-6864 39516.6667 22550.0000
-6865 39516.6667 22683.3333
-6866 39525.5556 20257.2222
-6867 39533.3333 19850.0000
-6868 39533.3333 19866.6667
-6869 39533.3333 19900.0000
-6870 39533.3333 19916.6667
-6871 39533.3333 20283.3333
-6872 39533.3333 20350.0000
-6873 39533.3333 20400.0000
-6874 39533.3333 20466.6667
-6875 39533.3333 20550.0000
-6876 39533.3333 20666.6667
-6877 39533.3333 20716.6667
-6878 39533.3333 20733.3333
-6879 39533.3333 20783.3333
-6880 39533.3333 20850.0000
-6881 39533.3333 20916.6667
-6882 39533.3333 21033.3333
-6883 39533.3333 21050.0000
-6884 39533.3333 21066.6667
-6885 39533.3333 21083.3333
-6886 39533.3333 21100.0000
-6887 39533.3333 21116.6667
-6888 39533.3333 21250.0000
-6889 39533.3333 21300.0000
-6890 39533.3333 21366.6667
-6891 39533.3333 21400.0000
-6892 39533.3333 21433.3333
-6893 39533.3333 21466.6667
-6894 39533.3333 21566.6667
-6895 39533.3333 21583.3333
-6896 39533.3333 21616.6667
-6897 39533.3333 21633.3333
-6898 39533.3333 21683.3333
-6899 39533.3333 21700.0000
-6900 39533.3333 21766.6667
-6901 39533.3333 21800.0000
-6902 39533.3333 21833.3333
-6903 39533.3333 21866.6667
-6904 39533.3333 21933.3333
-6905 39533.3333 21983.3333
-6906 39533.3333 22000.0000
-6907 39533.3333 22166.6667
-6908 39533.3333 22233.3333
-6909 39533.3333 22266.6667
-6910 39533.3333 22366.6667
-6911 39533.3333 22500.0000
-6912 39533.3333 22666.6667
-6913 39538.8889 24991.6667
-6914 39546.3889 19911.1111
-6915 39550.0000 19866.6667
-6916 39550.0000 19883.3333
-6917 39550.0000 20266.6667
-6918 39550.0000 20316.6667
-6919 39550.0000 20366.6667
-6920 39550.0000 20433.3333
-6921 39550.0000 20516.6667
-6922 39550.0000 20550.0000
-6923 39550.0000 20583.3333
-6924 39550.0000 20600.0000
-6925 39550.0000 20633.3333
-6926 39550.0000 20683.3333
-6927 39550.0000 20766.6667
-6928 39550.0000 20900.0000
-6929 39550.0000 20950.0000
-6930 39550.0000 21016.6667
-6931 39550.0000 21033.3333
-6932 39550.0000 21050.0000
-6933 39550.0000 21116.6667
-6934 39550.0000 21366.6667
-6935 39550.0000 21583.3333
-6936 39550.0000 21616.6667
-6937 39550.0000 21633.3333
-6938 39550.0000 21650.0000
-6939 39550.0000 21666.6667
-6940 39550.0000 21683.3333
-6941 39550.0000 21700.0000
-6942 39550.0000 21750.0000
-6943 39550.0000 21766.6667
-6944 39550.0000 21900.0000
-6945 39550.0000 22200.0000
-6946 39550.0000 22616.6667
-6947 39550.0000 22650.0000
-6948 39550.0000 22750.0000
-6949 39550.0000 22983.3333
-6950 39566.6667 19850.0000
-6951 39566.6667 19866.6667
-6952 39566.6667 19883.3333
-6953 39566.6667 19900.0000
-6954 39566.6667 19916.6667
-6955 39566.6667 20200.0000
-6956 39566.6667 20283.3333
-6957 39566.6667 20316.6667
-6958 39566.6667 20433.3333
-6959 39566.6667 20550.0000
-6960 39566.6667 20633.3333
-6961 39566.6667 20700.0000
-6962 39566.6667 20733.3333
-6963 39566.6667 20833.3333
-6964 39566.6667 20883.3333
-6965 39566.6667 20950.0000
-6966 39566.6667 21000.0000
-6967 39566.6667 21083.3333
-6968 39566.6667 21166.6667
-6969 39566.6667 21250.0000
-6970 39566.6667 21366.6667
-6971 39566.6667 21583.3333
-6972 39566.6667 21616.6667
-6973 39566.6667 21700.0000
-6974 39566.6667 21716.6667
-6975 39566.6667 21750.0000
-6976 39566.6667 21766.6667
-6977 39566.6667 21833.3333
-6978 39566.6667 21933.3333
-6979 39566.6667 22000.0000
-6980 39566.6667 22016.6667
-6981 39566.6667 22083.3333
-6982 39566.6667 22216.6667
-6983 39566.6667 22366.6667
-6984 39566.6667 22466.6667
-6985 39566.6667 22533.3333
-6986 39566.6667 22600.0000
-6987 39566.6667 22750.0000
-6988 39566.6667 22766.6667
-6989 39583.3333 19850.0000
-6990 39583.3333 19866.6667
-6991 39583.3333 19883.3333
-6992 39583.3333 19900.0000
-6993 39583.3333 19916.6667
-6994 39583.3333 20333.3333
-6995 39583.3333 20400.0000
-6996 39583.3333 20466.6667
-6997 39583.3333 20550.0000
-6998 39583.3333 20600.0000
-6999 39583.3333 20616.6667
-7000 39583.3333 20666.6667
-7001 39583.3333 20700.0000
-7002 39583.3333 20716.6667
-7003 39583.3333 20800.0000
-7004 39583.3333 20883.3333
-7005 39583.3333 20916.6667
-7006 39583.3333 20933.3333
-7007 39583.3333 20950.0000
-7008 39583.3333 20983.3333
-7009 39583.3333 21000.0000
-7010 39583.3333 21033.3333
-7011 39583.3333 21066.6667
-7012 39583.3333 21083.3333
-7013 39583.3333 21116.6667
-7014 39583.3333 21583.3333
-7015 39583.3333 21683.3333
-7016 39583.3333 21733.3333
-7017 39583.3333 21750.0000
-7018 39583.3333 21783.3333
-7019 39583.3333 21800.0000
-7020 39583.3333 21816.6667
-7021 39583.3333 21850.0000
-7022 39583.3333 21900.0000
-7023 39583.3333 21916.6667
-7024 39583.3333 21966.6667
-7025 39583.3333 22166.6667
-7026 39583.3333 22300.0000
-7027 39583.3333 22333.3333
-7028 39583.3333 22583.3333
-7029 39583.3333 22783.3333
-7030 39583.3333 22916.6667
-7031 39593.8889 19823.6111
-7032 39600.0000 19866.6667
-7033 39600.0000 19900.0000
-7034 39600.0000 19916.6667
-7035 39600.0000 20233.3333
-7036 39600.0000 20266.6667
-7037 39600.0000 20283.3333
-7038 39600.0000 20316.6667
-7039 39600.0000 20433.3333
-7040 39600.0000 20466.6667
-7041 39600.0000 20533.3333
-7042 39600.0000 20566.6667
-7043 39600.0000 20650.0000
-7044 39600.0000 20683.3333
-7045 39600.0000 20750.0000
-7046 39600.0000 20850.0000
-7047 39600.0000 20883.3333
-7048 39600.0000 21000.0000
-7049 39600.0000 21050.0000
-7050 39600.0000 21100.0000
-7051 39600.0000 21283.3333
-7052 39600.0000 21300.0000
-7053 39600.0000 21466.6667
-7054 39600.0000 21500.0000
-7055 39600.0000 21650.0000
-7056 39600.0000 21766.6667
-7057 39600.0000 21816.6667
-7058 39600.0000 21983.3333
-7059 39600.0000 22050.0000
-7060 39600.0000 22066.6667
-7061 39600.0000 22583.3333
-7062 39600.0000 22716.6667
-7063 39616.6667 19800.0000
-7064 39616.6667 19816.6667
-7065 39616.6667 19850.0000
-7066 39616.6667 19900.0000
-7067 39616.6667 19916.6667
-7068 39616.6667 20183.3333
-7069 39616.6667 20333.3333
-7070 39616.6667 20500.0000
-7071 39616.6667 20533.3333
-7072 39616.6667 20583.3333
-7073 39616.6667 20633.3333
-7074 39616.6667 20733.3333
-7075 39616.6667 20833.3333
-7076 39616.6667 20883.3333
-7077 39616.6667 20950.0000
-7078 39616.6667 20966.6667
-7079 39616.6667 20983.3333
-7080 39616.6667 21050.0000
-7081 39616.6667 21350.0000
-7082 39616.6667 21416.6667
-7083 39616.6667 21533.3333
-7084 39616.6667 21650.0000
-7085 39616.6667 21750.0000
-7086 39616.6667 21766.6667
-7087 39616.6667 22016.6667
-7088 39616.6667 22133.3333
-7089 39616.6667 22233.3333
-7090 39616.6667 22266.6667
-7091 39616.6667 22300.0000
-7092 39616.6667 22366.6667
-7093 39616.6667 22433.3333
-7094 39616.6667 22533.3333
-7095 39616.6667 22566.6667
-7096 39616.6667 22616.6667
-7097 39616.6667 22683.3333
-7098 39616.6667 22883.3333
-7099 39620.0000 19919.7222
-7100 39625.0000 19875.5556
-7101 39626.9444 20187.2222
-7102 39633.0556 19764.4444
-7103 39633.3333 19900.0000
-7104 39633.3333 20416.6667
-7105 39633.3333 20450.0000
-7106 39633.3333 20566.6667
-7107 39633.3333 20700.0000
-7108 39633.3333 20716.6667
-7109 39633.3333 20733.3333
-7110 39633.3333 20766.6667
-7111 39633.3333 20783.3333
-7112 39633.3333 20866.6667
-7113 39633.3333 20916.6667
-7114 39633.3333 20966.6667
-7115 39633.3333 21033.3333
-7116 39633.3333 21066.6667
-7117 39633.3333 21250.0000
-7118 39633.3333 21300.0000
-7119 39633.3333 21350.0000
-7120 39633.3333 21583.3333
-7121 39633.3333 21700.0000
-7122 39633.3333 21783.3333
-7123 39633.3333 22016.6667
-7124 39633.3333 22050.0000
-7125 39633.3333 22400.0000
-7126 39633.3333 22416.6667
-7127 39633.3333 22500.0000
-7128 39633.3333 22516.6667
-7129 39650.0000 19766.6667
-7130 39650.0000 19850.0000
-7131 39650.0000 20283.3333
-7132 39650.0000 20316.6667
-7133 39650.0000 20366.6667
-7134 39650.0000 20483.3333
-7135 39650.0000 20516.6667
-7136 39650.0000 20616.6667
-7137 39650.0000 20666.6667
-7138 39650.0000 20700.0000
-7139 39650.0000 20716.6667
-7140 39650.0000 20733.3333
-7141 39650.0000 20800.0000
-7142 39650.0000 20950.0000
-7143 39650.0000 21033.3333
-7144 39650.0000 21483.3333
-7145 39650.0000 21616.6667
-7146 39650.0000 21650.0000
-7147 39650.0000 21816.6667
-7148 39650.0000 22266.6667
-7149 39650.0000 22283.3333
-7150 39650.0000 22433.3333
-7151 39650.0000 22716.6667
-7152 39663.8889 20101.3889
-7153 39666.6667 19816.6667
-7154 39666.6667 20250.0000
-7155 39666.6667 20366.6667
-7156 39666.6667 20433.3333
-7157 39666.6667 20516.6667
-7158 39666.6667 20533.3333
-7159 39666.6667 20550.0000
-7160 39666.6667 20566.6667
-7161 39666.6667 20583.3333
-7162 39666.6667 20650.0000
-7163 39666.6667 20716.6667
-7164 39666.6667 20733.3333
-7165 39666.6667 20833.3333
-7166 39666.6667 20933.3333
-7167 39666.6667 20950.0000
-7168 39666.6667 21033.3333
-7169 39666.6667 21216.6667
-7170 39666.6667 21450.0000
-7171 39666.6667 21566.6667
-7172 39666.6667 21633.3333
-7173 39666.6667 21700.0000
-7174 39666.6667 21733.3333
-7175 39666.6667 21766.6667
-7176 39666.6667 21833.3333
-7177 39666.6667 22383.3333
-7178 39666.6667 22483.3333
-7179 39666.6667 22666.6667
-7180 39666.6667 22733.3333
-7181 39666.6667 22783.3333
-7182 39666.6667 22866.6667
-7183 39670.0000 19740.8333
-7184 39681.6667 19706.9444
-7185 39683.3333 19683.3333
-7186 39683.3333 19700.0000
-7187 39683.3333 19733.3333
-7188 39683.3333 19750.0000
-7189 39683.3333 19816.6667
-7190 39683.3333 20066.6667
-7191 39683.3333 20300.0000
-7192 39683.3333 20466.6667
-7193 39683.3333 20533.3333
-7194 39683.3333 20616.6667
-7195 39683.3333 20666.6667
-7196 39683.3333 20766.6667
-7197 39683.3333 20783.3333
-7198 39683.3333 20866.6667
-7199 39683.3333 20883.3333
-7200 39683.3333 21050.0000
-7201 39683.3333 21183.3333
-7202 39683.3333 21300.0000
-7203 39683.3333 21550.0000
-7204 39683.3333 21583.3333
-7205 39683.3333 21683.3333
-7206 39683.3333 21800.0000
-7207 39683.3333 22300.0000
-7208 39683.3333 22316.6667
-7209 39683.3333 22333.3333
-7210 39683.3333 22500.0000
-7211 39683.3333 22583.3333
-7212 39683.3333 22633.3333
-7213 39683.3333 22700.0000
-7214 39683.3333 22733.3333
-7215 39683.3333 22833.3333
-7216 39694.4444 19836.6667
-7217 39700.0000 19700.0000
-7218 39700.0000 19716.6667
-7219 39700.0000 19733.3333
-7220 39700.0000 19833.3333
-7221 39700.0000 20266.6667
-7222 39700.0000 20333.3333
-7223 39700.0000 20400.0000
-7224 39700.0000 20533.3333
-7225 39700.0000 20566.6667
-7226 39700.0000 20633.3333
-7227 39700.0000 20666.6667
-7228 39700.0000 20783.3333
-7229 39700.0000 20800.0000
-7230 39700.0000 20816.6667
-7231 39700.0000 20850.0000
-7232 39700.0000 20950.0000
-7233 39700.0000 21033.3333
-7234 39700.0000 21066.6667
-7235 39700.0000 21383.3333
-7236 39700.0000 21516.6667
-7237 39700.0000 21633.3333
-7238 39700.0000 21716.6667
-7239 39700.0000 22016.6667
-7240 39700.0000 22083.3333
-7241 39700.0000 22416.6667
-7242 39700.0000 22433.3333
-7243 39700.0000 22700.0000
-7244 39707.7778 19795.5556
-7245 39709.7222 19702.2222
-7246 39716.6667 19666.6667
-7247 39716.6667 19716.6667
-7248 39716.6667 19733.3333
-7249 39716.6667 19750.0000
-7250 39716.6667 19766.6667
-7251 39716.6667 19783.3333
-7252 39716.6667 19833.3333
-7253 39716.6667 19900.0000
-7254 39716.6667 20350.0000
-7255 39716.6667 20450.0000
-7256 39716.6667 20483.3333
-7257 39716.6667 20533.3333
-7258 39716.6667 20600.0000
-7259 39716.6667 20716.6667
-7260 39716.6667 20750.0000
-7261 39716.6667 20833.3333
-7262 39716.6667 21066.6667
-7263 39716.6667 21083.3333
-7264 39716.6667 21383.3333
-7265 39716.6667 21466.6667
-7266 39716.6667 21616.6667
-7267 39716.6667 21683.3333
-7268 39716.6667 21783.3333
-7269 39716.6667 21933.3333
-7270 39716.6667 22166.6667
-7271 39716.6667 22183.3333
-7272 39716.6667 22400.0000
-7273 39716.6667 22550.0000
-7274 39716.6667 22566.6667
-7275 39716.6667 22733.3333
-7276 39716.6667 22766.6667
-7277 39733.3333 19666.6667
-7278 39733.3333 19683.3333
-7279 39733.3333 19700.0000
-7280 39733.3333 19716.6667
-7281 39733.3333 19733.3333
-7282 39733.3333 19750.0000
-7283 39733.3333 19766.6667
-7284 39733.3333 19800.0000
-7285 39733.3333 19816.6667
-7286 39733.3333 19900.0000
-7287 39733.3333 19916.6667
-7288 39733.3333 19933.3333
-7289 39733.3333 20416.6667
-7290 39733.3333 20450.0000
-7291 39733.3333 20516.6667
-7292 39733.3333 20566.6667
-7293 39733.3333 20583.3333
-7294 39733.3333 20616.6667
-7295 39733.3333 20633.3333
-7296 39733.3333 20666.6667
-7297 39733.3333 20766.6667
-7298 39733.3333 20816.6667
-7299 39733.3333 20916.6667
-7300 39733.3333 20933.3333
-7301 39733.3333 21033.3333
-7302 39733.3333 21066.6667
-7303 39733.3333 21100.0000
-7304 39733.3333 21133.3333
-7305 39733.3333 21883.3333
-7306 39733.3333 22350.0000
-7307 39733.3333 22533.3333
-7308 39733.3333 22600.0000
-7309 39733.3333 22733.3333
-7310 39733.3333 22750.0000
-7311 39733.3333 22800.0000
-7312 39736.1111 19928.0556
-7313 39743.6111 19932.2222
-7314 39748.8889 19938.8889
-7315 39750.0000 19683.3333
-7316 39750.0000 19700.0000
-7317 39750.0000 19716.6667
-7318 39750.0000 19733.3333
-7319 39750.0000 19750.0000
-7320 39750.0000 19766.6667
-7321 39750.0000 19783.3333
-7322 39750.0000 19833.3333
-7323 39750.0000 19883.3333
-7324 39750.0000 19916.6667
-7325 39750.0000 19933.3333
-7326 39750.0000 20333.3333
-7327 39750.0000 20416.6667
-7328 39750.0000 20466.6667
-7329 39750.0000 20533.3333
-7330 39750.0000 20566.6667
-7331 39750.0000 20633.3333
-7332 39750.0000 20650.0000
-7333 39750.0000 20716.6667
-7334 39750.0000 20750.0000
-7335 39750.0000 20800.0000
-7336 39750.0000 21050.0000
-7337 39750.0000 21083.3333
-7338 39750.0000 21100.0000
-7339 39750.0000 21333.3333
-7340 39750.0000 21366.6667
-7341 39750.0000 21416.6667
-7342 39750.0000 21500.0000
-7343 39750.0000 21750.0000
-7344 39750.0000 22083.3333
-7345 39750.0000 22100.0000
-7346 39750.0000 22283.3333
-7347 39750.0000 22366.6667
-7348 39750.0000 22433.3333
-7349 39750.0000 22583.3333
-7350 39750.0000 22700.0000
-7351 39750.0000 22800.0000
-7352 39755.8333 19676.3889
-7353 39763.0556 19873.0556
-7354 39766.6667 19533.3333
-7355 39766.6667 19750.0000
-7356 39766.6667 19783.3333
-7357 39766.6667 19816.6667
-7358 39766.6667 19833.3333
-7359 39766.6667 19916.6667
-7360 39766.6667 19933.3333
-7361 39766.6667 20316.6667
-7362 39766.6667 20383.3333
-7363 39766.6667 20533.3333
-7364 39766.6667 20583.3333
-7365 39766.6667 20600.0000
-7366 39766.6667 20783.3333
-7367 39766.6667 20866.6667
-7368 39766.6667 21000.0000
-7369 39766.6667 21033.3333
-7370 39766.6667 21050.0000
-7371 39766.6667 21066.6667
-7372 39766.6667 21116.6667
-7373 39766.6667 21183.3333
-7374 39766.6667 21466.6667
-7375 39766.6667 21666.6667
-7376 39766.6667 21733.3333
-7377 39766.6667 22383.3333
-7378 39766.6667 22533.3333
-7379 39766.6667 22583.3333
-7380 39767.5000 19946.6667
-7381 39775.0000 19662.5000
-7382 39783.3333 19516.6667
-7383 39783.3333 19683.3333
-7384 39783.3333 19750.0000
-7385 39783.3333 19783.3333
-7386 39783.3333 19833.3333
-7387 39783.3333 19850.0000
-7388 39783.3333 19866.6667
-7389 39783.3333 19883.3333
-7390 39783.3333 19916.6667
-7391 39783.3333 20350.0000
-7392 39783.3333 20466.6667
-7393 39783.3333 20616.6667
-7394 39783.3333 20683.3333
-7395 39783.3333 20716.6667
-7396 39783.3333 20750.0000
-7397 39783.3333 20800.0000
-7398 39783.3333 20816.6667
-7399 39783.3333 20833.3333
-7400 39783.3333 20866.6667
-7401 39783.3333 21000.0000
-7402 39783.3333 21083.3333
-7403 39783.3333 21100.0000
-7404 39783.3333 21116.6667
-7405 39783.3333 21283.3333
-7406 39783.3333 21416.6667
-7407 39783.3333 21550.0000
-7408 39783.3333 21800.0000
-7409 39783.3333 21983.3333
-7410 39783.3333 22083.3333
-7411 39783.3333 22400.0000
-7412 39783.3333 22583.3333
-7413 39785.5556 19673.0556
-7414 39788.6111 19787.5000
-7415 39790.5556 19707.5000
-7416 39793.3333 19759.1667
-7417 39795.5556 19811.1111
-7418 39800.0000 19683.3333
-7419 39800.0000 19833.3333
-7420 39800.0000 19850.0000
-7421 39800.0000 19866.6667
-7422 39800.0000 20433.3333
-7423 39800.0000 20516.6667
-7424 39800.0000 20583.3333
-7425 39800.0000 20600.0000
-7426 39800.0000 20666.6667
-7427 39800.0000 20700.0000
-7428 39800.0000 21000.0000
-7429 39800.0000 21333.3333
-7430 39800.0000 21383.3333
-7431 39800.0000 21600.0000
-7432 39800.0000 21633.3333
-7433 39800.0000 21766.6667
-7434 39800.0000 21850.0000
-7435 39800.0000 21900.0000
-7436 39800.0000 22066.6667
-7437 39800.0000 22116.6667
-7438 39800.0000 22183.3333
-7439 39800.0000 22333.3333
-7440 39800.0000 22366.6667
-7441 39800.0000 22483.3333
-7442 39800.0000 22650.0000
-7443 39800.0000 25333.3333
-7444 39816.6667 19850.0000
-7445 39816.6667 20516.6667
-7446 39816.6667 20550.0000
-7447 39816.6667 20633.3333
-7448 39816.6667 20650.0000
-7449 39816.6667 20733.3333
-7450 39816.6667 20916.6667
-7451 39816.6667 20950.0000
-7452 39816.6667 21350.0000
-7453 39816.6667 21733.3333
-7454 39816.6667 22083.3333
-7455 39816.6667 22233.3333
-7456 39816.6667 22533.3333
-7457 39816.6667 25350.0000
-7458 39833.3333 20433.3333
-7459 39833.3333 20483.3333
-7460 39833.3333 20500.0000
-7461 39833.3333 20550.0000
-7462 39833.3333 20583.3333
-7463 39833.3333 20600.0000
-7464 39833.3333 20616.6667
-7465 39833.3333 20750.0000
-7466 39833.3333 20883.3333
-7467 39833.3333 21300.0000
-7468 39833.3333 21433.3333
-7469 39833.3333 21500.0000
-7470 39833.3333 21616.6667
-7471 39833.3333 21866.6667
-7472 39833.3333 21883.3333
-7473 39833.3333 22033.3333
-7474 39833.3333 22050.0000
-7475 39833.3333 22100.0000
-7476 39833.3333 22200.0000
-7477 39833.3333 22300.0000
-7478 39833.3333 22466.6667
-7479 39833.3333 22516.6667
-7480 39833.3333 22766.6667
-7481 39833.3333 22783.3333
-7482 39833.3333 25333.3333
-7483 39843.6111 19402.7778
-7484 39850.0000 19416.6667
-7485 39850.0000 20483.3333
-7486 39850.0000 20516.6667
-7487 39850.0000 20583.3333
-7488 39850.0000 20666.6667
-7489 39850.0000 20683.3333
-7490 39850.0000 20766.6667
-7491 39850.0000 20950.0000
-7492 39850.0000 20983.3333
-7493 39850.0000 21233.3333
-7494 39850.0000 21350.0000
-7495 39850.0000 21450.0000
-7496 39850.0000 21600.0000
-7497 39850.0000 21666.6667
-7498 39850.0000 21700.0000
-7499 39850.0000 21716.6667
-7500 39850.0000 21783.3333
-7501 39850.0000 21800.0000
-7502 39850.0000 22066.6667
-7503 39850.0000 22166.6667
-7504 39850.0000 22183.3333
-7505 39850.0000 22550.0000
-7506 39850.0000 25083.3333
-7507 39866.6667 19383.3333
-7508 39866.6667 19416.6667
-7509 39866.6667 20400.0000
-7510 39866.6667 20516.6667
-7511 39866.6667 20550.0000
-7512 39866.6667 20566.6667
-7513 39866.6667 20750.0000
-7514 39866.6667 20783.3333
-7515 39866.6667 20850.0000
-7516 39866.6667 20966.6667
-7517 39866.6667 20983.3333
-7518 39866.6667 21466.6667
-7519 39866.6667 21566.6667
-7520 39866.6667 21683.3333
-7521 39866.6667 21766.6667
-7522 39866.6667 22116.6667
-7523 39866.6667 22416.6667
-7524 39866.6667 22433.3333
-7525 39866.6667 22466.6667
-7526 39866.6667 22516.6667
-7527 39866.6667 22533.3333
-7528 39866.6667 25066.6667
-7529 39866.6667 25150.0000
-7530 39866.6667 25166.6667
-7531 39866.6667 25266.6667
-7532 39866.6667 25316.6667
-7533 39883.3333 19583.3333
-7534 39883.3333 20466.6667
-7535 39883.3333 20500.0000
-7536 39883.3333 20633.3333
-7537 39883.3333 20650.0000
-7538 39883.3333 20666.6667
-7539 39883.3333 20700.0000
-7540 39883.3333 20750.0000
-7541 39883.3333 20783.3333
-7542 39883.3333 21333.3333
-7543 39883.3333 21366.6667
-7544 39883.3333 21616.6667
-7545 39883.3333 21650.0000
-7546 39883.3333 21733.3333
-7547 39883.3333 21816.6667
-7548 39883.3333 22066.6667
-7549 39883.3333 22233.3333
-7550 39883.3333 22716.6667
-7551 39883.3333 25183.3333
-7552 39883.3333 25316.6667
-7553 39900.0000 20383.3333
-7554 39900.0000 20400.0000
-7555 39900.0000 20466.6667
-7556 39900.0000 20583.3333
-7557 39900.0000 20650.0000
-7558 39900.0000 20683.3333
-7559 39900.0000 20783.3333
-7560 39900.0000 20816.6667
-7561 39900.0000 21283.3333
-7562 39900.0000 21683.3333
-7563 39900.0000 22183.3333
-7564 39900.0000 22550.0000
-7565 39900.0000 22633.3333
-7566 39900.0000 25183.3333
-7567 39900.0000 25200.0000
-7568 39900.0000 25216.6667
-7569 39900.0000 25283.3333
-7570 39916.6667 20383.3333
-7571 39916.6667 20400.0000
-7572 39916.6667 20533.3333
-7573 39916.6667 20566.6667
-7574 39916.6667 20850.0000
-7575 39916.6667 21400.0000
-7576 39916.6667 21450.0000
-7577 39916.6667 21516.6667
-7578 39916.6667 21566.6667
-7579 39916.6667 21766.6667
-7580 39916.6667 21816.6667
-7581 39916.6667 22150.0000
-7582 39916.6667 22583.3333
-7583 39916.6667 22683.3333
-7584 39916.6667 25083.3333
-7585 39916.6667 25116.6667
-7586 39916.6667 25150.0000
-7587 39916.6667 25200.0000
-7588 39916.6667 25266.6667
-7589 39916.6667 25300.0000
-7590 39916.6667 25333.3333
-7591 39933.3333 20366.6667
-7592 39933.3333 20400.0000
-7593 39933.3333 20416.6667
-7594 39933.3333 20466.6667
-7595 39933.3333 20600.0000
-7596 39933.3333 20650.0000
-7597 39933.3333 20666.6667
-7598 39933.3333 21050.0000
-7599 39933.3333 21350.0000
-7600 39933.3333 22050.0000
-7601 39933.3333 22150.0000
-7602 39933.3333 22566.6667
-7603 39933.3333 22683.3333
-7604 39933.3333 25133.3333
-7605 39933.3333 25183.3333
-7606 39933.3333 25233.3333
-7607 39933.3333 25266.6667
-7608 39933.3333 25333.3333
-7609 39950.0000 20350.0000
-7610 39950.0000 20433.3333
-7611 39950.0000 20533.3333
-7612 39950.0000 20616.6667
-7613 39950.0000 20666.6667
-7614 39950.0000 20700.0000
-7615 39950.0000 21233.3333
-7616 39950.0000 21366.6667
-7617 39950.0000 21400.0000
-7618 39950.0000 21616.6667
-7619 39950.0000 21666.6667
-7620 39950.0000 21733.3333
-7621 39950.0000 21966.6667
-7622 39950.0000 22066.6667
-7623 39950.0000 22616.6667
-7624 39950.0000 23533.3333
-7625 39950.0000 23616.6667
-7626 39950.0000 23666.6667
-7627 39950.0000 25166.6667
-7628 39950.0000 25200.0000
-7629 39950.0000 25216.6667
-7630 39950.0000 25300.0000
-7631 39966.6667 20333.3333
-7632 39966.6667 20350.0000
-7633 39966.6667 20383.3333
-7634 39966.6667 20566.6667
-7635 39966.6667 20583.3333
-7636 39966.6667 20633.3333
-7637 39966.6667 20683.3333
-7638 39966.6667 20716.6667
-7639 39966.6667 20950.0000
-7640 39966.6667 21266.6667
-7641 39966.6667 21450.0000
-7642 39966.6667 21500.0000
-7643 39966.6667 21733.3333
-7644 39966.6667 21933.3333
-7645 39966.6667 22116.6667
-7646 39966.6667 22250.0000
-7647 39966.6667 22350.0000
-7648 39966.6667 22583.3333
-7649 39966.6667 23400.0000
-7650 39966.6667 23916.6667
-7651 39966.6667 25150.0000
-7652 39966.6667 25233.3333
-7653 39966.6667 25366.6667
-7654 39983.3333 20433.3333
-7655 39983.3333 20550.0000
-7656 39983.3333 20666.6667
-7657 39983.3333 20916.6667
-7658 39983.3333 21116.6667
-7659 39983.3333 21316.6667
-7660 39983.3333 21416.6667
-7661 39983.3333 21816.6667
-7662 39983.3333 22033.3333
-7663 39983.3333 22150.0000
-7664 39983.3333 22183.3333
-7665 39983.3333 22250.0000
-7666 39983.3333 22333.3333
-7667 39983.3333 22400.0000
-7668 39983.3333 22466.6667
-7669 39983.3333 22616.6667
-7670 39983.3333 23616.6667
-7671 39983.3333 23983.3333
-7672 39983.3333 25400.0000
-7673 40000.0000 20416.6667
-7674 40000.0000 20600.0000
-7675 40000.0000 20683.3333
-7676 40000.0000 20883.3333
-7677 40000.0000 21133.3333
-7678 40000.0000 21283.3333
-7679 40000.0000 21300.0000
-7680 40000.0000 21333.3333
-7681 40000.0000 21600.0000
-7682 40000.0000 21650.0000
-7683 40000.0000 21683.3333
-7684 40000.0000 21966.6667
-7685 40000.0000 22083.3333
-7686 40000.0000 22233.3333
-7687 40000.0000 22283.3333
-7688 40000.0000 22533.3333
-7689 40000.0000 22583.3333
-7690 40000.0000 23383.3333
-7691 40000.0000 23416.6667
-7692 40000.0000 23583.3333
-7693 40000.0000 25416.6667
-7694 40016.6667 20516.6667
-7695 40016.6667 20566.6667
-7696 40016.6667 20633.3333
-7697 40016.6667 20666.6667
-7698 40016.6667 21316.6667
-7699 40016.6667 21433.3333
-7700 40016.6667 21533.3333
-7701 40016.6667 21616.6667
-7702 40016.6667 21850.0000
-7703 40016.6667 22133.3333
-7704 40016.6667 22183.3333
-7705 40016.6667 22200.0000
-7706 40016.6667 22550.0000
-7707 40016.6667 22583.3333
-7708 40016.6667 23450.0000
-7709 40016.6667 23533.3333
-7710 40016.6667 23916.6667
-7711 40033.3333 20433.3333
-7712 40033.3333 20466.6667
-7713 40033.3333 20483.3333
-7714 40033.3333 20666.6667
-7715 40033.3333 20883.3333
-7716 40033.3333 20916.6667
-7717 40033.3333 20966.6667
-7718 40033.3333 21016.6667
-7719 40033.3333 21183.3333
-7720 40033.3333 21200.0000
-7721 40033.3333 21266.6667
-7722 40033.3333 21350.0000
-7723 40033.3333 21616.6667
-7724 40033.3333 21650.0000
-7725 40033.3333 21933.3333
-7726 40033.3333 22050.0000
-7727 40033.3333 22066.6667
-7728 40033.3333 22166.6667
-7729 40033.3333 23366.6667
-7730 40033.3333 23466.6667
-7731 40033.3333 23883.3333
-7732 40033.3333 23933.3333
-7733 40033.3333 24000.0000
-7734 40050.0000 20550.0000
-7735 40050.0000 20600.0000
-7736 40050.0000 20650.0000
-7737 40050.0000 20683.3333
-7738 40050.0000 20700.0000
-7739 40050.0000 20750.0000
-7740 40050.0000 20850.0000
-7741 40050.0000 21200.0000
-7742 40050.0000 21683.3333
-7743 40050.0000 21766.6667
-7744 40050.0000 21866.6667
-7745 40050.0000 22033.3333
-7746 40050.0000 22516.6667
-7747 40050.0000 23416.6667
-7748 40050.0000 23816.6667
-7749 40050.0000 24000.0000
-7750 40066.6667 20433.3333
-7751 40066.6667 20566.6667
-7752 40066.6667 20616.6667
-7753 40066.6667 20750.0000
-7754 40066.6667 20783.3333
-7755 40066.6667 21116.6667
-7756 40066.6667 21216.6667
-7757 40066.6667 21283.3333
-7758 40066.6667 21333.3333
-7759 40066.6667 21400.0000
-7760 40066.6667 21516.6667
-7761 40066.6667 21566.6667
-7762 40066.6667 21616.6667
-7763 40066.6667 21683.3333
-7764 40066.6667 21816.6667
-7765 40066.6667 22050.0000
-7766 40066.6667 22166.6667
-7767 40066.6667 22233.3333
-7768 40066.6667 22566.6667
-7769 40083.3333 20616.6667
-7770 40083.3333 20666.6667
-7771 40083.3333 20716.6667
-7772 40083.3333 20783.3333
-7773 40083.3333 21150.0000
-7774 40083.3333 21200.0000
-7775 40083.3333 21283.3333
-7776 40083.3333 21333.3333
-7777 40083.3333 21416.6667
-7778 40083.3333 21516.6667
-7779 40083.3333 21550.0000
-7780 40083.3333 21650.0000
-7781 40083.3333 21883.3333
-7782 40083.3333 21966.6667
-7783 40083.3333 23450.0000
-7784 40083.3333 23800.0000
-7785 40100.0000 20733.3333
-7786 40100.0000 21016.6667
-7787 40100.0000 21366.6667
-7788 40100.0000 21533.3333
-7789 40100.0000 21600.0000
-7790 40100.0000 21616.6667
-7791 40100.0000 22250.0000
-7792 40100.0000 22500.0000
-7793 40100.0000 23433.3333
-7794 40100.0000 23783.3333
-7795 40100.0000 23983.3333
-7796 40116.6667 20716.6667
-7797 40116.6667 20750.0000
-7798 40116.6667 20800.0000
-7799 40116.6667 20850.0000
-7800 40116.6667 21150.0000
-7801 40116.6667 21266.6667
-7802 40116.6667 21316.6667
-7803 40116.6667 21350.0000
-7804 40116.6667 21416.6667
-7805 40116.6667 21483.3333
-7806 40116.6667 21516.6667
-7807 40116.6667 21933.3333
-7808 40116.6667 23333.3333
-7809 40116.6667 23816.6667
-7810 40133.3333 20683.3333
-7811 40133.3333 20750.0000
-7812 40133.3333 20816.6667
-7813 40133.3333 21133.3333
-7814 40133.3333 21200.0000
-7815 40133.3333 21233.3333
-7816 40133.3333 21666.6667
-7817 40133.3333 21733.3333
-7818 40133.3333 21866.6667
-7819 40133.3333 21950.0000
-7820 40133.3333 22150.0000
-7821 40133.3333 23400.0000
-7822 40133.3333 23766.6667
-7823 40133.3333 24283.3333
-7824 40133.3333 24350.0000
-7825 40150.0000 20733.3333
-7826 40150.0000 20850.0000
-7827 40150.0000 20900.0000
-7828 40150.0000 21250.0000
-7829 40150.0000 21333.3333
-7830 40150.0000 21366.6667
-7831 40150.0000 21433.3333
-7832 40150.0000 21483.3333
-7833 40150.0000 21516.6667
-7834 40150.0000 21550.0000
-7835 40150.0000 21950.0000
-7836 40150.0000 22016.6667
-7837 40150.0000 22233.3333
-7838 40150.0000 22550.0000
-7839 40150.0000 23350.0000
-7840 40150.0000 24300.0000
-7841 40150.0000 24383.3333
-7842 40166.6667 20733.3333
-7843 40166.6667 20783.3333
-7844 40166.6667 20950.0000
-7845 40166.6667 21166.6667
-7846 40166.6667 21183.3333
-7847 40166.6667 21216.6667
-7848 40166.6667 21283.3333
-7849 40166.6667 21466.6667
-7850 40166.6667 21633.3333
-7851 40166.6667 21816.6667
-7852 40166.6667 21866.6667
-7853 40166.6667 21916.6667
-7854 40166.6667 22016.6667
-7855 40166.6667 22483.3333
-7856 40166.6667 23866.6667
-7857 40183.3333 21033.3333
-7858 40183.3333 21516.6667
-7859 40183.3333 21583.3333
-7860 40183.3333 21766.6667
-7861 40183.3333 21850.0000
-7862 40183.3333 21966.6667
-7863 40183.3333 22000.0000
-7864 40183.3333 22433.3333
-7865 40183.3333 22483.3333
-7866 40183.3333 22566.6667
-7867 40200.0000 20850.0000
-7868 40200.0000 21133.3333
-7869 40200.0000 21183.3333
-7870 40200.0000 21233.3333
-7871 40200.0000 21316.6667
-7872 40200.0000 21366.6667
-7873 40200.0000 21400.0000
-7874 40200.0000 21433.3333
-7875 40200.0000 21483.3333
-7876 40200.0000 21600.0000
-7877 40200.0000 21750.0000
-7878 40200.0000 21800.0000
-7879 40200.0000 21866.6667
-7880 40200.0000 21950.0000
-7881 40200.0000 22033.3333
-7882 40200.0000 22233.3333
-7883 40200.0000 22450.0000
-7884 40200.0000 23333.3333
-7885 40200.0000 24316.6667
-7886 40216.6667 20816.6667
-7887 40216.6667 20866.6667
-7888 40216.6667 20916.6667
-7889 40216.6667 21016.6667
-7890 40216.6667 21200.0000
-7891 40216.6667 21250.0000
-7892 40216.6667 21283.3333
-7893 40216.6667 21483.3333
-7894 40216.6667 21783.3333
-7895 40216.6667 21850.0000
-7896 40216.6667 21883.3333
-7897 40216.6667 21900.0000
-7898 40216.6667 22066.6667
-7899 40216.6667 23666.6667
-7900 40216.6667 24216.6667
-7901 40233.3333 20783.3333
-7902 40233.3333 20850.0000
-7903 40233.3333 20933.3333
-7904 40233.3333 21166.6667
-7905 40233.3333 21216.6667
-7906 40233.3333 21283.3333
-7907 40233.3333 21316.6667
-7908 40233.3333 21350.0000
-7909 40233.3333 21383.3333
-7910 40233.3333 21416.6667
-7911 40233.3333 21750.0000
-7912 40233.3333 21833.3333
-7913 40233.3333 21900.0000
-7914 40233.3333 21966.6667
-7915 40233.3333 22300.0000
-7916 40233.3333 22466.6667
-7917 40233.3333 22500.0000
-7918 40233.3333 22583.3333
-7919 40233.3333 23600.0000
-7920 40233.3333 23666.6667
-7921 40250.0000 20816.6667
-7922 40250.0000 21200.0000
-7923 40250.0000 21266.6667
-7924 40250.0000 21433.3333
-7925 40250.0000 21683.3333
-7926 40250.0000 21750.0000
-7927 40250.0000 21800.0000
-7928 40250.0000 21900.0000
-7929 40250.0000 21916.6667
-7930 40250.0000 22066.6667
-7931 40250.0000 22333.3333
-7932 40250.0000 22366.6667
-7933 40250.0000 22383.3333
-7934 40250.0000 22566.6667
-7935 40250.0000 23283.3333
-7936 40250.0000 23550.0000
-7937 40250.0000 23700.0000
-7938 40250.0000 24200.0000
-7939 40250.0000 24250.0000
-7940 40266.6667 20733.3333
-7941 40266.6667 20750.0000
-7942 40266.6667 20766.6667
-7943 40266.6667 20900.0000
-7944 40266.6667 21200.0000
-7945 40266.6667 21283.3333
-7946 40266.6667 21316.6667
-7947 40266.6667 21383.3333
-7948 40266.6667 21416.6667
-7949 40266.6667 21450.0000
-7950 40266.6667 21500.0000
-7951 40266.6667 21550.0000
-7952 40266.6667 21750.0000
-7953 40266.6667 21783.3333
-7954 40266.6667 21816.6667
-7955 40266.6667 21933.3333
-7956 40266.6667 22033.3333
-7957 40266.6667 22083.3333
-7958 40266.6667 22150.0000
-7959 40266.6667 22283.3333
-7960 40266.6667 22300.0000
-7961 40266.6667 22416.6667
-7962 40266.6667 22466.6667
-7963 40266.6667 22500.0000
-7964 40266.6667 22533.3333
-7965 40266.6667 22583.3333
-7966 40266.6667 22600.0000
-7967 40266.6667 23200.0000
-7968 40266.6667 23216.6667
-7969 40266.6667 23266.6667
-7970 40266.6667 23333.3333
-7971 40266.6667 23500.0000
-7972 40266.6667 24250.0000
-7973 40283.3333 20966.6667
-7974 40283.3333 21033.3333
-7975 40283.3333 21150.0000
-7976 40283.3333 21166.6667
-7977 40283.3333 21200.0000
-7978 40283.3333 21216.6667
-7979 40283.3333 21233.3333
-7980 40283.3333 21350.0000
-7981 40283.3333 21483.3333
-7982 40283.3333 21733.3333
-7983 40283.3333 21866.6667
-7984 40283.3333 21966.6667
-7985 40283.3333 22116.6667
-7986 40283.3333 22283.3333
-7987 40283.3333 22433.3333
-7988 40283.3333 22466.6667
-7989 40283.3333 22600.0000
-7990 40283.3333 23150.0000
-7991 40283.3333 23250.0000
-7992 40283.3333 23300.0000
-7993 40283.3333 23350.0000
-7994 40283.3333 23400.0000
-7995 40283.3333 23450.0000
-7996 40283.3333 24250.0000
-7997 40300.0000 20766.6667
-7998 40300.0000 20950.0000
-7999 40300.0000 21133.3333
-8000 40300.0000 21200.0000
-8001 40300.0000 21216.6667
-8002 40300.0000 21233.3333
-8003 40300.0000 21266.6667
-8004 40300.0000 21283.3333
-8005 40300.0000 21300.0000
-8006 40300.0000 21366.6667
-8007 40300.0000 21416.6667
-8008 40300.0000 21650.0000
-8009 40300.0000 21783.3333
-8010 40300.0000 22033.3333
-8011 40300.0000 22500.0000
-8012 40300.0000 23200.0000
-8013 40300.0000 23350.0000
-8014 40300.0000 23550.0000
-8015 40300.0000 24050.0000
-8016 40300.0000 24066.6667
-8017 40300.0000 24216.6667
-8018 40316.6667 20850.0000
-8019 40316.6667 21133.3333
-8020 40316.6667 21183.3333
-8021 40316.6667 21333.3333
-8022 40316.6667 21383.3333
-8023 40316.6667 21433.3333
-8024 40316.6667 21550.0000
-8025 40316.6667 21650.0000
-8026 40316.6667 21666.6667
-8027 40316.6667 21700.0000
-8028 40316.6667 21916.6667
-8029 40316.6667 22116.6667
-8030 40316.6667 22250.0000
-8031 40316.6667 22350.0000
-8032 40316.6667 22466.6667
-8033 40316.6667 22500.0000
-8034 40316.6667 22583.3333
-8035 40316.6667 23066.6667
-8036 40316.6667 23350.0000
-8037 40333.3333 21000.0000
-8038 40333.3333 21133.3333
-8039 40333.3333 21183.3333
-8040 40333.3333 21233.3333
-8041 40333.3333 21250.0000
-8042 40333.3333 21283.3333
-8043 40333.3333 21366.6667
-8044 40333.3333 21666.6667
-8045 40333.3333 21683.3333
-8046 40333.3333 21716.6667
-8047 40333.3333 21733.3333
-8048 40333.3333 21783.3333
-8049 40333.3333 21800.0000
-8050 40333.3333 21866.6667
-8051 40333.3333 21883.3333
-8052 40333.3333 22016.6667
-8053 40333.3333 22166.6667
-8054 40333.3333 22333.3333
-8055 40333.3333 22533.3333
-8056 40333.3333 23066.6667
-8057 40333.3333 23133.3333
-8058 40333.3333 23150.0000
-8059 40333.3333 23166.6667
-8060 40333.3333 23233.3333
-8061 40333.3333 23266.6667
-8062 40333.3333 23400.0000
-8063 40333.3333 23616.6667
-8064 40333.3333 23650.0000
-8065 40333.3333 23716.6667
-8066 40333.3333 23916.6667
-8067 40333.3333 23983.3333
-8068 40350.0000 20933.3333
-8069 40350.0000 21083.3333
-8070 40350.0000 21333.3333
-8071 40350.0000 21400.0000
-8072 40350.0000 21516.6667
-8073 40350.0000 21716.6667
-8074 40350.0000 21816.6667
-8075 40350.0000 21833.3333
-8076 40350.0000 21866.6667
-8077 40350.0000 21916.6667
-8078 40350.0000 21933.3333
-8079 40350.0000 21950.0000
-8080 40350.0000 21966.6667
-8081 40350.0000 22033.3333
-8082 40350.0000 22200.0000
-8083 40350.0000 22433.3333
-8084 40350.0000 22500.0000
-8085 40350.0000 22550.0000
-8086 40350.0000 23016.6667
-8087 40350.0000 23133.3333
-8088 40350.0000 23183.3333
-8089 40350.0000 23233.3333
-8090 40350.0000 23316.6667
-8091 40350.0000 23583.3333
-8092 40350.0000 23733.3333
-8093 40366.6667 21016.6667
-8094 40366.6667 21116.6667
-8095 40366.6667 21150.0000
-8096 40366.6667 21183.3333
-8097 40366.6667 21200.0000
-8098 40366.6667 21233.3333
-8099 40366.6667 21316.6667
-8100 40366.6667 21350.0000
-8101 40366.6667 21433.3333
-8102 40366.6667 21466.6667
-8103 40366.6667 21983.3333
-8104 40366.6667 22066.6667
-8105 40366.6667 22466.6667
-8106 40366.6667 22583.3333
-8107 40366.6667 22616.6667
-8108 40366.6667 23050.0000
-8109 40366.6667 23100.0000
-8110 40366.6667 23166.6667
-8111 40366.6667 23233.3333
-8112 40366.6667 23266.6667
-8113 40366.6667 23283.3333
-8114 40366.6667 23533.3333
-8115 40366.6667 23583.3333
-8116 40366.6667 23650.0000
-8117 40366.6667 23666.6667
-8118 40366.6667 23700.0000
-8119 40366.6667 23833.3333
-8120 40366.6667 23883.3333
-8121 40383.3333 20833.3333
-8122 40383.3333 20950.0000
-8123 40383.3333 21000.0000
-8124 40383.3333 21100.0000
-8125 40383.3333 21166.6667
-8126 40383.3333 21200.0000
-8127 40383.3333 21300.0000
-8128 40383.3333 21316.6667
-8129 40383.3333 21350.0000
-8130 40383.3333 21700.0000
-8131 40383.3333 21716.6667
-8132 40383.3333 21766.6667
-8133 40383.3333 21966.6667
-8134 40383.3333 21983.3333
-8135 40383.3333 22000.0000
-8136 40383.3333 22216.6667
-8137 40383.3333 22516.6667
-8138 40383.3333 22633.3333
-8139 40383.3333 23050.0000
-8140 40383.3333 23083.3333
-8141 40383.3333 23450.0000
-8142 40383.3333 23616.6667
-8143 40383.3333 23916.6667
-8144 40383.3333 23983.3333
-8145 40400.0000 21000.0000
-8146 40400.0000 21133.3333
-8147 40400.0000 21166.6667
-8148 40400.0000 21250.0000
-8149 40400.0000 21933.3333
-8150 40400.0000 22150.0000
-8151 40400.0000 22383.3333
-8152 40400.0000 22550.0000
-8153 40400.0000 22900.0000
-8154 40400.0000 23150.0000
-8155 40400.0000 23200.0000
-8156 40400.0000 23800.0000
-8157 40400.0000 23883.3333
-8158 40416.6667 20883.3333
-8159 40416.6667 20966.6667
-8160 40416.6667 21066.6667
-8161 40416.6667 21233.3333
-8162 40416.6667 21283.3333
-8163 40416.6667 21300.0000
-8164 40416.6667 21383.3333
-8165 40416.6667 21516.6667
-8166 40416.6667 21683.3333
-8167 40416.6667 21766.6667
-8168 40416.6667 21916.6667
-8169 40416.6667 22116.6667
-8170 40416.6667 22233.3333
-8171 40416.6667 22300.0000
-8172 40416.6667 22450.0000
-8173 40416.6667 22466.6667
-8174 40416.6667 22550.0000
-8175 40416.6667 22600.0000
-8176 40416.6667 23000.0000
-8177 40416.6667 23100.0000
-8178 40416.6667 23133.3333
-8179 40416.6667 23250.0000
-8180 40416.6667 23583.3333
-8181 40416.6667 24000.0000
-8182 40433.3333 21033.3333
-8183 40433.3333 21066.6667
-8184 40433.3333 21083.3333
-8185 40433.3333 21116.6667
-8186 40433.3333 21266.6667
-8187 40433.3333 21333.3333
-8188 40433.3333 21500.0000
-8189 40433.3333 21866.6667
-8190 40433.3333 21900.0000
-8191 40433.3333 22183.3333
-8192 40433.3333 22583.3333
-8193 40433.3333 22933.3333
-8194 40433.3333 23033.3333
-8195 40433.3333 23100.0000
-8196 40433.3333 23133.3333
-8197 40433.3333 23316.6667
-8198 40433.3333 23416.6667
-8199 40433.3333 23516.6667
-8200 40433.3333 25533.3333
-8201 40450.0000 20850.0000
-8202 40450.0000 20933.3333
-8203 40450.0000 21133.3333
-8204 40450.0000 21166.6667
-8205 40450.0000 21183.3333
-8206 40450.0000 21216.6667
-8207 40450.0000 21333.3333
-8208 40450.0000 21433.3333
-8209 40450.0000 21516.6667
-8210 40450.0000 21733.3333
-8211 40450.0000 21800.0000
-8212 40450.0000 21833.3333
-8213 40450.0000 22266.6667
-8214 40450.0000 22383.3333
-8215 40450.0000 22450.0000
-8216 40450.0000 22583.3333
-8217 40450.0000 23033.3333
-8218 40450.0000 23683.3333
-8219 40450.0000 25516.6667
-8220 40466.6667 20866.6667
-8221 40466.6667 20900.0000
-8222 40466.6667 20966.6667
-8223 40466.6667 21000.0000
-8224 40466.6667 21066.6667
-8225 40466.6667 21100.0000
-8226 40466.6667 21266.6667
-8227 40466.6667 21300.0000
-8228 40466.6667 21666.6667
-8229 40466.6667 21766.6667
-8230 40466.6667 21866.6667
-8231 40466.6667 22083.3333
-8232 40466.6667 22166.6667
-8233 40466.6667 22550.0000
-8234 40466.6667 22583.3333
-8235 40466.6667 22866.6667
-8236 40466.6667 22950.0000
-8237 40466.6667 22966.6667
-8238 40466.6667 22983.3333
-8239 40466.6667 23000.0000
-8240 40466.6667 23083.3333
-8241 40466.6667 23133.3333
-8242 40466.6667 23183.3333
-8243 40466.6667 23283.3333
-8244 40466.6667 23383.3333
-8245 40466.6667 25500.0000
-8246 40483.3333 20983.3333
-8247 40483.3333 21016.6667
-8248 40483.3333 21133.3333
-8249 40483.3333 21166.6667
-8250 40483.3333 21183.3333
-8251 40483.3333 21216.6667
-8252 40483.3333 21283.3333
-8253 40483.3333 21550.0000
-8254 40483.3333 21566.6667
-8255 40483.3333 21600.0000
-8256 40483.3333 21633.3333
-8257 40483.3333 21716.6667
-8258 40483.3333 21816.6667
-8259 40483.3333 22116.6667
-8260 40483.3333 22216.6667
-8261 40483.3333 22233.3333
-8262 40483.3333 22316.6667
-8263 40483.3333 22350.0000
-8264 40483.3333 22483.3333
-8265 40483.3333 22833.3333
-8266 40483.3333 22866.6667
-8267 40483.3333 23016.6667
-8268 40483.3333 23050.0000
-8269 40483.3333 23133.3333
-8270 40483.3333 23600.0000
-8271 40483.3333 25466.6667
-8272 40483.3333 25516.6667
-8273 40500.0000 21050.0000
-8274 40500.0000 21166.6667
-8275 40500.0000 21216.6667
-8276 40500.0000 21250.0000
-8277 40500.0000 21383.3333
-8278 40500.0000 21533.3333
-8279 40500.0000 21766.6667
-8280 40500.0000 21816.6667
-8281 40500.0000 21850.0000
-8282 40500.0000 22183.3333
-8283 40500.0000 22250.0000
-8284 40500.0000 22416.6667
-8285 40500.0000 22433.3333
-8286 40500.0000 22550.0000
-8287 40500.0000 22833.3333
-8288 40500.0000 22883.3333
-8289 40500.0000 22916.6667
-8290 40500.0000 22933.3333
-8291 40500.0000 22983.3333
-8292 40500.0000 23383.3333
-8293 40500.0000 23433.3333
-8294 40500.0000 23450.0000
-8295 40500.0000 23650.0000
-8296 40500.0000 25533.3333
-8297 40516.6667 21000.0000
-8298 40516.6667 21050.0000
-8299 40516.6667 21083.3333
-8300 40516.6667 21200.0000
-8301 40516.6667 21266.6667
-8302 40516.6667 21316.6667
-8303 40516.6667 21416.6667
-8304 40516.6667 21550.0000
-8305 40516.6667 21683.3333
-8306 40516.6667 21750.0000
-8307 40516.6667 22083.3333
-8308 40516.6667 22200.0000
-8309 40516.6667 22233.3333
-8310 40516.6667 22383.3333
-8311 40516.6667 22400.0000
-8312 40516.6667 22500.0000
-8313 40516.6667 22966.6667
-8314 40516.6667 23116.6667
-8315 40516.6667 23216.6667
-8316 40516.6667 23283.3333
-8317 40516.6667 23683.3333
-8318 40516.6667 23833.3333
-8319 40533.3333 21016.6667
-8320 40533.3333 21033.3333
-8321 40533.3333 21116.6667
-8322 40533.3333 21183.3333
-8323 40533.3333 21216.6667
-8324 40533.3333 21466.6667
-8325 40533.3333 21500.0000
-8326 40533.3333 21600.0000
-8327 40533.3333 22133.3333
-8328 40533.3333 22266.6667
-8329 40533.3333 22316.6667
-8330 40533.3333 22433.3333
-8331 40533.3333 23050.0000
-8332 40533.3333 23750.0000
-8333 40533.3333 23766.6667
-8334 40550.0000 21350.0000
-8335 40550.0000 21400.0000
-8336 40550.0000 21433.3333
-8337 40550.0000 21716.6667
-8338 40550.0000 21750.0000
-8339 40550.0000 22033.3333
-8340 40550.0000 22250.0000
-8341 40550.0000 22266.6667
-8342 40550.0000 22316.6667
-8343 40550.0000 22400.0000
-8344 40550.0000 22416.6667
-8345 40550.0000 22450.0000
-8346 40550.0000 22466.6667
-8347 40550.0000 22500.0000
-8348 40550.0000 23016.6667
-8349 40550.0000 23050.0000
-8350 40550.0000 23133.3333
-8351 40550.0000 23166.6667
-8352 40550.0000 23300.0000
-8353 40550.0000 23416.6667
-8354 40550.0000 23450.0000
-8355 40550.0000 23583.3333
-8356 40550.0000 23850.0000
-8357 40566.6667 21250.0000
-8358 40566.6667 21266.6667
-8359 40566.6667 21316.6667
-8360 40566.6667 21433.3333
-8361 40566.6667 21600.0000
-8362 40566.6667 21700.0000
-8363 40566.6667 22116.6667
-8364 40566.6667 22150.0000
-8365 40566.6667 22183.3333
-8366 40566.6667 22200.0000
-8367 40566.6667 22216.6667
-8368 40566.6667 22233.3333
-8369 40566.6667 22333.3333
-8370 40566.6667 22350.0000
-8371 40566.6667 22366.6667
-8372 40566.6667 22516.6667
-8373 40566.6667 22550.0000
-8374 40566.6667 22583.3333
-8375 40566.6667 23100.0000
-8376 40566.6667 23283.3333
-8377 40566.6667 23350.0000
-8378 40566.6667 23366.6667
-8379 40566.6667 23466.6667
-8380 40566.6667 23666.6667
-8381 40583.3333 21066.6667
-8382 40583.3333 21083.3333
-8383 40583.3333 21150.0000
-8384 40583.3333 21300.0000
-8385 40583.3333 21400.0000
-8386 40583.3333 21483.3333
-8387 40583.3333 22066.6667
-8388 40583.3333 22250.0000
-8389 40583.3333 22300.0000
-8390 40583.3333 22400.0000
-8391 40583.3333 22516.6667
-8392 40583.3333 22600.0000
-8393 40583.3333 22966.6667
-8394 40583.3333 23033.3333
-8395 40583.3333 23216.6667
-8396 40583.3333 23350.0000
-8397 40583.3333 23400.0000
-8398 40583.3333 23416.6667
-8399 40583.3333 23433.3333
-8400 40583.3333 24650.0000
-8401 40600.0000 21266.6667
-8402 40600.0000 21366.6667
-8403 40600.0000 21616.6667
-8404 40600.0000 21783.3333
-8405 40600.0000 22133.3333
-8406 40600.0000 22200.0000
-8407 40600.0000 22216.6667
-8408 40600.0000 22233.3333
-8409 40600.0000 22333.3333
-8410 40600.0000 22350.0000
-8411 40600.0000 22366.6667
-8412 40600.0000 22450.0000
-8413 40600.0000 22483.3333
-8414 40600.0000 22500.0000
-8415 40600.0000 22550.0000
-8416 40600.0000 22983.3333
-8417 40600.0000 23100.0000
-8418 40600.0000 23183.3333
-8419 40600.0000 23450.0000
-8420 40600.0000 23483.3333
-8421 40600.0000 23750.0000
-8422 40600.0000 23783.3333
-8423 40600.0000 24750.0000
-8424 40616.6667 21216.6667
-8425 40616.6667 21316.6667
-8426 40616.6667 21350.0000
-8427 40616.6667 21466.6667
-8428 40616.6667 21500.0000
-8429 40616.6667 21750.0000
-8430 40616.6667 22183.3333
-8431 40616.6667 22366.6667
-8432 40616.6667 22400.0000
-8433 40616.6667 22433.3333
-8434 40616.6667 22683.3333
-8435 40616.6667 22700.0000
-8436 40616.6667 23433.3333
-8437 40616.6667 23566.6667
-8438 40633.3333 21083.3333
-8439 40633.3333 21183.3333
-8440 40633.3333 21233.3333
-8441 40633.3333 21283.3333
-8442 40633.3333 21566.6667
-8443 40633.3333 21583.3333
-8444 40633.3333 21700.0000
-8445 40633.3333 21833.3333
-8446 40633.3333 22066.6667
-8447 40633.3333 22133.3333
-8448 40633.3333 22383.3333
-8449 40633.3333 22450.0000
-8450 40633.3333 22500.0000
-8451 40633.3333 22733.3333
-8452 40633.3333 22933.3333
-8453 40633.3333 22950.0000
-8454 40633.3333 23183.3333
-8455 40633.3333 23216.6667
-8456 40633.3333 23250.0000
-8457 40633.3333 23266.6667
-8458 40633.3333 23350.0000
-8459 40633.3333 23450.0000
-8460 40633.3333 23483.3333
-8461 40633.3333 23616.6667
-8462 40633.3333 24566.6667
-8463 40633.3333 24583.3333
-8464 40650.0000 21066.6667
-8465 40650.0000 21233.3333
-8466 40650.0000 21500.0000
-8467 40650.0000 21700.0000
-8468 40650.0000 21766.6667
-8469 40650.0000 22116.6667
-8470 40650.0000 22166.6667
-8471 40650.0000 22216.6667
-8472 40650.0000 22233.3333
-8473 40650.0000 22433.3333
-8474 40650.0000 22533.3333
-8475 40650.0000 22866.6667
-8476 40650.0000 22883.3333
-8477 40650.0000 22900.0000
-8478 40650.0000 23033.3333
-8479 40650.0000 23300.0000
-8480 40650.0000 23400.0000
-8481 40650.0000 23483.3333
-8482 40650.0000 23616.6667
-8483 40650.0000 23700.0000
-8484 40650.0000 24516.6667
-8485 40666.6667 21100.0000
-8486 40666.6667 21150.0000
-8487 40666.6667 21266.6667
-8488 40666.6667 21333.3333
-8489 40666.6667 21550.0000
-8490 40666.6667 21583.3333
-8491 40666.6667 21600.0000
-8492 40666.6667 21633.3333
-8493 40666.6667 21833.3333
-8494 40666.6667 22050.0000
-8495 40666.6667 22450.0000
-8496 40666.6667 22516.6667
-8497 40666.6667 22600.0000
-8498 40666.6667 22633.3333
-8499 40666.6667 22716.6667
-8500 40666.6667 22800.0000
-8501 40666.6667 22900.0000
-8502 40666.6667 22916.6667
-8503 40666.6667 22933.3333
-8504 40666.6667 22950.0000
-8505 40666.6667 22983.3333
-8506 40666.6667 23116.6667
-8507 40666.6667 23333.3333
-8508 40666.6667 23700.0000
-8509 40666.6667 24650.0000
-8510 40666.6667 24700.0000
-8511 40666.6667 24766.6667
-8512 40683.3333 21450.0000
-8513 40683.3333 21616.6667
-8514 40683.3333 21666.6667
-8515 40683.3333 21683.3333
-8516 40683.3333 21716.6667
-8517 40683.3333 22133.3333
-8518 40683.3333 22200.0000
-8519 40683.3333 22250.0000
-8520 40683.3333 22266.6667
-8521 40683.3333 22300.0000
-8522 40683.3333 22533.3333
-8523 40683.3333 22850.0000
-8524 40683.3333 22950.0000
-8525 40683.3333 23000.0000
-8526 40683.3333 23083.3333
-8527 40683.3333 23250.0000
-8528 40683.3333 23283.3333
-8529 40683.3333 23566.6667
-8530 40683.3333 23616.6667
-8531 40683.3333 24616.6667
-8532 40700.0000 21166.6667
-8533 40700.0000 21266.6667
-8534 40700.0000 21300.0000
-8535 40700.0000 21400.0000
-8536 40700.0000 21466.6667
-8537 40700.0000 21516.6667
-8538 40700.0000 21783.3333
-8539 40700.0000 21900.0000
-8540 40700.0000 21933.3333
-8541 40700.0000 22016.6667
-8542 40700.0000 22100.0000
-8543 40700.0000 22266.6667
-8544 40700.0000 22550.0000
-8545 40700.0000 22600.0000
-8546 40700.0000 23216.6667
-8547 40700.0000 23333.3333
-8548 40700.0000 23433.3333
-8549 40700.0000 23650.0000
-8550 40700.0000 24550.0000
-8551 40700.0000 24766.6667
-8552 40716.6667 21050.0000
-8553 40716.6667 21100.0000
-8554 40716.6667 21150.0000
-8555 40716.6667 21200.0000
-8556 40716.6667 21266.6667
-8557 40716.6667 21366.6667
-8558 40716.6667 21466.6667
-8559 40716.6667 21783.3333
-8560 40716.6667 22000.0000
-8561 40716.6667 22083.3333
-8562 40716.6667 22116.6667
-8563 40716.6667 22150.0000
-8564 40716.6667 22166.6667
-8565 40716.6667 22216.6667
-8566 40716.6667 22300.0000
-8567 40716.6667 22633.3333
-8568 40716.6667 22733.3333
-8569 40716.6667 22783.3333
-8570 40716.6667 23000.0000
-8571 40716.6667 23050.0000
-8572 40716.6667 23183.3333
-8573 40716.6667 23283.3333
-8574 40716.6667 23383.3333
-8575 40716.6667 23700.0000
-8576 40716.6667 24533.3333
-8577 40716.6667 24550.0000
-8578 40716.6667 24583.3333
-8579 40716.6667 24616.6667
-8580 40716.6667 24733.3333
-8581 40733.3333 21016.6667
-8582 40733.3333 21133.3333
-8583 40733.3333 21200.0000
-8584 40733.3333 21400.0000
-8585 40733.3333 21433.3333
-8586 40733.3333 21483.3333
-8587 40733.3333 21666.6667
-8588 40733.3333 21750.0000
-8589 40733.3333 21816.6667
-8590 40733.3333 22133.3333
-8591 40733.3333 22216.6667
-8592 40733.3333 22600.0000
-8593 40733.3333 22700.0000
-8594 40733.3333 22883.3333
-8595 40733.3333 22916.6667
-8596 40733.3333 23250.0000
-8597 40733.3333 23550.0000
-8598 40733.3333 24116.6667
-8599 40733.3333 24616.6667
-8600 40733.3333 24733.3333
-8601 40750.0000 21000.0000
-8602 40750.0000 21066.6667
-8603 40750.0000 21116.6667
-8604 40750.0000 21300.0000
-8605 40750.0000 21466.6667
-8606 40750.0000 21516.6667
-8607 40750.0000 21633.3333
-8608 40750.0000 22016.6667
-8609 40750.0000 22216.6667
-8610 40750.0000 22250.0000
-8611 40750.0000 22283.3333
-8612 40750.0000 22333.3333
-8613 40750.0000 22583.3333
-8614 40750.0000 22633.3333
-8615 40750.0000 22766.6667
-8616 40750.0000 22850.0000
-8617 40750.0000 22983.3333
-8618 40750.0000 23033.3333
-8619 40750.0000 23066.6667
-8620 40750.0000 23133.3333
-8621 40750.0000 23383.3333
-8622 40750.0000 23466.6667
-8623 40750.0000 23583.3333
-8624 40750.0000 23983.3333
-8625 40750.0000 24583.3333
-8626 40750.0000 24633.3333
-8627 40758.0556 24577.5000
-8628 40766.6667 21033.3333
-8629 40766.6667 21150.0000
-8630 40766.6667 21200.0000
-8631 40766.6667 21350.0000
-8632 40766.6667 21400.0000
-8633 40766.6667 21533.3333
-8634 40766.6667 21616.6667
-8635 40766.6667 21900.0000
-8636 40766.6667 22050.0000
-8637 40766.6667 22066.6667
-8638 40766.6667 22116.6667
-8639 40766.6667 22150.0000
-8640 40766.6667 22166.6667
-8641 40766.6667 22183.3333
-8642 40766.6667 22250.0000
-8643 40766.6667 22316.6667
-8644 40766.6667 22500.0000
-8645 40766.6667 22533.3333
-8646 40766.6667 22583.3333
-8647 40766.6667 22716.6667
-8648 40766.6667 22933.3333
-8649 40766.6667 23033.3333
-8650 40766.6667 23083.3333
-8651 40766.6667 23216.6667
-8652 40766.6667 23250.0000
-8653 40766.6667 23383.3333
-8654 40766.6667 23450.0000
-8655 40766.6667 23483.3333
-8656 40766.6667 23583.3333
-8657 40766.6667 24633.3333
-8658 40770.0000 24723.8889
-8659 40778.0556 24709.4444
-8660 40778.8889 24611.6667
-8661 40783.3333 21083.3333
-8662 40783.3333 21133.3333
-8663 40783.3333 21250.0000
-8664 40783.3333 21300.0000
-8665 40783.3333 21400.0000
-8666 40783.3333 21466.6667
-8667 40783.3333 21483.3333
-8668 40783.3333 21550.0000
-8669 40783.3333 21683.3333
-8670 40783.3333 22083.3333
-8671 40783.3333 22166.6667
-8672 40783.3333 22266.6667
-8673 40783.3333 22483.3333
-8674 40783.3333 22583.3333
-8675 40783.3333 22883.3333
-8676 40783.3333 22966.6667
-8677 40783.3333 23533.3333
-8678 40783.3333 23850.0000
-8679 40783.3333 23950.0000
-8680 40783.3333 24033.3333
-8681 40800.0000 21150.0000
-8682 40800.0000 21466.6667
-8683 40800.0000 21516.6667
-8684 40800.0000 21583.3333
-8685 40800.0000 21783.3333
-8686 40800.0000 21833.3333
-8687 40800.0000 21850.0000
-8688 40800.0000 21866.6667
-8689 40800.0000 21916.6667
-8690 40800.0000 22000.0000
-8691 40800.0000 22033.3333
-8692 40800.0000 22050.0000
-8693 40800.0000 22216.6667
-8694 40800.0000 22233.3333
-8695 40800.0000 22333.3333
-8696 40800.0000 22366.6667
-8697 40800.0000 22416.6667
-8698 40800.0000 22466.6667
-8699 40800.0000 22566.6667
-8700 40800.0000 22666.6667
-8701 40800.0000 22766.6667
-8702 40800.0000 22783.3333
-8703 40800.0000 22833.3333
-8704 40800.0000 22866.6667
-8705 40800.0000 22900.0000
-8706 40800.0000 23116.6667
-8707 40800.0000 23466.6667
-8708 40800.0000 23850.0000
-8709 40800.0000 23916.6667
-8710 40800.0000 23950.0000
-8711 40816.6667 21116.6667
-8712 40816.6667 21133.3333
-8713 40816.6667 21300.0000
-8714 40816.6667 21400.0000
-8715 40816.6667 21933.3333
-8716 40816.6667 22066.6667
-8717 40816.6667 22100.0000
-8718 40816.6667 22166.6667
-8719 40816.6667 22183.3333
-8720 40816.6667 22266.6667
-8721 40816.6667 22350.0000
-8722 40816.6667 22416.6667
-8723 40816.6667 22533.3333
-8724 40816.6667 22666.6667
-8725 40816.6667 22700.0000
-8726 40816.6667 22733.3333
-8727 40816.6667 23033.3333
-8728 40816.6667 23116.6667
-8729 40816.6667 23150.0000
-8730 40816.6667 23283.3333
-8731 40816.6667 23300.0000
-8732 40816.6667 23350.0000
-8733 40816.6667 23516.6667
-8734 40816.6667 23566.6667
-8735 40816.6667 23650.0000
-8736 40816.6667 24150.0000
-8737 40816.6667 24250.0000
-8738 40833.3333 21033.3333
-8739 40833.3333 21133.3333
-8740 40833.3333 21150.0000
-8741 40833.3333 21166.6667
-8742 40833.3333 21300.0000
-8743 40833.3333 21400.0000
-8744 40833.3333 21500.0000
-8745 40833.3333 21516.6667
-8746 40833.3333 21533.3333
-8747 40833.3333 21583.3333
-8748 40833.3333 21766.6667
-8749 40833.3333 22000.0000
-8750 40833.3333 22200.0000
-8751 40833.3333 22250.0000
-8752 40833.3333 22300.0000
-8753 40833.3333 22350.0000
-8754 40833.3333 22383.3333
-8755 40833.3333 22450.0000
-8756 40833.3333 22600.0000
-8757 40833.3333 22650.0000
-8758 40833.3333 22783.3333
-8759 40833.3333 22850.0000
-8760 40833.3333 22983.3333
-8761 40833.3333 23200.0000
-8762 40833.3333 23783.3333
-8763 40833.3333 23850.0000
-8764 40833.3333 23933.3333
-8765 40833.3333 24000.0000
-8766 40833.3333 24016.6667
-8767 40833.3333 24200.0000
-8768 40838.8889 24303.6111
-8769 40850.0000 21316.6667
-8770 40850.0000 21383.3333
-8771 40850.0000 21400.0000
-8772 40850.0000 21816.6667
-8773 40850.0000 21850.0000
-8774 40850.0000 21950.0000
-8775 40850.0000 22100.0000
-8776 40850.0000 22216.6667
-8777 40850.0000 22250.0000
-8778 40850.0000 22283.3333
-8779 40850.0000 22300.0000
-8780 40850.0000 22500.0000
-8781 40850.0000 22716.6667
-8782 40850.0000 22833.3333
-8783 40850.0000 22916.6667
-8784 40850.0000 23166.6667
-8785 40850.0000 23650.0000
-8786 40850.0000 23733.3333
-8787 40850.0000 24066.6667
-8788 40850.0000 24150.0000
-8789 40850.0000 24166.6667
-8790 40850.0000 24250.0000
-8791 40850.0000 25750.0000
-8792 40850.0000 25833.3333
-8793 40850.0000 25866.6667
-8794 40850.0000 25933.3333
-8795 40850.0000 26100.0000
-8796 40858.3333 24706.1111
-8797 40864.4444 24315.8333
-8798 40866.6667 21350.0000
-8799 40866.6667 21366.6667
-8800 40866.6667 21450.0000
-8801 40866.6667 21466.6667
-8802 40866.6667 21500.0000
-8803 40866.6667 21600.0000
-8804 40866.6667 21616.6667
-8805 40866.6667 21633.3333
-8806 40866.6667 22050.0000
-8807 40866.6667 22216.6667
-8808 40866.6667 22416.6667
-8809 40866.6667 22466.6667
-8810 40866.6667 22533.3333
-8811 40866.6667 22583.3333
-8812 40866.6667 22683.3333
-8813 40866.6667 22816.6667
-8814 40866.6667 22883.3333
-8815 40866.6667 22916.6667
-8816 40866.6667 22966.6667
-8817 40866.6667 23000.0000
-8818 40866.6667 23583.3333
-8819 40866.6667 23616.6667
-8820 40866.6667 23766.6667
-8821 40866.6667 23900.0000
-8822 40866.6667 23933.3333
-8823 40866.6667 24083.3333
-8824 40866.6667 24116.6667
-8825 40866.6667 24150.0000
-8826 40866.6667 24166.6667
-8827 40866.6667 24183.3333
-8828 40866.6667 24200.0000
-8829 40866.6667 24283.3333
-8830 40866.6667 25683.3333
-8831 40866.6667 25700.0000
-8832 40866.6667 25900.0000
-8833 40866.6667 25983.3333
-8834 40866.6667 26000.0000
-8835 40866.6667 26116.6667
-8836 40875.5556 24706.9444
-8837 40878.6111 24731.3889
-8838 40883.3333 21383.3333
-8839 40883.3333 21400.0000
-8840 40883.3333 21516.6667
-8841 40883.3333 21683.3333
-8842 40883.3333 21966.6667
-8843 40883.3333 22033.3333
-8844 40883.3333 22416.6667
-8845 40883.3333 22516.6667
-8846 40883.3333 22566.6667
-8847 40883.3333 22633.3333
-8848 40883.3333 22650.0000
-8849 40883.3333 22733.3333
-8850 40883.3333 22816.6667
-8851 40883.3333 22866.6667
-8852 40883.3333 22916.6667
-8853 40883.3333 22950.0000
-8854 40883.3333 23100.0000
-8855 40883.3333 23183.3333
-8856 40883.3333 23233.3333
-8857 40883.3333 23250.0000
-8858 40883.3333 23600.0000
-8859 40883.3333 23616.6667
-8860 40883.3333 23633.3333
-8861 40883.3333 23700.0000
-8862 40883.3333 23766.6667
-8863 40883.3333 23950.0000
-8864 40883.3333 24166.6667
-8865 40883.3333 24183.3333
-8866 40883.3333 24200.0000
-8867 40883.3333 24233.3333
-8868 40883.3333 25516.6667
-8869 40883.3333 25733.3333
-8870 40883.3333 25866.6667
-8871 40883.3333 25983.3333
-8872 40883.3333 26050.0000
-8873 40900.0000 21466.6667
-8874 40900.0000 21516.6667
-8875 40900.0000 22050.0000
-8876 40900.0000 22150.0000
-8877 40900.0000 22183.3333
-8878 40900.0000 22333.3333
-8879 40900.0000 22450.0000
-8880 40900.0000 22483.3333
-8881 40900.0000 22550.0000
-8882 40900.0000 22633.3333
-8883 40900.0000 22783.3333
-8884 40900.0000 22966.6667
-8885 40900.0000 22983.3333
-8886 40900.0000 23500.0000
-8887 40900.0000 23550.0000
-8888 40900.0000 23616.6667
-8889 40900.0000 23700.0000
-8890 40900.0000 23750.0000
-8891 40900.0000 23816.6667
-8892 40900.0000 24216.6667
-8893 40900.0000 25616.6667
-8894 40900.0000 25833.3333
-8895 40900.0000 25916.6667
-8896 40900.0000 26000.0000
-8897 40900.0000 26050.0000
-8898 40900.0000 26166.6667
-8899 40900.0000 26216.6667
-8900 40903.3333 24348.0556
-8901 40904.1667 24670.8333
-8902 40907.5000 24708.3333
-8903 40908.8889 24657.2222
-8904 40916.6667 21416.6667
-8905 40916.6667 21683.3333
-8906 40916.6667 21933.3333
-8907 40916.6667 21950.0000
-8908 40916.6667 22400.0000
-8909 40916.6667 22700.0000
-8910 40916.6667 22750.0000
-8911 40916.6667 22766.6667
-8912 40916.6667 22866.6667
-8913 40916.6667 22950.0000
-8914 40916.6667 23050.0000
-8915 40916.6667 23083.3333
-8916 40916.6667 23300.0000
-8917 40916.6667 23483.3333
-8918 40916.6667 23566.6667
-8919 40916.6667 23650.0000
-8920 40916.6667 23866.6667
-8921 40916.6667 23983.3333
-8922 40916.6667 24216.6667
-8923 40916.6667 24250.0000
-8924 40916.6667 25516.6667
-8925 40916.6667 25650.0000
-8926 40916.6667 25666.6667
-8927 40916.6667 25700.0000
-8928 40916.6667 25866.6667
-8929 40916.6667 25983.3333
-8930 40933.3333 21966.6667
-8931 40933.3333 22016.6667
-8932 40933.3333 22100.0000
-8933 40933.3333 22416.6667
-8934 40933.3333 22550.0000
-8935 40933.3333 22566.6667
-8936 40933.3333 22966.6667
-8937 40933.3333 23183.3333
-8938 40933.3333 23233.3333
-8939 40933.3333 23433.3333
-8940 40933.3333 23566.6667
-8941 40933.3333 24300.0000
-8942 40933.3333 24350.0000
-8943 40933.3333 24716.6667
-8944 40933.3333 24733.3333
-8945 40933.3333 24816.6667
-8946 40933.3333 24833.3333
-8947 40933.3333 24983.3333
-8948 40933.3333 25566.6667
-8949 40933.3333 25683.3333
-8950 40933.3333 25916.6667
-8951 40933.3333 26116.6667
-8952 40933.3333 26166.6667
-8953 40933.3333 26216.6667
-8954 40939.7222 24401.9444
-8955 40950.0000 21933.3333
-8956 40950.0000 21966.6667
-8957 40950.0000 22050.0000
-8958 40950.0000 22116.6667
-8959 40950.0000 22200.0000
-8960 40950.0000 22416.6667
-8961 40950.0000 22450.0000
-8962 40950.0000 22500.0000
-8963 40950.0000 22566.6667
-8964 40950.0000 22683.3333
-8965 40950.0000 22750.0000
-8966 40950.0000 22800.0000
-8967 40950.0000 22816.6667
-8968 40950.0000 22900.0000
-8969 40950.0000 22933.3333
-8970 40950.0000 23350.0000
-8971 40950.0000 23400.0000
-8972 40950.0000 23416.6667
-8973 40950.0000 23466.6667
-8974 40950.0000 23500.0000
-8975 40950.0000 23883.3333
-8976 40950.0000 23916.6667
-8977 40950.0000 24000.0000
-8978 40950.0000 24150.0000
-8979 40950.0000 24183.3333
-8980 40950.0000 24216.6667
-8981 40950.0000 24433.3333
-8982 40950.0000 24633.3333
-8983 40950.0000 24783.3333
-8984 40950.0000 24866.6667
-8985 40950.0000 25166.6667
-8986 40950.0000 25433.3333
-8987 40950.0000 25466.6667
-8988 40950.0000 25566.6667
-8989 40950.0000 25650.0000
-8990 40950.0000 26000.0000
-8991 40950.0000 26100.0000
-8992 40950.0000 26233.3333
-8993 40950.0000 26300.0000
-8994 40961.6667 24510.0000
-8995 40966.6667 21950.0000
-8996 40966.6667 22016.6667
-8997 40966.6667 22033.3333
-8998 40966.6667 22083.3333
-8999 40966.6667 22516.6667
-9000 40966.6667 22783.3333
-9001 40966.6667 22866.6667
-9002 40966.6667 22933.3333
-9003 40966.6667 23050.0000
-9004 40966.6667 23200.0000
-9005 40966.6667 23716.6667
-9006 40966.6667 24033.3333
-9007 40966.6667 24316.6667
-9008 40966.6667 24333.3333
-9009 40966.6667 24366.6667
-9010 40966.6667 24583.3333
-9011 40966.6667 24700.0000
-9012 40966.6667 24800.0000
-9013 40966.6667 24933.3333
-9014 40966.6667 25133.3333
-9015 40966.6667 25366.6667
-9016 40966.6667 25716.6667
-9017 40966.6667 26183.3333
-9018 40966.6667 26266.6667
-9019 40966.6667 26333.3333
-9020 40983.3333 21966.6667
-9021 40983.3333 21983.3333
-9022 40983.3333 22066.6667
-9023 40983.3333 22133.3333
-9024 40983.3333 22383.3333
-9025 40983.3333 22416.6667
-9026 40983.3333 22550.0000
-9027 40983.3333 22616.6667
-9028 40983.3333 22650.0000
-9029 40983.3333 22666.6667
-9030 40983.3333 22950.0000
-9031 40983.3333 23000.0000
-9032 40983.3333 23116.6667
-9033 40983.3333 23233.3333
-9034 40983.3333 23283.3333
-9035 40983.3333 23350.0000
-9036 40983.3333 23416.6667
-9037 40983.3333 23433.3333
-9038 40983.3333 23516.6667
-9039 40983.3333 23666.6667
-9040 40983.3333 23866.6667
-9041 40983.3333 23966.6667
-9042 40983.3333 24033.3333
-9043 40983.3333 24050.0000
-9044 40983.3333 24333.3333
-9045 40983.3333 24466.6667
-9046 40983.3333 24500.0000
-9047 40983.3333 24516.6667
-9048 40983.3333 24566.6667
-9049 40983.3333 24616.6667
-9050 40983.3333 24700.0000
-9051 40983.3333 24783.3333
-9052 40983.3333 24800.0000
-9053 40983.3333 24833.3333
-9054 40983.3333 24933.3333
-9055 40983.3333 24950.0000
-9056 40983.3333 24966.6667
-9057 40983.3333 25216.6667
-9058 40983.3333 25233.3333
-9059 40983.3333 25300.0000
-9060 40983.3333 25416.6667
-9061 40983.3333 25566.6667
-9062 40983.3333 25616.6667
-9063 40983.3333 25650.0000
-9064 40983.3333 25666.6667
-9065 40983.3333 25783.3333
-9066 40983.3333 26150.0000
-9067 40983.3333 26216.6667
-9068 40983.3333 26250.0000
-9069 41000.0000 22033.3333
-9070 41000.0000 22050.0000
-9071 41000.0000 22150.0000
-9072 41000.0000 22175.2778
-9073 41000.0000 22573.8889
-9074 41000.0000 22725.5556
-9075 41000.0000 22766.6667
-9076 41000.0000 22933.3333
-9077 41000.0000 23033.3333
-9078 41000.0000 23100.0000
-9079 41000.0000 23133.3333
-9080 41000.0000 23366.6667
-9081 41000.0000 23483.3333
-9082 41000.0000 23566.6667
-9083 41000.0000 23600.0000
-9084 41000.0000 23633.3333
-9085 41000.0000 23783.3333
-9086 41000.0000 23866.6667
-9087 41000.0000 23966.6667
-9088 41000.0000 24633.3333
-9089 41000.0000 24650.0000
-9090 41000.0000 24966.6667
-9091 41000.0000 24983.3333
-9092 41000.0000 25383.3333
-9093 41000.0000 25450.0000
-9094 41000.0000 25466.6667
-9095 41000.0000 25483.3333
-9096 41000.0000 25533.3333
-9097 41000.0000 25550.0000
-9098 41000.0000 25733.3333
-9099 41000.0000 25866.6667
-9100 41000.0000 26266.6667
-9101 41002.7778 22882.2222
-9102 41006.1111 22292.2222
-9103 41008.6111 22796.9444
-9104 41008.8889 22133.8889
-9105 41009.1667 22065.2778
-9106 41010.5556 22177.5000
-9107 41010.5556 22499.7222
-9108 41010.5556 22664.4444
-9109 41014.4444 22595.8333
-9110 41016.6667 22816.6667
-9111 41016.6667 23333.3333
-9112 41016.6667 23400.0000
-9113 41016.6667 23433.3333
-9114 41016.6667 23466.6667
-9115 41016.6667 23483.3333
-9116 41016.6667 23516.6667
-9117 41016.6667 23550.0000
-9118 41016.6667 23616.6667
-9119 41016.6667 23650.0000
-9120 41016.6667 23700.0000
-9121 41016.6667 23766.6667
-9122 41016.6667 24166.6667
-9123 41016.6667 24216.6667
-9124 41016.6667 24316.6667
-9125 41016.6667 24383.3333
-9126 41016.6667 24416.6667
-9127 41016.6667 24633.3333
-9128 41016.6667 24766.6667
-9129 41016.6667 24800.0000
-9130 41016.6667 24900.0000
-9131 41016.6667 24916.6667
-9132 41016.6667 25116.6667
-9133 41016.6667 25200.0000
-9134 41016.6667 25233.3333
-9135 41016.6667 25350.0000
-9136 41016.6667 25366.6667
-9137 41016.6667 25516.6667
-9138 41016.6667 25600.0000
-9139 41016.6667 25683.3333
-9140 41016.6667 25950.0000
-9141 41016.6667 26200.0000
-9142 41020.0000 22953.6111
-9143 41023.6111 22886.6667
-9144 41024.1667 22190.8333
-9145 41026.1111 22007.5000
-9146 41026.1111 22048.3333
-9147 41026.9444 22767.2222
-9148 41028.8889 22100.0000
-9149 41029.4444 22081.1111
-9150 41030.5556 22191.3889
-9151 41030.8333 22598.0556
-9152 41033.3333 22800.0000
-9153 41033.3333 22866.6667
-9154 41033.3333 23366.6667
-9155 41033.3333 23816.6667
-9156 41033.3333 23833.3333
-9157 41033.3333 23916.6667
-9158 41033.3333 23933.3333
-9159 41033.3333 24033.3333
-9160 41033.3333 24283.3333
-9161 41033.3333 24300.0000
-9162 41033.3333 24333.3333
-9163 41033.3333 24383.3333
-9164 41033.3333 24666.6667
-9165 41033.3333 24800.0000
-9166 41033.3333 24850.0000
-9167 41033.3333 24866.6667
-9168 41033.3333 25033.3333
-9169 41033.3333 25066.6667
-9170 41033.3333 25216.6667
-9171 41033.3333 25316.6667
-9172 41033.3333 25400.0000
-9173 41033.3333 25566.6667
-9174 41033.3333 25700.0000
-9175 41033.3333 26250.0000
-9176 41033.3333 26283.3333
-9177 41033.6111 22045.0000
-9178 41035.0000 22154.7222
-9179 41036.9444 22238.8889
-9180 41038.6111 22952.5000
-9181 41041.9444 22578.8889
-9182 41044.1667 22696.1111
-9183 41050.0000 22516.6667
-9184 41050.0000 23000.0000
-9185 41050.0000 23050.0000
-9186 41050.0000 23316.6667
-9187 41050.0000 23550.0000
-9188 41050.0000 23583.3333
-9189 41050.0000 23683.3333
-9190 41050.0000 23766.6667
-9191 41050.0000 23916.6667
-9192 41050.0000 24050.0000
-9193 41050.0000 24100.0000
-9194 41050.0000 24133.3333
-9195 41050.0000 24183.3333
-9196 41050.0000 24266.6667
-9197 41050.0000 24450.0000
-9198 41050.0000 24550.0000
-9199 41050.0000 24583.3333
-9200 41050.0000 24600.0000
-9201 41050.0000 24650.0000
-9202 41050.0000 24700.0000
-9203 41050.0000 24716.6667
-9204 41050.0000 24766.6667
-9205 41050.0000 24783.3333
-9206 41050.0000 24816.6667
-9207 41050.0000 24850.0000
-9208 41050.0000 25016.6667
-9209 41050.0000 25200.0000
-9210 41050.0000 25333.3333
-9211 41050.0000 25366.6667
-9212 41050.0000 25400.0000
-9213 41050.0000 25416.6667
-9214 41050.0000 25466.6667
-9215 41050.0000 25483.3333
-9216 41050.0000 25500.0000
-9217 41050.0000 25533.3333
-9218 41050.0000 25683.3333
-9219 41050.0000 26266.6667
-9220 41057.2222 22175.2778
-9221 41058.6111 22162.2222
-9222 41063.8889 22733.8889
-9223 41066.6667 22083.3333
-9224 41066.6667 22633.3333
-9225 41066.6667 22966.6667
-9226 41066.6667 23066.6667
-9227 41066.6667 23166.6667
-9228 41066.6667 23383.3333
-9229 41066.6667 23400.0000
-9230 41066.6667 23433.3333
-9231 41066.6667 23450.0000
-9232 41066.6667 23600.0000
-9233 41066.6667 23650.0000
-9234 41066.6667 23750.0000
-9235 41066.6667 23816.6667
-9236 41066.6667 23883.3333
-9237 41066.6667 23933.3333
-9238 41066.6667 23950.0000
-9239 41066.6667 24066.6667
-9240 41066.6667 24250.0000
-9241 41066.6667 24266.6667
-9242 41066.6667 24366.6667
-9243 41066.6667 24483.3333
-9244 41066.6667 24566.6667
-9245 41066.6667 24600.0000
-9246 41066.6667 24616.6667
-9247 41066.6667 24733.3333
-9248 41066.6667 24750.0000
-9249 41066.6667 24783.3333
-9250 41066.6667 24833.3333
-9251 41066.6667 24850.0000
-9252 41066.6667 24900.0000
-9253 41066.6667 24916.6667
-9254 41066.6667 24933.3333
-9255 41066.6667 24966.6667
-9256 41066.6667 25066.6667
-9257 41066.6667 25233.3333
-9258 41066.6667 25333.3333
-9259 41066.6667 25450.0000
-9260 41066.6667 25533.3333
-9261 41066.6667 25550.0000
-9262 41066.6667 25583.3333
-9263 41066.6667 25616.6667
-9264 41066.6667 25650.0000
-9265 41066.6667 25716.6667
-9266 41066.6667 25766.6667
-9267 41066.6667 25900.0000
-9268 41066.6667 26266.6667
-9269 41068.0556 22595.8333
-9270 41071.1111 22359.4444
-9271 41071.1111 22572.5000
-9272 41072.2222 22907.2222
-9273 41072.5000 22704.4444
-9274 41072.5000 22761.9444
-9275 41074.4444 22635.0000
-9276 41075.8333 22428.6111
-9277 41076.3889 22851.1111
-9278 41080.8333 22475.8333
-9279 41082.2222 22498.3333
-9280 41083.3333 22900.0000
-9281 41083.3333 23016.6667
-9282 41083.3333 23033.3333
-9283 41083.3333 23133.3333
-9284 41083.3333 23250.0000
-9285 41083.3333 23283.3333
-9286 41083.3333 23350.0000
-9287 41083.3333 23466.6667
-9288 41083.3333 23550.0000
-9289 41083.3333 23716.6667
-9290 41083.3333 23733.3333
-9291 41083.3333 23750.0000
-9292 41083.3333 23833.3333
-9293 41083.3333 23950.0000
-9294 41083.3333 24183.3333
-9295 41083.3333 24300.0000
-9296 41083.3333 24400.0000
-9297 41083.3333 24483.3333
-9298 41083.3333 24500.0000
-9299 41083.3333 24516.6667
-9300 41083.3333 24533.3333
-9301 41083.3333 24566.6667
-9302 41083.3333 24666.6667
-9303 41083.3333 24766.6667
-9304 41083.3333 24800.0000
-9305 41083.3333 24850.0000
-9306 41083.3333 24866.6667
-9307 41083.3333 24900.0000
-9308 41083.3333 24916.6667
-9309 41083.3333 24950.0000
-9310 41083.3333 24966.6667
-9311 41083.3333 25016.6667
-9312 41083.3333 25233.3333
-9313 41083.3333 25266.6667
-9314 41083.3333 25283.3333
-9315 41083.3333 25333.3333
-9316 41083.3333 25416.6667
-9317 41083.3333 25483.3333
-9318 41083.3333 25550.0000
-9319 41083.3333 25566.6667
-9320 41083.3333 25616.6667
-9321 41083.3333 25650.0000
-9322 41083.3333 25700.0000
-9323 41083.3333 25766.6667
-9324 41083.3333 25783.3333
-9325 41083.3333 25800.0000
-9326 41083.3333 26300.0000
-9327 41084.1667 22280.0000
-9328 41085.8333 22678.6111
-9329 41091.1111 22783.6111
-9330 41091.6667 22726.9444
-9331 41095.2778 22382.5000
-9332 41095.5556 22176.1111
-9333 41095.5556 22523.8889
-9334 41100.0000 22900.0000
-9335 41100.0000 23416.6667
-9336 41100.0000 23500.0000
-9337 41100.0000 23583.3333
-9338 41100.0000 23616.6667
-9339 41100.0000 23650.0000
-9340 41100.0000 23683.3333
-9341 41100.0000 23900.0000
-9342 41100.0000 24083.3333
-9343 41100.0000 24116.6667
-9344 41100.0000 24183.3333
-9345 41100.0000 24233.3333
-9346 41100.0000 24283.3333
-9347 41100.0000 24300.0000
-9348 41100.0000 24533.3333
-9349 41100.0000 24600.0000
-9350 41100.0000 24633.3333
-9351 41100.0000 24783.3333
-9352 41100.0000 24800.0000
-9353 41100.0000 24900.0000
-9354 41100.0000 24916.6667
-9355 41100.0000 24933.3333
-9356 41100.0000 25150.0000
-9357 41100.0000 25200.0000
-9358 41100.0000 25300.0000
-9359 41100.0000 25350.0000
-9360 41100.0000 25383.3333
-9361 41100.0000 25450.0000
-9362 41100.0000 25583.3333
-9363 41100.0000 25766.6667
-9364 41100.0000 25783.3333
-9365 41102.5000 22920.8333
-9366 41103.3333 22208.0556
-9367 41103.6111 22262.7778
-9368 41103.6111 22845.0000
-9369 41104.4444 22623.0556
-9370 41105.0000 22481.9444
-9371 41105.5556 22557.7778
-9372 41106.1111 22733.3333
-9373 41108.0556 22993.8889
-9374 41109.7222 22046.9444
-9375 41111.6667 22271.3889
-9376 41114.7222 22897.5000
-9377 41115.5556 22794.7222
-9378 41116.6667 22833.3333
-9379 41116.6667 23066.6667
-9380 41116.6667 23183.3333
-9381 41116.6667 23250.0000
-9382 41116.6667 23300.0000
-9383 41116.6667 23333.3333
-9384 41116.6667 23383.3333
-9385 41116.6667 23466.6667
-9386 41116.6667 23516.6667
-9387 41116.6667 23650.0000
-9388 41116.6667 23916.6667
-9389 41116.6667 24000.0000
-9390 41116.6667 24033.3333
-9391 41116.6667 24050.0000
-9392 41116.6667 24083.3333
-9393 41116.6667 24100.0000
-9394 41116.6667 24133.3333
-9395 41116.6667 24150.0000
-9396 41116.6667 24283.3333
-9397 41116.6667 24300.0000
-9398 41116.6667 24350.0000
-9399 41116.6667 24383.3333
-9400 41116.6667 24433.3333
-9401 41116.6667 24583.3333
-9402 41116.6667 24700.0000
-9403 41116.6667 24783.3333
-9404 41116.6667 24816.6667
-9405 41116.6667 24833.3333
-9406 41116.6667 24850.0000
-9407 41116.6667 24866.6667
-9408 41116.6667 24916.6667
-9409 41116.6667 24950.0000
-9410 41116.6667 25000.0000
-9411 41116.6667 25016.6667
-9412 41116.6667 25066.6667
-9413 41116.6667 25116.6667
-9414 41116.6667 25200.0000
-9415 41116.6667 25300.0000
-9416 41116.6667 25366.6667
-9417 41116.6667 25400.0000
-9418 41116.6667 25433.3333
-9419 41116.6667 25633.3333
-9420 41116.6667 25650.0000
-9421 41116.6667 25683.3333
-9422 41116.6667 25716.6667
-9423 41116.6667 26283.3333
-9424 41120.2778 22661.1111
-9425 41122.7778 22511.9444
-9426 41128.3333 22876.1111
-9427 41133.3333 23066.6667
-9428 41133.3333 23216.6667
-9429 41133.3333 23383.3333
-9430 41133.3333 23933.3333
-9431 41133.3333 24000.0000
-9432 41133.3333 24116.6667
-9433 41133.3333 24150.0000
-9434 41133.3333 24166.6667
-9435 41133.3333 24216.6667
-9436 41133.3333 24266.6667
-9437 41133.3333 24316.6667
-9438 41133.3333 24366.6667
-9439 41133.3333 24700.0000
-9440 41133.3333 24733.3333
-9441 41133.3333 24850.0000
-9442 41133.3333 24866.6667
-9443 41133.3333 24883.3333
-9444 41133.3333 24983.3333
-9445 41133.3333 25000.0000
-9446 41133.3333 25050.0000
-9447 41133.3333 25183.3333
-9448 41133.3333 25216.6667
-9449 41133.3333 25266.6667
-9450 41133.3333 25283.3333
-9451 41133.3333 25550.0000
-9452 41133.3333 25600.0000
-9453 41133.3333 25650.0000
-9454 41133.3333 25716.6667
-9455 41133.3333 26216.6667
-9456 41134.4444 22917.2222
-9457 41139.1667 22668.6111
-9458 41144.7222 22972.7778
-9459 41146.9444 22744.7222
-9460 41150.0000 22833.3333
-9461 41150.0000 23000.0000
-9462 41150.0000 23166.6667
-9463 41150.0000 23283.3333
-9464 41150.0000 23333.3333
-9465 41150.0000 23416.6667
-9466 41150.0000 23450.0000
-9467 41150.0000 23583.3333
-9468 41150.0000 23900.0000
-9469 41150.0000 24066.6667
-9470 41150.0000 24133.3333
-9471 41150.0000 24150.0000
-9472 41150.0000 24483.3333
-9473 41150.0000 24933.3333
-9474 41150.0000 24966.6667
-9475 41150.0000 25066.6667
-9476 41150.0000 25300.0000
-9477 41150.0000 25316.6667
-9478 41150.0000 25333.3333
-9479 41150.0000 25350.0000
-9480 41150.0000 25433.3333
-9481 41150.0000 25466.6667
-9482 41150.0000 25500.0000
-9483 41150.0000 25533.3333
-9484 41150.0000 25566.6667
-9485 41150.0000 25683.3333
-9486 41150.0000 26216.6667
-9487 41150.0000 26300.0000
-9488 41162.5000 22894.4444
-9489 41164.4444 22668.6111
-9490 41166.6667 22800.0000
-9491 41166.6667 23016.6667
-9492 41166.6667 23266.6667
-9493 41166.6667 23283.3333
-9494 41166.6667 23366.6667
-9495 41166.6667 23850.0000
-9496 41166.6667 24216.6667
-9497 41166.6667 24316.6667
-9498 41166.6667 24333.3333
-9499 41166.6667 24366.6667
-9500 41166.6667 24383.3333
-9501 41166.6667 24400.0000
-9502 41166.6667 24550.0000
-9503 41166.6667 24633.3333
-9504 41166.6667 24733.3333
-9505 41166.6667 24850.0000
-9506 41166.6667 24966.6667
-9507 41166.6667 24983.3333
-9508 41166.6667 25366.6667
-9509 41166.6667 25383.3333
-9510 41166.6667 25466.6667
-9511 41166.6667 25483.3333
-9512 41166.6667 25616.6667
-9513 41166.6667 25633.3333
-9514 41166.6667 26116.6667
-9515 41178.0556 22760.8333
-9516 41183.3333 22850.0000
-9517 41183.3333 22883.3333
-9518 41183.3333 22900.0000
-9519 41183.3333 22916.6667
-9520 41183.3333 23083.3333
-9521 41183.3333 23233.3333
-9522 41183.3333 23250.0000
-9523 41183.3333 23266.6667
-9524 41183.3333 23316.6667
-9525 41183.3333 23400.0000
-9526 41183.3333 23933.3333
-9527 41183.3333 23966.6667
-9528 41183.3333 24166.6667
-9529 41183.3333 24316.6667
-9530 41183.3333 24366.6667
-9531 41183.3333 24383.3333
-9532 41183.3333 24416.6667
-9533 41183.3333 24833.3333
-9534 41183.3333 24900.0000
-9535 41183.3333 24950.0000
-9536 41183.3333 25283.3333
-9537 41183.3333 25333.3333
-9538 41183.3333 25416.6667
-9539 41183.3333 25433.3333
-9540 41183.3333 25883.3333
-9541 41186.6667 22815.8333
-9542 41200.0000 22816.6667
-9543 41200.0000 23200.0000
-9544 41200.0000 23250.0000
-9545 41200.0000 23283.3333
-9546 41200.0000 23366.6667
-9547 41200.0000 23550.0000
-9548 41200.0000 23583.3333
-9549 41200.0000 23600.0000
-9550 41200.0000 23816.6667
-9551 41200.0000 23900.0000
-9552 41200.0000 24016.6667
-9553 41200.0000 24100.0000
-9554 41200.0000 24333.3333
-9555 41200.0000 24383.3333
-9556 41200.0000 24416.6667
-9557 41200.0000 24700.0000
-9558 41200.0000 24816.6667
-9559 41200.0000 24883.3333
-9560 41200.0000 24916.6667
-9561 41200.0000 25016.6667
-9562 41200.0000 25033.3333
-9563 41200.0000 25133.3333
-9564 41200.0000 25166.6667
-9565 41200.0000 25383.3333
-9566 41200.0000 25516.6667
-9567 41200.0000 25583.3333
-9568 41200.0000 26300.0000
-9569 41216.6667 22816.6667
-9570 41216.6667 22900.0000
-9571 41216.6667 23033.3333
-9572 41216.6667 23050.0000
-9573 41216.6667 23083.3333
-9574 41216.6667 23300.0000
-9575 41216.6667 23366.6667
-9576 41216.6667 23400.0000
-9577 41216.6667 23900.0000
-9578 41216.6667 23916.6667
-9579 41216.6667 24266.6667
-9580 41216.6667 24350.0000
-9581 41216.6667 24366.6667
-9582 41216.6667 24433.3333
-9583 41216.6667 24450.0000
-9584 41216.6667 24466.6667
-9585 41216.6667 24550.0000
-9586 41216.6667 24633.3333
-9587 41216.6667 24666.6667
-9588 41216.6667 24783.3333
-9589 41216.6667 24800.0000
-9590 41216.6667 24866.6667
-9591 41216.6667 24900.0000
-9592 41216.6667 24933.3333
-9593 41216.6667 24950.0000
-9594 41216.6667 25450.0000
-9595 41216.6667 25566.6667
-9596 41216.6667 25683.3333
-9597 41216.6667 25700.0000
-9598 41216.6667 25733.3333
-9599 41216.6667 26016.6667
-9600 41216.6667 26200.0000
-9601 41222.5000 22827.7778
-9602 41226.9444 22790.0000
-9603 41233.3333 22983.3333
-9604 41233.3333 23000.0000
-9605 41233.3333 23250.0000
-9606 41233.3333 23383.3333
-9607 41233.3333 24166.6667
-9608 41233.3333 24183.3333
-9609 41233.3333 24200.0000
-9610 41233.3333 24266.6667
-9611 41233.3333 24383.3333
-9612 41233.3333 24400.0000
-9613 41233.3333 24583.3333
-9614 41233.3333 24600.0000
-9615 41233.3333 24616.6667
-9616 41233.3333 24633.3333
-9617 41233.3333 24816.6667
-9618 41233.3333 24866.6667
-9619 41233.3333 24883.3333
-9620 41233.3333 24950.0000
-9621 41233.3333 25033.3333
-9622 41233.3333 25100.0000
-9623 41233.3333 25200.0000
-9624 41233.3333 25250.0000
-9625 41233.3333 25366.6667
-9626 41233.3333 25533.3333
-9627 41233.3333 25600.0000
-9628 41233.3333 25766.6667
-9629 41233.3333 25850.0000
-9630 41233.3333 25900.0000
-9631 41233.3333 25933.3333
-9632 41233.3333 25966.6667
-9633 41236.6667 22946.9444
-9634 41243.6111 22851.1111
-9635 41250.0000 22783.3333
-9636 41250.0000 22800.0000
-9637 41250.0000 22816.6667
-9638 41250.0000 23016.6667
-9639 41250.0000 23083.3333
-9640 41250.0000 23216.6667
-9641 41250.0000 23283.3333
-9642 41250.0000 23333.3333
-9643 41250.0000 23450.0000
-9644 41250.0000 23816.6667
-9645 41250.0000 24033.3333
-9646 41250.0000 24433.3333
-9647 41250.0000 24500.0000
-9648 41250.0000 24516.6667
-9649 41250.0000 24533.3333
-9650 41250.0000 24566.6667
-9651 41250.0000 24583.3333
-9652 41250.0000 24600.0000
-9653 41250.0000 24633.3333
-9654 41250.0000 24700.0000
-9655 41250.0000 24733.3333
-9656 41250.0000 24900.0000
-9657 41250.0000 24916.6667
-9658 41250.0000 25483.3333
-9659 41250.0000 25533.3333
-9660 41250.0000 25633.3333
-9661 41250.0000 25683.3333
-9662 41250.0000 25866.6667
-9663 41250.0000 26133.3333
-9664 41255.0000 22795.2778
-9665 41260.2778 22789.1667
-9666 41264.7222 22842.2222
-9667 41266.6667 22800.0000
-9668 41266.6667 22833.3333
-9669 41266.6667 22933.3333
-9670 41266.6667 23000.0000
-9671 41266.6667 23133.3333
-9672 41266.6667 23183.3333
-9673 41266.6667 23366.6667
-9674 41266.6667 23383.3333
-9675 41266.6667 23400.0000
-9676 41266.6667 24183.3333
-9677 41266.6667 24400.0000
-9678 41266.6667 24483.3333
-9679 41266.6667 24500.0000
-9680 41266.6667 24566.6667
-9681 41266.6667 24666.6667
-9682 41266.6667 24716.6667
-9683 41266.6667 24800.0000
-9684 41266.6667 24833.3333
-9685 41266.6667 24866.6667
-9686 41266.6667 24933.3333
-9687 41266.6667 25466.6667
-9688 41266.6667 25533.3333
-9689 41266.6667 25733.3333
-9690 41266.6667 25866.6667
-9691 41266.6667 25916.6667
-9692 41266.6667 25950.0000
-9693 41266.6667 25983.3333
-9694 41266.6667 26333.3333
-9695 41266.6667 26383.3333
-9696 41266.6667 26400.0000
-9697 41269.7222 22853.6111
-9698 41276.3889 22893.6111
-9699 41283.0556 22932.2222
-9700 41283.3333 23016.6667
-9701 41283.3333 23033.3333
-9702 41283.3333 23233.3333
-9703 41283.3333 23250.0000
-9704 41283.3333 23300.0000
-9705 41283.3333 23333.3333
-9706 41283.3333 23750.0000
-9707 41283.3333 23933.3333
-9708 41283.3333 24216.6667
-9709 41283.3333 24233.3333
-9710 41283.3333 24316.6667
-9711 41283.3333 24400.0000
-9712 41283.3333 24466.6667
-9713 41283.3333 24483.3333
-9714 41283.3333 24800.0000
-9715 41283.3333 24966.6667
-9716 41283.3333 25116.6667
-9717 41283.3333 25183.3333
-9718 41283.3333 25550.0000
-9719 41283.3333 25616.6667
-9720 41283.3333 25783.3333
-9721 41283.3333 25850.0000
-9722 41283.3333 25983.3333
-9723 41283.3333 26283.3333
-9724 41293.0556 22947.2222
-9725 41295.2778 22833.0556
-9726 41295.8333 22985.2778
-9727 41300.0000 22800.0000
-9728 41300.0000 23500.0000
-9729 41300.0000 23683.3333
-9730 41300.0000 23850.0000
-9731 41300.0000 24466.6667
-9732 41300.0000 24516.6667
-9733 41300.0000 24616.6667
-9734 41300.0000 24783.3333
-9735 41300.0000 24900.0000
-9736 41300.0000 25666.6667
-9737 41300.0000 25983.3333
-9738 41300.0000 26183.3333
-9739 41300.0000 26250.0000
-9740 41300.0000 26433.3333
-9741 41316.6667 23550.0000
-9742 41316.6667 23583.3333
-9743 41316.6667 23783.3333
-9744 41316.6667 24000.0000
-9745 41316.6667 24366.6667
-9746 41316.6667 24416.6667
-9747 41316.6667 24450.0000
-9748 41316.6667 24583.3333
-9749 41316.6667 24766.6667
-9750 41316.6667 25100.0000
-9751 41316.6667 25116.6667
-9752 41316.6667 25816.6667
-9753 41316.6667 26100.0000
-9754 41316.6667 26483.3333
-9755 41333.3333 24333.3333
-9756 41333.3333 24533.3333
-9757 41333.3333 24883.3333
-9758 41333.3333 24933.3333
-9759 41333.3333 25050.0000
-9760 41333.3333 26266.6667
-9761 41350.0000 23683.3333
-9762 41350.0000 23716.6667
-9763 41350.0000 23800.0000
-9764 41350.0000 23866.6667
-9765 41350.0000 24083.3333
-9766 41350.0000 24100.0000
-9767 41350.0000 24450.0000
-9768 41350.0000 24533.3333
-9769 41350.0000 24633.3333
-9770 41350.0000 24850.0000
-9771 41350.0000 24983.3333
-9772 41350.0000 26200.0000
-9773 41350.0000 26366.6667
-9774 41350.0000 26433.3333
-9775 41350.0000 26500.0000
-9776 41350.0000 26583.3333
-9777 41350.0000 26600.0000
-9778 41366.6667 23366.6667
-9779 41366.6667 24183.3333
-9780 41366.6667 24233.3333
-9781 41366.6667 24266.6667
-9782 41366.6667 24316.6667
-9783 41366.6667 24550.0000
-9784 41366.6667 24616.6667
-9785 41366.6667 24916.6667
-9786 41366.6667 24966.6667
-9787 41366.6667 25000.0000
-9788 41366.6667 26383.3333
-9789 41366.6667 26466.6667
-9790 41366.6667 26533.3333
-9791 41383.3333 23300.0000
-9792 41383.3333 23450.0000
-9793 41383.3333 23866.6667
-9794 41383.3333 23983.3333
-9795 41383.3333 24050.0000
-9796 41383.3333 24100.0000
-9797 41383.3333 24283.3333
-9798 41383.3333 24916.6667
-9799 41383.3333 24933.3333
-9800 41383.3333 26300.0000
-9801 41383.3333 26616.6667
-9802 41400.0000 23900.0000
-9803 41400.0000 24016.6667
-9804 41400.0000 24033.3333
-9805 41400.0000 24100.0000
-9806 41400.0000 24216.6667
-9807 41400.0000 26283.3333
-9808 41400.0000 26333.3333
-9809 41400.0000 26416.6667
-9810 41400.0000 26566.6667
-9811 41400.0000 26583.3333
-9812 41416.6667 23833.3333
-9813 41416.6667 24000.0000
-9814 41416.6667 24083.3333
-9815 41416.6667 24133.3333
-9816 41416.6667 24166.6667
-9817 41416.6667 24283.3333
-9818 41416.6667 26250.0000
-9819 41416.6667 26383.3333
-9820 41416.6667 26400.0000
-9821 41416.6667 26516.6667
-9822 41416.6667 26550.0000
-9823 41416.6667 26566.6667
-9824 41433.3333 24466.6667
-9825 41433.3333 26316.6667
-9826 41433.3333 26350.0000
-9827 41433.3333 26550.0000
-9828 41450.0000 26266.6667
-9829 41450.0000 26400.0000
-9830 41450.0000 26466.6667
-9831 41450.0000 26550.0000
-9832 41466.6667 26350.0000
-9833 41466.6667 26383.3333
-9834 41466.6667 26566.6667
-9835 41483.3333 24133.3333
-9836 41483.3333 24150.0000
-9837 41483.3333 26283.3333
-9838 41483.3333 26300.0000
-9839 41483.3333 26316.6667
-9840 41483.3333 26400.0000
-9841 41483.3333 26433.3333
-9842 41483.3333 26550.0000
-9843 41500.0000 24133.3333
-9844 41500.0000 26216.6667
-9845 41500.0000 26233.3333
-9846 41500.0000 26466.6667
-9847 41500.0000 26500.0000
-9848 41500.0000 26516.6667
-9849 41516.6667 26250.0000
-9850 41516.6667 26283.3333
-9851 41516.6667 26300.0000
-9852 41516.6667 26450.0000
-9853 41533.3333 26350.0000
-9854 41533.3333 26533.3333
-9855 41533.3333 26550.0000
-9856 41566.6667 26166.6667
-9857 41566.6667 26183.3333
-9858 41566.6667 26450.0000
-9859 41566.6667 26516.6667
-9860 41583.3333 26183.3333
-9861 41583.3333 26233.3333
-9862 41583.3333 26283.3333
-9863 41583.3333 26533.3333
-9864 41600.0000 26300.0000
-9865 41616.6667 26316.6667
-9866 41616.6667 26350.0000
-9867 41616.6667 26433.3333
-9868 41633.3333 26333.3333
-9869 41633.3333 26383.3333
-9870 41650.0000 26083.3333
-9871 41650.0000 26183.3333
-9872 41650.0000 26316.6667
-9873 41650.0000 26416.6667
-9874 41650.0000 26466.6667
-9875 41666.6667 26350.0000
-9876 41666.6667 26466.6667
-9877 41683.3333 26283.3333
-9878 41700.0000 26133.3333
-9879 41700.0000 26233.3333
-9880 41700.0000 26283.3333
-9881 41700.0000 26383.3333
-9882 41716.6667 26216.6667
-\.
-
-UPDATE gr9882 SET the_geom = ST_makePoint(x,y);
-SELECT * into grece from pgr_eucledianDmatrix('gr9882'::regclass);
-SELECT * from pgr_xydtsp($$SELECT * from grece$$, true);
--- SELECT * from pgr_xydtsp($$SELECT * from pgr_eucledianDmatrix('gr9882'::regclass)$$, true, 1);
--- SELECT * from pgr_tsp('SELECT id::integer, x, y from gr9882', 1);
-
+-- http://www.math.uwaterloo.ca/tsp/world/countries.html#GR
+
+-- NAME : gr9882
+-- COMMENT : 9882 locations in Greece
+-- COMMENT : Derived from National Imagery and Mapping Agency data
+-- TYPE : TSP
+-- DIMENSION : 9882
+-- EDGE_WEIGHT_TYPE : EUC_2D
+-- NODE_COORD_SECTION
+
+DROP TABLE IF EXISTS gr9882;
+CREATE TABLE gr9882 (id BIGINT, x FLOAT, y FLOAT, the_geom geometry);
+COPY gr9882 (id, x, y) FROM stdin WITH DELIMITER ' ';
+1 34816.6667 24100.0000
+2 34833.3333 24083.3333
+3 34850.0000 24050.0000
+4 34850.0000 24083.3333
+5 34850.0000 24116.6667
+6 34866.6667 24083.3333
+7 34933.3333 24800.0000
+8 34933.3333 24916.6667
+9 34966.6667 24883.3333
+10 34966.6667 24933.3333
+11 34966.6667 24950.0000
+12 34966.6667 25033.3333
+13 34966.6667 25133.3333
+14 34966.6667 25250.0000
+15 34983.3333 24750.0000
+16 34983.3333 24850.0000
+17 34983.3333 24916.6667
+18 34983.3333 24983.3333
+19 34983.3333 25000.0000
+20 34983.3333 25016.6667
+21 34983.3333 25150.0000
+22 34983.3333 25166.6667
+23 34983.3333 25200.0000
+24 34983.3333 25216.6667
+25 34983.3333 25266.6667
+26 34983.3333 25283.3333
+27 34983.3333 25316.6667
+28 34983.3333 25333.3333
+29 35000.0000 24816.6667
+30 35000.0000 24900.0000
+31 35000.0000 24933.3333
+32 35000.0000 25033.3333
+33 35000.0000 25066.6667
+34 35000.0000 25133.3333
+35 35000.0000 25150.0000
+36 35000.0000 25366.6667
+37 35000.0000 25383.3333
+38 35000.0000 25483.3333
+39 35000.0000 25516.6667
+40 35000.0000 25533.3333
+41 35000.0000 25583.3333
+42 35000.0000 25633.3333
+43 35016.6667 24783.3333
+44 35016.6667 24800.0000
+45 35016.6667 24833.3333
+46 35016.6667 24866.6667
+47 35016.6667 24883.3333
+48 35016.6667 24900.0000
+49 35016.6667 24916.6667
+50 35016.6667 24950.0000
+51 35016.6667 24966.6667
+52 35016.6667 25000.0000
+53 35016.6667 25066.6667
+54 35016.6667 25083.3333
+55 35016.6667 25116.6667
+56 35016.6667 25166.6667
+57 35016.6667 25200.0000
+58 35016.6667 25416.6667
+59 35016.6667 25516.6667
+60 35016.6667 25533.3333
+61 35016.6667 25550.0000
+62 35016.6667 25583.3333
+63 35016.6667 25683.3333
+64 35016.6667 25750.0000
+65 35016.6667 25833.3333
+66 35016.6667 26100.0000
+67 35016.6667 26116.6667
+68 35033.3333 24783.3333
+69 35033.3333 24833.3333
+70 35033.3333 24933.3333
+71 35033.3333 25150.0000
+72 35033.3333 25233.3333
+73 35033.3333 25250.0000
+74 35033.3333 25266.6667
+75 35033.3333 25283.3333
+76 35033.3333 25383.3333
+77 35033.3333 25433.3333
+78 35033.3333 25450.0000
+79 35033.3333 25483.3333
+80 35033.3333 25500.0000
+81 35033.3333 25550.0000
+82 35033.3333 25566.6667
+83 35033.3333 25600.0000
+84 35033.3333 25666.6667
+85 35033.3333 25750.0000
+86 35033.3333 25766.6667
+87 35033.3333 25900.0000
+88 35033.3333 25950.0000
+89 35033.3333 25966.6667
+90 35033.3333 25983.3333
+91 35033.3333 26150.0000
+92 35050.0000 24816.6667
+93 35050.0000 24833.3333
+94 35050.0000 24866.6667
+95 35050.0000 24900.0000
+96 35050.0000 24950.0000
+97 35050.0000 25050.0000
+98 35050.0000 25066.6667
+99 35050.0000 25100.0000
+100 35050.0000 25116.6667
+101 35050.0000 25183.3333
+102 35050.0000 25300.0000
+103 35050.0000 25333.3333
+104 35050.0000 25383.3333
+105 35050.0000 25416.6667
+106 35050.0000 25450.0000
+107 35050.0000 25500.0000
+108 35050.0000 25550.0000
+109 35050.0000 25633.3333
+110 35050.0000 25666.6667
+111 35050.0000 25783.3333
+112 35050.0000 25800.0000
+113 35050.0000 25833.3333
+114 35050.0000 25883.3333
+115 35050.0000 25950.0000
+116 35050.0000 26050.0000
+117 35050.0000 26066.6667
+118 35050.0000 26100.0000
+119 35050.0000 26116.6667
+120 35050.0000 26150.0000
+121 35050.0000 26183.3333
+122 35066.6667 24766.6667
+123 35066.6667 24816.6667
+124 35066.6667 24866.6667
+125 35066.6667 24883.3333
+126 35066.6667 24916.6667
+127 35066.6667 24933.3333
+128 35066.6667 24966.6667
+129 35066.6667 25016.6667
+130 35066.6667 25033.3333
+131 35066.6667 25083.3333
+132 35066.6667 25100.0000
+133 35066.6667 25116.6667
+134 35066.6667 25133.3333
+135 35066.6667 25200.0000
+136 35066.6667 25216.6667
+137 35066.6667 25233.3333
+138 35066.6667 25300.0000
+139 35066.6667 25566.6667
+140 35066.6667 25716.6667
+141 35066.6667 25750.0000
+142 35066.6667 25816.6667
+143 35066.6667 25866.6667
+144 35066.6667 25966.6667
+145 35066.6667 26016.6667
+146 35066.6667 26083.3333
+147 35066.6667 26116.6667
+148 35083.3333 24733.3333
+149 35083.3333 24833.3333
+150 35083.3333 24866.6667
+151 35083.3333 24883.3333
+152 35083.3333 24916.6667
+153 35083.3333 24933.3333
+154 35083.3333 24950.0000
+155 35083.3333 24966.6667
+156 35083.3333 25033.3333
+157 35083.3333 25050.0000
+158 35083.3333 25083.3333
+159 35083.3333 25100.0000
+160 35083.3333 25183.3333
+161 35083.3333 25216.6667
+162 35083.3333 25233.3333
+163 35083.3333 25250.0000
+164 35083.3333 25266.6667
+165 35083.3333 25283.3333
+166 35083.3333 25333.3333
+167 35083.3333 25366.6667
+168 35083.3333 25400.0000
+169 35083.3333 25566.6667
+170 35083.3333 25583.3333
+171 35083.3333 25650.0000
+172 35083.3333 25716.6667
+173 35083.3333 25766.6667
+174 35083.3333 25816.6667
+175 35083.3333 25833.3333
+176 35083.3333 25916.6667
+177 35083.3333 25933.3333
+178 35083.3333 25950.0000
+179 35083.3333 25966.6667
+180 35083.3333 25983.3333
+181 35083.3333 26033.3333
+182 35083.3333 26050.0000
+183 35083.3333 26066.6667
+184 35083.3333 26083.3333
+185 35083.3333 26100.0000
+186 35083.3333 26133.3333
+187 35083.3333 26166.6667
+188 35100.0000 24683.3333
+189 35100.0000 24783.3333
+190 35100.0000 24833.3333
+191 35100.0000 24850.0000
+192 35100.0000 24916.6667
+193 35100.0000 24966.6667
+194 35100.0000 25000.0000
+195 35100.0000 25066.6667
+196 35100.0000 25083.3333
+197 35100.0000 25166.6667
+198 35100.0000 25183.3333
+199 35100.0000 25216.6667
+200 35100.0000 25250.0000
+201 35100.0000 25283.3333
+202 35100.0000 25300.0000
+203 35100.0000 25350.0000
+204 35100.0000 25366.6667
+205 35100.0000 25383.3333
+206 35100.0000 25400.0000
+207 35100.0000 25416.6667
+208 35100.0000 25683.3333
+209 35100.0000 25800.0000
+210 35100.0000 25866.6667
+211 35100.0000 25950.0000
+212 35100.0000 26066.6667
+213 35100.0000 26083.3333
+214 35100.0000 26133.3333
+215 35100.0000 26266.6667
+216 35116.6667 24616.6667
+217 35116.6667 24750.0000
+218 35116.6667 24766.6667
+219 35116.6667 24816.6667
+220 35116.6667 24866.6667
+221 35116.6667 24900.0000
+222 35116.6667 24916.6667
+223 35116.6667 24933.3333
+224 35116.6667 24950.0000
+225 35116.6667 25000.0000
+226 35116.6667 25116.6667
+227 35116.6667 25133.3333
+228 35116.6667 25216.6667
+229 35116.6667 25233.3333
+230 35116.6667 25250.0000
+231 35116.6667 25266.6667
+232 35116.6667 25283.3333
+233 35116.6667 25300.0000
+234 35116.6667 25333.3333
+235 35116.6667 25716.6667
+236 35116.6667 25733.3333
+237 35116.6667 25800.0000
+238 35116.6667 25850.0000
+239 35116.6667 25883.3333
+240 35116.6667 25983.3333
+241 35116.6667 26016.6667
+242 35116.6667 26066.6667
+243 35116.6667 26083.3333
+244 35116.6667 26100.0000
+245 35116.6667 26150.0000
+246 35116.6667 26216.6667
+247 35116.6667 26233.3333
+248 35133.3333 24600.0000
+249 35133.3333 24650.0000
+250 35133.3333 24733.3333
+251 35133.3333 24816.6667
+252 35133.3333 24900.0000
+253 35133.3333 24916.6667
+254 35133.3333 24950.0000
+255 35133.3333 24983.3333
+256 35133.3333 25000.0000
+257 35133.3333 25016.6667
+258 35133.3333 25033.3333
+259 35133.3333 25066.6667
+260 35133.3333 25083.3333
+261 35133.3333 25116.6667
+262 35133.3333 25150.0000
+263 35133.3333 25166.6667
+264 35133.3333 25183.3333
+265 35133.3333 25216.6667
+266 35133.3333 25233.3333
+267 35133.3333 25266.6667
+268 35133.3333 25333.3333
+269 35133.3333 25533.3333
+270 35133.3333 25666.6667
+271 35133.3333 25900.0000
+272 35133.3333 25950.0000
+273 35133.3333 26016.6667
+274 35133.3333 26033.3333
+275 35133.3333 26066.6667
+276 35133.3333 26100.0000
+277 35133.3333 26116.6667
+278 35133.3333 26166.6667
+279 35133.3333 26216.6667
+280 35133.3333 26250.0000
+281 35150.0000 24633.3333
+282 35150.0000 24666.6667
+283 35150.0000 24716.6667
+284 35150.0000 24733.3333
+285 35150.0000 24750.0000
+286 35150.0000 24766.6667
+287 35150.0000 24783.3333
+288 35150.0000 24816.6667
+289 35150.0000 24833.3333
+290 35150.0000 25033.3333
+291 35150.0000 25200.0000
+292 35150.0000 25233.3333
+293 35150.0000 25266.6667
+294 35150.0000 25300.0000
+295 35150.0000 25350.0000
+296 35150.0000 25466.6667
+297 35150.0000 25533.3333
+298 35150.0000 25550.0000
+299 35150.0000 25566.6667
+300 35150.0000 25583.3333
+301 35150.0000 25633.3333
+302 35150.0000 25866.6667
+303 35150.0000 25916.6667
+304 35150.0000 25966.6667
+305 35150.0000 26016.6667
+306 35150.0000 26083.3333
+307 35150.0000 26100.0000
+308 35150.0000 26166.6667
+309 35150.0000 26183.3333
+310 35150.0000 26250.0000
+311 35166.6667 24450.0000
+312 35166.6667 24483.3333
+313 35166.6667 24516.6667
+314 35166.6667 24533.3333
+315 35166.6667 24583.3333
+316 35166.6667 24716.6667
+317 35166.6667 24733.3333
+318 35166.6667 24783.3333
+319 35166.6667 25000.0000
+320 35166.6667 25066.6667
+321 35166.6667 25100.0000
+322 35166.6667 25116.6667
+323 35166.6667 25200.0000
+324 35166.6667 25250.0000
+325 35166.6667 25333.3333
+326 35166.6667 25350.0000
+327 35166.6667 25366.6667
+328 35166.6667 25433.3333
+329 35166.6667 25450.0000
+330 35166.6667 25483.3333
+331 35166.6667 25650.0000
+332 35166.6667 25700.0000
+333 35166.6667 25933.3333
+334 35166.6667 25950.0000
+335 35166.6667 25983.3333
+336 35166.6667 26016.6667
+337 35166.6667 26033.3333
+338 35166.6667 26050.0000
+339 35166.6667 26100.0000
+340 35166.6667 26116.6667
+341 35166.6667 26166.6667
+342 35166.6667 26183.3333
+343 35166.6667 26250.0000
+344 35183.3333 24233.3333
+345 35183.3333 24416.6667
+346 35183.3333 24450.0000
+347 35183.3333 24516.6667
+348 35183.3333 24533.3333
+349 35183.3333 24550.0000
+350 35183.3333 24583.3333
+351 35183.3333 24666.6667
+352 35183.3333 24683.3333
+353 35183.3333 24733.3333
+354 35183.3333 25016.6667
+355 35183.3333 25033.3333
+356 35183.3333 25066.6667
+357 35183.3333 25216.6667
+358 35183.3333 25250.0000
+359 35183.3333 25283.3333
+360 35183.3333 25316.6667
+361 35183.3333 25333.3333
+362 35183.3333 25366.6667
+363 35183.3333 25433.3333
+364 35183.3333 25500.0000
+365 35183.3333 25516.6667
+366 35183.3333 25600.0000
+367 35183.3333 25616.6667
+368 35183.3333 25666.6667
+369 35183.3333 25683.3333
+370 35183.3333 25716.6667
+371 35183.3333 25900.0000
+372 35183.3333 25966.6667
+373 35183.3333 26033.3333
+374 35183.3333 26050.0000
+375 35183.3333 26066.6667
+376 35183.3333 26100.0000
+377 35183.3333 26116.6667
+378 35183.3333 26150.0000
+379 35183.3333 26183.3333
+380 35200.0000 24066.6667
+381 35200.0000 24083.3333
+382 35200.0000 24150.0000
+383 35200.0000 24166.6667
+384 35200.0000 24233.3333
+385 35200.0000 24266.6667
+386 35200.0000 24283.3333
+387 35200.0000 24316.6667
+388 35200.0000 24383.3333
+389 35200.0000 24400.0000
+390 35200.0000 24416.6667
+391 35200.0000 24450.0000
+392 35200.0000 24483.3333
+393 35200.0000 24500.0000
+394 35200.0000 24566.6667
+395 35200.0000 24633.3333
+396 35200.0000 24650.0000
+397 35200.0000 24683.3333
+398 35200.0000 25000.0000
+399 35200.0000 25033.3333
+400 35200.0000 25083.3333
+401 35200.0000 25100.0000
+402 35200.0000 25166.6667
+403 35200.0000 25183.3333
+404 35200.0000 25200.0000
+405 35200.0000 25216.6667
+406 35200.0000 25250.0000
+407 35200.0000 25266.6667
+408 35200.0000 25316.6667
+409 35200.0000 25333.3333
+410 35200.0000 25350.0000
+411 35200.0000 25366.6667
+412 35200.0000 25383.3333
+413 35200.0000 25466.6667
+414 35200.0000 25483.3333
+415 35200.0000 25583.3333
+416 35200.0000 25616.6667
+417 35200.0000 25650.0000
+418 35200.0000 25666.6667
+419 35200.0000 25683.3333
+420 35200.0000 25700.0000
+421 35200.0000 26116.6667
+422 35200.0000 26250.0000
+423 35200.0000 26266.6667
+424 35216.6667 24066.6667
+425 35216.6667 24083.3333
+426 35216.6667 24100.0000
+427 35216.6667 24183.3333
+428 35216.6667 24200.0000
+429 35216.6667 24216.6667
+430 35216.6667 24266.6667
+431 35216.6667 24500.0000
+432 35216.6667 24516.6667
+433 35216.6667 24533.3333
+434 35216.6667 24600.0000
+435 35216.6667 24616.6667
+436 35216.6667 24683.3333
+437 35216.6667 24700.0000
+438 35216.6667 24716.6667
+439 35216.6667 25000.0000
+440 35216.6667 25033.3333
+441 35216.6667 25050.0000
+442 35216.6667 25200.0000
+443 35216.6667 25216.6667
+444 35216.6667 25266.6667
+445 35216.6667 25300.0000
+446 35216.6667 25333.3333
+447 35216.6667 25350.0000
+448 35216.6667 25383.3333
+449 35216.6667 25466.6667
+450 35216.6667 25516.6667
+451 35216.6667 25533.3333
+452 35216.6667 25550.0000
+453 35216.6667 25600.0000
+454 35216.6667 25650.0000
+455 35216.6667 25683.3333
+456 35216.6667 25700.0000
+457 35216.6667 26033.3333
+458 35216.6667 26216.6667
+459 35216.6667 26266.6667
+460 35233.3333 23633.3333
+461 35233.3333 23683.3333
+462 35233.3333 23966.6667
+463 35233.3333 24016.6667
+464 35233.3333 24083.3333
+465 35233.3333 24116.6667
+466 35233.3333 24133.3333
+467 35233.3333 24216.6667
+468 35233.3333 24350.0000
+469 35233.3333 24383.3333
+470 35233.3333 24400.0000
+471 35233.3333 24450.0000
+472 35233.3333 24466.6667
+473 35233.3333 24516.6667
+474 35233.3333 24633.3333
+475 35233.3333 24650.0000
+476 35233.3333 24666.6667
+477 35233.3333 24700.0000
+478 35233.3333 24983.3333
+479 35233.3333 25000.0000
+480 35233.3333 25016.6667
+481 35233.3333 25033.3333
+482 35233.3333 25166.6667
+483 35233.3333 25183.3333
+484 35233.3333 25216.6667
+485 35233.3333 25233.3333
+486 35233.3333 25350.0000
+487 35233.3333 25366.6667
+488 35233.3333 25433.3333
+489 35233.3333 25450.0000
+490 35233.3333 25466.6667
+491 35233.3333 25616.6667
+492 35233.3333 25683.3333
+493 35233.3333 25700.0000
+494 35233.3333 25716.6667
+495 35250.0000 23550.0000
+496 35250.0000 23583.3333
+497 35250.0000 23666.6667
+498 35250.0000 23683.3333
+499 35250.0000 23716.6667
+500 35250.0000 23783.3333
+501 35250.0000 23816.6667
+502 35250.0000 24150.0000
+503 35250.0000 24166.6667
+504 35250.0000 24183.3333
+505 35250.0000 24216.6667
+506 35250.0000 24250.0000
+507 35250.0000 24300.0000
+508 35250.0000 24316.6667
+509 35250.0000 24333.3333
+510 35250.0000 24433.3333
+511 35250.0000 24450.0000
+512 35250.0000 24500.0000
+513 35250.0000 24533.3333
+514 35250.0000 24566.6667
+515 35250.0000 24600.0000
+516 35250.0000 24633.3333
+517 35250.0000 24650.0000
+518 35250.0000 24683.3333
+519 35250.0000 24983.3333
+520 35250.0000 25033.3333
+521 35250.0000 25066.6667
+522 35250.0000 25116.6667
+523 35250.0000 25166.6667
+524 35250.0000 25233.3333
+525 35250.0000 25250.0000
+526 35250.0000 25300.0000
+527 35250.0000 25333.3333
+528 35250.0000 25350.0000
+529 35250.0000 25383.3333
+530 35250.0000 25416.6667
+531 35250.0000 25550.0000
+532 35250.0000 25616.6667
+533 35250.0000 25633.3333
+534 35250.0000 25650.0000
+535 35250.0000 25666.6667
+536 35250.0000 25683.3333
+537 35250.0000 26250.0000
+538 35266.6667 23616.6667
+539 35266.6667 23650.0000
+540 35266.6667 23683.3333
+541 35266.6667 23700.0000
+542 35266.6667 23716.6667
+543 35266.6667 23733.3333
+544 35266.6667 23750.0000
+545 35266.6667 23816.6667
+546 35266.6667 24133.3333
+547 35266.6667 24283.3333
+548 35266.6667 24300.0000
+549 35266.6667 24333.3333
+550 35266.6667 24350.0000
+551 35266.6667 24433.3333
+552 35266.6667 24516.6667
+553 35266.6667 24583.3333
+554 35266.6667 24650.0000
+555 35266.6667 25000.0000
+556 35266.6667 25016.6667
+557 35266.6667 25050.0000
+558 35266.6667 25116.6667
+559 35266.6667 25133.3333
+560 35266.6667 25183.3333
+561 35266.6667 25216.6667
+562 35266.6667 25233.3333
+563 35266.6667 25250.0000
+564 35266.6667 25283.3333
+565 35266.6667 25300.0000
+566 35266.6667 25366.6667
+567 35266.6667 25416.6667
+568 35266.6667 25566.6667
+569 35266.6667 25583.3333
+570 35266.6667 25650.0000
+571 35266.6667 25666.6667
+572 35266.6667 25716.6667
+573 35266.6667 26266.6667
+574 35283.3333 23616.6667
+575 35283.3333 23633.3333
+576 35283.3333 23650.0000
+577 35283.3333 23666.6667
+578 35283.3333 23683.3333
+579 35283.3333 23700.0000
+580 35283.3333 23733.3333
+581 35283.3333 23750.0000
+582 35283.3333 23766.6667
+583 35283.3333 23783.3333
+584 35283.3333 23816.6667
+585 35283.3333 23833.3333
+586 35283.3333 23966.6667
+587 35283.3333 24183.3333
+588 35283.3333 24200.0000
+589 35283.3333 24333.3333
+590 35283.3333 24350.0000
+591 35283.3333 24366.6667
+592 35283.3333 24383.3333
+593 35283.3333 24416.6667
+594 35283.3333 24466.6667
+595 35283.3333 24483.3333
+596 35283.3333 24500.0000
+597 35283.3333 24516.6667
+598 35283.3333 24883.3333
+599 35283.3333 25033.3333
+600 35283.3333 25050.0000
+601 35283.3333 25066.6667
+602 35283.3333 25083.3333
+603 35283.3333 25100.0000
+604 35283.3333 25133.3333
+605 35283.3333 25183.3333
+606 35283.3333 25233.3333
+607 35283.3333 25266.6667
+608 35283.3333 25300.0000
+609 35283.3333 25316.6667
+610 35283.3333 25333.3333
+611 35283.3333 25466.6667
+612 35283.3333 25500.0000
+613 35283.3333 25616.6667
+614 35283.3333 25633.3333
+615 35283.3333 25666.6667
+616 35283.3333 25700.0000
+617 35300.0000 23516.6667
+618 35300.0000 23583.3333
+619 35300.0000 23600.0000
+620 35300.0000 23616.6667
+621 35300.0000 23633.3333
+622 35300.0000 23650.0000
+623 35300.0000 23683.3333
+624 35300.0000 23700.0000
+625 35300.0000 23716.6667
+626 35300.0000 23783.3333
+627 35300.0000 23800.0000
+628 35300.0000 24183.3333
+629 35300.0000 24316.6667
+630 35300.0000 24350.0000
+631 35300.0000 24366.6667
+632 35300.0000 24383.3333
+633 35300.0000 24400.0000
+634 35300.0000 24416.6667
+635 35300.0000 24450.0000
+636 35300.0000 24466.6667
+637 35300.0000 24500.0000
+638 35300.0000 24533.3333
+639 35300.0000 24583.3333
+640 35300.0000 24800.0000
+641 35300.0000 24816.6667
+642 35300.0000 24833.3333
+643 35300.0000 24900.0000
+644 35300.0000 24916.6667
+645 35300.0000 24933.3333
+646 35300.0000 25016.6667
+647 35300.0000 25083.3333
+648 35300.0000 25100.0000
+649 35300.0000 25150.0000
+650 35300.0000 25166.6667
+651 35300.0000 25233.3333
+652 35300.0000 25250.0000
+653 35300.0000 25300.0000
+654 35300.0000 25366.6667
+655 35300.0000 25383.3333
+656 35300.0000 25433.3333
+657 35300.0000 25516.6667
+658 35300.0000 25566.6667
+659 35300.0000 25583.3333
+660 35300.0000 25600.0000
+661 35300.0000 25616.6667
+662 35300.0000 25650.0000
+663 35300.0000 25666.6667
+664 35300.0000 25733.3333
+665 35316.6667 23533.3333
+666 35316.6667 23616.6667
+667 35316.6667 23650.0000
+668 35316.6667 23666.6667
+669 35316.6667 23683.3333
+670 35316.6667 23700.0000
+671 35316.6667 23716.6667
+672 35316.6667 23733.3333
+673 35316.6667 23750.0000
+674 35316.6667 23783.3333
+675 35316.6667 23800.0000
+676 35316.6667 23816.6667
+677 35316.6667 24200.0000
+678 35316.6667 24300.0000
+679 35316.6667 24316.6667
+680 35316.6667 24333.3333
+681 35316.6667 24350.0000
+682 35316.6667 24416.6667
+683 35316.6667 24450.0000
+684 35316.6667 24533.3333
+685 35316.6667 24616.6667
+686 35316.6667 24683.3333
+687 35316.6667 24800.0000
+688 35316.6667 24833.3333
+689 35316.6667 24850.0000
+690 35316.6667 24916.6667
+691 35316.6667 24950.0000
+692 35316.6667 25050.0000
+693 35316.6667 25133.3333
+694 35316.6667 25166.6667
+695 35316.6667 25183.3333
+696 35316.6667 25283.3333
+697 35316.6667 25316.6667
+698 35316.6667 25366.6667
+699 35316.6667 25383.3333
+700 35316.6667 25566.6667
+701 35316.6667 25600.0000
+702 35316.6667 25616.6667
+703 35316.6667 25650.0000
+704 35316.6667 25666.6667
+705 35316.6667 25683.3333
+706 35316.6667 25716.6667
+707 35316.6667 25733.3333
+708 35333.3333 23550.0000
+709 35333.3333 23600.0000
+710 35333.3333 23650.0000
+711 35333.3333 23700.0000
+712 35333.3333 23716.6667
+713 35333.3333 23733.3333
+714 35333.3333 23750.0000
+715 35333.3333 23766.6667
+716 35333.3333 23783.3333
+717 35333.3333 23800.0000
+718 35333.3333 23816.6667
+719 35333.3333 23833.3333
+720 35333.3333 23900.0000
+721 35333.3333 24183.3333
+722 35333.3333 24283.3333
+723 35333.3333 24300.0000
+724 35333.3333 24333.3333
+725 35333.3333 24350.0000
+726 35333.3333 24383.3333
+727 35333.3333 24400.0000
+728 35333.3333 24416.6667
+729 35333.3333 24466.6667
+730 35333.3333 24483.3333
+731 35333.3333 24500.0000
+732 35333.3333 24516.6667
+733 35333.3333 24616.6667
+734 35333.3333 24666.6667
+735 35333.3333 24683.3333
+736 35333.3333 24700.0000
+737 35333.3333 24716.6667
+738 35333.3333 24733.3333
+739 35333.3333 24750.0000
+740 35333.3333 24766.6667
+741 35333.3333 24783.3333
+742 35333.3333 24800.0000
+743 35333.3333 24816.6667
+744 35333.3333 24833.3333
+745 35333.3333 24850.0000
+746 35333.3333 24866.6667
+747 35333.3333 24883.3333
+748 35333.3333 25066.6667
+749 35333.3333 25083.3333
+750 35333.3333 25116.6667
+751 35333.3333 25133.3333
+752 35333.3333 25150.0000
+753 35333.3333 25166.6667
+754 35333.3333 25250.0000
+755 35333.3333 25350.0000
+756 35333.3333 25616.6667
+757 35333.3333 25633.3333
+758 35333.3333 25666.6667
+759 35333.3333 25700.0000
+760 35333.3333 25733.3333
+761 35333.3333 25750.0000
+762 35350.0000 23583.3333
+763 35350.0000 23600.0000
+764 35350.0000 23633.3333
+765 35350.0000 23666.6667
+766 35350.0000 23683.3333
+767 35350.0000 23700.0000
+768 35350.0000 23833.3333
+769 35350.0000 24166.6667
+770 35350.0000 24183.3333
+771 35350.0000 24200.0000
+772 35350.0000 24216.6667
+773 35350.0000 24233.3333
+774 35350.0000 24250.0000
+775 35350.0000 24266.6667
+776 35350.0000 24283.3333
+777 35350.0000 24316.6667
+778 35350.0000 24400.0000
+779 35350.0000 24416.6667
+780 35350.0000 24433.3333
+781 35350.0000 24450.0000
+782 35350.0000 24516.6667
+783 35350.0000 24533.3333
+784 35350.0000 24550.0000
+785 35350.0000 24566.6667
+786 35350.0000 24583.3333
+787 35350.0000 24600.0000
+788 35350.0000 24633.3333
+789 35350.0000 24666.6667
+790 35350.0000 24683.3333
+791 35350.0000 24716.6667
+792 35350.0000 24733.3333
+793 35350.0000 24750.0000
+794 35350.0000 24766.6667
+795 35350.0000 24783.3333
+796 35350.0000 24816.6667
+797 35350.0000 24833.3333
+798 35350.0000 24850.0000
+799 35350.0000 24866.6667
+800 35350.0000 24916.6667
+801 35350.0000 24966.6667
+802 35366.6667 23550.0000
+803 35366.6667 23566.6667
+804 35366.6667 23583.3333
+805 35366.6667 23600.0000
+806 35366.6667 23616.6667
+807 35366.6667 23633.3333
+808 35366.6667 23650.0000
+809 35366.6667 23666.6667
+810 35366.6667 23700.0000
+811 35366.6667 23733.3333
+812 35366.6667 23783.3333
+813 35366.6667 23850.0000
+814 35366.6667 23866.6667
+815 35366.6667 24150.0000
+816 35366.6667 24166.6667
+817 35366.6667 24250.0000
+818 35366.6667 24266.6667
+819 35366.6667 24466.6667
+820 35366.6667 24483.3333
+821 35366.6667 24500.0000
+822 35366.6667 24533.3333
+823 35366.6667 24566.6667
+824 35366.6667 24583.3333
+825 35366.6667 24600.0000
+826 35366.6667 24616.6667
+827 35366.6667 24633.3333
+828 35366.6667 24666.6667
+829 35366.6667 24700.0000
+830 35366.6667 24716.6667
+831 35366.6667 24766.6667
+832 35366.6667 24883.3333
+833 35366.6667 25016.6667
+834 35383.3333 23633.3333
+835 35383.3333 23666.6667
+836 35383.3333 23733.3333
+837 35383.3333 23766.6667
+838 35383.3333 23816.6667
+839 35383.3333 23850.0000
+840 35383.3333 23866.6667
+841 35383.3333 23900.0000
+842 35383.3333 23966.6667
+843 35383.3333 24100.0000
+844 35383.3333 24116.6667
+845 35383.3333 24133.3333
+846 35383.3333 24150.0000
+847 35383.3333 24166.6667
+848 35383.3333 24183.3333
+849 35383.3333 24200.0000
+850 35383.3333 24216.6667
+851 35383.3333 24233.3333
+852 35383.3333 24250.0000
+853 35383.3333 24600.0000
+854 35383.3333 24616.6667
+855 35383.3333 24683.3333
+856 35383.3333 24733.3333
+857 35383.3333 24950.0000
+858 35383.3333 24966.6667
+859 35400.0000 23550.0000
+860 35400.0000 23566.6667
+861 35400.0000 23600.0000
+862 35400.0000 23616.6667
+863 35400.0000 23633.3333
+864 35400.0000 23666.6667
+865 35400.0000 23683.3333
+866 35400.0000 23716.6667
+867 35400.0000 23733.3333
+868 35400.0000 23766.6667
+869 35400.0000 23783.3333
+870 35400.0000 23850.0000
+871 35400.0000 23900.0000
+872 35400.0000 23916.6667
+873 35400.0000 23933.3333
+874 35400.0000 23950.0000
+875 35400.0000 23983.3333
+876 35400.0000 24066.6667
+877 35400.0000 24083.3333
+878 35400.0000 24100.0000
+879 35400.0000 24133.3333
+880 35400.0000 24150.0000
+881 35400.0000 24166.6667
+882 35400.0000 24183.3333
+883 35400.0000 24200.0000
+884 35400.0000 24216.6667
+885 35400.0000 24233.3333
+886 35400.0000 24250.0000
+887 35400.0000 24700.0000
+888 35400.0000 24716.6667
+889 35400.0000 24733.3333
+890 35400.0000 24750.0000
+891 35400.0000 24783.3333
+892 35400.0000 24883.3333
+893 35400.0000 24983.3333
+894 35400.0000 26916.6667
+895 35400.0000 26933.3333
+896 35400.0000 26950.0000
+897 35416.6667 23566.6667
+898 35416.6667 23583.3333
+899 35416.6667 23633.3333
+900 35416.6667 23650.0000
+901 35416.6667 23683.3333
+902 35416.6667 23700.0000
+903 35416.6667 23750.0000
+904 35416.6667 23783.3333
+905 35416.6667 23850.0000
+906 35416.6667 23933.3333
+907 35416.6667 24016.6667
+908 35416.6667 24033.3333
+909 35416.6667 24050.0000
+910 35416.6667 24066.6667
+911 35416.6667 24083.3333
+912 35416.6667 24100.0000
+913 35416.6667 24116.6667
+914 35416.6667 24133.3333
+915 35416.6667 24150.0000
+916 35416.6667 24183.3333
+917 35416.6667 24200.0000
+918 35416.6667 24216.6667
+919 35416.6667 24233.3333
+920 35416.6667 24250.0000
+921 35416.6667 24700.0000
+922 35416.6667 24716.6667
+923 35416.6667 24783.3333
+924 35416.6667 26933.3333
+925 35433.3333 23583.3333
+926 35433.3333 23633.3333
+927 35433.3333 23666.6667
+928 35433.3333 23683.3333
+929 35433.3333 23700.0000
+930 35433.3333 23716.6667
+931 35433.3333 23750.0000
+932 35433.3333 23766.6667
+933 35433.3333 23783.3333
+934 35433.3333 23833.3333
+935 35433.3333 23850.0000
+936 35433.3333 23916.6667
+937 35433.3333 23933.3333
+938 35433.3333 24033.3333
+939 35433.3333 24050.0000
+940 35433.3333 24066.6667
+941 35433.3333 24116.6667
+942 35433.3333 24166.6667
+943 35433.3333 24183.3333
+944 35433.3333 24200.0000
+945 35433.3333 24233.3333
+946 35450.0000 23583.3333
+947 35450.0000 23600.0000
+948 35450.0000 23616.6667
+949 35450.0000 23633.3333
+950 35450.0000 23650.0000
+951 35450.0000 23666.6667
+952 35450.0000 23683.3333
+953 35450.0000 23700.0000
+954 35450.0000 23716.6667
+955 35450.0000 23733.3333
+956 35450.0000 23750.0000
+957 35450.0000 23766.6667
+958 35450.0000 23783.3333
+959 35450.0000 23800.0000
+960 35450.0000 23833.3333
+961 35450.0000 23866.6667
+962 35450.0000 23900.0000
+963 35450.0000 23916.6667
+964 35450.0000 24016.6667
+965 35450.0000 24033.3333
+966 35450.0000 24050.0000
+967 35450.0000 24116.6667
+968 35450.0000 24166.6667
+969 35450.0000 24200.0000
+970 35450.0000 24216.6667
+971 35450.0000 24233.3333
+972 35466.6667 23566.6667
+973 35466.6667 23600.0000
+974 35466.6667 23616.6667
+975 35466.6667 23633.3333
+976 35466.6667 23650.0000
+977 35466.6667 23666.6667
+978 35466.6667 23683.3333
+979 35466.6667 23700.0000
+980 35466.6667 23716.6667
+981 35466.6667 23733.3333
+982 35466.6667 23750.0000
+983 35466.6667 23766.6667
+984 35466.6667 23783.3333
+985 35466.6667 23800.0000
+986 35466.6667 23816.6667
+987 35466.6667 23833.3333
+988 35466.6667 23850.0000
+989 35466.6667 23866.6667
+990 35466.6667 23883.3333
+991 35466.6667 23900.0000
+992 35466.6667 23916.6667
+993 35466.6667 23933.3333
+994 35466.6667 23950.0000
+995 35466.6667 23966.6667
+996 35466.6667 23983.3333
+997 35466.6667 24066.6667
+998 35466.6667 24100.0000
+999 35466.6667 24116.6667
+1000 35466.6667 24133.3333
+1001 35466.6667 24150.0000
+1002 35466.6667 27133.3333
+1003 35483.3333 23583.3333
+1004 35483.3333 23600.0000
+1005 35483.3333 23650.0000
+1006 35483.3333 23666.6667
+1007 35483.3333 23683.3333
+1008 35483.3333 23700.0000
+1009 35483.3333 23716.6667
+1010 35483.3333 23733.3333
+1011 35483.3333 23750.0000
+1012 35483.3333 23766.6667
+1013 35483.3333 23783.3333
+1014 35483.3333 23800.0000
+1015 35483.3333 23816.6667
+1016 35483.3333 23833.3333
+1017 35483.3333 23850.0000
+1018 35483.3333 23866.6667
+1019 35483.3333 23900.0000
+1020 35483.3333 23916.6667
+1021 35483.3333 23950.0000
+1022 35483.3333 23966.6667
+1023 35483.3333 23983.3333
+1024 35483.3333 24000.0000
+1025 35483.3333 24016.6667
+1026 35483.3333 24033.3333
+1027 35483.3333 24066.6667
+1028 35483.3333 27116.6667
+1029 35483.3333 27183.3333
+1030 35500.0000 23600.0000
+1031 35500.0000 23616.6667
+1032 35500.0000 23633.3333
+1033 35500.0000 23650.0000
+1034 35500.0000 23666.6667
+1035 35500.0000 23683.3333
+1036 35500.0000 23700.0000
+1037 35500.0000 23716.6667
+1038 35500.0000 23733.3333
+1039 35500.0000 23750.0000
+1040 35500.0000 23766.6667
+1041 35500.0000 23783.3333
+1042 35500.0000 23800.0000
+1043 35500.0000 23816.6667
+1044 35500.0000 23833.3333
+1045 35500.0000 23850.0000
+1046 35500.0000 23866.6667
+1047 35500.0000 23883.3333
+1048 35500.0000 23900.0000
+1049 35500.0000 23933.3333
+1050 35500.0000 23966.6667
+1051 35500.0000 23983.3333
+1052 35500.0000 24000.0000
+1053 35500.0000 24016.6667
+1054 35500.0000 24033.3333
+1055 35500.0000 27233.3333
+1056 35516.6667 23600.0000
+1057 35516.6667 23616.6667
+1058 35516.6667 23633.3333
+1059 35516.6667 23750.0000
+1060 35516.6667 23783.3333
+1061 35516.6667 23816.6667
+1062 35516.6667 23850.0000
+1063 35516.6667 23866.6667
+1064 35516.6667 23883.3333
+1065 35516.6667 23916.6667
+1066 35516.6667 23933.3333
+1067 35516.6667 23966.6667
+1068 35516.6667 23983.3333
+1069 35516.6667 24000.0000
+1070 35516.6667 24033.3333
+1071 35516.6667 24050.0000
+1072 35516.6667 24083.3333
+1073 35516.6667 24100.0000
+1074 35516.6667 24116.6667
+1075 35516.6667 24133.3333
+1076 35516.6667 24150.0000
+1077 35516.6667 27133.3333
+1078 35533.3333 23733.3333
+1079 35533.3333 23750.0000
+1080 35533.3333 23766.6667
+1081 35533.3333 23783.3333
+1082 35533.3333 23800.0000
+1083 35533.3333 24083.3333
+1084 35533.3333 24100.0000
+1085 35533.3333 24116.6667
+1086 35533.3333 24150.0000
+1087 35533.3333 24183.3333
+1088 35533.3333 27150.0000
+1089 35550.0000 23750.0000
+1090 35550.0000 23766.6667
+1091 35550.0000 23783.3333
+1092 35550.0000 24150.0000
+1093 35550.0000 24166.6667
+1094 35550.0000 27166.6667
+1095 35550.0000 27183.3333
+1096 35566.6667 23600.0000
+1097 35566.6667 23750.0000
+1098 35566.6667 23766.6667
+1099 35566.6667 24100.0000
+1100 35566.6667 24133.3333
+1101 35600.0000 23716.6667
+1102 35616.6667 27116.6667
+1103 35633.3333 27150.0000
+1104 35666.6667 23733.3333
+1105 35683.3333 27150.0000
+1106 35733.3333 27183.3333
+1107 35750.0000 27216.6667
+1108 35766.6667 27183.3333
+1109 35800.0000 27216.6667
+1110 35866.6667 23300.0000
+1111 35883.3333 23283.3333
+1112 35900.0000 27216.6667
+1113 35900.0000 27250.0000
+1114 35950.0000 27766.6667
+1115 35966.6667 27866.6667
+1116 36000.0000 27816.6667
+1117 36016.6667 27933.3333
+1118 36050.0000 27816.6667
+1119 36050.0000 27883.3333
+1120 36066.6667 27933.3333
+1121 36083.3333 27800.0000
+1122 36083.3333 27850.0000
+1123 36083.3333 28083.3333
+1124 36100.0000 27833.3333
+1125 36100.0000 28016.6667
+1126 36116.6667 27750.0000
+1127 36133.3333 29583.3333
+1128 36150.0000 22983.3333
+1129 36150.0000 23016.6667
+1130 36150.0000 23033.3333
+1131 36150.0000 27783.3333
+1132 36150.0000 27850.0000
+1133 36150.0000 27950.0000
+1134 36166.6667 22966.6667
+1135 36166.6667 22983.3333
+1136 36166.6667 23000.0000
+1137 36183.3333 22950.0000
+1138 36183.3333 22966.6667
+1139 36183.3333 22983.3333
+1140 36183.3333 23000.0000
+1141 36183.3333 28133.3333
+1142 36200.0000 22950.0000
+1143 36200.0000 22966.6667
+1144 36200.0000 22983.3333
+1145 36200.0000 23000.0000
+1146 36216.6667 22916.6667
+1147 36216.6667 22950.0000
+1148 36216.6667 22966.6667
+1149 36216.6667 22983.3333
+1150 36216.6667 27600.0000
+1151 36216.6667 27616.6667
+1152 36216.6667 27866.6667
+1153 36233.3333 22950.0000
+1154 36233.3333 22966.6667
+1155 36233.3333 22983.3333
+1156 36233.3333 23000.0000
+1157 36233.3333 23083.3333
+1158 36233.3333 27850.0000
+1159 36250.0000 22933.3333
+1160 36250.0000 22950.0000
+1161 36250.0000 22983.3333
+1162 36250.0000 23000.0000
+1163 36250.0000 27716.6667
+1164 36250.0000 27966.6667
+1165 36250.0000 28016.6667
+1166 36250.0000 28166.6667
+1167 36266.6667 22950.0000
+1168 36266.6667 22966.6667
+1169 36266.6667 22983.3333
+1170 36266.6667 23083.3333
+1171 36266.6667 27900.0000
+1172 36266.6667 27916.6667
+1173 36283.3333 22950.0000
+1174 36283.3333 22966.6667
+1175 36283.3333 27866.6667
+1176 36283.3333 27950.0000
+1177 36300.0000 22966.6667
+1178 36300.0000 22983.3333
+1179 36300.0000 28150.0000
+1180 36316.6667 22933.3333
+1181 36316.6667 22950.0000
+1182 36316.6667 28050.0000
+1183 36333.3333 22950.0000
+1184 36333.3333 22966.6667
+1185 36333.3333 22983.3333
+1186 36333.3333 27950.0000
+1187 36350.0000 22950.0000
+1188 36350.0000 25400.0000
+1189 36350.0000 25450.0000
+1190 36350.0000 25766.6667
+1191 36350.0000 27983.3333
+1192 36366.6667 22950.0000
+1193 36383.3333 25433.3333
+1194 36383.3333 25450.0000
+1195 36383.3333 25466.6667
+1196 36399.1667 27423.6111
+1197 36400.0000 22483.3333
+1198 36400.0000 25450.0000
+1199 36400.0000 25483.3333
+1200 36400.0000 28083.3333
+1201 36400.0000 28116.6667
+1202 36400.0000 28166.6667
+1203 36415.8333 27385.0000
+1204 36416.6667 22483.3333
+1205 36416.6667 25433.3333
+1206 36416.6667 25450.0000
+1207 36416.6667 28183.3333
+1208 36420.8333 27371.3889
+1209 36433.3333 22466.6667
+1210 36433.3333 22483.3333
+1211 36433.3333 25333.3333
+1212 36433.3333 25350.0000
+1213 36433.3333 25416.6667
+1214 36433.3333 25433.3333
+1215 36433.3333 28216.6667
+1216 36449.1667 27348.3333
+1217 36450.0000 22466.6667
+1218 36450.0000 22483.3333
+1219 36450.0000 28250.0000
+1220 36458.6111 27318.6111
+1221 36466.6667 22433.3333
+1222 36466.6667 22450.0000
+1223 36466.6667 22466.6667
+1224 36466.6667 23166.6667
+1225 36466.6667 25366.6667
+1226 36466.6667 25383.3333
+1227 36466.6667 25400.0000
+1228 36483.3333 22366.6667
+1229 36483.3333 22383.3333
+1230 36483.3333 22400.0000
+1231 36483.3333 22416.6667
+1232 36483.3333 22450.0000
+1233 36483.3333 22483.3333
+1234 36483.3333 22500.0000
+1235 36483.3333 22950.0000
+1236 36483.3333 23100.0000
+1237 36483.3333 23150.0000
+1238 36500.0000 22366.6667
+1239 36500.0000 22383.3333
+1240 36500.0000 22400.0000
+1241 36500.0000 22416.6667
+1242 36500.0000 22433.3333
+1243 36500.0000 22466.6667
+1244 36500.0000 22483.3333
+1245 36500.0000 23083.3333
+1246 36516.6667 22366.6667
+1247 36516.6667 22383.3333
+1248 36516.6667 22400.0000
+1249 36516.6667 22416.6667
+1250 36516.6667 22466.6667
+1251 36516.6667 22483.3333
+1252 36516.6667 22983.3333
+1253 36516.6667 23050.0000
+1254 36516.6667 23066.6667
+1255 36516.6667 23083.3333
+1256 36533.3333 22366.6667
+1257 36533.3333 22383.3333
+1258 36533.3333 22400.0000
+1259 36533.3333 22416.6667
+1260 36533.3333 22433.3333
+1261 36533.3333 22450.0000
+1262 36533.3333 22466.6667
+1263 36533.3333 22983.3333
+1264 36533.3333 23083.3333
+1265 36533.3333 23116.6667
+1266 36533.3333 27850.0000
+1267 36550.0000 22400.0000
+1268 36550.0000 22416.6667
+1269 36550.0000 22450.0000
+1270 36550.0000 22983.3333
+1271 36550.0000 23000.0000
+1272 36550.0000 23016.6667
+1273 36550.0000 23033.3333
+1274 36550.0000 23050.0000
+1275 36550.0000 23100.0000
+1276 36550.0000 26350.0000
+1277 36558.6111 27175.5556
+1278 36566.6667 22400.0000
+1279 36566.6667 22416.6667
+1280 36566.6667 22466.6667
+1281 36566.6667 22483.3333
+1282 36566.6667 22966.6667
+1283 36566.6667 22983.3333
+1284 36566.6667 23000.0000
+1285 36566.6667 23016.6667
+1286 36566.6667 23033.3333
+1287 36566.6667 23050.0000
+1288 36574.1667 27177.7778
+1289 36583.3333 22400.0000
+1290 36583.3333 22416.6667
+1291 36583.3333 22466.6667
+1292 36583.3333 23033.3333
+1293 36600.0000 22366.6667
+1294 36600.0000 22383.3333
+1295 36600.0000 22400.0000
+1296 36600.0000 22416.6667
+1297 36600.0000 22966.6667
+1298 36600.0000 23050.0000
+1299 36600.0000 24916.6667
+1300 36600.0000 24933.3333
+1301 36600.0000 27833.3333
+1302 36603.3333 27177.7778
+1303 36611.3889 27133.3333
+1304 36616.6667 22383.3333
+1305 36616.6667 22400.0000
+1306 36616.6667 22466.6667
+1307 36616.6667 22483.3333
+1308 36616.6667 22500.0000
+1309 36616.6667 22916.6667
+1310 36616.6667 22983.3333
+1311 36616.6667 23000.0000
+1312 36616.6667 24950.0000
+1313 36617.7778 27170.8333
+1314 36633.3333 22383.3333
+1315 36633.3333 22400.0000
+1316 36633.3333 22466.6667
+1317 36633.3333 22483.3333
+1318 36633.3333 22500.0000
+1319 36633.3333 22883.3333
+1320 36633.3333 22950.0000
+1321 36633.3333 23000.0000
+1322 36633.3333 23016.6667
+1323 36633.3333 23033.3333
+1324 36633.3333 24900.0000
+1325 36633.3333 24916.6667
+1326 36650.0000 22383.3333
+1327 36650.0000 22400.0000
+1328 36650.0000 22416.6667
+1329 36650.0000 22433.3333
+1330 36650.0000 22466.6667
+1331 36650.0000 22500.0000
+1332 36650.0000 22900.0000
+1333 36650.0000 22966.6667
+1334 36650.0000 23016.6667
+1335 36650.0000 24883.3333
+1336 36662.7778 27119.4444
+1337 36666.6667 22366.6667
+1338 36666.6667 22383.3333
+1339 36666.6667 22433.3333
+1340 36666.6667 22450.0000
+1341 36666.6667 22466.6667
+1342 36666.6667 22483.3333
+1343 36666.6667 22500.0000
+1344 36666.6667 22533.3333
+1345 36666.6667 22550.0000
+1346 36666.6667 22933.3333
+1347 36666.6667 22983.3333
+1348 36666.6667 23016.6667
+1349 36683.3333 22383.3333
+1350 36683.3333 22416.6667
+1351 36683.3333 22433.3333
+1352 36683.3333 22450.0000
+1353 36683.3333 22466.6667
+1354 36683.3333 22483.3333
+1355 36683.3333 22516.6667
+1356 36683.3333 22833.3333
+1357 36683.3333 22916.6667
+1358 36683.3333 22933.3333
+1359 36683.3333 22966.6667
+1360 36683.3333 23033.3333
+1361 36683.3333 23050.0000
+1362 36683.3333 25333.3333
+1363 36700.0000 22383.3333
+1364 36700.0000 22466.6667
+1365 36700.0000 22483.3333
+1366 36700.0000 22533.3333
+1367 36700.0000 22900.0000
+1368 36700.0000 22916.6667
+1369 36700.0000 22933.3333
+1370 36700.0000 22950.0000
+1371 36700.0000 23033.3333
+1372 36700.0000 24483.3333
+1373 36700.0000 24533.3333
+1374 36700.0000 25116.6667
+1375 36716.6667 22350.0000
+1376 36716.6667 22366.6667
+1377 36716.6667 22383.3333
+1378 36716.6667 22400.0000
+1379 36716.6667 22416.6667
+1380 36716.6667 22433.3333
+1381 36716.6667 22466.6667
+1382 36716.6667 22500.0000
+1383 36716.6667 22866.6667
+1384 36716.6667 22950.0000
+1385 36716.6667 22983.3333
+1386 36733.3333 22333.3333
+1387 36733.3333 22350.0000
+1388 36733.3333 22416.6667
+1389 36733.3333 22433.3333
+1390 36733.3333 22450.0000
+1391 36733.3333 22466.6667
+1392 36733.3333 22483.3333
+1393 36733.3333 22500.0000
+1394 36733.3333 22550.0000
+1395 36733.3333 22566.6667
+1396 36733.3333 22866.6667
+1397 36733.3333 22900.0000
+1398 36733.3333 23033.3333
+1399 36733.3333 24433.3333
+1400 36733.3333 25283.3333
+1401 36750.0000 22333.3333
+1402 36750.0000 22450.0000
+1403 36750.0000 22466.6667
+1404 36750.0000 22500.0000
+1405 36750.0000 22516.6667
+1406 36750.0000 22533.3333
+1407 36750.0000 22566.6667
+1408 36750.0000 22800.0000
+1409 36750.0000 22933.3333
+1410 36750.0000 22966.6667
+1411 36750.0000 23000.0000
+1412 36750.0000 23016.6667
+1413 36750.0000 23066.6667
+1414 36750.0000 24416.6667
+1415 36750.0000 24433.3333
+1416 36750.0000 24533.3333
+1417 36766.6667 21900.0000
+1418 36766.6667 22316.6667
+1419 36766.6667 22416.6667
+1420 36766.6667 22433.3333
+1421 36766.6667 22466.6667
+1422 36766.6667 22500.0000
+1423 36766.6667 22933.3333
+1424 36766.6667 23083.3333
+1425 36766.6667 24516.6667
+1426 36766.6667 27083.3333
+1427 36783.3333 21883.3333
+1428 36783.3333 21916.6667
+1429 36783.3333 22333.3333
+1430 36783.3333 22416.6667
+1431 36783.3333 22450.0000
+1432 36783.3333 22466.6667
+1433 36783.3333 22483.3333
+1434 36783.3333 22516.6667
+1435 36783.3333 22533.3333
+1436 36783.3333 22550.0000
+1437 36783.3333 22900.0000
+1438 36783.3333 23050.0000
+1439 36783.3333 23083.3333
+1440 36783.3333 25800.0000
+1441 36783.3333 27150.0000
+1442 36800.0000 21766.6667
+1443 36800.0000 21800.0000
+1444 36800.0000 21833.3333
+1445 36800.0000 21866.6667
+1446 36800.0000 21916.6667
+1447 36800.0000 21950.0000
+1448 36800.0000 22316.6667
+1449 36800.0000 22333.3333
+1450 36800.0000 22416.6667
+1451 36800.0000 22450.0000
+1452 36800.0000 22466.6667
+1453 36800.0000 22483.3333
+1454 36800.0000 22500.0000
+1455 36800.0000 22516.6667
+1456 36800.0000 22533.3333
+1457 36800.0000 22783.3333
+1458 36800.0000 22850.0000
+1459 36800.0000 22916.6667
+1460 36800.0000 23050.0000
+1461 36800.0000 24583.3333
+1462 36800.0000 25783.3333
+1463 36800.0000 25816.6667
+1464 36800.0000 27116.6667
+1465 36816.6667 21700.0000
+1466 36816.6667 21750.0000
+1467 36816.6667 21800.0000
+1468 36816.6667 21833.3333
+1469 36816.6667 21850.0000
+1470 36816.6667 21883.3333
+1471 36816.6667 21900.0000
+1472 36816.6667 21916.6667
+1473 36816.6667 21933.3333
+1474 36816.6667 22283.3333
+1475 36816.6667 22300.0000
+1476 36816.6667 22316.6667
+1477 36816.6667 22416.6667
+1478 36816.6667 22433.3333
+1479 36816.6667 22450.0000
+1480 36816.6667 22550.0000
+1481 36816.6667 23033.3333
+1482 36816.6667 26966.6667
+1483 36833.3333 21766.6667
+1484 36833.3333 21800.0000
+1485 36833.3333 21833.3333
+1486 36833.3333 21866.6667
+1487 36833.3333 21883.3333
+1488 36833.3333 21916.6667
+1489 36833.3333 22300.0000
+1490 36833.3333 22316.6667
+1491 36833.3333 22333.3333
+1492 36833.3333 22350.0000
+1493 36833.3333 22400.0000
+1494 36833.3333 22433.3333
+1495 36833.3333 22483.3333
+1496 36833.3333 22550.0000
+1497 36833.3333 22583.3333
+1498 36833.3333 22616.6667
+1499 36833.3333 22683.3333
+1500 36833.3333 22700.0000
+1501 36833.3333 22733.3333
+1502 36833.3333 22783.3333
+1503 36833.3333 22800.0000
+1504 36833.3333 22850.0000
+1505 36833.3333 23000.0000
+1506 36833.3333 25450.0000
+1507 36833.3333 25866.6667
+1508 36833.3333 25900.0000
+1509 36850.0000 21733.3333
+1510 36850.0000 21750.0000
+1511 36850.0000 21766.6667
+1512 36850.0000 21816.6667
+1513 36850.0000 21833.3333
+1514 36850.0000 21866.6667
+1515 36850.0000 21916.6667
+1516 36850.0000 22266.6667
+1517 36850.0000 22283.3333
+1518 36850.0000 22316.6667
+1519 36850.0000 22350.0000
+1520 36850.0000 22416.6667
+1521 36850.0000 22450.0000
+1522 36850.0000 22466.6667
+1523 36850.0000 22500.0000
+1524 36850.0000 22600.0000
+1525 36850.0000 22666.6667
+1526 36850.0000 22683.3333
+1527 36850.0000 22733.3333
+1528 36850.0000 23000.0000
+1529 36850.0000 27083.3333
+1530 36850.0000 27166.6667
+1531 36850.0000 27216.6667
+1532 36866.6667 21700.0000
+1533 36866.6667 21716.6667
+1534 36866.6667 21750.0000
+1535 36866.6667 21766.6667
+1536 36866.6667 21783.3333
+1537 36866.6667 21816.6667
+1538 36866.6667 21833.3333
+1539 36866.6667 21866.6667
+1540 36866.6667 21900.0000
+1541 36866.6667 22316.6667
+1542 36866.6667 22466.6667
+1543 36866.6667 22500.0000
+1544 36866.6667 22683.3333
+1545 36866.6667 22700.0000
+1546 36866.6667 22900.0000
+1547 36866.6667 23016.6667
+1548 36866.6667 25466.6667
+1549 36866.6667 25516.6667
+1550 36883.3333 21716.6667
+1551 36883.3333 21866.6667
+1552 36883.3333 21900.0000
+1553 36883.3333 22233.3333
+1554 36883.3333 22250.0000
+1555 36883.3333 22283.3333
+1556 36883.3333 22400.0000
+1557 36883.3333 22416.6667
+1558 36883.3333 22483.3333
+1559 36883.3333 22516.6667
+1560 36883.3333 22550.0000
+1561 36883.3333 22566.6667
+1562 36883.3333 22666.6667
+1563 36883.3333 22700.0000
+1564 36883.3333 22800.0000
+1565 36883.3333 22983.3333
+1566 36883.3333 25516.6667
+1567 36883.3333 27150.0000
+1568 36883.3333 27283.3333
+1569 36883.3333 27300.0000
+1570 36900.0000 21750.0000
+1571 36900.0000 21766.6667
+1572 36900.0000 21816.6667
+1573 36900.0000 21850.0000
+1574 36900.0000 21866.6667
+1575 36900.0000 21900.0000
+1576 36900.0000 21916.6667
+1577 36900.0000 22250.0000
+1578 36900.0000 22266.6667
+1579 36900.0000 22450.0000
+1580 36900.0000 22650.0000
+1581 36900.0000 22716.6667
+1582 36900.0000 22850.0000
+1583 36900.0000 22966.6667
+1584 36900.0000 23000.0000
+1585 36900.0000 25566.6667
+1586 36900.0000 25983.3333
+1587 36900.0000 26000.0000
+1588 36916.6667 21700.0000
+1589 36916.6667 21833.3333
+1590 36916.6667 21850.0000
+1591 36916.6667 21866.6667
+1592 36916.6667 21900.0000
+1593 36916.6667 21916.6667
+1594 36916.6667 22150.0000
+1595 36916.6667 22233.3333
+1596 36916.6667 22250.0000
+1597 36916.6667 22266.6667
+1598 36916.6667 22433.3333
+1599 36916.6667 22450.0000
+1600 36916.6667 22750.0000
+1601 36916.6667 23000.0000
+1602 36916.6667 25983.3333
+1603 36933.3333 21833.3333
+1604 36933.3333 21883.3333
+1605 36933.3333 22150.0000
+1606 36933.3333 22166.6667
+1607 36933.3333 22183.3333
+1608 36933.3333 22200.0000
+1609 36933.3333 22466.6667
+1610 36933.3333 22483.3333
+1611 36933.3333 22533.3333
+1612 36933.3333 22816.6667
+1613 36933.3333 24683.3333
+1614 36933.3333 24733.3333
+1615 36933.3333 27150.0000
+1616 36950.0000 21700.0000
+1617 36950.0000 21733.3333
+1618 36950.0000 21750.0000
+1619 36950.0000 21783.3333
+1620 36950.0000 21816.6667
+1621 36950.0000 21850.0000
+1622 36950.0000 21866.6667
+1623 36950.0000 21883.3333
+1624 36950.0000 21933.3333
+1625 36950.0000 22166.6667
+1626 36950.0000 22183.3333
+1627 36950.0000 22216.6667
+1628 36950.0000 22233.3333
+1629 36950.0000 22250.0000
+1630 36950.0000 22416.6667
+1631 36950.0000 22450.0000
+1632 36950.0000 22466.6667
+1633 36950.0000 22766.6667
+1634 36950.0000 24750.0000
+1635 36950.0000 26983.3333
+1636 36966.6667 21700.0000
+1637 36966.6667 21733.3333
+1638 36966.6667 21750.0000
+1639 36966.6667 21816.6667
+1640 36966.6667 21850.0000
+1641 36966.6667 21866.6667
+1642 36966.6667 21900.0000
+1643 36966.6667 22150.0000
+1644 36966.6667 22166.6667
+1645 36966.6667 22200.0000
+1646 36966.6667 22233.3333
+1647 36966.6667 22400.0000
+1648 36966.6667 22416.6667
+1649 36966.6667 22450.0000
+1650 36966.6667 22466.6667
+1651 36966.6667 22650.0000
+1652 36966.6667 22983.3333
+1653 36966.6667 24716.6667
+1654 36966.6667 24733.3333
+1655 36966.6667 24750.0000
+1656 36966.6667 26966.6667
+1657 36966.6667 27016.6667
+1658 36983.3333 21666.6667
+1659 36983.3333 21716.6667
+1660 36983.3333 21766.6667
+1661 36983.3333 21783.3333
+1662 36983.3333 21800.0000
+1663 36983.3333 21833.3333
+1664 36983.3333 21850.0000
+1665 36983.3333 21883.3333
+1666 36983.3333 22150.0000
+1667 36983.3333 22183.3333
+1668 36983.3333 22316.6667
+1669 36983.3333 22400.0000
+1670 36983.3333 22433.3333
+1671 36983.3333 22466.6667
+1672 36983.3333 22500.0000
+1673 36983.3333 22516.6667
+1674 36983.3333 22533.3333
+1675 36983.3333 22566.6667
+1676 36983.3333 22850.0000
+1677 36983.3333 22883.3333
+1678 36983.3333 22983.3333
+1679 36983.3333 24683.3333
+1680 36983.3333 24716.6667
+1681 36983.3333 24733.3333
+1682 36983.3333 25066.6667
+1683 36983.3333 26933.3333
+1684 36983.3333 26950.0000
+1685 36983.3333 27000.0000
+1686 37000.0000 21666.6667
+1687 37000.0000 21683.3333
+1688 37000.0000 21716.6667
+1689 37000.0000 21750.0000
+1690 37000.0000 21850.0000
+1691 37000.0000 21883.3333
+1692 37000.0000 21916.6667
+1693 37000.0000 21933.3333
+1694 37000.0000 22150.0000
+1695 37000.0000 22166.6667
+1696 37000.0000 22183.3333
+1697 37000.0000 22250.0000
+1698 37000.0000 22300.0000
+1699 37000.0000 22383.3333
+1700 37000.0000 22500.0000
+1701 37000.0000 22700.0000
+1702 37000.0000 25166.6667
+1703 37016.6667 21633.3333
+1704 37016.6667 21733.3333
+1705 37016.6667 21750.0000
+1706 37016.6667 21800.0000
+1707 37016.6667 21833.3333
+1708 37016.6667 21883.3333
+1709 37016.6667 21900.0000
+1710 37016.6667 21933.3333
+1711 37016.6667 21950.0000
+1712 37016.6667 21966.6667
+1713 37016.6667 22266.6667
+1714 37016.6667 22416.6667
+1715 37016.6667 22450.0000
+1716 37016.6667 22466.6667
+1717 37016.6667 22483.3333
+1718 37016.6667 22783.3333
+1719 37016.6667 25183.3333
+1720 37016.6667 26983.3333
+1721 37033.3333 21783.3333
+1722 37033.3333 21800.0000
+1723 37033.3333 21866.6667
+1724 37033.3333 21883.3333
+1725 37033.3333 21916.6667
+1726 37033.3333 21933.3333
+1727 37033.3333 21966.6667
+1728 37033.3333 22083.3333
+1729 37033.3333 22116.6667
+1730 37033.3333 22133.3333
+1731 37033.3333 22183.3333
+1732 37033.3333 22216.6667
+1733 37033.3333 22233.3333
+1734 37033.3333 22366.6667
+1735 37033.3333 22416.6667
+1736 37033.3333 22433.3333
+1737 37033.3333 22450.0000
+1738 37033.3333 22466.6667
+1739 37033.3333 22483.3333
+1740 37033.3333 22516.6667
+1741 37033.3333 22566.6667
+1742 37033.3333 22616.6667
+1743 37033.3333 22833.3333
+1744 37033.3333 22983.3333
+1745 37033.3333 25083.3333
+1746 37033.3333 25433.3333
+1747 37033.3333 26966.6667
+1748 37050.0000 21600.0000
+1749 37050.0000 21666.6667
+1750 37050.0000 21700.0000
+1751 37050.0000 21716.6667
+1752 37050.0000 21766.6667
+1753 37050.0000 21800.0000
+1754 37050.0000 21816.6667
+1755 37050.0000 21850.0000
+1756 37050.0000 21883.3333
+1757 37050.0000 21933.3333
+1758 37050.0000 21950.0000
+1759 37050.0000 22016.6667
+1760 37050.0000 22083.3333
+1761 37050.0000 22100.0000
+1762 37050.0000 22166.6667
+1763 37050.0000 22183.3333
+1764 37050.0000 22366.6667
+1765 37050.0000 22400.0000
+1766 37050.0000 22416.6667
+1767 37050.0000 22433.3333
+1768 37050.0000 22450.0000
+1769 37050.0000 22783.3333
+1770 37050.0000 22900.0000
+1771 37050.0000 25133.3333
+1772 37050.0000 25200.0000
+1773 37050.0000 25233.3333
+1774 37050.0000 25250.0000
+1775 37050.0000 25400.0000
+1776 37050.0000 25483.3333
+1777 37050.0000 25500.0000
+1778 37050.0000 25533.3333
+1779 37050.0000 26933.3333
+1780 37066.6667 21583.3333
+1781 37066.6667 21600.0000
+1782 37066.6667 21633.3333
+1783 37066.6667 21700.0000
+1784 37066.6667 21750.0000
+1785 37066.6667 21783.3333
+1786 37066.6667 21816.6667
+1787 37066.6667 21883.3333
+1788 37066.6667 21933.3333
+1789 37066.6667 21966.6667
+1790 37066.6667 21983.3333
+1791 37066.6667 22000.0000
+1792 37066.6667 22066.6667
+1793 37066.6667 22083.3333
+1794 37066.6667 22100.0000
+1795 37066.6667 22166.6667
+1796 37066.6667 22216.6667
+1797 37066.6667 22350.0000
+1798 37066.6667 22366.6667
+1799 37066.6667 22383.3333
+1800 37066.6667 22416.6667
+1801 37066.6667 22433.3333
+1802 37066.6667 22450.0000
+1803 37066.6667 22583.3333
+1804 37066.6667 22783.3333
+1805 37066.6667 22800.0000
+1806 37066.6667 22816.6667
+1807 37066.6667 22850.0000
+1808 37066.6667 22916.6667
+1809 37066.6667 22933.3333
+1810 37066.6667 25116.6667
+1811 37066.6667 25133.3333
+1812 37066.6667 25400.0000
+1813 37066.6667 25433.3333
+1814 37066.6667 25450.0000
+1815 37066.6667 25466.6667
+1816 37066.6667 25483.3333
+1817 37066.6667 25500.0000
+1818 37066.6667 25516.6667
+1819 37083.3333 21666.6667
+1820 37083.3333 21766.6667
+1821 37083.3333 21783.3333
+1822 37083.3333 21800.0000
+1823 37083.3333 21833.3333
+1824 37083.3333 21866.6667
+1825 37083.3333 21900.0000
+1826 37083.3333 21916.6667
+1827 37083.3333 21933.3333
+1828 37083.3333 21950.0000
+1829 37083.3333 21966.6667
+1830 37083.3333 21983.3333
+1831 37083.3333 22000.0000
+1832 37083.3333 22033.3333
+1833 37083.3333 22050.0000
+1834 37083.3333 22100.0000
+1835 37083.3333 22216.6667
+1836 37083.3333 22350.0000
+1837 37083.3333 22366.6667
+1838 37083.3333 22416.6667
+1839 37083.3333 22433.3333
+1840 37083.3333 22566.6667
+1841 37083.3333 22650.0000
+1842 37083.3333 22800.0000
+1843 37083.3333 22833.3333
+1844 37083.3333 22900.0000
+1845 37083.3333 25150.0000
+1846 37083.3333 25166.6667
+1847 37083.3333 25200.0000
+1848 37083.3333 25216.6667
+1849 37083.3333 25416.6667
+1850 37083.3333 25500.0000
+1851 37083.3333 25533.3333
+1852 37083.3333 25583.3333
+1853 37100.0000 21633.3333
+1854 37100.0000 21716.6667
+1855 37100.0000 21750.0000
+1856 37100.0000 21766.6667
+1857 37100.0000 21816.6667
+1858 37100.0000 21833.3333
+1859 37100.0000 21850.0000
+1860 37100.0000 21966.6667
+1861 37100.0000 21983.3333
+1862 37100.0000 22000.0000
+1863 37100.0000 22033.3333
+1864 37100.0000 22050.0000
+1865 37100.0000 22066.6667
+1866 37100.0000 22233.3333
+1867 37100.0000 22250.0000
+1868 37100.0000 22366.6667
+1869 37100.0000 22433.3333
+1870 37100.0000 22450.0000
+1871 37100.0000 22533.3333
+1872 37100.0000 22733.3333
+1873 37100.0000 22800.0000
+1874 37100.0000 22866.6667
+1875 37100.0000 22883.3333
+1876 37100.0000 25383.3333
+1877 37100.0000 25400.0000
+1878 37100.0000 25433.3333
+1879 37100.0000 25483.3333
+1880 37100.0000 26866.6667
+1881 37116.6667 21583.3333
+1882 37116.6667 21733.3333
+1883 37116.6667 21766.6667
+1884 37116.6667 21800.0000
+1885 37116.6667 21833.3333
+1886 37116.6667 21933.3333
+1887 37116.6667 21966.6667
+1888 37116.6667 22033.3333
+1889 37116.6667 22066.6667
+1890 37116.6667 22250.0000
+1891 37116.6667 22333.3333
+1892 37116.6667 22350.0000
+1893 37116.6667 22383.3333
+1894 37116.6667 22866.6667
+1895 37116.6667 25233.3333
+1896 37116.6667 25416.6667
+1897 37116.6667 25433.3333
+1898 37116.6667 25516.6667
+1899 37116.6667 25533.3333
+1900 37116.6667 25816.6667
+1901 37116.6667 26866.6667
+1902 37133.3333 21683.3333
+1903 37133.3333 21750.0000
+1904 37133.3333 21766.6667
+1905 37133.3333 21816.6667
+1906 37133.3333 21866.6667
+1907 37133.3333 21883.3333
+1908 37133.3333 21916.6667
+1909 37133.3333 21966.6667
+1910 37133.3333 21983.3333
+1911 37133.3333 22000.0000
+1912 37133.3333 22016.6667
+1913 37133.3333 22033.3333
+1914 37133.3333 22066.6667
+1915 37133.3333 22333.3333
+1916 37133.3333 22450.0000
+1917 37133.3333 22583.3333
+1918 37133.3333 24450.0000
+1919 37133.3333 24466.6667
+1920 37133.3333 24500.0000
+1921 37133.3333 24516.6667
+1922 37133.3333 26850.0000
+1923 37150.0000 21583.3333
+1924 37150.0000 21766.6667
+1925 37150.0000 21783.3333
+1926 37150.0000 21800.0000
+1927 37150.0000 21833.3333
+1928 37150.0000 21850.0000
+1929 37150.0000 21883.3333
+1930 37150.0000 21966.6667
+1931 37150.0000 22033.3333
+1932 37150.0000 22050.0000
+1933 37150.0000 22083.3333
+1934 37150.0000 22233.3333
+1935 37150.0000 22433.3333
+1936 37150.0000 22900.0000
+1937 37150.0000 24433.3333
+1938 37150.0000 24450.0000
+1939 37150.0000 24500.0000
+1940 37150.0000 24516.6667
+1941 37150.0000 25466.6667
+1942 37150.0000 25533.3333
+1943 37150.0000 25550.0000
+1944 37150.0000 26866.6667
+1945 37166.6667 21616.6667
+1946 37166.6667 21666.6667
+1947 37166.6667 21700.0000
+1948 37166.6667 21716.6667
+1949 37166.6667 21750.0000
+1950 37166.6667 21783.3333
+1951 37166.6667 21833.3333
+1952 37166.6667 21883.3333
+1953 37166.6667 21916.6667
+1954 37166.6667 21983.3333
+1955 37166.6667 22033.3333
+1956 37166.6667 22066.6667
+1957 37166.6667 22083.3333
+1958 37166.6667 22133.3333
+1959 37166.6667 22316.6667
+1960 37166.6667 22416.6667
+1961 37166.6667 22450.0000
+1962 37166.6667 22500.0000
+1963 37166.6667 22666.6667
+1964 37166.6667 22716.6667
+1965 37166.6667 22866.6667
+1966 37166.6667 22900.0000
+1967 37166.6667 24433.3333
+1968 37166.6667 24450.0000
+1969 37166.6667 24483.3333
+1970 37166.6667 26800.0000
+1971 37166.6667 26833.3333
+1972 37183.3333 21600.0000
+1973 37183.3333 21616.6667
+1974 37183.3333 21683.3333
+1975 37183.3333 21750.0000
+1976 37183.3333 21766.6667
+1977 37183.3333 21816.6667
+1978 37183.3333 21850.0000
+1979 37183.3333 21933.3333
+1980 37183.3333 22050.0000
+1981 37183.3333 22183.3333
+1982 37183.3333 22200.0000
+1983 37183.3333 22233.3333
+1984 37183.3333 22300.0000
+1985 37183.3333 22316.6667
+1986 37183.3333 22550.0000
+1987 37183.3333 22600.0000
+1988 37183.3333 22683.3333
+1989 37183.3333 22900.0000
+1990 37183.3333 24483.3333
+1991 37183.3333 24516.6667
+1992 37183.3333 25550.0000
+1993 37200.0000 21616.6667
+1994 37200.0000 21783.3333
+1995 37200.0000 21800.0000
+1996 37200.0000 21883.3333
+1997 37200.0000 21933.3333
+1998 37200.0000 21966.6667
+1999 37200.0000 22000.0000
+2000 37200.0000 22016.6667
+2001 37200.0000 22050.0000
+2002 37200.0000 22083.3333
+2003 37200.0000 22166.6667
+2004 37200.0000 22266.6667
+2005 37200.0000 22283.3333
+2006 37200.0000 22316.6667
+2007 37200.0000 22350.0000
+2008 37200.0000 22366.6667
+2009 37200.0000 22400.0000
+2010 37200.0000 22783.3333
+2011 37200.0000 22883.3333
+2012 37200.0000 24500.0000
+2013 37216.6667 21600.0000
+2014 37216.6667 21633.3333
+2015 37216.6667 21650.0000
+2016 37216.6667 21666.6667
+2017 37216.6667 21683.3333
+2018 37216.6667 21716.6667
+2019 37216.6667 21733.3333
+2020 37216.6667 21750.0000
+2021 37216.6667 21850.0000
+2022 37216.6667 21950.0000
+2023 37216.6667 21966.6667
+2024 37216.6667 22033.3333
+2025 37216.6667 22283.3333
+2026 37216.6667 22300.0000
+2027 37216.6667 22883.3333
+2028 37233.3333 21650.0000
+2029 37233.3333 21666.6667
+2030 37233.3333 21800.0000
+2031 37233.3333 21816.6667
+2032 37233.3333 21850.0000
+2033 37233.3333 21866.6667
+2034 37233.3333 21900.0000
+2035 37233.3333 21933.3333
+2036 37233.3333 21966.6667
+2037 37233.3333 21983.3333
+2038 37233.3333 22016.6667
+2039 37233.3333 22033.3333
+2040 37233.3333 22133.3333
+2041 37233.3333 22166.6667
+2042 37233.3333 22183.3333
+2043 37233.3333 22200.0000
+2044 37233.3333 22250.0000
+2045 37233.3333 22266.6667
+2046 37233.3333 22283.3333
+2047 37233.3333 22500.0000
+2048 37233.3333 22533.3333
+2049 37233.3333 22850.0000
+2050 37250.0000 21666.6667
+2051 37250.0000 21683.3333
+2052 37250.0000 21700.0000
+2053 37250.0000 21716.6667
+2054 37250.0000 21733.3333
+2055 37250.0000 21783.3333
+2056 37250.0000 21816.6667
+2057 37250.0000 21833.3333
+2058 37250.0000 21966.6667
+2059 37250.0000 21983.3333
+2060 37250.0000 22000.0000
+2061 37250.0000 22016.6667
+2062 37250.0000 22116.6667
+2063 37250.0000 22183.3333
+2064 37250.0000 22333.3333
+2065 37250.0000 22550.0000
+2066 37250.0000 22833.3333
+2067 37250.0000 22866.6667
+2068 37250.0000 23150.0000
+2069 37266.6667 21750.0000
+2070 37266.6667 21766.6667
+2071 37266.6667 21866.6667
+2072 37266.6667 21900.0000
+2073 37266.6667 21933.3333
+2074 37266.6667 21950.0000
+2075 37266.6667 21966.6667
+2076 37266.6667 21983.3333
+2077 37266.6667 22000.0000
+2078 37266.6667 22016.6667
+2079 37266.6667 22166.6667
+2080 37266.6667 22250.0000
+2081 37266.6667 22316.6667
+2082 37266.6667 22533.3333
+2083 37266.6667 22650.0000
+2084 37266.6667 22683.3333
+2085 37266.6667 23150.0000
+2086 37283.3333 21700.0000
+2087 37283.3333 21716.6667
+2088 37283.3333 21816.6667
+2089 37283.3333 21850.0000
+2090 37283.3333 21900.0000
+2091 37283.3333 21916.6667
+2092 37283.3333 21933.3333
+2093 37283.3333 21966.6667
+2094 37283.3333 22050.0000
+2095 37283.3333 22066.6667
+2096 37283.3333 22150.0000
+2097 37283.3333 22166.6667
+2098 37283.3333 22200.0000
+2099 37283.3333 22350.0000
+2100 37283.3333 22366.6667
+2101 37283.3333 22650.0000
+2102 37283.3333 26766.6667
+2103 37300.0000 21716.6667
+2104 37300.0000 21750.0000
+2105 37300.0000 21766.6667
+2106 37300.0000 21783.3333
+2107 37300.0000 21816.6667
+2108 37300.0000 21833.3333
+2109 37300.0000 21850.0000
+2110 37300.0000 21883.3333
+2111 37300.0000 21916.6667
+2112 37300.0000 21950.0000
+2113 37300.0000 21966.6667
+2114 37300.0000 21983.3333
+2115 37300.0000 22000.0000
+2116 37300.0000 22050.0000
+2117 37300.0000 22116.6667
+2118 37300.0000 22150.0000
+2119 37300.0000 22250.0000
+2120 37300.0000 22500.0000
+2121 37300.0000 22766.6667
+2122 37300.0000 23183.3333
+2123 37300.0000 26516.6667
+2124 37316.6667 21733.3333
+2125 37316.6667 21816.6667
+2126 37316.6667 21833.3333
+2127 37316.6667 21850.0000
+2128 37316.6667 21866.6667
+2129 37316.6667 21883.3333
+2130 37316.6667 21916.6667
+2131 37316.6667 21933.3333
+2132 37316.6667 21950.0000
+2133 37316.6667 22000.0000
+2134 37316.6667 22066.6667
+2135 37316.6667 22083.3333
+2136 37316.6667 22133.3333
+2137 37316.6667 22150.0000
+2138 37316.6667 22183.3333
+2139 37316.6667 22233.3333
+2140 37316.6667 22283.3333
+2141 37316.6667 22316.6667
+2142 37316.6667 22650.0000
+2143 37316.6667 23150.0000
+2144 37316.6667 23166.6667
+2145 37316.6667 23416.6667
+2146 37316.6667 26533.3333
+2147 37333.3333 21766.6667
+2148 37333.3333 21833.3333
+2149 37333.3333 21866.6667
+2150 37333.3333 21883.3333
+2151 37333.3333 21900.0000
+2152 37333.3333 21933.3333
+2153 37333.3333 21950.0000
+2154 37333.3333 21966.6667
+2155 37333.3333 22033.3333
+2156 37333.3333 22116.6667
+2157 37333.3333 22133.3333
+2158 37333.3333 22200.0000
+2159 37333.3333 22233.3333
+2160 37333.3333 22300.0000
+2161 37333.3333 22316.6667
+2162 37333.3333 22500.0000
+2163 37333.3333 22550.0000
+2164 37333.3333 22683.3333
+2165 37333.3333 22700.0000
+2166 37333.3333 22750.0000
+2167 37333.3333 23150.0000
+2168 37333.3333 23500.0000
+2169 37350.0000 21700.0000
+2170 37350.0000 21733.3333
+2171 37350.0000 21750.0000
+2172 37350.0000 21850.0000
+2173 37350.0000 21866.6667
+2174 37350.0000 21916.6667
+2175 37350.0000 21933.3333
+2176 37350.0000 21950.0000
+2177 37350.0000 21966.6667
+2178 37350.0000 22066.6667
+2179 37350.0000 22150.0000
+2180 37350.0000 22183.3333
+2181 37350.0000 22400.0000
+2182 37350.0000 22433.3333
+2183 37350.0000 22550.0000
+2184 37350.0000 22583.3333
+2185 37350.0000 22600.0000
+2186 37350.0000 22666.6667
+2187 37350.0000 22733.3333
+2188 37350.0000 22766.6667
+2189 37350.0000 23316.6667
+2190 37350.0000 23350.0000
+2191 37350.0000 23450.0000
+2192 37350.0000 23466.6667
+2193 37350.0000 26566.6667
+2194 37366.6667 21700.0000
+2195 37366.6667 21750.0000
+2196 37366.6667 21816.6667
+2197 37366.6667 21900.0000
+2198 37366.6667 21983.3333
+2199 37366.6667 22016.6667
+2200 37366.6667 22050.0000
+2201 37366.6667 22100.0000
+2202 37366.6667 22133.3333
+2203 37366.6667 22150.0000
+2204 37366.6667 22216.6667
+2205 37366.6667 22266.6667
+2206 37366.6667 22283.3333
+2207 37366.6667 22300.0000
+2208 37366.6667 22333.3333
+2209 37366.6667 22383.3333
+2210 37366.6667 22400.0000
+2211 37366.6667 22466.6667
+2212 37366.6667 22500.0000
+2213 37366.6667 22533.3333
+2214 37366.6667 22550.0000
+2215 37366.6667 22633.3333
+2216 37366.6667 22716.6667
+2217 37366.6667 22750.0000
+2218 37366.6667 23216.6667
+2219 37366.6667 24883.3333
+2220 37383.3333 21750.0000
+2221 37383.3333 21766.6667
+2222 37383.3333 21816.6667
+2223 37383.3333 21833.3333
+2224 37383.3333 21850.0000
+2225 37383.3333 21883.3333
+2226 37383.3333 21916.6667
+2227 37383.3333 22033.3333
+2228 37383.3333 22083.3333
+2229 37383.3333 22116.6667
+2230 37383.3333 22133.3333
+2231 37383.3333 22166.6667
+2232 37383.3333 22200.0000
+2233 37383.3333 22233.3333
+2234 37383.3333 22300.0000
+2235 37383.3333 22450.0000
+2236 37383.3333 22500.0000
+2237 37383.3333 22566.6667
+2238 37383.3333 22650.0000
+2239 37383.3333 22683.3333
+2240 37383.3333 22733.3333
+2241 37383.3333 23150.0000
+2242 37383.3333 23250.0000
+2243 37383.3333 24400.0000
+2244 37383.3333 24433.3333
+2245 37383.3333 24883.3333
+2246 37383.3333 24900.0000
+2247 37383.3333 24916.6667
+2248 37400.0000 21683.3333
+2249 37400.0000 21716.6667
+2250 37400.0000 21733.3333
+2251 37400.0000 21816.6667
+2252 37400.0000 21850.0000
+2253 37400.0000 21883.3333
+2254 37400.0000 21916.6667
+2255 37400.0000 21933.3333
+2256 37400.0000 22016.6667
+2257 37400.0000 22100.0000
+2258 37400.0000 22133.3333
+2259 37400.0000 22183.3333
+2260 37400.0000 22216.6667
+2261 37400.0000 22250.0000
+2262 37400.0000 22316.6667
+2263 37400.0000 22600.0000
+2264 37400.0000 22616.6667
+2265 37400.0000 22650.0000
+2266 37400.0000 22716.6667
+2267 37400.0000 22733.3333
+2268 37400.0000 23233.3333
+2269 37400.0000 24400.0000
+2270 37400.0000 24450.0000
+2271 37400.0000 24883.3333
+2272 37400.0000 24900.0000
+2273 37400.0000 24916.6667
+2274 37400.0000 24933.3333
+2275 37400.0000 24950.0000
+2276 37400.0000 25266.6667
+2277 37416.6667 21666.6667
+2278 37416.6667 21700.0000
+2279 37416.6667 21850.0000
+2280 37416.6667 21866.6667
+2281 37416.6667 21950.0000
+2282 37416.6667 21966.6667
+2283 37416.6667 22000.0000
+2284 37416.6667 22033.3333
+2285 37416.6667 22050.0000
+2286 37416.6667 22083.3333
+2287 37416.6667 22100.0000
+2288 37416.6667 22116.6667
+2289 37416.6667 22166.6667
+2290 37416.6667 22233.3333
+2291 37416.6667 22266.6667
+2292 37416.6667 22366.6667
+2293 37416.6667 22400.0000
+2294 37416.6667 22466.6667
+2295 37416.6667 22566.6667
+2296 37416.6667 22583.3333
+2297 37416.6667 22600.0000
+2298 37416.6667 22766.6667
+2299 37416.6667 23133.3333
+2300 37416.6667 23150.0000
+2301 37416.6667 23316.6667
+2302 37416.6667 23350.0000
+2303 37416.6667 23383.3333
+2304 37416.6667 23400.0000
+2305 37416.6667 23466.6667
+2306 37416.6667 24433.3333
+2307 37416.6667 24883.3333
+2308 37416.6667 24900.0000
+2309 37416.6667 24916.6667
+2310 37416.6667 24933.3333
+2311 37416.6667 24950.0000
+2312 37416.6667 24966.6667
+2313 37433.3333 21666.6667
+2314 37433.3333 21716.6667
+2315 37433.3333 21733.3333
+2316 37433.3333 21766.6667
+2317 37433.3333 21833.3333
+2318 37433.3333 21950.0000
+2319 37433.3333 22000.0000
+2320 37433.3333 22050.0000
+2321 37433.3333 22116.6667
+2322 37433.3333 22300.0000
+2323 37433.3333 22416.6667
+2324 37433.3333 22533.3333
+2325 37433.3333 22616.6667
+2326 37433.3333 22633.3333
+2327 37433.3333 22650.0000
+2328 37433.3333 22683.3333
+2329 37433.3333 22733.3333
+2330 37433.3333 23183.3333
+2331 37433.3333 23300.0000
+2332 37433.3333 23400.0000
+2333 37433.3333 23466.6667
+2334 37433.3333 24900.0000
+2335 37433.3333 24916.6667
+2336 37433.3333 24950.0000
+2337 37450.0000 21683.3333
+2338 37450.0000 21733.3333
+2339 37450.0000 21750.0000
+2340 37450.0000 21866.6667
+2341 37450.0000 21916.6667
+2342 37450.0000 21950.0000
+2343 37450.0000 22033.3333
+2344 37450.0000 22066.6667
+2345 37450.0000 22100.0000
+2346 37450.0000 22116.6667
+2347 37450.0000 22150.0000
+2348 37450.0000 22166.6667
+2349 37450.0000 22250.0000
+2350 37450.0000 22366.6667
+2351 37450.0000 22400.0000
+2352 37450.0000 22416.6667
+2353 37450.0000 22433.3333
+2354 37450.0000 22450.0000
+2355 37450.0000 22466.6667
+2356 37450.0000 22566.6667
+2357 37450.0000 22583.3333
+2358 37450.0000 22616.6667
+2359 37450.0000 23233.3333
+2360 37450.0000 23266.6667
+2361 37450.0000 23283.3333
+2362 37450.0000 23483.3333
+2363 37450.0000 24416.6667
+2364 37450.0000 24900.0000
+2365 37450.0000 24933.3333
+2366 37450.0000 25333.3333
+2367 37450.0000 25400.0000
+2368 37466.6667 21650.0000
+2369 37466.6667 21700.0000
+2370 37466.6667 21800.0000
+2371 37466.6667 21966.6667
+2372 37466.6667 22000.0000
+2373 37466.6667 22083.3333
+2374 37466.6667 22116.6667
+2375 37466.6667 22166.6667
+2376 37466.6667 22200.0000
+2377 37466.6667 22333.3333
+2378 37466.6667 22366.6667
+2379 37466.6667 22383.3333
+2380 37466.6667 22400.0000
+2381 37466.6667 22416.6667
+2382 37466.6667 22433.3333
+2383 37466.6667 22450.0000
+2384 37466.6667 22516.6667
+2385 37466.6667 22616.6667
+2386 37466.6667 23166.6667
+2387 37466.6667 24916.6667
+2388 37466.6667 24933.3333
+2389 37483.3333 21650.0000
+2390 37483.3333 21683.3333
+2391 37483.3333 21716.6667
+2392 37483.3333 21733.3333
+2393 37483.3333 21816.6667
+2394 37483.3333 21833.3333
+2395 37483.3333 21900.0000
+2396 37483.3333 21933.3333
+2397 37483.3333 22016.6667
+2398 37483.3333 22033.3333
+2399 37483.3333 22083.3333
+2400 37483.3333 22116.6667
+2401 37483.3333 22133.3333
+2402 37483.3333 22150.0000
+2403 37483.3333 22283.3333
+2404 37483.3333 22366.6667
+2405 37483.3333 22416.6667
+2406 37483.3333 22433.3333
+2407 37483.3333 22466.6667
+2408 37483.3333 22733.3333
+2409 37483.3333 23000.0000
+2410 37483.3333 23016.6667
+2411 37483.3333 23266.6667
+2412 37483.3333 24916.6667
+2413 37483.3333 24933.3333
+2414 37500.0000 21650.0000
+2415 37500.0000 21700.0000
+2416 37500.0000 21766.6667
+2417 37500.0000 21800.0000
+2418 37500.0000 21850.0000
+2419 37500.0000 21866.6667
+2420 37500.0000 21916.6667
+2421 37500.0000 22100.0000
+2422 37500.0000 22116.6667
+2423 37500.0000 22166.6667
+2424 37500.0000 22450.0000
+2425 37500.0000 22466.6667
+2426 37500.0000 22483.3333
+2427 37500.0000 23016.6667
+2428 37500.0000 23033.3333
+2429 37500.0000 23050.0000
+2430 37500.0000 23066.6667
+2431 37500.0000 23183.3333
+2432 37500.0000 23366.6667
+2433 37500.0000 23383.3333
+2434 37500.0000 23450.0000
+2435 37516.6667 21600.0000
+2436 37516.6667 21650.0000
+2437 37516.6667 21733.3333
+2438 37516.6667 21750.0000
+2439 37516.6667 21766.6667
+2440 37516.6667 21883.3333
+2441 37516.6667 21950.0000
+2442 37516.6667 22066.6667
+2443 37516.6667 22116.6667
+2444 37516.6667 22233.3333
+2445 37516.6667 22300.0000
+2446 37516.6667 22316.6667
+2447 37516.6667 22366.6667
+2448 37516.6667 22383.3333
+2449 37516.6667 22416.6667
+2450 37516.6667 22433.3333
+2451 37516.6667 22450.0000
+2452 37516.6667 22583.3333
+2453 37516.6667 22700.0000
+2454 37516.6667 22733.3333
+2455 37516.6667 22850.0000
+2456 37516.6667 23083.3333
+2457 37516.6667 23100.0000
+2458 37516.6667 23116.6667
+2459 37516.6667 23200.0000
+2460 37516.6667 23283.3333
+2461 37516.6667 23300.0000
+2462 37516.6667 23366.6667
+2463 37516.6667 23383.3333
+2464 37516.6667 26016.6667
+2465 37533.3333 21700.0000
+2466 37533.3333 21733.3333
+2467 37533.3333 21750.0000
+2468 37533.3333 21800.0000
+2469 37533.3333 21816.6667
+2470 37533.3333 21850.0000
+2471 37533.3333 21916.6667
+2472 37533.3333 21950.0000
+2473 37533.3333 21983.3333
+2474 37533.3333 22016.6667
+2475 37533.3333 22266.6667
+2476 37533.3333 22283.3333
+2477 37533.3333 22316.6667
+2478 37533.3333 22350.0000
+2479 37533.3333 22416.6667
+2480 37533.3333 22433.3333
+2481 37533.3333 22700.0000
+2482 37533.3333 22716.6667
+2483 37533.3333 22883.3333
+2484 37533.3333 22916.6667
+2485 37533.3333 22966.6667
+2486 37533.3333 23083.3333
+2487 37533.3333 23133.3333
+2488 37533.3333 23150.0000
+2489 37533.3333 23183.3333
+2490 37533.3333 23200.0000
+2491 37533.3333 23233.3333
+2492 37533.3333 23283.3333
+2493 37533.3333 23350.0000
+2494 37533.3333 25166.6667
+2495 37533.3333 26000.0000
+2496 37550.0000 21600.0000
+2497 37550.0000 21683.3333
+2498 37550.0000 21783.3333
+2499 37550.0000 21816.6667
+2500 37550.0000 21866.6667
+2501 37550.0000 21916.6667
+2502 37550.0000 21933.3333
+2503 37550.0000 21983.3333
+2504 37550.0000 22083.3333
+2505 37550.0000 22216.6667
+2506 37550.0000 22283.3333
+2507 37550.0000 22366.6667
+2508 37550.0000 22416.6667
+2509 37550.0000 22716.6667
+2510 37550.0000 22850.0000
+2511 37550.0000 22866.6667
+2512 37550.0000 22883.3333
+2513 37550.0000 22916.6667
+2514 37550.0000 22983.3333
+2515 37550.0000 23116.6667
+2516 37550.0000 23166.6667
+2517 37550.0000 23200.0000
+2518 37550.0000 23366.6667
+2519 37550.0000 26000.0000
+2520 37550.0000 26016.6667
+2521 37566.6667 21583.3333
+2522 37566.6667 21633.3333
+2523 37566.6667 21700.0000
+2524 37566.6667 21750.0000
+2525 37566.6667 21783.3333
+2526 37566.6667 21950.0000
+2527 37566.6667 22033.3333
+2528 37566.6667 22383.3333
+2529 37566.6667 22466.6667
+2530 37566.6667 22683.3333
+2531 37566.6667 22800.0000
+2532 37566.6667 22833.3333
+2533 37566.6667 23066.6667
+2534 37566.6667 23150.0000
+2535 37566.6667 23250.0000
+2536 37566.6667 25150.0000
+2537 37566.6667 25166.6667
+2538 37566.6667 25183.3333
+2539 37566.6667 25200.0000
+2540 37566.6667 26000.0000
+2541 37566.6667 26116.6667
+2542 37583.3333 21566.6667
+2543 37583.3333 21616.6667
+2544 37583.3333 21666.6667
+2545 37583.3333 21733.3333
+2546 37583.3333 21816.6667
+2547 37583.3333 21866.6667
+2548 37583.3333 21916.6667
+2549 37583.3333 21950.0000
+2550 37583.3333 21983.3333
+2551 37583.3333 22016.6667
+2552 37583.3333 22083.3333
+2553 37583.3333 22233.3333
+2554 37583.3333 22283.3333
+2555 37583.3333 22366.6667
+2556 37583.3333 22533.3333
+2557 37583.3333 22566.6667
+2558 37583.3333 22750.0000
+2559 37583.3333 22883.3333
+2560 37583.3333 23166.6667
+2561 37583.3333 23233.3333
+2562 37583.3333 23383.3333
+2563 37583.3333 25150.0000
+2564 37583.3333 25166.6667
+2565 37583.3333 25183.3333
+2566 37583.3333 25200.0000
+2567 37583.3333 25216.6667
+2568 37583.3333 26016.6667
+2569 37583.3333 26233.3333
+2570 37600.0000 21550.0000
+2571 37600.0000 21583.3333
+2572 37600.0000 21683.3333
+2573 37600.0000 21750.0000
+2574 37600.0000 21800.0000
+2575 37600.0000 21816.6667
+2576 37600.0000 21866.6667
+2577 37600.0000 21883.3333
+2578 37600.0000 21900.0000
+2579 37600.0000 21916.6667
+2580 37600.0000 21950.0000
+2581 37600.0000 21983.3333
+2582 37600.0000 22033.3333
+2583 37600.0000 22050.0000
+2584 37600.0000 22400.0000
+2585 37600.0000 22516.6667
+2586 37600.0000 22683.3333
+2587 37600.0000 22800.0000
+2588 37600.0000 22816.6667
+2589 37600.0000 22833.3333
+2590 37600.0000 22950.0000
+2591 37600.0000 22966.6667
+2592 37600.0000 22983.3333
+2593 37600.0000 23050.0000
+2594 37600.0000 23333.3333
+2595 37600.0000 23350.0000
+2596 37600.0000 23366.6667
+2597 37600.0000 24283.3333
+2598 37600.0000 24300.0000
+2599 37600.0000 24333.3333
+2600 37600.0000 25083.3333
+2601 37600.0000 25133.3333
+2602 37600.0000 25150.0000
+2603 37600.0000 25166.6667
+2604 37600.0000 25183.3333
+2605 37600.0000 26250.0000
+2606 37616.6667 21516.6667
+2607 37616.6667 21600.0000
+2608 37616.6667 21633.3333
+2609 37616.6667 21650.0000
+2610 37616.6667 21700.0000
+2611 37616.6667 21716.6667
+2612 37616.6667 21766.6667
+2613 37616.6667 21800.0000
+2614 37616.6667 21833.3333
+2615 37616.6667 21866.6667
+2616 37616.6667 21900.0000
+2617 37616.6667 21916.6667
+2618 37616.6667 21933.3333
+2619 37616.6667 22100.0000
+2620 37616.6667 22216.6667
+2621 37616.6667 22333.3333
+2622 37616.6667 22433.3333
+2623 37616.6667 22466.6667
+2624 37616.6667 22550.0000
+2625 37616.6667 22600.0000
+2626 37616.6667 22666.6667
+2627 37616.6667 22766.6667
+2628 37616.6667 22800.0000
+2629 37616.6667 22850.0000
+2630 37616.6667 22983.3333
+2631 37616.6667 23000.0000
+2632 37616.6667 23033.3333
+2633 37616.6667 23333.3333
+2634 37616.6667 23350.0000
+2635 37616.6667 23400.0000
+2636 37616.6667 24283.3333
+2637 37616.6667 25050.0000
+2638 37616.6667 25116.6667
+2639 37616.6667 25133.3333
+2640 37616.6667 26183.3333
+2641 37628.6111 26791.3889
+2642 37633.3333 21500.0000
+2643 37633.3333 21683.3333
+2644 37633.3333 21750.0000
+2645 37633.3333 21833.3333
+2646 37633.3333 21850.0000
+2647 37633.3333 21866.6667
+2648 37633.3333 21883.3333
+2649 37633.3333 21900.0000
+2650 37633.3333 21933.3333
+2651 37633.3333 21950.0000
+2652 37633.3333 21983.3333
+2653 37633.3333 22083.3333
+2654 37633.3333 22150.0000
+2655 37633.3333 22166.6667
+2656 37633.3333 22300.0000
+2657 37633.3333 22533.3333
+2658 37633.3333 22683.3333
+2659 37633.3333 22733.3333
+2660 37633.3333 22766.6667
+2661 37633.3333 22783.3333
+2662 37633.3333 22800.0000
+2663 37633.3333 22816.6667
+2664 37633.3333 22933.3333
+2665 37633.3333 23066.6667
+2666 37633.3333 23083.3333
+2667 37633.3333 23116.6667
+2668 37633.3333 23150.0000
+2669 37633.3333 23366.6667
+2670 37633.3333 24316.6667
+2671 37633.3333 24350.0000
+2672 37633.3333 24383.3333
+2673 37633.3333 25033.3333
+2674 37633.3333 25050.0000
+2675 37633.3333 26083.3333
+2676 37650.0000 21316.6667
+2677 37650.0000 21433.3333
+2678 37650.0000 21500.0000
+2679 37650.0000 21533.3333
+2680 37650.0000 21616.6667
+2681 37650.0000 21633.3333
+2682 37650.0000 21650.0000
+2683 37650.0000 21683.3333
+2684 37650.0000 21700.0000
+2685 37650.0000 21733.3333
+2686 37650.0000 21750.0000
+2687 37650.0000 21850.0000
+2688 37650.0000 21900.0000
+2689 37650.0000 21933.3333
+2690 37650.0000 21950.0000
+2691 37650.0000 21983.3333
+2692 37650.0000 22333.3333
+2693 37650.0000 22416.6667
+2694 37650.0000 22766.6667
+2695 37650.0000 22800.0000
+2696 37650.0000 22816.6667
+2697 37650.0000 22833.3333
+2698 37650.0000 23066.6667
+2699 37650.0000 23083.3333
+2700 37650.0000 24100.0000
+2701 37650.0000 24300.0000
+2702 37650.0000 24383.3333
+2703 37650.0000 25016.6667
+2704 37658.8889 26780.8333
+2705 37663.8889 26882.5000
+2706 37666.6667 20816.6667
+2707 37666.6667 21316.6667
+2708 37666.6667 21533.3333
+2709 37666.6667 21550.0000
+2710 37666.6667 21616.6667
+2711 37666.6667 21633.3333
+2712 37666.6667 21783.3333
+2713 37666.6667 21816.6667
+2714 37666.6667 21833.3333
+2715 37666.6667 21866.6667
+2716 37666.6667 21916.6667
+2717 37666.6667 21933.3333
+2718 37666.6667 22183.3333
+2719 37666.6667 22366.6667
+2720 37666.6667 22450.0000
+2721 37666.6667 22483.3333
+2722 37666.6667 22583.3333
+2723 37666.6667 22666.6667
+2724 37666.6667 22750.0000
+2725 37666.6667 22766.6667
+2726 37666.6667 22783.3333
+2727 37666.6667 22816.6667
+2728 37666.6667 22850.0000
+2729 37666.6667 23133.3333
+2730 37666.6667 23983.3333
+2731 37666.6667 24016.6667
+2732 37666.6667 24033.3333
+2733 37666.6667 24050.0000
+2734 37666.6667 24316.6667
+2735 37666.6667 24333.3333
+2736 37666.6667 24350.0000
+2737 37672.7778 26831.9444
+2738 37675.5556 26769.1667
+2739 37678.6111 26801.3889
+2740 37679.7222 26861.1111
+2741 37683.3333 21316.6667
+2742 37683.3333 21333.3333
+2743 37683.3333 21366.6667
+2744 37683.3333 21383.3333
+2745 37683.3333 21450.0000
+2746 37683.3333 21483.3333
+2747 37683.3333 21500.0000
+2748 37683.3333 21516.6667
+2749 37683.3333 21550.0000
+2750 37683.3333 21583.3333
+2751 37683.3333 21616.6667
+2752 37683.3333 21650.0000
+2753 37683.3333 21683.3333
+2754 37683.3333 21783.3333
+2755 37683.3333 21833.3333
+2756 37683.3333 21866.6667
+2757 37683.3333 21916.6667
+2758 37683.3333 21966.6667
+2759 37683.3333 22033.3333
+2760 37683.3333 22133.3333
+2761 37683.3333 22183.3333
+2762 37683.3333 22300.0000
+2763 37683.3333 22516.6667
+2764 37683.3333 22616.6667
+2765 37683.3333 22716.6667
+2766 37683.3333 22750.0000
+2767 37683.3333 22816.6667
+2768 37683.3333 22833.3333
+2769 37683.3333 22966.6667
+2770 37683.3333 23150.0000
+2771 37683.3333 23350.0000
+2772 37683.3333 23450.0000
+2773 37683.3333 23483.3333
+2774 37684.7222 26759.1667
+2775 37686.6667 26918.8889
+2776 37691.9444 26948.3333
+2777 37692.5000 26774.1667
+2778 37692.7778 26588.0556
+2779 37698.3333 26618.6111
+2780 37699.4444 26746.1111
+2781 37700.0000 21333.3333
+2782 37700.0000 21416.6667
+2783 37700.0000 21466.6667
+2784 37700.0000 21516.6667
+2785 37700.0000 21566.6667
+2786 37700.0000 21783.3333
+2787 37700.0000 21916.6667
+2788 37700.0000 21950.0000
+2789 37700.0000 21966.6667
+2790 37700.0000 22050.0000
+2791 37700.0000 22133.3333
+2792 37700.0000 22433.3333
+2793 37700.0000 22483.3333
+2794 37700.0000 22550.0000
+2795 37700.0000 22750.0000
+2796 37700.0000 23066.6667
+2797 37700.0000 23366.6667
+2798 37700.0000 23500.0000
+2799 37700.0000 23516.6667
+2800 37700.0000 24116.6667
+2801 37703.6111 26905.5556
+2802 37704.7222 26839.4444
+2803 37706.6667 26771.3889
+2804 37707.7778 26669.1667
+2805 37708.6111 27018.0556
+2806 37709.7222 26749.7222
+2807 37709.7222 27046.9444
+2808 37710.2778 26685.8333
+2809 37710.8333 26700.0000
+2810 37711.6667 26804.1667
+2811 37713.6111 26975.5556
+2812 37714.1667 27059.1667
+2813 37716.1111 26782.2222
+2814 37716.6667 20783.3333
+2815 37716.6667 20833.3333
+2816 37716.6667 20983.3333
+2817 37716.6667 21333.3333
+2818 37716.6667 21350.0000
+2819 37716.6667 21416.6667
+2820 37716.6667 21433.3333
+2821 37716.6667 21483.3333
+2822 37716.6667 21566.6667
+2823 37716.6667 21583.3333
+2824 37716.6667 21616.6667
+2825 37716.6667 21650.0000
+2826 37716.6667 21716.6667
+2827 37716.6667 21833.3333
+2828 37716.6667 21950.0000
+2829 37716.6667 21983.3333
+2830 37716.6667 22100.0000
+2831 37716.6667 22150.0000
+2832 37716.6667 22250.0000
+2833 37716.6667 22316.6667
+2834 37716.6667 22350.0000
+2835 37716.6667 22600.0000
+2836 37716.6667 22650.0000
+2837 37716.6667 22750.0000
+2838 37716.6667 22833.3333
+2839 37716.6667 22883.3333
+2840 37716.6667 23350.0000
+2841 37716.6667 23450.0000
+2842 37716.6667 23466.6667
+2843 37716.6667 23483.3333
+2844 37716.6667 23500.0000
+2845 37716.6667 23516.6667
+2846 37716.6667 23950.0000
+2847 37716.6667 24050.0000
+2848 37716.6667 24116.6667
+2849 37718.0556 26861.9444
+2850 37719.1667 27000.2778
+2851 37726.3889 26690.0000
+2852 37727.2222 26822.2222
+2853 37728.6111 26908.3333
+2854 37730.8333 26829.4444
+2855 37733.3333 20816.6667
+2856 37733.3333 20833.3333
+2857 37733.3333 20916.6667
+2858 37733.3333 21350.0000
+2859 37733.3333 21366.6667
+2860 37733.3333 21383.3333
+2861 37733.3333 21400.0000
+2862 37733.3333 21416.6667
+2863 37733.3333 21466.6667
+2864 37733.3333 21500.0000
+2865 37733.3333 21516.6667
+2866 37733.3333 21533.3333
+2867 37733.3333 21550.0000
+2868 37733.3333 21666.6667
+2869 37733.3333 21700.0000
+2870 37733.3333 21783.3333
+2871 37733.3333 21933.3333
+2872 37733.3333 21950.0000
+2873 37733.3333 21983.3333
+2874 37733.3333 22016.6667
+2875 37733.3333 22200.0000
+2876 37733.3333 22283.3333
+2877 37733.3333 22300.0000
+2878 37733.3333 22500.0000
+2879 37733.3333 22516.6667
+2880 37733.3333 22533.3333
+2881 37733.3333 22683.3333
+2882 37733.3333 22716.6667
+2883 37733.3333 23466.6667
+2884 37733.3333 23483.3333
+2885 37733.3333 23516.6667
+2886 37733.3333 23950.0000
+2887 37733.3333 24000.0000
+2888 37733.3333 24016.6667
+2889 37733.3333 24050.0000
+2890 37733.3333 26583.3333
+2891 37735.2778 26945.0000
+2892 37738.0556 27000.5556
+2893 37738.3333 26745.2778
+2894 37741.3889 26715.5556
+2895 37747.2222 26728.6111
+2896 37750.0000 20783.3333
+2897 37750.0000 20816.6667
+2898 37750.0000 20950.0000
+2899 37750.0000 21316.6667
+2900 37750.0000 21333.3333
+2901 37750.0000 21366.6667
+2902 37750.0000 21433.3333
+2903 37750.0000 21450.0000
+2904 37750.0000 21466.6667
+2905 37750.0000 21516.6667
+2906 37750.0000 21550.0000
+2907 37750.0000 21683.3333
+2908 37750.0000 21883.3333
+2909 37750.0000 21900.0000
+2910 37750.0000 22000.0000
+2911 37750.0000 22016.6667
+2912 37750.0000 22050.0000
+2913 37750.0000 22083.3333
+2914 37750.0000 22100.0000
+2915 37750.0000 22183.3333
+2916 37750.0000 22416.6667
+2917 37750.0000 22483.3333
+2918 37750.0000 22833.3333
+2919 37750.0000 22883.3333
+2920 37750.0000 23000.0000
+2921 37750.0000 23433.3333
+2922 37750.0000 23450.0000
+2923 37750.0000 23483.3333
+2924 37750.0000 23516.6667
+2925 37750.0000 23533.3333
+2926 37750.0000 24916.6667
+2927 37750.0000 24933.3333
+2928 37750.0000 24950.0000
+2929 37750.0000 26983.3333
+2930 37750.2778 26716.1111
+2931 37751.1111 27005.5556
+2932 37751.6667 26592.2222
+2933 37754.4444 26677.2222
+2934 37755.2778 26738.3333
+2935 37755.8333 26715.8333
+2936 37757.2222 26607.2222
+2937 37757.2222 26976.9444
+2938 37758.0556 27024.4444
+2939 37758.8889 26946.3889
+2940 37759.1667 26660.0000
+2941 37761.3889 27009.7222
+2942 37766.6667 20800.0000
+2943 37766.6667 20816.6667
+2944 37766.6667 20866.6667
+2945 37766.6667 20916.6667
+2946 37766.6667 21333.3333
+2947 37766.6667 21500.0000
+2948 37766.6667 21616.6667
+2949 37766.6667 21666.6667
+2950 37766.6667 21833.3333
+2951 37766.6667 21866.6667
+2952 37766.6667 22016.6667
+2953 37766.6667 22083.3333
+2954 37766.6667 22116.6667
+2955 37766.6667 22150.0000
+2956 37766.6667 22183.3333
+2957 37766.6667 22216.6667
+2958 37766.6667 22250.0000
+2959 37766.6667 22383.3333
+2960 37766.6667 22483.3333
+2961 37766.6667 22566.6667
+2962 37766.6667 22966.6667
+2963 37766.6667 23133.3333
+2964 37766.6667 23433.3333
+2965 37766.6667 23483.3333
+2966 37766.6667 23516.6667
+2967 37766.6667 23533.3333
+2968 37766.6667 23966.6667
+2969 37766.6667 24033.3333
+2970 37766.6667 24916.6667
+2971 37766.6667 24933.3333
+2972 37766.6667 24950.0000
+2973 37767.7778 26966.9444
+2974 37769.7222 26919.7222
+2975 37772.2222 26658.8889
+2976 37773.3333 26685.8333
+2977 37776.3889 26893.8889
+2978 37778.0556 26673.3333
+2979 37779.1667 26993.3333
+2980 37779.4444 26751.6667
+2981 37783.3333 20683.3333
+2982 37783.3333 20716.6667
+2983 37783.3333 20783.3333
+2984 37783.3333 20800.0000
+2985 37783.3333 20833.3333
+2986 37783.3333 20850.0000
+2987 37783.3333 20866.6667
+2988 37783.3333 20900.0000
+2989 37783.3333 21300.0000
+2990 37783.3333 21316.6667
+2991 37783.3333 21400.0000
+2992 37783.3333 21466.6667
+2993 37783.3333 21566.6667
+2994 37783.3333 21633.3333
+2995 37783.3333 21683.3333
+2996 37783.3333 21716.6667
+2997 37783.3333 21866.6667
+2998 37783.3333 21933.3333
+2999 37783.3333 22033.3333
+3000 37783.3333 22066.6667
+3001 37783.3333 22116.6667
+3002 37783.3333 22150.0000
+3003 37783.3333 22283.3333
+3004 37783.3333 22316.6667
+3005 37783.3333 22433.3333
+3006 37783.3333 22866.6667
+3007 37783.3333 23900.0000
+3008 37783.3333 23916.6667
+3009 37783.3333 23950.0000
+3010 37783.3333 24066.6667
+3011 37783.3333 24083.3333
+3012 37783.3333 24883.3333
+3013 37783.3333 24933.3333
+3014 37783.3333 24950.0000
+3015 37783.3333 26850.0000
+3016 37784.4444 26828.6111
+3017 37789.4444 26666.3889
+3018 37790.2778 26683.8889
+3019 37790.2778 26704.4444
+3020 37792.2222 26828.8889
+3021 37792.5000 26696.6667
+3022 37796.1111 26812.5000
+3023 37797.5000 26859.1667
+3024 37798.3333 26738.3333
+3025 37798.6111 26706.1111
+3026 37799.1667 26750.8333
+3027 37800.0000 20683.3333
+3028 37800.0000 20733.3333
+3029 37800.0000 20766.6667
+3030 37800.0000 20783.3333
+3031 37800.0000 20800.0000
+3032 37800.0000 20833.3333
+3033 37800.0000 20850.0000
+3034 37800.0000 20866.6667
+3035 37800.0000 21300.0000
+3036 37800.0000 21350.0000
+3037 37800.0000 21383.3333
+3038 37800.0000 21433.3333
+3039 37800.0000 21466.6667
+3040 37800.0000 21533.3333
+3041 37800.0000 21566.6667
+3042 37800.0000 21583.3333
+3043 37800.0000 21616.6667
+3044 37800.0000 21633.3333
+3045 37800.0000 21716.6667
+3046 37800.0000 21750.0000
+3047 37800.0000 21816.6667
+3048 37800.0000 21900.0000
+3049 37800.0000 21950.0000
+3050 37800.0000 22000.0000
+3051 37800.0000 22016.6667
+3052 37800.0000 22200.0000
+3053 37800.0000 22250.0000
+3054 37800.0000 22283.3333
+3055 37800.0000 22583.3333
+3056 37800.0000 22716.6667
+3057 37800.0000 22800.0000
+3058 37800.0000 23050.0000
+3059 37800.0000 23883.3333
+3060 37800.0000 23983.3333
+3061 37800.0000 24050.0000
+3062 37800.0000 24866.6667
+3063 37800.0000 24900.0000
+3064 37800.0000 24916.6667
+3065 37800.0000 24933.3333
+3066 37800.0000 24950.0000
+3067 37801.1111 26803.3333
+3068 37801.3889 26745.5556
+3069 37802.2222 26841.3889
+3070 37802.7778 26812.2222
+3071 37805.8333 26815.2778
+3072 37806.6667 26732.2222
+3073 37808.3333 26794.7222
+3074 37808.6111 26738.8889
+3075 37816.6667 20683.3333
+3076 37816.6667 20766.6667
+3077 37816.6667 20800.0000
+3078 37816.6667 20833.3333
+3079 37816.6667 20850.0000
+3080 37816.6667 21266.6667
+3081 37816.6667 21283.3333
+3082 37816.6667 21350.0000
+3083 37816.6667 21383.3333
+3084 37816.6667 21416.6667
+3085 37816.6667 21583.3333
+3086 37816.6667 21616.6667
+3087 37816.6667 21700.0000
+3088 37816.6667 21850.0000
+3089 37816.6667 21866.6667
+3090 37816.6667 22000.0000
+3091 37816.6667 22133.3333
+3092 37816.6667 22150.0000
+3093 37816.6667 22166.6667
+3094 37816.6667 22333.3333
+3095 37816.6667 22516.6667
+3096 37816.6667 22533.3333
+3097 37816.6667 22666.6667
+3098 37816.6667 22700.0000
+3099 37816.6667 22750.0000
+3100 37816.6667 22866.6667
+3101 37816.6667 22933.3333
+3102 37816.6667 23000.0000
+3103 37816.6667 23783.3333
+3104 37816.6667 23800.0000
+3105 37816.6667 24050.0000
+3106 37816.6667 24833.3333
+3107 37816.6667 24883.3333
+3108 37816.6667 24900.0000
+3109 37816.6667 24916.6667
+3110 37816.6667 24933.3333
+3111 37816.6667 24950.0000
+3112 37833.3333 20750.0000
+3113 37833.3333 20766.6667
+3114 37833.3333 21300.0000
+3115 37833.3333 21383.3333
+3116 37833.3333 21433.3333
+3117 37833.3333 21450.0000
+3118 37833.3333 21533.3333
+3119 37833.3333 21566.6667
+3120 37833.3333 21583.3333
+3121 37833.3333 21600.0000
+3122 37833.3333 21700.0000
+3123 37833.3333 21766.6667
+3124 37833.3333 21833.3333
+3125 37833.3333 21850.0000
+3126 37833.3333 21933.3333
+3127 37833.3333 21983.3333
+3128 37833.3333 22000.0000
+3129 37833.3333 22100.0000
+3130 37833.3333 22116.6667
+3131 37833.3333 22166.6667
+3132 37833.3333 22316.6667
+3133 37833.3333 22383.3333
+3134 37833.3333 22566.6667
+3135 37833.3333 22583.3333
+3136 37833.3333 23016.6667
+3137 37833.3333 23033.3333
+3138 37833.3333 23800.0000
+3139 37833.3333 23866.6667
+3140 37833.3333 23916.6667
+3141 37833.3333 23966.6667
+3142 37833.3333 24816.6667
+3143 37833.3333 24900.0000
+3144 37833.3333 24916.6667
+3145 37833.3333 24933.3333
+3146 37850.0000 20650.0000
+3147 37850.0000 20700.0000
+3148 37850.0000 20783.3333
+3149 37850.0000 21116.6667
+3150 37850.0000 21150.0000
+3151 37850.0000 21216.6667
+3152 37850.0000 21250.0000
+3153 37850.0000 21316.6667
+3154 37850.0000 21366.6667
+3155 37850.0000 21383.3333
+3156 37850.0000 21433.3333
+3157 37850.0000 21450.0000
+3158 37850.0000 21500.0000
+3159 37850.0000 21516.6667
+3160 37850.0000 21566.6667
+3161 37850.0000 21616.6667
+3162 37850.0000 21766.6667
+3163 37850.0000 21800.0000
+3164 37850.0000 21983.3333
+3165 37850.0000 22016.6667
+3166 37850.0000 22066.6667
+3167 37850.0000 22083.3333
+3168 37850.0000 22116.6667
+3169 37850.0000 22150.0000
+3170 37850.0000 22166.6667
+3171 37850.0000 22216.6667
+3172 37850.0000 22316.6667
+3173 37850.0000 22416.6667
+3174 37850.0000 22600.0000
+3175 37850.0000 22666.6667
+3176 37850.0000 22800.0000
+3177 37850.0000 22883.3333
+3178 37850.0000 22916.6667
+3179 37850.0000 22983.3333
+3180 37850.0000 23000.0000
+3181 37850.0000 23766.6667
+3182 37850.0000 24783.3333
+3183 37850.0000 24916.6667
+3184 37850.0000 24933.3333
+3185 37866.6667 20650.0000
+3186 37866.6667 20666.6667
+3187 37866.6667 21116.6667
+3188 37866.6667 21150.0000
+3189 37866.6667 21183.3333
+3190 37866.6667 21200.0000
+3191 37866.6667 21266.6667
+3192 37866.6667 21300.0000
+3193 37866.6667 21350.0000
+3194 37866.6667 21433.3333
+3195 37866.6667 21450.0000
+3196 37866.6667 21483.3333
+3197 37866.6667 21500.0000
+3198 37866.6667 21616.6667
+3199 37866.6667 21650.0000
+3200 37866.6667 21750.0000
+3201 37866.6667 21850.0000
+3202 37866.6667 21900.0000
+3203 37866.6667 21950.0000
+3204 37866.6667 22016.6667
+3205 37866.6667 22033.3333
+3206 37866.6667 22066.6667
+3207 37866.6667 22116.6667
+3208 37866.6667 22166.6667
+3209 37866.6667 22383.3333
+3210 37866.6667 22416.6667
+3211 37866.6667 22450.0000
+3212 37866.6667 22466.6667
+3213 37866.6667 22533.3333
+3214 37866.6667 22783.3333
+3215 37866.6667 22900.0000
+3216 37866.6667 23000.0000
+3217 37866.6667 23750.0000
+3218 37866.6667 23933.3333
+3219 37866.6667 24816.6667
+3220 37866.6667 24833.3333
+3221 37866.6667 24850.0000
+3222 37866.6667 24866.6667
+3223 37866.6667 24883.3333
+3224 37883.3333 20700.0000
+3225 37883.3333 21133.3333
+3226 37883.3333 21200.0000
+3227 37883.3333 21233.3333
+3228 37883.3333 21250.0000
+3229 37883.3333 21283.3333
+3230 37883.3333 21316.6667
+3231 37883.3333 21366.6667
+3232 37883.3333 21383.3333
+3233 37883.3333 21416.6667
+3234 37883.3333 21433.3333
+3235 37883.3333 21450.0000
+3236 37883.3333 21500.0000
+3237 37883.3333 21550.0000
+3238 37883.3333 21583.3333
+3239 37883.3333 21683.3333
+3240 37883.3333 21900.0000
+3241 37883.3333 21916.6667
+3242 37883.3333 21983.3333
+3243 37883.3333 22016.6667
+3244 37883.3333 22050.0000
+3245 37883.3333 22150.0000
+3246 37883.3333 22333.3333
+3247 37883.3333 22466.6667
+3248 37883.3333 22483.3333
+3249 37883.3333 22566.6667
+3250 37883.3333 22633.3333
+3251 37883.3333 22733.3333
+3252 37883.3333 22833.3333
+3253 37883.3333 22883.3333
+3254 37883.3333 22950.0000
+3255 37883.3333 23416.6667
+3256 37883.3333 23433.3333
+3257 37883.3333 23733.3333
+3258 37883.3333 23750.0000
+3259 37883.3333 23933.3333
+3260 37883.3333 24016.6667
+3261 37883.3333 24733.3333
+3262 37900.0000 21233.3333
+3263 37900.0000 21266.6667
+3264 37900.0000 21350.0000
+3265 37900.0000 21383.3333
+3266 37900.0000 21400.0000
+3267 37900.0000 21450.0000
+3268 37900.0000 21466.6667
+3269 37900.0000 21500.0000
+3270 37900.0000 21533.3333
+3271 37900.0000 21550.0000
+3272 37900.0000 21600.0000
+3273 37900.0000 21650.0000
+3274 37900.0000 21766.6667
+3275 37900.0000 21833.3333
+3276 37900.0000 21916.6667
+3277 37900.0000 22000.0000
+3278 37900.0000 22033.3333
+3279 37900.0000 22050.0000
+3280 37900.0000 22083.3333
+3281 37900.0000 22116.6667
+3282 37900.0000 22133.3333
+3283 37900.0000 22150.0000
+3284 37900.0000 22333.3333
+3285 37900.0000 22466.6667
+3286 37900.0000 22600.0000
+3287 37900.0000 22650.0000
+3288 37900.0000 22733.3333
+3289 37900.0000 22933.3333
+3290 37900.0000 23416.6667
+3291 37900.0000 23483.3333
+3292 37900.0000 23733.3333
+3293 37900.0000 23750.0000
+3294 37900.0000 23883.3333
+3295 37900.0000 24733.3333
+3296 37900.0000 24750.0000
+3297 37900.0000 24766.6667
+3298 37900.0000 24783.3333
+3299 37900.0000 24833.3333
+3300 37900.0000 24916.6667
+3301 37916.6667 20700.0000
+3302 37916.6667 21183.3333
+3303 37916.6667 21200.0000
+3304 37916.6667 21233.3333
+3305 37916.6667 21250.0000
+3306 37916.6667 21283.3333
+3307 37916.6667 21333.3333
+3308 37916.6667 21400.0000
+3309 37916.6667 21416.6667
+3310 37916.6667 21433.3333
+3311 37916.6667 21466.6667
+3312 37916.6667 21500.0000
+3313 37916.6667 21533.3333
+3314 37916.6667 21666.6667
+3315 37916.6667 21716.6667
+3316 37916.6667 21750.0000
+3317 37916.6667 21800.0000
+3318 37916.6667 21866.6667
+3319 37916.6667 21933.3333
+3320 37916.6667 22133.3333
+3321 37916.6667 22166.6667
+3322 37916.6667 22200.0000
+3323 37916.6667 22283.3333
+3324 37916.6667 22300.0000
+3325 37916.6667 22316.6667
+3326 37916.6667 22516.6667
+3327 37916.6667 22616.6667
+3328 37916.6667 22700.0000
+3329 37916.6667 22883.3333
+3330 37916.6667 22983.3333
+3331 37916.6667 23000.0000
+3332 37916.6667 23150.0000
+3333 37916.6667 23466.6667
+3334 37916.6667 23500.0000
+3335 37916.6667 23716.6667
+3336 37916.6667 23733.3333
+3337 37916.6667 23966.6667
+3338 37933.3333 21150.0000
+3339 37933.3333 21266.6667
+3340 37933.3333 21316.6667
+3341 37933.3333 21333.3333
+3342 37933.3333 21350.0000
+3343 37933.3333 21400.0000
+3344 37933.3333 21466.6667
+3345 37933.3333 21566.6667
+3346 37933.3333 21616.6667
+3347 37933.3333 21633.3333
+3348 37933.3333 21650.0000
+3349 37933.3333 21750.0000
+3350 37933.3333 21850.0000
+3351 37933.3333 21916.6667
+3352 37933.3333 21966.6667
+3353 37933.3333 22000.0000
+3354 37933.3333 22033.3333
+3355 37933.3333 22050.0000
+3356 37933.3333 22083.3333
+3357 37933.3333 22100.0000
+3358 37933.3333 22166.6667
+3359 37933.3333 22183.3333
+3360 37933.3333 22200.0000
+3361 37933.3333 22333.3333
+3362 37933.3333 22633.3333
+3363 37933.3333 22716.6667
+3364 37933.3333 22800.0000
+3365 37933.3333 22833.3333
+3366 37933.3333 22850.0000
+3367 37933.3333 22933.3333
+3368 37933.3333 23033.3333
+3369 37933.3333 23533.3333
+3370 37933.3333 23700.0000
+3371 37933.3333 23733.3333
+3372 37933.3333 24716.6667
+3373 37933.3333 24766.6667
+3374 37933.3333 24800.0000
+3375 37950.0000 21316.6667
+3376 37950.0000 21350.0000
+3377 37950.0000 21366.6667
+3378 37950.0000 21383.3333
+3379 37950.0000 21400.0000
+3380 37950.0000 21416.6667
+3381 37950.0000 21450.0000
+3382 37950.0000 21483.3333
+3383 37950.0000 21500.0000
+3384 37950.0000 21533.3333
+3385 37950.0000 21550.0000
+3386 37950.0000 21700.0000
+3387 37950.0000 21716.6667
+3388 37950.0000 21766.6667
+3389 37950.0000 21850.0000
+3390 37950.0000 21933.3333
+3391 37950.0000 22016.6667
+3392 37950.0000 22133.3333
+3393 37950.0000 22316.6667
+3394 37950.0000 22350.0000
+3395 37950.0000 22566.6667
+3396 37950.0000 22650.0000
+3397 37950.0000 22750.0000
+3398 37950.0000 22783.3333
+3399 37950.0000 22800.0000
+3400 37950.0000 22833.3333
+3401 37950.0000 22966.6667
+3402 37950.0000 23533.3333
+3403 37950.0000 23633.3333
+3404 37950.0000 23666.6667
+3405 37950.0000 23700.0000
+3406 37950.0000 23716.6667
+3407 37950.0000 23766.6667
+3408 37950.0000 23850.0000
+3409 37950.0000 24750.0000
+3410 37950.0000 24800.0000
+3411 37966.6667 21250.0000
+3412 37966.6667 21266.6667
+3413 37966.6667 21283.3333
+3414 37966.6667 21300.0000
+3415 37966.6667 21333.3333
+3416 37966.6667 21350.0000
+3417 37966.6667 21400.0000
+3418 37966.6667 21516.6667
+3419 37966.6667 21550.0000
+3420 37966.6667 21633.3333
+3421 37966.6667 21666.6667
+3422 37966.6667 21700.0000
+3423 37966.6667 22050.0000
+3424 37966.6667 22083.3333
+3425 37966.6667 22116.6667
+3426 37966.6667 22566.6667
+3427 37966.6667 22633.3333
+3428 37966.6667 22766.6667
+3429 37966.6667 22783.3333
+3430 37966.6667 22816.6667
+3431 37966.6667 23200.0000
+3432 37966.6667 23366.6667
+3433 37966.6667 23450.0000
+3434 37966.6667 23483.3333
+3435 37966.6667 23516.6667
+3436 37966.6667 23566.6667
+3437 37966.6667 23633.3333
+3438 37966.6667 23650.0000
+3439 37966.6667 23683.3333
+3440 37966.6667 23750.0000
+3441 37966.6667 23800.0000
+3442 37966.6667 23916.6667
+3443 37966.6667 24000.0000
+3444 37966.6667 24483.3333
+3445 37966.6667 24733.3333
+3446 37966.6667 24750.0000
+3447 37966.6667 24766.6667
+3448 37983.3333 21266.6667
+3449 37983.3333 21316.6667
+3450 37983.3333 21350.0000
+3451 37983.3333 21400.0000
+3452 37983.3333 21416.6667
+3453 37983.3333 21450.0000
+3454 37983.3333 21466.6667
+3455 37983.3333 21583.3333
+3456 37983.3333 21666.6667
+3457 37983.3333 21733.3333
+3458 37983.3333 21766.6667
+3459 37983.3333 21800.0000
+3460 37983.3333 22000.0000
+3461 37983.3333 22066.6667
+3462 37983.3333 22133.3333
+3463 37983.3333 22266.6667
+3464 37983.3333 22350.0000
+3465 37983.3333 22466.6667
+3466 37983.3333 22483.3333
+3467 37983.3333 22516.6667
+3468 37983.3333 22566.6667
+3469 37983.3333 22650.0000
+3470 37983.3333 22733.3333
+3471 37983.3333 22783.3333
+3472 37983.3333 22966.6667
+3473 37983.3333 23350.0000
+3474 37983.3333 23533.3333
+3475 37983.3333 23666.6667
+3476 37983.3333 23683.3333
+3477 37983.3333 23733.3333
+3478 37983.3333 23766.6667
+3479 37983.3333 23816.6667
+3480 37983.3333 23866.6667
+3481 37983.3333 23883.3333
+3482 37983.3333 23900.0000
+3483 37983.3333 24016.6667
+3484 38000.0000 21316.6667
+3485 38000.0000 21350.0000
+3486 38000.0000 21366.6667
+3487 38000.0000 21383.3333
+3488 38000.0000 21516.6667
+3489 38000.0000 21666.6667
+3490 38000.0000 21716.6667
+3491 38000.0000 21766.6667
+3492 38000.0000 21916.6667
+3493 38000.0000 22000.0000
+3494 38000.0000 22133.3333
+3495 38000.0000 22266.6667
+3496 38000.0000 22366.6667
+3497 38000.0000 22466.6667
+3498 38000.0000 22483.3333
+3499 38000.0000 22533.3333
+3500 38000.0000 22566.6667
+3501 38000.0000 22650.0000
+3502 38000.0000 22733.3333
+3503 38000.0000 22750.0000
+3504 38000.0000 23350.0000
+3505 38000.0000 23433.3333
+3506 38000.0000 23583.3333
+3507 38000.0000 23666.6667
+3508 38000.0000 23683.3333
+3509 38000.0000 23700.0000
+3510 38000.0000 23733.3333
+3511 38000.0000 23800.0000
+3512 38000.0000 23883.3333
+3513 38000.0000 23916.6667
+3514 38000.0000 23950.0000
+3515 38016.6667 21366.6667
+3516 38016.6667 21383.3333
+3517 38016.6667 21400.0000
+3518 38016.6667 21416.6667
+3519 38016.6667 21433.3333
+3520 38016.6667 21466.6667
+3521 38016.6667 21550.0000
+3522 38016.6667 21566.6667
+3523 38016.6667 21600.0000
+3524 38016.6667 21633.3333
+3525 38016.6667 21700.0000
+3526 38016.6667 21733.3333
+3527 38016.6667 21766.6667
+3528 38016.6667 21900.0000
+3529 38016.6667 21966.6667
+3530 38016.6667 21983.3333
+3531 38016.6667 22233.3333
+3532 38016.6667 22250.0000
+3533 38016.6667 22266.6667
+3534 38016.6667 22416.6667
+3535 38016.6667 22483.3333
+3536 38016.6667 22500.0000
+3537 38016.6667 22616.6667
+3538 38016.6667 22650.0000
+3539 38016.6667 22683.3333
+3540 38016.6667 22716.6667
+3541 38016.6667 22733.3333
+3542 38016.6667 22750.0000
+3543 38016.6667 22983.3333
+3544 38016.6667 23666.6667
+3545 38016.6667 23700.0000
+3546 38016.6667 23733.3333
+3547 38016.6667 23750.0000
+3548 38016.6667 23766.6667
+3549 38016.6667 23833.3333
+3550 38016.6667 24000.0000
+3551 38016.6667 24266.6667
+3552 38016.6667 24283.3333
+3553 38016.6667 24333.3333
+3554 38016.6667 24416.6667
+3555 38016.6667 24450.0000
+3556 38016.6667 24466.6667
+3557 38016.6667 24516.6667
+3558 38016.6667 24533.3333
+3559 38016.6667 24550.0000
+3560 38016.6667 24566.6667
+3561 38033.3333 21366.6667
+3562 38033.3333 21466.6667
+3563 38033.3333 21500.0000
+3564 38033.3333 21550.0000
+3565 38033.3333 21633.3333
+3566 38033.3333 21700.0000
+3567 38033.3333 21716.6667
+3568 38033.3333 21733.3333
+3569 38033.3333 21750.0000
+3570 38033.3333 21800.0000
+3571 38033.3333 21866.6667
+3572 38033.3333 21883.3333
+3573 38033.3333 21900.0000
+3574 38033.3333 21933.3333
+3575 38033.3333 21966.6667
+3576 38033.3333 22000.0000
+3577 38033.3333 22116.6667
+3578 38033.3333 22250.0000
+3579 38033.3333 22266.6667
+3580 38033.3333 22333.3333
+3581 38033.3333 22366.6667
+3582 38033.3333 22483.3333
+3583 38033.3333 22533.3333
+3584 38033.3333 22566.6667
+3585 38033.3333 22583.3333
+3586 38033.3333 22600.0000
+3587 38033.3333 22666.6667
+3588 38033.3333 22716.6667
+3589 38033.3333 22733.3333
+3590 38033.3333 22950.0000
+3591 38033.3333 23166.6667
+3592 38033.3333 23500.0000
+3593 38033.3333 23533.3333
+3594 38033.3333 23700.0000
+3595 38033.3333 23733.3333
+3596 38033.3333 23750.0000
+3597 38033.3333 23766.6667
+3598 38033.3333 23783.3333
+3599 38033.3333 23800.0000
+3600 38033.3333 23916.6667
+3601 38033.3333 24316.6667
+3602 38033.3333 24400.0000
+3603 38033.3333 24416.6667
+3604 38033.3333 24433.3333
+3605 38033.3333 24500.0000
+3606 38033.3333 24533.3333
+3607 38050.0000 21316.6667
+3608 38050.0000 21350.0000
+3609 38050.0000 21366.6667
+3610 38050.0000 21383.3333
+3611 38050.0000 21450.0000
+3612 38050.0000 21483.3333
+3613 38050.0000 21550.0000
+3614 38050.0000 21583.3333
+3615 38050.0000 21666.6667
+3616 38050.0000 21700.0000
+3617 38050.0000 21750.0000
+3618 38050.0000 21766.6667
+3619 38050.0000 21783.3333
+3620 38050.0000 21816.6667
+3621 38050.0000 21850.0000
+3622 38050.0000 21866.6667
+3623 38050.0000 21916.6667
+3624 38050.0000 21933.3333
+3625 38050.0000 21983.3333
+3626 38050.0000 22016.6667
+3627 38050.0000 22066.6667
+3628 38050.0000 22316.6667
+3629 38050.0000 22350.0000
+3630 38050.0000 22450.0000
+3631 38050.0000 22500.0000
+3632 38050.0000 22533.3333
+3633 38050.0000 22550.0000
+3634 38050.0000 22583.3333
+3635 38050.0000 22600.0000
+3636 38050.0000 22616.6667
+3637 38050.0000 22650.0000
+3638 38050.0000 22683.3333
+3639 38050.0000 22933.3333
+3640 38050.0000 22966.6667
+3641 38050.0000 23016.6667
+3642 38050.0000 23683.3333
+3643 38050.0000 23766.6667
+3644 38050.0000 23800.0000
+3645 38050.0000 23833.3333
+3646 38050.0000 23866.6667
+3647 38050.0000 24316.6667
+3648 38050.0000 24366.6667
+3649 38050.0000 24383.3333
+3650 38050.0000 24416.6667
+3651 38050.0000 24533.3333
+3652 38050.0000 24550.0000
+3653 38066.6667 20733.3333
+3654 38066.6667 20750.0000
+3655 38066.6667 20783.3333
+3656 38066.6667 21350.0000
+3657 38066.6667 21400.0000
+3658 38066.6667 21433.3333
+3659 38066.6667 21500.0000
+3660 38066.6667 21516.6667
+3661 38066.6667 21550.0000
+3662 38066.6667 21600.0000
+3663 38066.6667 21616.6667
+3664 38066.6667 21650.0000
+3665 38066.6667 21666.6667
+3666 38066.6667 21683.3333
+3667 38066.6667 21716.6667
+3668 38066.6667 21733.3333
+3669 38066.6667 21750.0000
+3670 38066.6667 21766.6667
+3671 38066.6667 21800.0000
+3672 38066.6667 21850.0000
+3673 38066.6667 21900.0000
+3674 38066.6667 21933.3333
+3675 38066.6667 21950.0000
+3676 38066.6667 22033.3333
+3677 38066.6667 22233.3333
+3678 38066.6667 22316.6667
+3679 38066.6667 22333.3333
+3680 38066.6667 22350.0000
+3681 38066.6667 22400.0000
+3682 38066.6667 22450.0000
+3683 38066.6667 22500.0000
+3684 38066.6667 22516.6667
+3685 38066.6667 22633.3333
+3686 38066.6667 22650.0000
+3687 38066.6667 22666.6667
+3688 38066.6667 23500.0000
+3689 38066.6667 23583.3333
+3690 38066.6667 23700.0000
+3691 38066.6667 23766.6667
+3692 38066.6667 23783.3333
+3693 38066.6667 23816.6667
+3694 38066.6667 24000.0000
+3695 38066.6667 24316.6667
+3696 38066.6667 24333.3333
+3697 38066.6667 24350.0000
+3698 38066.6667 24433.3333
+3699 38066.6667 24533.3333
+3700 38083.3333 20716.6667
+3701 38083.3333 20733.3333
+3702 38083.3333 20750.0000
+3703 38083.3333 20783.3333
+3704 38083.3333 21383.3333
+3705 38083.3333 21466.6667
+3706 38083.3333 21483.3333
+3707 38083.3333 21500.0000
+3708 38083.3333 21533.3333
+3709 38083.3333 21566.6667
+3710 38083.3333 21583.3333
+3711 38083.3333 21616.6667
+3712 38083.3333 21633.3333
+3713 38083.3333 21666.6667
+3714 38083.3333 21733.3333
+3715 38083.3333 21766.6667
+3716 38083.3333 21833.3333
+3717 38083.3333 21900.0000
+3718 38083.3333 21916.6667
+3719 38083.3333 22033.3333
+3720 38083.3333 22100.0000
+3721 38083.3333 22133.3333
+3722 38083.3333 22166.6667
+3723 38083.3333 22216.6667
+3724 38083.3333 22333.3333
+3725 38083.3333 22350.0000
+3726 38083.3333 22416.6667
+3727 38083.3333 22433.3333
+3728 38083.3333 22483.3333
+3729 38083.3333 22533.3333
+3730 38083.3333 22583.3333
+3731 38083.3333 22600.0000
+3732 38083.3333 22616.6667
+3733 38083.3333 22633.3333
+3734 38083.3333 23183.3333
+3735 38083.3333 23216.6667
+3736 38083.3333 23516.6667
+3737 38083.3333 23700.0000
+3738 38083.3333 23733.3333
+3739 38083.3333 23983.3333
+3740 38083.3333 24283.3333
+3741 38083.3333 24316.6667
+3742 38083.3333 24333.3333
+3743 38083.3333 24366.6667
+3744 38083.3333 24383.3333
+3745 38083.3333 24533.3333
+3746 38083.3333 24566.6667
+3747 38100.0000 20716.6667
+3748 38100.0000 20750.0000
+3749 38100.0000 20766.6667
+3750 38100.0000 20783.3333
+3751 38100.0000 21416.6667
+3752 38100.0000 21450.0000
+3753 38100.0000 21466.6667
+3754 38100.0000 21483.3333
+3755 38100.0000 21516.6667
+3756 38100.0000 21533.3333
+3757 38100.0000 21550.0000
+3758 38100.0000 21600.0000
+3759 38100.0000 21616.6667
+3760 38100.0000 21633.3333
+3761 38100.0000 21666.6667
+3762 38100.0000 21700.0000
+3763 38100.0000 21716.6667
+3764 38100.0000 21733.3333
+3765 38100.0000 21816.6667
+3766 38100.0000 21833.3333
+3767 38100.0000 21916.6667
+3768 38100.0000 22033.3333
+3769 38100.0000 22100.0000
+3770 38100.0000 22133.3333
+3771 38100.0000 22166.6667
+3772 38100.0000 22233.3333
+3773 38100.0000 22283.3333
+3774 38100.0000 22316.6667
+3775 38100.0000 22333.3333
+3776 38100.0000 22350.0000
+3777 38100.0000 22366.6667
+3778 38100.0000 22450.0000
+3779 38100.0000 22483.3333
+3780 38100.0000 22533.3333
+3781 38100.0000 22566.6667
+3782 38100.0000 22583.3333
+3783 38100.0000 23666.6667
+3784 38100.0000 23816.6667
+3785 38100.0000 23883.3333
+3786 38100.0000 24250.0000
+3787 38100.0000 24333.3333
+3788 38100.0000 24400.0000
+3789 38100.0000 24433.3333
+3790 38100.0000 24483.3333
+3791 38100.0000 24566.6667
+3792 38116.6667 20516.6667
+3793 38116.6667 20533.3333
+3794 38116.6667 20550.0000
+3795 38116.6667 20566.6667
+3796 38116.6667 20583.3333
+3797 38116.6667 20633.3333
+3798 38116.6667 20650.0000
+3799 38116.6667 20750.0000
+3800 38116.6667 20766.6667
+3801 38116.6667 20783.3333
+3802 38116.6667 21466.6667
+3803 38116.6667 21483.3333
+3804 38116.6667 21500.0000
+3805 38116.6667 21516.6667
+3806 38116.6667 21566.6667
+3807 38116.6667 21583.3333
+3808 38116.6667 21600.0000
+3809 38116.6667 21633.3333
+3810 38116.6667 21650.0000
+3811 38116.6667 21666.6667
+3812 38116.6667 21716.6667
+3813 38116.6667 21783.3333
+3814 38116.6667 21900.0000
+3815 38116.6667 21933.3333
+3816 38116.6667 21966.6667
+3817 38116.6667 22066.6667
+3818 38116.6667 22083.3333
+3819 38116.6667 22116.6667
+3820 38116.6667 22216.6667
+3821 38116.6667 22283.3333
+3822 38116.6667 22383.3333
+3823 38116.6667 22400.0000
+3824 38116.6667 22433.3333
+3825 38116.6667 22466.6667
+3826 38116.6667 22483.3333
+3827 38116.6667 22533.3333
+3828 38116.6667 22550.0000
+3829 38116.6667 23400.0000
+3830 38116.6667 23833.3333
+3831 38116.6667 23850.0000
+3832 38116.6667 23866.6667
+3833 38116.6667 23883.3333
+3834 38116.6667 23950.0000
+3835 38116.6667 24216.6667
+3836 38116.6667 24300.0000
+3837 38116.6667 24316.6667
+3838 38116.6667 24483.3333
+3839 38116.6667 24500.0000
+3840 38116.6667 24583.3333
+3841 38133.3333 20500.0000
+3842 38133.3333 20516.6667
+3843 38133.3333 20533.3333
+3844 38133.3333 20550.0000
+3845 38133.3333 20566.6667
+3846 38133.3333 20583.3333
+3847 38133.3333 20616.6667
+3848 38133.3333 20716.6667
+3849 38133.3333 20733.3333
+3850 38133.3333 20750.0000
+3851 38133.3333 21400.0000
+3852 38133.3333 21466.6667
+3853 38133.3333 21533.3333
+3854 38133.3333 21550.0000
+3855 38133.3333 21566.6667
+3856 38133.3333 21583.3333
+3857 38133.3333 21600.0000
+3858 38133.3333 21633.3333
+3859 38133.3333 21700.0000
+3860 38133.3333 21716.6667
+3861 38133.3333 21766.6667
+3862 38133.3333 21783.3333
+3863 38133.3333 21833.3333
+3864 38133.3333 21900.0000
+3865 38133.3333 21916.6667
+3866 38133.3333 21983.3333
+3867 38133.3333 22150.0000
+3868 38133.3333 22200.0000
+3869 38133.3333 22216.6667
+3870 38133.3333 22233.3333
+3871 38133.3333 22283.3333
+3872 38133.3333 22316.6667
+3873 38133.3333 22333.3333
+3874 38133.3333 22366.6667
+3875 38133.3333 22383.3333
+3876 38133.3333 22400.0000
+3877 38133.3333 22416.6667
+3878 38133.3333 22433.3333
+3879 38133.3333 22450.0000
+3880 38133.3333 22466.6667
+3881 38133.3333 22483.3333
+3882 38133.3333 22516.6667
+3883 38133.3333 23800.0000
+3884 38133.3333 23850.0000
+3885 38133.3333 23883.3333
+3886 38133.3333 24000.0000
+3887 38133.3333 24250.0000
+3888 38133.3333 24366.6667
+3889 38133.3333 24383.3333
+3890 38133.3333 24466.6667
+3891 38133.3333 24483.3333
+3892 38133.3333 24533.3333
+3893 38133.3333 24566.6667
+3894 38150.0000 20500.0000
+3895 38150.0000 20550.0000
+3896 38150.0000 20566.6667
+3897 38150.0000 20733.3333
+3898 38150.0000 20750.0000
+3899 38150.0000 20783.3333
+3900 38150.0000 21516.6667
+3901 38150.0000 21550.0000
+3902 38150.0000 21616.6667
+3903 38150.0000 21650.0000
+3904 38150.0000 21666.6667
+3905 38150.0000 21733.3333
+3906 38150.0000 21750.0000
+3907 38150.0000 21800.0000
+3908 38150.0000 21833.3333
+3909 38150.0000 21850.0000
+3910 38150.0000 21866.6667
+3911 38150.0000 21900.0000
+3912 38150.0000 22033.3333
+3913 38150.0000 22066.6667
+3914 38150.0000 22166.6667
+3915 38150.0000 22183.3333
+3916 38150.0000 22200.0000
+3917 38150.0000 22266.6667
+3918 38150.0000 22283.3333
+3919 38150.0000 22300.0000
+3920 38150.0000 22316.6667
+3921 38150.0000 22333.3333
+3922 38150.0000 22350.0000
+3923 38150.0000 23233.3333
+3924 38150.0000 23533.3333
+3925 38150.0000 23716.6667
+3926 38150.0000 23833.3333
+3927 38150.0000 23850.0000
+3928 38150.0000 23866.6667
+3929 38150.0000 23966.6667
+3930 38150.0000 24233.3333
+3931 38150.0000 24316.6667
+3932 38150.0000 24350.0000
+3933 38150.0000 24383.3333
+3934 38150.0000 24400.0000
+3935 38166.6667 20483.3333
+3936 38166.6667 20550.0000
+3937 38166.6667 20600.0000
+3938 38166.6667 20666.6667
+3939 38166.6667 20683.3333
+3940 38166.6667 20700.0000
+3941 38166.6667 20716.6667
+3942 38166.6667 21416.6667
+3943 38166.6667 21450.0000
+3944 38166.6667 21466.6667
+3945 38166.6667 21483.3333
+3946 38166.6667 21666.6667
+3947 38166.6667 21683.3333
+3948 38166.6667 21700.0000
+3949 38166.6667 21716.6667
+3950 38166.6667 21733.3333
+3951 38166.6667 21816.6667
+3952 38166.6667 21850.0000
+3953 38166.6667 22000.0000
+3954 38166.6667 22066.6667
+3955 38166.6667 22100.0000
+3956 38166.6667 22133.3333
+3957 38166.6667 22233.3333
+3958 38166.6667 22266.6667
+3959 38166.6667 22283.3333
+3960 38166.6667 22316.6667
+3961 38166.6667 22333.3333
+3962 38166.6667 22350.0000
+3963 38166.6667 23333.3333
+3964 38166.6667 23416.6667
+3965 38166.6667 23783.3333
+3966 38166.6667 23866.6667
+3967 38166.6667 24000.0000
+3968 38166.6667 24233.3333
+3969 38166.6667 24250.0000
+3970 38166.6667 24266.6667
+3971 38166.6667 24316.6667
+3972 38183.3333 20383.3333
+3973 38183.3333 20400.0000
+3974 38183.3333 20416.6667
+3975 38183.3333 20433.3333
+3976 38183.3333 20483.3333
+3977 38183.3333 20533.3333
+3978 38183.3333 20583.3333
+3979 38183.3333 20683.3333
+3980 38183.3333 20700.0000
+3981 38183.3333 21383.3333
+3982 38183.3333 21416.6667
+3983 38183.3333 21433.3333
+3984 38183.3333 21683.3333
+3985 38183.3333 21700.0000
+3986 38183.3333 21716.6667
+3987 38183.3333 21733.3333
+3988 38183.3333 21750.0000
+3989 38183.3333 21766.6667
+3990 38183.3333 21816.6667
+3991 38183.3333 21950.0000
+3992 38183.3333 21983.3333
+3993 38183.3333 22066.6667
+3994 38183.3333 22133.3333
+3995 38183.3333 22150.0000
+3996 38183.3333 22183.3333
+3997 38183.3333 22266.6667
+3998 38183.3333 23150.0000
+3999 38183.3333 23383.3333
+4000 38183.3333 23500.0000
+4001 38183.3333 23516.6667
+4002 38183.3333 23550.0000
+4003 38183.3333 23850.0000
+4004 38183.3333 23916.6667
+4005 38183.3333 23983.3333
+4006 38183.3333 24033.3333
+4007 38183.3333 24200.0000
+4008 38183.3333 24233.3333
+4009 38183.3333 24266.6667
+4010 38183.3333 26016.6667
+4011 38200.0000 20383.3333
+4012 38200.0000 20400.0000
+4013 38200.0000 20416.6667
+4014 38200.0000 20433.3333
+4015 38200.0000 20516.6667
+4016 38200.0000 20666.6667
+4017 38200.0000 21700.0000
+4018 38200.0000 21733.3333
+4019 38200.0000 22000.0000
+4020 38200.0000 22050.0000
+4021 38200.0000 22083.3333
+4022 38200.0000 22116.6667
+4023 38200.0000 22150.0000
+4024 38200.0000 22166.6667
+4025 38200.0000 22200.0000
+4026 38200.0000 23050.0000
+4027 38200.0000 23116.6667
+4028 38200.0000 23966.6667
+4029 38200.0000 24200.0000
+4030 38216.6667 20383.3333
+4031 38216.6667 20400.0000
+4032 38216.6667 20500.0000
+4033 38216.6667 20516.6667
+4034 38216.6667 20616.6667
+4035 38216.6667 20650.0000
+4036 38216.6667 20666.6667
+4037 38216.6667 21716.6667
+4038 38216.6667 21733.3333
+4039 38216.6667 21750.0000
+4040 38216.6667 21766.6667
+4041 38216.6667 21783.3333
+4042 38216.6667 21800.0000
+4043 38216.6667 21816.6667
+4044 38216.6667 21900.0000
+4045 38216.6667 21966.6667
+4046 38216.6667 22033.3333
+4047 38216.6667 22066.6667
+4048 38216.6667 22100.0000
+4049 38216.6667 22116.6667
+4050 38216.6667 22133.3333
+4051 38216.6667 23266.6667
+4052 38216.6667 23316.6667
+4053 38216.6667 23500.0000
+4054 38216.6667 23550.0000
+4055 38216.6667 23616.6667
+4056 38216.6667 23783.3333
+4057 38216.6667 23833.3333
+4058 38216.6667 23866.6667
+4059 38216.6667 23883.3333
+4060 38216.6667 23916.6667
+4061 38216.6667 24250.0000
+4062 38233.3333 20366.6667
+4063 38233.3333 20383.3333
+4064 38233.3333 20400.0000
+4065 38233.3333 20416.6667
+4066 38233.3333 20483.3333
+4067 38233.3333 20600.0000
+4068 38233.3333 20650.0000
+4069 38233.3333 21733.3333
+4070 38233.3333 21750.0000
+4071 38233.3333 21766.6667
+4072 38233.3333 21783.3333
+4073 38233.3333 21916.6667
+4074 38233.3333 21966.6667
+4075 38233.3333 21983.3333
+4076 38233.3333 22033.3333
+4077 38233.3333 22083.3333
+4078 38233.3333 22100.0000
+4079 38233.3333 22116.6667
+4080 38233.3333 22133.3333
+4081 38233.3333 23216.6667
+4082 38233.3333 23416.6667
+4083 38233.3333 23800.0000
+4084 38233.3333 23900.0000
+4085 38233.3333 24216.6667
+4086 38233.3333 26000.0000
+4087 38233.3333 26050.0000
+4088 38233.3333 26066.6667
+4089 38233.3333 26083.3333
+4090 38233.3333 26100.0000
+4091 38250.0000 20383.3333
+4092 38250.0000 20400.0000
+4093 38250.0000 20600.0000
+4094 38250.0000 20650.0000
+4095 38250.0000 21733.3333
+4096 38250.0000 21750.0000
+4097 38250.0000 21800.0000
+4098 38250.0000 21933.3333
+4099 38250.0000 21950.0000
+4100 38250.0000 21966.6667
+4101 38250.0000 21983.3333
+4102 38250.0000 22000.0000
+4103 38250.0000 22016.6667
+4104 38250.0000 22050.0000
+4105 38250.0000 22083.3333
+4106 38250.0000 22116.6667
+4107 38250.0000 22983.3333
+4108 38250.0000 23066.6667
+4109 38250.0000 23183.3333
+4110 38250.0000 23266.6667
+4111 38250.0000 23466.6667
+4112 38250.0000 23700.0000
+4113 38250.0000 24200.0000
+4114 38250.0000 24216.6667
+4115 38250.0000 25933.3333
+4116 38250.0000 26033.3333
+4117 38250.0000 26066.6667
+4118 38250.0000 26083.3333
+4119 38250.0000 26100.0000
+4120 38266.6667 20466.6667
+4121 38266.6667 20683.3333
+4122 38266.6667 21733.3333
+4123 38266.6667 21750.0000
+4124 38266.6667 21766.6667
+4125 38266.6667 21783.3333
+4126 38266.6667 21816.6667
+4127 38266.6667 21833.3333
+4128 38266.6667 21900.0000
+4129 38266.6667 21916.6667
+4130 38266.6667 21933.3333
+4131 38266.6667 21966.6667
+4132 38266.6667 21983.3333
+4133 38266.6667 22000.0000
+4134 38266.6667 22016.6667
+4135 38266.6667 22050.0000
+4136 38266.6667 22916.6667
+4137 38266.6667 22966.6667
+4138 38266.6667 23116.6667
+4139 38266.6667 23233.3333
+4140 38266.6667 23566.6667
+4141 38266.6667 23800.0000
+4142 38266.6667 23816.6667
+4143 38266.6667 24166.6667
+4144 38266.6667 24183.3333
+4145 38266.6667 25916.6667
+4146 38266.6667 26066.6667
+4147 38266.6667 26083.3333
+4148 38266.6667 26100.0000
+4149 38283.3333 20433.3333
+4150 38283.3333 20466.6667
+4151 38283.3333 20583.3333
+4152 38283.3333 21766.6667
+4153 38283.3333 21800.0000
+4154 38283.3333 21866.6667
+4155 38283.3333 21883.3333
+4156 38283.3333 21900.0000
+4157 38283.3333 21966.6667
+4158 38283.3333 22000.0000
+4159 38283.3333 22033.3333
+4160 38283.3333 22766.6667
+4161 38283.3333 22783.3333
+4162 38283.3333 22800.0000
+4163 38283.3333 23266.6667
+4164 38283.3333 23350.0000
+4165 38283.3333 23583.3333
+4166 38283.3333 23750.0000
+4167 38283.3333 23800.0000
+4168 38283.3333 23816.6667
+4169 38283.3333 23833.3333
+4170 38283.3333 23866.6667
+4171 38283.3333 24133.3333
+4172 38283.3333 25983.3333
+4173 38283.3333 26083.3333
+4174 38300.0000 20483.3333
+4175 38300.0000 20550.0000
+4176 38300.0000 20566.6667
+4177 38300.0000 20583.3333
+4178 38300.0000 20600.0000
+4179 38300.0000 21783.3333
+4180 38300.0000 21800.0000
+4181 38300.0000 21833.3333
+4182 38300.0000 21900.0000
+4183 38300.0000 21950.0000
+4184 38300.0000 21983.3333
+4185 38300.0000 22000.0000
+4186 38300.0000 22016.6667
+4187 38300.0000 22550.0000
+4188 38300.0000 22583.3333
+4189 38300.0000 23116.6667
+4190 38300.0000 23150.0000
+4191 38300.0000 23166.6667
+4192 38300.0000 23266.6667
+4193 38300.0000 23316.6667
+4194 38300.0000 23383.3333
+4195 38300.0000 23500.0000
+4196 38300.0000 23733.3333
+4197 38300.0000 23750.0000
+4198 38300.0000 23900.0000
+4199 38300.0000 24116.6667
+4200 38300.0000 24200.0000
+4201 38300.0000 26016.6667
+4202 38300.0000 26066.6667
+4203 38300.0000 26100.0000
+4204 38300.0000 26116.6667
+4205 38316.6667 20416.6667
+4206 38316.6667 20466.6667
+4207 38316.6667 20550.0000
+4208 38316.6667 20566.6667
+4209 38316.6667 20583.3333
+4210 38316.6667 21816.6667
+4211 38316.6667 21850.0000
+4212 38316.6667 21983.3333
+4213 38316.6667 22583.3333
+4214 38316.6667 22900.0000
+4215 38316.6667 23116.6667
+4216 38316.6667 23183.3333
+4217 38316.6667 23316.6667
+4218 38316.6667 23333.3333
+4219 38316.6667 23450.0000
+4220 38316.6667 23533.3333
+4221 38316.6667 23616.6667
+4222 38316.6667 23633.3333
+4223 38316.6667 23800.0000
+4224 38316.6667 24150.0000
+4225 38316.6667 26050.0000
+4226 38316.6667 26100.0000
+4227 38316.6667 26133.3333
+4228 38333.3333 20550.0000
+4229 38333.3333 21566.6667
+4230 38333.3333 21766.6667
+4231 38333.3333 21850.0000
+4232 38333.3333 21866.6667
+4233 38333.3333 23133.3333
+4234 38333.3333 23316.6667
+4235 38333.3333 23733.3333
+4236 38333.3333 23783.3333
+4237 38333.3333 26000.0000
+4238 38333.3333 26083.3333
+4239 38333.3333 26100.0000
+4240 38333.3333 26116.6667
+4241 38350.0000 20616.6667
+4242 38350.0000 20683.3333
+4243 38350.0000 20716.6667
+4244 38350.0000 21533.3333
+4245 38350.0000 21566.6667
+4246 38350.0000 21600.0000
+4247 38350.0000 21633.3333
+4248 38350.0000 21650.0000
+4249 38350.0000 21700.0000
+4250 38350.0000 21716.6667
+4251 38350.0000 21733.3333
+4252 38350.0000 21750.0000
+4253 38350.0000 22783.3333
+4254 38350.0000 22916.6667
+4255 38350.0000 23016.6667
+4256 38350.0000 23483.3333
+4257 38350.0000 23583.3333
+4258 38350.0000 23666.6667
+4259 38350.0000 24100.0000
+4260 38350.0000 24150.0000
+4261 38350.0000 26083.3333
+4262 38366.6667 20566.6667
+4263 38366.6667 20583.3333
+4264 38366.6667 20600.0000
+4265 38366.6667 20716.6667
+4266 38366.6667 21433.3333
+4267 38366.6667 21533.3333
+4268 38366.6667 21566.6667
+4269 38366.6667 21633.3333
+4270 38366.6667 21666.6667
+4271 38366.6667 21716.6667
+4272 38366.6667 21750.0000
+4273 38366.6667 21766.6667
+4274 38366.6667 21783.3333
+4275 38366.6667 22083.3333
+4276 38366.6667 22133.3333
+4277 38366.6667 22200.0000
+4278 38366.6667 22233.3333
+4279 38366.6667 22250.0000
+4280 38366.6667 22283.3333
+4281 38366.6667 22833.3333
+4282 38366.6667 22933.3333
+4283 38366.6667 22966.6667
+4284 38366.6667 23016.6667
+4285 38366.6667 23066.6667
+4286 38366.6667 23083.3333
+4287 38366.6667 23100.0000
+4288 38366.6667 23450.0000
+4289 38366.6667 24183.3333
+4290 38366.6667 26133.3333
+4291 38383.3333 20533.3333
+4292 38383.3333 20550.0000
+4293 38383.3333 20566.6667
+4294 38383.3333 20583.3333
+4295 38383.3333 20666.6667
+4296 38383.3333 21500.0000
+4297 38383.3333 21533.3333
+4298 38383.3333 21566.6667
+4299 38383.3333 21600.0000
+4300 38383.3333 21633.3333
+4301 38383.3333 21683.3333
+4302 38383.3333 21716.6667
+4303 38383.3333 21800.0000
+4304 38383.3333 21850.0000
+4305 38383.3333 21916.6667
+4306 38383.3333 22116.6667
+4307 38383.3333 22383.3333
+4308 38383.3333 22633.3333
+4309 38383.3333 23000.0000
+4310 38383.3333 23400.0000
+4311 38383.3333 23600.0000
+4312 38383.3333 23633.3333
+4313 38383.3333 24050.0000
+4314 38383.3333 24066.6667
+4315 38383.3333 24083.3333
+4316 38383.3333 24116.6667
+4317 38383.3333 24133.3333
+4318 38383.3333 24166.6667
+4319 38383.3333 26016.6667
+4320 38383.3333 26100.0000
+4321 38400.0000 20550.0000
+4322 38400.0000 20566.6667
+4323 38400.0000 20583.3333
+4324 38400.0000 21266.6667
+4325 38400.0000 21433.3333
+4326 38400.0000 21483.3333
+4327 38400.0000 21533.3333
+4328 38400.0000 21550.0000
+4329 38400.0000 21650.0000
+4330 38400.0000 21733.3333
+4331 38400.0000 21750.0000
+4332 38400.0000 21766.6667
+4333 38400.0000 21783.3333
+4334 38400.0000 21800.0000
+4335 38400.0000 21816.6667
+4336 38400.0000 21833.3333
+4337 38400.0000 21866.6667
+4338 38400.0000 21883.3333
+4339 38400.0000 21900.0000
+4340 38400.0000 22000.0000
+4341 38400.0000 22016.6667
+4342 38400.0000 22050.0000
+4343 38400.0000 22150.0000
+4344 38400.0000 22716.6667
+4345 38400.0000 22933.3333
+4346 38400.0000 22983.3333
+4347 38400.0000 23600.0000
+4348 38400.0000 23616.6667
+4349 38400.0000 23633.3333
+4350 38400.0000 23766.6667
+4351 38400.0000 23800.0000
+4352 38400.0000 23883.3333
+4353 38400.0000 23916.6667
+4354 38400.0000 24050.0000
+4355 38400.0000 24083.3333
+4356 38400.0000 24100.0000
+4357 38400.0000 24133.3333
+4358 38400.0000 24166.6667
+4359 38400.0000 26016.6667
+4360 38416.6667 20550.0000
+4361 38416.6667 20566.6667
+4362 38416.6667 20650.0000
+4363 38416.6667 20666.6667
+4364 38416.6667 21250.0000
+4365 38416.6667 21283.3333
+4366 38416.6667 21316.6667
+4367 38416.6667 21466.6667
+4368 38416.6667 21516.6667
+4369 38416.6667 21566.6667
+4370 38416.6667 21616.6667
+4371 38416.6667 21633.3333
+4372 38416.6667 21750.0000
+4373 38416.6667 21766.6667
+4374 38416.6667 21783.3333
+4375 38416.6667 21816.6667
+4376 38416.6667 21833.3333
+4377 38416.6667 21850.0000
+4378 38416.6667 21866.6667
+4379 38416.6667 21883.3333
+4380 38416.6667 21900.0000
+4381 38416.6667 21933.3333
+4382 38416.6667 21950.0000
+4383 38416.6667 21966.6667
+4384 38416.6667 21983.3333
+4385 38416.6667 22000.0000
+4386 38416.6667 22016.6667
+4387 38416.6667 22050.0000
+4388 38416.6667 22100.0000
+4389 38416.6667 22183.3333
+4390 38416.6667 22216.6667
+4391 38416.6667 22316.6667
+4392 38416.6667 22533.3333
+4393 38416.6667 22816.6667
+4394 38416.6667 22833.3333
+4395 38416.6667 22983.3333
+4396 38416.6667 23000.0000
+4397 38416.6667 23016.6667
+4398 38416.6667 23350.0000
+4399 38416.6667 23516.6667
+4400 38416.6667 23650.0000
+4401 38416.6667 23683.3333
+4402 38416.6667 23816.6667
+4403 38416.6667 23833.3333
+4404 38416.6667 24033.3333
+4405 38416.6667 24100.0000
+4406 38416.6667 24133.3333
+4407 38416.6667 24200.0000
+4408 38416.6667 26133.3333
+4409 38433.3333 20550.0000
+4410 38433.3333 20566.6667
+4411 38433.3333 20583.3333
+4412 38433.3333 21283.3333
+4413 38433.3333 21350.0000
+4414 38433.3333 21416.6667
+4415 38433.3333 21516.6667
+4416 38433.3333 21600.0000
+4417 38433.3333 21633.3333
+4418 38433.3333 21716.6667
+4419 38433.3333 21750.0000
+4420 38433.3333 21766.6667
+4421 38433.3333 21833.3333
+4422 38433.3333 21866.6667
+4423 38433.3333 21950.0000
+4424 38433.3333 21966.6667
+4425 38433.3333 21983.3333
+4426 38433.3333 22066.6667
+4427 38433.3333 22116.6667
+4428 38433.3333 22416.6667
+4429 38433.3333 22450.0000
+4430 38433.3333 22666.6667
+4431 38433.3333 22833.3333
+4432 38433.3333 22883.3333
+4433 38433.3333 22900.0000
+4434 38433.3333 22916.6667
+4435 38433.3333 22966.6667
+4436 38433.3333 22983.3333
+4437 38433.3333 23033.3333
+4438 38433.3333 23300.0000
+4439 38433.3333 23400.0000
+4440 38433.3333 23600.0000
+4441 38433.3333 23633.3333
+4442 38433.3333 23650.0000
+4443 38433.3333 23666.6667
+4444 38433.3333 23683.3333
+4445 38433.3333 23883.3333
+4446 38433.3333 23900.0000
+4447 38433.3333 24033.3333
+4448 38433.3333 24066.6667
+4449 38433.3333 24116.6667
+4450 38433.3333 25966.6667
+4451 38450.0000 20533.3333
+4452 38450.0000 20550.0000
+4453 38450.0000 20566.6667
+4454 38450.0000 20583.3333
+4455 38450.0000 20633.3333
+4456 38450.0000 20650.0000
+4457 38450.0000 20666.6667
+4458 38450.0000 20683.3333
+4459 38450.0000 21116.6667
+4460 38450.0000 21233.3333
+4461 38450.0000 21383.3333
+4462 38450.0000 21400.0000
+4463 38450.0000 21516.6667
+4464 38450.0000 21583.3333
+4465 38450.0000 21600.0000
+4466 38450.0000 21633.3333
+4467 38450.0000 21666.6667
+4468 38450.0000 21683.3333
+4469 38450.0000 21700.0000
+4470 38450.0000 21800.0000
+4471 38450.0000 21816.6667
+4472 38450.0000 21916.6667
+4473 38450.0000 21983.3333
+4474 38450.0000 22000.0000
+4475 38450.0000 22033.3333
+4476 38450.0000 22150.0000
+4477 38450.0000 22233.3333
+4478 38450.0000 22300.0000
+4479 38450.0000 22366.6667
+4480 38450.0000 22816.6667
+4481 38450.0000 22833.3333
+4482 38450.0000 22866.6667
+4483 38450.0000 23000.0000
+4484 38450.0000 23216.6667
+4485 38450.0000 23683.3333
+4486 38450.0000 23816.6667
+4487 38450.0000 24000.0000
+4488 38450.0000 24016.6667
+4489 38450.0000 24083.3333
+4490 38450.0000 24116.6667
+4491 38450.0000 24133.3333
+4492 38450.0000 24150.0000
+4493 38450.0000 24166.6667
+4494 38466.6667 20550.0000
+4495 38466.6667 20566.6667
+4496 38466.6667 20583.3333
+4497 38466.6667 20633.3333
+4498 38466.6667 20650.0000
+4499 38466.6667 21266.6667
+4500 38466.6667 21366.6667
+4501 38466.6667 21500.0000
+4502 38466.6667 21566.6667
+4503 38466.6667 21583.3333
+4504 38466.6667 21600.0000
+4505 38466.6667 21616.6667
+4506 38466.6667 21650.0000
+4507 38466.6667 21700.0000
+4508 38466.6667 21733.3333
+4509 38466.6667 21800.0000
+4510 38466.6667 21816.6667
+4511 38466.6667 21866.6667
+4512 38466.6667 21933.3333
+4513 38466.6667 21950.0000
+4514 38466.6667 22100.0000
+4515 38466.6667 22183.3333
+4516 38466.6667 22466.6667
+4517 38466.6667 22783.3333
+4518 38466.6667 22800.0000
+4519 38466.6667 22866.6667
+4520 38466.6667 22950.0000
+4521 38466.6667 22966.6667
+4522 38466.6667 23000.0000
+4523 38466.6667 23283.3333
+4524 38466.6667 23583.3333
+4525 38466.6667 23600.0000
+4526 38466.6667 23650.0000
+4527 38466.6667 23766.6667
+4528 38466.6667 23966.6667
+4529 38466.6667 24116.6667
+4530 38466.6667 24150.0000
+4531 38466.6667 25916.6667
+4532 38466.6667 25966.6667
+4533 38466.6667 26116.6667
+4534 38483.3333 20666.6667
+4535 38483.3333 21100.0000
+4536 38483.3333 21250.0000
+4537 38483.3333 21283.3333
+4538 38483.3333 21350.0000
+4539 38483.3333 21416.6667
+4540 38483.3333 21450.0000
+4541 38483.3333 21583.3333
+4542 38483.3333 21633.3333
+4543 38483.3333 21650.0000
+4544 38483.3333 21666.6667
+4545 38483.3333 21766.6667
+4546 38483.3333 21833.3333
+4547 38483.3333 21850.0000
+4548 38483.3333 22016.6667
+4549 38483.3333 22033.3333
+4550 38483.3333 22050.0000
+4551 38483.3333 22083.3333
+4552 38483.3333 22166.6667
+4553 38483.3333 22183.3333
+4554 38483.3333 22366.6667
+4555 38483.3333 22400.0000
+4556 38483.3333 22500.0000
+4557 38483.3333 22583.3333
+4558 38483.3333 22883.3333
+4559 38483.3333 22933.3333
+4560 38483.3333 23100.0000
+4561 38483.3333 23233.3333
+4562 38483.3333 23450.0000
+4563 38483.3333 23550.0000
+4564 38483.3333 23750.0000
+4565 38483.3333 23800.0000
+4566 38483.3333 23900.0000
+4567 38483.3333 24116.6667
+4568 38483.3333 24133.3333
+4569 38483.3333 24166.6667
+4570 38483.3333 25916.6667
+4571 38483.3333 26050.0000
+4572 38500.0000 21350.0000
+4573 38500.0000 21383.3333
+4574 38500.0000 21483.3333
+4575 38500.0000 21516.6667
+4576 38500.0000 21550.0000
+4577 38500.0000 21583.3333
+4578 38500.0000 21600.0000
+4579 38500.0000 21616.6667
+4580 38500.0000 21633.3333
+4581 38500.0000 21650.0000
+4582 38500.0000 21666.6667
+4583 38500.0000 21700.0000
+4584 38500.0000 21800.0000
+4585 38500.0000 21833.3333
+4586 38500.0000 21850.0000
+4587 38500.0000 21883.3333
+4588 38500.0000 22133.3333
+4589 38500.0000 22233.3333
+4590 38500.0000 22383.3333
+4591 38500.0000 22800.0000
+4592 38500.0000 22850.0000
+4593 38500.0000 22883.3333
+4594 38500.0000 22933.3333
+4595 38500.0000 22983.3333
+4596 38500.0000 23166.6667
+4597 38500.0000 23266.6667
+4598 38500.0000 23616.6667
+4599 38500.0000 23966.6667
+4600 38500.0000 24016.6667
+4601 38500.0000 24083.3333
+4602 38500.0000 24116.6667
+4603 38500.0000 24133.3333
+4604 38500.0000 25916.6667
+4605 38516.6667 21283.3333
+4606 38516.6667 21383.3333
+4607 38516.6667 21433.3333
+4608 38516.6667 21466.6667
+4609 38516.6667 21533.3333
+4610 38516.6667 21550.0000
+4611 38516.6667 21566.6667
+4612 38516.6667 21666.6667
+4613 38516.6667 21683.3333
+4614 38516.6667 21716.6667
+4615 38516.6667 21766.6667
+4616 38516.6667 21783.3333
+4617 38516.6667 21833.3333
+4618 38516.6667 21866.6667
+4619 38516.6667 21883.3333
+4620 38516.6667 21916.6667
+4621 38516.6667 21950.0000
+4622 38516.6667 21966.6667
+4623 38516.6667 22166.6667
+4624 38516.6667 22383.3333
+4625 38516.6667 22550.0000
+4626 38516.6667 22733.3333
+4627 38516.6667 22783.3333
+4628 38516.6667 22950.0000
+4629 38516.6667 23033.3333
+4630 38516.6667 23633.3333
+4631 38516.6667 23650.0000
+4632 38516.6667 23783.3333
+4633 38516.6667 23850.0000
+4634 38516.6667 23983.3333
+4635 38516.6667 24000.0000
+4636 38516.6667 24033.3333
+4637 38516.6667 24100.0000
+4638 38516.6667 24133.3333
+4639 38516.6667 24150.0000
+4640 38516.6667 24166.6667
+4641 38516.6667 25883.3333
+4642 38516.6667 26216.6667
+4643 38533.3333 21083.3333
+4644 38533.3333 21183.3333
+4645 38533.3333 21216.6667
+4646 38533.3333 21366.6667
+4647 38533.3333 21383.3333
+4648 38533.3333 21400.0000
+4649 38533.3333 21416.6667
+4650 38533.3333 21433.3333
+4651 38533.3333 21450.0000
+4652 38533.3333 21500.0000
+4653 38533.3333 21533.3333
+4654 38533.3333 21550.0000
+4655 38533.3333 21566.6667
+4656 38533.3333 21683.3333
+4657 38533.3333 21700.0000
+4658 38533.3333 21766.6667
+4659 38533.3333 21816.6667
+4660 38533.3333 21833.3333
+4661 38533.3333 21900.0000
+4662 38533.3333 21916.6667
+4663 38533.3333 21933.3333
+4664 38533.3333 21983.3333
+4665 38533.3333 22033.3333
+4666 38533.3333 22100.0000
+4667 38533.3333 22200.0000
+4668 38533.3333 22266.6667
+4669 38533.3333 22383.3333
+4670 38533.3333 22500.0000
+4671 38533.3333 22850.0000
+4672 38533.3333 23016.6667
+4673 38533.3333 23100.0000
+4674 38533.3333 23716.6667
+4675 38533.3333 23816.6667
+4676 38533.3333 23850.0000
+4677 38533.3333 23916.6667
+4678 38533.3333 23933.3333
+4679 38533.3333 23983.3333
+4680 38533.3333 24050.0000
+4681 38533.3333 24066.6667
+4682 38533.3333 24083.3333
+4683 38533.3333 24116.6667
+4684 38533.3333 24133.3333
+4685 38533.3333 25566.6667
+4686 38533.3333 25933.3333
+4687 38533.3333 25950.0000
+4688 38533.3333 26100.0000
+4689 38533.3333 26116.6667
+4690 38550.0000 21233.3333
+4691 38550.0000 21333.3333
+4692 38550.0000 21366.6667
+4693 38550.0000 21383.3333
+4694 38550.0000 21533.3333
+4695 38550.0000 21650.0000
+4696 38550.0000 21666.6667
+4697 38550.0000 21700.0000
+4698 38550.0000 21800.0000
+4699 38550.0000 21816.6667
+4700 38550.0000 21866.6667
+4701 38550.0000 22016.6667
+4702 38550.0000 22066.6667
+4703 38550.0000 22116.6667
+4704 38550.0000 22166.6667
+4705 38550.0000 22416.6667
+4706 38550.0000 22833.3333
+4707 38550.0000 23083.3333
+4708 38550.0000 23783.3333
+4709 38550.0000 23850.0000
+4710 38550.0000 23900.0000
+4711 38550.0000 24000.0000
+4712 38550.0000 24050.0000
+4713 38550.0000 24083.3333
+4714 38550.0000 25850.0000
+4715 38550.0000 25933.3333
+4716 38566.6667 20916.6667
+4717 38566.6667 21100.0000
+4718 38566.6667 21300.0000
+4719 38566.6667 21633.3333
+4720 38566.6667 21650.0000
+4721 38566.6667 21666.6667
+4722 38566.6667 21683.3333
+4723 38566.6667 21700.0000
+4724 38566.6667 21850.0000
+4725 38566.6667 21916.6667
+4726 38566.6667 21966.6667
+4727 38566.6667 22016.6667
+4728 38566.6667 22150.0000
+4729 38566.6667 22700.0000
+4730 38566.6667 22750.0000
+4731 38566.6667 22783.3333
+4732 38566.6667 22866.6667
+4733 38566.6667 23100.0000
+4734 38566.6667 23216.6667
+4735 38566.6667 23283.3333
+4736 38566.6667 23600.0000
+4737 38566.6667 23633.3333
+4738 38566.6667 23766.6667
+4739 38566.6667 23816.6667
+4740 38566.6667 23833.3333
+4741 38566.6667 23850.0000
+4742 38566.6667 24050.0000
+4743 38566.6667 24066.6667
+4744 38566.6667 24083.3333
+4745 38566.6667 25866.6667
+4746 38566.6667 25883.3333
+4747 38566.6667 25916.6667
+4748 38566.6667 25950.0000
+4749 38566.6667 25983.3333
+4750 38566.6667 26033.3333
+4751 38583.3333 20550.0000
+4752 38583.3333 21066.6667
+4753 38583.3333 21150.0000
+4754 38583.3333 21166.6667
+4755 38583.3333 21233.3333
+4756 38583.3333 21383.3333
+4757 38583.3333 21450.0000
+4758 38583.3333 21616.6667
+4759 38583.3333 21633.3333
+4760 38583.3333 21650.0000
+4761 38583.3333 21666.6667
+4762 38583.3333 21683.3333
+4763 38583.3333 21716.6667
+4764 38583.3333 21750.0000
+4765 38583.3333 21833.3333
+4766 38583.3333 21883.3333
+4767 38583.3333 21933.3333
+4768 38583.3333 21983.3333
+4769 38583.3333 22050.0000
+4770 38583.3333 22333.3333
+4771 38583.3333 22416.6667
+4772 38583.3333 22666.6667
+4773 38583.3333 22750.0000
+4774 38583.3333 22800.0000
+4775 38583.3333 22950.0000
+4776 38583.3333 23033.3333
+4777 38583.3333 23550.0000
+4778 38583.3333 23633.3333
+4779 38583.3333 23716.6667
+4780 38583.3333 23766.6667
+4781 38583.3333 23800.0000
+4782 38583.3333 23833.3333
+4783 38583.3333 24050.0000
+4784 38583.3333 24066.6667
+4785 38583.3333 24083.3333
+4786 38583.3333 24100.0000
+4787 38583.3333 24116.6667
+4788 38583.3333 24133.3333
+4789 38583.3333 25916.6667
+4790 38583.3333 25966.6667
+4791 38583.3333 26016.6667
+4792 38600.0000 20883.3333
+4793 38600.0000 21083.3333
+4794 38600.0000 21183.3333
+4795 38600.0000 21316.6667
+4796 38600.0000 21400.0000
+4797 38600.0000 21450.0000
+4798 38600.0000 21483.3333
+4799 38600.0000 21500.0000
+4800 38600.0000 21550.0000
+4801 38600.0000 21566.6667
+4802 38600.0000 21583.3333
+4803 38600.0000 21600.0000
+4804 38600.0000 21650.0000
+4805 38600.0000 21666.6667
+4806 38600.0000 21733.3333
+4807 38600.0000 21800.0000
+4808 38600.0000 21850.0000
+4809 38600.0000 21933.3333
+4810 38600.0000 22050.0000
+4811 38600.0000 22116.6667
+4812 38600.0000 22183.3333
+4813 38600.0000 22500.0000
+4814 38600.0000 22716.6667
+4815 38600.0000 22766.6667
+4816 38600.0000 22850.0000
+4817 38600.0000 23216.6667
+4818 38600.0000 23550.0000
+4819 38600.0000 23666.6667
+4820 38600.0000 23783.3333
+4821 38600.0000 24083.3333
+4822 38600.0000 24100.0000
+4823 38600.0000 24116.6667
+4824 38616.6667 20600.0000
+4825 38616.6667 20666.6667
+4826 38616.6667 20683.3333
+4827 38616.6667 20933.3333
+4828 38616.6667 21216.6667
+4829 38616.6667 21300.0000
+4830 38616.6667 21316.6667
+4831 38616.6667 21383.3333
+4832 38616.6667 21450.0000
+4833 38616.6667 21500.0000
+4834 38616.6667 21516.6667
+4835 38616.6667 21533.3333
+4836 38616.6667 21566.6667
+4837 38616.6667 21600.0000
+4838 38616.6667 21616.6667
+4839 38616.6667 21683.3333
+4840 38616.6667 21700.0000
+4841 38616.6667 21783.3333
+4842 38616.6667 21883.3333
+4843 38616.6667 22200.0000
+4844 38616.6667 22550.0000
+4845 38616.6667 22650.0000
+4846 38616.6667 23116.6667
+4847 38616.6667 23166.6667
+4848 38616.6667 23233.3333
+4849 38616.6667 23533.3333
+4850 38616.6667 23566.6667
+4851 38616.6667 23700.0000
+4852 38616.6667 23733.3333
+4853 38616.6667 23750.0000
+4854 38616.6667 23883.3333
+4855 38616.6667 23950.0000
+4856 38616.6667 24050.0000
+4857 38616.6667 24066.6667
+4858 38616.6667 24083.3333
+4859 38616.6667 24116.6667
+4860 38633.3333 20600.0000
+4861 38633.3333 20633.3333
+4862 38633.3333 20650.0000
+4863 38633.3333 20716.6667
+4864 38633.3333 21150.0000
+4865 38633.3333 21183.3333
+4866 38633.3333 21350.0000
+4867 38633.3333 21366.6667
+4868 38633.3333 21400.0000
+4869 38633.3333 21416.6667
+4870 38633.3333 21433.3333
+4871 38633.3333 21450.0000
+4872 38633.3333 21466.6667
+4873 38633.3333 21483.3333
+4874 38633.3333 21566.6667
+4875 38633.3333 21583.3333
+4876 38633.3333 21616.6667
+4877 38633.3333 21666.6667
+4878 38633.3333 21683.3333
+4879 38633.3333 21700.0000
+4880 38633.3333 21716.6667
+4881 38633.3333 21733.3333
+4882 38633.3333 21800.0000
+4883 38633.3333 21983.3333
+4884 38633.3333 22016.6667
+4885 38633.3333 22100.0000
+4886 38633.3333 22183.3333
+4887 38633.3333 22216.6667
+4888 38633.3333 22500.0000
+4889 38633.3333 22533.3333
+4890 38633.3333 22583.3333
+4891 38633.3333 22733.3333
+4892 38633.3333 22766.6667
+4893 38633.3333 22883.3333
+4894 38633.3333 23083.3333
+4895 38633.3333 23600.0000
+4896 38633.3333 23616.6667
+4897 38633.3333 23633.3333
+4898 38633.3333 23933.3333
+4899 38633.3333 24050.0000
+4900 38633.3333 24066.6667
+4901 38633.3333 24083.3333
+4902 38633.3333 24100.0000
+4903 38633.3333 24133.3333
+4904 38650.0000 20683.3333
+4905 38650.0000 20783.3333
+4906 38650.0000 20933.3333
+4907 38650.0000 21283.3333
+4908 38650.0000 21383.3333
+4909 38650.0000 21416.6667
+4910 38650.0000 21450.0000
+4911 38650.0000 21483.3333
+4912 38650.0000 21533.3333
+4913 38650.0000 21550.0000
+4914 38650.0000 21616.6667
+4915 38650.0000 21650.0000
+4916 38650.0000 21683.3333
+4917 38650.0000 21750.0000
+4918 38650.0000 21766.6667
+4919 38650.0000 21833.3333
+4920 38650.0000 21916.6667
+4921 38650.0000 21966.6667
+4922 38650.0000 22033.3333
+4923 38650.0000 22066.6667
+4924 38650.0000 22416.6667
+4925 38650.0000 22466.6667
+4926 38650.0000 23000.0000
+4927 38650.0000 23166.6667
+4928 38650.0000 23183.3333
+4929 38650.0000 23583.3333
+4930 38650.0000 23900.0000
+4931 38666.6667 20566.6667
+4932 38666.6667 20600.0000
+4933 38666.6667 20650.0000
+4934 38666.6667 20700.0000
+4935 38666.6667 20766.6667
+4936 38666.6667 20783.3333
+4937 38666.6667 20933.3333
+4938 38666.6667 21083.3333
+4939 38666.6667 21150.0000
+4940 38666.6667 21316.6667
+4941 38666.6667 21366.6667
+4942 38666.6667 21383.3333
+4943 38666.6667 21433.3333
+4944 38666.6667 21500.0000
+4945 38666.6667 21516.6667
+4946 38666.6667 21533.3333
+4947 38666.6667 21616.6667
+4948 38666.6667 21633.3333
+4949 38666.6667 21716.6667
+4950 38666.6667 21733.3333
+4951 38666.6667 21816.6667
+4952 38666.6667 21833.3333
+4953 38666.6667 21866.6667
+4954 38666.6667 21900.0000
+4955 38666.6667 22000.0000
+4956 38666.6667 22433.3333
+4957 38666.6667 22566.6667
+4958 38666.6667 22666.6667
+4959 38666.6667 22883.3333
+4960 38666.6667 23083.3333
+4961 38666.6667 23783.3333
+4962 38666.6667 23816.6667
+4963 38683.3333 20583.3333
+4964 38683.3333 20616.6667
+4965 38683.3333 20666.6667
+4966 38683.3333 20683.3333
+4967 38683.3333 20700.0000
+4968 38683.3333 21266.6667
+4969 38683.3333 21366.6667
+4970 38683.3333 21416.6667
+4971 38683.3333 21466.6667
+4972 38683.3333 21483.3333
+4973 38683.3333 21533.3333
+4974 38683.3333 21666.6667
+4975 38683.3333 21750.0000
+4976 38683.3333 21800.0000
+4977 38683.3333 21833.3333
+4978 38683.3333 21866.6667
+4979 38683.3333 21900.0000
+4980 38683.3333 21983.3333
+4981 38683.3333 22200.0000
+4982 38683.3333 22333.3333
+4983 38683.3333 23000.0000
+4984 38683.3333 23583.3333
+4985 38683.3333 23733.3333
+4986 38683.3333 23766.6667
+4987 38683.3333 23783.3333
+4988 38700.0000 20616.6667
+4989 38700.0000 20633.3333
+4990 38700.0000 20683.3333
+4991 38700.0000 20700.0000
+4992 38700.0000 20716.6667
+4993 38700.0000 20933.3333
+4994 38700.0000 20966.6667
+4995 38700.0000 21000.0000
+4996 38700.0000 21033.3333
+4997 38700.0000 21183.3333
+4998 38700.0000 21283.3333
+4999 38700.0000 21333.3333
+5000 38700.0000 21350.0000
+5001 38700.0000 21366.6667
+5002 38700.0000 21450.0000
+5003 38700.0000 21600.0000
+5004 38700.0000 21650.0000
+5005 38700.0000 21700.0000
+5006 38700.0000 21733.3333
+5007 38700.0000 21783.3333
+5008 38700.0000 21933.3333
+5009 38700.0000 22033.3333
+5010 38700.0000 22183.3333
+5011 38700.0000 22250.0000
+5012 38700.0000 22283.3333
+5013 38700.0000 22350.0000
+5014 38700.0000 22416.6667
+5015 38700.0000 22633.3333
+5016 38700.0000 23583.3333
+5017 38716.6667 20583.3333
+5018 38716.6667 20600.0000
+5019 38716.6667 20666.6667
+5020 38716.6667 20683.3333
+5021 38716.6667 20733.3333
+5022 38716.6667 20933.3333
+5023 38716.6667 21083.3333
+5024 38716.6667 21166.6667
+5025 38716.6667 21466.6667
+5026 38716.6667 21516.6667
+5027 38716.6667 21533.3333
+5028 38716.6667 21566.6667
+5029 38716.6667 21650.0000
+5030 38716.6667 21683.3333
+5031 38716.6667 21700.0000
+5032 38716.6667 21800.0000
+5033 38716.6667 21866.6667
+5034 38716.6667 21966.6667
+5035 38716.6667 22366.6667
+5036 38716.6667 22400.0000
+5037 38716.6667 22466.6667
+5038 38716.6667 22483.3333
+5039 38716.6667 22550.0000
+5040 38716.6667 22583.3333
+5041 38716.6667 22700.0000
+5042 38716.6667 22883.3333
+5043 38716.6667 22933.3333
+5044 38716.6667 23050.0000
+5045 38716.6667 23433.3333
+5046 38716.6667 23450.0000
+5047 38716.6667 23733.3333
+5048 38716.6667 23750.0000
+5049 38733.3333 20650.0000
+5050 38733.3333 20666.6667
+5051 38733.3333 20983.3333
+5052 38733.3333 21116.6667
+5053 38733.3333 21350.0000
+5054 38733.3333 21450.0000
+5055 38733.3333 21466.6667
+5056 38733.3333 21516.6667
+5057 38733.3333 21650.0000
+5058 38733.3333 21666.6667
+5059 38733.3333 21700.0000
+5060 38733.3333 21716.6667
+5061 38733.3333 21733.3333
+5062 38733.3333 21916.6667
+5063 38733.3333 21933.3333
+5064 38733.3333 21966.6667
+5065 38733.3333 22000.0000
+5066 38733.3333 22233.3333
+5067 38733.3333 22333.3333
+5068 38733.3333 22400.0000
+5069 38733.3333 22450.0000
+5070 38733.3333 22666.6667
+5071 38733.3333 22733.3333
+5072 38733.3333 22750.0000
+5073 38733.3333 22933.3333
+5074 38733.3333 23333.3333
+5075 38733.3333 23416.6667
+5076 38733.3333 23483.3333
+5077 38750.0000 20600.0000
+5078 38750.0000 20616.6667
+5079 38750.0000 20650.0000
+5080 38750.0000 20683.3333
+5081 38750.0000 20716.6667
+5082 38750.0000 21033.3333
+5083 38750.0000 21066.6667
+5084 38750.0000 21133.3333
+5085 38750.0000 21200.0000
+5086 38750.0000 21400.0000
+5087 38750.0000 21433.3333
+5088 38750.0000 21450.0000
+5089 38750.0000 21516.6667
+5090 38750.0000 21533.3333
+5091 38750.0000 21616.6667
+5092 38750.0000 21666.6667
+5093 38750.0000 21683.3333
+5094 38750.0000 21700.0000
+5095 38750.0000 21750.0000
+5096 38750.0000 21783.3333
+5097 38750.0000 21816.6667
+5098 38750.0000 21850.0000
+5099 38750.0000 21916.6667
+5100 38750.0000 22166.6667
+5101 38750.0000 22216.6667
+5102 38750.0000 22266.6667
+5103 38750.0000 22450.0000
+5104 38750.0000 22616.6667
+5105 38750.0000 22700.0000
+5106 38750.0000 22783.3333
+5107 38750.0000 22950.0000
+5108 38750.0000 23033.3333
+5109 38750.0000 23400.0000
+5110 38750.0000 23433.3333
+5111 38750.0000 23583.3333
+5112 38750.0000 23666.6667
+5113 38750.0000 23733.3333
+5114 38766.6667 20633.3333
+5115 38766.6667 20650.0000
+5116 38766.6667 20716.6667
+5117 38766.6667 20883.3333
+5118 38766.6667 20983.3333
+5119 38766.6667 21400.0000
+5120 38766.6667 21416.6667
+5121 38766.6667 21433.3333
+5122 38766.6667 21483.3333
+5123 38766.6667 21583.3333
+5124 38766.6667 21616.6667
+5125 38766.6667 21700.0000
+5126 38766.6667 21750.0000
+5127 38766.6667 21783.3333
+5128 38766.6667 21800.0000
+5129 38766.6667 21883.3333
+5130 38766.6667 22133.3333
+5131 38766.6667 22366.6667
+5132 38766.6667 22400.0000
+5133 38766.6667 22450.0000
+5134 38766.6667 22616.6667
+5135 38766.6667 22650.0000
+5136 38766.6667 22850.0000
+5137 38766.6667 22900.0000
+5138 38766.6667 23316.6667
+5139 38766.6667 23433.3333
+5140 38766.6667 23550.0000
+5141 38766.6667 23700.0000
+5142 38783.3333 20616.6667
+5143 38783.3333 20650.0000
+5144 38783.3333 20666.6667
+5145 38783.3333 20700.0000
+5146 38783.3333 20833.3333
+5147 38783.3333 20883.3333
+5148 38783.3333 20900.0000
+5149 38783.3333 21033.3333
+5150 38783.3333 21116.6667
+5151 38783.3333 21283.3333
+5152 38783.3333 21433.3333
+5153 38783.3333 21450.0000
+5154 38783.3333 21483.3333
+5155 38783.3333 21533.3333
+5156 38783.3333 21616.6667
+5157 38783.3333 21633.3333
+5158 38783.3333 21683.3333
+5159 38783.3333 21716.6667
+5160 38783.3333 21866.6667
+5161 38783.3333 22083.3333
+5162 38783.3333 22366.6667
+5163 38783.3333 22416.6667
+5164 38783.3333 22583.3333
+5165 38783.3333 22783.3333
+5166 38783.3333 23266.6667
+5167 38783.3333 23300.0000
+5168 38783.3333 23333.3333
+5169 38783.3333 23400.0000
+5170 38783.3333 23433.3333
+5171 38783.3333 23500.0000
+5172 38800.0000 20716.6667
+5173 38800.0000 20766.6667
+5174 38800.0000 21166.6667
+5175 38800.0000 21366.6667
+5176 38800.0000 21450.0000
+5177 38800.0000 21466.6667
+5178 38800.0000 21516.6667
+5179 38800.0000 21583.3333
+5180 38800.0000 21616.6667
+5181 38800.0000 21633.3333
+5182 38800.0000 21650.0000
+5183 38800.0000 21716.6667
+5184 38800.0000 21733.3333
+5185 38800.0000 21800.0000
+5186 38800.0000 22050.0000
+5187 38800.0000 22116.6667
+5188 38800.0000 22200.0000
+5189 38800.0000 22383.3333
+5190 38800.0000 22416.6667
+5191 38800.0000 22450.0000
+5192 38800.0000 22466.6667
+5193 38800.0000 22500.0000
+5194 38800.0000 22533.3333
+5195 38800.0000 22550.0000
+5196 38800.0000 22700.0000
+5197 38800.0000 22716.6667
+5198 38800.0000 23350.0000
+5199 38800.0000 23433.3333
+5200 38800.0000 23483.3333
+5201 38800.0000 23500.0000
+5202 38800.0000 23516.6667
+5203 38800.0000 24583.3333
+5204 38816.6667 20650.0000
+5205 38816.6667 20683.3333
+5206 38816.6667 20716.6667
+5207 38816.6667 20750.0000
+5208 38816.6667 20833.3333
+5209 38816.6667 20916.6667
+5210 38816.6667 21016.6667
+5211 38816.6667 21233.3333
+5212 38816.6667 21333.3333
+5213 38816.6667 21366.6667
+5214 38816.6667 21383.3333
+5215 38816.6667 21400.0000
+5216 38816.6667 21433.3333
+5217 38816.6667 21466.6667
+5218 38816.6667 21500.0000
+5219 38816.6667 21616.6667
+5220 38816.6667 22000.0000
+5221 38816.6667 22016.6667
+5222 38816.6667 22166.6667
+5223 38816.6667 22433.3333
+5224 38816.6667 22600.0000
+5225 38816.6667 22650.0000
+5226 38816.6667 22683.3333
+5227 38816.6667 22733.3333
+5228 38816.6667 23233.3333
+5229 38816.6667 23250.0000
+5230 38816.6667 23266.6667
+5231 38816.6667 23366.6667
+5232 38816.6667 23416.6667
+5233 38816.6667 23450.0000
+5234 38833.3333 20683.3333
+5235 38833.3333 20700.0000
+5236 38833.3333 20750.0000
+5237 38833.3333 20900.0000
+5238 38833.3333 21000.0000
+5239 38833.3333 21066.6667
+5240 38833.3333 21183.3333
+5241 38833.3333 21250.0000
+5242 38833.3333 21416.6667
+5243 38833.3333 21466.6667
+5244 38833.3333 21516.6667
+5245 38833.3333 21533.3333
+5246 38833.3333 21583.3333
+5247 38833.3333 21600.0000
+5248 38833.3333 21616.6667
+5249 38833.3333 21633.3333
+5250 38833.3333 21716.6667
+5251 38833.3333 21733.3333
+5252 38833.3333 21800.0000
+5253 38833.3333 21966.6667
+5254 38833.3333 22050.0000
+5255 38833.3333 22083.3333
+5256 38833.3333 22166.6667
+5257 38833.3333 22400.0000
+5258 38833.3333 22416.6667
+5259 38833.3333 22450.0000
+5260 38833.3333 22883.3333
+5261 38833.3333 23250.0000
+5262 38833.3333 23283.3333
+5263 38833.3333 23333.3333
+5264 38833.3333 23366.6667
+5265 38833.3333 23400.0000
+5266 38833.3333 23466.6667
+5267 38833.3333 24533.3333
+5268 38850.0000 20950.0000
+5269 38850.0000 21333.3333
+5270 38850.0000 21383.3333
+5271 38850.0000 21450.0000
+5272 38850.0000 21466.6667
+5273 38850.0000 21516.6667
+5274 38850.0000 21633.3333
+5275 38850.0000 21916.6667
+5276 38850.0000 21933.3333
+5277 38850.0000 21966.6667
+5278 38850.0000 22183.3333
+5279 38850.0000 22216.6667
+5280 38850.0000 22366.6667
+5281 38850.0000 22383.3333
+5282 38850.0000 22433.3333
+5283 38850.0000 22466.6667
+5284 38850.0000 22866.6667
+5285 38850.0000 22900.0000
+5286 38850.0000 23050.0000
+5287 38850.0000 23066.6667
+5288 38850.0000 23100.0000
+5289 38850.0000 23116.6667
+5290 38850.0000 23133.3333
+5291 38850.0000 23250.0000
+5292 38850.0000 23283.3333
+5293 38850.0000 23300.0000
+5294 38850.0000 23400.0000
+5295 38866.6667 20800.0000
+5296 38866.6667 20983.3333
+5297 38866.6667 21000.0000
+5298 38866.6667 21016.6667
+5299 38866.6667 21033.3333
+5300 38866.6667 21066.6667
+5301 38866.6667 21166.6667
+5302 38866.6667 21283.3333
+5303 38866.6667 21350.0000
+5304 38866.6667 21366.6667
+5305 38866.6667 21500.0000
+5306 38866.6667 21516.6667
+5307 38866.6667 21566.6667
+5308 38866.6667 21583.3333
+5309 38866.6667 21616.6667
+5310 38866.6667 21633.3333
+5311 38866.6667 21666.6667
+5312 38866.6667 21683.3333
+5313 38866.6667 21700.0000
+5314 38866.6667 21733.3333
+5315 38866.6667 21750.0000
+5316 38866.6667 21766.6667
+5317 38866.6667 21783.3333
+5318 38866.6667 21966.6667
+5319 38866.6667 22033.3333
+5320 38866.6667 22133.3333
+5321 38866.6667 22200.0000
+5322 38866.6667 22233.3333
+5323 38866.6667 22350.0000
+5324 38866.6667 22750.0000
+5325 38866.6667 22966.6667
+5326 38866.6667 23216.6667
+5327 38866.6667 23233.3333
+5328 38866.6667 23366.6667
+5329 38866.6667 23400.0000
+5330 38883.3333 21200.0000
+5331 38883.3333 21550.0000
+5332 38883.3333 21566.6667
+5333 38883.3333 21600.0000
+5334 38883.3333 21650.0000
+5335 38883.3333 21700.0000
+5336 38883.3333 21750.0000
+5337 38883.3333 21800.0000
+5338 38883.3333 21833.3333
+5339 38883.3333 21966.6667
+5340 38883.3333 22050.0000
+5341 38883.3333 22100.0000
+5342 38883.3333 22116.6667
+5343 38883.3333 22200.0000
+5344 38883.3333 22216.6667
+5345 38883.3333 22250.0000
+5346 38883.3333 22266.6667
+5347 38883.3333 22316.6667
+5348 38883.3333 22400.0000
+5349 38883.3333 22416.6667
+5350 38883.3333 22433.3333
+5351 38883.3333 22466.6667
+5352 38883.3333 22483.3333
+5353 38883.3333 22716.6667
+5354 38883.3333 22783.3333
+5355 38883.3333 22816.6667
+5356 38883.3333 23050.0000
+5357 38883.3333 23166.6667
+5358 38900.0000 21100.0000
+5359 38900.0000 21316.6667
+5360 38900.0000 21333.3333
+5361 38900.0000 21450.0000
+5362 38900.0000 21566.6667
+5363 38900.0000 21583.3333
+5364 38900.0000 21600.0000
+5365 38900.0000 21633.3333
+5366 38900.0000 21716.6667
+5367 38900.0000 21766.6667
+5368 38900.0000 21866.6667
+5369 38900.0000 22033.3333
+5370 38900.0000 22050.0000
+5371 38900.0000 22066.6667
+5372 38900.0000 22100.0000
+5373 38900.0000 22116.6667
+5374 38900.0000 22166.6667
+5375 38900.0000 22216.6667
+5376 38900.0000 22233.3333
+5377 38900.0000 22283.3333
+5378 38900.0000 22333.3333
+5379 38900.0000 22366.6667
+5380 38900.0000 22433.3333
+5381 38900.0000 22583.3333
+5382 38900.0000 22733.3333
+5383 38900.0000 23033.3333
+5384 38900.0000 23050.0000
+5385 38900.0000 23066.6667
+5386 38900.0000 23133.3333
+5387 38900.0000 23166.6667
+5388 38900.0000 23183.3333
+5389 38900.0000 23216.6667
+5390 38900.0000 23266.6667
+5391 38900.0000 23333.3333
+5392 38900.0000 23350.0000
+5393 38900.0000 23400.0000
+5394 38904.1667 24563.0556
+5395 38916.6667 20883.3333
+5396 38916.6667 20950.0000
+5397 38916.6667 21200.0000
+5398 38916.6667 21216.6667
+5399 38916.6667 21266.6667
+5400 38916.6667 21483.3333
+5401 38916.6667 21633.3333
+5402 38916.6667 21666.6667
+5403 38916.6667 21683.3333
+5404 38916.6667 21783.3333
+5405 38916.6667 21916.6667
+5406 38916.6667 22000.0000
+5407 38916.6667 22166.6667
+5408 38916.6667 22216.6667
+5409 38916.6667 22233.3333
+5410 38916.6667 22300.0000
+5411 38916.6667 22550.0000
+5412 38916.6667 22616.6667
+5413 38916.6667 22650.0000
+5414 38916.6667 22700.0000
+5415 38916.6667 22800.0000
+5416 38916.6667 23116.6667
+5417 38916.6667 23183.3333
+5418 38916.6667 23200.0000
+5419 38916.6667 23216.6667
+5420 38933.3333 20850.0000
+5421 38933.3333 21150.0000
+5422 38933.3333 21400.0000
+5423 38933.3333 21433.3333
+5424 38933.3333 21600.0000
+5425 38933.3333 21700.0000
+5426 38933.3333 21716.6667
+5427 38933.3333 21916.6667
+5428 38933.3333 21983.3333
+5429 38933.3333 22016.6667
+5430 38933.3333 22033.3333
+5431 38933.3333 22116.6667
+5432 38933.3333 22250.0000
+5433 38933.3333 22350.0000
+5434 38933.3333 22400.0000
+5435 38933.3333 22416.6667
+5436 38933.3333 22733.3333
+5437 38933.3333 22783.3333
+5438 38933.3333 23066.6667
+5439 38933.3333 23150.0000
+5440 38933.3333 23166.6667
+5441 38933.3333 23283.3333
+5442 38933.3333 23366.6667
+5443 38933.3333 23416.6667
+5444 38950.0000 20733.3333
+5445 38950.0000 20750.0000
+5446 38950.0000 21183.3333
+5447 38950.0000 21200.0000
+5448 38950.0000 21416.6667
+5449 38950.0000 21516.6667
+5450 38950.0000 21600.0000
+5451 38950.0000 21650.0000
+5452 38950.0000 21666.6667
+5453 38950.0000 21883.3333
+5454 38950.0000 21966.6667
+5455 38950.0000 22050.0000
+5456 38950.0000 22150.0000
+5457 38950.0000 22200.0000
+5458 38950.0000 22216.6667
+5459 38950.0000 22316.6667
+5460 38950.0000 22516.6667
+5461 38950.0000 22633.3333
+5462 38950.0000 22833.3333
+5463 38950.0000 22916.6667
+5464 38950.0000 22966.6667
+5465 38950.0000 23100.0000
+5466 38950.0000 23150.0000
+5467 38950.0000 23183.3333
+5468 38950.0000 23266.6667
+5469 38962.5000 21150.0000
+5470 38966.6667 20783.3333
+5471 38966.6667 21166.6667
+5472 38966.6667 21183.3333
+5473 38966.6667 21200.0000
+5474 38966.6667 21216.6667
+5475 38966.6667 21283.3333
+5476 38966.6667 21316.6667
+5477 38966.6667 21333.3333
+5478 38966.6667 21450.0000
+5479 38966.6667 21483.3333
+5480 38966.6667 21566.6667
+5481 38966.6667 21616.6667
+5482 38966.6667 21716.6667
+5483 38966.6667 21866.6667
+5484 38966.6667 21966.6667
+5485 38966.6667 22000.0000
+5486 38966.6667 22100.0000
+5487 38966.6667 22116.6667
+5488 38966.6667 22166.6667
+5489 38966.6667 22200.0000
+5490 38966.6667 22450.0000
+5491 38966.6667 22500.0000
+5492 38966.6667 22800.0000
+5493 38966.6667 22900.0000
+5494 38966.6667 23150.0000
+5495 38966.6667 23166.6667
+5496 38966.6667 23233.3333
+5497 38966.6667 23300.0000
+5498 38966.6667 23350.0000
+5499 38976.3889 26368.3333
+5500 38983.3333 20783.3333
+5501 38983.3333 21300.0000
+5502 38983.3333 21350.0000
+5503 38983.3333 21366.6667
+5504 38983.3333 21383.3333
+5505 38983.3333 21400.0000
+5506 38983.3333 21433.3333
+5507 38983.3333 21616.6667
+5508 38983.3333 21683.3333
+5509 38983.3333 21816.6667
+5510 38983.3333 21900.0000
+5511 38983.3333 22000.0000
+5512 38983.3333 22566.6667
+5513 38983.3333 22850.0000
+5514 38983.3333 23233.3333
+5515 38983.3333 23316.6667
+5516 38983.3333 26383.3333
+5517 38983.3333 26400.0000
+5518 38988.3333 26311.3889
+5519 39000.0000 20700.0000
+5520 39000.0000 21150.0000
+5521 39000.0000 21166.6667
+5522 39000.0000 21200.0000
+5523 39000.0000 21250.0000
+5524 39000.0000 21300.0000
+5525 39000.0000 21383.3333
+5526 39000.0000 21466.6667
+5527 39000.0000 21600.0000
+5528 39000.0000 21616.6667
+5529 39000.0000 21633.3333
+5530 39000.0000 21716.6667
+5531 39000.0000 21733.3333
+5532 39000.0000 21800.0000
+5533 39000.0000 21850.0000
+5534 39000.0000 21916.6667
+5535 39000.0000 21933.3333
+5536 39000.0000 22000.0000
+5537 39000.0000 22116.6667
+5538 39000.0000 22216.6667
+5539 39000.0000 22266.6667
+5540 39000.0000 22350.0000
+5541 39000.0000 22933.3333
+5542 39000.0000 22950.0000
+5543 39000.0000 23116.6667
+5544 39000.0000 23200.0000
+5545 39000.0000 23250.0000
+5546 39000.0000 23333.3333
+5547 39000.0000 26316.6667
+5548 39016.6667 20916.6667
+5549 39016.6667 21200.0000
+5550 39016.6667 21266.6667
+5551 39016.6667 21316.6667
+5552 39016.6667 21383.3333
+5553 39016.6667 21400.0000
+5554 39016.6667 21550.0000
+5555 39016.6667 21683.3333
+5556 39016.6667 21700.0000
+5557 39016.6667 21766.6667
+5558 39016.6667 21783.3333
+5559 39016.6667 21816.6667
+5560 39016.6667 21900.0000
+5561 39016.6667 22133.3333
+5562 39016.6667 22250.0000
+5563 39016.6667 22616.6667
+5564 39016.6667 22850.0000
+5565 39016.6667 23033.3333
+5566 39016.6667 23233.3333
+5567 39016.6667 23250.0000
+5568 39016.6667 23300.0000
+5569 39019.1667 26365.8333
+5570 39026.3889 26307.7778
+5571 39028.8889 26321.1111
+5572 39029.7222 26448.3333
+5573 39033.3333 20733.3333
+5574 39033.3333 20750.0000
+5575 39033.3333 20866.6667
+5576 39033.3333 21083.3333
+5577 39033.3333 21150.0000
+5578 39033.3333 21300.0000
+5579 39033.3333 21316.6667
+5580 39033.3333 21450.0000
+5581 39033.3333 21583.3333
+5582 39033.3333 21666.6667
+5583 39033.3333 21700.0000
+5584 39033.3333 21733.3333
+5585 39033.3333 21816.6667
+5586 39033.3333 22066.6667
+5587 39033.3333 22116.6667
+5588 39033.3333 22283.3333
+5589 39033.3333 22333.3333
+5590 39033.3333 22400.0000
+5591 39033.3333 22416.6667
+5592 39033.3333 22516.6667
+5593 39033.3333 22800.0000
+5594 39033.3333 22950.0000
+5595 39033.3333 22966.6667
+5596 39033.3333 26316.6667
+5597 39036.3889 26444.4444
+5598 39039.4444 26201.1111
+5599 39039.4444 26454.7222
+5600 39045.5556 26454.4444
+5601 39046.3889 26533.0556
+5602 39048.3333 26497.2222
+5603 39050.0000 21033.3333
+5604 39050.0000 21116.6667
+5605 39050.0000 21150.0000
+5606 39050.0000 21166.6667
+5607 39050.0000 21216.6667
+5608 39050.0000 21250.0000
+5609 39050.0000 21266.6667
+5610 39050.0000 21283.3333
+5611 39050.0000 21300.0000
+5612 39050.0000 21366.6667
+5613 39050.0000 21450.0000
+5614 39050.0000 21466.6667
+5615 39050.0000 21533.3333
+5616 39050.0000 21566.6667
+5617 39050.0000 21583.3333
+5618 39050.0000 21633.3333
+5619 39050.0000 21750.0000
+5620 39050.0000 22316.6667
+5621 39050.0000 22450.0000
+5622 39050.0000 22950.0000
+5623 39050.0000 26266.6667
+5624 39050.0000 26316.6667
+5625 39055.8333 26451.1111
+5626 39056.9444 26545.0000
+5627 39066.6667 20700.0000
+5628 39066.6667 20750.0000
+5629 39066.6667 20933.3333
+5630 39066.6667 21016.6667
+5631 39066.6667 21033.3333
+5632 39066.6667 21050.0000
+5633 39066.6667 21100.0000
+5634 39066.6667 21116.6667
+5635 39066.6667 21150.0000
+5636 39066.6667 21183.3333
+5637 39066.6667 21216.6667
+5638 39066.6667 21233.3333
+5639 39066.6667 21266.6667
+5640 39066.6667 21283.3333
+5641 39066.6667 21400.0000
+5642 39066.6667 21450.0000
+5643 39066.6667 21466.6667
+5644 39066.6667 21483.3333
+5645 39066.6667 21516.6667
+5646 39066.6667 21533.3333
+5647 39066.6667 21550.0000
+5648 39066.6667 21633.3333
+5649 39066.6667 21683.3333
+5650 39066.6667 21733.3333
+5651 39066.6667 21800.0000
+5652 39066.6667 21883.3333
+5653 39066.6667 21983.3333
+5654 39066.6667 22066.6667
+5655 39066.6667 22116.6667
+5656 39066.6667 22183.3333
+5657 39066.6667 22483.3333
+5658 39066.6667 22550.0000
+5659 39066.6667 22800.0000
+5660 39066.6667 26566.6667
+5661 39066.6667 26583.3333
+5662 39081.1111 26183.3333
+5663 39083.3333 20716.6667
+5664 39083.3333 20750.0000
+5665 39083.3333 20866.6667
+5666 39083.3333 20916.6667
+5667 39083.3333 20933.3333
+5668 39083.3333 20950.0000
+5669 39083.3333 21016.6667
+5670 39083.3333 21050.0000
+5671 39083.3333 21083.3333
+5672 39083.3333 21100.0000
+5673 39083.3333 21150.0000
+5674 39083.3333 21200.0000
+5675 39083.3333 21250.0000
+5676 39083.3333 21266.6667
+5677 39083.3333 21283.3333
+5678 39083.3333 21383.3333
+5679 39083.3333 21433.3333
+5680 39083.3333 21483.3333
+5681 39083.3333 21500.0000
+5682 39083.3333 21566.6667
+5683 39083.3333 21583.3333
+5684 39083.3333 21633.3333
+5685 39083.3333 21650.0000
+5686 39083.3333 21833.3333
+5687 39083.3333 22150.0000
+5688 39083.3333 22316.6667
+5689 39083.3333 22350.0000
+5690 39083.3333 22416.6667
+5691 39083.3333 22783.3333
+5692 39083.3333 22866.6667
+5693 39083.3333 26433.3333
+5694 39083.3333 26550.0000
+5695 39083.3333 26566.6667
+5696 39085.0000 26370.0000
+5697 39100.0000 20700.0000
+5698 39100.0000 20883.3333
+5699 39100.0000 20950.0000
+5700 39100.0000 20983.3333
+5701 39100.0000 21000.0000
+5702 39100.0000 21016.6667
+5703 39100.0000 21083.3333
+5704 39100.0000 21100.0000
+5705 39100.0000 21150.0000
+5706 39100.0000 21233.3333
+5707 39100.0000 21266.6667
+5708 39100.0000 21283.3333
+5709 39100.0000 21433.3333
+5710 39100.0000 21500.0000
+5711 39100.0000 21516.6667
+5712 39100.0000 21666.6667
+5713 39100.0000 21783.3333
+5714 39100.0000 21816.6667
+5715 39100.0000 21850.0000
+5716 39100.0000 21866.6667
+5717 39100.0000 21983.3333
+5718 39100.0000 22200.0000
+5719 39100.0000 22233.3333
+5720 39100.0000 22266.6667
+5721 39100.0000 22350.0000
+5722 39100.0000 22416.6667
+5723 39100.0000 22716.6667
+5724 39100.0000 22866.6667
+5725 39100.0000 22900.0000
+5726 39100.0000 23066.6667
+5727 39100.0000 23083.3333
+5728 39100.0000 26166.6667
+5729 39100.0000 26383.3333
+5730 39100.0000 26433.3333
+5731 39100.0000 26516.6667
+5732 39100.0000 26550.0000
+5733 39102.5000 26552.5000
+5734 39103.8889 26241.3889
+5735 39105.0000 26440.2778
+5736 39105.5556 20637.7778
+5737 39105.8333 26218.6111
+5738 39110.5556 26411.1111
+5739 39116.6667 20900.0000
+5740 39116.6667 21016.6667
+5741 39116.6667 21050.0000
+5742 39116.6667 21083.3333
+5743 39116.6667 21133.3333
+5744 39116.6667 21150.0000
+5745 39116.6667 21200.0000
+5746 39116.6667 21216.6667
+5747 39116.6667 21233.3333
+5748 39116.6667 21250.0000
+5749 39116.6667 21416.6667
+5750 39116.6667 21466.6667
+5751 39116.6667 21516.6667
+5752 39116.6667 21583.3333
+5753 39116.6667 21633.3333
+5754 39116.6667 22050.0000
+5755 39116.6667 22100.0000
+5756 39116.6667 22200.0000
+5757 39116.6667 22450.0000
+5758 39116.6667 22466.6667
+5759 39116.6667 23100.0000
+5760 39116.6667 23733.3333
+5761 39116.6667 26413.0556
+5762 39132.7778 20631.3889
+5763 39133.3333 20600.0000
+5764 39133.3333 20633.3333
+5765 39133.3333 20666.6667
+5766 39133.3333 20816.6667
+5767 39133.3333 20916.6667
+5768 39133.3333 20933.3333
+5769 39133.3333 20950.0000
+5770 39133.3333 20983.3333
+5771 39133.3333 21050.0000
+5772 39133.3333 21066.6667
+5773 39133.3333 21116.6667
+5774 39133.3333 21200.0000
+5775 39133.3333 21216.6667
+5776 39133.3333 21250.0000
+5777 39133.3333 21416.6667
+5778 39133.3333 21450.0000
+5779 39133.3333 21483.3333
+5780 39133.3333 21500.0000
+5781 39133.3333 21516.6667
+5782 39133.3333 21566.6667
+5783 39133.3333 21650.0000
+5784 39133.3333 21700.0000
+5785 39133.3333 21783.3333
+5786 39133.3333 21800.0000
+5787 39133.3333 21816.6667
+5788 39133.3333 21950.0000
+5789 39133.3333 22016.6667
+5790 39133.3333 22116.6667
+5791 39133.3333 22150.0000
+5792 39133.3333 22300.0000
+5793 39133.3333 22350.0000
+5794 39133.3333 22383.3333
+5795 39133.3333 23166.6667
+5796 39133.3333 23266.6667
+5797 39133.3333 25933.3333
+5798 39133.3333 26000.0000
+5799 39133.3333 26400.0000
+5800 39133.3333 26416.6667
+5801 39133.3333 26516.6667
+5802 39146.1111 26529.7222
+5803 39148.0556 26514.4444
+5804 39150.0000 20233.3333
+5805 39150.0000 20583.3333
+5806 39150.0000 20666.6667
+5807 39150.0000 20700.0000
+5808 39150.0000 20816.6667
+5809 39150.0000 20866.6667
+5810 39150.0000 20933.3333
+5811 39150.0000 20983.3333
+5812 39150.0000 21116.6667
+5813 39150.0000 21133.3333
+5814 39150.0000 21150.0000
+5815 39150.0000 21183.3333
+5816 39150.0000 21200.0000
+5817 39150.0000 21233.3333
+5818 39150.0000 21250.0000
+5819 39150.0000 21266.6667
+5820 39150.0000 21283.3333
+5821 39150.0000 21383.3333
+5822 39150.0000 21400.0000
+5823 39150.0000 21433.3333
+5824 39150.0000 21450.0000
+5825 39150.0000 21483.3333
+5826 39150.0000 21616.6667
+5827 39150.0000 21650.0000
+5828 39150.0000 21666.6667
+5829 39150.0000 21783.3333
+5830 39150.0000 21833.3333
+5831 39150.0000 21866.6667
+5832 39150.0000 22183.3333
+5833 39150.0000 22250.0000
+5834 39150.0000 22283.3333
+5835 39150.0000 22300.0000
+5836 39150.0000 22366.6667
+5837 39150.0000 22566.6667
+5838 39150.0000 22683.3333
+5839 39150.0000 22716.6667
+5840 39150.0000 22750.0000
+5841 39150.0000 22766.6667
+5842 39150.0000 23083.3333
+5843 39150.0000 23200.0000
+5844 39150.0000 23850.0000
+5845 39150.0000 23866.6667
+5846 39156.6667 26521.6667
+5847 39166.6667 20183.3333
+5848 39166.6667 20566.6667
+5849 39166.6667 20600.0000
+5850 39166.6667 20716.6667
+5851 39166.6667 20750.0000
+5852 39166.6667 20933.3333
+5853 39166.6667 20950.0000
+5854 39166.6667 21000.0000
+5855 39166.6667 21033.3333
+5856 39166.6667 21116.6667
+5857 39166.6667 21133.3333
+5858 39166.6667 21166.6667
+5859 39166.6667 21183.3333
+5860 39166.6667 21200.0000
+5861 39166.6667 21216.6667
+5862 39166.6667 21266.6667
+5863 39166.6667 21433.3333
+5864 39166.6667 21466.6667
+5865 39166.6667 21516.6667
+5866 39166.6667 21700.0000
+5867 39166.6667 21766.6667
+5868 39166.6667 21816.6667
+5869 39166.6667 21833.3333
+5870 39166.6667 22166.6667
+5871 39166.6667 22416.6667
+5872 39166.6667 22466.6667
+5873 39166.6667 22516.6667
+5874 39166.6667 22600.0000
+5875 39166.6667 22616.6667
+5876 39166.6667 22633.3333
+5877 39166.6667 22650.0000
+5878 39166.6667 22783.3333
+5879 39166.6667 22850.0000
+5880 39166.6667 22883.3333
+5881 39166.6667 23216.6667
+5882 39166.6667 23283.3333
+5883 39166.6667 23350.0000
+5884 39166.6667 23483.3333
+5885 39166.6667 23616.6667
+5886 39166.6667 25933.3333
+5887 39166.6667 26050.0000
+5888 39166.6667 26066.6667
+5889 39166.6667 26133.3333
+5890 39166.6667 26500.0000
+5891 39180.5556 26486.3889
+5892 39183.3333 20166.6667
+5893 39183.3333 20183.3333
+5894 39183.3333 20200.0000
+5895 39183.3333 20633.3333
+5896 39183.3333 20716.6667
+5897 39183.3333 20783.3333
+5898 39183.3333 20983.3333
+5899 39183.3333 21083.3333
+5900 39183.3333 21150.0000
+5901 39183.3333 21183.3333
+5902 39183.3333 21333.3333
+5903 39183.3333 21383.3333
+5904 39183.3333 21416.6667
+5905 39183.3333 21433.3333
+5906 39183.3333 21450.0000
+5907 39183.3333 21466.6667
+5908 39183.3333 21483.3333
+5909 39183.3333 21500.0000
+5910 39183.3333 21616.6667
+5911 39183.3333 21650.0000
+5912 39183.3333 21683.3333
+5913 39183.3333 21733.3333
+5914 39183.3333 21766.6667
+5915 39183.3333 21783.3333
+5916 39183.3333 21866.6667
+5917 39183.3333 21966.6667
+5918 39183.3333 22133.3333
+5919 39183.3333 22383.3333
+5920 39183.3333 22600.0000
+5921 39183.3333 22683.3333
+5922 39183.3333 22766.6667
+5923 39183.3333 23216.6667
+5924 39183.3333 23250.0000
+5925 39183.3333 23283.3333
+5926 39183.3333 23333.3333
+5927 39183.3333 23616.6667
+5928 39183.3333 26416.6667
+5929 39183.8889 26406.3889
+5930 39197.2222 20530.2778
+5931 39199.4444 20184.4444
+5932 39200.0000 20166.6667
+5933 39200.0000 20183.3333
+5934 39200.0000 20566.6667
+5935 39200.0000 20616.6667
+5936 39200.0000 20650.0000
+5937 39200.0000 20666.6667
+5938 39200.0000 20733.3333
+5939 39200.0000 20883.3333
+5940 39200.0000 20933.3333
+5941 39200.0000 20983.3333
+5942 39200.0000 21083.3333
+5943 39200.0000 21150.0000
+5944 39200.0000 21166.6667
+5945 39200.0000 21216.6667
+5946 39200.0000 21350.0000
+5947 39200.0000 21400.0000
+5948 39200.0000 21416.6667
+5949 39200.0000 21566.6667
+5950 39200.0000 21616.6667
+5951 39200.0000 21650.0000
+5952 39200.0000 21683.3333
+5953 39200.0000 21750.0000
+5954 39200.0000 21933.3333
+5955 39200.0000 22083.3333
+5956 39200.0000 22100.0000
+5957 39200.0000 22250.0000
+5958 39200.0000 22316.6667
+5959 39200.0000 22333.3333
+5960 39200.0000 22450.0000
+5961 39200.0000 22483.3333
+5962 39200.0000 22516.6667
+5963 39200.0000 22583.3333
+5964 39200.0000 22733.3333
+5965 39200.0000 22750.0000
+5966 39200.0000 23216.6667
+5967 39200.0000 23333.3333
+5968 39200.0000 23916.6667
+5969 39200.0000 23966.6667
+5970 39200.0000 26016.6667
+5971 39206.6667 26212.5000
+5972 39210.8333 26461.3889
+5973 39216.6667 20116.6667
+5974 39216.6667 20133.3333
+5975 39216.6667 20150.0000
+5976 39216.6667 20166.6667
+5977 39216.6667 20500.0000
+5978 39216.6667 20533.3333
+5979 39216.6667 20633.3333
+5980 39216.6667 20783.3333
+5981 39216.6667 20850.0000
+5982 39216.6667 20883.3333
+5983 39216.6667 20900.0000
+5984 39216.6667 20950.0000
+5985 39216.6667 20983.3333
+5986 39216.6667 21033.3333
+5987 39216.6667 21066.6667
+5988 39216.6667 21200.0000
+5989 39216.6667 21233.3333
+5990 39216.6667 21250.0000
+5991 39216.6667 21300.0000
+5992 39216.6667 21316.6667
+5993 39216.6667 21333.3333
+5994 39216.6667 21350.0000
+5995 39216.6667 21366.6667
+5996 39216.6667 21416.6667
+5997 39216.6667 21450.0000
+5998 39216.6667 21616.6667
+5999 39216.6667 21783.3333
+6000 39216.6667 21816.6667
+6001 39216.6667 21866.6667
+6002 39216.6667 21983.3333
+6003 39216.6667 22016.6667
+6004 39216.6667 22050.0000
+6005 39216.6667 22516.6667
+6006 39216.6667 22566.6667
+6007 39216.6667 22600.0000
+6008 39216.6667 22616.6667
+6009 39216.6667 22650.0000
+6010 39216.6667 23933.3333
+6011 39216.6667 25850.0000
+6012 39216.6667 26033.3333
+6013 39216.6667 26050.0000
+6014 39216.6667 26200.0000
+6015 39219.1667 26206.6667
+6016 39219.7222 20518.8889
+6017 39225.5556 26439.4444
+6018 39227.7778 20158.8889
+6019 39229.4444 26457.7778
+6020 39230.0000 26218.6111
+6021 39232.7778 26208.0556
+6022 39233.3333 20133.3333
+6023 39233.3333 20150.0000
+6024 39233.3333 20166.6667
+6025 39233.3333 20600.0000
+6026 39233.3333 20616.6667
+6027 39233.3333 20650.0000
+6028 39233.3333 20683.3333
+6029 39233.3333 20716.6667
+6030 39233.3333 20866.6667
+6031 39233.3333 20883.3333
+6032 39233.3333 20933.3333
+6033 39233.3333 21050.0000
+6034 39233.3333 21100.0000
+6035 39233.3333 21150.0000
+6036 39233.3333 21183.3333
+6037 39233.3333 21216.6667
+6038 39233.3333 21233.3333
+6039 39233.3333 21316.6667
+6040 39233.3333 21333.3333
+6041 39233.3333 21366.6667
+6042 39233.3333 21383.3333
+6043 39233.3333 21433.3333
+6044 39233.3333 21450.0000
+6045 39233.3333 21516.6667
+6046 39233.3333 21600.0000
+6047 39233.3333 21633.3333
+6048 39233.3333 21666.6667
+6049 39233.3333 21683.3333
+6050 39233.3333 21766.6667
+6051 39233.3333 21783.3333
+6052 39233.3333 21800.0000
+6053 39233.3333 21866.6667
+6054 39233.3333 21950.0000
+6055 39233.3333 22250.0000
+6056 39233.3333 22666.6667
+6057 39233.3333 22683.3333
+6058 39233.3333 22700.0000
+6059 39233.3333 22766.6667
+6060 39233.3333 23200.0000
+6061 39233.3333 23216.6667
+6062 39233.3333 23250.0000
+6063 39233.3333 23283.3333
+6064 39233.3333 23300.0000
+6065 39233.3333 23316.6667
+6066 39233.3333 25983.3333
+6067 39233.3333 26000.0000
+6068 39233.3333 26050.0000
+6069 39236.3889 20131.6667
+6070 39236.6667 20539.7222
+6071 39239.1667 20485.0000
+6072 39240.2778 26200.5556
+6073 39248.0556 26271.6667
+6074 39250.0000 20533.3333
+6075 39250.0000 20566.6667
+6076 39250.0000 20583.3333
+6077 39250.0000 20616.6667
+6078 39250.0000 20633.3333
+6079 39250.0000 20750.0000
+6080 39250.0000 20783.3333
+6081 39250.0000 20833.3333
+6082 39250.0000 20983.3333
+6083 39250.0000 21000.0000
+6084 39250.0000 21016.6667
+6085 39250.0000 21033.3333
+6086 39250.0000 21050.0000
+6087 39250.0000 21133.3333
+6088 39250.0000 21166.6667
+6089 39250.0000 21183.3333
+6090 39250.0000 21200.0000
+6091 39250.0000 21233.3333
+6092 39250.0000 21316.6667
+6093 39250.0000 21383.3333
+6094 39250.0000 21400.0000
+6095 39250.0000 21500.0000
+6096 39250.0000 21550.0000
+6097 39250.0000 21666.6667
+6098 39250.0000 21716.6667
+6099 39250.0000 21733.3333
+6100 39250.0000 21833.3333
+6101 39250.0000 22050.0000
+6102 39250.0000 22100.0000
+6103 39250.0000 22183.3333
+6104 39250.0000 22216.6667
+6105 39250.0000 22383.3333
+6106 39250.0000 22450.0000
+6107 39250.0000 22483.3333
+6108 39250.0000 22583.3333
+6109 39250.0000 22616.6667
+6110 39250.0000 22750.0000
+6111 39250.0000 23183.3333
+6112 39250.0000 23266.6667
+6113 39250.0000 23283.3333
+6114 39250.0000 23300.0000
+6115 39250.0000 26100.0000
+6116 39266.6667 20533.3333
+6117 39266.6667 20566.6667
+6118 39266.6667 20600.0000
+6119 39266.6667 20700.0000
+6120 39266.6667 20800.0000
+6121 39266.6667 20850.0000
+6122 39266.6667 20883.3333
+6123 39266.6667 20950.0000
+6124 39266.6667 20983.3333
+6125 39266.6667 21000.0000
+6126 39266.6667 21016.6667
+6127 39266.6667 21166.6667
+6128 39266.6667 21183.3333
+6129 39266.6667 21216.6667
+6130 39266.6667 21300.0000
+6131 39266.6667 21333.3333
+6132 39266.6667 21366.6667
+6133 39266.6667 21383.3333
+6134 39266.6667 21433.3333
+6135 39266.6667 21483.3333
+6136 39266.6667 21533.3333
+6137 39266.6667 21550.0000
+6138 39266.6667 21583.3333
+6139 39266.6667 21600.0000
+6140 39266.6667 21666.6667
+6141 39266.6667 21700.0000
+6142 39266.6667 21716.6667
+6143 39266.6667 21933.3333
+6144 39266.6667 22033.3333
+6145 39266.6667 22083.3333
+6146 39266.6667 22150.0000
+6147 39266.6667 22216.6667
+6148 39266.6667 22333.3333
+6149 39266.6667 22416.6667
+6150 39266.6667 22466.6667
+6151 39266.6667 22516.6667
+6152 39266.6667 22750.0000
+6153 39266.6667 23166.6667
+6154 39266.6667 23950.0000
+6155 39266.6667 25966.6667
+6156 39266.6667 26066.6667
+6157 39266.6667 26150.0000
+6158 39270.0000 26287.5000
+6159 39275.0000 26376.6667
+6160 39280.8333 20427.7778
+6161 39283.3333 20450.0000
+6162 39283.3333 20550.0000
+6163 39283.3333 20600.0000
+6164 39283.3333 20633.3333
+6165 39283.3333 20666.6667
+6166 39283.3333 20683.3333
+6167 39283.3333 20700.0000
+6168 39283.3333 20766.6667
+6169 39283.3333 20800.0000
+6170 39283.3333 20900.0000
+6171 39283.3333 20933.3333
+6172 39283.3333 21000.0000
+6173 39283.3333 21033.3333
+6174 39283.3333 21050.0000
+6175 39283.3333 21066.6667
+6176 39283.3333 21100.0000
+6177 39283.3333 21116.6667
+6178 39283.3333 21133.3333
+6179 39283.3333 21200.0000
+6180 39283.3333 21233.3333
+6181 39283.3333 21266.6667
+6182 39283.3333 21283.3333
+6183 39283.3333 21333.3333
+6184 39283.3333 21366.6667
+6185 39283.3333 21383.3333
+6186 39283.3333 21416.6667
+6187 39283.3333 21433.3333
+6188 39283.3333 21450.0000
+6189 39283.3333 21466.6667
+6190 39283.3333 21483.3333
+6191 39283.3333 21500.0000
+6192 39283.3333 21533.3333
+6193 39283.3333 21566.6667
+6194 39283.3333 21583.3333
+6195 39283.3333 21600.0000
+6196 39283.3333 21700.0000
+6197 39283.3333 21733.3333
+6198 39283.3333 21750.0000
+6199 39283.3333 21783.3333
+6200 39283.3333 21800.0000
+6201 39283.3333 21850.0000
+6202 39283.3333 21900.0000
+6203 39283.3333 21966.6667
+6204 39283.3333 22050.0000
+6205 39283.3333 22116.6667
+6206 39283.3333 22283.3333
+6207 39283.3333 22550.0000
+6208 39283.3333 22650.0000
+6209 39283.3333 22816.6667
+6210 39283.3333 23183.3333
+6211 39283.3333 23216.6667
+6212 39283.3333 23266.6667
+6213 39284.1667 20402.2222
+6214 39300.0000 20366.6667
+6215 39300.0000 20483.3333
+6216 39300.0000 20550.0000
+6217 39300.0000 20683.3333
+6218 39300.0000 20716.6667
+6219 39300.0000 20766.6667
+6220 39300.0000 20800.0000
+6221 39300.0000 20866.6667
+6222 39300.0000 20900.0000
+6223 39300.0000 20983.3333
+6224 39300.0000 21016.6667
+6225 39300.0000 21200.0000
+6226 39300.0000 21216.6667
+6227 39300.0000 21283.3333
+6228 39300.0000 21316.6667
+6229 39300.0000 21400.0000
+6230 39300.0000 21416.6667
+6231 39300.0000 21533.3333
+6232 39300.0000 21683.3333
+6233 39300.0000 21700.0000
+6234 39300.0000 21716.6667
+6235 39300.0000 21733.3333
+6236 39300.0000 21833.3333
+6237 39300.0000 21933.3333
+6238 39300.0000 22050.0000
+6239 39300.0000 22066.6667
+6240 39300.0000 22133.3333
+6241 39300.0000 22200.0000
+6242 39300.0000 22383.3333
+6243 39300.0000 22500.0000
+6244 39300.0000 22600.0000
+6245 39300.0000 22616.6667
+6246 39300.0000 23116.6667
+6247 39300.0000 26133.3333
+6248 39300.0000 26183.3333
+6249 39311.6667 26219.7222
+6250 39311.6667 26333.8889
+6251 39312.7778 20357.7778
+6252 39313.6111 20427.7778
+6253 39316.6667 20333.3333
+6254 39316.6667 20433.3333
+6255 39316.6667 20450.0000
+6256 39316.6667 20500.0000
+6257 39316.6667 20583.3333
+6258 39316.6667 20600.0000
+6259 39316.6667 20616.6667
+6260 39316.6667 20700.0000
+6261 39316.6667 20766.6667
+6262 39316.6667 20800.0000
+6263 39316.6667 20883.3333
+6264 39316.6667 20933.3333
+6265 39316.6667 20950.0000
+6266 39316.6667 21000.0000
+6267 39316.6667 21016.6667
+6268 39316.6667 21033.3333
+6269 39316.6667 21083.3333
+6270 39316.6667 21216.6667
+6271 39316.6667 21300.0000
+6272 39316.6667 21433.3333
+6273 39316.6667 21466.6667
+6274 39316.6667 21500.0000
+6275 39316.6667 21700.0000
+6276 39316.6667 21716.6667
+6277 39316.6667 21783.3333
+6278 39316.6667 21800.0000
+6279 39316.6667 21816.6667
+6280 39316.6667 21866.6667
+6281 39316.6667 21883.3333
+6282 39316.6667 21900.0000
+6283 39316.6667 21916.6667
+6284 39316.6667 22233.3333
+6285 39316.6667 22300.0000
+6286 39316.6667 22316.6667
+6287 39316.6667 22500.0000
+6288 39316.6667 22633.3333
+6289 39316.6667 22683.3333
+6290 39316.6667 22716.6667
+6291 39316.6667 23100.0000
+6292 39316.6667 23133.3333
+6293 39317.5000 26244.1667
+6294 39328.6111 26279.4444
+6295 39333.3333 20450.0000
+6296 39333.3333 20600.0000
+6297 39333.3333 20716.6667
+6298 39333.3333 20733.3333
+6299 39333.3333 20766.6667
+6300 39333.3333 20783.3333
+6301 39333.3333 20883.3333
+6302 39333.3333 20900.0000
+6303 39333.3333 20916.6667
+6304 39333.3333 20933.3333
+6305 39333.3333 20950.0000
+6306 39333.3333 21000.0000
+6307 39333.3333 21050.0000
+6308 39333.3333 21066.6667
+6309 39333.3333 21083.3333
+6310 39333.3333 21183.3333
+6311 39333.3333 21233.3333
+6312 39333.3333 21266.6667
+6313 39333.3333 21300.0000
+6314 39333.3333 21333.3333
+6315 39333.3333 21400.0000
+6316 39333.3333 21416.6667
+6317 39333.3333 21433.3333
+6318 39333.3333 21466.6667
+6319 39333.3333 21483.3333
+6320 39333.3333 21500.0000
+6321 39333.3333 21516.6667
+6322 39333.3333 21683.3333
+6323 39333.3333 21833.3333
+6324 39333.3333 21866.6667
+6325 39333.3333 21950.0000
+6326 39333.3333 21983.3333
+6327 39333.3333 22016.6667
+6328 39333.3333 22100.0000
+6329 39333.3333 22150.0000
+6330 39333.3333 22366.6667
+6331 39333.3333 22383.3333
+6332 39333.3333 22416.6667
+6333 39333.3333 22433.3333
+6334 39333.3333 22450.0000
+6335 39333.3333 22500.0000
+6336 39333.3333 22550.0000
+6337 39333.3333 22583.3333
+6338 39333.3333 22700.0000
+6339 39333.3333 22766.6667
+6340 39333.3333 23016.6667
+6341 39333.3333 23033.3333
+6342 39333.3333 23050.0000
+6343 39333.3333 23116.6667
+6344 39333.3333 23133.3333
+6345 39333.3333 23150.0000
+6346 39333.3333 23216.6667
+6347 39333.3333 26183.3333
+6348 39333.3333 26216.6667
+6349 39334.7222 26311.3889
+6350 39344.7222 26362.5000
+6351 39348.0556 26321.6667
+6352 39350.0000 20416.6667
+6353 39350.0000 20433.3333
+6354 39350.0000 20450.0000
+6355 39350.0000 20550.0000
+6356 39350.0000 20583.3333
+6357 39350.0000 20650.0000
+6358 39350.0000 20700.0000
+6359 39350.0000 20750.0000
+6360 39350.0000 20766.6667
+6361 39350.0000 20800.0000
+6362 39350.0000 20883.3333
+6363 39350.0000 20916.6667
+6364 39350.0000 20950.0000
+6365 39350.0000 20966.6667
+6366 39350.0000 21000.0000
+6367 39350.0000 21016.6667
+6368 39350.0000 21033.3333
+6369 39350.0000 21050.0000
+6370 39350.0000 21066.6667
+6371 39350.0000 21100.0000
+6372 39350.0000 21150.0000
+6373 39350.0000 21183.3333
+6374 39350.0000 21200.0000
+6375 39350.0000 21216.6667
+6376 39350.0000 21266.6667
+6377 39350.0000 21283.3333
+6378 39350.0000 21300.0000
+6379 39350.0000 21316.6667
+6380 39350.0000 21333.3333
+6381 39350.0000 21350.0000
+6382 39350.0000 21450.0000
+6383 39350.0000 21466.6667
+6384 39350.0000 21500.0000
+6385 39350.0000 21533.3333
+6386 39350.0000 21666.6667
+6387 39350.0000 21683.3333
+6388 39350.0000 21750.0000
+6389 39350.0000 21766.6667
+6390 39350.0000 21833.3333
+6391 39350.0000 21900.0000
+6392 39350.0000 22083.3333
+6393 39350.0000 22216.6667
+6394 39350.0000 22266.6667
+6395 39350.0000 22300.0000
+6396 39350.0000 22333.3333
+6397 39350.0000 22500.0000
+6398 39350.0000 22550.0000
+6399 39350.0000 22616.6667
+6400 39350.0000 22833.3333
+6401 39350.0000 22866.6667
+6402 39350.0000 22900.0000
+6403 39350.0000 23066.6667
+6404 39350.0000 23083.3333
+6405 39350.0000 23200.0000
+6406 39360.8333 26263.6111
+6407 39361.3889 26295.8333
+6408 39366.6667 20283.3333
+6409 39366.6667 20400.0000
+6410 39366.6667 20533.3333
+6411 39366.6667 20566.6667
+6412 39366.6667 20583.3333
+6413 39366.6667 20700.0000
+6414 39366.6667 20783.3333
+6415 39366.6667 20866.6667
+6416 39366.6667 20883.3333
+6417 39366.6667 20950.0000
+6418 39366.6667 21016.6667
+6419 39366.6667 21033.3333
+6420 39366.6667 21050.0000
+6421 39366.6667 21066.6667
+6422 39366.6667 21100.0000
+6423 39366.6667 21116.6667
+6424 39366.6667 21133.3333
+6425 39366.6667 21200.0000
+6426 39366.6667 21216.6667
+6427 39366.6667 21233.3333
+6428 39366.6667 21266.6667
+6429 39366.6667 21283.3333
+6430 39366.6667 21300.0000
+6431 39366.6667 21333.3333
+6432 39366.6667 21400.0000
+6433 39366.6667 21416.6667
+6434 39366.6667 21533.3333
+6435 39366.6667 21600.0000
+6436 39366.6667 21616.6667
+6437 39366.6667 21633.3333
+6438 39366.6667 21666.6667
+6439 39366.6667 21816.6667
+6440 39366.6667 21916.6667
+6441 39366.6667 21966.6667
+6442 39366.6667 22000.0000
+6443 39366.6667 22083.3333
+6444 39366.6667 22133.3333
+6445 39366.6667 22400.0000
+6446 39366.6667 22516.6667
+6447 39366.6667 22766.6667
+6448 39366.6667 22950.0000
+6449 39366.6667 22983.3333
+6450 39366.6667 23066.6667
+6451 39366.6667 23183.3333
+6452 39366.6667 26166.6667
+6453 39366.6667 26283.3333
+6454 39368.8889 20303.8889
+6455 39373.6111 26303.6111
+6456 39383.3333 20066.6667
+6457 39383.3333 20083.3333
+6458 39383.3333 20116.6667
+6459 39383.3333 20383.3333
+6460 39383.3333 20483.3333
+6461 39383.3333 20566.6667
+6462 39383.3333 20583.3333
+6463 39383.3333 20700.0000
+6464 39383.3333 20850.0000
+6465 39383.3333 20900.0000
+6466 39383.3333 21000.0000
+6467 39383.3333 21016.6667
+6468 39383.3333 21033.3333
+6469 39383.3333 21050.0000
+6470 39383.3333 21066.6667
+6471 39383.3333 21100.0000
+6472 39383.3333 21133.3333
+6473 39383.3333 21183.3333
+6474 39383.3333 21200.0000
+6475 39383.3333 21216.6667
+6476 39383.3333 21233.3333
+6477 39383.3333 21250.0000
+6478 39383.3333 21266.6667
+6479 39383.3333 21283.3333
+6480 39383.3333 21400.0000
+6481 39383.3333 21466.6667
+6482 39383.3333 21633.3333
+6483 39383.3333 21700.0000
+6484 39383.3333 21766.6667
+6485 39383.3333 21816.6667
+6486 39383.3333 21866.6667
+6487 39383.3333 21916.6667
+6488 39383.3333 21983.3333
+6489 39383.3333 22233.3333
+6490 39383.3333 22266.6667
+6491 39383.3333 22333.3333
+6492 39383.3333 22350.0000
+6493 39383.3333 22500.0000
+6494 39383.3333 22516.6667
+6495 39383.3333 22566.6667
+6496 39383.3333 22750.0000
+6497 39383.3333 22916.6667
+6498 39383.3333 22966.6667
+6499 39383.3333 22983.3333
+6500 39383.3333 23000.0000
+6501 39383.3333 23050.0000
+6502 39383.3333 23183.3333
+6503 39400.0000 20050.0000
+6504 39400.0000 20066.6667
+6505 39400.0000 20083.3333
+6506 39400.0000 20333.3333
+6507 39400.0000 20350.0000
+6508 39400.0000 20366.6667
+6509 39400.0000 20383.3333
+6510 39400.0000 20416.6667
+6511 39400.0000 20483.3333
+6512 39400.0000 20566.6667
+6513 39400.0000 20783.3333
+6514 39400.0000 20816.6667
+6515 39400.0000 20966.6667
+6516 39400.0000 21016.6667
+6517 39400.0000 21050.0000
+6518 39400.0000 21066.6667
+6519 39400.0000 21083.3333
+6520 39400.0000 21100.0000
+6521 39400.0000 21116.6667
+6522 39400.0000 21283.3333
+6523 39400.0000 21333.3333
+6524 39400.0000 21366.6667
+6525 39400.0000 21600.0000
+6526 39400.0000 21633.3333
+6527 39400.0000 21666.6667
+6528 39400.0000 21700.0000
+6529 39400.0000 21733.3333
+6530 39400.0000 21750.0000
+6531 39400.0000 21800.0000
+6532 39400.0000 21816.6667
+6533 39400.0000 21900.0000
+6534 39400.0000 22016.6667
+6535 39400.0000 22066.6667
+6536 39400.0000 22200.0000
+6537 39400.0000 22216.6667
+6538 39400.0000 22416.6667
+6539 39400.0000 22433.3333
+6540 39400.0000 22466.6667
+6541 39400.0000 22716.6667
+6542 39400.0000 22733.3333
+6543 39400.0000 22983.3333
+6544 39400.0000 23133.3333
+6545 39400.0000 23166.6667
+6546 39405.2778 20253.0556
+6547 39416.6667 20016.6667
+6548 39416.6667 20066.6667
+6549 39416.6667 20083.3333
+6550 39416.6667 20300.0000
+6551 39416.6667 20316.6667
+6552 39416.6667 20366.6667
+6553 39416.6667 20383.3333
+6554 39416.6667 20500.0000
+6555 39416.6667 20550.0000
+6556 39416.6667 20566.6667
+6557 39416.6667 20616.6667
+6558 39416.6667 20633.3333
+6559 39416.6667 20700.0000
+6560 39416.6667 20766.6667
+6561 39416.6667 20783.3333
+6562 39416.6667 20816.6667
+6563 39416.6667 20833.3333
+6564 39416.6667 20850.0000
+6565 39416.6667 20866.6667
+6566 39416.6667 20900.0000
+6567 39416.6667 20916.6667
+6568 39416.6667 20933.3333
+6569 39416.6667 20950.0000
+6570 39416.6667 20983.3333
+6571 39416.6667 21016.6667
+6572 39416.6667 21033.3333
+6573 39416.6667 21050.0000
+6574 39416.6667 21066.6667
+6575 39416.6667 21083.3333
+6576 39416.6667 21100.0000
+6577 39416.6667 21116.6667
+6578 39416.6667 21266.6667
+6579 39416.6667 21383.3333
+6580 39416.6667 21483.3333
+6581 39416.6667 21500.0000
+6582 39416.6667 21533.3333
+6583 39416.6667 21583.3333
+6584 39416.6667 21600.0000
+6585 39416.6667 21633.3333
+6586 39416.6667 21700.0000
+6587 39416.6667 21733.3333
+6588 39416.6667 21750.0000
+6589 39416.6667 21783.3333
+6590 39416.6667 21800.0000
+6591 39416.6667 21966.6667
+6592 39416.6667 22100.0000
+6593 39416.6667 22166.6667
+6594 39416.6667 22383.3333
+6595 39416.6667 22433.3333
+6596 39416.6667 22616.6667
+6597 39416.6667 22650.0000
+6598 39416.6667 22933.3333
+6599 39416.6667 23133.3333
+6600 39416.6667 23150.0000
+6601 39419.7222 20084.1667
+6602 39424.4444 20073.0556
+6603 39433.3333 19983.3333
+6604 39433.3333 20000.0000
+6605 39433.3333 20050.0000
+6606 39433.3333 20283.3333
+6607 39433.3333 20333.3333
+6608 39433.3333 20400.0000
+6609 39433.3333 20433.3333
+6610 39433.3333 20466.6667
+6611 39433.3333 20483.3333
+6612 39433.3333 20533.3333
+6613 39433.3333 20550.0000
+6614 39433.3333 20633.3333
+6615 39433.3333 20683.3333
+6616 39433.3333 20716.6667
+6617 39433.3333 20733.3333
+6618 39433.3333 20750.0000
+6619 39433.3333 20766.6667
+6620 39433.3333 20783.3333
+6621 39433.3333 20833.3333
+6622 39433.3333 20883.3333
+6623 39433.3333 20916.6667
+6624 39433.3333 20950.0000
+6625 39433.3333 20983.3333
+6626 39433.3333 21016.6667
+6627 39433.3333 21033.3333
+6628 39433.3333 21050.0000
+6629 39433.3333 21083.3333
+6630 39433.3333 21100.0000
+6631 39433.3333 21116.6667
+6632 39433.3333 21216.6667
+6633 39433.3333 21350.0000
+6634 39433.3333 21366.6667
+6635 39433.3333 21383.3333
+6636 39433.3333 21433.3333
+6637 39433.3333 21516.6667
+6638 39433.3333 21533.3333
+6639 39433.3333 21566.6667
+6640 39433.3333 21666.6667
+6641 39433.3333 21716.6667
+6642 39433.3333 21750.0000
+6643 39433.3333 21766.6667
+6644 39433.3333 21833.3333
+6645 39433.3333 21866.6667
+6646 39433.3333 22050.0000
+6647 39433.3333 22100.0000
+6648 39433.3333 22133.3333
+6649 39433.3333 22183.3333
+6650 39433.3333 22300.0000
+6651 39433.3333 22333.3333
+6652 39433.3333 22683.3333
+6653 39433.3333 22750.0000
+6654 39433.3333 22883.3333
+6655 39433.3333 23116.6667
+6656 39436.1111 19978.3333
+6657 39450.0000 19983.3333
+6658 39450.0000 20000.0000
+6659 39450.0000 20066.6667
+6660 39450.0000 20266.6667
+6661 39450.0000 20283.3333
+6662 39450.0000 20300.0000
+6663 39450.0000 20316.6667
+6664 39450.0000 20400.0000
+6665 39450.0000 20450.0000
+6666 39450.0000 20533.3333
+6667 39450.0000 20600.0000
+6668 39450.0000 20683.3333
+6669 39450.0000 20716.6667
+6670 39450.0000 20733.3333
+6671 39450.0000 20766.6667
+6672 39450.0000 20816.6667
+6673 39450.0000 20833.3333
+6674 39450.0000 21000.0000
+6675 39450.0000 21016.6667
+6676 39450.0000 21033.3333
+6677 39450.0000 21066.6667
+6678 39450.0000 21083.3333
+6679 39450.0000 21100.0000
+6680 39450.0000 21116.6667
+6681 39450.0000 21233.3333
+6682 39450.0000 21250.0000
+6683 39450.0000 21316.6667
+6684 39450.0000 21333.3333
+6685 39450.0000 21366.6667
+6686 39450.0000 21383.3333
+6687 39450.0000 21416.6667
+6688 39450.0000 21466.6667
+6689 39450.0000 21483.3333
+6690 39450.0000 21500.0000
+6691 39450.0000 21516.6667
+6692 39450.0000 21533.3333
+6693 39450.0000 21550.0000
+6694 39450.0000 21566.6667
+6695 39450.0000 21800.0000
+6696 39450.0000 21833.3333
+6697 39450.0000 21966.6667
+6698 39450.0000 22083.3333
+6699 39450.0000 22150.0000
+6700 39450.0000 22250.0000
+6701 39450.0000 22333.3333
+6702 39450.0000 22350.0000
+6703 39450.0000 22483.3333
+6704 39450.0000 22533.3333
+6705 39450.0000 22550.0000
+6706 39450.0000 23100.0000
+6707 39450.0000 23116.6667
+6708 39458.0556 19958.0556
+6709 39466.6667 19916.6667
+6710 39466.6667 19933.3333
+6711 39466.6667 19950.0000
+6712 39466.6667 20316.6667
+6713 39466.6667 20333.3333
+6714 39466.6667 20350.0000
+6715 39466.6667 20366.6667
+6716 39466.6667 20416.6667
+6717 39466.6667 20433.3333
+6718 39466.6667 20516.6667
+6719 39466.6667 20666.6667
+6720 39466.6667 20716.6667
+6721 39466.6667 20750.0000
+6722 39466.6667 20816.6667
+6723 39466.6667 20833.3333
+6724 39466.6667 20850.0000
+6725 39466.6667 20900.0000
+6726 39466.6667 20916.6667
+6727 39466.6667 20966.6667
+6728 39466.6667 21033.3333
+6729 39466.6667 21050.0000
+6730 39466.6667 21083.3333
+6731 39466.6667 21100.0000
+6732 39466.6667 21250.0000
+6733 39466.6667 21283.3333
+6734 39466.6667 21316.6667
+6735 39466.6667 21350.0000
+6736 39466.6667 21366.6667
+6737 39466.6667 21416.6667
+6738 39466.6667 21433.3333
+6739 39466.6667 21450.0000
+6740 39466.6667 21533.3333
+6741 39466.6667 21566.6667
+6742 39466.6667 21616.6667
+6743 39466.6667 21666.6667
+6744 39466.6667 21700.0000
+6745 39466.6667 21733.3333
+6746 39466.6667 21833.3333
+6747 39466.6667 21866.6667
+6748 39466.6667 21900.0000
+6749 39466.6667 22083.3333
+6750 39466.6667 22166.6667
+6751 39466.6667 22216.6667
+6752 39466.6667 22283.3333
+6753 39466.6667 22450.0000
+6754 39466.6667 22500.0000
+6755 39466.6667 22733.3333
+6756 39466.6667 22916.6667
+6757 39474.4444 19931.9444
+6758 39483.3333 19916.6667
+6759 39483.3333 20266.6667
+6760 39483.3333 20300.0000
+6761 39483.3333 20333.3333
+6762 39483.3333 20400.0000
+6763 39483.3333 20466.6667
+6764 39483.3333 20500.0000
+6765 39483.3333 20566.6667
+6766 39483.3333 20666.6667
+6767 39483.3333 20850.0000
+6768 39483.3333 20866.6667
+6769 39483.3333 20883.3333
+6770 39483.3333 20916.6667
+6771 39483.3333 20966.6667
+6772 39483.3333 21033.3333
+6773 39483.3333 21050.0000
+6774 39483.3333 21066.6667
+6775 39483.3333 21083.3333
+6776 39483.3333 21100.0000
+6777 39483.3333 21316.6667
+6778 39483.3333 21333.3333
+6779 39483.3333 21533.3333
+6780 39483.3333 21550.0000
+6781 39483.3333 21716.6667
+6782 39483.3333 21850.0000
+6783 39483.3333 21900.0000
+6784 39483.3333 21983.3333
+6785 39483.3333 22200.0000
+6786 39483.3333 22266.6667
+6787 39483.3333 22600.0000
+6788 39483.3333 22700.0000
+6789 39483.3333 22950.0000
+6790 39483.3333 23100.0000
+6791 39495.8333 19873.0556
+6792 39500.0000 19916.6667
+6793 39500.0000 20266.6667
+6794 39500.0000 20316.6667
+6795 39500.0000 20366.6667
+6796 39500.0000 20383.3333
+6797 39500.0000 20416.6667
+6798 39500.0000 20433.3333
+6799 39500.0000 20466.6667
+6800 39500.0000 20500.0000
+6801 39500.0000 20533.3333
+6802 39500.0000 20650.0000
+6803 39500.0000 20683.3333
+6804 39500.0000 20750.0000
+6805 39500.0000 20866.6667
+6806 39500.0000 20916.6667
+6807 39500.0000 20950.0000
+6808 39500.0000 20966.6667
+6809 39500.0000 20983.3333
+6810 39500.0000 21000.0000
+6811 39500.0000 21033.3333
+6812 39500.0000 21050.0000
+6813 39500.0000 21083.3333
+6814 39500.0000 21316.6667
+6815 39500.0000 21350.0000
+6816 39500.0000 21516.6667
+6817 39500.0000 21533.3333
+6818 39500.0000 21616.6667
+6819 39500.0000 21683.3333
+6820 39500.0000 21783.3333
+6821 39500.0000 21900.0000
+6822 39500.0000 22016.6667
+6823 39500.0000 22050.0000
+6824 39500.0000 22150.0000
+6825 39500.0000 22250.0000
+6826 39500.0000 22450.0000
+6827 39500.0000 22550.0000
+6828 39500.0000 22633.3333
+6829 39500.0000 22650.0000
+6830 39500.0000 22700.0000
+6831 39500.0000 22883.3333
+6832 39500.0000 23066.6667
+6833 39516.6667 19866.6667
+6834 39516.6667 19900.0000
+6835 39516.6667 20350.0000
+6836 39516.6667 20433.3333
+6837 39516.6667 20550.0000
+6838 39516.6667 20566.6667
+6839 39516.6667 20600.0000
+6840 39516.6667 20633.3333
+6841 39516.6667 20683.3333
+6842 39516.6667 20733.3333
+6843 39516.6667 20800.0000
+6844 39516.6667 20816.6667
+6845 39516.6667 20950.0000
+6846 39516.6667 20983.3333
+6847 39516.6667 21050.0000
+6848 39516.6667 21066.6667
+6849 39516.6667 21083.3333
+6850 39516.6667 21150.0000
+6851 39516.6667 21600.0000
+6852 39516.6667 21650.0000
+6853 39516.6667 21666.6667
+6854 39516.6667 21700.0000
+6855 39516.6667 21750.0000
+6856 39516.6667 21800.0000
+6857 39516.6667 21866.6667
+6858 39516.6667 21950.0000
+6859 39516.6667 22083.3333
+6860 39516.6667 22100.0000
+6861 39516.6667 22116.6667
+6862 39516.6667 22316.6667
+6863 39516.6667 22466.6667
+6864 39516.6667 22550.0000
+6865 39516.6667 22683.3333
+6866 39525.5556 20257.2222
+6867 39533.3333 19850.0000
+6868 39533.3333 19866.6667
+6869 39533.3333 19900.0000
+6870 39533.3333 19916.6667
+6871 39533.3333 20283.3333
+6872 39533.3333 20350.0000
+6873 39533.3333 20400.0000
+6874 39533.3333 20466.6667
+6875 39533.3333 20550.0000
+6876 39533.3333 20666.6667
+6877 39533.3333 20716.6667
+6878 39533.3333 20733.3333
+6879 39533.3333 20783.3333
+6880 39533.3333 20850.0000
+6881 39533.3333 20916.6667
+6882 39533.3333 21033.3333
+6883 39533.3333 21050.0000
+6884 39533.3333 21066.6667
+6885 39533.3333 21083.3333
+6886 39533.3333 21100.0000
+6887 39533.3333 21116.6667
+6888 39533.3333 21250.0000
+6889 39533.3333 21300.0000
+6890 39533.3333 21366.6667
+6891 39533.3333 21400.0000
+6892 39533.3333 21433.3333
+6893 39533.3333 21466.6667
+6894 39533.3333 21566.6667
+6895 39533.3333 21583.3333
+6896 39533.3333 21616.6667
+6897 39533.3333 21633.3333
+6898 39533.3333 21683.3333
+6899 39533.3333 21700.0000
+6900 39533.3333 21766.6667
+6901 39533.3333 21800.0000
+6902 39533.3333 21833.3333
+6903 39533.3333 21866.6667
+6904 39533.3333 21933.3333
+6905 39533.3333 21983.3333
+6906 39533.3333 22000.0000
+6907 39533.3333 22166.6667
+6908 39533.3333 22233.3333
+6909 39533.3333 22266.6667
+6910 39533.3333 22366.6667
+6911 39533.3333 22500.0000
+6912 39533.3333 22666.6667
+6913 39538.8889 24991.6667
+6914 39546.3889 19911.1111
+6915 39550.0000 19866.6667
+6916 39550.0000 19883.3333
+6917 39550.0000 20266.6667
+6918 39550.0000 20316.6667
+6919 39550.0000 20366.6667
+6920 39550.0000 20433.3333
+6921 39550.0000 20516.6667
+6922 39550.0000 20550.0000
+6923 39550.0000 20583.3333
+6924 39550.0000 20600.0000
+6925 39550.0000 20633.3333
+6926 39550.0000 20683.3333
+6927 39550.0000 20766.6667
+6928 39550.0000 20900.0000
+6929 39550.0000 20950.0000
+6930 39550.0000 21016.6667
+6931 39550.0000 21033.3333
+6932 39550.0000 21050.0000
+6933 39550.0000 21116.6667
+6934 39550.0000 21366.6667
+6935 39550.0000 21583.3333
+6936 39550.0000 21616.6667
+6937 39550.0000 21633.3333
+6938 39550.0000 21650.0000
+6939 39550.0000 21666.6667
+6940 39550.0000 21683.3333
+6941 39550.0000 21700.0000
+6942 39550.0000 21750.0000
+6943 39550.0000 21766.6667
+6944 39550.0000 21900.0000
+6945 39550.0000 22200.0000
+6946 39550.0000 22616.6667
+6947 39550.0000 22650.0000
+6948 39550.0000 22750.0000
+6949 39550.0000 22983.3333
+6950 39566.6667 19850.0000
+6951 39566.6667 19866.6667
+6952 39566.6667 19883.3333
+6953 39566.6667 19900.0000
+6954 39566.6667 19916.6667
+6955 39566.6667 20200.0000
+6956 39566.6667 20283.3333
+6957 39566.6667 20316.6667
+6958 39566.6667 20433.3333
+6959 39566.6667 20550.0000
+6960 39566.6667 20633.3333
+6961 39566.6667 20700.0000
+6962 39566.6667 20733.3333
+6963 39566.6667 20833.3333
+6964 39566.6667 20883.3333
+6965 39566.6667 20950.0000
+6966 39566.6667 21000.0000
+6967 39566.6667 21083.3333
+6968 39566.6667 21166.6667
+6969 39566.6667 21250.0000
+6970 39566.6667 21366.6667
+6971 39566.6667 21583.3333
+6972 39566.6667 21616.6667
+6973 39566.6667 21700.0000
+6974 39566.6667 21716.6667
+6975 39566.6667 21750.0000
+6976 39566.6667 21766.6667
+6977 39566.6667 21833.3333
+6978 39566.6667 21933.3333
+6979 39566.6667 22000.0000
+6980 39566.6667 22016.6667
+6981 39566.6667 22083.3333
+6982 39566.6667 22216.6667
+6983 39566.6667 22366.6667
+6984 39566.6667 22466.6667
+6985 39566.6667 22533.3333
+6986 39566.6667 22600.0000
+6987 39566.6667 22750.0000
+6988 39566.6667 22766.6667
+6989 39583.3333 19850.0000
+6990 39583.3333 19866.6667
+6991 39583.3333 19883.3333
+6992 39583.3333 19900.0000
+6993 39583.3333 19916.6667
+6994 39583.3333 20333.3333
+6995 39583.3333 20400.0000
+6996 39583.3333 20466.6667
+6997 39583.3333 20550.0000
+6998 39583.3333 20600.0000
+6999 39583.3333 20616.6667
+7000 39583.3333 20666.6667
+7001 39583.3333 20700.0000
+7002 39583.3333 20716.6667
+7003 39583.3333 20800.0000
+7004 39583.3333 20883.3333
+7005 39583.3333 20916.6667
+7006 39583.3333 20933.3333
+7007 39583.3333 20950.0000
+7008 39583.3333 20983.3333
+7009 39583.3333 21000.0000
+7010 39583.3333 21033.3333
+7011 39583.3333 21066.6667
+7012 39583.3333 21083.3333
+7013 39583.3333 21116.6667
+7014 39583.3333 21583.3333
+7015 39583.3333 21683.3333
+7016 39583.3333 21733.3333
+7017 39583.3333 21750.0000
+7018 39583.3333 21783.3333
+7019 39583.3333 21800.0000
+7020 39583.3333 21816.6667
+7021 39583.3333 21850.0000
+7022 39583.3333 21900.0000
+7023 39583.3333 21916.6667
+7024 39583.3333 21966.6667
+7025 39583.3333 22166.6667
+7026 39583.3333 22300.0000
+7027 39583.3333 22333.3333
+7028 39583.3333 22583.3333
+7029 39583.3333 22783.3333
+7030 39583.3333 22916.6667
+7031 39593.8889 19823.6111
+7032 39600.0000 19866.6667
+7033 39600.0000 19900.0000
+7034 39600.0000 19916.6667
+7035 39600.0000 20233.3333
+7036 39600.0000 20266.6667
+7037 39600.0000 20283.3333
+7038 39600.0000 20316.6667
+7039 39600.0000 20433.3333
+7040 39600.0000 20466.6667
+7041 39600.0000 20533.3333
+7042 39600.0000 20566.6667
+7043 39600.0000 20650.0000
+7044 39600.0000 20683.3333
+7045 39600.0000 20750.0000
+7046 39600.0000 20850.0000
+7047 39600.0000 20883.3333
+7048 39600.0000 21000.0000
+7049 39600.0000 21050.0000
+7050 39600.0000 21100.0000
+7051 39600.0000 21283.3333
+7052 39600.0000 21300.0000
+7053 39600.0000 21466.6667
+7054 39600.0000 21500.0000
+7055 39600.0000 21650.0000
+7056 39600.0000 21766.6667
+7057 39600.0000 21816.6667
+7058 39600.0000 21983.3333
+7059 39600.0000 22050.0000
+7060 39600.0000 22066.6667
+7061 39600.0000 22583.3333
+7062 39600.0000 22716.6667
+7063 39616.6667 19800.0000
+7064 39616.6667 19816.6667
+7065 39616.6667 19850.0000
+7066 39616.6667 19900.0000
+7067 39616.6667 19916.6667
+7068 39616.6667 20183.3333
+7069 39616.6667 20333.3333
+7070 39616.6667 20500.0000
+7071 39616.6667 20533.3333
+7072 39616.6667 20583.3333
+7073 39616.6667 20633.3333
+7074 39616.6667 20733.3333
+7075 39616.6667 20833.3333
+7076 39616.6667 20883.3333
+7077 39616.6667 20950.0000
+7078 39616.6667 20966.6667
+7079 39616.6667 20983.3333
+7080 39616.6667 21050.0000
+7081 39616.6667 21350.0000
+7082 39616.6667 21416.6667
+7083 39616.6667 21533.3333
+7084 39616.6667 21650.0000
+7085 39616.6667 21750.0000
+7086 39616.6667 21766.6667
+7087 39616.6667 22016.6667
+7088 39616.6667 22133.3333
+7089 39616.6667 22233.3333
+7090 39616.6667 22266.6667
+7091 39616.6667 22300.0000
+7092 39616.6667 22366.6667
+7093 39616.6667 22433.3333
+7094 39616.6667 22533.3333
+7095 39616.6667 22566.6667
+7096 39616.6667 22616.6667
+7097 39616.6667 22683.3333
+7098 39616.6667 22883.3333
+7099 39620.0000 19919.7222
+7100 39625.0000 19875.5556
+7101 39626.9444 20187.2222
+7102 39633.0556 19764.4444
+7103 39633.3333 19900.0000
+7104 39633.3333 20416.6667
+7105 39633.3333 20450.0000
+7106 39633.3333 20566.6667
+7107 39633.3333 20700.0000
+7108 39633.3333 20716.6667
+7109 39633.3333 20733.3333
+7110 39633.3333 20766.6667
+7111 39633.3333 20783.3333
+7112 39633.3333 20866.6667
+7113 39633.3333 20916.6667
+7114 39633.3333 20966.6667
+7115 39633.3333 21033.3333
+7116 39633.3333 21066.6667
+7117 39633.3333 21250.0000
+7118 39633.3333 21300.0000
+7119 39633.3333 21350.0000
+7120 39633.3333 21583.3333
+7121 39633.3333 21700.0000
+7122 39633.3333 21783.3333
+7123 39633.3333 22016.6667
+7124 39633.3333 22050.0000
+7125 39633.3333 22400.0000
+7126 39633.3333 22416.6667
+7127 39633.3333 22500.0000
+7128 39633.3333 22516.6667
+7129 39650.0000 19766.6667
+7130 39650.0000 19850.0000
+7131 39650.0000 20283.3333
+7132 39650.0000 20316.6667
+7133 39650.0000 20366.6667
+7134 39650.0000 20483.3333
+7135 39650.0000 20516.6667
+7136 39650.0000 20616.6667
+7137 39650.0000 20666.6667
+7138 39650.0000 20700.0000
+7139 39650.0000 20716.6667
+7140 39650.0000 20733.3333
+7141 39650.0000 20800.0000
+7142 39650.0000 20950.0000
+7143 39650.0000 21033.3333
+7144 39650.0000 21483.3333
+7145 39650.0000 21616.6667
+7146 39650.0000 21650.0000
+7147 39650.0000 21816.6667
+7148 39650.0000 22266.6667
+7149 39650.0000 22283.3333
+7150 39650.0000 22433.3333
+7151 39650.0000 22716.6667
+7152 39663.8889 20101.3889
+7153 39666.6667 19816.6667
+7154 39666.6667 20250.0000
+7155 39666.6667 20366.6667
+7156 39666.6667 20433.3333
+7157 39666.6667 20516.6667
+7158 39666.6667 20533.3333
+7159 39666.6667 20550.0000
+7160 39666.6667 20566.6667
+7161 39666.6667 20583.3333
+7162 39666.6667 20650.0000
+7163 39666.6667 20716.6667
+7164 39666.6667 20733.3333
+7165 39666.6667 20833.3333
+7166 39666.6667 20933.3333
+7167 39666.6667 20950.0000
+7168 39666.6667 21033.3333
+7169 39666.6667 21216.6667
+7170 39666.6667 21450.0000
+7171 39666.6667 21566.6667
+7172 39666.6667 21633.3333
+7173 39666.6667 21700.0000
+7174 39666.6667 21733.3333
+7175 39666.6667 21766.6667
+7176 39666.6667 21833.3333
+7177 39666.6667 22383.3333
+7178 39666.6667 22483.3333
+7179 39666.6667 22666.6667
+7180 39666.6667 22733.3333
+7181 39666.6667 22783.3333
+7182 39666.6667 22866.6667
+7183 39670.0000 19740.8333
+7184 39681.6667 19706.9444
+7185 39683.3333 19683.3333
+7186 39683.3333 19700.0000
+7187 39683.3333 19733.3333
+7188 39683.3333 19750.0000
+7189 39683.3333 19816.6667
+7190 39683.3333 20066.6667
+7191 39683.3333 20300.0000
+7192 39683.3333 20466.6667
+7193 39683.3333 20533.3333
+7194 39683.3333 20616.6667
+7195 39683.3333 20666.6667
+7196 39683.3333 20766.6667
+7197 39683.3333 20783.3333
+7198 39683.3333 20866.6667
+7199 39683.3333 20883.3333
+7200 39683.3333 21050.0000
+7201 39683.3333 21183.3333
+7202 39683.3333 21300.0000
+7203 39683.3333 21550.0000
+7204 39683.3333 21583.3333
+7205 39683.3333 21683.3333
+7206 39683.3333 21800.0000
+7207 39683.3333 22300.0000
+7208 39683.3333 22316.6667
+7209 39683.3333 22333.3333
+7210 39683.3333 22500.0000
+7211 39683.3333 22583.3333
+7212 39683.3333 22633.3333
+7213 39683.3333 22700.0000
+7214 39683.3333 22733.3333
+7215 39683.3333 22833.3333
+7216 39694.4444 19836.6667
+7217 39700.0000 19700.0000
+7218 39700.0000 19716.6667
+7219 39700.0000 19733.3333
+7220 39700.0000 19833.3333
+7221 39700.0000 20266.6667
+7222 39700.0000 20333.3333
+7223 39700.0000 20400.0000
+7224 39700.0000 20533.3333
+7225 39700.0000 20566.6667
+7226 39700.0000 20633.3333
+7227 39700.0000 20666.6667
+7228 39700.0000 20783.3333
+7229 39700.0000 20800.0000
+7230 39700.0000 20816.6667
+7231 39700.0000 20850.0000
+7232 39700.0000 20950.0000
+7233 39700.0000 21033.3333
+7234 39700.0000 21066.6667
+7235 39700.0000 21383.3333
+7236 39700.0000 21516.6667
+7237 39700.0000 21633.3333
+7238 39700.0000 21716.6667
+7239 39700.0000 22016.6667
+7240 39700.0000 22083.3333
+7241 39700.0000 22416.6667
+7242 39700.0000 22433.3333
+7243 39700.0000 22700.0000
+7244 39707.7778 19795.5556
+7245 39709.7222 19702.2222
+7246 39716.6667 19666.6667
+7247 39716.6667 19716.6667
+7248 39716.6667 19733.3333
+7249 39716.6667 19750.0000
+7250 39716.6667 19766.6667
+7251 39716.6667 19783.3333
+7252 39716.6667 19833.3333
+7253 39716.6667 19900.0000
+7254 39716.6667 20350.0000
+7255 39716.6667 20450.0000
+7256 39716.6667 20483.3333
+7257 39716.6667 20533.3333
+7258 39716.6667 20600.0000
+7259 39716.6667 20716.6667
+7260 39716.6667 20750.0000
+7261 39716.6667 20833.3333
+7262 39716.6667 21066.6667
+7263 39716.6667 21083.3333
+7264 39716.6667 21383.3333
+7265 39716.6667 21466.6667
+7266 39716.6667 21616.6667
+7267 39716.6667 21683.3333
+7268 39716.6667 21783.3333
+7269 39716.6667 21933.3333
+7270 39716.6667 22166.6667
+7271 39716.6667 22183.3333
+7272 39716.6667 22400.0000
+7273 39716.6667 22550.0000
+7274 39716.6667 22566.6667
+7275 39716.6667 22733.3333
+7276 39716.6667 22766.6667
+7277 39733.3333 19666.6667
+7278 39733.3333 19683.3333
+7279 39733.3333 19700.0000
+7280 39733.3333 19716.6667
+7281 39733.3333 19733.3333
+7282 39733.3333 19750.0000
+7283 39733.3333 19766.6667
+7284 39733.3333 19800.0000
+7285 39733.3333 19816.6667
+7286 39733.3333 19900.0000
+7287 39733.3333 19916.6667
+7288 39733.3333 19933.3333
+7289 39733.3333 20416.6667
+7290 39733.3333 20450.0000
+7291 39733.3333 20516.6667
+7292 39733.3333 20566.6667
+7293 39733.3333 20583.3333
+7294 39733.3333 20616.6667
+7295 39733.3333 20633.3333
+7296 39733.3333 20666.6667
+7297 39733.3333 20766.6667
+7298 39733.3333 20816.6667
+7299 39733.3333 20916.6667
+7300 39733.3333 20933.3333
+7301 39733.3333 21033.3333
+7302 39733.3333 21066.6667
+7303 39733.3333 21100.0000
+7304 39733.3333 21133.3333
+7305 39733.3333 21883.3333
+7306 39733.3333 22350.0000
+7307 39733.3333 22533.3333
+7308 39733.3333 22600.0000
+7309 39733.3333 22733.3333
+7310 39733.3333 22750.0000
+7311 39733.3333 22800.0000
+7312 39736.1111 19928.0556
+7313 39743.6111 19932.2222
+7314 39748.8889 19938.8889
+7315 39750.0000 19683.3333
+7316 39750.0000 19700.0000
+7317 39750.0000 19716.6667
+7318 39750.0000 19733.3333
+7319 39750.0000 19750.0000
+7320 39750.0000 19766.6667
+7321 39750.0000 19783.3333
+7322 39750.0000 19833.3333
+7323 39750.0000 19883.3333
+7324 39750.0000 19916.6667
+7325 39750.0000 19933.3333
+7326 39750.0000 20333.3333
+7327 39750.0000 20416.6667
+7328 39750.0000 20466.6667
+7329 39750.0000 20533.3333
+7330 39750.0000 20566.6667
+7331 39750.0000 20633.3333
+7332 39750.0000 20650.0000
+7333 39750.0000 20716.6667
+7334 39750.0000 20750.0000
+7335 39750.0000 20800.0000
+7336 39750.0000 21050.0000
+7337 39750.0000 21083.3333
+7338 39750.0000 21100.0000
+7339 39750.0000 21333.3333
+7340 39750.0000 21366.6667
+7341 39750.0000 21416.6667
+7342 39750.0000 21500.0000
+7343 39750.0000 21750.0000
+7344 39750.0000 22083.3333
+7345 39750.0000 22100.0000
+7346 39750.0000 22283.3333
+7347 39750.0000 22366.6667
+7348 39750.0000 22433.3333
+7349 39750.0000 22583.3333
+7350 39750.0000 22700.0000
+7351 39750.0000 22800.0000
+7352 39755.8333 19676.3889
+7353 39763.0556 19873.0556
+7354 39766.6667 19533.3333
+7355 39766.6667 19750.0000
+7356 39766.6667 19783.3333
+7357 39766.6667 19816.6667
+7358 39766.6667 19833.3333
+7359 39766.6667 19916.6667
+7360 39766.6667 19933.3333
+7361 39766.6667 20316.6667
+7362 39766.6667 20383.3333
+7363 39766.6667 20533.3333
+7364 39766.6667 20583.3333
+7365 39766.6667 20600.0000
+7366 39766.6667 20783.3333
+7367 39766.6667 20866.6667
+7368 39766.6667 21000.0000
+7369 39766.6667 21033.3333
+7370 39766.6667 21050.0000
+7371 39766.6667 21066.6667
+7372 39766.6667 21116.6667
+7373 39766.6667 21183.3333
+7374 39766.6667 21466.6667
+7375 39766.6667 21666.6667
+7376 39766.6667 21733.3333
+7377 39766.6667 22383.3333
+7378 39766.6667 22533.3333
+7379 39766.6667 22583.3333
+7380 39767.5000 19946.6667
+7381 39775.0000 19662.5000
+7382 39783.3333 19516.6667
+7383 39783.3333 19683.3333
+7384 39783.3333 19750.0000
+7385 39783.3333 19783.3333
+7386 39783.3333 19833.3333
+7387 39783.3333 19850.0000
+7388 39783.3333 19866.6667
+7389 39783.3333 19883.3333
+7390 39783.3333 19916.6667
+7391 39783.3333 20350.0000
+7392 39783.3333 20466.6667
+7393 39783.3333 20616.6667
+7394 39783.3333 20683.3333
+7395 39783.3333 20716.6667
+7396 39783.3333 20750.0000
+7397 39783.3333 20800.0000
+7398 39783.3333 20816.6667
+7399 39783.3333 20833.3333
+7400 39783.3333 20866.6667
+7401 39783.3333 21000.0000
+7402 39783.3333 21083.3333
+7403 39783.3333 21100.0000
+7404 39783.3333 21116.6667
+7405 39783.3333 21283.3333
+7406 39783.3333 21416.6667
+7407 39783.3333 21550.0000
+7408 39783.3333 21800.0000
+7409 39783.3333 21983.3333
+7410 39783.3333 22083.3333
+7411 39783.3333 22400.0000
+7412 39783.3333 22583.3333
+7413 39785.5556 19673.0556
+7414 39788.6111 19787.5000
+7415 39790.5556 19707.5000
+7416 39793.3333 19759.1667
+7417 39795.5556 19811.1111
+7418 39800.0000 19683.3333
+7419 39800.0000 19833.3333
+7420 39800.0000 19850.0000
+7421 39800.0000 19866.6667
+7422 39800.0000 20433.3333
+7423 39800.0000 20516.6667
+7424 39800.0000 20583.3333
+7425 39800.0000 20600.0000
+7426 39800.0000 20666.6667
+7427 39800.0000 20700.0000
+7428 39800.0000 21000.0000
+7429 39800.0000 21333.3333
+7430 39800.0000 21383.3333
+7431 39800.0000 21600.0000
+7432 39800.0000 21633.3333
+7433 39800.0000 21766.6667
+7434 39800.0000 21850.0000
+7435 39800.0000 21900.0000
+7436 39800.0000 22066.6667
+7437 39800.0000 22116.6667
+7438 39800.0000 22183.3333
+7439 39800.0000 22333.3333
+7440 39800.0000 22366.6667
+7441 39800.0000 22483.3333
+7442 39800.0000 22650.0000
+7443 39800.0000 25333.3333
+7444 39816.6667 19850.0000
+7445 39816.6667 20516.6667
+7446 39816.6667 20550.0000
+7447 39816.6667 20633.3333
+7448 39816.6667 20650.0000
+7449 39816.6667 20733.3333
+7450 39816.6667 20916.6667
+7451 39816.6667 20950.0000
+7452 39816.6667 21350.0000
+7453 39816.6667 21733.3333
+7454 39816.6667 22083.3333
+7455 39816.6667 22233.3333
+7456 39816.6667 22533.3333
+7457 39816.6667 25350.0000
+7458 39833.3333 20433.3333
+7459 39833.3333 20483.3333
+7460 39833.3333 20500.0000
+7461 39833.3333 20550.0000
+7462 39833.3333 20583.3333
+7463 39833.3333 20600.0000
+7464 39833.3333 20616.6667
+7465 39833.3333 20750.0000
+7466 39833.3333 20883.3333
+7467 39833.3333 21300.0000
+7468 39833.3333 21433.3333
+7469 39833.3333 21500.0000
+7470 39833.3333 21616.6667
+7471 39833.3333 21866.6667
+7472 39833.3333 21883.3333
+7473 39833.3333 22033.3333
+7474 39833.3333 22050.0000
+7475 39833.3333 22100.0000
+7476 39833.3333 22200.0000
+7477 39833.3333 22300.0000
+7478 39833.3333 22466.6667
+7479 39833.3333 22516.6667
+7480 39833.3333 22766.6667
+7481 39833.3333 22783.3333
+7482 39833.3333 25333.3333
+7483 39843.6111 19402.7778
+7484 39850.0000 19416.6667
+7485 39850.0000 20483.3333
+7486 39850.0000 20516.6667
+7487 39850.0000 20583.3333
+7488 39850.0000 20666.6667
+7489 39850.0000 20683.3333
+7490 39850.0000 20766.6667
+7491 39850.0000 20950.0000
+7492 39850.0000 20983.3333
+7493 39850.0000 21233.3333
+7494 39850.0000 21350.0000
+7495 39850.0000 21450.0000
+7496 39850.0000 21600.0000
+7497 39850.0000 21666.6667
+7498 39850.0000 21700.0000
+7499 39850.0000 21716.6667
+7500 39850.0000 21783.3333
+7501 39850.0000 21800.0000
+7502 39850.0000 22066.6667
+7503 39850.0000 22166.6667
+7504 39850.0000 22183.3333
+7505 39850.0000 22550.0000
+7506 39850.0000 25083.3333
+7507 39866.6667 19383.3333
+7508 39866.6667 19416.6667
+7509 39866.6667 20400.0000
+7510 39866.6667 20516.6667
+7511 39866.6667 20550.0000
+7512 39866.6667 20566.6667
+7513 39866.6667 20750.0000
+7514 39866.6667 20783.3333
+7515 39866.6667 20850.0000
+7516 39866.6667 20966.6667
+7517 39866.6667 20983.3333
+7518 39866.6667 21466.6667
+7519 39866.6667 21566.6667
+7520 39866.6667 21683.3333
+7521 39866.6667 21766.6667
+7522 39866.6667 22116.6667
+7523 39866.6667 22416.6667
+7524 39866.6667 22433.3333
+7525 39866.6667 22466.6667
+7526 39866.6667 22516.6667
+7527 39866.6667 22533.3333
+7528 39866.6667 25066.6667
+7529 39866.6667 25150.0000
+7530 39866.6667 25166.6667
+7531 39866.6667 25266.6667
+7532 39866.6667 25316.6667
+7533 39883.3333 19583.3333
+7534 39883.3333 20466.6667
+7535 39883.3333 20500.0000
+7536 39883.3333 20633.3333
+7537 39883.3333 20650.0000
+7538 39883.3333 20666.6667
+7539 39883.3333 20700.0000
+7540 39883.3333 20750.0000
+7541 39883.3333 20783.3333
+7542 39883.3333 21333.3333
+7543 39883.3333 21366.6667
+7544 39883.3333 21616.6667
+7545 39883.3333 21650.0000
+7546 39883.3333 21733.3333
+7547 39883.3333 21816.6667
+7548 39883.3333 22066.6667
+7549 39883.3333 22233.3333
+7550 39883.3333 22716.6667
+7551 39883.3333 25183.3333
+7552 39883.3333 25316.6667
+7553 39900.0000 20383.3333
+7554 39900.0000 20400.0000
+7555 39900.0000 20466.6667
+7556 39900.0000 20583.3333
+7557 39900.0000 20650.0000
+7558 39900.0000 20683.3333
+7559 39900.0000 20783.3333
+7560 39900.0000 20816.6667
+7561 39900.0000 21283.3333
+7562 39900.0000 21683.3333
+7563 39900.0000 22183.3333
+7564 39900.0000 22550.0000
+7565 39900.0000 22633.3333
+7566 39900.0000 25183.3333
+7567 39900.0000 25200.0000
+7568 39900.0000 25216.6667
+7569 39900.0000 25283.3333
+7570 39916.6667 20383.3333
+7571 39916.6667 20400.0000
+7572 39916.6667 20533.3333
+7573 39916.6667 20566.6667
+7574 39916.6667 20850.0000
+7575 39916.6667 21400.0000
+7576 39916.6667 21450.0000
+7577 39916.6667 21516.6667
+7578 39916.6667 21566.6667
+7579 39916.6667 21766.6667
+7580 39916.6667 21816.6667
+7581 39916.6667 22150.0000
+7582 39916.6667 22583.3333
+7583 39916.6667 22683.3333
+7584 39916.6667 25083.3333
+7585 39916.6667 25116.6667
+7586 39916.6667 25150.0000
+7587 39916.6667 25200.0000
+7588 39916.6667 25266.6667
+7589 39916.6667 25300.0000
+7590 39916.6667 25333.3333
+7591 39933.3333 20366.6667
+7592 39933.3333 20400.0000
+7593 39933.3333 20416.6667
+7594 39933.3333 20466.6667
+7595 39933.3333 20600.0000
+7596 39933.3333 20650.0000
+7597 39933.3333 20666.6667
+7598 39933.3333 21050.0000
+7599 39933.3333 21350.0000
+7600 39933.3333 22050.0000
+7601 39933.3333 22150.0000
+7602 39933.3333 22566.6667
+7603 39933.3333 22683.3333
+7604 39933.3333 25133.3333
+7605 39933.3333 25183.3333
+7606 39933.3333 25233.3333
+7607 39933.3333 25266.6667
+7608 39933.3333 25333.3333
+7609 39950.0000 20350.0000
+7610 39950.0000 20433.3333
+7611 39950.0000 20533.3333
+7612 39950.0000 20616.6667
+7613 39950.0000 20666.6667
+7614 39950.0000 20700.0000
+7615 39950.0000 21233.3333
+7616 39950.0000 21366.6667
+7617 39950.0000 21400.0000
+7618 39950.0000 21616.6667
+7619 39950.0000 21666.6667
+7620 39950.0000 21733.3333
+7621 39950.0000 21966.6667
+7622 39950.0000 22066.6667
+7623 39950.0000 22616.6667
+7624 39950.0000 23533.3333
+7625 39950.0000 23616.6667
+7626 39950.0000 23666.6667
+7627 39950.0000 25166.6667
+7628 39950.0000 25200.0000
+7629 39950.0000 25216.6667
+7630 39950.0000 25300.0000
+7631 39966.6667 20333.3333
+7632 39966.6667 20350.0000
+7633 39966.6667 20383.3333
+7634 39966.6667 20566.6667
+7635 39966.6667 20583.3333
+7636 39966.6667 20633.3333
+7637 39966.6667 20683.3333
+7638 39966.6667 20716.6667
+7639 39966.6667 20950.0000
+7640 39966.6667 21266.6667
+7641 39966.6667 21450.0000
+7642 39966.6667 21500.0000
+7643 39966.6667 21733.3333
+7644 39966.6667 21933.3333
+7645 39966.6667 22116.6667
+7646 39966.6667 22250.0000
+7647 39966.6667 22350.0000
+7648 39966.6667 22583.3333
+7649 39966.6667 23400.0000
+7650 39966.6667 23916.6667
+7651 39966.6667 25150.0000
+7652 39966.6667 25233.3333
+7653 39966.6667 25366.6667
+7654 39983.3333 20433.3333
+7655 39983.3333 20550.0000
+7656 39983.3333 20666.6667
+7657 39983.3333 20916.6667
+7658 39983.3333 21116.6667
+7659 39983.3333 21316.6667
+7660 39983.3333 21416.6667
+7661 39983.3333 21816.6667
+7662 39983.3333 22033.3333
+7663 39983.3333 22150.0000
+7664 39983.3333 22183.3333
+7665 39983.3333 22250.0000
+7666 39983.3333 22333.3333
+7667 39983.3333 22400.0000
+7668 39983.3333 22466.6667
+7669 39983.3333 22616.6667
+7670 39983.3333 23616.6667
+7671 39983.3333 23983.3333
+7672 39983.3333 25400.0000
+7673 40000.0000 20416.6667
+7674 40000.0000 20600.0000
+7675 40000.0000 20683.3333
+7676 40000.0000 20883.3333
+7677 40000.0000 21133.3333
+7678 40000.0000 21283.3333
+7679 40000.0000 21300.0000
+7680 40000.0000 21333.3333
+7681 40000.0000 21600.0000
+7682 40000.0000 21650.0000
+7683 40000.0000 21683.3333
+7684 40000.0000 21966.6667
+7685 40000.0000 22083.3333
+7686 40000.0000 22233.3333
+7687 40000.0000 22283.3333
+7688 40000.0000 22533.3333
+7689 40000.0000 22583.3333
+7690 40000.0000 23383.3333
+7691 40000.0000 23416.6667
+7692 40000.0000 23583.3333
+7693 40000.0000 25416.6667
+7694 40016.6667 20516.6667
+7695 40016.6667 20566.6667
+7696 40016.6667 20633.3333
+7697 40016.6667 20666.6667
+7698 40016.6667 21316.6667
+7699 40016.6667 21433.3333
+7700 40016.6667 21533.3333
+7701 40016.6667 21616.6667
+7702 40016.6667 21850.0000
+7703 40016.6667 22133.3333
+7704 40016.6667 22183.3333
+7705 40016.6667 22200.0000
+7706 40016.6667 22550.0000
+7707 40016.6667 22583.3333
+7708 40016.6667 23450.0000
+7709 40016.6667 23533.3333
+7710 40016.6667 23916.6667
+7711 40033.3333 20433.3333
+7712 40033.3333 20466.6667
+7713 40033.3333 20483.3333
+7714 40033.3333 20666.6667
+7715 40033.3333 20883.3333
+7716 40033.3333 20916.6667
+7717 40033.3333 20966.6667
+7718 40033.3333 21016.6667
+7719 40033.3333 21183.3333
+7720 40033.3333 21200.0000
+7721 40033.3333 21266.6667
+7722 40033.3333 21350.0000
+7723 40033.3333 21616.6667
+7724 40033.3333 21650.0000
+7725 40033.3333 21933.3333
+7726 40033.3333 22050.0000
+7727 40033.3333 22066.6667
+7728 40033.3333 22166.6667
+7729 40033.3333 23366.6667
+7730 40033.3333 23466.6667
+7731 40033.3333 23883.3333
+7732 40033.3333 23933.3333
+7733 40033.3333 24000.0000
+7734 40050.0000 20550.0000
+7735 40050.0000 20600.0000
+7736 40050.0000 20650.0000
+7737 40050.0000 20683.3333
+7738 40050.0000 20700.0000
+7739 40050.0000 20750.0000
+7740 40050.0000 20850.0000
+7741 40050.0000 21200.0000
+7742 40050.0000 21683.3333
+7743 40050.0000 21766.6667
+7744 40050.0000 21866.6667
+7745 40050.0000 22033.3333
+7746 40050.0000 22516.6667
+7747 40050.0000 23416.6667
+7748 40050.0000 23816.6667
+7749 40050.0000 24000.0000
+7750 40066.6667 20433.3333
+7751 40066.6667 20566.6667
+7752 40066.6667 20616.6667
+7753 40066.6667 20750.0000
+7754 40066.6667 20783.3333
+7755 40066.6667 21116.6667
+7756 40066.6667 21216.6667
+7757 40066.6667 21283.3333
+7758 40066.6667 21333.3333
+7759 40066.6667 21400.0000
+7760 40066.6667 21516.6667
+7761 40066.6667 21566.6667
+7762 40066.6667 21616.6667
+7763 40066.6667 21683.3333
+7764 40066.6667 21816.6667
+7765 40066.6667 22050.0000
+7766 40066.6667 22166.6667
+7767 40066.6667 22233.3333
+7768 40066.6667 22566.6667
+7769 40083.3333 20616.6667
+7770 40083.3333 20666.6667
+7771 40083.3333 20716.6667
+7772 40083.3333 20783.3333
+7773 40083.3333 21150.0000
+7774 40083.3333 21200.0000
+7775 40083.3333 21283.3333
+7776 40083.3333 21333.3333
+7777 40083.3333 21416.6667
+7778 40083.3333 21516.6667
+7779 40083.3333 21550.0000
+7780 40083.3333 21650.0000
+7781 40083.3333 21883.3333
+7782 40083.3333 21966.6667
+7783 40083.3333 23450.0000
+7784 40083.3333 23800.0000
+7785 40100.0000 20733.3333
+7786 40100.0000 21016.6667
+7787 40100.0000 21366.6667
+7788 40100.0000 21533.3333
+7789 40100.0000 21600.0000
+7790 40100.0000 21616.6667
+7791 40100.0000 22250.0000
+7792 40100.0000 22500.0000
+7793 40100.0000 23433.3333
+7794 40100.0000 23783.3333
+7795 40100.0000 23983.3333
+7796 40116.6667 20716.6667
+7797 40116.6667 20750.0000
+7798 40116.6667 20800.0000
+7799 40116.6667 20850.0000
+7800 40116.6667 21150.0000
+7801 40116.6667 21266.6667
+7802 40116.6667 21316.6667
+7803 40116.6667 21350.0000
+7804 40116.6667 21416.6667
+7805 40116.6667 21483.3333
+7806 40116.6667 21516.6667
+7807 40116.6667 21933.3333
+7808 40116.6667 23333.3333
+7809 40116.6667 23816.6667
+7810 40133.3333 20683.3333
+7811 40133.3333 20750.0000
+7812 40133.3333 20816.6667
+7813 40133.3333 21133.3333
+7814 40133.3333 21200.0000
+7815 40133.3333 21233.3333
+7816 40133.3333 21666.6667
+7817 40133.3333 21733.3333
+7818 40133.3333 21866.6667
+7819 40133.3333 21950.0000
+7820 40133.3333 22150.0000
+7821 40133.3333 23400.0000
+7822 40133.3333 23766.6667
+7823 40133.3333 24283.3333
+7824 40133.3333 24350.0000
+7825 40150.0000 20733.3333
+7826 40150.0000 20850.0000
+7827 40150.0000 20900.0000
+7828 40150.0000 21250.0000
+7829 40150.0000 21333.3333
+7830 40150.0000 21366.6667
+7831 40150.0000 21433.3333
+7832 40150.0000 21483.3333
+7833 40150.0000 21516.6667
+7834 40150.0000 21550.0000
+7835 40150.0000 21950.0000
+7836 40150.0000 22016.6667
+7837 40150.0000 22233.3333
+7838 40150.0000 22550.0000
+7839 40150.0000 23350.0000
+7840 40150.0000 24300.0000
+7841 40150.0000 24383.3333
+7842 40166.6667 20733.3333
+7843 40166.6667 20783.3333
+7844 40166.6667 20950.0000
+7845 40166.6667 21166.6667
+7846 40166.6667 21183.3333
+7847 40166.6667 21216.6667
+7848 40166.6667 21283.3333
+7849 40166.6667 21466.6667
+7850 40166.6667 21633.3333
+7851 40166.6667 21816.6667
+7852 40166.6667 21866.6667
+7853 40166.6667 21916.6667
+7854 40166.6667 22016.6667
+7855 40166.6667 22483.3333
+7856 40166.6667 23866.6667
+7857 40183.3333 21033.3333
+7858 40183.3333 21516.6667
+7859 40183.3333 21583.3333
+7860 40183.3333 21766.6667
+7861 40183.3333 21850.0000
+7862 40183.3333 21966.6667
+7863 40183.3333 22000.0000
+7864 40183.3333 22433.3333
+7865 40183.3333 22483.3333
+7866 40183.3333 22566.6667
+7867 40200.0000 20850.0000
+7868 40200.0000 21133.3333
+7869 40200.0000 21183.3333
+7870 40200.0000 21233.3333
+7871 40200.0000 21316.6667
+7872 40200.0000 21366.6667
+7873 40200.0000 21400.0000
+7874 40200.0000 21433.3333
+7875 40200.0000 21483.3333
+7876 40200.0000 21600.0000
+7877 40200.0000 21750.0000
+7878 40200.0000 21800.0000
+7879 40200.0000 21866.6667
+7880 40200.0000 21950.0000
+7881 40200.0000 22033.3333
+7882 40200.0000 22233.3333
+7883 40200.0000 22450.0000
+7884 40200.0000 23333.3333
+7885 40200.0000 24316.6667
+7886 40216.6667 20816.6667
+7887 40216.6667 20866.6667
+7888 40216.6667 20916.6667
+7889 40216.6667 21016.6667
+7890 40216.6667 21200.0000
+7891 40216.6667 21250.0000
+7892 40216.6667 21283.3333
+7893 40216.6667 21483.3333
+7894 40216.6667 21783.3333
+7895 40216.6667 21850.0000
+7896 40216.6667 21883.3333
+7897 40216.6667 21900.0000
+7898 40216.6667 22066.6667
+7899 40216.6667 23666.6667
+7900 40216.6667 24216.6667
+7901 40233.3333 20783.3333
+7902 40233.3333 20850.0000
+7903 40233.3333 20933.3333
+7904 40233.3333 21166.6667
+7905 40233.3333 21216.6667
+7906 40233.3333 21283.3333
+7907 40233.3333 21316.6667
+7908 40233.3333 21350.0000
+7909 40233.3333 21383.3333
+7910 40233.3333 21416.6667
+7911 40233.3333 21750.0000
+7912 40233.3333 21833.3333
+7913 40233.3333 21900.0000
+7914 40233.3333 21966.6667
+7915 40233.3333 22300.0000
+7916 40233.3333 22466.6667
+7917 40233.3333 22500.0000
+7918 40233.3333 22583.3333
+7919 40233.3333 23600.0000
+7920 40233.3333 23666.6667
+7921 40250.0000 20816.6667
+7922 40250.0000 21200.0000
+7923 40250.0000 21266.6667
+7924 40250.0000 21433.3333
+7925 40250.0000 21683.3333
+7926 40250.0000 21750.0000
+7927 40250.0000 21800.0000
+7928 40250.0000 21900.0000
+7929 40250.0000 21916.6667
+7930 40250.0000 22066.6667
+7931 40250.0000 22333.3333
+7932 40250.0000 22366.6667
+7933 40250.0000 22383.3333
+7934 40250.0000 22566.6667
+7935 40250.0000 23283.3333
+7936 40250.0000 23550.0000
+7937 40250.0000 23700.0000
+7938 40250.0000 24200.0000
+7939 40250.0000 24250.0000
+7940 40266.6667 20733.3333
+7941 40266.6667 20750.0000
+7942 40266.6667 20766.6667
+7943 40266.6667 20900.0000
+7944 40266.6667 21200.0000
+7945 40266.6667 21283.3333
+7946 40266.6667 21316.6667
+7947 40266.6667 21383.3333
+7948 40266.6667 21416.6667
+7949 40266.6667 21450.0000
+7950 40266.6667 21500.0000
+7951 40266.6667 21550.0000
+7952 40266.6667 21750.0000
+7953 40266.6667 21783.3333
+7954 40266.6667 21816.6667
+7955 40266.6667 21933.3333
+7956 40266.6667 22033.3333
+7957 40266.6667 22083.3333
+7958 40266.6667 22150.0000
+7959 40266.6667 22283.3333
+7960 40266.6667 22300.0000
+7961 40266.6667 22416.6667
+7962 40266.6667 22466.6667
+7963 40266.6667 22500.0000
+7964 40266.6667 22533.3333
+7965 40266.6667 22583.3333
+7966 40266.6667 22600.0000
+7967 40266.6667 23200.0000
+7968 40266.6667 23216.6667
+7969 40266.6667 23266.6667
+7970 40266.6667 23333.3333
+7971 40266.6667 23500.0000
+7972 40266.6667 24250.0000
+7973 40283.3333 20966.6667
+7974 40283.3333 21033.3333
+7975 40283.3333 21150.0000
+7976 40283.3333 21166.6667
+7977 40283.3333 21200.0000
+7978 40283.3333 21216.6667
+7979 40283.3333 21233.3333
+7980 40283.3333 21350.0000
+7981 40283.3333 21483.3333
+7982 40283.3333 21733.3333
+7983 40283.3333 21866.6667
+7984 40283.3333 21966.6667
+7985 40283.3333 22116.6667
+7986 40283.3333 22283.3333
+7987 40283.3333 22433.3333
+7988 40283.3333 22466.6667
+7989 40283.3333 22600.0000
+7990 40283.3333 23150.0000
+7991 40283.3333 23250.0000
+7992 40283.3333 23300.0000
+7993 40283.3333 23350.0000
+7994 40283.3333 23400.0000
+7995 40283.3333 23450.0000
+7996 40283.3333 24250.0000
+7997 40300.0000 20766.6667
+7998 40300.0000 20950.0000
+7999 40300.0000 21133.3333
+8000 40300.0000 21200.0000
+8001 40300.0000 21216.6667
+8002 40300.0000 21233.3333
+8003 40300.0000 21266.6667
+8004 40300.0000 21283.3333
+8005 40300.0000 21300.0000
+8006 40300.0000 21366.6667
+8007 40300.0000 21416.6667
+8008 40300.0000 21650.0000
+8009 40300.0000 21783.3333
+8010 40300.0000 22033.3333
+8011 40300.0000 22500.0000
+8012 40300.0000 23200.0000
+8013 40300.0000 23350.0000
+8014 40300.0000 23550.0000
+8015 40300.0000 24050.0000
+8016 40300.0000 24066.6667
+8017 40300.0000 24216.6667
+8018 40316.6667 20850.0000
+8019 40316.6667 21133.3333
+8020 40316.6667 21183.3333
+8021 40316.6667 21333.3333
+8022 40316.6667 21383.3333
+8023 40316.6667 21433.3333
+8024 40316.6667 21550.0000
+8025 40316.6667 21650.0000
+8026 40316.6667 21666.6667
+8027 40316.6667 21700.0000
+8028 40316.6667 21916.6667
+8029 40316.6667 22116.6667
+8030 40316.6667 22250.0000
+8031 40316.6667 22350.0000
+8032 40316.6667 22466.6667
+8033 40316.6667 22500.0000
+8034 40316.6667 22583.3333
+8035 40316.6667 23066.6667
+8036 40316.6667 23350.0000
+8037 40333.3333 21000.0000
+8038 40333.3333 21133.3333
+8039 40333.3333 21183.3333
+8040 40333.3333 21233.3333
+8041 40333.3333 21250.0000
+8042 40333.3333 21283.3333
+8043 40333.3333 21366.6667
+8044 40333.3333 21666.6667
+8045 40333.3333 21683.3333
+8046 40333.3333 21716.6667
+8047 40333.3333 21733.3333
+8048 40333.3333 21783.3333
+8049 40333.3333 21800.0000
+8050 40333.3333 21866.6667
+8051 40333.3333 21883.3333
+8052 40333.3333 22016.6667
+8053 40333.3333 22166.6667
+8054 40333.3333 22333.3333
+8055 40333.3333 22533.3333
+8056 40333.3333 23066.6667
+8057 40333.3333 23133.3333
+8058 40333.3333 23150.0000
+8059 40333.3333 23166.6667
+8060 40333.3333 23233.3333
+8061 40333.3333 23266.6667
+8062 40333.3333 23400.0000
+8063 40333.3333 23616.6667
+8064 40333.3333 23650.0000
+8065 40333.3333 23716.6667
+8066 40333.3333 23916.6667
+8067 40333.3333 23983.3333
+8068 40350.0000 20933.3333
+8069 40350.0000 21083.3333
+8070 40350.0000 21333.3333
+8071 40350.0000 21400.0000
+8072 40350.0000 21516.6667
+8073 40350.0000 21716.6667
+8074 40350.0000 21816.6667
+8075 40350.0000 21833.3333
+8076 40350.0000 21866.6667
+8077 40350.0000 21916.6667
+8078 40350.0000 21933.3333
+8079 40350.0000 21950.0000
+8080 40350.0000 21966.6667
+8081 40350.0000 22033.3333
+8082 40350.0000 22200.0000
+8083 40350.0000 22433.3333
+8084 40350.0000 22500.0000
+8085 40350.0000 22550.0000
+8086 40350.0000 23016.6667
+8087 40350.0000 23133.3333
+8088 40350.0000 23183.3333
+8089 40350.0000 23233.3333
+8090 40350.0000 23316.6667
+8091 40350.0000 23583.3333
+8092 40350.0000 23733.3333
+8093 40366.6667 21016.6667
+8094 40366.6667 21116.6667
+8095 40366.6667 21150.0000
+8096 40366.6667 21183.3333
+8097 40366.6667 21200.0000
+8098 40366.6667 21233.3333
+8099 40366.6667 21316.6667
+8100 40366.6667 21350.0000
+8101 40366.6667 21433.3333
+8102 40366.6667 21466.6667
+8103 40366.6667 21983.3333
+8104 40366.6667 22066.6667
+8105 40366.6667 22466.6667
+8106 40366.6667 22583.3333
+8107 40366.6667 22616.6667
+8108 40366.6667 23050.0000
+8109 40366.6667 23100.0000
+8110 40366.6667 23166.6667
+8111 40366.6667 23233.3333
+8112 40366.6667 23266.6667
+8113 40366.6667 23283.3333
+8114 40366.6667 23533.3333
+8115 40366.6667 23583.3333
+8116 40366.6667 23650.0000
+8117 40366.6667 23666.6667
+8118 40366.6667 23700.0000
+8119 40366.6667 23833.3333
+8120 40366.6667 23883.3333
+8121 40383.3333 20833.3333
+8122 40383.3333 20950.0000
+8123 40383.3333 21000.0000
+8124 40383.3333 21100.0000
+8125 40383.3333 21166.6667
+8126 40383.3333 21200.0000
+8127 40383.3333 21300.0000
+8128 40383.3333 21316.6667
+8129 40383.3333 21350.0000
+8130 40383.3333 21700.0000
+8131 40383.3333 21716.6667
+8132 40383.3333 21766.6667
+8133 40383.3333 21966.6667
+8134 40383.3333 21983.3333
+8135 40383.3333 22000.0000
+8136 40383.3333 22216.6667
+8137 40383.3333 22516.6667
+8138 40383.3333 22633.3333
+8139 40383.3333 23050.0000
+8140 40383.3333 23083.3333
+8141 40383.3333 23450.0000
+8142 40383.3333 23616.6667
+8143 40383.3333 23916.6667
+8144 40383.3333 23983.3333
+8145 40400.0000 21000.0000
+8146 40400.0000 21133.3333
+8147 40400.0000 21166.6667
+8148 40400.0000 21250.0000
+8149 40400.0000 21933.3333
+8150 40400.0000 22150.0000
+8151 40400.0000 22383.3333
+8152 40400.0000 22550.0000
+8153 40400.0000 22900.0000
+8154 40400.0000 23150.0000
+8155 40400.0000 23200.0000
+8156 40400.0000 23800.0000
+8157 40400.0000 23883.3333
+8158 40416.6667 20883.3333
+8159 40416.6667 20966.6667
+8160 40416.6667 21066.6667
+8161 40416.6667 21233.3333
+8162 40416.6667 21283.3333
+8163 40416.6667 21300.0000
+8164 40416.6667 21383.3333
+8165 40416.6667 21516.6667
+8166 40416.6667 21683.3333
+8167 40416.6667 21766.6667
+8168 40416.6667 21916.6667
+8169 40416.6667 22116.6667
+8170 40416.6667 22233.3333
+8171 40416.6667 22300.0000
+8172 40416.6667 22450.0000
+8173 40416.6667 22466.6667
+8174 40416.6667 22550.0000
+8175 40416.6667 22600.0000
+8176 40416.6667 23000.0000
+8177 40416.6667 23100.0000
+8178 40416.6667 23133.3333
+8179 40416.6667 23250.0000
+8180 40416.6667 23583.3333
+8181 40416.6667 24000.0000
+8182 40433.3333 21033.3333
+8183 40433.3333 21066.6667
+8184 40433.3333 21083.3333
+8185 40433.3333 21116.6667
+8186 40433.3333 21266.6667
+8187 40433.3333 21333.3333
+8188 40433.3333 21500.0000
+8189 40433.3333 21866.6667
+8190 40433.3333 21900.0000
+8191 40433.3333 22183.3333
+8192 40433.3333 22583.3333
+8193 40433.3333 22933.3333
+8194 40433.3333 23033.3333
+8195 40433.3333 23100.0000
+8196 40433.3333 23133.3333
+8197 40433.3333 23316.6667
+8198 40433.3333 23416.6667
+8199 40433.3333 23516.6667
+8200 40433.3333 25533.3333
+8201 40450.0000 20850.0000
+8202 40450.0000 20933.3333
+8203 40450.0000 21133.3333
+8204 40450.0000 21166.6667
+8205 40450.0000 21183.3333
+8206 40450.0000 21216.6667
+8207 40450.0000 21333.3333
+8208 40450.0000 21433.3333
+8209 40450.0000 21516.6667
+8210 40450.0000 21733.3333
+8211 40450.0000 21800.0000
+8212 40450.0000 21833.3333
+8213 40450.0000 22266.6667
+8214 40450.0000 22383.3333
+8215 40450.0000 22450.0000
+8216 40450.0000 22583.3333
+8217 40450.0000 23033.3333
+8218 40450.0000 23683.3333
+8219 40450.0000 25516.6667
+8220 40466.6667 20866.6667
+8221 40466.6667 20900.0000
+8222 40466.6667 20966.6667
+8223 40466.6667 21000.0000
+8224 40466.6667 21066.6667
+8225 40466.6667 21100.0000
+8226 40466.6667 21266.6667
+8227 40466.6667 21300.0000
+8228 40466.6667 21666.6667
+8229 40466.6667 21766.6667
+8230 40466.6667 21866.6667
+8231 40466.6667 22083.3333
+8232 40466.6667 22166.6667
+8233 40466.6667 22550.0000
+8234 40466.6667 22583.3333
+8235 40466.6667 22866.6667
+8236 40466.6667 22950.0000
+8237 40466.6667 22966.6667
+8238 40466.6667 22983.3333
+8239 40466.6667 23000.0000
+8240 40466.6667 23083.3333
+8241 40466.6667 23133.3333
+8242 40466.6667 23183.3333
+8243 40466.6667 23283.3333
+8244 40466.6667 23383.3333
+8245 40466.6667 25500.0000
+8246 40483.3333 20983.3333
+8247 40483.3333 21016.6667
+8248 40483.3333 21133.3333
+8249 40483.3333 21166.6667
+8250 40483.3333 21183.3333
+8251 40483.3333 21216.6667
+8252 40483.3333 21283.3333
+8253 40483.3333 21550.0000
+8254 40483.3333 21566.6667
+8255 40483.3333 21600.0000
+8256 40483.3333 21633.3333
+8257 40483.3333 21716.6667
+8258 40483.3333 21816.6667
+8259 40483.3333 22116.6667
+8260 40483.3333 22216.6667
+8261 40483.3333 22233.3333
+8262 40483.3333 22316.6667
+8263 40483.3333 22350.0000
+8264 40483.3333 22483.3333
+8265 40483.3333 22833.3333
+8266 40483.3333 22866.6667
+8267 40483.3333 23016.6667
+8268 40483.3333 23050.0000
+8269 40483.3333 23133.3333
+8270 40483.3333 23600.0000
+8271 40483.3333 25466.6667
+8272 40483.3333 25516.6667
+8273 40500.0000 21050.0000
+8274 40500.0000 21166.6667
+8275 40500.0000 21216.6667
+8276 40500.0000 21250.0000
+8277 40500.0000 21383.3333
+8278 40500.0000 21533.3333
+8279 40500.0000 21766.6667
+8280 40500.0000 21816.6667
+8281 40500.0000 21850.0000
+8282 40500.0000 22183.3333
+8283 40500.0000 22250.0000
+8284 40500.0000 22416.6667
+8285 40500.0000 22433.3333
+8286 40500.0000 22550.0000
+8287 40500.0000 22833.3333
+8288 40500.0000 22883.3333
+8289 40500.0000 22916.6667
+8290 40500.0000 22933.3333
+8291 40500.0000 22983.3333
+8292 40500.0000 23383.3333
+8293 40500.0000 23433.3333
+8294 40500.0000 23450.0000
+8295 40500.0000 23650.0000
+8296 40500.0000 25533.3333
+8297 40516.6667 21000.0000
+8298 40516.6667 21050.0000
+8299 40516.6667 21083.3333
+8300 40516.6667 21200.0000
+8301 40516.6667 21266.6667
+8302 40516.6667 21316.6667
+8303 40516.6667 21416.6667
+8304 40516.6667 21550.0000
+8305 40516.6667 21683.3333
+8306 40516.6667 21750.0000
+8307 40516.6667 22083.3333
+8308 40516.6667 22200.0000
+8309 40516.6667 22233.3333
+8310 40516.6667 22383.3333
+8311 40516.6667 22400.0000
+8312 40516.6667 22500.0000
+8313 40516.6667 22966.6667
+8314 40516.6667 23116.6667
+8315 40516.6667 23216.6667
+8316 40516.6667 23283.3333
+8317 40516.6667 23683.3333
+8318 40516.6667 23833.3333
+8319 40533.3333 21016.6667
+8320 40533.3333 21033.3333
+8321 40533.3333 21116.6667
+8322 40533.3333 21183.3333
+8323 40533.3333 21216.6667
+8324 40533.3333 21466.6667
+8325 40533.3333 21500.0000
+8326 40533.3333 21600.0000
+8327 40533.3333 22133.3333
+8328 40533.3333 22266.6667
+8329 40533.3333 22316.6667
+8330 40533.3333 22433.3333
+8331 40533.3333 23050.0000
+8332 40533.3333 23750.0000
+8333 40533.3333 23766.6667
+8334 40550.0000 21350.0000
+8335 40550.0000 21400.0000
+8336 40550.0000 21433.3333
+8337 40550.0000 21716.6667
+8338 40550.0000 21750.0000
+8339 40550.0000 22033.3333
+8340 40550.0000 22250.0000
+8341 40550.0000 22266.6667
+8342 40550.0000 22316.6667
+8343 40550.0000 22400.0000
+8344 40550.0000 22416.6667
+8345 40550.0000 22450.0000
+8346 40550.0000 22466.6667
+8347 40550.0000 22500.0000
+8348 40550.0000 23016.6667
+8349 40550.0000 23050.0000
+8350 40550.0000 23133.3333
+8351 40550.0000 23166.6667
+8352 40550.0000 23300.0000
+8353 40550.0000 23416.6667
+8354 40550.0000 23450.0000
+8355 40550.0000 23583.3333
+8356 40550.0000 23850.0000
+8357 40566.6667 21250.0000
+8358 40566.6667 21266.6667
+8359 40566.6667 21316.6667
+8360 40566.6667 21433.3333
+8361 40566.6667 21600.0000
+8362 40566.6667 21700.0000
+8363 40566.6667 22116.6667
+8364 40566.6667 22150.0000
+8365 40566.6667 22183.3333
+8366 40566.6667 22200.0000
+8367 40566.6667 22216.6667
+8368 40566.6667 22233.3333
+8369 40566.6667 22333.3333
+8370 40566.6667 22350.0000
+8371 40566.6667 22366.6667
+8372 40566.6667 22516.6667
+8373 40566.6667 22550.0000
+8374 40566.6667 22583.3333
+8375 40566.6667 23100.0000
+8376 40566.6667 23283.3333
+8377 40566.6667 23350.0000
+8378 40566.6667 23366.6667
+8379 40566.6667 23466.6667
+8380 40566.6667 23666.6667
+8381 40583.3333 21066.6667
+8382 40583.3333 21083.3333
+8383 40583.3333 21150.0000
+8384 40583.3333 21300.0000
+8385 40583.3333 21400.0000
+8386 40583.3333 21483.3333
+8387 40583.3333 22066.6667
+8388 40583.3333 22250.0000
+8389 40583.3333 22300.0000
+8390 40583.3333 22400.0000
+8391 40583.3333 22516.6667
+8392 40583.3333 22600.0000
+8393 40583.3333 22966.6667
+8394 40583.3333 23033.3333
+8395 40583.3333 23216.6667
+8396 40583.3333 23350.0000
+8397 40583.3333 23400.0000
+8398 40583.3333 23416.6667
+8399 40583.3333 23433.3333
+8400 40583.3333 24650.0000
+8401 40600.0000 21266.6667
+8402 40600.0000 21366.6667
+8403 40600.0000 21616.6667
+8404 40600.0000 21783.3333
+8405 40600.0000 22133.3333
+8406 40600.0000 22200.0000
+8407 40600.0000 22216.6667
+8408 40600.0000 22233.3333
+8409 40600.0000 22333.3333
+8410 40600.0000 22350.0000
+8411 40600.0000 22366.6667
+8412 40600.0000 22450.0000
+8413 40600.0000 22483.3333
+8414 40600.0000 22500.0000
+8415 40600.0000 22550.0000
+8416 40600.0000 22983.3333
+8417 40600.0000 23100.0000
+8418 40600.0000 23183.3333
+8419 40600.0000 23450.0000
+8420 40600.0000 23483.3333
+8421 40600.0000 23750.0000
+8422 40600.0000 23783.3333
+8423 40600.0000 24750.0000
+8424 40616.6667 21216.6667
+8425 40616.6667 21316.6667
+8426 40616.6667 21350.0000
+8427 40616.6667 21466.6667
+8428 40616.6667 21500.0000
+8429 40616.6667 21750.0000
+8430 40616.6667 22183.3333
+8431 40616.6667 22366.6667
+8432 40616.6667 22400.0000
+8433 40616.6667 22433.3333
+8434 40616.6667 22683.3333
+8435 40616.6667 22700.0000
+8436 40616.6667 23433.3333
+8437 40616.6667 23566.6667
+8438 40633.3333 21083.3333
+8439 40633.3333 21183.3333
+8440 40633.3333 21233.3333
+8441 40633.3333 21283.3333
+8442 40633.3333 21566.6667
+8443 40633.3333 21583.3333
+8444 40633.3333 21700.0000
+8445 40633.3333 21833.3333
+8446 40633.3333 22066.6667
+8447 40633.3333 22133.3333
+8448 40633.3333 22383.3333
+8449 40633.3333 22450.0000
+8450 40633.3333 22500.0000
+8451 40633.3333 22733.3333
+8452 40633.3333 22933.3333
+8453 40633.3333 22950.0000
+8454 40633.3333 23183.3333
+8455 40633.3333 23216.6667
+8456 40633.3333 23250.0000
+8457 40633.3333 23266.6667
+8458 40633.3333 23350.0000
+8459 40633.3333 23450.0000
+8460 40633.3333 23483.3333
+8461 40633.3333 23616.6667
+8462 40633.3333 24566.6667
+8463 40633.3333 24583.3333
+8464 40650.0000 21066.6667
+8465 40650.0000 21233.3333
+8466 40650.0000 21500.0000
+8467 40650.0000 21700.0000
+8468 40650.0000 21766.6667
+8469 40650.0000 22116.6667
+8470 40650.0000 22166.6667
+8471 40650.0000 22216.6667
+8472 40650.0000 22233.3333
+8473 40650.0000 22433.3333
+8474 40650.0000 22533.3333
+8475 40650.0000 22866.6667
+8476 40650.0000 22883.3333
+8477 40650.0000 22900.0000
+8478 40650.0000 23033.3333
+8479 40650.0000 23300.0000
+8480 40650.0000 23400.0000
+8481 40650.0000 23483.3333
+8482 40650.0000 23616.6667
+8483 40650.0000 23700.0000
+8484 40650.0000 24516.6667
+8485 40666.6667 21100.0000
+8486 40666.6667 21150.0000
+8487 40666.6667 21266.6667
+8488 40666.6667 21333.3333
+8489 40666.6667 21550.0000
+8490 40666.6667 21583.3333
+8491 40666.6667 21600.0000
+8492 40666.6667 21633.3333
+8493 40666.6667 21833.3333
+8494 40666.6667 22050.0000
+8495 40666.6667 22450.0000
+8496 40666.6667 22516.6667
+8497 40666.6667 22600.0000
+8498 40666.6667 22633.3333
+8499 40666.6667 22716.6667
+8500 40666.6667 22800.0000
+8501 40666.6667 22900.0000
+8502 40666.6667 22916.6667
+8503 40666.6667 22933.3333
+8504 40666.6667 22950.0000
+8505 40666.6667 22983.3333
+8506 40666.6667 23116.6667
+8507 40666.6667 23333.3333
+8508 40666.6667 23700.0000
+8509 40666.6667 24650.0000
+8510 40666.6667 24700.0000
+8511 40666.6667 24766.6667
+8512 40683.3333 21450.0000
+8513 40683.3333 21616.6667
+8514 40683.3333 21666.6667
+8515 40683.3333 21683.3333
+8516 40683.3333 21716.6667
+8517 40683.3333 22133.3333
+8518 40683.3333 22200.0000
+8519 40683.3333 22250.0000
+8520 40683.3333 22266.6667
+8521 40683.3333 22300.0000
+8522 40683.3333 22533.3333
+8523 40683.3333 22850.0000
+8524 40683.3333 22950.0000
+8525 40683.3333 23000.0000
+8526 40683.3333 23083.3333
+8527 40683.3333 23250.0000
+8528 40683.3333 23283.3333
+8529 40683.3333 23566.6667
+8530 40683.3333 23616.6667
+8531 40683.3333 24616.6667
+8532 40700.0000 21166.6667
+8533 40700.0000 21266.6667
+8534 40700.0000 21300.0000
+8535 40700.0000 21400.0000
+8536 40700.0000 21466.6667
+8537 40700.0000 21516.6667
+8538 40700.0000 21783.3333
+8539 40700.0000 21900.0000
+8540 40700.0000 21933.3333
+8541 40700.0000 22016.6667
+8542 40700.0000 22100.0000
+8543 40700.0000 22266.6667
+8544 40700.0000 22550.0000
+8545 40700.0000 22600.0000
+8546 40700.0000 23216.6667
+8547 40700.0000 23333.3333
+8548 40700.0000 23433.3333
+8549 40700.0000 23650.0000
+8550 40700.0000 24550.0000
+8551 40700.0000 24766.6667
+8552 40716.6667 21050.0000
+8553 40716.6667 21100.0000
+8554 40716.6667 21150.0000
+8555 40716.6667 21200.0000
+8556 40716.6667 21266.6667
+8557 40716.6667 21366.6667
+8558 40716.6667 21466.6667
+8559 40716.6667 21783.3333
+8560 40716.6667 22000.0000
+8561 40716.6667 22083.3333
+8562 40716.6667 22116.6667
+8563 40716.6667 22150.0000
+8564 40716.6667 22166.6667
+8565 40716.6667 22216.6667
+8566 40716.6667 22300.0000
+8567 40716.6667 22633.3333
+8568 40716.6667 22733.3333
+8569 40716.6667 22783.3333
+8570 40716.6667 23000.0000
+8571 40716.6667 23050.0000
+8572 40716.6667 23183.3333
+8573 40716.6667 23283.3333
+8574 40716.6667 23383.3333
+8575 40716.6667 23700.0000
+8576 40716.6667 24533.3333
+8577 40716.6667 24550.0000
+8578 40716.6667 24583.3333
+8579 40716.6667 24616.6667
+8580 40716.6667 24733.3333
+8581 40733.3333 21016.6667
+8582 40733.3333 21133.3333
+8583 40733.3333 21200.0000
+8584 40733.3333 21400.0000
+8585 40733.3333 21433.3333
+8586 40733.3333 21483.3333
+8587 40733.3333 21666.6667
+8588 40733.3333 21750.0000
+8589 40733.3333 21816.6667
+8590 40733.3333 22133.3333
+8591 40733.3333 22216.6667
+8592 40733.3333 22600.0000
+8593 40733.3333 22700.0000
+8594 40733.3333 22883.3333
+8595 40733.3333 22916.6667
+8596 40733.3333 23250.0000
+8597 40733.3333 23550.0000
+8598 40733.3333 24116.6667
+8599 40733.3333 24616.6667
+8600 40733.3333 24733.3333
+8601 40750.0000 21000.0000
+8602 40750.0000 21066.6667
+8603 40750.0000 21116.6667
+8604 40750.0000 21300.0000
+8605 40750.0000 21466.6667
+8606 40750.0000 21516.6667
+8607 40750.0000 21633.3333
+8608 40750.0000 22016.6667
+8609 40750.0000 22216.6667
+8610 40750.0000 22250.0000
+8611 40750.0000 22283.3333
+8612 40750.0000 22333.3333
+8613 40750.0000 22583.3333
+8614 40750.0000 22633.3333
+8615 40750.0000 22766.6667
+8616 40750.0000 22850.0000
+8617 40750.0000 22983.3333
+8618 40750.0000 23033.3333
+8619 40750.0000 23066.6667
+8620 40750.0000 23133.3333
+8621 40750.0000 23383.3333
+8622 40750.0000 23466.6667
+8623 40750.0000 23583.3333
+8624 40750.0000 23983.3333
+8625 40750.0000 24583.3333
+8626 40750.0000 24633.3333
+8627 40758.0556 24577.5000
+8628 40766.6667 21033.3333
+8629 40766.6667 21150.0000
+8630 40766.6667 21200.0000
+8631 40766.6667 21350.0000
+8632 40766.6667 21400.0000
+8633 40766.6667 21533.3333
+8634 40766.6667 21616.6667
+8635 40766.6667 21900.0000
+8636 40766.6667 22050.0000
+8637 40766.6667 22066.6667
+8638 40766.6667 22116.6667
+8639 40766.6667 22150.0000
+8640 40766.6667 22166.6667
+8641 40766.6667 22183.3333
+8642 40766.6667 22250.0000
+8643 40766.6667 22316.6667
+8644 40766.6667 22500.0000
+8645 40766.6667 22533.3333
+8646 40766.6667 22583.3333
+8647 40766.6667 22716.6667
+8648 40766.6667 22933.3333
+8649 40766.6667 23033.3333
+8650 40766.6667 23083.3333
+8651 40766.6667 23216.6667
+8652 40766.6667 23250.0000
+8653 40766.6667 23383.3333
+8654 40766.6667 23450.0000
+8655 40766.6667 23483.3333
+8656 40766.6667 23583.3333
+8657 40766.6667 24633.3333
+8658 40770.0000 24723.8889
+8659 40778.0556 24709.4444
+8660 40778.8889 24611.6667
+8661 40783.3333 21083.3333
+8662 40783.3333 21133.3333
+8663 40783.3333 21250.0000
+8664 40783.3333 21300.0000
+8665 40783.3333 21400.0000
+8666 40783.3333 21466.6667
+8667 40783.3333 21483.3333
+8668 40783.3333 21550.0000
+8669 40783.3333 21683.3333
+8670 40783.3333 22083.3333
+8671 40783.3333 22166.6667
+8672 40783.3333 22266.6667
+8673 40783.3333 22483.3333
+8674 40783.3333 22583.3333
+8675 40783.3333 22883.3333
+8676 40783.3333 22966.6667
+8677 40783.3333 23533.3333
+8678 40783.3333 23850.0000
+8679 40783.3333 23950.0000
+8680 40783.3333 24033.3333
+8681 40800.0000 21150.0000
+8682 40800.0000 21466.6667
+8683 40800.0000 21516.6667
+8684 40800.0000 21583.3333
+8685 40800.0000 21783.3333
+8686 40800.0000 21833.3333
+8687 40800.0000 21850.0000
+8688 40800.0000 21866.6667
+8689 40800.0000 21916.6667
+8690 40800.0000 22000.0000
+8691 40800.0000 22033.3333
+8692 40800.0000 22050.0000
+8693 40800.0000 22216.6667
+8694 40800.0000 22233.3333
+8695 40800.0000 22333.3333
+8696 40800.0000 22366.6667
+8697 40800.0000 22416.6667
+8698 40800.0000 22466.6667
+8699 40800.0000 22566.6667
+8700 40800.0000 22666.6667
+8701 40800.0000 22766.6667
+8702 40800.0000 22783.3333
+8703 40800.0000 22833.3333
+8704 40800.0000 22866.6667
+8705 40800.0000 22900.0000
+8706 40800.0000 23116.6667
+8707 40800.0000 23466.6667
+8708 40800.0000 23850.0000
+8709 40800.0000 23916.6667
+8710 40800.0000 23950.0000
+8711 40816.6667 21116.6667
+8712 40816.6667 21133.3333
+8713 40816.6667 21300.0000
+8714 40816.6667 21400.0000
+8715 40816.6667 21933.3333
+8716 40816.6667 22066.6667
+8717 40816.6667 22100.0000
+8718 40816.6667 22166.6667
+8719 40816.6667 22183.3333
+8720 40816.6667 22266.6667
+8721 40816.6667 22350.0000
+8722 40816.6667 22416.6667
+8723 40816.6667 22533.3333
+8724 40816.6667 22666.6667
+8725 40816.6667 22700.0000
+8726 40816.6667 22733.3333
+8727 40816.6667 23033.3333
+8728 40816.6667 23116.6667
+8729 40816.6667 23150.0000
+8730 40816.6667 23283.3333
+8731 40816.6667 23300.0000
+8732 40816.6667 23350.0000
+8733 40816.6667 23516.6667
+8734 40816.6667 23566.6667
+8735 40816.6667 23650.0000
+8736 40816.6667 24150.0000
+8737 40816.6667 24250.0000
+8738 40833.3333 21033.3333
+8739 40833.3333 21133.3333
+8740 40833.3333 21150.0000
+8741 40833.3333 21166.6667
+8742 40833.3333 21300.0000
+8743 40833.3333 21400.0000
+8744 40833.3333 21500.0000
+8745 40833.3333 21516.6667
+8746 40833.3333 21533.3333
+8747 40833.3333 21583.3333
+8748 40833.3333 21766.6667
+8749 40833.3333 22000.0000
+8750 40833.3333 22200.0000
+8751 40833.3333 22250.0000
+8752 40833.3333 22300.0000
+8753 40833.3333 22350.0000
+8754 40833.3333 22383.3333
+8755 40833.3333 22450.0000
+8756 40833.3333 22600.0000
+8757 40833.3333 22650.0000
+8758 40833.3333 22783.3333
+8759 40833.3333 22850.0000
+8760 40833.3333 22983.3333
+8761 40833.3333 23200.0000
+8762 40833.3333 23783.3333
+8763 40833.3333 23850.0000
+8764 40833.3333 23933.3333
+8765 40833.3333 24000.0000
+8766 40833.3333 24016.6667
+8767 40833.3333 24200.0000
+8768 40838.8889 24303.6111
+8769 40850.0000 21316.6667
+8770 40850.0000 21383.3333
+8771 40850.0000 21400.0000
+8772 40850.0000 21816.6667
+8773 40850.0000 21850.0000
+8774 40850.0000 21950.0000
+8775 40850.0000 22100.0000
+8776 40850.0000 22216.6667
+8777 40850.0000 22250.0000
+8778 40850.0000 22283.3333
+8779 40850.0000 22300.0000
+8780 40850.0000 22500.0000
+8781 40850.0000 22716.6667
+8782 40850.0000 22833.3333
+8783 40850.0000 22916.6667
+8784 40850.0000 23166.6667
+8785 40850.0000 23650.0000
+8786 40850.0000 23733.3333
+8787 40850.0000 24066.6667
+8788 40850.0000 24150.0000
+8789 40850.0000 24166.6667
+8790 40850.0000 24250.0000
+8791 40850.0000 25750.0000
+8792 40850.0000 25833.3333
+8793 40850.0000 25866.6667
+8794 40850.0000 25933.3333
+8795 40850.0000 26100.0000
+8796 40858.3333 24706.1111
+8797 40864.4444 24315.8333
+8798 40866.6667 21350.0000
+8799 40866.6667 21366.6667
+8800 40866.6667 21450.0000
+8801 40866.6667 21466.6667
+8802 40866.6667 21500.0000
+8803 40866.6667 21600.0000
+8804 40866.6667 21616.6667
+8805 40866.6667 21633.3333
+8806 40866.6667 22050.0000
+8807 40866.6667 22216.6667
+8808 40866.6667 22416.6667
+8809 40866.6667 22466.6667
+8810 40866.6667 22533.3333
+8811 40866.6667 22583.3333
+8812 40866.6667 22683.3333
+8813 40866.6667 22816.6667
+8814 40866.6667 22883.3333
+8815 40866.6667 22916.6667
+8816 40866.6667 22966.6667
+8817 40866.6667 23000.0000
+8818 40866.6667 23583.3333
+8819 40866.6667 23616.6667
+8820 40866.6667 23766.6667
+8821 40866.6667 23900.0000
+8822 40866.6667 23933.3333
+8823 40866.6667 24083.3333
+8824 40866.6667 24116.6667
+8825 40866.6667 24150.0000
+8826 40866.6667 24166.6667
+8827 40866.6667 24183.3333
+8828 40866.6667 24200.0000
+8829 40866.6667 24283.3333
+8830 40866.6667 25683.3333
+8831 40866.6667 25700.0000
+8832 40866.6667 25900.0000
+8833 40866.6667 25983.3333
+8834 40866.6667 26000.0000
+8835 40866.6667 26116.6667
+8836 40875.5556 24706.9444
+8837 40878.6111 24731.3889
+8838 40883.3333 21383.3333
+8839 40883.3333 21400.0000
+8840 40883.3333 21516.6667
+8841 40883.3333 21683.3333
+8842 40883.3333 21966.6667
+8843 40883.3333 22033.3333
+8844 40883.3333 22416.6667
+8845 40883.3333 22516.6667
+8846 40883.3333 22566.6667
+8847 40883.3333 22633.3333
+8848 40883.3333 22650.0000
+8849 40883.3333 22733.3333
+8850 40883.3333 22816.6667
+8851 40883.3333 22866.6667
+8852 40883.3333 22916.6667
+8853 40883.3333 22950.0000
+8854 40883.3333 23100.0000
+8855 40883.3333 23183.3333
+8856 40883.3333 23233.3333
+8857 40883.3333 23250.0000
+8858 40883.3333 23600.0000
+8859 40883.3333 23616.6667
+8860 40883.3333 23633.3333
+8861 40883.3333 23700.0000
+8862 40883.3333 23766.6667
+8863 40883.3333 23950.0000
+8864 40883.3333 24166.6667
+8865 40883.3333 24183.3333
+8866 40883.3333 24200.0000
+8867 40883.3333 24233.3333
+8868 40883.3333 25516.6667
+8869 40883.3333 25733.3333
+8870 40883.3333 25866.6667
+8871 40883.3333 25983.3333
+8872 40883.3333 26050.0000
+8873 40900.0000 21466.6667
+8874 40900.0000 21516.6667
+8875 40900.0000 22050.0000
+8876 40900.0000 22150.0000
+8877 40900.0000 22183.3333
+8878 40900.0000 22333.3333
+8879 40900.0000 22450.0000
+8880 40900.0000 22483.3333
+8881 40900.0000 22550.0000
+8882 40900.0000 22633.3333
+8883 40900.0000 22783.3333
+8884 40900.0000 22966.6667
+8885 40900.0000 22983.3333
+8886 40900.0000 23500.0000
+8887 40900.0000 23550.0000
+8888 40900.0000 23616.6667
+8889 40900.0000 23700.0000
+8890 40900.0000 23750.0000
+8891 40900.0000 23816.6667
+8892 40900.0000 24216.6667
+8893 40900.0000 25616.6667
+8894 40900.0000 25833.3333
+8895 40900.0000 25916.6667
+8896 40900.0000 26000.0000
+8897 40900.0000 26050.0000
+8898 40900.0000 26166.6667
+8899 40900.0000 26216.6667
+8900 40903.3333 24348.0556
+8901 40904.1667 24670.8333
+8902 40907.5000 24708.3333
+8903 40908.8889 24657.2222
+8904 40916.6667 21416.6667
+8905 40916.6667 21683.3333
+8906 40916.6667 21933.3333
+8907 40916.6667 21950.0000
+8908 40916.6667 22400.0000
+8909 40916.6667 22700.0000
+8910 40916.6667 22750.0000
+8911 40916.6667 22766.6667
+8912 40916.6667 22866.6667
+8913 40916.6667 22950.0000
+8914 40916.6667 23050.0000
+8915 40916.6667 23083.3333
+8916 40916.6667 23300.0000
+8917 40916.6667 23483.3333
+8918 40916.6667 23566.6667
+8919 40916.6667 23650.0000
+8920 40916.6667 23866.6667
+8921 40916.6667 23983.3333
+8922 40916.6667 24216.6667
+8923 40916.6667 24250.0000
+8924 40916.6667 25516.6667
+8925 40916.6667 25650.0000
+8926 40916.6667 25666.6667
+8927 40916.6667 25700.0000
+8928 40916.6667 25866.6667
+8929 40916.6667 25983.3333
+8930 40933.3333 21966.6667
+8931 40933.3333 22016.6667
+8932 40933.3333 22100.0000
+8933 40933.3333 22416.6667
+8934 40933.3333 22550.0000
+8935 40933.3333 22566.6667
+8936 40933.3333 22966.6667
+8937 40933.3333 23183.3333
+8938 40933.3333 23233.3333
+8939 40933.3333 23433.3333
+8940 40933.3333 23566.6667
+8941 40933.3333 24300.0000
+8942 40933.3333 24350.0000
+8943 40933.3333 24716.6667
+8944 40933.3333 24733.3333
+8945 40933.3333 24816.6667
+8946 40933.3333 24833.3333
+8947 40933.3333 24983.3333
+8948 40933.3333 25566.6667
+8949 40933.3333 25683.3333
+8950 40933.3333 25916.6667
+8951 40933.3333 26116.6667
+8952 40933.3333 26166.6667
+8953 40933.3333 26216.6667
+8954 40939.7222 24401.9444
+8955 40950.0000 21933.3333
+8956 40950.0000 21966.6667
+8957 40950.0000 22050.0000
+8958 40950.0000 22116.6667
+8959 40950.0000 22200.0000
+8960 40950.0000 22416.6667
+8961 40950.0000 22450.0000
+8962 40950.0000 22500.0000
+8963 40950.0000 22566.6667
+8964 40950.0000 22683.3333
+8965 40950.0000 22750.0000
+8966 40950.0000 22800.0000
+8967 40950.0000 22816.6667
+8968 40950.0000 22900.0000
+8969 40950.0000 22933.3333
+8970 40950.0000 23350.0000
+8971 40950.0000 23400.0000
+8972 40950.0000 23416.6667
+8973 40950.0000 23466.6667
+8974 40950.0000 23500.0000
+8975 40950.0000 23883.3333
+8976 40950.0000 23916.6667
+8977 40950.0000 24000.0000
+8978 40950.0000 24150.0000
+8979 40950.0000 24183.3333
+8980 40950.0000 24216.6667
+8981 40950.0000 24433.3333
+8982 40950.0000 24633.3333
+8983 40950.0000 24783.3333
+8984 40950.0000 24866.6667
+8985 40950.0000 25166.6667
+8986 40950.0000 25433.3333
+8987 40950.0000 25466.6667
+8988 40950.0000 25566.6667
+8989 40950.0000 25650.0000
+8990 40950.0000 26000.0000
+8991 40950.0000 26100.0000
+8992 40950.0000 26233.3333
+8993 40950.0000 26300.0000
+8994 40961.6667 24510.0000
+8995 40966.6667 21950.0000
+8996 40966.6667 22016.6667
+8997 40966.6667 22033.3333
+8998 40966.6667 22083.3333
+8999 40966.6667 22516.6667
+9000 40966.6667 22783.3333
+9001 40966.6667 22866.6667
+9002 40966.6667 22933.3333
+9003 40966.6667 23050.0000
+9004 40966.6667 23200.0000
+9005 40966.6667 23716.6667
+9006 40966.6667 24033.3333
+9007 40966.6667 24316.6667
+9008 40966.6667 24333.3333
+9009 40966.6667 24366.6667
+9010 40966.6667 24583.3333
+9011 40966.6667 24700.0000
+9012 40966.6667 24800.0000
+9013 40966.6667 24933.3333
+9014 40966.6667 25133.3333
+9015 40966.6667 25366.6667
+9016 40966.6667 25716.6667
+9017 40966.6667 26183.3333
+9018 40966.6667 26266.6667
+9019 40966.6667 26333.3333
+9020 40983.3333 21966.6667
+9021 40983.3333 21983.3333
+9022 40983.3333 22066.6667
+9023 40983.3333 22133.3333
+9024 40983.3333 22383.3333
+9025 40983.3333 22416.6667
+9026 40983.3333 22550.0000
+9027 40983.3333 22616.6667
+9028 40983.3333 22650.0000
+9029 40983.3333 22666.6667
+9030 40983.3333 22950.0000
+9031 40983.3333 23000.0000
+9032 40983.3333 23116.6667
+9033 40983.3333 23233.3333
+9034 40983.3333 23283.3333
+9035 40983.3333 23350.0000
+9036 40983.3333 23416.6667
+9037 40983.3333 23433.3333
+9038 40983.3333 23516.6667
+9039 40983.3333 23666.6667
+9040 40983.3333 23866.6667
+9041 40983.3333 23966.6667
+9042 40983.3333 24033.3333
+9043 40983.3333 24050.0000
+9044 40983.3333 24333.3333
+9045 40983.3333 24466.6667
+9046 40983.3333 24500.0000
+9047 40983.3333 24516.6667
+9048 40983.3333 24566.6667
+9049 40983.3333 24616.6667
+9050 40983.3333 24700.0000
+9051 40983.3333 24783.3333
+9052 40983.3333 24800.0000
+9053 40983.3333 24833.3333
+9054 40983.3333 24933.3333
+9055 40983.3333 24950.0000
+9056 40983.3333 24966.6667
+9057 40983.3333 25216.6667
+9058 40983.3333 25233.3333
+9059 40983.3333 25300.0000
+9060 40983.3333 25416.6667
+9061 40983.3333 25566.6667
+9062 40983.3333 25616.6667
+9063 40983.3333 25650.0000
+9064 40983.3333 25666.6667
+9065 40983.3333 25783.3333
+9066 40983.3333 26150.0000
+9067 40983.3333 26216.6667
+9068 40983.3333 26250.0000
+9069 41000.0000 22033.3333
+9070 41000.0000 22050.0000
+9071 41000.0000 22150.0000
+9072 41000.0000 22175.2778
+9073 41000.0000 22573.8889
+9074 41000.0000 22725.5556
+9075 41000.0000 22766.6667
+9076 41000.0000 22933.3333
+9077 41000.0000 23033.3333
+9078 41000.0000 23100.0000
+9079 41000.0000 23133.3333
+9080 41000.0000 23366.6667
+9081 41000.0000 23483.3333
+9082 41000.0000 23566.6667
+9083 41000.0000 23600.0000
+9084 41000.0000 23633.3333
+9085 41000.0000 23783.3333
+9086 41000.0000 23866.6667
+9087 41000.0000 23966.6667
+9088 41000.0000 24633.3333
+9089 41000.0000 24650.0000
+9090 41000.0000 24966.6667
+9091 41000.0000 24983.3333
+9092 41000.0000 25383.3333
+9093 41000.0000 25450.0000
+9094 41000.0000 25466.6667
+9095 41000.0000 25483.3333
+9096 41000.0000 25533.3333
+9097 41000.0000 25550.0000
+9098 41000.0000 25733.3333
+9099 41000.0000 25866.6667
+9100 41000.0000 26266.6667
+9101 41002.7778 22882.2222
+9102 41006.1111 22292.2222
+9103 41008.6111 22796.9444
+9104 41008.8889 22133.8889
+9105 41009.1667 22065.2778
+9106 41010.5556 22177.5000
+9107 41010.5556 22499.7222
+9108 41010.5556 22664.4444
+9109 41014.4444 22595.8333
+9110 41016.6667 22816.6667
+9111 41016.6667 23333.3333
+9112 41016.6667 23400.0000
+9113 41016.6667 23433.3333
+9114 41016.6667 23466.6667
+9115 41016.6667 23483.3333
+9116 41016.6667 23516.6667
+9117 41016.6667 23550.0000
+9118 41016.6667 23616.6667
+9119 41016.6667 23650.0000
+9120 41016.6667 23700.0000
+9121 41016.6667 23766.6667
+9122 41016.6667 24166.6667
+9123 41016.6667 24216.6667
+9124 41016.6667 24316.6667
+9125 41016.6667 24383.3333
+9126 41016.6667 24416.6667
+9127 41016.6667 24633.3333
+9128 41016.6667 24766.6667
+9129 41016.6667 24800.0000
+9130 41016.6667 24900.0000
+9131 41016.6667 24916.6667
+9132 41016.6667 25116.6667
+9133 41016.6667 25200.0000
+9134 41016.6667 25233.3333
+9135 41016.6667 25350.0000
+9136 41016.6667 25366.6667
+9137 41016.6667 25516.6667
+9138 41016.6667 25600.0000
+9139 41016.6667 25683.3333
+9140 41016.6667 25950.0000
+9141 41016.6667 26200.0000
+9142 41020.0000 22953.6111
+9143 41023.6111 22886.6667
+9144 41024.1667 22190.8333
+9145 41026.1111 22007.5000
+9146 41026.1111 22048.3333
+9147 41026.9444 22767.2222
+9148 41028.8889 22100.0000
+9149 41029.4444 22081.1111
+9150 41030.5556 22191.3889
+9151 41030.8333 22598.0556
+9152 41033.3333 22800.0000
+9153 41033.3333 22866.6667
+9154 41033.3333 23366.6667
+9155 41033.3333 23816.6667
+9156 41033.3333 23833.3333
+9157 41033.3333 23916.6667
+9158 41033.3333 23933.3333
+9159 41033.3333 24033.3333
+9160 41033.3333 24283.3333
+9161 41033.3333 24300.0000
+9162 41033.3333 24333.3333
+9163 41033.3333 24383.3333
+9164 41033.3333 24666.6667
+9165 41033.3333 24800.0000
+9166 41033.3333 24850.0000
+9167 41033.3333 24866.6667
+9168 41033.3333 25033.3333
+9169 41033.3333 25066.6667
+9170 41033.3333 25216.6667
+9171 41033.3333 25316.6667
+9172 41033.3333 25400.0000
+9173 41033.3333 25566.6667
+9174 41033.3333 25700.0000
+9175 41033.3333 26250.0000
+9176 41033.3333 26283.3333
+9177 41033.6111 22045.0000
+9178 41035.0000 22154.7222
+9179 41036.9444 22238.8889
+9180 41038.6111 22952.5000
+9181 41041.9444 22578.8889
+9182 41044.1667 22696.1111
+9183 41050.0000 22516.6667
+9184 41050.0000 23000.0000
+9185 41050.0000 23050.0000
+9186 41050.0000 23316.6667
+9187 41050.0000 23550.0000
+9188 41050.0000 23583.3333
+9189 41050.0000 23683.3333
+9190 41050.0000 23766.6667
+9191 41050.0000 23916.6667
+9192 41050.0000 24050.0000
+9193 41050.0000 24100.0000
+9194 41050.0000 24133.3333
+9195 41050.0000 24183.3333
+9196 41050.0000 24266.6667
+9197 41050.0000 24450.0000
+9198 41050.0000 24550.0000
+9199 41050.0000 24583.3333
+9200 41050.0000 24600.0000
+9201 41050.0000 24650.0000
+9202 41050.0000 24700.0000
+9203 41050.0000 24716.6667
+9204 41050.0000 24766.6667
+9205 41050.0000 24783.3333
+9206 41050.0000 24816.6667
+9207 41050.0000 24850.0000
+9208 41050.0000 25016.6667
+9209 41050.0000 25200.0000
+9210 41050.0000 25333.3333
+9211 41050.0000 25366.6667
+9212 41050.0000 25400.0000
+9213 41050.0000 25416.6667
+9214 41050.0000 25466.6667
+9215 41050.0000 25483.3333
+9216 41050.0000 25500.0000
+9217 41050.0000 25533.3333
+9218 41050.0000 25683.3333
+9219 41050.0000 26266.6667
+9220 41057.2222 22175.2778
+9221 41058.6111 22162.2222
+9222 41063.8889 22733.8889
+9223 41066.6667 22083.3333
+9224 41066.6667 22633.3333
+9225 41066.6667 22966.6667
+9226 41066.6667 23066.6667
+9227 41066.6667 23166.6667
+9228 41066.6667 23383.3333
+9229 41066.6667 23400.0000
+9230 41066.6667 23433.3333
+9231 41066.6667 23450.0000
+9232 41066.6667 23600.0000
+9233 41066.6667 23650.0000
+9234 41066.6667 23750.0000
+9235 41066.6667 23816.6667
+9236 41066.6667 23883.3333
+9237 41066.6667 23933.3333
+9238 41066.6667 23950.0000
+9239 41066.6667 24066.6667
+9240 41066.6667 24250.0000
+9241 41066.6667 24266.6667
+9242 41066.6667 24366.6667
+9243 41066.6667 24483.3333
+9244 41066.6667 24566.6667
+9245 41066.6667 24600.0000
+9246 41066.6667 24616.6667
+9247 41066.6667 24733.3333
+9248 41066.6667 24750.0000
+9249 41066.6667 24783.3333
+9250 41066.6667 24833.3333
+9251 41066.6667 24850.0000
+9252 41066.6667 24900.0000
+9253 41066.6667 24916.6667
+9254 41066.6667 24933.3333
+9255 41066.6667 24966.6667
+9256 41066.6667 25066.6667
+9257 41066.6667 25233.3333
+9258 41066.6667 25333.3333
+9259 41066.6667 25450.0000
+9260 41066.6667 25533.3333
+9261 41066.6667 25550.0000
+9262 41066.6667 25583.3333
+9263 41066.6667 25616.6667
+9264 41066.6667 25650.0000
+9265 41066.6667 25716.6667
+9266 41066.6667 25766.6667
+9267 41066.6667 25900.0000
+9268 41066.6667 26266.6667
+9269 41068.0556 22595.8333
+9270 41071.1111 22359.4444
+9271 41071.1111 22572.5000
+9272 41072.2222 22907.2222
+9273 41072.5000 22704.4444
+9274 41072.5000 22761.9444
+9275 41074.4444 22635.0000
+9276 41075.8333 22428.6111
+9277 41076.3889 22851.1111
+9278 41080.8333 22475.8333
+9279 41082.2222 22498.3333
+9280 41083.3333 22900.0000
+9281 41083.3333 23016.6667
+9282 41083.3333 23033.3333
+9283 41083.3333 23133.3333
+9284 41083.3333 23250.0000
+9285 41083.3333 23283.3333
+9286 41083.3333 23350.0000
+9287 41083.3333 23466.6667
+9288 41083.3333 23550.0000
+9289 41083.3333 23716.6667
+9290 41083.3333 23733.3333
+9291 41083.3333 23750.0000
+9292 41083.3333 23833.3333
+9293 41083.3333 23950.0000
+9294 41083.3333 24183.3333
+9295 41083.3333 24300.0000
+9296 41083.3333 24400.0000
+9297 41083.3333 24483.3333
+9298 41083.3333 24500.0000
+9299 41083.3333 24516.6667
+9300 41083.3333 24533.3333
+9301 41083.3333 24566.6667
+9302 41083.3333 24666.6667
+9303 41083.3333 24766.6667
+9304 41083.3333 24800.0000
+9305 41083.3333 24850.0000
+9306 41083.3333 24866.6667
+9307 41083.3333 24900.0000
+9308 41083.3333 24916.6667
+9309 41083.3333 24950.0000
+9310 41083.3333 24966.6667
+9311 41083.3333 25016.6667
+9312 41083.3333 25233.3333
+9313 41083.3333 25266.6667
+9314 41083.3333 25283.3333
+9315 41083.3333 25333.3333
+9316 41083.3333 25416.6667
+9317 41083.3333 25483.3333
+9318 41083.3333 25550.0000
+9319 41083.3333 25566.6667
+9320 41083.3333 25616.6667
+9321 41083.3333 25650.0000
+9322 41083.3333 25700.0000
+9323 41083.3333 25766.6667
+9324 41083.3333 25783.3333
+9325 41083.3333 25800.0000
+9326 41083.3333 26300.0000
+9327 41084.1667 22280.0000
+9328 41085.8333 22678.6111
+9329 41091.1111 22783.6111
+9330 41091.6667 22726.9444
+9331 41095.2778 22382.5000
+9332 41095.5556 22176.1111
+9333 41095.5556 22523.8889
+9334 41100.0000 22900.0000
+9335 41100.0000 23416.6667
+9336 41100.0000 23500.0000
+9337 41100.0000 23583.3333
+9338 41100.0000 23616.6667
+9339 41100.0000 23650.0000
+9340 41100.0000 23683.3333
+9341 41100.0000 23900.0000
+9342 41100.0000 24083.3333
+9343 41100.0000 24116.6667
+9344 41100.0000 24183.3333
+9345 41100.0000 24233.3333
+9346 41100.0000 24283.3333
+9347 41100.0000 24300.0000
+9348 41100.0000 24533.3333
+9349 41100.0000 24600.0000
+9350 41100.0000 24633.3333
+9351 41100.0000 24783.3333
+9352 41100.0000 24800.0000
+9353 41100.0000 24900.0000
+9354 41100.0000 24916.6667
+9355 41100.0000 24933.3333
+9356 41100.0000 25150.0000
+9357 41100.0000 25200.0000
+9358 41100.0000 25300.0000
+9359 41100.0000 25350.0000
+9360 41100.0000 25383.3333
+9361 41100.0000 25450.0000
+9362 41100.0000 25583.3333
+9363 41100.0000 25766.6667
+9364 41100.0000 25783.3333
+9365 41102.5000 22920.8333
+9366 41103.3333 22208.0556
+9367 41103.6111 22262.7778
+9368 41103.6111 22845.0000
+9369 41104.4444 22623.0556
+9370 41105.0000 22481.9444
+9371 41105.5556 22557.7778
+9372 41106.1111 22733.3333
+9373 41108.0556 22993.8889
+9374 41109.7222 22046.9444
+9375 41111.6667 22271.3889
+9376 41114.7222 22897.5000
+9377 41115.5556 22794.7222
+9378 41116.6667 22833.3333
+9379 41116.6667 23066.6667
+9380 41116.6667 23183.3333
+9381 41116.6667 23250.0000
+9382 41116.6667 23300.0000
+9383 41116.6667 23333.3333
+9384 41116.6667 23383.3333
+9385 41116.6667 23466.6667
+9386 41116.6667 23516.6667
+9387 41116.6667 23650.0000
+9388 41116.6667 23916.6667
+9389 41116.6667 24000.0000
+9390 41116.6667 24033.3333
+9391 41116.6667 24050.0000
+9392 41116.6667 24083.3333
+9393 41116.6667 24100.0000
+9394 41116.6667 24133.3333
+9395 41116.6667 24150.0000
+9396 41116.6667 24283.3333
+9397 41116.6667 24300.0000
+9398 41116.6667 24350.0000
+9399 41116.6667 24383.3333
+9400 41116.6667 24433.3333
+9401 41116.6667 24583.3333
+9402 41116.6667 24700.0000
+9403 41116.6667 24783.3333
+9404 41116.6667 24816.6667
+9405 41116.6667 24833.3333
+9406 41116.6667 24850.0000
+9407 41116.6667 24866.6667
+9408 41116.6667 24916.6667
+9409 41116.6667 24950.0000
+9410 41116.6667 25000.0000
+9411 41116.6667 25016.6667
+9412 41116.6667 25066.6667
+9413 41116.6667 25116.6667
+9414 41116.6667 25200.0000
+9415 41116.6667 25300.0000
+9416 41116.6667 25366.6667
+9417 41116.6667 25400.0000
+9418 41116.6667 25433.3333
+9419 41116.6667 25633.3333
+9420 41116.6667 25650.0000
+9421 41116.6667 25683.3333
+9422 41116.6667 25716.6667
+9423 41116.6667 26283.3333
+9424 41120.2778 22661.1111
+9425 41122.7778 22511.9444
+9426 41128.3333 22876.1111
+9427 41133.3333 23066.6667
+9428 41133.3333 23216.6667
+9429 41133.3333 23383.3333
+9430 41133.3333 23933.3333
+9431 41133.3333 24000.0000
+9432 41133.3333 24116.6667
+9433 41133.3333 24150.0000
+9434 41133.3333 24166.6667
+9435 41133.3333 24216.6667
+9436 41133.3333 24266.6667
+9437 41133.3333 24316.6667
+9438 41133.3333 24366.6667
+9439 41133.3333 24700.0000
+9440 41133.3333 24733.3333
+9441 41133.3333 24850.0000
+9442 41133.3333 24866.6667
+9443 41133.3333 24883.3333
+9444 41133.3333 24983.3333
+9445 41133.3333 25000.0000
+9446 41133.3333 25050.0000
+9447 41133.3333 25183.3333
+9448 41133.3333 25216.6667
+9449 41133.3333 25266.6667
+9450 41133.3333 25283.3333
+9451 41133.3333 25550.0000
+9452 41133.3333 25600.0000
+9453 41133.3333 25650.0000
+9454 41133.3333 25716.6667
+9455 41133.3333 26216.6667
+9456 41134.4444 22917.2222
+9457 41139.1667 22668.6111
+9458 41144.7222 22972.7778
+9459 41146.9444 22744.7222
+9460 41150.0000 22833.3333
+9461 41150.0000 23000.0000
+9462 41150.0000 23166.6667
+9463 41150.0000 23283.3333
+9464 41150.0000 23333.3333
+9465 41150.0000 23416.6667
+9466 41150.0000 23450.0000
+9467 41150.0000 23583.3333
+9468 41150.0000 23900.0000
+9469 41150.0000 24066.6667
+9470 41150.0000 24133.3333
+9471 41150.0000 24150.0000
+9472 41150.0000 24483.3333
+9473 41150.0000 24933.3333
+9474 41150.0000 24966.6667
+9475 41150.0000 25066.6667
+9476 41150.0000 25300.0000
+9477 41150.0000 25316.6667
+9478 41150.0000 25333.3333
+9479 41150.0000 25350.0000
+9480 41150.0000 25433.3333
+9481 41150.0000 25466.6667
+9482 41150.0000 25500.0000
+9483 41150.0000 25533.3333
+9484 41150.0000 25566.6667
+9485 41150.0000 25683.3333
+9486 41150.0000 26216.6667
+9487 41150.0000 26300.0000
+9488 41162.5000 22894.4444
+9489 41164.4444 22668.6111
+9490 41166.6667 22800.0000
+9491 41166.6667 23016.6667
+9492 41166.6667 23266.6667
+9493 41166.6667 23283.3333
+9494 41166.6667 23366.6667
+9495 41166.6667 23850.0000
+9496 41166.6667 24216.6667
+9497 41166.6667 24316.6667
+9498 41166.6667 24333.3333
+9499 41166.6667 24366.6667
+9500 41166.6667 24383.3333
+9501 41166.6667 24400.0000
+9502 41166.6667 24550.0000
+9503 41166.6667 24633.3333
+9504 41166.6667 24733.3333
+9505 41166.6667 24850.0000
+9506 41166.6667 24966.6667
+9507 41166.6667 24983.3333
+9508 41166.6667 25366.6667
+9509 41166.6667 25383.3333
+9510 41166.6667 25466.6667
+9511 41166.6667 25483.3333
+9512 41166.6667 25616.6667
+9513 41166.6667 25633.3333
+9514 41166.6667 26116.6667
+9515 41178.0556 22760.8333
+9516 41183.3333 22850.0000
+9517 41183.3333 22883.3333
+9518 41183.3333 22900.0000
+9519 41183.3333 22916.6667
+9520 41183.3333 23083.3333
+9521 41183.3333 23233.3333
+9522 41183.3333 23250.0000
+9523 41183.3333 23266.6667
+9524 41183.3333 23316.6667
+9525 41183.3333 23400.0000
+9526 41183.3333 23933.3333
+9527 41183.3333 23966.6667
+9528 41183.3333 24166.6667
+9529 41183.3333 24316.6667
+9530 41183.3333 24366.6667
+9531 41183.3333 24383.3333
+9532 41183.3333 24416.6667
+9533 41183.3333 24833.3333
+9534 41183.3333 24900.0000
+9535 41183.3333 24950.0000
+9536 41183.3333 25283.3333
+9537 41183.3333 25333.3333
+9538 41183.3333 25416.6667
+9539 41183.3333 25433.3333
+9540 41183.3333 25883.3333
+9541 41186.6667 22815.8333
+9542 41200.0000 22816.6667
+9543 41200.0000 23200.0000
+9544 41200.0000 23250.0000
+9545 41200.0000 23283.3333
+9546 41200.0000 23366.6667
+9547 41200.0000 23550.0000
+9548 41200.0000 23583.3333
+9549 41200.0000 23600.0000
+9550 41200.0000 23816.6667
+9551 41200.0000 23900.0000
+9552 41200.0000 24016.6667
+9553 41200.0000 24100.0000
+9554 41200.0000 24333.3333
+9555 41200.0000 24383.3333
+9556 41200.0000 24416.6667
+9557 41200.0000 24700.0000
+9558 41200.0000 24816.6667
+9559 41200.0000 24883.3333
+9560 41200.0000 24916.6667
+9561 41200.0000 25016.6667
+9562 41200.0000 25033.3333
+9563 41200.0000 25133.3333
+9564 41200.0000 25166.6667
+9565 41200.0000 25383.3333
+9566 41200.0000 25516.6667
+9567 41200.0000 25583.3333
+9568 41200.0000 26300.0000
+9569 41216.6667 22816.6667
+9570 41216.6667 22900.0000
+9571 41216.6667 23033.3333
+9572 41216.6667 23050.0000
+9573 41216.6667 23083.3333
+9574 41216.6667 23300.0000
+9575 41216.6667 23366.6667
+9576 41216.6667 23400.0000
+9577 41216.6667 23900.0000
+9578 41216.6667 23916.6667
+9579 41216.6667 24266.6667
+9580 41216.6667 24350.0000
+9581 41216.6667 24366.6667
+9582 41216.6667 24433.3333
+9583 41216.6667 24450.0000
+9584 41216.6667 24466.6667
+9585 41216.6667 24550.0000
+9586 41216.6667 24633.3333
+9587 41216.6667 24666.6667
+9588 41216.6667 24783.3333
+9589 41216.6667 24800.0000
+9590 41216.6667 24866.6667
+9591 41216.6667 24900.0000
+9592 41216.6667 24933.3333
+9593 41216.6667 24950.0000
+9594 41216.6667 25450.0000
+9595 41216.6667 25566.6667
+9596 41216.6667 25683.3333
+9597 41216.6667 25700.0000
+9598 41216.6667 25733.3333
+9599 41216.6667 26016.6667
+9600 41216.6667 26200.0000
+9601 41222.5000 22827.7778
+9602 41226.9444 22790.0000
+9603 41233.3333 22983.3333
+9604 41233.3333 23000.0000
+9605 41233.3333 23250.0000
+9606 41233.3333 23383.3333
+9607 41233.3333 24166.6667
+9608 41233.3333 24183.3333
+9609 41233.3333 24200.0000
+9610 41233.3333 24266.6667
+9611 41233.3333 24383.3333
+9612 41233.3333 24400.0000
+9613 41233.3333 24583.3333
+9614 41233.3333 24600.0000
+9615 41233.3333 24616.6667
+9616 41233.3333 24633.3333
+9617 41233.3333 24816.6667
+9618 41233.3333 24866.6667
+9619 41233.3333 24883.3333
+9620 41233.3333 24950.0000
+9621 41233.3333 25033.3333
+9622 41233.3333 25100.0000
+9623 41233.3333 25200.0000
+9624 41233.3333 25250.0000
+9625 41233.3333 25366.6667
+9626 41233.3333 25533.3333
+9627 41233.3333 25600.0000
+9628 41233.3333 25766.6667
+9629 41233.3333 25850.0000
+9630 41233.3333 25900.0000
+9631 41233.3333 25933.3333
+9632 41233.3333 25966.6667
+9633 41236.6667 22946.9444
+9634 41243.6111 22851.1111
+9635 41250.0000 22783.3333
+9636 41250.0000 22800.0000
+9637 41250.0000 22816.6667
+9638 41250.0000 23016.6667
+9639 41250.0000 23083.3333
+9640 41250.0000 23216.6667
+9641 41250.0000 23283.3333
+9642 41250.0000 23333.3333
+9643 41250.0000 23450.0000
+9644 41250.0000 23816.6667
+9645 41250.0000 24033.3333
+9646 41250.0000 24433.3333
+9647 41250.0000 24500.0000
+9648 41250.0000 24516.6667
+9649 41250.0000 24533.3333
+9650 41250.0000 24566.6667
+9651 41250.0000 24583.3333
+9652 41250.0000 24600.0000
+9653 41250.0000 24633.3333
+9654 41250.0000 24700.0000
+9655 41250.0000 24733.3333
+9656 41250.0000 24900.0000
+9657 41250.0000 24916.6667
+9658 41250.0000 25483.3333
+9659 41250.0000 25533.3333
+9660 41250.0000 25633.3333
+9661 41250.0000 25683.3333
+9662 41250.0000 25866.6667
+9663 41250.0000 26133.3333
+9664 41255.0000 22795.2778
+9665 41260.2778 22789.1667
+9666 41264.7222 22842.2222
+9667 41266.6667 22800.0000
+9668 41266.6667 22833.3333
+9669 41266.6667 22933.3333
+9670 41266.6667 23000.0000
+9671 41266.6667 23133.3333
+9672 41266.6667 23183.3333
+9673 41266.6667 23366.6667
+9674 41266.6667 23383.3333
+9675 41266.6667 23400.0000
+9676 41266.6667 24183.3333
+9677 41266.6667 24400.0000
+9678 41266.6667 24483.3333
+9679 41266.6667 24500.0000
+9680 41266.6667 24566.6667
+9681 41266.6667 24666.6667
+9682 41266.6667 24716.6667
+9683 41266.6667 24800.0000
+9684 41266.6667 24833.3333
+9685 41266.6667 24866.6667
+9686 41266.6667 24933.3333
+9687 41266.6667 25466.6667
+9688 41266.6667 25533.3333
+9689 41266.6667 25733.3333
+9690 41266.6667 25866.6667
+9691 41266.6667 25916.6667
+9692 41266.6667 25950.0000
+9693 41266.6667 25983.3333
+9694 41266.6667 26333.3333
+9695 41266.6667 26383.3333
+9696 41266.6667 26400.0000
+9697 41269.7222 22853.6111
+9698 41276.3889 22893.6111
+9699 41283.0556 22932.2222
+9700 41283.3333 23016.6667
+9701 41283.3333 23033.3333
+9702 41283.3333 23233.3333
+9703 41283.3333 23250.0000
+9704 41283.3333 23300.0000
+9705 41283.3333 23333.3333
+9706 41283.3333 23750.0000
+9707 41283.3333 23933.3333
+9708 41283.3333 24216.6667
+9709 41283.3333 24233.3333
+9710 41283.3333 24316.6667
+9711 41283.3333 24400.0000
+9712 41283.3333 24466.6667
+9713 41283.3333 24483.3333
+9714 41283.3333 24800.0000
+9715 41283.3333 24966.6667
+9716 41283.3333 25116.6667
+9717 41283.3333 25183.3333
+9718 41283.3333 25550.0000
+9719 41283.3333 25616.6667
+9720 41283.3333 25783.3333
+9721 41283.3333 25850.0000
+9722 41283.3333 25983.3333
+9723 41283.3333 26283.3333
+9724 41293.0556 22947.2222
+9725 41295.2778 22833.0556
+9726 41295.8333 22985.2778
+9727 41300.0000 22800.0000
+9728 41300.0000 23500.0000
+9729 41300.0000 23683.3333
+9730 41300.0000 23850.0000
+9731 41300.0000 24466.6667
+9732 41300.0000 24516.6667
+9733 41300.0000 24616.6667
+9734 41300.0000 24783.3333
+9735 41300.0000 24900.0000
+9736 41300.0000 25666.6667
+9737 41300.0000 25983.3333
+9738 41300.0000 26183.3333
+9739 41300.0000 26250.0000
+9740 41300.0000 26433.3333
+9741 41316.6667 23550.0000
+9742 41316.6667 23583.3333
+9743 41316.6667 23783.3333
+9744 41316.6667 24000.0000
+9745 41316.6667 24366.6667
+9746 41316.6667 24416.6667
+9747 41316.6667 24450.0000
+9748 41316.6667 24583.3333
+9749 41316.6667 24766.6667
+9750 41316.6667 25100.0000
+9751 41316.6667 25116.6667
+9752 41316.6667 25816.6667
+9753 41316.6667 26100.0000
+9754 41316.6667 26483.3333
+9755 41333.3333 24333.3333
+9756 41333.3333 24533.3333
+9757 41333.3333 24883.3333
+9758 41333.3333 24933.3333
+9759 41333.3333 25050.0000
+9760 41333.3333 26266.6667
+9761 41350.0000 23683.3333
+9762 41350.0000 23716.6667
+9763 41350.0000 23800.0000
+9764 41350.0000 23866.6667
+9765 41350.0000 24083.3333
+9766 41350.0000 24100.0000
+9767 41350.0000 24450.0000
+9768 41350.0000 24533.3333
+9769 41350.0000 24633.3333
+9770 41350.0000 24850.0000
+9771 41350.0000 24983.3333
+9772 41350.0000 26200.0000
+9773 41350.0000 26366.6667
+9774 41350.0000 26433.3333
+9775 41350.0000 26500.0000
+9776 41350.0000 26583.3333
+9777 41350.0000 26600.0000
+9778 41366.6667 23366.6667
+9779 41366.6667 24183.3333
+9780 41366.6667 24233.3333
+9781 41366.6667 24266.6667
+9782 41366.6667 24316.6667
+9783 41366.6667 24550.0000
+9784 41366.6667 24616.6667
+9785 41366.6667 24916.6667
+9786 41366.6667 24966.6667
+9787 41366.6667 25000.0000
+9788 41366.6667 26383.3333
+9789 41366.6667 26466.6667
+9790 41366.6667 26533.3333
+9791 41383.3333 23300.0000
+9792 41383.3333 23450.0000
+9793 41383.3333 23866.6667
+9794 41383.3333 23983.3333
+9795 41383.3333 24050.0000
+9796 41383.3333 24100.0000
+9797 41383.3333 24283.3333
+9798 41383.3333 24916.6667
+9799 41383.3333 24933.3333
+9800 41383.3333 26300.0000
+9801 41383.3333 26616.6667
+9802 41400.0000 23900.0000
+9803 41400.0000 24016.6667
+9804 41400.0000 24033.3333
+9805 41400.0000 24100.0000
+9806 41400.0000 24216.6667
+9807 41400.0000 26283.3333
+9808 41400.0000 26333.3333
+9809 41400.0000 26416.6667
+9810 41400.0000 26566.6667
+9811 41400.0000 26583.3333
+9812 41416.6667 23833.3333
+9813 41416.6667 24000.0000
+9814 41416.6667 24083.3333
+9815 41416.6667 24133.3333
+9816 41416.6667 24166.6667
+9817 41416.6667 24283.3333
+9818 41416.6667 26250.0000
+9819 41416.6667 26383.3333
+9820 41416.6667 26400.0000
+9821 41416.6667 26516.6667
+9822 41416.6667 26550.0000
+9823 41416.6667 26566.6667
+9824 41433.3333 24466.6667
+9825 41433.3333 26316.6667
+9826 41433.3333 26350.0000
+9827 41433.3333 26550.0000
+9828 41450.0000 26266.6667
+9829 41450.0000 26400.0000
+9830 41450.0000 26466.6667
+9831 41450.0000 26550.0000
+9832 41466.6667 26350.0000
+9833 41466.6667 26383.3333
+9834 41466.6667 26566.6667
+9835 41483.3333 24133.3333
+9836 41483.3333 24150.0000
+9837 41483.3333 26283.3333
+9838 41483.3333 26300.0000
+9839 41483.3333 26316.6667
+9840 41483.3333 26400.0000
+9841 41483.3333 26433.3333
+9842 41483.3333 26550.0000
+9843 41500.0000 24133.3333
+9844 41500.0000 26216.6667
+9845 41500.0000 26233.3333
+9846 41500.0000 26466.6667
+9847 41500.0000 26500.0000
+9848 41500.0000 26516.6667
+9849 41516.6667 26250.0000
+9850 41516.6667 26283.3333
+9851 41516.6667 26300.0000
+9852 41516.6667 26450.0000
+9853 41533.3333 26350.0000
+9854 41533.3333 26533.3333
+9855 41533.3333 26550.0000
+9856 41566.6667 26166.6667
+9857 41566.6667 26183.3333
+9858 41566.6667 26450.0000
+9859 41566.6667 26516.6667
+9860 41583.3333 26183.3333
+9861 41583.3333 26233.3333
+9862 41583.3333 26283.3333
+9863 41583.3333 26533.3333
+9864 41600.0000 26300.0000
+9865 41616.6667 26316.6667
+9866 41616.6667 26350.0000
+9867 41616.6667 26433.3333
+9868 41633.3333 26333.3333
+9869 41633.3333 26383.3333
+9870 41650.0000 26083.3333
+9871 41650.0000 26183.3333
+9872 41650.0000 26316.6667
+9873 41650.0000 26416.6667
+9874 41650.0000 26466.6667
+9875 41666.6667 26350.0000
+9876 41666.6667 26466.6667
+9877 41683.3333 26283.3333
+9878 41700.0000 26133.3333
+9879 41700.0000 26233.3333
+9880 41700.0000 26283.3333
+9881 41700.0000 26383.3333
+9882 41716.6667 26216.6667
+\.
+
+UPDATE gr9882 SET the_geom = ST_makePoint(x,y);
+SELECT * into grece from pgr_eucledianDmatrix('gr9882'::regclass);
+SELECT * from pgr_xydtsp($$SELECT * from grece$$, true);
+-- SELECT * from pgr_xydtsp($$SELECT * from pgr_eucledianDmatrix('gr9882'::regclass)$$, true, 1);
+-- SELECT * from pgr_tsp('SELECT id::integer, x, y from gr9882', 1);
+
diff --git a/src/tsp/test/doc-pgr_TSP-mac.test.sql b/src/tsp/test/doc-pgr_TSP-mac.test.sql
index e243330..c1a8112 100644
--- a/src/tsp/test/doc-pgr_TSP-mac.test.sql
+++ b/src/tsp/test/doc-pgr_TSP-mac.test.sql
@@ -1,5 +1,3 @@
-
-SET client_min_messages TO WARNING;
 \echo -- q1
 
 WITH
diff --git a/src/tsp/test/doc-pgr_TSP-windows.test.sql b/src/tsp/test/doc-pgr_TSP-windows.test.sql
index e243330..c1a8112 100644
--- a/src/tsp/test/doc-pgr_TSP-windows.test.sql
+++ b/src/tsp/test/doc-pgr_TSP-windows.test.sql
@@ -1,5 +1,3 @@
-
-SET client_min_messages TO WARNING;
 \echo -- q1
 
 WITH
diff --git a/src/tsp/test/doc-pgr_TSP.test.sql b/src/tsp/test/doc-pgr_TSP.test.sql
index e243330..c1a8112 100644
--- a/src/tsp/test/doc-pgr_TSP.test.sql
+++ b/src/tsp/test/doc-pgr_TSP.test.sql
@@ -1,5 +1,3 @@
-
-SET client_min_messages TO WARNING;
 \echo -- q1
 
 WITH
diff --git a/src/tsp/test/doc-pgr_eucledianTSP.result b/src/tsp/test/doc-pgr_eucledianTSP.result
index d40e21e..e34408a 100644
--- a/src/tsp/test/doc-pgr_eucledianTSP.result
+++ b/src/tsp/test/doc-pgr_eucledianTSP.result
@@ -20,7 +20,7 @@ t
 17|2|1|17.7795767601752
 18|1|0|18.7795767601752
 -- q3
-NOTICE:  pgr_eucledianTSP Processing Information 
+DEBUG:  pgr_eucledianTSP Processing Information 
 Initializing tsp class ---> tsp.greedyInitial ---> tsp.annealing ---> OK
 
 Cycle(100)    total changes =0        0 were because  delta energy < 0
diff --git a/src/tsp/test/doc-pgr_eucledianTSP.test.sql b/src/tsp/test/doc-pgr_eucledianTSP.test.sql
index 8da7c99..71a7092 100644
--- a/src/tsp/test/doc-pgr_eucledianTSP.test.sql
+++ b/src/tsp/test/doc-pgr_eucledianTSP.test.sql
@@ -1,6 +1,3 @@
-BEGIN;
-
-SET client_min_messages TO WARNING;
 \echo -- q1
 WITH
 query AS (
@@ -22,7 +19,7 @@ SELECT* from pgr_eucledianTSP(
     randomize := false
 );
 \echo -- q3
-SET client_min_messages TO NOTICE;
+SET client_min_messages TO DEBUG1;
 SELECT* from pgr_eucledianTSP(
     $$
     SELECT id, st_X(the_geom) AS x, st_Y(the_geom) AS y FROM edge_table_vertices_pgr
@@ -31,5 +28,3 @@ SELECT* from pgr_eucledianTSP(
     randomize := false
 );
 \echo -- q4
-
-ROLLBACK;
diff --git a/src/tsp/test/doc-tsp-mac.test.sql b/src/tsp/test/doc-tsp-mac.test.sql
index 9f7292e..04a773e 100644
--- a/src/tsp/test/doc-tsp-mac.test.sql
+++ b/src/tsp/test/doc-tsp-mac.test.sql
@@ -1,6 +1,5 @@
 BEGIN;
 
-SET client_min_messages TO WARNING;
 \echo -- q1
 SELECT * FROM pgr_TSP(
     $$
diff --git a/src/tsp/test/doc-tsp-windows.test.sql b/src/tsp/test/doc-tsp-windows.test.sql
index 9f7292e..90dcf6b 100644
--- a/src/tsp/test/doc-tsp-windows.test.sql
+++ b/src/tsp/test/doc-tsp-windows.test.sql
@@ -1,6 +1,5 @@
 BEGIN;
 
-SET client_min_messages TO WARNING;
 \echo -- q1
 SELECT * FROM pgr_TSP(
     $$
@@ -37,4 +36,5 @@ SELECT * FROM pgr_TSP(
     randomize := false
 );
 \echo -- q5
+
 ROLLBACK;
diff --git a/src/tsp/test/doc-tsp.result b/src/tsp/test/doc-tsp.result
index a7bbe5a..5d9797d 100644
--- a/src/tsp/test/doc-tsp.result
+++ b/src/tsp/test/doc-tsp.result
@@ -37,32 +37,16 @@ NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 17|2|1|16.2558869162301
 18|1|0|17.2558869162301
 -- q3
+NOTICE:  Deprecated function pgr_vidsToDMatrix
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|2
 2|3
-3|8
-4|11
-5|5
-6|10
-7|12
-8|9
-9|6
-10|7
-11|4
-12|0
+3|0
 -- q4
-1|1|3|0
-2|4|1|3
-3|9|1|4
-4|12|1|5
-5|11|2|6
-6|13|1|8
-7|10|1|9
-8|5|2|10
-9|7|1|12
-10|8|2|13
-11|6|1|15
-12|3|1|16
-13|2|1|17
-14|1|0|18
+1|8|3|0
+2|11|1|3
+3|12|3|4
+4|13|3|7
+5|8|0|10
 -- q5
diff --git a/src/tsp/test/doc-tsp.test.sql b/src/tsp/test/doc-tsp.test.sql
index 9f7292e..4499692 100644
--- a/src/tsp/test/doc-tsp.test.sql
+++ b/src/tsp/test/doc-tsp.test.sql
@@ -1,6 +1,3 @@
-BEGIN;
-
-SET client_min_messages TO WARNING;
 \echo -- q1
 SELECT * FROM pgr_TSP(
     $$
@@ -21,7 +18,7 @@ SELECT * FROM pgr_eucledianTSP(
 SELECT * FROM pgr_TSP(
     (SELECT * FROM pgr_vidsToDMatrix(
             'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost FROM edge_table',
-            (SELECT array_agg(id) from edge_table_vertices_pgr WHERE id < 14)::INTEGER[], false , true, true)
+            ARRAY[8,11,12,13]::INTEGER[], false , true, true)
     ),
     1
 );
@@ -31,10 +28,9 @@ SELECT * FROM pgr_TSP(
     $$
     SELECT * FROM pgr_dijkstraCostMatrix(
         'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-        (SELECT array_agg(id) from edge_table_vertices_pgr WHERE id < 14), false)
+        ARRAY[8,11,12,13]::INTEGER[], false)
     $$,
-    1,
+    8,
     randomize := false
 );
 \echo -- q5
-ROLLBACK;
diff --git a/src/tsp/test/test.conf b/src/tsp/test/test.conf
index cfe59a2..fe285f0 100644
--- a/src/tsp/test/test.conf
+++ b/src/tsp/test/test.conf
@@ -10,14 +10,13 @@
         'linux' => [qw(
             doc-pgr_TSP
             doc-tsp
+            doc-pgr_eucledianTSP
             )],
         'macos' => [qw(
             doc-pgr_TSP-mac
-            doc-tsp-mac
             )],
         'windows' => [qw(
             doc-pgr_TSP-windows
-            doc-tsp-windows
             )],
         'documentation' => [qw(
             doc-tsp
diff --git a/src/tsp/test/tsp-v2-0.result b/src/tsp/test/tsp-v2-0.result
index d8ea61c..4e975f1 100644
--- a/src/tsp/test/tsp-v2-0.result
+++ b/src/tsp/test/tsp-v2-0.result
@@ -1,136 +1,158 @@
 NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 15.4787
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 OK
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
-1|0
+1|2
 2|3
-3|2
+3|0
 NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 11.3137
 NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 32.4721
 NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 23.4706
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
+0|0
+1|3
+2|1
+3|4
+4|2
+----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|0
 1|2
 2|4
 3|3
 4|1
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|0
-1|1
-2|3
+1|3
+2|1
 3|4
 4|2
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|0
 1|2
 2|4
 3|1
 4|3
 ----------------------------------
-0|0
-1|1
-2|3
-3|2
-4|4
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
+0|1
+1|0
+2|2
+3|4
+4|3
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
-1|3
-2|4
-3|2
-4|0
+1|0
+2|2
+3|4
+4|3
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|4
 2|3
 3|0
 4|2
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|4
 2|2
 3|0
 4|3
 ----------------------------------
-0|1
-1|3
-2|0
-3|2
-4|4
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
+0|2
+1|4
+2|3
+3|1
+4|0
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|2
 1|4
 2|3
 3|1
 4|0
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|2
-1|0
+1|4
 2|3
-3|4
-4|1
+3|1
+4|0
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|2
 1|4
 2|1
 3|0
 4|3
 ----------------------------------
-0|2
-1|0
-2|1
-3|3
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
+0|3
+1|1
+2|0
+3|2
 4|4
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|3
 1|1
 2|4
 3|2
 4|0
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|3
-1|0
+1|4
 2|2
-3|4
+3|0
 4|1
 ----------------------------------
-0|3
-1|0
-2|1
-3|4
-4|2
-----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|3
 1|1
 2|0
 3|2
 4|4
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
+0|4
+1|3
+2|1
+3|0
+4|2
+----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|4
 1|2
 2|3
 3|1
 4|0
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|4
 1|2
 2|0
 3|3
 4|1
 ----------------------------------
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|4
 1|3
 2|1
 3|0
 4|2
 ----------------------------------
-0|4
-1|2
-2|0
-3|1
-4|3
-----------------------------------
 NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 0|6|6|2.24
 1|11|11|4.12
@@ -144,36 +166,44 @@ NOTICE:  Deprecated Signature pgr_tsp(sql, integer, integer)
 9|10|10|2.50
 10|5|5|3.61
 ----------------------------------1(in ints)
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 OK
 ----------------------------------1(in tenths)
-OK
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
+FAIL
 ----------------------------------1-0
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
 1|2
 2|3
 3|0
 ----------------------------------1-2
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
-1|0
+1|2
 2|3
-3|2
+3|0
 ----------------------------------1-3
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|1
-1|2
-2|0
-3|3
+1|0
+2|3
+3|2
 ----------------------------------0-1
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|0
-1|3
+1|1
 2|2
-3|1
+3|3
 ----------------------------------2-1
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|2
 1|3
-2|0
-3|1
+2|1
+3|0
 ----------------------------------3-1
+NOTICE:  Deprecated Signature pgr_tsp(float8[][], integer, integer)
 0|3
-1|0
-2|2
-3|1
+1|2
+2|1
+3|0
diff --git a/src/tsp/test/tsp-v2-0.test.sql b/src/tsp/test/tsp-v2-0.test.sql
index 7f8e035..49a7ce9 100644
--- a/src/tsp/test/tsp-v2-0.test.sql
+++ b/src/tsp/test/tsp-v2-0.test.sql
@@ -25,7 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 --------------------------------------------------------------------------------
 --              PGR_pgr_tsp
 --------------------------------------------------------------------------------
-BEGIN;
 
 CREATE TEMP TABLE vertex_table (
     id serial,
@@ -71,6 +70,9 @@ insert into tsp_00 (x,y) values
 SELECT round(sum(cost)::numeric, 4) as cost
 FROM pgr_tsp('SELECT id, x, y FROM vertex_table ORDER BY id', 6, 5);
 SELECT case when r=array[1,2,3,0] then 'OK' when r=array[1,0,3,2] then 'OK' else 'FAIL' end from (SELECT array_agg(id) as r from (SELECT seq, id FROM pgr_tsp('{{0,1,2,3},{1,0,4,5},{2,4,0,6},{3,5,6,0}}'::float8[],1)) as a) as b;
+
+SET client_min_messages TO NOTICE;
+
 SELECT seq, id FROM pgr_tsp('{{0,1,2,3},{1,0,4,5},{2,4,0,6},{3,5,6,0}}'::float8[],1,2);
 SELECT round(sum(cost)::numeric, 4) as cost
 FROM pgr_tsp('SELECT id::integer, st_x(the_geom) as x,st_x(the_geom) as y FROM edge_table_vertices_pgr  ORDER BY id', 6, 5);
@@ -134,4 +136,3 @@ SELECT seq, id FROM pgr_tsp('{{0,1,2,3},{1,0,4,5},{2,4,0,6},{3,5,6,0}}'::float8[
 \echo '----------------------------------3-1'
 SELECT seq, id FROM pgr_tsp('{{0,1,2,3},{1,0,4,5},{2,4,0,6},{3,5,6,0}}'::float8[],3,1);
 
-ROLLBACK;
diff --git a/src/vrp_basic/doc/pgr_vrpOneDepot.rst b/src/vrp_basic/doc/pgr_vrpOneDepot.rst
index 6278605..cd7cfd6 100644
--- a/src/vrp_basic/doc/pgr_vrpOneDepot.rst
+++ b/src/vrp_basic/doc/pgr_vrpOneDepot.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -14,9 +14,9 @@ pgr_vrpOneDepot - Proposed
 ===============================================================================
 
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 No documentation available from the original developer
 
diff --git a/src/vrp_basic/src/CMakeLists.txt b/src/vrp_basic/src/CMakeLists.txt
index ee21d95..1a82681 100644
--- a/src/vrp_basic/src/CMakeLists.txt
+++ b/src/vrp_basic/src/CMakeLists.txt
@@ -2,5 +2,3 @@ add_library(vrp_basic OBJECT
      VRP.c 
      VRP_core.cpp 
      VRP_Solver.cpp)
-
-
diff --git a/src/vrp_basic/src/VRP.c b/src/vrp_basic/src/VRP.c
index c8afe78..66b9a0e 100644
--- a/src/vrp_basic/src/VRP.c
+++ b/src/vrp_basic/src/VRP.c
@@ -21,21 +21,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "./VRP.h"
+#include "./../../common/src/postgres_connection.h"
+#include "catalog/pg_type.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <search.h>
 #include <string.h>
 // #include <math.h>
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-#include "fmgr.h"
+
+#include "./VRP.h"
 
 
 
@@ -122,6 +117,7 @@ typedef struct distance_columns {
 // float DISTANCE[MAX_TOWNS][MAX_TOWNS];
 // float x[MAX_TOWNS], y[MAX_TOWNS];
 
+#if 0
 static char *
 text2char(text *in) {
     char *out = (char*)palloc(VARSIZE(in));
@@ -130,6 +126,7 @@ text2char(text *in) {
     out[VARSIZE(in) - VARHDRSZ] = '\0';
     return out;
 }
+#endif
 
 static int
 finish(int *code) {
@@ -146,6 +143,7 @@ finish(int *code) {
 static int
 fetch_distance_columns(SPITupleTable *tuptable, distance_columns_t *distance_columns) {
     PGR_DBG("Fetching distance");
+    if (tuptable) {} 
 
     distance_columns->src_id = SPI_fnumber(SPI_tuptable->tupdesc, "src_id");
     distance_columns->dest_id = SPI_fnumber(SPI_tuptable->tupdesc, "dest_id");
@@ -171,6 +169,7 @@ fetch_distance(HeapTuple *tuple, TupleDesc *tupdesc,
         distance_columns_t *distance_columns, vrp_cost_element_t *dist, size_t t) {
     Datum binval;
     bool isnull;
+    if (t) {}
 
     PGR_DBG("fetch_distance: src_id col:%i", distance_columns->src_id);
 
@@ -230,6 +229,7 @@ fetch_distance(HeapTuple *tuple, TupleDesc *tupdesc,
 static int
 fetch_order_columns(SPITupleTable *tuptable, order_columns_t *order_columns) {
     PGR_DBG("Fetching order");
+    if (tuptable) {} 
 
     // order_columns->id = SPI_fnumber(SPI_tuptable->tupdesc, "id");
     order_columns->id = SPI_fnumber(SPI_tuptable->tupdesc, "id");
@@ -340,6 +340,7 @@ fetch_order(HeapTuple *tuple, TupleDesc *tupdesc,
 static int
 fetch_vehicle_columns(SPITupleTable *tuptable, vehicle_columns_t *vehicle_columns) {
     PGR_DBG("Fetching order");
+    if (tuptable) {} 
 
     vehicle_columns->vehicle_id = SPI_fnumber(SPI_tuptable->tupdesc, "vehicle_id");
     vehicle_columns->capacity = SPI_fnumber(SPI_tuptable->tupdesc, "capacity");
@@ -359,6 +360,7 @@ fetch_vehicle(HeapTuple *tuple, TupleDesc *tupdesc,
         vehicle_columns_t *vehicle_columns, vrp_vehicles_t *vehicle, size_t t) {
     Datum binval;
     bool isnull;
+    if (t) {}
 
     PGR_DBG("inside fetch_vehicle\n");
 
@@ -729,8 +731,6 @@ PG_FUNCTION_INFO_V1(vrp);
 PGDLLEXPORT Datum
 vrp(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t                  call_cntr;
-    uint32_t                  max_calls;
     TupleDesc            tuple_desc;
     vrp_result_element_t         *path;
 
@@ -758,10 +758,10 @@ vrp(PG_FUNCTION_ARGS) {
         PGR_DBG("Calling solve_vrp ...");
 
         //  ret =
-        solve_vrp(  // text2char(PG_GETARG_TEXT_P(0)),  //  points sql
-                text2char(PG_GETARG_TEXT_P(0)),  //   orders sql
-                text2char(PG_GETARG_TEXT_P(1)),  //   vehicles sql
-                text2char(PG_GETARG_TEXT_P(2)),  //   distances query
+        solve_vrp(  // text_to_cstring(PG_GETARG_TEXT_P(0)),  //  points sql
+                text_to_cstring(PG_GETARG_TEXT_P(0)),  //   orders sql
+                text_to_cstring(PG_GETARG_TEXT_P(1)),  //   vehicles sql
+                text_to_cstring(PG_GETARG_TEXT_P(2)),  //   distances query
                 PG_GETARG_INT32(3),  //   depot id
                 &path, &path_count);
 
@@ -771,8 +771,11 @@ vrp(PG_FUNCTION_ARGS) {
         /* total number of tuples to be returned */
         // PGR_DBG("Counting tuples number\n");
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = path_count;
+#else
         funcctx->max_calls = (uint32_t)path_count;
-
+#endif
         funcctx->user_fctx = path;
 
         /* Build a tuple descriptor for our result type */
@@ -798,17 +801,14 @@ vrp(PG_FUNCTION_ARGS) {
     /* stuff done on every call of the function */
     funcctx = SRF_PERCALL_SETUP();
 
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
-
     path = (vrp_result_element_t *)funcctx->user_fctx;
 
     // elog(NOTICE, "Point 1");
     // PGR_DBG("Trying to allocate some memory\n");
-    // PGR_DBG("call_cntr = %i, max_calls = %i\n", call_cntr, max_calls);
+    // PGR_DBG("funcctx->call_cntr = %i, max_calls = %i\n", funcctx->call_cntr, max_calls);
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr <  funcctx->max_calls) {
         /* do when there is more left to send */
         HeapTuple    tuple;
         Datum        result;
@@ -818,20 +818,20 @@ vrp(PG_FUNCTION_ARGS) {
         values = palloc(5 * sizeof(Datum));
         nulls = palloc(5 * sizeof(char));
 
-        values[0] = Int32GetDatum(path[call_cntr].order_id);   //  order id
+        values[0] = Int32GetDatum(path[funcctx->call_cntr].order_id);   //  order id
         nulls[0] = ' ';
-        values[1] = Int32GetDatum(path[call_cntr].order_pos);  //   order pos
+        values[1] = Int32GetDatum(path[funcctx->call_cntr].order_pos);  //   order pos
         nulls[1] = ' ';
-        values[2] = Int32GetDatum(path[call_cntr].vehicle_id);  //   vehicle id
+        values[2] = Int32GetDatum(path[funcctx->call_cntr].vehicle_id);  //   vehicle id
         nulls[2] = ' ';
-        values[3] = Int32GetDatum(path[call_cntr].arrival_time);  //   arrival time
+        values[3] = Int32GetDatum(path[funcctx->call_cntr].arrival_time);  //   arrival time
         nulls[3] = ' ';
-        // values[4] = TimeTzADTPGetDatum(&path[call_cntr].time);
-        values[4] = Int32GetDatum(path[call_cntr].depart_time);  //   departure time
+        // values[4] = TimeTzADTPGetDatum(&path[funcctx->call_cntr].time);
+        values[4] = Int32GetDatum(path[funcctx->call_cntr].depart_time);  //   departure time
         nulls[4] = ' ';
 
         //  PGR_DBG("Heap making\n");
-        // elog(NOTICE, "Result %d %d %d", call_cntr, path[call_cntr].order_id, max_calls);
+        // elog(NOTICE, "Result %d %d %d", funcctx->call_cntr, path[funcctx->call_cntr].order_id, max_calls);
         tuple = heap_form_tuple(tuple_desc, values, nulls);
 
         // PGR_DBG("Datum making\n");
@@ -855,8 +855,6 @@ vrp(PG_FUNCTION_ARGS) {
         profstop("total", prof_total);
         PGR_DBG("Profiles stopped\n");
 
-        free(path);
-
         PGR_DBG("Itinerary cleared\n");
 
         SRF_RETURN_DONE(funcctx);
diff --git a/src/vrp_basic/src/VRP_Solver.cpp b/src/vrp_basic/src/VRP_Solver.cpp
index 81f9a90..a9ef1d1 100644
--- a/src/vrp_basic/src/VRP_Solver.cpp
+++ b/src/vrp_basic/src/VRP_Solver.cpp
@@ -21,10 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
 
 #include "./VRP_Solver.h"
 #include <algorithm>
@@ -51,12 +47,7 @@ bool operator == (const CTourInfo& cur, const CTourInfo& that) {
         return false;
     if (cur.m_viOrderIds.size() != that.m_viOrderIds.size())
         return false;
-    auto tot = cur.m_viOrderIds.size();
-    for (size_t i = 0; i < tot; i++) {
-        if (cur.m_viOrderIds[i] != that.m_viOrderIds[i])
-            return false;
-    }
-    return true;
+    return std::equal(cur.m_viOrderIds.begin(), cur.m_viOrderIds.end(), that.m_viOrderIds.begin());
 }
 
 bool operator == (const CMoveInfo& cur, const CMoveInfo& that) {
@@ -167,8 +158,8 @@ bool CSolutionInfo::addTour(CTourInfo& tour) {
 
     m_iOrdersServed += static_cast<int>(vecOrders.size());
 
-    for (unsigned int i = 0; i < vecOrders.size(); i++) {
-        int oid = vecOrders[i];
+    for (const auto &order : vecOrders) {
+        int oid = order;
         it = std::find(m_vUnservedOrderId.begin(), m_vUnservedOrderId.end(), oid);
         if (it != m_vUnservedOrderId.end()) {
             m_vUnservedOrderId.erase(it);
@@ -237,12 +228,14 @@ bool CVRPSolver::solveVRP(std::string& strError) {
     // }
     PGR_LOG("Inside Solve VRP");
     std::vector<int> vecOrders, vecVehicles;
-    for (unsigned int i = 0; i < m_vOrderInfos.size(); i++) {
-        vecOrders.push_back(m_vOrderInfos[i].getOrderId());
+
+    for(auto &rule:m_vOrderInfos)
+    {
+      vecOrders.push_back(rule.getOrderId());
     }
 
-    for (unsigned int i = 0; i < m_vVehicleInfos.size(); i++) {
-        vecVehicles.push_back(m_vVehicleInfos[i].getId());
+    for (auto &rule:m_vVehicleInfos) {
+        vecVehicles.push_back(rule.getId());
     }
 
     m_solutionFinal.init(vecOrders, static_cast<int>(vecOrders.size()), vecVehicles);
@@ -892,5 +885,3 @@ bool CVRPSolver::isTabuMove(CMoveInfo& curMove) {
     }
     return false;
 }
-
-
diff --git a/src/vrp_basic/src/VRP_core.cpp b/src/vrp_basic/src/VRP_core.cpp
index 397a811..7718fe3 100644
--- a/src/vrp_basic/src/VRP_core.cpp
+++ b/src/vrp_basic/src/VRP_core.cpp
@@ -21,11 +21,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
+#ifdef __MINGW32__
 #include <winsock2.h>
 #include <windows.h>
 #endif
 
+
+#include "../../common/src/pgr_alloc.hpp"
 #include "VRP.h"
 #include "VRP_Solver.h"
 #include <vector>
@@ -176,7 +178,7 @@ int find_vrp_solution(vrp_vehicles_t *vehicles, size_t vehicle_count,
         for (size_t i = 0; i < totalRoute; i++) {
             totRows += (solution.getTour(static_cast<int>(i)).getServedOrderCount() + 2);
         }
-        *results = (vrp_result_element_t *) malloc(totRows * sizeof(vrp_result_element_t));
+        *results = pgr_alloc(totRows, *results);
         *result_count = totRows;
         int cnt = 0;
         for (size_t i = 0; i < totalRoute; i++) {
diff --git a/src/vrp_basic/test/CMakeLists.txt b/src/vrp_basic/test/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/vrp_basic/test/Distance.txt b/src/vrp_basic/test/Distance.txt
index a8ce2cd..370f68c 100644
--- a/src/vrp_basic/test/Distance.txt
+++ b/src/vrp_basic/test/Distance.txt
@@ -1,10100 +1,10100 @@
-1 2 38.078866
-1 3 30.805844
-1 4 39.357337
-1 5 36.055513
-1 6 40.311289
-1 7 33.301652
-1 8 35.355339
-1 9 39.051248
-1 10 33.541020
-1 11 31.622777
-1 12 33.526109
-1 13 32.388269
-1 14 38.078866
-1 15 35.355339
-1 16 39.293765
-1 17 41.231056
-1 18 40.311289
-1 19 45.177428
-1 20 40.049969
-1 21 35.057096
-1 22 45.000000
-1 23 35.000000
-1 24 45.044423
-1 25 35.057096
-1 26 45.276926
-1 27 58.523500
-1 28 57.008771
-1 29 55.713553
-1 30 52.201533
-1 31 52.000000
-1 32 50.289164
-1 33 51.078371
-1 34 51.478151
-1 35 47.434165
-1 36 44.204072
-1 37 43.011626
-1 38 40.607881
-1 39 37.202150
-1 40 36.055513
-1 41 40.311289
-1 42 30.805844
-1 43 33.541020
-1 44 38.078866
-1 45 35.341194
-1 46 37.735925
-1 47 37.202150
-1 48 38.327536
-1 49 45.044423
-1 50 38.052595
-1 51 35.341194
-1 52 33.541020
-1 53 25.000000
-1 54 20.000000
-1 55 18.027756
-1 56 14.142136
-1 57 18.027756
-1 58 26.925824
-1 59 47.169906
-1 60 42.426407
-1 61 26.925824
-1 62 15.811388
-1 63 29.154759
-1 64 39.051248
-1 65 20.615528
-1 66 11.180340
-1 67 13.038405
-1 68 25.298221
-1 69 10.000000
-1 70 9.219544
-1 71 19.646883
-1 72 25.495098
-1 73 27.459060
-1 74 39.293765
-1 75 36.055513
-1 76 57.008771
-1 77 42.941821
-1 78 49.979996
-1 79 32.557641
-1 80 38.470768
-1 81 7.615773
-1 82 12.041595
-1 83 14.764823
-1 84 19.235384
-1 85 27.018512
-1 86 35.468296
-1 87 32.202484
-1 88 38.209946
-1 89 17.888544
-1 90 52.478567
-1 91 4.242641
-1 92 12.041595
-1 93 14.764823
-1 94 21.095023
-1 95 17.117243
-1 96 20.615528
-1 97 15.524175
-1 98 48.166378
-1 99 14.142136
-1 100 20.518285
-1 101 19.235384
-2 1 38.078866
-2 3 10.440307
-2 4 3.000000
-2 5 7.071068
-2 6 5.000000
-2 7 12.206556
-2 8 14.142136
-2 9 11.180340
-2 10 52.201533
-2 11 47.434165
-2 12 48.104054
-2 13 43.462628
-2 14 53.851648
-2 15 44.721360
-2 16 50.537115
-2 17 51.478151
-2 18 47.169906
-2 19 82.225300
-2 20 76.902536
-2 21 72.034714
-2 22 81.394103
-2 23 71.589105
-2 24 81.049368
-2 25 71.196910
-2 26 80.622577
-2 27 89.022469
-2 28 86.023253
-2 29 86.683332
-2 30 82.006097
-2 31 83.630138
-2 32 80.430094
-2 33 82.879430
-2 34 84.852814
-2 35 78.102497
-2 36 42.000000
-2 37 40.000000
-2 38 40.112342
-2 39 37.336309
-2 40 35.355339
-2 41 35.000000
-2 42 34.481879
-2 43 30.413813
-2 44 30.000000
-2 45 30.149627
-2 46 5.830952
-2 47 8.602325
-2 48 46.141088
-2 49 81.786307
-2 50 74.953319
-2 51 68.622154
-2 52 71.589105
-2 53 55.000000
-2 54 35.355339
-2 55 39.051248
-2 56 25.495098
-2 57 55.901699
-2 58 60.207973
-2 59 75.663730
-2 60 66.708320
-2 61 26.925824
-2 62 28.284271
-2 63 64.031242
-2 64 76.321688
-2 65 58.523500
-2 66 46.097722
-2 67 50.596443
-2 68 58.051701
-2 69 29.154759
-2 70 33.541020
-2 71 18.867962
-2 72 50.000000
-2 73 42.941821
-2 74 33.970576
-2 75 65.192024
-2 76 82.462113
-2 77 80.956779
-2 78 82.024387
-2 79 33.615473
-2 80 25.495098
-2 81 43.908997
-2 82 36.124784
-2 83 42.047592
-2 84 55.317267
-2 85 64.498062
-2 86 72.718636
-2 87 61.131007
-2 88 62.369865
-2 89 27.018512
-2 90 90.354856
-2 91 39.849718
-2 92 49.244289
-2 93 50.477718
-2 94 48.836462
-2 95 48.918299
-2 96 57.140179
-2 97 43.139309
-2 98 70.213959
-2 99 33.015148
-2 100 50.009999
-2 101 18.973666
-3 1 30.805844
-3 2 10.440307
-3 4 10.000000
-3 5 5.385165
-3 6 10.198039
-3 7 4.000000
-3 8 7.000000
-3 9 8.602325
-3 10 41.761226
-3 11 37.000000
-3 12 37.696154
-3 13 33.105891
-3 14 43.462628
-3 15 34.481879
-3 16 40.311289
-3 17 41.340053
-3 18 37.202150
-3 19 73.375745
-3 20 68.007353
-3 21 63.245553
-3 22 72.277244
-3 23 62.641839
-3 24 71.805292
-3 25 62.096699
-3 26 71.196910
-3 27 85.755466
-3 28 83.240615
-3 29 83.216585
-3 30 78.892332
-3 31 79.881162
-3 32 77.175126
-3 33 79.056942
-3 34 80.430094
-3 35 74.625733
-3 36 46.097722
-3 37 44.147480
-3 38 43.566042
-3 39 40.311289
-3 40 38.327536
-3 41 39.293765
-3 42 36.000000
-3 43 33.376639
-3 44 34.481879
-3 45 33.734256
-3 46 7.280110
-3 47 6.403124
-3 48 36.055513
-3 49 72.801099
-3 50 66.098411
-3 51 64.031242
-3 52 64.140471
-3 53 45.099889
-3 54 25.079872
-3 55 36.249138
-3 56 17.000000
-3 57 48.826222
-3 58 50.635956
-3 59 65.375837
-3 60 56.293872
-3 61 16.552945
-3 62 25.079872
-3 63 58.728187
-3 64 69.814039
-3 65 50.537115
-3 66 37.336309
-3 67 42.485292
-3 68 53.413481
-3 69 23.430749
-3 70 24.698178
-3 71 14.317821
-3 72 47.423623
-3 73 42.201896
-3 74 25.000000
-3 75 55.036352
-3 76 72.034714
-3 77 73.573093
-3 78 72.006944
-3 79 23.600847
-3 80 17.464249
-3 81 37.536649
-3 82 31.906112
-3 83 32.388269
-3 84 46.486557
-3 85 57.801384
-3 86 66.219333
-3 87 51.009803
-3 88 51.971146
-3 89 17.117243
-3 90 83.216585
-3 91 31.764760
-3 92 42.638011
-3 93 44.553339
-3 94 45.276926
-3 95 44.204072
-3 96 50.990195
-3 97 39.115214
-3 98 59.774577
-3 99 23.345235
-3 100 40.199502
-3 101 12.041595
-4 1 39.357337
-4 2 3.000000
-4 3 10.000000
-4 5 5.385165
-4 6 2.000000
-4 7 10.770330
-4 8 12.206556
-4 9 8.602325
-4 10 51.419841
-4 11 46.572524
-4 12 47.127487
-4 13 42.379240
-4 14 52.810984
-4 15 43.462628
-4 16 49.244289
-4 17 50.089919
-4 18 45.650849
-4 19 82.969874
-4 20 77.620873
-4 21 72.801099
-4 22 82.000000
-4 23 72.277244
-4 24 81.584312
-4 25 71.805292
-4 26 81.049368
-4 27 91.400219
-4 28 88.481637
-4 29 89.022469
-4 30 84.403791
-4 31 85.912746
-4 32 82.800966
-4 33 85.146932
-4 34 87.000000
-4 35 80.430094
-4 36 45.000000
-4 37 43.000000
-4 38 43.104524
-4 39 40.311289
-4 40 38.327536
-4 41 38.000000
-4 42 37.363083
-4 43 33.376639
-4 44 33.000000
-4 45 33.136083
-4 46 3.605551
-4 47 6.403124
-4 48 44.721360
-4 49 82.462113
-4 50 75.690158
-4 51 70.710678
-4 52 72.897188
-4 53 55.081757
-4 54 35.057096
-4 55 41.400483
-4 56 26.248809
-4 57 57.306195
-4 58 60.530984
-4 59 75.325958
-4 60 66.098411
-4 61 25.961510
-4 62 30.479501
-4 63 65.946948
-4 64 77.935871
-4 65 59.615434
-4 66 46.840154
-4 67 51.623638
-4 68 60.108236
-4 69 30.805844
-4 70 34.205263
-4 71 20.615528
-4 72 52.430907
-4 73 45.617979
-4 74 32.015621
-4 75 65.030762
-4 76 81.786307
-4 77 82.298238
-4 78 82.006097
-4 79 32.202484
-4 80 23.345235
-4 81 45.486262
-4 82 38.183766
-4 83 42.296572
-4 84 56.044625
-4 85 66.037868
-4 86 74.330344
-4 87 61.008196
-4 88 61.814238
-4 89 27.073973
-4 90 91.787799
-4 91 40.853396
-4 92 50.774009
-4 93 52.201533
-4 94 51.088159
-4 95 50.931326
-4 96 58.821765
-4 97 45.276926
-4 98 69.375788
-4 99 33.241540
-4 100 50.159745
-4 101 20.124612
-5 1 36.055513
-5 2 7.071068
-5 3 5.385165
-5 4 5.385165
-5 6 5.000000
-5 7 5.385165
-5 8 7.071068
-5 9 5.000000
-5 10 46.097722
-5 11 41.231056
-5 12 41.761226
-5 13 37.000000
-5 14 47.434165
-5 15 38.078866
-5 16 43.863424
-5 17 44.721360
-5 18 40.311289
-5 19 78.746428
-5 20 73.375745
-5 21 68.622154
-5 22 77.620873
-5 23 68.007353
-5 24 77.129761
-5 25 67.446275
-5 26 76.485293
-5 27 90.138782
-5 28 87.464278
-5 29 87.658428
-5 30 83.216585
-5 31 84.403791
-5 32 81.541401
-5 33 83.600239
-5 34 85.146932
-5 35 79.056942
-5 36 47.265209
-5 37 45.276926
-5 38 45.044423
-5 39 42.000000
-5 40 40.000000
-5 41 40.311289
-5 42 38.327536
-5 43 35.000000
-5 44 35.355339
-5 45 35.057096
-5 46 2.000000
-5 47 2.000000
-5 48 39.357337
-5 49 78.160092
-5 50 71.470274
-5 51 68.767725
-5 52 69.462220
-5 53 50.249378
-5 54 30.000000
-5 55 40.311289
-5 56 22.360680
-5 57 54.083269
-5 58 55.901699
-5 59 70.178344
-5 60 60.827625
-5 61 20.615528
-5 62 29.154759
-5 63 63.639610
-5 64 75.000000
-5 65 55.901699
-5 66 42.720019
-5 67 47.853944
-5 68 58.137767
-5 69 28.284271
-5 70 30.083218
-5 71 18.601075
-5 72 51.478151
-5 73 45.541190
-5 74 26.907248
-5 75 60.000000
-5 76 76.485293
-5 77 78.892332
-5 78 77.058419
-5 79 26.832816
-5 80 18.439089
-5 81 42.638011
-5 82 36.400549
-5 83 37.656341
-5 84 51.865210
-5 85 63.007936
-5 86 71.400280
-5 87 56.008928
-5 88 56.568542
-5 89 22.360680
-5 90 88.509886
-5 91 37.121422
-5 92 47.801674
-5 93 49.578221
-5 94 49.648766
-5 95 48.918299
-5 96 56.080300
-5 97 43.600459
-5 98 64.031242
-5 99 28.635642
-5 100 45.398238
-5 101 17.029386
-6 1 40.311289
-6 2 5.000000
-6 3 10.198039
-6 4 2.000000
-6 5 5.000000
-6 7 10.198039
-6 8 11.180340
-6 9 7.071068
-6 10 50.990195
-6 11 46.097722
-6 12 46.572524
-6 13 41.761226
-6 14 52.201533
-6 15 42.720019
-6 16 48.466483
-6 17 49.244289
-6 18 44.721360
-6 19 83.522452
-6 20 78.160092
-6 21 73.375745
-6 22 82.462113
-6 23 72.801099
-6 24 82.000000
-6 25 72.277244
-6 26 81.394103
-6 27 93.005376
-6 28 90.138782
-6 29 90.603532
-6 30 86.023253
-6 31 87.458562
-6 32 84.403791
-6 33 86.683332
-6 34 88.459030
-6 35 82.006097
-6 36 47.000000
-6 37 45.000000
-6 38 45.099889
-6 39 42.296572
-6 40 40.311289
-6 41 40.000000
-6 42 39.293765
-6 43 35.355339
-6 44 35.000000
-6 45 35.128336
-6 46 3.000000
-6 47 5.385165
-6 48 43.863424
-6 49 82.969874
-6 50 76.243032
-6 51 72.138755
-6 52 73.824115
-6 53 55.226805
-6 54 35.000000
-6 55 43.011626
-6 56 26.925824
-6 57 58.309519
-6 58 60.827625
-6 59 75.166482
-6 60 65.764732
-6 61 25.495098
-6 62 32.015621
-6 63 67.268120
-6 64 79.056942
-6 65 60.415230
-6 66 47.434165
-6 67 52.392748
-6 68 61.522354
-6 69 32.015621
-6 70 34.785054
-6 71 21.931712
-6 72 54.083269
-6 73 47.423623
-6 74 30.805844
-6 75 65.000000
-6 76 81.394103
-6 77 83.240615
-6 78 82.054860
-6 79 31.384710
-6 80 22.022716
-6 81 46.615448
-6 82 39.623226
-6 83 42.579338
-6 84 56.612719
-6 85 67.119297
-6 86 75.451971
-6 87 61.008196
-6 88 61.522354
-6 89 27.294688
-6 90 92.784697
-6 91 41.629317
-6 92 51.865210
-6 93 53.413481
-6 94 52.630789
-6 95 52.325902
-6 96 60.000000
-6 97 46.754679
-6 98 68.883960
-6 99 33.541020
-6 100 50.358713
-6 101 21.095023
-7 1 33.301652
-7 2 12.206556
-7 3 4.000000
-7 4 10.770330
-7 5 5.385165
-7 6 10.198039
-7 8 3.000000
-7 9 5.830952
-7 10 40.792156
-7 11 35.902646
-7 12 36.400549
-7 13 31.622777
-7 14 42.059482
-7 15 32.695565
-7 16 38.483763
-7 17 39.357337
-7 18 34.985711
-7 19 74.672619
-7 20 69.289249
-7 21 64.621978
-7 22 73.375745
-7 23 63.906181
-7 24 72.801099
-7 25 63.245553
-7 26 72.034714
-7 27 89.185201
-7 28 86.769810
-7 29 86.608314
-7 30 82.365041
-7 31 83.216585
-7 32 80.622577
-7 33 82.377181
-7 34 83.600239
-7 35 78.032045
-7 36 50.009999
-7 37 48.052055
-7 38 47.518417
-7 39 44.283180
-7 40 42.296572
-7 41 43.174066
-7 42 40.000000
-7 43 37.336309
-7 44 38.327536
-7 45 37.656341
-7 46 7.280110
-7 47 5.000000
-7 48 34.000000
-7 49 74.000000
-7 50 67.416615
-7 51 67.201190
-7 52 66.287254
-7 53 45.541190
-7 54 25.079872
-7 55 39.924930
-7 56 19.209373
-7 57 51.224994
-7 58 51.419841
-7 59 65.069194
-7 60 55.578773
-7 61 15.297059
-7 62 28.792360
-7 63 61.717096
-7 64 72.346389
-7 65 52.478567
-7 66 38.910153
-7 67 44.418465
-7 68 56.612719
-7 69 26.627054
-7 70 26.419690
-7 71 18.027756
-7 72 51.078371
-7 73 46.097722
-7 74 21.931712
-7 75 55.036352
-7 76 71.196910
-7 77 75.716577
-7 78 72.173402
-7 79 21.470911
-7 80 13.892444
-7 81 40.311289
-7 82 35.355339
-7 83 33.241540
-7 84 47.927028
-7 85 60.307545
-7 86 68.767725
-7 87 51.088159
-7 88 51.351728
-7 89 18.027756
-7 90 85.445889
-7 91 33.837849
-7 92 45.276926
-7 93 47.423623
-7 94 48.764741
-7 95 47.434165
-7 96 53.740115
-7 97 42.544095
-7 98 58.694122
-7 99 24.351591
-7 100 40.792156
-7 101 15.264338
-8 1 35.355339
-8 2 14.142136
-8 3 7.000000
-8 4 12.206556
-8 5 7.071068
-8 6 11.180340
-8 7 3.000000
-8 9 5.000000
-8 10 40.311289
-8 11 35.355339
-8 12 35.693137
-8 13 30.805844
-8 14 41.231056
-8 15 31.622777
-8 16 37.336309
-8 17 38.078866
-8 18 33.541020
-8 19 75.769387
-8 20 70.384657
-8 21 65.795137
-8 22 74.330344
-8 23 65.000000
-8 24 73.681748
-8 25 64.257295
-8 26 72.801099
-8 27 91.787799
-8 28 89.442719
-8 29 89.185201
-8 30 85.000000
-8 31 85.755466
-8 32 83.240615
-8 33 84.905830
-8 34 86.023253
-8 35 80.622577
-8 36 52.952809
-8 37 50.990195
-8 38 50.487622
-8 39 47.265209
-8 40 45.276926
-8 41 46.097722
-8 42 43.000000
-8 43 40.311289
-8 44 41.231056
-8 45 40.607881
-8 46 8.602325
-8 47 5.830952
-8 48 32.695565
-8 49 75.026662
-8 50 68.541958
-8 51 69.634761
-8 52 68.007353
-8 53 46.097722
-8 54 25.495098
-8 55 42.720019
-8 56 21.213203
-8 57 53.150729
-8 58 52.201533
-8 59 65.000000
-8 60 55.226805
-8 61 15.000000
-8 62 31.622777
-8 63 64.031242
-8 64 74.330344
-8 65 54.083269
-8 66 40.311289
-8 67 46.043458
-8 68 59.076222
-8 69 29.154759
-8 70 28.017851
-8 71 20.880613
-8 72 53.851648
-8 73 49.030603
-8 74 19.849433
-8 75 55.226805
-8 76 70.710678
-8 77 77.420927
-8 78 72.443081
-8 79 20.248457
-8 80 11.401754
-8 81 42.520583
-8 82 38.013156
-8 83 34.176015
-8 84 49.193496
-8 85 62.289646
-8 86 70.767224
-8 87 51.351728
-8 88 51.088159
-8 89 19.235384
-8 90 87.200917
-8 91 35.608988
-8 92 47.381431
-8 93 49.678969
-8 94 51.429563
-8 95 49.929951
-8 96 55.901699
-8 97 45.177428
-8 98 58.051701
-8 99 25.495098
-8 100 41.484937
-8 101 17.888544
-9 1 39.051248
-9 2 11.180340
-9 3 8.602325
-9 4 8.602325
-9 5 5.000000
-9 6 7.071068
-9 7 5.830952
-9 8 5.000000
-9 10 45.276926
-9 11 40.311289
-9 12 40.607881
-9 13 35.693137
-9 14 46.097722
-9 15 36.400549
-9 16 42.059482
-9 17 42.720019
-9 18 38.078866
-9 19 80.411442
-9 20 75.026662
-9 21 70.384657
-9 22 79.056942
-9 23 69.641941
-9 24 78.447435
-9 25 68.949257
-9 26 77.620873
-9 27 94.339811
-9 28 91.787799
-9 29 91.809586
-9 30 87.464278
-9 31 88.481637
-9 32 85.755466
-9 33 87.658428
-9 34 89.022469
-9 35 83.216585
-9 36 52.239832
-9 37 50.249378
-9 38 50.039984
-9 39 47.000000
-9 40 45.000000
-9 41 45.276926
-9 42 43.289722
-9 43 40.000000
-9 44 40.311289
-9 45 40.049969
-9 46 5.385165
-9 47 3.000000
-9 48 37.336309
-9 49 79.711982
-9 50 73.164199
-9 51 72.622311
-9 52 72.111026
-9 53 50.990195
-9 54 30.413813
-9 55 44.721360
-9 56 25.000000
-9 57 57.008771
-9 58 57.008771
-9 59 70.000000
-9 60 60.207973
-9 61 20.000000
-9 62 33.541020
-9 63 67.268120
-9 64 78.102497
-9 65 58.309519
-9 66 44.721360
-9 67 50.249378
-9 68 62.008064
-9 69 32.015621
-9 70 32.249031
-9 71 22.825424
-9 72 55.901699
-9 73 50.289164
-9 74 23.853721
-9 75 60.207973
-9 76 75.663730
-9 77 81.541401
-9 78 77.414469
-9 79 25.000000
-9 80 15.000000
-9 81 45.967380
-9 82 40.496913
-9 83 38.897301
-9 84 53.712196
-9 85 66.068147
-9 86 74.518454
-9 87 56.320511
-9 88 56.080300
-9 89 23.769729
-9 90 91.263355
-9 91 39.661064
-9 92 50.990195
-9 93 53.037722
-9 94 53.851648
-9 95 52.801515
-9 96 59.413803
-9 97 47.707442
-9 98 62.968246
-9 99 30.083218
-9 100 46.324939
-9 101 20.615528
-10 1 33.541020
-10 2 52.201533
-10 3 41.761226
-10 4 51.419841
-10 5 46.097722
-10 6 50.990195
-10 7 40.792156
-10 8 40.311289
-10 9 45.276926
-10 11 5.000000
-10 12 5.385165
-10 13 10.198039
-10 14 5.000000
-10 15 11.180340
-10 16 9.433981
-10 17 11.180340
-10 18 14.142136
-10 19 45.343136
-10 20 40.607881
-10 21 37.735925
-10 22 42.426407
-10 23 36.055513
-10 24 41.036569
-10 25 34.409301
-10 26 39.051248
-10 27 85.146932
-10 28 85.000000
-10 29 82.152298
-10 30 80.000000
-10 31 78.160092
-10 32 78.000000
-10 33 77.162167
-10 34 75.663730
-10 35 75.000000
-10 36 75.822160
-10 37 74.330344
-10 38 72.346389
-10 39 68.767725
-10 40 67.268120
-10 41 70.710678
-10 42 62.481997
-10 43 63.639610
-10 44 67.268120
-10 45 65.069194
-10 46 48.052055
-10 47 45.705580
-10 48 12.806248
-10 49 43.863424
-10 50 39.408121
-10 51 62.000000
-10 52 47.434165
-10 53 15.811388
-10 54 18.027756
-10 55 51.478151
-10 56 32.015621
-10 57 40.000000
-10 58 22.360680
-10 59 25.495098
-10 60 15.000000
-10 61 25.495098
-10 62 46.097722
-10 63 55.000000
-10 64 57.008771
-10 65 35.355339
-10 66 25.495098
-10 67 31.064449
-10 68 54.451814
-10 69 39.051248
-10 70 27.018512
-10 71 42.201896
-10 72 58.523500
-10 73 60.901560
-10 74 26.248809
-10 75 18.027756
-10 76 30.413813
-10 77 55.036352
-10 78 34.539832
-10 79 21.095023
-10 80 33.241540
-10 81 38.897301
-10 82 45.276926
-10 83 18.788294
-10 84 27.294688
-10 85 47.381431
-10 86 54.341513
-10 87 15.556349
-10 88 11.180340
-10 89 26.925824
-10 90 64.412732
-10 91 29.546573
-10 92 39.623226
-10 93 43.737855
-10 94 53.758720
-10 95 48.764741
-10 96 46.043458
-10 97 48.846699
-10 98 18.027756
-10 99 23.345235
-10 100 16.000000
-10 101 38.275318
-11 1 31.622777
-11 2 47.434165
-11 3 37.000000
-11 4 46.572524
-11 5 41.231056
-11 6 46.097722
-11 7 35.902646
-11 8 35.355339
-11 9 40.311289
-11 10 5.000000
-11 12 2.000000
-11 13 5.385165
-11 14 7.071068
-11 15 7.071068
-11 16 8.000000
-11 17 10.000000
-11 18 11.180340
-11 19 48.795492
-11 20 43.863424
-11 21 40.607881
-11 22 46.097722
-11 23 39.051248
-11 24 44.821870
-11 25 37.536649
-11 26 43.011626
-11 27 85.586214
-11 28 85.146932
-11 29 82.607506
-11 30 80.156098
-11 31 78.638413
-11 32 78.160092
-11 33 77.646635
-11 34 76.485293
-11 35 75.166482
-11 36 72.622311
-11 37 71.063352
-11 38 69.202601
-11 39 65.604878
-11 40 64.031242
-11 41 67.268120
-11 42 59.405387
-11 43 60.207973
-11 44 63.639610
-11 45 61.554854
-11 46 43.174066
-11 47 40.792156
-11 48 9.433981
-11 49 47.423623
-11 50 42.520583
-11 51 62.201286
-11 52 49.244289
-11 53 18.027756
-11 54 14.142136
-11 55 49.244289
-11 56 28.284271
-11 57 40.311289
-11 58 25.000000
-11 59 30.413813
-11 60 20.000000
-11 61 20.615528
-11 62 43.011626
-11 63 55.226805
-11 64 58.523500
-11 65 36.400549
-11 66 25.000000
-11 67 31.144823
-11 68 54.037024
-11 69 36.055513
-11 70 24.186773
-11 71 38.288379
-11 72 57.008771
-11 73 58.600341
-11 74 21.540659
-11 75 22.360680
-11 76 35.355339
-11 77 57.306195
-11 78 39.217343
-11 79 16.124515
-11 80 28.284271
-11 81 37.656341
-11 82 42.953463
-11 83 17.262677
-11 84 28.460499
-11 85 48.270074
-11 86 55.659680
-11 87 19.416488
-11 88 16.124515
-11 89 22.803509
-11 90 66.887966
-11 91 27.892651
-11 92 39.051248
-11 93 43.104524
-11 94 52.392748
-11 95 47.675990
-11 96 46.097722
-11 97 47.127487
-11 98 22.803509
-11 99 20.000000
-11 100 16.763055
-11 101 34.205263
-12 1 33.526109
-12 2 48.104054
-12 3 37.696154
-12 4 47.127487
-12 5 41.761226
-12 6 46.572524
-12 7 36.400549
-12 8 35.693137
-12 9 40.607881
-12 10 5.385165
-12 11 2.000000
-12 13 5.000000
-12 14 5.830952
-12 15 5.830952
-12 16 6.000000
-12 17 8.000000
-12 18 9.433981
-12 19 50.209561
-12 20 45.343136
-12 21 42.201896
-12 22 47.423623
-12 23 40.607881
-12 24 46.097722
-12 25 39.051248
-12 26 44.204072
-12 27 87.572827
-12 28 87.143560
-12 29 84.593144
-12 30 82.152298
-12 31 80.622577
-12 32 80.156098
-12 33 79.630396
-12 34 78.447435
-12 35 77.162167
-12 36 74.202426
-12 37 72.622311
-12 38 70.802542
-12 39 67.201190
-12 40 65.604878
-12 41 68.767725
-12 42 61.032778
-12 43 61.717096
-12 44 65.069194
-12 45 63.031738
-12 46 43.680659
-12 47 41.231056
-12 48 7.810250
-12 49 48.795492
-12 50 44.045431
-12 51 64.195015
-12 52 51.078371
-12 53 19.723083
-12 54 15.620499
-12 55 51.078371
-12 56 29.732137
-12 57 42.296572
-12 58 26.627054
-12 59 30.805844
-12 60 20.099751
-12 61 21.189620
-12 62 44.654227
-12 63 57.218878
-12 64 60.406953
-12 65 38.327536
-12 66 27.000000
-12 67 33.136083
-12 68 56.035703
-12 69 37.735925
-12 70 25.942244
-12 71 39.623226
-12 72 58.940648
-12 73 60.415230
-12 74 20.880613
-12 75 23.323808
-12 76 35.128336
-12 77 59.059292
-12 78 39.924930
-12 79 16.000000
-12 80 28.071338
-12 81 39.623226
-12 82 44.777226
-12 83 19.235384
-12 84 30.364453
-12 85 50.219518
-12 86 57.567352
-12 87 20.615528
-12 88 16.492423
-12 89 24.083189
-12 90 68.600292
-12 91 29.832868
-12 92 41.048752
-12 93 45.099889
-12 94 54.341513
-12 95 49.648766
-12 96 48.093659
-12 97 49.040799
-12 98 22.360680
-12 99 21.633308
-12 100 18.681542
-12 101 35.468296
-13 1 32.388269
-13 2 43.462628
-13 3 33.105891
-13 4 42.379240
-13 5 37.000000
-13 6 41.761226
-13 7 31.622777
-13 8 30.805844
-13 9 35.693137
-13 10 10.198039
-13 11 5.385165
-13 12 5.000000
-13 14 10.440307
-13 15 3.000000
-13 16 7.810250
-13 17 9.433981
-13 18 8.000000
-13 19 53.814496
-13 20 48.795492
-13 21 45.343136
-13 22 51.224994
-13 23 43.863424
-13 24 50.000000
-13 25 42.426407
-13 26 48.259714
-13 27 88.283634
-13 28 87.572827
-13 29 85.328776
-13 30 82.607506
-13 31 81.394103
-13 32 80.622577
-13 33 80.411442
-13 34 79.555012
-13 35 77.646635
-13 36 71.281134
-13 37 69.634761
-13 38 67.955868
-13 39 64.350602
-13 40 62.681736
-13 41 65.604878
-13 42 58.309519
-13 43 58.600341
-13 44 61.717096
-13 45 59.816386
-13 46 38.897301
-13 47 36.400549
-13 48 6.000000
-13 49 52.497619
-13 50 47.381431
-13 51 64.776539
-13 52 53.235327
-13 53 22.671568
-13 54 13.000000
-13 55 49.335586
-13 56 26.627054
-13 57 43.174066
-13 58 29.732137
-13 59 35.693137
-13 60 25.079872
-13 61 16.552945
-13 62 42.059482
-13 63 57.870545
-13 64 62.241465
-13 65 39.924930
-13 66 27.459060
-13 67 33.955854
-13 68 56.080300
-13 69 35.341194
-13 70 24.041631
-13 71 36.124784
-13 72 57.870545
-13 73 58.523500
-13 74 16.155494
-13 75 27.730849
-13 76 40.112342
-13 77 61.587336
-13 78 44.598206
-13 79 11.000000
-13 80 23.086793
-13 81 39.051248
-13 82 43.011626
-13 83 19.104973
-13 84 32.202484
-13 85 51.546096
-13 86 59.236813
-13 87 24.698178
-13 88 21.377558
-13 89 20.615528
-13 90 71.281134
-13 91 29.068884
-13 92 41.109610
-13 93 45.044423
-13 94 53.460266
-13 95 49.091751
-13 96 48.662100
-13 97 47.853944
-13 98 27.294688
-13 99 19.313208
-13 100 20.591260
-13 101 31.827661
-14 1 38.078866
-14 2 53.851648
-14 3 43.462628
-14 4 52.810984
-14 5 47.434165
-14 6 52.201533
-14 7 42.059482
-14 8 41.231056
-14 9 46.097722
-14 10 5.000000
-14 11 7.071068
-14 12 5.830952
-14 13 10.440307
-14 15 10.000000
-14 16 5.830952
-14 17 7.071068
-14 18 11.180340
-14 19 49.203658
-14 20 44.654227
-14 21 42.059482
-14 22 46.097722
-14 23 40.311289
-14 24 44.598206
-14 25 38.587563
-14 26 42.426407
-14 27 90.138782
-14 28 90.000000
-14 29 87.143560
-14 30 85.000000
-14 31 83.150466
-14 32 83.000000
-14 33 82.152298
-14 34 80.622577
-14 35 80.000000
-14 36 79.649231
-14 37 78.102497
-14 38 76.216796
-14 39 72.622311
-14 40 71.063352
-14 41 74.330344
-14 42 66.400301
-14 43 67.268120
-14 44 70.710678
-14 45 68.622154
-14 46 49.335586
-14 47 46.840154
-14 48 10.440307
-14 49 47.634021
-14 50 43.566042
-14 51 67.000000
-14 52 52.201533
-14 53 20.615528
-14 54 21.213203
-14 55 55.901699
-14 56 35.355339
-14 57 45.000000
-14 58 26.925824
-14 59 26.925824
-14 60 15.811388
-14 61 26.925824
-14 62 50.000000
-14 63 60.000000
-14 64 61.846584
-14 65 40.311289
-14 66 30.413813
-14 67 36.055513
-14 68 59.413803
-14 69 43.011626
-14 70 31.064449
-14 71 45.343136
-14 72 63.245553
-14 73 65.299311
-14 74 25.179357
-14 75 21.213203
-14 76 30.000000
-14 77 59.615434
-14 78 36.715120
-14 79 21.213203
-14 80 33.015148
-14 81 43.680659
-14 82 49.648766
-14 83 23.409400
-14 84 32.249031
-14 85 52.345009
-14 86 59.228372
-14 87 19.416488
-14 88 13.038405
-14 89 29.832868
-14 90 68.876701
-14 91 34.176015
-14 92 44.553339
-14 93 48.662100
-14 94 58.523500
-14 95 53.600373
-14 96 51.039201
-14 97 53.488316
-14 98 17.029386
-14 99 27.018512
-14 100 21.000000
-14 101 41.231056
-15 1 35.355339
-15 2 44.721360
-15 3 34.481879
-15 4 43.462628
-15 5 38.078866
-15 6 42.720019
-15 7 32.695565
-15 8 31.622777
-15 9 36.400549
-15 10 11.180340
-15 11 7.071068
-15 12 5.830952
-15 13 3.000000
-15 14 10.000000
-15 16 5.830952
-15 17 7.071068
-15 18 5.000000
-15 19 55.865911
-15 20 50.931326
-15 21 47.634021
-15 22 53.150729
-15 23 46.097722
-15 24 51.855569
-15 25 44.598206
-15 26 50.000000
-15 27 91.241438
-15 28 90.553851
-15 29 88.283634
-15 30 85.586214
-15 31 84.344532
-15 32 83.600239
-15 33 83.360662
-15 34 82.462113
-15 35 80.622577
-15 36 73.783467
-15 37 72.111026
-15 38 70.491134
-15 39 66.887966
-15 40 65.192024
-15 41 68.007353
-15 42 60.901560
-15 43 61.032778
-15 44 64.031242
-15 45 62.201286
-15 46 39.924930
-15 47 37.336309
-15 48 3.000000
-15 49 54.488531
-15 50 49.578221
-15 51 67.742158
-15 52 55.901699
-15 53 25.000000
-15 54 15.811388
-15 55 52.201533
-15 56 29.154759
-15 57 46.097722
-15 58 32.015621
-15 59 36.400549
-15 60 25.495098
-15 61 18.027756
-15 62 44.721360
-15 63 60.827625
-15 64 65.000000
-15 65 42.720019
-15 66 30.413813
-15 67 36.878178
-15 68 59.076222
-15 69 38.078866
-15 70 26.925824
-15 71 38.418745
-15 72 60.827625
-15 73 61.351447
-15 74 15.297059
-15 75 29.154759
-15 76 40.000000
-15 77 64.140471
-15 78 45.694639
-15 79 11.401754
-15 80 23.021729
-15 81 42.047592
-15 82 45.880279
-15 83 22.090722
-15 84 34.928498
-15 85 54.405882
-15 86 62.032250
-15 87 26.400758
-15 88 22.135944
-15 89 23.021729
-15 90 73.783467
-15 91 32.062439
-15 92 44.102154
-15 93 48.041649
-15 94 56.435804
-15 95 52.086467
-15 96 51.623638
-15 97 50.803543
-15 98 27.018512
-15 99 22.135944
-15 100 23.259407
-15 101 34.058773
-16 1 39.293765
-16 2 50.537115
-16 3 40.311289
-16 4 49.244289
-16 5 43.863424
-16 6 48.466483
-16 7 38.483763
-16 8 37.336309
-16 9 42.059482
-16 10 9.433981
-16 11 8.000000
-16 12 6.000000
-16 13 7.810250
-16 14 5.830952
-16 15 5.830952
-16 17 2.000000
-16 18 5.385165
-16 19 54.671748
-16 20 50.000000
-16 21 47.169906
-16 22 51.662365
-16 23 45.486262
-16 24 50.209561
-16 25 43.829214
-16 26 48.104054
-16 27 93.536089
-16 28 93.134312
-16 29 90.553851
-16 30 88.141931
-16 31 86.579443
-16 32 86.145226
-16 33 85.586214
-16 34 84.344532
-16 35 83.150466
-16 36 79.056942
-16 37 77.420927
-16 38 75.716577
-16 39 72.111026
-16 40 70.455660
-16 41 73.409809
-16 42 66.037868
-16 43 66.400301
-16 44 69.526973
-16 45 67.623960
-16 46 45.694639
-16 47 43.081318
-16 48 5.000000
-16 49 53.150729
-16 50 48.826222
-16 51 70.178344
-16 52 56.648036
-16 53 25.079872
-16 54 20.591260
-16 55 56.648036
-16 56 34.409301
-16 57 48.259714
-16 58 31.764760
-16 59 32.695565
-16 60 21.540659
-16 61 23.853721
-16 62 49.739320
-16 63 63.198101
-16 64 66.098411
-16 65 44.147480
-16 66 33.000000
-16 67 39.115214
-16 68 62.032250
-16 69 42.941821
-16 70 31.384710
-16 71 43.931765
-16 72 64.761099
-16 73 65.924199
-16 74 20.000000
-16 75 26.907248
-16 76 35.128336
-16 77 64.404969
-16 78 42.544095
-16 79 17.088007
-16 80 28.284271
-16 81 45.541190
-16 82 50.328918
-16 83 25.179357
-16 84 36.138622
-16 85 56.089215
-16 86 63.324561
-16 87 24.839485
-16 88 18.867962
-16 89 28.425341
-16 90 73.824115
-16 91 35.693137
-16 92 47.042534
-16 93 51.088159
-16 94 60.207973
-16 95 55.578773
-16 96 54.083269
-16 97 54.817880
-16 98 22.090722
-16 99 26.832816
-16 100 24.515301
-16 101 39.623226
-17 1 41.231056
-17 2 51.478151
-17 3 41.340053
-17 4 50.089919
-17 5 44.721360
-17 6 49.244289
-17 7 39.357337
-17 8 38.078866
-17 9 42.720019
-17 10 11.180340
-17 11 10.000000
-17 12 8.000000
-17 13 9.433981
-17 14 7.071068
-17 15 7.071068
-17 16 2.000000
-17 18 5.000000
-17 19 56.222771
-17 20 51.613952
-17 21 48.877398
-17 22 53.150729
-17 23 47.169906
-17 24 51.662365
-17 25 45.486262
-17 26 49.497475
-17 27 95.524866
-17 28 95.131488
-17 29 92.541882
-17 30 90.138782
-17 31 88.566359
-17 32 88.141931
-17 33 87.572827
-17 34 86.313383
-17 35 85.146932
-17 36 80.709355
-17 37 79.056942
-17 38 77.388630
-17 39 73.783467
-17 40 72.111026
-17 41 75.000000
-17 42 67.742158
-17 43 68.007353
-17 44 71.063352
-17 45 69.202601
-17 46 46.518813
-17 47 43.863424
-17 48 5.385165
-17 49 54.671748
-17 50 50.477718
-17 51 72.173402
-17 52 58.523500
-17 53 26.925824
-17 54 22.360680
-17 55 58.523500
-17 56 36.055513
-17 57 50.249378
-17 58 33.541020
-17 59 33.541020
-17 60 22.360680
-17 61 25.000000
-17 62 51.478151
-17 63 65.192024
-17 64 68.007353
-17 65 46.097722
-17 66 35.000000
-17 67 41.109610
-17 68 64.031242
-17 69 44.721360
-17 70 33.241540
-17 71 45.453273
-17 72 66.708320
-17 73 67.779053
-17 74 20.099751
-17 75 28.284271
-17 76 35.355339
-17 77 66.211781
-17 78 43.566042
-17 79 17.888544
-17 80 28.635642
-17 81 47.518417
-17 82 52.201533
-17 83 27.166155
-17 84 38.078866
-17 85 58.051701
-17 86 65.253352
-17 87 26.400758
-17 88 20.000000
-17 89 30.000000
-17 90 75.591005
-17 91 37.656341
-17 92 49.040799
-17 93 53.084838
-17 94 62.169124
-17 95 57.558666
-17 96 56.080300
-17 97 56.753854
-17 98 22.360680
-17 99 28.635642
-17 100 26.476405
-17 101 41.109610
-18 1 40.311289
-18 2 47.169906
-18 3 37.202150
-18 4 45.650849
-18 5 40.311289
-18 6 44.721360
-18 7 34.985711
-18 8 33.541020
-18 9 38.078866
-18 10 14.142136
-18 11 11.180340
-18 12 9.433981
-18 13 8.000000
-18 14 11.180340
-18 15 5.000000
-18 16 5.385165
-18 17 5.000000
-18 19 59.464275
-18 20 54.671748
-18 21 51.613952
-18 22 56.568542
-18 23 50.000000
-18 24 55.172457
-18 25 48.414874
-18 26 53.150729
-18 27 96.176920
-18 28 95.524866
-18 29 93.214806
-18 30 90.553851
-18 31 89.269256
-18 32 88.566359
-18 33 88.283634
-18 34 87.321246
-18 35 85.586214
-18 36 78.032045
-18 37 76.321688
-18 38 74.793048
-18 39 71.196910
-18 40 69.462220
-18 41 72.111026
-18 42 65.299311
-18 43 65.192024
-18 44 68.007353
-18 45 66.287254
-18 46 42.059482
-18 47 39.357337
-18 48 2.000000
-18 49 58.000000
-18 50 53.413481
-18 51 72.691127
-18 52 60.415230
-18 53 29.154759
-18 54 20.615528
-18 55 57.008771
-18 56 33.541020
-18 57 50.990195
-18 58 36.055513
-18 59 38.078866
-18 60 26.925824
-18 61 21.213203
-18 62 49.244289
-18 63 65.764732
-18 64 69.641941
-18 65 47.434165
-18 66 35.355339
-18 67 41.773197
-18 68 64.070274
-18 69 42.720019
-18 70 31.780497
-18 71 42.438190
-18 72 65.764732
-18 73 66.098411
-18 74 15.132746
-18 75 32.015621
-18 76 40.311289
-18 77 68.476273
-18 78 47.885280
-18 79 13.601471
-18 80 23.769729
-18 81 47.042534
-18 82 50.695167
-18 83 27.073973
-18 84 39.560081
-18 85 59.203040
-18 86 66.730802
-18 87 29.698485
-18 88 24.186773
-18 89 27.294688
-18 90 78.032045
-18 91 37.054015
-18 92 49.091751
-18 93 53.037722
-18 94 61.400326
-18 95 57.078893
-18 96 56.568542
-18 97 55.731499
-18 98 27.294688
-18 99 26.925824
-18 100 27.856777
-18 101 38.013156
-19 1 45.177428
-19 2 82.225300
-19 3 73.375745
-19 4 82.969874
-19 5 78.746428
-19 6 83.522452
-19 7 74.672619
-19 8 75.769387
-19 9 80.411442
-19 10 45.343136
-19 11 48.795492
-19 12 50.209561
-19 13 53.814496
-19 14 49.203658
-19 15 55.865911
-19 16 54.671748
-19 17 56.222771
-19 18 59.464275
-19 20 5.385165
-19 21 10.198039
-19 22 4.000000
-19 23 10.770330
-19 24 6.000000
-19 25 11.661904
-19 26 9.000000
-19 27 56.797887
-19 28 59.169249
-19 29 54.120237
-19 30 54.918121
-19 31 50.606324
-19 32 53.254108
-19 33 49.739320
-19 34 45.617979
-19 35 50.803543
-19 36 83.240615
-19 37 82.710338
-19 38 79.812280
-19 39 77.129761
-19 40 76.687678
-19 41 81.584312
-19 42 71.386273
-19 43 75.802375
-19 44 80.752709
-19 45 77.781746
-19 46 80.653580
-19 47 79.378838
-19 48 58.000000
-19 49 2.000000
-19 50 7.280110
-19 51 41.036569
-19 52 18.601075
-19 53 31.400637
-19 54 51.000000
-19 55 56.089215
-19 56 56.753854
-19 57 30.594117
-19 58 24.413111
-19 59 29.427878
-19 60 37.161808
-19 61 62.177166
-19 62 60.008333
-19 63 36.619667
-19 64 25.806976
-19 65 25.019992
-19 66 36.138622
-19 67 32.140317
-19 68 42.059482
-19 69 55.145263
-19 70 48.764741
-19 71 64.629715
-19 72 54.230987
-19 73 62.936476
-19 74 69.202601
-19 75 28.301943
-19 76 39.000000
-19 77 17.464249
-19 78 21.095023
-19 79 62.425956
-19 80 73.573093
-19 81 42.107007
-19 82 53.235327
-19 83 41.629317
-19 84 26.925824
-19 85 27.294688
-19 86 26.172505
-19 87 29.832868
-19 88 37.215588
-19 89 56.648036
-19 90 23.000000
-19 91 42.579338
-19 92 37.336309
-19 93 39.051248
-19 94 49.979996
-19 95 44.922155
-19 96 34.176015
-19 97 50.219518
-19 98 42.059482
-19 99 50.328918
-19 100 34.985711
-19 101 63.348244
-20 1 40.049969
-20 2 76.902536
-20 3 68.007353
-20 4 77.620873
-20 5 73.375745
-20 6 78.160092
-20 7 69.289249
-20 8 70.384657
-20 9 75.026662
-20 10 40.607881
-20 11 43.863424
-20 12 45.343136
-20 13 48.795492
-20 14 44.654227
-20 15 50.931326
-20 16 50.000000
-20 17 51.613952
-20 18 54.671748
-20 19 5.385165
-20 21 5.000000
-20 22 5.385165
-20 23 5.385165
-20 24 6.403124
-20 25 6.403124
-20 26 8.602325
-20 27 56.648036
-20 28 58.600341
-20 29 53.851648
-20 30 54.120237
-20 31 50.159745
-20 32 52.354560
-20 33 49.244289
-20 34 45.541190
-20 35 49.739320
-20 36 79.056942
-20 37 78.447435
-20 38 75.584390
-20 39 72.801099
-20 40 72.277244
-20 41 77.129761
-20 42 66.940272
-20 43 71.196910
-20 44 76.118329
-20 45 73.164199
-20 46 75.286121
-20 47 74.000000
-20 48 53.150729
-20 49 5.000000
-20 50 2.000000
-20 51 39.051248
-20 52 16.401219
-20 53 26.248809
-20 54 45.650849
-20 55 51.662365
-20 56 51.419841
-20 57 26.248809
-20 58 19.209373
-20 59 27.000000
-20 60 33.526109
-20 61 56.824291
-20 62 55.081757
-20 63 33.970576
-20 64 25.079872
-20 65 20.223748
-20 66 30.805844
-20 67 27.018512
-20 68 38.832976
-20 69 50.039984
-20 70 43.416587
-20 71 59.413803
-20 72 50.537115
-20 73 58.872744
-20 74 64.031242
-20 75 24.166092
-20 76 37.336309
-20 77 18.110770
-20 78 20.248457
-20 79 57.201399
-20 80 68.264193
-20 81 37.336309
-20 82 48.507731
-20 83 36.249138
-20 84 21.587033
-20 85 24.207437
-20 86 24.698178
-20 87 25.238859
-20 88 33.105891
-20 89 51.264022
-20 90 25.495098
-20 91 37.336309
-20 92 32.756679
-20 93 34.785054
-20 94 46.097722
-20 95 40.853396
-20 96 30.413813
-20 97 45.880279
-20 98 38.832976
-20 99 44.944410
-20 100 29.681644
-20 101 58.051701
-21 1 35.057096
-21 2 72.034714
-21 3 63.245553
-21 4 72.801099
-21 5 68.622154
-21 6 73.375745
-21 7 64.621978
-21 8 65.795137
-21 9 70.384657
-21 10 37.735925
-21 11 40.607881
-21 12 42.201896
-21 13 45.343136
-21 14 42.059482
-21 15 47.634021
-21 16 47.169906
-21 17 48.877398
-21 18 51.613952
-21 19 10.198039
-21 20 5.000000
-21 22 10.198039
-21 23 2.000000
-21 24 10.770330
-21 25 4.000000
-21 26 12.206556
-21 27 55.081757
-21 28 56.648036
-21 29 52.201533
-21 30 52.000000
-21 31 48.383882
-21 32 50.159745
-21 33 47.434165
-21 34 44.147480
-21 35 47.423623
-21 36 74.330344
-21 37 73.681748
-21 38 70.837843
-21 39 68.007353
-21 40 67.446275
-21 41 72.277244
-21 42 62.096699
-21 43 66.287254
-21 44 71.196910
-21 45 68.249542
-21 46 70.519501
-21 47 69.289249
-21 48 50.000000
-21 49 10.000000
-21 50 3.000000
-21 51 36.055513
-21 52 13.928388
-21 53 22.671568
-21 54 41.340053
-21 55 46.840154
-21 56 46.572524
-21 57 21.540659
-21 58 15.620499
-21 59 27.459060
-21 60 32.388269
-21 61 52.478567
-21 62 50.089919
-21 63 30.479501
-21 64 23.537205
-21 65 15.297059
-21 66 25.961510
-21 67 22.022716
-21 68 34.828150
-21 69 45.044423
-21 70 38.600518
-21 71 54.451814
-21 72 46.141088
-21 73 54.230987
-21 74 60.207973
-21 75 22.561028
-21 76 38.327536
-21 77 18.248288
-21 78 22.472205
-21 79 53.263496
-21 80 64.070274
-21 81 32.388269
-21 82 43.566042
-21 83 31.764760
-21 84 16.763055
-21 85 20.518285
-21 86 22.472205
-21 87 22.847319
-21 88 31.320920
-21 89 46.615448
-21 90 26.925824
-21 91 32.388269
-21 92 27.892651
-21 93 30.083218
-21 94 41.593269
-21 95 36.249138
-21 96 26.076810
-21 97 41.109610
-21 98 38.118237
-21 99 40.311289
-21 100 25.612497
-21 101 53.150729
-22 1 45.000000
-22 2 81.394103
-22 3 72.277244
-22 4 82.000000
-22 5 77.620873
-22 6 82.462113
-22 7 73.375745
-22 8 74.330344
-22 9 79.056942
-22 10 42.426407
-22 11 46.097722
-22 12 47.423623
-22 13 51.224994
-22 14 46.097722
-22 15 53.150729
-22 16 51.662365
-22 17 53.150729
-22 18 56.568542
-22 19 4.000000
-22 20 5.385165
-22 21 10.198039
-22 23 10.000000
-22 24 2.000000
-22 25 10.198039
-22 26 5.000000
-22 27 60.415230
-22 28 62.649820
-22 29 57.697487
-22 30 58.309519
-22 31 54.120237
-22 32 56.603887
-22 33 53.235327
-22 34 49.244289
-22 35 54.083269
-22 36 84.433406
-22 37 83.815273
-22 38 80.956779
-22 39 78.160092
-22 40 77.620873
-22 41 82.462113
-22 42 72.277244
-22 43 76.485293
-22 44 81.394103
-22 45 78.447435
-22 46 79.555012
-22 47 78.160092
-22 48 55.172457
-22 49 2.000000
-22 50 7.280110
-22 51 43.863424
-22 52 21.213203
-22 53 29.154759
-22 54 49.244289
-22 55 57.008771
-22 56 55.901699
-22 57 31.622777
-22 58 22.360680
-22 59 25.495098
-22 60 33.541020
-22 61 60.415230
-22 62 60.207973
-22 63 39.051248
-22 64 29.154759
-22 65 25.495098
-22 66 35.355339
-22 67 32.015621
-22 68 44.102154
-22 69 55.000000
-22 70 47.853944
-22 71 64.195015
-22 72 55.901699
-22 73 64.257295
-22 74 66.850580
-22 75 25.000000
-22 76 35.000000
-22 77 21.189620
-22 78 17.117243
-22 79 60.207973
-22 80 71.589105
-22 81 42.579338
-22 82 53.758720
-22 83 40.162171
-22 84 26.172505
-22 85 29.410882
-22 86 29.206164
-22 87 26.870058
-22 88 33.837849
-22 89 55.362442
-22 90 27.000000
-22 91 42.107007
-22 92 38.078866
-22 93 40.162171
-22 94 51.478151
-22 95 46.238512
-22 96 35.777088
-22 97 51.244512
-22 98 38.275318
-22 99 49.040799
-22 100 33.105891
-22 101 62.649820
-23 1 35.000000
-23 2 71.589105
-23 3 62.641839
-23 4 72.277244
-23 5 68.007353
-23 6 72.801099
-23 7 63.906181
-23 8 65.000000
-23 9 69.641941
-23 10 36.055513
-23 11 39.051248
-23 12 40.607881
-23 13 43.863424
-23 14 40.311289
-23 15 46.097722
-23 16 45.486262
-23 17 47.169906
-23 18 50.000000
-23 19 10.770330
-23 20 5.385165
-23 21 2.000000
-23 22 10.000000
-23 24 10.198039
-23 25 2.000000
-23 26 11.180340
-23 27 57.008771
-23 28 58.523500
-23 29 54.120237
-23 30 53.851648
-23 31 50.289164
-23 32 52.000000
-23 33 49.335586
-23 34 46.097722
-23 35 49.244289
-23 36 75.026662
-23 37 74.330344
-23 38 71.512237
-23 39 68.622154
-23 40 68.007353
-23 41 72.801099
-23 42 62.641839
-23 43 66.708320
-23 44 71.589105
-23 45 68.658576
-23 46 69.921384
-23 47 68.622154
-23 48 48.414874
-23 49 10.198039
-23 50 3.605551
-23 51 37.735925
-23 52 15.811388
-23 53 21.213203
-23 54 40.311289
-23 55 47.434165
-23 56 46.097722
-23 57 22.360680
-23 58 14.142136
-23 59 25.495098
-23 60 30.413813
-23 61 51.478151
-23 62 50.249378
-23 63 32.015621
-23 64 25.495098
-23 65 15.811388
-23 66 25.495098
-23 67 22.022716
-23 68 36.124784
-23 69 45.000000
-23 70 38.078866
-23 71 54.230987
-23 72 47.169906
-23 73 55.036352
-23 74 58.898217
-23 75 20.615528
-23 76 36.400549
-23 77 20.223748
-23 78 20.808652
-23 79 52.009614
-23 80 62.968246
-23 81 32.756679
-23 82 43.931765
-23 83 30.870698
-23 84 16.278821
-23 85 22.022716
-23 86 24.351591
-23 87 21.023796
-23 88 29.410882
-23 89 45.880279
-23 90 28.792360
-23 91 32.140317
-23 92 28.460499
-23 93 30.870698
-23 94 42.544095
-23 95 37.121422
-23 96 27.202941
-23 97 41.785165
-23 98 36.124784
-23 99 39.560081
-23 100 24.413111
-23 101 52.773099
-24 1 45.044423
-24 2 81.049368
-24 3 71.805292
-24 4 81.584312
-24 5 77.129761
-24 6 82.000000
-24 7 72.801099
-24 8 73.681748
-24 9 78.447435
-24 10 41.036569
-24 11 44.821870
-24 12 46.097722
-24 13 50.000000
-24 14 44.598206
-24 15 51.855569
-24 16 50.209561
-24 17 51.662365
-24 18 55.172457
-24 19 6.000000
-24 20 6.403124
-24 21 10.770330
-24 22 2.000000
-24 23 10.198039
-24 25 10.000000
-24 26 3.000000
-24 27 62.241465
-24 28 64.412732
-24 29 59.506302
-24 30 60.033324
-24 31 55.901699
-24 32 58.309519
-24 33 55.009090
-24 34 51.078371
-24 35 55.758407
-24 36 85.094066
-24 37 84.433406
-24 38 81.596569
-24 39 78.746428
-24 40 78.160092
-24 41 82.969874
-24 42 72.801099
-24 43 76.902536
-24 44 81.786307
-24 45 78.854296
-24 46 79.075913
-24 47 77.620873
-24 48 53.814496
-24 49 4.000000
-24 50 8.062258
-24 51 45.343136
-24 52 22.671568
-24 53 28.178006
-24 54 48.466483
-24 55 57.567352
-24 56 55.578773
-24 57 32.310989
-24 58 21.540659
-24 59 23.537205
-24 60 31.764760
-24 61 59.615434
-24 62 60.406953
-24 63 40.360872
-24 64 30.886890
-24 65 25.961510
-24 66 35.128336
-24 67 32.140317
-24 68 45.221676
-24 69 55.036352
-24 70 47.518417
-24 71 64.070274
-24 72 56.824291
-24 73 65.000000
-24 74 65.734314
-24 75 23.430749
-24 76 33.000000
-24 77 23.086793
-24 78 15.132746
-24 79 59.169249
-24 80 70.661163
-24 81 42.953463
-24 82 54.129474
-24 83 39.560081
-24 84 26.019224
-24 85 30.610456
-24 86 30.805844
-24 87 25.495098
-24 88 32.202484
-24 89 54.817880
-24 90 29.000000
-24 91 42.011903
-24 92 38.600518
-24 93 40.853396
-24 94 52.325902
-24 95 47.010637
-24 96 36.715120
-24 97 51.865210
-24 98 36.400549
-24 99 48.507731
-24 100 32.310989
-24 101 62.393910
-25 1 35.057096
-25 2 71.196910
-25 3 62.096699
-25 4 71.805292
-25 5 67.446275
-25 6 72.277244
-25 7 63.245553
-25 8 64.257295
-25 9 68.949257
-25 10 34.409301
-25 11 37.536649
-25 12 39.051248
-25 13 42.426407
-25 14 38.587563
-25 15 44.598206
-25 16 43.829214
-25 17 45.486262
-25 18 48.414874
-25 19 11.661904
-25 20 6.403124
-25 21 4.000000
-25 22 10.198039
-25 23 2.000000
-25 24 10.000000
-25 26 10.440307
-25 27 58.940648
-25 28 60.406953
-25 29 56.044625
-25 30 55.713553
-25 31 52.201533
-25 32 53.851648
-25 33 51.244512
-25 34 48.052055
-25 35 51.078371
-25 36 75.769387
-25 37 75.026662
-25 38 72.235725
-25 39 69.289249
-25 40 68.622154
-25 41 73.375745
-25 42 63.245553
-25 43 67.186308
-25 44 72.034714
-25 45 69.123079
-25 46 69.375788
-25 47 68.007353
-25 48 46.861498
-25 49 10.770330
-25 50 5.000000
-25 51 39.446166
-25 52 17.720045
-25 53 19.849433
-25 54 39.357337
-25 55 48.104054
-25 56 45.705580
-25 57 23.323808
-25 58 12.806248
-25 59 23.537205
-25 60 28.442925
-25 61 50.537115
-25 62 50.487622
-25 63 33.600595
-25 64 27.459060
-25 65 16.552945
-25 66 25.179357
-25 67 22.203603
-25 68 37.483330
-25 69 45.044423
-25 70 37.656341
-25 71 54.083269
-25 72 48.259714
-25 73 55.901699
-25 74 57.628118
-25 75 18.681542
-25 76 34.481879
-25 77 22.203603
-25 78 19.209373
-25 79 50.803543
-25 80 61.911227
-25 81 33.241540
-25 82 44.384682
-25 83 30.083218
-25 84 16.031220
-25 85 23.600847
-25 86 26.248809
-25 87 19.235384
-25 88 27.513633
-25 89 45.221676
-25 90 30.675723
-25 91 32.015621
-25 92 29.154759
-25 93 31.764760
-25 94 43.566042
-25 95 38.078866
-25 96 28.425341
-25 97 42.544095
-25 98 34.132096
-25 99 38.897301
-25 100 23.323808
-25 101 52.469038
-26 1 45.276926
-26 2 80.622577
-26 3 71.196910
-26 4 81.049368
-26 5 76.485293
-26 6 81.394103
-26 7 72.034714
-26 8 72.801099
-26 9 77.620873
-26 10 39.051248
-26 11 43.011626
-26 12 44.204072
-26 13 48.259714
-26 14 42.426407
-26 15 50.000000
-26 16 48.104054
-26 17 49.497475
-26 18 53.150729
-26 19 9.000000
-26 20 8.602325
-26 21 12.206556
-26 22 5.000000
-26 23 11.180340
-26 24 3.000000
-26 25 10.440307
-26 27 65.000000
-26 28 67.082039
-26 29 62.241465
-26 30 62.649820
-26 31 58.600341
-26 32 60.901560
-26 33 57.697487
-26 34 53.851648
-26 35 58.309519
-26 36 86.162637
-26 37 85.440037
-26 38 82.637764
-26 39 79.711982
-26 40 79.056942
-26 41 83.815273
-26 42 73.681748
-26 43 77.620873
-26 44 82.462113
-26 45 79.555012
-26 46 78.447435
-26 47 76.902536
-26 48 51.855569
-26 49 7.000000
-26 50 9.899495
-26 51 47.634021
-26 52 25.000000
-26 53 26.925824
-26 54 47.434165
-26 55 58.523500
-26 56 55.226805
-26 57 33.541020
-26 58 20.615528
-26 59 20.615528
-26 60 29.154759
-26 61 58.523500
-26 62 60.827625
-26 63 42.426407
-26 64 33.541020
-26 65 26.925824
-26 66 35.000000
-26 67 32.557641
-26 68 47.010637
-26 69 55.226805
-26 70 47.169906
-26 71 64.000000
-26 72 58.309519
-26 73 66.211781
-26 74 64.140471
-26 75 21.213203
-26 76 30.000000
-26 77 25.961510
-26 78 12.165525
-26 79 57.706152
-26 80 69.354164
-26 81 43.680659
-26 82 54.817880
-26 83 38.832976
-26 84 26.076810
-26 85 32.557641
-26 86 33.286634
-26 87 23.600847
-26 88 29.832868
-26 89 54.129474
-26 90 32.000000
-26 91 42.047592
-26 92 39.560081
-26 93 42.047592
-26 94 53.712196
-26 95 48.301139
-26 96 38.275318
-26 97 52.924474
-26 98 33.615473
-26 99 47.853944
-26 100 31.320920
-26 101 62.128898
-27 1 58.523500
-27 2 89.022469
-27 3 85.755466
-27 4 91.400219
-27 5 90.138782
-27 6 93.005376
-27 7 89.185201
-27 8 91.787799
-27 9 94.339811
-27 10 85.146932
-27 11 85.586214
-27 12 87.572827
-27 13 88.283634
-27 14 90.138782
-27 15 91.241438
-27 16 93.536089
-27 17 95.524866
-27 18 96.176920
-27 19 56.797887
-27 20 56.648036
-27 21 55.081757
-27 22 60.415230
-27 23 57.008771
-27 24 62.241465
-27 25 58.940648
-27 26 65.000000
-27 28 5.000000
-27 29 3.000000
-27 30 7.071068
-27 31 7.000000
-27 32 8.602325
-27 33 8.000000
-27 34 11.180340
-27 35 11.180340
-27 36 61.717096
-27 37 62.649820
-27 38 60.033324
-27 39 59.908263
-27 40 61.032778
-27 41 65.192024
-27 42 58.258047
-27 43 64.031242
-27 44 68.007353
-27 45 65.604878
-27 46 91.263355
-27 47 91.809586
-27 48 94.201911
-27 49 58.600341
-27 50 55.973208
-27 51 23.537205
-27 52 41.231056
-27 53 70.000000
-27 54 77.620873
-27 55 50.000000
-27 56 71.589105
-27 57 45.276926
-27 58 65.192024
-27 59 82.462113
-27 60 85.586214
-27 61 85.440037
-27 62 61.032778
-27 63 30.413813
-27 64 31.622777
-27 65 50.000000
-27 66 60.827625
-27 67 54.451814
-27 68 33.241540
-27 69 62.649820
-27 70 67.675697
-27 71 71.561163
-27 72 39.051248
-27 73 47.423623
-27 74 97.718985
-27 75 75.663730
-27 76 93.407708
-27 77 39.357337
-27 78 76.896034
-27 79 90.801982
-27 80 96.772930
-27 81 50.921508
-27 82 53.851648
-27 83 69.231496
-27 84 58.008620
-27 85 38.013156
-27 86 32.756679
-27 87 74.242845
-27 88 83.216585
-27 89 76.321688
-27 90 37.536649
-27 91 60.440053
-27 92 47.539457
-27 93 43.965896
-27 94 40.496913
-27 95 42.047592
-27 96 39.623226
-27 97 46.647615
-27 98 91.787799
-27 99 72.422372
-27 100 69.180922
-27 101 73.925638
-28 1 57.008771
-28 2 86.023253
-28 3 83.240615
-28 4 88.481637
-28 5 87.464278
-28 6 90.138782
-28 7 86.769810
-28 8 89.442719
-28 9 91.787799
-28 10 85.000000
-28 11 85.146932
-28 12 87.143560
-28 13 87.572827
-28 14 90.000000
-28 15 90.553851
-28 16 93.134312
-28 17 95.131488
-28 18 95.524866
-28 19 59.169249
-28 20 58.600341
-28 21 56.648036
-28 22 62.649820
-28 23 58.523500
-28 24 64.412732
-28 25 60.406953
-28 26 67.082039
-28 27 5.000000
-28 29 5.830952
-28 30 5.000000
-28 31 8.602325
-28 32 7.000000
-28 33 9.433981
-28 34 14.142136
-28 35 10.000000
-28 36 57.306195
-28 37 58.309519
-28 38 55.758407
-28 39 55.803226
-28 40 57.008771
-28 41 61.032778
-28 42 54.488531
-28 43 60.207973
-28 44 64.031242
-28 45 61.717096
-28 46 88.509886
-28 47 89.185201
-28 48 93.536089
-28 49 60.901560
-28 50 57.775427
-28 51 23.000000
-28 52 42.720019
-28 53 70.178344
-28 54 76.485293
-28 55 47.169906
-28 56 69.641941
-28 57 45.000000
-28 58 65.764732
-28 59 83.815273
-28 60 86.313383
-28 61 83.815273
-28 62 58.309519
-28 63 30.000000
-28 64 33.541020
-28 65 50.249378
-28 66 60.207973
-28 67 54.037024
-28 68 31.780497
-28 69 60.415230
-28 70 66.219333
-28 71 68.963759
-28 72 36.055513
-28 73 43.863424
-28 74 96.301610
-28 75 76.485293
-28 76 94.868330
-28 77 41.880783
-28 78 78.790862
-28 79 89.498603
-28 80 94.921020
-28 81 49.477268
-28 82 51.429563
-28 83 68.468971
-28 84 58.137767
-28 85 38.470768
-28 86 34.176015
-28 87 74.813100
-28 88 83.725743
-28 89 74.632433
-28 90 41.036569
-28 91 59.228372
-28 92 46.529560
-28 93 42.755117
-28 94 38.013156
-28 95 40.162171
-28 96 39.051248
-28 97 44.283180
-28 98 92.574294
-28 99 71.063352
-28 100 69.000000
-28 101 71.554175
-29 1 55.713553
-29 2 86.683332
-29 3 83.216585
-29 4 89.022469
-29 5 87.658428
-29 6 90.603532
-29 7 86.608314
-29 8 89.185201
-29 9 91.809586
-29 10 82.152298
-29 11 82.607506
-29 12 84.593144
-29 13 85.328776
-29 14 87.143560
-29 15 88.283634
-29 16 90.553851
-29 17 92.541882
-29 18 93.214806
-29 19 54.120237
-29 20 53.851648
-29 21 52.201533
-29 22 57.697487
-29 23 54.120237
-29 24 59.506302
-29 25 56.044625
-29 26 62.241465
-29 27 3.000000
-29 28 5.830952
-29 30 5.385165
-29 31 4.000000
-29 32 6.403124
-29 33 5.000000
-29 34 8.602325
-29 35 8.602325
-29 36 60.415230
-29 37 61.269895
-29 38 58.591808
-29 39 58.309519
-29 40 59.363288
-29 41 63.631753
-29 42 56.400355
-29 43 62.201286
-29 44 66.287254
-29 45 63.820060
-29 46 88.814413
-29 47 89.308454
-29 48 91.241438
-29 49 55.901699
-29 50 53.141321
-29 51 20.615528
-29 52 38.327536
-29 53 67.000000
-29 54 74.726167
-29 55 47.634021
-29 56 68.876701
-29 57 42.296572
-29 58 62.201286
-29 59 79.555012
-29 60 82.607506
-29 61 82.637764
-29 62 58.600341
-29 63 27.459060
-29 64 28.792360
-29 65 47.000000
-29 66 57.870545
-29 67 51.478151
-29 68 30.463092
-29 69 60.033324
-29 70 64.845971
-29 71 69.065187
-29 72 36.796739
-29 73 45.453273
-29 74 94.868330
-29 75 72.691127
-29 76 90.520716
-29 77 36.715120
-29 78 74.094534
-29 79 87.931792
-29 80 94.021274
-29 81 48.104054
-29 82 51.312766
-29 83 66.287254
-29 84 55.009090
-29 85 35.014283
-29 86 29.832868
-29 87 71.253070
-29 88 80.224684
-29 89 73.539105
-29 90 35.355339
-29 91 57.567352
-29 92 44.643029
-29 93 41.109610
-29 94 38.013156
-29 95 39.357337
-29 96 36.674242
-29 97 44.102154
-29 98 88.814413
-29 99 69.570109
-29 100 66.189123
-29 101 71.344236
-30 1 52.201533
-30 2 82.006097
-30 3 78.892332
-30 4 84.403791
-30 5 83.216585
-30 6 86.023253
-30 7 82.365041
-30 8 85.000000
-30 9 87.464278
-30 10 80.000000
-30 11 80.156098
-30 12 82.152298
-30 13 82.607506
-30 14 85.000000
-30 15 85.586214
-30 16 88.141931
-30 17 90.138782
-30 18 90.553851
-30 19 54.918121
-30 20 54.120237
-30 21 52.000000
-30 22 58.309519
-30 23 53.851648
-30 24 60.033324
-30 25 55.713553
-30 26 62.649820
-30 27 7.071068
-30 28 5.000000
-30 29 5.385165
-30 31 5.385165
-30 32 2.000000
-30 33 5.830952
-30 34 11.180340
-30 35 5.000000
-30 36 55.036352
-30 37 55.901699
-30 38 53.235327
-30 39 53.000000
-30 40 54.083269
-30 41 58.309519
-30 42 51.224994
-30 43 57.008771
-30 44 61.032778
-30 45 58.600341
-30 46 84.314886
-30 47 84.905830
-30 48 88.566359
-30 49 56.603887
-30 50 53.225934
-30 51 18.000000
-30 52 38.078866
-30 53 65.192024
-30 54 71.589105
-30 55 43.011626
-30 56 65.000000
-30 57 40.000000
-30 58 60.827625
-30 59 79.056942
-30 60 81.394103
-30 61 79.056942
-30 62 54.083269
-30 63 25.000000
-30 64 29.154759
-30 65 45.276926
-30 66 55.226805
-30 67 49.040799
-30 68 26.925824
-30 69 55.901699
-30 70 61.400326
-30 71 64.660653
-30 72 32.015621
-30 73 40.360872
-30 74 91.482239
-30 75 71.589105
-30 76 90.138782
-30 77 37.802116
-30 78 74.249579
-30 79 84.646323
-30 80 90.249654
-30 81 44.643029
-30 82 47.010637
-30 83 63.505905
-30 84 53.150729
-30 85 33.541020
-30 86 29.546573
-30 87 69.871310
-30 88 78.771822
-30 89 69.892775
-30 90 37.802116
-30 91 54.341513
-30 92 41.593269
-30 93 37.854986
-30 94 33.615473
-30 95 35.468296
-30 96 34.058773
-30 97 39.824616
-30 98 87.664132
-30 99 66.219333
-30 100 64.000000
-30 101 67.119297
-31 1 52.000000
-31 2 83.630138
-31 3 79.881162
-31 4 85.912746
-31 5 84.403791
-31 6 87.458562
-31 7 83.216585
-31 8 85.755466
-31 9 88.481637
-31 10 78.160092
-31 11 78.638413
-31 12 80.622577
-31 13 81.394103
-31 14 83.150466
-31 15 84.344532
-31 16 86.579443
-31 17 88.566359
-31 18 89.269256
-31 19 50.606324
-31 20 50.159745
-31 21 48.383882
-31 22 54.120237
-31 23 50.289164
-31 24 55.901699
-31 25 52.201533
-31 26 58.600341
-31 27 7.000000
-31 28 8.602325
-31 29 4.000000
-31 30 5.385165
-31 32 5.000000
-31 33 1.000000
-31 34 5.830952
-31 35 5.830952
-31 36 58.872744
-31 37 59.615434
-31 38 56.859476
-31 39 56.356011
-31 40 57.306195
-31 41 61.717096
-31 42 54.083269
-31 43 59.908263
-31 44 64.140471
-31 45 61.587336
-31 46 85.603738
-31 47 86.023253
-31 48 87.298339
-31 49 52.354560
-31 50 49.396356
-31 51 16.763055
-31 52 34.481879
-31 53 63.000000
-31 54 70.880181
-31 55 44.598206
-31 56 65.299311
-31 57 38.327536
-31 58 58.215118
-31 59 75.690158
-31 60 78.638413
-31 61 78.924014
-31 62 55.443665
-31 63 23.537205
-31 64 25.079872
-31 65 43.000000
-31 66 53.935146
-31 67 47.518417
-31 68 26.832816
-31 69 56.603887
-31 70 61.098281
-31 71 65.802736
-31 72 33.970576
-31 73 43.011626
-31 74 91.082380
-31 75 68.731361
-31 76 86.683332
-31 77 33.286634
-31 78 70.384657
-31 79 84.118963
-31 80 90.376988
-31 81 44.384682
-31 82 48.010416
-31 83 62.369865
-31 84 51.009803
-31 85 31.016125
-31 86 25.961510
-31 87 67.268120
-31 88 76.236474
-31 89 69.856997
-31 90 32.649655
-31 91 53.758720
-31 92 40.804412
-31 93 37.336309
-31 94 34.828150
-31 95 35.846897
-31 96 32.756679
-31 97 40.804412
-31 98 84.852814
-31 99 65.787537
-31 100 62.201286
-31 101 67.955868
-32 1 50.289164
-32 2 80.430094
-32 3 77.175126
-32 4 82.800966
-32 5 81.541401
-32 6 84.403791
-32 7 80.622577
-32 8 83.240615
-32 9 85.755466
-32 10 78.000000
-32 11 78.160092
-32 12 80.156098
-32 13 80.622577
-32 14 83.000000
-32 15 83.600239
-32 16 86.145226
-32 17 88.141931
-32 18 88.566359
-32 19 53.254108
-32 20 52.354560
-32 21 50.159745
-32 22 56.603887
-32 23 52.000000
-32 24 58.309519
-32 25 53.851648
-32 26 60.901560
-32 27 8.602325
-32 28 7.000000
-32 29 6.403124
-32 30 2.000000
-32 31 5.000000
-32 33 5.099020
-32 34 10.440307
-32 35 3.000000
-32 36 54.230987
-32 37 55.036352
-32 38 52.325902
-32 39 51.971146
-32 40 53.000000
-32 41 57.306195
-32 42 50.000000
-32 43 55.803226
-32 44 59.908263
-32 45 57.428216
-32 46 82.661962
-32 47 83.216585
-32 48 86.579443
-32 49 54.918121
-32 50 51.429563
-32 51 16.000000
-32 52 36.249138
-32 53 63.198101
-32 54 69.634761
-32 55 41.400483
-32 56 63.158531
-32 57 38.000000
-32 58 58.855756
-32 59 77.162167
-32 60 79.429214
-32 61 77.162167
-32 62 52.430907
-32 63 23.000000
-32 64 27.459060
-32 65 43.289722
-32 66 53.235327
-32 67 47.042534
-32 68 25.000000
-32 69 54.120237
-32 70 59.481089
-32 71 62.968246
-32 72 30.479501
-32 73 39.051248
-32 74 89.560036
-32 75 69.634761
-32 76 88.255311
-32 77 36.235342
-32 78 72.449983
-32 79 82.710338
-32 80 88.391176
-32 81 42.720019
-32 82 45.276926
-32 83 61.522354
-32 84 51.156622
-32 85 31.575307
-32 86 27.730849
-32 87 67.896981
-32 88 76.791927
-32 89 68.007353
-32 90 36.619667
-32 91 52.392748
-32 92 39.623226
-32 93 35.902646
-32 94 31.906112
-32 95 33.615473
-32 96 32.062439
-32 97 38.078866
-32 98 85.702975
-32 99 64.288413
-32 100 62.000000
-32 101 65.368188
-33 1 51.078371
-33 2 82.879430
-33 3 79.056942
-33 4 85.146932
-33 5 83.600239
-33 6 86.683332
-33 7 82.377181
-33 8 84.905830
-33 9 87.658428
-33 10 77.162167
-33 11 77.646635
-33 12 79.630396
-33 13 80.411442
-33 14 82.152298
-33 15 83.360662
-33 16 85.586214
-33 17 87.572827
-33 18 88.283634
-33 19 49.739320
-33 20 49.244289
-33 21 47.434165
-33 22 53.235327
-33 23 49.335586
-33 24 55.009090
-33 25 51.244512
-33 26 57.697487
-33 27 8.000000
-33 28 9.433981
-33 29 5.000000
-33 30 5.830952
-33 31 1.000000
-33 32 5.099020
-33 34 5.385165
-33 35 5.385165
-33 36 58.523500
-33 37 59.236813
-33 38 56.462377
-33 39 55.901699
-33 40 56.824291
-33 41 61.269895
-33 42 53.535035
-33 43 59.363288
-33 44 63.631753
-33 45 61.057350
-33 46 84.811556
-33 47 85.211502
-33 48 86.313383
-33 49 51.478151
-33 50 48.466483
-33 51 15.811388
-33 52 33.526109
-33 53 62.000000
-33 54 69.921384
-33 55 43.863424
-33 56 64.412732
-33 57 37.336309
-33 58 57.218878
-33 59 74.726167
-33 60 77.646635
-33 61 78.000000
-33 62 54.671748
-33 63 22.561028
-33 64 24.166092
-33 65 42.000000
-33 66 52.952809
-33 67 46.529560
-33 68 25.942244
-33 69 55.758407
-33 70 60.166436
-33 71 65.000000
-33 72 33.301652
-33 73 42.438190
-33 74 90.138782
-33 75 67.742158
-33 76 85.726309
-33 77 32.449961
-33 78 69.462220
-33 79 83.168504
-33 80 89.470666
-33 81 43.462628
-33 82 47.201695
-33 83 61.392182
-33 84 50.009999
-33 85 30.016662
-33 86 25.000000
-33 87 66.272166
-33 88 75.239617
-33 89 68.942005
-33 90 32.015621
-33 91 52.810984
-33 92 39.849718
-33 93 36.400549
-33 94 34.058773
-33 95 34.985711
-33 96 31.780497
-33 97 40.000000
-33 98 83.862983
-33 99 64.845971
-33 100 61.204575
-33 101 67.119297
-34 1 51.478151
-34 2 84.852814
-34 3 80.430094
-34 4 87.000000
-34 5 85.146932
-34 6 88.459030
-34 7 83.600239
-34 8 86.023253
-34 9 89.022469
-34 10 75.663730
-34 11 76.485293
-34 12 78.447435
-34 13 79.555012
-34 14 80.622577
-34 15 82.462113
-34 16 84.344532
-34 17 86.313383
-34 18 87.321246
-34 19 45.617979
-34 20 45.541190
-34 21 44.147480
-34 22 49.244289
-34 23 46.097722
-34 24 51.078371
-34 25 48.052055
-34 26 53.851648
-34 27 11.180340
-34 28 14.142136
-34 29 8.602325
-34 30 11.180340
-34 31 5.830952
-34 32 10.440307
-34 33 5.385165
-34 35 10.000000
-34 36 62.641839
-34 37 63.245553
-34 38 60.406953
-34 39 59.615434
-34 40 60.415230
-34 41 65.000000
-34 42 56.824291
-34 43 62.649820
-34 44 67.082039
-34 45 64.412732
-34 46 86.452299
-34 47 86.683332
-34 48 85.375641
-34 49 47.423623
-34 50 44.922155
-34 51 16.401219
-34 52 30.413813
-34 53 60.207973
-34 54 69.641941
-34 55 46.097722
-34 56 65.192024
-34 57 36.400549
-34 58 55.000000
-34 59 71.589105
-34 60 75.166482
-34 61 78.262379
-34 62 56.568542
-34 63 22.360680
-34 64 20.615528
-34 65 40.311289
-34 66 52.201533
-34 67 45.607017
-34 68 27.018512
-34 69 57.008771
-34 70 60.373835
-34 71 66.603303
-34 72 36.055513
-34 73 45.650849
-34 74 90.077744
-34 75 65.192024
-34 76 82.462113
-34 77 28.178006
-34 78 65.787537
-34 79 83.006024
-34 80 89.944427
-34 81 43.908997
-34 82 48.836462
-34 83 60.728906
-34 84 48.373546
-34 85 28.284271
-34 86 22.090722
-34 87 64.007812
-34 88 73.006849
-34 89 69.354164
-34 90 26.907248
-34 91 52.801515
-34 92 39.812058
-34 93 36.715120
-34 94 36.124784
-34 95 36.235342
-34 96 31.384710
-34 97 41.725292
-34 98 81.301906
-34 99 64.884513
-34 100 59.841457
-34 101 68.410526
-35 1 47.434165
-35 2 78.102497
-35 3 74.625733
-35 4 80.430094
-35 5 79.056942
-35 6 82.006097
-35 7 78.032045
-35 8 80.622577
-35 9 83.216585
-35 10 75.000000
-35 11 75.166482
-35 12 77.162167
-35 13 77.646635
-35 14 80.000000
-35 15 80.622577
-35 16 83.150466
-35 17 85.146932
-35 18 85.586214
-35 19 50.803543
-35 20 49.739320
-35 21 47.423623
-35 22 54.083269
-35 23 49.244289
-35 24 55.758407
-35 25 51.078371
-35 26 58.309519
-35 27 11.180340
-35 28 10.000000
-35 29 8.602325
-35 30 5.000000
-35 31 5.830952
-35 32 3.000000
-35 33 5.385165
-35 34 10.000000
-35 36 53.141321
-35 37 53.851648
-35 38 51.078371
-35 39 50.537115
-35 40 51.478151
-35 41 55.901699
-35 42 48.259714
-35 43 54.083269
-35 44 58.309519
-35 45 55.758407
-35 46 80.212219
-35 47 80.709355
-35 48 83.600239
-35 49 52.430907
-35 50 48.764741
-35 51 13.000000
-35 52 33.541020
-35 53 60.207973
-35 54 66.708320
-35 55 39.051248
-35 56 60.415230
-35 57 35.000000
-35 58 55.901699
-35 59 74.330344
-35 60 76.485293
-35 61 74.330344
-35 62 50.000000
-35 63 20.000000
-35 64 25.000000
-35 65 40.311289
-35 66 50.249378
-35 67 44.045431
-35 68 22.135944
-35 69 51.478151
-35 70 56.612719
-35 71 60.464866
-35 72 28.284271
-35 73 37.202150
-35 74 86.683332
-35 75 66.708320
-35 76 85.440037
-35 77 33.970576
-35 78 69.771054
-35 79 79.812280
-35 80 85.615419
-35 81 39.849718
-35 82 42.720019
-35 83 58.549125
-35 84 48.166378
-35 85 28.635642
-35 86 25.059928
-35 87 64.938432
-35 88 73.824115
-35 89 65.192024
-35 90 34.985711
-35 91 49.477268
-35 92 36.674242
-35 93 32.984845
-35 94 29.410882
-35 95 30.870698
-35 96 29.068884
-35 97 35.510562
-35 98 82.764727
-35 99 61.400326
-35 100 59.000000
-35 101 62.769419
-36 1 44.204072
-36 2 42.000000
-36 3 46.097722
-36 4 45.000000
-36 5 47.265209
-36 6 47.000000
-36 7 50.009999
-36 8 52.952809
-36 9 52.239832
-36 10 75.822160
-36 11 72.622311
-36 12 74.202426
-36 13 71.281134
-36 14 79.649231
-36 15 73.783467
-36 16 79.056942
-36 17 80.709355
-36 18 78.032045
-36 19 83.240615
-36 20 79.056942
-36 21 74.330344
-36 22 84.433406
-36 23 75.026662
-36 24 85.094066
-36 25 75.769387
-36 26 86.162637
-36 27 61.717096
-36 28 57.306195
-36 29 60.415230
-36 30 55.036352
-36 31 58.872744
-36 32 54.230987
-36 33 58.523500
-36 34 62.641839
-36 35 53.141321
-36 37 2.000000
-36 38 3.605551
-36 39 7.071068
-36 40 8.602325
-36 41 7.000000
-36 42 13.453624
-36 43 13.000000
-36 44 12.000000
-36 45 12.369317
-36 46 47.095647
-36 47 49.254441
-36 48 76.321688
-36 49 83.815273
-36 50 77.162167
-36 51 50.249378
-36 52 66.098411
-36 53 69.202601
-36 54 58.600341
-36 55 27.730849
-36 56 44.654227
-36 57 52.810984
-36 58 70.491134
-36 59 91.263355
-36 60 86.452299
-36 61 57.697487
-36 62 29.732137
-36 63 50.039984
-36 64 65.030762
-36 65 59.236813
-36 66 55.217751
-36 67 54.589376
-36 68 43.104524
-36 69 36.796739
-36 70 48.836462
-36 71 35.777088
-36 72 30.066593
-36 73 20.396078
-36 74 69.641941
-36 75 80.212219
-36 76 101.212647
-36 77 73.334848
-36 78 93.059121
-36 79 65.741920
-36 80 63.324561
-36 81 42.941821
-36 82 32.449961
-36 83 58.000000
-36 84 61.773781
-36 85 56.885851
-36 86 62.128898
-36 87 76.400262
-36 88 82.134037
-36 89 50.774009
-36 90 80.000000
-36 91 48.414874
-36 92 46.615448
-36 93 44.271887
-36 94 33.541020
-36 95 38.327536
-36 96 49.244289
-36 97 33.241540
-36 98 91.967386
-36 99 52.630789
-36 100 64.660653
-36 101 40.249224
-37 1 43.011626
-37 2 40.000000
-37 3 44.147480
-37 4 43.000000
-37 5 45.276926
-37 6 45.000000
-37 7 48.052055
-37 8 50.990195
-37 9 50.249378
-37 10 74.330344
-37 11 71.063352
-37 12 72.622311
-37 13 69.634761
-37 14 78.102497
-37 15 72.111026
-37 16 77.420927
-37 17 79.056942
-37 18 76.321688
-37 19 82.710338
-37 20 78.447435
-37 21 73.681748
-37 22 83.815273
-37 23 74.330344
-37 24 84.433406
-37 25 75.026662
-37 26 85.440037
-37 27 62.649820
-37 28 58.309519
-37 29 61.269895
-37 30 55.901699
-37 31 59.615434
-37 32 55.036352
-37 33 59.236813
-37 34 63.245553
-37 35 53.851648
-37 36 2.000000
-37 38 3.000000
-37 39 5.830952
-37 40 7.071068
-37 41 5.000000
-37 42 12.206556
-37 43 11.180340
-37 44 10.000000
-37 45 10.440307
-37 46 45.099889
-37 47 47.265209
-37 48 74.625733
-37 49 83.240615
-37 50 76.537572
-37 51 50.487622
-37 52 65.764732
-37 53 68.007353
-37 54 57.008771
-37 55 26.925824
-37 56 43.011626
-37 57 52.201533
-37 58 69.462220
-37 59 90.138782
-37 60 85.146932
-37 61 55.901699
-37 62 28.284271
-37 63 50.000000
-37 64 65.000000
-37 65 58.523500
-37 66 54.083269
-37 67 53.665631
-37 68 43.011626
-37 69 35.355339
-37 70 47.381431
-37 71 34.000000
-37 72 30.000000
-37 73 20.099751
-37 74 67.779053
-37 75 79.056942
-37 76 100.000000
-37 77 73.171033
-37 78 92.130342
-37 79 63.953108
-37 80 61.400326
-37 81 42.047592
-37 82 31.384710
-37 83 56.639209
-37 84 60.827625
-37 85 56.568542
-37 86 62.032250
-37 87 75.213031
-37 88 80.808415
-37 89 49.091751
-37 90 80.024996
-37 91 47.201695
-37 92 45.880279
-37 93 43.680659
-37 94 33.241540
-37 95 37.854986
-37 96 48.836462
-37 97 32.572995
-37 98 90.609050
-37 99 51.088159
-37 100 63.411355
-37 101 38.470768
-38 1 40.607881
-38 2 40.112342
-38 3 43.566042
-38 4 43.104524
-38 5 45.044423
-38 6 45.099889
-38 7 47.518417
-38 8 50.487622
-38 9 50.039984
-38 10 72.346389
-38 11 69.202601
-38 12 70.802542
-38 13 67.955868
-38 14 76.216796
-38 15 70.491134
-38 16 75.716577
-38 17 77.388630
-38 18 74.793048
-38 19 79.812280
-38 20 75.584390
-38 21 70.837843
-38 22 80.956779
-38 23 71.512237
-38 24 81.596569
-38 25 72.235725
-38 26 82.637764
-38 27 60.033324
-38 28 55.758407
-38 29 58.591808
-38 30 53.235327
-38 31 56.859476
-38 32 52.325902
-38 33 56.462377
-38 34 60.406953
-38 35 51.078371
-38 36 3.605551
-38 37 3.000000
-38 39 3.605551
-38 40 5.385165
-38 41 5.830952
-38 42 9.899495
-38 43 10.198039
-38 44 10.440307
-38 45 10.000000
-38 46 45.000000
-38 47 47.042534
-38 48 73.061618
-38 49 80.361682
-38 50 73.681748
-38 51 47.518417
-38 52 62.801274
-38 53 65.604878
-38 54 55.217751
-38 55 24.166092
-38 56 41.340053
-38 57 49.335586
-38 58 66.887966
-38 59 87.658428
-38 60 82.879430
-38 61 54.626001
-38 62 26.248809
-38 63 47.000000
-38 64 62.000000
-38 65 55.713553
-38 66 51.613952
-38 67 51.000000
-38 68 40.012498
-38 69 33.301652
-38 70 45.343136
-38 71 32.695565
-38 72 27.000000
-38 73 17.117243
-38 74 66.730802
-38 75 76.609399
-38 76 97.616597
-38 77 70.178344
-38 78 89.470666
-38 79 62.649820
-38 80 60.638272
-38 81 39.357337
-38 82 28.844410
-38 83 54.451814
-38 84 58.180753
-38 85 53.600373
-38 86 59.033889
-38 87 72.801099
-38 88 78.568442
-38 89 47.507894
-38 90 77.025970
-38 91 44.821870
-38 92 43.081318
-38 93 40.804412
-38 94 30.265492
-38 95 34.928498
-38 96 45.891176
-38 97 29.732137
-38 98 88.413800
-38 99 49.203658
-38 100 61.073726
-38 101 37.161808
-39 1 37.202150
-39 2 37.336309
-39 3 40.311289
-39 4 40.311289
-39 5 42.000000
-39 6 42.296572
-39 7 44.283180
-39 8 47.265209
-39 9 47.000000
-39 10 68.767725
-39 11 65.604878
-39 12 67.201190
-39 13 64.350602
-39 14 72.622311
-39 15 66.887966
-39 16 72.111026
-39 17 73.783467
-39 18 71.196910
-39 19 77.129761
-39 20 72.801099
-39 21 68.007353
-39 22 78.160092
-39 23 68.622154
-39 24 78.746428
-39 25 69.289249
-39 26 79.711982
-39 27 59.908263
-39 28 55.803226
-39 29 58.309519
-39 30 53.000000
-39 31 56.356011
-39 32 51.971146
-39 33 55.901699
-39 34 59.615434
-39 35 50.537115
-39 36 7.071068
-39 37 5.830952
-39 38 3.605551
-39 40 2.000000
-39 41 5.385165
-39 42 6.403124
-39 43 7.000000
-39 44 8.602325
-39 45 7.280110
-39 46 42.047592
-39 47 44.000000
-39 48 69.462220
-39 49 77.620873
-39 50 70.880181
-39 51 46.097722
-39 52 60.406953
-39 53 62.201286
-39 54 51.613952
-39 55 21.189620
-39 56 37.735925
-39 57 46.572524
-39 58 63.631753
-39 59 84.314886
-39 60 79.397733
-39 61 51.078371
-39 62 22.671568
-39 63 45.099889
-39 64 60.074953
-39 65 52.810984
-39 66 48.259714
-39 67 47.853944
-39 68 38.052595
-39 69 29.732137
-39 70 41.773197
-39 71 29.154759
-39 72 25.179357
-39 73 15.033296
-39 74 63.245553
-39 75 73.239334
-39 76 94.201911
-39 77 68.029405
-39 78 86.313383
-39 79 59.093147
-39 80 57.271284
-39 81 36.249138
-39 82 25.553865
-39 83 50.931326
-39 84 55.009090
-39 85 51.244512
-39 86 57.008771
-39 87 69.404611
-39 88 75.073298
-39 89 43.908997
-39 90 75.166482
-39 91 41.400483
-39 92 40.162171
-39 93 38.078866
-39 94 28.017851
-39 95 32.388269
-39 96 43.416587
-39 97 26.925824
-39 98 84.899941
-39 99 45.607017
-39 100 57.628118
-39 101 33.615473
-40 1 36.055513
-40 2 35.355339
-40 3 38.327536
-40 4 38.327536
-40 5 40.000000
-40 6 40.311289
-40 7 42.296572
-40 8 45.276926
-40 9 45.000000
-40 10 67.268120
-40 11 64.031242
-40 12 65.604878
-40 13 62.681736
-40 14 71.063352
-40 15 65.192024
-40 16 70.455660
-40 17 72.111026
-40 18 69.462220
-40 19 76.687678
-40 20 72.277244
-40 21 67.446275
-40 22 77.620873
-40 23 68.007353
-40 24 78.160092
-40 25 68.622154
-40 26 79.056942
-40 27 61.032778
-40 28 57.008771
-40 29 59.363288
-40 30 54.083269
-40 31 57.306195
-40 32 53.000000
-40 33 56.824291
-40 34 60.415230
-40 35 51.478151
-40 36 8.602325
-40 37 7.071068
-40 38 5.385165
-40 39 2.000000
-40 41 5.000000
-40 42 5.385165
-40 43 5.000000
-40 44 7.071068
-40 45 5.385165
-40 46 40.049969
-40 47 42.000000
-40 48 67.742158
-40 49 77.129761
-40 50 70.342022
-40 51 46.572524
-40 52 60.207973
-40 53 61.032778
-40 54 50.000000
-40 55 20.615528
-40 56 36.055513
-40 57 46.097722
-40 58 62.649820
-40 59 83.216585
-40 60 78.102497
-40 61 49.244289
-40 62 21.213203
-40 63 45.276926
-40 64 60.207973
-40 65 52.201533
-40 66 47.169906
-40 67 47.010637
-40 68 38.209946
-40 69 28.284271
-40 70 40.311289
-40 71 27.313001
-40 72 25.495098
-40 73 15.297059
-40 74 61.351447
-40 75 72.111026
-40 76 93.005376
-40 77 68.000000
-40 78 85.428333
-40 79 57.271284
-40 80 55.317267
-40 81 35.468296
-40 82 24.596748
-40 83 49.578221
-40 84 54.129474
-40 85 51.088159
-40 86 57.078893
-40 87 68.242216
-40 88 73.756356
-40 89 42.190046
-40 90 75.325958
-40 91 40.224371
-40 92 39.560081
-40 93 37.656341
-40 94 28.017851
-40 95 32.140317
-40 96 43.185646
-40 97 26.476405
-40 98 83.546394
-40 99 44.045431
-40 100 56.400355
-40 101 31.780497
-41 1 40.311289
-41 2 35.000000
-41 3 39.293765
-41 4 38.000000
-41 5 40.311289
-41 6 40.000000
-41 7 43.174066
-41 8 46.097722
-41 9 45.276926
-41 10 70.710678
-41 11 67.268120
-41 12 68.767725
-41 13 65.604878
-41 14 74.330344
-41 15 68.007353
-41 16 73.409809
-41 17 75.000000
-41 18 72.111026
-41 19 81.584312
-41 20 77.129761
-41 21 72.277244
-41 22 82.462113
-41 23 72.801099
-41 24 82.969874
-41 25 73.375745
-41 26 83.815273
-41 27 65.192024
-41 28 61.032778
-41 29 63.631753
-41 30 58.309519
-41 31 61.717096
-41 32 57.306195
-41 33 61.269895
-41 34 65.000000
-41 35 55.901699
-41 36 7.000000
-41 37 5.000000
-41 38 5.830952
-41 39 5.385165
-41 40 5.000000
-41 42 10.198039
-41 43 7.071068
-41 44 5.000000
-41 45 5.830952
-41 46 40.112342
-41 47 42.296572
-41 48 70.455660
-41 49 82.000000
-41 50 75.186435
-41 51 51.419841
-41 52 65.192024
-41 53 65.192024
-41 54 53.150729
-41 55 25.495098
-41 56 39.051248
-41 57 50.990195
-41 58 67.082039
-41 59 87.464278
-41 60 82.006097
-41 61 51.478151
-41 62 25.000000
-41 63 50.249378
-41 64 65.192024
-41 65 57.008771
-41 66 51.478151
-41 67 51.623638
-41 68 43.185646
-41 69 32.015621
-41 70 43.931765
-41 71 29.681644
-41 72 30.413813
-41 73 20.223748
-41 74 63.158531
-41 75 76.321688
-41 76 97.082439
-41 77 73.000000
-41 78 89.961103
-41 79 59.539903
-41 80 56.612719
-41 81 40.162171
-41 82 29.154759
-41 83 53.413481
-41 84 58.694122
-41 85 56.080300
-41 86 62.072538
-41 87 72.401657
-41 88 77.620873
-41 89 45.000000
-41 90 80.305666
-41 91 44.418465
-41 92 44.384682
-41 93 42.579338
-41 94 33.015148
-41 95 37.121422
-41 96 48.166378
-41 97 31.400637
-41 98 87.321246
-41 99 47.381431
-41 100 60.464866
-41 101 34.132096
-42 1 30.805844
-42 2 34.481879
-42 3 36.000000
-42 4 37.363083
-42 5 38.327536
-42 6 39.293765
-42 7 40.000000
-42 8 43.000000
-42 9 43.289722
-42 10 62.481997
-42 11 59.405387
-42 12 61.032778
-42 13 58.309519
-42 14 66.400301
-42 15 60.901560
-42 16 66.037868
-42 17 67.742158
-42 18 65.299311
-42 19 71.386273
-42 20 66.940272
-42 21 62.096699
-42 22 72.277244
-42 23 62.641839
-42 24 72.801099
-42 25 63.245553
-42 26 73.681748
-42 27 58.258047
-42 28 54.488531
-42 29 56.400355
-42 30 51.224994
-42 31 54.083269
-42 32 50.000000
-42 33 53.535035
-42 34 56.824291
-42 35 48.259714
-42 36 13.453624
-42 37 12.206556
-42 38 9.899495
-42 39 6.403124
-42 40 5.385165
-42 41 10.198039
-42 43 5.830952
-42 44 10.440307
-42 45 7.615773
-42 46 38.639358
-42 47 40.311289
-42 48 63.529521
-42 49 71.805292
-42 50 65.000000
-42 51 42.379240
-42 52 55.081757
-42 53 55.803226
-42 54 45.486262
-42 55 15.297059
-42 56 31.764760
-42 57 40.792156
-42 58 57.306195
-42 59 77.935871
-42 60 73.000000
-42 61 45.541190
-42 62 16.401219
-42 63 40.607881
-42 64 55.443665
-42 65 46.840154
-42 66 41.880783
-42 67 41.629317
-42 68 33.541020
-42 69 23.430749
-42 70 35.468296
-42 71 23.769729
-42 72 21.189620
-42 73 11.180340
-42 74 57.974132
-42 75 66.850580
-42 76 87.800911
-42 77 63.031738
-42 78 80.056230
-42 79 53.488316
-42 80 52.469038
-42 81 30.083218
-42 82 19.235384
-42 83 44.553339
-42 84 48.754487
-42 85 46.010868
-42 86 52.239832
-42 87 63.007936
-42 88 68.680419
-42 89 38.013156
-42 90 70.576200
-42 91 35.000000
-42 92 34.205263
-42 93 32.388269
-42 94 23.194827
-42 95 27.018512
-42 96 38.052595
-42 97 21.213203
-42 98 78.517514
-42 99 39.408121
-42 100 51.224994
-42 101 28.160256
-43 1 33.541020
-43 2 30.413813
-43 3 33.376639
-43 4 33.376639
-43 5 35.000000
-43 6 35.355339
-43 7 37.336309
-43 8 40.311289
-43 9 40.000000
-43 10 63.639610
-43 11 60.207973
-43 12 61.717096
-43 13 58.600341
-43 14 67.268120
-43 15 61.032778
-43 16 66.400301
-43 17 68.007353
-43 18 65.192024
-43 19 75.802375
-43 20 71.196910
-43 21 66.287254
-43 22 76.485293
-43 23 66.708320
-43 24 76.902536
-43 25 67.186308
-43 26 77.620873
-43 27 64.031242
-43 28 60.207973
-43 29 62.201286
-43 30 57.008771
-43 31 59.908263
-43 32 55.803226
-43 33 59.363288
-43 34 62.649820
-43 35 54.083269
-43 36 13.000000
-43 37 11.180340
-43 38 10.198039
-43 39 7.000000
-43 40 5.000000
-43 41 7.071068
-43 42 5.830952
-43 44 5.000000
-43 45 2.000000
-43 46 35.057096
-43 47 37.000000
-43 48 63.513778
-43 49 76.118329
-43 50 69.231496
-43 51 48.104054
-43 52 60.000000
-43 53 58.309519
-43 54 46.097722
-43 55 20.000000
-43 56 32.015621
-43 57 45.276926
-43 58 60.415230
-43 59 80.622577
-43 60 75.000000
-43 61 44.721360
-43 62 18.027756
-43 63 46.097722
-43 64 60.827625
-43 65 50.990195
-43 66 44.721360
-43 67 45.221676
-43 68 39.051248
-43 69 25.000000
-43 70 36.878178
-43 71 22.825424
-43 72 26.925824
-43 73 17.000000
-43 74 56.648036
-43 75 69.462220
-43 76 90.138782
-43 77 68.183576
-43 78 83.384651
-43 79 52.773099
-43 80 50.447993
-43 81 33.955854
-43 82 22.803509
-43 83 46.400431
-43 84 52.201533
-43 85 51.039201
-43 86 57.558666
-43 87 65.513357
-43 88 70.604532
-43 89 38.013156
-43 90 75.953933
-43 91 37.589892
-43 92 38.470768
-43 93 37.054015
-43 94 28.635642
-43 95 32.062439
-43 96 43.011626
-43 97 26.000000
-43 98 80.280757
-43 99 40.311289
-43 100 53.535035
-43 101 27.294688
-44 1 38.078866
-44 2 30.000000
-44 3 34.481879
-44 4 33.000000
-44 5 35.355339
-44 6 35.000000
-44 7 38.327536
-44 8 41.231056
-44 9 40.311289
-44 10 67.268120
-44 11 63.639610
-44 12 65.069194
-44 13 61.717096
-44 14 70.710678
-44 15 64.031242
-44 16 69.526973
-44 17 71.063352
-44 18 68.007353
-44 19 80.752709
-44 20 76.118329
-44 21 71.196910
-44 22 81.394103
-44 23 71.589105
-44 24 81.786307
-44 25 72.034714
-44 26 82.462113
-44 27 68.007353
-44 28 64.031242
-44 29 66.287254
-44 30 61.032778
-44 31 64.140471
-44 32 59.908263
-44 33 63.631753
-44 34 67.082039
-44 35 58.309519
-44 36 12.000000
-44 37 10.000000
-44 38 10.440307
-44 39 8.602325
-44 40 7.071068
-44 41 5.000000
-44 42 10.440307
-44 43 5.000000
-44 45 3.000000
-44 46 35.128336
-44 47 37.336309
-44 48 66.400301
-44 49 81.049368
-44 50 74.148500
-44 51 52.810984
-44 52 65.000000
-44 53 62.649820
-44 54 49.497475
-44 55 25.000000
-44 56 35.355339
-44 57 50.249378
-44 58 65.000000
-44 59 85.000000
-44 60 79.056942
-44 61 47.169906
-44 62 22.360680
-44 63 50.990195
-44 64 65.764732
-44 65 55.901699
-44 66 49.244289
-44 67 50.000000
-44 68 43.931765
-44 69 29.154759
-44 70 40.804412
-44 71 25.612497
-44 72 31.622777
-44 73 21.540659
-44 74 58.600341
-44 75 73.824115
-44 76 94.339811
-44 77 73.171033
-44 78 88.022724
-44 79 55.226805
-44 80 51.865210
-44 81 38.832976
-44 82 27.658633
-44 83 50.477718
-44 84 56.920998
-44 85 56.035703
-44 86 62.513998
-44 87 69.835521
-44 88 74.632433
-44 89 41.109610
-44 90 80.894994
-44 91 42.047592
-44 92 43.416587
-44 93 42.047592
-44 94 33.541020
-44 95 37.054015
-44 96 48.010416
-44 97 31.000000
-44 98 84.202138
-44 99 43.931765
-44 100 57.801384
-44 101 30.000000
-45 1 35.341194
-45 2 30.149627
-45 3 33.734256
-45 4 33.136083
-45 5 35.057096
-45 6 35.128336
-45 7 37.656341
-45 8 40.607881
-45 9 40.049969
-45 10 65.069194
-45 11 61.554854
-45 12 63.031738
-45 13 59.816386
-45 14 68.622154
-45 15 62.201286
-45 16 67.623960
-45 17 69.202601
-45 18 66.287254
-45 19 77.781746
-45 20 73.164199
-45 21 68.249542
-45 22 78.447435
-45 23 68.658576
-45 24 78.854296
-45 25 69.123079
-45 26 79.555012
-45 27 65.604878
-45 28 61.717096
-45 29 63.820060
-45 30 58.600341
-45 31 61.587336
-45 32 57.428216
-45 33 61.057350
-45 34 64.412732
-45 35 55.758407
-45 36 12.369317
-45 37 10.440307
-45 38 10.000000
-45 39 7.280110
-45 40 5.385165
-45 41 5.830952
-45 42 7.615773
-45 43 2.000000
-45 44 3.000000
-45 46 35.000000
-45 47 37.054015
-45 48 64.637450
-45 49 78.089692
-45 50 71.196910
-45 51 49.979996
-45 52 62.000000
-45 53 60.033324
-45 54 47.423623
-45 55 22.000000
-45 56 33.301652
-45 57 47.265209
-45 58 62.241465
-45 59 82.365041
-45 60 76.609399
-45 61 45.650849
-45 62 19.723083
-45 63 48.052055
-45 64 62.801274
-45 65 52.952809
-45 66 46.518813
-45 67 47.127487
-45 68 41.000000
-45 69 26.627054
-45 70 38.418745
-45 71 23.853721
-45 72 28.792360
-45 73 18.788294
-45 74 57.384667
-45 75 71.196910
-45 76 91.809586
-45 77 70.178344
-45 78 85.234969
-45 79 53.712196
-45 80 50.960769
-45 81 35.902646
-45 82 24.738634
-45 83 48.010416
-45 84 54.083269
-45 85 53.037722
-45 86 59.539903
-45 87 67.230945
-45 88 72.201108
-45 89 39.204592
-45 90 77.929455
-45 91 39.357337
-45 92 40.447497
-45 93 39.051248
-45 94 30.594117
-45 95 34.058773
-45 96 45.011110
-45 97 28.000000
-45 98 81.835200
-45 99 41.725292
-45 100 55.226805
-45 101 28.301943
-46 1 37.735925
-46 2 5.830952
-46 3 7.280110
-46 4 3.605551
-46 5 2.000000
-46 6 3.000000
-46 7 7.280110
-46 8 8.602325
-46 9 5.385165
-46 10 48.052055
-46 11 43.174066
-46 12 43.680659
-46 13 38.897301
-46 14 49.335586
-46 15 39.924930
-46 16 45.694639
-46 17 46.518813
-46 18 42.059482
-46 19 80.653580
-46 20 75.286121
-46 21 70.519501
-46 22 79.555012
-46 23 69.921384
-46 24 79.075913
-46 25 69.375788
-46 26 78.447435
-46 27 91.263355
-46 28 88.509886
-46 29 88.814413
-46 30 84.314886
-46 31 85.603738
-46 32 82.661962
-46 33 84.811556
-46 34 86.452299
-46 35 80.212219
-46 36 47.095647
-46 37 45.099889
-46 38 45.000000
-46 39 42.047592
-46 40 40.049969
-46 41 40.112342
-46 42 38.639358
-46 43 35.057096
-46 44 35.128336
-46 45 35.000000
-46 47 2.828427
-46 48 41.146081
-46 49 80.081209
-46 50 73.375745
-46 51 70.092796
-46 52 71.196910
-46 53 52.239832
-46 54 32.000000
-46 55 41.340053
-46 56 24.166092
-46 57 55.758407
-46 58 57.870545
-46 59 72.173402
-46 60 62.801274
-46 61 22.561028
-46 62 30.232433
-46 63 65.069194
-46 64 76.609399
-46 65 57.697487
-46 66 44.598206
-46 67 49.658836
-46 68 59.464275
-46 69 29.732137
-46 70 31.953091
-46 71 19.849433
-46 72 52.478567
-46 73 46.238512
-46 74 28.425341
-46 75 62.000000
-46 76 78.447435
-46 77 80.622577
-46 78 79.056942
-46 79 28.635642
-46 80 19.798990
-46 81 44.204072
-46 82 37.643060
-46 83 39.623226
-46 84 53.758720
-46 85 64.637450
-46 86 73.006849
-46 87 58.008620
-46 88 58.549125
-46 89 24.331050
-46 90 90.210864
-46 91 38.910153
-46 92 49.406477
-46 93 51.088159
-46 94 50.803543
-46 95 50.249378
-46 96 57.628118
-46 97 44.821870
-46 98 65.969690
-46 99 30.594117
-46 100 47.381431
-46 101 18.601075
-47 1 37.202150
-47 2 8.602325
-47 3 6.403124
-47 4 6.403124
-47 5 2.000000
-47 6 5.385165
-47 7 5.000000
-47 8 5.830952
-47 9 3.000000
-47 10 45.705580
-47 11 40.792156
-47 12 41.231056
-47 13 36.400549
-47 14 46.840154
-47 15 37.336309
-47 16 43.081318
-47 17 43.863424
-47 18 39.357337
-47 19 79.378838
-47 20 74.000000
-47 21 69.289249
-47 22 78.160092
-47 23 68.622154
-47 24 77.620873
-47 25 68.007353
-47 26 76.902536
-47 27 91.809586
-47 28 89.185201
-47 29 89.308454
-47 30 84.905830
-47 31 86.023253
-47 32 83.216585
-47 33 85.211502
-47 34 86.683332
-47 35 80.709355
-47 36 49.254441
-47 37 47.265209
-47 38 47.042534
-47 39 44.000000
-47 40 42.000000
-47 41 42.296572
-47 42 40.311289
-47 43 37.000000
-47 44 37.336309
-47 45 37.054015
-47 46 2.828427
-47 48 38.483763
-47 49 78.746428
-47 50 72.111026
-47 51 70.292247
-47 52 70.491134
-47 53 50.487622
-47 54 30.066593
-47 55 42.059482
-47 56 23.323808
-47 57 55.217751
-47 58 56.293872
-47 59 70.064256
-47 60 60.530984
-47 61 20.223748
-47 62 30.886890
-47 63 65.069194
-47 64 76.216796
-47 65 56.824291
-47 66 43.462628
-47 67 48.764741
-47 68 59.665736
-47 69 29.732137
-47 70 30.870698
-47 71 20.248457
-47 72 53.235327
-47 73 47.434165
-47 74 25.612497
-47 75 60.033324
-47 76 76.118329
-47 77 79.924965
-47 78 77.162167
-47 79 26.000000
-47 80 16.970563
-47 81 43.931765
-47 82 38.013156
-47 83 38.078866
-47 84 52.554733
-47 85 64.202804
-47 86 72.622311
-47 87 56.080300
-47 88 56.320511
-47 89 22.803509
-47 90 89.587946
-47 91 38.078866
-47 92 49.040799
-47 93 50.931326
-47 94 51.312766
-47 95 50.447993
-47 96 57.384667
-47 97 45.221676
-47 98 63.560994
-47 99 29.120440
-47 100 45.705580
-47 101 18.384776
-48 1 38.327536
-48 2 46.141088
-48 3 36.055513
-48 4 44.721360
-48 5 39.357337
-48 6 43.863424
-48 7 34.000000
-48 8 32.695565
-48 9 37.336309
-48 10 12.806248
-48 11 9.433981
-48 12 7.810250
-48 13 6.000000
-48 14 10.440307
-48 15 3.000000
-48 16 5.000000
-48 17 5.385165
-48 18 2.000000
-48 19 58.000000
-48 20 53.150729
-48 21 50.000000
-48 22 55.172457
-48 23 48.414874
-48 24 53.814496
-48 25 46.861498
-48 26 51.855569
-48 27 94.201911
-48 28 93.536089
-48 29 91.241438
-48 30 88.566359
-48 31 87.298339
-48 32 86.579443
-48 33 86.313383
-48 34 85.375641
-48 35 83.600239
-48 36 76.321688
-48 37 74.625733
-48 38 73.061618
-48 39 69.462220
-48 40 67.742158
-48 41 70.455660
-48 42 63.529521
-48 43 63.513778
-48 44 66.400301
-48 45 64.637450
-48 46 41.146081
-48 47 38.483763
-48 49 56.568542
-48 50 51.855569
-48 51 70.710678
-48 52 58.600341
-48 53 27.459060
-48 54 18.681542
-48 55 55.081757
-48 56 31.764760
-48 57 49.030603
-48 58 34.409301
-48 59 37.336309
-48 60 26.248809
-48 61 19.849433
-48 62 47.423623
-48 63 63.788714
-48 64 67.779053
-48 65 45.541190
-48 66 33.376639
-48 67 39.812058
-48 68 62.072538
-48 69 40.853396
-48 70 29.832868
-48 71 40.804412
-48 72 63.788714
-48 73 64.195015
-48 74 15.000000
-48 75 30.805844
-48 76 40.112342
-48 77 66.730802
-48 78 46.957428
-48 79 12.529964
-48 80 23.345235
-48 81 45.044423
-48 82 48.764741
-48 83 25.079872
-48 84 37.696154
-48 85 57.280014
-48 86 64.845971
-48 87 28.319605
-48 88 23.259407
-48 89 25.553865
-48 90 76.321688
-48 91 35.057096
-48 92 47.095647
-48 93 51.039201
-48 94 59.413803
-48 95 55.081757
-48 96 54.589376
-48 97 53.758720
-48 98 27.073973
-48 99 25.000000
-48 100 26.000000
-48 101 36.400549
-49 1 45.044423
-49 2 81.786307
-49 3 72.801099
-49 4 82.462113
-49 5 78.160092
-49 6 82.969874
-49 7 74.000000
-49 8 75.026662
-49 9 79.711982
-49 10 43.863424
-49 11 47.423623
-49 12 48.795492
-49 13 52.497619
-49 14 47.634021
-49 15 54.488531
-49 16 53.150729
-49 17 54.671748
-49 18 58.000000
-49 19 2.000000
-49 20 5.000000
-49 21 10.000000
-49 22 2.000000
-49 23 10.198039
-49 24 4.000000
-49 25 10.770330
-49 26 7.000000
-49 27 58.600341
-49 28 60.901560
-49 29 55.901699
-49 30 56.603887
-49 31 52.354560
-49 32 54.918121
-49 33 51.478151
-49 34 47.423623
-49 35 52.430907
-49 36 83.815273
-49 37 83.240615
-49 38 80.361682
-49 39 77.620873
-49 40 77.129761
-49 41 82.000000
-49 42 71.805292
-49 43 76.118329
-49 44 81.049368
-49 45 78.089692
-49 46 80.081209
-49 47 78.746428
-49 48 56.568542
-49 50 7.000000
-49 51 42.426407
-49 52 19.849433
-49 53 30.232433
-49 54 50.089919
-49 55 56.515485
-49 56 56.293872
-49 57 31.048349
-49 58 23.323808
-49 59 27.459060
-49 60 35.341194
-49 61 61.269895
-49 62 60.074953
-49 63 37.802116
-49 64 27.459060
-49 65 25.179357
-49 66 35.693137
-49 67 32.015621
-49 68 43.046487
-49 69 55.036352
-49 70 48.270074
-49 71 64.381674
-49 72 55.036352
-49 73 63.568860
-49 74 68.007353
-49 75 26.627054
-49 76 37.000000
-49 77 19.313208
-49 78 19.104973
-49 79 61.294372
-49 80 72.560320
-49 81 42.296572
-49 82 53.460266
-49 83 40.853396
-49 84 26.476405
-49 85 28.301943
-49 86 27.658633
-49 87 28.319605
-49 88 35.510562
-49 89 55.973208
-49 90 25.000000
-49 91 42.296572
-49 92 37.656341
-49 93 39.560081
-49 94 50.695167
-49 95 45.541190
-49 96 34.928498
-49 97 50.695167
-49 98 40.162171
-49 99 49.648766
-49 100 34.000000
-49 101 62.968246
-50 1 38.052595
-50 2 74.953319
-50 3 66.098411
-50 4 75.690158
-50 5 71.470274
-50 6 76.243032
-50 7 67.416615
-50 8 68.541958
-50 9 73.164199
-50 10 39.408121
-50 11 42.520583
-50 12 44.045431
-50 13 47.381431
-50 14 43.566042
-50 15 49.578221
-50 16 48.826222
-50 17 50.477718
-50 18 53.413481
-50 19 7.280110
-50 20 2.000000
-50 21 3.000000
-50 22 7.280110
-50 23 3.605551
-50 24 8.062258
-50 25 5.000000
-50 26 9.899495
-50 27 55.973208
-50 28 57.775427
-50 29 53.141321
-50 30 53.225934
-50 31 49.396356
-50 32 51.429563
-50 33 48.466483
-50 34 44.922155
-50 35 48.764741
-50 36 77.162167
-50 37 76.537572
-50 38 73.681748
-50 39 70.880181
-50 40 70.342022
-50 41 75.186435
-50 42 65.000000
-50 43 69.231496
-50 44 74.148500
-50 45 71.196910
-50 46 73.375745
-50 47 72.111026
-50 48 51.855569
-50 49 7.000000
-50 51 37.802116
-50 52 15.264338
-50 53 24.758837
-50 54 43.908997
-50 55 49.729267
-50 56 49.477268
-50 57 24.351591
-50 58 17.691806
-50 59 27.073973
-50 60 32.984845
-50 61 55.072679
-50 62 53.084838
-50 63 32.526912
-50 64 24.351591
-50 65 18.248288
-50 66 28.861739
-50 67 25.019992
-50 68 37.202150
-50 69 48.041649
-50 70 41.484937
-50 71 57.428216
-50 72 48.764741
-50 73 57.008771
-50 74 62.481997
-50 75 23.409400
-50 76 37.656341
-50 77 18.000000
-50 78 21.023796
-50 79 55.605755
-50 80 66.573268
-50 81 35.355339
-50 82 46.529560
-50 83 34.438351
-50 84 19.646883
-50 85 22.671568
-50 86 23.706539
-50 87 24.186773
-50 88 32.310989
-50 89 49.396356
-50 90 25.961510
-50 91 35.355339
-50 92 30.805844
-50 93 32.893768
-50 94 44.283180
-50 95 39.000000
-50 96 28.653098
-50 97 43.965896
-50 98 38.470768
-50 99 43.081318
-50 100 28.017851
-50 101 56.089215
-51 1 35.341194
-51 2 68.622154
-51 3 64.031242
-51 4 70.710678
-51 5 68.767725
-51 6 72.138755
-51 7 67.201190
-51 8 69.634761
-51 9 72.622311
-51 10 62.000000
-51 11 62.201286
-51 12 64.195015
-51 13 64.776539
-51 14 67.000000
-51 15 67.742158
-51 16 70.178344
-51 17 72.173402
-51 18 72.691127
-51 19 41.036569
-51 20 39.051248
-51 21 36.055513
-51 22 43.863424
-51 23 37.735925
-51 24 45.343136
-51 25 39.446166
-51 26 47.634021
-51 27 23.537205
-51 28 23.000000
-51 29 20.615528
-51 30 18.000000
-51 31 16.763055
-51 32 16.000000
-51 33 15.811388
-51 34 16.401219
-51 35 13.000000
-51 36 50.249378
-51 37 50.487622
-51 38 47.518417
-51 39 46.097722
-51 40 46.572524
-51 41 51.419841
-51 42 42.379240
-51 43 48.104054
-51 44 52.810984
-51 45 49.979996
-51 46 70.092796
-51 47 70.292247
-51 48 70.710678
-51 49 42.426407
-51 50 37.802116
-51 52 22.671568
-51 53 47.265209
-51 54 54.120237
-51 55 30.232433
-51 56 48.877398
-51 57 22.000000
-51 58 43.174066
-51 59 62.241465
-51 60 63.788714
-51 61 62.241465
-51 62 40.360872
-51 63 7.000000
-51 64 16.552945
-51 65 27.459060
-51 66 37.336309
-51 67 31.064449
-51 68 10.630146
-51 69 40.607881
-51 70 44.384682
-51 71 50.249378
-51 72 21.189620
-51 73 31.320920
-51 74 74.330344
-51 75 54.120237
-51 76 73.409809
-51 77 25.942244
-51 78 58.523500
-51 79 67.357256
-51 80 73.790243
-51 81 27.730849
-51 82 32.526912
-51 83 45.705580
-51 84 35.227830
-51 85 16.155494
-51 86 15.000000
-51 87 52.172790
-51 88 61.000000
-51 89 53.225934
-51 90 30.413813
-51 91 37.000000
-51 92 24.041631
-51 93 20.615528
-51 94 20.248457
-51 95 19.849433
-51 96 16.124515
-51 97 25.495098
-51 98 70.092796
-51 99 49.040799
-51 100 46.000000
-51 101 52.009614
-52 1 33.541020
-52 2 71.589105
-52 3 64.140471
-52 4 72.897188
-52 5 69.462220
-52 6 73.824115
-52 7 66.287254
-52 8 68.007353
-52 9 72.111026
-52 10 47.434165
-52 11 49.244289
-52 12 51.078371
-52 13 53.235327
-52 14 52.201533
-52 15 55.901699
-52 16 56.648036
-52 17 58.523500
-52 18 60.415230
-52 19 18.601075
-52 20 16.401219
-52 21 13.928388
-52 22 21.213203
-52 23 15.811388
-52 24 22.671568
-52 25 17.720045
-52 26 25.000000
-52 27 41.231056
-52 28 42.720019
-52 29 38.327536
-52 30 38.078866
-52 31 34.481879
-52 32 36.249138
-52 33 33.526109
-52 34 30.413813
-52 35 33.541020
-52 36 66.098411
-52 37 65.764732
-52 38 62.801274
-52 39 60.406953
-52 40 60.207973
-52 41 65.192024
-52 42 55.081757
-52 43 60.000000
-52 44 65.000000
-52 45 62.000000
-52 46 71.196910
-52 47 70.491134
-52 48 58.600341
-52 49 19.849433
-52 50 15.264338
-52 51 22.671568
-52 53 31.622777
-52 54 46.097722
-52 55 40.000000
-52 56 47.169906
-52 57 15.811388
-52 58 25.495098
-52 59 41.231056
-52 60 45.000000
-52 61 56.568542
-52 62 46.097722
-52 63 18.027756
-52 64 10.000000
-52 65 14.142136
-52 66 28.284271
-52 67 22.022716
-52 68 23.769729
-52 69 42.720019
-52 70 40.000000
-52 71 52.924474
-52 72 36.400549
-52 73 45.705580
-52 74 66.400301
-52 75 35.000000
-52 76 52.201533
-52 77 9.433981
-52 78 36.235342
-52 79 59.203040
-52 80 68.593003
-52 81 28.160256
-52 82 38.470768
-52 83 36.235342
-52 84 21.095023
-52 85 9.219544
-52 86 8.544004
-52 87 34.234486
-52 88 43.185646
-52 89 49.040799
-52 90 19.209373
-52 91 32.449961
-52 92 22.803509
-52 93 23.086793
-52 94 32.557641
-52 95 28.071338
-52 96 17.029386
-52 97 34.000000
-52 98 51.039201
-52 99 43.185646
-52 100 32.649655
-52 101 52.773099
-53 1 25.000000
-53 2 55.000000
-53 3 45.099889
-53 4 55.081757
-53 5 50.249378
-53 6 55.226805
-53 7 45.541190
-53 8 46.097722
-53 9 50.990195
-53 10 15.811388
-53 11 18.027756
-53 12 19.723083
-53 13 22.671568
-53 14 20.615528
-53 15 25.000000
-53 16 25.079872
-53 17 26.925824
-53 18 29.154759
-53 19 31.400637
-53 20 26.248809
-53 21 22.671568
-53 22 29.154759
-53 23 21.213203
-53 24 28.178006
-53 25 19.849433
-53 26 26.925824
-53 27 70.000000
-53 28 70.178344
-53 29 67.000000
-53 30 65.192024
-53 31 63.000000
-53 32 63.198101
-53 33 62.000000
-53 34 60.207973
-53 35 60.207973
-53 36 69.202601
-53 37 68.007353
-53 38 65.604878
-53 39 62.201286
-53 40 61.032778
-53 41 65.192024
-53 42 55.803226
-53 43 58.309519
-53 44 62.649820
-53 45 60.033324
-53 46 52.239832
-53 47 50.487622
-53 48 27.459060
-53 49 30.232433
-53 50 24.758837
-53 51 47.265209
-53 52 31.622777
-53 54 20.615528
-53 55 42.426407
-53 56 30.413813
-53 57 25.495098
-53 58 7.071068
-53 59 22.360680
-53 60 18.027756
-53 61 31.622777
-53 62 40.311289
-53 63 40.311289
-53 64 41.231056
-53 65 20.000000
-53 66 14.142136
-53 67 17.464249
-53 68 40.804412
-53 69 33.541020
-53 70 22.803509
-53 71 40.261644
-53 72 47.169906
-53 73 51.662365
-53 74 37.802116
-53 75 11.180340
-53 76 32.015621
-53 77 39.357337
-53 78 27.073973
-53 79 31.064449
-53 80 42.485292
-53 81 27.802878
-53 82 36.878178
-53 83 13.152946
-53 84 12.041595
-53 85 32.015621
-53 86 38.639358
-53 87 7.211103
-53 88 14.317821
-53 89 28.017851
-53 90 48.877398
-53 91 20.808652
-53 92 26.832816
-53 93 30.870698
-53 94 42.190046
-53 95 36.715120
-53 96 31.780497
-53 97 38.418745
-53 98 24.186773
-53 99 22.022716
-53 100 5.099020
-53 101 37.483330
-54 1 20.000000
-54 2 35.355339
-54 3 25.079872
-54 4 35.057096
-54 5 30.000000
-54 6 35.000000
-54 7 25.079872
-54 8 25.495098
-54 9 30.413813
-54 10 18.027756
-54 11 14.142136
-54 12 15.620499
-54 13 13.000000
-54 14 21.213203
-54 15 15.811388
-54 16 20.591260
-54 17 22.360680
-54 18 20.615528
-54 19 51.000000
-54 20 45.650849
-54 21 41.340053
-54 22 49.244289
-54 23 40.311289
-54 24 48.466483
-54 25 39.357337
-54 26 47.434165
-54 27 77.620873
-54 28 76.485293
-54 29 74.726167
-54 30 71.589105
-54 31 70.880181
-54 32 69.634761
-54 33 69.921384
-54 34 69.641941
-54 35 66.708320
-54 36 58.600341
-54 37 57.008771
-54 38 55.217751
-54 39 51.613952
-54 40 50.000000
-54 41 53.150729
-54 42 45.486262
-54 43 46.097722
-54 44 49.497475
-54 45 47.423623
-54 46 32.000000
-54 47 30.066593
-54 48 18.681542
-54 49 50.089919
-54 50 43.908997
-54 51 54.120237
-54 52 46.097722
-54 53 20.615528
-54 55 36.400549
-54 56 14.142136
-54 57 33.541020
-54 58 26.925824
-54 59 40.311289
-54 60 31.622777
-54 61 11.180340
-54 62 29.154759
-54 63 47.434165
-54 64 54.083269
-54 65 32.015621
-54 66 18.027756
-54 67 24.698178
-54 68 44.721360
-54 69 22.360680
-54 70 11.180340
-54 71 24.207437
-54 72 45.276926
-54 73 45.541190
-54 74 20.591260
-54 75 30.000000
-54 76 47.434165
-54 77 55.172457
-54 78 47.095647
-54 79 13.416408
-54 80 22.803509
-54 81 27.166155
-54 82 30.083218
-54 83 9.899495
-54 84 25.495098
-54 85 42.544095
-54 86 50.774009
-54 87 26.019224
-54 88 27.202941
-54 89 8.944272
-54 90 65.069194
-54 91 17.262677
-54 92 30.083218
-54 93 33.734256
-54 94 41.048752
-54 95 37.054015
-54 96 38.275318
-54 97 35.227830
-54 98 35.777088
-54 99 6.324555
-54 100 16.155494
-54 101 20.248457
-55 1 18.027756
-55 2 39.051248
-55 3 36.249138
-55 4 41.400483
-55 5 40.311289
-55 6 43.011626
-55 7 39.924930
-55 8 42.720019
-55 9 44.721360
-55 10 51.478151
-55 11 49.244289
-55 12 51.078371
-55 13 49.335586
-55 14 55.901699
-55 15 52.201533
-55 16 56.648036
-55 17 58.523500
-55 18 57.008771
-55 19 56.089215
-55 20 51.662365
-55 21 46.840154
-55 22 57.008771
-55 23 47.434165
-55 24 57.567352
-55 25 48.104054
-55 26 58.523500
-55 27 50.000000
-55 28 47.169906
-55 29 47.634021
-55 30 43.011626
-55 31 44.598206
-55 32 41.400483
-55 33 43.863424
-55 34 46.097722
-55 35 39.051248
-55 36 27.730849
-55 37 26.925824
-55 38 24.166092
-55 39 21.189620
-55 40 20.615528
-55 41 25.495098
-55 42 15.297059
-55 43 20.000000
-55 44 25.000000
-55 45 22.000000
-55 46 41.340053
-55 47 42.059482
-55 48 55.081757
-55 49 56.515485
-55 50 49.729267
-55 51 30.232433
-55 52 40.000000
-55 53 42.426407
-55 54 36.400549
-55 56 25.000000
-55 57 25.495098
-55 58 43.011626
-55 59 64.031242
-55 60 60.207973
-55 61 40.000000
-55 62 11.180340
-55 63 26.925824
-55 64 41.231056
-55 65 31.622777
-55 66 28.284271
-55 67 26.925824
-55 68 20.124612
-55 69 15.000000
-55 70 25.298221
-55 71 21.931712
-55 72 11.180340
-55 73 9.433981
-55 74 53.000000
-55 75 53.150729
-55 76 74.330344
-55 77 48.259714
-55 78 65.368188
-55 79 47.169906
-55 80 49.648766
-55 81 15.264338
-55 82 6.324555
-55 83 32.756679
-55 84 34.132096
-55 85 31.064449
-55 86 37.854986
-55 87 49.517674
-55 88 56.080300
-55 89 31.064449
-55 90 56.293872
-55 91 22.203603
-55 92 18.973666
-55 93 17.117243
-55 94 10.000000
-55 95 12.165525
-55 96 23.021729
-55 97 6.000000
-55 98 66.068147
-55 99 30.083218
-55 100 38.288379
-55 101 25.000000
-56 1 14.142136
-56 2 25.495098
-56 3 17.000000
-56 4 26.248809
-56 5 22.360680
-56 6 26.925824
-56 7 19.209373
-56 8 21.213203
-56 9 25.000000
-56 10 32.015621
-56 11 28.284271
-56 12 29.732137
-56 13 26.627054
-56 14 35.355339
-56 15 29.154759
-56 16 34.409301
-56 17 36.055513
-56 18 33.541020
-56 19 56.753854
-56 20 51.419841
-56 21 46.572524
-56 22 55.901699
-56 23 46.097722
-56 24 55.578773
-56 25 45.705580
-56 26 55.226805
-56 27 71.589105
-56 28 69.641941
-56 29 68.876701
-56 30 65.000000
-56 31 65.299311
-56 32 63.158531
-56 33 64.412732
-56 34 65.192024
-56 35 60.415230
-56 36 44.654227
-56 37 43.011626
-56 38 41.340053
-56 39 37.735925
-56 40 36.055513
-56 41 39.051248
-56 42 31.764760
-56 43 32.015621
-56 44 35.355339
-56 45 33.301652
-56 46 24.166092
-56 47 23.323808
-56 48 31.764760
-56 49 56.293872
-56 50 49.477268
-56 51 48.877398
-56 52 47.169906
-56 53 30.413813
-56 54 14.142136
-56 55 25.000000
-56 57 32.015621
-56 58 35.000000
-56 59 52.201533
-56 60 44.721360
-56 61 15.000000
-56 62 15.811388
-56 63 43.011626
-56 64 53.150729
-56 65 33.541020
-56 66 20.615528
-56 67 25.495098
-56 68 38.470768
-56 69 10.000000
-56 70 8.062258
-56 71 10.295630
-56 72 35.355339
-56 73 33.376639
-56 74 28.000000
-56 75 41.231056
-56 76 60.415230
-56 77 56.603887
-56 78 57.428216
-56 79 22.360680
-56 80 25.298221
-56 81 21.400935
-56 82 19.104973
-56 83 17.262677
-56 84 29.832868
-56 85 41.109610
-56 86 49.578221
-56 87 37.107951
-56 88 40.249224
-56 89 6.324555
-56 90 66.287254
-56 91 14.764823
-56 92 26.172505
-56 93 28.600699
-56 94 32.015621
-56 95 29.546573
-56 96 34.713110
-56 97 25.709920
-56 98 49.396356
-56 99 8.944272
-56 100 25.317978
-56 101 7.071068
-57 1 18.027756
-57 2 55.901699
-57 3 48.826222
-57 4 57.306195
-57 5 54.083269
-57 6 58.309519
-57 7 51.224994
-57 8 53.150729
-57 9 57.008771
-57 10 40.000000
-57 11 40.311289
-57 12 42.296572
-57 13 43.174066
-57 14 45.000000
-57 15 46.097722
-57 16 48.259714
-57 17 50.249378
-57 18 50.990195
-57 19 30.594117
-57 20 26.248809
-57 21 21.540659
-57 22 31.622777
-57 23 22.360680
-57 24 32.310989
-57 25 23.323808
-57 26 33.541020
-57 27 45.276926
-57 28 45.000000
-57 29 42.296572
-57 30 40.000000
-57 31 38.327536
-57 32 38.000000
-57 33 37.336309
-57 34 36.400549
-57 35 35.000000
-57 36 52.810984
-57 37 52.201533
-57 38 49.335586
-57 39 46.572524
-57 40 46.097722
-57 41 50.990195
-57 42 40.792156
-57 43 45.276926
-57 44 50.249378
-57 45 47.265209
-57 46 55.758407
-57 47 55.217751
-57 48 49.030603
-57 49 31.048349
-57 50 24.351591
-57 51 22.000000
-57 52 15.811388
-57 53 25.495098
-57 54 33.541020
-57 55 25.495098
-57 56 32.015621
-57 58 22.360680
-57 59 43.011626
-57 60 42.720019
-57 61 43.011626
-57 62 30.413813
-57 63 15.000000
-57 64 21.213203
-57 65 7.071068
-57 66 15.811388
-57 67 9.219544
-57 68 15.652476
-57 69 26.925824
-57 70 25.495098
-57 71 37.161808
-57 72 25.000000
-57 73 32.695565
-57 74 54.120237
-57 75 33.541020
-57 76 54.083269
-57 77 25.079872
-57 78 41.868843
-57 79 46.957428
-57 80 55.000000
-57 81 12.369317
-57 82 23.021729
-57 83 24.351591
-57 84 13.601471
-57 85 9.219544
-57 86 17.691806
-57 87 31.016125
-57 88 39.560081
-57 89 34.713110
-57 90 34.481879
-57 91 17.691806
-57 92 7.071068
-57 93 8.544004
-57 94 20.248457
-57 95 14.764823
-57 96 6.324555
-57 97 19.646883
-57 98 49.040799
-57 99 29.410882
-57 100 24.000000
-57 101 37.215588
-58 1 26.925824
-58 2 60.207973
-58 3 50.635956
-58 4 60.530984
-58 5 55.901699
-58 6 60.827625
-58 7 51.419841
-58 8 52.201533
-58 9 57.008771
-58 10 22.360680
-58 11 25.000000
-58 12 26.627054
-58 13 29.732137
-58 14 26.925824
-58 15 32.015621
-58 16 31.764760
-58 17 33.541020
-58 18 36.055513
-58 19 24.413111
-58 20 19.209373
-58 21 15.620499
-58 22 22.360680
-58 23 14.142136
-58 24 21.540659
-58 25 12.806248
-58 26 20.615528
-58 27 65.192024
-58 28 65.764732
-58 29 62.201286
-58 30 60.827625
-58 31 58.215118
-58 32 58.855756
-58 33 57.218878
-58 34 55.000000
-58 35 55.901699
-58 36 70.491134
-58 37 69.462220
-58 38 66.887966
-58 39 63.631753
-58 40 62.649820
-58 41 67.082039
-58 42 57.306195
-58 43 60.415230
-58 44 65.000000
-58 45 62.241465
-58 46 57.870545
-58 47 56.293872
-58 48 34.409301
-58 49 23.323808
-58 50 17.691806
-58 51 43.174066
-58 52 25.495098
-58 53 7.071068
-58 54 26.925824
-58 55 43.011626
-58 56 35.000000
-58 57 22.360680
-58 59 21.213203
-58 60 20.615528
-58 61 38.078866
-58 62 42.720019
-58 63 36.400549
-58 64 35.355339
-58 65 15.811388
-58 66 15.811388
-58 67 16.278821
-58 68 38.013156
-58 69 36.400549
-58 70 27.018512
-58 71 44.283180
-58 72 46.097722
-58 73 51.855569
-58 74 44.821870
-58 75 11.180340
-58 76 32.015621
-58 77 32.695565
-58 78 23.086793
-58 79 38.013156
-58 80 49.244289
-58 81 27.802878
-58 82 38.078866
-58 83 18.248288
-58 84 9.219544
-58 85 27.294688
-58 86 33.060551
-58 87 9.055385
-58 88 18.027756
-58 89 33.541020
-58 90 42.059482
-58 91 23.086793
-58 92 25.495098
-58 93 29.206164
-58 94 41.109610
-58 95 35.468296
-58 96 28.635642
-58 97 38.288379
-58 98 26.925824
-58 99 27.294688
-58 100 10.770330
-58 101 42.011903
-59 1 47.169906
-59 2 75.663730
-59 3 65.375837
-59 4 75.325958
-59 5 70.178344
-59 6 75.166482
-59 7 65.069194
-59 8 65.000000
-59 9 70.000000
-59 10 25.495098
-59 11 30.413813
-59 12 30.805844
-59 13 35.693137
-59 14 26.925824
-59 15 36.400549
-59 16 32.695565
-59 17 33.541020
-59 18 38.078866
-59 19 29.427878
-59 20 27.000000
-59 21 27.459060
-59 22 25.495098
-59 23 25.495098
-59 24 23.537205
-59 25 23.537205
-59 26 20.615528
-59 27 82.462113
-59 28 83.815273
-59 29 79.555012
-59 30 79.056942
-59 31 75.690158
-59 32 77.162167
-59 33 74.726167
-59 34 71.589105
-59 35 74.330344
-59 36 91.263355
-59 37 90.138782
-59 38 87.658428
-59 39 84.314886
-59 40 83.216585
-59 41 87.464278
-59 42 77.935871
-59 43 80.622577
-59 44 85.000000
-59 45 82.365041
-59 46 72.173402
-59 47 70.064256
-59 48 37.336309
-59 49 27.459060
-59 50 27.073973
-59 51 62.241465
-59 52 41.231056
-59 53 22.360680
-59 54 40.311289
-59 55 64.031242
-59 56 52.201533
-59 57 43.011626
-59 58 21.213203
-59 60 11.180340
-59 61 50.000000
-59 62 62.649820
-59 63 55.901699
-59 64 50.990195
-59 65 36.055513
-59 66 36.055513
-59 67 37.483330
-59 68 58.523500
-59 69 55.901699
-59 70 44.944410
-59 71 62.297673
-59 72 67.268120
-59 73 73.000000
-59 74 51.662365
-59 75 11.180340
-59 76 11.180340
-59 77 45.044423
-59 78 10.630146
-59 79 46.529560
-59 80 58.694122
-59 81 48.918299
-59 82 58.821765
-59 83 35.114100
-59 84 30.413813
-59 85 46.097722
-59 86 49.729267
-59 87 15.231546
-59 88 14.317821
-59 89 48.836462
-59 90 52.239832
-59 91 43.046487
-59 92 46.690470
-59 93 50.328918
-59 94 62.289646
-59 95 56.639209
-59 96 49.091751
-59 97 59.464275
-59 98 13.601471
-59 99 43.416587
-59 100 27.313001
-59 101 59.203040
-60 1 42.426407
-60 2 66.708320
-60 3 56.293872
-60 4 66.098411
-60 5 60.827625
-60 6 65.764732
-60 7 55.578773
-60 8 55.226805
-60 9 60.207973
-60 10 15.000000
-60 11 20.000000
-60 12 20.099751
-60 13 25.079872
-60 14 15.811388
-60 15 25.495098
-60 16 21.540659
-60 17 22.360680
-60 18 26.925824
-60 19 37.161808
-60 20 33.526109
-60 21 32.388269
-60 22 33.541020
-60 23 30.413813
-60 24 31.764760
-60 25 28.442925
-60 26 29.154759
-60 27 85.586214
-60 28 86.313383
-60 29 82.607506
-60 30 81.394103
-60 31 78.638413
-60 32 79.429214
-60 33 77.646635
-60 34 75.166482
-60 35 76.485293
-60 36 86.452299
-60 37 85.146932
-60 38 82.879430
-60 39 79.397733
-60 40 78.102497
-60 41 82.006097
-60 42 73.000000
-60 43 75.000000
-60 44 79.056942
-60 45 76.609399
-60 46 62.801274
-60 47 60.530984
-60 48 26.248809
-60 49 35.341194
-60 50 32.984845
-60 51 63.788714
-60 52 45.000000
-60 53 18.027756
-60 54 31.622777
-60 55 60.207973
-60 56 44.721360
-60 57 42.720019
-60 58 20.615528
-60 59 11.180340
-60 61 40.311289
-60 62 57.008771
-60 63 57.008771
-60 64 55.000000
-60 65 36.400549
-60 66 32.015621
-60 67 35.355339
-60 68 58.309519
-60 69 50.000000
-60 70 38.275318
-60 71 55.009090
-60 72 65.192024
-60 73 69.526973
-60 74 40.792156
-60 75 10.000000
-60 76 15.811388
-60 77 50.635956
-60 78 21.400935
-60 79 36.055513
-60 80 48.166378
-60 81 45.803930
-60 82 54.451814
-60 83 28.600699
-60 84 29.154759
-60 85 47.853944
-60 86 53.084838
-60 87 11.704700
-60 88 4.472136
-60 89 40.496913
-60 90 58.940648
-60 91 38.183766
-60 92 44.777226
-60 93 48.764741
-60 94 60.207973
-60 95 54.708317
-60 96 49.040799
-60 97 56.400355
-60 98 6.324555
-60 99 35.777088
-60 100 21.931712
-60 101 51.478151
-61 1 26.925824
-61 2 26.925824
-61 3 16.552945
-61 4 25.961510
-61 5 20.615528
-61 6 25.495098
-61 7 15.297059
-61 8 15.000000
-61 9 20.000000
-61 10 25.495098
-61 11 20.615528
-61 12 21.189620
-61 13 16.552945
-61 14 26.925824
-61 15 18.027756
-61 16 23.853721
-61 17 25.000000
-61 18 21.213203
-61 19 62.177166
-61 20 56.824291
-61 21 52.478567
-61 22 60.415230
-61 23 51.478151
-61 24 59.615434
-61 25 50.537115
-61 26 58.523500
-61 27 85.440037
-61 28 83.815273
-61 29 82.637764
-61 30 79.056942
-61 31 78.924014
-61 32 77.162167
-61 33 78.000000
-61 34 78.262379
-61 35 74.330344
-61 36 57.697487
-61 37 55.901699
-61 38 54.626001
-61 39 51.078371
-61 40 49.244289
-61 41 51.478151
-61 42 45.541190
-61 43 44.721360
-61 44 47.169906
-61 45 45.650849
-61 46 22.561028
-61 47 20.223748
-61 48 19.849433
-61 49 61.269895
-61 50 55.072679
-61 51 62.241465
-61 52 56.568542
-61 53 31.622777
-61 54 11.180340
-61 55 40.000000
-61 56 15.000000
-61 57 43.011626
-61 58 38.078866
-61 59 50.000000
-61 60 40.311289
-61 62 30.413813
-61 63 55.901699
-61 64 64.031242
-61 65 42.426407
-61 66 28.284271
-61 67 34.713110
-61 68 52.201533
-61 69 25.000000
-61 70 17.888544
-61 71 21.931712
-61 72 50.249378
-61 73 48.259714
-61 74 13.000000
-61 75 40.311289
-61 76 55.901699
-61 77 65.795137
-61 78 57.558666
-61 79 8.062258
-61 80 12.041595
-61 81 34.539832
-61 82 34.058773
-61 83 20.808652
-61 84 36.400549
-61 85 52.201533
-61 86 60.605280
-61 87 36.496575
-61 88 36.124784
-61 89 9.219544
-61 90 75.690158
-61 91 25.553865
-61 92 38.470768
-61 93 41.629317
-61 94 46.690470
-61 95 43.680659
-61 96 47.010637
-61 97 40.447497
-61 98 43.416587
-61 99 13.601471
-61 100 27.313001
-61 101 17.464249
-62 1 15.811388
-62 2 28.284271
-62 3 25.079872
-62 4 30.479501
-62 5 29.154759
-62 6 32.015621
-62 7 28.792360
-62 8 31.622777
-62 9 33.541020
-62 10 46.097722
-62 11 43.011626
-62 12 44.654227
-62 13 42.059482
-62 14 50.000000
-62 15 44.721360
-62 16 49.739320
-62 17 51.478151
-62 18 49.244289
-62 19 60.008333
-62 20 55.081757
-62 21 50.089919
-62 22 60.207973
-62 23 50.249378
-62 24 60.406953
-62 25 50.487622
-62 26 60.827625
-62 27 61.032778
-62 28 58.309519
-62 29 58.600341
-62 30 54.083269
-62 31 55.443665
-62 32 52.430907
-62 33 54.671748
-62 34 56.568542
-62 35 50.000000
-62 36 29.732137
-62 37 28.284271
-62 38 26.248809
-62 39 22.671568
-62 40 21.213203
-62 41 25.000000
-62 42 16.401219
-62 43 18.027756
-62 44 22.360680
-62 45 19.723083
-62 46 30.232433
-62 47 30.886890
-62 48 47.423623
-62 49 60.074953
-62 50 53.084838
-62 51 40.360872
-62 52 46.097722
-62 53 40.311289
-62 54 29.154759
-62 55 11.180340
-62 56 15.811388
-62 57 30.413813
-62 58 42.720019
-62 59 62.649820
-62 60 57.008771
-62 61 30.413813
-62 63 36.055513
-62 64 49.244289
-62 65 35.000000
-62 66 26.925824
-62 67 28.284271
-62 68 29.832868
-62 69 7.071068
-62 70 19.104973
-62 71 10.770330
-62 72 22.360680
-62 73 18.000000
-62 74 43.289722
-62 75 51.478151
-62 76 72.111026
-62 77 55.081757
-62 78 65.787537
-62 79 38.078866
-62 80 39.115214
-62 81 18.110770
-62 82 8.062258
-62 83 28.425341
-62 84 34.928498
-62 85 37.947332
-62 86 45.694639
-62 87 47.507894
-62 88 52.630789
-62 89 22.135944
-62 90 63.906181
-62 91 19.697716
-62 92 23.345235
-62 93 23.409400
-62 94 20.615528
-62 95 20.808652
-62 96 30.083218
-62 97 14.866069
-62 98 62.369865
-62 99 23.021729
-62 100 35.510562
-62 101 14.142136
-63 1 29.154759
-63 2 64.031242
-63 3 58.728187
-63 4 65.946948
-63 5 63.639610
-63 6 67.268120
-63 7 61.717096
-63 8 64.031242
-63 9 67.268120
-63 10 55.000000
-63 11 55.226805
-63 12 57.218878
-63 13 57.870545
-63 14 60.000000
-63 15 60.827625
-63 16 63.198101
-63 17 65.192024
-63 18 65.764732
-63 19 36.619667
-63 20 33.970576
-63 21 30.479501
-63 22 39.051248
-63 23 32.015621
-63 24 40.360872
-63 25 33.600595
-63 26 42.426407
-63 27 30.413813
-63 28 30.000000
-63 29 27.459060
-63 30 25.000000
-63 31 23.537205
-63 32 23.000000
-63 33 22.561028
-63 34 22.360680
-63 35 20.000000
-63 36 50.039984
-63 37 50.000000
-63 38 47.000000
-63 39 45.099889
-63 40 45.276926
-63 41 50.249378
-63 42 40.607881
-63 43 46.097722
-63 44 50.990195
-63 45 48.052055
-63 46 65.069194
-63 47 65.069194
-63 48 63.788714
-63 49 37.802116
-63 50 32.526912
-63 51 7.000000
-63 52 18.027756
-63 53 40.311289
-63 54 47.434165
-63 55 26.925824
-63 56 43.011626
-63 57 15.000000
-63 58 36.400549
-63 59 55.901699
-63 60 57.008771
-63 61 55.901699
-63 62 36.055513
-63 64 15.000000
-63 65 20.615528
-63 66 30.413813
-63 67 24.083189
-63 68 7.071068
-63 69 35.355339
-63 70 38.013156
-63 71 45.343136
-63 72 20.000000
-63 73 30.066593
-63 74 67.779053
-63 75 47.434165
-63 76 67.082039
-63 77 23.537205
-63 78 52.801515
-63 79 60.745370
-63 80 67.601775
-63 81 21.633308
-63 82 28.017851
-63 83 38.832976
-63 84 28.284271
-63 85 10.000000
-63 86 12.165525
-63 87 45.354162
-63 88 54.129474
-63 89 47.010637
-63 90 30.066593
-63 91 30.463092
-63 92 17.464249
-63 93 14.422205
-63 94 17.464249
-63 95 15.264338
-63 96 9.219544
-63 97 21.470911
-63 98 63.324561
-63 99 42.544095
-63 100 39.000000
-63 101 46.690470
-64 1 39.051248
-64 2 76.321688
-64 3 69.814039
-64 4 77.935871
-64 5 75.000000
-64 6 79.056942
-64 7 72.346389
-64 8 74.330344
-64 9 78.102497
-64 10 57.008771
-64 11 58.523500
-64 12 60.406953
-64 13 62.241465
-64 14 61.846584
-64 15 65.000000
-64 16 66.098411
-64 17 68.007353
-64 18 69.641941
-64 19 25.806976
-64 20 25.079872
-64 21 23.537205
-64 22 29.154759
-64 23 25.495098
-64 24 30.886890
-64 25 27.459060
-64 26 33.541020
-64 27 31.622777
-64 28 33.541020
-64 29 28.792360
-64 30 29.154759
-64 31 25.079872
-64 32 27.459060
-64 33 24.166092
-64 34 20.615528
-64 35 25.000000
-64 36 65.030762
-64 37 65.000000
-64 38 62.000000
-64 39 60.074953
-64 40 60.207973
-64 41 65.192024
-64 42 55.443665
-64 43 60.827625
-64 44 65.764732
-64 45 62.801274
-64 46 76.609399
-64 47 76.216796
-64 48 67.779053
-64 49 27.459060
-64 50 24.351591
-64 51 16.552945
-64 52 10.000000
-64 53 41.231056
-64 54 54.083269
-64 55 41.231056
-64 56 53.150729
-64 57 21.213203
-64 58 35.355339
-64 59 50.990195
-64 60 55.000000
-64 61 64.031242
-64 62 49.244289
-64 63 15.000000
-64 65 22.360680
-64 66 36.055513
-64 67 29.410882
-64 68 22.022716
-64 69 47.169906
-64 70 46.690470
-64 71 57.454330
-64 72 35.000000
-64 73 45.044423
-64 74 74.625733
-64 75 45.000000
-64 76 61.846584
-64 77 9.433981
-64 78 45.310043
-64 79 67.416615
-64 80 76.059187
-64 81 32.449961
-64 82 41.231056
-64 83 44.418465
-64 84 30.083218
-64 85 12.041595
-64 86 3.605551
-64 87 44.181444
-64 88 53.150729
-64 89 55.901699
-64 90 15.132746
-64 91 38.897301
-64 92 27.202941
-64 93 25.942244
-64 94 32.249031
-64 95 29.120440
-64 96 19.235384
-64 97 35.440090
-64 98 61.032778
-64 99 50.447993
-64 100 41.785165
-64 101 58.008620
-65 1 20.615528
-65 2 58.523500
-65 3 50.537115
-65 4 59.615434
-65 5 55.901699
-65 6 60.415230
-65 7 52.478567
-65 8 54.083269
-65 9 58.309519
-65 10 35.355339
-65 11 36.400549
-65 12 38.327536
-65 13 39.924930
-65 14 40.311289
-65 15 42.720019
-65 16 44.147480
-65 17 46.097722
-65 18 47.434165
-65 19 25.019992
-65 20 20.223748
-65 21 15.297059
-65 22 25.495098
-65 23 15.811388
-65 24 25.961510
-65 25 16.552945
-65 26 26.925824
-65 27 50.000000
-65 28 50.249378
-65 29 47.000000
-65 30 45.276926
-65 31 43.000000
-65 32 43.289722
-65 33 42.000000
-65 34 40.311289
-65 35 40.311289
-65 36 59.236813
-65 37 58.523500
-65 38 55.713553
-65 39 52.810984
-65 40 52.201533
-65 41 57.008771
-65 42 46.840154
-65 43 50.990195
-65 44 55.901699
-65 45 52.952809
-65 46 57.697487
-65 47 56.824291
-65 48 45.541190
-65 49 25.179357
-65 50 18.248288
-65 51 27.459060
-65 52 14.142136
-65 53 20.000000
-65 54 32.015621
-65 55 31.622777
-65 56 33.541020
-65 57 7.071068
-65 58 15.811388
-65 59 36.055513
-65 60 36.400549
-65 61 42.426407
-65 62 35.000000
-65 63 20.615528
-65 64 22.360680
-65 66 14.142136
-65 67 8.062258
-65 68 22.472205
-65 69 30.413813
-65 70 26.076810
-65 71 40.261644
-65 72 32.015621
-65 73 39.357337
-65 74 52.430907
-65 75 26.925824
-65 76 47.169906
-65 77 23.430749
-65 78 34.828150
-65 79 45.221676
-65 80 54.451814
-65 81 17.117243
-65 82 28.284271
-65 83 22.203603
-65 84 8.062258
-65 85 12.041595
-65 86 19.313208
-65 87 24.738634
-65 88 33.541020
-65 89 35.000000
-65 90 33.301652
-65 91 18.788294
-65 92 12.649111
-65 93 15.264338
-65 94 27.202941
-65 95 21.633308
-65 96 13.038405
-65 97 26.000000
-65 98 42.720019
-65 99 29.068884
-65 100 19.646883
-65 101 39.560081
-66 1 11.180340
-66 2 46.097722
-66 3 37.336309
-66 4 46.840154
-66 5 42.720019
-66 6 47.434165
-66 7 38.910153
-66 8 40.311289
-66 9 44.721360
-66 10 25.495098
-66 11 25.000000
-66 12 27.000000
-66 13 27.459060
-66 14 30.413813
-66 15 30.413813
-66 16 33.000000
-66 17 35.000000
-66 18 35.355339
-66 19 36.138622
-66 20 30.805844
-66 21 25.961510
-66 22 35.355339
-66 23 25.495098
-66 24 35.128336
-66 25 25.179357
-66 26 35.000000
-66 27 60.827625
-66 28 60.207973
-66 29 57.870545
-66 30 55.226805
-66 31 53.935146
-66 32 53.235327
-66 33 52.952809
-66 34 52.201533
-66 35 50.249378
-66 36 55.217751
-66 37 54.083269
-66 38 51.613952
-66 39 48.259714
-66 40 47.169906
-66 41 51.478151
-66 42 41.880783
-66 43 44.721360
-66 44 49.244289
-66 45 46.518813
-66 46 44.598206
-66 47 43.462628
-66 48 33.376639
-66 49 35.693137
-66 50 28.861739
-66 51 37.336309
-66 52 28.284271
-66 53 14.142136
-66 54 18.027756
-66 55 28.284271
-66 56 20.615528
-66 57 15.811388
-66 58 15.811388
-66 59 36.055513
-66 60 32.015621
-66 61 28.284271
-66 62 26.925824
-66 63 30.413813
-66 64 36.055513
-66 65 14.142136
-66 67 6.708204
-66 68 29.068884
-66 69 20.615528
-66 70 12.649111
-66 71 29.000000
-66 72 33.541020
-66 73 37.536649
-66 74 38.587563
-66 75 25.000000
-66 76 46.097722
-66 77 37.536649
-66 78 38.897301
-66 79 31.384710
-66 80 40.311289
-66 81 13.892444
-66 82 22.803509
-66 83 8.544004
-66 84 9.219544
-66 85 24.596748
-66 86 32.756679
-66 87 21.260292
-66 88 28.017851
-66 89 21.095023
-66 90 47.423623
-66 91 7.280110
-66 92 14.142136
-66 93 18.248288
-66 94 28.635642
-66 95 23.409400
-66 96 21.213203
-66 97 24.413111
-66 98 38.013156
-66 99 15.000000
-66 100 10.295630
-66 101 27.294688
-67 1 13.038405
-67 2 50.596443
-67 3 42.485292
-67 4 51.623638
-67 5 47.853944
-67 6 52.392748
-67 7 44.418465
-67 8 46.043458
-67 9 50.249378
-67 10 31.064449
-67 11 31.144823
-67 12 33.136083
-67 13 33.955854
-67 14 36.055513
-67 15 36.878178
-67 16 39.115214
-67 17 41.109610
-67 18 41.773197
-67 19 32.140317
-67 20 27.018512
-67 21 22.022716
-67 22 32.015621
-67 23 22.022716
-67 24 32.140317
-67 25 22.203603
-67 26 32.557641
-67 27 54.451814
-67 28 54.037024
-67 29 51.478151
-67 30 49.040799
-67 31 47.518417
-67 32 47.042534
-67 33 46.529560
-67 34 45.607017
-67 35 44.045431
-67 36 54.589376
-67 37 53.665631
-67 38 51.000000
-67 39 47.853944
-67 40 47.010637
-67 41 51.623638
-67 42 41.629317
-67 43 45.221676
-67 44 50.000000
-67 45 47.127487
-67 46 49.658836
-67 47 48.764741
-67 48 39.812058
-67 49 32.015621
-67 50 25.019992
-67 51 31.064449
-67 52 22.022716
-67 53 17.464249
-67 54 24.698178
-67 55 26.925824
-67 56 25.495098
-67 57 9.219544
-67 58 16.278821
-67 59 37.483330
-67 60 35.355339
-67 61 34.713110
-67 62 28.284271
-67 63 24.083189
-67 64 29.410882
-67 65 8.062258
-67 66 6.708204
-67 68 23.537205
-67 69 23.021729
-67 70 18.027756
-67 71 32.557641
-67 72 30.000000
-67 73 35.608988
-67 74 45.276926
-67 75 27.018512
-67 76 48.166378
-67 77 31.400637
-67 78 38.470768
-67 79 38.078866
-67 80 46.754679
-67 81 11.661904
-67 82 22.472205
-67 83 15.231546
-67 84 7.211103
-67 85 17.888544
-67 86 26.076810
-67 87 23.853721
-67 88 31.780497
-67 89 27.018512
-67 90 41.231056
-67 91 10.770330
-67 92 9.433981
-67 93 13.416408
-67 94 25.000000
-67 95 19.416488
-67 96 15.000000
-67 97 22.022716
-67 98 41.593269
-67 99 21.213203
-67 100 15.132746
-67 101 31.622777
-68 1 25.298221
-68 2 58.051701
-68 3 53.413481
-68 4 60.108236
-68 5 58.137767
-68 6 61.522354
-68 7 56.612719
-68 8 59.076222
-68 9 62.008064
-68 10 54.451814
-68 11 54.037024
-68 12 56.035703
-68 13 56.080300
-68 14 59.413803
-68 15 59.076222
-68 16 62.032250
-68 17 64.031242
-68 18 64.070274
-68 19 42.059482
-68 20 38.832976
-68 21 34.828150
-68 22 44.102154
-68 23 36.124784
-68 24 45.221676
-68 25 37.483330
-68 26 47.010637
-68 27 33.241540
-68 28 31.780497
-68 29 30.463092
-68 30 26.925824
-68 31 26.832816
-68 32 25.000000
-68 33 25.942244
-68 34 27.018512
-68 35 22.135944
-68 36 43.104524
-68 37 43.011626
-68 38 40.012498
-68 39 38.052595
-68 40 38.209946
-68 41 43.185646
-68 42 33.541020
-68 43 39.051248
-68 44 43.931765
-68 45 41.000000
-68 46 59.464275
-68 47 59.665736
-68 48 62.072538
-68 49 43.046487
-68 50 37.202150
-68 51 10.630146
-68 52 23.769729
-68 53 40.804412
-68 54 44.721360
-68 55 20.124612
-68 56 38.470768
-68 57 15.652476
-68 58 38.013156
-68 59 58.523500
-68 60 58.309519
-68 61 52.201533
-68 62 29.832868
-68 63 7.071068
-68 64 22.022716
-68 65 22.472205
-68 66 29.068884
-68 67 23.537205
-68 69 30.000000
-68 70 34.481879
-68 71 39.623226
-68 72 13.038405
-68 73 23.021729
-68 74 64.560050
-68 75 49.193496
-68 76 69.641941
-68 77 30.265492
-68 78 56.586217
-68 79 57.723479
-68 80 63.560994
-68 81 17.720045
-68 82 21.931712
-68 83 37.013511
-68 84 29.154759
-68 85 14.764823
-68 86 19.026298
-68 87 46.615448
-68 88 55.027266
-68 89 43.081318
-68 90 37.121422
-68 91 27.459060
-68 92 15.000000
-68 93 11.045361
-68 94 10.440307
-68 95 9.219544
-68 96 9.433981
-68 97 15.000000
-68 98 64.621978
-68 99 39.293765
-68 100 38.639358
-68 101 41.400483
-69 1 10.000000
-69 2 29.154759
-69 3 23.430749
-69 4 30.805844
-69 5 28.284271
-69 6 32.015621
-69 7 26.627054
-69 8 29.154759
-69 9 32.015621
-69 10 39.051248
-69 11 36.055513
-69 12 37.735925
-69 13 35.341194
-69 14 43.011626
-69 15 38.078866
-69 16 42.941821
-69 17 44.721360
-69 18 42.720019
-69 19 55.145263
-69 20 50.039984
-69 21 45.044423
-69 22 55.000000
-69 23 45.000000
-69 24 55.036352
-69 25 45.044423
-69 26 55.226805
-69 27 62.649820
-69 28 60.415230
-69 29 60.033324
-69 30 55.901699
-69 31 56.603887
-69 32 54.120237
-69 33 55.758407
-69 34 57.008771
-69 35 51.478151
-69 36 36.796739
-69 37 35.355339
-69 38 33.301652
-69 39 29.732137
-69 40 28.284271
-69 41 32.015621
-69 42 23.430749
-69 43 25.000000
-69 44 29.154759
-69 45 26.627054
-69 46 29.732137
-69 47 29.732137
-69 48 40.853396
-69 49 55.036352
-69 50 48.041649
-69 51 40.607881
-69 52 42.720019
-69 53 33.541020
-69 54 22.360680
-69 55 15.000000
-69 56 10.000000
-69 57 26.925824
-69 58 36.400549
-69 59 55.901699
-69 60 50.000000
-69 61 25.000000
-69 62 7.071068
-69 63 35.355339
-69 64 47.169906
-69 65 30.413813
-69 66 20.615528
-69 67 23.021729
-69 68 30.000000
-69 70 12.041595
-69 71 10.295630
-69 72 25.495098
-69 73 23.537205
-69 74 38.000000
-69 75 44.721360
-69 76 65.192024
-69 77 52.000000
-69 78 59.481089
-69 79 32.249031
-69 80 34.928498
-69 81 14.764823
-69 82 9.219544
-69 83 21.400935
-69 84 29.154759
-69 85 35.355339
-69 86 43.566042
-69 87 40.706265
-69 88 45.607017
-69 89 16.124515
-69 90 61.269895
-69 91 13.341664
-69 92 20.124612
-69 93 21.400935
-69 94 22.472205
-69 95 20.808652
-69 96 28.017851
-69 97 16.155494
-69 98 55.317267
-69 99 16.124515
-69 100 28.653098
-69 101 11.401754
-70 1 9.219544
-70 2 33.541020
-70 3 24.698178
-70 4 34.205263
-70 5 30.083218
-70 6 34.785054
-70 7 26.419690
-70 8 28.017851
-70 9 32.249031
-70 10 27.018512
-70 11 24.186773
-70 12 25.942244
-70 13 24.041631
-70 14 31.064449
-70 15 26.925824
-70 16 31.384710
-70 17 33.241540
-70 18 31.780497
-70 19 48.764741
-70 20 43.416587
-70 21 38.600518
-70 22 47.853944
-70 23 38.078866
-70 24 47.518417
-70 25 37.656341
-70 26 47.169906
-70 27 67.675697
-70 28 66.219333
-70 29 64.845971
-70 30 61.400326
-70 31 61.098281
-70 32 59.481089
-70 33 60.166436
-70 34 60.373835
-70 35 56.612719
-70 36 48.836462
-70 37 47.381431
-70 38 45.343136
-70 39 41.773197
-70 40 40.311289
-70 41 43.931765
-70 42 35.468296
-70 43 36.878178
-70 44 40.804412
-70 45 38.418745
-70 46 31.953091
-70 47 30.870698
-70 48 29.832868
-70 49 48.270074
-70 50 41.484937
-70 51 44.384682
-70 52 40.000000
-70 53 22.803509
-70 54 11.180340
-70 55 25.298221
-70 56 8.062258
-70 57 25.495098
-70 58 27.018512
-70 59 44.944410
-70 60 38.275318
-70 61 17.888544
-70 62 19.104973
-70 63 38.013156
-70 64 46.690470
-70 65 26.076810
-70 66 12.649111
-70 67 18.027756
-70 68 34.481879
-70 69 12.041595
-70 71 17.464249
-70 72 34.132096
-70 73 34.539832
-70 74 30.083218
-70 75 33.837849
-70 76 53.712196
-70 77 49.406477
-70 78 49.648766
-70 79 23.345235
-70 80 29.681644
-70 81 16.763055
-70 82 18.973666
-70 83 9.848858
-70 84 21.840330
-70 85 34.713110
-70 86 43.185646
-70 87 29.732137
-70 88 33.837849
-70 89 9.219544
-70 90 59.203040
-70 91 7.810250
-70 92 20.591260
-70 93 23.769729
-70 94 30.000000
-70 95 26.305893
-70 96 29.154759
-70 97 24.083189
-70 98 43.416587
-70 99 5.000000
-70 100 17.720045
-70 101 15.000000
-71 1 19.646883
-71 2 18.867962
-71 3 14.317821
-71 4 20.615528
-71 5 18.601075
-71 6 21.931712
-71 7 18.027756
-71 8 20.880613
-71 9 22.825424
-71 10 42.201896
-71 11 38.288379
-71 12 39.623226
-71 13 36.124784
-71 14 45.343136
-71 15 38.418745
-71 16 43.931765
-71 17 45.453273
-71 18 42.438190
-71 19 64.629715
-71 20 59.413803
-71 21 54.451814
-71 22 64.195015
-71 23 54.230987
-71 24 64.070274
-71 25 54.083269
-71 26 64.000000
-71 27 71.561163
-71 28 68.963759
-71 29 69.065187
-71 30 64.660653
-71 31 65.802736
-71 32 62.968246
-71 33 65.000000
-71 34 66.603303
-71 35 60.464866
-71 36 35.777088
-71 37 34.000000
-71 38 32.695565
-71 39 29.154759
-71 40 27.313001
-71 41 29.681644
-71 42 23.769729
-71 43 22.825424
-71 44 25.612497
-71 45 23.853721
-71 46 19.849433
-71 47 20.248457
-71 48 40.804412
-71 49 64.381674
-71 50 57.428216
-71 51 50.249378
-71 52 52.924474
-71 53 40.261644
-71 54 24.207437
-71 55 21.931712
-71 56 10.295630
-71 57 37.161808
-71 58 44.283180
-71 59 62.297673
-71 60 55.009090
-71 61 21.931712
-71 62 10.770330
-71 63 45.343136
-71 64 57.454330
-71 65 40.261644
-71 66 29.000000
-71 67 32.557641
-71 68 39.623226
-71 69 10.295630
-71 70 17.464249
-71 72 33.105891
-71 73 28.284271
-71 74 34.205263
-71 75 51.244512
-71 76 70.682388
-71 77 62.241465
-71 78 67.082039
-71 79 29.966648
-71 80 29.017236
-71 81 25.059928
-71 82 17.804494
-71 83 27.202941
-71 84 38.052595
-71 85 45.650849
-71 86 53.851648
-71 87 47.127487
-71 88 50.537115
-71 89 15.556349
-71 90 71.554175
-71 91 22.090722
-71 92 30.413813
-71 93 31.622777
-71 94 31.064449
-71 95 30.413813
-71 96 38.275318
-71 97 25.000000
-71 98 59.682493
-71 99 19.235384
-71 100 35.171011
-71 101 4.472136
-72 1 25.495098
-72 2 50.000000
-72 3 47.423623
-72 4 52.430907
-72 5 51.478151
-72 6 54.083269
-72 7 51.078371
-72 8 53.851648
-72 9 55.901699
-72 10 58.523500
-72 11 57.008771
-72 12 58.940648
-72 13 57.870545
-72 14 63.245553
-72 15 60.827625
-72 16 64.761099
-72 17 66.708320
-72 18 65.764732
-72 19 54.230987
-72 20 50.537115
-72 21 46.141088
-72 22 55.901699
-72 23 47.169906
-72 24 56.824291
-72 25 48.259714
-72 26 58.309519
-72 27 39.051248
-72 28 36.055513
-72 29 36.796739
-72 30 32.015621
-72 31 33.970576
-72 32 30.479501
-72 33 33.301652
-72 34 36.055513
-72 35 28.284271
-72 36 30.066593
-72 37 30.000000
-72 38 27.000000
-72 39 25.179357
-72 40 25.495098
-72 41 30.413813
-72 42 21.189620
-72 43 26.925824
-72 44 31.622777
-72 45 28.792360
-72 46 52.478567
-72 47 53.235327
-72 48 63.788714
-72 49 55.036352
-72 50 48.764741
-72 51 21.189620
-72 52 36.400549
-72 53 47.169906
-72 54 45.276926
-72 55 11.180340
-72 56 35.355339
-72 57 25.000000
-72 58 46.097722
-72 59 67.268120
-72 60 65.192024
-72 61 50.249378
-72 62 22.360680
-72 63 20.000000
-72 64 35.000000
-72 65 32.015621
-72 66 33.541020
-72 67 30.000000
-72 68 13.038405
-72 69 25.495098
-72 70 34.132096
-72 71 33.105891
-72 73 10.198039
-72 74 63.198101
-72 75 57.008771
-72 76 78.102497
-72 77 43.289722
-72 78 66.843100
-72 79 57.008771
-72 80 60.415230
-72 81 19.697716
-72 82 16.278821
-72 83 39.849718
-72 84 36.878178
-72 85 27.202941
-72 86 32.062439
-72 87 53.823787
-72 88 61.400326
-72 89 41.109610
-72 90 50.039984
-72 91 29.120440
-72 92 20.615528
-72 93 16.970563
-72 94 5.000000
-72 95 10.630146
-72 96 20.124612
-72 97 10.049876
-72 98 71.344236
-72 99 39.115214
-72 100 43.829214
-72 101 36.055513
-73 1 27.459060
-73 2 42.941821
-73 3 42.201896
-73 4 45.617979
-73 5 45.541190
-73 6 47.423623
-73 7 46.097722
-73 8 49.030603
-73 9 50.289164
-73 10 60.901560
-73 11 58.600341
-73 12 60.415230
-73 13 58.523500
-73 14 65.299311
-73 15 61.351447
-73 16 65.924199
-73 17 67.779053
-73 18 66.098411
-73 19 62.936476
-73 20 58.872744
-73 21 54.230987
-73 22 64.257295
-73 23 55.036352
-73 24 65.000000
-73 25 55.901699
-73 26 66.211781
-73 27 47.423623
-73 28 43.863424
-73 29 45.453273
-73 30 40.360872
-73 31 43.011626
-73 32 39.051248
-73 33 42.438190
-73 34 45.650849
-73 35 37.202150
-73 36 20.396078
-73 37 20.099751
-73 38 17.117243
-73 39 15.033296
-73 40 15.297059
-73 41 20.223748
-73 42 11.180340
-73 43 17.000000
-73 44 21.540659
-73 45 18.788294
-73 46 46.238512
-73 47 47.434165
-73 48 64.195015
-73 49 63.568860
-73 50 57.008771
-73 51 31.320920
-73 52 45.705580
-73 53 51.662365
-73 54 45.541190
-73 55 9.433981
-73 56 33.376639
-73 57 32.695565
-73 58 51.855569
-73 59 73.000000
-73 60 69.526973
-73 61 48.259714
-73 62 18.000000
-73 63 30.066593
-73 64 45.044423
-73 65 39.357337
-73 66 37.536649
-73 67 35.608988
-73 68 23.021729
-73 69 23.537205
-73 70 34.539832
-73 71 28.284271
-73 72 10.198039
-73 74 61.204575
-73 75 62.241465
-73 76 83.450584
-73 77 53.084838
-73 78 73.783467
-73 79 55.731499
-73 80 57.078893
-73 81 24.083189
-73 82 15.652476
-73 83 42.190046
-73 84 42.801869
-73 85 36.496575
-73 86 42.000000
-73 87 58.694122
-73 88 65.436993
-73 89 39.623226
-73 90 60.133186
-73 91 31.622777
-73 92 26.925824
-73 93 24.166092
-73 94 13.152946
-73 95 18.027756
-73 96 28.861739
-73 97 13.601471
-73 98 75.432089
-73 99 39.217343
-73 100 47.634021
-73 101 32.062439
-74 1 39.293765
-74 2 33.970576
-74 3 25.000000
-74 4 32.015621
-74 5 26.907248
-74 6 30.805844
-74 7 21.931712
-74 8 19.849433
-74 9 23.853721
-74 10 26.248809
-74 11 21.540659
-74 12 20.880613
-74 13 16.155494
-74 14 25.179357
-74 15 15.297059
-74 16 20.000000
-74 17 20.099751
-74 18 15.132746
-74 19 69.202601
-74 20 64.031242
-74 21 60.207973
-74 22 66.850580
-74 23 58.898217
-74 24 65.734314
-74 25 57.628118
-74 26 64.140471
-74 27 97.718985
-74 28 96.301610
-74 29 94.868330
-74 30 91.482239
-74 31 91.082380
-74 32 89.560036
-74 33 90.138782
-74 34 90.077744
-74 35 86.683332
-74 36 69.641941
-74 37 67.779053
-74 38 66.730802
-74 39 63.245553
-74 40 61.351447
-74 41 63.158531
-74 42 57.974132
-74 43 56.648036
-74 44 58.600341
-74 45 57.384667
-74 46 28.425341
-74 47 25.612497
-74 48 15.000000
-74 49 68.007353
-74 50 62.481997
-74 51 74.330344
-74 52 66.400301
-74 53 37.802116
-74 54 20.591260
-74 55 53.000000
-74 56 28.000000
-74 57 54.120237
-74 58 44.821870
-74 59 51.662365
-74 60 40.792156
-74 61 13.000000
-74 62 43.289722
-74 63 67.779053
-74 64 74.625733
-74 65 52.430907
-74 66 38.587563
-74 67 45.276926
-74 68 64.560050
-74 69 38.000000
-74 70 30.083218
-74 71 34.205263
-74 72 63.198101
-74 73 61.204575
-74 75 43.863424
-74 76 55.081757
-74 77 75.286121
-74 78 60.745370
-74 79 7.211103
-74 80 8.944272
-74 81 46.840154
-74 82 47.042534
-74 83 30.232433
-74 84 45.453273
-74 85 63.134776
-74 86 71.344236
-74 87 40.706265
-74 88 37.363083
-74 89 22.090722
-74 90 85.146932
-74 91 37.336309
-74 92 50.328918
-74 93 53.758720
-74 94 59.539903
-74 95 56.293872
-74 96 58.694122
-74 97 53.338541
-74 98 42.047592
-74 99 25.298221
-74 100 34.655447
-74 101 29.832868
-75 1 36.055513
-75 2 65.192024
-75 3 55.036352
-75 4 65.030762
-75 5 60.000000
-75 6 65.000000
-75 7 55.036352
-75 8 55.226805
-75 9 60.207973
-75 10 18.027756
-75 11 22.360680
-75 12 23.323808
-75 13 27.730849
-75 14 21.213203
-75 15 29.154759
-75 16 26.907248
-75 17 28.284271
-75 18 32.015621
-75 19 28.301943
-75 20 24.166092
-75 21 22.561028
-75 22 25.000000
-75 23 20.615528
-75 24 23.430749
-75 25 18.681542
-75 26 21.213203
-75 27 75.663730
-75 28 76.485293
-75 29 72.691127
-75 30 71.589105
-75 31 68.731361
-75 32 69.634761
-75 33 67.742158
-75 34 65.192024
-75 35 66.708320
-75 36 80.212219
-75 37 79.056942
-75 38 76.609399
-75 39 73.239334
-75 40 72.111026
-75 41 76.321688
-75 42 66.850580
-75 43 69.462220
-75 44 73.824115
-75 45 71.196910
-75 46 62.000000
-75 47 60.033324
-75 48 30.805844
-75 49 26.627054
-75 50 23.409400
-75 51 54.120237
-75 52 35.000000
-75 53 11.180340
-75 54 30.000000
-75 55 53.150729
-75 56 41.231056
-75 57 33.541020
-75 58 11.180340
-75 59 11.180340
-75 60 10.000000
-75 61 40.311289
-75 62 51.478151
-75 63 47.434165
-75 64 45.000000
-75 65 26.925824
-75 66 25.000000
-75 67 27.018512
-75 68 49.193496
-75 69 44.721360
-75 70 33.837849
-75 71 51.244512
-75 72 57.008771
-75 73 62.241465
-75 74 43.863424
-75 76 21.213203
-75 77 40.792156
-75 78 17.262677
-75 79 37.947332
-75 80 50.000000
-75 81 38.183766
-75 82 47.801674
-75 83 24.041631
-75 84 20.248457
-75 85 38.078866
-75 86 43.104524
-75 87 4.123106
-75 88 8.944272
-75 89 38.209946
-75 90 49.335586
-75 91 31.906112
-75 92 36.400549
-75 93 40.224371
-75 94 52.009614
-75 95 46.400431
-75 96 39.812058
-75 97 48.795492
-75 98 16.124515
-75 99 32.557641
-75 100 16.155494
-75 101 48.270074
-76 1 57.008771
-76 2 82.462113
-76 3 72.034714
-76 4 81.786307
-76 5 76.485293
-76 6 81.394103
-76 7 71.196910
-76 8 70.710678
-76 9 75.663730
-76 10 30.413813
-76 11 35.355339
-76 12 35.128336
-76 13 40.112342
-76 14 30.000000
-76 15 40.000000
-76 16 35.128336
-76 17 35.355339
-76 18 40.311289
-76 19 39.000000
-76 20 37.336309
-76 21 38.327536
-76 22 35.000000
-76 23 36.400549
-76 24 33.000000
-76 25 34.481879
-76 26 30.000000
-76 27 93.407708
-76 28 94.868330
-76 29 90.520716
-76 30 90.138782
-76 31 86.683332
-76 32 88.255311
-76 33 85.726309
-76 34 82.462113
-76 35 85.440037
-76 36 101.212647
-76 37 100.000000
-76 38 97.616597
-76 39 94.201911
-76 40 93.005376
-76 41 97.082439
-76 42 87.800911
-76 43 90.138782
-76 44 94.339811
-76 45 91.809586
-76 46 78.447435
-76 47 76.118329
-76 48 40.112342
-76 49 37.000000
-76 50 37.656341
-76 51 73.409809
-76 52 52.201533
-76 53 32.015621
-76 54 47.434165
-76 55 74.330344
-76 56 60.415230
-76 57 54.083269
-76 58 32.015621
-76 59 11.180340
-76 60 15.811388
-76 61 55.901699
-76 62 72.111026
-76 63 67.082039
-76 64 61.846584
-76 65 47.169906
-76 66 46.097722
-76 67 48.166378
-76 68 69.641941
-76 69 65.192024
-76 70 53.712196
-76 71 70.682388
-76 72 78.102497
-76 73 83.450584
-76 74 55.081757
-76 75 21.213203
-76 77 55.443665
-76 78 18.110770
-76 79 51.088159
-76 80 63.007936
-76 81 59.396970
-76 82 68.883960
-76 83 43.908997
-76 84 41.231056
-76 85 57.271284
-76 86 60.728906
-76 87 24.839485
-76 88 20.248457
-76 89 56.302753
-76 90 62.000000
-76 91 52.801515
-76 92 57.489129
-76 93 61.220911
-76 94 73.109507
-76 95 67.475922
-76 96 60.207973
-76 97 70.007142
-76 98 13.038405
-76 99 51.478151
-76 100 36.619667
-76 101 67.230945
-77 1 42.941821
-77 2 80.956779
-77 3 73.573093
-77 4 82.298238
-77 5 78.892332
-77 6 83.240615
-77 7 75.716577
-77 8 77.420927
-77 9 81.541401
-77 10 55.036352
-77 11 57.306195
-77 12 59.059292
-77 13 61.587336
-77 14 59.615434
-77 15 64.140471
-77 16 64.404969
-77 17 66.211781
-77 18 68.476273
-77 19 17.464249
-77 20 18.110770
-77 21 18.248288
-77 22 21.189620
-77 23 20.223748
-77 24 23.086793
-77 25 22.203603
-77 26 25.961510
-77 27 39.357337
-77 28 41.880783
-77 29 36.715120
-77 30 37.802116
-77 31 33.286634
-77 32 36.235342
-77 33 32.449961
-77 34 28.178006
-77 35 33.970576
-77 36 73.334848
-77 37 73.171033
-77 38 70.178344
-77 39 68.029405
-77 40 68.000000
-77 41 73.000000
-77 42 63.031738
-77 43 68.183576
-77 44 73.171033
-77 45 70.178344
-77 46 80.622577
-77 47 79.924965
-77 48 66.730802
-77 49 19.313208
-77 50 18.000000
-77 51 25.942244
-77 52 9.433981
-77 53 39.357337
-77 54 55.172457
-77 55 48.259714
-77 56 56.603887
-77 57 25.079872
-77 58 32.695565
-77 59 45.044423
-77 60 50.635956
-77 61 65.795137
-77 62 55.081757
-77 63 23.537205
-77 64 9.433981
-77 65 23.430749
-77 66 37.536649
-77 67 31.400637
-77 68 30.265492
-77 69 52.000000
-77 70 49.406477
-77 71 62.241465
-77 72 43.289722
-77 73 53.084838
-77 74 75.286121
-77 75 40.792156
-77 76 55.443665
-77 78 38.078866
-77 79 68.117545
-77 80 77.794601
-77 81 37.336309
-77 82 47.296934
-77 83 45.276926
-77 84 29.832868
-77 85 17.262677
-77 86 11.401754
-77 87 40.804412
-77 88 49.477268
-77 89 58.412327
-77 90 9.899495
-77 91 41.880783
-77 92 31.953091
-77 93 31.780497
-77 94 40.012498
-77 95 36.124784
-77 96 25.317978
-77 97 42.296572
-77 98 56.320511
-77 99 52.497619
-77 100 41.048752
-77 101 62.177166
-78 1 49.979996
-78 2 82.024387
-78 3 72.006944
-78 4 82.006097
-78 5 77.058419
-78 6 82.054860
-78 7 72.173402
-78 8 72.443081
-78 9 77.414469
-78 10 34.539832
-78 11 39.217343
-78 12 39.924930
-78 13 44.598206
-78 14 36.715120
-78 15 45.694639
-78 16 42.544095
-78 17 43.566042
-78 18 47.885280
-78 19 21.095023
-78 20 20.248457
-78 21 22.472205
-78 22 17.117243
-78 23 20.808652
-78 24 15.132746
-78 25 19.209373
-78 26 12.165525
-78 27 76.896034
-78 28 78.790862
-78 29 74.094534
-78 30 74.249579
-78 31 70.384657
-78 32 72.449983
-78 33 69.462220
-78 34 65.787537
-78 35 69.771054
-78 36 93.059121
-78 37 92.130342
-78 38 89.470666
-78 39 86.313383
-78 40 85.428333
-78 41 89.961103
-78 42 80.056230
-78 43 83.384651
-78 44 88.022724
-78 45 85.234969
-78 46 79.056942
-78 47 77.162167
-78 48 46.957428
-78 49 19.104973
-78 50 21.023796
-78 51 58.523500
-78 52 36.235342
-78 53 27.073973
-78 54 47.095647
-78 55 65.368188
-78 56 57.428216
-78 57 41.868843
-78 58 23.086793
-78 59 10.630146
-78 60 21.400935
-78 61 57.558666
-78 62 65.787537
-78 63 52.801515
-78 64 45.310043
-78 65 34.828150
-78 66 38.897301
-78 67 38.470768
-78 68 56.586217
-78 69 59.481089
-78 70 49.648766
-78 71 67.082039
-78 72 66.843100
-78 73 73.783467
-78 74 60.745370
-78 75 17.262677
-78 76 18.110770
-78 77 38.078866
-78 79 55.081757
-78 80 67.186308
-78 81 50.119856
-78 82 60.835845
-78 83 40.199502
-78 84 31.304952
-78 85 42.801869
-78 86 44.721360
-78 87 21.095023
-78 88 23.706539
-78 89 55.009090
-78 90 44.045431
-78 91 46.173586
-78 92 46.872167
-78 93 50.000000
-78 94 62.008064
-78 95 56.400355
-78 96 47.381431
-78 97 60.207973
-78 98 24.207437
-78 99 49.091751
-78 100 32.140317
-78 101 64.498062
-79 1 32.557641
-79 2 33.615473
-79 3 23.600847
-79 4 32.202484
-79 5 26.832816
-79 6 31.384710
-79 7 21.470911
-79 8 20.248457
-79 9 25.000000
-79 10 21.095023
-79 11 16.124515
-79 12 16.000000
-79 13 11.000000
-79 14 21.213203
-79 15 11.401754
-79 16 17.088007
-79 17 17.888544
-79 18 13.601471
-79 19 62.425956
-79 20 57.201399
-79 21 53.263496
-79 22 60.207973
-79 23 52.009614
-79 24 59.169249
-79 25 50.803543
-79 26 57.706152
-79 27 90.801982
-79 28 89.498603
-79 29 87.931792
-79 30 84.646323
-79 31 84.118963
-79 32 82.710338
-79 33 83.168504
-79 34 83.006024
-79 35 79.812280
-79 36 65.741920
-79 37 63.953108
-79 38 62.649820
-79 39 59.093147
-79 40 57.271284
-79 41 59.539903
-79 42 53.488316
-79 43 52.773099
-79 44 55.226805
-79 45 53.712196
-79 46 28.635642
-79 47 26.000000
-79 48 12.529964
-79 49 61.294372
-79 50 55.605755
-79 51 67.357256
-79 52 59.203040
-79 53 31.064449
-79 54 13.416408
-79 55 47.169906
-79 56 22.360680
-79 57 46.957428
-79 58 38.013156
-79 59 46.529560
-79 60 36.055513
-79 61 8.062258
-79 62 38.078866
-79 63 60.745370
-79 64 67.416615
-79 65 45.221676
-79 66 31.384710
-79 67 38.078866
-79 68 57.723479
-79 69 32.249031
-79 70 23.345235
-79 71 29.966648
-79 72 57.008771
-79 73 55.731499
-79 74 7.211103
-79 75 37.947332
-79 76 51.088159
-79 77 68.117545
-79 78 55.081757
-79 80 12.165525
-79 81 40.024992
-79 82 41.048752
-79 83 23.021729
-79 84 38.288379
-79 85 55.946403
-79 86 64.140471
-79 87 34.539832
-79 88 32.249031
-79 89 16.124515
-79 90 77.987178
-79 91 30.364453
-79 92 43.324358
-79 93 46.840154
-79 94 53.150729
-79 95 49.648766
-79 96 51.623638
-79 97 47.042534
-79 98 38.209946
-79 99 18.439089
-79 100 27.658633
-79 101 25.495098
-80 1 38.470768
-80 2 25.495098
-80 3 17.464249
-80 4 23.345235
-80 5 18.439089
-80 6 22.022716
-80 7 13.892444
-80 8 11.401754
-80 9 15.000000
-80 10 33.241540
-80 11 28.284271
-80 12 28.071338
-80 13 23.086793
-80 14 33.015148
-80 15 23.021729
-80 16 28.284271
-80 17 28.635642
-80 18 23.769729
-80 19 73.573093
-80 20 68.264193
-80 21 64.070274
-80 22 71.589105
-80 23 62.968246
-80 24 70.661163
-80 25 61.911227
-80 26 69.354164
-80 27 96.772930
-80 28 94.921020
-80 29 94.021274
-80 30 90.249654
-80 31 90.376988
-80 32 88.391176
-80 33 89.470666
-80 34 89.944427
-80 35 85.615419
-80 36 63.324561
-80 37 61.400326
-80 38 60.638272
-80 39 57.271284
-80 40 55.317267
-80 41 56.612719
-80 42 52.469038
-80 43 50.447993
-80 44 51.865210
-80 45 50.960769
-80 46 19.798990
-80 47 16.970563
-80 48 23.345235
-80 49 72.560320
-80 50 66.573268
-80 51 73.790243
-80 52 68.593003
-80 53 42.485292
-80 54 22.803509
-80 55 49.648766
-80 56 25.298221
-80 57 55.000000
-80 58 49.244289
-80 59 58.694122
-80 60 48.166378
-80 61 12.041595
-80 62 39.115214
-80 63 67.601775
-80 64 76.059187
-80 65 54.451814
-80 66 40.311289
-80 67 46.754679
-80 68 63.560994
-80 69 34.928498
-80 70 29.681644
-80 71 29.017236
-80 72 60.415230
-80 73 57.078893
-80 74 8.944272
-80 75 50.000000
-80 76 63.007936
-80 77 77.794601
-80 78 67.186308
-80 79 12.165525
-80 81 46.065171
-80 82 44.147480
-80 83 32.649655
-80 84 48.270074
-80 85 64.202804
-80 86 72.622311
-80 87 46.486557
-80 88 44.407207
-80 89 20.591260
-80 90 87.692645
-80 91 37.443290
-80 92 50.249378
-80 93 53.235327
-80 94 57.280014
-80 95 54.781384
-80 96 58.830264
-80 97 50.960769
-80 98 50.039984
-80 99 25.612497
-80 100 38.587563
-80 101 25.019992
-81 1 7.615773
-81 2 43.908997
-81 3 37.536649
-81 4 45.486262
-81 5 42.638011
-81 6 46.615448
-81 7 40.311289
-81 8 42.520583
-81 9 45.967380
-81 10 38.897301
-81 11 37.656341
-81 12 39.623226
-81 13 39.051248
-81 14 43.680659
-81 15 42.047592
-81 16 45.541190
-81 17 47.518417
-81 18 47.042534
-81 19 42.107007
-81 20 37.336309
-81 21 32.388269
-81 22 42.579338
-81 23 32.756679
-81 24 42.953463
-81 25 33.241540
-81 26 43.680659
-81 27 50.921508
-81 28 49.477268
-81 29 48.104054
-81 30 44.643029
-81 31 44.384682
-81 32 42.720019
-81 33 43.462628
-81 34 43.908997
-81 35 39.849718
-81 36 42.941821
-81 37 42.047592
-81 38 39.357337
-81 39 36.249138
-81 40 35.468296
-81 41 40.162171
-81 42 30.083218
-81 43 33.955854
-81 44 38.832976
-81 45 35.902646
-81 46 44.204072
-81 47 43.931765
-81 48 45.044423
-81 49 42.296572
-81 50 35.355339
-81 51 27.730849
-81 52 28.160256
-81 53 27.802878
-81 54 27.166155
-81 55 15.264338
-81 56 21.400935
-81 57 12.369317
-81 58 27.802878
-81 59 48.918299
-81 60 45.803930
-81 61 34.539832
-81 62 18.110770
-81 63 21.633308
-81 64 32.449961
-81 65 17.117243
-81 66 13.892444
-81 67 11.661904
-81 68 17.720045
-81 69 14.764823
-81 70 16.763055
-81 71 25.059928
-81 72 19.697716
-81 73 24.083189
-81 74 46.840154
-81 75 38.183766
-81 76 59.396970
-81 77 37.336309
-81 78 50.119856
-81 79 40.024992
-81 80 46.065171
-81 82 11.180340
-81 83 20.396078
-81 84 18.867962
-81 85 20.591260
-81 86 28.844410
-81 87 34.713110
-81 88 41.880783
-81 89 25.495098
-81 90 46.518813
-81 91 10.000000
-81 92 5.385165
-81 93 7.211103
-81 94 14.866069
-81 95 10.049876
-81 96 13.453624
-81 97 10.630146
-81 98 51.865210
-81 99 21.587033
-81 100 24.186773
-81 101 25.612497
-82 1 12.041595
-82 2 36.124784
-82 3 31.906112
-82 4 38.183766
-82 5 36.400549
-82 6 39.623226
-82 7 35.355339
-82 8 38.013156
-82 9 40.496913
-82 10 45.276926
-82 11 42.953463
-82 12 44.777226
-82 13 43.011626
-82 14 49.648766
-82 15 45.880279
-82 16 50.328918
-82 17 52.201533
-82 18 50.695167
-82 19 53.235327
-82 20 48.507731
-82 21 43.566042
-82 22 53.758720
-82 23 43.931765
-82 24 54.129474
-82 25 44.384682
-82 26 54.817880
-82 27 53.851648
-82 28 51.429563
-82 29 51.312766
-82 30 47.010637
-82 31 48.010416
-82 32 45.276926
-82 33 47.201695
-82 34 48.836462
-82 35 42.720019
-82 36 32.449961
-82 37 31.384710
-82 38 28.844410
-82 39 25.553865
-82 40 24.596748
-82 41 29.154759
-82 42 19.235384
-82 43 22.803509
-82 44 27.658633
-82 45 24.738634
-82 46 37.643060
-82 47 38.013156
-82 48 48.764741
-82 49 53.460266
-82 50 46.529560
-82 51 32.526912
-82 52 38.470768
-82 53 36.878178
-82 54 30.083218
-82 55 6.324555
-82 56 19.104973
-82 57 23.021729
-82 58 38.078866
-82 59 58.821765
-82 60 54.451814
-82 61 34.058773
-82 62 8.062258
-82 63 28.017851
-82 64 41.231056
-82 65 28.284271
-82 66 22.803509
-82 67 22.472205
-82 68 21.931712
-82 69 9.219544
-82 70 18.973666
-82 71 17.804494
-82 72 16.278821
-82 73 15.652476
-82 74 47.042534
-82 75 47.801674
-82 76 68.883960
-82 77 47.296934
-82 78 60.835845
-82 79 41.048752
-82 80 44.147480
-82 81 11.180340
-82 83 26.627054
-82 84 29.546573
-82 85 30.083218
-82 86 37.696154
-82 87 44.045431
-82 88 50.249378
-82 89 25.000000
-82 90 55.973208
-82 91 16.278821
-82 92 16.000000
-82 93 15.524175
-82 94 13.416408
-82 95 12.806248
-82 96 22.135944
-82 97 7.211103
-82 98 60.207973
-82 99 23.769729
-82 100 32.526912
-82 101 20.124612
-83 1 14.764823
-83 2 42.047592
-83 3 32.388269
-83 4 42.296572
-83 5 37.656341
-83 6 42.579338
-83 7 33.241540
-83 8 34.176015
-83 9 38.897301
-83 10 18.788294
-83 11 17.262677
-83 12 19.235384
-83 13 19.104973
-83 14 23.409400
-83 15 22.090722
-83 16 25.179357
-83 17 27.166155
-83 18 27.073973
-83 19 41.629317
-83 20 36.249138
-83 21 31.764760
-83 22 40.162171
-83 23 30.870698
-83 24 39.560081
-83 25 30.083218
-83 26 38.832976
-83 27 69.231496
-83 28 68.468971
-83 29 66.287254
-83 30 63.505905
-83 31 62.369865
-83 32 61.522354
-83 33 61.392182
-83 34 60.728906
-83 35 58.549125
-83 36 58.000000
-83 37 56.639209
-83 38 54.451814
-83 39 50.931326
-83 40 49.578221
-83 41 53.413481
-83 42 44.553339
-83 43 46.400431
-83 44 50.477718
-83 45 48.010416
-83 46 39.623226
-83 47 38.078866
-83 48 25.079872
-83 49 40.853396
-83 50 34.438351
-83 51 45.705580
-83 52 36.235342
-83 53 13.152946
-83 54 9.899495
-83 55 32.756679
-83 56 17.262677
-83 57 24.351591
-83 58 18.248288
-83 59 35.114100
-83 60 28.600699
-83 61 20.808652
-83 62 28.425341
-83 63 38.832976
-83 64 44.418465
-83 65 22.203603
-83 66 8.544004
-83 67 15.231546
-83 68 37.013511
-83 69 21.400935
-83 70 9.848858
-83 71 27.202941
-83 72 39.849718
-83 73 42.190046
-83 74 30.232433
-83 75 24.041631
-83 76 43.908997
-83 77 45.276926
-83 78 40.199502
-83 79 23.021729
-83 80 32.649655
-83 81 20.396078
-83 82 26.627054
-83 84 15.620499
-83 85 33.105891
-83 86 41.182521
-83 87 19.924859
-83 88 24.207437
-83 89 15.297059
-83 90 55.172457
-83 91 10.770330
-83 92 22.022716
-83 93 26.000000
-83 94 35.171011
-83 95 30.413813
-83 96 29.614186
-83 97 30.083218
-83 98 33.970576
-83 99 9.055385
-83 100 8.062258
-83 101 24.331050
-84 1 19.235384
-84 2 55.317267
-84 3 46.486557
-84 4 56.044625
-84 5 51.865210
-84 6 56.612719
-84 7 47.927028
-84 8 49.193496
-84 9 53.712196
-84 10 27.294688
-84 11 28.460499
-84 12 30.364453
-84 13 32.202484
-84 14 32.249031
-84 15 34.928498
-84 16 36.138622
-84 17 38.078866
-84 18 39.560081
-84 19 26.925824
-84 20 21.587033
-84 21 16.763055
-84 22 26.172505
-84 23 16.278821
-84 24 26.019224
-84 25 16.031220
-84 26 26.076810
-84 27 58.008620
-84 28 58.137767
-84 29 55.009090
-84 30 53.150729
-84 31 51.009803
-84 32 51.156622
-84 33 50.009999
-84 34 48.373546
-84 35 48.166378
-84 36 61.773781
-84 37 60.827625
-84 38 58.180753
-84 39 55.009090
-84 40 54.129474
-84 41 58.694122
-84 42 48.754487
-84 43 52.201533
-84 44 56.920998
-84 45 54.083269
-84 46 53.758720
-84 47 52.554733
-84 48 37.696154
-84 49 26.476405
-84 50 19.646883
-84 51 35.227830
-84 52 21.095023
-84 53 12.041595
-84 54 25.495098
-84 55 34.132096
-84 56 29.832868
-84 57 13.601471
-84 58 9.219544
-84 59 30.413813
-84 60 29.154759
-84 61 36.400549
-84 62 34.928498
-84 63 28.284271
-84 64 30.083218
-84 65 8.062258
-84 66 9.219544
-84 67 7.211103
-84 68 29.154759
-84 69 29.154759
-84 70 21.840330
-84 71 38.052595
-84 72 36.878178
-84 73 42.801869
-84 74 45.453273
-84 75 20.248457
-84 76 41.231056
-84 77 29.832868
-84 78 31.304952
-84 79 38.288379
-84 80 48.270074
-84 81 18.867962
-84 82 29.546573
-84 83 15.620499
-84 85 20.099751
-84 86 27.202941
-84 87 17.464249
-84 88 25.961510
-84 89 29.966648
-84 90 39.698866
-84 91 16.000000
-84 92 16.278821
-84 93 20.000000
-84 94 31.890437
-84 95 26.248809
-84 96 19.924859
-84 97 29.206164
-84 98 35.468296
-84 99 23.706539
-84 100 11.704700
-84 101 36.496575
-85 1 27.018512
-85 2 64.498062
-85 3 57.801384
-85 4 66.037868
-85 5 63.007936
-85 6 67.119297
-85 7 60.307545
-85 8 62.289646
-85 9 66.068147
-85 10 47.381431
-85 11 48.270074
-85 12 50.219518
-85 13 51.546096
-85 14 52.345009
-85 15 54.405882
-85 16 56.089215
-85 17 58.051701
-85 18 59.203040
-85 19 27.294688
-85 20 24.207437
-85 21 20.518285
-85 22 29.410882
-85 23 22.022716
-85 24 30.610456
-85 25 23.600847
-85 26 32.557641
-85 27 38.013156
-85 28 38.470768
-85 29 35.014283
-85 30 33.541020
-85 31 31.016125
-85 32 31.575307
-85 33 30.016662
-85 34 28.284271
-85 35 28.635642
-85 36 56.885851
-85 37 56.568542
-85 38 53.600373
-85 39 51.244512
-85 40 51.088159
-85 41 56.080300
-85 42 46.010868
-85 43 51.039201
-85 44 56.035703
-85 45 53.037722
-85 46 64.637450
-85 47 64.202804
-85 48 57.280014
-85 49 28.301943
-85 50 22.671568
-85 51 16.155494
-85 52 9.219544
-85 53 32.015621
-85 54 42.544095
-85 55 31.064449
-85 56 41.109610
-85 57 9.219544
-85 58 27.294688
-85 59 46.097722
-85 60 47.853944
-85 61 52.201533
-85 62 37.947332
-85 63 10.000000
-85 64 12.041595
-85 65 12.041595
-85 66 24.596748
-85 67 17.888544
-85 68 14.764823
-85 69 35.355339
-85 70 34.713110
-85 71 45.650849
-85 72 27.202941
-85 73 36.496575
-85 74 63.134776
-85 75 38.078866
-85 76 57.271284
-85 77 17.262677
-85 78 42.801869
-85 79 55.946403
-85 80 64.202804
-85 81 20.591260
-85 82 30.083218
-85 83 33.105891
-85 84 20.099751
-85 86 8.485281
-85 87 36.345564
-85 88 45.276926
-85 89 43.931765
-85 90 26.000000
-85 91 26.907248
-85 92 15.264338
-85 93 14.560220
-85 94 23.345235
-85 95 19.000000
-85 96 8.062258
-85 97 25.079872
-85 98 54.129474
-85 99 38.600518
-85 100 31.575307
-85 101 46.043458
-86 1 35.468296
-86 2 72.718636
-86 3 66.219333
-86 4 74.330344
-86 5 71.400280
-86 6 75.451971
-86 7 68.767725
-86 8 70.767224
-86 9 74.518454
-86 10 54.341513
-86 11 55.659680
-86 12 57.567352
-86 13 59.236813
-86 14 59.228372
-86 15 62.032250
-86 16 63.324561
-86 17 65.253352
-86 18 66.730802
-86 19 26.172505
-86 20 24.698178
-86 21 22.472205
-86 22 29.206164
-86 23 24.351591
-86 24 30.805844
-86 25 26.248809
-86 26 33.286634
-86 27 32.756679
-86 28 34.176015
-86 29 29.832868
-86 30 29.546573
-86 31 25.961510
-86 32 27.730849
-86 33 25.000000
-86 34 22.090722
-86 35 25.059928
-86 36 62.128898
-86 37 62.032250
-86 38 59.033889
-86 39 57.008771
-86 40 57.078893
-86 41 62.072538
-86 42 52.239832
-86 43 57.558666
-86 44 62.513998
-86 45 59.539903
-86 46 73.006849
-86 47 72.622311
-86 48 64.845971
-86 49 27.658633
-86 50 23.706539
-86 51 15.000000
-86 52 8.544004
-86 53 38.639358
-86 54 50.774009
-86 55 37.854986
-86 56 49.578221
-86 57 17.691806
-86 58 33.060551
-86 59 49.729267
-86 60 53.084838
-86 61 60.605280
-86 62 45.694639
-86 63 12.165525
-86 64 3.605551
-86 65 19.313208
-86 66 32.756679
-86 67 26.076810
-86 68 19.026298
-86 69 43.566042
-86 70 43.185646
-86 71 53.851648
-86 72 32.062439
-86 73 42.000000
-86 74 71.344236
-86 75 43.104524
-86 76 60.728906
-86 77 11.401754
-86 78 44.721360
-86 79 64.140471
-86 80 72.622311
-86 81 28.844410
-86 82 37.696154
-86 83 41.182521
-86 84 27.202941
-86 85 8.485281
-86 87 42.011903
-86 88 51.009803
-86 89 52.402290
-86 90 18.439089
-86 91 35.383612
-86 92 23.600847
-86 93 22.360680
-86 94 29.068884
-86 95 25.709920
-86 96 15.652476
-86 97 32.015621
-86 98 59.211485
-86 99 47.010637
-86 100 38.897301
-86 101 54.405882
-87 1 32.202484
-87 2 61.131007
-87 3 51.009803
-87 4 61.008196
-87 5 56.008928
-87 6 61.008196
-87 7 51.088159
-87 8 51.351728
-87 9 56.320511
-87 10 15.556349
-87 11 19.416488
-87 12 20.615528
-87 13 24.698178
-87 14 19.416488
-87 15 26.400758
-87 16 24.839485
-87 17 26.400758
-87 18 29.698485
-87 19 29.832868
-87 20 25.238859
-87 21 22.847319
-87 22 26.870058
-87 23 21.023796
-87 24 25.495098
-87 25 19.235384
-87 26 23.600847
-87 27 74.242845
-87 28 74.813100
-87 29 71.253070
-87 30 69.871310
-87 31 67.268120
-87 32 67.896981
-87 33 66.272166
-87 34 64.007812
-87 35 64.938432
-87 36 76.400262
-87 37 75.213031
-87 38 72.801099
-87 39 69.404611
-87 40 68.242216
-87 41 72.401657
-87 42 63.007936
-87 43 65.513357
-87 44 69.835521
-87 45 67.230945
-87 46 58.008620
-87 47 56.080300
-87 48 28.319605
-87 49 28.319605
-87 50 24.186773
-87 51 52.172790
-87 52 34.234486
-87 53 7.211103
-87 54 26.019224
-87 55 49.517674
-87 56 37.107951
-87 57 31.016125
-87 58 9.055385
-87 59 15.231546
-87 60 11.704700
-87 61 36.496575
-87 62 47.507894
-87 63 45.354162
-87 64 44.181444
-87 65 24.738634
-87 66 21.260292
-87 67 23.853721
-87 68 46.615448
-87 69 40.706265
-87 70 29.732137
-87 71 47.127487
-87 72 53.823787
-87 73 58.694122
-87 74 40.706265
-87 75 4.123106
-87 76 24.839485
-87 77 40.804412
-87 78 21.095023
-87 79 34.539832
-87 80 46.486557
-87 81 34.713110
-87 82 44.045431
-87 83 19.924859
-87 84 17.464249
-87 85 36.345564
-87 86 42.011903
-87 88 9.000000
-87 89 34.132096
-87 90 49.769469
-87 91 28.017851
-87 92 33.286634
-87 93 37.215588
-87 94 48.826222
-87 95 43.266615
-87 96 37.336309
-87 97 45.343136
-87 98 18.027756
-87 99 28.442925
-87 100 12.083046
-87 101 44.147480
-88 1 38.209946
-88 2 62.369865
-88 3 51.971146
-88 4 61.814238
-88 5 56.568542
-88 6 61.522354
-88 7 51.351728
-88 8 51.088159
-88 9 56.080300
-88 10 11.180340
-88 11 16.124515
-88 12 16.492423
-88 13 21.377558
-88 14 13.038405
-88 15 22.135944
-88 16 18.867962
-88 17 20.000000
-88 18 24.186773
-88 19 37.215588
-88 20 33.105891
-88 21 31.320920
-88 22 33.837849
-88 23 29.410882
-88 24 32.202484
-88 25 27.513633
-88 26 29.832868
-88 27 83.216585
-88 28 83.725743
-88 29 80.224684
-88 30 78.771822
-88 31 76.236474
-88 32 76.791927
-88 33 75.239617
-88 34 73.006849
-88 35 73.824115
-88 36 82.134037
-88 37 80.808415
-88 38 78.568442
-88 39 75.073298
-88 40 73.756356
-88 41 77.620873
-88 42 68.680419
-88 43 70.604532
-88 44 74.632433
-88 45 72.201108
-88 46 58.549125
-88 47 56.320511
-88 48 23.259407
-88 49 35.510562
-88 50 32.310989
-88 51 61.000000
-88 52 43.185646
-88 53 14.317821
-88 54 27.202941
-88 55 56.080300
-88 56 40.249224
-88 57 39.560081
-88 58 18.027756
-88 59 14.317821
-88 60 4.472136
-88 61 36.124784
-88 62 52.630789
-88 63 54.129474
-88 64 53.150729
-88 65 33.541020
-88 66 28.017851
-88 67 31.780497
-88 68 55.027266
-88 69 45.607017
-88 70 33.837849
-88 71 50.537115
-88 72 61.400326
-88 73 65.436993
-88 74 37.363083
-88 75 8.944272
-88 76 20.248457
-88 77 49.477268
-88 78 23.706539
-88 79 32.249031
-88 80 44.407207
-88 81 41.880783
-88 82 50.249378
-88 83 24.207437
-88 84 25.961510
-88 85 45.276926
-88 86 51.009803
-88 87 9.000000
-88 89 36.055513
-88 90 58.189346
-88 91 33.970576
-88 92 41.146081
-88 93 45.188494
-88 94 56.435804
-88 95 51.000000
-88 96 45.880279
-88 97 52.430907
-88 98 10.000000
-88 99 31.304952
-88 100 17.804494
-88 101 47.010637
-89 1 17.888544
-89 2 27.018512
-89 3 17.117243
-89 4 27.073973
-89 5 22.360680
-89 6 27.294688
-89 7 18.027756
-89 8 19.235384
-89 9 23.769729
-89 10 26.925824
-89 11 22.803509
-89 12 24.083189
-89 13 20.615528
-89 14 29.832868
-89 15 23.021729
-89 16 28.425341
-89 17 30.000000
-89 18 27.294688
-89 19 56.648036
-89 20 51.264022
-89 21 46.615448
-89 22 55.362442
-89 23 45.880279
-89 24 54.817880
-89 25 45.221676
-89 26 54.129474
-89 27 76.321688
-89 28 74.632433
-89 29 73.539105
-89 30 69.892775
-89 31 69.856997
-89 32 68.007353
-89 33 68.942005
-89 34 69.354164
-89 35 65.192024
-89 36 50.774009
-89 37 49.091751
-89 38 47.507894
-89 39 43.908997
-89 40 42.190046
-89 41 45.000000
-89 42 38.013156
-89 43 38.013156
-89 44 41.109610
-89 45 39.204592
-89 46 24.331050
-89 47 22.803509
-89 48 25.553865
-89 49 55.973208
-89 50 49.396356
-89 51 53.225934
-89 52 49.040799
-89 53 28.017851
-89 54 8.944272
-89 55 31.064449
-89 56 6.324555
-89 57 34.713110
-89 58 33.541020
-89 59 48.836462
-89 60 40.496913
-89 61 9.219544
-89 62 22.135944
-89 63 47.010637
-89 64 55.901699
-89 65 35.000000
-89 66 21.095023
-89 67 27.018512
-89 68 43.081318
-89 69 16.124515
-89 70 9.219544
-89 71 15.556349
-89 72 41.109610
-89 73 39.623226
-89 74 22.090722
-89 75 38.209946
-89 76 56.302753
-89 77 58.412327
-89 78 55.009090
-89 79 16.124515
-89 80 20.591260
-89 81 25.495098
-89 82 25.000000
-89 83 15.297059
-89 84 29.966648
-89 85 43.931765
-89 86 52.402290
-89 87 34.132096
-89 88 36.055513
-89 90 68.249542
-89 91 17.029386
-89 92 29.681644
-89 93 32.649655
-89 94 37.483330
-89 95 34.481879
-89 96 38.275318
-89 97 31.256999
-89 98 44.721360
-89 99 6.324555
-89 100 23.086793
-89 101 11.401754
-90 1 52.478567
-90 2 90.354856
-90 3 83.216585
-90 4 91.787799
-90 5 88.509886
-90 6 92.784697
-90 7 85.445889
-90 8 87.200917
-90 9 91.263355
-90 10 64.412732
-90 11 66.887966
-90 12 68.600292
-90 13 71.281134
-90 14 68.876701
-90 15 73.783467
-90 16 73.824115
-90 17 75.591005
-90 18 78.032045
-90 19 23.000000
-90 20 25.495098
-90 21 26.925824
-90 22 27.000000
-90 23 28.792360
-90 24 29.000000
-90 25 30.675723
-90 26 32.000000
-90 27 37.536649
-90 28 41.036569
-90 29 35.355339
-90 30 37.802116
-90 31 32.649655
-90 32 36.619667
-90 33 32.015621
-90 34 26.907248
-90 35 34.985711
-90 36 80.000000
-90 37 80.024996
-90 38 77.025970
-90 39 75.166482
-90 40 75.325958
-90 41 80.305666
-90 42 70.576200
-90 43 75.953933
-90 44 80.894994
-90 45 77.929455
-90 46 90.210864
-90 47 89.587946
-90 48 76.321688
-90 49 25.000000
-90 50 25.961510
-90 51 30.413813
-90 52 19.209373
-90 53 48.877398
-90 54 65.069194
-90 55 56.293872
-90 56 66.287254
-90 57 34.481879
-90 58 42.059482
-90 59 52.239832
-90 60 58.940648
-90 61 75.690158
-90 62 63.906181
-90 63 30.066593
-90 64 15.132746
-90 65 33.301652
-90 66 47.423623
-90 67 41.231056
-90 68 37.121422
-90 69 61.269895
-90 70 59.203040
-90 71 71.554175
-90 72 50.039984
-90 73 60.133186
-90 74 85.146932
-90 75 49.335586
-90 76 62.000000
-90 77 9.899495
-90 78 44.045431
-90 79 77.987178
-90 80 87.692645
-90 81 46.518813
-90 82 55.973208
-90 83 55.172457
-90 84 39.698866
-90 85 26.000000
-90 86 18.439089
-90 87 49.769469
-90 88 58.189346
-90 89 68.249542
-90 91 51.613952
-90 92 41.146081
-90 93 40.496913
-90 94 47.381431
-90 95 44.147480
-90 96 33.837849
-90 97 50.447993
-90 98 64.327288
-90 99 62.369865
-90 100 50.803543
-90 101 71.693793
-91 1 4.242641
-91 2 39.849718
-91 3 31.764760
-91 4 40.853396
-91 5 37.121422
-91 6 41.629317
-91 7 33.837849
-91 8 35.608988
-91 9 39.661064
-91 10 29.546573
-91 11 27.892651
-91 12 29.832868
-91 13 29.068884
-91 14 34.176015
-91 15 32.062439
-91 16 35.693137
-91 17 37.656341
-91 18 37.054015
-91 19 42.579338
-91 20 37.336309
-91 21 32.388269
-91 22 42.107007
-91 23 32.140317
-91 24 42.011903
-91 25 32.015621
-91 26 42.047592
-91 27 60.440053
-91 28 59.228372
-91 29 57.567352
-91 30 54.341513
-91 31 53.758720
-91 32 52.392748
-91 33 52.810984
-91 34 52.801515
-91 35 49.477268
-91 36 48.414874
-91 37 47.201695
-91 38 44.821870
-91 39 41.400483
-91 40 40.224371
-91 41 44.418465
-91 42 35.000000
-91 43 37.589892
-91 44 42.047592
-91 45 39.357337
-91 46 38.910153
-91 47 38.078866
-91 48 35.057096
-91 49 42.296572
-91 50 35.355339
-91 51 37.000000
-91 52 32.449961
-91 53 20.808652
-91 54 17.262677
-91 55 22.203603
-91 56 14.764823
-91 57 17.691806
-91 58 23.086793
-91 59 43.046487
-91 60 38.183766
-91 61 25.553865
-91 62 19.697716
-91 63 30.463092
-91 64 38.897301
-91 65 18.788294
-91 66 7.280110
-91 67 10.770330
-91 68 27.459060
-91 69 13.341664
-91 70 7.810250
-91 71 22.090722
-91 72 29.120440
-91 73 31.622777
-91 74 37.336309
-91 75 31.906112
-91 76 52.801515
-91 77 41.880783
-91 78 46.173586
-91 79 30.364453
-91 80 37.443290
-91 81 10.000000
-91 82 16.278821
-91 83 10.770330
-91 84 16.000000
-91 85 26.907248
-91 86 35.383612
-91 87 28.017851
-91 88 33.970576
-91 89 17.029386
-91 90 51.613952
-91 92 13.000000
-91 93 16.492423
-91 94 24.515301
-91 95 20.024984
-91 96 21.470911
-91 97 19.313208
-91 98 43.931765
-91 99 12.083046
-91 100 16.278821
-91 101 20.880613
-92 1 12.041595
-92 2 49.244289
-92 3 42.638011
-92 4 50.774009
-92 5 47.801674
-92 6 51.865210
-92 7 45.276926
-92 8 47.381431
-92 9 50.990195
-92 10 39.623226
-92 11 39.051248
-92 12 41.048752
-92 13 41.109610
-92 14 44.553339
-92 15 44.102154
-92 16 47.042534
-92 17 49.040799
-92 18 49.091751
-92 19 37.336309
-92 20 32.756679
-92 21 27.892651
-92 22 38.078866
-92 23 28.460499
-92 24 38.600518
-92 25 29.154759
-92 26 39.560081
-92 27 47.539457
-92 28 46.529560
-92 29 44.643029
-92 30 41.593269
-92 31 40.804412
-92 32 39.623226
-92 33 39.849718
-92 34 39.812058
-92 35 36.674242
-92 36 46.615448
-92 37 45.880279
-92 38 43.081318
-92 39 40.162171
-92 40 39.560081
-92 41 44.384682
-92 42 34.205263
-92 43 38.470768
-92 44 43.416587
-92 45 40.447497
-92 46 49.406477
-92 47 49.040799
-92 48 47.095647
-92 49 37.656341
-92 50 30.805844
-92 51 24.041631
-92 52 22.803509
-92 53 26.832816
-92 54 30.083218
-92 55 18.973666
-92 56 26.172505
-92 57 7.071068
-92 58 25.495098
-92 59 46.690470
-92 60 44.777226
-92 61 38.470768
-92 62 23.345235
-92 63 17.464249
-92 64 27.202941
-92 65 12.649111
-92 66 14.142136
-92 67 9.433981
-92 68 15.000000
-92 69 20.124612
-92 70 20.591260
-92 71 30.413813
-92 72 20.615528
-92 73 26.925824
-92 74 50.328918
-92 75 36.400549
-92 76 57.489129
-92 77 31.953091
-92 78 46.872167
-92 79 43.324358
-92 80 50.249378
-92 81 5.385165
-92 82 16.000000
-92 83 22.022716
-92 84 16.278821
-92 85 15.264338
-92 86 23.600847
-92 87 33.286634
-92 88 41.146081
-92 89 29.681644
-92 90 41.146081
-92 91 13.000000
-92 93 4.123106
-92 94 15.620499
-92 95 10.000000
-92 96 8.602325
-92 97 13.416408
-92 98 51.000000
-92 99 25.079872
-92 100 24.041631
-92 101 30.805844
-93 1 14.764823
-93 2 50.477718
-93 3 44.553339
-93 4 52.201533
-93 5 49.578221
-93 6 53.413481
-93 7 47.423623
-93 8 49.678969
-93 9 53.037722
-93 10 43.737855
-93 11 43.104524
-93 12 45.099889
-93 13 45.044423
-93 14 48.662100
-93 15 48.041649
-93 16 51.088159
-93 17 53.084838
-93 18 53.037722
-93 19 39.051248
-93 20 34.785054
-93 21 30.083218
-93 22 40.162171
-93 23 30.870698
-93 24 40.853396
-93 25 31.764760
-93 26 42.047592
-93 27 43.965896
-93 28 42.755117
-93 29 41.109610
-93 30 37.854986
-93 31 37.336309
-93 32 35.902646
-93 33 36.400549
-93 34 36.715120
-93 35 32.984845
-93 36 44.271887
-93 37 43.680659
-93 38 40.804412
-93 39 38.078866
-93 40 37.656341
-93 41 42.579338
-93 42 32.388269
-93 43 37.054015
-93 44 42.047592
-93 45 39.051248
-93 46 51.088159
-93 47 50.931326
-93 48 51.039201
-93 49 39.560081
-93 50 32.893768
-93 51 20.615528
-93 52 23.086793
-93 53 30.870698
-93 54 33.734256
-93 55 17.117243
-93 56 28.600699
-93 57 8.544004
-93 58 29.206164
-93 59 50.328918
-93 60 48.764741
-93 61 41.629317
-93 62 23.409400
-93 63 14.422205
-93 64 25.942244
-93 65 15.264338
-93 66 18.248288
-93 67 13.416408
-93 68 11.045361
-93 69 21.400935
-93 70 23.769729
-93 71 31.622777
-93 72 16.970563
-93 73 24.166092
-93 74 53.758720
-93 75 40.224371
-93 76 61.220911
-93 77 31.780497
-93 78 50.000000
-93 79 46.840154
-93 80 53.235327
-93 81 7.211103
-93 82 15.524175
-93 83 26.000000
-93 84 20.000000
-93 85 14.560220
-93 86 22.360680
-93 87 37.215588
-93 88 45.188494
-93 89 32.649655
-93 90 40.496913
-93 91 16.492423
-93 92 4.123106
-93 94 12.041595
-93 95 6.403124
-93 96 6.708204
-93 97 11.180340
-93 98 55.009090
-93 99 28.460499
-93 100 28.160256
-93 101 32.557641
-94 1 21.095023
-94 2 48.836462
-94 3 45.276926
-94 4 51.088159
-94 5 49.648766
-94 6 52.630789
-94 7 48.764741
-94 8 51.429563
-94 9 53.851648
-94 10 53.758720
-94 11 52.392748
-94 12 54.341513
-94 13 53.460266
-94 14 58.523500
-94 15 56.435804
-94 16 60.207973
-94 17 62.169124
-94 18 61.400326
-94 19 49.979996
-94 20 46.097722
-94 21 41.593269
-94 22 51.478151
-94 23 42.544095
-94 24 52.325902
-94 25 43.566042
-94 26 53.712196
-94 27 40.496913
-94 28 38.013156
-94 29 38.013156
-94 30 33.615473
-94 31 34.828150
-94 32 31.906112
-94 33 34.058773
-94 34 36.124784
-94 35 29.410882
-94 36 33.541020
-94 37 33.241540
-94 38 30.265492
-94 39 28.017851
-94 40 28.017851
-94 41 33.015148
-94 42 23.194827
-94 43 28.635642
-94 44 33.541020
-94 45 30.594117
-94 46 50.803543
-94 47 51.312766
-94 48 59.413803
-94 49 50.695167
-94 50 44.283180
-94 51 20.248457
-94 52 32.557641
-94 53 42.190046
-94 54 41.048752
-94 55 10.000000
-94 56 32.015621
-94 57 20.248457
-94 58 41.109610
-94 59 62.289646
-94 60 60.207973
-94 61 46.690470
-94 62 20.615528
-94 63 17.464249
-94 64 32.249031
-94 65 27.202941
-94 66 28.635642
-94 67 25.000000
-94 68 10.440307
-94 69 22.472205
-94 70 30.000000
-94 71 31.064449
-94 72 5.000000
-94 73 13.152946
-94 74 59.539903
-94 75 52.009614
-94 76 73.109507
-94 77 40.012498
-94 78 62.008064
-94 79 53.150729
-94 80 57.280014
-94 81 14.866069
-94 82 13.416408
-94 83 35.171011
-94 84 31.890437
-94 85 23.345235
-94 86 29.068884
-94 87 48.826222
-94 88 56.435804
-94 89 37.483330
-94 90 47.381431
-94 91 24.515301
-94 92 15.620499
-94 93 12.041595
-94 95 5.656854
-94 96 15.811388
-94 97 6.324555
-94 98 66.370174
-94 99 35.000000
-94 100 38.910153
-94 101 33.541020
-95 1 17.117243
-95 2 48.918299
-95 3 44.204072
-95 4 50.931326
-95 5 48.918299
-95 6 52.325902
-95 7 47.434165
-95 8 49.929951
-95 9 52.801515
-95 10 48.764741
-95 11 47.675990
-95 12 49.648766
-95 13 49.091751
-95 14 53.600373
-95 15 52.086467
-95 16 55.578773
-95 17 57.558666
-95 18 57.078893
-95 19 44.922155
-95 20 40.853396
-95 21 36.249138
-95 22 46.238512
-95 23 37.121422
-95 24 47.010637
-95 25 38.078866
-95 26 48.301139
-95 27 42.047592
-95 28 40.162171
-95 29 39.357337
-95 30 35.468296
-95 31 35.846897
-95 32 33.615473
-95 33 34.985711
-95 34 36.235342
-95 35 30.870698
-95 36 38.327536
-95 37 37.854986
-95 38 34.928498
-95 39 32.388269
-95 40 32.140317
-95 41 37.121422
-95 42 27.018512
-95 43 32.062439
-95 44 37.054015
-95 45 34.058773
-95 46 50.249378
-95 47 50.447993
-95 48 55.081757
-95 49 45.541190
-95 50 39.000000
-95 51 19.849433
-95 52 28.071338
-95 53 36.715120
-95 54 37.054015
-95 55 12.165525
-95 56 29.546573
-95 57 14.764823
-95 58 35.468296
-95 59 56.639209
-95 60 54.708317
-95 61 43.680659
-95 62 20.808652
-95 63 15.264338
-95 64 29.120440
-95 65 21.633308
-95 66 23.409400
-95 67 19.416488
-95 68 9.219544
-95 69 20.808652
-95 70 26.305893
-95 71 30.413813
-95 72 10.630146
-95 73 18.027756
-95 74 56.293872
-95 75 46.400431
-95 76 67.475922
-95 77 36.124784
-95 78 56.400355
-95 79 49.648766
-95 80 54.781384
-95 81 10.049876
-95 82 12.806248
-95 83 30.413813
-95 84 26.248809
-95 85 19.000000
-95 86 25.709920
-95 87 43.266615
-95 88 51.000000
-95 89 34.481879
-95 90 44.147480
-95 91 20.024984
-95 92 10.000000
-95 93 6.403124
-95 94 5.656854
-95 96 11.045361
-95 97 6.324555
-95 98 60.901560
-95 99 31.256999
-95 100 33.615473
-95 101 32.202484
-96 1 20.615528
-96 2 57.140179
-96 3 50.990195
-96 4 58.821765
-96 5 56.080300
-96 6 60.000000
-96 7 53.740115
-96 8 55.901699
-96 9 59.413803
-96 10 46.043458
-96 11 46.097722
-96 12 48.093659
-96 13 48.662100
-96 14 51.039201
-96 15 51.623638
-96 16 54.083269
-96 17 56.080300
-96 18 56.568542
-96 19 34.176015
-96 20 30.413813
-96 21 26.076810
-96 22 35.777088
-96 23 27.202941
-96 24 36.715120
-96 25 28.425341
-96 26 38.275318
-96 27 39.623226
-96 28 39.051248
-96 29 36.674242
-96 30 34.058773
-96 31 32.756679
-96 32 32.062439
-96 33 31.780497
-96 34 31.384710
-96 35 29.068884
-96 36 49.244289
-96 37 48.836462
-96 38 45.891176
-96 39 43.416587
-96 40 43.185646
-96 41 48.166378
-96 42 38.052595
-96 43 43.011626
-96 44 48.010416
-96 45 45.011110
-96 46 57.628118
-96 47 57.384667
-96 48 54.589376
-96 49 34.928498
-96 50 28.653098
-96 51 16.124515
-96 52 17.029386
-96 53 31.780497
-96 54 38.275318
-96 55 23.021729
-96 56 34.713110
-96 57 6.324555
-96 58 28.635642
-96 59 49.091751
-96 60 49.040799
-96 61 47.010637
-96 62 30.083218
-96 63 9.219544
-96 64 19.235384
-96 65 13.038405
-96 66 21.213203
-96 67 15.000000
-96 68 9.433981
-96 69 28.017851
-96 70 29.154759
-96 71 38.275318
-96 72 20.124612
-96 73 28.861739
-96 74 58.694122
-96 75 39.812058
-96 76 60.207973
-96 77 25.317978
-96 78 47.381431
-96 79 51.623638
-96 80 58.830264
-96 81 13.453624
-96 82 22.135944
-96 83 29.614186
-96 84 19.924859
-96 85 8.062258
-96 86 15.652476
-96 87 37.336309
-96 88 45.880279
-96 89 38.275318
-96 90 33.837849
-96 91 21.470911
-96 92 8.602325
-96 93 6.708204
-96 94 15.811388
-96 95 11.045361
-96 97 17.029386
-96 98 55.362442
-96 99 33.541020
-96 100 30.066593
-96 101 39.051248
-97 1 15.524175
-97 2 43.139309
-97 3 39.115214
-97 4 45.276926
-97 5 43.600459
-97 6 46.754679
-97 7 42.544095
-97 8 45.177428
-97 9 47.707442
-97 10 48.846699
-97 11 47.127487
-97 12 49.040799
-97 13 47.853944
-97 14 53.488316
-97 15 50.803543
-97 16 54.817880
-97 17 56.753854
-97 18 55.731499
-97 19 50.219518
-97 20 45.880279
-97 21 41.109610
-97 22 51.244512
-97 23 41.785165
-97 24 51.865210
-97 25 42.544095
-97 26 52.924474
-97 27 46.647615
-97 28 44.283180
-97 29 44.102154
-97 30 39.824616
-97 31 40.804412
-97 32 38.078866
-97 33 40.000000
-97 34 41.725292
-97 35 35.510562
-97 36 33.241540
-97 37 32.572995
-97 38 29.732137
-97 39 26.925824
-97 40 26.476405
-97 41 31.400637
-97 42 21.213203
-97 43 26.000000
-97 44 31.000000
-97 45 28.000000
-97 46 44.821870
-97 47 45.221676
-97 48 53.758720
-97 49 50.695167
-97 50 43.965896
-97 51 25.495098
-97 52 34.000000
-97 53 38.418745
-97 54 35.227830
-97 55 6.000000
-97 56 25.709920
-97 57 19.646883
-97 58 38.288379
-97 59 59.464275
-97 60 56.400355
-97 61 40.447497
-97 62 14.866069
-97 63 21.470911
-97 64 35.440090
-97 65 26.000000
-97 66 24.413111
-97 67 22.022716
-97 68 15.000000
-97 69 16.155494
-97 70 24.083189
-97 71 25.000000
-97 72 10.049876
-97 73 13.601471
-97 74 53.338541
-97 75 48.795492
-97 76 70.007142
-97 77 42.296572
-97 78 60.207973
-97 79 47.042534
-97 80 50.960769
-97 81 10.630146
-97 82 7.211103
-97 83 30.083218
-97 84 29.206164
-97 85 25.079872
-97 86 32.015621
-97 87 45.343136
-97 88 52.430907
-97 89 31.256999
-97 90 50.447993
-97 91 19.313208
-97 92 13.416408
-97 93 11.180340
-97 94 6.324555
-97 95 6.324555
-97 96 17.029386
-97 98 62.425956
-97 99 29.068884
-97 100 34.669872
-97 101 27.294688
-98 1 48.166378
-98 2 70.213959
-98 3 59.774577
-98 4 69.375788
-98 5 64.031242
-98 6 68.883960
-98 7 58.694122
-98 8 58.051701
-98 9 62.968246
-98 10 18.027756
-98 11 22.803509
-98 12 22.360680
-98 13 27.294688
-98 14 17.029386
-98 15 27.018512
-98 16 22.090722
-98 17 22.360680
-98 18 27.294688
-98 19 42.059482
-98 20 38.832976
-98 21 38.118237
-98 22 38.275318
-98 23 36.124784
-98 24 36.400549
-98 25 34.132096
-98 26 33.615473
-98 27 91.787799
-98 28 92.574294
-98 29 88.814413
-98 30 87.664132
-98 31 84.852814
-98 32 85.702975
-98 33 83.862983
-98 34 81.301906
-98 35 82.764727
-98 36 91.967386
-98 37 90.609050
-98 38 88.413800
-98 39 84.899941
-98 40 83.546394
-98 41 87.321246
-98 42 78.517514
-98 43 80.280757
-98 44 84.202138
-98 45 81.835200
-98 46 65.969690
-98 47 63.560994
-98 48 27.073973
-98 49 40.162171
-98 50 38.470768
-98 51 70.092796
-98 52 51.039201
-98 53 24.186773
-98 54 35.777088
-98 55 66.068147
-98 56 49.396356
-98 57 49.040799
-98 58 26.925824
-98 59 13.601471
-98 60 6.324555
-98 61 43.416587
-98 62 62.369865
-98 63 63.324561
-98 64 61.032778
-98 65 42.720019
-98 66 38.013156
-98 67 41.593269
-98 68 64.621978
-98 69 55.317267
-98 70 43.416587
-98 71 59.682493
-98 72 71.344236
-98 73 75.432089
-98 74 42.047592
-98 75 16.124515
-98 76 13.038405
-98 77 56.320511
-98 78 24.207437
-98 79 38.209946
-98 80 50.039984
-98 81 51.865210
-98 82 60.207973
-98 83 33.970576
-98 84 35.468296
-98 85 54.129474
-98 86 59.211485
-98 87 18.027756
-98 88 10.000000
-98 89 44.721360
-98 90 64.327288
-98 91 43.931765
-98 92 51.000000
-98 93 55.009090
-98 94 66.370174
-98 95 60.901560
-98 96 55.362442
-98 97 62.425956
-98 99 40.496913
-98 100 27.802878
-98 101 55.946403
-99 1 14.142136
-99 2 33.015148
-99 3 23.345235
-99 4 33.241540
-99 5 28.635642
-99 6 33.541020
-99 7 24.351591
-99 8 25.495098
-99 9 30.083218
-99 10 23.345235
-99 11 20.000000
-99 12 21.633308
-99 13 19.313208
-99 14 27.018512
-99 15 22.135944
-99 16 26.832816
-99 17 28.635642
-99 18 26.925824
-99 19 50.328918
-99 20 44.944410
-99 21 40.311289
-99 22 49.040799
-99 23 39.560081
-99 24 48.507731
-99 25 38.897301
-99 26 47.853944
-99 27 72.422372
-99 28 71.063352
-99 29 69.570109
-99 30 66.219333
-99 31 65.787537
-99 32 64.288413
-99 33 64.845971
-99 34 64.884513
-99 35 61.400326
-99 36 52.630789
-99 37 51.088159
-99 38 49.203658
-99 39 45.607017
-99 40 44.045431
-99 41 47.381431
-99 42 39.408121
-99 43 40.311289
-99 44 43.931765
-99 45 41.725292
-99 46 30.594117
-99 47 29.120440
-99 48 25.000000
-99 49 49.648766
-99 50 43.081318
-99 51 49.040799
-99 52 43.185646
-99 53 22.022716
-99 54 6.324555
-99 55 30.083218
-99 56 8.944272
-99 57 29.410882
-99 58 27.294688
-99 59 43.416587
-99 60 35.777088
-99 61 13.601471
-99 62 23.021729
-99 63 42.544095
-99 64 50.447993
-99 65 29.068884
-99 66 15.000000
-99 67 21.213203
-99 68 39.293765
-99 69 16.124515
-99 70 5.000000
-99 71 19.235384
-99 72 39.115214
-99 73 39.217343
-99 74 25.298221
-99 75 32.557641
-99 76 51.478151
-99 77 52.497619
-99 78 49.091751
-99 79 18.439089
-99 80 25.612497
-99 81 21.587033
-99 82 23.769729
-99 83 9.055385
-99 84 23.706539
-99 85 38.600518
-99 86 47.010637
-99 87 28.442925
-99 88 31.304952
-99 89 6.324555
-99 90 62.369865
-99 91 12.083046
-99 92 25.079872
-99 93 28.460499
-99 94 35.000000
-99 95 31.256999
-99 96 33.541020
-99 97 29.068884
-99 98 40.496913
-99 100 17.000000
-99 101 15.811388
-100 1 20.518285
-100 2 50.009999
-100 3 40.199502
-100 4 50.159745
-100 5 45.398238
-100 6 50.358713
-100 7 40.792156
-100 8 41.484937
-100 9 46.324939
-100 10 16.000000
-100 11 16.763055
-100 12 18.681542
-100 13 20.591260
-100 14 21.000000
-100 15 23.259407
-100 16 24.515301
-100 17 26.476405
-100 18 27.856777
-100 19 34.985711
-100 20 29.681644
-100 21 25.612497
-100 22 33.105891
-100 23 24.413111
-100 24 32.310989
-100 25 23.323808
-100 26 31.320920
-100 27 69.180922
-100 28 69.000000
-100 29 66.189123
-100 30 64.000000
-100 31 62.201286
-100 32 62.000000
-100 33 61.204575
-100 34 59.841457
-100 35 59.000000
-100 36 64.660653
-100 37 63.411355
-100 38 61.073726
-100 39 57.628118
-100 40 56.400355
-100 41 60.464866
-100 42 51.224994
-100 43 53.535035
-100 44 57.801384
-100 45 55.226805
-100 46 47.381431
-100 47 45.705580
-100 48 26.000000
-100 49 34.000000
-100 50 28.017851
-100 51 46.000000
-100 52 32.649655
-100 53 5.099020
-100 54 16.155494
-100 55 38.288379
-100 56 25.317978
-100 57 24.000000
-100 58 10.770330
-100 59 27.313001
-100 60 21.931712
-100 61 27.313001
-100 62 35.510562
-100 63 39.000000
-100 64 41.785165
-100 65 19.646883
-100 66 10.295630
-100 67 15.132746
-100 68 38.639358
-100 69 28.653098
-100 70 17.720045
-100 71 35.171011
-100 72 43.829214
-100 73 47.634021
-100 74 34.655447
-100 75 16.155494
-100 76 36.619667
-100 77 41.048752
-100 78 32.140317
-100 79 27.658633
-100 80 38.587563
-100 81 24.186773
-100 82 32.526912
-100 83 8.062258
-100 84 11.704700
-100 85 31.575307
-100 86 38.897301
-100 87 12.083046
-100 88 17.804494
-100 89 23.086793
-100 90 50.803543
-100 91 16.278821
-100 92 24.041631
-100 93 28.160256
-100 94 38.910153
-100 95 33.615473
-100 96 30.066593
-100 97 34.669872
-100 98 27.802878
-100 99 17.000000
-100 101 32.388269
-101 1 19.235384
-101 2 18.973666
-101 3 12.041595
-101 4 20.124612
-101 5 17.029386
-101 6 21.095023
-101 7 15.264338
-101 8 17.888544
-101 9 20.615528
-101 10 38.275318
-101 11 34.205263
-101 12 35.468296
-101 13 31.827661
-101 14 41.231056
-101 15 34.058773
-101 16 39.623226
-101 17 41.109610
-101 18 38.013156
-101 19 63.348244
-101 20 58.051701
-101 21 53.150729
-101 22 62.649820
-101 23 52.773099
-101 24 62.393910
-101 25 52.469038
-101 26 62.128898
-101 27 73.925638
-101 28 71.554175
-101 29 71.344236
-101 30 67.119297
-101 31 67.955868
-101 32 65.368188
-101 33 67.119297
-101 34 68.410526
-101 35 62.769419
-101 36 40.249224
-101 37 38.470768
-101 38 37.161808
-101 39 33.615473
-101 40 31.780497
-101 41 34.132096
-101 42 28.160256
-101 43 27.294688
-101 44 30.000000
-101 45 28.301943
-101 46 18.601075
-101 47 18.384776
-101 48 36.400549
-101 49 62.968246
-101 50 56.089215
-101 51 52.009614
-101 52 52.773099
-101 53 37.483330
-101 54 20.248457
-101 55 25.000000
-101 56 7.071068
-101 57 37.215588
-101 58 42.011903
-101 59 59.203040
-101 60 51.478151
-101 61 17.464249
-101 62 14.142136
-101 63 46.690470
-101 64 58.008620
-101 65 39.560081
-101 66 27.294688
-101 67 31.622777
-101 68 41.400483
-101 69 11.401754
-101 70 15.000000
-101 71 4.472136
-101 72 36.055513
-101 73 32.062439
-101 74 29.832868
-101 75 48.270074
-101 76 67.230945
-101 77 62.177166
-101 78 64.498062
-101 79 25.495098
-101 80 25.019992
-101 81 25.612497
-101 82 20.124612
-101 83 24.331050
-101 84 36.496575
-101 85 46.043458
-101 86 54.405882
-101 87 44.147480
-101 88 47.010637
-101 89 11.401754
-101 90 71.693793
-101 91 20.880613
-101 92 30.805844
-101 93 32.557641
-101 94 33.541020
-101 95 32.202484
-101 96 39.051248
-101 97 27.294688
-101 98 55.946403
-101 99 15.811388
-101 100 32.388269
+1 2 38.078866
+1 3 30.805844
+1 4 39.357337
+1 5 36.055513
+1 6 40.311289
+1 7 33.301652
+1 8 35.355339
+1 9 39.051248
+1 10 33.541020
+1 11 31.622777
+1 12 33.526109
+1 13 32.388269
+1 14 38.078866
+1 15 35.355339
+1 16 39.293765
+1 17 41.231056
+1 18 40.311289
+1 19 45.177428
+1 20 40.049969
+1 21 35.057096
+1 22 45.000000
+1 23 35.000000
+1 24 45.044423
+1 25 35.057096
+1 26 45.276926
+1 27 58.523500
+1 28 57.008771
+1 29 55.713553
+1 30 52.201533
+1 31 52.000000
+1 32 50.289164
+1 33 51.078371
+1 34 51.478151
+1 35 47.434165
+1 36 44.204072
+1 37 43.011626
+1 38 40.607881
+1 39 37.202150
+1 40 36.055513
+1 41 40.311289
+1 42 30.805844
+1 43 33.541020
+1 44 38.078866
+1 45 35.341194
+1 46 37.735925
+1 47 37.202150
+1 48 38.327536
+1 49 45.044423
+1 50 38.052595
+1 51 35.341194
+1 52 33.541020
+1 53 25.000000
+1 54 20.000000
+1 55 18.027756
+1 56 14.142136
+1 57 18.027756
+1 58 26.925824
+1 59 47.169906
+1 60 42.426407
+1 61 26.925824
+1 62 15.811388
+1 63 29.154759
+1 64 39.051248
+1 65 20.615528
+1 66 11.180340
+1 67 13.038405
+1 68 25.298221
+1 69 10.000000
+1 70 9.219544
+1 71 19.646883
+1 72 25.495098
+1 73 27.459060
+1 74 39.293765
+1 75 36.055513
+1 76 57.008771
+1 77 42.941821
+1 78 49.979996
+1 79 32.557641
+1 80 38.470768
+1 81 7.615773
+1 82 12.041595
+1 83 14.764823
+1 84 19.235384
+1 85 27.018512
+1 86 35.468296
+1 87 32.202484
+1 88 38.209946
+1 89 17.888544
+1 90 52.478567
+1 91 4.242641
+1 92 12.041595
+1 93 14.764823
+1 94 21.095023
+1 95 17.117243
+1 96 20.615528
+1 97 15.524175
+1 98 48.166378
+1 99 14.142136
+1 100 20.518285
+1 101 19.235384
+2 1 38.078866
+2 3 10.440307
+2 4 3.000000
+2 5 7.071068
+2 6 5.000000
+2 7 12.206556
+2 8 14.142136
+2 9 11.180340
+2 10 52.201533
+2 11 47.434165
+2 12 48.104054
+2 13 43.462628
+2 14 53.851648
+2 15 44.721360
+2 16 50.537115
+2 17 51.478151
+2 18 47.169906
+2 19 82.225300
+2 20 76.902536
+2 21 72.034714
+2 22 81.394103
+2 23 71.589105
+2 24 81.049368
+2 25 71.196910
+2 26 80.622577
+2 27 89.022469
+2 28 86.023253
+2 29 86.683332
+2 30 82.006097
+2 31 83.630138
+2 32 80.430094
+2 33 82.879430
+2 34 84.852814
+2 35 78.102497
+2 36 42.000000
+2 37 40.000000
+2 38 40.112342
+2 39 37.336309
+2 40 35.355339
+2 41 35.000000
+2 42 34.481879
+2 43 30.413813
+2 44 30.000000
+2 45 30.149627
+2 46 5.830952
+2 47 8.602325
+2 48 46.141088
+2 49 81.786307
+2 50 74.953319
+2 51 68.622154
+2 52 71.589105
+2 53 55.000000
+2 54 35.355339
+2 55 39.051248
+2 56 25.495098
+2 57 55.901699
+2 58 60.207973
+2 59 75.663730
+2 60 66.708320
+2 61 26.925824
+2 62 28.284271
+2 63 64.031242
+2 64 76.321688
+2 65 58.523500
+2 66 46.097722
+2 67 50.596443
+2 68 58.051701
+2 69 29.154759
+2 70 33.541020
+2 71 18.867962
+2 72 50.000000
+2 73 42.941821
+2 74 33.970576
+2 75 65.192024
+2 76 82.462113
+2 77 80.956779
+2 78 82.024387
+2 79 33.615473
+2 80 25.495098
+2 81 43.908997
+2 82 36.124784
+2 83 42.047592
+2 84 55.317267
+2 85 64.498062
+2 86 72.718636
+2 87 61.131007
+2 88 62.369865
+2 89 27.018512
+2 90 90.354856
+2 91 39.849718
+2 92 49.244289
+2 93 50.477718
+2 94 48.836462
+2 95 48.918299
+2 96 57.140179
+2 97 43.139309
+2 98 70.213959
+2 99 33.015148
+2 100 50.009999
+2 101 18.973666
+3 1 30.805844
+3 2 10.440307
+3 4 10.000000
+3 5 5.385165
+3 6 10.198039
+3 7 4.000000
+3 8 7.000000
+3 9 8.602325
+3 10 41.761226
+3 11 37.000000
+3 12 37.696154
+3 13 33.105891
+3 14 43.462628
+3 15 34.481879
+3 16 40.311289
+3 17 41.340053
+3 18 37.202150
+3 19 73.375745
+3 20 68.007353
+3 21 63.245553
+3 22 72.277244
+3 23 62.641839
+3 24 71.805292
+3 25 62.096699
+3 26 71.196910
+3 27 85.755466
+3 28 83.240615
+3 29 83.216585
+3 30 78.892332
+3 31 79.881162
+3 32 77.175126
+3 33 79.056942
+3 34 80.430094
+3 35 74.625733
+3 36 46.097722
+3 37 44.147480
+3 38 43.566042
+3 39 40.311289
+3 40 38.327536
+3 41 39.293765
+3 42 36.000000
+3 43 33.376639
+3 44 34.481879
+3 45 33.734256
+3 46 7.280110
+3 47 6.403124
+3 48 36.055513
+3 49 72.801099
+3 50 66.098411
+3 51 64.031242
+3 52 64.140471
+3 53 45.099889
+3 54 25.079872
+3 55 36.249138
+3 56 17.000000
+3 57 48.826222
+3 58 50.635956
+3 59 65.375837
+3 60 56.293872
+3 61 16.552945
+3 62 25.079872
+3 63 58.728187
+3 64 69.814039
+3 65 50.537115
+3 66 37.336309
+3 67 42.485292
+3 68 53.413481
+3 69 23.430749
+3 70 24.698178
+3 71 14.317821
+3 72 47.423623
+3 73 42.201896
+3 74 25.000000
+3 75 55.036352
+3 76 72.034714
+3 77 73.573093
+3 78 72.006944
+3 79 23.600847
+3 80 17.464249
+3 81 37.536649
+3 82 31.906112
+3 83 32.388269
+3 84 46.486557
+3 85 57.801384
+3 86 66.219333
+3 87 51.009803
+3 88 51.971146
+3 89 17.117243
+3 90 83.216585
+3 91 31.764760
+3 92 42.638011
+3 93 44.553339
+3 94 45.276926
+3 95 44.204072
+3 96 50.990195
+3 97 39.115214
+3 98 59.774577
+3 99 23.345235
+3 100 40.199502
+3 101 12.041595
+4 1 39.357337
+4 2 3.000000
+4 3 10.000000
+4 5 5.385165
+4 6 2.000000
+4 7 10.770330
+4 8 12.206556
+4 9 8.602325
+4 10 51.419841
+4 11 46.572524
+4 12 47.127487
+4 13 42.379240
+4 14 52.810984
+4 15 43.462628
+4 16 49.244289
+4 17 50.089919
+4 18 45.650849
+4 19 82.969874
+4 20 77.620873
+4 21 72.801099
+4 22 82.000000
+4 23 72.277244
+4 24 81.584312
+4 25 71.805292
+4 26 81.049368
+4 27 91.400219
+4 28 88.481637
+4 29 89.022469
+4 30 84.403791
+4 31 85.912746
+4 32 82.800966
+4 33 85.146932
+4 34 87.000000
+4 35 80.430094
+4 36 45.000000
+4 37 43.000000
+4 38 43.104524
+4 39 40.311289
+4 40 38.327536
+4 41 38.000000
+4 42 37.363083
+4 43 33.376639
+4 44 33.000000
+4 45 33.136083
+4 46 3.605551
+4 47 6.403124
+4 48 44.721360
+4 49 82.462113
+4 50 75.690158
+4 51 70.710678
+4 52 72.897188
+4 53 55.081757
+4 54 35.057096
+4 55 41.400483
+4 56 26.248809
+4 57 57.306195
+4 58 60.530984
+4 59 75.325958
+4 60 66.098411
+4 61 25.961510
+4 62 30.479501
+4 63 65.946948
+4 64 77.935871
+4 65 59.615434
+4 66 46.840154
+4 67 51.623638
+4 68 60.108236
+4 69 30.805844
+4 70 34.205263
+4 71 20.615528
+4 72 52.430907
+4 73 45.617979
+4 74 32.015621
+4 75 65.030762
+4 76 81.786307
+4 77 82.298238
+4 78 82.006097
+4 79 32.202484
+4 80 23.345235
+4 81 45.486262
+4 82 38.183766
+4 83 42.296572
+4 84 56.044625
+4 85 66.037868
+4 86 74.330344
+4 87 61.008196
+4 88 61.814238
+4 89 27.073973
+4 90 91.787799
+4 91 40.853396
+4 92 50.774009
+4 93 52.201533
+4 94 51.088159
+4 95 50.931326
+4 96 58.821765
+4 97 45.276926
+4 98 69.375788
+4 99 33.241540
+4 100 50.159745
+4 101 20.124612
+5 1 36.055513
+5 2 7.071068
+5 3 5.385165
+5 4 5.385165
+5 6 5.000000
+5 7 5.385165
+5 8 7.071068
+5 9 5.000000
+5 10 46.097722
+5 11 41.231056
+5 12 41.761226
+5 13 37.000000
+5 14 47.434165
+5 15 38.078866
+5 16 43.863424
+5 17 44.721360
+5 18 40.311289
+5 19 78.746428
+5 20 73.375745
+5 21 68.622154
+5 22 77.620873
+5 23 68.007353
+5 24 77.129761
+5 25 67.446275
+5 26 76.485293
+5 27 90.138782
+5 28 87.464278
+5 29 87.658428
+5 30 83.216585
+5 31 84.403791
+5 32 81.541401
+5 33 83.600239
+5 34 85.146932
+5 35 79.056942
+5 36 47.265209
+5 37 45.276926
+5 38 45.044423
+5 39 42.000000
+5 40 40.000000
+5 41 40.311289
+5 42 38.327536
+5 43 35.000000
+5 44 35.355339
+5 45 35.057096
+5 46 2.000000
+5 47 2.000000
+5 48 39.357337
+5 49 78.160092
+5 50 71.470274
+5 51 68.767725
+5 52 69.462220
+5 53 50.249378
+5 54 30.000000
+5 55 40.311289
+5 56 22.360680
+5 57 54.083269
+5 58 55.901699
+5 59 70.178344
+5 60 60.827625
+5 61 20.615528
+5 62 29.154759
+5 63 63.639610
+5 64 75.000000
+5 65 55.901699
+5 66 42.720019
+5 67 47.853944
+5 68 58.137767
+5 69 28.284271
+5 70 30.083218
+5 71 18.601075
+5 72 51.478151
+5 73 45.541190
+5 74 26.907248
+5 75 60.000000
+5 76 76.485293
+5 77 78.892332
+5 78 77.058419
+5 79 26.832816
+5 80 18.439089
+5 81 42.638011
+5 82 36.400549
+5 83 37.656341
+5 84 51.865210
+5 85 63.007936
+5 86 71.400280
+5 87 56.008928
+5 88 56.568542
+5 89 22.360680
+5 90 88.509886
+5 91 37.121422
+5 92 47.801674
+5 93 49.578221
+5 94 49.648766
+5 95 48.918299
+5 96 56.080300
+5 97 43.600459
+5 98 64.031242
+5 99 28.635642
+5 100 45.398238
+5 101 17.029386
+6 1 40.311289
+6 2 5.000000
+6 3 10.198039
+6 4 2.000000
+6 5 5.000000
+6 7 10.198039
+6 8 11.180340
+6 9 7.071068
+6 10 50.990195
+6 11 46.097722
+6 12 46.572524
+6 13 41.761226
+6 14 52.201533
+6 15 42.720019
+6 16 48.466483
+6 17 49.244289
+6 18 44.721360
+6 19 83.522452
+6 20 78.160092
+6 21 73.375745
+6 22 82.462113
+6 23 72.801099
+6 24 82.000000
+6 25 72.277244
+6 26 81.394103
+6 27 93.005376
+6 28 90.138782
+6 29 90.603532
+6 30 86.023253
+6 31 87.458562
+6 32 84.403791
+6 33 86.683332
+6 34 88.459030
+6 35 82.006097
+6 36 47.000000
+6 37 45.000000
+6 38 45.099889
+6 39 42.296572
+6 40 40.311289
+6 41 40.000000
+6 42 39.293765
+6 43 35.355339
+6 44 35.000000
+6 45 35.128336
+6 46 3.000000
+6 47 5.385165
+6 48 43.863424
+6 49 82.969874
+6 50 76.243032
+6 51 72.138755
+6 52 73.824115
+6 53 55.226805
+6 54 35.000000
+6 55 43.011626
+6 56 26.925824
+6 57 58.309519
+6 58 60.827625
+6 59 75.166482
+6 60 65.764732
+6 61 25.495098
+6 62 32.015621
+6 63 67.268120
+6 64 79.056942
+6 65 60.415230
+6 66 47.434165
+6 67 52.392748
+6 68 61.522354
+6 69 32.015621
+6 70 34.785054
+6 71 21.931712
+6 72 54.083269
+6 73 47.423623
+6 74 30.805844
+6 75 65.000000
+6 76 81.394103
+6 77 83.240615
+6 78 82.054860
+6 79 31.384710
+6 80 22.022716
+6 81 46.615448
+6 82 39.623226
+6 83 42.579338
+6 84 56.612719
+6 85 67.119297
+6 86 75.451971
+6 87 61.008196
+6 88 61.522354
+6 89 27.294688
+6 90 92.784697
+6 91 41.629317
+6 92 51.865210
+6 93 53.413481
+6 94 52.630789
+6 95 52.325902
+6 96 60.000000
+6 97 46.754679
+6 98 68.883960
+6 99 33.541020
+6 100 50.358713
+6 101 21.095023
+7 1 33.301652
+7 2 12.206556
+7 3 4.000000
+7 4 10.770330
+7 5 5.385165
+7 6 10.198039
+7 8 3.000000
+7 9 5.830952
+7 10 40.792156
+7 11 35.902646
+7 12 36.400549
+7 13 31.622777
+7 14 42.059482
+7 15 32.695565
+7 16 38.483763
+7 17 39.357337
+7 18 34.985711
+7 19 74.672619
+7 20 69.289249
+7 21 64.621978
+7 22 73.375745
+7 23 63.906181
+7 24 72.801099
+7 25 63.245553
+7 26 72.034714
+7 27 89.185201
+7 28 86.769810
+7 29 86.608314
+7 30 82.365041
+7 31 83.216585
+7 32 80.622577
+7 33 82.377181
+7 34 83.600239
+7 35 78.032045
+7 36 50.009999
+7 37 48.052055
+7 38 47.518417
+7 39 44.283180
+7 40 42.296572
+7 41 43.174066
+7 42 40.000000
+7 43 37.336309
+7 44 38.327536
+7 45 37.656341
+7 46 7.280110
+7 47 5.000000
+7 48 34.000000
+7 49 74.000000
+7 50 67.416615
+7 51 67.201190
+7 52 66.287254
+7 53 45.541190
+7 54 25.079872
+7 55 39.924930
+7 56 19.209373
+7 57 51.224994
+7 58 51.419841
+7 59 65.069194
+7 60 55.578773
+7 61 15.297059
+7 62 28.792360
+7 63 61.717096
+7 64 72.346389
+7 65 52.478567
+7 66 38.910153
+7 67 44.418465
+7 68 56.612719
+7 69 26.627054
+7 70 26.419690
+7 71 18.027756
+7 72 51.078371
+7 73 46.097722
+7 74 21.931712
+7 75 55.036352
+7 76 71.196910
+7 77 75.716577
+7 78 72.173402
+7 79 21.470911
+7 80 13.892444
+7 81 40.311289
+7 82 35.355339
+7 83 33.241540
+7 84 47.927028
+7 85 60.307545
+7 86 68.767725
+7 87 51.088159
+7 88 51.351728
+7 89 18.027756
+7 90 85.445889
+7 91 33.837849
+7 92 45.276926
+7 93 47.423623
+7 94 48.764741
+7 95 47.434165
+7 96 53.740115
+7 97 42.544095
+7 98 58.694122
+7 99 24.351591
+7 100 40.792156
+7 101 15.264338
+8 1 35.355339
+8 2 14.142136
+8 3 7.000000
+8 4 12.206556
+8 5 7.071068
+8 6 11.180340
+8 7 3.000000
+8 9 5.000000
+8 10 40.311289
+8 11 35.355339
+8 12 35.693137
+8 13 30.805844
+8 14 41.231056
+8 15 31.622777
+8 16 37.336309
+8 17 38.078866
+8 18 33.541020
+8 19 75.769387
+8 20 70.384657
+8 21 65.795137
+8 22 74.330344
+8 23 65.000000
+8 24 73.681748
+8 25 64.257295
+8 26 72.801099
+8 27 91.787799
+8 28 89.442719
+8 29 89.185201
+8 30 85.000000
+8 31 85.755466
+8 32 83.240615
+8 33 84.905830
+8 34 86.023253
+8 35 80.622577
+8 36 52.952809
+8 37 50.990195
+8 38 50.487622
+8 39 47.265209
+8 40 45.276926
+8 41 46.097722
+8 42 43.000000
+8 43 40.311289
+8 44 41.231056
+8 45 40.607881
+8 46 8.602325
+8 47 5.830952
+8 48 32.695565
+8 49 75.026662
+8 50 68.541958
+8 51 69.634761
+8 52 68.007353
+8 53 46.097722
+8 54 25.495098
+8 55 42.720019
+8 56 21.213203
+8 57 53.150729
+8 58 52.201533
+8 59 65.000000
+8 60 55.226805
+8 61 15.000000
+8 62 31.622777
+8 63 64.031242
+8 64 74.330344
+8 65 54.083269
+8 66 40.311289
+8 67 46.043458
+8 68 59.076222
+8 69 29.154759
+8 70 28.017851
+8 71 20.880613
+8 72 53.851648
+8 73 49.030603
+8 74 19.849433
+8 75 55.226805
+8 76 70.710678
+8 77 77.420927
+8 78 72.443081
+8 79 20.248457
+8 80 11.401754
+8 81 42.520583
+8 82 38.013156
+8 83 34.176015
+8 84 49.193496
+8 85 62.289646
+8 86 70.767224
+8 87 51.351728
+8 88 51.088159
+8 89 19.235384
+8 90 87.200917
+8 91 35.608988
+8 92 47.381431
+8 93 49.678969
+8 94 51.429563
+8 95 49.929951
+8 96 55.901699
+8 97 45.177428
+8 98 58.051701
+8 99 25.495098
+8 100 41.484937
+8 101 17.888544
+9 1 39.051248
+9 2 11.180340
+9 3 8.602325
+9 4 8.602325
+9 5 5.000000
+9 6 7.071068
+9 7 5.830952
+9 8 5.000000
+9 10 45.276926
+9 11 40.311289
+9 12 40.607881
+9 13 35.693137
+9 14 46.097722
+9 15 36.400549
+9 16 42.059482
+9 17 42.720019
+9 18 38.078866
+9 19 80.411442
+9 20 75.026662
+9 21 70.384657
+9 22 79.056942
+9 23 69.641941
+9 24 78.447435
+9 25 68.949257
+9 26 77.620873
+9 27 94.339811
+9 28 91.787799
+9 29 91.809586
+9 30 87.464278
+9 31 88.481637
+9 32 85.755466
+9 33 87.658428
+9 34 89.022469
+9 35 83.216585
+9 36 52.239832
+9 37 50.249378
+9 38 50.039984
+9 39 47.000000
+9 40 45.000000
+9 41 45.276926
+9 42 43.289722
+9 43 40.000000
+9 44 40.311289
+9 45 40.049969
+9 46 5.385165
+9 47 3.000000
+9 48 37.336309
+9 49 79.711982
+9 50 73.164199
+9 51 72.622311
+9 52 72.111026
+9 53 50.990195
+9 54 30.413813
+9 55 44.721360
+9 56 25.000000
+9 57 57.008771
+9 58 57.008771
+9 59 70.000000
+9 60 60.207973
+9 61 20.000000
+9 62 33.541020
+9 63 67.268120
+9 64 78.102497
+9 65 58.309519
+9 66 44.721360
+9 67 50.249378
+9 68 62.008064
+9 69 32.015621
+9 70 32.249031
+9 71 22.825424
+9 72 55.901699
+9 73 50.289164
+9 74 23.853721
+9 75 60.207973
+9 76 75.663730
+9 77 81.541401
+9 78 77.414469
+9 79 25.000000
+9 80 15.000000
+9 81 45.967380
+9 82 40.496913
+9 83 38.897301
+9 84 53.712196
+9 85 66.068147
+9 86 74.518454
+9 87 56.320511
+9 88 56.080300
+9 89 23.769729
+9 90 91.263355
+9 91 39.661064
+9 92 50.990195
+9 93 53.037722
+9 94 53.851648
+9 95 52.801515
+9 96 59.413803
+9 97 47.707442
+9 98 62.968246
+9 99 30.083218
+9 100 46.324939
+9 101 20.615528
+10 1 33.541020
+10 2 52.201533
+10 3 41.761226
+10 4 51.419841
+10 5 46.097722
+10 6 50.990195
+10 7 40.792156
+10 8 40.311289
+10 9 45.276926
+10 11 5.000000
+10 12 5.385165
+10 13 10.198039
+10 14 5.000000
+10 15 11.180340
+10 16 9.433981
+10 17 11.180340
+10 18 14.142136
+10 19 45.343136
+10 20 40.607881
+10 21 37.735925
+10 22 42.426407
+10 23 36.055513
+10 24 41.036569
+10 25 34.409301
+10 26 39.051248
+10 27 85.146932
+10 28 85.000000
+10 29 82.152298
+10 30 80.000000
+10 31 78.160092
+10 32 78.000000
+10 33 77.162167
+10 34 75.663730
+10 35 75.000000
+10 36 75.822160
+10 37 74.330344
+10 38 72.346389
+10 39 68.767725
+10 40 67.268120
+10 41 70.710678
+10 42 62.481997
+10 43 63.639610
+10 44 67.268120
+10 45 65.069194
+10 46 48.052055
+10 47 45.705580
+10 48 12.806248
+10 49 43.863424
+10 50 39.408121
+10 51 62.000000
+10 52 47.434165
+10 53 15.811388
+10 54 18.027756
+10 55 51.478151
+10 56 32.015621
+10 57 40.000000
+10 58 22.360680
+10 59 25.495098
+10 60 15.000000
+10 61 25.495098
+10 62 46.097722
+10 63 55.000000
+10 64 57.008771
+10 65 35.355339
+10 66 25.495098
+10 67 31.064449
+10 68 54.451814
+10 69 39.051248
+10 70 27.018512
+10 71 42.201896
+10 72 58.523500
+10 73 60.901560
+10 74 26.248809
+10 75 18.027756
+10 76 30.413813
+10 77 55.036352
+10 78 34.539832
+10 79 21.095023
+10 80 33.241540
+10 81 38.897301
+10 82 45.276926
+10 83 18.788294
+10 84 27.294688
+10 85 47.381431
+10 86 54.341513
+10 87 15.556349
+10 88 11.180340
+10 89 26.925824
+10 90 64.412732
+10 91 29.546573
+10 92 39.623226
+10 93 43.737855
+10 94 53.758720
+10 95 48.764741
+10 96 46.043458
+10 97 48.846699
+10 98 18.027756
+10 99 23.345235
+10 100 16.000000
+10 101 38.275318
+11 1 31.622777
+11 2 47.434165
+11 3 37.000000
+11 4 46.572524
+11 5 41.231056
+11 6 46.097722
+11 7 35.902646
+11 8 35.355339
+11 9 40.311289
+11 10 5.000000
+11 12 2.000000
+11 13 5.385165
+11 14 7.071068
+11 15 7.071068
+11 16 8.000000
+11 17 10.000000
+11 18 11.180340
+11 19 48.795492
+11 20 43.863424
+11 21 40.607881
+11 22 46.097722
+11 23 39.051248
+11 24 44.821870
+11 25 37.536649
+11 26 43.011626
+11 27 85.586214
+11 28 85.146932
+11 29 82.607506
+11 30 80.156098
+11 31 78.638413
+11 32 78.160092
+11 33 77.646635
+11 34 76.485293
+11 35 75.166482
+11 36 72.622311
+11 37 71.063352
+11 38 69.202601
+11 39 65.604878
+11 40 64.031242
+11 41 67.268120
+11 42 59.405387
+11 43 60.207973
+11 44 63.639610
+11 45 61.554854
+11 46 43.174066
+11 47 40.792156
+11 48 9.433981
+11 49 47.423623
+11 50 42.520583
+11 51 62.201286
+11 52 49.244289
+11 53 18.027756
+11 54 14.142136
+11 55 49.244289
+11 56 28.284271
+11 57 40.311289
+11 58 25.000000
+11 59 30.413813
+11 60 20.000000
+11 61 20.615528
+11 62 43.011626
+11 63 55.226805
+11 64 58.523500
+11 65 36.400549
+11 66 25.000000
+11 67 31.144823
+11 68 54.037024
+11 69 36.055513
+11 70 24.186773
+11 71 38.288379
+11 72 57.008771
+11 73 58.600341
+11 74 21.540659
+11 75 22.360680
+11 76 35.355339
+11 77 57.306195
+11 78 39.217343
+11 79 16.124515
+11 80 28.284271
+11 81 37.656341
+11 82 42.953463
+11 83 17.262677
+11 84 28.460499
+11 85 48.270074
+11 86 55.659680
+11 87 19.416488
+11 88 16.124515
+11 89 22.803509
+11 90 66.887966
+11 91 27.892651
+11 92 39.051248
+11 93 43.104524
+11 94 52.392748
+11 95 47.675990
+11 96 46.097722
+11 97 47.127487
+11 98 22.803509
+11 99 20.000000
+11 100 16.763055
+11 101 34.205263
+12 1 33.526109
+12 2 48.104054
+12 3 37.696154
+12 4 47.127487
+12 5 41.761226
+12 6 46.572524
+12 7 36.400549
+12 8 35.693137
+12 9 40.607881
+12 10 5.385165
+12 11 2.000000
+12 13 5.000000
+12 14 5.830952
+12 15 5.830952
+12 16 6.000000
+12 17 8.000000
+12 18 9.433981
+12 19 50.209561
+12 20 45.343136
+12 21 42.201896
+12 22 47.423623
+12 23 40.607881
+12 24 46.097722
+12 25 39.051248
+12 26 44.204072
+12 27 87.572827
+12 28 87.143560
+12 29 84.593144
+12 30 82.152298
+12 31 80.622577
+12 32 80.156098
+12 33 79.630396
+12 34 78.447435
+12 35 77.162167
+12 36 74.202426
+12 37 72.622311
+12 38 70.802542
+12 39 67.201190
+12 40 65.604878
+12 41 68.767725
+12 42 61.032778
+12 43 61.717096
+12 44 65.069194
+12 45 63.031738
+12 46 43.680659
+12 47 41.231056
+12 48 7.810250
+12 49 48.795492
+12 50 44.045431
+12 51 64.195015
+12 52 51.078371
+12 53 19.723083
+12 54 15.620499
+12 55 51.078371
+12 56 29.732137
+12 57 42.296572
+12 58 26.627054
+12 59 30.805844
+12 60 20.099751
+12 61 21.189620
+12 62 44.654227
+12 63 57.218878
+12 64 60.406953
+12 65 38.327536
+12 66 27.000000
+12 67 33.136083
+12 68 56.035703
+12 69 37.735925
+12 70 25.942244
+12 71 39.623226
+12 72 58.940648
+12 73 60.415230
+12 74 20.880613
+12 75 23.323808
+12 76 35.128336
+12 77 59.059292
+12 78 39.924930
+12 79 16.000000
+12 80 28.071338
+12 81 39.623226
+12 82 44.777226
+12 83 19.235384
+12 84 30.364453
+12 85 50.219518
+12 86 57.567352
+12 87 20.615528
+12 88 16.492423
+12 89 24.083189
+12 90 68.600292
+12 91 29.832868
+12 92 41.048752
+12 93 45.099889
+12 94 54.341513
+12 95 49.648766
+12 96 48.093659
+12 97 49.040799
+12 98 22.360680
+12 99 21.633308
+12 100 18.681542
+12 101 35.468296
+13 1 32.388269
+13 2 43.462628
+13 3 33.105891
+13 4 42.379240
+13 5 37.000000
+13 6 41.761226
+13 7 31.622777
+13 8 30.805844
+13 9 35.693137
+13 10 10.198039
+13 11 5.385165
+13 12 5.000000
+13 14 10.440307
+13 15 3.000000
+13 16 7.810250
+13 17 9.433981
+13 18 8.000000
+13 19 53.814496
+13 20 48.795492
+13 21 45.343136
+13 22 51.224994
+13 23 43.863424
+13 24 50.000000
+13 25 42.426407
+13 26 48.259714
+13 27 88.283634
+13 28 87.572827
+13 29 85.328776
+13 30 82.607506
+13 31 81.394103
+13 32 80.622577
+13 33 80.411442
+13 34 79.555012
+13 35 77.646635
+13 36 71.281134
+13 37 69.634761
+13 38 67.955868
+13 39 64.350602
+13 40 62.681736
+13 41 65.604878
+13 42 58.309519
+13 43 58.600341
+13 44 61.717096
+13 45 59.816386
+13 46 38.897301
+13 47 36.400549
+13 48 6.000000
+13 49 52.497619
+13 50 47.381431
+13 51 64.776539
+13 52 53.235327
+13 53 22.671568
+13 54 13.000000
+13 55 49.335586
+13 56 26.627054
+13 57 43.174066
+13 58 29.732137
+13 59 35.693137
+13 60 25.079872
+13 61 16.552945
+13 62 42.059482
+13 63 57.870545
+13 64 62.241465
+13 65 39.924930
+13 66 27.459060
+13 67 33.955854
+13 68 56.080300
+13 69 35.341194
+13 70 24.041631
+13 71 36.124784
+13 72 57.870545
+13 73 58.523500
+13 74 16.155494
+13 75 27.730849
+13 76 40.112342
+13 77 61.587336
+13 78 44.598206
+13 79 11.000000
+13 80 23.086793
+13 81 39.051248
+13 82 43.011626
+13 83 19.104973
+13 84 32.202484
+13 85 51.546096
+13 86 59.236813
+13 87 24.698178
+13 88 21.377558
+13 89 20.615528
+13 90 71.281134
+13 91 29.068884
+13 92 41.109610
+13 93 45.044423
+13 94 53.460266
+13 95 49.091751
+13 96 48.662100
+13 97 47.853944
+13 98 27.294688
+13 99 19.313208
+13 100 20.591260
+13 101 31.827661
+14 1 38.078866
+14 2 53.851648
+14 3 43.462628
+14 4 52.810984
+14 5 47.434165
+14 6 52.201533
+14 7 42.059482
+14 8 41.231056
+14 9 46.097722
+14 10 5.000000
+14 11 7.071068
+14 12 5.830952
+14 13 10.440307
+14 15 10.000000
+14 16 5.830952
+14 17 7.071068
+14 18 11.180340
+14 19 49.203658
+14 20 44.654227
+14 21 42.059482
+14 22 46.097722
+14 23 40.311289
+14 24 44.598206
+14 25 38.587563
+14 26 42.426407
+14 27 90.138782
+14 28 90.000000
+14 29 87.143560
+14 30 85.000000
+14 31 83.150466
+14 32 83.000000
+14 33 82.152298
+14 34 80.622577
+14 35 80.000000
+14 36 79.649231
+14 37 78.102497
+14 38 76.216796
+14 39 72.622311
+14 40 71.063352
+14 41 74.330344
+14 42 66.400301
+14 43 67.268120
+14 44 70.710678
+14 45 68.622154
+14 46 49.335586
+14 47 46.840154
+14 48 10.440307
+14 49 47.634021
+14 50 43.566042
+14 51 67.000000
+14 52 52.201533
+14 53 20.615528
+14 54 21.213203
+14 55 55.901699
+14 56 35.355339
+14 57 45.000000
+14 58 26.925824
+14 59 26.925824
+14 60 15.811388
+14 61 26.925824
+14 62 50.000000
+14 63 60.000000
+14 64 61.846584
+14 65 40.311289
+14 66 30.413813
+14 67 36.055513
+14 68 59.413803
+14 69 43.011626
+14 70 31.064449
+14 71 45.343136
+14 72 63.245553
+14 73 65.299311
+14 74 25.179357
+14 75 21.213203
+14 76 30.000000
+14 77 59.615434
+14 78 36.715120
+14 79 21.213203
+14 80 33.015148
+14 81 43.680659
+14 82 49.648766
+14 83 23.409400
+14 84 32.249031
+14 85 52.345009
+14 86 59.228372
+14 87 19.416488
+14 88 13.038405
+14 89 29.832868
+14 90 68.876701
+14 91 34.176015
+14 92 44.553339
+14 93 48.662100
+14 94 58.523500
+14 95 53.600373
+14 96 51.039201
+14 97 53.488316
+14 98 17.029386
+14 99 27.018512
+14 100 21.000000
+14 101 41.231056
+15 1 35.355339
+15 2 44.721360
+15 3 34.481879
+15 4 43.462628
+15 5 38.078866
+15 6 42.720019
+15 7 32.695565
+15 8 31.622777
+15 9 36.400549
+15 10 11.180340
+15 11 7.071068
+15 12 5.830952
+15 13 3.000000
+15 14 10.000000
+15 16 5.830952
+15 17 7.071068
+15 18 5.000000
+15 19 55.865911
+15 20 50.931326
+15 21 47.634021
+15 22 53.150729
+15 23 46.097722
+15 24 51.855569
+15 25 44.598206
+15 26 50.000000
+15 27 91.241438
+15 28 90.553851
+15 29 88.283634
+15 30 85.586214
+15 31 84.344532
+15 32 83.600239
+15 33 83.360662
+15 34 82.462113
+15 35 80.622577
+15 36 73.783467
+15 37 72.111026
+15 38 70.491134
+15 39 66.887966
+15 40 65.192024
+15 41 68.007353
+15 42 60.901560
+15 43 61.032778
+15 44 64.031242
+15 45 62.201286
+15 46 39.924930
+15 47 37.336309
+15 48 3.000000
+15 49 54.488531
+15 50 49.578221
+15 51 67.742158
+15 52 55.901699
+15 53 25.000000
+15 54 15.811388
+15 55 52.201533
+15 56 29.154759
+15 57 46.097722
+15 58 32.015621
+15 59 36.400549
+15 60 25.495098
+15 61 18.027756
+15 62 44.721360
+15 63 60.827625
+15 64 65.000000
+15 65 42.720019
+15 66 30.413813
+15 67 36.878178
+15 68 59.076222
+15 69 38.078866
+15 70 26.925824
+15 71 38.418745
+15 72 60.827625
+15 73 61.351447
+15 74 15.297059
+15 75 29.154759
+15 76 40.000000
+15 77 64.140471
+15 78 45.694639
+15 79 11.401754
+15 80 23.021729
+15 81 42.047592
+15 82 45.880279
+15 83 22.090722
+15 84 34.928498
+15 85 54.405882
+15 86 62.032250
+15 87 26.400758
+15 88 22.135944
+15 89 23.021729
+15 90 73.783467
+15 91 32.062439
+15 92 44.102154
+15 93 48.041649
+15 94 56.435804
+15 95 52.086467
+15 96 51.623638
+15 97 50.803543
+15 98 27.018512
+15 99 22.135944
+15 100 23.259407
+15 101 34.058773
+16 1 39.293765
+16 2 50.537115
+16 3 40.311289
+16 4 49.244289
+16 5 43.863424
+16 6 48.466483
+16 7 38.483763
+16 8 37.336309
+16 9 42.059482
+16 10 9.433981
+16 11 8.000000
+16 12 6.000000
+16 13 7.810250
+16 14 5.830952
+16 15 5.830952
+16 17 2.000000
+16 18 5.385165
+16 19 54.671748
+16 20 50.000000
+16 21 47.169906
+16 22 51.662365
+16 23 45.486262
+16 24 50.209561
+16 25 43.829214
+16 26 48.104054
+16 27 93.536089
+16 28 93.134312
+16 29 90.553851
+16 30 88.141931
+16 31 86.579443
+16 32 86.145226
+16 33 85.586214
+16 34 84.344532
+16 35 83.150466
+16 36 79.056942
+16 37 77.420927
+16 38 75.716577
+16 39 72.111026
+16 40 70.455660
+16 41 73.409809
+16 42 66.037868
+16 43 66.400301
+16 44 69.526973
+16 45 67.623960
+16 46 45.694639
+16 47 43.081318
+16 48 5.000000
+16 49 53.150729
+16 50 48.826222
+16 51 70.178344
+16 52 56.648036
+16 53 25.079872
+16 54 20.591260
+16 55 56.648036
+16 56 34.409301
+16 57 48.259714
+16 58 31.764760
+16 59 32.695565
+16 60 21.540659
+16 61 23.853721
+16 62 49.739320
+16 63 63.198101
+16 64 66.098411
+16 65 44.147480
+16 66 33.000000
+16 67 39.115214
+16 68 62.032250
+16 69 42.941821
+16 70 31.384710
+16 71 43.931765
+16 72 64.761099
+16 73 65.924199
+16 74 20.000000
+16 75 26.907248
+16 76 35.128336
+16 77 64.404969
+16 78 42.544095
+16 79 17.088007
+16 80 28.284271
+16 81 45.541190
+16 82 50.328918
+16 83 25.179357
+16 84 36.138622
+16 85 56.089215
+16 86 63.324561
+16 87 24.839485
+16 88 18.867962
+16 89 28.425341
+16 90 73.824115
+16 91 35.693137
+16 92 47.042534
+16 93 51.088159
+16 94 60.207973
+16 95 55.578773
+16 96 54.083269
+16 97 54.817880
+16 98 22.090722
+16 99 26.832816
+16 100 24.515301
+16 101 39.623226
+17 1 41.231056
+17 2 51.478151
+17 3 41.340053
+17 4 50.089919
+17 5 44.721360
+17 6 49.244289
+17 7 39.357337
+17 8 38.078866
+17 9 42.720019
+17 10 11.180340
+17 11 10.000000
+17 12 8.000000
+17 13 9.433981
+17 14 7.071068
+17 15 7.071068
+17 16 2.000000
+17 18 5.000000
+17 19 56.222771
+17 20 51.613952
+17 21 48.877398
+17 22 53.150729
+17 23 47.169906
+17 24 51.662365
+17 25 45.486262
+17 26 49.497475
+17 27 95.524866
+17 28 95.131488
+17 29 92.541882
+17 30 90.138782
+17 31 88.566359
+17 32 88.141931
+17 33 87.572827
+17 34 86.313383
+17 35 85.146932
+17 36 80.709355
+17 37 79.056942
+17 38 77.388630
+17 39 73.783467
+17 40 72.111026
+17 41 75.000000
+17 42 67.742158
+17 43 68.007353
+17 44 71.063352
+17 45 69.202601
+17 46 46.518813
+17 47 43.863424
+17 48 5.385165
+17 49 54.671748
+17 50 50.477718
+17 51 72.173402
+17 52 58.523500
+17 53 26.925824
+17 54 22.360680
+17 55 58.523500
+17 56 36.055513
+17 57 50.249378
+17 58 33.541020
+17 59 33.541020
+17 60 22.360680
+17 61 25.000000
+17 62 51.478151
+17 63 65.192024
+17 64 68.007353
+17 65 46.097722
+17 66 35.000000
+17 67 41.109610
+17 68 64.031242
+17 69 44.721360
+17 70 33.241540
+17 71 45.453273
+17 72 66.708320
+17 73 67.779053
+17 74 20.099751
+17 75 28.284271
+17 76 35.355339
+17 77 66.211781
+17 78 43.566042
+17 79 17.888544
+17 80 28.635642
+17 81 47.518417
+17 82 52.201533
+17 83 27.166155
+17 84 38.078866
+17 85 58.051701
+17 86 65.253352
+17 87 26.400758
+17 88 20.000000
+17 89 30.000000
+17 90 75.591005
+17 91 37.656341
+17 92 49.040799
+17 93 53.084838
+17 94 62.169124
+17 95 57.558666
+17 96 56.080300
+17 97 56.753854
+17 98 22.360680
+17 99 28.635642
+17 100 26.476405
+17 101 41.109610
+18 1 40.311289
+18 2 47.169906
+18 3 37.202150
+18 4 45.650849
+18 5 40.311289
+18 6 44.721360
+18 7 34.985711
+18 8 33.541020
+18 9 38.078866
+18 10 14.142136
+18 11 11.180340
+18 12 9.433981
+18 13 8.000000
+18 14 11.180340
+18 15 5.000000
+18 16 5.385165
+18 17 5.000000
+18 19 59.464275
+18 20 54.671748
+18 21 51.613952
+18 22 56.568542
+18 23 50.000000
+18 24 55.172457
+18 25 48.414874
+18 26 53.150729
+18 27 96.176920
+18 28 95.524866
+18 29 93.214806
+18 30 90.553851
+18 31 89.269256
+18 32 88.566359
+18 33 88.283634
+18 34 87.321246
+18 35 85.586214
+18 36 78.032045
+18 37 76.321688
+18 38 74.793048
+18 39 71.196910
+18 40 69.462220
+18 41 72.111026
+18 42 65.299311
+18 43 65.192024
+18 44 68.007353
+18 45 66.287254
+18 46 42.059482
+18 47 39.357337
+18 48 2.000000
+18 49 58.000000
+18 50 53.413481
+18 51 72.691127
+18 52 60.415230
+18 53 29.154759
+18 54 20.615528
+18 55 57.008771
+18 56 33.541020
+18 57 50.990195
+18 58 36.055513
+18 59 38.078866
+18 60 26.925824
+18 61 21.213203
+18 62 49.244289
+18 63 65.764732
+18 64 69.641941
+18 65 47.434165
+18 66 35.355339
+18 67 41.773197
+18 68 64.070274
+18 69 42.720019
+18 70 31.780497
+18 71 42.438190
+18 72 65.764732
+18 73 66.098411
+18 74 15.132746
+18 75 32.015621
+18 76 40.311289
+18 77 68.476273
+18 78 47.885280
+18 79 13.601471
+18 80 23.769729
+18 81 47.042534
+18 82 50.695167
+18 83 27.073973
+18 84 39.560081
+18 85 59.203040
+18 86 66.730802
+18 87 29.698485
+18 88 24.186773
+18 89 27.294688
+18 90 78.032045
+18 91 37.054015
+18 92 49.091751
+18 93 53.037722
+18 94 61.400326
+18 95 57.078893
+18 96 56.568542
+18 97 55.731499
+18 98 27.294688
+18 99 26.925824
+18 100 27.856777
+18 101 38.013156
+19 1 45.177428
+19 2 82.225300
+19 3 73.375745
+19 4 82.969874
+19 5 78.746428
+19 6 83.522452
+19 7 74.672619
+19 8 75.769387
+19 9 80.411442
+19 10 45.343136
+19 11 48.795492
+19 12 50.209561
+19 13 53.814496
+19 14 49.203658
+19 15 55.865911
+19 16 54.671748
+19 17 56.222771
+19 18 59.464275
+19 20 5.385165
+19 21 10.198039
+19 22 4.000000
+19 23 10.770330
+19 24 6.000000
+19 25 11.661904
+19 26 9.000000
+19 27 56.797887
+19 28 59.169249
+19 29 54.120237
+19 30 54.918121
+19 31 50.606324
+19 32 53.254108
+19 33 49.739320
+19 34 45.617979
+19 35 50.803543
+19 36 83.240615
+19 37 82.710338
+19 38 79.812280
+19 39 77.129761
+19 40 76.687678
+19 41 81.584312
+19 42 71.386273
+19 43 75.802375
+19 44 80.752709
+19 45 77.781746
+19 46 80.653580
+19 47 79.378838
+19 48 58.000000
+19 49 2.000000
+19 50 7.280110
+19 51 41.036569
+19 52 18.601075
+19 53 31.400637
+19 54 51.000000
+19 55 56.089215
+19 56 56.753854
+19 57 30.594117
+19 58 24.413111
+19 59 29.427878
+19 60 37.161808
+19 61 62.177166
+19 62 60.008333
+19 63 36.619667
+19 64 25.806976
+19 65 25.019992
+19 66 36.138622
+19 67 32.140317
+19 68 42.059482
+19 69 55.145263
+19 70 48.764741
+19 71 64.629715
+19 72 54.230987
+19 73 62.936476
+19 74 69.202601
+19 75 28.301943
+19 76 39.000000
+19 77 17.464249
+19 78 21.095023
+19 79 62.425956
+19 80 73.573093
+19 81 42.107007
+19 82 53.235327
+19 83 41.629317
+19 84 26.925824
+19 85 27.294688
+19 86 26.172505
+19 87 29.832868
+19 88 37.215588
+19 89 56.648036
+19 90 23.000000
+19 91 42.579338
+19 92 37.336309
+19 93 39.051248
+19 94 49.979996
+19 95 44.922155
+19 96 34.176015
+19 97 50.219518
+19 98 42.059482
+19 99 50.328918
+19 100 34.985711
+19 101 63.348244
+20 1 40.049969
+20 2 76.902536
+20 3 68.007353
+20 4 77.620873
+20 5 73.375745
+20 6 78.160092
+20 7 69.289249
+20 8 70.384657
+20 9 75.026662
+20 10 40.607881
+20 11 43.863424
+20 12 45.343136
+20 13 48.795492
+20 14 44.654227
+20 15 50.931326
+20 16 50.000000
+20 17 51.613952
+20 18 54.671748
+20 19 5.385165
+20 21 5.000000
+20 22 5.385165
+20 23 5.385165
+20 24 6.403124
+20 25 6.403124
+20 26 8.602325
+20 27 56.648036
+20 28 58.600341
+20 29 53.851648
+20 30 54.120237
+20 31 50.159745
+20 32 52.354560
+20 33 49.244289
+20 34 45.541190
+20 35 49.739320
+20 36 79.056942
+20 37 78.447435
+20 38 75.584390
+20 39 72.801099
+20 40 72.277244
+20 41 77.129761
+20 42 66.940272
+20 43 71.196910
+20 44 76.118329
+20 45 73.164199
+20 46 75.286121
+20 47 74.000000
+20 48 53.150729
+20 49 5.000000
+20 50 2.000000
+20 51 39.051248
+20 52 16.401219
+20 53 26.248809
+20 54 45.650849
+20 55 51.662365
+20 56 51.419841
+20 57 26.248809
+20 58 19.209373
+20 59 27.000000
+20 60 33.526109
+20 61 56.824291
+20 62 55.081757
+20 63 33.970576
+20 64 25.079872
+20 65 20.223748
+20 66 30.805844
+20 67 27.018512
+20 68 38.832976
+20 69 50.039984
+20 70 43.416587
+20 71 59.413803
+20 72 50.537115
+20 73 58.872744
+20 74 64.031242
+20 75 24.166092
+20 76 37.336309
+20 77 18.110770
+20 78 20.248457
+20 79 57.201399
+20 80 68.264193
+20 81 37.336309
+20 82 48.507731
+20 83 36.249138
+20 84 21.587033
+20 85 24.207437
+20 86 24.698178
+20 87 25.238859
+20 88 33.105891
+20 89 51.264022
+20 90 25.495098
+20 91 37.336309
+20 92 32.756679
+20 93 34.785054
+20 94 46.097722
+20 95 40.853396
+20 96 30.413813
+20 97 45.880279
+20 98 38.832976
+20 99 44.944410
+20 100 29.681644
+20 101 58.051701
+21 1 35.057096
+21 2 72.034714
+21 3 63.245553
+21 4 72.801099
+21 5 68.622154
+21 6 73.375745
+21 7 64.621978
+21 8 65.795137
+21 9 70.384657
+21 10 37.735925
+21 11 40.607881
+21 12 42.201896
+21 13 45.343136
+21 14 42.059482
+21 15 47.634021
+21 16 47.169906
+21 17 48.877398
+21 18 51.613952
+21 19 10.198039
+21 20 5.000000
+21 22 10.198039
+21 23 2.000000
+21 24 10.770330
+21 25 4.000000
+21 26 12.206556
+21 27 55.081757
+21 28 56.648036
+21 29 52.201533
+21 30 52.000000
+21 31 48.383882
+21 32 50.159745
+21 33 47.434165
+21 34 44.147480
+21 35 47.423623
+21 36 74.330344
+21 37 73.681748
+21 38 70.837843
+21 39 68.007353
+21 40 67.446275
+21 41 72.277244
+21 42 62.096699
+21 43 66.287254
+21 44 71.196910
+21 45 68.249542
+21 46 70.519501
+21 47 69.289249
+21 48 50.000000
+21 49 10.000000
+21 50 3.000000
+21 51 36.055513
+21 52 13.928388
+21 53 22.671568
+21 54 41.340053
+21 55 46.840154
+21 56 46.572524
+21 57 21.540659
+21 58 15.620499
+21 59 27.459060
+21 60 32.388269
+21 61 52.478567
+21 62 50.089919
+21 63 30.479501
+21 64 23.537205
+21 65 15.297059
+21 66 25.961510
+21 67 22.022716
+21 68 34.828150
+21 69 45.044423
+21 70 38.600518
+21 71 54.451814
+21 72 46.141088
+21 73 54.230987
+21 74 60.207973
+21 75 22.561028
+21 76 38.327536
+21 77 18.248288
+21 78 22.472205
+21 79 53.263496
+21 80 64.070274
+21 81 32.388269
+21 82 43.566042
+21 83 31.764760
+21 84 16.763055
+21 85 20.518285
+21 86 22.472205
+21 87 22.847319
+21 88 31.320920
+21 89 46.615448
+21 90 26.925824
+21 91 32.388269
+21 92 27.892651
+21 93 30.083218
+21 94 41.593269
+21 95 36.249138
+21 96 26.076810
+21 97 41.109610
+21 98 38.118237
+21 99 40.311289
+21 100 25.612497
+21 101 53.150729
+22 1 45.000000
+22 2 81.394103
+22 3 72.277244
+22 4 82.000000
+22 5 77.620873
+22 6 82.462113
+22 7 73.375745
+22 8 74.330344
+22 9 79.056942
+22 10 42.426407
+22 11 46.097722
+22 12 47.423623
+22 13 51.224994
+22 14 46.097722
+22 15 53.150729
+22 16 51.662365
+22 17 53.150729
+22 18 56.568542
+22 19 4.000000
+22 20 5.385165
+22 21 10.198039
+22 23 10.000000
+22 24 2.000000
+22 25 10.198039
+22 26 5.000000
+22 27 60.415230
+22 28 62.649820
+22 29 57.697487
+22 30 58.309519
+22 31 54.120237
+22 32 56.603887
+22 33 53.235327
+22 34 49.244289
+22 35 54.083269
+22 36 84.433406
+22 37 83.815273
+22 38 80.956779
+22 39 78.160092
+22 40 77.620873
+22 41 82.462113
+22 42 72.277244
+22 43 76.485293
+22 44 81.394103
+22 45 78.447435
+22 46 79.555012
+22 47 78.160092
+22 48 55.172457
+22 49 2.000000
+22 50 7.280110
+22 51 43.863424
+22 52 21.213203
+22 53 29.154759
+22 54 49.244289
+22 55 57.008771
+22 56 55.901699
+22 57 31.622777
+22 58 22.360680
+22 59 25.495098
+22 60 33.541020
+22 61 60.415230
+22 62 60.207973
+22 63 39.051248
+22 64 29.154759
+22 65 25.495098
+22 66 35.355339
+22 67 32.015621
+22 68 44.102154
+22 69 55.000000
+22 70 47.853944
+22 71 64.195015
+22 72 55.901699
+22 73 64.257295
+22 74 66.850580
+22 75 25.000000
+22 76 35.000000
+22 77 21.189620
+22 78 17.117243
+22 79 60.207973
+22 80 71.589105
+22 81 42.579338
+22 82 53.758720
+22 83 40.162171
+22 84 26.172505
+22 85 29.410882
+22 86 29.206164
+22 87 26.870058
+22 88 33.837849
+22 89 55.362442
+22 90 27.000000
+22 91 42.107007
+22 92 38.078866
+22 93 40.162171
+22 94 51.478151
+22 95 46.238512
+22 96 35.777088
+22 97 51.244512
+22 98 38.275318
+22 99 49.040799
+22 100 33.105891
+22 101 62.649820
+23 1 35.000000
+23 2 71.589105
+23 3 62.641839
+23 4 72.277244
+23 5 68.007353
+23 6 72.801099
+23 7 63.906181
+23 8 65.000000
+23 9 69.641941
+23 10 36.055513
+23 11 39.051248
+23 12 40.607881
+23 13 43.863424
+23 14 40.311289
+23 15 46.097722
+23 16 45.486262
+23 17 47.169906
+23 18 50.000000
+23 19 10.770330
+23 20 5.385165
+23 21 2.000000
+23 22 10.000000
+23 24 10.198039
+23 25 2.000000
+23 26 11.180340
+23 27 57.008771
+23 28 58.523500
+23 29 54.120237
+23 30 53.851648
+23 31 50.289164
+23 32 52.000000
+23 33 49.335586
+23 34 46.097722
+23 35 49.244289
+23 36 75.026662
+23 37 74.330344
+23 38 71.512237
+23 39 68.622154
+23 40 68.007353
+23 41 72.801099
+23 42 62.641839
+23 43 66.708320
+23 44 71.589105
+23 45 68.658576
+23 46 69.921384
+23 47 68.622154
+23 48 48.414874
+23 49 10.198039
+23 50 3.605551
+23 51 37.735925
+23 52 15.811388
+23 53 21.213203
+23 54 40.311289
+23 55 47.434165
+23 56 46.097722
+23 57 22.360680
+23 58 14.142136
+23 59 25.495098
+23 60 30.413813
+23 61 51.478151
+23 62 50.249378
+23 63 32.015621
+23 64 25.495098
+23 65 15.811388
+23 66 25.495098
+23 67 22.022716
+23 68 36.124784
+23 69 45.000000
+23 70 38.078866
+23 71 54.230987
+23 72 47.169906
+23 73 55.036352
+23 74 58.898217
+23 75 20.615528
+23 76 36.400549
+23 77 20.223748
+23 78 20.808652
+23 79 52.009614
+23 80 62.968246
+23 81 32.756679
+23 82 43.931765
+23 83 30.870698
+23 84 16.278821
+23 85 22.022716
+23 86 24.351591
+23 87 21.023796
+23 88 29.410882
+23 89 45.880279
+23 90 28.792360
+23 91 32.140317
+23 92 28.460499
+23 93 30.870698
+23 94 42.544095
+23 95 37.121422
+23 96 27.202941
+23 97 41.785165
+23 98 36.124784
+23 99 39.560081
+23 100 24.413111
+23 101 52.773099
+24 1 45.044423
+24 2 81.049368
+24 3 71.805292
+24 4 81.584312
+24 5 77.129761
+24 6 82.000000
+24 7 72.801099
+24 8 73.681748
+24 9 78.447435
+24 10 41.036569
+24 11 44.821870
+24 12 46.097722
+24 13 50.000000
+24 14 44.598206
+24 15 51.855569
+24 16 50.209561
+24 17 51.662365
+24 18 55.172457
+24 19 6.000000
+24 20 6.403124
+24 21 10.770330
+24 22 2.000000
+24 23 10.198039
+24 25 10.000000
+24 26 3.000000
+24 27 62.241465
+24 28 64.412732
+24 29 59.506302
+24 30 60.033324
+24 31 55.901699
+24 32 58.309519
+24 33 55.009090
+24 34 51.078371
+24 35 55.758407
+24 36 85.094066
+24 37 84.433406
+24 38 81.596569
+24 39 78.746428
+24 40 78.160092
+24 41 82.969874
+24 42 72.801099
+24 43 76.902536
+24 44 81.786307
+24 45 78.854296
+24 46 79.075913
+24 47 77.620873
+24 48 53.814496
+24 49 4.000000
+24 50 8.062258
+24 51 45.343136
+24 52 22.671568
+24 53 28.178006
+24 54 48.466483
+24 55 57.567352
+24 56 55.578773
+24 57 32.310989
+24 58 21.540659
+24 59 23.537205
+24 60 31.764760
+24 61 59.615434
+24 62 60.406953
+24 63 40.360872
+24 64 30.886890
+24 65 25.961510
+24 66 35.128336
+24 67 32.140317
+24 68 45.221676
+24 69 55.036352
+24 70 47.518417
+24 71 64.070274
+24 72 56.824291
+24 73 65.000000
+24 74 65.734314
+24 75 23.430749
+24 76 33.000000
+24 77 23.086793
+24 78 15.132746
+24 79 59.169249
+24 80 70.661163
+24 81 42.953463
+24 82 54.129474
+24 83 39.560081
+24 84 26.019224
+24 85 30.610456
+24 86 30.805844
+24 87 25.495098
+24 88 32.202484
+24 89 54.817880
+24 90 29.000000
+24 91 42.011903
+24 92 38.600518
+24 93 40.853396
+24 94 52.325902
+24 95 47.010637
+24 96 36.715120
+24 97 51.865210
+24 98 36.400549
+24 99 48.507731
+24 100 32.310989
+24 101 62.393910
+25 1 35.057096
+25 2 71.196910
+25 3 62.096699
+25 4 71.805292
+25 5 67.446275
+25 6 72.277244
+25 7 63.245553
+25 8 64.257295
+25 9 68.949257
+25 10 34.409301
+25 11 37.536649
+25 12 39.051248
+25 13 42.426407
+25 14 38.587563
+25 15 44.598206
+25 16 43.829214
+25 17 45.486262
+25 18 48.414874
+25 19 11.661904
+25 20 6.403124
+25 21 4.000000
+25 22 10.198039
+25 23 2.000000
+25 24 10.000000
+25 26 10.440307
+25 27 58.940648
+25 28 60.406953
+25 29 56.044625
+25 30 55.713553
+25 31 52.201533
+25 32 53.851648
+25 33 51.244512
+25 34 48.052055
+25 35 51.078371
+25 36 75.769387
+25 37 75.026662
+25 38 72.235725
+25 39 69.289249
+25 40 68.622154
+25 41 73.375745
+25 42 63.245553
+25 43 67.186308
+25 44 72.034714
+25 45 69.123079
+25 46 69.375788
+25 47 68.007353
+25 48 46.861498
+25 49 10.770330
+25 50 5.000000
+25 51 39.446166
+25 52 17.720045
+25 53 19.849433
+25 54 39.357337
+25 55 48.104054
+25 56 45.705580
+25 57 23.323808
+25 58 12.806248
+25 59 23.537205
+25 60 28.442925
+25 61 50.537115
+25 62 50.487622
+25 63 33.600595
+25 64 27.459060
+25 65 16.552945
+25 66 25.179357
+25 67 22.203603
+25 68 37.483330
+25 69 45.044423
+25 70 37.656341
+25 71 54.083269
+25 72 48.259714
+25 73 55.901699
+25 74 57.628118
+25 75 18.681542
+25 76 34.481879
+25 77 22.203603
+25 78 19.209373
+25 79 50.803543
+25 80 61.911227
+25 81 33.241540
+25 82 44.384682
+25 83 30.083218
+25 84 16.031220
+25 85 23.600847
+25 86 26.248809
+25 87 19.235384
+25 88 27.513633
+25 89 45.221676
+25 90 30.675723
+25 91 32.015621
+25 92 29.154759
+25 93 31.764760
+25 94 43.566042
+25 95 38.078866
+25 96 28.425341
+25 97 42.544095
+25 98 34.132096
+25 99 38.897301
+25 100 23.323808
+25 101 52.469038
+26 1 45.276926
+26 2 80.622577
+26 3 71.196910
+26 4 81.049368
+26 5 76.485293
+26 6 81.394103
+26 7 72.034714
+26 8 72.801099
+26 9 77.620873
+26 10 39.051248
+26 11 43.011626
+26 12 44.204072
+26 13 48.259714
+26 14 42.426407
+26 15 50.000000
+26 16 48.104054
+26 17 49.497475
+26 18 53.150729
+26 19 9.000000
+26 20 8.602325
+26 21 12.206556
+26 22 5.000000
+26 23 11.180340
+26 24 3.000000
+26 25 10.440307
+26 27 65.000000
+26 28 67.082039
+26 29 62.241465
+26 30 62.649820
+26 31 58.600341
+26 32 60.901560
+26 33 57.697487
+26 34 53.851648
+26 35 58.309519
+26 36 86.162637
+26 37 85.440037
+26 38 82.637764
+26 39 79.711982
+26 40 79.056942
+26 41 83.815273
+26 42 73.681748
+26 43 77.620873
+26 44 82.462113
+26 45 79.555012
+26 46 78.447435
+26 47 76.902536
+26 48 51.855569
+26 49 7.000000
+26 50 9.899495
+26 51 47.634021
+26 52 25.000000
+26 53 26.925824
+26 54 47.434165
+26 55 58.523500
+26 56 55.226805
+26 57 33.541020
+26 58 20.615528
+26 59 20.615528
+26 60 29.154759
+26 61 58.523500
+26 62 60.827625
+26 63 42.426407
+26 64 33.541020
+26 65 26.925824
+26 66 35.000000
+26 67 32.557641
+26 68 47.010637
+26 69 55.226805
+26 70 47.169906
+26 71 64.000000
+26 72 58.309519
+26 73 66.211781
+26 74 64.140471
+26 75 21.213203
+26 76 30.000000
+26 77 25.961510
+26 78 12.165525
+26 79 57.706152
+26 80 69.354164
+26 81 43.680659
+26 82 54.817880
+26 83 38.832976
+26 84 26.076810
+26 85 32.557641
+26 86 33.286634
+26 87 23.600847
+26 88 29.832868
+26 89 54.129474
+26 90 32.000000
+26 91 42.047592
+26 92 39.560081
+26 93 42.047592
+26 94 53.712196
+26 95 48.301139
+26 96 38.275318
+26 97 52.924474
+26 98 33.615473
+26 99 47.853944
+26 100 31.320920
+26 101 62.128898
+27 1 58.523500
+27 2 89.022469
+27 3 85.755466
+27 4 91.400219
+27 5 90.138782
+27 6 93.005376
+27 7 89.185201
+27 8 91.787799
+27 9 94.339811
+27 10 85.146932
+27 11 85.586214
+27 12 87.572827
+27 13 88.283634
+27 14 90.138782
+27 15 91.241438
+27 16 93.536089
+27 17 95.524866
+27 18 96.176920
+27 19 56.797887
+27 20 56.648036
+27 21 55.081757
+27 22 60.415230
+27 23 57.008771
+27 24 62.241465
+27 25 58.940648
+27 26 65.000000
+27 28 5.000000
+27 29 3.000000
+27 30 7.071068
+27 31 7.000000
+27 32 8.602325
+27 33 8.000000
+27 34 11.180340
+27 35 11.180340
+27 36 61.717096
+27 37 62.649820
+27 38 60.033324
+27 39 59.908263
+27 40 61.032778
+27 41 65.192024
+27 42 58.258047
+27 43 64.031242
+27 44 68.007353
+27 45 65.604878
+27 46 91.263355
+27 47 91.809586
+27 48 94.201911
+27 49 58.600341
+27 50 55.973208
+27 51 23.537205
+27 52 41.231056
+27 53 70.000000
+27 54 77.620873
+27 55 50.000000
+27 56 71.589105
+27 57 45.276926
+27 58 65.192024
+27 59 82.462113
+27 60 85.586214
+27 61 85.440037
+27 62 61.032778
+27 63 30.413813
+27 64 31.622777
+27 65 50.000000
+27 66 60.827625
+27 67 54.451814
+27 68 33.241540
+27 69 62.649820
+27 70 67.675697
+27 71 71.561163
+27 72 39.051248
+27 73 47.423623
+27 74 97.718985
+27 75 75.663730
+27 76 93.407708
+27 77 39.357337
+27 78 76.896034
+27 79 90.801982
+27 80 96.772930
+27 81 50.921508
+27 82 53.851648
+27 83 69.231496
+27 84 58.008620
+27 85 38.013156
+27 86 32.756679
+27 87 74.242845
+27 88 83.216585
+27 89 76.321688
+27 90 37.536649
+27 91 60.440053
+27 92 47.539457
+27 93 43.965896
+27 94 40.496913
+27 95 42.047592
+27 96 39.623226
+27 97 46.647615
+27 98 91.787799
+27 99 72.422372
+27 100 69.180922
+27 101 73.925638
+28 1 57.008771
+28 2 86.023253
+28 3 83.240615
+28 4 88.481637
+28 5 87.464278
+28 6 90.138782
+28 7 86.769810
+28 8 89.442719
+28 9 91.787799
+28 10 85.000000
+28 11 85.146932
+28 12 87.143560
+28 13 87.572827
+28 14 90.000000
+28 15 90.553851
+28 16 93.134312
+28 17 95.131488
+28 18 95.524866
+28 19 59.169249
+28 20 58.600341
+28 21 56.648036
+28 22 62.649820
+28 23 58.523500
+28 24 64.412732
+28 25 60.406953
+28 26 67.082039
+28 27 5.000000
+28 29 5.830952
+28 30 5.000000
+28 31 8.602325
+28 32 7.000000
+28 33 9.433981
+28 34 14.142136
+28 35 10.000000
+28 36 57.306195
+28 37 58.309519
+28 38 55.758407
+28 39 55.803226
+28 40 57.008771
+28 41 61.032778
+28 42 54.488531
+28 43 60.207973
+28 44 64.031242
+28 45 61.717096
+28 46 88.509886
+28 47 89.185201
+28 48 93.536089
+28 49 60.901560
+28 50 57.775427
+28 51 23.000000
+28 52 42.720019
+28 53 70.178344
+28 54 76.485293
+28 55 47.169906
+28 56 69.641941
+28 57 45.000000
+28 58 65.764732
+28 59 83.815273
+28 60 86.313383
+28 61 83.815273
+28 62 58.309519
+28 63 30.000000
+28 64 33.541020
+28 65 50.249378
+28 66 60.207973
+28 67 54.037024
+28 68 31.780497
+28 69 60.415230
+28 70 66.219333
+28 71 68.963759
+28 72 36.055513
+28 73 43.863424
+28 74 96.301610
+28 75 76.485293
+28 76 94.868330
+28 77 41.880783
+28 78 78.790862
+28 79 89.498603
+28 80 94.921020
+28 81 49.477268
+28 82 51.429563
+28 83 68.468971
+28 84 58.137767
+28 85 38.470768
+28 86 34.176015
+28 87 74.813100
+28 88 83.725743
+28 89 74.632433
+28 90 41.036569
+28 91 59.228372
+28 92 46.529560
+28 93 42.755117
+28 94 38.013156
+28 95 40.162171
+28 96 39.051248
+28 97 44.283180
+28 98 92.574294
+28 99 71.063352
+28 100 69.000000
+28 101 71.554175
+29 1 55.713553
+29 2 86.683332
+29 3 83.216585
+29 4 89.022469
+29 5 87.658428
+29 6 90.603532
+29 7 86.608314
+29 8 89.185201
+29 9 91.809586
+29 10 82.152298
+29 11 82.607506
+29 12 84.593144
+29 13 85.328776
+29 14 87.143560
+29 15 88.283634
+29 16 90.553851
+29 17 92.541882
+29 18 93.214806
+29 19 54.120237
+29 20 53.851648
+29 21 52.201533
+29 22 57.697487
+29 23 54.120237
+29 24 59.506302
+29 25 56.044625
+29 26 62.241465
+29 27 3.000000
+29 28 5.830952
+29 30 5.385165
+29 31 4.000000
+29 32 6.403124
+29 33 5.000000
+29 34 8.602325
+29 35 8.602325
+29 36 60.415230
+29 37 61.269895
+29 38 58.591808
+29 39 58.309519
+29 40 59.363288
+29 41 63.631753
+29 42 56.400355
+29 43 62.201286
+29 44 66.287254
+29 45 63.820060
+29 46 88.814413
+29 47 89.308454
+29 48 91.241438
+29 49 55.901699
+29 50 53.141321
+29 51 20.615528
+29 52 38.327536
+29 53 67.000000
+29 54 74.726167
+29 55 47.634021
+29 56 68.876701
+29 57 42.296572
+29 58 62.201286
+29 59 79.555012
+29 60 82.607506
+29 61 82.637764
+29 62 58.600341
+29 63 27.459060
+29 64 28.792360
+29 65 47.000000
+29 66 57.870545
+29 67 51.478151
+29 68 30.463092
+29 69 60.033324
+29 70 64.845971
+29 71 69.065187
+29 72 36.796739
+29 73 45.453273
+29 74 94.868330
+29 75 72.691127
+29 76 90.520716
+29 77 36.715120
+29 78 74.094534
+29 79 87.931792
+29 80 94.021274
+29 81 48.104054
+29 82 51.312766
+29 83 66.287254
+29 84 55.009090
+29 85 35.014283
+29 86 29.832868
+29 87 71.253070
+29 88 80.224684
+29 89 73.539105
+29 90 35.355339
+29 91 57.567352
+29 92 44.643029
+29 93 41.109610
+29 94 38.013156
+29 95 39.357337
+29 96 36.674242
+29 97 44.102154
+29 98 88.814413
+29 99 69.570109
+29 100 66.189123
+29 101 71.344236
+30 1 52.201533
+30 2 82.006097
+30 3 78.892332
+30 4 84.403791
+30 5 83.216585
+30 6 86.023253
+30 7 82.365041
+30 8 85.000000
+30 9 87.464278
+30 10 80.000000
+30 11 80.156098
+30 12 82.152298
+30 13 82.607506
+30 14 85.000000
+30 15 85.586214
+30 16 88.141931
+30 17 90.138782
+30 18 90.553851
+30 19 54.918121
+30 20 54.120237
+30 21 52.000000
+30 22 58.309519
+30 23 53.851648
+30 24 60.033324
+30 25 55.713553
+30 26 62.649820
+30 27 7.071068
+30 28 5.000000
+30 29 5.385165
+30 31 5.385165
+30 32 2.000000
+30 33 5.830952
+30 34 11.180340
+30 35 5.000000
+30 36 55.036352
+30 37 55.901699
+30 38 53.235327
+30 39 53.000000
+30 40 54.083269
+30 41 58.309519
+30 42 51.224994
+30 43 57.008771
+30 44 61.032778
+30 45 58.600341
+30 46 84.314886
+30 47 84.905830
+30 48 88.566359
+30 49 56.603887
+30 50 53.225934
+30 51 18.000000
+30 52 38.078866
+30 53 65.192024
+30 54 71.589105
+30 55 43.011626
+30 56 65.000000
+30 57 40.000000
+30 58 60.827625
+30 59 79.056942
+30 60 81.394103
+30 61 79.056942
+30 62 54.083269
+30 63 25.000000
+30 64 29.154759
+30 65 45.276926
+30 66 55.226805
+30 67 49.040799
+30 68 26.925824
+30 69 55.901699
+30 70 61.400326
+30 71 64.660653
+30 72 32.015621
+30 73 40.360872
+30 74 91.482239
+30 75 71.589105
+30 76 90.138782
+30 77 37.802116
+30 78 74.249579
+30 79 84.646323
+30 80 90.249654
+30 81 44.643029
+30 82 47.010637
+30 83 63.505905
+30 84 53.150729
+30 85 33.541020
+30 86 29.546573
+30 87 69.871310
+30 88 78.771822
+30 89 69.892775
+30 90 37.802116
+30 91 54.341513
+30 92 41.593269
+30 93 37.854986
+30 94 33.615473
+30 95 35.468296
+30 96 34.058773
+30 97 39.824616
+30 98 87.664132
+30 99 66.219333
+30 100 64.000000
+30 101 67.119297
+31 1 52.000000
+31 2 83.630138
+31 3 79.881162
+31 4 85.912746
+31 5 84.403791
+31 6 87.458562
+31 7 83.216585
+31 8 85.755466
+31 9 88.481637
+31 10 78.160092
+31 11 78.638413
+31 12 80.622577
+31 13 81.394103
+31 14 83.150466
+31 15 84.344532
+31 16 86.579443
+31 17 88.566359
+31 18 89.269256
+31 19 50.606324
+31 20 50.159745
+31 21 48.383882
+31 22 54.120237
+31 23 50.289164
+31 24 55.901699
+31 25 52.201533
+31 26 58.600341
+31 27 7.000000
+31 28 8.602325
+31 29 4.000000
+31 30 5.385165
+31 32 5.000000
+31 33 1.000000
+31 34 5.830952
+31 35 5.830952
+31 36 58.872744
+31 37 59.615434
+31 38 56.859476
+31 39 56.356011
+31 40 57.306195
+31 41 61.717096
+31 42 54.083269
+31 43 59.908263
+31 44 64.140471
+31 45 61.587336
+31 46 85.603738
+31 47 86.023253
+31 48 87.298339
+31 49 52.354560
+31 50 49.396356
+31 51 16.763055
+31 52 34.481879
+31 53 63.000000
+31 54 70.880181
+31 55 44.598206
+31 56 65.299311
+31 57 38.327536
+31 58 58.215118
+31 59 75.690158
+31 60 78.638413
+31 61 78.924014
+31 62 55.443665
+31 63 23.537205
+31 64 25.079872
+31 65 43.000000
+31 66 53.935146
+31 67 47.518417
+31 68 26.832816
+31 69 56.603887
+31 70 61.098281
+31 71 65.802736
+31 72 33.970576
+31 73 43.011626
+31 74 91.082380
+31 75 68.731361
+31 76 86.683332
+31 77 33.286634
+31 78 70.384657
+31 79 84.118963
+31 80 90.376988
+31 81 44.384682
+31 82 48.010416
+31 83 62.369865
+31 84 51.009803
+31 85 31.016125
+31 86 25.961510
+31 87 67.268120
+31 88 76.236474
+31 89 69.856997
+31 90 32.649655
+31 91 53.758720
+31 92 40.804412
+31 93 37.336309
+31 94 34.828150
+31 95 35.846897
+31 96 32.756679
+31 97 40.804412
+31 98 84.852814
+31 99 65.787537
+31 100 62.201286
+31 101 67.955868
+32 1 50.289164
+32 2 80.430094
+32 3 77.175126
+32 4 82.800966
+32 5 81.541401
+32 6 84.403791
+32 7 80.622577
+32 8 83.240615
+32 9 85.755466
+32 10 78.000000
+32 11 78.160092
+32 12 80.156098
+32 13 80.622577
+32 14 83.000000
+32 15 83.600239
+32 16 86.145226
+32 17 88.141931
+32 18 88.566359
+32 19 53.254108
+32 20 52.354560
+32 21 50.159745
+32 22 56.603887
+32 23 52.000000
+32 24 58.309519
+32 25 53.851648
+32 26 60.901560
+32 27 8.602325
+32 28 7.000000
+32 29 6.403124
+32 30 2.000000
+32 31 5.000000
+32 33 5.099020
+32 34 10.440307
+32 35 3.000000
+32 36 54.230987
+32 37 55.036352
+32 38 52.325902
+32 39 51.971146
+32 40 53.000000
+32 41 57.306195
+32 42 50.000000
+32 43 55.803226
+32 44 59.908263
+32 45 57.428216
+32 46 82.661962
+32 47 83.216585
+32 48 86.579443
+32 49 54.918121
+32 50 51.429563
+32 51 16.000000
+32 52 36.249138
+32 53 63.198101
+32 54 69.634761
+32 55 41.400483
+32 56 63.158531
+32 57 38.000000
+32 58 58.855756
+32 59 77.162167
+32 60 79.429214
+32 61 77.162167
+32 62 52.430907
+32 63 23.000000
+32 64 27.459060
+32 65 43.289722
+32 66 53.235327
+32 67 47.042534
+32 68 25.000000
+32 69 54.120237
+32 70 59.481089
+32 71 62.968246
+32 72 30.479501
+32 73 39.051248
+32 74 89.560036
+32 75 69.634761
+32 76 88.255311
+32 77 36.235342
+32 78 72.449983
+32 79 82.710338
+32 80 88.391176
+32 81 42.720019
+32 82 45.276926
+32 83 61.522354
+32 84 51.156622
+32 85 31.575307
+32 86 27.730849
+32 87 67.896981
+32 88 76.791927
+32 89 68.007353
+32 90 36.619667
+32 91 52.392748
+32 92 39.623226
+32 93 35.902646
+32 94 31.906112
+32 95 33.615473
+32 96 32.062439
+32 97 38.078866
+32 98 85.702975
+32 99 64.288413
+32 100 62.000000
+32 101 65.368188
+33 1 51.078371
+33 2 82.879430
+33 3 79.056942
+33 4 85.146932
+33 5 83.600239
+33 6 86.683332
+33 7 82.377181
+33 8 84.905830
+33 9 87.658428
+33 10 77.162167
+33 11 77.646635
+33 12 79.630396
+33 13 80.411442
+33 14 82.152298
+33 15 83.360662
+33 16 85.586214
+33 17 87.572827
+33 18 88.283634
+33 19 49.739320
+33 20 49.244289
+33 21 47.434165
+33 22 53.235327
+33 23 49.335586
+33 24 55.009090
+33 25 51.244512
+33 26 57.697487
+33 27 8.000000
+33 28 9.433981
+33 29 5.000000
+33 30 5.830952
+33 31 1.000000
+33 32 5.099020
+33 34 5.385165
+33 35 5.385165
+33 36 58.523500
+33 37 59.236813
+33 38 56.462377
+33 39 55.901699
+33 40 56.824291
+33 41 61.269895
+33 42 53.535035
+33 43 59.363288
+33 44 63.631753
+33 45 61.057350
+33 46 84.811556
+33 47 85.211502
+33 48 86.313383
+33 49 51.478151
+33 50 48.466483
+33 51 15.811388
+33 52 33.526109
+33 53 62.000000
+33 54 69.921384
+33 55 43.863424
+33 56 64.412732
+33 57 37.336309
+33 58 57.218878
+33 59 74.726167
+33 60 77.646635
+33 61 78.000000
+33 62 54.671748
+33 63 22.561028
+33 64 24.166092
+33 65 42.000000
+33 66 52.952809
+33 67 46.529560
+33 68 25.942244
+33 69 55.758407
+33 70 60.166436
+33 71 65.000000
+33 72 33.301652
+33 73 42.438190
+33 74 90.138782
+33 75 67.742158
+33 76 85.726309
+33 77 32.449961
+33 78 69.462220
+33 79 83.168504
+33 80 89.470666
+33 81 43.462628
+33 82 47.201695
+33 83 61.392182
+33 84 50.009999
+33 85 30.016662
+33 86 25.000000
+33 87 66.272166
+33 88 75.239617
+33 89 68.942005
+33 90 32.015621
+33 91 52.810984
+33 92 39.849718
+33 93 36.400549
+33 94 34.058773
+33 95 34.985711
+33 96 31.780497
+33 97 40.000000
+33 98 83.862983
+33 99 64.845971
+33 100 61.204575
+33 101 67.119297
+34 1 51.478151
+34 2 84.852814
+34 3 80.430094
+34 4 87.000000
+34 5 85.146932
+34 6 88.459030
+34 7 83.600239
+34 8 86.023253
+34 9 89.022469
+34 10 75.663730
+34 11 76.485293
+34 12 78.447435
+34 13 79.555012
+34 14 80.622577
+34 15 82.462113
+34 16 84.344532
+34 17 86.313383
+34 18 87.321246
+34 19 45.617979
+34 20 45.541190
+34 21 44.147480
+34 22 49.244289
+34 23 46.097722
+34 24 51.078371
+34 25 48.052055
+34 26 53.851648
+34 27 11.180340
+34 28 14.142136
+34 29 8.602325
+34 30 11.180340
+34 31 5.830952
+34 32 10.440307
+34 33 5.385165
+34 35 10.000000
+34 36 62.641839
+34 37 63.245553
+34 38 60.406953
+34 39 59.615434
+34 40 60.415230
+34 41 65.000000
+34 42 56.824291
+34 43 62.649820
+34 44 67.082039
+34 45 64.412732
+34 46 86.452299
+34 47 86.683332
+34 48 85.375641
+34 49 47.423623
+34 50 44.922155
+34 51 16.401219
+34 52 30.413813
+34 53 60.207973
+34 54 69.641941
+34 55 46.097722
+34 56 65.192024
+34 57 36.400549
+34 58 55.000000
+34 59 71.589105
+34 60 75.166482
+34 61 78.262379
+34 62 56.568542
+34 63 22.360680
+34 64 20.615528
+34 65 40.311289
+34 66 52.201533
+34 67 45.607017
+34 68 27.018512
+34 69 57.008771
+34 70 60.373835
+34 71 66.603303
+34 72 36.055513
+34 73 45.650849
+34 74 90.077744
+34 75 65.192024
+34 76 82.462113
+34 77 28.178006
+34 78 65.787537
+34 79 83.006024
+34 80 89.944427
+34 81 43.908997
+34 82 48.836462
+34 83 60.728906
+34 84 48.373546
+34 85 28.284271
+34 86 22.090722
+34 87 64.007812
+34 88 73.006849
+34 89 69.354164
+34 90 26.907248
+34 91 52.801515
+34 92 39.812058
+34 93 36.715120
+34 94 36.124784
+34 95 36.235342
+34 96 31.384710
+34 97 41.725292
+34 98 81.301906
+34 99 64.884513
+34 100 59.841457
+34 101 68.410526
+35 1 47.434165
+35 2 78.102497
+35 3 74.625733
+35 4 80.430094
+35 5 79.056942
+35 6 82.006097
+35 7 78.032045
+35 8 80.622577
+35 9 83.216585
+35 10 75.000000
+35 11 75.166482
+35 12 77.162167
+35 13 77.646635
+35 14 80.000000
+35 15 80.622577
+35 16 83.150466
+35 17 85.146932
+35 18 85.586214
+35 19 50.803543
+35 20 49.739320
+35 21 47.423623
+35 22 54.083269
+35 23 49.244289
+35 24 55.758407
+35 25 51.078371
+35 26 58.309519
+35 27 11.180340
+35 28 10.000000
+35 29 8.602325
+35 30 5.000000
+35 31 5.830952
+35 32 3.000000
+35 33 5.385165
+35 34 10.000000
+35 36 53.141321
+35 37 53.851648
+35 38 51.078371
+35 39 50.537115
+35 40 51.478151
+35 41 55.901699
+35 42 48.259714
+35 43 54.083269
+35 44 58.309519
+35 45 55.758407
+35 46 80.212219
+35 47 80.709355
+35 48 83.600239
+35 49 52.430907
+35 50 48.764741
+35 51 13.000000
+35 52 33.541020
+35 53 60.207973
+35 54 66.708320
+35 55 39.051248
+35 56 60.415230
+35 57 35.000000
+35 58 55.901699
+35 59 74.330344
+35 60 76.485293
+35 61 74.330344
+35 62 50.000000
+35 63 20.000000
+35 64 25.000000
+35 65 40.311289
+35 66 50.249378
+35 67 44.045431
+35 68 22.135944
+35 69 51.478151
+35 70 56.612719
+35 71 60.464866
+35 72 28.284271
+35 73 37.202150
+35 74 86.683332
+35 75 66.708320
+35 76 85.440037
+35 77 33.970576
+35 78 69.771054
+35 79 79.812280
+35 80 85.615419
+35 81 39.849718
+35 82 42.720019
+35 83 58.549125
+35 84 48.166378
+35 85 28.635642
+35 86 25.059928
+35 87 64.938432
+35 88 73.824115
+35 89 65.192024
+35 90 34.985711
+35 91 49.477268
+35 92 36.674242
+35 93 32.984845
+35 94 29.410882
+35 95 30.870698
+35 96 29.068884
+35 97 35.510562
+35 98 82.764727
+35 99 61.400326
+35 100 59.000000
+35 101 62.769419
+36 1 44.204072
+36 2 42.000000
+36 3 46.097722
+36 4 45.000000
+36 5 47.265209
+36 6 47.000000
+36 7 50.009999
+36 8 52.952809
+36 9 52.239832
+36 10 75.822160
+36 11 72.622311
+36 12 74.202426
+36 13 71.281134
+36 14 79.649231
+36 15 73.783467
+36 16 79.056942
+36 17 80.709355
+36 18 78.032045
+36 19 83.240615
+36 20 79.056942
+36 21 74.330344
+36 22 84.433406
+36 23 75.026662
+36 24 85.094066
+36 25 75.769387
+36 26 86.162637
+36 27 61.717096
+36 28 57.306195
+36 29 60.415230
+36 30 55.036352
+36 31 58.872744
+36 32 54.230987
+36 33 58.523500
+36 34 62.641839
+36 35 53.141321
+36 37 2.000000
+36 38 3.605551
+36 39 7.071068
+36 40 8.602325
+36 41 7.000000
+36 42 13.453624
+36 43 13.000000
+36 44 12.000000
+36 45 12.369317
+36 46 47.095647
+36 47 49.254441
+36 48 76.321688
+36 49 83.815273
+36 50 77.162167
+36 51 50.249378
+36 52 66.098411
+36 53 69.202601
+36 54 58.600341
+36 55 27.730849
+36 56 44.654227
+36 57 52.810984
+36 58 70.491134
+36 59 91.263355
+36 60 86.452299
+36 61 57.697487
+36 62 29.732137
+36 63 50.039984
+36 64 65.030762
+36 65 59.236813
+36 66 55.217751
+36 67 54.589376
+36 68 43.104524
+36 69 36.796739
+36 70 48.836462
+36 71 35.777088
+36 72 30.066593
+36 73 20.396078
+36 74 69.641941
+36 75 80.212219
+36 76 101.212647
+36 77 73.334848
+36 78 93.059121
+36 79 65.741920
+36 80 63.324561
+36 81 42.941821
+36 82 32.449961
+36 83 58.000000
+36 84 61.773781
+36 85 56.885851
+36 86 62.128898
+36 87 76.400262
+36 88 82.134037
+36 89 50.774009
+36 90 80.000000
+36 91 48.414874
+36 92 46.615448
+36 93 44.271887
+36 94 33.541020
+36 95 38.327536
+36 96 49.244289
+36 97 33.241540
+36 98 91.967386
+36 99 52.630789
+36 100 64.660653
+36 101 40.249224
+37 1 43.011626
+37 2 40.000000
+37 3 44.147480
+37 4 43.000000
+37 5 45.276926
+37 6 45.000000
+37 7 48.052055
+37 8 50.990195
+37 9 50.249378
+37 10 74.330344
+37 11 71.063352
+37 12 72.622311
+37 13 69.634761
+37 14 78.102497
+37 15 72.111026
+37 16 77.420927
+37 17 79.056942
+37 18 76.321688
+37 19 82.710338
+37 20 78.447435
+37 21 73.681748
+37 22 83.815273
+37 23 74.330344
+37 24 84.433406
+37 25 75.026662
+37 26 85.440037
+37 27 62.649820
+37 28 58.309519
+37 29 61.269895
+37 30 55.901699
+37 31 59.615434
+37 32 55.036352
+37 33 59.236813
+37 34 63.245553
+37 35 53.851648
+37 36 2.000000
+37 38 3.000000
+37 39 5.830952
+37 40 7.071068
+37 41 5.000000
+37 42 12.206556
+37 43 11.180340
+37 44 10.000000
+37 45 10.440307
+37 46 45.099889
+37 47 47.265209
+37 48 74.625733
+37 49 83.240615
+37 50 76.537572
+37 51 50.487622
+37 52 65.764732
+37 53 68.007353
+37 54 57.008771
+37 55 26.925824
+37 56 43.011626
+37 57 52.201533
+37 58 69.462220
+37 59 90.138782
+37 60 85.146932
+37 61 55.901699
+37 62 28.284271
+37 63 50.000000
+37 64 65.000000
+37 65 58.523500
+37 66 54.083269
+37 67 53.665631
+37 68 43.011626
+37 69 35.355339
+37 70 47.381431
+37 71 34.000000
+37 72 30.000000
+37 73 20.099751
+37 74 67.779053
+37 75 79.056942
+37 76 100.000000
+37 77 73.171033
+37 78 92.130342
+37 79 63.953108
+37 80 61.400326
+37 81 42.047592
+37 82 31.384710
+37 83 56.639209
+37 84 60.827625
+37 85 56.568542
+37 86 62.032250
+37 87 75.213031
+37 88 80.808415
+37 89 49.091751
+37 90 80.024996
+37 91 47.201695
+37 92 45.880279
+37 93 43.680659
+37 94 33.241540
+37 95 37.854986
+37 96 48.836462
+37 97 32.572995
+37 98 90.609050
+37 99 51.088159
+37 100 63.411355
+37 101 38.470768
+38 1 40.607881
+38 2 40.112342
+38 3 43.566042
+38 4 43.104524
+38 5 45.044423
+38 6 45.099889
+38 7 47.518417
+38 8 50.487622
+38 9 50.039984
+38 10 72.346389
+38 11 69.202601
+38 12 70.802542
+38 13 67.955868
+38 14 76.216796
+38 15 70.491134
+38 16 75.716577
+38 17 77.388630
+38 18 74.793048
+38 19 79.812280
+38 20 75.584390
+38 21 70.837843
+38 22 80.956779
+38 23 71.512237
+38 24 81.596569
+38 25 72.235725
+38 26 82.637764
+38 27 60.033324
+38 28 55.758407
+38 29 58.591808
+38 30 53.235327
+38 31 56.859476
+38 32 52.325902
+38 33 56.462377
+38 34 60.406953
+38 35 51.078371
+38 36 3.605551
+38 37 3.000000
+38 39 3.605551
+38 40 5.385165
+38 41 5.830952
+38 42 9.899495
+38 43 10.198039
+38 44 10.440307
+38 45 10.000000
+38 46 45.000000
+38 47 47.042534
+38 48 73.061618
+38 49 80.361682
+38 50 73.681748
+38 51 47.518417
+38 52 62.801274
+38 53 65.604878
+38 54 55.217751
+38 55 24.166092
+38 56 41.340053
+38 57 49.335586
+38 58 66.887966
+38 59 87.658428
+38 60 82.879430
+38 61 54.626001
+38 62 26.248809
+38 63 47.000000
+38 64 62.000000
+38 65 55.713553
+38 66 51.613952
+38 67 51.000000
+38 68 40.012498
+38 69 33.301652
+38 70 45.343136
+38 71 32.695565
+38 72 27.000000
+38 73 17.117243
+38 74 66.730802
+38 75 76.609399
+38 76 97.616597
+38 77 70.178344
+38 78 89.470666
+38 79 62.649820
+38 80 60.638272
+38 81 39.357337
+38 82 28.844410
+38 83 54.451814
+38 84 58.180753
+38 85 53.600373
+38 86 59.033889
+38 87 72.801099
+38 88 78.568442
+38 89 47.507894
+38 90 77.025970
+38 91 44.821870
+38 92 43.081318
+38 93 40.804412
+38 94 30.265492
+38 95 34.928498
+38 96 45.891176
+38 97 29.732137
+38 98 88.413800
+38 99 49.203658
+38 100 61.073726
+38 101 37.161808
+39 1 37.202150
+39 2 37.336309
+39 3 40.311289
+39 4 40.311289
+39 5 42.000000
+39 6 42.296572
+39 7 44.283180
+39 8 47.265209
+39 9 47.000000
+39 10 68.767725
+39 11 65.604878
+39 12 67.201190
+39 13 64.350602
+39 14 72.622311
+39 15 66.887966
+39 16 72.111026
+39 17 73.783467
+39 18 71.196910
+39 19 77.129761
+39 20 72.801099
+39 21 68.007353
+39 22 78.160092
+39 23 68.622154
+39 24 78.746428
+39 25 69.289249
+39 26 79.711982
+39 27 59.908263
+39 28 55.803226
+39 29 58.309519
+39 30 53.000000
+39 31 56.356011
+39 32 51.971146
+39 33 55.901699
+39 34 59.615434
+39 35 50.537115
+39 36 7.071068
+39 37 5.830952
+39 38 3.605551
+39 40 2.000000
+39 41 5.385165
+39 42 6.403124
+39 43 7.000000
+39 44 8.602325
+39 45 7.280110
+39 46 42.047592
+39 47 44.000000
+39 48 69.462220
+39 49 77.620873
+39 50 70.880181
+39 51 46.097722
+39 52 60.406953
+39 53 62.201286
+39 54 51.613952
+39 55 21.189620
+39 56 37.735925
+39 57 46.572524
+39 58 63.631753
+39 59 84.314886
+39 60 79.397733
+39 61 51.078371
+39 62 22.671568
+39 63 45.099889
+39 64 60.074953
+39 65 52.810984
+39 66 48.259714
+39 67 47.853944
+39 68 38.052595
+39 69 29.732137
+39 70 41.773197
+39 71 29.154759
+39 72 25.179357
+39 73 15.033296
+39 74 63.245553
+39 75 73.239334
+39 76 94.201911
+39 77 68.029405
+39 78 86.313383
+39 79 59.093147
+39 80 57.271284
+39 81 36.249138
+39 82 25.553865
+39 83 50.931326
+39 84 55.009090
+39 85 51.244512
+39 86 57.008771
+39 87 69.404611
+39 88 75.073298
+39 89 43.908997
+39 90 75.166482
+39 91 41.400483
+39 92 40.162171
+39 93 38.078866
+39 94 28.017851
+39 95 32.388269
+39 96 43.416587
+39 97 26.925824
+39 98 84.899941
+39 99 45.607017
+39 100 57.628118
+39 101 33.615473
+40 1 36.055513
+40 2 35.355339
+40 3 38.327536
+40 4 38.327536
+40 5 40.000000
+40 6 40.311289
+40 7 42.296572
+40 8 45.276926
+40 9 45.000000
+40 10 67.268120
+40 11 64.031242
+40 12 65.604878
+40 13 62.681736
+40 14 71.063352
+40 15 65.192024
+40 16 70.455660
+40 17 72.111026
+40 18 69.462220
+40 19 76.687678
+40 20 72.277244
+40 21 67.446275
+40 22 77.620873
+40 23 68.007353
+40 24 78.160092
+40 25 68.622154
+40 26 79.056942
+40 27 61.032778
+40 28 57.008771
+40 29 59.363288
+40 30 54.083269
+40 31 57.306195
+40 32 53.000000
+40 33 56.824291
+40 34 60.415230
+40 35 51.478151
+40 36 8.602325
+40 37 7.071068
+40 38 5.385165
+40 39 2.000000
+40 41 5.000000
+40 42 5.385165
+40 43 5.000000
+40 44 7.071068
+40 45 5.385165
+40 46 40.049969
+40 47 42.000000
+40 48 67.742158
+40 49 77.129761
+40 50 70.342022
+40 51 46.572524
+40 52 60.207973
+40 53 61.032778
+40 54 50.000000
+40 55 20.615528
+40 56 36.055513
+40 57 46.097722
+40 58 62.649820
+40 59 83.216585
+40 60 78.102497
+40 61 49.244289
+40 62 21.213203
+40 63 45.276926
+40 64 60.207973
+40 65 52.201533
+40 66 47.169906
+40 67 47.010637
+40 68 38.209946
+40 69 28.284271
+40 70 40.311289
+40 71 27.313001
+40 72 25.495098
+40 73 15.297059
+40 74 61.351447
+40 75 72.111026
+40 76 93.005376
+40 77 68.000000
+40 78 85.428333
+40 79 57.271284
+40 80 55.317267
+40 81 35.468296
+40 82 24.596748
+40 83 49.578221
+40 84 54.129474
+40 85 51.088159
+40 86 57.078893
+40 87 68.242216
+40 88 73.756356
+40 89 42.190046
+40 90 75.325958
+40 91 40.224371
+40 92 39.560081
+40 93 37.656341
+40 94 28.017851
+40 95 32.140317
+40 96 43.185646
+40 97 26.476405
+40 98 83.546394
+40 99 44.045431
+40 100 56.400355
+40 101 31.780497
+41 1 40.311289
+41 2 35.000000
+41 3 39.293765
+41 4 38.000000
+41 5 40.311289
+41 6 40.000000
+41 7 43.174066
+41 8 46.097722
+41 9 45.276926
+41 10 70.710678
+41 11 67.268120
+41 12 68.767725
+41 13 65.604878
+41 14 74.330344
+41 15 68.007353
+41 16 73.409809
+41 17 75.000000
+41 18 72.111026
+41 19 81.584312
+41 20 77.129761
+41 21 72.277244
+41 22 82.462113
+41 23 72.801099
+41 24 82.969874
+41 25 73.375745
+41 26 83.815273
+41 27 65.192024
+41 28 61.032778
+41 29 63.631753
+41 30 58.309519
+41 31 61.717096
+41 32 57.306195
+41 33 61.269895
+41 34 65.000000
+41 35 55.901699
+41 36 7.000000
+41 37 5.000000
+41 38 5.830952
+41 39 5.385165
+41 40 5.000000
+41 42 10.198039
+41 43 7.071068
+41 44 5.000000
+41 45 5.830952
+41 46 40.112342
+41 47 42.296572
+41 48 70.455660
+41 49 82.000000
+41 50 75.186435
+41 51 51.419841
+41 52 65.192024
+41 53 65.192024
+41 54 53.150729
+41 55 25.495098
+41 56 39.051248
+41 57 50.990195
+41 58 67.082039
+41 59 87.464278
+41 60 82.006097
+41 61 51.478151
+41 62 25.000000
+41 63 50.249378
+41 64 65.192024
+41 65 57.008771
+41 66 51.478151
+41 67 51.623638
+41 68 43.185646
+41 69 32.015621
+41 70 43.931765
+41 71 29.681644
+41 72 30.413813
+41 73 20.223748
+41 74 63.158531
+41 75 76.321688
+41 76 97.082439
+41 77 73.000000
+41 78 89.961103
+41 79 59.539903
+41 80 56.612719
+41 81 40.162171
+41 82 29.154759
+41 83 53.413481
+41 84 58.694122
+41 85 56.080300
+41 86 62.072538
+41 87 72.401657
+41 88 77.620873
+41 89 45.000000
+41 90 80.305666
+41 91 44.418465
+41 92 44.384682
+41 93 42.579338
+41 94 33.015148
+41 95 37.121422
+41 96 48.166378
+41 97 31.400637
+41 98 87.321246
+41 99 47.381431
+41 100 60.464866
+41 101 34.132096
+42 1 30.805844
+42 2 34.481879
+42 3 36.000000
+42 4 37.363083
+42 5 38.327536
+42 6 39.293765
+42 7 40.000000
+42 8 43.000000
+42 9 43.289722
+42 10 62.481997
+42 11 59.405387
+42 12 61.032778
+42 13 58.309519
+42 14 66.400301
+42 15 60.901560
+42 16 66.037868
+42 17 67.742158
+42 18 65.299311
+42 19 71.386273
+42 20 66.940272
+42 21 62.096699
+42 22 72.277244
+42 23 62.641839
+42 24 72.801099
+42 25 63.245553
+42 26 73.681748
+42 27 58.258047
+42 28 54.488531
+42 29 56.400355
+42 30 51.224994
+42 31 54.083269
+42 32 50.000000
+42 33 53.535035
+42 34 56.824291
+42 35 48.259714
+42 36 13.453624
+42 37 12.206556
+42 38 9.899495
+42 39 6.403124
+42 40 5.385165
+42 41 10.198039
+42 43 5.830952
+42 44 10.440307
+42 45 7.615773
+42 46 38.639358
+42 47 40.311289
+42 48 63.529521
+42 49 71.805292
+42 50 65.000000
+42 51 42.379240
+42 52 55.081757
+42 53 55.803226
+42 54 45.486262
+42 55 15.297059
+42 56 31.764760
+42 57 40.792156
+42 58 57.306195
+42 59 77.935871
+42 60 73.000000
+42 61 45.541190
+42 62 16.401219
+42 63 40.607881
+42 64 55.443665
+42 65 46.840154
+42 66 41.880783
+42 67 41.629317
+42 68 33.541020
+42 69 23.430749
+42 70 35.468296
+42 71 23.769729
+42 72 21.189620
+42 73 11.180340
+42 74 57.974132
+42 75 66.850580
+42 76 87.800911
+42 77 63.031738
+42 78 80.056230
+42 79 53.488316
+42 80 52.469038
+42 81 30.083218
+42 82 19.235384
+42 83 44.553339
+42 84 48.754487
+42 85 46.010868
+42 86 52.239832
+42 87 63.007936
+42 88 68.680419
+42 89 38.013156
+42 90 70.576200
+42 91 35.000000
+42 92 34.205263
+42 93 32.388269
+42 94 23.194827
+42 95 27.018512
+42 96 38.052595
+42 97 21.213203
+42 98 78.517514
+42 99 39.408121
+42 100 51.224994
+42 101 28.160256
+43 1 33.541020
+43 2 30.413813
+43 3 33.376639
+43 4 33.376639
+43 5 35.000000
+43 6 35.355339
+43 7 37.336309
+43 8 40.311289
+43 9 40.000000
+43 10 63.639610
+43 11 60.207973
+43 12 61.717096
+43 13 58.600341
+43 14 67.268120
+43 15 61.032778
+43 16 66.400301
+43 17 68.007353
+43 18 65.192024
+43 19 75.802375
+43 20 71.196910
+43 21 66.287254
+43 22 76.485293
+43 23 66.708320
+43 24 76.902536
+43 25 67.186308
+43 26 77.620873
+43 27 64.031242
+43 28 60.207973
+43 29 62.201286
+43 30 57.008771
+43 31 59.908263
+43 32 55.803226
+43 33 59.363288
+43 34 62.649820
+43 35 54.083269
+43 36 13.000000
+43 37 11.180340
+43 38 10.198039
+43 39 7.000000
+43 40 5.000000
+43 41 7.071068
+43 42 5.830952
+43 44 5.000000
+43 45 2.000000
+43 46 35.057096
+43 47 37.000000
+43 48 63.513778
+43 49 76.118329
+43 50 69.231496
+43 51 48.104054
+43 52 60.000000
+43 53 58.309519
+43 54 46.097722
+43 55 20.000000
+43 56 32.015621
+43 57 45.276926
+43 58 60.415230
+43 59 80.622577
+43 60 75.000000
+43 61 44.721360
+43 62 18.027756
+43 63 46.097722
+43 64 60.827625
+43 65 50.990195
+43 66 44.721360
+43 67 45.221676
+43 68 39.051248
+43 69 25.000000
+43 70 36.878178
+43 71 22.825424
+43 72 26.925824
+43 73 17.000000
+43 74 56.648036
+43 75 69.462220
+43 76 90.138782
+43 77 68.183576
+43 78 83.384651
+43 79 52.773099
+43 80 50.447993
+43 81 33.955854
+43 82 22.803509
+43 83 46.400431
+43 84 52.201533
+43 85 51.039201
+43 86 57.558666
+43 87 65.513357
+43 88 70.604532
+43 89 38.013156
+43 90 75.953933
+43 91 37.589892
+43 92 38.470768
+43 93 37.054015
+43 94 28.635642
+43 95 32.062439
+43 96 43.011626
+43 97 26.000000
+43 98 80.280757
+43 99 40.311289
+43 100 53.535035
+43 101 27.294688
+44 1 38.078866
+44 2 30.000000
+44 3 34.481879
+44 4 33.000000
+44 5 35.355339
+44 6 35.000000
+44 7 38.327536
+44 8 41.231056
+44 9 40.311289
+44 10 67.268120
+44 11 63.639610
+44 12 65.069194
+44 13 61.717096
+44 14 70.710678
+44 15 64.031242
+44 16 69.526973
+44 17 71.063352
+44 18 68.007353
+44 19 80.752709
+44 20 76.118329
+44 21 71.196910
+44 22 81.394103
+44 23 71.589105
+44 24 81.786307
+44 25 72.034714
+44 26 82.462113
+44 27 68.007353
+44 28 64.031242
+44 29 66.287254
+44 30 61.032778
+44 31 64.140471
+44 32 59.908263
+44 33 63.631753
+44 34 67.082039
+44 35 58.309519
+44 36 12.000000
+44 37 10.000000
+44 38 10.440307
+44 39 8.602325
+44 40 7.071068
+44 41 5.000000
+44 42 10.440307
+44 43 5.000000
+44 45 3.000000
+44 46 35.128336
+44 47 37.336309
+44 48 66.400301
+44 49 81.049368
+44 50 74.148500
+44 51 52.810984
+44 52 65.000000
+44 53 62.649820
+44 54 49.497475
+44 55 25.000000
+44 56 35.355339
+44 57 50.249378
+44 58 65.000000
+44 59 85.000000
+44 60 79.056942
+44 61 47.169906
+44 62 22.360680
+44 63 50.990195
+44 64 65.764732
+44 65 55.901699
+44 66 49.244289
+44 67 50.000000
+44 68 43.931765
+44 69 29.154759
+44 70 40.804412
+44 71 25.612497
+44 72 31.622777
+44 73 21.540659
+44 74 58.600341
+44 75 73.824115
+44 76 94.339811
+44 77 73.171033
+44 78 88.022724
+44 79 55.226805
+44 80 51.865210
+44 81 38.832976
+44 82 27.658633
+44 83 50.477718
+44 84 56.920998
+44 85 56.035703
+44 86 62.513998
+44 87 69.835521
+44 88 74.632433
+44 89 41.109610
+44 90 80.894994
+44 91 42.047592
+44 92 43.416587
+44 93 42.047592
+44 94 33.541020
+44 95 37.054015
+44 96 48.010416
+44 97 31.000000
+44 98 84.202138
+44 99 43.931765
+44 100 57.801384
+44 101 30.000000
+45 1 35.341194
+45 2 30.149627
+45 3 33.734256
+45 4 33.136083
+45 5 35.057096
+45 6 35.128336
+45 7 37.656341
+45 8 40.607881
+45 9 40.049969
+45 10 65.069194
+45 11 61.554854
+45 12 63.031738
+45 13 59.816386
+45 14 68.622154
+45 15 62.201286
+45 16 67.623960
+45 17 69.202601
+45 18 66.287254
+45 19 77.781746
+45 20 73.164199
+45 21 68.249542
+45 22 78.447435
+45 23 68.658576
+45 24 78.854296
+45 25 69.123079
+45 26 79.555012
+45 27 65.604878
+45 28 61.717096
+45 29 63.820060
+45 30 58.600341
+45 31 61.587336
+45 32 57.428216
+45 33 61.057350
+45 34 64.412732
+45 35 55.758407
+45 36 12.369317
+45 37 10.440307
+45 38 10.000000
+45 39 7.280110
+45 40 5.385165
+45 41 5.830952
+45 42 7.615773
+45 43 2.000000
+45 44 3.000000
+45 46 35.000000
+45 47 37.054015
+45 48 64.637450
+45 49 78.089692
+45 50 71.196910
+45 51 49.979996
+45 52 62.000000
+45 53 60.033324
+45 54 47.423623
+45 55 22.000000
+45 56 33.301652
+45 57 47.265209
+45 58 62.241465
+45 59 82.365041
+45 60 76.609399
+45 61 45.650849
+45 62 19.723083
+45 63 48.052055
+45 64 62.801274
+45 65 52.952809
+45 66 46.518813
+45 67 47.127487
+45 68 41.000000
+45 69 26.627054
+45 70 38.418745
+45 71 23.853721
+45 72 28.792360
+45 73 18.788294
+45 74 57.384667
+45 75 71.196910
+45 76 91.809586
+45 77 70.178344
+45 78 85.234969
+45 79 53.712196
+45 80 50.960769
+45 81 35.902646
+45 82 24.738634
+45 83 48.010416
+45 84 54.083269
+45 85 53.037722
+45 86 59.539903
+45 87 67.230945
+45 88 72.201108
+45 89 39.204592
+45 90 77.929455
+45 91 39.357337
+45 92 40.447497
+45 93 39.051248
+45 94 30.594117
+45 95 34.058773
+45 96 45.011110
+45 97 28.000000
+45 98 81.835200
+45 99 41.725292
+45 100 55.226805
+45 101 28.301943
+46 1 37.735925
+46 2 5.830952
+46 3 7.280110
+46 4 3.605551
+46 5 2.000000
+46 6 3.000000
+46 7 7.280110
+46 8 8.602325
+46 9 5.385165
+46 10 48.052055
+46 11 43.174066
+46 12 43.680659
+46 13 38.897301
+46 14 49.335586
+46 15 39.924930
+46 16 45.694639
+46 17 46.518813
+46 18 42.059482
+46 19 80.653580
+46 20 75.286121
+46 21 70.519501
+46 22 79.555012
+46 23 69.921384
+46 24 79.075913
+46 25 69.375788
+46 26 78.447435
+46 27 91.263355
+46 28 88.509886
+46 29 88.814413
+46 30 84.314886
+46 31 85.603738
+46 32 82.661962
+46 33 84.811556
+46 34 86.452299
+46 35 80.212219
+46 36 47.095647
+46 37 45.099889
+46 38 45.000000
+46 39 42.047592
+46 40 40.049969
+46 41 40.112342
+46 42 38.639358
+46 43 35.057096
+46 44 35.128336
+46 45 35.000000
+46 47 2.828427
+46 48 41.146081
+46 49 80.081209
+46 50 73.375745
+46 51 70.092796
+46 52 71.196910
+46 53 52.239832
+46 54 32.000000
+46 55 41.340053
+46 56 24.166092
+46 57 55.758407
+46 58 57.870545
+46 59 72.173402
+46 60 62.801274
+46 61 22.561028
+46 62 30.232433
+46 63 65.069194
+46 64 76.609399
+46 65 57.697487
+46 66 44.598206
+46 67 49.658836
+46 68 59.464275
+46 69 29.732137
+46 70 31.953091
+46 71 19.849433
+46 72 52.478567
+46 73 46.238512
+46 74 28.425341
+46 75 62.000000
+46 76 78.447435
+46 77 80.622577
+46 78 79.056942
+46 79 28.635642
+46 80 19.798990
+46 81 44.204072
+46 82 37.643060
+46 83 39.623226
+46 84 53.758720
+46 85 64.637450
+46 86 73.006849
+46 87 58.008620
+46 88 58.549125
+46 89 24.331050
+46 90 90.210864
+46 91 38.910153
+46 92 49.406477
+46 93 51.088159
+46 94 50.803543
+46 95 50.249378
+46 96 57.628118
+46 97 44.821870
+46 98 65.969690
+46 99 30.594117
+46 100 47.381431
+46 101 18.601075
+47 1 37.202150
+47 2 8.602325
+47 3 6.403124
+47 4 6.403124
+47 5 2.000000
+47 6 5.385165
+47 7 5.000000
+47 8 5.830952
+47 9 3.000000
+47 10 45.705580
+47 11 40.792156
+47 12 41.231056
+47 13 36.400549
+47 14 46.840154
+47 15 37.336309
+47 16 43.081318
+47 17 43.863424
+47 18 39.357337
+47 19 79.378838
+47 20 74.000000
+47 21 69.289249
+47 22 78.160092
+47 23 68.622154
+47 24 77.620873
+47 25 68.007353
+47 26 76.902536
+47 27 91.809586
+47 28 89.185201
+47 29 89.308454
+47 30 84.905830
+47 31 86.023253
+47 32 83.216585
+47 33 85.211502
+47 34 86.683332
+47 35 80.709355
+47 36 49.254441
+47 37 47.265209
+47 38 47.042534
+47 39 44.000000
+47 40 42.000000
+47 41 42.296572
+47 42 40.311289
+47 43 37.000000
+47 44 37.336309
+47 45 37.054015
+47 46 2.828427
+47 48 38.483763
+47 49 78.746428
+47 50 72.111026
+47 51 70.292247
+47 52 70.491134
+47 53 50.487622
+47 54 30.066593
+47 55 42.059482
+47 56 23.323808
+47 57 55.217751
+47 58 56.293872
+47 59 70.064256
+47 60 60.530984
+47 61 20.223748
+47 62 30.886890
+47 63 65.069194
+47 64 76.216796
+47 65 56.824291
+47 66 43.462628
+47 67 48.764741
+47 68 59.665736
+47 69 29.732137
+47 70 30.870698
+47 71 20.248457
+47 72 53.235327
+47 73 47.434165
+47 74 25.612497
+47 75 60.033324
+47 76 76.118329
+47 77 79.924965
+47 78 77.162167
+47 79 26.000000
+47 80 16.970563
+47 81 43.931765
+47 82 38.013156
+47 83 38.078866
+47 84 52.554733
+47 85 64.202804
+47 86 72.622311
+47 87 56.080300
+47 88 56.320511
+47 89 22.803509
+47 90 89.587946
+47 91 38.078866
+47 92 49.040799
+47 93 50.931326
+47 94 51.312766
+47 95 50.447993
+47 96 57.384667
+47 97 45.221676
+47 98 63.560994
+47 99 29.120440
+47 100 45.705580
+47 101 18.384776
+48 1 38.327536
+48 2 46.141088
+48 3 36.055513
+48 4 44.721360
+48 5 39.357337
+48 6 43.863424
+48 7 34.000000
+48 8 32.695565
+48 9 37.336309
+48 10 12.806248
+48 11 9.433981
+48 12 7.810250
+48 13 6.000000
+48 14 10.440307
+48 15 3.000000
+48 16 5.000000
+48 17 5.385165
+48 18 2.000000
+48 19 58.000000
+48 20 53.150729
+48 21 50.000000
+48 22 55.172457
+48 23 48.414874
+48 24 53.814496
+48 25 46.861498
+48 26 51.855569
+48 27 94.201911
+48 28 93.536089
+48 29 91.241438
+48 30 88.566359
+48 31 87.298339
+48 32 86.579443
+48 33 86.313383
+48 34 85.375641
+48 35 83.600239
+48 36 76.321688
+48 37 74.625733
+48 38 73.061618
+48 39 69.462220
+48 40 67.742158
+48 41 70.455660
+48 42 63.529521
+48 43 63.513778
+48 44 66.400301
+48 45 64.637450
+48 46 41.146081
+48 47 38.483763
+48 49 56.568542
+48 50 51.855569
+48 51 70.710678
+48 52 58.600341
+48 53 27.459060
+48 54 18.681542
+48 55 55.081757
+48 56 31.764760
+48 57 49.030603
+48 58 34.409301
+48 59 37.336309
+48 60 26.248809
+48 61 19.849433
+48 62 47.423623
+48 63 63.788714
+48 64 67.779053
+48 65 45.541190
+48 66 33.376639
+48 67 39.812058
+48 68 62.072538
+48 69 40.853396
+48 70 29.832868
+48 71 40.804412
+48 72 63.788714
+48 73 64.195015
+48 74 15.000000
+48 75 30.805844
+48 76 40.112342
+48 77 66.730802
+48 78 46.957428
+48 79 12.529964
+48 80 23.345235
+48 81 45.044423
+48 82 48.764741
+48 83 25.079872
+48 84 37.696154
+48 85 57.280014
+48 86 64.845971
+48 87 28.319605
+48 88 23.259407
+48 89 25.553865
+48 90 76.321688
+48 91 35.057096
+48 92 47.095647
+48 93 51.039201
+48 94 59.413803
+48 95 55.081757
+48 96 54.589376
+48 97 53.758720
+48 98 27.073973
+48 99 25.000000
+48 100 26.000000
+48 101 36.400549
+49 1 45.044423
+49 2 81.786307
+49 3 72.801099
+49 4 82.462113
+49 5 78.160092
+49 6 82.969874
+49 7 74.000000
+49 8 75.026662
+49 9 79.711982
+49 10 43.863424
+49 11 47.423623
+49 12 48.795492
+49 13 52.497619
+49 14 47.634021
+49 15 54.488531
+49 16 53.150729
+49 17 54.671748
+49 18 58.000000
+49 19 2.000000
+49 20 5.000000
+49 21 10.000000
+49 22 2.000000
+49 23 10.198039
+49 24 4.000000
+49 25 10.770330
+49 26 7.000000
+49 27 58.600341
+49 28 60.901560
+49 29 55.901699
+49 30 56.603887
+49 31 52.354560
+49 32 54.918121
+49 33 51.478151
+49 34 47.423623
+49 35 52.430907
+49 36 83.815273
+49 37 83.240615
+49 38 80.361682
+49 39 77.620873
+49 40 77.129761
+49 41 82.000000
+49 42 71.805292
+49 43 76.118329
+49 44 81.049368
+49 45 78.089692
+49 46 80.081209
+49 47 78.746428
+49 48 56.568542
+49 50 7.000000
+49 51 42.426407
+49 52 19.849433
+49 53 30.232433
+49 54 50.089919
+49 55 56.515485
+49 56 56.293872
+49 57 31.048349
+49 58 23.323808
+49 59 27.459060
+49 60 35.341194
+49 61 61.269895
+49 62 60.074953
+49 63 37.802116
+49 64 27.459060
+49 65 25.179357
+49 66 35.693137
+49 67 32.015621
+49 68 43.046487
+49 69 55.036352
+49 70 48.270074
+49 71 64.381674
+49 72 55.036352
+49 73 63.568860
+49 74 68.007353
+49 75 26.627054
+49 76 37.000000
+49 77 19.313208
+49 78 19.104973
+49 79 61.294372
+49 80 72.560320
+49 81 42.296572
+49 82 53.460266
+49 83 40.853396
+49 84 26.476405
+49 85 28.301943
+49 86 27.658633
+49 87 28.319605
+49 88 35.510562
+49 89 55.973208
+49 90 25.000000
+49 91 42.296572
+49 92 37.656341
+49 93 39.560081
+49 94 50.695167
+49 95 45.541190
+49 96 34.928498
+49 97 50.695167
+49 98 40.162171
+49 99 49.648766
+49 100 34.000000
+49 101 62.968246
+50 1 38.052595
+50 2 74.953319
+50 3 66.098411
+50 4 75.690158
+50 5 71.470274
+50 6 76.243032
+50 7 67.416615
+50 8 68.541958
+50 9 73.164199
+50 10 39.408121
+50 11 42.520583
+50 12 44.045431
+50 13 47.381431
+50 14 43.566042
+50 15 49.578221
+50 16 48.826222
+50 17 50.477718
+50 18 53.413481
+50 19 7.280110
+50 20 2.000000
+50 21 3.000000
+50 22 7.280110
+50 23 3.605551
+50 24 8.062258
+50 25 5.000000
+50 26 9.899495
+50 27 55.973208
+50 28 57.775427
+50 29 53.141321
+50 30 53.225934
+50 31 49.396356
+50 32 51.429563
+50 33 48.466483
+50 34 44.922155
+50 35 48.764741
+50 36 77.162167
+50 37 76.537572
+50 38 73.681748
+50 39 70.880181
+50 40 70.342022
+50 41 75.186435
+50 42 65.000000
+50 43 69.231496
+50 44 74.148500
+50 45 71.196910
+50 46 73.375745
+50 47 72.111026
+50 48 51.855569
+50 49 7.000000
+50 51 37.802116
+50 52 15.264338
+50 53 24.758837
+50 54 43.908997
+50 55 49.729267
+50 56 49.477268
+50 57 24.351591
+50 58 17.691806
+50 59 27.073973
+50 60 32.984845
+50 61 55.072679
+50 62 53.084838
+50 63 32.526912
+50 64 24.351591
+50 65 18.248288
+50 66 28.861739
+50 67 25.019992
+50 68 37.202150
+50 69 48.041649
+50 70 41.484937
+50 71 57.428216
+50 72 48.764741
+50 73 57.008771
+50 74 62.481997
+50 75 23.409400
+50 76 37.656341
+50 77 18.000000
+50 78 21.023796
+50 79 55.605755
+50 80 66.573268
+50 81 35.355339
+50 82 46.529560
+50 83 34.438351
+50 84 19.646883
+50 85 22.671568
+50 86 23.706539
+50 87 24.186773
+50 88 32.310989
+50 89 49.396356
+50 90 25.961510
+50 91 35.355339
+50 92 30.805844
+50 93 32.893768
+50 94 44.283180
+50 95 39.000000
+50 96 28.653098
+50 97 43.965896
+50 98 38.470768
+50 99 43.081318
+50 100 28.017851
+50 101 56.089215
+51 1 35.341194
+51 2 68.622154
+51 3 64.031242
+51 4 70.710678
+51 5 68.767725
+51 6 72.138755
+51 7 67.201190
+51 8 69.634761
+51 9 72.622311
+51 10 62.000000
+51 11 62.201286
+51 12 64.195015
+51 13 64.776539
+51 14 67.000000
+51 15 67.742158
+51 16 70.178344
+51 17 72.173402
+51 18 72.691127
+51 19 41.036569
+51 20 39.051248
+51 21 36.055513
+51 22 43.863424
+51 23 37.735925
+51 24 45.343136
+51 25 39.446166
+51 26 47.634021
+51 27 23.537205
+51 28 23.000000
+51 29 20.615528
+51 30 18.000000
+51 31 16.763055
+51 32 16.000000
+51 33 15.811388
+51 34 16.401219
+51 35 13.000000
+51 36 50.249378
+51 37 50.487622
+51 38 47.518417
+51 39 46.097722
+51 40 46.572524
+51 41 51.419841
+51 42 42.379240
+51 43 48.104054
+51 44 52.810984
+51 45 49.979996
+51 46 70.092796
+51 47 70.292247
+51 48 70.710678
+51 49 42.426407
+51 50 37.802116
+51 52 22.671568
+51 53 47.265209
+51 54 54.120237
+51 55 30.232433
+51 56 48.877398
+51 57 22.000000
+51 58 43.174066
+51 59 62.241465
+51 60 63.788714
+51 61 62.241465
+51 62 40.360872
+51 63 7.000000
+51 64 16.552945
+51 65 27.459060
+51 66 37.336309
+51 67 31.064449
+51 68 10.630146
+51 69 40.607881
+51 70 44.384682
+51 71 50.249378
+51 72 21.189620
+51 73 31.320920
+51 74 74.330344
+51 75 54.120237
+51 76 73.409809
+51 77 25.942244
+51 78 58.523500
+51 79 67.357256
+51 80 73.790243
+51 81 27.730849
+51 82 32.526912
+51 83 45.705580
+51 84 35.227830
+51 85 16.155494
+51 86 15.000000
+51 87 52.172790
+51 88 61.000000
+51 89 53.225934
+51 90 30.413813
+51 91 37.000000
+51 92 24.041631
+51 93 20.615528
+51 94 20.248457
+51 95 19.849433
+51 96 16.124515
+51 97 25.495098
+51 98 70.092796
+51 99 49.040799
+51 100 46.000000
+51 101 52.009614
+52 1 33.541020
+52 2 71.589105
+52 3 64.140471
+52 4 72.897188
+52 5 69.462220
+52 6 73.824115
+52 7 66.287254
+52 8 68.007353
+52 9 72.111026
+52 10 47.434165
+52 11 49.244289
+52 12 51.078371
+52 13 53.235327
+52 14 52.201533
+52 15 55.901699
+52 16 56.648036
+52 17 58.523500
+52 18 60.415230
+52 19 18.601075
+52 20 16.401219
+52 21 13.928388
+52 22 21.213203
+52 23 15.811388
+52 24 22.671568
+52 25 17.720045
+52 26 25.000000
+52 27 41.231056
+52 28 42.720019
+52 29 38.327536
+52 30 38.078866
+52 31 34.481879
+52 32 36.249138
+52 33 33.526109
+52 34 30.413813
+52 35 33.541020
+52 36 66.098411
+52 37 65.764732
+52 38 62.801274
+52 39 60.406953
+52 40 60.207973
+52 41 65.192024
+52 42 55.081757
+52 43 60.000000
+52 44 65.000000
+52 45 62.000000
+52 46 71.196910
+52 47 70.491134
+52 48 58.600341
+52 49 19.849433
+52 50 15.264338
+52 51 22.671568
+52 53 31.622777
+52 54 46.097722
+52 55 40.000000
+52 56 47.169906
+52 57 15.811388
+52 58 25.495098
+52 59 41.231056
+52 60 45.000000
+52 61 56.568542
+52 62 46.097722
+52 63 18.027756
+52 64 10.000000
+52 65 14.142136
+52 66 28.284271
+52 67 22.022716
+52 68 23.769729
+52 69 42.720019
+52 70 40.000000
+52 71 52.924474
+52 72 36.400549
+52 73 45.705580
+52 74 66.400301
+52 75 35.000000
+52 76 52.201533
+52 77 9.433981
+52 78 36.235342
+52 79 59.203040
+52 80 68.593003
+52 81 28.160256
+52 82 38.470768
+52 83 36.235342
+52 84 21.095023
+52 85 9.219544
+52 86 8.544004
+52 87 34.234486
+52 88 43.185646
+52 89 49.040799
+52 90 19.209373
+52 91 32.449961
+52 92 22.803509
+52 93 23.086793
+52 94 32.557641
+52 95 28.071338
+52 96 17.029386
+52 97 34.000000
+52 98 51.039201
+52 99 43.185646
+52 100 32.649655
+52 101 52.773099
+53 1 25.000000
+53 2 55.000000
+53 3 45.099889
+53 4 55.081757
+53 5 50.249378
+53 6 55.226805
+53 7 45.541190
+53 8 46.097722
+53 9 50.990195
+53 10 15.811388
+53 11 18.027756
+53 12 19.723083
+53 13 22.671568
+53 14 20.615528
+53 15 25.000000
+53 16 25.079872
+53 17 26.925824
+53 18 29.154759
+53 19 31.400637
+53 20 26.248809
+53 21 22.671568
+53 22 29.154759
+53 23 21.213203
+53 24 28.178006
+53 25 19.849433
+53 26 26.925824
+53 27 70.000000
+53 28 70.178344
+53 29 67.000000
+53 30 65.192024
+53 31 63.000000
+53 32 63.198101
+53 33 62.000000
+53 34 60.207973
+53 35 60.207973
+53 36 69.202601
+53 37 68.007353
+53 38 65.604878
+53 39 62.201286
+53 40 61.032778
+53 41 65.192024
+53 42 55.803226
+53 43 58.309519
+53 44 62.649820
+53 45 60.033324
+53 46 52.239832
+53 47 50.487622
+53 48 27.459060
+53 49 30.232433
+53 50 24.758837
+53 51 47.265209
+53 52 31.622777
+53 54 20.615528
+53 55 42.426407
+53 56 30.413813
+53 57 25.495098
+53 58 7.071068
+53 59 22.360680
+53 60 18.027756
+53 61 31.622777
+53 62 40.311289
+53 63 40.311289
+53 64 41.231056
+53 65 20.000000
+53 66 14.142136
+53 67 17.464249
+53 68 40.804412
+53 69 33.541020
+53 70 22.803509
+53 71 40.261644
+53 72 47.169906
+53 73 51.662365
+53 74 37.802116
+53 75 11.180340
+53 76 32.015621
+53 77 39.357337
+53 78 27.073973
+53 79 31.064449
+53 80 42.485292
+53 81 27.802878
+53 82 36.878178
+53 83 13.152946
+53 84 12.041595
+53 85 32.015621
+53 86 38.639358
+53 87 7.211103
+53 88 14.317821
+53 89 28.017851
+53 90 48.877398
+53 91 20.808652
+53 92 26.832816
+53 93 30.870698
+53 94 42.190046
+53 95 36.715120
+53 96 31.780497
+53 97 38.418745
+53 98 24.186773
+53 99 22.022716
+53 100 5.099020
+53 101 37.483330
+54 1 20.000000
+54 2 35.355339
+54 3 25.079872
+54 4 35.057096
+54 5 30.000000
+54 6 35.000000
+54 7 25.079872
+54 8 25.495098
+54 9 30.413813
+54 10 18.027756
+54 11 14.142136
+54 12 15.620499
+54 13 13.000000
+54 14 21.213203
+54 15 15.811388
+54 16 20.591260
+54 17 22.360680
+54 18 20.615528
+54 19 51.000000
+54 20 45.650849
+54 21 41.340053
+54 22 49.244289
+54 23 40.311289
+54 24 48.466483
+54 25 39.357337
+54 26 47.434165
+54 27 77.620873
+54 28 76.485293
+54 29 74.726167
+54 30 71.589105
+54 31 70.880181
+54 32 69.634761
+54 33 69.921384
+54 34 69.641941
+54 35 66.708320
+54 36 58.600341
+54 37 57.008771
+54 38 55.217751
+54 39 51.613952
+54 40 50.000000
+54 41 53.150729
+54 42 45.486262
+54 43 46.097722
+54 44 49.497475
+54 45 47.423623
+54 46 32.000000
+54 47 30.066593
+54 48 18.681542
+54 49 50.089919
+54 50 43.908997
+54 51 54.120237
+54 52 46.097722
+54 53 20.615528
+54 55 36.400549
+54 56 14.142136
+54 57 33.541020
+54 58 26.925824
+54 59 40.311289
+54 60 31.622777
+54 61 11.180340
+54 62 29.154759
+54 63 47.434165
+54 64 54.083269
+54 65 32.015621
+54 66 18.027756
+54 67 24.698178
+54 68 44.721360
+54 69 22.360680
+54 70 11.180340
+54 71 24.207437
+54 72 45.276926
+54 73 45.541190
+54 74 20.591260
+54 75 30.000000
+54 76 47.434165
+54 77 55.172457
+54 78 47.095647
+54 79 13.416408
+54 80 22.803509
+54 81 27.166155
+54 82 30.083218
+54 83 9.899495
+54 84 25.495098
+54 85 42.544095
+54 86 50.774009
+54 87 26.019224
+54 88 27.202941
+54 89 8.944272
+54 90 65.069194
+54 91 17.262677
+54 92 30.083218
+54 93 33.734256
+54 94 41.048752
+54 95 37.054015
+54 96 38.275318
+54 97 35.227830
+54 98 35.777088
+54 99 6.324555
+54 100 16.155494
+54 101 20.248457
+55 1 18.027756
+55 2 39.051248
+55 3 36.249138
+55 4 41.400483
+55 5 40.311289
+55 6 43.011626
+55 7 39.924930
+55 8 42.720019
+55 9 44.721360
+55 10 51.478151
+55 11 49.244289
+55 12 51.078371
+55 13 49.335586
+55 14 55.901699
+55 15 52.201533
+55 16 56.648036
+55 17 58.523500
+55 18 57.008771
+55 19 56.089215
+55 20 51.662365
+55 21 46.840154
+55 22 57.008771
+55 23 47.434165
+55 24 57.567352
+55 25 48.104054
+55 26 58.523500
+55 27 50.000000
+55 28 47.169906
+55 29 47.634021
+55 30 43.011626
+55 31 44.598206
+55 32 41.400483
+55 33 43.863424
+55 34 46.097722
+55 35 39.051248
+55 36 27.730849
+55 37 26.925824
+55 38 24.166092
+55 39 21.189620
+55 40 20.615528
+55 41 25.495098
+55 42 15.297059
+55 43 20.000000
+55 44 25.000000
+55 45 22.000000
+55 46 41.340053
+55 47 42.059482
+55 48 55.081757
+55 49 56.515485
+55 50 49.729267
+55 51 30.232433
+55 52 40.000000
+55 53 42.426407
+55 54 36.400549
+55 56 25.000000
+55 57 25.495098
+55 58 43.011626
+55 59 64.031242
+55 60 60.207973
+55 61 40.000000
+55 62 11.180340
+55 63 26.925824
+55 64 41.231056
+55 65 31.622777
+55 66 28.284271
+55 67 26.925824
+55 68 20.124612
+55 69 15.000000
+55 70 25.298221
+55 71 21.931712
+55 72 11.180340
+55 73 9.433981
+55 74 53.000000
+55 75 53.150729
+55 76 74.330344
+55 77 48.259714
+55 78 65.368188
+55 79 47.169906
+55 80 49.648766
+55 81 15.264338
+55 82 6.324555
+55 83 32.756679
+55 84 34.132096
+55 85 31.064449
+55 86 37.854986
+55 87 49.517674
+55 88 56.080300
+55 89 31.064449
+55 90 56.293872
+55 91 22.203603
+55 92 18.973666
+55 93 17.117243
+55 94 10.000000
+55 95 12.165525
+55 96 23.021729
+55 97 6.000000
+55 98 66.068147
+55 99 30.083218
+55 100 38.288379
+55 101 25.000000
+56 1 14.142136
+56 2 25.495098
+56 3 17.000000
+56 4 26.248809
+56 5 22.360680
+56 6 26.925824
+56 7 19.209373
+56 8 21.213203
+56 9 25.000000
+56 10 32.015621
+56 11 28.284271
+56 12 29.732137
+56 13 26.627054
+56 14 35.355339
+56 15 29.154759
+56 16 34.409301
+56 17 36.055513
+56 18 33.541020
+56 19 56.753854
+56 20 51.419841
+56 21 46.572524
+56 22 55.901699
+56 23 46.097722
+56 24 55.578773
+56 25 45.705580
+56 26 55.226805
+56 27 71.589105
+56 28 69.641941
+56 29 68.876701
+56 30 65.000000
+56 31 65.299311
+56 32 63.158531
+56 33 64.412732
+56 34 65.192024
+56 35 60.415230
+56 36 44.654227
+56 37 43.011626
+56 38 41.340053
+56 39 37.735925
+56 40 36.055513
+56 41 39.051248
+56 42 31.764760
+56 43 32.015621
+56 44 35.355339
+56 45 33.301652
+56 46 24.166092
+56 47 23.323808
+56 48 31.764760
+56 49 56.293872
+56 50 49.477268
+56 51 48.877398
+56 52 47.169906
+56 53 30.413813
+56 54 14.142136
+56 55 25.000000
+56 57 32.015621
+56 58 35.000000
+56 59 52.201533
+56 60 44.721360
+56 61 15.000000
+56 62 15.811388
+56 63 43.011626
+56 64 53.150729
+56 65 33.541020
+56 66 20.615528
+56 67 25.495098
+56 68 38.470768
+56 69 10.000000
+56 70 8.062258
+56 71 10.295630
+56 72 35.355339
+56 73 33.376639
+56 74 28.000000
+56 75 41.231056
+56 76 60.415230
+56 77 56.603887
+56 78 57.428216
+56 79 22.360680
+56 80 25.298221
+56 81 21.400935
+56 82 19.104973
+56 83 17.262677
+56 84 29.832868
+56 85 41.109610
+56 86 49.578221
+56 87 37.107951
+56 88 40.249224
+56 89 6.324555
+56 90 66.287254
+56 91 14.764823
+56 92 26.172505
+56 93 28.600699
+56 94 32.015621
+56 95 29.546573
+56 96 34.713110
+56 97 25.709920
+56 98 49.396356
+56 99 8.944272
+56 100 25.317978
+56 101 7.071068
+57 1 18.027756
+57 2 55.901699
+57 3 48.826222
+57 4 57.306195
+57 5 54.083269
+57 6 58.309519
+57 7 51.224994
+57 8 53.150729
+57 9 57.008771
+57 10 40.000000
+57 11 40.311289
+57 12 42.296572
+57 13 43.174066
+57 14 45.000000
+57 15 46.097722
+57 16 48.259714
+57 17 50.249378
+57 18 50.990195
+57 19 30.594117
+57 20 26.248809
+57 21 21.540659
+57 22 31.622777
+57 23 22.360680
+57 24 32.310989
+57 25 23.323808
+57 26 33.541020
+57 27 45.276926
+57 28 45.000000
+57 29 42.296572
+57 30 40.000000
+57 31 38.327536
+57 32 38.000000
+57 33 37.336309
+57 34 36.400549
+57 35 35.000000
+57 36 52.810984
+57 37 52.201533
+57 38 49.335586
+57 39 46.572524
+57 40 46.097722
+57 41 50.990195
+57 42 40.792156
+57 43 45.276926
+57 44 50.249378
+57 45 47.265209
+57 46 55.758407
+57 47 55.217751
+57 48 49.030603
+57 49 31.048349
+57 50 24.351591
+57 51 22.000000
+57 52 15.811388
+57 53 25.495098
+57 54 33.541020
+57 55 25.495098
+57 56 32.015621
+57 58 22.360680
+57 59 43.011626
+57 60 42.720019
+57 61 43.011626
+57 62 30.413813
+57 63 15.000000
+57 64 21.213203
+57 65 7.071068
+57 66 15.811388
+57 67 9.219544
+57 68 15.652476
+57 69 26.925824
+57 70 25.495098
+57 71 37.161808
+57 72 25.000000
+57 73 32.695565
+57 74 54.120237
+57 75 33.541020
+57 76 54.083269
+57 77 25.079872
+57 78 41.868843
+57 79 46.957428
+57 80 55.000000
+57 81 12.369317
+57 82 23.021729
+57 83 24.351591
+57 84 13.601471
+57 85 9.219544
+57 86 17.691806
+57 87 31.016125
+57 88 39.560081
+57 89 34.713110
+57 90 34.481879
+57 91 17.691806
+57 92 7.071068
+57 93 8.544004
+57 94 20.248457
+57 95 14.764823
+57 96 6.324555
+57 97 19.646883
+57 98 49.040799
+57 99 29.410882
+57 100 24.000000
+57 101 37.215588
+58 1 26.925824
+58 2 60.207973
+58 3 50.635956
+58 4 60.530984
+58 5 55.901699
+58 6 60.827625
+58 7 51.419841
+58 8 52.201533
+58 9 57.008771
+58 10 22.360680
+58 11 25.000000
+58 12 26.627054
+58 13 29.732137
+58 14 26.925824
+58 15 32.015621
+58 16 31.764760
+58 17 33.541020
+58 18 36.055513
+58 19 24.413111
+58 20 19.209373
+58 21 15.620499
+58 22 22.360680
+58 23 14.142136
+58 24 21.540659
+58 25 12.806248
+58 26 20.615528
+58 27 65.192024
+58 28 65.764732
+58 29 62.201286
+58 30 60.827625
+58 31 58.215118
+58 32 58.855756
+58 33 57.218878
+58 34 55.000000
+58 35 55.901699
+58 36 70.491134
+58 37 69.462220
+58 38 66.887966
+58 39 63.631753
+58 40 62.649820
+58 41 67.082039
+58 42 57.306195
+58 43 60.415230
+58 44 65.000000
+58 45 62.241465
+58 46 57.870545
+58 47 56.293872
+58 48 34.409301
+58 49 23.323808
+58 50 17.691806
+58 51 43.174066
+58 52 25.495098
+58 53 7.071068
+58 54 26.925824
+58 55 43.011626
+58 56 35.000000
+58 57 22.360680
+58 59 21.213203
+58 60 20.615528
+58 61 38.078866
+58 62 42.720019
+58 63 36.400549
+58 64 35.355339
+58 65 15.811388
+58 66 15.811388
+58 67 16.278821
+58 68 38.013156
+58 69 36.400549
+58 70 27.018512
+58 71 44.283180
+58 72 46.097722
+58 73 51.855569
+58 74 44.821870
+58 75 11.180340
+58 76 32.015621
+58 77 32.695565
+58 78 23.086793
+58 79 38.013156
+58 80 49.244289
+58 81 27.802878
+58 82 38.078866
+58 83 18.248288
+58 84 9.219544
+58 85 27.294688
+58 86 33.060551
+58 87 9.055385
+58 88 18.027756
+58 89 33.541020
+58 90 42.059482
+58 91 23.086793
+58 92 25.495098
+58 93 29.206164
+58 94 41.109610
+58 95 35.468296
+58 96 28.635642
+58 97 38.288379
+58 98 26.925824
+58 99 27.294688
+58 100 10.770330
+58 101 42.011903
+59 1 47.169906
+59 2 75.663730
+59 3 65.375837
+59 4 75.325958
+59 5 70.178344
+59 6 75.166482
+59 7 65.069194
+59 8 65.000000
+59 9 70.000000
+59 10 25.495098
+59 11 30.413813
+59 12 30.805844
+59 13 35.693137
+59 14 26.925824
+59 15 36.400549
+59 16 32.695565
+59 17 33.541020
+59 18 38.078866
+59 19 29.427878
+59 20 27.000000
+59 21 27.459060
+59 22 25.495098
+59 23 25.495098
+59 24 23.537205
+59 25 23.537205
+59 26 20.615528
+59 27 82.462113
+59 28 83.815273
+59 29 79.555012
+59 30 79.056942
+59 31 75.690158
+59 32 77.162167
+59 33 74.726167
+59 34 71.589105
+59 35 74.330344
+59 36 91.263355
+59 37 90.138782
+59 38 87.658428
+59 39 84.314886
+59 40 83.216585
+59 41 87.464278
+59 42 77.935871
+59 43 80.622577
+59 44 85.000000
+59 45 82.365041
+59 46 72.173402
+59 47 70.064256
+59 48 37.336309
+59 49 27.459060
+59 50 27.073973
+59 51 62.241465
+59 52 41.231056
+59 53 22.360680
+59 54 40.311289
+59 55 64.031242
+59 56 52.201533
+59 57 43.011626
+59 58 21.213203
+59 60 11.180340
+59 61 50.000000
+59 62 62.649820
+59 63 55.901699
+59 64 50.990195
+59 65 36.055513
+59 66 36.055513
+59 67 37.483330
+59 68 58.523500
+59 69 55.901699
+59 70 44.944410
+59 71 62.297673
+59 72 67.268120
+59 73 73.000000
+59 74 51.662365
+59 75 11.180340
+59 76 11.180340
+59 77 45.044423
+59 78 10.630146
+59 79 46.529560
+59 80 58.694122
+59 81 48.918299
+59 82 58.821765
+59 83 35.114100
+59 84 30.413813
+59 85 46.097722
+59 86 49.729267
+59 87 15.231546
+59 88 14.317821
+59 89 48.836462
+59 90 52.239832
+59 91 43.046487
+59 92 46.690470
+59 93 50.328918
+59 94 62.289646
+59 95 56.639209
+59 96 49.091751
+59 97 59.464275
+59 98 13.601471
+59 99 43.416587
+59 100 27.313001
+59 101 59.203040
+60 1 42.426407
+60 2 66.708320
+60 3 56.293872
+60 4 66.098411
+60 5 60.827625
+60 6 65.764732
+60 7 55.578773
+60 8 55.226805
+60 9 60.207973
+60 10 15.000000
+60 11 20.000000
+60 12 20.099751
+60 13 25.079872
+60 14 15.811388
+60 15 25.495098
+60 16 21.540659
+60 17 22.360680
+60 18 26.925824
+60 19 37.161808
+60 20 33.526109
+60 21 32.388269
+60 22 33.541020
+60 23 30.413813
+60 24 31.764760
+60 25 28.442925
+60 26 29.154759
+60 27 85.586214
+60 28 86.313383
+60 29 82.607506
+60 30 81.394103
+60 31 78.638413
+60 32 79.429214
+60 33 77.646635
+60 34 75.166482
+60 35 76.485293
+60 36 86.452299
+60 37 85.146932
+60 38 82.879430
+60 39 79.397733
+60 40 78.102497
+60 41 82.006097
+60 42 73.000000
+60 43 75.000000
+60 44 79.056942
+60 45 76.609399
+60 46 62.801274
+60 47 60.530984
+60 48 26.248809
+60 49 35.341194
+60 50 32.984845
+60 51 63.788714
+60 52 45.000000
+60 53 18.027756
+60 54 31.622777
+60 55 60.207973
+60 56 44.721360
+60 57 42.720019
+60 58 20.615528
+60 59 11.180340
+60 61 40.311289
+60 62 57.008771
+60 63 57.008771
+60 64 55.000000
+60 65 36.400549
+60 66 32.015621
+60 67 35.355339
+60 68 58.309519
+60 69 50.000000
+60 70 38.275318
+60 71 55.009090
+60 72 65.192024
+60 73 69.526973
+60 74 40.792156
+60 75 10.000000
+60 76 15.811388
+60 77 50.635956
+60 78 21.400935
+60 79 36.055513
+60 80 48.166378
+60 81 45.803930
+60 82 54.451814
+60 83 28.600699
+60 84 29.154759
+60 85 47.853944
+60 86 53.084838
+60 87 11.704700
+60 88 4.472136
+60 89 40.496913
+60 90 58.940648
+60 91 38.183766
+60 92 44.777226
+60 93 48.764741
+60 94 60.207973
+60 95 54.708317
+60 96 49.040799
+60 97 56.400355
+60 98 6.324555
+60 99 35.777088
+60 100 21.931712
+60 101 51.478151
+61 1 26.925824
+61 2 26.925824
+61 3 16.552945
+61 4 25.961510
+61 5 20.615528
+61 6 25.495098
+61 7 15.297059
+61 8 15.000000
+61 9 20.000000
+61 10 25.495098
+61 11 20.615528
+61 12 21.189620
+61 13 16.552945
+61 14 26.925824
+61 15 18.027756
+61 16 23.853721
+61 17 25.000000
+61 18 21.213203
+61 19 62.177166
+61 20 56.824291
+61 21 52.478567
+61 22 60.415230
+61 23 51.478151
+61 24 59.615434
+61 25 50.537115
+61 26 58.523500
+61 27 85.440037
+61 28 83.815273
+61 29 82.637764
+61 30 79.056942
+61 31 78.924014
+61 32 77.162167
+61 33 78.000000
+61 34 78.262379
+61 35 74.330344
+61 36 57.697487
+61 37 55.901699
+61 38 54.626001
+61 39 51.078371
+61 40 49.244289
+61 41 51.478151
+61 42 45.541190
+61 43 44.721360
+61 44 47.169906
+61 45 45.650849
+61 46 22.561028
+61 47 20.223748
+61 48 19.849433
+61 49 61.269895
+61 50 55.072679
+61 51 62.241465
+61 52 56.568542
+61 53 31.622777
+61 54 11.180340
+61 55 40.000000
+61 56 15.000000
+61 57 43.011626
+61 58 38.078866
+61 59 50.000000
+61 60 40.311289
+61 62 30.413813
+61 63 55.901699
+61 64 64.031242
+61 65 42.426407
+61 66 28.284271
+61 67 34.713110
+61 68 52.201533
+61 69 25.000000
+61 70 17.888544
+61 71 21.931712
+61 72 50.249378
+61 73 48.259714
+61 74 13.000000
+61 75 40.311289
+61 76 55.901699
+61 77 65.795137
+61 78 57.558666
+61 79 8.062258
+61 80 12.041595
+61 81 34.539832
+61 82 34.058773
+61 83 20.808652
+61 84 36.400549
+61 85 52.201533
+61 86 60.605280
+61 87 36.496575
+61 88 36.124784
+61 89 9.219544
+61 90 75.690158
+61 91 25.553865
+61 92 38.470768
+61 93 41.629317
+61 94 46.690470
+61 95 43.680659
+61 96 47.010637
+61 97 40.447497
+61 98 43.416587
+61 99 13.601471
+61 100 27.313001
+61 101 17.464249
+62 1 15.811388
+62 2 28.284271
+62 3 25.079872
+62 4 30.479501
+62 5 29.154759
+62 6 32.015621
+62 7 28.792360
+62 8 31.622777
+62 9 33.541020
+62 10 46.097722
+62 11 43.011626
+62 12 44.654227
+62 13 42.059482
+62 14 50.000000
+62 15 44.721360
+62 16 49.739320
+62 17 51.478151
+62 18 49.244289
+62 19 60.008333
+62 20 55.081757
+62 21 50.089919
+62 22 60.207973
+62 23 50.249378
+62 24 60.406953
+62 25 50.487622
+62 26 60.827625
+62 27 61.032778
+62 28 58.309519
+62 29 58.600341
+62 30 54.083269
+62 31 55.443665
+62 32 52.430907
+62 33 54.671748
+62 34 56.568542
+62 35 50.000000
+62 36 29.732137
+62 37 28.284271
+62 38 26.248809
+62 39 22.671568
+62 40 21.213203
+62 41 25.000000
+62 42 16.401219
+62 43 18.027756
+62 44 22.360680
+62 45 19.723083
+62 46 30.232433
+62 47 30.886890
+62 48 47.423623
+62 49 60.074953
+62 50 53.084838
+62 51 40.360872
+62 52 46.097722
+62 53 40.311289
+62 54 29.154759
+62 55 11.180340
+62 56 15.811388
+62 57 30.413813
+62 58 42.720019
+62 59 62.649820
+62 60 57.008771
+62 61 30.413813
+62 63 36.055513
+62 64 49.244289
+62 65 35.000000
+62 66 26.925824
+62 67 28.284271
+62 68 29.832868
+62 69 7.071068
+62 70 19.104973
+62 71 10.770330
+62 72 22.360680
+62 73 18.000000
+62 74 43.289722
+62 75 51.478151
+62 76 72.111026
+62 77 55.081757
+62 78 65.787537
+62 79 38.078866
+62 80 39.115214
+62 81 18.110770
+62 82 8.062258
+62 83 28.425341
+62 84 34.928498
+62 85 37.947332
+62 86 45.694639
+62 87 47.507894
+62 88 52.630789
+62 89 22.135944
+62 90 63.906181
+62 91 19.697716
+62 92 23.345235
+62 93 23.409400
+62 94 20.615528
+62 95 20.808652
+62 96 30.083218
+62 97 14.866069
+62 98 62.369865
+62 99 23.021729
+62 100 35.510562
+62 101 14.142136
+63 1 29.154759
+63 2 64.031242
+63 3 58.728187
+63 4 65.946948
+63 5 63.639610
+63 6 67.268120
+63 7 61.717096
+63 8 64.031242
+63 9 67.268120
+63 10 55.000000
+63 11 55.226805
+63 12 57.218878
+63 13 57.870545
+63 14 60.000000
+63 15 60.827625
+63 16 63.198101
+63 17 65.192024
+63 18 65.764732
+63 19 36.619667
+63 20 33.970576
+63 21 30.479501
+63 22 39.051248
+63 23 32.015621
+63 24 40.360872
+63 25 33.600595
+63 26 42.426407
+63 27 30.413813
+63 28 30.000000
+63 29 27.459060
+63 30 25.000000
+63 31 23.537205
+63 32 23.000000
+63 33 22.561028
+63 34 22.360680
+63 35 20.000000
+63 36 50.039984
+63 37 50.000000
+63 38 47.000000
+63 39 45.099889
+63 40 45.276926
+63 41 50.249378
+63 42 40.607881
+63 43 46.097722
+63 44 50.990195
+63 45 48.052055
+63 46 65.069194
+63 47 65.069194
+63 48 63.788714
+63 49 37.802116
+63 50 32.526912
+63 51 7.000000
+63 52 18.027756
+63 53 40.311289
+63 54 47.434165
+63 55 26.925824
+63 56 43.011626
+63 57 15.000000
+63 58 36.400549
+63 59 55.901699
+63 60 57.008771
+63 61 55.901699
+63 62 36.055513
+63 64 15.000000
+63 65 20.615528
+63 66 30.413813
+63 67 24.083189
+63 68 7.071068
+63 69 35.355339
+63 70 38.013156
+63 71 45.343136
+63 72 20.000000
+63 73 30.066593
+63 74 67.779053
+63 75 47.434165
+63 76 67.082039
+63 77 23.537205
+63 78 52.801515
+63 79 60.745370
+63 80 67.601775
+63 81 21.633308
+63 82 28.017851
+63 83 38.832976
+63 84 28.284271
+63 85 10.000000
+63 86 12.165525
+63 87 45.354162
+63 88 54.129474
+63 89 47.010637
+63 90 30.066593
+63 91 30.463092
+63 92 17.464249
+63 93 14.422205
+63 94 17.464249
+63 95 15.264338
+63 96 9.219544
+63 97 21.470911
+63 98 63.324561
+63 99 42.544095
+63 100 39.000000
+63 101 46.690470
+64 1 39.051248
+64 2 76.321688
+64 3 69.814039
+64 4 77.935871
+64 5 75.000000
+64 6 79.056942
+64 7 72.346389
+64 8 74.330344
+64 9 78.102497
+64 10 57.008771
+64 11 58.523500
+64 12 60.406953
+64 13 62.241465
+64 14 61.846584
+64 15 65.000000
+64 16 66.098411
+64 17 68.007353
+64 18 69.641941
+64 19 25.806976
+64 20 25.079872
+64 21 23.537205
+64 22 29.154759
+64 23 25.495098
+64 24 30.886890
+64 25 27.459060
+64 26 33.541020
+64 27 31.622777
+64 28 33.541020
+64 29 28.792360
+64 30 29.154759
+64 31 25.079872
+64 32 27.459060
+64 33 24.166092
+64 34 20.615528
+64 35 25.000000
+64 36 65.030762
+64 37 65.000000
+64 38 62.000000
+64 39 60.074953
+64 40 60.207973
+64 41 65.192024
+64 42 55.443665
+64 43 60.827625
+64 44 65.764732
+64 45 62.801274
+64 46 76.609399
+64 47 76.216796
+64 48 67.779053
+64 49 27.459060
+64 50 24.351591
+64 51 16.552945
+64 52 10.000000
+64 53 41.231056
+64 54 54.083269
+64 55 41.231056
+64 56 53.150729
+64 57 21.213203
+64 58 35.355339
+64 59 50.990195
+64 60 55.000000
+64 61 64.031242
+64 62 49.244289
+64 63 15.000000
+64 65 22.360680
+64 66 36.055513
+64 67 29.410882
+64 68 22.022716
+64 69 47.169906
+64 70 46.690470
+64 71 57.454330
+64 72 35.000000
+64 73 45.044423
+64 74 74.625733
+64 75 45.000000
+64 76 61.846584
+64 77 9.433981
+64 78 45.310043
+64 79 67.416615
+64 80 76.059187
+64 81 32.449961
+64 82 41.231056
+64 83 44.418465
+64 84 30.083218
+64 85 12.041595
+64 86 3.605551
+64 87 44.181444
+64 88 53.150729
+64 89 55.901699
+64 90 15.132746
+64 91 38.897301
+64 92 27.202941
+64 93 25.942244
+64 94 32.249031
+64 95 29.120440
+64 96 19.235384
+64 97 35.440090
+64 98 61.032778
+64 99 50.447993
+64 100 41.785165
+64 101 58.008620
+65 1 20.615528
+65 2 58.523500
+65 3 50.537115
+65 4 59.615434
+65 5 55.901699
+65 6 60.415230
+65 7 52.478567
+65 8 54.083269
+65 9 58.309519
+65 10 35.355339
+65 11 36.400549
+65 12 38.327536
+65 13 39.924930
+65 14 40.311289
+65 15 42.720019
+65 16 44.147480
+65 17 46.097722
+65 18 47.434165
+65 19 25.019992
+65 20 20.223748
+65 21 15.297059
+65 22 25.495098
+65 23 15.811388
+65 24 25.961510
+65 25 16.552945
+65 26 26.925824
+65 27 50.000000
+65 28 50.249378
+65 29 47.000000
+65 30 45.276926
+65 31 43.000000
+65 32 43.289722
+65 33 42.000000
+65 34 40.311289
+65 35 40.311289
+65 36 59.236813
+65 37 58.523500
+65 38 55.713553
+65 39 52.810984
+65 40 52.201533
+65 41 57.008771
+65 42 46.840154
+65 43 50.990195
+65 44 55.901699
+65 45 52.952809
+65 46 57.697487
+65 47 56.824291
+65 48 45.541190
+65 49 25.179357
+65 50 18.248288
+65 51 27.459060
+65 52 14.142136
+65 53 20.000000
+65 54 32.015621
+65 55 31.622777
+65 56 33.541020
+65 57 7.071068
+65 58 15.811388
+65 59 36.055513
+65 60 36.400549
+65 61 42.426407
+65 62 35.000000
+65 63 20.615528
+65 64 22.360680
+65 66 14.142136
+65 67 8.062258
+65 68 22.472205
+65 69 30.413813
+65 70 26.076810
+65 71 40.261644
+65 72 32.015621
+65 73 39.357337
+65 74 52.430907
+65 75 26.925824
+65 76 47.169906
+65 77 23.430749
+65 78 34.828150
+65 79 45.221676
+65 80 54.451814
+65 81 17.117243
+65 82 28.284271
+65 83 22.203603
+65 84 8.062258
+65 85 12.041595
+65 86 19.313208
+65 87 24.738634
+65 88 33.541020
+65 89 35.000000
+65 90 33.301652
+65 91 18.788294
+65 92 12.649111
+65 93 15.264338
+65 94 27.202941
+65 95 21.633308
+65 96 13.038405
+65 97 26.000000
+65 98 42.720019
+65 99 29.068884
+65 100 19.646883
+65 101 39.560081
+66 1 11.180340
+66 2 46.097722
+66 3 37.336309
+66 4 46.840154
+66 5 42.720019
+66 6 47.434165
+66 7 38.910153
+66 8 40.311289
+66 9 44.721360
+66 10 25.495098
+66 11 25.000000
+66 12 27.000000
+66 13 27.459060
+66 14 30.413813
+66 15 30.413813
+66 16 33.000000
+66 17 35.000000
+66 18 35.355339
+66 19 36.138622
+66 20 30.805844
+66 21 25.961510
+66 22 35.355339
+66 23 25.495098
+66 24 35.128336
+66 25 25.179357
+66 26 35.000000
+66 27 60.827625
+66 28 60.207973
+66 29 57.870545
+66 30 55.226805
+66 31 53.935146
+66 32 53.235327
+66 33 52.952809
+66 34 52.201533
+66 35 50.249378
+66 36 55.217751
+66 37 54.083269
+66 38 51.613952
+66 39 48.259714
+66 40 47.169906
+66 41 51.478151
+66 42 41.880783
+66 43 44.721360
+66 44 49.244289
+66 45 46.518813
+66 46 44.598206
+66 47 43.462628
+66 48 33.376639
+66 49 35.693137
+66 50 28.861739
+66 51 37.336309
+66 52 28.284271
+66 53 14.142136
+66 54 18.027756
+66 55 28.284271
+66 56 20.615528
+66 57 15.811388
+66 58 15.811388
+66 59 36.055513
+66 60 32.015621
+66 61 28.284271
+66 62 26.925824
+66 63 30.413813
+66 64 36.055513
+66 65 14.142136
+66 67 6.708204
+66 68 29.068884
+66 69 20.615528
+66 70 12.649111
+66 71 29.000000
+66 72 33.541020
+66 73 37.536649
+66 74 38.587563
+66 75 25.000000
+66 76 46.097722
+66 77 37.536649
+66 78 38.897301
+66 79 31.384710
+66 80 40.311289
+66 81 13.892444
+66 82 22.803509
+66 83 8.544004
+66 84 9.219544
+66 85 24.596748
+66 86 32.756679
+66 87 21.260292
+66 88 28.017851
+66 89 21.095023
+66 90 47.423623
+66 91 7.280110
+66 92 14.142136
+66 93 18.248288
+66 94 28.635642
+66 95 23.409400
+66 96 21.213203
+66 97 24.413111
+66 98 38.013156
+66 99 15.000000
+66 100 10.295630
+66 101 27.294688
+67 1 13.038405
+67 2 50.596443
+67 3 42.485292
+67 4 51.623638
+67 5 47.853944
+67 6 52.392748
+67 7 44.418465
+67 8 46.043458
+67 9 50.249378
+67 10 31.064449
+67 11 31.144823
+67 12 33.136083
+67 13 33.955854
+67 14 36.055513
+67 15 36.878178
+67 16 39.115214
+67 17 41.109610
+67 18 41.773197
+67 19 32.140317
+67 20 27.018512
+67 21 22.022716
+67 22 32.015621
+67 23 22.022716
+67 24 32.140317
+67 25 22.203603
+67 26 32.557641
+67 27 54.451814
+67 28 54.037024
+67 29 51.478151
+67 30 49.040799
+67 31 47.518417
+67 32 47.042534
+67 33 46.529560
+67 34 45.607017
+67 35 44.045431
+67 36 54.589376
+67 37 53.665631
+67 38 51.000000
+67 39 47.853944
+67 40 47.010637
+67 41 51.623638
+67 42 41.629317
+67 43 45.221676
+67 44 50.000000
+67 45 47.127487
+67 46 49.658836
+67 47 48.764741
+67 48 39.812058
+67 49 32.015621
+67 50 25.019992
+67 51 31.064449
+67 52 22.022716
+67 53 17.464249
+67 54 24.698178
+67 55 26.925824
+67 56 25.495098
+67 57 9.219544
+67 58 16.278821
+67 59 37.483330
+67 60 35.355339
+67 61 34.713110
+67 62 28.284271
+67 63 24.083189
+67 64 29.410882
+67 65 8.062258
+67 66 6.708204
+67 68 23.537205
+67 69 23.021729
+67 70 18.027756
+67 71 32.557641
+67 72 30.000000
+67 73 35.608988
+67 74 45.276926
+67 75 27.018512
+67 76 48.166378
+67 77 31.400637
+67 78 38.470768
+67 79 38.078866
+67 80 46.754679
+67 81 11.661904
+67 82 22.472205
+67 83 15.231546
+67 84 7.211103
+67 85 17.888544
+67 86 26.076810
+67 87 23.853721
+67 88 31.780497
+67 89 27.018512
+67 90 41.231056
+67 91 10.770330
+67 92 9.433981
+67 93 13.416408
+67 94 25.000000
+67 95 19.416488
+67 96 15.000000
+67 97 22.022716
+67 98 41.593269
+67 99 21.213203
+67 100 15.132746
+67 101 31.622777
+68 1 25.298221
+68 2 58.051701
+68 3 53.413481
+68 4 60.108236
+68 5 58.137767
+68 6 61.522354
+68 7 56.612719
+68 8 59.076222
+68 9 62.008064
+68 10 54.451814
+68 11 54.037024
+68 12 56.035703
+68 13 56.080300
+68 14 59.413803
+68 15 59.076222
+68 16 62.032250
+68 17 64.031242
+68 18 64.070274
+68 19 42.059482
+68 20 38.832976
+68 21 34.828150
+68 22 44.102154
+68 23 36.124784
+68 24 45.221676
+68 25 37.483330
+68 26 47.010637
+68 27 33.241540
+68 28 31.780497
+68 29 30.463092
+68 30 26.925824
+68 31 26.832816
+68 32 25.000000
+68 33 25.942244
+68 34 27.018512
+68 35 22.135944
+68 36 43.104524
+68 37 43.011626
+68 38 40.012498
+68 39 38.052595
+68 40 38.209946
+68 41 43.185646
+68 42 33.541020
+68 43 39.051248
+68 44 43.931765
+68 45 41.000000
+68 46 59.464275
+68 47 59.665736
+68 48 62.072538
+68 49 43.046487
+68 50 37.202150
+68 51 10.630146
+68 52 23.769729
+68 53 40.804412
+68 54 44.721360
+68 55 20.124612
+68 56 38.470768
+68 57 15.652476
+68 58 38.013156
+68 59 58.523500
+68 60 58.309519
+68 61 52.201533
+68 62 29.832868
+68 63 7.071068
+68 64 22.022716
+68 65 22.472205
+68 66 29.068884
+68 67 23.537205
+68 69 30.000000
+68 70 34.481879
+68 71 39.623226
+68 72 13.038405
+68 73 23.021729
+68 74 64.560050
+68 75 49.193496
+68 76 69.641941
+68 77 30.265492
+68 78 56.586217
+68 79 57.723479
+68 80 63.560994
+68 81 17.720045
+68 82 21.931712
+68 83 37.013511
+68 84 29.154759
+68 85 14.764823
+68 86 19.026298
+68 87 46.615448
+68 88 55.027266
+68 89 43.081318
+68 90 37.121422
+68 91 27.459060
+68 92 15.000000
+68 93 11.045361
+68 94 10.440307
+68 95 9.219544
+68 96 9.433981
+68 97 15.000000
+68 98 64.621978
+68 99 39.293765
+68 100 38.639358
+68 101 41.400483
+69 1 10.000000
+69 2 29.154759
+69 3 23.430749
+69 4 30.805844
+69 5 28.284271
+69 6 32.015621
+69 7 26.627054
+69 8 29.154759
+69 9 32.015621
+69 10 39.051248
+69 11 36.055513
+69 12 37.735925
+69 13 35.341194
+69 14 43.011626
+69 15 38.078866
+69 16 42.941821
+69 17 44.721360
+69 18 42.720019
+69 19 55.145263
+69 20 50.039984
+69 21 45.044423
+69 22 55.000000
+69 23 45.000000
+69 24 55.036352
+69 25 45.044423
+69 26 55.226805
+69 27 62.649820
+69 28 60.415230
+69 29 60.033324
+69 30 55.901699
+69 31 56.603887
+69 32 54.120237
+69 33 55.758407
+69 34 57.008771
+69 35 51.478151
+69 36 36.796739
+69 37 35.355339
+69 38 33.301652
+69 39 29.732137
+69 40 28.284271
+69 41 32.015621
+69 42 23.430749
+69 43 25.000000
+69 44 29.154759
+69 45 26.627054
+69 46 29.732137
+69 47 29.732137
+69 48 40.853396
+69 49 55.036352
+69 50 48.041649
+69 51 40.607881
+69 52 42.720019
+69 53 33.541020
+69 54 22.360680
+69 55 15.000000
+69 56 10.000000
+69 57 26.925824
+69 58 36.400549
+69 59 55.901699
+69 60 50.000000
+69 61 25.000000
+69 62 7.071068
+69 63 35.355339
+69 64 47.169906
+69 65 30.413813
+69 66 20.615528
+69 67 23.021729
+69 68 30.000000
+69 70 12.041595
+69 71 10.295630
+69 72 25.495098
+69 73 23.537205
+69 74 38.000000
+69 75 44.721360
+69 76 65.192024
+69 77 52.000000
+69 78 59.481089
+69 79 32.249031
+69 80 34.928498
+69 81 14.764823
+69 82 9.219544
+69 83 21.400935
+69 84 29.154759
+69 85 35.355339
+69 86 43.566042
+69 87 40.706265
+69 88 45.607017
+69 89 16.124515
+69 90 61.269895
+69 91 13.341664
+69 92 20.124612
+69 93 21.400935
+69 94 22.472205
+69 95 20.808652
+69 96 28.017851
+69 97 16.155494
+69 98 55.317267
+69 99 16.124515
+69 100 28.653098
+69 101 11.401754
+70 1 9.219544
+70 2 33.541020
+70 3 24.698178
+70 4 34.205263
+70 5 30.083218
+70 6 34.785054
+70 7 26.419690
+70 8 28.017851
+70 9 32.249031
+70 10 27.018512
+70 11 24.186773
+70 12 25.942244
+70 13 24.041631
+70 14 31.064449
+70 15 26.925824
+70 16 31.384710
+70 17 33.241540
+70 18 31.780497
+70 19 48.764741
+70 20 43.416587
+70 21 38.600518
+70 22 47.853944
+70 23 38.078866
+70 24 47.518417
+70 25 37.656341
+70 26 47.169906
+70 27 67.675697
+70 28 66.219333
+70 29 64.845971
+70 30 61.400326
+70 31 61.098281
+70 32 59.481089
+70 33 60.166436
+70 34 60.373835
+70 35 56.612719
+70 36 48.836462
+70 37 47.381431
+70 38 45.343136
+70 39 41.773197
+70 40 40.311289
+70 41 43.931765
+70 42 35.468296
+70 43 36.878178
+70 44 40.804412
+70 45 38.418745
+70 46 31.953091
+70 47 30.870698
+70 48 29.832868
+70 49 48.270074
+70 50 41.484937
+70 51 44.384682
+70 52 40.000000
+70 53 22.803509
+70 54 11.180340
+70 55 25.298221
+70 56 8.062258
+70 57 25.495098
+70 58 27.018512
+70 59 44.944410
+70 60 38.275318
+70 61 17.888544
+70 62 19.104973
+70 63 38.013156
+70 64 46.690470
+70 65 26.076810
+70 66 12.649111
+70 67 18.027756
+70 68 34.481879
+70 69 12.041595
+70 71 17.464249
+70 72 34.132096
+70 73 34.539832
+70 74 30.083218
+70 75 33.837849
+70 76 53.712196
+70 77 49.406477
+70 78 49.648766
+70 79 23.345235
+70 80 29.681644
+70 81 16.763055
+70 82 18.973666
+70 83 9.848858
+70 84 21.840330
+70 85 34.713110
+70 86 43.185646
+70 87 29.732137
+70 88 33.837849
+70 89 9.219544
+70 90 59.203040
+70 91 7.810250
+70 92 20.591260
+70 93 23.769729
+70 94 30.000000
+70 95 26.305893
+70 96 29.154759
+70 97 24.083189
+70 98 43.416587
+70 99 5.000000
+70 100 17.720045
+70 101 15.000000
+71 1 19.646883
+71 2 18.867962
+71 3 14.317821
+71 4 20.615528
+71 5 18.601075
+71 6 21.931712
+71 7 18.027756
+71 8 20.880613
+71 9 22.825424
+71 10 42.201896
+71 11 38.288379
+71 12 39.623226
+71 13 36.124784
+71 14 45.343136
+71 15 38.418745
+71 16 43.931765
+71 17 45.453273
+71 18 42.438190
+71 19 64.629715
+71 20 59.413803
+71 21 54.451814
+71 22 64.195015
+71 23 54.230987
+71 24 64.070274
+71 25 54.083269
+71 26 64.000000
+71 27 71.561163
+71 28 68.963759
+71 29 69.065187
+71 30 64.660653
+71 31 65.802736
+71 32 62.968246
+71 33 65.000000
+71 34 66.603303
+71 35 60.464866
+71 36 35.777088
+71 37 34.000000
+71 38 32.695565
+71 39 29.154759
+71 40 27.313001
+71 41 29.681644
+71 42 23.769729
+71 43 22.825424
+71 44 25.612497
+71 45 23.853721
+71 46 19.849433
+71 47 20.248457
+71 48 40.804412
+71 49 64.381674
+71 50 57.428216
+71 51 50.249378
+71 52 52.924474
+71 53 40.261644
+71 54 24.207437
+71 55 21.931712
+71 56 10.295630
+71 57 37.161808
+71 58 44.283180
+71 59 62.297673
+71 60 55.009090
+71 61 21.931712
+71 62 10.770330
+71 63 45.343136
+71 64 57.454330
+71 65 40.261644
+71 66 29.000000
+71 67 32.557641
+71 68 39.623226
+71 69 10.295630
+71 70 17.464249
+71 72 33.105891
+71 73 28.284271
+71 74 34.205263
+71 75 51.244512
+71 76 70.682388
+71 77 62.241465
+71 78 67.082039
+71 79 29.966648
+71 80 29.017236
+71 81 25.059928
+71 82 17.804494
+71 83 27.202941
+71 84 38.052595
+71 85 45.650849
+71 86 53.851648
+71 87 47.127487
+71 88 50.537115
+71 89 15.556349
+71 90 71.554175
+71 91 22.090722
+71 92 30.413813
+71 93 31.622777
+71 94 31.064449
+71 95 30.413813
+71 96 38.275318
+71 97 25.000000
+71 98 59.682493
+71 99 19.235384
+71 100 35.171011
+71 101 4.472136
+72 1 25.495098
+72 2 50.000000
+72 3 47.423623
+72 4 52.430907
+72 5 51.478151
+72 6 54.083269
+72 7 51.078371
+72 8 53.851648
+72 9 55.901699
+72 10 58.523500
+72 11 57.008771
+72 12 58.940648
+72 13 57.870545
+72 14 63.245553
+72 15 60.827625
+72 16 64.761099
+72 17 66.708320
+72 18 65.764732
+72 19 54.230987
+72 20 50.537115
+72 21 46.141088
+72 22 55.901699
+72 23 47.169906
+72 24 56.824291
+72 25 48.259714
+72 26 58.309519
+72 27 39.051248
+72 28 36.055513
+72 29 36.796739
+72 30 32.015621
+72 31 33.970576
+72 32 30.479501
+72 33 33.301652
+72 34 36.055513
+72 35 28.284271
+72 36 30.066593
+72 37 30.000000
+72 38 27.000000
+72 39 25.179357
+72 40 25.495098
+72 41 30.413813
+72 42 21.189620
+72 43 26.925824
+72 44 31.622777
+72 45 28.792360
+72 46 52.478567
+72 47 53.235327
+72 48 63.788714
+72 49 55.036352
+72 50 48.764741
+72 51 21.189620
+72 52 36.400549
+72 53 47.169906
+72 54 45.276926
+72 55 11.180340
+72 56 35.355339
+72 57 25.000000
+72 58 46.097722
+72 59 67.268120
+72 60 65.192024
+72 61 50.249378
+72 62 22.360680
+72 63 20.000000
+72 64 35.000000
+72 65 32.015621
+72 66 33.541020
+72 67 30.000000
+72 68 13.038405
+72 69 25.495098
+72 70 34.132096
+72 71 33.105891
+72 73 10.198039
+72 74 63.198101
+72 75 57.008771
+72 76 78.102497
+72 77 43.289722
+72 78 66.843100
+72 79 57.008771
+72 80 60.415230
+72 81 19.697716
+72 82 16.278821
+72 83 39.849718
+72 84 36.878178
+72 85 27.202941
+72 86 32.062439
+72 87 53.823787
+72 88 61.400326
+72 89 41.109610
+72 90 50.039984
+72 91 29.120440
+72 92 20.615528
+72 93 16.970563
+72 94 5.000000
+72 95 10.630146
+72 96 20.124612
+72 97 10.049876
+72 98 71.344236
+72 99 39.115214
+72 100 43.829214
+72 101 36.055513
+73 1 27.459060
+73 2 42.941821
+73 3 42.201896
+73 4 45.617979
+73 5 45.541190
+73 6 47.423623
+73 7 46.097722
+73 8 49.030603
+73 9 50.289164
+73 10 60.901560
+73 11 58.600341
+73 12 60.415230
+73 13 58.523500
+73 14 65.299311
+73 15 61.351447
+73 16 65.924199
+73 17 67.779053
+73 18 66.098411
+73 19 62.936476
+73 20 58.872744
+73 21 54.230987
+73 22 64.257295
+73 23 55.036352
+73 24 65.000000
+73 25 55.901699
+73 26 66.211781
+73 27 47.423623
+73 28 43.863424
+73 29 45.453273
+73 30 40.360872
+73 31 43.011626
+73 32 39.051248
+73 33 42.438190
+73 34 45.650849
+73 35 37.202150
+73 36 20.396078
+73 37 20.099751
+73 38 17.117243
+73 39 15.033296
+73 40 15.297059
+73 41 20.223748
+73 42 11.180340
+73 43 17.000000
+73 44 21.540659
+73 45 18.788294
+73 46 46.238512
+73 47 47.434165
+73 48 64.195015
+73 49 63.568860
+73 50 57.008771
+73 51 31.320920
+73 52 45.705580
+73 53 51.662365
+73 54 45.541190
+73 55 9.433981
+73 56 33.376639
+73 57 32.695565
+73 58 51.855569
+73 59 73.000000
+73 60 69.526973
+73 61 48.259714
+73 62 18.000000
+73 63 30.066593
+73 64 45.044423
+73 65 39.357337
+73 66 37.536649
+73 67 35.608988
+73 68 23.021729
+73 69 23.537205
+73 70 34.539832
+73 71 28.284271
+73 72 10.198039
+73 74 61.204575
+73 75 62.241465
+73 76 83.450584
+73 77 53.084838
+73 78 73.783467
+73 79 55.731499
+73 80 57.078893
+73 81 24.083189
+73 82 15.652476
+73 83 42.190046
+73 84 42.801869
+73 85 36.496575
+73 86 42.000000
+73 87 58.694122
+73 88 65.436993
+73 89 39.623226
+73 90 60.133186
+73 91 31.622777
+73 92 26.925824
+73 93 24.166092
+73 94 13.152946
+73 95 18.027756
+73 96 28.861739
+73 97 13.601471
+73 98 75.432089
+73 99 39.217343
+73 100 47.634021
+73 101 32.062439
+74 1 39.293765
+74 2 33.970576
+74 3 25.000000
+74 4 32.015621
+74 5 26.907248
+74 6 30.805844
+74 7 21.931712
+74 8 19.849433
+74 9 23.853721
+74 10 26.248809
+74 11 21.540659
+74 12 20.880613
+74 13 16.155494
+74 14 25.179357
+74 15 15.297059
+74 16 20.000000
+74 17 20.099751
+74 18 15.132746
+74 19 69.202601
+74 20 64.031242
+74 21 60.207973
+74 22 66.850580
+74 23 58.898217
+74 24 65.734314
+74 25 57.628118
+74 26 64.140471
+74 27 97.718985
+74 28 96.301610
+74 29 94.868330
+74 30 91.482239
+74 31 91.082380
+74 32 89.560036
+74 33 90.138782
+74 34 90.077744
+74 35 86.683332
+74 36 69.641941
+74 37 67.779053
+74 38 66.730802
+74 39 63.245553
+74 40 61.351447
+74 41 63.158531
+74 42 57.974132
+74 43 56.648036
+74 44 58.600341
+74 45 57.384667
+74 46 28.425341
+74 47 25.612497
+74 48 15.000000
+74 49 68.007353
+74 50 62.481997
+74 51 74.330344
+74 52 66.400301
+74 53 37.802116
+74 54 20.591260
+74 55 53.000000
+74 56 28.000000
+74 57 54.120237
+74 58 44.821870
+74 59 51.662365
+74 60 40.792156
+74 61 13.000000
+74 62 43.289722
+74 63 67.779053
+74 64 74.625733
+74 65 52.430907
+74 66 38.587563
+74 67 45.276926
+74 68 64.560050
+74 69 38.000000
+74 70 30.083218
+74 71 34.205263
+74 72 63.198101
+74 73 61.204575
+74 75 43.863424
+74 76 55.081757
+74 77 75.286121
+74 78 60.745370
+74 79 7.211103
+74 80 8.944272
+74 81 46.840154
+74 82 47.042534
+74 83 30.232433
+74 84 45.453273
+74 85 63.134776
+74 86 71.344236
+74 87 40.706265
+74 88 37.363083
+74 89 22.090722
+74 90 85.146932
+74 91 37.336309
+74 92 50.328918
+74 93 53.758720
+74 94 59.539903
+74 95 56.293872
+74 96 58.694122
+74 97 53.338541
+74 98 42.047592
+74 99 25.298221
+74 100 34.655447
+74 101 29.832868
+75 1 36.055513
+75 2 65.192024
+75 3 55.036352
+75 4 65.030762
+75 5 60.000000
+75 6 65.000000
+75 7 55.036352
+75 8 55.226805
+75 9 60.207973
+75 10 18.027756
+75 11 22.360680
+75 12 23.323808
+75 13 27.730849
+75 14 21.213203
+75 15 29.154759
+75 16 26.907248
+75 17 28.284271
+75 18 32.015621
+75 19 28.301943
+75 20 24.166092
+75 21 22.561028
+75 22 25.000000
+75 23 20.615528
+75 24 23.430749
+75 25 18.681542
+75 26 21.213203
+75 27 75.663730
+75 28 76.485293
+75 29 72.691127
+75 30 71.589105
+75 31 68.731361
+75 32 69.634761
+75 33 67.742158
+75 34 65.192024
+75 35 66.708320
+75 36 80.212219
+75 37 79.056942
+75 38 76.609399
+75 39 73.239334
+75 40 72.111026
+75 41 76.321688
+75 42 66.850580
+75 43 69.462220
+75 44 73.824115
+75 45 71.196910
+75 46 62.000000
+75 47 60.033324
+75 48 30.805844
+75 49 26.627054
+75 50 23.409400
+75 51 54.120237
+75 52 35.000000
+75 53 11.180340
+75 54 30.000000
+75 55 53.150729
+75 56 41.231056
+75 57 33.541020
+75 58 11.180340
+75 59 11.180340
+75 60 10.000000
+75 61 40.311289
+75 62 51.478151
+75 63 47.434165
+75 64 45.000000
+75 65 26.925824
+75 66 25.000000
+75 67 27.018512
+75 68 49.193496
+75 69 44.721360
+75 70 33.837849
+75 71 51.244512
+75 72 57.008771
+75 73 62.241465
+75 74 43.863424
+75 76 21.213203
+75 77 40.792156
+75 78 17.262677
+75 79 37.947332
+75 80 50.000000
+75 81 38.183766
+75 82 47.801674
+75 83 24.041631
+75 84 20.248457
+75 85 38.078866
+75 86 43.104524
+75 87 4.123106
+75 88 8.944272
+75 89 38.209946
+75 90 49.335586
+75 91 31.906112
+75 92 36.400549
+75 93 40.224371
+75 94 52.009614
+75 95 46.400431
+75 96 39.812058
+75 97 48.795492
+75 98 16.124515
+75 99 32.557641
+75 100 16.155494
+75 101 48.270074
+76 1 57.008771
+76 2 82.462113
+76 3 72.034714
+76 4 81.786307
+76 5 76.485293
+76 6 81.394103
+76 7 71.196910
+76 8 70.710678
+76 9 75.663730
+76 10 30.413813
+76 11 35.355339
+76 12 35.128336
+76 13 40.112342
+76 14 30.000000
+76 15 40.000000
+76 16 35.128336
+76 17 35.355339
+76 18 40.311289
+76 19 39.000000
+76 20 37.336309
+76 21 38.327536
+76 22 35.000000
+76 23 36.400549
+76 24 33.000000
+76 25 34.481879
+76 26 30.000000
+76 27 93.407708
+76 28 94.868330
+76 29 90.520716
+76 30 90.138782
+76 31 86.683332
+76 32 88.255311
+76 33 85.726309
+76 34 82.462113
+76 35 85.440037
+76 36 101.212647
+76 37 100.000000
+76 38 97.616597
+76 39 94.201911
+76 40 93.005376
+76 41 97.082439
+76 42 87.800911
+76 43 90.138782
+76 44 94.339811
+76 45 91.809586
+76 46 78.447435
+76 47 76.118329
+76 48 40.112342
+76 49 37.000000
+76 50 37.656341
+76 51 73.409809
+76 52 52.201533
+76 53 32.015621
+76 54 47.434165
+76 55 74.330344
+76 56 60.415230
+76 57 54.083269
+76 58 32.015621
+76 59 11.180340
+76 60 15.811388
+76 61 55.901699
+76 62 72.111026
+76 63 67.082039
+76 64 61.846584
+76 65 47.169906
+76 66 46.097722
+76 67 48.166378
+76 68 69.641941
+76 69 65.192024
+76 70 53.712196
+76 71 70.682388
+76 72 78.102497
+76 73 83.450584
+76 74 55.081757
+76 75 21.213203
+76 77 55.443665
+76 78 18.110770
+76 79 51.088159
+76 80 63.007936
+76 81 59.396970
+76 82 68.883960
+76 83 43.908997
+76 84 41.231056
+76 85 57.271284
+76 86 60.728906
+76 87 24.839485
+76 88 20.248457
+76 89 56.302753
+76 90 62.000000
+76 91 52.801515
+76 92 57.489129
+76 93 61.220911
+76 94 73.109507
+76 95 67.475922
+76 96 60.207973
+76 97 70.007142
+76 98 13.038405
+76 99 51.478151
+76 100 36.619667
+76 101 67.230945
+77 1 42.941821
+77 2 80.956779
+77 3 73.573093
+77 4 82.298238
+77 5 78.892332
+77 6 83.240615
+77 7 75.716577
+77 8 77.420927
+77 9 81.541401
+77 10 55.036352
+77 11 57.306195
+77 12 59.059292
+77 13 61.587336
+77 14 59.615434
+77 15 64.140471
+77 16 64.404969
+77 17 66.211781
+77 18 68.476273
+77 19 17.464249
+77 20 18.110770
+77 21 18.248288
+77 22 21.189620
+77 23 20.223748
+77 24 23.086793
+77 25 22.203603
+77 26 25.961510
+77 27 39.357337
+77 28 41.880783
+77 29 36.715120
+77 30 37.802116
+77 31 33.286634
+77 32 36.235342
+77 33 32.449961
+77 34 28.178006
+77 35 33.970576
+77 36 73.334848
+77 37 73.171033
+77 38 70.178344
+77 39 68.029405
+77 40 68.000000
+77 41 73.000000
+77 42 63.031738
+77 43 68.183576
+77 44 73.171033
+77 45 70.178344
+77 46 80.622577
+77 47 79.924965
+77 48 66.730802
+77 49 19.313208
+77 50 18.000000
+77 51 25.942244
+77 52 9.433981
+77 53 39.357337
+77 54 55.172457
+77 55 48.259714
+77 56 56.603887
+77 57 25.079872
+77 58 32.695565
+77 59 45.044423
+77 60 50.635956
+77 61 65.795137
+77 62 55.081757
+77 63 23.537205
+77 64 9.433981
+77 65 23.430749
+77 66 37.536649
+77 67 31.400637
+77 68 30.265492
+77 69 52.000000
+77 70 49.406477
+77 71 62.241465
+77 72 43.289722
+77 73 53.084838
+77 74 75.286121
+77 75 40.792156
+77 76 55.443665
+77 78 38.078866
+77 79 68.117545
+77 80 77.794601
+77 81 37.336309
+77 82 47.296934
+77 83 45.276926
+77 84 29.832868
+77 85 17.262677
+77 86 11.401754
+77 87 40.804412
+77 88 49.477268
+77 89 58.412327
+77 90 9.899495
+77 91 41.880783
+77 92 31.953091
+77 93 31.780497
+77 94 40.012498
+77 95 36.124784
+77 96 25.317978
+77 97 42.296572
+77 98 56.320511
+77 99 52.497619
+77 100 41.048752
+77 101 62.177166
+78 1 49.979996
+78 2 82.024387
+78 3 72.006944
+78 4 82.006097
+78 5 77.058419
+78 6 82.054860
+78 7 72.173402
+78 8 72.443081
+78 9 77.414469
+78 10 34.539832
+78 11 39.217343
+78 12 39.924930
+78 13 44.598206
+78 14 36.715120
+78 15 45.694639
+78 16 42.544095
+78 17 43.566042
+78 18 47.885280
+78 19 21.095023
+78 20 20.248457
+78 21 22.472205
+78 22 17.117243
+78 23 20.808652
+78 24 15.132746
+78 25 19.209373
+78 26 12.165525
+78 27 76.896034
+78 28 78.790862
+78 29 74.094534
+78 30 74.249579
+78 31 70.384657
+78 32 72.449983
+78 33 69.462220
+78 34 65.787537
+78 35 69.771054
+78 36 93.059121
+78 37 92.130342
+78 38 89.470666
+78 39 86.313383
+78 40 85.428333
+78 41 89.961103
+78 42 80.056230
+78 43 83.384651
+78 44 88.022724
+78 45 85.234969
+78 46 79.056942
+78 47 77.162167
+78 48 46.957428
+78 49 19.104973
+78 50 21.023796
+78 51 58.523500
+78 52 36.235342
+78 53 27.073973
+78 54 47.095647
+78 55 65.368188
+78 56 57.428216
+78 57 41.868843
+78 58 23.086793
+78 59 10.630146
+78 60 21.400935
+78 61 57.558666
+78 62 65.787537
+78 63 52.801515
+78 64 45.310043
+78 65 34.828150
+78 66 38.897301
+78 67 38.470768
+78 68 56.586217
+78 69 59.481089
+78 70 49.648766
+78 71 67.082039
+78 72 66.843100
+78 73 73.783467
+78 74 60.745370
+78 75 17.262677
+78 76 18.110770
+78 77 38.078866
+78 79 55.081757
+78 80 67.186308
+78 81 50.119856
+78 82 60.835845
+78 83 40.199502
+78 84 31.304952
+78 85 42.801869
+78 86 44.721360
+78 87 21.095023
+78 88 23.706539
+78 89 55.009090
+78 90 44.045431
+78 91 46.173586
+78 92 46.872167
+78 93 50.000000
+78 94 62.008064
+78 95 56.400355
+78 96 47.381431
+78 97 60.207973
+78 98 24.207437
+78 99 49.091751
+78 100 32.140317
+78 101 64.498062
+79 1 32.557641
+79 2 33.615473
+79 3 23.600847
+79 4 32.202484
+79 5 26.832816
+79 6 31.384710
+79 7 21.470911
+79 8 20.248457
+79 9 25.000000
+79 10 21.095023
+79 11 16.124515
+79 12 16.000000
+79 13 11.000000
+79 14 21.213203
+79 15 11.401754
+79 16 17.088007
+79 17 17.888544
+79 18 13.601471
+79 19 62.425956
+79 20 57.201399
+79 21 53.263496
+79 22 60.207973
+79 23 52.009614
+79 24 59.169249
+79 25 50.803543
+79 26 57.706152
+79 27 90.801982
+79 28 89.498603
+79 29 87.931792
+79 30 84.646323
+79 31 84.118963
+79 32 82.710338
+79 33 83.168504
+79 34 83.006024
+79 35 79.812280
+79 36 65.741920
+79 37 63.953108
+79 38 62.649820
+79 39 59.093147
+79 40 57.271284
+79 41 59.539903
+79 42 53.488316
+79 43 52.773099
+79 44 55.226805
+79 45 53.712196
+79 46 28.635642
+79 47 26.000000
+79 48 12.529964
+79 49 61.294372
+79 50 55.605755
+79 51 67.357256
+79 52 59.203040
+79 53 31.064449
+79 54 13.416408
+79 55 47.169906
+79 56 22.360680
+79 57 46.957428
+79 58 38.013156
+79 59 46.529560
+79 60 36.055513
+79 61 8.062258
+79 62 38.078866
+79 63 60.745370
+79 64 67.416615
+79 65 45.221676
+79 66 31.384710
+79 67 38.078866
+79 68 57.723479
+79 69 32.249031
+79 70 23.345235
+79 71 29.966648
+79 72 57.008771
+79 73 55.731499
+79 74 7.211103
+79 75 37.947332
+79 76 51.088159
+79 77 68.117545
+79 78 55.081757
+79 80 12.165525
+79 81 40.024992
+79 82 41.048752
+79 83 23.021729
+79 84 38.288379
+79 85 55.946403
+79 86 64.140471
+79 87 34.539832
+79 88 32.249031
+79 89 16.124515
+79 90 77.987178
+79 91 30.364453
+79 92 43.324358
+79 93 46.840154
+79 94 53.150729
+79 95 49.648766
+79 96 51.623638
+79 97 47.042534
+79 98 38.209946
+79 99 18.439089
+79 100 27.658633
+79 101 25.495098
+80 1 38.470768
+80 2 25.495098
+80 3 17.464249
+80 4 23.345235
+80 5 18.439089
+80 6 22.022716
+80 7 13.892444
+80 8 11.401754
+80 9 15.000000
+80 10 33.241540
+80 11 28.284271
+80 12 28.071338
+80 13 23.086793
+80 14 33.015148
+80 15 23.021729
+80 16 28.284271
+80 17 28.635642
+80 18 23.769729
+80 19 73.573093
+80 20 68.264193
+80 21 64.070274
+80 22 71.589105
+80 23 62.968246
+80 24 70.661163
+80 25 61.911227
+80 26 69.354164
+80 27 96.772930
+80 28 94.921020
+80 29 94.021274
+80 30 90.249654
+80 31 90.376988
+80 32 88.391176
+80 33 89.470666
+80 34 89.944427
+80 35 85.615419
+80 36 63.324561
+80 37 61.400326
+80 38 60.638272
+80 39 57.271284
+80 40 55.317267
+80 41 56.612719
+80 42 52.469038
+80 43 50.447993
+80 44 51.865210
+80 45 50.960769
+80 46 19.798990
+80 47 16.970563
+80 48 23.345235
+80 49 72.560320
+80 50 66.573268
+80 51 73.790243
+80 52 68.593003
+80 53 42.485292
+80 54 22.803509
+80 55 49.648766
+80 56 25.298221
+80 57 55.000000
+80 58 49.244289
+80 59 58.694122
+80 60 48.166378
+80 61 12.041595
+80 62 39.115214
+80 63 67.601775
+80 64 76.059187
+80 65 54.451814
+80 66 40.311289
+80 67 46.754679
+80 68 63.560994
+80 69 34.928498
+80 70 29.681644
+80 71 29.017236
+80 72 60.415230
+80 73 57.078893
+80 74 8.944272
+80 75 50.000000
+80 76 63.007936
+80 77 77.794601
+80 78 67.186308
+80 79 12.165525
+80 81 46.065171
+80 82 44.147480
+80 83 32.649655
+80 84 48.270074
+80 85 64.202804
+80 86 72.622311
+80 87 46.486557
+80 88 44.407207
+80 89 20.591260
+80 90 87.692645
+80 91 37.443290
+80 92 50.249378
+80 93 53.235327
+80 94 57.280014
+80 95 54.781384
+80 96 58.830264
+80 97 50.960769
+80 98 50.039984
+80 99 25.612497
+80 100 38.587563
+80 101 25.019992
+81 1 7.615773
+81 2 43.908997
+81 3 37.536649
+81 4 45.486262
+81 5 42.638011
+81 6 46.615448
+81 7 40.311289
+81 8 42.520583
+81 9 45.967380
+81 10 38.897301
+81 11 37.656341
+81 12 39.623226
+81 13 39.051248
+81 14 43.680659
+81 15 42.047592
+81 16 45.541190
+81 17 47.518417
+81 18 47.042534
+81 19 42.107007
+81 20 37.336309
+81 21 32.388269
+81 22 42.579338
+81 23 32.756679
+81 24 42.953463
+81 25 33.241540
+81 26 43.680659
+81 27 50.921508
+81 28 49.477268
+81 29 48.104054
+81 30 44.643029
+81 31 44.384682
+81 32 42.720019
+81 33 43.462628
+81 34 43.908997
+81 35 39.849718
+81 36 42.941821
+81 37 42.047592
+81 38 39.357337
+81 39 36.249138
+81 40 35.468296
+81 41 40.162171
+81 42 30.083218
+81 43 33.955854
+81 44 38.832976
+81 45 35.902646
+81 46 44.204072
+81 47 43.931765
+81 48 45.044423
+81 49 42.296572
+81 50 35.355339
+81 51 27.730849
+81 52 28.160256
+81 53 27.802878
+81 54 27.166155
+81 55 15.264338
+81 56 21.400935
+81 57 12.369317
+81 58 27.802878
+81 59 48.918299
+81 60 45.803930
+81 61 34.539832
+81 62 18.110770
+81 63 21.633308
+81 64 32.449961
+81 65 17.117243
+81 66 13.892444
+81 67 11.661904
+81 68 17.720045
+81 69 14.764823
+81 70 16.763055
+81 71 25.059928
+81 72 19.697716
+81 73 24.083189
+81 74 46.840154
+81 75 38.183766
+81 76 59.396970
+81 77 37.336309
+81 78 50.119856
+81 79 40.024992
+81 80 46.065171
+81 82 11.180340
+81 83 20.396078
+81 84 18.867962
+81 85 20.591260
+81 86 28.844410
+81 87 34.713110
+81 88 41.880783
+81 89 25.495098
+81 90 46.518813
+81 91 10.000000
+81 92 5.385165
+81 93 7.211103
+81 94 14.866069
+81 95 10.049876
+81 96 13.453624
+81 97 10.630146
+81 98 51.865210
+81 99 21.587033
+81 100 24.186773
+81 101 25.612497
+82 1 12.041595
+82 2 36.124784
+82 3 31.906112
+82 4 38.183766
+82 5 36.400549
+82 6 39.623226
+82 7 35.355339
+82 8 38.013156
+82 9 40.496913
+82 10 45.276926
+82 11 42.953463
+82 12 44.777226
+82 13 43.011626
+82 14 49.648766
+82 15 45.880279
+82 16 50.328918
+82 17 52.201533
+82 18 50.695167
+82 19 53.235327
+82 20 48.507731
+82 21 43.566042
+82 22 53.758720
+82 23 43.931765
+82 24 54.129474
+82 25 44.384682
+82 26 54.817880
+82 27 53.851648
+82 28 51.429563
+82 29 51.312766
+82 30 47.010637
+82 31 48.010416
+82 32 45.276926
+82 33 47.201695
+82 34 48.836462
+82 35 42.720019
+82 36 32.449961
+82 37 31.384710
+82 38 28.844410
+82 39 25.553865
+82 40 24.596748
+82 41 29.154759
+82 42 19.235384
+82 43 22.803509
+82 44 27.658633
+82 45 24.738634
+82 46 37.643060
+82 47 38.013156
+82 48 48.764741
+82 49 53.460266
+82 50 46.529560
+82 51 32.526912
+82 52 38.470768
+82 53 36.878178
+82 54 30.083218
+82 55 6.324555
+82 56 19.104973
+82 57 23.021729
+82 58 38.078866
+82 59 58.821765
+82 60 54.451814
+82 61 34.058773
+82 62 8.062258
+82 63 28.017851
+82 64 41.231056
+82 65 28.284271
+82 66 22.803509
+82 67 22.472205
+82 68 21.931712
+82 69 9.219544
+82 70 18.973666
+82 71 17.804494
+82 72 16.278821
+82 73 15.652476
+82 74 47.042534
+82 75 47.801674
+82 76 68.883960
+82 77 47.296934
+82 78 60.835845
+82 79 41.048752
+82 80 44.147480
+82 81 11.180340
+82 83 26.627054
+82 84 29.546573
+82 85 30.083218
+82 86 37.696154
+82 87 44.045431
+82 88 50.249378
+82 89 25.000000
+82 90 55.973208
+82 91 16.278821
+82 92 16.000000
+82 93 15.524175
+82 94 13.416408
+82 95 12.806248
+82 96 22.135944
+82 97 7.211103
+82 98 60.207973
+82 99 23.769729
+82 100 32.526912
+82 101 20.124612
+83 1 14.764823
+83 2 42.047592
+83 3 32.388269
+83 4 42.296572
+83 5 37.656341
+83 6 42.579338
+83 7 33.241540
+83 8 34.176015
+83 9 38.897301
+83 10 18.788294
+83 11 17.262677
+83 12 19.235384
+83 13 19.104973
+83 14 23.409400
+83 15 22.090722
+83 16 25.179357
+83 17 27.166155
+83 18 27.073973
+83 19 41.629317
+83 20 36.249138
+83 21 31.764760
+83 22 40.162171
+83 23 30.870698
+83 24 39.560081
+83 25 30.083218
+83 26 38.832976
+83 27 69.231496
+83 28 68.468971
+83 29 66.287254
+83 30 63.505905
+83 31 62.369865
+83 32 61.522354
+83 33 61.392182
+83 34 60.728906
+83 35 58.549125
+83 36 58.000000
+83 37 56.639209
+83 38 54.451814
+83 39 50.931326
+83 40 49.578221
+83 41 53.413481
+83 42 44.553339
+83 43 46.400431
+83 44 50.477718
+83 45 48.010416
+83 46 39.623226
+83 47 38.078866
+83 48 25.079872
+83 49 40.853396
+83 50 34.438351
+83 51 45.705580
+83 52 36.235342
+83 53 13.152946
+83 54 9.899495
+83 55 32.756679
+83 56 17.262677
+83 57 24.351591
+83 58 18.248288
+83 59 35.114100
+83 60 28.600699
+83 61 20.808652
+83 62 28.425341
+83 63 38.832976
+83 64 44.418465
+83 65 22.203603
+83 66 8.544004
+83 67 15.231546
+83 68 37.013511
+83 69 21.400935
+83 70 9.848858
+83 71 27.202941
+83 72 39.849718
+83 73 42.190046
+83 74 30.232433
+83 75 24.041631
+83 76 43.908997
+83 77 45.276926
+83 78 40.199502
+83 79 23.021729
+83 80 32.649655
+83 81 20.396078
+83 82 26.627054
+83 84 15.620499
+83 85 33.105891
+83 86 41.182521
+83 87 19.924859
+83 88 24.207437
+83 89 15.297059
+83 90 55.172457
+83 91 10.770330
+83 92 22.022716
+83 93 26.000000
+83 94 35.171011
+83 95 30.413813
+83 96 29.614186
+83 97 30.083218
+83 98 33.970576
+83 99 9.055385
+83 100 8.062258
+83 101 24.331050
+84 1 19.235384
+84 2 55.317267
+84 3 46.486557
+84 4 56.044625
+84 5 51.865210
+84 6 56.612719
+84 7 47.927028
+84 8 49.193496
+84 9 53.712196
+84 10 27.294688
+84 11 28.460499
+84 12 30.364453
+84 13 32.202484
+84 14 32.249031
+84 15 34.928498
+84 16 36.138622
+84 17 38.078866
+84 18 39.560081
+84 19 26.925824
+84 20 21.587033
+84 21 16.763055
+84 22 26.172505
+84 23 16.278821
+84 24 26.019224
+84 25 16.031220
+84 26 26.076810
+84 27 58.008620
+84 28 58.137767
+84 29 55.009090
+84 30 53.150729
+84 31 51.009803
+84 32 51.156622
+84 33 50.009999
+84 34 48.373546
+84 35 48.166378
+84 36 61.773781
+84 37 60.827625
+84 38 58.180753
+84 39 55.009090
+84 40 54.129474
+84 41 58.694122
+84 42 48.754487
+84 43 52.201533
+84 44 56.920998
+84 45 54.083269
+84 46 53.758720
+84 47 52.554733
+84 48 37.696154
+84 49 26.476405
+84 50 19.646883
+84 51 35.227830
+84 52 21.095023
+84 53 12.041595
+84 54 25.495098
+84 55 34.132096
+84 56 29.832868
+84 57 13.601471
+84 58 9.219544
+84 59 30.413813
+84 60 29.154759
+84 61 36.400549
+84 62 34.928498
+84 63 28.284271
+84 64 30.083218
+84 65 8.062258
+84 66 9.219544
+84 67 7.211103
+84 68 29.154759
+84 69 29.154759
+84 70 21.840330
+84 71 38.052595
+84 72 36.878178
+84 73 42.801869
+84 74 45.453273
+84 75 20.248457
+84 76 41.231056
+84 77 29.832868
+84 78 31.304952
+84 79 38.288379
+84 80 48.270074
+84 81 18.867962
+84 82 29.546573
+84 83 15.620499
+84 85 20.099751
+84 86 27.202941
+84 87 17.464249
+84 88 25.961510
+84 89 29.966648
+84 90 39.698866
+84 91 16.000000
+84 92 16.278821
+84 93 20.000000
+84 94 31.890437
+84 95 26.248809
+84 96 19.924859
+84 97 29.206164
+84 98 35.468296
+84 99 23.706539
+84 100 11.704700
+84 101 36.496575
+85 1 27.018512
+85 2 64.498062
+85 3 57.801384
+85 4 66.037868
+85 5 63.007936
+85 6 67.119297
+85 7 60.307545
+85 8 62.289646
+85 9 66.068147
+85 10 47.381431
+85 11 48.270074
+85 12 50.219518
+85 13 51.546096
+85 14 52.345009
+85 15 54.405882
+85 16 56.089215
+85 17 58.051701
+85 18 59.203040
+85 19 27.294688
+85 20 24.207437
+85 21 20.518285
+85 22 29.410882
+85 23 22.022716
+85 24 30.610456
+85 25 23.600847
+85 26 32.557641
+85 27 38.013156
+85 28 38.470768
+85 29 35.014283
+85 30 33.541020
+85 31 31.016125
+85 32 31.575307
+85 33 30.016662
+85 34 28.284271
+85 35 28.635642
+85 36 56.885851
+85 37 56.568542
+85 38 53.600373
+85 39 51.244512
+85 40 51.088159
+85 41 56.080300
+85 42 46.010868
+85 43 51.039201
+85 44 56.035703
+85 45 53.037722
+85 46 64.637450
+85 47 64.202804
+85 48 57.280014
+85 49 28.301943
+85 50 22.671568
+85 51 16.155494
+85 52 9.219544
+85 53 32.015621
+85 54 42.544095
+85 55 31.064449
+85 56 41.109610
+85 57 9.219544
+85 58 27.294688
+85 59 46.097722
+85 60 47.853944
+85 61 52.201533
+85 62 37.947332
+85 63 10.000000
+85 64 12.041595
+85 65 12.041595
+85 66 24.596748
+85 67 17.888544
+85 68 14.764823
+85 69 35.355339
+85 70 34.713110
+85 71 45.650849
+85 72 27.202941
+85 73 36.496575
+85 74 63.134776
+85 75 38.078866
+85 76 57.271284
+85 77 17.262677
+85 78 42.801869
+85 79 55.946403
+85 80 64.202804
+85 81 20.591260
+85 82 30.083218
+85 83 33.105891
+85 84 20.099751
+85 86 8.485281
+85 87 36.345564
+85 88 45.276926
+85 89 43.931765
+85 90 26.000000
+85 91 26.907248
+85 92 15.264338
+85 93 14.560220
+85 94 23.345235
+85 95 19.000000
+85 96 8.062258
+85 97 25.079872
+85 98 54.129474
+85 99 38.600518
+85 100 31.575307
+85 101 46.043458
+86 1 35.468296
+86 2 72.718636
+86 3 66.219333
+86 4 74.330344
+86 5 71.400280
+86 6 75.451971
+86 7 68.767725
+86 8 70.767224
+86 9 74.518454
+86 10 54.341513
+86 11 55.659680
+86 12 57.567352
+86 13 59.236813
+86 14 59.228372
+86 15 62.032250
+86 16 63.324561
+86 17 65.253352
+86 18 66.730802
+86 19 26.172505
+86 20 24.698178
+86 21 22.472205
+86 22 29.206164
+86 23 24.351591
+86 24 30.805844
+86 25 26.248809
+86 26 33.286634
+86 27 32.756679
+86 28 34.176015
+86 29 29.832868
+86 30 29.546573
+86 31 25.961510
+86 32 27.730849
+86 33 25.000000
+86 34 22.090722
+86 35 25.059928
+86 36 62.128898
+86 37 62.032250
+86 38 59.033889
+86 39 57.008771
+86 40 57.078893
+86 41 62.072538
+86 42 52.239832
+86 43 57.558666
+86 44 62.513998
+86 45 59.539903
+86 46 73.006849
+86 47 72.622311
+86 48 64.845971
+86 49 27.658633
+86 50 23.706539
+86 51 15.000000
+86 52 8.544004
+86 53 38.639358
+86 54 50.774009
+86 55 37.854986
+86 56 49.578221
+86 57 17.691806
+86 58 33.060551
+86 59 49.729267
+86 60 53.084838
+86 61 60.605280
+86 62 45.694639
+86 63 12.165525
+86 64 3.605551
+86 65 19.313208
+86 66 32.756679
+86 67 26.076810
+86 68 19.026298
+86 69 43.566042
+86 70 43.185646
+86 71 53.851648
+86 72 32.062439
+86 73 42.000000
+86 74 71.344236
+86 75 43.104524
+86 76 60.728906
+86 77 11.401754
+86 78 44.721360
+86 79 64.140471
+86 80 72.622311
+86 81 28.844410
+86 82 37.696154
+86 83 41.182521
+86 84 27.202941
+86 85 8.485281
+86 87 42.011903
+86 88 51.009803
+86 89 52.402290
+86 90 18.439089
+86 91 35.383612
+86 92 23.600847
+86 93 22.360680
+86 94 29.068884
+86 95 25.709920
+86 96 15.652476
+86 97 32.015621
+86 98 59.211485
+86 99 47.010637
+86 100 38.897301
+86 101 54.405882
+87 1 32.202484
+87 2 61.131007
+87 3 51.009803
+87 4 61.008196
+87 5 56.008928
+87 6 61.008196
+87 7 51.088159
+87 8 51.351728
+87 9 56.320511
+87 10 15.556349
+87 11 19.416488
+87 12 20.615528
+87 13 24.698178
+87 14 19.416488
+87 15 26.400758
+87 16 24.839485
+87 17 26.400758
+87 18 29.698485
+87 19 29.832868
+87 20 25.238859
+87 21 22.847319
+87 22 26.870058
+87 23 21.023796
+87 24 25.495098
+87 25 19.235384
+87 26 23.600847
+87 27 74.242845
+87 28 74.813100
+87 29 71.253070
+87 30 69.871310
+87 31 67.268120
+87 32 67.896981
+87 33 66.272166
+87 34 64.007812
+87 35 64.938432
+87 36 76.400262
+87 37 75.213031
+87 38 72.801099
+87 39 69.404611
+87 40 68.242216
+87 41 72.401657
+87 42 63.007936
+87 43 65.513357
+87 44 69.835521
+87 45 67.230945
+87 46 58.008620
+87 47 56.080300
+87 48 28.319605
+87 49 28.319605
+87 50 24.186773
+87 51 52.172790
+87 52 34.234486
+87 53 7.211103
+87 54 26.019224
+87 55 49.517674
+87 56 37.107951
+87 57 31.016125
+87 58 9.055385
+87 59 15.231546
+87 60 11.704700
+87 61 36.496575
+87 62 47.507894
+87 63 45.354162
+87 64 44.181444
+87 65 24.738634
+87 66 21.260292
+87 67 23.853721
+87 68 46.615448
+87 69 40.706265
+87 70 29.732137
+87 71 47.127487
+87 72 53.823787
+87 73 58.694122
+87 74 40.706265
+87 75 4.123106
+87 76 24.839485
+87 77 40.804412
+87 78 21.095023
+87 79 34.539832
+87 80 46.486557
+87 81 34.713110
+87 82 44.045431
+87 83 19.924859
+87 84 17.464249
+87 85 36.345564
+87 86 42.011903
+87 88 9.000000
+87 89 34.132096
+87 90 49.769469
+87 91 28.017851
+87 92 33.286634
+87 93 37.215588
+87 94 48.826222
+87 95 43.266615
+87 96 37.336309
+87 97 45.343136
+87 98 18.027756
+87 99 28.442925
+87 100 12.083046
+87 101 44.147480
+88 1 38.209946
+88 2 62.369865
+88 3 51.971146
+88 4 61.814238
+88 5 56.568542
+88 6 61.522354
+88 7 51.351728
+88 8 51.088159
+88 9 56.080300
+88 10 11.180340
+88 11 16.124515
+88 12 16.492423
+88 13 21.377558
+88 14 13.038405
+88 15 22.135944
+88 16 18.867962
+88 17 20.000000
+88 18 24.186773
+88 19 37.215588
+88 20 33.105891
+88 21 31.320920
+88 22 33.837849
+88 23 29.410882
+88 24 32.202484
+88 25 27.513633
+88 26 29.832868
+88 27 83.216585
+88 28 83.725743
+88 29 80.224684
+88 30 78.771822
+88 31 76.236474
+88 32 76.791927
+88 33 75.239617
+88 34 73.006849
+88 35 73.824115
+88 36 82.134037
+88 37 80.808415
+88 38 78.568442
+88 39 75.073298
+88 40 73.756356
+88 41 77.620873
+88 42 68.680419
+88 43 70.604532
+88 44 74.632433
+88 45 72.201108
+88 46 58.549125
+88 47 56.320511
+88 48 23.259407
+88 49 35.510562
+88 50 32.310989
+88 51 61.000000
+88 52 43.185646
+88 53 14.317821
+88 54 27.202941
+88 55 56.080300
+88 56 40.249224
+88 57 39.560081
+88 58 18.027756
+88 59 14.317821
+88 60 4.472136
+88 61 36.124784
+88 62 52.630789
+88 63 54.129474
+88 64 53.150729
+88 65 33.541020
+88 66 28.017851
+88 67 31.780497
+88 68 55.027266
+88 69 45.607017
+88 70 33.837849
+88 71 50.537115
+88 72 61.400326
+88 73 65.436993
+88 74 37.363083
+88 75 8.944272
+88 76 20.248457
+88 77 49.477268
+88 78 23.706539
+88 79 32.249031
+88 80 44.407207
+88 81 41.880783
+88 82 50.249378
+88 83 24.207437
+88 84 25.961510
+88 85 45.276926
+88 86 51.009803
+88 87 9.000000
+88 89 36.055513
+88 90 58.189346
+88 91 33.970576
+88 92 41.146081
+88 93 45.188494
+88 94 56.435804
+88 95 51.000000
+88 96 45.880279
+88 97 52.430907
+88 98 10.000000
+88 99 31.304952
+88 100 17.804494
+88 101 47.010637
+89 1 17.888544
+89 2 27.018512
+89 3 17.117243
+89 4 27.073973
+89 5 22.360680
+89 6 27.294688
+89 7 18.027756
+89 8 19.235384
+89 9 23.769729
+89 10 26.925824
+89 11 22.803509
+89 12 24.083189
+89 13 20.615528
+89 14 29.832868
+89 15 23.021729
+89 16 28.425341
+89 17 30.000000
+89 18 27.294688
+89 19 56.648036
+89 20 51.264022
+89 21 46.615448
+89 22 55.362442
+89 23 45.880279
+89 24 54.817880
+89 25 45.221676
+89 26 54.129474
+89 27 76.321688
+89 28 74.632433
+89 29 73.539105
+89 30 69.892775
+89 31 69.856997
+89 32 68.007353
+89 33 68.942005
+89 34 69.354164
+89 35 65.192024
+89 36 50.774009
+89 37 49.091751
+89 38 47.507894
+89 39 43.908997
+89 40 42.190046
+89 41 45.000000
+89 42 38.013156
+89 43 38.013156
+89 44 41.109610
+89 45 39.204592
+89 46 24.331050
+89 47 22.803509
+89 48 25.553865
+89 49 55.973208
+89 50 49.396356
+89 51 53.225934
+89 52 49.040799
+89 53 28.017851
+89 54 8.944272
+89 55 31.064449
+89 56 6.324555
+89 57 34.713110
+89 58 33.541020
+89 59 48.836462
+89 60 40.496913
+89 61 9.219544
+89 62 22.135944
+89 63 47.010637
+89 64 55.901699
+89 65 35.000000
+89 66 21.095023
+89 67 27.018512
+89 68 43.081318
+89 69 16.124515
+89 70 9.219544
+89 71 15.556349
+89 72 41.109610
+89 73 39.623226
+89 74 22.090722
+89 75 38.209946
+89 76 56.302753
+89 77 58.412327
+89 78 55.009090
+89 79 16.124515
+89 80 20.591260
+89 81 25.495098
+89 82 25.000000
+89 83 15.297059
+89 84 29.966648
+89 85 43.931765
+89 86 52.402290
+89 87 34.132096
+89 88 36.055513
+89 90 68.249542
+89 91 17.029386
+89 92 29.681644
+89 93 32.649655
+89 94 37.483330
+89 95 34.481879
+89 96 38.275318
+89 97 31.256999
+89 98 44.721360
+89 99 6.324555
+89 100 23.086793
+89 101 11.401754
+90 1 52.478567
+90 2 90.354856
+90 3 83.216585
+90 4 91.787799
+90 5 88.509886
+90 6 92.784697
+90 7 85.445889
+90 8 87.200917
+90 9 91.263355
+90 10 64.412732
+90 11 66.887966
+90 12 68.600292
+90 13 71.281134
+90 14 68.876701
+90 15 73.783467
+90 16 73.824115
+90 17 75.591005
+90 18 78.032045
+90 19 23.000000
+90 20 25.495098
+90 21 26.925824
+90 22 27.000000
+90 23 28.792360
+90 24 29.000000
+90 25 30.675723
+90 26 32.000000
+90 27 37.536649
+90 28 41.036569
+90 29 35.355339
+90 30 37.802116
+90 31 32.649655
+90 32 36.619667
+90 33 32.015621
+90 34 26.907248
+90 35 34.985711
+90 36 80.000000
+90 37 80.024996
+90 38 77.025970
+90 39 75.166482
+90 40 75.325958
+90 41 80.305666
+90 42 70.576200
+90 43 75.953933
+90 44 80.894994
+90 45 77.929455
+90 46 90.210864
+90 47 89.587946
+90 48 76.321688
+90 49 25.000000
+90 50 25.961510
+90 51 30.413813
+90 52 19.209373
+90 53 48.877398
+90 54 65.069194
+90 55 56.293872
+90 56 66.287254
+90 57 34.481879
+90 58 42.059482
+90 59 52.239832
+90 60 58.940648
+90 61 75.690158
+90 62 63.906181
+90 63 30.066593
+90 64 15.132746
+90 65 33.301652
+90 66 47.423623
+90 67 41.231056
+90 68 37.121422
+90 69 61.269895
+90 70 59.203040
+90 71 71.554175
+90 72 50.039984
+90 73 60.133186
+90 74 85.146932
+90 75 49.335586
+90 76 62.000000
+90 77 9.899495
+90 78 44.045431
+90 79 77.987178
+90 80 87.692645
+90 81 46.518813
+90 82 55.973208
+90 83 55.172457
+90 84 39.698866
+90 85 26.000000
+90 86 18.439089
+90 87 49.769469
+90 88 58.189346
+90 89 68.249542
+90 91 51.613952
+90 92 41.146081
+90 93 40.496913
+90 94 47.381431
+90 95 44.147480
+90 96 33.837849
+90 97 50.447993
+90 98 64.327288
+90 99 62.369865
+90 100 50.803543
+90 101 71.693793
+91 1 4.242641
+91 2 39.849718
+91 3 31.764760
+91 4 40.853396
+91 5 37.121422
+91 6 41.629317
+91 7 33.837849
+91 8 35.608988
+91 9 39.661064
+91 10 29.546573
+91 11 27.892651
+91 12 29.832868
+91 13 29.068884
+91 14 34.176015
+91 15 32.062439
+91 16 35.693137
+91 17 37.656341
+91 18 37.054015
+91 19 42.579338
+91 20 37.336309
+91 21 32.388269
+91 22 42.107007
+91 23 32.140317
+91 24 42.011903
+91 25 32.015621
+91 26 42.047592
+91 27 60.440053
+91 28 59.228372
+91 29 57.567352
+91 30 54.341513
+91 31 53.758720
+91 32 52.392748
+91 33 52.810984
+91 34 52.801515
+91 35 49.477268
+91 36 48.414874
+91 37 47.201695
+91 38 44.821870
+91 39 41.400483
+91 40 40.224371
+91 41 44.418465
+91 42 35.000000
+91 43 37.589892
+91 44 42.047592
+91 45 39.357337
+91 46 38.910153
+91 47 38.078866
+91 48 35.057096
+91 49 42.296572
+91 50 35.355339
+91 51 37.000000
+91 52 32.449961
+91 53 20.808652
+91 54 17.262677
+91 55 22.203603
+91 56 14.764823
+91 57 17.691806
+91 58 23.086793
+91 59 43.046487
+91 60 38.183766
+91 61 25.553865
+91 62 19.697716
+91 63 30.463092
+91 64 38.897301
+91 65 18.788294
+91 66 7.280110
+91 67 10.770330
+91 68 27.459060
+91 69 13.341664
+91 70 7.810250
+91 71 22.090722
+91 72 29.120440
+91 73 31.622777
+91 74 37.336309
+91 75 31.906112
+91 76 52.801515
+91 77 41.880783
+91 78 46.173586
+91 79 30.364453
+91 80 37.443290
+91 81 10.000000
+91 82 16.278821
+91 83 10.770330
+91 84 16.000000
+91 85 26.907248
+91 86 35.383612
+91 87 28.017851
+91 88 33.970576
+91 89 17.029386
+91 90 51.613952
+91 92 13.000000
+91 93 16.492423
+91 94 24.515301
+91 95 20.024984
+91 96 21.470911
+91 97 19.313208
+91 98 43.931765
+91 99 12.083046
+91 100 16.278821
+91 101 20.880613
+92 1 12.041595
+92 2 49.244289
+92 3 42.638011
+92 4 50.774009
+92 5 47.801674
+92 6 51.865210
+92 7 45.276926
+92 8 47.381431
+92 9 50.990195
+92 10 39.623226
+92 11 39.051248
+92 12 41.048752
+92 13 41.109610
+92 14 44.553339
+92 15 44.102154
+92 16 47.042534
+92 17 49.040799
+92 18 49.091751
+92 19 37.336309
+92 20 32.756679
+92 21 27.892651
+92 22 38.078866
+92 23 28.460499
+92 24 38.600518
+92 25 29.154759
+92 26 39.560081
+92 27 47.539457
+92 28 46.529560
+92 29 44.643029
+92 30 41.593269
+92 31 40.804412
+92 32 39.623226
+92 33 39.849718
+92 34 39.812058
+92 35 36.674242
+92 36 46.615448
+92 37 45.880279
+92 38 43.081318
+92 39 40.162171
+92 40 39.560081
+92 41 44.384682
+92 42 34.205263
+92 43 38.470768
+92 44 43.416587
+92 45 40.447497
+92 46 49.406477
+92 47 49.040799
+92 48 47.095647
+92 49 37.656341
+92 50 30.805844
+92 51 24.041631
+92 52 22.803509
+92 53 26.832816
+92 54 30.083218
+92 55 18.973666
+92 56 26.172505
+92 57 7.071068
+92 58 25.495098
+92 59 46.690470
+92 60 44.777226
+92 61 38.470768
+92 62 23.345235
+92 63 17.464249
+92 64 27.202941
+92 65 12.649111
+92 66 14.142136
+92 67 9.433981
+92 68 15.000000
+92 69 20.124612
+92 70 20.591260
+92 71 30.413813
+92 72 20.615528
+92 73 26.925824
+92 74 50.328918
+92 75 36.400549
+92 76 57.489129
+92 77 31.953091
+92 78 46.872167
+92 79 43.324358
+92 80 50.249378
+92 81 5.385165
+92 82 16.000000
+92 83 22.022716
+92 84 16.278821
+92 85 15.264338
+92 86 23.600847
+92 87 33.286634
+92 88 41.146081
+92 89 29.681644
+92 90 41.146081
+92 91 13.000000
+92 93 4.123106
+92 94 15.620499
+92 95 10.000000
+92 96 8.602325
+92 97 13.416408
+92 98 51.000000
+92 99 25.079872
+92 100 24.041631
+92 101 30.805844
+93 1 14.764823
+93 2 50.477718
+93 3 44.553339
+93 4 52.201533
+93 5 49.578221
+93 6 53.413481
+93 7 47.423623
+93 8 49.678969
+93 9 53.037722
+93 10 43.737855
+93 11 43.104524
+93 12 45.099889
+93 13 45.044423
+93 14 48.662100
+93 15 48.041649
+93 16 51.088159
+93 17 53.084838
+93 18 53.037722
+93 19 39.051248
+93 20 34.785054
+93 21 30.083218
+93 22 40.162171
+93 23 30.870698
+93 24 40.853396
+93 25 31.764760
+93 26 42.047592
+93 27 43.965896
+93 28 42.755117
+93 29 41.109610
+93 30 37.854986
+93 31 37.336309
+93 32 35.902646
+93 33 36.400549
+93 34 36.715120
+93 35 32.984845
+93 36 44.271887
+93 37 43.680659
+93 38 40.804412
+93 39 38.078866
+93 40 37.656341
+93 41 42.579338
+93 42 32.388269
+93 43 37.054015
+93 44 42.047592
+93 45 39.051248
+93 46 51.088159
+93 47 50.931326
+93 48 51.039201
+93 49 39.560081
+93 50 32.893768
+93 51 20.615528
+93 52 23.086793
+93 53 30.870698
+93 54 33.734256
+93 55 17.117243
+93 56 28.600699
+93 57 8.544004
+93 58 29.206164
+93 59 50.328918
+93 60 48.764741
+93 61 41.629317
+93 62 23.409400
+93 63 14.422205
+93 64 25.942244
+93 65 15.264338
+93 66 18.248288
+93 67 13.416408
+93 68 11.045361
+93 69 21.400935
+93 70 23.769729
+93 71 31.622777
+93 72 16.970563
+93 73 24.166092
+93 74 53.758720
+93 75 40.224371
+93 76 61.220911
+93 77 31.780497
+93 78 50.000000
+93 79 46.840154
+93 80 53.235327
+93 81 7.211103
+93 82 15.524175
+93 83 26.000000
+93 84 20.000000
+93 85 14.560220
+93 86 22.360680
+93 87 37.215588
+93 88 45.188494
+93 89 32.649655
+93 90 40.496913
+93 91 16.492423
+93 92 4.123106
+93 94 12.041595
+93 95 6.403124
+93 96 6.708204
+93 97 11.180340
+93 98 55.009090
+93 99 28.460499
+93 100 28.160256
+93 101 32.557641
+94 1 21.095023
+94 2 48.836462
+94 3 45.276926
+94 4 51.088159
+94 5 49.648766
+94 6 52.630789
+94 7 48.764741
+94 8 51.429563
+94 9 53.851648
+94 10 53.758720
+94 11 52.392748
+94 12 54.341513
+94 13 53.460266
+94 14 58.523500
+94 15 56.435804
+94 16 60.207973
+94 17 62.169124
+94 18 61.400326
+94 19 49.979996
+94 20 46.097722
+94 21 41.593269
+94 22 51.478151
+94 23 42.544095
+94 24 52.325902
+94 25 43.566042
+94 26 53.712196
+94 27 40.496913
+94 28 38.013156
+94 29 38.013156
+94 30 33.615473
+94 31 34.828150
+94 32 31.906112
+94 33 34.058773
+94 34 36.124784
+94 35 29.410882
+94 36 33.541020
+94 37 33.241540
+94 38 30.265492
+94 39 28.017851
+94 40 28.017851
+94 41 33.015148
+94 42 23.194827
+94 43 28.635642
+94 44 33.541020
+94 45 30.594117
+94 46 50.803543
+94 47 51.312766
+94 48 59.413803
+94 49 50.695167
+94 50 44.283180
+94 51 20.248457
+94 52 32.557641
+94 53 42.190046
+94 54 41.048752
+94 55 10.000000
+94 56 32.015621
+94 57 20.248457
+94 58 41.109610
+94 59 62.289646
+94 60 60.207973
+94 61 46.690470
+94 62 20.615528
+94 63 17.464249
+94 64 32.249031
+94 65 27.202941
+94 66 28.635642
+94 67 25.000000
+94 68 10.440307
+94 69 22.472205
+94 70 30.000000
+94 71 31.064449
+94 72 5.000000
+94 73 13.152946
+94 74 59.539903
+94 75 52.009614
+94 76 73.109507
+94 77 40.012498
+94 78 62.008064
+94 79 53.150729
+94 80 57.280014
+94 81 14.866069
+94 82 13.416408
+94 83 35.171011
+94 84 31.890437
+94 85 23.345235
+94 86 29.068884
+94 87 48.826222
+94 88 56.435804
+94 89 37.483330
+94 90 47.381431
+94 91 24.515301
+94 92 15.620499
+94 93 12.041595
+94 95 5.656854
+94 96 15.811388
+94 97 6.324555
+94 98 66.370174
+94 99 35.000000
+94 100 38.910153
+94 101 33.541020
+95 1 17.117243
+95 2 48.918299
+95 3 44.204072
+95 4 50.931326
+95 5 48.918299
+95 6 52.325902
+95 7 47.434165
+95 8 49.929951
+95 9 52.801515
+95 10 48.764741
+95 11 47.675990
+95 12 49.648766
+95 13 49.091751
+95 14 53.600373
+95 15 52.086467
+95 16 55.578773
+95 17 57.558666
+95 18 57.078893
+95 19 44.922155
+95 20 40.853396
+95 21 36.249138
+95 22 46.238512
+95 23 37.121422
+95 24 47.010637
+95 25 38.078866
+95 26 48.301139
+95 27 42.047592
+95 28 40.162171
+95 29 39.357337
+95 30 35.468296
+95 31 35.846897
+95 32 33.615473
+95 33 34.985711
+95 34 36.235342
+95 35 30.870698
+95 36 38.327536
+95 37 37.854986
+95 38 34.928498
+95 39 32.388269
+95 40 32.140317
+95 41 37.121422
+95 42 27.018512
+95 43 32.062439
+95 44 37.054015
+95 45 34.058773
+95 46 50.249378
+95 47 50.447993
+95 48 55.081757
+95 49 45.541190
+95 50 39.000000
+95 51 19.849433
+95 52 28.071338
+95 53 36.715120
+95 54 37.054015
+95 55 12.165525
+95 56 29.546573
+95 57 14.764823
+95 58 35.468296
+95 59 56.639209
+95 60 54.708317
+95 61 43.680659
+95 62 20.808652
+95 63 15.264338
+95 64 29.120440
+95 65 21.633308
+95 66 23.409400
+95 67 19.416488
+95 68 9.219544
+95 69 20.808652
+95 70 26.305893
+95 71 30.413813
+95 72 10.630146
+95 73 18.027756
+95 74 56.293872
+95 75 46.400431
+95 76 67.475922
+95 77 36.124784
+95 78 56.400355
+95 79 49.648766
+95 80 54.781384
+95 81 10.049876
+95 82 12.806248
+95 83 30.413813
+95 84 26.248809
+95 85 19.000000
+95 86 25.709920
+95 87 43.266615
+95 88 51.000000
+95 89 34.481879
+95 90 44.147480
+95 91 20.024984
+95 92 10.000000
+95 93 6.403124
+95 94 5.656854
+95 96 11.045361
+95 97 6.324555
+95 98 60.901560
+95 99 31.256999
+95 100 33.615473
+95 101 32.202484
+96 1 20.615528
+96 2 57.140179
+96 3 50.990195
+96 4 58.821765
+96 5 56.080300
+96 6 60.000000
+96 7 53.740115
+96 8 55.901699
+96 9 59.413803
+96 10 46.043458
+96 11 46.097722
+96 12 48.093659
+96 13 48.662100
+96 14 51.039201
+96 15 51.623638
+96 16 54.083269
+96 17 56.080300
+96 18 56.568542
+96 19 34.176015
+96 20 30.413813
+96 21 26.076810
+96 22 35.777088
+96 23 27.202941
+96 24 36.715120
+96 25 28.425341
+96 26 38.275318
+96 27 39.623226
+96 28 39.051248
+96 29 36.674242
+96 30 34.058773
+96 31 32.756679
+96 32 32.062439
+96 33 31.780497
+96 34 31.384710
+96 35 29.068884
+96 36 49.244289
+96 37 48.836462
+96 38 45.891176
+96 39 43.416587
+96 40 43.185646
+96 41 48.166378
+96 42 38.052595
+96 43 43.011626
+96 44 48.010416
+96 45 45.011110
+96 46 57.628118
+96 47 57.384667
+96 48 54.589376
+96 49 34.928498
+96 50 28.653098
+96 51 16.124515
+96 52 17.029386
+96 53 31.780497
+96 54 38.275318
+96 55 23.021729
+96 56 34.713110
+96 57 6.324555
+96 58 28.635642
+96 59 49.091751
+96 60 49.040799
+96 61 47.010637
+96 62 30.083218
+96 63 9.219544
+96 64 19.235384
+96 65 13.038405
+96 66 21.213203
+96 67 15.000000
+96 68 9.433981
+96 69 28.017851
+96 70 29.154759
+96 71 38.275318
+96 72 20.124612
+96 73 28.861739
+96 74 58.694122
+96 75 39.812058
+96 76 60.207973
+96 77 25.317978
+96 78 47.381431
+96 79 51.623638
+96 80 58.830264
+96 81 13.453624
+96 82 22.135944
+96 83 29.614186
+96 84 19.924859
+96 85 8.062258
+96 86 15.652476
+96 87 37.336309
+96 88 45.880279
+96 89 38.275318
+96 90 33.837849
+96 91 21.470911
+96 92 8.602325
+96 93 6.708204
+96 94 15.811388
+96 95 11.045361
+96 97 17.029386
+96 98 55.362442
+96 99 33.541020
+96 100 30.066593
+96 101 39.051248
+97 1 15.524175
+97 2 43.139309
+97 3 39.115214
+97 4 45.276926
+97 5 43.600459
+97 6 46.754679
+97 7 42.544095
+97 8 45.177428
+97 9 47.707442
+97 10 48.846699
+97 11 47.127487
+97 12 49.040799
+97 13 47.853944
+97 14 53.488316
+97 15 50.803543
+97 16 54.817880
+97 17 56.753854
+97 18 55.731499
+97 19 50.219518
+97 20 45.880279
+97 21 41.109610
+97 22 51.244512
+97 23 41.785165
+97 24 51.865210
+97 25 42.544095
+97 26 52.924474
+97 27 46.647615
+97 28 44.283180
+97 29 44.102154
+97 30 39.824616
+97 31 40.804412
+97 32 38.078866
+97 33 40.000000
+97 34 41.725292
+97 35 35.510562
+97 36 33.241540
+97 37 32.572995
+97 38 29.732137
+97 39 26.925824
+97 40 26.476405
+97 41 31.400637
+97 42 21.213203
+97 43 26.000000
+97 44 31.000000
+97 45 28.000000
+97 46 44.821870
+97 47 45.221676
+97 48 53.758720
+97 49 50.695167
+97 50 43.965896
+97 51 25.495098
+97 52 34.000000
+97 53 38.418745
+97 54 35.227830
+97 55 6.000000
+97 56 25.709920
+97 57 19.646883
+97 58 38.288379
+97 59 59.464275
+97 60 56.400355
+97 61 40.447497
+97 62 14.866069
+97 63 21.470911
+97 64 35.440090
+97 65 26.000000
+97 66 24.413111
+97 67 22.022716
+97 68 15.000000
+97 69 16.155494
+97 70 24.083189
+97 71 25.000000
+97 72 10.049876
+97 73 13.601471
+97 74 53.338541
+97 75 48.795492
+97 76 70.007142
+97 77 42.296572
+97 78 60.207973
+97 79 47.042534
+97 80 50.960769
+97 81 10.630146
+97 82 7.211103
+97 83 30.083218
+97 84 29.206164
+97 85 25.079872
+97 86 32.015621
+97 87 45.343136
+97 88 52.430907
+97 89 31.256999
+97 90 50.447993
+97 91 19.313208
+97 92 13.416408
+97 93 11.180340
+97 94 6.324555
+97 95 6.324555
+97 96 17.029386
+97 98 62.425956
+97 99 29.068884
+97 100 34.669872
+97 101 27.294688
+98 1 48.166378
+98 2 70.213959
+98 3 59.774577
+98 4 69.375788
+98 5 64.031242
+98 6 68.883960
+98 7 58.694122
+98 8 58.051701
+98 9 62.968246
+98 10 18.027756
+98 11 22.803509
+98 12 22.360680
+98 13 27.294688
+98 14 17.029386
+98 15 27.018512
+98 16 22.090722
+98 17 22.360680
+98 18 27.294688
+98 19 42.059482
+98 20 38.832976
+98 21 38.118237
+98 22 38.275318
+98 23 36.124784
+98 24 36.400549
+98 25 34.132096
+98 26 33.615473
+98 27 91.787799
+98 28 92.574294
+98 29 88.814413
+98 30 87.664132
+98 31 84.852814
+98 32 85.702975
+98 33 83.862983
+98 34 81.301906
+98 35 82.764727
+98 36 91.967386
+98 37 90.609050
+98 38 88.413800
+98 39 84.899941
+98 40 83.546394
+98 41 87.321246
+98 42 78.517514
+98 43 80.280757
+98 44 84.202138
+98 45 81.835200
+98 46 65.969690
+98 47 63.560994
+98 48 27.073973
+98 49 40.162171
+98 50 38.470768
+98 51 70.092796
+98 52 51.039201
+98 53 24.186773
+98 54 35.777088
+98 55 66.068147
+98 56 49.396356
+98 57 49.040799
+98 58 26.925824
+98 59 13.601471
+98 60 6.324555
+98 61 43.416587
+98 62 62.369865
+98 63 63.324561
+98 64 61.032778
+98 65 42.720019
+98 66 38.013156
+98 67 41.593269
+98 68 64.621978
+98 69 55.317267
+98 70 43.416587
+98 71 59.682493
+98 72 71.344236
+98 73 75.432089
+98 74 42.047592
+98 75 16.124515
+98 76 13.038405
+98 77 56.320511
+98 78 24.207437
+98 79 38.209946
+98 80 50.039984
+98 81 51.865210
+98 82 60.207973
+98 83 33.970576
+98 84 35.468296
+98 85 54.129474
+98 86 59.211485
+98 87 18.027756
+98 88 10.000000
+98 89 44.721360
+98 90 64.327288
+98 91 43.931765
+98 92 51.000000
+98 93 55.009090
+98 94 66.370174
+98 95 60.901560
+98 96 55.362442
+98 97 62.425956
+98 99 40.496913
+98 100 27.802878
+98 101 55.946403
+99 1 14.142136
+99 2 33.015148
+99 3 23.345235
+99 4 33.241540
+99 5 28.635642
+99 6 33.541020
+99 7 24.351591
+99 8 25.495098
+99 9 30.083218
+99 10 23.345235
+99 11 20.000000
+99 12 21.633308
+99 13 19.313208
+99 14 27.018512
+99 15 22.135944
+99 16 26.832816
+99 17 28.635642
+99 18 26.925824
+99 19 50.328918
+99 20 44.944410
+99 21 40.311289
+99 22 49.040799
+99 23 39.560081
+99 24 48.507731
+99 25 38.897301
+99 26 47.853944
+99 27 72.422372
+99 28 71.063352
+99 29 69.570109
+99 30 66.219333
+99 31 65.787537
+99 32 64.288413
+99 33 64.845971
+99 34 64.884513
+99 35 61.400326
+99 36 52.630789
+99 37 51.088159
+99 38 49.203658
+99 39 45.607017
+99 40 44.045431
+99 41 47.381431
+99 42 39.408121
+99 43 40.311289
+99 44 43.931765
+99 45 41.725292
+99 46 30.594117
+99 47 29.120440
+99 48 25.000000
+99 49 49.648766
+99 50 43.081318
+99 51 49.040799
+99 52 43.185646
+99 53 22.022716
+99 54 6.324555
+99 55 30.083218
+99 56 8.944272
+99 57 29.410882
+99 58 27.294688
+99 59 43.416587
+99 60 35.777088
+99 61 13.601471
+99 62 23.021729
+99 63 42.544095
+99 64 50.447993
+99 65 29.068884
+99 66 15.000000
+99 67 21.213203
+99 68 39.293765
+99 69 16.124515
+99 70 5.000000
+99 71 19.235384
+99 72 39.115214
+99 73 39.217343
+99 74 25.298221
+99 75 32.557641
+99 76 51.478151
+99 77 52.497619
+99 78 49.091751
+99 79 18.439089
+99 80 25.612497
+99 81 21.587033
+99 82 23.769729
+99 83 9.055385
+99 84 23.706539
+99 85 38.600518
+99 86 47.010637
+99 87 28.442925
+99 88 31.304952
+99 89 6.324555
+99 90 62.369865
+99 91 12.083046
+99 92 25.079872
+99 93 28.460499
+99 94 35.000000
+99 95 31.256999
+99 96 33.541020
+99 97 29.068884
+99 98 40.496913
+99 100 17.000000
+99 101 15.811388
+100 1 20.518285
+100 2 50.009999
+100 3 40.199502
+100 4 50.159745
+100 5 45.398238
+100 6 50.358713
+100 7 40.792156
+100 8 41.484937
+100 9 46.324939
+100 10 16.000000
+100 11 16.763055
+100 12 18.681542
+100 13 20.591260
+100 14 21.000000
+100 15 23.259407
+100 16 24.515301
+100 17 26.476405
+100 18 27.856777
+100 19 34.985711
+100 20 29.681644
+100 21 25.612497
+100 22 33.105891
+100 23 24.413111
+100 24 32.310989
+100 25 23.323808
+100 26 31.320920
+100 27 69.180922
+100 28 69.000000
+100 29 66.189123
+100 30 64.000000
+100 31 62.201286
+100 32 62.000000
+100 33 61.204575
+100 34 59.841457
+100 35 59.000000
+100 36 64.660653
+100 37 63.411355
+100 38 61.073726
+100 39 57.628118
+100 40 56.400355
+100 41 60.464866
+100 42 51.224994
+100 43 53.535035
+100 44 57.801384
+100 45 55.226805
+100 46 47.381431
+100 47 45.705580
+100 48 26.000000
+100 49 34.000000
+100 50 28.017851
+100 51 46.000000
+100 52 32.649655
+100 53 5.099020
+100 54 16.155494
+100 55 38.288379
+100 56 25.317978
+100 57 24.000000
+100 58 10.770330
+100 59 27.313001
+100 60 21.931712
+100 61 27.313001
+100 62 35.510562
+100 63 39.000000
+100 64 41.785165
+100 65 19.646883
+100 66 10.295630
+100 67 15.132746
+100 68 38.639358
+100 69 28.653098
+100 70 17.720045
+100 71 35.171011
+100 72 43.829214
+100 73 47.634021
+100 74 34.655447
+100 75 16.155494
+100 76 36.619667
+100 77 41.048752
+100 78 32.140317
+100 79 27.658633
+100 80 38.587563
+100 81 24.186773
+100 82 32.526912
+100 83 8.062258
+100 84 11.704700
+100 85 31.575307
+100 86 38.897301
+100 87 12.083046
+100 88 17.804494
+100 89 23.086793
+100 90 50.803543
+100 91 16.278821
+100 92 24.041631
+100 93 28.160256
+100 94 38.910153
+100 95 33.615473
+100 96 30.066593
+100 97 34.669872
+100 98 27.802878
+100 99 17.000000
+100 101 32.388269
+101 1 19.235384
+101 2 18.973666
+101 3 12.041595
+101 4 20.124612
+101 5 17.029386
+101 6 21.095023
+101 7 15.264338
+101 8 17.888544
+101 9 20.615528
+101 10 38.275318
+101 11 34.205263
+101 12 35.468296
+101 13 31.827661
+101 14 41.231056
+101 15 34.058773
+101 16 39.623226
+101 17 41.109610
+101 18 38.013156
+101 19 63.348244
+101 20 58.051701
+101 21 53.150729
+101 22 62.649820
+101 23 52.773099
+101 24 62.393910
+101 25 52.469038
+101 26 62.128898
+101 27 73.925638
+101 28 71.554175
+101 29 71.344236
+101 30 67.119297
+101 31 67.955868
+101 32 65.368188
+101 33 67.119297
+101 34 68.410526
+101 35 62.769419
+101 36 40.249224
+101 37 38.470768
+101 38 37.161808
+101 39 33.615473
+101 40 31.780497
+101 41 34.132096
+101 42 28.160256
+101 43 27.294688
+101 44 30.000000
+101 45 28.301943
+101 46 18.601075
+101 47 18.384776
+101 48 36.400549
+101 49 62.968246
+101 50 56.089215
+101 51 52.009614
+101 52 52.773099
+101 53 37.483330
+101 54 20.248457
+101 55 25.000000
+101 56 7.071068
+101 57 37.215588
+101 58 42.011903
+101 59 59.203040
+101 60 51.478151
+101 61 17.464249
+101 62 14.142136
+101 63 46.690470
+101 64 58.008620
+101 65 39.560081
+101 66 27.294688
+101 67 31.622777
+101 68 41.400483
+101 69 11.401754
+101 70 15.000000
+101 71 4.472136
+101 72 36.055513
+101 73 32.062439
+101 74 29.832868
+101 75 48.270074
+101 76 67.230945
+101 77 62.177166
+101 78 64.498062
+101 79 25.495098
+101 80 25.019992
+101 81 25.612497
+101 82 20.124612
+101 83 24.331050
+101 84 36.496575
+101 85 46.043458
+101 86 54.405882
+101 87 44.147480
+101 88 47.010637
+101 89 11.401754
+101 90 71.693793
+101 91 20.880613
+101 92 30.805844
+101 93 32.557641
+101 94 33.541020
+101 95 32.202484
+101 96 39.051248
+101 97 27.294688
+101 98 55.946403
+101 99 15.811388
+101 100 32.388269
diff --git a/src/vrp_basic/test/Orders.txt b/src/vrp_basic/test/Orders.txt
index f4b621a..61a445e 100644
--- a/src/vrp_basic/test/Orders.txt
+++ b/src/vrp_basic/test/Orders.txt
@@ -1,102 +1,102 @@
- CUST_NO.   XCOORD.    YCOORD.    DEMAND   READY_TIME   DUE_Time   SERVICE_TIME
-    1      40.00      50.00       0.00       0.00     240.00       0.00
-    2      25.00      85.00      20.00     145.00     175.00      10.00
-    3      22.00      75.00      30.00      50.00      80.00      10.00
-    4      22.00      85.00      10.00     109.00     139.00      10.00
-    5      20.00      80.00      40.00     141.00     171.00      10.00
-    6      20.00      85.00      20.00      41.00      71.00      10.00
-    7      18.00      75.00      20.00      95.00     125.00      10.00
-    8      15.00      75.00      20.00      79.00     109.00      10.00
-    9      15.00      80.00      10.00      91.00     121.00      10.00
-   10      10.00      35.00      20.00      91.00     121.00      10.00
-   11      10.00      40.00      30.00     119.00     149.00      10.00
-   12       8.00      40.00      40.00      59.00      89.00      10.00
-   13       8.00      45.00      20.00      64.00      94.00      10.00
-   14       5.00      35.00      10.00     142.00     172.00      10.00
-   15       5.00      45.00      10.00      35.00      65.00      10.00
-   16       2.00      40.00      20.00      58.00      88.00      10.00
-   17       0.00      40.00      20.00      72.00     102.00      10.00
-   18       0.00      45.00      20.00     149.00     179.00      10.00
-   19      44.00       5.00      20.00      87.00     117.00      10.00
-   20      42.00      10.00      40.00      72.00     102.00      10.00
-   21      42.00      15.00      10.00     122.00     152.00      10.00
-   22      40.00       5.00      10.00      67.00      97.00      10.00
-   23      40.00      15.00      40.00      92.00     122.00      10.00
-   24      38.00       5.00      30.00      65.00      95.00      10.00
-   25      38.00      15.00      10.00     148.00     178.00      10.00
-   26      35.00       5.00      20.00     154.00     184.00      10.00
-   27      95.00      30.00      30.00     115.00     145.00      10.00
-   28      95.00      35.00      20.00      62.00      92.00      10.00
-   29      92.00      30.00      10.00      62.00      92.00      10.00
-   30      90.00      35.00      10.00      67.00      97.00      10.00
-   31      88.00      30.00      10.00      74.00     104.00      10.00
-   32      88.00      35.00      20.00      61.00      91.00      10.00
-   33      87.00      30.00      10.00     131.00     161.00      10.00
-   34      85.00      25.00      10.00      51.00      81.00      10.00
-   35      85.00      35.00      30.00     111.00     141.00      10.00
-   36      67.00      85.00      20.00     139.00     169.00      10.00
-   37      65.00      85.00      40.00      43.00      73.00      10.00
-   38      65.00      82.00      10.00     124.00     154.00      10.00
-   39      62.00      80.00      30.00      75.00     105.00      10.00
-   40      60.00      80.00      10.00      37.00      67.00      10.00
-   41      60.00      85.00      30.00      85.00     115.00      10.00
-   42      58.00      75.00      20.00      92.00     122.00      10.00
-   43      55.00      80.00      10.00      33.00      63.00      10.00
-   44      55.00      85.00      20.00     128.00     158.00      10.00
-   45      55.00      82.00      10.00      64.00      94.00      10.00
-   46      20.00      82.00      10.00      37.00      67.00      10.00
-   47      18.00      80.00      10.00     113.00     143.00      10.00
-   48       2.00      45.00      10.00      45.00      75.00      10.00
-   49      42.00       5.00      10.00     151.00     181.00      10.00
-   50      42.00      12.00      10.00     104.00     134.00      10.00
-   51      72.00      35.00      30.00     116.00     146.00      10.00
-   52      55.00      20.00      19.00      83.00     113.00      10.00
-   53      25.00      30.00       3.00      52.00      82.00      10.00
-   54      20.00      50.00       5.00      91.00     121.00      10.00
-   55      55.00      60.00      16.00     139.00     169.00      10.00
-   56      30.00      60.00      16.00     140.00     170.00      10.00
-   57      50.00      35.00      19.00     130.00     160.00      10.00
-   58      30.00      25.00      23.00      96.00     126.00      10.00
-   59      15.00      10.00      20.00     152.00     182.00      10.00
-   60      10.00      20.00      19.00      42.00      72.00      10.00
-   61      15.00      60.00      17.00     155.00     185.00      10.00
-   62      45.00      65.00       9.00      66.00      96.00      10.00
-   63      65.00      35.00       3.00      52.00      82.00      10.00
-   64      65.00      20.00       6.00      39.00      69.00      10.00
-   65      45.00      30.00      17.00      53.00      83.00      10.00
-   66      35.00      40.00      16.00      11.00      41.00      10.00
-   67      41.00      37.00      16.00     133.00     163.00      10.00
-   68      64.00      42.00       9.00      70.00     100.00      10.00
-   69      40.00      60.00      21.00     144.00     174.00      10.00
-   70      31.00      52.00      27.00      41.00      71.00      10.00
-   71      35.00      69.00      23.00     180.00     210.00      10.00
-   72      65.00      55.00      14.00      65.00      95.00      10.00
-   73      63.00      65.00       8.00      30.00      60.00      10.00
-   74       2.00      60.00       5.00      77.00     107.00      10.00
-   75      20.00      20.00       8.00     141.00     171.00      10.00
-   76       5.00       5.00      16.00      74.00     104.00      10.00
-   77      60.00      12.00      31.00      75.00     105.00      10.00
-   78      23.00       3.00       7.00     150.00     180.00      10.00
-   79       8.00      56.00      27.00      90.00     120.00      10.00
-   80       6.00      68.00      30.00      89.00     119.00      10.00
-   81      47.00      47.00      13.00     192.00     222.00      10.00
-   82      49.00      58.00      10.00      86.00     116.00      10.00
-   83      27.00      43.00       9.00      42.00      72.00      10.00
-   84      37.00      31.00      14.00      35.00      65.00      10.00
-   85      57.00      29.00      18.00      96.00     126.00      10.00
-   86      63.00      23.00       2.00      87.00     117.00      10.00
-   87      21.00      24.00      28.00      87.00     117.00      10.00
-   88      12.00      24.00      13.00      90.00     120.00      10.00
-   89      24.00      58.00      19.00      67.00      97.00      10.00
-   90      67.00       5.00      25.00     144.00     174.00      10.00
-   91      37.00      47.00       6.00      86.00     116.00      10.00
-   92      49.00      42.00      13.00     167.00     197.00      10.00
-   93      53.00      43.00      14.00      14.00      44.00      10.00
-   94      61.00      52.00       3.00     178.00     208.00      10.00
-   95      57.00      48.00      23.00      95.00     125.00      10.00
-   96      56.00      37.00       6.00      34.00      64.00      10.00
-   97      55.00      54.00      26.00     132.00     162.00      10.00
-   98       4.00      18.00      35.00     120.00     150.00      10.00
-   99      26.00      52.00       9.00      46.00      76.00      10.00
-  100      26.00      35.00      15.00      77.00     107.00      10.00
+ CUST_NO.   XCOORD.    YCOORD.    DEMAND   READY_TIME   DUE_Time   SERVICE_TIME
+    1      40.00      50.00       0.00       0.00     240.00       0.00
+    2      25.00      85.00      20.00     145.00     175.00      10.00
+    3      22.00      75.00      30.00      50.00      80.00      10.00
+    4      22.00      85.00      10.00     109.00     139.00      10.00
+    5      20.00      80.00      40.00     141.00     171.00      10.00
+    6      20.00      85.00      20.00      41.00      71.00      10.00
+    7      18.00      75.00      20.00      95.00     125.00      10.00
+    8      15.00      75.00      20.00      79.00     109.00      10.00
+    9      15.00      80.00      10.00      91.00     121.00      10.00
+   10      10.00      35.00      20.00      91.00     121.00      10.00
+   11      10.00      40.00      30.00     119.00     149.00      10.00
+   12       8.00      40.00      40.00      59.00      89.00      10.00
+   13       8.00      45.00      20.00      64.00      94.00      10.00
+   14       5.00      35.00      10.00     142.00     172.00      10.00
+   15       5.00      45.00      10.00      35.00      65.00      10.00
+   16       2.00      40.00      20.00      58.00      88.00      10.00
+   17       0.00      40.00      20.00      72.00     102.00      10.00
+   18       0.00      45.00      20.00     149.00     179.00      10.00
+   19      44.00       5.00      20.00      87.00     117.00      10.00
+   20      42.00      10.00      40.00      72.00     102.00      10.00
+   21      42.00      15.00      10.00     122.00     152.00      10.00
+   22      40.00       5.00      10.00      67.00      97.00      10.00
+   23      40.00      15.00      40.00      92.00     122.00      10.00
+   24      38.00       5.00      30.00      65.00      95.00      10.00
+   25      38.00      15.00      10.00     148.00     178.00      10.00
+   26      35.00       5.00      20.00     154.00     184.00      10.00
+   27      95.00      30.00      30.00     115.00     145.00      10.00
+   28      95.00      35.00      20.00      62.00      92.00      10.00
+   29      92.00      30.00      10.00      62.00      92.00      10.00
+   30      90.00      35.00      10.00      67.00      97.00      10.00
+   31      88.00      30.00      10.00      74.00     104.00      10.00
+   32      88.00      35.00      20.00      61.00      91.00      10.00
+   33      87.00      30.00      10.00     131.00     161.00      10.00
+   34      85.00      25.00      10.00      51.00      81.00      10.00
+   35      85.00      35.00      30.00     111.00     141.00      10.00
+   36      67.00      85.00      20.00     139.00     169.00      10.00
+   37      65.00      85.00      40.00      43.00      73.00      10.00
+   38      65.00      82.00      10.00     124.00     154.00      10.00
+   39      62.00      80.00      30.00      75.00     105.00      10.00
+   40      60.00      80.00      10.00      37.00      67.00      10.00
+   41      60.00      85.00      30.00      85.00     115.00      10.00
+   42      58.00      75.00      20.00      92.00     122.00      10.00
+   43      55.00      80.00      10.00      33.00      63.00      10.00
+   44      55.00      85.00      20.00     128.00     158.00      10.00
+   45      55.00      82.00      10.00      64.00      94.00      10.00
+   46      20.00      82.00      10.00      37.00      67.00      10.00
+   47      18.00      80.00      10.00     113.00     143.00      10.00
+   48       2.00      45.00      10.00      45.00      75.00      10.00
+   49      42.00       5.00      10.00     151.00     181.00      10.00
+   50      42.00      12.00      10.00     104.00     134.00      10.00
+   51      72.00      35.00      30.00     116.00     146.00      10.00
+   52      55.00      20.00      19.00      83.00     113.00      10.00
+   53      25.00      30.00       3.00      52.00      82.00      10.00
+   54      20.00      50.00       5.00      91.00     121.00      10.00
+   55      55.00      60.00      16.00     139.00     169.00      10.00
+   56      30.00      60.00      16.00     140.00     170.00      10.00
+   57      50.00      35.00      19.00     130.00     160.00      10.00
+   58      30.00      25.00      23.00      96.00     126.00      10.00
+   59      15.00      10.00      20.00     152.00     182.00      10.00
+   60      10.00      20.00      19.00      42.00      72.00      10.00
+   61      15.00      60.00      17.00     155.00     185.00      10.00
+   62      45.00      65.00       9.00      66.00      96.00      10.00
+   63      65.00      35.00       3.00      52.00      82.00      10.00
+   64      65.00      20.00       6.00      39.00      69.00      10.00
+   65      45.00      30.00      17.00      53.00      83.00      10.00
+   66      35.00      40.00      16.00      11.00      41.00      10.00
+   67      41.00      37.00      16.00     133.00     163.00      10.00
+   68      64.00      42.00       9.00      70.00     100.00      10.00
+   69      40.00      60.00      21.00     144.00     174.00      10.00
+   70      31.00      52.00      27.00      41.00      71.00      10.00
+   71      35.00      69.00      23.00     180.00     210.00      10.00
+   72      65.00      55.00      14.00      65.00      95.00      10.00
+   73      63.00      65.00       8.00      30.00      60.00      10.00
+   74       2.00      60.00       5.00      77.00     107.00      10.00
+   75      20.00      20.00       8.00     141.00     171.00      10.00
+   76       5.00       5.00      16.00      74.00     104.00      10.00
+   77      60.00      12.00      31.00      75.00     105.00      10.00
+   78      23.00       3.00       7.00     150.00     180.00      10.00
+   79       8.00      56.00      27.00      90.00     120.00      10.00
+   80       6.00      68.00      30.00      89.00     119.00      10.00
+   81      47.00      47.00      13.00     192.00     222.00      10.00
+   82      49.00      58.00      10.00      86.00     116.00      10.00
+   83      27.00      43.00       9.00      42.00      72.00      10.00
+   84      37.00      31.00      14.00      35.00      65.00      10.00
+   85      57.00      29.00      18.00      96.00     126.00      10.00
+   86      63.00      23.00       2.00      87.00     117.00      10.00
+   87      21.00      24.00      28.00      87.00     117.00      10.00
+   88      12.00      24.00      13.00      90.00     120.00      10.00
+   89      24.00      58.00      19.00      67.00      97.00      10.00
+   90      67.00       5.00      25.00     144.00     174.00      10.00
+   91      37.00      47.00       6.00      86.00     116.00      10.00
+   92      49.00      42.00      13.00     167.00     197.00      10.00
+   93      53.00      43.00      14.00      14.00      44.00      10.00
+   94      61.00      52.00       3.00     178.00     208.00      10.00
+   95      57.00      48.00      23.00      95.00     125.00      10.00
+   96      56.00      37.00       6.00      34.00      64.00      10.00
+   97      55.00      54.00      26.00     132.00     162.00      10.00
+   98       4.00      18.00      35.00     120.00     150.00      10.00
+   99      26.00      52.00       9.00      46.00      76.00      10.00
+  100      26.00      35.00      15.00      77.00     107.00      10.00
   101      31.00      67.00       3.00     180.00     210.00      10.00
\ No newline at end of file
diff --git a/src/vrp_basic/test/Vehicles.txt b/src/vrp_basic/test/Vehicles.txt
index 04aa1c2..d9c77cb 100644
--- a/src/vrp_basic/test/Vehicles.txt
+++ b/src/vrp_basic/test/Vehicles.txt
@@ -1,21 +1,21 @@
-V_d	Capacity
-1	200
-2	200
-3	200
-4	200
-5	200
-6	200
-7	200
-8	200
-9	200
-10	200
-11	200
-12	200
-13	200
-14	200
-15	200
-16	200
-17	200
-18	200
-19	200
-20	200
+V_d	Capacity
+1	200
+2	200
+3	200
+4	200
+5	200
+6	200
+7	200
+8	200
+9	200
+10	200
+11	200
+12	200
+13	200
+14	200
+15	200
+16	200
+17	200
+18	200
+19	200
+20	200
diff --git a/src/vrppdtw/doc/doc-gsoc_vrppdtw.queries b/src/vrppdtw/doc/doc-gsoc_vrppdtw.queries
index bde31e9..9a0126c 100644
--- a/src/vrppdtw/doc/doc-gsoc_vrppdtw.queries
+++ b/src/vrppdtw/doc/doc-gsoc_vrppdtw.queries
@@ -1,3 +1,7 @@
+BEGIN;
+BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT DISTINCT(id1) FROM pgr_gsoc_vrppdtw(
     'SELECT * FROM customer ORDER BY id', 25, 200)
@@ -75,3 +79,5 @@ SELECT * FROM pgr_gsoc_vrppdtw(
 (42 rows)
 
 --q4
+ROLLBACK;
+ROLLBACK
diff --git a/src/vrppdtw/doc/pgr_gsoc_vrppdtw.rst b/src/vrppdtw/doc/pgr_gsoc_vrppdtw.rst
index 0ec72e2..a8969d8 100644
--- a/src/vrppdtw/doc/pgr_gsoc_vrppdtw.rst
+++ b/src/vrppdtw/doc/pgr_gsoc_vrppdtw.rst
@@ -1,9 +1,9 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
 
-    This documentation is licensed under a Creative Commons Attribution-Share  
+    This documentation is licensed under a Creative Commons Attribution-Share
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
@@ -18,15 +18,15 @@ Name
 
 ``pgr_gsoc_vrppdtw`` — Returns a solution for `Pick and Delivery` with `time windows` Vehicle Routing Problem
 
-.. include:: ../../proposed.rst
-   :start-after: begin-warning
-   :end-before: end-warning
+.. include:: proposed.rst
+   :start-after: begin-warn-expr
+   :end-before: end-warn-expr
 
 
 Signature Summary
 -----------------
 
-     
+
 .. code-block:: none
 
     pgr_gsoc_vrppdtw(sql, vehicle_num, capacity)
@@ -35,7 +35,7 @@ Signature Summary
 Signatures
 -----------
 
-.. index:: 
+.. index::
     single: gsoc_vrppdtw(Complete Signature) - proposed
 
 
diff --git a/src/vrppdtw/test/jet_customers.result b/src/vrppdtw/test/jet_customers.result
new file mode 100644
index 0000000..cd684ff
--- /dev/null
+++ b/src/vrppdtw/test/jet_customers.result
@@ -0,0 +1,96 @@
+1|1|0|TEB|0|0.00
+2|1|5|BOS|4|1.26
+3|1|62|BOS|-1|2.01
+4|1|53|MVY|1|2.95
+5|1|61|ABE|1|4.38
+6|1|54|MIA|-1|8.01
+7|1|6|MIA|-4|8.76
+8|1|0|TEB|0|11.75
+9|2|0|TEB|0|0.00
+10|2|71|ABE|1|0.95
+11|2|35|MIA|2|4.58
+12|2|33|MIA|2|5.33
+13|2|72|ABE|-1|8.96
+14|2|36|ABE|-2|9.71
+15|2|34|MVY|-2|11.14
+16|2|0|TEB|0|11.63
+17|3|0|TEB|0|0.00
+18|3|45|TEB|5|0.76
+19|3|8|TEB|-4|1.51
+20|3|1|BOS|4|2.77
+21|3|2|BOS|-4|3.52
+22|3|7|BOS|4|4.27
+23|3|46|MVY|-5|5.21
+24|3|0|TEB|0|5.69
+25|4|0|TEB|0|0.00
+26|4|17|BGR|4|1.78
+27|4|64|BGR|-1|2.53
+28|4|63|ABE|1|4.47
+29|4|18|MIA|-4|8.10
+30|4|0|TEB|0|11.09
+31|5|0|TEB|0|0.00
+32|5|27|MIA|2|3.73
+33|5|25|MIA|2|4.48
+34|5|26|BOS|-2|8.66
+35|5|28|BGR|-2|9.96
+36|5|0|TEB|0|10.99
+37|6|0|TEB|0|0.00
+38|6|65|ABE|1|0.95
+39|6|31|MIA|2|4.58
+40|6|29|MIA|2|5.33
+41|6|66|MIA|-1|6.08
+42|6|30|MIA|-2|6.83
+43|6|32|TEB|-2|10.56
+44|6|0|TEB|0|10.56
+45|7|0|TEB|0|0.00
+46|7|49|MVY|1|1.24
+47|7|51|MVY|1|1.99
+48|7|59|MVY|1|2.74
+49|7|55|MVY|1|3.49
+50|7|10|MVY|-4|4.24
+51|7|9|BOS|4|5.18
+52|7|50|BOS|-1|5.93
+53|7|52|BGR|-1|7.22
+54|7|60|ABE|-1|9.16
+55|7|56|TEB|-1|10.11
+56|7|0|TEB|0|10.11
+57|8|0|TEB|0|0.00
+58|8|47|TEB|5|0.76
+59|8|68|TEB|-1|1.51
+60|8|67|ABE|1|2.45
+61|8|48|ABE|-5|3.20
+62|8|69|ABE|1|3.95
+63|8|57|MVY|1|5.39
+64|8|70|MVY|-1|6.14
+65|8|58|MVY|-1|6.89
+66|8|0|TEB|0|7.37
+67|9|0|TEB|0|0.00
+68|9|37|TEB|5|0.76
+69|9|12|ABE|-4|1.70
+70|9|11|BOS|4|3.15
+71|9|38|BOS|-5|3.90
+72|9|23|BGR|4|5.19
+73|9|24|ABE|-4|7.13
+74|9|0|TEB|0|7.33
+75|10|0|TEB|0|0.00
+76|10|39|TEB|5|0.76
+77|10|22|MVY|-4|1.99
+78|10|21|BGR|4|3.43
+79|10|40|BGR|-5|4.18
+80|10|19|BGR|4|4.93
+81|10|20|TEB|-4|6.71
+82|10|0|TEB|0|6.71
+83|11|0|TEB|0|0.00
+84|11|3|BOS|4|1.26
+85|11|14|BOS|-4|2.01
+86|11|15|BGR|4|3.31
+87|11|16|BGR|-4|4.06
+88|11|13|BGR|4|4.81
+89|11|4|BGR|-4|5.56
+90|11|0|TEB|0|6.59
+91|12|0|TEB|0|0.00
+92|12|43|TEB|5|0.76
+93|12|44|TEB|-5|1.51
+94|12|41|TEB|5|2.26
+95|12|42|MIA|-5|5.99
+96|12|0|TEB|0|8.97
diff --git a/src/vrppdtw/test/jet_customers.test.sql b/src/vrppdtw/test/jet_customers.test.sql
new file mode 100644
index 0000000..7729204
--- /dev/null
+++ b/src/vrppdtw/test/jet_customers.test.sql
@@ -0,0 +1,128 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 9.6.2
+-- Dumped by pg_dump version 9.6.1
+
+-- Started on 2017-03-12 13:34:07
+
+
+
+--
+-- TOC entry 318 (class 1259 OID 15659206)
+-- Name: jet_customers; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE jet_customers (
+    airport character varying,
+    id integer,
+    x double precision,
+    y double precision,
+    pindex integer,
+    dindex integer,
+    demand integer,
+    opentime double precision,
+    closetime double precision,
+    servicetime double precision
+);
+
+--
+-- TOC entry 4308 (class 0 OID 15659206)
+-- Dependencies: 318
+-- Data for Name: jet_customers; Type: TABLE DATA; Schema: public; Owner: postgres
+--
+
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 1, 2320738.4688434978, 126348.38967116659, 0, 2, 4, 3448, 2853448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 3, 2320738.4688434978, 126348.38967116659, 0, 4, 4, 3448, 2853448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 5, 2320738.4688434978, 126348.38967116659, 0, 6, 4, 3448, 2853448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 7, 2320738.4688434978, 126348.38967116659, 0, 8, 4, 3448, 2853448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 9, 2320738.4688434978, 126348.38967116659, 0, 10, 4, 3448, 2853448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 11, 2320738.4688434978, 126348.38967116659, 0, 12, 4, 3448, 2853448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 13, 2383186.1525343237, 448251.25888828852, 0, 14, 4, 3463, 2853463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 15, 2383186.1525343237, 448251.25888828852, 0, 16, 4, 3463, 2853463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 17, 2383186.1525343237, 448251.25888828852, 0, 18, 4, 3463, 2853463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 19, 2383186.1525343237, 448251.25888828852, 0, 20, 4, 3463, 2853463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 21, 2383186.1525343237, 448251.25888828852, 0, 22, 4, 3463, 2853463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 23, 2383186.1525343237, 448251.25888828852, 0, 24, 4, 3463, 2853463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 25, 1981144.5525029898, -1903041.2384292425, 0, 26, 2, 3576, 2853576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 27, 1981144.5525029898, -1903041.2384292425, 0, 28, 2, 3576, 2853576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 29, 1981144.5525029898, -1903041.2384292425, 0, 30, 2, 3576, 2853576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 31, 1981144.5525029898, -1903041.2384292425, 0, 32, 2, 3576, 2853576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 33, 1981144.5525029898, -1903041.2384292425, 0, 34, 2, 3576, 2853576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 35, 1981144.5525029898, -1903041.2384292425, 0, 36, 2, 3576, 2853576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 37, 2138409.5568088419, -119451.50568778868, 0, 38, 5, 3624, 2853624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 39, 2138409.5568088419, -119451.50568778868, 0, 40, 5, 3624, 2853624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 41, 2138409.5568088419, -119451.50568778868, 0, 42, 5, 3624, 2853624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 43, 2138409.5568088419, -119451.50568778868, 0, 44, 5, 3624, 2853624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 45, 2138409.5568088419, -119451.50568778868, 0, 46, 5, 3624, 2853624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 47, 2138409.5568088419, -119451.50568778868, 0, 48, 5, 3624, 2853624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 49, 2387491.1007072991, 34459.351848672632, 0, 50, 1, 4265, 2854265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 51, 2387491.1007072991, 34459.351848672632, 0, 52, 1, 4265, 2854265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 53, 2387491.1007072991, 34459.351848672632, 0, 54, 1, 4265, 2854265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 55, 2387491.1007072991, 34459.351848672632, 0, 56, 1, 4265, 2854265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 57, 2387491.1007072991, 34459.351848672632, 0, 58, 1, 4265, 2854265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 59, 2387491.1007072991, 34459.351848672632, 0, 60, 1, 4265, 2854265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 61, 2035310.7411768832, -176076.78362264115, 0, 62, 1, 4355, 2854355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 63, 2035310.7411768832, -176076.78362264115, 0, 64, 1, 4355, 2854355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 65, 2035310.7411768832, -176076.78362264115, 0, 66, 1, 4355, 2854355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 67, 2035310.7411768832, -176076.78362264115, 0, 68, 1, 4355, 2854355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 69, 2035310.7411768832, -176076.78362264115, 0, 70, 1, 4355, 2854355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 71, 2035310.7411768832, -176076.78362264115, 0, 72, 1, 4355, 2854355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 2, 2320738.4688434978, 126348.38967116659, 1, 0, -4, 3448, 6903448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 4, 2383186.1525343237, 448251.25888828852, 3, 0, -4, 3448, 6903448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 6, 1981144.5525029898, -1903041.2384292425, 5, 0, -4, 3448, 6903448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 8, 2138409.5568088419, -119451.50568778868, 7, 0, -4, 3448, 6903448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 10, 2387491.1007072991, 34459.351848672632, 9, 0, -4, 3448, 6903448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 12, 2035310.7411768832, -176076.78362264115, 11, 0, -4, 3448, 6903448, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 14, 2320738.4688434978, 126348.38967116659, 13, 0, -4, 3463, 6903463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 16, 2383186.1525343237, 448251.25888828852, 15, 0, -4, 3463, 6903463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 18, 1981144.5525029898, -1903041.2384292425, 17, 0, -4, 3463, 6903463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 20, 2138409.5568088419, -119451.50568778868, 19, 0, -4, 3463, 6903463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 22, 2387491.1007072991, 34459.351848672632, 21, 0, -4, 3463, 6903463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 24, 2035310.7411768832, -176076.78362264115, 23, 0, -4, 3463, 6903463, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 26, 2320738.4688434978, 126348.38967116659, 25, 0, -2, 3576, 6903576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 28, 2383186.1525343237, 448251.25888828852, 27, 0, -2, 3576, 6903576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 30, 1981144.5525029898, -1903041.2384292425, 29, 0, -2, 3576, 6903576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 32, 2138409.5568088419, -119451.50568778868, 31, 0, -2, 3576, 6903576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 34, 2387491.1007072991, 34459.351848672632, 33, 0, -2, 3576, 6903576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 36, 2035310.7411768832, -176076.78362264115, 35, 0, -2, 3576, 6903576, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 38, 2320738.4688434978, 126348.38967116659, 37, 0, -5, 3624, 6903624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 40, 2383186.1525343237, 448251.25888828852, 39, 0, -5, 3624, 6903624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 42, 1981144.5525029898, -1903041.2384292425, 41, 0, -5, 3624, 6903624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 44, 2138409.5568088419, -119451.50568778868, 43, 0, -5, 3624, 6903624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 46, 2387491.1007072991, 34459.351848672632, 45, 0, -5, 3624, 6903624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 48, 2035310.7411768832, -176076.78362264115, 47, 0, -5, 3624, 6903624, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 50, 2320738.4688434978, 126348.38967116659, 49, 0, -1, 4265, 6904265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 52, 2383186.1525343237, 448251.25888828852, 51, 0, -1, 4265, 6904265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 54, 1981144.5525029898, -1903041.2384292425, 53, 0, -1, 4265, 6904265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 56, 2138409.5568088419, -119451.50568778868, 55, 0, -1, 4265, 6904265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 58, 2387491.1007072991, 34459.351848672632, 57, 0, -1, 4265, 6904265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 60, 2035310.7411768832, -176076.78362264115, 59, 0, -1, 4265, 6904265, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BOS', 62, 2320738.4688434978, 126348.38967116659, 61, 0, -1, 4355, 6904355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('BGR', 64, 2383186.1525343237, 448251.25888828852, 63, 0, -1, 4355, 6904355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MIA', 66, 1981144.5525029898, -1903041.2384292425, 65, 0, -1, 4355, 6904355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 68, 2138409.5568088419, -119451.50568778868, 67, 0, -1, 4355, 6904355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('MVY', 70, 2387491.1007072991, 34459.351848672632, 69, 0, -1, 4355, 6904355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('ABE', 72, 2035310.7411768832, -176076.78362264115, 71, 0, -1, 4355, 6904355, 450000);
+INSERT INTO jet_customers (airport, id, x, y, pindex, dindex, demand, opentime, closetime, servicetime) VALUES ('TEB', 0, 2138409.5568088419, -119451.50568778868, 0, 0, 0, 0, 7200000, 0);
+
+SELECT 
+n.seq, n.id1 AS jet, n.id2 AS cust, pd.airport, pd.demand AS pas, 
+(n.cost/1000/600)::numeric(10,2) AS c_hrs  
+FROM 
+pgr_gsoc_vrppdtw(
+    $$
+    SELECT 
+    id, x, y, demand, 
+    opentime, closetime, servicetime, 
+    pindex, dindex 
+    FROM jet_customers 
+    ORDER BY id
+    $$,
+    2,
+    5
+) AS n LEFT JOIN 
+jet_customers AS pd ON n.id2 = pd.id
+ORDER BY n.seq;
+
diff --git a/src/vrppdtw/test/test.conf b/src/vrppdtw/test/test.conf
index 936e410..0df0702 100644
--- a/src/vrppdtw/test/test.conf
+++ b/src/vrppdtw/test/test.conf
@@ -5,6 +5,7 @@
         'comment' => 'Function test for any versions.',
         'data' => ['../../pickDeliver/test/pickDeliver.data'],
         'tests' => [qw(
+            jet_customers
             doc-gsoc_vrppdtw
             pdp-any-02
             )],
diff --git a/src/withPoints/doc/doc-pgr_withPoints.queries b/src/withPoints/doc/doc-pgr_withPoints.queries
index cfc6332..9ae373b 100644
--- a/src/withPoints/doc/doc-pgr_withPoints.queries
+++ b/src/withPoints/doc/doc-pgr_withPoints.queries
@@ -1,10 +1,12 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --e1
 SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -3);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -3);
  seq | path_seq | node | edge | cost | agg_cost 
 -----+----------+------+------+------+----------
    1 |        1 |   -1 |    1 |  0.6 |        0
@@ -16,10 +18,10 @@ SELECT * FROM pgr_withPoints(
 
 --e2
 SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3,
-        details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3,
+    details := true);
  seq | path_seq | node | edge | cost | agg_cost 
 -----+----------+------+------+------+----------
    1 |        1 |   -1 |    1 |  0.6 |        0
@@ -34,9 +36,9 @@ SELECT * FROM pgr_withPoints(
 
 --e3
 SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, ARRAY[-3,5]);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, ARRAY[-3,5]);
  seq | path_seq | end_pid | node | edge | cost | agg_cost 
 -----+----------+---------+------+------+------+----------
    1 |        1 |      -3 |   -1 |    1 |  0.6 |        0
@@ -51,9 +53,9 @@ SELECT * FROM pgr_withPoints(
 
 --e4
 SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], -3);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], -3);
  seq | path_seq | start_pid | node | edge | cost | agg_cost 
 -----+----------+-----------+------+------+------+----------
    1 |        1 |        -1 |   -1 |    1 |  0.6 |        0
@@ -69,9 +71,9 @@ SELECT * FROM pgr_withPoints(
 
 --e5
 SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7]);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7]);
  seq | path_seq | start_pid | end_pid | node | edge | cost | agg_cost 
 -----+----------+-----------+---------+------+------+------+----------
    1 |        1 |        -1 |      -3 |   -1 |    1 |  0.6 |        0
@@ -96,20 +98,20 @@ SELECT * FROM pgr_withPoints(
 
 --q2
 SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:')::TEXT AS path_at,
-            CASE WHEN edge = -1 THEN ' visits'
-                ELSE ' passes in front of'
-            END as status,
-            CASE WHEN node < 0 THEN 'Point'
-                ELSE 'Vertex'
-            END as is_a,
-            abs(node) as id
-        FROM pgr_withPoints(
-            'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-            'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-            ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
-            driving_side := 'r',
-            details := true)
-        WHERE node IN (-6,6);
+        CASE WHEN edge = -1 THEN ' visits'
+            ELSE ' passes in front of'
+        END as status,
+        CASE WHEN node < 0 THEN 'Point'
+            ELSE 'Vertex'
+        END as is_a,
+        abs(node) as id
+    FROM pgr_withPoints(
+        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+        ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
+        driving_side := 'r',
+        details := true)
+    WHERE node IN (-6,6);
          path_at         |       status        |  is_a  | id 
 -------------------------+---------------------+--------+----
  (-1 => -6) at 4th step: |  visits             | Point  |  6
@@ -132,20 +134,20 @@ SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:
 
 --q3
 SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:')::TEXT AS path_at,
-            CASE WHEN edge = -1 THEN ' visits'
-                ELSE ' passes in front of'
-            END as status,
-            CASE WHEN node < 0 THEN 'Point'
-                ELSE 'Vertex'
-            END as is_a,
-            abs(node) as id
-        FROM pgr_withPoints(
-            'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-            'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-            ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
-            driving_side := 'l',
-            details := true)
-        WHERE node IN (-6,6);
+        CASE WHEN edge = -1 THEN ' visits'
+            ELSE ' passes in front of'
+        END as status,
+        CASE WHEN node < 0 THEN 'Point'
+            ELSE 'Vertex'
+        END as is_a,
+        abs(node) as id
+    FROM pgr_withPoints(
+        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+        ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
+        driving_side := 'l',
+        details := true)
+    WHERE node IN (-6,6);
          path_at         |       status        |  is_a  | id 
 -------------------------+---------------------+--------+----
  (-1 => -6) at 3th step: |  visits             | Point  |  6
@@ -168,11 +170,11 @@ SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:
 
 --q4
 SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        directed := false,
-        details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    directed := false,
+    details := true);
  seq | path_seq | start_pid | end_pid | node | edge | cost | agg_cost 
 -----+----------+-----------+---------+------+------+------+----------
    1 |        1 |        -1 |      -3 |   -1 |    1 |  0.6 |        0
diff --git a/src/withPoints/doc/doc-pgr_withPointsCost.queries b/src/withPoints/doc/doc-pgr_withPointsCost.queries
index e911c9b..7930644 100644
--- a/src/withPoints/doc/doc-pgr_withPointsCost.queries
+++ b/src/withPoints/doc/doc-pgr_withPointsCost.queries
@@ -1,10 +1,12 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --e1
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -3);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -3);
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |      3.2
@@ -12,10 +14,10 @@ SELECT * FROM pgr_withPointsCost(
 
 --e2
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3,
-        directed := false);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3,
+    directed := false);
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |       3 |      1.6
@@ -23,9 +25,9 @@ SELECT * FROM pgr_withPointsCost(
 
 --e3
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, ARRAY[-3,5]);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, ARRAY[-3,5]);
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |      3.2
@@ -34,9 +36,9 @@ SELECT * FROM pgr_withPointsCost(
 
 --e4
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], -3);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], -3);
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |      3.2
@@ -45,9 +47,9 @@ SELECT * FROM pgr_withPointsCost(
 
 --e5
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7]);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7]);
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |      3.2
@@ -58,10 +60,10 @@ SELECT * FROM pgr_withPointsCost(
 
 --q2
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        driving_side := 'l');
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    driving_side := 'l');
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |      3.2
@@ -72,10 +74,10 @@ SELECT * FROM pgr_withPointsCost(
 
 --q3
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        driving_side := 'r');
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    driving_side := 'r');
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |        4
@@ -86,10 +88,10 @@ SELECT * FROM pgr_withPointsCost(
 
 --q4
 SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        driving_side := 'b');
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    driving_side := 'b');
  start_pid | end_pid | agg_cost 
 -----------+---------+----------
         -1 |      -3 |      3.2
diff --git a/src/withPoints/doc/doc-pgr_withPointsDD.queries b/src/withPoints/doc/doc-pgr_withPointsDD.queries
index c9b4fa5..6435a0f 100644
--- a/src/withPoints/doc/doc-pgr_withPointsDD.queries
+++ b/src/withPoints/doc/doc-pgr_withPointsDD.queries
@@ -1,10 +1,12 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8);
  seq | node | edge | cost | agg_cost 
 -----+------+------+------+----------
    1 |   -1 |   -1 |    0 |        0
@@ -22,11 +24,11 @@ SELECT * FROM pgr_withPointsDD(
 
 --q2
 SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8,
-        driving_side := 'r',
-        details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8,
+    driving_side := 'r',
+    details := true);
  seq | node | edge | cost | agg_cost 
 -----+------+------+------+----------
    1 |   -1 |   -1 |    0 |        0
@@ -41,11 +43,11 @@ SELECT * FROM pgr_withPointsDD(
 
 --q3
 SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8,
-        driving_side := 'l',
-        details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8,
+    driving_side := 'l',
+    details := true);
  seq | node | edge | cost | agg_cost 
 -----+------+------+------+----------
    1 |   -1 |   -1 |    0 |        0
@@ -66,11 +68,11 @@ SELECT * FROM pgr_withPointsDD(
 
 --q4
 SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8,
-        driving_side := 'b',
-        details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8,
+    driving_side := 'b',
+    details := true);
  seq | node | edge | cost | agg_cost 
 -----+------+------+------+----------
    1 |   -1 |   -1 |    0 |        0
diff --git a/src/withPoints/doc/doc-pgr_withPointsKSP.queries b/src/withPoints/doc/doc-pgr_withPointsKSP.queries
index 2e1a849..965c8dc 100644
--- a/src/withPoints/doc/doc-pgr_withPointsKSP.queries
+++ b/src/withPoints/doc/doc-pgr_withPointsKSP.queries
@@ -1,10 +1,12 @@
 BEGIN;
 BEGIN
+SET client_min_messages TO NOTICE;
+SET
 --q1
 SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -2, 2);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2);
  seq | path_id | path_seq | node | edge | cost | agg_cost 
 -----+---------+----------+------+------+------+----------
    1 |       1 |        1 |   -1 |    1 |  0.6 |        0
@@ -24,9 +26,9 @@ SELECT * FROM pgr_withPointsKSP(
 
 --q2
 SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 6, 2, details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 6, 2, details := true);
  seq | path_id | path_seq | node | edge | cost | agg_cost 
 -----+---------+----------+------+------+------+----------
    1 |       1 |        1 |   -1 |    1 |  0.6 |        0
@@ -49,36 +51,36 @@ SELECT * FROM pgr_withPointsKSP(
 
 --q3
 SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -2, 2,
-        driving_side := 'l', details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2,
+    driving_side := 'l', details := true);
  seq | path_id | path_seq | node | edge | cost | agg_cost 
 -----+---------+----------+------+------+------+----------
    1 |       1 |        1 |   -1 |    1 |  0.6 |        0
    2 |       1 |        2 |    2 |    4 |  0.7 |      0.6
    3 |       1 |        3 |   -6 |    4 |  0.3 |      1.3
    4 |       1 |        4 |    5 |    8 |    1 |      1.6
-   5 |       1 |        5 |    6 |   11 |    1 |      2.6
-   6 |       1 |        6 |   11 |   13 |    1 |      3.6
+   5 |       1 |        5 |    6 |    9 |    1 |      2.6
+   6 |       1 |        6 |    9 |   15 |    1 |      3.6
    7 |       1 |        7 |   12 |   15 |  0.6 |      4.6
    8 |       1 |        8 |   -2 |   -1 |    0 |      5.2
    9 |       2 |        1 |   -1 |    1 |  0.6 |        0
   10 |       2 |        2 |    2 |    4 |  0.7 |      0.6
   11 |       2 |        3 |   -6 |    4 |  0.3 |      1.3
   12 |       2 |        4 |    5 |    8 |    1 |      1.6
-  13 |       2 |        5 |    6 |    9 |    1 |      2.6
-  14 |       2 |        6 |    9 |   15 |    1 |      3.6
+  13 |       2 |        5 |    6 |   11 |    1 |      2.6
+  14 |       2 |        6 |   11 |   13 |    1 |      3.6
   15 |       2 |        7 |   12 |   15 |  0.6 |      4.6
   16 |       2 |        8 |   -2 |   -1 |    0 |      5.2
 (16 rows)
 
 --q4
 SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -2, 2,
-        heap_paths := true, driving_side := 'r', details := true);
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2,
+    heap_paths := true, driving_side := 'r', details := true);
  seq | path_id | path_seq | node | edge | cost | agg_cost 
 -----+---------+----------+------+------+------+----------
    1 |       1 |        1 |   -1 |    1 |  0.4 |        0
diff --git a/src/withPoints/doc/pgr_withPoints.rst b/src/withPoints/doc/pgr_withPoints.rst
index 28311d9..86291e5 100644
--- a/src/withPoints/doc/pgr_withPoints.rst
+++ b/src/withPoints/doc/pgr_withPoints.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,20 +19,22 @@ Name
 ``pgr_withPoints`` - Returns the shortest path in a graph with additional temporary vertices.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.2.0
+
 Synopsis
 -------------------------------------------------------------------------------
 
-Modify the graph to include points defined by points_sql. 
+Modify the graph to include points defined by points_sql.
 Using Dijkstra algorithm, find the shortest path(s)
 
 Characteristics:
@@ -195,11 +197,11 @@ Description of the Signatures
 ..
     description of the sql queries
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../../common/src/points_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: points_sql_start
     :end-before: points_sql_end
 
diff --git a/src/withPoints/doc/pgr_withPointsCost.rst b/src/withPoints/doc/pgr_withPointsCost.rst
index 4f1a37b..9c15cd4 100644
--- a/src/withPoints/doc/pgr_withPointsCost.rst
+++ b/src/withPoints/doc/pgr_withPointsCost.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,16 +19,18 @@ Name
 ``pgr_withPointsCost`` - Calculates the shortest path and returns only the aggregate cost of the shortest path(s) found, for the combination of points given.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.2.0
+
 Synopsis
 -------------------------------------------------------------------------------
 
@@ -87,7 +89,7 @@ Signature Summary
     pgr_withPointsCost(edges_sql, points_sql, start_vids, end_vids, directed, driving_side)
     RETURNS SET OF (start_vid, end_vid, agg_cost)
 
-.. note:: There is no **details** flag, unlike the other members of the withPoints family of functions.  
+.. note:: There is no **details** flag, unlike the other members of the withPoints family of functions.
 
 
 Signatures
@@ -204,11 +206,11 @@ Description of the Signatures
 ..
     description of the sql queries
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../../common/src/points_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: points_sql_start
     :end-before: points_sql_end
 
diff --git a/src/withPoints/doc/pgr_withPointsDD.rst b/src/withPoints/doc/pgr_withPointsDD.rst
index 49f5916..62bac3d 100644
--- a/src/withPoints/doc/pgr_withPointsDD.rst
+++ b/src/withPoints/doc/pgr_withPointsDD.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,20 +19,22 @@ Name
 ``pgr_withPointsDD`` - Returns the driving distance from a starting point.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.2.0
+
 Synopsis
 -------------------------------------------------------------------------------
 
-Modify the graph to include points and 
+Modify the graph to include points and
 using Dijkstra algorithm, extracts all the nodes and points that have costs less
 than or equal to the value ``distance`` from the starting point.
 The edges extracted will conform the corresponding spanning tree.
@@ -119,11 +121,11 @@ Description of the Signatures
     description of the sql queries
 
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../../common/src/points_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: points_sql_start
     :end-before: points_sql_end
 
@@ -147,7 +149,7 @@ Parameter        Type              Description
 
 **details**      ``BOOLEAN``       (optional). When ``true`` the results will include the driving distance to the points with in the ``distance``.
                                    Default is ``false`` which ignores other points of the points_sql.
-**equicost**     ``BOOLEAN``       (optional). When ``true`` the nodes will only appear in the closest start_v list. Default is ``false`` which resembles several calls using the single starting point signatures. Tie brakes are arbitrary.                                   
+**equicost**     ``BOOLEAN``       (optional). When ``true`` the nodes will only appear in the closest start_v list. Default is ``false`` which resembles several calls using the single starting point signatures. Tie brakes are arbitrary.
 ================ ================= =================================================
 
 
diff --git a/src/withPoints/doc/pgr_withPointsKSP.rst b/src/withPoints/doc/pgr_withPointsKSP.rst
index a449715..eeb0a82 100644
--- a/src/withPoints/doc/pgr_withPointsKSP.rst
+++ b/src/withPoints/doc/pgr_withPointsKSP.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,19 +19,21 @@ Name
 ``pgr_withPointsKSP`` - Find the K shortest paths using Yen's algorithm.
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: 2.2.0
+
 Synopsis
 -------------------------------------------------------------------------------
 
-Modifies the graph to include the points defined in the ``points_sql`` and 
+Modifies the graph to include the points defined in the ``points_sql`` and
 using Yen algorithm, finds the K shortest paths.
 
 
@@ -99,11 +101,11 @@ Description of the Signatures
 ..
     description of the sql queries
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../../common/src/points_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: points_sql_start
     :end-before: points_sql_end
 
@@ -145,10 +147,10 @@ Column           Type              Description
 **path_seq** ``INTEGER`` Relative position in the path of node and edge. Has value 1 for the beginning of a path.
 **path_id**  ``INTEGER``  Path identifier. The ordering of the paths: For two paths i, j if i < j then agg_cost(i) <= agg_cost(j).
 **node**     ``BIGINT``  Identifier of the node in the path. Negative values are the identifiers of a point.
-**edge**     ``BIGINT``  Identifier of the edge used to go from ``node`` to the next node in the path sequence. 
+**edge**     ``BIGINT``  Identifier of the edge used to go from ``node`` to the next node in the path sequence.
                            - ``-1`` for the last row in the path sequence.
 
-**cost**     ``FLOAT``   Cost to traverse from ``node`` using ``edge`` to the next ``node`` in the path sequence. 
+**cost**     ``FLOAT``   Cost to traverse from ``node`` using ``edge`` to the next ``node`` in the path sequence.
                            - ``0`` for the last row in the path sequence.
 
 **agg_cost** ``FLOAT``   Aggregate cost from ``start_pid`` to ``node``.
@@ -183,7 +185,7 @@ The queries use the :ref:`sampledata` network.
 See Also
 -------------------------------------------------------------------------------
 
-* :ref:`withPoints` 
+* :ref:`withPoints`
 
 .. rubric:: Indices and tables
 
diff --git a/src/withPoints/doc/pgr_withPointsVia.rst b/src/withPoints/doc/pgr_withPointsVia.rst
index 4ad9fea..1f58ef9 100644
--- a/src/withPoints/doc/pgr_withPointsVia.rst
+++ b/src/withPoints/doc/pgr_withPointsVia.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -19,21 +19,23 @@ Name
 ``pgr_withPointsVia`` - Get a path using the vertices/points indicated
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
 
 
-.. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
+.. figure:: images/boost-inside.jpeg
    :target: http://www.boost.org/libs/graph
 
    Boost Graph Inside
 
+.. rubric:: Availability: PENDING.
+
 Synopsis
 -------------------------------------------------------------------------------
 
-Modify the graph to include points and 
+Modify the graph to include points and
 using Dijkstra algorithm, extracts all the nodes and points that have costs less
 than or equal to the value ``distance`` from the starting point.
 The edges extracted will conform the corresponding spanning tree.
@@ -102,11 +104,11 @@ Description of the Signatures
 ..
     description of the sql queries
 
-.. include:: ../../common/src/edges_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: basic_edges_sql_start
     :end-before: basic_edges_sql_end
 
-.. include:: ../../common/src/points_input.h
+.. include:: pgRouting-concepts.rst
     :start-after: points_sql_start
     :end-before: points_sql_end
 
diff --git a/src/withPoints/doc/withPoints.rst b/src/withPoints/doc/withPoints-family.rst
similarity index 88%
rename from src/withPoints/doc/withPoints.rst
rename to src/withPoints/doc/withPoints-family.rst
index 3aa5489..192e8b7 100644
--- a/src/withPoints/doc/withPoints.rst
+++ b/src/withPoints/doc/withPoints-family.rst
@@ -1,4 +1,4 @@
-.. 
+..
    ****************************************************************************
     pgRouting Manual
     Copyright(c) pgRouting Contributors
@@ -15,24 +15,28 @@ withPoints - Family of functions
 
 When points are also given as input:
 
-    - :ref:`pgr_withPoints` - Route from/to points anywhere on the graph.
-    - :ref:`pgr_withPointsCost` - Costs of the shortest paths.
-    - :ref:`pgr_withPointsCostMatrix` - Costs of the shortest paths.
-    - :ref:`pgr_withPointsKSP` - K shortest paths.
-    - :ref:`pgr_withPointsDD` - Driving distance.
+.. index from here
+
+- :ref:`pgr_withPoints` - Route from/to points anywhere on the graph.
+- :ref:`pgr_withPointsCost` - Costs of the shortest paths.
+- :ref:`pgr_withPointsCostMatrix` - Costs of the shortest paths.
+- :ref:`pgr_withPointsKSP` - K shortest paths.
+- :ref:`pgr_withPointsDD` - Driving distance.
+
+.. index to here
 
 .. toctree::
-    :hidden: 
+    :hidden:
 
-    ./pgr_withPoints
-    ./pgr_withPointsCost
-    ../../costMatrix/doc/pgr_withPointsCostMatrix
-    ./pgr_withPointsKSP
-    ./pgr_withPointsDD
+    pgr_withPoints
+    pgr_withPointsCost
+    pgr_withPointsCostMatrix
+    pgr_withPointsKSP
+    pgr_withPointsDD
 
 
 
-.. include:: ../../proposedNext.rst
+.. include:: proposed.rst
    :start-after: begin-warning
    :end-before: end-warning
 
@@ -76,12 +80,12 @@ information about which `side` of the edge the point is on, then routing
 from arbitrary points more accurately reflect routing vehicles in road networks,
 
 
-I talk about a family of functios because it includes different functionalities.
+I talk about a family of functions because it includes different functionalities.
   - pgr_withPoints is pgr_dijkstra based
   - pgr_withPointsCost is pgr_dijkstraCost based
   - pgr_withPointsKSP is pgr_ksp based
   - pgr_withPointsDD is pgr_drivingDistance based
-  
+
 In all this functions we have to take care of as many aspects as possible:
 
 - Must work for routing:
@@ -108,7 +112,7 @@ In all this functions we have to take care of as many aspects as possible:
 
   - Original point identifiers are to be positive.
   - Transformation to negative is done internally.
-  - For results for involving vertices identifiers 
+  - For results for involving vertices identifiers
 
     - positive sign is a vertex of the original grpah
     - negative sign is a point of the temporary points
@@ -128,13 +132,13 @@ Graph & edges
 Point Definition
 ----------------
 
-- A point is defined by the quadruplet: :math:`(pid, eid, fraction, side)` 
+- A point is defined by the quadruplet: :math:`(pid, eid, fraction, side)`
 
   - :ped: is the point identifier
   - :eid: is an edge id of the `edges_sql`
   - :fraction: represents where the edge `eid` will be cut.
   - :side: Indicates the side of the edge where the point is located.
-  
+
 
 Creating Temporary Vertices in the Graph
 ----------------------------------------
diff --git a/src/withPoints/src/CMakeLists.txt b/src/withPoints/src/CMakeLists.txt
index 95cfff5..8975899 100644
--- a/src/withPoints/src/CMakeLists.txt
+++ b/src/withPoints/src/CMakeLists.txt
@@ -8,8 +8,5 @@ ADD_LIBRARY(withPoints OBJECT
     get_new_queries.cpp
     pgr_withPoints.cpp
 
-    one_to_one_withPoints_driver.cpp
-    many_to_one_withPoints_driver.cpp
     many_to_many_withPoints_driver.cpp
-    one_to_many_withPoints_driver.cpp
     )
diff --git a/src/withPoints/src/get_new_queries.cpp b/src/withPoints/src/get_new_queries.cpp
index 4065fe4..ffa2bf7 100644
--- a/src/withPoints/src/get_new_queries.cpp
+++ b/src/withPoints/src/get_new_queries.cpp
@@ -27,10 +27,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "string.h"
-#include <sstream>
 #include "./get_new_queries.h"
+#include <string.h>
+#include <sstream>
 
+char
+estimate_drivingSide(char driving_side) {
+    char d_side = static_cast<char>(tolower(driving_side));
+    if (!((d_side == 'r')
+                || (d_side == 'l'))) {
+        d_side = 'b';
+    }
+    return d_side;
+}
 
 void
 get_new_queries(
@@ -50,9 +59,9 @@ get_new_queries(
     edges_no_points_sql << "WITH "
         << " edges AS (" << edges_sql << "), "
         << " points AS (" << points_sql << ")"
-        << " SELECT edges.* FROM edges WHERE NOT EXISTS (SELECT edge_id FROM points WHERE id = edge_id)";
+        << " SELECT edges.*"
+        << " FROM edges"
+        << " WHERE NOT EXISTS (SELECT edge_id FROM points WHERE id = edge_id)";
     *edges_no_points_query = strdup(edges_no_points_sql.str().c_str());
 }
 
-
-
diff --git a/src/withPoints/src/get_new_queries.h b/src/withPoints/src/get_new_queries.h
index 6d5f9dd..946beb4 100644
--- a/src/withPoints/src/get_new_queries.h
+++ b/src/withPoints/src/get_new_queries.h
@@ -34,6 +34,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 extern "C" {
 #endif
 
+    char estimate_drivingSide(char driving_side);
+
     void get_new_queries(
             char *edges_sql,
             char *points_sql,
diff --git a/src/withPoints/src/many_to_many_withPoints.c b/src/withPoints/src/many_to_many_withPoints.c
index 94886d1..93a3a41 100644
--- a/src/withPoints/src/many_to_many_withPoints.c
+++ b/src/withPoints/src/many_to_many_withPoints.c
@@ -27,21 +27,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
 
-
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./../../common/src/points_input.h"
@@ -49,21 +41,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./many_to_many_withPoints_driver.h"
 
 PGDLLEXPORT Datum many_to_many_withPoints(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(many_to_many_withPoints);
 
 
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
 static
 void
 process(
         char* edges_sql,
         char* points_sql,
 
-        int64_t *start_pidsArr,
-        size_t size_start_pidsArr,
-
-        int64_t *end_pidsArr,
-        size_t size_end_pidsArr,
+        ArrayType *starts,
+        ArrayType *ends,
 
         bool directed,
         char *driving_side,
@@ -71,9 +59,16 @@ process(
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
+    driving_side[0] = estimate_drivingSide(driving_side[0]);
 
     pgr_SPI_connect();
 
+    size_t size_start_pidsArr = 0;
+    int64_t* start_pidsArr = pgr_get_bigIntArray(&size_start_pidsArr, starts);
+
+    size_t size_end_pidsArr = 0;
+    int64_t* end_pidsArr = pgr_get_bigIntArray(&size_end_pidsArr, ends);
+
     Point_on_edge_t *points = NULL;
     size_t total_points = 0;
     pgr_get_points(points_sql, &points, &total_points);
@@ -89,7 +84,8 @@ process(
 
     pgr_edge_t *edges_of_points = NULL;
     size_t total_edges_of_points = 0;
-    pgr_get_edges(edges_of_points_query, &edges_of_points, &total_edges_of_points);
+    pgr_get_edges(
+            edges_of_points_query, &edges_of_points, &total_edges_of_points);
 
 
     pgr_edge_t *edges = NULL;
@@ -100,62 +96,70 @@ process(
     free(edges_no_points_query);
 
     if ((total_edges + total_edges_of_points) == 0) {
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
 
-    char *err_msg = NULL;
-    char *log_msg = NULL;
     clock_t start_t = clock();
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+
     do_pgr_many_to_many_withPoints(
             edges, total_edges,
             points, total_points,
             edges_of_points, total_edges_of_points,
             start_pidsArr, size_start_pidsArr,
             end_pidsArr, size_end_pidsArr,
+
             driving_side[0],
             details,
             directed,
             only_cost,
-            result_tuples,
-            result_count,
+            true,
+
+            result_tuples, result_count,
+            &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg("Processing withPoints many to many", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", err_msg);
-    if (log_msg) free(log_msg);
-
-    if (err_msg) {
-        free(start_pidsArr);
-        free(end_pidsArr);
-        free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+
+    if (only_cost) {
+        time_msg("processing pgr_withPointsCost(one to one)", start_t, clock());
+    } else {
+        time_msg("processing pgr_withPoints(one to one)", start_t, clock());
     }
-    pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+#if 0
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (points) pfree(points);
+    if (edges_of_points) pfree(edges_of_points);
+    if (start_pidsArr) pfree(start_pidsArr);
+    if (end_pidsArr) pfree(end_pidsArr);
+#endif
     pgr_SPI_finish();
 }
 
-/*                                                                             */
-/*******************************************************************************/
 
-PG_FUNCTION_INFO_V1(many_to_many_withPoints);
 PGDLLEXPORT Datum
 many_to_many_withPoints(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
+    /**********************************************************************/
     General_path_element_t *result_tuples = 0;
     size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -163,12 +167,11 @@ many_to_many_withPoints(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // CREATE OR REPLACE FUNCTION pgr_withPoint(
         // edges_sql TEXT,
         // points_sql TEXT,
-        // start_pid BIGINT,
+        // start_pid ANYARRAY,
         // end_pids ANYARRAY,
         // driving_side CHAR -- DEFAULT 'b',
         // details BOOLEAN -- DEFAULT false,
@@ -176,36 +179,28 @@ many_to_many_withPoints(PG_FUNCTION_ARGS) {
         // only_cost BOOLEAN DEFAULT false,
 
 
-        int64_t* start_pidsArr;
-        size_t size_start_pidsArr;
-        start_pidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_start_pidsArr, PG_GETARG_ARRAYTYPE_P(2));
-
-        int64_t* end_pidsArr;
-        size_t size_end_pidsArr;
-        end_pidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_end_pidsArr, PG_GETARG_ARRAYTYPE_P(3));
-
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                pgr_text2char(PG_GETARG_TEXT_P(1)),
-                start_pidsArr, size_start_pidsArr,
-                end_pidsArr, size_end_pidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(1)),
+                PG_GETARG_ARRAYTYPE_P(2),
+                PG_GETARG_ARRAYTYPE_P(3),
                 PG_GETARG_BOOL(4),
-                pgr_text2char(PG_GETARG_TEXT_P(5)),
+                text_to_cstring(PG_GETARG_TEXT_P(5)),
                 PG_GETARG_BOOL(6),
                 PG_GETARG_BOOL(7),
                 &result_tuples,
                 &result_count);
 
-        if (start_pidsArr) free(start_pidsArr);
-        if (end_pidsArr) free(end_pidsArr);
-        /*                                                                             */
-        /*******************************************************************************/
+        /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -216,19 +211,16 @@ many_to_many_withPoints(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // OUT seq BIGINT,
         // OUT path_seq,
         // OUT node BIGINT,
@@ -246,24 +238,20 @@ many_to_many_withPoints(PG_FUNCTION_ARGS) {
         }
 
 
-        // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[5] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[7] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*******************************************************************************/
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].end_id);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[5] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[7] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/withPoints/src/many_to_many_withPoints_driver.cpp b/src/withPoints/src/many_to_many_withPoints_driver.cpp
index 2a35349..9f6d7de 100644
--- a/src/withPoints/src/many_to_many_withPoints_driver.cpp
+++ b/src/withPoints/src/many_to_many_withPoints_driver.cpp
@@ -27,27 +27,50 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#include "./many_to_many_withPoints_driver.h"
 
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
+#include <algorithm>
 #include <sstream>
 #include <deque>
-#include <algorithm>
-#include <set>
 #include <vector>
 #include <cassert>
 
 
 #include "./pgr_dijkstra.hpp"
 #include "./pgr_withPoints.hpp"
-#include "./many_to_many_withPoints_driver.h"
-#include "./../../common/src/pgr_types.h"
-#include "./../../common/src/pgr_assert.h"
+
 #include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_assert.h"
+#include "./../../common/src/pgr_types.h"
+
+template < class G >
+std::deque< Path >
+pgr_dijkstra(
+        G &graph,
+        std::vector < int64_t > sources,
+        std::vector < int64_t > targets,
+        bool only_cost,
+        bool normal) {
+    std::sort(sources.begin(), sources.end());
+    sources.erase(
+            std::unique(sources.begin(), sources.end()),
+            sources.end());
+
+    std::sort(targets.begin(), targets.end());
+    targets.erase(
+            std::unique(targets.begin(), targets.end()),
+            targets.end());
+
+    Pgr_dijkstra< G > fn_dijkstra;
+    auto paths = fn_dijkstra.dijkstra(graph, sources, targets, only_cost);
+
+    if (!normal) {
+        for (auto &path : paths) {
+            path.reverse();
+        }
+    }
+    return paths;
+}
 
 
 // CREATE OR REPLACE FUNCTION pgr_withPoint(
@@ -57,101 +80,111 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 // end_pid BIGINT,
 // directed BOOLEAN DEFAULT true
 
-int
+void
 do_pgr_many_to_many_withPoints(
-        pgr_edge_t *edges,
-        size_t total_edges,
-        Point_on_edge_t *points_p,
-        size_t total_points,
-        pgr_edge_t *edges_of_points,
-        size_t total_edges_of_points,
-        int64_t *start_pidsArr,
-        size_t size_start_pidsArr,
-        int64_t *end_pidsArr,
-        size_t size_end_pidsArr,
+        pgr_edge_t *edges, size_t total_edges,
+        Point_on_edge_t *points_p, size_t total_points,
+        pgr_edge_t *edges_of_points, size_t total_edges_of_points,
+        int64_t *start_pidsArr, size_t size_start_pidsArr,
+        int64_t *end_pidsArr, size_t size_end_pidsArr,
 
         char driving_side,
         bool details,
         bool directed,
         bool only_cost,
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** err_msg) {
+        bool normal,
+
+        General_path_element_t **return_tuples, size_t *return_count,
+
+        char** log_msg,
+        char** notice_msg,
+        char** err_msg) {
     std::ostringstream log;
+    std::ostringstream notice;
+    std::ostringstream err;
     try {
+        pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
+        pgassert(!(*err_msg));
+        pgassert(!(*return_tuples));
+        pgassert((*return_count) == 0);
+        pgassert(edges);
+        pgassert(points_p);
+        pgassert(edges_of_points);
+        pgassert(start_pidsArr);
+        pgassert(end_pidsArr);
+
         std::vector< Point_on_edge_t >
             points(points_p, points_p + total_points);
 
+        if (!normal) {
+            for (auto &point : points) {
+                if (point.side == 'r') {
+                    point.side = 'l';
+                } else if (point.side == 'l') {
+                    point.side = 'r';
+                }
+                point.fraction = 1 - point.fraction;
+            }
+            if (driving_side == 'r') {
+                driving_side = 'l';
+            } else if (driving_side == 'l') {
+                driving_side = 'r';
+            }
+        }
+
         int errcode = check_points(points, log);
         if (errcode) {
-            /* Point(s) with same pid but different edge/fraction/side combination found */
-            *err_msg = strdup(log.str().c_str());
-            return errcode;
+            *log_msg = strdup(log.str().c_str());
+            err << "Unexpected point(s) with same pid"
+                << " but different edge/fraction/side combination found.";
+            *err_msg = pgr_msg(err.str().c_str());
+            return;
         }
 
+
         std::vector< pgr_edge_t >
-            edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
+            edges_to_modify(
+                    edges_of_points, edges_of_points + total_edges_of_points);
 
         std::vector< pgr_edge_t > new_edges;
         create_new_edges(
                 points,
                 edges_to_modify,
                 driving_side,
-                new_edges);
-
+                new_edges, log);
 
-        std::set< int64_t > s_start_vertices(start_pidsArr, start_pidsArr + size_start_pidsArr);
-        std::set< int64_t > s_end_vertices(end_pidsArr, end_pidsArr + size_end_pidsArr);
 
-        std::vector< int64_t > start_vertices(s_start_vertices.begin(), s_start_vertices.end());
-        std::vector< int64_t > end_vertices(s_end_vertices.begin(), s_end_vertices.end());
+        std::vector<int64_t>
+            start_vertices(start_pidsArr, start_pidsArr + size_start_pidsArr);
+        std::vector< int64_t >
+            end_vertices(end_pidsArr, end_pidsArr + size_end_pidsArr);
 
-#if 0
-
-        std::set< int64_t > start_vertices;
-        std::set< int64_t > end_vertices;
 
-        for (const auto &start_pid : start_points) {
-            for (const auto point : points) {
-                if (point.pid == start_pid) {
-                    start_vertices.insert(point.vertex_id);
-                    break;
-                }
-            }
-        }
-        for (const auto &end_pid : end_points) {
-            for (const auto point : points) {
-                if (point.pid == end_pid) {
-                    end_vertices.insert(point.vertex_id);
-                    break;
-                }
-            }
-        }
-#endif
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
         std::deque< Path > paths;
 
-
         if (directed) {
             log << "Working with directed Graph\n";
             pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
-            pgr_dijkstra(digraph, paths, start_vertices, end_vertices, only_cost);
+            digraph.insert_edges(edges, total_edges);
+            digraph.insert_edges(new_edges);
+            paths = pgr_dijkstra(
+                    digraph,
+                    start_vertices, end_vertices,
+                    only_cost, normal);
         } else {
             log << "Working with Undirected Graph\n";
             pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
-            pgr_dijkstra(undigraph, paths, start_vertices, end_vertices, only_cost);
+            undigraph.insert_edges(edges, total_edges);
+            undigraph.insert_edges(new_edges);
+            paths = pgr_dijkstra(
+                    undigraph,
+                    start_vertices, end_vertices,
+                    only_cost, normal);
         }
 
-#if 0
-        for (auto &path : paths) {
-            adjust_pids(points, path);
-        }
-#endif
         if (!details) {
             for (auto &path : paths) {
                 eliminate_details(path, edges_to_modify);
@@ -177,34 +210,41 @@ do_pgr_many_to_many_withPoints(
         if (count == 0) {
             (*return_tuples) = NULL;
             (*return_count) = 0;
+#if 0
             log <<
-                "No paths found between Starting and any of the Ending vertices\n";
-            *err_msg = strdup(log.str().c_str());
-            return 0;
+                "No paths found";
+            *err_msg = pgr_msg(log.str().c_str());
+#endif
+            return;
         }
 
         (*return_tuples) = pgr_alloc(count, (*return_tuples));
         log << "Converting a set of paths into the tuples\n";
         (*return_count) = (collapse_paths(return_tuples, paths));
 
-        return 0;
+        *log_msg = log.str().empty()?
+            *log_msg :
+            pgr_msg(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            *notice_msg :
+            pgr_msg(notice.str().c_str());
     } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        log << except.what() << "\n";
-        *err_msg = strdup(log.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
+    } catch (std::exception &except) {
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        log << except.what() << "\n";
-        *err_msg = strdup(log.str().c_str());
+        err << except.what();
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     } catch(...) {
-        if (*return_tuples) free(*return_tuples);
+        (*return_tuples) = pgr_free(*return_tuples);
         (*return_count) = 0;
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
+        err << "Caught unknown exception!";
+        *err_msg = pgr_msg(err.str().c_str());
+        *log_msg = pgr_msg(log.str().c_str());
     }
-
-    return 1000;
 }
-
diff --git a/src/withPoints/src/many_to_many_withPoints_driver.h b/src/withPoints/src/many_to_many_withPoints_driver.h
index c419749..9a7dcd3 100644
--- a/src/withPoints/src/many_to_many_withPoints_driver.h
+++ b/src/withPoints/src/many_to_many_withPoints_driver.h
@@ -43,7 +43,7 @@ extern "C" {
 // start_pid ANYARRAY,
 // end_pid BIGINT,
 // directed BOOLEAN DEFAULT true,
-    int do_pgr_many_to_many_withPoints(
+    void do_pgr_many_to_many_withPoints(
             pgr_edge_t *edges,
             size_t total_edges,
 
@@ -64,9 +64,13 @@ extern "C" {
             bool details,
             bool directed,
             bool only_cost,
+            bool normal,
+
             General_path_element_t **return_tuples,
             size_t *return_count,
-            char ** err_msg);
+            char** log_msg,
+            char** notice_msg,
+            char** err_msg);
 
 #ifdef __cplusplus
 }
diff --git a/src/withPoints/src/many_to_one_withPoints.c b/src/withPoints/src/many_to_one_withPoints.c
index 6971526..51bed34 100644
--- a/src/withPoints/src/many_to_one_withPoints.c
+++ b/src/withPoints/src/many_to_one_withPoints.c
@@ -27,50 +27,45 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./../../common/src/points_input.h"
 #include "./get_new_queries.h"
-#include "./many_to_one_withPoints_driver.h"
+#include "./many_to_many_withPoints_driver.h"
 
 PGDLLEXPORT Datum many_to_one_withPoints(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(many_to_one_withPoints);
 
 
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
 static
 void
 process(
         char* edges_sql,
         char* points_sql,
-        int64_t *start_pidsArr,
-        size_t size_start_pidsArr,
+        ArrayType *starts,
         int64_t end_pid,
         bool directed,
-        char *driving_side,
+        char* driving_side,
         bool details,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    driving_side[0] = (char) tolower(driving_side[0]);
+    driving_side[0] = estimate_drivingSide(driving_side[0]);
+    PGR_DBG("estimated driving side:%c", driving_side[0]);
 
     pgr_SPI_connect();
 
+    size_t size_start_pidsArr = 0;
+    int64_t* start_pidsArr =
+        pgr_get_bigIntArray(&size_start_pidsArr, starts);
+
     Point_on_edge_t *points = NULL;
     size_t total_points = 0;
     pgr_get_points(points_sql, &points, &total_points);
@@ -86,12 +81,13 @@ process(
 
     pgr_edge_t *edges_of_points = NULL;
     size_t total_edges_of_points = 0;
-    pgr_get_edges(edges_of_points_query, &edges_of_points, &total_edges_of_points);
+    pgr_get_edges_reversed(
+            edges_of_points_query, &edges_of_points, &total_edges_of_points);
 
 
     pgr_edge_t *edges = NULL;
     size_t total_edges = 0;
-    pgr_get_edges(edges_no_points_query, &edges, &total_edges);
+    pgr_get_edges_reversed(edges_no_points_query, &edges, &total_edges);
 
     free(edges_of_points_query);
     free(edges_no_points_query);
@@ -103,55 +99,62 @@ process(
         return;
     }
 
-    char *err_msg = NULL;
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    int errcode = do_pgr_many_to_one_withPoints(
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_to_many_withPoints(
             edges, total_edges,
             points, total_points,
             edges_of_points, total_edges_of_points,
+            &end_pid, 1,
             start_pidsArr, size_start_pidsArr,
-            end_pid,
             driving_side[0],
             details,
             directed,
             only_cost,
+            false,
             result_tuples,
             result_count,
+            &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing withPoints many to one", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("Returned message = %s\n", err_msg);
 
-    if (err_msg) free(err_msg);
+    if (only_cost) {
+        time_msg("processing pgr_withPointsCost(many to one)",
+                start_t, clock());
+    } else {
+        time_msg("processing pgr_withPoints(many to one)", start_t, clock());
+    }
 
-    pfree(edges);
-    pgr_SPI_finish();
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
 
+    pgr_global_report(log_msg, notice_msg, err_msg);
 
-    if (errcode) {
-        free(start_pidsArr);
-        pgr_send_error(errcode);
-    }
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (start_pidsArr) pfree(start_pidsArr);
+
+    pgr_SPI_finish();
 }
 
-/*                                                                             */
-/*******************************************************************************/
 
-PG_FUNCTION_INFO_V1(many_to_one_withPoints);
 PGDLLEXPORT Datum
 many_to_one_withPoints(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
-    General_path_element_t *result_tuples = 0;
+    /**********************************************************************/
+    General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -159,8 +162,7 @@ many_to_one_withPoints(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // CREATE OR REPLACE FUNCTION pgr_withPoint(
         // edges_sql TEXT,
         // points_sql TEXT,
@@ -171,31 +173,28 @@ many_to_one_withPoints(PG_FUNCTION_ARGS) {
         // directed BOOLEAN -- DEFAULT true,
         // only_cost BOOLEAN DEFAULT false,
 
-
-        int64_t* start_pidsArr;
-        size_t size_start_pidsArr;
-        start_pidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_start_pidsArr, PG_GETARG_ARRAYTYPE_P(2));
-
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                pgr_text2char(PG_GETARG_TEXT_P(1)),
-                start_pidsArr, size_start_pidsArr,
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(1)),
+                PG_GETARG_ARRAYTYPE_P(2),
                 PG_GETARG_INT64(3),
                 PG_GETARG_BOOL(4),
-                pgr_text2char(PG_GETARG_TEXT_P(5)),
+                text_to_cstring(PG_GETARG_TEXT_P(5)),
                 PG_GETARG_BOOL(6),
                 PG_GETARG_BOOL(7),
                 &result_tuples,
                 &result_count);
 
-        if (start_pidsArr) free(start_pidsArr);
-        /*                                                                             */
-        /*******************************************************************************/
+        /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -206,19 +205,16 @@ many_to_one_withPoints(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // OUT seq BIGINT,
         // OUT path_seq,
         // OUT node BIGINT,
@@ -237,23 +233,20 @@ many_to_one_withPoints(PG_FUNCTION_ARGS) {
 
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*******************************************************************************/
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].start_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
+
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/src/withPoints/src/many_to_one_withPoints_driver.cpp b/src/withPoints/src/many_to_one_withPoints_driver.cpp
deleted file mode 100644
index 83ac5b6..0000000
--- a/src/withPoints/src/many_to_one_withPoints_driver.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: one_to_many_withPoints_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <algorithm>
-#include <set>
-#include <sstream>
-#include <deque>
-#include <vector>
-#include <cassert>
-
-#include "./pgr_dijkstra.hpp"
-#include "./pgr_withPoints.hpp"
-#include "./many_to_one_withPoints_driver.h"
-#include "./../../common/src/pgr_types.h"
-#include "./../../common/src/pgr_alloc.hpp"
-
-
-// CREATE OR REPLACE FUNCTION pgr_withPoint(
-// edges_sql TEXT,
-// points_sql TEXT,
-// start_pid ANYARRAY,
-// end_pid BIGINT,
-// directed BOOLEAN DEFAULT true
-
-
-int
-do_pgr_many_to_one_withPoints(
-        pgr_edge_t *edges, size_t total_edges,
-        Point_on_edge_t *points_p, size_t total_points,
-        pgr_edge_t *edges_of_points, size_t total_edges_of_points,
-        int64_t *start_pidsArr, size_t size_start_pidsArr,
-        int64_t end_vid,
-        char driving_side,
-        bool details,
-        bool directed,
-        bool only_cost,
-        General_path_element_t **return_tuples, size_t *return_count,
-        char ** err_msg) {
-    std::ostringstream log;
-    try {
-        std::vector< Point_on_edge_t >
-            points(points_p, points_p + total_points);
-
-        int errcode = check_points(points, log);
-        if (errcode) {
-            /* Point(s) with same pid but different edge/fraction/side combination found */
-            *err_msg = strdup(log.str().c_str());
-            return errcode;
-        }
-
-        std::vector< pgr_edge_t >
-            edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
-
-        std::vector< pgr_edge_t > new_edges;
-
-        create_new_edges(
-                points,
-                edges_to_modify,
-                driving_side,
-                new_edges);
-
-
-        std::set< int64_t > s_start_vertices(start_pidsArr, start_pidsArr + size_start_pidsArr);
-        std::vector< int64_t > start_vertices(s_start_vertices.begin(), s_start_vertices.end());
-
-        graphType gType = directed? DIRECTED: UNDIRECTED;
-
-        std::deque< Path > paths;
-
-
-        if (directed) {
-            log << "Working with directed Graph\n";
-            pgrouting::DirectedGraph digraph(gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
-            pgr_dijkstra(digraph, paths, start_vertices, end_vid, only_cost);
-        } else {
-            log << "Working with Undirected Graph\n";
-            pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
-            pgr_dijkstra(undigraph, paths, start_vertices, end_vid, only_cost);
-        }
-
-#if 0
-        for (auto &path : paths) {
-            adjust_pids(points, path);
-        }
-#endif
-        if (!details) {
-            for (auto &path : paths) {
-                eliminate_details(path, edges_to_modify);
-            }
-        }
-
-        /*
-         * order paths based on the start_pid
-         */
-        std::sort(paths.begin(), paths.end(), [](const Path &a, const Path &b) {
-                return a.start_id() < b.start_id();
-                });
-
-        size_t count(0);
-        count = count_tuples(paths);
-
-
-        if (count == 0) {
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            log <<
-                "No paths found between Starting and any of the Ending vertices\n";
-            *err_msg = strdup(log.str().c_str());
-            return 0;
-        }
-
-        (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
-        (*return_count) = (collapse_paths(return_tuples, paths));
-
-#ifndef NDEBUG
-        {
-            std::ostringstream log;
-            log << "OK";
-            *err_msg = strdup(log.str().c_str());
-        }
-
-#else
-        *err_msg = strdup(log.str().c_str());
-#endif
-        return 0;
-    } catch ( ... ) {
-        log << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
-        return 1000;
-    }
-    return 0;
-}
-
diff --git a/src/withPoints/src/many_to_one_withPoints_driver.h b/src/withPoints/src/many_to_one_withPoints_driver.h
deleted file mode 100644
index 1f986d4..0000000
--- a/src/withPoints/src/many_to_one_withPoints_driver.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: withPoints_driver.h
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_WITHPOINTS_SRC_MANY_TO_ONE_WITHPOINTS_DRIVER_H_
-#define SRC_WITHPOINTS_SRC_MANY_TO_ONE_WITHPOINTS_DRIVER_H_
-
-#pragma once
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// CREATE OR REPLACE FUNCTION pgr_withPoint(
-// edges_sql TEXT,
-// points_sql TEXT,
-// start_pid ANYARRAY,
-// end_pid BIGINT,
-// directed BOOLEAN DEFAULT true,
-    int do_pgr_many_to_one_withPoints(
-            pgr_edge_t *edges, size_t total_edges,
-            Point_on_edge_t *points, size_t total_points,
-            pgr_edge_t *edges_of_points, size_t total_edges_of_points,
-            int64_t *start_pidsArr, size_t size_start_pidsArr,
-
-            int64_t end_pid,
-
-
-            char driving_side,
-            bool details,
-            bool directed,
-            bool only_cost,
-            General_path_element_t **return_tuples, size_t *return_count,
-            char ** err_msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_WITHPOINTS_SRC_MANY_TO_ONE_WITHPOINTS_DRIVER_H_
diff --git a/src/withPoints/src/msg_logger.hpp b/src/withPoints/src/msg_logger.hpp
deleted file mode 100644
index da51caf..0000000
--- a/src/withPoints/src/msg_logger.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: msg_logger.hpp
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#pragma once
-
-#include <string>
-#include <vector>
-#include "./../../common/src/pgr_types.h"
-
-void
-PGR_LOG_POINTS(
-        std::ostringstream &log,
-        const std::vector< Point_on_edge_t > &points,
-        const std::string &title) {
-    log << title << "\n";
-    for (const auto &p : points) {
-        log << p.pid << "\t"
-            << p.edge_id << "\t"
-            << p.fraction << "\t"
-            << p.side << "\n";
-    }
-}
diff --git a/src/withPoints/src/one_to_many_withPoints.c b/src/withPoints/src/one_to_many_withPoints.c
index 32ed61e..57d789d 100644
--- a/src/withPoints/src/one_to_many_withPoints.c
+++ b/src/withPoints/src/one_to_many_withPoints.c
@@ -27,71 +27,49 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
 
-#include "fmgr.h"
 #include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
 #include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/arrays_input.h"
 #include "./../../common/src/points_input.h"
 #include "./get_new_queries.h"
-#include "./one_to_many_withPoints_driver.h"
+#include "./many_to_many_withPoints_driver.h"
 
 PGDLLEXPORT Datum one_to_many_withPoints(PG_FUNCTION_ARGS);
 
 
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
 static
 void
 process(
         char* edges_sql,
         char* points_sql,
         int64_t start_pid,
-        int64_t *end_pidsArr,
-        size_t size_end_pidsArr,
+        ArrayType *ends,
         bool directed,
         char *driving_side,
         bool details,
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    driving_side[0] = (char) tolower(driving_side[0]);
-    PGR_DBG("driving side:%c", driving_side[0]);
-    if (!((driving_side[0] == 'r')
-                 || (driving_side[0] == 'l'))) {
-        driving_side[0] = 'b';
-    }
+    driving_side[0] = estimate_drivingSide(driving_side[0]);
     PGR_DBG("estimated driving side:%c", driving_side[0]);
+
     pgr_SPI_connect();
 
+    size_t size_end_pidsArr = 0;
+    int64_t* end_pidsArr =
+        pgr_get_bigIntArray(&size_end_pidsArr, ends);
+
     PGR_DBG("load the points");
-    Point_on_edge_t *points = NULL;
     size_t total_points = 0;
+    Point_on_edge_t *points = NULL;
     pgr_get_points(points_sql, &points, &total_points);
 
-#if 0
-#ifndef NDEBUG
-    size_t i = 0;
-    for (i = 0; i < total_points; i ++) {
-        PGR_DBG("%ld\t%ld\t%f\t%c", points[i].pid, points[i].edge_id, points[i].fraction, points[i].side);
-    }
-#endif
-#endif
-    /*
-     * TODO move this code to c++
-     */
     PGR_DBG(" -- change the query");
     char *edges_of_points_query = NULL;
     char *edges_no_points_query = NULL;
@@ -106,21 +84,10 @@ process(
     PGR_DBG("load the edges that match the points");
     pgr_edge_t *edges_of_points = NULL;
     size_t total_edges_of_points = 0;
-    pgr_get_edges(edges_of_points_query, &edges_of_points, &total_edges_of_points);
+    pgr_get_edges(
+            edges_of_points_query, &edges_of_points, &total_edges_of_points);
 
     PGR_DBG("Total %ld edges in query:", total_edges_of_points);
-#if 0
-#ifndef NDEBUG
-    for (i = 0; i < total_edges_of_points; i ++) {
-        PGR_DBG("%ld\t%ld\t%ld\t%f\t%f",
-                edges_of_points[i].id,
-                edges_of_points[i].source,
-                edges_of_points[i].target,
-                edges_of_points[i].cost,
-                edges_of_points[i].reverse_cost);
-    }
-#endif
-#endif
 
 
     PGR_DBG("load the edges that don't match the points");
@@ -129,82 +96,76 @@ process(
     pgr_get_edges(edges_no_points_query, &edges, &total_edges);
 
     PGR_DBG("Total %ld edges in query:", total_edges);
-#if 0
-#ifndef NDEBUG
-    for (i = 0; i < total_edges; i ++) {
-        PGR_DBG("%ld\t%ld\t%ld\t%f\t%f",
-                edges[i].id,
-                edges[i].source,
-                edges[i].target,
-                edges[i].cost,
-                edges[i].reverse_cost);
-    }
-#endif
-    PGR_DBG("freeing allocated memory not used anymore");
-#endif
+
     free(edges_of_points_query);
     free(edges_no_points_query);
 
     if ((total_edges + total_edges_of_points) == 0) {
         PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
 
-    PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    do_pgr_one_to_many_withPoints(
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_to_many_withPoints(
             edges, total_edges,
             points, total_points,
             edges_of_points, total_edges_of_points,
-            start_pid,
+            &start_pid, 1,
             end_pidsArr, size_end_pidsArr,
+
             driving_side[0],
             details,
             directed,
             only_cost,
-            result_tuples,
-            result_count,
+            true,
+
+            result_tuples, result_count,
+
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing withPoints one to many", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
 
-    if (log_msg) free(log_msg);
+    if (only_cost) {
+        time_msg("processing pgr_withPointsCost(one to many)",
+                start_t, clock());
+    } else {
+        time_msg("processing pgr_withPoints(one to many)", start_t, clock());
+    }
 
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        if (end_pidsArr) free(end_pidsArr);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
     }
-    pfree(edges);
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (points) pfree(points);
+    if (edges_of_points) pfree(edges_of_points);
+    if (end_pidsArr) pfree(end_pidsArr);
     pgr_SPI_finish();
 }
 
-/*                                                                             */
-/*******************************************************************************/
 
 PG_FUNCTION_INFO_V1(one_to_many_withPoints);
 PGDLLEXPORT Datum
 one_to_many_withPoints(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
-    General_path_element_t *result_tuples = 0;
+    /**********************************************************************/
+    General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -212,8 +173,7 @@ one_to_many_withPoints(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // CREATE OR REPLACE FUNCTION pgr_withPoint(
         // edges_sql TEXT,
         // points_sql TEXT,
@@ -225,32 +185,29 @@ one_to_many_withPoints(PG_FUNCTION_ARGS) {
         // only_cost BOOLEAN DEFAULT false,
 
 
-        PGR_DBG("Initializing arrays");
-        int64_t* end_pidsArr;
-        size_t size_end_pidsArr;
-        end_pidsArr = (int64_t*)
-            pgr_get_bigIntArray(&size_end_pidsArr, PG_GETARG_ARRAYTYPE_P(3));
 
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                pgr_text2char(PG_GETARG_TEXT_P(1)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(1)),
                 PG_GETARG_INT64(2),
-                end_pidsArr, size_end_pidsArr,
+                PG_GETARG_ARRAYTYPE_P(3),
                 PG_GETARG_BOOL(4),
-                pgr_text2char(PG_GETARG_TEXT_P(5)),
+                text_to_cstring(PG_GETARG_TEXT_P(5)),
                 PG_GETARG_BOOL(6),
                 PG_GETARG_BOOL(7),
                 &result_tuples,
                 &result_count);
 
-        PGR_DBG("Cleaning arrays");
-        free(end_pidsArr);
-        /*                                                                             */
-        /*******************************************************************************/
+        /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -261,19 +218,16 @@ one_to_many_withPoints(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // OUT seq BIGINT,
         // OUT path_seq,
         // OUT node BIGINT,
@@ -292,22 +246,20 @@ one_to_many_withPoints(PG_FUNCTION_ARGS) {
 
 
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*******************************************************************************/
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].end_id);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[4] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[6] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
+
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/withPoints/src/one_to_many_withPoints_driver.cpp b/src/withPoints/src/one_to_many_withPoints_driver.cpp
deleted file mode 100644
index 50e0366..0000000
--- a/src/withPoints/src/one_to_many_withPoints_driver.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: one_to_many_withPoints_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <set>
-#include <algorithm>
-#include <sstream>
-#include <deque>
-#include <vector>
-#include <cassert>
-
-
-#include "./pgr_dijkstra.hpp"
-#include "./pgr_withPoints.hpp"
-#include "./one_to_many_withPoints_driver.h"
-
-#include "./../../common/src/basic_vertex.h"
-#include "./../../common/src/pgr_alloc.hpp"
-#include "./../../common/src/pgr_assert.h"
-
-// CREATE OR REPLACE FUNCTION pgr_withPoint(
-// edges_sql TEXT,
-// points_sql TEXT,
-// start_pid BIGINT,
-// end_pid BIGINT,
-// directed BOOLEAN DEFAULT true
-
-
-void
-do_pgr_one_to_many_withPoints(
-        pgr_edge_t *edges, size_t total_edges,
-        Point_on_edge_t *points_p, size_t total_points,
-        pgr_edge_t *edges_of_points, size_t total_edges_of_points,
-        int64_t start_vid,
-        int64_t *end_pidsArr, size_t size_end_pidsArr,
-        char driving_side,
-        bool details,
-        bool directed,
-        bool only_cost,
-        General_path_element_t **return_tuples, size_t *return_count,
-        char ** log_msg,
-        char ** err_msg) {
-    std::ostringstream log;
-    std::ostringstream err;
-    try {
-        pgassert(!(*return_tuples));
-        pgassert((*return_count) == 0);
-        pgassert(!(*log_msg));
-        pgassert(!(*err_msg));
-
-        /*
-         * DOCUMENT:
-         *   - Points are treated as the same point when the pid is the same
-         *   therefore when two points have the same pid, but different edge/fraction
-         *   an error is generated.
-         */
-        std::vector< Point_on_edge_t >
-            points(points_p, points_p + total_points);
-
-        int errcode = check_points(points, log);
-        if (errcode) {
-            *log_msg = strdup(log.str().c_str());
-            err << "Unexpected point(s) with same pid but different edge/fraction/side combination found.";
-            *err_msg = strdup(err.str().c_str());
-            return;
-        }
-
-
-        std::vector< pgr_edge_t >
-            edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
-
-        std::vector< pgr_edge_t > new_edges;
-
-        log << "driving_side" << driving_side << "\n";
-        create_new_edges(
-                points,
-                edges_to_modify,
-                driving_side,
-                new_edges);
-
-        log << "Inserting points into a c++ vector structure\n";
-        /*
-         * Eliminating duplicates
-         * & ordering the points
-         */
-        std::set< int64_t > s_end_vertices(end_pidsArr, end_pidsArr + size_end_pidsArr);
-
-        std::vector< int64_t > end_vertices(s_end_vertices.begin(), s_end_vertices.end());
-
-        log << "start_vid" << start_vid << "\n";
-        log << "end_vertices";
-
-        for (const auto &vid : end_vertices) {
-            log << vid << "\n";
-        }
-
-        graphType gType = directed? DIRECTED: UNDIRECTED;
-
-        std::deque< Path > paths;
-
-
-        if (directed) {
-            log << "Working with directed Graph\n";
-            pgrouting::DirectedGraph digraph(
-                    pgrouting::extract_vertices(
-                        pgrouting::extract_vertices(edges, total_edges),
-                        new_edges),
-                    gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
-            pgr_dijkstra(digraph, paths, start_vid, end_vertices, only_cost);
-        } else {
-            log << "Working with Undirected Graph\n";
-            auto vertices(pgrouting::extract_vertices(edges, total_edges));
-            vertices = pgrouting::extract_vertices(vertices, new_edges);
-            pgrouting::UndirectedGraph undigraph(vertices, gType);
-            vertices.clear();
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
-            pgr_dijkstra(undigraph, paths, start_vid, end_vertices, only_cost);
-        }
-
-        if (!details) {
-            for (auto &path : paths) {
-                eliminate_details(path, edges_to_modify);
-            }
-        }
-        /*
-         * order paths based on the end_pid
-         */
-        std::sort(paths.begin(), paths.end(), [](const Path &a, const Path &b) {
-                return a.end_id() < b.end_id();
-                });
-
-        size_t count(0);
-        count = count_tuples(paths);
-
-
-        if (count == 0) {
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            log <<
-                "No paths found between Starting and any of the Ending vertices\n";
-            *log_msg = strdup(log.str().c_str());
-            return;
-        }
-
-        (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
-        (*return_count) = (collapse_paths(return_tuples, paths));
-
-
-
-        *log_msg = strdup(log.str().c_str());
-        pgassert(!(*err_msg));
-        return;
-    } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        *log_msg = strdup(log.str().c_str());
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        *log_msg = strdup(log.str().c_str());
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-    } catch(...) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        *log_msg = strdup(log.str().c_str());
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(err.str().c_str());
-    }
-}
-
diff --git a/src/withPoints/src/one_to_many_withPoints_driver.h b/src/withPoints/src/one_to_many_withPoints_driver.h
deleted file mode 100644
index a92ffa0..0000000
--- a/src/withPoints/src/one_to_many_withPoints_driver.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: withPoints_driver.h
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_WITHPOINTS_SRC_ONE_TO_MANY_WITHPOINTS_DRIVER_H_
-#define SRC_WITHPOINTS_SRC_ONE_TO_MANY_WITHPOINTS_DRIVER_H_
-
-#pragma once
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    // CREATE OR REPLACE FUNCTION pgr_withPoint(
-    // edges_sql TEXT,
-    // points_sql TEXT,
-    // start_pid BIGINT,
-    // end_pid BIGINT,
-    // directed BOOLEAN DEFAULT true,
-    void do_pgr_one_to_many_withPoints(
-            pgr_edge_t *edges,
-            size_t total_edges,
-
-            Point_on_edge_t *points,
-            size_t total_points,
-
-            pgr_edge_t *edges_of_points,
-            size_t total_edges_of_points,
-
-            int64_t start_pid,
-
-            int64_t *end_pidsArr,
-            size_t size_end_pidsArr,
-
-            char driving_side,
-            bool details,
-            bool directed,
-            bool only_cost,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char ** log_msg,
-            char ** err_msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // SRC_WITHPOINTS_SRC_ONE_TO_MANY_WITHPOINTS_DRIVER_H_
diff --git a/src/withPoints/src/one_to_one_withPoints.c b/src/withPoints/src/one_to_one_withPoints.c
index d80836a..0f32926 100644
--- a/src/withPoints/src/one_to_one_withPoints.c
+++ b/src/withPoints/src/one_to_one_withPoints.c
@@ -27,30 +27,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
-#include "funcapi.h"
+#include "./../../common/src/postgres_connection.h"
 #include "utils/array.h"
-#include "catalog/pg_type.h"
-#if PGSQL_VERSION > 92
-#include "access/htup_details.h"
-#endif
-
 
-#include "fmgr.h"
+#include "./../../common/src/debug_macro.h"
+#include "./../../common/src/e_report.h"
+#include "./../../common/src/time_msg.h"
 #include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
 #include "./../../common/src/edges_input.h"
 #include "./../../common/src/points_input.h"
 #include "./get_new_queries.h"
-#include "./one_to_one_withPoints_driver.h"
-#include "./../../common/src/debug_macro.h"
-#include "./../../common/src/time_msg.h"
+#include "./many_to_many_withPoints_driver.h"
 
 PGDLLEXPORT Datum one_to_one_withPoints(PG_FUNCTION_ARGS);
+PG_FUNCTION_INFO_V1(one_to_one_withPoints);
 
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
 static
 void
 process(
@@ -64,12 +55,7 @@ process(
         bool only_cost,
         General_path_element_t **result_tuples,
         size_t *result_count) {
-    driving_side[0] = (char) tolower(driving_side[0]);
-    PGR_DBG("driving side:%c", driving_side[0]);
-    if (!((driving_side[0] == 'r')
-                 || (driving_side[0] == 'l'))) {
-        driving_side[0] = 'b';
-    }
+    driving_side[0] = estimate_drivingSide(driving_side[0]);
     PGR_DBG("estimated driving side:%c", driving_side[0]);
 
     pgr_SPI_connect();
@@ -79,13 +65,6 @@ process(
     size_t total_points = 0;
     pgr_get_points(points_sql, &points, &total_points);
 
-#ifndef NDEBUG
-    size_t i = 0;
-    for (i = 0; i < total_points; i ++) {
-       PGR_DBG("%ld\t%ld\t%f\t%c", points[i].pid, points[i].edge_id, points[i].fraction, points[i].side);
-    }
-#endif
-
     PGR_DBG(" -- change the query");
     char *edges_of_points_query = NULL;
     char *edges_no_points_query = NULL;
@@ -100,20 +79,10 @@ process(
     PGR_DBG("load the edges that match the points");
     pgr_edge_t *edges_of_points = NULL;
     size_t total_edges_of_points = 0;
-    pgr_get_edges(edges_of_points_query, &edges_of_points, &total_edges_of_points);
+    pgr_get_edges(
+            edges_of_points_query, &edges_of_points, &total_edges_of_points);
 
     PGR_DBG("Total %ld edges in query:", total_edges_of_points);
-#ifndef NDEBUG
-    for (i = 0; i < total_edges_of_points; i ++) {
-        PGR_DBG("%ld\t%ld\t%ld\t%f\t%f",
-                edges_of_points[i].id,
-                edges_of_points[i].source,
-                edges_of_points[i].target,
-                edges_of_points[i].cost,
-                edges_of_points[i].reverse_cost);
-    }
-#endif
-
 
 
     PGR_DBG("load the edges that don't match the points");
@@ -122,16 +91,6 @@ process(
     pgr_get_edges(edges_no_points_query, &edges, &total_edges);
 
     PGR_DBG("Total %ld edges in query:", total_edges);
-#ifndef NDEBUG
-    for (i = 0; i < total_edges; i ++) {
-        PGR_DBG("%ld\t%ld\t%ld\t%f\t%f",
-                edges[i].id,
-                edges[i].source,
-                edges[i].target,
-                edges[i].cost,
-                edges[i].reverse_cost);
-    }
-#endif
 
     PGR_DBG("freeing allocated memory not used anymore");
     free(edges_of_points_query);
@@ -139,65 +98,65 @@ process(
 
     if ((total_edges + total_edges_of_points) == 0) {
         PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
 
-    PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    char *log_msg = NULL;
+    PGR_DBG("Starting timer");
     clock_t start_t = clock();
-    do_pgr_withPoints(
-            edges,
-            total_edges,
-            points,
-            total_points,
-            edges_of_points,
-            total_edges_of_points,
-            start_pid,
-            end_pid,
-            directed,
+    char* log_msg = NULL;
+    char* notice_msg = NULL;
+    char* err_msg = NULL;
+    do_pgr_many_to_many_withPoints(
+            edges, total_edges,
+            points, total_points,
+            edges_of_points, total_edges_of_points,
+            &start_pid, 1,
+            &end_pid, 1,
             driving_side[0],
             details,
+            directed,
             only_cost,
-            result_tuples,
-            result_count,
+            true,
+            result_tuples, result_count,
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing withPoints one to one", start_t, clock());
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
-    if (log_msg) free(log_msg);
-
-    if (err_msg) {
-        if (*result_tuples) free(*result_tuples);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
+
+    if (only_cost) {
+        time_msg("processing pgr_withPointsCost(one to one)", start_t, clock());
+    } else {
+        time_msg("processing pgr_withPoints(one to one)", start_t, clock());
     }
-    pfree(edges);
+
+    if (err_msg && (*result_tuples)) {
+        pfree(*result_tuples);
+        (*result_count) = 0;
+        (*result_tuples) = NULL;
+    }
+
+    pgr_global_report(log_msg, notice_msg, err_msg);
+
+    if (log_msg) pfree(log_msg);
+    if (notice_msg) pfree(notice_msg);
+    if (err_msg) pfree(err_msg);
+    if (edges) pfree(edges);
+    if (points) pfree(points);
+    if (edges_of_points) pfree(edges_of_points);
+
     pgr_SPI_finish();
 }
 
-/*                                                                             */
-/*******************************************************************************/
 
-PG_FUNCTION_INFO_V1(one_to_one_withPoints);
 PGDLLEXPORT Datum
 one_to_one_withPoints(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t              call_cntr;
-    uint32_t               max_calls;
     TupleDesc            tuple_desc;
 
-    /*******************************************************************************/
-    /*                          MODIFY AS NEEDED                                   */
-    /*                                                                             */
+    /**********************************************************************/
     General_path_element_t *result_tuples = NULL;
     size_t result_count = 0;
-    /*                                                                             */
-    /*******************************************************************************/
+    /**********************************************************************/
 
     if (SRF_IS_FIRSTCALL()) {
         MemoryContext   oldcontext;
@@ -205,8 +164,7 @@ one_to_one_withPoints(PG_FUNCTION_ARGS) {
         oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // CREATE OR REPLACE FUNCTION pgr_withPoint(
         // edges_sql TEXT,
         // points_sql TEXT,
@@ -217,25 +175,27 @@ one_to_one_withPoints(PG_FUNCTION_ARGS) {
         // details BOOLEAN -- DEFAULT true,
         // only_cost BOOLEAN DEFAULT false,
 
-        PGR_DBG("Calling process");
-        PGR_DBG("initial driving side:%s", pgr_text2char(PG_GETARG_TEXT_P(5)));
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
-                pgr_text2char(PG_GETARG_TEXT_P(1)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(1)),
                 PG_GETARG_INT64(2),
                 PG_GETARG_INT64(3),
                 PG_GETARG_BOOL(4),
-                pgr_text2char(PG_GETARG_TEXT_P(5)),
+                text_to_cstring(PG_GETARG_TEXT_P(5)),
                 PG_GETARG_BOOL(6),
                 PG_GETARG_BOOL(7),
                 &result_tuples,
                 &result_count);
-        /*                                                                             */
-        /*******************************************************************************/
+        /**********************************************************************/
 
+#if PGSQL_VERSION > 95
+        funcctx->max_calls = result_count;
+#else
         funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -246,19 +206,16 @@ one_to_one_withPoints(PG_FUNCTION_ARGS) {
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = (uint32_t)funcctx->call_cntr;
-    max_calls = (uint32_t)funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (General_path_element_t*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool    *        nulls;
 
-        /*******************************************************************************/
-        /*                          MODIFY AS NEEDED                                   */
+        /**********************************************************************/
         // OUT seq BIGINT,
         // OUT path_seq,
         // OUT node BIGINT,
@@ -275,23 +232,19 @@ one_to_one_withPoints(PG_FUNCTION_ARGS) {
             nulls[i] = false;
         }
 
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
 
-        // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[4] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[5] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*******************************************************************************/
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
-
         SRF_RETURN_DONE(funcctx);
     }
 }
diff --git a/src/withPoints/src/one_to_one_withPoints_driver.cpp b/src/withPoints/src/one_to_one_withPoints_driver.cpp
deleted file mode 100644
index 6c2e8dc..0000000
--- a/src/withPoints/src/one_to_one_withPoints_driver.cpp
+++ /dev/null
@@ -1,191 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: withPoints_driver.cpp
-
-Generated with Template by:
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-
-#include <sstream>
-#include <deque>
-#include <vector>
-#include "./pgr_dijkstra.hpp"
-#include "./pgr_withPoints.hpp"
-#include "./one_to_one_withPoints_driver.h"
-
-
-#include "./../../common/src/basic_vertex.h"
-#include "./../../common/src/pgr_alloc.hpp"
-#include "./../../common/src/pgr_assert.h"
-
-
-// CREATE OR REPLACE FUNCTION pgr_withPoint(
-// edges_sql TEXT,
-// points_sql TEXT,
-// start_pid BIGINT,
-// end_pid BIGINT,
-// directed BOOLEAN DEFAULT true
-
-
-void
-do_pgr_withPoints(
-        pgr_edge_t *edges, size_t total_edges,
-        Point_on_edge_t *points_p, size_t total_points,
-        pgr_edge_t *edges_of_points, size_t total_edges_of_points,
-        int64_t start_pid,
-        int64_t end_pid,
-        bool directed,
-        char driving_side,
-        bool details,
-        bool only_cost,
-        General_path_element_t **return_tuples,
-        size_t *return_count,
-        char ** log_msg,
-        char ** err_msg) {
-    std::ostringstream log;
-    std::ostringstream err;
-    try {
-        pgassert(!(*return_tuples));
-        pgassert((*return_count) == 0);
-        pgassert(!(*log_msg));
-        pgassert(!(*err_msg));
-
-        log << "ntering do_pgr_withPoints\n";
-        std::vector< Point_on_edge_t >
-            points(points_p, points_p + total_points);
-
-        log << "total points" << points.size() << "\n";
-
-        /*
-         * This test is easier in C++
-         */
-        int errcode = check_points(points, log);
-        if (errcode) {
-            *log_msg = strdup(log.str().c_str());
-            err << "Unexpected point(s) with same pid but different edge/fraction/side combination found.";
-            *err_msg = strdup(err.str().c_str());
-            return;
-        }
-
-        std::vector< pgr_edge_t >
-            edges_to_modify(edges_of_points, edges_of_points + total_edges_of_points);
-
-        std::vector< pgr_edge_t > new_edges;
-        log << "start_pid" << start_pid << "\n";
-        log << "end_pid" << end_pid << "\n";
-        log << "driving_side" << driving_side << "\n";
-        create_new_edges(
-                points,
-                edges_to_modify,
-                driving_side,
-                new_edges,
-                log);
-
-        int64_t start_vid(start_pid);
-        int64_t end_vid(end_pid);
-
-        log << "start_vid" << start_vid << "\n";
-        log << "end_vid" << end_vid << "\n";
-        graphType gType = directed? DIRECTED: UNDIRECTED;
-
-        Path path;
-
-        auto vertices(pgrouting::extract_vertices(edges, total_edges));
-        vertices = pgrouting::extract_vertices(vertices, new_edges);
-
-        log << "extracted vertices: ";
-        for (const auto v : vertices) {
-            log << v.id << ", ";
-        }
-        log << "\n";
-
-        if (directed) {
-            log << "Working with directed Graph\n";
-
-            pgrouting::DirectedGraph digraph(vertices, gType);
-            digraph.graph_insert_data(edges, total_edges);
-            digraph.graph_insert_data(new_edges);
-
-
-            pgr_dijkstra(digraph, path, start_vid, end_vid, only_cost);
-        } else {
-            log << "Working with Undirected Graph\n";
-
-            pgrouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(edges, total_edges);
-            undigraph.graph_insert_data(new_edges);
-
-            pgr_dijkstra(undigraph, path, start_vid, end_vid, only_cost);
-        }
-
-
-        size_t count(path.size());
-        if (count == 0) {
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *log_msg = strdup(log.str().c_str());
-            err <<
-                "No paths found between Starting and any of the Ending vertices\n";
-            *log_msg = strdup(err.str().c_str());
-            return;
-        }
-
-        if (!details) {
-            eliminate_details(path, edges_to_modify);
-        }
-
-        (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        size_t sequence = 0;
-        path.generate_postgres_data(return_tuples, sequence);
-        (*return_count) = sequence;
-
-        *log_msg = strdup(log.str().c_str());
-        pgassert(!*err_msg);
-    } catch (AssertFailedException &except) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        *log_msg = strdup(log.str().c_str());
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-    } catch (std::exception& except) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        *log_msg = strdup(log.str().c_str());
-        err << except.what() << "\n";
-        *err_msg = strdup(err.str().c_str());
-    } catch(...) {
-        if (*return_tuples) free(*return_tuples);
-        (*return_count) = 0;
-        *log_msg = strdup(log.str().c_str());
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(err.str().c_str());
-    }
-}
diff --git a/src/withPoints/src/one_to_one_withPoints_driver.h b/src/withPoints/src/one_to_one_withPoints_driver.h
deleted file mode 100644
index 2b63600..0000000
--- a/src/withPoints/src/one_to_one_withPoints_driver.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*PGR-GNU*****************************************************************
-File: withPoints_driver.h
-
-Copyright (c) 2015 pgRouting developers
-Mail: project at pgrouting.org
-
-Function's developer:
-Copyright (c) 2015 Celia Virginia Vergara Castillo
-Mail:
-
-------
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-********************************************************************PGR-GNU*/
-
-#ifndef SRC_WITHPOINTS_SRC_ONE_TO_ONE_WITHPOINTS_DRIVER_H_
-#define SRC_WITHPOINTS_SRC_ONE_TO_ONE_WITHPOINTS_DRIVER_H_
-#pragma once
-
-#include "./../../common/src/pgr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-    // CREATE OR REPLACE FUNCTION pgr_withPoint(
-    // edges_sql TEXT,
-    // points_sql TEXT,
-    // start_pid BIGINT,
-    // end_pid BIGINT,
-    // directed BOOLEAN DEFAULT true,
-    void do_pgr_withPoints(
-            pgr_edge_t *edges, size_t total_edges,
-            Point_on_edge_t *points, size_t total_points,
-            pgr_edge_t *edges_of_points, size_t total_edges_of_points,
-            int64_t start_pid,
-            int64_t end_pid,
-            bool directed,
-            char driving_side,
-            bool details,
-            bool only_cost,
-            General_path_element_t **return_tuples,
-            size_t *return_count,
-            char ** log_msg,
-            char ** err_msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  //  SRC_WITHPOINTS_SRC_ONE_TO_ONE_WITHPOINTS_DRIVER_H_
diff --git a/src/withPoints/src/pgr_withPoints.cpp b/src/withPoints/src/pgr_withPoints.cpp
index b33c416..bb814fd 100644
--- a/src/withPoints/src/pgr_withPoints.cpp
+++ b/src/withPoints/src/pgr_withPoints.cpp
@@ -28,23 +28,34 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 ********************************************************************PGR-GNU*/
 
 
-#if defined(__MINGW32__) ||  defined(_MSC_VER)
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
+#include "./pgr_withPoints.hpp"
 
 #include <sstream>
 #include <deque>
 #include <set>
 #include <vector>
+#include <string>
 #include <algorithm>
 #include <cassert>
-#include "./pgr_withPoints.hpp"
-#include "./msg_logger.hpp"
 
+#include "./../../common/src/pgr_assert.h"
 #include "./../../common/src/pgr_types.h"
 
+static
+void
+PGR_LOG_POINTS(
+        std::ostringstream &log,
+        const std::vector< Point_on_edge_t > &points,
+        const std::string &title) {
+    log << title << "\n";
+    for (const auto &p : points) {
+        log << p.pid << "\t"
+            << p.edge_id << "\t"
+            << p.fraction << "\t"
+            << p.side << "\n";
+    }
+}
+
 /*
  * 0 = success
  * non 0 = error code
@@ -58,7 +69,7 @@ int check_points(std::vector< Point_on_edge_t > &points,
      */
     std::sort(points.begin(), points.end(),
             [](const Point_on_edge_t &a, const Point_on_edge_t &b)
-           -> bool {
+            -> bool {
             if (a.pid != b.pid) return a.pid < b.pid;
             if (a.edge_id != b.edge_id) return a.edge_id < b.edge_id;
             if (a.fraction != b.fraction) return a.fraction < b.fraction;
@@ -103,8 +114,8 @@ eliminate_details_dd(
     Path newPath(path.start_id(), path.end_id());
     for (const auto &pathstop : path) {
         if ((pathstop.node == path.start_id())
-                 || (pathstop.node == path.end_id())
-                 || (pathstop.node > 0)) {
+                || (pathstop.node == path.end_id())
+                || (pathstop.node > 0)) {
             newPath.push_back(pathstop);
         }
     }
@@ -126,8 +137,8 @@ eliminate_details(
     double cost = 0.0;
     for (const auto &pathstop : path) {
         if ((pathstop.node == path.start_id())
-                 || (pathstop.node == path.end_id())
-                 || (pathstop.node > 0)) {
+                || (pathstop.node == path.end_id())
+                || (pathstop.node > 0)) {
             newPath.push_back(pathstop);
             if (pathstop.node != path.end_id()) cost = 0.0;
             continue;
@@ -208,8 +219,10 @@ adjust_pids(
 
 
 struct pointCompare {
-    bool operator() (const Point_on_edge_t& lhs, const Point_on_edge_t& rhs) const
-    { return lhs.fraction < rhs.fraction? true : lhs.pid < rhs.pid;}
+    bool operator() (
+            const Point_on_edge_t& lhs,
+            const Point_on_edge_t& rhs) const
+    {return lhs.fraction < rhs.fraction? true : lhs.pid < rhs.pid;}
 };
 
 bool
@@ -256,7 +269,8 @@ create_new_edges(
             }
         }
         if (points_on_edge.empty()) {
-            log << "For some reason we didn't find a point belonging to the edge, must be an error\n";
+            log << "For some reason didn't find a point belonging to the edge"
+                << ", must be an error\n";
             return false;
         }
 #if 0
@@ -275,7 +289,8 @@ create_new_edges(
         double agg_rcost = 0;
         double last_cost = 0;
         double last_rcost = 0;
-        std::vector< Point_on_edge_t> the_points(points_on_edge.begin(), points_on_edge.end());
+        std::vector<Point_on_edge_t> the_points(
+                points_on_edge.begin(), points_on_edge.end());
 
         for (auto &point : the_points) {
             /* the point either has
@@ -289,15 +304,16 @@ create_new_edges(
                 << "/t" << point.fraction
                 << "\t" << point.side << "\n";
             if (point.fraction <= 0 ||  point.fraction >= 1) {
-                log << "For some reason an invalid fraction was accepted, must be an error\n";
+                log << "For some reason an invalid fraction was accepted,"
+                    << " must be an error\n";
                 return false;
             }
             if (point.fraction == 0) {
-                log << "vertex_id of the point is the source" << edge.source << "\n";
+                log << "Point's vertex_id = source" << edge.source << "\n";
                 point.vertex_id = edge.source;
             }
             if (point.fraction == 1) {
-                log << "vertex_id of the point is the target" << edge.target << "\n";
+                log << "point's vertex_id = target" << edge.target << "\n";
                 point.vertex_id = edge.target;
             }
             if (point.fraction > 0 &&  point.fraction < 1) {
@@ -310,18 +326,27 @@ create_new_edges(
             double deltaFraction = point.fraction - prev_fraction;
             double deltarFraction = point.fraction - prev_rfraction;
             if ((edge.cost < 0 ||  edge.reverse_cost < 0)
-                     || driving_side == 'b'
-                     || point.side == 'b') {
-                log << "Edge is one way or driving side is both or point side is both\n";
-                log << "Edge is one way: " << (edge.cost < 0 ||  edge.reverse_cost < 0) << "\n";
+                    || driving_side == 'b'
+                    || point.side == 'b') {
+                log << "Edge is one way "
+                    << " or driving side is both or point side is both\n";
+                log << "Edge is one way: "
+                    << (edge.cost < 0 || edge.reverse_cost < 0)
+                    << "\n";
                 log << "driving side: " << driving_side << "\n";
                 log << "point side: " << point.side << "\n";
                 if (point.fraction > 0 &&  point.fraction < 1) {
                     if (edge.cost >= 0) {
                         last_cost = deltaFraction * edge.cost;
-                        pgr_edge_t new_edge = {edge.id , prev_target, point.vertex_id, last_cost, -1};
+                        pgr_edge_t new_edge = {
+                            edge.id,
+                            prev_target,
+                            point.vertex_id,
+                            last_cost,
+                            -1};
                         new_edges.push_back(new_edge);
-                        log << "new_edge: (id, source, target, cost, reverse_cost) = ("
+                        log << "new_edge("
+                            << "id, source, target, cost, reverse_cost) = ("
                             << new_edge.id << "\t"
                             << new_edge.source << "\t"
                             << new_edge.target << "\t"
@@ -330,9 +355,15 @@ create_new_edges(
                     }
                     if (edge.reverse_cost >= 0) {
                         last_rcost = deltarFraction * edge.reverse_cost;
-                        pgr_edge_t new_edge = {edge.id , prev_target, point.vertex_id, -1, last_rcost};
+                        pgr_edge_t new_edge = {
+                            edge.id,
+                            prev_target,
+                            point.vertex_id,
+                            -1,
+                            last_rcost};
                         new_edges.push_back(new_edge);
-                        log << "new_edge: (id, source, target, cost, reverse_cost) = ("
+                        log << "new_edge("
+                            << "id, source, target, cost, reverse_cost) = ("
                             << new_edge.id << "\t"
                             << new_edge.source << "\t"
                             << new_edge.target << "\t"
@@ -350,17 +381,19 @@ create_new_edges(
                 continue;
             }
 
-            assert(edge.cost > 0 &&  edge.reverse_cost > 0);
-            assert(point.side != 'b');
+            pgassert(edge.cost > 0 &&  edge.reverse_cost > 0);
+            pgassert(point.side != 'b');
 
             if (driving_side == point.side) {
-                log << "two way and driving side is == than the side of the point\n";
-                log << "Breaking (source, target) edge only when its not the extreme of the segment\n";
+                log << "two way and driving side == the side of the point\n";
+                log << "Breaking (source, target) when its not the extreme\n";
                 if (point.fraction > 0 &&  point.fraction < 1) {
                     last_cost = deltaFraction * edge.cost;
-                    pgr_edge_t new_edge = {edge.id , prev_target, point.vertex_id, last_cost, -1};
+                    pgr_edge_t new_edge = {
+                        edge.id, prev_target, point.vertex_id, last_cost, -1};
                     new_edges.push_back(new_edge);
-                    log << "new_edge: (id, source, target, cost, reverse_cost) = ("
+                    log << "new_edge("
+                        << "id, source, target, cost, reverse_cost) = ("
                         << new_edge.id << "\t"
                         << new_edge.source << "\t"
                         << new_edge.target << "\t"
@@ -373,7 +406,7 @@ create_new_edges(
                 continue;
             }
 
-            log << "two way and driving side is != than the side of the point\n";
+            log << "\ntwo way and driving side != the side of the point";
             if (point.fraction > 0 &&  point.fraction < 1) {
                 last_rcost = deltarFraction * edge.reverse_cost;
                 pgr_edge_t new_edge = {
@@ -383,7 +416,7 @@ create_new_edges(
                     -1,
                     last_rcost};
                 new_edges.push_back(new_edge);
-                log << "new_edge: (id, source, target, cost, reverse_cost) = ("
+                log << "\nnew_edge(id, source, target, cost, reverse_cost) = ("
                     << new_edge.id << "\t"
                     << new_edge.source << "\t"
                     << new_edge.target << "\t"
diff --git a/src/withPoints/src/pgr_withPoints.hpp b/src/withPoints/src/pgr_withPoints.hpp
index 260a5a7..986c87e 100644
--- a/src/withPoints/src/pgr_withPoints.hpp
+++ b/src/withPoints/src/pgr_withPoints.hpp
@@ -26,6 +26,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
+#ifndef SRC_WITHPOINTS_SRC_PGR_WITHPOINTS_HPP_
+#define SRC_WITHPOINTS_SRC_PGR_WITHPOINTS_HPP_
 #pragma once
 #include <vector>
 
@@ -33,8 +35,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #include "./../../common/src/basePath_SSEC.hpp"
 
 int
-check_points(std::vector< Point_on_edge_t > &points,
-                std::ostringstream &log);
+check_points(
+        std::vector< Point_on_edge_t > &points,
+        std::ostringstream &log);
 
 void
 eliminate_details_dd(
@@ -65,3 +68,5 @@ create_new_edges(
         char driving_side,
         std::vector< pgr_edge_t > &new_edges,
         std::ostringstream &log);
+
+#endif  // SRC_WITHPOINTS_SRC_PGR_WITHPOINTS_HPP_
diff --git a/src/withPoints/test/doc-pgr_withPoints.test.sql b/src/withPoints/test/doc-pgr_withPoints.test.sql
index e263fed..b7af800 100644
--- a/src/withPoints/test/doc-pgr_withPoints.test.sql
+++ b/src/withPoints/test/doc-pgr_withPoints.test.sql
@@ -1,75 +1,71 @@
 
-BEGIN;
 
-    \echo --e1
-    SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -3);
-    \echo --e2
-    SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3,
-        details := true);
-    \echo --e3
-    SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, ARRAY[-3,5]);
-    \echo --e4
-    SELECT * FROM pgr_withPoints(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], -3);
-    \echo --e5
-    SELECT * FROM pgr_withPoints(
+\echo --e1
+SELECT * FROM pgr_withPoints(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -3);
+\echo --e2
+SELECT * FROM pgr_withPoints(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3,
+    details := true);
+\echo --e3
+SELECT * FROM pgr_withPoints(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, ARRAY[-3,5]);
+\echo --e4
+SELECT * FROM pgr_withPoints(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], -3);
+\echo --e5
+SELECT * FROM pgr_withPoints(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7]);
+
+\echo --q2
+SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:')::TEXT AS path_at,
+        CASE WHEN edge = -1 THEN ' visits'
+            ELSE ' passes in front of'
+        END as status,
+        CASE WHEN node < 0 THEN 'Point'
+            ELSE 'Vertex'
+        END as is_a,
+        abs(node) as id
+    FROM pgr_withPoints(
         'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
         'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7]);
-
-    \echo --q2
-    SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:')::TEXT AS path_at,
-            CASE WHEN edge = -1 THEN ' visits'
-                ELSE ' passes in front of'
-            END as status,
-            CASE WHEN node < 0 THEN 'Point'
-                ELSE 'Vertex'
-            END as is_a,
-            abs(node) as id
-        FROM pgr_withPoints(
-            'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-            'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-            ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
-            driving_side := 'r',
-            details := true)
-        WHERE node IN (-6,6);
-    \echo --q3
-    SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:')::TEXT AS path_at,
-            CASE WHEN edge = -1 THEN ' visits'
-                ELSE ' passes in front of'
-            END as status,
-            CASE WHEN node < 0 THEN 'Point'
-                ELSE 'Vertex'
-            END as is_a,
-            abs(node) as id
-        FROM pgr_withPoints(
-            'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-            'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-            ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
-            driving_side := 'l',
-            details := true)
-        WHERE node IN (-6,6);
-    \echo --q4
-    SELECT * FROM pgr_withPoints(
+        ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
+        driving_side := 'r',
+        details := true)
+    WHERE node IN (-6,6);
+\echo --q3
+SELECT ('(' || start_pid || ' => ' || end_pid ||') at ' || path_seq || 'th step:')::TEXT AS path_at,
+        CASE WHEN edge = -1 THEN ' visits'
+            ELSE ' passes in front of'
+        END as status,
+        CASE WHEN node < 0 THEN 'Point'
+            ELSE 'Vertex'
+        END as is_a,
+        abs(node) as id
+    FROM pgr_withPoints(
         'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
         'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        directed := false,
-        details := true);
-    \echo --q5
-
-
-    ROLLBACK;
+        ARRAY[1,-1], ARRAY[-2,-3,-6,3,6],
+        driving_side := 'l',
+        details := true)
+    WHERE node IN (-6,6);
+\echo --q4
+SELECT * FROM pgr_withPoints(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    directed := false,
+    details := true);
+\echo --q5
 
 
diff --git a/src/withPoints/test/doc-pgr_withPointsCost.test.sql b/src/withPoints/test/doc-pgr_withPointsCost.test.sql
index f01defa..16b0661 100644
--- a/src/withPoints/test/doc-pgr_withPointsCost.test.sql
+++ b/src/withPoints/test/doc-pgr_withPointsCost.test.sql
@@ -1,55 +1,47 @@
 
-BEGIN;
-
-    \echo --e1
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -3);
-    \echo --e2
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3,
-        directed := false);
-    \echo --e3
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, ARRAY[-3,5]);
-    \echo --e4
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], -3);
-    \echo --e5
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7]);
-
-    \echo --q2
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        driving_side := 'l');
-    \echo --q3
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        driving_side := 'r');
-    \echo --q4
-    SELECT * FROM pgr_withPointsCost(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[-1,2], ARRAY[-3,7],
-        driving_side := 'b');
-    \echo --q5
-
-
-
-    ROLLBACK;
-
-
+\echo --e1
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -3);
+\echo --e2
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3,
+    directed := false);
+\echo --e3
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, ARRAY[-3,5]);
+\echo --e4
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], -3);
+\echo --e5
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7]);
+
+\echo --q2
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    driving_side := 'l');
+\echo --q3
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    driving_side := 'r');
+\echo --q4
+SELECT * FROM pgr_withPointsCost(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[-1,2], ARRAY[-3,7],
+    driving_side := 'b');
+\echo --q5
diff --git a/src/withPoints/test/doc-pgr_withPointsDD.test.sql b/src/withPoints/test/doc-pgr_withPointsDD.test.sql
index c633207..326587e 100644
--- a/src/withPoints/test/doc-pgr_withPointsDD.test.sql
+++ b/src/withPoints/test/doc-pgr_withPointsDD.test.sql
@@ -1,36 +1,29 @@
 
-BEGIN;
-
-    \echo --q1
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8);
-    \echo --q2
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8,
-        driving_side := 'r',
-        details := true);
-    \echo --q3
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8,
-        driving_side := 'l',
-        details := true);
-    \echo --q4
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 3.8,
-        driving_side := 'b',
-        details := true);
-    \echo --q5
-
-
-
-    ROLLBACK;
-
 
+\echo --q1
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8);
+\echo --q2
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8,
+    driving_side := 'r',
+    details := true);
+\echo --q3
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8,
+    driving_side := 'l',
+    details := true);
+\echo --q4
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 3.8,
+    driving_side := 'b',
+    details := true);
+\echo --q5
diff --git a/src/withPoints/test/doc-pgr_withPointsKSP.result b/src/withPoints/test/doc-pgr_withPointsKSP-cygwin.result
similarity index 97%
copy from src/withPoints/test/doc-pgr_withPointsKSP.result
copy to src/withPoints/test/doc-pgr_withPointsKSP-cygwin.result
index 0fd3968..7b92f64 100644
--- a/src/withPoints/test/doc-pgr_withPointsKSP.result
+++ b/src/withPoints/test/doc-pgr_withPointsKSP-cygwin.result
@@ -35,7 +35,7 @@
 3|1|3|-6|4|0.3|1.3
 4|1|4|5|8|1|1.6
 5|1|5|6|11|1|2.6
-6|1|6|11|13|1|3.6
+6|1|6|9|13|1|3.6
 7|1|7|12|15|0.6|4.6
 8|1|8|-2|-1|0|5.2
 9|2|1|-1|1|0.6|0
@@ -43,7 +43,7 @@
 11|2|3|-6|4|0.3|1.3
 12|2|4|5|8|1|1.6
 13|2|5|6|9|1|2.6
-14|2|6|9|15|1|3.6
+14|2|6|11|15|1|3.6
 15|2|7|12|15|0.6|4.6
 16|2|8|-2|-1|0|5.2
 --q4
diff --git a/src/withPoints/test/doc-pgr_withPointsKSP-cygwin.test.sql b/src/withPoints/test/doc-pgr_withPointsKSP-cygwin.test.sql
new file mode 100644
index 0000000..69ad292
--- /dev/null
+++ b/src/withPoints/test/doc-pgr_withPointsKSP-cygwin.test.sql
@@ -0,0 +1,26 @@
+
+
+\echo --q1
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2);
+\echo --q2
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 6, 2, details := true);
+\echo --q3
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2,
+    driving_side := 'l', details := true);
+\echo --q4
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2,
+    heap_paths := true, driving_side := 'r', details := true);
+\echo --q5
+
diff --git a/src/withPoints/test/doc-pgr_withPointsKSP.result b/src/withPoints/test/doc-pgr_withPointsKSP.result
index 0fd3968..d956f34 100644
--- a/src/withPoints/test/doc-pgr_withPointsKSP.result
+++ b/src/withPoints/test/doc-pgr_withPointsKSP.result
@@ -34,16 +34,16 @@
 2|1|2|2|4|0.7|0.6
 3|1|3|-6|4|0.3|1.3
 4|1|4|5|8|1|1.6
-5|1|5|6|11|1|2.6
-6|1|6|11|13|1|3.6
+5|1|5|6|9|1|2.6
+6|1|6|9|15|1|3.6
 7|1|7|12|15|0.6|4.6
 8|1|8|-2|-1|0|5.2
 9|2|1|-1|1|0.6|0
 10|2|2|2|4|0.7|0.6
 11|2|3|-6|4|0.3|1.3
 12|2|4|5|8|1|1.6
-13|2|5|6|9|1|2.6
-14|2|6|9|15|1|3.6
+13|2|5|6|11|1|2.6
+14|2|6|11|13|1|3.6
 15|2|7|12|15|0.6|4.6
 16|2|8|-2|-1|0|5.2
 --q4
diff --git a/src/withPoints/test/doc-pgr_withPointsKSP.test.sql b/src/withPoints/test/doc-pgr_withPointsKSP.test.sql
index fae7642..69ad292 100644
--- a/src/withPoints/test/doc-pgr_withPointsKSP.test.sql
+++ b/src/withPoints/test/doc-pgr_withPointsKSP.test.sql
@@ -1,32 +1,26 @@
 
-BEGIN;
-
-    \echo --q1
-    SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -2, 2);
-    \echo --q2
-    SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, 6, 2, details := true);
-    \echo --q3
-    SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -2, 2,
-        driving_side := 'l', details := true);
-    \echo --q4
-    SELECT * FROM pgr_withPointsKSP(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        -1, -2, 2,
-        heap_paths := true, driving_side := 'r', details := true);
-    \echo --q5
-
-
-
-    ROLLBACK;
 
+\echo --q1
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2);
+\echo --q2
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, 6, 2, details := true);
+\echo --q3
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2,
+    driving_side := 'l', details := true);
+\echo --q4
+SELECT * FROM pgr_withPointsKSP(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    -1, -2, 2,
+    heap_paths := true, driving_side := 'r', details := true);
+\echo --q5
 
diff --git a/src/withPoints/test/doc-pgr_withPointsVia.test.sql b/src/withPoints/test/doc-pgr_withPointsVia.test.sql
index f7823d3..5b2dfc6 100644
--- a/src/withPoints/test/doc-pgr_withPointsVia.test.sql
+++ b/src/withPoints/test/doc-pgr_withPointsVia.test.sql
@@ -1,36 +1,30 @@
 
-BEGIN;
-
-    \echo --q1
-    SELECT * FROM pgr_withPointsVia(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        ARRAY[1,3,5]);
-    \echo --q2
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        3, 3.0,
-        driving_side := 'r',
-        details := true);
-    \echo --q3
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        3, 3.0,
-        driving_side := 'l',
-        details := true);
-    \echo --q4
-    SELECT * FROM pgr_withPointsDD(
-        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
-        'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-        3, 3.0,
-        driving_side := 'b',
-        details := true);
-    \echo --q5
-
-
-
-    ROLLBACK;
 
+\echo --q1
+SELECT * FROM pgr_withPointsVia(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    ARRAY[1,3,5]);
+\echo --q2
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    3, 3.0,
+    driving_side := 'r',
+    details := true);
+\echo --q3
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    3, 3.0,
+    driving_side := 'l',
+    details := true);
+\echo --q4
+SELECT * FROM pgr_withPointsDD(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
+    'SELECT pid, edge_id, fraction, side from pointsOfInterest',
+    3, 3.0,
+    driving_side := 'b',
+    details := true);
+\echo --q5
 
diff --git a/src/withPoints/test/pgtap/many_to_one_eq_one_to_one_withPoint.test.sql b/src/withPoints/test/pgtap/many_to_one_eq_one_to_one_withPoint.test.sql
index 61cd393..1078de3 100644
--- a/src/withPoints/test/pgtap/many_to_one_eq_one_to_one_withPoint.test.sql
+++ b/src/withPoints/test/pgtap/many_to_one_eq_one_to_one_withPoint.test.sql
@@ -6,7 +6,7 @@ SELECT PLAN(7);
 
 
 PREPARE q1 AS
-SELECT  path_seq, node, agg_cost FROM pgr_withPoints(
+SELECT  path_seq, node, agg_cost::text FROM pgr_withPoints(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     ARRAY[-1], -5, 
@@ -15,7 +15,7 @@ SELECT  path_seq, node, agg_cost FROM pgr_withPoints(
     details := true);
 
 PREPARE q2 AS
-SELECT path_seq, node, agg_cost FROM pgr_withPoints(
+SELECT path_seq, node, agg_cost::text FROM pgr_withPoints(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     -1, -5, 
@@ -26,7 +26,7 @@ SELECT path_seq, node, agg_cost FROM pgr_withPoints(
 SELECT set_eq('q1', 'q2', '1: Right: from point ARRAY[-1] to -5 same as one to one');
 
 PREPARE q3 AS
-SELECT path_seq, node, agg_cost FROM pgr_withPoints(
+SELECT path_seq, node, agg_cost::text FROM pgr_withPoints(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     ARRAY[-4], -5, 
@@ -35,7 +35,7 @@ SELECT path_seq, node, agg_cost FROM pgr_withPoints(
     details := true);
 
 PREPARE q4 AS
-SELECT path_seq, node, agg_cost FROM pgr_withPoints(
+SELECT path_seq, node, agg_cost::text FROM pgr_withPoints(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     -4, -5, 
@@ -46,7 +46,7 @@ SELECT path_seq, node, agg_cost FROM pgr_withPoints(
 SELECT set_eq('q3','q4','2: Right: from ARRAY[-4] to -5 same as one to one');
 
 PREPARE q5 AS
-SELECT path_seq, node, agg_cost FROM pgr_withPoints(
+SELECT path_seq, node, agg_cost::text FROM pgr_withPoints(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     ARRAY[-1, -4], -5,
@@ -62,7 +62,7 @@ SELECT set_has('q5', 'q4', '6: Right: from point ARRAY[-1,-4] to -5 has results
 
 
 PREPARE q9 AS
-SELECT  -1 AS start_vid, -5 AS end_vid,  agg_cost FROM pgr_withPoints(
+SELECT  -1 AS start_vid, -5 AS end_vid,  agg_cost::text FROM pgr_withPoints(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     ARRAY[-1], -5,
@@ -72,7 +72,7 @@ SELECT  -1 AS start_vid, -5 AS end_vid,  agg_cost FROM pgr_withPoints(
 
 
 PREPARE q10 AS
-SELECT *  FROM pgr_withPointsCost(
+SELECT start_pid, end_pid, agg_cost::text  FROM pgr_withPointsCost(
     'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
     'SELECT pid, edge_id, fraction, side from pointsOfInterest',
     -1, -5,
diff --git a/src/withPoints/test/test.conf b/src/withPoints/test/test.conf
index 8c22bbd..b1aa9a4 100644
--- a/src/withPoints/test/test.conf
+++ b/src/withPoints/test/test.conf
@@ -7,24 +7,24 @@
         'tests' => [qw(
             doc-pgr_withPoints
             doc-pgr_withPointsCost
-            doc-pgr_withPointsKSP
             doc-pgr_withPointsDD
             )],
         'documentation' => [qw(
             doc-pgr_withPoints
             doc-pgr_withPointsCost
-            doc-pgr_withPointsKSP
             doc-pgr_withPointsDD
+            doc-pgr_withPointsKSP
+            )],
+        'linux' => [qw(
+            doc-pgr_withPointsKSP
+            )],
+        'cygwin' => [qw(
+            doc-pgr_withPointsKSP-cygwin
             )],
         'not on 2.2' => [qw(
             doc-pgr_withPointsVia
             )],
     },
-# I don't know what this are for or how to use them.
-#  TODO ask Steve 
-#    'vpg-vpgis' => {}, # for version specific tests
-#    '8-1' => {},       # for pg 8.x and postgis 1.x
-#    '9.2-2.1' => {},   # for pg 9.2 and postgis 2.1
 );
 
 1;
diff --git a/tools/build-extension-update-files b/tools/build-extension-update-files.pl
similarity index 94%
rename from tools/build-extension-update-files
rename to tools/build-extension-update-files.pl
index cce3a1c..6d95b23 100755
--- a/tools/build-extension-update-files
+++ b/tools/build-extension-update-files.pl
@@ -84,6 +84,7 @@ File::Find::find({wanted => \&wanted}, $sig_dir);
 
 # foreach old files
 for my $old_file ( sort @old_files ) {
+    print "\ngenerating $old_file upgrade file\n" if $DEBUG; 
     # read and parse the .sig
     my $old_hash = read_sig_file( $old_file );
     # and generate and write the update script file
@@ -149,33 +150,6 @@ sub generate_upgrade_script {
     my $n_ver = $new->{VERSION};
     my $o_ver = $old->{VERSION};
 
-    # analyze types
-
-    my $ntype = $new->{types};
-    my $otype = $old->{types};
-
-    # create a hash like <name> => <column_list> for new types
-    my %ntype_h = ();
-    for my $x (@{$ntype}) {
-        $x =~ m/(\w+)(\([^\)]+\))$/;
-        $ntype_h{lc($1)} = lc($2);
-    }
-
-    # check if old type exists with different column types
-    for my $x (@{$otype}) {
-        $x =~ m/(\w+)(\([^\)]+\))$/;
-        my $name = lc($1);
-        my $cols = lc($2);
-        if ($ntype_h{$name}) {
-            if ($ntype_h{$name} ne $cols) {
-                warn "WARNING: old type '$name$cols' changed to '$name$ntype_h{$name}' !\n";
-                $err = 1;
-            }
-            else {
-                push @types2remove, $name;
-            }
-        }
-    }
 
 
     # analyze function sigs
@@ -207,6 +181,30 @@ sub generate_upgrade_script {
         push @commands, "DROP FUNCTION IF EXISTS $x;\n";
     }
 
+    # analyze types
+
+    my $ntype = $new->{types};
+    my $otype = $old->{types};
+
+    # create a hash like <name> => <column_list> for new types
+    my %ntype_h = ();
+    for my $x (@{$ntype}) {
+        #$x =~ m/(\w+)(\([^\)]+\))$/;
+        $ntype_h{lc($x)} = lc($x);
+    }
+
+    # check if old type exists with different column types
+    for my $x (@{$otype}) {
+        my $name = lc($x);
+        if (!exists $ntype_h{$name}) {
+            #types no longer used are droped form the extension
+            push @commands, "ALTER EXTENSION pgrouting DROP TYPE $name;\n";
+            push @commands, "DROP TYPE $name;\n";
+        } else {
+            push @types2remove, $name;
+        }
+    }
+
     # UGH! someone change the definition of the TYPE or reused an existing
     # TYPE name which is VERY BAD because other poeple might be dependent
     # on the old TYPE so we can DROP TYPE <type> CASCADE; or we might drop
diff --git a/tools/clean/clean.sh b/tools/clean/clean.sh
index adbf83d..c9567eb 100644
--- a/tools/clean/clean.sh
+++ b/tools/clean/clean.sh
@@ -17,7 +17,7 @@ EXTENSION=$1
 
 echo $EXTENSION
 # remove trailing spaces
-perl -pi -e 's/\s\+$//' *.$EXTENSION
+perl -pi -e 's/\s+$//' *.$EXTENSION
 
 # " )" -> ")"
 perl -pi -e 's/\s\+\)/)/g' *.$EXTENSION
diff --git a/tools/cpplint.py b/tools/cpplint.py
deleted file mode 100755
index 756dafb..0000000
--- a/tools/cpplint.py
+++ /dev/null
@@ -1,6321 +0,0 @@
-#Copyright (c) 2009 Google Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#    * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#    * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Does google-lint on c++ files.
-
-The goal of this script is to identify places in the code that *may*
-be in non-compliance with google style.  It does not attempt to fix
-up these problems -- the point is to educate.  It does also not
-attempt to find all problems, or to ensure that everything it does
-find is legitimately a problem.
-
-In particular, we can get very confused by /* and // inside strings!
-We do a small hack, which is to ignore //'s with "'s after them on the
-same line, but it is far from perfect (in either direction).
-"""
-
-import codecs
-import copy
-import getopt
-import math  # for log
-import os
-import re
-import sre_compile
-import string
-import sys
-import unicodedata
-
-
-_USAGE = """
-Syntax: cpplint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
-                   [--counting=total|toplevel|detailed] [--root=subdir]
-                   [--linelength=digits]
-        <file> [file] ...
-
-  The style guidelines this tries to follow are those in
-    http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
-
-  Every problem is given a confidence score from 1-5, with 5 meaning we are
-  certain of the problem, and 1 meaning it could be a legitimate construct.
-  This will miss some errors, and is not a substitute for a code review.
-
-  To suppress false-positive errors of a certain category, add a
-  'NOLINT(category)' comment to the line.  NOLINT or NOLINT(*)
-  suppresses errors of all categories on that line.
-
-  The files passed in will be linted; at least one file must be provided.
-  Default linted extensions are .cc, .cpp, .cu, .cuh and .h.  Change the
-  extensions with the --extensions flag.
-
-  Flags:
-
-    output=vs7
-      By default, the output is formatted to ease emacs parsing.  Visual Studio
-      compatible output (vs7) may also be used.  Other formats are unsupported.
-
-    verbose=#
-      Specify a number 0-5 to restrict errors to certain verbosity levels.
-
-    filter=-x,+y,...
-      Specify a comma-separated list of category-filters to apply: only
-      error messages whose category names pass the filters will be printed.
-      (Category names are printed with the message and look like
-      "[whitespace/indent]".)  Filters are evaluated left to right.
-      "-FOO" and "FOO" means "do not print categories that start with FOO".
-      "+FOO" means "do print categories that start with FOO".
-
-      Examples: --filter=-whitespace,+whitespace/braces
-                --filter=whitespace,runtime/printf,+runtime/printf_format
-                --filter=-,+build/include_what_you_use
-
-      To see a list of all the categories used in cpplint, pass no arg:
-         --filter=
-
-    counting=total|toplevel|detailed
-      The total number of errors found is always printed. If
-      'toplevel' is provided, then the count of errors in each of
-      the top-level categories like 'build' and 'whitespace' will
-      also be printed. If 'detailed' is provided, then a count
-      is provided for each category like 'build/class'.
-
-    root=subdir
-      The root directory used for deriving header guard CPP variable.
-      By default, the header guard CPP variable is calculated as the relative
-      path to the directory that contains .git, .hg, or .svn.  When this flag
-      is specified, the relative path is calculated from the specified
-      directory. If the specified directory does not exist, this flag is
-      ignored.
-
-      Examples:
-        Assuming that src/.git exists, the header guard CPP variables for
-        src/chrome/browser/ui/browser.h are:
-
-        No flag => CHROME_BROWSER_UI_BROWSER_H_
-        --root=chrome => BROWSER_UI_BROWSER_H_
-        --root=chrome/browser => UI_BROWSER_H_
-
-    linelength=digits
-      This is the allowed line length for the project. The default value is
-      80 characters.
-
-      Examples:
-        --linelength=120
-
-    extensions=extension,extension,...
-      The allowed file extensions that cpplint will check
-
-      Examples:
-        --extensions=hpp,cpp
-
-    cpplint.py supports per-directory configurations specified in CPPLINT.cfg
-    files. CPPLINT.cfg file can contain a number of key=value pairs.
-    Currently the following options are supported:
-
-      set noparent
-      filter=+filter1,-filter2,...
-      exclude_files=regex
-      linelength=80
-
-    "set noparent" option prevents cpplint from traversing directory tree
-    upwards looking for more .cfg files in parent directories. This option
-    is usually placed in the top-level project directory.
-
-    The "filter" option is similar in function to --filter flag. It specifies
-    message filters in addition to the |_DEFAULT_FILTERS| and those specified
-    through --filter command-line flag.
-
-    "exclude_files" allows to specify a regular expression to be matched against
-    a file name. If the expression matches, the file is skipped and not run
-    through liner.
-
-    "linelength" allows to specify the allowed line length for the project.
-
-    CPPLINT.cfg has an effect on files in the same directory and all
-    sub-directories, unless overridden by a nested configuration file.
-
-      Example file:
-        filter=-build/include_order,+build/include_alpha
-        exclude_files=.*\.cc
-
-    The above example disables build/include_order warning and enables
-    build/include_alpha as well as excludes all .cc from being
-    processed by linter, in the current directory (where the .cfg
-    file is located) and all sub-directories.
-"""
-
-# We categorize each error message we print.  Here are the categories.
-# We want an explicit list so we can list them all in cpplint --filter=.
-# If you add a new error message with a new category, add it to the list
-# here!  cpplint_unittest.py should tell you if you forget to do this.
-_ERROR_CATEGORIES = [
-    'build/class',
-    'build/c++11',
-    'build/deprecated',
-    'build/endif_comment',
-    'build/explicit_make_pair',
-    'build/forward_decl',
-    'build/header_guard',
-    'build/include',
-    'build/include_alpha',
-    'build/include_order',
-    'build/include_what_you_use',
-    'build/namespaces',
-    'build/printf_format',
-    'build/storage_class',
-    'legal/copyright',
-    'readability/alt_tokens',
-    'readability/braces',
-    'readability/casting',
-    'readability/check',
-    'readability/constructors',
-    'readability/fn_size',
-    'readability/function',
-    'readability/inheritance',
-    'readability/multiline_comment',
-    'readability/multiline_string',
-    'readability/namespace',
-    'readability/nolint',
-    'readability/nul',
-    'readability/strings',
-    'readability/todo',
-    'readability/utf8',
-    'runtime/arrays',
-    'runtime/casting',
-    'runtime/explicit',
-    'runtime/int',
-    'runtime/init',
-    'runtime/invalid_increment',
-    'runtime/member_string_references',
-    'runtime/memset',
-    'runtime/indentation_namespace',
-    'runtime/operator',
-    'runtime/printf',
-    'runtime/printf_format',
-    'runtime/references',
-    'runtime/string',
-    'runtime/threadsafe_fn',
-    'runtime/vlog',
-    'whitespace/blank_line',
-    'whitespace/braces',
-    'whitespace/comma',
-    'whitespace/comments',
-    'whitespace/empty_conditional_body',
-    'whitespace/empty_loop_body',
-    'whitespace/end_of_line',
-    'whitespace/ending_newline',
-    'whitespace/forcolon',
-    'whitespace/indent',
-    'whitespace/line_length',
-    'whitespace/newline',
-    'whitespace/operators',
-    'whitespace/parens',
-    'whitespace/semicolon',
-    'whitespace/tab',
-    'whitespace/todo',
-    ]
-
-# These error categories are no longer enforced by cpplint, but for backwards-
-# compatibility they may still appear in NOLINT comments.
-_LEGACY_ERROR_CATEGORIES = [
-    'readability/streams',
-    ]
-
-# The default state of the category filter. This is overridden by the --filter=
-# flag. By default all errors are on, so only add here categories that should be
-# off by default (i.e., categories that must be enabled by the --filter= flags).
-# All entries here should start with a '-' or '+', as in the --filter= flag.
-_DEFAULT_FILTERS = ['-build/include_alpha']
-
-# We used to check for high-bit characters, but after much discussion we
-# decided those were OK, as long as they were in UTF-8 and didn't represent
-# hard-coded international strings, which belong in a separate i18n file.
-
-# C++ headers
-_CPP_HEADERS = frozenset([
-    # Legacy
-    'algobase.h',
-    'algo.h',
-    'alloc.h',
-    'builtinbuf.h',
-    'bvector.h',
-    'complex.h',
-    'defalloc.h',
-    'deque.h',
-    'editbuf.h',
-    'fstream.h',
-    'function.h',
-    'hash_map',
-    'hash_map.h',
-    'hash_set',
-    'hash_set.h',
-    'hashtable.h',
-    'heap.h',
-    'indstream.h',
-    'iomanip.h',
-    'iostream.h',
-    'istream.h',
-    'iterator.h',
-    'list.h',
-    'map.h',
-    'multimap.h',
-    'multiset.h',
-    'ostream.h',
-    'pair.h',
-    'parsestream.h',
-    'pfstream.h',
-    'procbuf.h',
-    'pthread_alloc',
-    'pthread_alloc.h',
-    'rope',
-    'rope.h',
-    'ropeimpl.h',
-    'set.h',
-    'slist',
-    'slist.h',
-    'stack.h',
-    'stdiostream.h',
-    'stl_alloc.h',
-    'stl_relops.h',
-    'streambuf.h',
-    'stream.h',
-    'strfile.h',
-    'strstream.h',
-    'tempbuf.h',
-    'tree.h',
-    'type_traits.h',
-    'vector.h',
-    # 17.6.1.2 C++ library headers
-    'algorithm',
-    'array',
-    'atomic',
-    'bitset',
-    'chrono',
-    'codecvt',
-    'complex',
-    'condition_variable',
-    'deque',
-    'exception',
-    'forward_list',
-    'fstream',
-    'functional',
-    'future',
-    'initializer_list',
-    'iomanip',
-    'ios',
-    'iosfwd',
-    'iostream',
-    'istream',
-    'iterator',
-    'limits',
-    'list',
-    'locale',
-    'map',
-    'memory',
-    'mutex',
-    'new',
-    'numeric',
-    'ostream',
-    'queue',
-    'random',
-    'ratio',
-    'regex',
-    'set',
-    'sstream',
-    'stack',
-    'stdexcept',
-    'streambuf',
-    'string',
-    'strstream',
-    'system_error',
-    'thread',
-    'tuple',
-    'typeindex',
-    'typeinfo',
-    'type_traits',
-    'unordered_map',
-    'unordered_set',
-    'utility',
-    'valarray',
-    'vector',
-    # 17.6.1.2 C++ headers for C library facilities
-    'cassert',
-    'ccomplex',
-    'cctype',
-    'cerrno',
-    'cfenv',
-    'cfloat',
-    'cinttypes',
-    'ciso646',
-    'climits',
-    'clocale',
-    'cmath',
-    'csetjmp',
-    'csignal',
-    'cstdalign',
-    'cstdarg',
-    'cstdbool',
-    'cstddef',
-    'cstdint',
-    'cstdio',
-    'cstdlib',
-    'cstring',
-    'ctgmath',
-    'ctime',
-    'cuchar',
-    'cwchar',
-    'cwctype',
-    ])
-
-
-# These headers are excluded from [build/include] and [build/include_order]
-# checks:
-# - Anything not following google file name conventions (containing an
-#   uppercase character, such as Python.h or nsStringAPI.h, for example).
-# - Lua headers.
-_THIRD_PARTY_HEADERS_PATTERN = re.compile(
-    r'^(?:[^/]*[A-Z][^/]*\.h|lua\.h|lauxlib\.h|lualib\.h)$')
-
-
-# Assertion macros.  These are defined in base/logging.h and
-# testing/base/gunit.h.  Note that the _M versions need to come first
-# for substring matching to work.
-_CHECK_MACROS = [
-    'DCHECK', 'CHECK',
-    'EXPECT_TRUE_M', 'EXPECT_TRUE',
-    'ASSERT_TRUE_M', 'ASSERT_TRUE',
-    'EXPECT_FALSE_M', 'EXPECT_FALSE',
-    'ASSERT_FALSE_M', 'ASSERT_FALSE',
-    ]
-
-# Replacement macros for CHECK/DCHECK/EXPECT_TRUE/EXPECT_FALSE
-_CHECK_REPLACEMENT = dict([(m, {}) for m in _CHECK_MACROS])
-
-for op, replacement in [('==', 'EQ'), ('!=', 'NE'),
-                        ('>=', 'GE'), ('>', 'GT'),
-                        ('<=', 'LE'), ('<', 'LT')]:
-  _CHECK_REPLACEMENT['DCHECK'][op] = 'DCHECK_%s' % replacement
-  _CHECK_REPLACEMENT['CHECK'][op] = 'CHECK_%s' % replacement
-  _CHECK_REPLACEMENT['EXPECT_TRUE'][op] = 'EXPECT_%s' % replacement
-  _CHECK_REPLACEMENT['ASSERT_TRUE'][op] = 'ASSERT_%s' % replacement
-  _CHECK_REPLACEMENT['EXPECT_TRUE_M'][op] = 'EXPECT_%s_M' % replacement
-  _CHECK_REPLACEMENT['ASSERT_TRUE_M'][op] = 'ASSERT_%s_M' % replacement
-
-for op, inv_replacement in [('==', 'NE'), ('!=', 'EQ'),
-                            ('>=', 'LT'), ('>', 'LE'),
-                            ('<=', 'GT'), ('<', 'GE')]:
-  _CHECK_REPLACEMENT['EXPECT_FALSE'][op] = 'EXPECT_%s' % inv_replacement
-  _CHECK_REPLACEMENT['ASSERT_FALSE'][op] = 'ASSERT_%s' % inv_replacement
-  _CHECK_REPLACEMENT['EXPECT_FALSE_M'][op] = 'EXPECT_%s_M' % inv_replacement
-  _CHECK_REPLACEMENT['ASSERT_FALSE_M'][op] = 'ASSERT_%s_M' % inv_replacement
-
-# Alternative tokens and their replacements.  For full list, see section 2.5
-# Alternative tokens [lex.digraph] in the C++ standard.
-#
-# Digraphs (such as '%:') are not included here since it's a mess to
-# match those on a word boundary.
-_ALT_TOKEN_REPLACEMENT = {
-    'and': '&&',
-    'bitor': '|',
-    'or': '||',
-    'xor': '^',
-    'compl': '~',
-    'bitand': '&',
-    'and_eq': '&=',
-    'or_eq': '|=',
-    'xor_eq': '^=',
-    'not': '!',
-    'not_eq': '!='
-    }
-
-# Compile regular expression that matches all the above keywords.  The "[ =()]"
-# bit is meant to avoid matching these keywords outside of boolean expressions.
-#
-# False positives include C-style multi-line comments and multi-line strings
-# but those have always been troublesome for cpplint.
-_ALT_TOKEN_REPLACEMENT_PATTERN = re.compile(
-    r'[ =()](' + ('|'.join(_ALT_TOKEN_REPLACEMENT.keys())) + r')(?=[ (]|$)')
-
-
-# These constants define types of headers for use with
-# _IncludeState.CheckNextIncludeOrder().
-_C_SYS_HEADER = 1
-_CPP_SYS_HEADER = 2
-_LIKELY_MY_HEADER = 3
-_POSSIBLE_MY_HEADER = 4
-_OTHER_HEADER = 5
-
-# These constants define the current inline assembly state
-_NO_ASM = 0       # Outside of inline assembly block
-_INSIDE_ASM = 1   # Inside inline assembly block
-_END_ASM = 2      # Last line of inline assembly block
-_BLOCK_ASM = 3    # The whole block is an inline assembly block
-
-# Match start of assembly blocks
-_MATCH_ASM = re.compile(r'^\s*(?:asm|_asm|__asm|__asm__)'
-                        r'(?:\s+(volatile|__volatile__))?'
-                        r'\s*[{(]')
-
-
-_regexp_compile_cache = {}
-
-# {str, set(int)}: a map from error categories to sets of linenumbers
-# on which those errors are expected and should be suppressed.
-_error_suppressions = {}
-
-# The root directory used for deriving header guard CPP variable.
-# This is set by --root flag.
-_root = None
-
-# The allowed line length of files.
-# This is set by --linelength flag.
-_line_length = 80
-
-# The allowed extensions for file names
-# This is set by --extensions flag.
-_valid_extensions = set(['cc', 'h', 'cpp', 'cu', 'cuh', 'c', 'hpp'])
-
-def ParseNolintSuppressions(filename, raw_line, linenum, error):
-  """Updates the global list of error-suppressions.
-
-  Parses any NOLINT comments on the current line, updating the global
-  error_suppressions store.  Reports an error if the NOLINT comment
-  was malformed.
-
-  Args:
-    filename: str, the name of the input file.
-    raw_line: str, the line of input text, with comments.
-    linenum: int, the number of the current line.
-    error: function, an error handler.
-  """
-  matched = Search(r'\bNOLINT(NEXTLINE)?\b(\([^)]+\))?', raw_line)
-  if matched:
-    if matched.group(1):
-      suppressed_line = linenum + 1
-    else:
-      suppressed_line = linenum
-    category = matched.group(2)
-    if category in (None, '(*)'):  # => "suppress all"
-      _error_suppressions.setdefault(None, set()).add(suppressed_line)
-    else:
-      if category.startswith('(') and category.endswith(')'):
-        category = category[1:-1]
-        if category in _ERROR_CATEGORIES:
-          _error_suppressions.setdefault(category, set()).add(suppressed_line)
-        elif category not in _LEGACY_ERROR_CATEGORIES:
-          error(filename, linenum, 'readability/nolint', 5,
-                'Unknown NOLINT error category: %s' % category)
-
-
-def ResetNolintSuppressions():
-  """Resets the set of NOLINT suppressions to empty."""
-  _error_suppressions.clear()
-
-
-def IsErrorSuppressedByNolint(category, linenum):
-  """Returns true if the specified error category is suppressed on this line.
-
-  Consults the global error_suppressions map populated by
-  ParseNolintSuppressions/ResetNolintSuppressions.
-
-  Args:
-    category: str, the category of the error.
-    linenum: int, the current line number.
-  Returns:
-    bool, True iff the error should be suppressed due to a NOLINT comment.
-  """
-  return (linenum in _error_suppressions.get(category, set()) or
-          linenum in _error_suppressions.get(None, set()))
-
-
-def Match(pattern, s):
-  """Matches the string with the pattern, caching the compiled regexp."""
-  # The regexp compilation caching is inlined in both Match and Search for
-  # performance reasons; factoring it out into a separate function turns out
-  # to be noticeably expensive.
-  if pattern not in _regexp_compile_cache:
-    _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
-  return _regexp_compile_cache[pattern].match(s)
-
-
-def ReplaceAll(pattern, rep, s):
-  """Replaces instances of pattern in a string with a replacement.
-
-  The compiled regex is kept in a cache shared by Match and Search.
-
-  Args:
-    pattern: regex pattern
-    rep: replacement text
-    s: search string
-
-  Returns:
-    string with replacements made (or original string if no replacements)
-  """
-  if pattern not in _regexp_compile_cache:
-    _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
-  return _regexp_compile_cache[pattern].sub(rep, s)
-
-
-def Search(pattern, s):
-  """Searches the string for the pattern, caching the compiled regexp."""
-  if pattern not in _regexp_compile_cache:
-    _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
-  return _regexp_compile_cache[pattern].search(s)
-
-
-class _IncludeState(object):
-  """Tracks line numbers for includes, and the order in which includes appear.
-
-  include_list contains list of lists of (header, line number) pairs.
-  It's a lists of lists rather than just one flat list to make it
-  easier to update across preprocessor boundaries.
-
-  Call CheckNextIncludeOrder() once for each header in the file, passing
-  in the type constants defined above. Calls in an illegal order will
-  raise an _IncludeError with an appropriate error message.
-
-  """
-  # self._section will move monotonically through this set. If it ever
-  # needs to move backwards, CheckNextIncludeOrder will raise an error.
-  _INITIAL_SECTION = 0
-  _MY_H_SECTION = 1
-  _C_SECTION = 2
-  _CPP_SECTION = 3
-  _OTHER_H_SECTION = 4
-
-  _TYPE_NAMES = {
-      _C_SYS_HEADER: 'C system header',
-      _CPP_SYS_HEADER: 'C++ system header',
-      _LIKELY_MY_HEADER: 'header this file implements',
-      _POSSIBLE_MY_HEADER: 'header this file may implement',
-      _OTHER_HEADER: 'other header',
-      }
-  _SECTION_NAMES = {
-      _INITIAL_SECTION: "... nothing. (This can't be an error.)",
-      _MY_H_SECTION: 'a header this file implements',
-      _C_SECTION: 'C system header',
-      _CPP_SECTION: 'C++ system header',
-      _OTHER_H_SECTION: 'other header',
-      }
-
-  def __init__(self):
-    self.include_list = [[]]
-    self.ResetSection('')
-
-  def FindHeader(self, header):
-    """Check if a header has already been included.
-
-    Args:
-      header: header to check.
-    Returns:
-      Line number of previous occurrence, or -1 if the header has not
-      been seen before.
-    """
-    for section_list in self.include_list:
-      for f in section_list:
-        if f[0] == header:
-          return f[1]
-    return -1
-
-  def ResetSection(self, directive):
-    """Reset section checking for preprocessor directive.
-
-    Args:
-      directive: preprocessor directive (e.g. "if", "else").
-    """
-    # The name of the current section.
-    self._section = self._INITIAL_SECTION
-    # The path of last found header.
-    self._last_header = ''
-
-    # Update list of includes.  Note that we never pop from the
-    # include list.
-    if directive in ('if', 'ifdef', 'ifndef'):
-      self.include_list.append([])
-    elif directive in ('else', 'elif'):
-      self.include_list[-1] = []
-
-  def SetLastHeader(self, header_path):
-    self._last_header = header_path
-
-  def CanonicalizeAlphabeticalOrder(self, header_path):
-    """Returns a path canonicalized for alphabetical comparison.
-
-    - replaces "-" with "_" so they both cmp the same.
-    - removes '-inl' since we don't require them to be after the main header.
-    - lowercase everything, just in case.
-
-    Args:
-      header_path: Path to be canonicalized.
-
-    Returns:
-      Canonicalized path.
-    """
-    return header_path.replace('-inl.h', '.h').replace('-', '_').lower()
-
-  def IsInAlphabeticalOrder(self, clean_lines, linenum, header_path):
-    """Check if a header is in alphabetical order with the previous header.
-
-    Args:
-      clean_lines: A CleansedLines instance containing the file.
-      linenum: The number of the line to check.
-      header_path: Canonicalized header to be checked.
-
-    Returns:
-      Returns true if the header is in alphabetical order.
-    """
-    # If previous section is different from current section, _last_header will
-    # be reset to empty string, so it's always less than current header.
-    #
-    # If previous line was a blank line, assume that the headers are
-    # intentionally sorted the way they are.
-    if (self._last_header > header_path and
-        Match(r'^\s*#\s*include\b', clean_lines.elided[linenum - 1])):
-      return False
-    return True
-
-  def CheckNextIncludeOrder(self, header_type):
-    """Returns a non-empty error message if the next header is out of order.
-
-    This function also updates the internal state to be ready to check
-    the next include.
-
-    Args:
-      header_type: One of the _XXX_HEADER constants defined above.
-
-    Returns:
-      The empty string if the header is in the right order, or an
-      error message describing what's wrong.
-
-    """
-    error_message = ('Found %s after %s' %
-                     (self._TYPE_NAMES[header_type],
-                      self._SECTION_NAMES[self._section]))
-
-    last_section = self._section
-
-    if header_type == _C_SYS_HEADER:
-      if self._section <= self._C_SECTION:
-        self._section = self._C_SECTION
-      else:
-        self._last_header = ''
-        return error_message
-    elif header_type == _CPP_SYS_HEADER:
-      if self._section <= self._CPP_SECTION:
-        self._section = self._CPP_SECTION
-      else:
-        self._last_header = ''
-        return error_message
-    elif header_type == _LIKELY_MY_HEADER:
-      if self._section <= self._MY_H_SECTION:
-        self._section = self._MY_H_SECTION
-      else:
-        self._section = self._OTHER_H_SECTION
-    elif header_type == _POSSIBLE_MY_HEADER:
-      if self._section <= self._MY_H_SECTION:
-        self._section = self._MY_H_SECTION
-      else:
-        # This will always be the fallback because we're not sure
-        # enough that the header is associated with this file.
-        self._section = self._OTHER_H_SECTION
-    else:
-      assert header_type == _OTHER_HEADER
-      self._section = self._OTHER_H_SECTION
-
-    if last_section != self._section:
-      self._last_header = ''
-
-    return ''
-
-
-class _CppLintState(object):
-  """Maintains module-wide state.."""
-
-  def __init__(self):
-    self.verbose_level = 1  # global setting.
-    self.error_count = 0    # global count of reported errors
-    # filters to apply when emitting error messages
-    self.filters = _DEFAULT_FILTERS[:]
-    # backup of filter list. Used to restore the state after each file.
-    self._filters_backup = self.filters[:]
-    self.counting = 'total'  # In what way are we counting errors?
-    self.errors_by_category = {}  # string to int dict storing error counts
-
-    # output format:
-    # "emacs" - format that emacs can parse (default)
-    # "vs7" - format that Microsoft Visual Studio 7 can parse
-    self.output_format = 'emacs'
-
-  def SetOutputFormat(self, output_format):
-    """Sets the output format for errors."""
-    self.output_format = output_format
-
-  def SetVerboseLevel(self, level):
-    """Sets the module's verbosity, and returns the previous setting."""
-    last_verbose_level = self.verbose_level
-    self.verbose_level = level
-    return last_verbose_level
-
-  def SetCountingStyle(self, counting_style):
-    """Sets the module's counting options."""
-    self.counting = counting_style
-
-  def SetFilters(self, filters):
-    """Sets the error-message filters.
-
-    These filters are applied when deciding whether to emit a given
-    error message.
-
-    Args:
-      filters: A string of comma-separated filters (eg "+whitespace/indent").
-               Each filter should start with + or -; else we die.
-
-    Raises:
-      ValueError: The comma-separated filters did not all start with '+' or '-'.
-                  E.g. "-,+whitespace,-whitespace/indent,whitespace/badfilter"
-    """
-    # Default filters always have less priority than the flag ones.
-    self.filters = _DEFAULT_FILTERS[:]
-    self.AddFilters(filters)
-
-  def AddFilters(self, filters):
-    """ Adds more filters to the existing list of error-message filters. """
-    for filt in filters.split(','):
-      clean_filt = filt.strip()
-      if clean_filt:
-        self.filters.append(clean_filt)
-    for filt in self.filters:
-      if not (filt.startswith('+') or filt.startswith('-')):
-        raise ValueError('Every filter in --filters must start with + or -'
-                         ' (%s does not)' % filt)
-
-  def BackupFilters(self):
-    """ Saves the current filter list to backup storage."""
-    self._filters_backup = self.filters[:]
-
-  def RestoreFilters(self):
-    """ Restores filters previously backed up."""
-    self.filters = self._filters_backup[:]
-
-  def ResetErrorCounts(self):
-    """Sets the module's error statistic back to zero."""
-    self.error_count = 0
-    self.errors_by_category = {}
-
-  def IncrementErrorCount(self, category):
-    """Bumps the module's error statistic."""
-    self.error_count += 1
-    if self.counting in ('toplevel', 'detailed'):
-      if self.counting != 'detailed':
-        category = category.split('/')[0]
-      if category not in self.errors_by_category:
-        self.errors_by_category[category] = 0
-      self.errors_by_category[category] += 1
-
-  def PrintErrorCounts(self):
-    """Print a summary of errors by category, and the total."""
-    for category, count in self.errors_by_category.iteritems():
-      sys.stderr.write('Category \'%s\' errors found: %d\n' %
-                       (category, count))
-    sys.stderr.write('Total errors found: %d\n' % self.error_count)
-
-_cpplint_state = _CppLintState()
-
-
-def _OutputFormat():
-  """Gets the module's output format."""
-  return _cpplint_state.output_format
-
-
-def _SetOutputFormat(output_format):
-  """Sets the module's output format."""
-  _cpplint_state.SetOutputFormat(output_format)
-
-
-def _VerboseLevel():
-  """Returns the module's verbosity setting."""
-  return _cpplint_state.verbose_level
-
-
-def _SetVerboseLevel(level):
-  """Sets the module's verbosity, and returns the previous setting."""
-  return _cpplint_state.SetVerboseLevel(level)
-
-
-def _SetCountingStyle(level):
-  """Sets the module's counting options."""
-  _cpplint_state.SetCountingStyle(level)
-
-
-def _Filters():
-  """Returns the module's list of output filters, as a list."""
-  return _cpplint_state.filters
-
-
-def _SetFilters(filters):
-  """Sets the module's error-message filters.
-
-  These filters are applied when deciding whether to emit a given
-  error message.
-
-  Args:
-    filters: A string of comma-separated filters (eg "whitespace/indent").
-             Each filter should start with + or -; else we die.
-  """
-  _cpplint_state.SetFilters(filters)
-
-def _AddFilters(filters):
-  """Adds more filter overrides.
-
-  Unlike _SetFilters, this function does not reset the current list of filters
-  available.
-
-  Args:
-    filters: A string of comma-separated filters (eg "whitespace/indent").
-             Each filter should start with + or -; else we die.
-  """
-  _cpplint_state.AddFilters(filters)
-
-def _BackupFilters():
-  """ Saves the current filter list to backup storage."""
-  _cpplint_state.BackupFilters()
-
-def _RestoreFilters():
-  """ Restores filters previously backed up."""
-  _cpplint_state.RestoreFilters()
-
-class _FunctionState(object):
-  """Tracks current function name and the number of lines in its body."""
-
-  _NORMAL_TRIGGER = 250  # for --v=0, 500 for --v=1, etc.
-  _TEST_TRIGGER = 400    # about 50% more than _NORMAL_TRIGGER.
-
-  def __init__(self):
-    self.in_a_function = False
-    self.lines_in_function = 0
-    self.current_function = ''
-
-  def Begin(self, function_name):
-    """Start analyzing function body.
-
-    Args:
-      function_name: The name of the function being tracked.
-    """
-    self.in_a_function = True
-    self.lines_in_function = 0
-    self.current_function = function_name
-
-  def Count(self):
-    """Count line in current function body."""
-    if self.in_a_function:
-      self.lines_in_function += 1
-
-  def Check(self, error, filename, linenum):
-    """Report if too many lines in function body.
-
-    Args:
-      error: The function to call with any errors found.
-      filename: The name of the current file.
-      linenum: The number of the line to check.
-    """
-    if Match(r'T(EST|est)', self.current_function):
-      base_trigger = self._TEST_TRIGGER
-    else:
-      base_trigger = self._NORMAL_TRIGGER
-    trigger = base_trigger * 2**_VerboseLevel()
-
-    if self.lines_in_function > trigger:
-      error_level = int(math.log(self.lines_in_function / base_trigger, 2))
-      # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ...
-      if error_level > 5:
-        error_level = 5
-      error(filename, linenum, 'readability/fn_size', error_level,
-            'Small and focused functions are preferred:'
-            ' %s has %d non-comment lines'
-            ' (error triggered by exceeding %d lines).'  % (
-                self.current_function, self.lines_in_function, trigger))
-
-  def End(self):
-    """Stop analyzing function body."""
-    self.in_a_function = False
-
-
-class _IncludeError(Exception):
-  """Indicates a problem with the include order in a file."""
-  pass
-
-
-class FileInfo(object):
-  """Provides utility functions for filenames.
-
-  FileInfo provides easy access to the components of a file's path
-  relative to the project root.
-  """
-
-  def __init__(self, filename):
-    self._filename = filename
-
-  def FullName(self):
-    """Make Windows paths like Unix."""
-    return os.path.abspath(self._filename).replace('\\', '/')
-
-  def RepositoryName(self):
-    """FullName after removing the local path to the repository.
-
-    If we have a real absolute path name here we can try to do something smart:
-    detecting the root of the checkout and truncating /path/to/checkout from
-    the name so that we get header guards that don't include things like
-    "C:\Documents and Settings\..." or "/home/username/..." in them and thus
-    people on different computers who have checked the source out to different
-    locations won't see bogus errors.
-    """
-    fullname = self.FullName()
-
-    if os.path.exists(fullname):
-      project_dir = os.path.dirname(fullname)
-
-      if os.path.exists(os.path.join(project_dir, ".svn")):
-        # If there's a .svn file in the current directory, we recursively look
-        # up the directory tree for the top of the SVN checkout
-        root_dir = project_dir
-        one_up_dir = os.path.dirname(root_dir)
-        while os.path.exists(os.path.join(one_up_dir, ".svn")):
-          root_dir = os.path.dirname(root_dir)
-          one_up_dir = os.path.dirname(one_up_dir)
-
-        prefix = os.path.commonprefix([root_dir, project_dir])
-        return fullname[len(prefix) + 1:]
-
-      # Not SVN <= 1.6? Try to find a git, hg, or svn top level directory by
-      # searching up from the current path.
-      root_dir = os.path.dirname(fullname)
-      while (root_dir != os.path.dirname(root_dir) and
-             not os.path.exists(os.path.join(root_dir, ".git")) and
-             not os.path.exists(os.path.join(root_dir, ".hg")) and
-             not os.path.exists(os.path.join(root_dir, ".svn"))):
-        root_dir = os.path.dirname(root_dir)
-
-      if (os.path.exists(os.path.join(root_dir, ".git")) or
-          os.path.exists(os.path.join(root_dir, ".hg")) or
-          os.path.exists(os.path.join(root_dir, ".svn"))):
-        prefix = os.path.commonprefix([root_dir, project_dir])
-        return fullname[len(prefix) + 1:]
-
-    # Don't know what to do; header guard warnings may be wrong...
-    return fullname
-
-  def Split(self):
-    """Splits the file into the directory, basename, and extension.
-
-    For 'chrome/browser/browser.cc', Split() would
-    return ('chrome/browser', 'browser', '.cc')
-
-    Returns:
-      A tuple of (directory, basename, extension).
-    """
-
-    googlename = self.RepositoryName()
-    project, rest = os.path.split(googlename)
-    return (project,) + os.path.splitext(rest)
-
-  def BaseName(self):
-    """File base name - text after the final slash, before the final period."""
-    return self.Split()[1]
-
-  def Extension(self):
-    """File extension - text following the final period."""
-    return self.Split()[2]
-
-  def NoExtension(self):
-    """File has no source file extension."""
-    return '/'.join(self.Split()[0:2])
-
-  def IsSource(self):
-    """File has a source file extension."""
-    return self.Extension()[1:] in ('c', 'cc', 'cpp', 'cxx')
-
-
-def _ShouldPrintError(category, confidence, linenum):
-  """If confidence >= verbose, category passes filter and is not suppressed."""
-
-  # There are three ways we might decide not to print an error message:
-  # a "NOLINT(category)" comment appears in the source,
-  # the verbosity level isn't high enough, or the filters filter it out.
-  if IsErrorSuppressedByNolint(category, linenum):
-    return False
-
-  if confidence < _cpplint_state.verbose_level:
-    return False
-
-  is_filtered = False
-  for one_filter in _Filters():
-    if one_filter.startswith('-'):
-      if category.startswith(one_filter[1:]):
-        is_filtered = True
-    elif one_filter.startswith('+'):
-      if category.startswith(one_filter[1:]):
-        is_filtered = False
-    else:
-      assert False  # should have been checked for in SetFilter.
-  if is_filtered:
-    return False
-
-  return True
-
-
-def Error(filename, linenum, category, confidence, message):
-  """Logs the fact we've found a lint error.
-
-  We log where the error was found, and also our confidence in the error,
-  that is, how certain we are this is a legitimate style regression, and
-  not a misidentification or a use that's sometimes justified.
-
-  False positives can be suppressed by the use of
-  "cpplint(category)"  comments on the offending line.  These are
-  parsed into _error_suppressions.
-
-  Args:
-    filename: The name of the file containing the error.
-    linenum: The number of the line containing the error.
-    category: A string used to describe the "category" this bug
-      falls under: "whitespace", say, or "runtime".  Categories
-      may have a hierarchy separated by slashes: "whitespace/indent".
-    confidence: A number from 1-5 representing a confidence score for
-      the error, with 5 meaning that we are certain of the problem,
-      and 1 meaning that it could be a legitimate construct.
-    message: The error message.
-  """
-  if _ShouldPrintError(category, confidence, linenum):
-    _cpplint_state.IncrementErrorCount(category)
-    if _cpplint_state.output_format == 'vs7':
-      sys.stderr.write('%s(%s):  %s  [%s] [%d]\n' % (
-          filename, linenum, message, category, confidence))
-    elif _cpplint_state.output_format == 'eclipse':
-      sys.stderr.write('%s:%s: warning: %s  [%s] [%d]\n' % (
-          filename, linenum, message, category, confidence))
-    else:
-      sys.stderr.write('%s:%s:  %s  [%s] [%d]\n' % (
-          filename, linenum, message, category, confidence))
-
-
-# Matches standard C++ escape sequences per 2.13.2.3 of the C++ standard.
-_RE_PATTERN_CLEANSE_LINE_ESCAPES = re.compile(
-    r'\\([abfnrtv?"\\\']|\d+|x[0-9a-fA-F]+)')
-# Match a single C style comment on the same line.
-_RE_PATTERN_C_COMMENTS = r'/\*(?:[^*]|\*(?!/))*\*/'
-# Matches multi-line C style comments.
-# This RE is a little bit more complicated than one might expect, because we
-# have to take care of space removals tools so we can handle comments inside
-# statements better.
-# The current rule is: We only clear spaces from both sides when we're at the
-# end of the line. Otherwise, we try to remove spaces from the right side,
-# if this doesn't work we try on left side but only if there's a non-character
-# on the right.
-_RE_PATTERN_CLEANSE_LINE_C_COMMENTS = re.compile(
-    r'(\s*' + _RE_PATTERN_C_COMMENTS + r'\s*$|' +
-    _RE_PATTERN_C_COMMENTS + r'\s+|' +
-    r'\s+' + _RE_PATTERN_C_COMMENTS + r'(?=\W)|' +
-    _RE_PATTERN_C_COMMENTS + r')')
-
-
-def IsCppString(line):
-  """Does line terminate so, that the next symbol is in string constant.
-
-  This function does not consider single-line nor multi-line comments.
-
-  Args:
-    line: is a partial line of code starting from the 0..n.
-
-  Returns:
-    True, if next character appended to 'line' is inside a
-    string constant.
-  """
-
-  line = line.replace(r'\\', 'XX')  # after this, \\" does not match to \"
-  return ((line.count('"') - line.count(r'\"') - line.count("'\"'")) & 1) == 1
-
-
-def CleanseRawStrings(raw_lines):
-  """Removes C++11 raw strings from lines.
-
-    Before:
-      static const char kData[] = R"(
-          multi-line string
-          )";
-
-    After:
-      static const char kData[] = ""
-          (replaced by blank line)
-          "";
-
-  Args:
-    raw_lines: list of raw lines.
-
-  Returns:
-    list of lines with C++11 raw strings replaced by empty strings.
-  """
-
-  delimiter = None
-  lines_without_raw_strings = []
-  for line in raw_lines:
-    if delimiter:
-      # Inside a raw string, look for the end
-      end = line.find(delimiter)
-      if end >= 0:
-        # Found the end of the string, match leading space for this
-        # line and resume copying the original lines, and also insert
-        # a "" on the last line.
-        leading_space = Match(r'^(\s*)\S', line)
-        line = leading_space.group(1) + '""' + line[end + len(delimiter):]
-        delimiter = None
-      else:
-        # Haven't found the end yet, append a blank line.
-        line = '""'
-
-    # Look for beginning of a raw string, and replace them with
-    # empty strings.  This is done in a loop to handle multiple raw
-    # strings on the same line.
-    while delimiter is None:
-      # Look for beginning of a raw string.
-      # See 2.14.15 [lex.string] for syntax.
-      matched = Match(r'^(.*)\b(?:R|u8R|uR|UR|LR)"([^\s\\()]*)\((.*)$', line)
-      if matched:
-        delimiter = ')' + matched.group(2) + '"'
-
-        end = matched.group(3).find(delimiter)
-        if end >= 0:
-          # Raw string ended on same line
-          line = (matched.group(1) + '""' +
-                  matched.group(3)[end + len(delimiter):])
-          delimiter = None
-        else:
-          # Start of a multi-line raw string
-          line = matched.group(1) + '""'
-      else:
-        break
-
-    lines_without_raw_strings.append(line)
-
-  # TODO(unknown): if delimiter is not None here, we might want to
-  # emit a warning for unterminated string.
-  return lines_without_raw_strings
-
-
-def FindNextMultiLineCommentStart(lines, lineix):
-  """Find the beginning marker for a multiline comment."""
-  while lineix < len(lines):
-    if lines[lineix].strip().startswith('/*'):
-      # Only return this marker if the comment goes beyond this line
-      if lines[lineix].strip().find('*/', 2) < 0:
-        return lineix
-    lineix += 1
-  return len(lines)
-
-
-def FindNextMultiLineCommentEnd(lines, lineix):
-  """We are inside a comment, find the end marker."""
-  while lineix < len(lines):
-    if lines[lineix].strip().endswith('*/'):
-      return lineix
-    lineix += 1
-  return len(lines)
-
-
-def RemoveMultiLineCommentsFromRange(lines, begin, end):
-  """Clears a range of lines for multi-line comments."""
-  # Having // dummy comments makes the lines non-empty, so we will not get
-  # unnecessary blank line warnings later in the code.
-  for i in range(begin, end):
-    lines[i] = '/**/'
-
-
-def RemoveMultiLineComments(filename, lines, error):
-  """Removes multiline (c-style) comments from lines."""
-  lineix = 0
-  while lineix < len(lines):
-    lineix_begin = FindNextMultiLineCommentStart(lines, lineix)
-    if lineix_begin >= len(lines):
-      return
-    lineix_end = FindNextMultiLineCommentEnd(lines, lineix_begin)
-    if lineix_end >= len(lines):
-      error(filename, lineix_begin + 1, 'readability/multiline_comment', 5,
-            'Could not find end of multi-line comment')
-      return
-    RemoveMultiLineCommentsFromRange(lines, lineix_begin, lineix_end + 1)
-    lineix = lineix_end + 1
-
-
-def CleanseComments(line):
-  """Removes //-comments and single-line C-style /* */ comments.
-
-  Args:
-    line: A line of C++ source.
-
-  Returns:
-    The line with single-line comments removed.
-  """
-  commentpos = line.find('//')
-  if commentpos != -1 and not IsCppString(line[:commentpos]):
-    line = line[:commentpos].rstrip()
-  # get rid of /* ... */
-  return _RE_PATTERN_CLEANSE_LINE_C_COMMENTS.sub('', line)
-
-
-class CleansedLines(object):
-  """Holds 4 copies of all lines with different preprocessing applied to them.
-
-  1) elided member contains lines without strings and comments.
-  2) lines member contains lines without comments.
-  3) raw_lines member contains all the lines without processing.
-  4) lines_without_raw_strings member is same as raw_lines, but with C++11 raw
-     strings removed.
-  All these members are of <type 'list'>, and of the same length.
-  """
-
-  def __init__(self, lines):
-    self.elided = []
-    self.lines = []
-    self.raw_lines = lines
-    self.num_lines = len(lines)
-    self.lines_without_raw_strings = CleanseRawStrings(lines)
-    for linenum in range(len(self.lines_without_raw_strings)):
-      self.lines.append(CleanseComments(
-          self.lines_without_raw_strings[linenum]))
-      elided = self._CollapseStrings(self.lines_without_raw_strings[linenum])
-      self.elided.append(CleanseComments(elided))
-
-  def NumLines(self):
-    """Returns the number of lines represented."""
-    return self.num_lines
-
-  @staticmethod
-  def _CollapseStrings(elided):
-    """Collapses strings and chars on a line to simple "" or '' blocks.
-
-    We nix strings first so we're not fooled by text like '"http://"'
-
-    Args:
-      elided: The line being processed.
-
-    Returns:
-      The line with collapsed strings.
-    """
-    if _RE_PATTERN_INCLUDE.match(elided):
-      return elided
-
-    # Remove escaped characters first to make quote/single quote collapsing
-    # basic.  Things that look like escaped characters shouldn't occur
-    # outside of strings and chars.
-    elided = _RE_PATTERN_CLEANSE_LINE_ESCAPES.sub('', elided)
-
-    # Replace quoted strings and digit separators.  Both single quotes
-    # and double quotes are processed in the same loop, otherwise
-    # nested quotes wouldn't work.
-    collapsed = ''
-    while True:
-      # Find the first quote character
-      match = Match(r'^([^\'"]*)([\'"])(.*)$', elided)
-      if not match:
-        collapsed += elided
-        break
-      head, quote, tail = match.groups()
-
-      if quote == '"':
-        # Collapse double quoted strings
-        second_quote = tail.find('"')
-        if second_quote >= 0:
-          collapsed += head + '""'
-          elided = tail[second_quote + 1:]
-        else:
-          # Unmatched double quote, don't bother processing the rest
-          # of the line since this is probably a multiline string.
-          collapsed += elided
-          break
-      else:
-        # Found single quote, check nearby text to eliminate digit separators.
-        #
-        # There is no special handling for floating point here, because
-        # the integer/fractional/exponent parts would all be parsed
-        # correctly as long as there are digits on both sides of the
-        # separator.  So we are fine as long as we don't see something
-        # like "0.'3" (gcc 4.9.0 will not allow this literal).
-        if Search(r'\b(?:0[bBxX]?|[1-9])[0-9a-fA-F]*$', head):
-          match_literal = Match(r'^((?:\'?[0-9a-zA-Z_])*)(.*)$', "'" + tail)
-          collapsed += head + match_literal.group(1).replace("'", '')
-          elided = match_literal.group(2)
-        else:
-          second_quote = tail.find('\'')
-          if second_quote >= 0:
-            collapsed += head + "''"
-            elided = tail[second_quote + 1:]
-          else:
-            # Unmatched single quote
-            collapsed += elided
-            break
-
-    return collapsed
-
-
-def FindEndOfExpressionInLine(line, startpos, stack):
-  """Find the position just after the end of current parenthesized expression.
-
-  Args:
-    line: a CleansedLines line.
-    startpos: start searching at this position.
-    stack: nesting stack at startpos.
-
-  Returns:
-    On finding matching end: (index just after matching end, None)
-    On finding an unclosed expression: (-1, None)
-    Otherwise: (-1, new stack at end of this line)
-  """
-  for i in xrange(startpos, len(line)):
-    char = line[i]
-    if char in '([{':
-      # Found start of parenthesized expression, push to expression stack
-      stack.append(char)
-    elif char == '<':
-      # Found potential start of template argument list
-      if i > 0 and line[i - 1] == '<':
-        # Left shift operator
-        if stack and stack[-1] == '<':
-          stack.pop()
-          if not stack:
-            return (-1, None)
-      elif i > 0 and Search(r'\boperator\s*$', line[0:i]):
-        # operator<, don't add to stack
-        continue
-      else:
-        # Tentative start of template argument list
-        stack.append('<')
-    elif char in ')]}':
-      # Found end of parenthesized expression.
-      #
-      # If we are currently expecting a matching '>', the pending '<'
-      # must have been an operator.  Remove them from expression stack.
-      while stack and stack[-1] == '<':
-        stack.pop()
-      if not stack:
-        return (-1, None)
-      if ((stack[-1] == '(' and char == ')') or
-          (stack[-1] == '[' and char == ']') or
-          (stack[-1] == '{' and char == '}')):
-        stack.pop()
-        if not stack:
-          return (i + 1, None)
-      else:
-        # Mismatched parentheses
-        return (-1, None)
-    elif char == '>':
-      # Found potential end of template argument list.
-
-      # Ignore "->" and operator functions
-      if (i > 0 and
-          (line[i - 1] == '-' or Search(r'\boperator\s*$', line[0:i - 1]))):
-        continue
-
-      # Pop the stack if there is a matching '<'.  Otherwise, ignore
-      # this '>' since it must be an operator.
-      if stack:
-        if stack[-1] == '<':
-          stack.pop()
-          if not stack:
-            return (i + 1, None)
-    elif char == ';':
-      # Found something that look like end of statements.  If we are currently
-      # expecting a '>', the matching '<' must have been an operator, since
-      # template argument list should not contain statements.
-      while stack and stack[-1] == '<':
-        stack.pop()
-      if not stack:
-        return (-1, None)
-
-  # Did not find end of expression or unbalanced parentheses on this line
-  return (-1, stack)
-
-
-def CloseExpression(clean_lines, linenum, pos):
-  """If input points to ( or { or [ or <, finds the position that closes it.
-
-  If lines[linenum][pos] points to a '(' or '{' or '[' or '<', finds the
-  linenum/pos that correspond to the closing of the expression.
-
-  TODO(unknown): cpplint spends a fair bit of time matching parentheses.
-  Ideally we would want to index all opening and closing parentheses once
-  and have CloseExpression be just a simple lookup, but due to preprocessor
-  tricks, this is not so easy.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    pos: A position on the line.
-
-  Returns:
-    A tuple (line, linenum, pos) pointer *past* the closing brace, or
-    (line, len(lines), -1) if we never find a close.  Note we ignore
-    strings and comments when matching; and the line we return is the
-    'cleansed' line at linenum.
-  """
-
-  line = clean_lines.elided[linenum]
-  if (line[pos] not in '({[<') or Match(r'<[<=]', line[pos:]):
-    return (line, clean_lines.NumLines(), -1)
-
-  # Check first line
-  (end_pos, stack) = FindEndOfExpressionInLine(line, pos, [])
-  if end_pos > -1:
-    return (line, linenum, end_pos)
-
-  # Continue scanning forward
-  while stack and linenum < clean_lines.NumLines() - 1:
-    linenum += 1
-    line = clean_lines.elided[linenum]
-    (end_pos, stack) = FindEndOfExpressionInLine(line, 0, stack)
-    if end_pos > -1:
-      return (line, linenum, end_pos)
-
-  # Did not find end of expression before end of file, give up
-  return (line, clean_lines.NumLines(), -1)
-
-
-def FindStartOfExpressionInLine(line, endpos, stack):
-  """Find position at the matching start of current expression.
-
-  This is almost the reverse of FindEndOfExpressionInLine, but note
-  that the input position and returned position differs by 1.
-
-  Args:
-    line: a CleansedLines line.
-    endpos: start searching at this position.
-    stack: nesting stack at endpos.
-
-  Returns:
-    On finding matching start: (index at matching start, None)
-    On finding an unclosed expression: (-1, None)
-    Otherwise: (-1, new stack at beginning of this line)
-  """
-  i = endpos
-  while i >= 0:
-    char = line[i]
-    if char in ')]}':
-      # Found end of expression, push to expression stack
-      stack.append(char)
-    elif char == '>':
-      # Found potential end of template argument list.
-      #
-      # Ignore it if it's a "->" or ">=" or "operator>"
-      if (i > 0 and
-          (line[i - 1] == '-' or
-           Match(r'\s>=\s', line[i - 1:]) or
-           Search(r'\boperator\s*$', line[0:i]))):
-        i -= 1
-      else:
-        stack.append('>')
-    elif char == '<':
-      # Found potential start of template argument list
-      if i > 0 and line[i - 1] == '<':
-        # Left shift operator
-        i -= 1
-      else:
-        # If there is a matching '>', we can pop the expression stack.
-        # Otherwise, ignore this '<' since it must be an operator.
-        if stack and stack[-1] == '>':
-          stack.pop()
-          if not stack:
-            return (i, None)
-    elif char in '([{':
-      # Found start of expression.
-      #
-      # If there are any unmatched '>' on the stack, they must be
-      # operators.  Remove those.
-      while stack and stack[-1] == '>':
-        stack.pop()
-      if not stack:
-        return (-1, None)
-      if ((char == '(' and stack[-1] == ')') or
-          (char == '[' and stack[-1] == ']') or
-          (char == '{' and stack[-1] == '}')):
-        stack.pop()
-        if not stack:
-          return (i, None)
-      else:
-        # Mismatched parentheses
-        return (-1, None)
-    elif char == ';':
-      # Found something that look like end of statements.  If we are currently
-      # expecting a '<', the matching '>' must have been an operator, since
-      # template argument list should not contain statements.
-      while stack and stack[-1] == '>':
-        stack.pop()
-      if not stack:
-        return (-1, None)
-
-    i -= 1
-
-  return (-1, stack)
-
-
-def ReverseCloseExpression(clean_lines, linenum, pos):
-  """If input points to ) or } or ] or >, finds the position that opens it.
-
-  If lines[linenum][pos] points to a ')' or '}' or ']' or '>', finds the
-  linenum/pos that correspond to the opening of the expression.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    pos: A position on the line.
-
-  Returns:
-    A tuple (line, linenum, pos) pointer *at* the opening brace, or
-    (line, 0, -1) if we never find the matching opening brace.  Note
-    we ignore strings and comments when matching; and the line we
-    return is the 'cleansed' line at linenum.
-  """
-  line = clean_lines.elided[linenum]
-  if line[pos] not in ')}]>':
-    return (line, 0, -1)
-
-  # Check last line
-  (start_pos, stack) = FindStartOfExpressionInLine(line, pos, [])
-  if start_pos > -1:
-    return (line, linenum, start_pos)
-
-  # Continue scanning backward
-  while stack and linenum > 0:
-    linenum -= 1
-    line = clean_lines.elided[linenum]
-    (start_pos, stack) = FindStartOfExpressionInLine(line, len(line) - 1, stack)
-    if start_pos > -1:
-      return (line, linenum, start_pos)
-
-  # Did not find start of expression before beginning of file, give up
-  return (line, 0, -1)
-
-
-def CheckForCopyright(filename, lines, error):
-  """Logs an error if no Copyright message appears at the top of the file."""
-
-  # We'll say it should occur by line 10. Don't forget there's a
-  # dummy line at the front.
-  for line in xrange(1, min(len(lines), 11)):
-    if re.search(r'Copyright', lines[line], re.I): break
-  else:                       # means no copyright line was found
-    error(filename, 0, 'legal/copyright', 5,
-          'No copyright message found.  '
-          'You should have a line: "Copyright [year] <Copyright Owner>"')
-
-
-def GetIndentLevel(line):
-  """Return the number of leading spaces in line.
-
-  Args:
-    line: A string to check.
-
-  Returns:
-    An integer count of leading spaces, possibly zero.
-  """
-  indent = Match(r'^( *)\S', line)
-  if indent:
-    return len(indent.group(1))
-  else:
-    return 0
-
-
-def GetHeaderGuardCPPVariable(filename):
-  """Returns the CPP variable that should be used as a header guard.
-
-  Args:
-    filename: The name of a C++ header file.
-
-  Returns:
-    The CPP variable that should be used as a header guard in the
-    named file.
-
-  """
-
-  # Restores original filename in case that cpplint is invoked from Emacs's
-  # flymake.
-  filename = re.sub(r'_flymake\.h$', '.h', filename)
-  filename = re.sub(r'/\.flymake/([^/]*)$', r'/\1', filename)
-  # Replace 'c++' with 'cpp'.
-  filename = filename.replace('C++', 'cpp').replace('c++', 'cpp')
-  
-  fileinfo = FileInfo(filename)
-  file_path_from_root = fileinfo.RepositoryName()
-  if _root:
-    file_path_from_root = re.sub('^' + _root + os.sep, '', file_path_from_root)
-  return re.sub(r'[^a-zA-Z0-9]', '_', file_path_from_root).upper() + '_'
-
-
-def CheckForHeaderGuard(filename, clean_lines, error):
-  """Checks that the file contains a header guard.
-
-  Logs an error if no #ifndef header guard is present.  For other
-  headers, checks that the full pathname is used.
-
-  Args:
-    filename: The name of the C++ header file.
-    clean_lines: A CleansedLines instance containing the file.
-    error: The function to call with any errors found.
-  """
-
-  # Don't check for header guards if there are error suppression
-  # comments somewhere in this file.
-  #
-  # Because this is silencing a warning for a nonexistent line, we
-  # only support the very specific NOLINT(build/header_guard) syntax,
-  # and not the general NOLINT or NOLINT(*) syntax.
-  raw_lines = clean_lines.lines_without_raw_strings
-  for i in raw_lines:
-    if Search(r'//\s*NOLINT\(build/header_guard\)', i):
-      return
-
-  cppvar = GetHeaderGuardCPPVariable(filename)
-
-  ifndef = ''
-  ifndef_linenum = 0
-  define = ''
-  endif = ''
-  endif_linenum = 0
-  for linenum, line in enumerate(raw_lines):
-    linesplit = line.split()
-    if len(linesplit) >= 2:
-      # find the first occurrence of #ifndef and #define, save arg
-      if not ifndef and linesplit[0] == '#ifndef':
-        # set ifndef to the header guard presented on the #ifndef line.
-        ifndef = linesplit[1]
-        ifndef_linenum = linenum
-      if not define and linesplit[0] == '#define':
-        define = linesplit[1]
-    # find the last occurrence of #endif, save entire line
-    if line.startswith('#endif'):
-      endif = line
-      endif_linenum = linenum
-
-  if not ifndef or not define or ifndef != define:
-    error(filename, 0, 'build/header_guard', 5,
-          'No #ifndef header guard found, suggested CPP variable is: %s' %
-          cppvar)
-    return
-
-  # The guard should be PATH_FILE_H_, but we also allow PATH_FILE_H__
-  # for backward compatibility.
-  if ifndef != cppvar:
-    error_level = 0
-    if ifndef != cppvar + '_':
-      error_level = 5
-
-    ParseNolintSuppressions(filename, raw_lines[ifndef_linenum], ifndef_linenum,
-                            error)
-    error(filename, ifndef_linenum, 'build/header_guard', error_level,
-          '#ifndef header guard has wrong style, please use: %s' % cppvar)
-
-  # Check for "//" comments on endif line.
-  ParseNolintSuppressions(filename, raw_lines[endif_linenum], endif_linenum,
-                          error)
-  match = Match(r'#endif\s*//\s*' + cppvar + r'(_)?\b', endif)
-  if match:
-    if match.group(1) == '_':
-      # Issue low severity warning for deprecated double trailing underscore
-      error(filename, endif_linenum, 'build/header_guard', 0,
-            '#endif line should be "#endif  // %s"' % cppvar)
-    return
-
-  # Didn't find the corresponding "//" comment.  If this file does not
-  # contain any "//" comments at all, it could be that the compiler
-  # only wants "/**/" comments, look for those instead.
-  no_single_line_comments = True
-  for i in xrange(1, len(raw_lines) - 1):
-    line = raw_lines[i]
-    if Match(r'^(?:(?:\'(?:\.|[^\'])*\')|(?:"(?:\.|[^"])*")|[^\'"])*//', line):
-      no_single_line_comments = False
-      break
-
-  if no_single_line_comments:
-    match = Match(r'#endif\s*/\*\s*' + cppvar + r'(_)?\s*\*/', endif)
-    if match:
-      if match.group(1) == '_':
-        # Low severity warning for double trailing underscore
-        error(filename, endif_linenum, 'build/header_guard', 0,
-              '#endif line should be "#endif  /* %s */"' % cppvar)
-      return
-
-  # Didn't find anything
-  error(filename, endif_linenum, 'build/header_guard', 5,
-        '#endif line should be "#endif  // %s"' % cppvar)
-
-
-def CheckHeaderFileIncluded(filename, include_state, error):
-  """Logs an error if a .cc file does not include its header."""
-
-  # Do not check test files
-  if filename.endswith('_test.cc') or filename.endswith('_unittest.cc'):
-    return
-
-  fileinfo = FileInfo(filename)
-  headerfile = filename[0:len(filename) - 2] + 'h'
-  if not os.path.exists(headerfile):
-    return
-  headername = FileInfo(headerfile).RepositoryName()
-  first_include = 0
-  for section_list in include_state.include_list:
-    for f in section_list:
-      if headername in f[0] or f[0] in headername:
-        return
-      if not first_include:
-        first_include = f[1]
-
-  error(filename, first_include, 'build/include', 5,
-        '%s should include its header file %s' % (fileinfo.RepositoryName(),
-                                                  headername))
-
-
-def CheckForBadCharacters(filename, lines, error):
-  """Logs an error for each line containing bad characters.
-
-  Two kinds of bad characters:
-
-  1. Unicode replacement characters: These indicate that either the file
-  contained invalid UTF-8 (likely) or Unicode replacement characters (which
-  it shouldn't).  Note that it's possible for this to throw off line
-  numbering if the invalid UTF-8 occurred adjacent to a newline.
-
-  2. NUL bytes.  These are problematic for some tools.
-
-  Args:
-    filename: The name of the current file.
-    lines: An array of strings, each representing a line of the file.
-    error: The function to call with any errors found.
-  """
-  for linenum, line in enumerate(lines):
-    if u'\ufffd' in line:
-      error(filename, linenum, 'readability/utf8', 5,
-            'Line contains invalid UTF-8 (or Unicode replacement character).')
-    if '\0' in line:
-      error(filename, linenum, 'readability/nul', 5, 'Line contains NUL byte.')
-
-
-def CheckForNewlineAtEOF(filename, lines, error):
-  """Logs an error if there is no newline char at the end of the file.
-
-  Args:
-    filename: The name of the current file.
-    lines: An array of strings, each representing a line of the file.
-    error: The function to call with any errors found.
-  """
-
-  # The array lines() was created by adding two newlines to the
-  # original file (go figure), then splitting on \n.
-  # To verify that the file ends in \n, we just have to make sure the
-  # last-but-two element of lines() exists and is empty.
-  if len(lines) < 3 or lines[-2]:
-    error(filename, len(lines) - 2, 'whitespace/ending_newline', 5,
-          'Could not find a newline character at the end of the file.')
-
-
-def CheckForMultilineCommentsAndStrings(filename, clean_lines, linenum, error):
-  """Logs an error if we see /* ... */ or "..." that extend past one line.
-
-  /* ... */ comments are legit inside macros, for one line.
-  Otherwise, we prefer // comments, so it's ok to warn about the
-  other.  Likewise, it's ok for strings to extend across multiple
-  lines, as long as a line continuation character (backslash)
-  terminates each line. Although not currently prohibited by the C++
-  style guide, it's ugly and unnecessary. We don't do well with either
-  in this lint program, so we warn about both.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Remove all \\ (escaped backslashes) from the line. They are OK, and the
-  # second (escaped) slash may trigger later \" detection erroneously.
-  line = line.replace('\\\\', '')
-
-  if line.count('/*') > line.count('*/'):
-    error(filename, linenum, 'readability/multiline_comment', 5,
-          'Complex multi-line /*...*/-style comment found. '
-          'Lint may give bogus warnings.  '
-          'Consider replacing these with //-style comments, '
-          'with #if 0...#endif, '
-          'or with more clearly structured multi-line comments.')
-
-  if (line.count('"') - line.count('\\"')) % 2:
-    error(filename, linenum, 'readability/multiline_string', 5,
-          'Multi-line string ("...") found.  This lint script doesn\'t '
-          'do well with such strings, and may give bogus warnings.  '
-          'Use C++11 raw strings or concatenation instead.')
-
-
-# (non-threadsafe name, thread-safe alternative, validation pattern)
-#
-# The validation pattern is used to eliminate false positives such as:
-#  _rand();               // false positive due to substring match.
-#  ->rand();              // some member function rand().
-#  ACMRandom rand(seed);  // some variable named rand.
-#  ISAACRandom rand();    // another variable named rand.
-#
-# Basically we require the return value of these functions to be used
-# in some expression context on the same line by matching on some
-# operator before the function name.  This eliminates constructors and
-# member function calls.
-_UNSAFE_FUNC_PREFIX = r'(?:[-+*/=%^&|(<]\s*|>\s+)'
-_THREADING_LIST = (
-    ('asctime(', 'asctime_r(', _UNSAFE_FUNC_PREFIX + r'asctime\([^)]+\)'),
-    ('ctime(', 'ctime_r(', _UNSAFE_FUNC_PREFIX + r'ctime\([^)]+\)'),
-    ('getgrgid(', 'getgrgid_r(', _UNSAFE_FUNC_PREFIX + r'getgrgid\([^)]+\)'),
-    ('getgrnam(', 'getgrnam_r(', _UNSAFE_FUNC_PREFIX + r'getgrnam\([^)]+\)'),
-    ('getlogin(', 'getlogin_r(', _UNSAFE_FUNC_PREFIX + r'getlogin\(\)'),
-    ('getpwnam(', 'getpwnam_r(', _UNSAFE_FUNC_PREFIX + r'getpwnam\([^)]+\)'),
-    ('getpwuid(', 'getpwuid_r(', _UNSAFE_FUNC_PREFIX + r'getpwuid\([^)]+\)'),
-    ('gmtime(', 'gmtime_r(', _UNSAFE_FUNC_PREFIX + r'gmtime\([^)]+\)'),
-    ('localtime(', 'localtime_r(', _UNSAFE_FUNC_PREFIX + r'localtime\([^)]+\)'),
-    ('rand(', 'rand_r(', _UNSAFE_FUNC_PREFIX + r'rand\(\)'),
-    ('strtok(', 'strtok_r(',
-     _UNSAFE_FUNC_PREFIX + r'strtok\([^)]+\)'),
-    ('ttyname(', 'ttyname_r(', _UNSAFE_FUNC_PREFIX + r'ttyname\([^)]+\)'),
-    )
-
-
-def CheckPosixThreading(filename, clean_lines, linenum, error):
-  """Checks for calls to thread-unsafe functions.
-
-  Much code has been originally written without consideration of
-  multi-threading. Also, engineers are relying on their old experience;
-  they have learned posix before threading extensions were added. These
-  tests guide the engineers to use thread-safe functions (when using
-  posix directly).
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-  for single_thread_func, multithread_safe_func, pattern in _THREADING_LIST:
-    # Additional pattern matching check to confirm that this is the
-    # function we are looking for
-    if Search(pattern, line):
-      error(filename, linenum, 'runtime/threadsafe_fn', 2,
-            'Consider using ' + multithread_safe_func +
-            '...) instead of ' + single_thread_func +
-            '...) for improved thread safety.')
-
-
-def CheckVlogArguments(filename, clean_lines, linenum, error):
-  """Checks that VLOG() is only used for defining a logging level.
-
-  For example, VLOG(2) is correct. VLOG(INFO), VLOG(WARNING), VLOG(ERROR), and
-  VLOG(FATAL) are not.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-  if Search(r'\bVLOG\((INFO|ERROR|WARNING|DFATAL|FATAL)\)', line):
-    error(filename, linenum, 'runtime/vlog', 5,
-          'VLOG() should be used with numeric verbosity level.  '
-          'Use LOG() if you want symbolic severity levels.')
-
-# Matches invalid increment: *count++, which moves pointer instead of
-# incrementing a value.
-_RE_PATTERN_INVALID_INCREMENT = re.compile(
-    r'^\s*\*\w+(\+\+|--);')
-
-
-def CheckInvalidIncrement(filename, clean_lines, linenum, error):
-  """Checks for invalid increment *count++.
-
-  For example following function:
-  void increment_counter(int* count) {
-    *count++;
-  }
-  is invalid, because it effectively does count++, moving pointer, and should
-  be replaced with ++*count, (*count)++ or *count += 1.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-  if _RE_PATTERN_INVALID_INCREMENT.match(line):
-    error(filename, linenum, 'runtime/invalid_increment', 5,
-          'Changing pointer instead of value (or unused value of operator*).')
-
-
-def IsMacroDefinition(clean_lines, linenum):
-  if Search(r'^#define', clean_lines[linenum]):
-    return True
-
-  if linenum > 0 and Search(r'\\$', clean_lines[linenum - 1]):
-    return True
-
-  return False
-
-
-def IsForwardClassDeclaration(clean_lines, linenum):
-  return Match(r'^\s*(\btemplate\b)*.*class\s+\w+;\s*$', clean_lines[linenum])
-
-
-class _BlockInfo(object):
-  """Stores information about a generic block of code."""
-
-  def __init__(self, seen_open_brace):
-    self.seen_open_brace = seen_open_brace
-    self.open_parentheses = 0
-    self.inline_asm = _NO_ASM
-    self.check_namespace_indentation = False
-
-  def CheckBegin(self, filename, clean_lines, linenum, error):
-    """Run checks that applies to text up to the opening brace.
-
-    This is mostly for checking the text after the class identifier
-    and the "{", usually where the base class is specified.  For other
-    blocks, there isn't much to check, so we always pass.
-
-    Args:
-      filename: The name of the current file.
-      clean_lines: A CleansedLines instance containing the file.
-      linenum: The number of the line to check.
-      error: The function to call with any errors found.
-    """
-    pass
-
-  def CheckEnd(self, filename, clean_lines, linenum, error):
-    """Run checks that applies to text after the closing brace.
-
-    This is mostly used for checking end of namespace comments.
-
-    Args:
-      filename: The name of the current file.
-      clean_lines: A CleansedLines instance containing the file.
-      linenum: The number of the line to check.
-      error: The function to call with any errors found.
-    """
-    pass
-
-  def IsBlockInfo(self):
-    """Returns true if this block is a _BlockInfo.
-
-    This is convenient for verifying that an object is an instance of
-    a _BlockInfo, but not an instance of any of the derived classes.
-
-    Returns:
-      True for this class, False for derived classes.
-    """
-    return self.__class__ == _BlockInfo
-
-
-class _ExternCInfo(_BlockInfo):
-  """Stores information about an 'extern "C"' block."""
-
-  def __init__(self):
-    _BlockInfo.__init__(self, True)
-
-
-class _ClassInfo(_BlockInfo):
-  """Stores information about a class."""
-
-  def __init__(self, name, class_or_struct, clean_lines, linenum):
-    _BlockInfo.__init__(self, False)
-    self.name = name
-    self.starting_linenum = linenum
-    self.is_derived = False
-    self.check_namespace_indentation = True
-    if class_or_struct == 'struct':
-      self.access = 'public'
-      self.is_struct = True
-    else:
-      self.access = 'private'
-      self.is_struct = False
-
-    # Remember initial indentation level for this class.  Using raw_lines here
-    # instead of elided to account for leading comments.
-    self.class_indent = GetIndentLevel(clean_lines.raw_lines[linenum])
-
-    # Try to find the end of the class.  This will be confused by things like:
-    #   class A {
-    #   } *x = { ...
-    #
-    # But it's still good enough for CheckSectionSpacing.
-    self.last_line = 0
-    depth = 0
-    for i in range(linenum, clean_lines.NumLines()):
-      line = clean_lines.elided[i]
-      depth += line.count('{') - line.count('}')
-      if not depth:
-        self.last_line = i
-        break
-
-  def CheckBegin(self, filename, clean_lines, linenum, error):
-    # Look for a bare ':'
-    if Search('(^|[^:]):($|[^:])', clean_lines.elided[linenum]):
-      self.is_derived = True
-
-  def CheckEnd(self, filename, clean_lines, linenum, error):
-    # If there is a DISALLOW macro, it should appear near the end of
-    # the class.
-    seen_last_thing_in_class = False
-    for i in xrange(linenum - 1, self.starting_linenum, -1):
-      match = Search(
-          r'\b(DISALLOW_COPY_AND_ASSIGN|DISALLOW_IMPLICIT_CONSTRUCTORS)\(' +
-          self.name + r'\)',
-          clean_lines.elided[i])
-      if match:
-        if seen_last_thing_in_class:
-          error(filename, i, 'readability/constructors', 3,
-                match.group(1) + ' should be the last thing in the class')
-        break
-
-      if not Match(r'^\s*$', clean_lines.elided[i]):
-        seen_last_thing_in_class = True
-
-    # Check that closing brace is aligned with beginning of the class.
-    # Only do this if the closing brace is indented by only whitespaces.
-    # This means we will not check single-line class definitions.
-    indent = Match(r'^( *)\}', clean_lines.elided[linenum])
-    if indent and len(indent.group(1)) != self.class_indent:
-      if self.is_struct:
-        parent = 'struct ' + self.name
-      else:
-        parent = 'class ' + self.name
-      error(filename, linenum, 'whitespace/indent', 3,
-            'Closing brace should be aligned with beginning of %s' % parent)
-
-
-class _NamespaceInfo(_BlockInfo):
-  """Stores information about a namespace."""
-
-  def __init__(self, name, linenum):
-    _BlockInfo.__init__(self, False)
-    self.name = name or ''
-    self.starting_linenum = linenum
-    self.check_namespace_indentation = True
-
-  def CheckEnd(self, filename, clean_lines, linenum, error):
-    """Check end of namespace comments."""
-    line = clean_lines.raw_lines[linenum]
-
-    # Check how many lines is enclosed in this namespace.  Don't issue
-    # warning for missing namespace comments if there aren't enough
-    # lines.  However, do apply checks if there is already an end of
-    # namespace comment and it's incorrect.
-    #
-    # TODO(unknown): We always want to check end of namespace comments
-    # if a namespace is large, but sometimes we also want to apply the
-    # check if a short namespace contained nontrivial things (something
-    # other than forward declarations).  There is currently no logic on
-    # deciding what these nontrivial things are, so this check is
-    # triggered by namespace size only, which works most of the time.
-    if (linenum - self.starting_linenum < 10
-        and not Match(r'};*\s*(//|/\*).*\bnamespace\b', line)):
-      return
-
-    # Look for matching comment at end of namespace.
-    #
-    # Note that we accept C style "/* */" comments for terminating
-    # namespaces, so that code that terminate namespaces inside
-    # preprocessor macros can be cpplint clean.
-    #
-    # We also accept stuff like "// end of namespace <name>." with the
-    # period at the end.
-    #
-    # Besides these, we don't accept anything else, otherwise we might
-    # get false negatives when existing comment is a substring of the
-    # expected namespace.
-    if self.name:
-      # Named namespace
-      if not Match((r'};*\s*(//|/\*).*\bnamespace\s+' + re.escape(self.name) +
-                    r'[\*/\.\\\s]*$'),
-                   line):
-        error(filename, linenum, 'readability/namespace', 5,
-              'Namespace should be terminated with "// namespace %s"' %
-              self.name)
-    else:
-      # Anonymous namespace
-      if not Match(r'};*\s*(//|/\*).*\bnamespace[\*/\.\\\s]*$', line):
-        # If "// namespace anonymous" or "// anonymous namespace (more text)",
-        # mention "// anonymous namespace" as an acceptable form
-        if Match(r'}.*\b(namespace anonymous|anonymous namespace)\b', line):
-          error(filename, linenum, 'readability/namespace', 5,
-                'Anonymous namespace should be terminated with "// namespace"'
-                ' or "// anonymous namespace"')
-        else:
-          error(filename, linenum, 'readability/namespace', 5,
-                'Anonymous namespace should be terminated with "// namespace"')
-
-
-class _PreprocessorInfo(object):
-  """Stores checkpoints of nesting stacks when #if/#else is seen."""
-
-  def __init__(self, stack_before_if):
-    # The entire nesting stack before #if
-    self.stack_before_if = stack_before_if
-
-    # The entire nesting stack up to #else
-    self.stack_before_else = []
-
-    # Whether we have already seen #else or #elif
-    self.seen_else = False
-
-
-class NestingState(object):
-  """Holds states related to parsing braces."""
-
-  def __init__(self):
-    # Stack for tracking all braces.  An object is pushed whenever we
-    # see a "{", and popped when we see a "}".  Only 3 types of
-    # objects are possible:
-    # - _ClassInfo: a class or struct.
-    # - _NamespaceInfo: a namespace.
-    # - _BlockInfo: some other type of block.
-    self.stack = []
-
-    # Top of the previous stack before each Update().
-    #
-    # Because the nesting_stack is updated at the end of each line, we
-    # had to do some convoluted checks to find out what is the current
-    # scope at the beginning of the line.  This check is simplified by
-    # saving the previous top of nesting stack.
-    #
-    # We could save the full stack, but we only need the top.  Copying
-    # the full nesting stack would slow down cpplint by ~10%.
-    self.previous_stack_top = []
-
-    # Stack of _PreprocessorInfo objects.
-    self.pp_stack = []
-
-  def SeenOpenBrace(self):
-    """Check if we have seen the opening brace for the innermost block.
-
-    Returns:
-      True if we have seen the opening brace, False if the innermost
-      block is still expecting an opening brace.
-    """
-    return (not self.stack) or self.stack[-1].seen_open_brace
-
-  def InNamespaceBody(self):
-    """Check if we are currently one level inside a namespace body.
-
-    Returns:
-      True if top of the stack is a namespace block, False otherwise.
-    """
-    return self.stack and isinstance(self.stack[-1], _NamespaceInfo)
-
-  def InExternC(self):
-    """Check if we are currently one level inside an 'extern "C"' block.
-
-    Returns:
-      True if top of the stack is an extern block, False otherwise.
-    """
-    return self.stack and isinstance(self.stack[-1], _ExternCInfo)
-
-  def InClassDeclaration(self):
-    """Check if we are currently one level inside a class or struct declaration.
-
-    Returns:
-      True if top of the stack is a class/struct, False otherwise.
-    """
-    return self.stack and isinstance(self.stack[-1], _ClassInfo)
-
-  def InAsmBlock(self):
-    """Check if we are currently one level inside an inline ASM block.
-
-    Returns:
-      True if the top of the stack is a block containing inline ASM.
-    """
-    return self.stack and self.stack[-1].inline_asm != _NO_ASM
-
-  def InTemplateArgumentList(self, clean_lines, linenum, pos):
-    """Check if current position is inside template argument list.
-
-    Args:
-      clean_lines: A CleansedLines instance containing the file.
-      linenum: The number of the line to check.
-      pos: position just after the suspected template argument.
-    Returns:
-      True if (linenum, pos) is inside template arguments.
-    """
-    while linenum < clean_lines.NumLines():
-      # Find the earliest character that might indicate a template argument
-      line = clean_lines.elided[linenum]
-      match = Match(r'^[^{};=\[\]\.<>]*(.)', line[pos:])
-      if not match:
-        linenum += 1
-        pos = 0
-        continue
-      token = match.group(1)
-      pos += len(match.group(0))
-
-      # These things do not look like template argument list:
-      #   class Suspect {
-      #   class Suspect x; }
-      if token in ('{', '}', ';'): return False
-
-      # These things look like template argument list:
-      #   template <class Suspect>
-      #   template <class Suspect = default_value>
-      #   template <class Suspect[]>
-      #   template <class Suspect...>
-      if token in ('>', '=', '[', ']', '.'): return True
-
-      # Check if token is an unmatched '<'.
-      # If not, move on to the next character.
-      if token != '<':
-        pos += 1
-        if pos >= len(line):
-          linenum += 1
-          pos = 0
-        continue
-
-      # We can't be sure if we just find a single '<', and need to
-      # find the matching '>'.
-      (_, end_line, end_pos) = CloseExpression(clean_lines, linenum, pos - 1)
-      if end_pos < 0:
-        # Not sure if template argument list or syntax error in file
-        return False
-      linenum = end_line
-      pos = end_pos
-    return False
-
-  def UpdatePreprocessor(self, line):
-    """Update preprocessor stack.
-
-    We need to handle preprocessors due to classes like this:
-      #ifdef SWIG
-      struct ResultDetailsPageElementExtensionPoint {
-      #else
-      struct ResultDetailsPageElementExtensionPoint : public Extension {
-      #endif
-
-    We make the following assumptions (good enough for most files):
-    - Preprocessor condition evaluates to true from #if up to first
-      #else/#elif/#endif.
-
-    - Preprocessor condition evaluates to false from #else/#elif up
-      to #endif.  We still perform lint checks on these lines, but
-      these do not affect nesting stack.
-
-    Args:
-      line: current line to check.
-    """
-    if Match(r'^\s*#\s*(if|ifdef|ifndef)\b', line):
-      # Beginning of #if block, save the nesting stack here.  The saved
-      # stack will allow us to restore the parsing state in the #else case.
-      self.pp_stack.append(_PreprocessorInfo(copy.deepcopy(self.stack)))
-    elif Match(r'^\s*#\s*(else|elif)\b', line):
-      # Beginning of #else block
-      if self.pp_stack:
-        if not self.pp_stack[-1].seen_else:
-          # This is the first #else or #elif block.  Remember the
-          # whole nesting stack up to this point.  This is what we
-          # keep after the #endif.
-          self.pp_stack[-1].seen_else = True
-          self.pp_stack[-1].stack_before_else = copy.deepcopy(self.stack)
-
-        # Restore the stack to how it was before the #if
-        self.stack = copy.deepcopy(self.pp_stack[-1].stack_before_if)
-      else:
-        # TODO(unknown): unexpected #else, issue warning?
-        pass
-    elif Match(r'^\s*#\s*endif\b', line):
-      # End of #if or #else blocks.
-      if self.pp_stack:
-        # If we saw an #else, we will need to restore the nesting
-        # stack to its former state before the #else, otherwise we
-        # will just continue from where we left off.
-        if self.pp_stack[-1].seen_else:
-          # Here we can just use a shallow copy since we are the last
-          # reference to it.
-          self.stack = self.pp_stack[-1].stack_before_else
-        # Drop the corresponding #if
-        self.pp_stack.pop()
-      else:
-        # TODO(unknown): unexpected #endif, issue warning?
-        pass
-
-  # TODO(unknown): Update() is too long, but we will refactor later.
-  def Update(self, filename, clean_lines, linenum, error):
-    """Update nesting state with current line.
-
-    Args:
-      filename: The name of the current file.
-      clean_lines: A CleansedLines instance containing the file.
-      linenum: The number of the line to check.
-      error: The function to call with any errors found.
-    """
-    line = clean_lines.elided[linenum]
-
-    # Remember top of the previous nesting stack.
-    #
-    # The stack is always pushed/popped and not modified in place, so
-    # we can just do a shallow copy instead of copy.deepcopy.  Using
-    # deepcopy would slow down cpplint by ~28%.
-    if self.stack:
-      self.previous_stack_top = self.stack[-1]
-    else:
-      self.previous_stack_top = None
-
-    # Update pp_stack
-    self.UpdatePreprocessor(line)
-
-    # Count parentheses.  This is to avoid adding struct arguments to
-    # the nesting stack.
-    if self.stack:
-      inner_block = self.stack[-1]
-      depth_change = line.count('(') - line.count(')')
-      inner_block.open_parentheses += depth_change
-
-      # Also check if we are starting or ending an inline assembly block.
-      if inner_block.inline_asm in (_NO_ASM, _END_ASM):
-        if (depth_change != 0 and
-            inner_block.open_parentheses == 1 and
-            _MATCH_ASM.match(line)):
-          # Enter assembly block
-          inner_block.inline_asm = _INSIDE_ASM
-        else:
-          # Not entering assembly block.  If previous line was _END_ASM,
-          # we will now shift to _NO_ASM state.
-          inner_block.inline_asm = _NO_ASM
-      elif (inner_block.inline_asm == _INSIDE_ASM and
-            inner_block.open_parentheses == 0):
-        # Exit assembly block
-        inner_block.inline_asm = _END_ASM
-
-    # Consume namespace declaration at the beginning of the line.  Do
-    # this in a loop so that we catch same line declarations like this:
-    #   namespace proto2 { namespace bridge { class MessageSet; } }
-    while True:
-      # Match start of namespace.  The "\b\s*" below catches namespace
-      # declarations even if it weren't followed by a whitespace, this
-      # is so that we don't confuse our namespace checker.  The
-      # missing spaces will be flagged by CheckSpacing.
-      namespace_decl_match = Match(r'^\s*namespace\b\s*([:\w]+)?(.*)$', line)
-      if not namespace_decl_match:
-        break
-
-      new_namespace = _NamespaceInfo(namespace_decl_match.group(1), linenum)
-      self.stack.append(new_namespace)
-
-      line = namespace_decl_match.group(2)
-      if line.find('{') != -1:
-        new_namespace.seen_open_brace = True
-        line = line[line.find('{') + 1:]
-
-    # Look for a class declaration in whatever is left of the line
-    # after parsing namespaces.  The regexp accounts for decorated classes
-    # such as in:
-    #   class LOCKABLE API Object {
-    #   };
-    class_decl_match = Match(
-        r'^(\s*(?:template\s*<[\w\s<>,:]*>\s*)?'
-        r'(class|struct)\s+(?:[A-Z_]+\s+)*(\w+(?:::\w+)*))'
-        r'(.*)$', line)
-    if (class_decl_match and
-        (not self.stack or self.stack[-1].open_parentheses == 0)):
-      # We do not want to accept classes that are actually template arguments:
-      #   template <class Ignore1,
-      #             class Ignore2 = Default<Args>,
-      #             template <Args> class Ignore3>
-      #   void Function() {};
-      #
-      # To avoid template argument cases, we scan forward and look for
-      # an unmatched '>'.  If we see one, assume we are inside a
-      # template argument list.
-      end_declaration = len(class_decl_match.group(1))
-      if not self.InTemplateArgumentList(clean_lines, linenum, end_declaration):
-        self.stack.append(_ClassInfo(
-            class_decl_match.group(3), class_decl_match.group(2),
-            clean_lines, linenum))
-        line = class_decl_match.group(4)
-
-    # If we have not yet seen the opening brace for the innermost block,
-    # run checks here.
-    if not self.SeenOpenBrace():
-      self.stack[-1].CheckBegin(filename, clean_lines, linenum, error)
-
-    # Update access control if we are inside a class/struct
-    if self.stack and isinstance(self.stack[-1], _ClassInfo):
-      classinfo = self.stack[-1]
-      access_match = Match(
-          r'^(.*)\b(public|private|protected|signals)(\s+(?:slots\s*)?)?'
-          r':(?:[^:]|$)',
-          line)
-      if access_match:
-        classinfo.access = access_match.group(2)
-
-        # Check that access keywords are indented +1 space.  Skip this
-        # check if the keywords are not preceded by whitespaces.
-        indent = access_match.group(1)
-        if (len(indent) != classinfo.class_indent + 1 and
-            Match(r'^\s*$', indent)):
-          if classinfo.is_struct:
-            parent = 'struct ' + classinfo.name
-          else:
-            parent = 'class ' + classinfo.name
-          slots = ''
-          if access_match.group(3):
-            slots = access_match.group(3)
-          error(filename, linenum, 'whitespace/indent', 3,
-                '%s%s: should be indented +1 space inside %s' % (
-                    access_match.group(2), slots, parent))
-
-    # Consume braces or semicolons from what's left of the line
-    while True:
-      # Match first brace, semicolon, or closed parenthesis.
-      matched = Match(r'^[^{;)}]*([{;)}])(.*)$', line)
-      if not matched:
-        break
-
-      token = matched.group(1)
-      if token == '{':
-        # If namespace or class hasn't seen a opening brace yet, mark
-        # namespace/class head as complete.  Push a new block onto the
-        # stack otherwise.
-        if not self.SeenOpenBrace():
-          self.stack[-1].seen_open_brace = True
-        elif Match(r'^extern\s*"[^"]*"\s*\{', line):
-          self.stack.append(_ExternCInfo())
-        else:
-          self.stack.append(_BlockInfo(True))
-          if _MATCH_ASM.match(line):
-            self.stack[-1].inline_asm = _BLOCK_ASM
-
-      elif token == ';' or token == ')':
-        # If we haven't seen an opening brace yet, but we already saw
-        # a semicolon, this is probably a forward declaration.  Pop
-        # the stack for these.
-        #
-        # Similarly, if we haven't seen an opening brace yet, but we
-        # already saw a closing parenthesis, then these are probably
-        # function arguments with extra "class" or "struct" keywords.
-        # Also pop these stack for these.
-        if not self.SeenOpenBrace():
-          self.stack.pop()
-      else:  # token == '}'
-        # Perform end of block checks and pop the stack.
-        if self.stack:
-          self.stack[-1].CheckEnd(filename, clean_lines, linenum, error)
-          self.stack.pop()
-      line = matched.group(2)
-
-  def InnermostClass(self):
-    """Get class info on the top of the stack.
-
-    Returns:
-      A _ClassInfo object if we are inside a class, or None otherwise.
-    """
-    for i in range(len(self.stack), 0, -1):
-      classinfo = self.stack[i - 1]
-      if isinstance(classinfo, _ClassInfo):
-        return classinfo
-    return None
-
-  def CheckCompletedBlocks(self, filename, error):
-    """Checks that all classes and namespaces have been completely parsed.
-
-    Call this when all lines in a file have been processed.
-    Args:
-      filename: The name of the current file.
-      error: The function to call with any errors found.
-    """
-    # Note: This test can result in false positives if #ifdef constructs
-    # get in the way of brace matching. See the testBuildClass test in
-    # cpplint_unittest.py for an example of this.
-    for obj in self.stack:
-      if isinstance(obj, _ClassInfo):
-        error(filename, obj.starting_linenum, 'build/class', 5,
-              'Failed to find complete declaration of class %s' %
-              obj.name)
-      elif isinstance(obj, _NamespaceInfo):
-        error(filename, obj.starting_linenum, 'build/namespaces', 5,
-              'Failed to find complete declaration of namespace %s' %
-              obj.name)
-
-
-def CheckForNonStandardConstructs(filename, clean_lines, linenum,
-                                  nesting_state, error):
-  r"""Logs an error if we see certain non-ANSI constructs ignored by gcc-2.
-
-  Complain about several constructs which gcc-2 accepts, but which are
-  not standard C++.  Warning about these in lint is one way to ease the
-  transition to new compilers.
-  - put storage class first (e.g. "static const" instead of "const static").
-  - "%lld" instead of %qd" in printf-type functions.
-  - "%1$d" is non-standard in printf-type functions.
-  - "\%" is an undefined character escape sequence.
-  - text after #endif is not allowed.
-  - invalid inner-style forward declaration.
-  - >? and <? operators, and their >?= and <?= cousins.
-
-  Additionally, check for constructor/destructor style violations and reference
-  members, as it is very convenient to do so while checking for
-  gcc-2 compliance.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: A callable to which errors are reported, which takes 4 arguments:
-           filename, line number, error level, and message
-  """
-
-  # Remove comments from the line, but leave in strings for now.
-  line = clean_lines.lines[linenum]
-
-  if Search(r'printf\s*\(.*".*%[-+ ]?\d*q', line):
-    error(filename, linenum, 'runtime/printf_format', 3,
-          '%q in format strings is deprecated.  Use %ll instead.')
-
-  if Search(r'printf\s*\(.*".*%\d+\$', line):
-    error(filename, linenum, 'runtime/printf_format', 2,
-          '%N$ formats are unconventional.  Try rewriting to avoid them.')
-
-  # Remove escaped backslashes before looking for undefined escapes.
-  line = line.replace('\\\\', '')
-
-  if Search(r'("|\').*\\(%|\[|\(|{)', line):
-    error(filename, linenum, 'build/printf_format', 3,
-          '%, [, (, and { are undefined character escapes.  Unescape them.')
-
-  # For the rest, work with both comments and strings removed.
-  line = clean_lines.elided[linenum]
-
-  if Search(r'\b(const|volatile|void|char|short|int|long'
-            r'|float|double|signed|unsigned'
-            r'|schar|u?int8|u?int16|u?int32|u?int64)'
-            r'\s+(register|static|extern|typedef)\b',
-            line):
-    error(filename, linenum, 'build/storage_class', 5,
-          'Storage class (static, extern, typedef, etc) should be first.')
-
-  if Match(r'\s*#\s*endif\s*[^/\s]+', line):
-    error(filename, linenum, 'build/endif_comment', 5,
-          'Uncommented text after #endif is non-standard.  Use a comment.')
-
-  if Match(r'\s*class\s+(\w+\s*::\s*)+\w+\s*;', line):
-    error(filename, linenum, 'build/forward_decl', 5,
-          'Inner-style forward declarations are invalid.  Remove this line.')
-
-  if Search(r'(\w+|[+-]?\d+(\.\d*)?)\s*(<|>)\?=?\s*(\w+|[+-]?\d+)(\.\d*)?',
-            line):
-    error(filename, linenum, 'build/deprecated', 3,
-          '>? and <? (max and min) operators are non-standard and deprecated.')
-
-  if Search(r'^\s*const\s*string\s*&\s*\w+\s*;', line):
-    # TODO(unknown): Could it be expanded safely to arbitrary references,
-    # without triggering too many false positives? The first
-    # attempt triggered 5 warnings for mostly benign code in the regtest, hence
-    # the restriction.
-    # Here's the original regexp, for the reference:
-    # type_name = r'\w+((\s*::\s*\w+)|(\s*<\s*\w+?\s*>))?'
-    # r'\s*const\s*' + type_name + '\s*&\s*\w+\s*;'
-    error(filename, linenum, 'runtime/member_string_references', 2,
-          'const string& members are dangerous. It is much better to use '
-          'alternatives, such as pointers or simple constants.')
-
-  # Everything else in this function operates on class declarations.
-  # Return early if the top of the nesting stack is not a class, or if
-  # the class head is not completed yet.
-  classinfo = nesting_state.InnermostClass()
-  if not classinfo or not classinfo.seen_open_brace:
-    return
-
-  # The class may have been declared with namespace or classname qualifiers.
-  # The constructor and destructor will not have those qualifiers.
-  base_classname = classinfo.name.split('::')[-1]
-
-  # Look for single-argument constructors that aren't marked explicit.
-  # Technically a valid construct, but against style. Also look for
-  # non-single-argument constructors which are also technically valid, but
-  # strongly suggest something is wrong.
-  explicit_constructor_match = Match(
-      r'\s+(?:inline\s+)?(explicit\s+)?(?:inline\s+)?%s\s*'
-      r'\(((?:[^()]|\([^()]*\))*)\)'
-      % re.escape(base_classname),
-      line)
-
-  if explicit_constructor_match:
-    is_marked_explicit = explicit_constructor_match.group(1)
-
-    if not explicit_constructor_match.group(2):
-      constructor_args = []
-    else:
-      constructor_args = explicit_constructor_match.group(2).split(',')
-
-    # collapse arguments so that commas in template parameter lists and function
-    # argument parameter lists don't split arguments in two
-    i = 0
-    while i < len(constructor_args):
-      constructor_arg = constructor_args[i]
-      while (constructor_arg.count('<') > constructor_arg.count('>') or
-             constructor_arg.count('(') > constructor_arg.count(')')):
-        constructor_arg += ',' + constructor_args[i + 1]
-        del constructor_args[i + 1]
-      constructor_args[i] = constructor_arg
-      i += 1
-
-    defaulted_args = [arg for arg in constructor_args if '=' in arg]
-    noarg_constructor = (not constructor_args or  # empty arg list
-                         # 'void' arg specifier
-                         (len(constructor_args) == 1 and
-                          constructor_args[0].strip() == 'void'))
-    onearg_constructor = ((len(constructor_args) == 1 and  # exactly one arg
-                           not noarg_constructor) or
-                          # all but at most one arg defaulted
-                          (len(constructor_args) >= 1 and
-                           not noarg_constructor and
-                           len(defaulted_args) >= len(constructor_args) - 1))
-    initializer_list_constructor = bool(
-        onearg_constructor and
-        Search(r'\bstd\s*::\s*initializer_list\b', constructor_args[0]))
-    copy_constructor = bool(
-        onearg_constructor and
-        Match(r'(const\s+)?%s(\s*<[^>]*>)?(\s+const)?\s*(?:<\w+>\s*)?&'
-              % re.escape(base_classname), constructor_args[0].strip()))
-
-    if (not is_marked_explicit and
-        onearg_constructor and
-        not initializer_list_constructor and
-        not copy_constructor):
-      if defaulted_args:
-        error(filename, linenum, 'runtime/explicit', 5,
-              'Constructors callable with one argument '
-              'should be marked explicit.')
-      else:
-        error(filename, linenum, 'runtime/explicit', 5,
-              'Single-parameter constructors should be marked explicit.')
-    elif is_marked_explicit and not onearg_constructor:
-      if noarg_constructor:
-        error(filename, linenum, 'runtime/explicit', 5,
-              'Zero-parameter constructors should not be marked explicit.')
-      else:
-        error(filename, linenum, 'runtime/explicit', 0,
-              'Constructors that require multiple arguments '
-              'should not be marked explicit.')
-
-
-def CheckSpacingForFunctionCall(filename, clean_lines, linenum, error):
-  """Checks for the correctness of various spacing around function calls.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Since function calls often occur inside if/for/while/switch
-  # expressions - which have their own, more liberal conventions - we
-  # first see if we should be looking inside such an expression for a
-  # function call, to which we can apply more strict standards.
-  fncall = line    # if there's no control flow construct, look at whole line
-  for pattern in (r'\bif\s*\((.*)\)\s*{',
-                  r'\bfor\s*\((.*)\)\s*{',
-                  r'\bwhile\s*\((.*)\)\s*[{;]',
-                  r'\bswitch\s*\((.*)\)\s*{'):
-    match = Search(pattern, line)
-    if match:
-      fncall = match.group(1)    # look inside the parens for function calls
-      break
-
-  # Except in if/for/while/switch, there should never be space
-  # immediately inside parens (eg "f( 3, 4 )").  We make an exception
-  # for nested parens ( (a+b) + c ).  Likewise, there should never be
-  # a space before a ( when it's a function argument.  I assume it's a
-  # function argument when the char before the whitespace is legal in
-  # a function name (alnum + _) and we're not starting a macro. Also ignore
-  # pointers and references to arrays and functions coz they're too tricky:
-  # we use a very simple way to recognize these:
-  # " (something)(maybe-something)" or
-  # " (something)(maybe-something," or
-  # " (something)[something]"
-  # Note that we assume the contents of [] to be short enough that
-  # they'll never need to wrap.
-  if (  # Ignore control structures.
-      not Search(r'\b(if|for|while|switch|return|new|delete|catch|sizeof)\b',
-                 fncall) and
-      # Ignore pointers/references to functions.
-      not Search(r' \([^)]+\)\([^)]*(\)|,$)', fncall) and
-      # Ignore pointers/references to arrays.
-      not Search(r' \([^)]+\)\[[^\]]+\]', fncall)):
-    if Search(r'\w\s*\(\s(?!\s*\\$)', fncall):      # a ( used for a fn call
-      error(filename, linenum, 'whitespace/parens', 4,
-            'Extra space after ( in function call')
-    elif Search(r'\(\s+(?!(\s*\\)|\()', fncall):
-      error(filename, linenum, 'whitespace/parens', 2,
-            'Extra space after (')
-    if (Search(r'\w\s+\(', fncall) and
-        not Search(r'#\s*define|typedef|using\s+\w+\s*=', fncall) and
-        not Search(r'\w\s+\((\w+::)*\*\w+\)\(', fncall) and
-        not Search(r'\bcase\s+\(', fncall)):
-      # TODO(unknown): Space after an operator function seem to be a common
-      # error, silence those for now by restricting them to highest verbosity.
-      if Search(r'\boperator_*\b', line):
-        error(filename, linenum, 'whitespace/parens', 0,
-              'Extra space before ( in function call')
-      else:
-        error(filename, linenum, 'whitespace/parens', 4,
-              'Extra space before ( in function call')
-    # If the ) is followed only by a newline or a { + newline, assume it's
-    # part of a control statement (if/while/etc), and don't complain
-    if Search(r'[^)]\s+\)\s*[^{\s]', fncall):
-      # If the closing parenthesis is preceded by only whitespaces,
-      # try to give a more descriptive error message.
-      if Search(r'^\s+\)', fncall):
-        error(filename, linenum, 'whitespace/parens', 2,
-              'Closing ) should be moved to the previous line')
-      else:
-        error(filename, linenum, 'whitespace/parens', 2,
-              'Extra space before )')
-
-
-def IsBlankLine(line):
-  """Returns true if the given line is blank.
-
-  We consider a line to be blank if the line is empty or consists of
-  only white spaces.
-
-  Args:
-    line: A line of a string.
-
-  Returns:
-    True, if the given line is blank.
-  """
-  return not line or line.isspace()
-
-
-def CheckForNamespaceIndentation(filename, nesting_state, clean_lines, line,
-                                 error):
-  is_namespace_indent_item = (
-      len(nesting_state.stack) > 1 and
-      nesting_state.stack[-1].check_namespace_indentation and
-      isinstance(nesting_state.previous_stack_top, _NamespaceInfo) and
-      nesting_state.previous_stack_top == nesting_state.stack[-2])
-
-  if ShouldCheckNamespaceIndentation(nesting_state, is_namespace_indent_item,
-                                     clean_lines.elided, line):
-    CheckItemIndentationInNamespace(filename, clean_lines.elided,
-                                    line, error)
-
-
-def CheckForFunctionLengths(filename, clean_lines, linenum,
-                            function_state, error):
-  """Reports for long function bodies.
-
-  For an overview why this is done, see:
-  http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions
-
-  Uses a simplistic algorithm assuming other style guidelines
-  (especially spacing) are followed.
-  Only checks unindented functions, so class members are unchecked.
-  Trivial bodies are unchecked, so constructors with huge initializer lists
-  may be missed.
-  Blank/comment lines are not counted so as to avoid encouraging the removal
-  of vertical space and comments just to get through a lint check.
-  NOLINT *on the last line of a function* disables this check.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    function_state: Current function name and lines in body so far.
-    error: The function to call with any errors found.
-  """
-  lines = clean_lines.lines
-  line = lines[linenum]
-  joined_line = ''
-
-  starting_func = False
-  regexp = r'(\w(\w|::|\*|\&|\s)*)\('  # decls * & space::name( ...
-  match_result = Match(regexp, line)
-  if match_result:
-    # If the name is all caps and underscores, figure it's a macro and
-    # ignore it, unless it's TEST or TEST_F.
-    function_name = match_result.group(1).split()[-1]
-    if function_name == 'TEST' or function_name == 'TEST_F' or (
-        not Match(r'[A-Z_]+$', function_name)):
-      starting_func = True
-
-  if starting_func:
-    body_found = False
-    for start_linenum in xrange(linenum, clean_lines.NumLines()):
-      start_line = lines[start_linenum]
-      joined_line += ' ' + start_line.lstrip()
-      if Search(r'(;|})', start_line):  # Declarations and trivial functions
-        body_found = True
-        break                              # ... ignore
-      elif Search(r'{', start_line):
-        body_found = True
-        function = Search(r'((\w|:)*)\(', line).group(1)
-        if Match(r'TEST', function):    # Handle TEST... macros
-          parameter_regexp = Search(r'(\(.*\))', joined_line)
-          if parameter_regexp:             # Ignore bad syntax
-            function += parameter_regexp.group(1)
-        else:
-          function += '()'
-        function_state.Begin(function)
-        break
-    if not body_found:
-      # No body for the function (or evidence of a non-function) was found.
-      error(filename, linenum, 'readability/fn_size', 5,
-            'Lint failed to find start of function body.')
-  elif Match(r'^\}\s*$', line):  # function end
-    function_state.Check(error, filename, linenum)
-    function_state.End()
-  elif not Match(r'^\s*$', line):
-    function_state.Count()  # Count non-blank/non-comment lines.
-
-
-_RE_PATTERN_TODO = re.compile(r'^//(\s*)TODO(\(.+?\))?:?(\s|$)?')
-
-
-def CheckComment(line, filename, linenum, next_line_start, error):
-  """Checks for common mistakes in comments.
-
-  Args:
-    line: The line in question.
-    filename: The name of the current file.
-    linenum: The number of the line to check.
-    next_line_start: The first non-whitespace column of the next line.
-    error: The function to call with any errors found.
-  """
-  commentpos = line.find('//')
-  if commentpos != -1:
-    # Check if the // may be in quotes.  If so, ignore it
-    # Comparisons made explicit for clarity -- pylint: disable=g-explicit-bool-comparison
-    if (line.count('"', 0, commentpos) -
-        line.count('\\"', 0, commentpos)) % 2 == 0:   # not in quotes
-      # Allow one space for new scopes, two spaces otherwise:
-      if (not (Match(r'^.*{ *//', line) and next_line_start == commentpos) and
-          ((commentpos >= 1 and
-            line[commentpos-1] not in string.whitespace) or
-           (commentpos >= 2 and
-            line[commentpos-2] not in string.whitespace))):
-        error(filename, linenum, 'whitespace/comments', 2,
-              'At least two spaces is best between code and comments')
-
-      # Checks for common mistakes in TODO comments.
-      comment = line[commentpos:]
-      match = _RE_PATTERN_TODO.match(comment)
-      if match:
-        # One whitespace is correct; zero whitespace is handled elsewhere.
-        leading_whitespace = match.group(1)
-        if len(leading_whitespace) > 1:
-          error(filename, linenum, 'whitespace/todo', 2,
-                'Too many spaces before TODO')
-
-        username = match.group(2)
-        if not username:
-          error(filename, linenum, 'readability/todo', 2,
-                'Missing username in TODO; it should look like '
-                '"// TODO(my_username): Stuff."')
-
-        middle_whitespace = match.group(3)
-        # Comparisons made explicit for correctness -- pylint: disable=g-explicit-bool-comparison
-        if middle_whitespace != ' ' and middle_whitespace != '':
-          error(filename, linenum, 'whitespace/todo', 2,
-                'TODO(my_username) should be followed by a space')
-
-      # If the comment contains an alphanumeric character, there
-      # should be a space somewhere between it and the // unless
-      # it's a /// or //! Doxygen comment.
-      if (Match(r'//[^ ]*\w', comment) and
-          not Match(r'(///|//\!)(\s+|$)', comment)):
-        error(filename, linenum, 'whitespace/comments', 4,
-              'Should have a space between // and comment')
-
-
-def CheckAccess(filename, clean_lines, linenum, nesting_state, error):
-  """Checks for improper use of DISALLOW* macros.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]  # get rid of comments and strings
-
-  matched = Match((r'\s*(DISALLOW_COPY_AND_ASSIGN|'
-                   r'DISALLOW_IMPLICIT_CONSTRUCTORS)'), line)
-  if not matched:
-    return
-  if nesting_state.stack and isinstance(nesting_state.stack[-1], _ClassInfo):
-    if nesting_state.stack[-1].access != 'private':
-      error(filename, linenum, 'readability/constructors', 3,
-            '%s must be in the private: section' % matched.group(1))
-
-  else:
-    # Found DISALLOW* macro outside a class declaration, or perhaps it
-    # was used inside a function when it should have been part of the
-    # class declaration.  We could issue a warning here, but it
-    # probably resulted in a compiler error already.
-    pass
-
-
-def CheckSpacing(filename, clean_lines, linenum, nesting_state, error):
-  """Checks for the correctness of various spacing issues in the code.
-
-  Things we check for: spaces around operators, spaces after
-  if/for/while/switch, no spaces around parens in function calls, two
-  spaces between code and comment, don't start a block with a blank
-  line, don't end a function with a blank line, don't add a blank line
-  after public/protected/private, don't have too many blank lines in a row.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: The function to call with any errors found.
-  """
-
-  # Don't use "elided" lines here, otherwise we can't check commented lines.
-  # Don't want to use "raw" either, because we don't want to check inside C++11
-  # raw strings,
-  raw = clean_lines.lines_without_raw_strings
-  line = raw[linenum]
-
-  # Before nixing comments, check if the line is blank for no good
-  # reason.  This includes the first line after a block is opened, and
-  # blank lines at the end of a function (ie, right before a line like '}'
-  #
-  # Skip all the blank line checks if we are immediately inside a
-  # namespace body.  In other words, don't issue blank line warnings
-  # for this block:
-  #   namespace {
-  #
-  #   }
-  #
-  # A warning about missing end of namespace comments will be issued instead.
-  #
-  # Also skip blank line checks for 'extern "C"' blocks, which are formatted
-  # like namespaces.
-  if (IsBlankLine(line) and
-      not nesting_state.InNamespaceBody() and
-      not nesting_state.InExternC()):
-    elided = clean_lines.elided
-    prev_line = elided[linenum - 1]
-    prevbrace = prev_line.rfind('{')
-    # TODO(unknown): Don't complain if line before blank line, and line after,
-    #                both start with alnums and are indented the same amount.
-    #                This ignores whitespace at the start of a namespace block
-    #                because those are not usually indented.
-    if prevbrace != -1 and prev_line[prevbrace:].find('}') == -1:
-      # OK, we have a blank line at the start of a code block.  Before we
-      # complain, we check if it is an exception to the rule: The previous
-      # non-empty line has the parameters of a function header that are indented
-      # 4 spaces (because they did not fit in a 80 column line when placed on
-      # the same line as the function name).  We also check for the case where
-      # the previous line is indented 6 spaces, which may happen when the
-      # initializers of a constructor do not fit into a 80 column line.
-      exception = False
-      if Match(r' {6}\w', prev_line):  # Initializer list?
-        # We are looking for the opening column of initializer list, which
-        # should be indented 4 spaces to cause 6 space indentation afterwards.
-        search_position = linenum-2
-        while (search_position >= 0
-               and Match(r' {6}\w', elided[search_position])):
-          search_position -= 1
-        exception = (search_position >= 0
-                     and elided[search_position][:5] == '    :')
-      else:
-        # Search for the function arguments or an initializer list.  We use a
-        # simple heuristic here: If the line is indented 4 spaces; and we have a
-        # closing paren, without the opening paren, followed by an opening brace
-        # or colon (for initializer lists) we assume that it is the last line of
-        # a function header.  If we have a colon indented 4 spaces, it is an
-        # initializer list.
-        exception = (Match(r' {4}\w[^\(]*\)\s*(const\s*)?(\{\s*$|:)',
-                           prev_line)
-                     or Match(r' {4}:', prev_line))
-
-      if not exception:
-        error(filename, linenum, 'whitespace/blank_line', 2,
-              'Redundant blank line at the start of a code block '
-              'should be deleted.')
-    # Ignore blank lines at the end of a block in a long if-else
-    # chain, like this:
-    #   if (condition1) {
-    #     // Something followed by a blank line
-    #
-    #   } else if (condition2) {
-    #     // Something else
-    #   }
-    if linenum + 1 < clean_lines.NumLines():
-      next_line = raw[linenum + 1]
-      if (next_line
-          and Match(r'\s*}', next_line)
-          and next_line.find('} else ') == -1):
-        error(filename, linenum, 'whitespace/blank_line', 3,
-              'Redundant blank line at the end of a code block '
-              'should be deleted.')
-
-    matched = Match(r'\s*(public|protected|private):', prev_line)
-    if matched:
-      error(filename, linenum, 'whitespace/blank_line', 3,
-            'Do not leave a blank line after "%s:"' % matched.group(1))
-
-  # Next, check comments
-  next_line_start = 0
-  if linenum + 1 < clean_lines.NumLines():
-    next_line = raw[linenum + 1]
-    next_line_start = len(next_line) - len(next_line.lstrip())
-  CheckComment(line, filename, linenum, next_line_start, error)
-
-  # get rid of comments and strings
-  line = clean_lines.elided[linenum]
-
-  # You shouldn't have spaces before your brackets, except maybe after
-  # 'delete []' or 'return []() {};'
-  if Search(r'\w\s+\[', line) and not Search(r'(?:delete|return)\s+\[', line):
-    error(filename, linenum, 'whitespace/braces', 5,
-          'Extra space before [')
-
-  # In range-based for, we wanted spaces before and after the colon, but
-  # not around "::" tokens that might appear.
-  if (Search(r'for *\(.*[^:]:[^: ]', line) or
-      Search(r'for *\(.*[^: ]:[^:]', line)):
-    error(filename, linenum, 'whitespace/forcolon', 2,
-          'Missing space around colon in range-based for loop')
-
-
-def CheckOperatorSpacing(filename, clean_lines, linenum, error):
-  """Checks for horizontal spacing around operators.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Don't try to do spacing checks for operator methods.  Do this by
-  # replacing the troublesome characters with something else,
-  # preserving column position for all other characters.
-  #
-  # The replacement is done repeatedly to avoid false positives from
-  # operators that call operators.
-  while True:
-    match = Match(r'^(.*\boperator\b)(\S+)(\s*\(.*)$', line)
-    if match:
-      line = match.group(1) + ('_' * len(match.group(2))) + match.group(3)
-    else:
-      break
-
-  # We allow no-spaces around = within an if: "if ( (a=Foo()) == 0 )".
-  # Otherwise not.  Note we only check for non-spaces on *both* sides;
-  # sometimes people put non-spaces on one side when aligning ='s among
-  # many lines (not that this is behavior that I approve of...)
-  if ((Search(r'[\w.]=', line) or
-       Search(r'=[\w.]', line))
-      and not Search(r'\b(if|while|for) ', line)
-      # Operators taken from [lex.operators] in C++11 standard.
-      and not Search(r'(>=|<=|==|!=|&=|\^=|\|=|\+=|\*=|\/=|\%=)', line)
-      and not Search(r'operator=', line)):
-    error(filename, linenum, 'whitespace/operators', 4,
-          'Missing spaces around =')
-
-  # It's ok not to have spaces around binary operators like + - * /, but if
-  # there's too little whitespace, we get concerned.  It's hard to tell,
-  # though, so we punt on this one for now.  TODO.
-
-  # You should always have whitespace around binary operators.
-  #
-  # Check <= and >= first to avoid false positives with < and >, then
-  # check non-include lines for spacing around < and >.
-  #
-  # If the operator is followed by a comma, assume it's be used in a
-  # macro context and don't do any checks.  This avoids false
-  # positives.
-  #
-  # Note that && is not included here.  Those are checked separately
-  # in CheckRValueReference
-  match = Search(r'[^<>=!\s](==|!=|<=|>=|\|\|)[^<>=!\s,;\)]', line)
-  if match:
-    error(filename, linenum, 'whitespace/operators', 3,
-          'Missing spaces around %s' % match.group(1))
-  elif not Match(r'#.*include', line):
-    # Look for < that is not surrounded by spaces.  This is only
-    # triggered if both sides are missing spaces, even though
-    # technically should should flag if at least one side is missing a
-    # space.  This is done to avoid some false positives with shifts.
-    match = Match(r'^(.*[^\s<])<[^\s=<,]', line)
-    if match:
-      (_, _, end_pos) = CloseExpression(
-          clean_lines, linenum, len(match.group(1)))
-      if end_pos <= -1:
-        error(filename, linenum, 'whitespace/operators', 3,
-              'Missing spaces around <')
-
-    # Look for > that is not surrounded by spaces.  Similar to the
-    # above, we only trigger if both sides are missing spaces to avoid
-    # false positives with shifts.
-    match = Match(r'^(.*[^-\s>])>[^\s=>,]', line)
-    if match:
-      (_, _, start_pos) = ReverseCloseExpression(
-          clean_lines, linenum, len(match.group(1)))
-      if start_pos <= -1:
-        error(filename, linenum, 'whitespace/operators', 3,
-              'Missing spaces around >')
-
-  # We allow no-spaces around << when used like this: 10<<20, but
-  # not otherwise (particularly, not when used as streams)
-  #
-  # We also allow operators following an opening parenthesis, since
-  # those tend to be macros that deal with operators.
-  match = Search(r'(operator|[^\s(<])(?:L|UL|ULL|l|ul|ull)?<<([^\s,=<])', line)
-  if (match and not (match.group(1).isdigit() and match.group(2).isdigit()) and
-      not (match.group(1) == 'operator' and match.group(2) == ';')):
-    error(filename, linenum, 'whitespace/operators', 3,
-          'Missing spaces around <<')
-
-  # We allow no-spaces around >> for almost anything.  This is because
-  # C++11 allows ">>" to close nested templates, which accounts for
-  # most cases when ">>" is not followed by a space.
-  #
-  # We still warn on ">>" followed by alpha character, because that is
-  # likely due to ">>" being used for right shifts, e.g.:
-  #   value >> alpha
-  #
-  # When ">>" is used to close templates, the alphanumeric letter that
-  # follows would be part of an identifier, and there should still be
-  # a space separating the template type and the identifier.
-  #   type<type<type>> alpha
-  match = Search(r'>>[a-zA-Z_]', line)
-  if match:
-    error(filename, linenum, 'whitespace/operators', 3,
-          'Missing spaces around >>')
-
-  # There shouldn't be space around unary operators
-  match = Search(r'(!\s|~\s|[\s]--[\s;]|[\s]\+\+[\s;])', line)
-  if match:
-    error(filename, linenum, 'whitespace/operators', 4,
-          'Extra space for operator %s' % match.group(1))
-
-
-def CheckParenthesisSpacing(filename, clean_lines, linenum, error):
-  """Checks for horizontal spacing around parentheses.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # No spaces after an if, while, switch, or for
-  match = Search(r' (if\(|for\(|while\(|switch\()', line)
-  if match:
-    error(filename, linenum, 'whitespace/parens', 5,
-          'Missing space before ( in %s' % match.group(1))
-
-  # For if/for/while/switch, the left and right parens should be
-  # consistent about how many spaces are inside the parens, and
-  # there should either be zero or one spaces inside the parens.
-  # We don't want: "if ( foo)" or "if ( foo   )".
-  # Exception: "for ( ; foo; bar)" and "for (foo; bar; )" are allowed.
-  match = Search(r'\b(if|for|while|switch)\s*'
-                 r'\(([ ]*)(.).*[^ ]+([ ]*)\)\s*{\s*$',
-                 line)
-  if match:
-    if len(match.group(2)) != len(match.group(4)):
-      if not (match.group(3) == ';' and
-              len(match.group(2)) == 1 + len(match.group(4)) or
-              not match.group(2) and Search(r'\bfor\s*\(.*; \)', line)):
-        error(filename, linenum, 'whitespace/parens', 5,
-              'Mismatching spaces inside () in %s' % match.group(1))
-    if len(match.group(2)) not in [0, 1]:
-      error(filename, linenum, 'whitespace/parens', 5,
-            'Should have zero or one spaces inside ( and ) in %s' %
-            match.group(1))
-
-
-def CheckCommaSpacing(filename, clean_lines, linenum, error):
-  """Checks for horizontal spacing near commas and semicolons.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  raw = clean_lines.lines_without_raw_strings
-  line = clean_lines.elided[linenum]
-
-  # You should always have a space after a comma (either as fn arg or operator)
-  #
-  # This does not apply when the non-space character following the
-  # comma is another comma, since the only time when that happens is
-  # for empty macro arguments.
-  #
-  # We run this check in two passes: first pass on elided lines to
-  # verify that lines contain missing whitespaces, second pass on raw
-  # lines to confirm that those missing whitespaces are not due to
-  # elided comments.
-  if (Search(r',[^,\s]', ReplaceAll(r'\boperator\s*,\s*\(', 'F(', line)) and
-      Search(r',[^,\s]', raw[linenum])):
-    error(filename, linenum, 'whitespace/comma', 3,
-          'Missing space after ,')
-
-  # You should always have a space after a semicolon
-  # except for few corner cases
-  # TODO(unknown): clarify if 'if (1) { return 1;}' is requires one more
-  # space after ;
-  if Search(r';[^\s};\\)/]', line):
-    error(filename, linenum, 'whitespace/semicolon', 3,
-          'Missing space after ;')
-
-
-def CheckBracesSpacing(filename, clean_lines, linenum, error):
-  """Checks for horizontal spacing near commas.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Except after an opening paren, or after another opening brace (in case of
-  # an initializer list, for instance), you should have spaces before your
-  # braces. And since you should never have braces at the beginning of a line,
-  # this is an easy test.
-  match = Match(r'^(.*[^ ({>]){', line)
-  if match:
-    # Try a bit harder to check for brace initialization.  This
-    # happens in one of the following forms:
-    #   Constructor() : initializer_list_{} { ... }
-    #   Constructor{}.MemberFunction()
-    #   Type variable{};
-    #   FunctionCall(type{}, ...);
-    #   LastArgument(..., type{});
-    #   LOG(INFO) << type{} << " ...";
-    #   map_of_type[{...}] = ...;
-    #   ternary = expr ? new type{} : nullptr;
-    #   OuterTemplate<InnerTemplateConstructor<Type>{}>
-    #
-    # We check for the character following the closing brace, and
-    # silence the warning if it's one of those listed above, i.e.
-    # "{.;,)<>]:".
-    #
-    # To account for nested initializer list, we allow any number of
-    # closing braces up to "{;,)<".  We can't simply silence the
-    # warning on first sight of closing brace, because that would
-    # cause false negatives for things that are not initializer lists.
-    #   Silence this:         But not this:
-    #     Outer{                if (...) {
-    #       Inner{...}            if (...){  // Missing space before {
-    #     };                    }
-    #
-    # There is a false negative with this approach if people inserted
-    # spurious semicolons, e.g. "if (cond){};", but we will catch the
-    # spurious semicolon with a separate check.
-    (endline, endlinenum, endpos) = CloseExpression(
-        clean_lines, linenum, len(match.group(1)))
-    trailing_text = ''
-    if endpos > -1:
-      trailing_text = endline[endpos:]
-    for offset in xrange(endlinenum + 1,
-                         min(endlinenum + 3, clean_lines.NumLines() - 1)):
-      trailing_text += clean_lines.elided[offset]
-    if not Match(r'^[\s}]*[{.;,)<>\]:]', trailing_text):
-      error(filename, linenum, 'whitespace/braces', 5,
-            'Missing space before {')
-
-  # Make sure '} else {' has spaces.
-  if Search(r'}else', line):
-    error(filename, linenum, 'whitespace/braces', 5,
-          'Missing space before else')
-
-  # You shouldn't have a space before a semicolon at the end of the line.
-  # There's a special case for "for" since the style guide allows space before
-  # the semicolon there.
-  if Search(r':\s*;\s*$', line):
-    error(filename, linenum, 'whitespace/semicolon', 5,
-          'Semicolon defining empty statement. Use {} instead.')
-  elif Search(r'^\s*;\s*$', line):
-    error(filename, linenum, 'whitespace/semicolon', 5,
-          'Line contains only semicolon. If this should be an empty statement, '
-          'use {} instead.')
-  elif (Search(r'\s+;\s*$', line) and
-        not Search(r'\bfor\b', line)):
-    error(filename, linenum, 'whitespace/semicolon', 5,
-          'Extra space before last semicolon. If this should be an empty '
-          'statement, use {} instead.')
-
-
-def IsDecltype(clean_lines, linenum, column):
-  """Check if the token ending on (linenum, column) is decltype().
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: the number of the line to check.
-    column: end column of the token to check.
-  Returns:
-    True if this token is decltype() expression, False otherwise.
-  """
-  (text, _, start_col) = ReverseCloseExpression(clean_lines, linenum, column)
-  if start_col < 0:
-    return False
-  if Search(r'\bdecltype\s*$', text[0:start_col]):
-    return True
-  return False
-
-
-def IsTemplateParameterList(clean_lines, linenum, column):
-  """Check if the token ending on (linenum, column) is the end of template<>.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: the number of the line to check.
-    column: end column of the token to check.
-  Returns:
-    True if this token is end of a template parameter list, False otherwise.
-  """
-  (_, startline, startpos) = ReverseCloseExpression(
-      clean_lines, linenum, column)
-  if (startpos > -1 and
-      Search(r'\btemplate\s*$', clean_lines.elided[startline][0:startpos])):
-    return True
-  return False
-
-
-def IsRValueType(typenames, clean_lines, nesting_state, linenum, column):
-  """Check if the token ending on (linenum, column) is a type.
-
-  Assumes that text to the right of the column is "&&" or a function
-  name.
-
-  Args:
-    typenames: set of type names from template-argument-list.
-    clean_lines: A CleansedLines instance containing the file.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    linenum: the number of the line to check.
-    column: end column of the token to check.
-  Returns:
-    True if this token is a type, False if we are not sure.
-  """
-  prefix = clean_lines.elided[linenum][0:column]
-
-  # Get one word to the left.  If we failed to do so, this is most
-  # likely not a type, since it's unlikely that the type name and "&&"
-  # would be split across multiple lines.
-  match = Match(r'^(.*)(\b\w+|[>*)&])\s*$', prefix)
-  if not match:
-    return False
-
-  # Check text following the token.  If it's "&&>" or "&&," or "&&...", it's
-  # most likely a rvalue reference used inside a template.
-  suffix = clean_lines.elided[linenum][column:]
-  if Match(r'&&\s*(?:[>,]|\.\.\.)', suffix):
-    return True
-
-  # Check for known types and end of templates:
-  #   int&& variable
-  #   vector<int>&& variable
-  #
-  # Because this function is called recursively, we also need to
-  # recognize pointer and reference types:
-  #   int* Function()
-  #   int& Function()
-  if (match.group(2) in typenames or
-      match.group(2) in ['char', 'char16_t', 'char32_t', 'wchar_t', 'bool',
-                         'short', 'int', 'long', 'signed', 'unsigned',
-                         'float', 'double', 'void', 'auto', '>', '*', '&']):
-    return True
-
-  # If we see a close parenthesis, look for decltype on the other side.
-  # decltype would unambiguously identify a type, anything else is
-  # probably a parenthesized expression and not a type.
-  if match.group(2) == ')':
-    return IsDecltype(
-        clean_lines, linenum, len(match.group(1)) + len(match.group(2)) - 1)
-
-  # Check for casts and cv-qualifiers.
-  #   match.group(1)  remainder
-  #   --------------  ---------
-  #   const_cast<     type&&
-  #   const           type&&
-  #   type            const&&
-  if Search(r'\b(?:const_cast\s*<|static_cast\s*<|dynamic_cast\s*<|'
-            r'reinterpret_cast\s*<|\w+\s)\s*$',
-            match.group(1)):
-    return True
-
-  # Look for a preceding symbol that might help differentiate the context.
-  # These are the cases that would be ambiguous:
-  #   match.group(1)  remainder
-  #   --------------  ---------
-  #   Call         (   expression &&
-  #   Declaration  (   type&&
-  #   sizeof       (   type&&
-  #   if           (   expression &&
-  #   while        (   expression &&
-  #   for          (   type&&
-  #   for(         ;   expression &&
-  #   statement    ;   type&&
-  #   block        {   type&&
-  #   constructor  {   expression &&
-  start = linenum
-  line = match.group(1)
-  match_symbol = None
-  while start >= 0:
-    # We want to skip over identifiers and commas to get to a symbol.
-    # Commas are skipped so that we can find the opening parenthesis
-    # for function parameter lists.
-    match_symbol = Match(r'^(.*)([^\w\s,])[\w\s,]*$', line)
-    if match_symbol:
-      break
-    start -= 1
-    line = clean_lines.elided[start]
-
-  if not match_symbol:
-    # Probably the first statement in the file is an rvalue reference
-    return True
-
-  if match_symbol.group(2) == '}':
-    # Found closing brace, probably an indicate of this:
-    #   block{} type&&
-    return True
-
-  if match_symbol.group(2) == ';':
-    # Found semicolon, probably one of these:
-    #   for(; expression &&
-    #   statement; type&&
-
-    # Look for the previous 'for(' in the previous lines.
-    before_text = match_symbol.group(1)
-    for i in xrange(start - 1, max(start - 6, 0), -1):
-      before_text = clean_lines.elided[i] + before_text
-    if Search(r'for\s*\([^{};]*$', before_text):
-      # This is the condition inside a for-loop
-      return False
-
-    # Did not find a for-init-statement before this semicolon, so this
-    # is probably a new statement and not a condition.
-    return True
-
-  if match_symbol.group(2) == '{':
-    # Found opening brace, probably one of these:
-    #   block{ type&& = ... ; }
-    #   constructor{ expression && expression }
-
-    # Look for a closing brace or a semicolon.  If we see a semicolon
-    # first, this is probably a rvalue reference.
-    line = clean_lines.elided[start][0:len(match_symbol.group(1)) + 1]
-    end = start
-    depth = 1
-    while True:
-      for ch in line:
-        if ch == ';':
-          return True
-        elif ch == '{':
-          depth += 1
-        elif ch == '}':
-          depth -= 1
-          if depth == 0:
-            return False
-      end += 1
-      if end >= clean_lines.NumLines():
-        break
-      line = clean_lines.elided[end]
-    # Incomplete program?
-    return False
-
-  if match_symbol.group(2) == '(':
-    # Opening parenthesis.  Need to check what's to the left of the
-    # parenthesis.  Look back one extra line for additional context.
-    before_text = match_symbol.group(1)
-    if linenum > 1:
-      before_text = clean_lines.elided[linenum - 1] + before_text
-    before_text = match_symbol.group(1)
-
-    # Patterns that are likely to be types:
-    #   [](type&&
-    #   for (type&&
-    #   sizeof(type&&
-    #   operator=(type&&
-    #
-    if Search(r'(?:\]|\bfor|\bsizeof|\boperator\s*\S+\s*)\s*$', before_text):
-      return True
-
-    # Patterns that are likely to be expressions:
-    #   if (expression &&
-    #   while (expression &&
-    #   : initializer(expression &&
-    #   , initializer(expression &&
-    #   ( FunctionCall(expression &&
-    #   + FunctionCall(expression &&
-    #   + (expression &&
-    #
-    # The last '+' represents operators such as '+' and '-'.
-    if Search(r'(?:\bif|\bwhile|[-+=%^(<!?:,&*]\s*)$', before_text):
-      return False
-
-    # Something else.  Check that tokens to the left look like
-    #   return_type function_name
-    match_func = Match(r'^(.*\S.*)\s+\w(?:\w|::)*(?:<[^<>]*>)?\s*$',
-                       match_symbol.group(1))
-    if match_func:
-      # Check for constructors, which don't have return types.
-      if Search(r'\b(?:explicit|inline)$', match_func.group(1)):
-        return True
-      implicit_constructor = Match(r'\s*(\w+)\((?:const\s+)?(\w+)', prefix)
-      if (implicit_constructor and
-          implicit_constructor.group(1) == implicit_constructor.group(2)):
-        return True
-      return IsRValueType(typenames, clean_lines, nesting_state, linenum,
-                          len(match_func.group(1)))
-
-    # Nothing before the function name.  If this is inside a block scope,
-    # this is probably a function call.
-    return not (nesting_state.previous_stack_top and
-                nesting_state.previous_stack_top.IsBlockInfo())
-
-  if match_symbol.group(2) == '>':
-    # Possibly a closing bracket, check that what's on the other side
-    # looks like the start of a template.
-    return IsTemplateParameterList(
-        clean_lines, start, len(match_symbol.group(1)))
-
-  # Some other symbol, usually something like "a=b&&c".  This is most
-  # likely not a type.
-  return False
-
-
-def IsDeletedOrDefault(clean_lines, linenum):
-  """Check if current constructor or operator is deleted or default.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-  Returns:
-    True if this is a deleted or default constructor.
-  """
-  open_paren = clean_lines.elided[linenum].find('(')
-  if open_paren < 0:
-    return False
-  (close_line, _, close_paren) = CloseExpression(
-      clean_lines, linenum, open_paren)
-  if close_paren < 0:
-    return False
-  return Match(r'\s*=\s*(?:delete|default)\b', close_line[close_paren:])
-
-
-def IsRValueAllowed(clean_lines, linenum, typenames):
-  """Check if RValue reference is allowed on a particular line.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    typenames: set of type names from template-argument-list.
-  Returns:
-    True if line is within the region where RValue references are allowed.
-  """
-  # Allow region marked by PUSH/POP macros
-  for i in xrange(linenum, 0, -1):
-    line = clean_lines.elided[i]
-    if Match(r'GOOGLE_ALLOW_RVALUE_REFERENCES_(?:PUSH|POP)', line):
-      if not line.endswith('PUSH'):
-        return False
-      for j in xrange(linenum, clean_lines.NumLines(), 1):
-        line = clean_lines.elided[j]
-        if Match(r'GOOGLE_ALLOW_RVALUE_REFERENCES_(?:PUSH|POP)', line):
-          return line.endswith('POP')
-
-  # Allow operator=
-  line = clean_lines.elided[linenum]
-  if Search(r'\boperator\s*=\s*\(', line):
-    return IsDeletedOrDefault(clean_lines, linenum)
-
-  # Allow constructors
-  match = Match(r'\s*(?:[\w<>]+::)*([\w<>]+)\s*::\s*([\w<>]+)\s*\(', line)
-  if match and match.group(1) == match.group(2):
-    return IsDeletedOrDefault(clean_lines, linenum)
-  if Search(r'\b(?:explicit|inline)\s+[\w<>]+\s*\(', line):
-    return IsDeletedOrDefault(clean_lines, linenum)
-
-  if Match(r'\s*[\w<>]+\s*\(', line):
-    previous_line = 'ReturnType'
-    if linenum > 0:
-      previous_line = clean_lines.elided[linenum - 1]
-    if Match(r'^\s*$', previous_line) or Search(r'[{}:;]\s*$', previous_line):
-      return IsDeletedOrDefault(clean_lines, linenum)
-
-  # Reject types not mentioned in template-argument-list
-  while line:
-    match = Match(r'^.*?(\w+)\s*&&(.*)$', line)
-    if not match:
-      break
-    if match.group(1) not in typenames:
-      return False
-    line = match.group(2)
-
-  # All RValue types that were in template-argument-list should have
-  # been removed by now.  Those were allowed, assuming that they will
-  # be forwarded.
-  #
-  # If there are no remaining RValue types left (i.e. types that were
-  # not found in template-argument-list), flag those as not allowed.
-  return line.find('&&') < 0
-
-
-def GetTemplateArgs(clean_lines, linenum):
-  """Find list of template arguments associated with this function declaration.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: Line number containing the start of the function declaration,
-             usually one line after the end of the template-argument-list.
-  Returns:
-    Set of type names, or empty set if this does not appear to have
-    any template parameters.
-  """
-  # Find start of function
-  func_line = linenum
-  while func_line > 0:
-    line = clean_lines.elided[func_line]
-    if Match(r'^\s*$', line):
-      return set()
-    if line.find('(') >= 0:
-      break
-    func_line -= 1
-  if func_line == 0:
-    return set()
-
-  # Collapse template-argument-list into a single string
-  argument_list = ''
-  match = Match(r'^(\s*template\s*)<', clean_lines.elided[func_line])
-  if match:
-    # template-argument-list on the same line as function name
-    start_col = len(match.group(1))
-    _, end_line, end_col = CloseExpression(clean_lines, func_line, start_col)
-    if end_col > -1 and end_line == func_line:
-      start_col += 1  # Skip the opening bracket
-      argument_list = clean_lines.elided[func_line][start_col:end_col]
-
-  elif func_line > 1:
-    # template-argument-list one line before function name
-    match = Match(r'^(.*)>\s*$', clean_lines.elided[func_line - 1])
-    if match:
-      end_col = len(match.group(1))
-      _, start_line, start_col = ReverseCloseExpression(
-          clean_lines, func_line - 1, end_col)
-      if start_col > -1:
-        start_col += 1  # Skip the opening bracket
-        while start_line < func_line - 1:
-          argument_list += clean_lines.elided[start_line][start_col:]
-          start_col = 0
-          start_line += 1
-        argument_list += clean_lines.elided[func_line - 1][start_col:end_col]
-
-  if not argument_list:
-    return set()
-
-  # Extract type names
-  typenames = set()
-  while True:
-    match = Match(r'^[,\s]*(?:typename|class)(?:\.\.\.)?\s+(\w+)(.*)$',
-                  argument_list)
-    if not match:
-      break
-    typenames.add(match.group(1))
-    argument_list = match.group(2)
-  return typenames
-
-
-def CheckRValueReference(filename, clean_lines, linenum, nesting_state, error):
-  """Check for rvalue references.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: The function to call with any errors found.
-  """
-  # Find lines missing spaces around &&.
-  # TODO(unknown): currently we don't check for rvalue references
-  # with spaces surrounding the && to avoid false positives with
-  # boolean expressions.
-  line = clean_lines.elided[linenum]
-  match = Match(r'^(.*\S)&&', line)
-  if not match:
-    match = Match(r'(.*)&&\S', line)
-  if (not match) or '(&&)' in line or Search(r'\boperator\s*$', match.group(1)):
-    return
-
-  # Either poorly formed && or an rvalue reference, check the context
-  # to get a more accurate error message.  Mostly we want to determine
-  # if what's to the left of "&&" is a type or not.
-  typenames = GetTemplateArgs(clean_lines, linenum)
-  and_pos = len(match.group(1))
-  if IsRValueType(typenames, clean_lines, nesting_state, linenum, and_pos):
-    if not IsRValueAllowed(clean_lines, linenum, typenames):
-      error(filename, linenum, 'build/c++11', 3,
-            'RValue references are an unapproved C++ feature.')
-  else:
-    error(filename, linenum, 'whitespace/operators', 3,
-          'Missing spaces around &&')
-
-
-def CheckSectionSpacing(filename, clean_lines, class_info, linenum, error):
-  """Checks for additional blank line issues related to sections.
-
-  Currently the only thing checked here is blank line before protected/private.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    class_info: A _ClassInfo objects.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  # Skip checks if the class is small, where small means 25 lines or less.
-  # 25 lines seems like a good cutoff since that's the usual height of
-  # terminals, and any class that can't fit in one screen can't really
-  # be considered "small".
-  #
-  # Also skip checks if we are on the first line.  This accounts for
-  # classes that look like
-  #   class Foo { public: ... };
-  #
-  # If we didn't find the end of the class, last_line would be zero,
-  # and the check will be skipped by the first condition.
-  if (class_info.last_line - class_info.starting_linenum <= 24 or
-      linenum <= class_info.starting_linenum):
-    return
-
-  matched = Match(r'\s*(public|protected|private):', clean_lines.lines[linenum])
-  if matched:
-    # Issue warning if the line before public/protected/private was
-    # not a blank line, but don't do this if the previous line contains
-    # "class" or "struct".  This can happen two ways:
-    #  - We are at the beginning of the class.
-    #  - We are forward-declaring an inner class that is semantically
-    #    private, but needed to be public for implementation reasons.
-    # Also ignores cases where the previous line ends with a backslash as can be
-    # common when defining classes in C macros.
-    prev_line = clean_lines.lines[linenum - 1]
-    if (not IsBlankLine(prev_line) and
-        not Search(r'\b(class|struct)\b', prev_line) and
-        not Search(r'\\$', prev_line)):
-      # Try a bit harder to find the beginning of the class.  This is to
-      # account for multi-line base-specifier lists, e.g.:
-      #   class Derived
-      #       : public Base {
-      end_class_head = class_info.starting_linenum
-      for i in range(class_info.starting_linenum, linenum):
-        if Search(r'\{\s*$', clean_lines.lines[i]):
-          end_class_head = i
-          break
-      if end_class_head < linenum - 1:
-        error(filename, linenum, 'whitespace/blank_line', 3,
-              '"%s:" should be preceded by a blank line' % matched.group(1))
-
-
-def GetPreviousNonBlankLine(clean_lines, linenum):
-  """Return the most recent non-blank line and its line number.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file contents.
-    linenum: The number of the line to check.
-
-  Returns:
-    A tuple with two elements.  The first element is the contents of the last
-    non-blank line before the current line, or the empty string if this is the
-    first non-blank line.  The second is the line number of that line, or -1
-    if this is the first non-blank line.
-  """
-
-  prevlinenum = linenum - 1
-  while prevlinenum >= 0:
-    prevline = clean_lines.elided[prevlinenum]
-    if not IsBlankLine(prevline):     # if not a blank line...
-      return (prevline, prevlinenum)
-    prevlinenum -= 1
-  return ('', -1)
-
-
-def CheckBraces(filename, clean_lines, linenum, error):
-  """Looks for misplaced braces (e.g. at the end of line).
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-
-  line = clean_lines.elided[linenum]        # get rid of comments and strings
-
-  if Match(r'\s*{\s*$', line):
-    # We allow an open brace to start a line in the case where someone is using
-    # braces in a block to explicitly create a new scope, which is commonly used
-    # to control the lifetime of stack-allocated variables.  Braces are also
-    # used for brace initializers inside function calls.  We don't detect this
-    # perfectly: we just don't complain if the last non-whitespace character on
-    # the previous non-blank line is ',', ';', ':', '(', '{', or '}', or if the
-    # previous line starts a preprocessor block.
-    prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
-    if (not Search(r'[,;:}{(]\s*$', prevline) and
-        not Match(r'\s*#', prevline)):
-      error(filename, linenum, 'whitespace/braces', 4,
-            '{ should almost always be at the end of the previous line')
-
-  # An else clause should be on the same line as the preceding closing brace.
-  if Match(r'\s*else\b\s*(?:if\b|\{|$)', line):
-    prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
-    if Match(r'\s*}\s*$', prevline):
-      error(filename, linenum, 'whitespace/newline', 4,
-            'An else should appear on the same line as the preceding }')
-
-  # If braces come on one side of an else, they should be on both.
-  # However, we have to worry about "else if" that spans multiple lines!
-  if Search(r'else if\s*\(', line):       # could be multi-line if
-    brace_on_left = bool(Search(r'}\s*else if\s*\(', line))
-    # find the ( after the if
-    pos = line.find('else if')
-    pos = line.find('(', pos)
-    if pos > 0:
-      (endline, _, endpos) = CloseExpression(clean_lines, linenum, pos)
-      brace_on_right = endline[endpos:].find('{') != -1
-      if brace_on_left != brace_on_right:    # must be brace after if
-        error(filename, linenum, 'readability/braces', 5,
-              'If an else has a brace on one side, it should have it on both')
-  elif Search(r'}\s*else[^{]*$', line) or Match(r'[^}]*else\s*{', line):
-    error(filename, linenum, 'readability/braces', 5,
-          'If an else has a brace on one side, it should have it on both')
-
-  # Likewise, an else should never have the else clause on the same line
-  if Search(r'\belse [^\s{]', line) and not Search(r'\belse if\b', line):
-    error(filename, linenum, 'whitespace/newline', 4,
-          'Else clause should never be on same line as else (use 2 lines)')
-
-  # In the same way, a do/while should never be on one line
-  if Match(r'\s*do [^\s{]', line):
-    error(filename, linenum, 'whitespace/newline', 4,
-          'do/while clauses should not be on a single line')
-
-  # Check single-line if/else bodies. The style guide says 'curly braces are not
-  # required for single-line statements'. We additionally allow multi-line,
-  # single statements, but we reject anything with more than one semicolon in
-  # it. This means that the first semicolon after the if should be at the end of
-  # its line, and the line after that should have an indent level equal to or
-  # lower than the if. We also check for ambiguous if/else nesting without
-  # braces.
-  if_else_match = Search(r'\b(if\s*\(|else\b)', line)
-  if if_else_match and not Match(r'\s*#', line):
-    if_indent = GetIndentLevel(line)
-    endline, endlinenum, endpos = line, linenum, if_else_match.end()
-    if_match = Search(r'\bif\s*\(', line)
-    if if_match:
-      # This could be a multiline if condition, so find the end first.
-      pos = if_match.end() - 1
-      (endline, endlinenum, endpos) = CloseExpression(clean_lines, linenum, pos)
-    # Check for an opening brace, either directly after the if or on the next
-    # line. If found, this isn't a single-statement conditional.
-    if (not Match(r'\s*{', endline[endpos:])
-        and not (Match(r'\s*$', endline[endpos:])
-                 and endlinenum < (len(clean_lines.elided) - 1)
-                 and Match(r'\s*{', clean_lines.elided[endlinenum + 1]))):
-      while (endlinenum < len(clean_lines.elided)
-             and ';' not in clean_lines.elided[endlinenum][endpos:]):
-        endlinenum += 1
-        endpos = 0
-      if endlinenum < len(clean_lines.elided):
-        endline = clean_lines.elided[endlinenum]
-        # We allow a mix of whitespace and closing braces (e.g. for one-liner
-        # methods) and a single \ after the semicolon (for macros)
-        endpos = endline.find(';')
-        if not Match(r';[\s}]*(\\?)$', endline[endpos:]):
-          # Semicolon isn't the last character, there's something trailing.
-          # Output a warning if the semicolon is not contained inside
-          # a lambda expression.
-          if not Match(r'^[^{};]*\[[^\[\]]*\][^{}]*\{[^{}]*\}\s*\)*[;,]\s*$',
-                       endline):
-            error(filename, linenum, 'readability/braces', 4,
-                  'If/else bodies with multiple statements require braces')
-        elif endlinenum < len(clean_lines.elided) - 1:
-          # Make sure the next line is dedented
-          next_line = clean_lines.elided[endlinenum + 1]
-          next_indent = GetIndentLevel(next_line)
-          # With ambiguous nested if statements, this will error out on the
-          # if that *doesn't* match the else, regardless of whether it's the
-          # inner one or outer one.
-          if (if_match and Match(r'\s*else\b', next_line)
-              and next_indent != if_indent):
-            error(filename, linenum, 'readability/braces', 4,
-                  'Else clause should be indented at the same level as if. '
-                  'Ambiguous nested if/else chains require braces.')
-          elif next_indent > if_indent:
-            error(filename, linenum, 'readability/braces', 4,
-                  'If/else bodies with multiple statements require braces')
-
-
-def CheckTrailingSemicolon(filename, clean_lines, linenum, error):
-  """Looks for redundant trailing semicolon.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-
-  line = clean_lines.elided[linenum]
-
-  # Block bodies should not be followed by a semicolon.  Due to C++11
-  # brace initialization, there are more places where semicolons are
-  # required than not, so we use a whitelist approach to check these
-  # rather than a blacklist.  These are the places where "};" should
-  # be replaced by just "}":
-  # 1. Some flavor of block following closing parenthesis:
-  #    for (;;) {};
-  #    while (...) {};
-  #    switch (...) {};
-  #    Function(...) {};
-  #    if (...) {};
-  #    if (...) else if (...) {};
-  #
-  # 2. else block:
-  #    if (...) else {};
-  #
-  # 3. const member function:
-  #    Function(...) const {};
-  #
-  # 4. Block following some statement:
-  #    x = 42;
-  #    {};
-  #
-  # 5. Block at the beginning of a function:
-  #    Function(...) {
-  #      {};
-  #    }
-  #
-  #    Note that naively checking for the preceding "{" will also match
-  #    braces inside multi-dimensional arrays, but this is fine since
-  #    that expression will not contain semicolons.
-  #
-  # 6. Block following another block:
-  #    while (true) {}
-  #    {};
-  #
-  # 7. End of namespaces:
-  #    namespace {};
-  #
-  #    These semicolons seems far more common than other kinds of
-  #    redundant semicolons, possibly due to people converting classes
-  #    to namespaces.  For now we do not warn for this case.
-  #
-  # Try matching case 1 first.
-  match = Match(r'^(.*\)\s*)\{', line)
-  if match:
-    # Matched closing parenthesis (case 1).  Check the token before the
-    # matching opening parenthesis, and don't warn if it looks like a
-    # macro.  This avoids these false positives:
-    #  - macro that defines a base class
-    #  - multi-line macro that defines a base class
-    #  - macro that defines the whole class-head
-    #
-    # But we still issue warnings for macros that we know are safe to
-    # warn, specifically:
-    #  - TEST, TEST_F, TEST_P, MATCHER, MATCHER_P
-    #  - TYPED_TEST
-    #  - INTERFACE_DEF
-    #  - EXCLUSIVE_LOCKS_REQUIRED, SHARED_LOCKS_REQUIRED, LOCKS_EXCLUDED:
-    #
-    # We implement a whitelist of safe macros instead of a blacklist of
-    # unsafe macros, even though the latter appears less frequently in
-    # google code and would have been easier to implement.  This is because
-    # the downside for getting the whitelist wrong means some extra
-    # semicolons, while the downside for getting the blacklist wrong
-    # would result in compile errors.
-    #
-    # In addition to macros, we also don't want to warn on
-    #  - Compound literals
-    #  - Lambdas
-    #  - alignas specifier with anonymous structs:
-    closing_brace_pos = match.group(1).rfind(')')
-    opening_parenthesis = ReverseCloseExpression(
-        clean_lines, linenum, closing_brace_pos)
-    if opening_parenthesis[2] > -1:
-      line_prefix = opening_parenthesis[0][0:opening_parenthesis[2]]
-      macro = Search(r'\b([A-Z_]+)\s*$', line_prefix)
-      func = Match(r'^(.*\])\s*$', line_prefix)
-      if ((macro and
-           macro.group(1) not in (
-               'TEST', 'TEST_F', 'MATCHER', 'MATCHER_P', 'TYPED_TEST',
-               'EXCLUSIVE_LOCKS_REQUIRED', 'SHARED_LOCKS_REQUIRED',
-               'LOCKS_EXCLUDED', 'INTERFACE_DEF')) or
-          (func and not Search(r'\boperator\s*\[\s*\]', func.group(1))) or
-          Search(r'\b(?:struct|union)\s+alignas\s*$', line_prefix) or
-          Search(r'\s+=\s*$', line_prefix)):
-        match = None
-    if (match and
-        opening_parenthesis[1] > 1 and
-        Search(r'\]\s*$', clean_lines.elided[opening_parenthesis[1] - 1])):
-      # Multi-line lambda-expression
-      match = None
-
-  else:
-    # Try matching cases 2-3.
-    match = Match(r'^(.*(?:else|\)\s*const)\s*)\{', line)
-    if not match:
-      # Try matching cases 4-6.  These are always matched on separate lines.
-      #
-      # Note that we can't simply concatenate the previous line to the
-      # current line and do a single match, otherwise we may output
-      # duplicate warnings for the blank line case:
-      #   if (cond) {
-      #     // blank line
-      #   }
-      prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
-      if prevline and Search(r'[;{}]\s*$', prevline):
-        match = Match(r'^(\s*)\{', line)
-
-  # Check matching closing brace
-  if match:
-    (endline, endlinenum, endpos) = CloseExpression(
-        clean_lines, linenum, len(match.group(1)))
-    if endpos > -1 and Match(r'^\s*;', endline[endpos:]):
-      # Current {} pair is eligible for semicolon check, and we have found
-      # the redundant semicolon, output warning here.
-      #
-      # Note: because we are scanning forward for opening braces, and
-      # outputting warnings for the matching closing brace, if there are
-      # nested blocks with trailing semicolons, we will get the error
-      # messages in reversed order.
-      error(filename, endlinenum, 'readability/braces', 4,
-            "You don't need a ; after a }")
-
-
-def CheckEmptyBlockBody(filename, clean_lines, linenum, error):
-  """Look for empty loop/conditional body with only a single semicolon.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-
-  # Search for loop keywords at the beginning of the line.  Because only
-  # whitespaces are allowed before the keywords, this will also ignore most
-  # do-while-loops, since those lines should start with closing brace.
-  #
-  # We also check "if" blocks here, since an empty conditional block
-  # is likely an error.
-  line = clean_lines.elided[linenum]
-  matched = Match(r'\s*(for|while|if)\s*\(', line)
-  if matched:
-    # Find the end of the conditional expression
-    (end_line, end_linenum, end_pos) = CloseExpression(
-        clean_lines, linenum, line.find('('))
-
-    # Output warning if what follows the condition expression is a semicolon.
-    # No warning for all other cases, including whitespace or newline, since we
-    # have a separate check for semicolons preceded by whitespace.
-    if end_pos >= 0 and Match(r';', end_line[end_pos:]):
-      if matched.group(1) == 'if':
-        error(filename, end_linenum, 'whitespace/empty_conditional_body', 5,
-              'Empty conditional bodies should use {}')
-      else:
-        error(filename, end_linenum, 'whitespace/empty_loop_body', 5,
-              'Empty loop bodies should use {} or continue')
-
-
-def FindCheckMacro(line):
-  """Find a replaceable CHECK-like macro.
-
-  Args:
-    line: line to search on.
-  Returns:
-    (macro name, start position), or (None, -1) if no replaceable
-    macro is found.
-  """
-  for macro in _CHECK_MACROS:
-    i = line.find(macro)
-    if i >= 0:
-      # Find opening parenthesis.  Do a regular expression match here
-      # to make sure that we are matching the expected CHECK macro, as
-      # opposed to some other macro that happens to contain the CHECK
-      # substring.
-      matched = Match(r'^(.*\b' + macro + r'\s*)\(', line)
-      if not matched:
-        continue
-      return (macro, len(matched.group(1)))
-  return (None, -1)
-
-
-def CheckCheck(filename, clean_lines, linenum, error):
-  """Checks the use of CHECK and EXPECT macros.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-
-  # Decide the set of replacement macros that should be suggested
-  lines = clean_lines.elided
-  (check_macro, start_pos) = FindCheckMacro(lines[linenum])
-  if not check_macro:
-    return
-
-  # Find end of the boolean expression by matching parentheses
-  (last_line, end_line, end_pos) = CloseExpression(
-      clean_lines, linenum, start_pos)
-  if end_pos < 0:
-    return
-
-  # If the check macro is followed by something other than a
-  # semicolon, assume users will log their own custom error messages
-  # and don't suggest any replacements.
-  if not Match(r'\s*;', last_line[end_pos:]):
-    return
-
-  if linenum == end_line:
-    expression = lines[linenum][start_pos + 1:end_pos - 1]
-  else:
-    expression = lines[linenum][start_pos + 1:]
-    for i in xrange(linenum + 1, end_line):
-      expression += lines[i]
-    expression += last_line[0:end_pos - 1]
-
-  # Parse expression so that we can take parentheses into account.
-  # This avoids false positives for inputs like "CHECK((a < 4) == b)",
-  # which is not replaceable by CHECK_LE.
-  lhs = ''
-  rhs = ''
-  operator = None
-  while expression:
-    matched = Match(r'^\s*(<<|<<=|>>|>>=|->\*|->|&&|\|\||'
-                    r'==|!=|>=|>|<=|<|\()(.*)$', expression)
-    if matched:
-      token = matched.group(1)
-      if token == '(':
-        # Parenthesized operand
-        expression = matched.group(2)
-        (end, _) = FindEndOfExpressionInLine(expression, 0, ['('])
-        if end < 0:
-          return  # Unmatched parenthesis
-        lhs += '(' + expression[0:end]
-        expression = expression[end:]
-      elif token in ('&&', '||'):
-        # Logical and/or operators.  This means the expression
-        # contains more than one term, for example:
-        #   CHECK(42 < a && a < b);
-        #
-        # These are not replaceable with CHECK_LE, so bail out early.
-        return
-      elif token in ('<<', '<<=', '>>', '>>=', '->*', '->'):
-        # Non-relational operator
-        lhs += token
-        expression = matched.group(2)
-      else:
-        # Relational operator
-        operator = token
-        rhs = matched.group(2)
-        break
-    else:
-      # Unparenthesized operand.  Instead of appending to lhs one character
-      # at a time, we do another regular expression match to consume several
-      # characters at once if possible.  Trivial benchmark shows that this
-      # is more efficient when the operands are longer than a single
-      # character, which is generally the case.
-      matched = Match(r'^([^-=!<>()&|]+)(.*)$', expression)
-      if not matched:
-        matched = Match(r'^(\s*\S)(.*)$', expression)
-        if not matched:
-          break
-      lhs += matched.group(1)
-      expression = matched.group(2)
-
-  # Only apply checks if we got all parts of the boolean expression
-  if not (lhs and operator and rhs):
-    return
-
-  # Check that rhs do not contain logical operators.  We already know
-  # that lhs is fine since the loop above parses out && and ||.
-  if rhs.find('&&') > -1 or rhs.find('||') > -1:
-    return
-
-  # At least one of the operands must be a constant literal.  This is
-  # to avoid suggesting replacements for unprintable things like
-  # CHECK(variable != iterator)
-  #
-  # The following pattern matches decimal, hex integers, strings, and
-  # characters (in that order).
-  lhs = lhs.strip()
-  rhs = rhs.strip()
-  match_constant = r'^([-+]?(\d+|0[xX][0-9a-fA-F]+)[lLuU]{0,3}|".*"|\'.*\')$'
-  if Match(match_constant, lhs) or Match(match_constant, rhs):
-    # Note: since we know both lhs and rhs, we can provide a more
-    # descriptive error message like:
-    #   Consider using CHECK_EQ(x, 42) instead of CHECK(x == 42)
-    # Instead of:
-    #   Consider using CHECK_EQ instead of CHECK(a == b)
-    #
-    # We are still keeping the less descriptive message because if lhs
-    # or rhs gets long, the error message might become unreadable.
-    error(filename, linenum, 'readability/check', 2,
-          'Consider using %s instead of %s(a %s b)' % (
-              _CHECK_REPLACEMENT[check_macro][operator],
-              check_macro, operator))
-
-
-def CheckAltTokens(filename, clean_lines, linenum, error):
-  """Check alternative keywords being used in boolean expressions.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Avoid preprocessor lines
-  if Match(r'^\s*#', line):
-    return
-
-  # Last ditch effort to avoid multi-line comments.  This will not help
-  # if the comment started before the current line or ended after the
-  # current line, but it catches most of the false positives.  At least,
-  # it provides a way to workaround this warning for people who use
-  # multi-line comments in preprocessor macros.
-  #
-  # TODO(unknown): remove this once cpplint has better support for
-  # multi-line comments.
-  if line.find('/*') >= 0 or line.find('*/') >= 0:
-    return
-
-  for match in _ALT_TOKEN_REPLACEMENT_PATTERN.finditer(line):
-    error(filename, linenum, 'readability/alt_tokens', 2,
-          'Use operator %s instead of %s' % (
-              _ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1)))
-
-
-def GetLineWidth(line):
-  """Determines the width of the line in column positions.
-
-  Args:
-    line: A string, which may be a Unicode string.
-
-  Returns:
-    The width of the line in column positions, accounting for Unicode
-    combining characters and wide characters.
-  """
-  if isinstance(line, unicode):
-    width = 0
-    for uc in unicodedata.normalize('NFC', line):
-      if unicodedata.east_asian_width(uc) in ('W', 'F'):
-        width += 2
-      elif not unicodedata.combining(uc):
-        width += 1
-    return width
-  else:
-    return len(line)
-
-
-def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
-               error):
-  """Checks rules from the 'C++ style rules' section of cppguide.html.
-
-  Most of these rules are hard to test (naming, comment style), but we
-  do what we can.  In particular we check for 2-space indents, line lengths,
-  tab usage, spaces inside code, etc.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    file_extension: The extension (without the dot) of the filename.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: The function to call with any errors found.
-  """
-
-  # Don't use "elided" lines here, otherwise we can't check commented lines.
-  # Don't want to use "raw" either, because we don't want to check inside C++11
-  # raw strings,
-  raw_lines = clean_lines.lines_without_raw_strings
-  line = raw_lines[linenum]
-
-  if line.find('\t') != -1:
-    error(filename, linenum, 'whitespace/tab', 1,
-          'Tab found; better to use spaces')
-
-  # One or three blank spaces at the beginning of the line is weird; it's
-  # hard to reconcile that with 2-space indents.
-  # NOTE: here are the conditions rob pike used for his tests.  Mine aren't
-  # as sophisticated, but it may be worth becoming so:  RLENGTH==initial_spaces
-  # if(RLENGTH > 20) complain = 0;
-  # if(match($0, " +(error|private|public|protected):")) complain = 0;
-  # if(match(prev, "&& *$")) complain = 0;
-  # if(match(prev, "\\|\\| *$")) complain = 0;
-  # if(match(prev, "[\",=><] *$")) complain = 0;
-  # if(match($0, " <<")) complain = 0;
-  # if(match(prev, " +for \\(")) complain = 0;
-  # if(prevodd && match(prevprev, " +for \\(")) complain = 0;
-  scope_or_label_pattern = r'\s*\w+\s*:\s*\\?$'
-  classinfo = nesting_state.InnermostClass()
-  initial_spaces = 0
-  cleansed_line = clean_lines.elided[linenum]
-  while initial_spaces < len(line) and line[initial_spaces] == ' ':
-    initial_spaces += 1
-  if line and line[-1].isspace():
-    error(filename, linenum, 'whitespace/end_of_line', 4,
-          'Line ends in whitespace.  Consider deleting these extra spaces.')
-  # There are certain situations we allow one space, notably for
-  # section labels, and also lines containing multi-line raw strings.
-  elif ((initial_spaces == 1 or initial_spaces == 3) and
-        not Match(scope_or_label_pattern, cleansed_line) and
-        not (clean_lines.raw_lines[linenum] != line and
-             Match(r'^\s*""', line))):
-    error(filename, linenum, 'whitespace/indent', 3,
-          'Weird number of spaces at line-start.  '
-          'Are you using a 2-space indent?')
-
-  # Check if the line is a header guard.
-  is_header_guard = False
-  if file_extension == 'h' or file_extension == 'hpp':
-    cppvar = GetHeaderGuardCPPVariable(filename)
-    if (line.startswith('#ifndef %s' % cppvar) or
-        line.startswith('#define %s' % cppvar) or
-        line.startswith('#endif  // %s' % cppvar)):
-      is_header_guard = True
-  # #include lines and header guards can be long, since there's no clean way to
-  # split them.
-  #
-  # URLs can be long too.  It's possible to split these, but it makes them
-  # harder to cut&paste.
-  #
-  # The "$Id:...$" comment may also get very long without it being the
-  # developers fault.
-  if (not line.startswith('#include') and not is_header_guard and
-      not Match(r'^\s*//.*http(s?)://\S*$', line) and
-      not Match(r'^// \$Id:.*#[0-9]+ \$$', line)):
-    line_width = GetLineWidth(line)
-    extended_length = int((_line_length * 1.25))
-    if line_width > extended_length:
-      error(filename, linenum, 'whitespace/line_length', 4,
-            'Lines should very rarely be longer than %i characters' %
-            extended_length)
-    elif line_width > _line_length:
-      error(filename, linenum, 'whitespace/line_length', 2,
-            'Lines should be <= %i characters long' % _line_length)
-
-  if (cleansed_line.count(';') > 1 and
-      # for loops are allowed two ;'s (and may run over two lines).
-      cleansed_line.find('for') == -1 and
-      (GetPreviousNonBlankLine(clean_lines, linenum)[0].find('for') == -1 or
-       GetPreviousNonBlankLine(clean_lines, linenum)[0].find(';') != -1) and
-      # It's ok to have many commands in a switch case that fits in 1 line
-      not ((cleansed_line.find('case ') != -1 or
-            cleansed_line.find('default:') != -1) and
-           cleansed_line.find('break;') != -1)):
-    error(filename, linenum, 'whitespace/newline', 0,
-          'More than one command on the same line')
-
-  # Some more style checks
-  CheckBraces(filename, clean_lines, linenum, error)
-  CheckTrailingSemicolon(filename, clean_lines, linenum, error)
-  CheckEmptyBlockBody(filename, clean_lines, linenum, error)
-  CheckAccess(filename, clean_lines, linenum, nesting_state, error)
-  CheckSpacing(filename, clean_lines, linenum, nesting_state, error)
-  CheckOperatorSpacing(filename, clean_lines, linenum, error)
-  CheckParenthesisSpacing(filename, clean_lines, linenum, error)
-  CheckCommaSpacing(filename, clean_lines, linenum, error)
-  CheckBracesSpacing(filename, clean_lines, linenum, error)
-  CheckSpacingForFunctionCall(filename, clean_lines, linenum, error)
-  CheckRValueReference(filename, clean_lines, linenum, nesting_state, error)
-  CheckCheck(filename, clean_lines, linenum, error)
-  CheckAltTokens(filename, clean_lines, linenum, error)
-  classinfo = nesting_state.InnermostClass()
-  if classinfo:
-    CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error)
-
-
-_RE_PATTERN_INCLUDE = re.compile(r'^\s*#\s*include\s*([<"])([^>"]*)[>"].*$')
-# Matches the first component of a filename delimited by -s and _s. That is:
-#  _RE_FIRST_COMPONENT.match('foo').group(0) == 'foo'
-#  _RE_FIRST_COMPONENT.match('foo.cc').group(0) == 'foo'
-#  _RE_FIRST_COMPONENT.match('foo-bar_baz.cc').group(0) == 'foo'
-#  _RE_FIRST_COMPONENT.match('foo_bar-baz.cc').group(0) == 'foo'
-_RE_FIRST_COMPONENT = re.compile(r'^[^-_.]+')
-
-
-def _DropCommonSuffixes(filename):
-  """Drops common suffixes like _test.cc or -inl.h from filename.
-
-  For example:
-    >>> _DropCommonSuffixes('foo/foo-inl.h')
-    'foo/foo'
-    >>> _DropCommonSuffixes('foo/bar/foo.cc')
-    'foo/bar/foo'
-    >>> _DropCommonSuffixes('foo/foo_internal.h')
-    'foo/foo'
-    >>> _DropCommonSuffixes('foo/foo_unusualinternal.h')
-    'foo/foo_unusualinternal'
-
-  Args:
-    filename: The input filename.
-
-  Returns:
-    The filename with the common suffix removed.
-  """
-  for suffix in ('test.cc', 'regtest.cc', 'unittest.cc',
-                 'inl.h', 'impl.h', 'internal.h'):
-    if (filename.endswith(suffix) and len(filename) > len(suffix) and
-        filename[-len(suffix) - 1] in ('-', '_')):
-      return filename[:-len(suffix) - 1]
-  return os.path.splitext(filename)[0]
-
-
-def _IsTestFilename(filename):
-  """Determines if the given filename has a suffix that identifies it as a test.
-
-  Args:
-    filename: The input filename.
-
-  Returns:
-    True if 'filename' looks like a test, False otherwise.
-  """
-  if (filename.endswith('_test.cc') or
-      filename.endswith('_unittest.cc') or
-      filename.endswith('_regtest.cc')):
-    return True
-  else:
-    return False
-
-
-def _ClassifyInclude(fileinfo, include, is_system):
-  """Figures out what kind of header 'include' is.
-
-  Args:
-    fileinfo: The current file cpplint is running over. A FileInfo instance.
-    include: The path to a #included file.
-    is_system: True if the #include used <> rather than "".
-
-  Returns:
-    One of the _XXX_HEADER constants.
-
-  For example:
-    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'stdio.h', True)
-    _C_SYS_HEADER
-    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'string', True)
-    _CPP_SYS_HEADER
-    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', False)
-    _LIKELY_MY_HEADER
-    >>> _ClassifyInclude(FileInfo('foo/foo_unknown_extension.cc'),
-    ...                  'bar/foo_other_ext.h', False)
-    _POSSIBLE_MY_HEADER
-    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/bar.h', False)
-    _OTHER_HEADER
-  """
-  # This is a list of all standard c++ header files, except
-  # those already checked for above.
-  is_cpp_h = include in _CPP_HEADERS
-
-  if is_system:
-    if is_cpp_h:
-      return _CPP_SYS_HEADER
-    else:
-      return _C_SYS_HEADER
-
-  # If the target file and the include we're checking share a
-  # basename when we drop common extensions, and the include
-  # lives in . , then it's likely to be owned by the target file.
-  target_dir, target_base = (
-      os.path.split(_DropCommonSuffixes(fileinfo.RepositoryName())))
-  include_dir, include_base = os.path.split(_DropCommonSuffixes(include))
-  if target_base == include_base and (
-      include_dir == target_dir or
-      include_dir == os.path.normpath(target_dir + '/../public')):
-    return _LIKELY_MY_HEADER
-
-  # If the target and include share some initial basename
-  # component, it's possible the target is implementing the
-  # include, so it's allowed to be first, but we'll never
-  # complain if it's not there.
-  target_first_component = _RE_FIRST_COMPONENT.match(target_base)
-  include_first_component = _RE_FIRST_COMPONENT.match(include_base)
-  if (target_first_component and include_first_component and
-      target_first_component.group(0) ==
-      include_first_component.group(0)):
-    return _POSSIBLE_MY_HEADER
-
-  return _OTHER_HEADER
-
-
-
-def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
-  """Check rules that are applicable to #include lines.
-
-  Strings on #include lines are NOT removed from elided line, to make
-  certain tasks easier. However, to prevent false positives, checks
-  applicable to #include lines in CheckLanguage must be put here.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    include_state: An _IncludeState instance in which the headers are inserted.
-    error: The function to call with any errors found.
-  """
-  fileinfo = FileInfo(filename)
-  line = clean_lines.lines[linenum]
-
-  # "include" should use the new style "foo/bar.h" instead of just "bar.h"
-  # Only do this check if the included header follows google naming
-  # conventions.  If not, assume that it's a 3rd party API that
-  # requires special include conventions.
-  #
-  # We also make an exception for Lua headers, which follow google
-  # naming convention but not the include convention.
-  match = Match(r'#include\s*"([^/]+\.h)"', line)
-  if match and not _THIRD_PARTY_HEADERS_PATTERN.match(match.group(1)):
-    error(filename, linenum, 'build/include', 4,
-          'Include the directory when naming .h files')
-
-  # we shouldn't include a file more than once. actually, there are a
-  # handful of instances where doing so is okay, but in general it's
-  # not.
-  match = _RE_PATTERN_INCLUDE.search(line)
-  if match:
-    include = match.group(2)
-    is_system = (match.group(1) == '<')
-    duplicate_line = include_state.FindHeader(include)
-    if duplicate_line >= 0:
-      error(filename, linenum, 'build/include', 4,
-            '"%s" already included at %s:%s' %
-            (include, filename, duplicate_line))
-    elif (include.endswith('.cc') and
-          os.path.dirname(fileinfo.RepositoryName()) != os.path.dirname(include)):
-      error(filename, linenum, 'build/include', 4,
-            'Do not include .cc files from other packages')
-    elif not _THIRD_PARTY_HEADERS_PATTERN.match(include):
-      include_state.include_list[-1].append((include, linenum))
-
-      # We want to ensure that headers appear in the right order:
-      # 1) for foo.cc, foo.h  (preferred location)
-      # 2) c system files
-      # 3) cpp system files
-      # 4) for foo.cc, foo.h  (deprecated location)
-      # 5) other google headers
-      #
-      # We classify each include statement as one of those 5 types
-      # using a number of techniques. The include_state object keeps
-      # track of the highest type seen, and complains if we see a
-      # lower type after that.
-      error_message = include_state.CheckNextIncludeOrder(
-          _ClassifyInclude(fileinfo, include, is_system))
-      if error_message:
-        error(filename, linenum, 'build/include_order', 4,
-              '%s. Should be: %s.h, c system, c++ system, other.' %
-              (error_message, fileinfo.BaseName()))
-      canonical_include = include_state.CanonicalizeAlphabeticalOrder(include)
-      if not include_state.IsInAlphabeticalOrder(
-          clean_lines, linenum, canonical_include):
-        error(filename, linenum, 'build/include_alpha', 4,
-              'Include "%s" not in alphabetical order' % include)
-      include_state.SetLastHeader(canonical_include)
-
-
-
-def _GetTextInside(text, start_pattern):
-  r"""Retrieves all the text between matching open and close parentheses.
-
-  Given a string of lines and a regular expression string, retrieve all the text
-  following the expression and between opening punctuation symbols like
-  (, [, or {, and the matching close-punctuation symbol. This properly nested
-  occurrences of the punctuations, so for the text like
-    printf(a(), b(c()));
-  a call to _GetTextInside(text, r'printf\(') will return 'a(), b(c())'.
-  start_pattern must match string having an open punctuation symbol at the end.
-
-  Args:
-    text: The lines to extract text. Its comments and strings must be elided.
-           It can be single line and can span multiple lines.
-    start_pattern: The regexp string indicating where to start extracting
-                   the text.
-  Returns:
-    The extracted text.
-    None if either the opening string or ending punctuation could not be found.
-  """
-  # TODO(unknown): Audit cpplint.py to see what places could be profitably
-  # rewritten to use _GetTextInside (and use inferior regexp matching today).
-
-  # Give opening punctuations to get the matching close-punctuations.
-  matching_punctuation = {'(': ')', '{': '}', '[': ']'}
-  closing_punctuation = set(matching_punctuation.itervalues())
-
-  # Find the position to start extracting text.
-  match = re.search(start_pattern, text, re.M)
-  if not match:  # start_pattern not found in text.
-    return None
-  start_position = match.end(0)
-
-  assert start_position > 0, (
-      'start_pattern must ends with an opening punctuation.')
-  assert text[start_position - 1] in matching_punctuation, (
-      'start_pattern must ends with an opening punctuation.')
-  # Stack of closing punctuations we expect to have in text after position.
-  punctuation_stack = [matching_punctuation[text[start_position - 1]]]
-  position = start_position
-  while punctuation_stack and position < len(text):
-    if text[position] == punctuation_stack[-1]:
-      punctuation_stack.pop()
-    elif text[position] in closing_punctuation:
-      # A closing punctuation without matching opening punctuations.
-      return None
-    elif text[position] in matching_punctuation:
-      punctuation_stack.append(matching_punctuation[text[position]])
-    position += 1
-  if punctuation_stack:
-    # Opening punctuations left without matching close-punctuations.
-    return None
-  # punctuations match.
-  return text[start_position:position - 1]
-
-
-# Patterns for matching call-by-reference parameters.
-#
-# Supports nested templates up to 2 levels deep using this messy pattern:
-#   < (?: < (?: < [^<>]*
-#               >
-#           |   [^<>] )*
-#         >
-#     |   [^<>] )*
-#   >
-_RE_PATTERN_IDENT = r'[_a-zA-Z]\w*'  # =~ [[:alpha:]][[:alnum:]]*
-_RE_PATTERN_TYPE = (
-    r'(?:const\s+)?(?:typename\s+|class\s+|struct\s+|union\s+|enum\s+)?'
-    r'(?:\w|'
-    r'\s*<(?:<(?:<[^<>]*>|[^<>])*>|[^<>])*>|'
-    r'::)+')
-# A call-by-reference parameter ends with '& identifier'.
-_RE_PATTERN_REF_PARAM = re.compile(
-    r'(' + _RE_PATTERN_TYPE + r'(?:\s*(?:\bconst\b|[*]))*\s*'
-    r'&\s*' + _RE_PATTERN_IDENT + r')\s*(?:=[^,()]+)?[,)]')
-# A call-by-const-reference parameter either ends with 'const& identifier'
-# or looks like 'const type& identifier' when 'type' is atomic.
-_RE_PATTERN_CONST_REF_PARAM = (
-    r'(?:.*\s*\bconst\s*&\s*' + _RE_PATTERN_IDENT +
-    r'|const\s+' + _RE_PATTERN_TYPE + r'\s*&\s*' + _RE_PATTERN_IDENT + r')')
-
-
-def CheckLanguage(filename, clean_lines, linenum, file_extension,
-                  include_state, nesting_state, error):
-  """Checks rules from the 'C++ language rules' section of cppguide.html.
-
-  Some of these rules are hard to test (function overloading, using
-  uint32 inappropriately), but we do the best we can.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    file_extension: The extension (without the dot) of the filename.
-    include_state: An _IncludeState instance in which the headers are inserted.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: The function to call with any errors found.
-  """
-  # If the line is empty or consists of entirely a comment, no need to
-  # check it.
-  line = clean_lines.elided[linenum]
-  if not line:
-    return
-
-  match = _RE_PATTERN_INCLUDE.search(line)
-  if match:
-    CheckIncludeLine(filename, clean_lines, linenum, include_state, error)
-    return
-
-  # Reset include state across preprocessor directives.  This is meant
-  # to silence warnings for conditional includes.
-  match = Match(r'^\s*#\s*(if|ifdef|ifndef|elif|else|endif)\b', line)
-  if match:
-    include_state.ResetSection(match.group(1))
-
-  # Make Windows paths like Unix.
-  fullname = os.path.abspath(filename).replace('\\', '/')
-  
-  # Perform other checks now that we are sure that this is not an include line
-  CheckCasts(filename, clean_lines, linenum, error)
-  CheckGlobalStatic(filename, clean_lines, linenum, error)
-  CheckPrintf(filename, clean_lines, linenum, error)
-
-  if file_extension == 'h':
-    # TODO(unknown): check that 1-arg constructors are explicit.
-    #                How to tell it's a constructor?
-    #                (handled in CheckForNonStandardConstructs for now)
-    # TODO(unknown): check that classes declare or disable copy/assign
-    #                (level 1 error)
-    pass
-
-  # Check if people are using the verboten C basic types.  The only exception
-  # we regularly allow is "unsigned short port" for port.
-  if Search(r'\bshort port\b', line):
-    if not Search(r'\bunsigned short port\b', line):
-      error(filename, linenum, 'runtime/int', 4,
-            'Use "unsigned short" for ports, not "short"')
-  else:
-    match = Search(r'\b(short|long(?! +double)|long long)\b', line)
-    if match:
-      error(filename, linenum, 'runtime/int', 4,
-            'Use int16/int64/etc, rather than the C type %s' % match.group(1))
-
-  # Check if some verboten operator overloading is going on
-  # TODO(unknown): catch out-of-line unary operator&:
-  #   class X {};
-  #   int operator&(const X& x) { return 42; }  // unary operator&
-  # The trick is it's hard to tell apart from binary operator&:
-  #   class Y { int operator&(const Y& x) { return 23; } }; // binary operator&
-  if Search(r'\boperator\s*&\s*\(\s*\)', line):
-    error(filename, linenum, 'runtime/operator', 4,
-          'Unary operator& is dangerous.  Do not use it.')
-
-  # Check for suspicious usage of "if" like
-  # } if (a == b) {
-  if Search(r'\}\s*if\s*\(', line):
-    error(filename, linenum, 'readability/braces', 4,
-          'Did you mean "else if"? If not, start a new line for "if".')
-
-  # Check for potential format string bugs like printf(foo).
-  # We constrain the pattern not to pick things like DocidForPrintf(foo).
-  # Not perfect but it can catch printf(foo.c_str()) and printf(foo->c_str())
-  # TODO(unknown): Catch the following case. Need to change the calling
-  # convention of the whole function to process multiple line to handle it.
-  #   printf(
-  #       boy_this_is_a_really_long_variable_that_cannot_fit_on_the_prev_line);
-  printf_args = _GetTextInside(line, r'(?i)\b(string)?printf\s*\(')
-  if printf_args:
-    match = Match(r'([\w.\->()]+)$', printf_args)
-    if match and match.group(1) != '__VA_ARGS__':
-      function_name = re.search(r'\b((?:string)?printf)\s*\(',
-                                line, re.I).group(1)
-      error(filename, linenum, 'runtime/printf', 4,
-            'Potential format string bug. Do %s("%%s", %s) instead.'
-            % (function_name, match.group(1)))
-
-  # Check for potential memset bugs like memset(buf, sizeof(buf), 0).
-  match = Search(r'memset\s*\(([^,]*),\s*([^,]*),\s*0\s*\)', line)
-  if match and not Match(r"^''|-?[0-9]+|0x[0-9A-Fa-f]$", match.group(2)):
-    error(filename, linenum, 'runtime/memset', 4,
-          'Did you mean "memset(%s, 0, %s)"?'
-          % (match.group(1), match.group(2)))
-
-  if Search(r'\busing namespace\b', line):
-    error(filename, linenum, 'build/namespaces', 5,
-          'Do not use namespace using-directives.  '
-          'Use using-declarations instead.')
-
-  # Detect variable-length arrays.
-  match = Match(r'\s*(.+::)?(\w+) [a-z]\w*\[(.+)];', line)
-  if (match and match.group(2) != 'return' and match.group(2) != 'delete' and
-      match.group(3).find(']') == -1):
-    # Split the size using space and arithmetic operators as delimiters.
-    # If any of the resulting tokens are not compile time constants then
-    # report the error.
-    tokens = re.split(r'\s|\+|\-|\*|\/|<<|>>]', match.group(3))
-    is_const = True
-    skip_next = False
-    for tok in tokens:
-      if skip_next:
-        skip_next = False
-        continue
-
-      if Search(r'sizeof\(.+\)', tok): continue
-      if Search(r'arraysize\(\w+\)', tok): continue
-
-      tok = tok.lstrip('(')
-      tok = tok.rstrip(')')
-      if not tok: continue
-      if Match(r'\d+', tok): continue
-      if Match(r'0[xX][0-9a-fA-F]+', tok): continue
-      if Match(r'k[A-Z0-9]\w*', tok): continue
-      if Match(r'(.+::)?k[A-Z0-9]\w*', tok): continue
-      if Match(r'(.+::)?[A-Z][A-Z0-9_]*', tok): continue
-      # A catch all for tricky sizeof cases, including 'sizeof expression',
-      # 'sizeof(*type)', 'sizeof(const type)', 'sizeof(struct StructName)'
-      # requires skipping the next token because we split on ' ' and '*'.
-      if tok.startswith('sizeof'):
-        skip_next = True
-        continue
-      is_const = False
-      break
-    if not is_const:
-      error(filename, linenum, 'runtime/arrays', 1,
-            'Do not use variable-length arrays.  Use an appropriately named '
-            "('k' followed by CamelCase) compile-time constant for the size.")
-
-  # Check for use of unnamed namespaces in header files.  Registration
-  # macros are typically OK, so we allow use of "namespace {" on lines
-  # that end with backslashes.
-  if (file_extension == 'h'
-      and Search(r'\bnamespace\s*{', line)
-      and line[-1] != '\\'):
-    error(filename, linenum, 'build/namespaces', 4,
-          'Do not use unnamed namespaces in header files.  See '
-          'http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces'
-          ' for more information.')
-
-
-def CheckGlobalStatic(filename, clean_lines, linenum, error):
-  """Check for unsafe global or static objects.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Match two lines at a time to support multiline declarations
-  if linenum + 1 < clean_lines.NumLines() and not Search(r'[;({]', line):
-    line += clean_lines.elided[linenum + 1].strip()
-
-  # Check for people declaring static/global STL strings at the top level.
-  # This is dangerous because the C++ language does not guarantee that
-  # globals with constructors are initialized before the first access.
-  match = Match(
-      r'((?:|static +)(?:|const +))string +([a-zA-Z0-9_:]+)\b(.*)',
-      line)
-
-  # Remove false positives:
-  # - String pointers (as opposed to values).
-  #    string *pointer
-  #    const string *pointer
-  #    string const *pointer
-  #    string *const pointer
-  #
-  # - Functions and template specializations.
-  #    string Function<Type>(...
-  #    string Class<Type>::Method(...
-  #
-  # - Operators.  These are matched separately because operator names
-  #   cross non-word boundaries, and trying to match both operators
-  #   and functions at the same time would decrease accuracy of
-  #   matching identifiers.
-  #    string Class::operator*()
-  if (match and
-      not Search(r'\bstring\b(\s+const)?\s*\*\s*(const\s+)?\w', line) and
-      not Search(r'\boperator\W', line) and
-      not Match(r'\s*(<.*>)?(::[a-zA-Z0-9_]+)*\s*\(([^"]|$)', match.group(3))):
-    error(filename, linenum, 'runtime/string', 4,
-          'For a static/global string constant, use a C style string instead: '
-          '"%schar %s[]".' %
-          (match.group(1), match.group(2)))
-
-  if Search(r'\b([A-Za-z0-9_]*_)\(\1\)', line):
-    error(filename, linenum, 'runtime/init', 4,
-          'You seem to be initializing a member variable with itself.')
-
-
-def CheckPrintf(filename, clean_lines, linenum, error):
-  """Check for printf related issues.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # When snprintf is used, the second argument shouldn't be a literal.
-  match = Search(r'snprintf\s*\(([^,]*),\s*([0-9]*)\s*,', line)
-  if match and match.group(2) != '0':
-    # If 2nd arg is zero, snprintf is used to calculate size.
-    error(filename, linenum, 'runtime/printf', 3,
-          'If you can, use sizeof(%s) instead of %s as the 2nd arg '
-          'to snprintf.' % (match.group(1), match.group(2)))
-
-  # Check if some verboten C functions are being used.
-  if Search(r'\bsprintf\s*\(', line):
-    error(filename, linenum, 'runtime/printf', 5,
-          'Never use sprintf. Use snprintf instead.')
-  match = Search(r'\b(strcpy|strcat)\s*\(', line)
-  if match:
-    error(filename, linenum, 'runtime/printf', 4,
-          'Almost always, snprintf is better than %s' % match.group(1))
-
-
-def IsDerivedFunction(clean_lines, linenum):
-  """Check if current line contains an inherited function.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-  Returns:
-    True if current line contains a function with "override"
-    virt-specifier.
-  """
-  # Scan back a few lines for start of current function
-  for i in xrange(linenum, max(-1, linenum - 10), -1):
-    match = Match(r'^([^()]*\w+)\(', clean_lines.elided[i])
-    if match:
-      # Look for "override" after the matching closing parenthesis
-      line, _, closing_paren = CloseExpression(
-          clean_lines, i, len(match.group(1)))
-      return (closing_paren >= 0 and
-              Search(r'\boverride\b', line[closing_paren:]))
-  return False
-
-
-def IsOutOfLineMethodDefinition(clean_lines, linenum):
-  """Check if current line contains an out-of-line method definition.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-  Returns:
-    True if current line contains an out-of-line method definition.
-  """
-  # Scan back a few lines for start of current function
-  for i in xrange(linenum, max(-1, linenum - 10), -1):
-    if Match(r'^([^()]*\w+)\(', clean_lines.elided[i]):
-      return Match(r'^[^()]*\w+::\w+\(', clean_lines.elided[i]) is not None
-  return False
-
-
-def IsInitializerList(clean_lines, linenum):
-  """Check if current line is inside constructor initializer list.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-  Returns:
-    True if current line appears to be inside constructor initializer
-    list, False otherwise.
-  """
-  for i in xrange(linenum, 1, -1):
-    line = clean_lines.elided[i]
-    if i == linenum:
-      remove_function_body = Match(r'^(.*)\{\s*$', line)
-      if remove_function_body:
-        line = remove_function_body.group(1)
-
-    if Search(r'\s:\s*\w+[({]', line):
-      # A lone colon tend to indicate the start of a constructor
-      # initializer list.  It could also be a ternary operator, which
-      # also tend to appear in constructor initializer lists as
-      # opposed to parameter lists.
-      return True
-    if Search(r'\}\s*,\s*$', line):
-      # A closing brace followed by a comma is probably the end of a
-      # brace-initialized member in constructor initializer list.
-      return True
-    if Search(r'[{};]\s*$', line):
-      # Found one of the following:
-      # - A closing brace or semicolon, probably the end of the previous
-      #   function.
-      # - An opening brace, probably the start of current class or namespace.
-      #
-      # Current line is probably not inside an initializer list since
-      # we saw one of those things without seeing the starting colon.
-      return False
-
-  # Got to the beginning of the file without seeing the start of
-  # constructor initializer list.
-  return False
-
-
-def CheckForNonConstReference(filename, clean_lines, linenum,
-                              nesting_state, error):
-  """Check for non-const references.
-
-  Separate from CheckLanguage since it scans backwards from current
-  line, instead of scanning forward.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: The function to call with any errors found.
-  """
-  # Do nothing if there is no '&' on current line.
-  line = clean_lines.elided[linenum]
-  if '&' not in line:
-    return
-
-  # If a function is inherited, current function doesn't have much of
-  # a choice, so any non-const references should not be blamed on
-  # derived function.
-  if IsDerivedFunction(clean_lines, linenum):
-    return
-
-  # Don't warn on out-of-line method definitions, as we would warn on the
-  # in-line declaration, if it isn't marked with 'override'.
-  if IsOutOfLineMethodDefinition(clean_lines, linenum):
-    return
-
-  # Long type names may be broken across multiple lines, usually in one
-  # of these forms:
-  #   LongType
-  #       ::LongTypeContinued &identifier
-  #   LongType::
-  #       LongTypeContinued &identifier
-  #   LongType<
-  #       ...>::LongTypeContinued &identifier
-  #
-  # If we detected a type split across two lines, join the previous
-  # line to current line so that we can match const references
-  # accordingly.
-  #
-  # Note that this only scans back one line, since scanning back
-  # arbitrary number of lines would be expensive.  If you have a type
-  # that spans more than 2 lines, please use a typedef.
-  if linenum > 1:
-    previous = None
-    if Match(r'\s*::(?:[\w<>]|::)+\s*&\s*\S', line):
-      # previous_line\n + ::current_line
-      previous = Search(r'\b((?:const\s*)?(?:[\w<>]|::)+[\w<>])\s*$',
-                        clean_lines.elided[linenum - 1])
-    elif Match(r'\s*[a-zA-Z_]([\w<>]|::)+\s*&\s*\S', line):
-      # previous_line::\n + current_line
-      previous = Search(r'\b((?:const\s*)?(?:[\w<>]|::)+::)\s*$',
-                        clean_lines.elided[linenum - 1])
-    if previous:
-      line = previous.group(1) + line.lstrip()
-    else:
-      # Check for templated parameter that is split across multiple lines
-      endpos = line.rfind('>')
-      if endpos > -1:
-        (_, startline, startpos) = ReverseCloseExpression(
-            clean_lines, linenum, endpos)
-        if startpos > -1 and startline < linenum:
-          # Found the matching < on an earlier line, collect all
-          # pieces up to current line.
-          line = ''
-          for i in xrange(startline, linenum + 1):
-            line += clean_lines.elided[i].strip()
-
-  # Check for non-const references in function parameters.  A single '&' may
-  # found in the following places:
-  #   inside expression: binary & for bitwise AND
-  #   inside expression: unary & for taking the address of something
-  #   inside declarators: reference parameter
-  # We will exclude the first two cases by checking that we are not inside a
-  # function body, including one that was just introduced by a trailing '{'.
-  # TODO(unknown): Doesn't account for 'catch(Exception& e)' [rare].
-  if (nesting_state.previous_stack_top and
-      not (isinstance(nesting_state.previous_stack_top, _ClassInfo) or
-           isinstance(nesting_state.previous_stack_top, _NamespaceInfo))):
-    # Not at toplevel, not within a class, and not within a namespace
-    return
-
-  # Avoid initializer lists.  We only need to scan back from the
-  # current line for something that starts with ':'.
-  #
-  # We don't need to check the current line, since the '&' would
-  # appear inside the second set of parentheses on the current line as
-  # opposed to the first set.
-  if linenum > 0:
-    for i in xrange(linenum - 1, max(0, linenum - 10), -1):
-      previous_line = clean_lines.elided[i]
-      if not Search(r'[),]\s*$', previous_line):
-        break
-      if Match(r'^\s*:\s+\S', previous_line):
-        return
-
-  # Avoid preprocessors
-  if Search(r'\\\s*$', line):
-    return
-
-  # Avoid constructor initializer lists
-  if IsInitializerList(clean_lines, linenum):
-    return
-
-  # We allow non-const references in a few standard places, like functions
-  # called "swap()" or iostream operators like "<<" or ">>".  Do not check
-  # those function parameters.
-  #
-  # We also accept & in static_assert, which looks like a function but
-  # it's actually a declaration expression.
-  whitelisted_functions = (r'(?:[sS]wap(?:<\w:+>)?|'
-                           r'operator\s*[<>][<>]|'
-                           r'static_assert|COMPILE_ASSERT'
-                           r')\s*\(')
-  if Search(whitelisted_functions, line):
-    return
-  elif not Search(r'\S+\([^)]*$', line):
-    # Don't see a whitelisted function on this line.  Actually we
-    # didn't see any function name on this line, so this is likely a
-    # multi-line parameter list.  Try a bit harder to catch this case.
-    for i in xrange(2):
-      if (linenum > i and
-          Search(whitelisted_functions, clean_lines.elided[linenum - i - 1])):
-        return
-
-  decls = ReplaceAll(r'{[^}]*}', ' ', line)  # exclude function body
-  for parameter in re.findall(_RE_PATTERN_REF_PARAM, decls):
-    if not Match(_RE_PATTERN_CONST_REF_PARAM, parameter):
-      error(filename, linenum, 'runtime/references', 2,
-            'Is this a non-const reference? '
-            'If so, make const or use a pointer: ' +
-            ReplaceAll(' *<', '<', parameter))
-
-
-def CheckCasts(filename, clean_lines, linenum, error):
-  """Various cast related checks.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Check to see if they're using an conversion function cast.
-  # I just try to capture the most common basic types, though there are more.
-  # Parameterless conversion functions, such as bool(), are allowed as they are
-  # probably a member operator declaration or default constructor.
-  match = Search(
-      r'(\bnew\s+|\S<\s*(?:const\s+)?)?\b'
-      r'(int|float|double|bool|char|int32|uint32|int64|uint64)'
-      r'(\([^)].*)', line)
-  expecting_function = ExpectingFunctionArgs(clean_lines, linenum)
-  if match and not expecting_function:
-    matched_type = match.group(2)
-
-    # matched_new_or_template is used to silence two false positives:
-    # - New operators
-    # - Template arguments with function types
-    #
-    # For template arguments, we match on types immediately following
-    # an opening bracket without any spaces.  This is a fast way to
-    # silence the common case where the function type is the first
-    # template argument.  False negative with less-than comparison is
-    # avoided because those operators are usually followed by a space.
-    #
-    #   function<double(double)>   // bracket + no space = false positive
-    #   value < double(42)         // bracket + space = true positive
-    matched_new_or_template = match.group(1)
-
-    # Avoid arrays by looking for brackets that come after the closing
-    # parenthesis.
-    if Match(r'\([^()]+\)\s*\[', match.group(3)):
-      return
-
-    # Other things to ignore:
-    # - Function pointers
-    # - Casts to pointer types
-    # - Placement new
-    # - Alias declarations
-    matched_funcptr = match.group(3)
-    if (matched_new_or_template is None and
-        not (matched_funcptr and
-             (Match(r'\((?:[^() ]+::\s*\*\s*)?[^() ]+\)\s*\(',
-                    matched_funcptr) or
-              matched_funcptr.startswith('(*)'))) and
-        not Match(r'\s*using\s+\S+\s*=\s*' + matched_type, line) and
-        not Search(r'new\(\S+\)\s*' + matched_type, line)):
-      error(filename, linenum, 'readability/casting', 4,
-            'Using deprecated casting style.  '
-            'Use static_cast<%s>(...) instead' %
-            matched_type)
-
-  if not expecting_function:
-    CheckCStyleCast(filename, clean_lines, linenum, 'static_cast',
-                    r'\((int|float|double|bool|char|u?int(16|32|64))\)', error)
-
-  # This doesn't catch all cases. Consider (const char * const)"hello".
-  #
-  # (char *) "foo" should always be a const_cast (reinterpret_cast won't
-  # compile).
-  if CheckCStyleCast(filename, clean_lines, linenum, 'const_cast',
-                     r'\((char\s?\*+\s?)\)\s*"', error):
-    pass
-  else:
-    # Check pointer casts for other than string constants
-    CheckCStyleCast(filename, clean_lines, linenum, 'reinterpret_cast',
-                    r'\((\w+\s?\*+\s?)\)', error)
-
-  # In addition, we look for people taking the address of a cast.  This
-  # is dangerous -- casts can assign to temporaries, so the pointer doesn't
-  # point where you think.
-  #
-  # Some non-identifier character is required before the '&' for the
-  # expression to be recognized as a cast.  These are casts:
-  #   expression = &static_cast<int*>(temporary());
-  #   function(&(int*)(temporary()));
-  #
-  # This is not a cast:
-  #   reference_type&(int* function_param);
-  match = Search(
-      r'(?:[^\w]&\(([^)*][^)]*)\)[\w(])|'
-      r'(?:[^\w]&(static|dynamic|down|reinterpret)_cast\b)', line)
-  if match:
-    # Try a better error message when the & is bound to something
-    # dereferenced by the casted pointer, as opposed to the casted
-    # pointer itself.
-    parenthesis_error = False
-    match = Match(r'^(.*&(?:static|dynamic|down|reinterpret)_cast\b)<', line)
-    if match:
-      _, y1, x1 = CloseExpression(clean_lines, linenum, len(match.group(1)))
-      if x1 >= 0 and clean_lines.elided[y1][x1] == '(':
-        _, y2, x2 = CloseExpression(clean_lines, y1, x1)
-        if x2 >= 0:
-          extended_line = clean_lines.elided[y2][x2:]
-          if y2 < clean_lines.NumLines() - 1:
-            extended_line += clean_lines.elided[y2 + 1]
-          if Match(r'\s*(?:->|\[)', extended_line):
-            parenthesis_error = True
-
-    if parenthesis_error:
-      error(filename, linenum, 'readability/casting', 4,
-            ('Are you taking an address of something dereferenced '
-             'from a cast?  Wrapping the dereferenced expression in '
-             'parentheses will make the binding more obvious'))
-    else:
-      error(filename, linenum, 'runtime/casting', 4,
-            ('Are you taking an address of a cast?  '
-             'This is dangerous: could be a temp var.  '
-             'Take the address before doing the cast, rather than after'))
-
-
-def CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error):
-  """Checks for a C-style cast by looking for the pattern.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    cast_type: The string for the C++ cast to recommend.  This is either
-      reinterpret_cast, static_cast, or const_cast, depending.
-    pattern: The regular expression used to find C-style casts.
-    error: The function to call with any errors found.
-
-  Returns:
-    True if an error was emitted.
-    False otherwise.
-  """
-  line = clean_lines.elided[linenum]
-  match = Search(pattern, line)
-  if not match:
-    return False
-
-  # Exclude lines with keywords that tend to look like casts
-  context = line[0:match.start(1) - 1]
-  if Match(r'.*\b(?:sizeof|alignof|alignas|[_A-Z][_A-Z0-9]*)\s*$', context):
-    return False
-
-  # Try expanding current context to see if we one level of
-  # parentheses inside a macro.
-  if linenum > 0:
-    for i in xrange(linenum - 1, max(0, linenum - 5), -1):
-      context = clean_lines.elided[i] + context
-  if Match(r'.*\b[_A-Z][_A-Z0-9]*\s*\((?:\([^()]*\)|[^()])*$', context):
-    return False
-
-  # operator++(int) and operator--(int)
-  if context.endswith(' operator++') or context.endswith(' operator--'):
-    return False
-
-  # A single unnamed argument for a function tends to look like old
-  # style cast.  If we see those, don't issue warnings for deprecated
-  # casts, instead issue warnings for unnamed arguments where
-  # appropriate.
-  #
-  # These are things that we want warnings for, since the style guide
-  # explicitly require all parameters to be named:
-  #   Function(int);
-  #   Function(int) {
-  #   ConstMember(int) const;
-  #   ConstMember(int) const {
-  #   ExceptionMember(int) throw (...);
-  #   ExceptionMember(int) throw (...) {
-  #   PureVirtual(int) = 0;
-  #   [](int) -> bool {
-  #
-  # These are functions of some sort, where the compiler would be fine
-  # if they had named parameters, but people often omit those
-  # identifiers to reduce clutter:
-  #   (FunctionPointer)(int);
-  #   (FunctionPointer)(int) = value;
-  #   Function((function_pointer_arg)(int))
-  #   Function((function_pointer_arg)(int), int param)
-  #   <TemplateArgument(int)>;
-  #   <(FunctionPointerTemplateArgument)(int)>;
-  remainder = line[match.end(0):]
-  if Match(r'^\s*(?:;|const\b|throw\b|final\b|override\b|[=>{),]|->)',
-           remainder):
-    # Looks like an unnamed parameter.
-
-    # Don't warn on any kind of template arguments.
-    if Match(r'^\s*>', remainder):
-      return False
-
-    # Don't warn on assignments to function pointers, but keep warnings for
-    # unnamed parameters to pure virtual functions.  Note that this pattern
-    # will also pass on assignments of "0" to function pointers, but the
-    # preferred values for those would be "nullptr" or "NULL".
-    matched_zero = Match(r'^\s=\s*(\S+)\s*;', remainder)
-    if matched_zero and matched_zero.group(1) != '0':
-      return False
-
-    # Don't warn on function pointer declarations.  For this we need
-    # to check what came before the "(type)" string.
-    if Match(r'.*\)\s*$', line[0:match.start(0)]):
-      return False
-
-    # Don't warn if the parameter is named with block comments, e.g.:
-    #  Function(int /*unused_param*/);
-    raw_line = clean_lines.raw_lines[linenum]
-    if '/*' in raw_line:
-      return False
-
-    # Passed all filters, issue warning here.
-    error(filename, linenum, 'readability/function', 3,
-          'All parameters should be named in a function')
-    return True
-
-  # At this point, all that should be left is actual casts.
-  error(filename, linenum, 'readability/casting', 4,
-        'Using C-style cast.  Use %s<%s>(...) instead' %
-        (cast_type, match.group(1)))
-
-  return True
-
-
-def ExpectingFunctionArgs(clean_lines, linenum):
-  """Checks whether where function type arguments are expected.
-
-  Args:
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-
-  Returns:
-    True if the line at 'linenum' is inside something that expects arguments
-    of function types.
-  """
-  line = clean_lines.elided[linenum]
-  return (Match(r'^\s*MOCK_(CONST_)?METHOD\d+(_T)?\(', line) or
-          (linenum >= 2 and
-           (Match(r'^\s*MOCK_(?:CONST_)?METHOD\d+(?:_T)?\((?:\S+,)?\s*$',
-                  clean_lines.elided[linenum - 1]) or
-            Match(r'^\s*MOCK_(?:CONST_)?METHOD\d+(?:_T)?\(\s*$',
-                  clean_lines.elided[linenum - 2]) or
-            Search(r'\bstd::m?function\s*\<\s*$',
-                   clean_lines.elided[linenum - 1]))))
-
-
-_HEADERS_CONTAINING_TEMPLATES = (
-    ('<deque>', ('deque',)),
-    ('<functional>', ('unary_function', 'binary_function',
-                      'plus', 'minus', 'multiplies', 'divides', 'modulus',
-                      'negate',
-                      'equal_to', 'not_equal_to', 'greater', 'less',
-                      'greater_equal', 'less_equal',
-                      'logical_and', 'logical_or', 'logical_not',
-                      'unary_negate', 'not1', 'binary_negate', 'not2',
-                      'bind1st', 'bind2nd',
-                      'pointer_to_unary_function',
-                      'pointer_to_binary_function',
-                      'ptr_fun',
-                      'mem_fun_t', 'mem_fun', 'mem_fun1_t', 'mem_fun1_ref_t',
-                      'mem_fun_ref_t',
-                      'const_mem_fun_t', 'const_mem_fun1_t',
-                      'const_mem_fun_ref_t', 'const_mem_fun1_ref_t',
-                      'mem_fun_ref',
-                     )),
-    ('<limits>', ('numeric_limits',)),
-    ('<list>', ('list',)),
-    ('<map>', ('map', 'multimap',)),
-    ('<memory>', ('allocator',)),
-    ('<queue>', ('queue', 'priority_queue',)),
-    ('<set>', ('set', 'multiset',)),
-    ('<stack>', ('stack',)),
-    ('<string>', ('char_traits', 'basic_string',)),
-    ('<tuple>', ('tuple',)),
-    ('<utility>', ('pair',)),
-    ('<vector>', ('vector',)),
-
-    # gcc extensions.
-    # Note: std::hash is their hash, ::hash is our hash
-    ('<hash_map>', ('hash_map', 'hash_multimap',)),
-    ('<hash_set>', ('hash_set', 'hash_multiset',)),
-    ('<slist>', ('slist',)),
-    )
-
-_RE_PATTERN_STRING = re.compile(r'\bstring\b')
-
-_re_pattern_algorithm_header = []
-for _template in ('copy', 'max', 'min', 'min_element', 'sort', 'swap',
-                  'transform'):
-  # Match max<type>(..., ...), max(..., ...), but not foo->max, foo.max or
-  # type::max().
-  _re_pattern_algorithm_header.append(
-      (re.compile(r'[^>.]\b' + _template + r'(<.*?>)?\([^\)]'),
-       _template,
-       '<algorithm>'))
-
-_re_pattern_templates = []
-for _header, _templates in _HEADERS_CONTAINING_TEMPLATES:
-  for _template in _templates:
-    _re_pattern_templates.append(
-        (re.compile(r'(\<|\b)' + _template + r'\s*\<'),
-         _template + '<>',
-         _header))
-
-
-def FilesBelongToSameModule(filename_cc, filename_h):
-  """Check if these two filenames belong to the same module.
-
-  The concept of a 'module' here is a as follows:
-  foo.h, foo-inl.h, foo.cc, foo_test.cc and foo_unittest.cc belong to the
-  same 'module' if they are in the same directory.
-  some/path/public/xyzzy and some/path/internal/xyzzy are also considered
-  to belong to the same module here.
-
-  If the filename_cc contains a longer path than the filename_h, for example,
-  '/absolute/path/to/base/sysinfo.cc', and this file would include
-  'base/sysinfo.h', this function also produces the prefix needed to open the
-  header. This is used by the caller of this function to more robustly open the
-  header file. We don't have access to the real include paths in this context,
-  so we need this guesswork here.
-
-  Known bugs: tools/base/bar.cc and base/bar.h belong to the same module
-  according to this implementation. Because of this, this function gives
-  some false positives. This should be sufficiently rare in practice.
-
-  Args:
-    filename_cc: is the path for the .cc file
-    filename_h: is the path for the header path
-
-  Returns:
-    Tuple with a bool and a string:
-    bool: True if filename_cc and filename_h belong to the same module.
-    string: the additional prefix needed to open the header file.
-  """
-
-  if not filename_cc.endswith('.cc'):
-    return (False, '')
-  filename_cc = filename_cc[:-len('.cc')]
-  if filename_cc.endswith('_unittest'):
-    filename_cc = filename_cc[:-len('_unittest')]
-  elif filename_cc.endswith('_test'):
-    filename_cc = filename_cc[:-len('_test')]
-  filename_cc = filename_cc.replace('/public/', '/')
-  filename_cc = filename_cc.replace('/internal/', '/')
-
-  if not filename_h.endswith('.h'):
-    return (False, '')
-  filename_h = filename_h[:-len('.h')]
-  if filename_h.endswith('-inl'):
-    filename_h = filename_h[:-len('-inl')]
-  filename_h = filename_h.replace('/public/', '/')
-  filename_h = filename_h.replace('/internal/', '/')
-
-  files_belong_to_same_module = filename_cc.endswith(filename_h)
-  common_path = ''
-  if files_belong_to_same_module:
-    common_path = filename_cc[:-len(filename_h)]
-  return files_belong_to_same_module, common_path
-
-
-def UpdateIncludeState(filename, include_dict, io=codecs):
-  """Fill up the include_dict with new includes found from the file.
-
-  Args:
-    filename: the name of the header to read.
-    include_dict: a dictionary in which the headers are inserted.
-    io: The io factory to use to read the file. Provided for testability.
-
-  Returns:
-    True if a header was successfully added. False otherwise.
-  """
-  headerfile = None
-  try:
-    headerfile = io.open(filename, 'r', 'utf8', 'replace')
-  except IOError:
-    return False
-  linenum = 0
-  for line in headerfile:
-    linenum += 1
-    clean_line = CleanseComments(line)
-    match = _RE_PATTERN_INCLUDE.search(clean_line)
-    if match:
-      include = match.group(2)
-      include_dict.setdefault(include, linenum)
-  return True
-
-
-def CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error,
-                              io=codecs):
-  """Reports for missing stl includes.
-
-  This function will output warnings to make sure you are including the headers
-  necessary for the stl containers and functions that you use. We only give one
-  reason to include a header. For example, if you use both equal_to<> and
-  less<> in a .h file, only one (the latter in the file) of these will be
-  reported as a reason to include the <functional>.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    include_state: An _IncludeState instance.
-    error: The function to call with any errors found.
-    io: The IO factory to use to read the header file. Provided for unittest
-        injection.
-  """
-  required = {}  # A map of header name to linenumber and the template entity.
-                 # Example of required: { '<functional>': (1219, 'less<>') }
-
-  for linenum in xrange(clean_lines.NumLines()):
-    line = clean_lines.elided[linenum]
-    if not line or line[0] == '#':
-      continue
-
-    # String is special -- it is a non-templatized type in STL.
-    matched = _RE_PATTERN_STRING.search(line)
-    if matched:
-      # Don't warn about strings in non-STL namespaces:
-      # (We check only the first match per line; good enough.)
-      prefix = line[:matched.start()]
-      if prefix.endswith('std::') or not prefix.endswith('::'):
-        required['<string>'] = (linenum, 'string')
-
-    for pattern, template, header in _re_pattern_algorithm_header:
-      if pattern.search(line):
-        required[header] = (linenum, template)
-
-    # The following function is just a speed up, no semantics are changed.
-    if not '<' in line:  # Reduces the cpu time usage by skipping lines.
-      continue
-
-    for pattern, template, header in _re_pattern_templates:
-      if pattern.search(line):
-        required[header] = (linenum, template)
-
-  # The policy is that if you #include something in foo.h you don't need to
-  # include it again in foo.cc. Here, we will look at possible includes.
-  # Let's flatten the include_state include_list and copy it into a dictionary.
-  include_dict = dict([item for sublist in include_state.include_list
-                       for item in sublist])
-
-  # Did we find the header for this file (if any) and successfully load it?
-  header_found = False
-
-  # Use the absolute path so that matching works properly.
-  abs_filename = FileInfo(filename).FullName()
-
-  # For Emacs's flymake.
-  # If cpplint is invoked from Emacs's flymake, a temporary file is generated
-  # by flymake and that file name might end with '_flymake.cc'. In that case,
-  # restore original file name here so that the corresponding header file can be
-  # found.
-  # e.g. If the file name is 'foo_flymake.cc', we should search for 'foo.h'
-  # instead of 'foo_flymake.h'
-  abs_filename = re.sub(r'_flymake\.cc$', '.cc', abs_filename)
-
-  # include_dict is modified during iteration, so we iterate over a copy of
-  # the keys.
-  header_keys = include_dict.keys()
-  for header in header_keys:
-    (same_module, common_path) = FilesBelongToSameModule(abs_filename, header)
-    fullpath = common_path + header
-    if same_module and UpdateIncludeState(fullpath, include_dict, io):
-      header_found = True
-
-  # If we can't find the header file for a .cc, assume it's because we don't
-  # know where to look. In that case we'll give up as we're not sure they
-  # didn't include it in the .h file.
-  # TODO(unknown): Do a better job of finding .h files so we are confident that
-  # not having the .h file means there isn't one.
-  if filename.endswith('.cc') and not header_found:
-    return
-
-  # All the lines have been processed, report the errors found.
-  for required_header_unstripped in required:
-    template = required[required_header_unstripped][1]
-    if required_header_unstripped.strip('<>"') not in include_dict:
-      error(filename, required[required_header_unstripped][0],
-            'build/include_what_you_use', 4,
-            'Add #include ' + required_header_unstripped + ' for ' + template)
-
-
-_RE_PATTERN_EXPLICIT_MAKEPAIR = re.compile(r'\bmake_pair\s*<')
-
-
-def CheckMakePairUsesDeduction(filename, clean_lines, linenum, error):
-  """Check that make_pair's template arguments are deduced.
-
-  G++ 4.6 in C++11 mode fails badly if make_pair's template arguments are
-  specified explicitly, and such use isn't intended in any case.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-  match = _RE_PATTERN_EXPLICIT_MAKEPAIR.search(line)
-  if match:
-    error(filename, linenum, 'build/explicit_make_pair',
-          4,  # 4 = high confidence
-          'For C++11-compatibility, omit template arguments from make_pair'
-          ' OR use pair directly OR if appropriate, construct a pair directly')
-
-
-def CheckDefaultLambdaCaptures(filename, clean_lines, linenum, error):
-  """Check that default lambda captures are not used.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # A lambda introducer specifies a default capture if it starts with "[="
-  # or if it starts with "[&" _not_ followed by an identifier.
-  match = Match(r'^(.*)\[\s*(?:=|&[^\w])', line)
-  if match:
-    # Found a potential error, check what comes after the lambda-introducer.
-    # If it's not open parenthesis (for lambda-declarator) or open brace
-    # (for compound-statement), it's not a lambda.
-    line, _, pos = CloseExpression(clean_lines, linenum, len(match.group(1)))
-    if pos >= 0 and Match(r'^\s*[{(]', line[pos:]):
-      error(filename, linenum, 'build/c++11',
-            4,  # 4 = high confidence
-            'Default lambda captures are an unapproved C++ feature.')
-
-
-def CheckRedundantVirtual(filename, clean_lines, linenum, error):
-  """Check if line contains a redundant "virtual" function-specifier.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  # Look for "virtual" on current line.
-  line = clean_lines.elided[linenum]
-  virtual = Match(r'^(.*)(\bvirtual\b)(.*)$', line)
-  if not virtual: return
-
-  # Ignore "virtual" keywords that are near access-specifiers.  These
-  # are only used in class base-specifier and do not apply to member
-  # functions.
-  if (Search(r'\b(public|protected|private)\s+$', virtual.group(1)) or
-      Match(r'^\s+(public|protected|private)\b', virtual.group(3))):
-    return
-
-  # Ignore the "virtual" keyword from virtual base classes.  Usually
-  # there is a column on the same line in these cases (virtual base
-  # classes are rare in google3 because multiple inheritance is rare).
-  if Match(r'^.*[^:]:[^:].*$', line): return
-
-  # Look for the next opening parenthesis.  This is the start of the
-  # parameter list (possibly on the next line shortly after virtual).
-  # TODO(unknown): doesn't work if there are virtual functions with
-  # decltype() or other things that use parentheses, but csearch suggests
-  # that this is rare.
-  end_col = -1
-  end_line = -1
-  start_col = len(virtual.group(2))
-  for start_line in xrange(linenum, min(linenum + 3, clean_lines.NumLines())):
-    line = clean_lines.elided[start_line][start_col:]
-    parameter_list = Match(r'^([^(]*)\(', line)
-    if parameter_list:
-      # Match parentheses to find the end of the parameter list
-      (_, end_line, end_col) = CloseExpression(
-          clean_lines, start_line, start_col + len(parameter_list.group(1)))
-      break
-    start_col = 0
-
-  if end_col < 0:
-    return  # Couldn't find end of parameter list, give up
-
-  # Look for "override" or "final" after the parameter list
-  # (possibly on the next few lines).
-  for i in xrange(end_line, min(end_line + 3, clean_lines.NumLines())):
-    line = clean_lines.elided[i][end_col:]
-    match = Search(r'\b(override|final)\b', line)
-    if match:
-      error(filename, linenum, 'readability/inheritance', 4,
-            ('"virtual" is redundant since function is '
-             'already declared as "%s"' % match.group(1)))
-
-    # Set end_col to check whole lines after we are done with the
-    # first line.
-    end_col = 0
-    if Search(r'[^\w]\s*$', line):
-      break
-
-
-def CheckRedundantOverrideOrFinal(filename, clean_lines, linenum, error):
-  """Check if line contains a redundant "override" or "final" virt-specifier.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  # Look for closing parenthesis nearby.  We need one to confirm where
-  # the declarator ends and where the virt-specifier starts to avoid
-  # false positives.
-  line = clean_lines.elided[linenum]
-  declarator_end = line.rfind(')')
-  if declarator_end >= 0:
-    fragment = line[declarator_end:]
-  else:
-    if linenum > 1 and clean_lines.elided[linenum - 1].rfind(')') >= 0:
-      fragment = line
-    else:
-      return
-
-  # Check that at most one of "override" or "final" is present, not both
-  if Search(r'\boverride\b', fragment) and Search(r'\bfinal\b', fragment):
-    error(filename, linenum, 'readability/inheritance', 4,
-          ('"override" is redundant since function is '
-           'already declared as "final"'))
-
-
-
-
-# Returns true if we are at a new block, and it is directly
-# inside of a namespace.
-def IsBlockInNameSpace(nesting_state, is_forward_declaration):
-  """Checks that the new block is directly in a namespace.
-
-  Args:
-    nesting_state: The _NestingState object that contains info about our state.
-    is_forward_declaration: If the class is a forward declared class.
-  Returns:
-    Whether or not the new block is directly in a namespace.
-  """
-  if is_forward_declaration:
-    if len(nesting_state.stack) >= 1 and (
-        isinstance(nesting_state.stack[-1], _NamespaceInfo)):
-      return True
-    else:
-      return False
-
-  return (len(nesting_state.stack) > 1 and
-          nesting_state.stack[-1].check_namespace_indentation and
-          isinstance(nesting_state.stack[-2], _NamespaceInfo))
-
-
-def ShouldCheckNamespaceIndentation(nesting_state, is_namespace_indent_item,
-                                    raw_lines_no_comments, linenum):
-  """This method determines if we should apply our namespace indentation check.
-
-  Args:
-    nesting_state: The current nesting state.
-    is_namespace_indent_item: If we just put a new class on the stack, True.
-      If the top of the stack is not a class, or we did not recently
-      add the class, False.
-    raw_lines_no_comments: The lines without the comments.
-    linenum: The current line number we are processing.
-
-  Returns:
-    True if we should apply our namespace indentation check. Currently, it
-    only works for classes and namespaces inside of a namespace.
-  """
-
-  is_forward_declaration = IsForwardClassDeclaration(raw_lines_no_comments,
-                                                     linenum)
-
-  if not (is_namespace_indent_item or is_forward_declaration):
-    return False
-
-  # If we are in a macro, we do not want to check the namespace indentation.
-  if IsMacroDefinition(raw_lines_no_comments, linenum):
-    return False
-
-  return IsBlockInNameSpace(nesting_state, is_forward_declaration)
-
-
-# Call this method if the line is directly inside of a namespace.
-# If the line above is blank (excluding comments) or the start of
-# an inner namespace, it cannot be indented.
-def CheckItemIndentationInNamespace(filename, raw_lines_no_comments, linenum,
-                                    error):
-  line = raw_lines_no_comments[linenum]
-  if Match(r'^\s+', line):
-    error(filename, linenum, 'runtime/indentation_namespace', 4,
-          'Do not indent within a namespace')
-
-
-def ProcessLine(filename, file_extension, clean_lines, line,
-                include_state, function_state, nesting_state, error,
-                extra_check_functions=[]):
-  """Processes a single line in the file.
-
-  Args:
-    filename: Filename of the file that is being processed.
-    file_extension: The extension (dot not included) of the file.
-    clean_lines: An array of strings, each representing a line of the file,
-                 with comments stripped.
-    line: Number of line being processed.
-    include_state: An _IncludeState instance in which the headers are inserted.
-    function_state: A _FunctionState instance which counts function lines, etc.
-    nesting_state: A NestingState instance which maintains information about
-                   the current stack of nested blocks being parsed.
-    error: A callable to which errors are reported, which takes 4 arguments:
-           filename, line number, error level, and message
-    extra_check_functions: An array of additional check functions that will be
-                           run on each source line. Each function takes 4
-                           arguments: filename, clean_lines, line, error
-  """
-  raw_lines = clean_lines.raw_lines
-  ParseNolintSuppressions(filename, raw_lines[line], line, error)
-  nesting_state.Update(filename, clean_lines, line, error)
-  CheckForNamespaceIndentation(filename, nesting_state, clean_lines, line,
-                               error)
-  if nesting_state.InAsmBlock(): return
-  CheckForFunctionLengths(filename, clean_lines, line, function_state, error)
-  CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error)
-  CheckStyle(filename, clean_lines, line, file_extension, nesting_state, error)
-  CheckLanguage(filename, clean_lines, line, file_extension, include_state,
-                nesting_state, error)
-  CheckForNonConstReference(filename, clean_lines, line, nesting_state, error)
-  CheckForNonStandardConstructs(filename, clean_lines, line,
-                                nesting_state, error)
-  CheckVlogArguments(filename, clean_lines, line, error)
-  CheckPosixThreading(filename, clean_lines, line, error)
-  CheckInvalidIncrement(filename, clean_lines, line, error)
-  CheckMakePairUsesDeduction(filename, clean_lines, line, error)
-  CheckDefaultLambdaCaptures(filename, clean_lines, line, error)
-  CheckRedundantVirtual(filename, clean_lines, line, error)
-  CheckRedundantOverrideOrFinal(filename, clean_lines, line, error)
-  for check_fn in extra_check_functions:
-    check_fn(filename, clean_lines, line, error)
-
-def FlagCxx11Features(filename, clean_lines, linenum, error):
-  """Flag those c++11 features that we only allow in certain places.
-
-  Args:
-    filename: The name of the current file.
-    clean_lines: A CleansedLines instance containing the file.
-    linenum: The number of the line to check.
-    error: The function to call with any errors found.
-  """
-  line = clean_lines.elided[linenum]
-
-  # Flag unapproved C++11 headers.
-  include = Match(r'\s*#\s*include\s+[<"]([^<"]+)[">]', line)
-  if include and include.group(1) in ('cfenv',
-                                      'condition_variable',
-                                      'fenv.h',
-                                      'future',
-                                      'mutex',
-                                      'thread',
-                                      'chrono',
-                                      'ratio',
-                                      'regex',
-                                      'system_error',
-                                     ):
-    error(filename, linenum, 'build/c++11', 5,
-          ('<%s> is an unapproved C++11 header.') % include.group(1))
-
-  # The only place where we need to worry about C++11 keywords and library
-  # features in preprocessor directives is in macro definitions.
-  if Match(r'\s*#', line) and not Match(r'\s*#\s*define\b', line): return
-
-  # These are classes and free functions.  The classes are always
-  # mentioned as std::*, but we only catch the free functions if
-  # they're not found by ADL.  They're alphabetical by header.
-  for top_name in (
-      # type_traits
-      'alignment_of',
-      'aligned_union',
-      ):
-    if Search(r'\bstd::%s\b' % top_name, line):
-      error(filename, linenum, 'build/c++11', 5,
-            ('std::%s is an unapproved C++11 class or function.  Send c-style '
-             'an example of where it would make your code more readable, and '
-             'they may let you use it.') % top_name)
-
-
-def ProcessFileData(filename, file_extension, lines, error,
-                    extra_check_functions=[]):
-  """Performs lint checks and reports any errors to the given error function.
-
-  Args:
-    filename: Filename of the file that is being processed.
-    file_extension: The extension (dot not included) of the file.
-    lines: An array of strings, each representing a line of the file, with the
-           last element being empty if the file is terminated with a newline.
-    error: A callable to which errors are reported, which takes 4 arguments:
-           filename, line number, error level, and message
-    extra_check_functions: An array of additional check functions that will be
-                           run on each source line. Each function takes 4
-                           arguments: filename, clean_lines, line, error
-  """
-  lines = (['// marker so line numbers and indices both start at 1'] + lines +
-           ['// marker so line numbers end in a known way'])
-
-  include_state = _IncludeState()
-  function_state = _FunctionState()
-  nesting_state = NestingState()
-
-  ResetNolintSuppressions()
-
-  CheckForCopyright(filename, lines, error)
-
-  RemoveMultiLineComments(filename, lines, error)
-  clean_lines = CleansedLines(lines)
-
-  if file_extension == 'h':
-    CheckForHeaderGuard(filename, clean_lines, error)
-
-  for line in xrange(clean_lines.NumLines()):
-    ProcessLine(filename, file_extension, clean_lines, line,
-                include_state, function_state, nesting_state, error,
-                extra_check_functions)
-    FlagCxx11Features(filename, clean_lines, line, error)
-  nesting_state.CheckCompletedBlocks(filename, error)
-
-  CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error)
-  
-  # Check that the .cc file has included its header if it exists.
-  if file_extension == 'cc':
-    CheckHeaderFileIncluded(filename, include_state, error)
-
-  # We check here rather than inside ProcessLine so that we see raw
-  # lines rather than "cleaned" lines.
-  CheckForBadCharacters(filename, lines, error)
-
-  CheckForNewlineAtEOF(filename, lines, error)
-
-def ProcessConfigOverrides(filename):
-  """ Loads the configuration files and processes the config overrides.
-
-  Args:
-    filename: The name of the file being processed by the linter.
-
-  Returns:
-    False if the current |filename| should not be processed further.
-  """
-
-  abs_filename = os.path.abspath(filename)
-  cfg_filters = []
-  keep_looking = True
-  while keep_looking:
-    abs_path, base_name = os.path.split(abs_filename)
-    if not base_name:
-      break  # Reached the root directory.
-
-    cfg_file = os.path.join(abs_path, "CPPLINT.cfg")
-    abs_filename = abs_path
-    if not os.path.isfile(cfg_file):
-      continue
-
-    try:
-      with open(cfg_file) as file_handle:
-        for line in file_handle:
-          line, _, _ = line.partition('#')  # Remove comments.
-          if not line.strip():
-            continue
-
-          name, _, val = line.partition('=')
-          name = name.strip()
-          val = val.strip()
-          if name == 'set noparent':
-            keep_looking = False
-          elif name == 'filter':
-            cfg_filters.append(val)
-          elif name == 'exclude_files':
-            # When matching exclude_files pattern, use the base_name of
-            # the current file name or the directory name we are processing.
-            # For example, if we are checking for lint errors in /foo/bar/baz.cc
-            # and we found the .cfg file at /foo/CPPLINT.cfg, then the config
-            # file's "exclude_files" filter is meant to be checked against "bar"
-            # and not "baz" nor "bar/baz.cc".
-            if base_name:
-              pattern = re.compile(val)
-              if pattern.match(base_name):
-                sys.stderr.write('Ignoring "%s": file excluded by "%s". '
-                                 'File path component "%s" matches '
-                                 'pattern "%s"\n' %
-                                 (filename, cfg_file, base_name, val))
-                return False
-          elif name == 'linelength':
-            global _line_length
-            try:
-                _line_length = int(val)
-            except ValueError:
-                sys.stderr.write('Line length must be numeric.')
-          else:
-            sys.stderr.write(
-                'Invalid configuration option (%s) in file %s\n' %
-                (name, cfg_file))
-
-    except IOError:
-      sys.stderr.write(
-          "Skipping config file '%s': Can't open for reading\n" % cfg_file)
-      keep_looking = False
-
-  # Apply all the accumulated filters in reverse order (top-level directory
-  # config options having the least priority).
-  for filter in reversed(cfg_filters):
-     _AddFilters(filter)
-
-  return True
-
-
-def ProcessFile(filename, vlevel, extra_check_functions=[]):
-  """Does google-lint on a single file.
-
-  Args:
-    filename: The name of the file to parse.
-
-    vlevel: The level of errors to report.  Every error of confidence
-    >= verbose_level will be reported.  0 is a good default.
-
-    extra_check_functions: An array of additional check functions that will be
-                           run on each source line. Each function takes 4
-                           arguments: filename, clean_lines, line, error
-  """
-
-  _SetVerboseLevel(vlevel)
-  _BackupFilters()
-
-  if not ProcessConfigOverrides(filename):
-    _RestoreFilters()
-    return
-
-  lf_lines = []
-  crlf_lines = []
-  try:
-    # Support the UNIX convention of using "-" for stdin.  Note that
-    # we are not opening the file with universal newline support
-    # (which codecs doesn't support anyway), so the resulting lines do
-    # contain trailing '\r' characters if we are reading a file that
-    # has CRLF endings.
-    # If after the split a trailing '\r' is present, it is removed
-    # below.
-    if filename == '-':
-      lines = codecs.StreamReaderWriter(sys.stdin,
-                                        codecs.getreader('utf8'),
-                                        codecs.getwriter('utf8'),
-                                        'replace').read().split('\n')
-    else:
-      lines = codecs.open(filename, 'r', 'utf8', 'replace').read().split('\n')
-
-    # Remove trailing '\r'.
-    # The -1 accounts for the extra trailing blank line we get from split()
-    for linenum in range(len(lines) - 1):
-      if lines[linenum].endswith('\r'):
-        lines[linenum] = lines[linenum].rstrip('\r')
-        crlf_lines.append(linenum + 1)
-      else:
-        lf_lines.append(linenum + 1)
-
-  except IOError:
-    sys.stderr.write(
-        "Skipping input '%s': Can't open for reading\n" % filename)
-    _RestoreFilters()
-    return
-
-  # Note, if no dot is found, this will give the entire filename as the ext.
-  file_extension = filename[filename.rfind('.') + 1:]
-
-  # When reading from stdin, the extension is unknown, so no cpplint tests
-  # should rely on the extension.
-  if filename != '-' and file_extension not in _valid_extensions:
-    sys.stderr.write('Ignoring %s; not a valid file name '
-                     '(%s)\n' % (filename, ', '.join(_valid_extensions)))
-  else:
-    ProcessFileData(filename, file_extension, lines, Error,
-                    extra_check_functions)
-
-    # If end-of-line sequences are a mix of LF and CR-LF, issue
-    # warnings on the lines with CR.
-    #
-    # Don't issue any warnings if all lines are uniformly LF or CR-LF,
-    # since critique can handle these just fine, and the style guide
-    # doesn't dictate a particular end of line sequence.
-    #
-    # We can't depend on os.linesep to determine what the desired
-    # end-of-line sequence should be, since that will return the
-    # server-side end-of-line sequence.
-    if lf_lines and crlf_lines:
-      # Warn on every line with CR.  An alternative approach might be to
-      # check whether the file is mostly CRLF or just LF, and warn on the
-      # minority, we bias toward LF here since most tools prefer LF.
-      for linenum in crlf_lines:
-        Error(filename, linenum, 'whitespace/newline', 1,
-              'Unexpected \\r (^M) found; better to use only \\n')
-
-  sys.stderr.write('Done processing %s\n' % filename)
-  _RestoreFilters()
-
-
-def PrintUsage(message):
-  """Prints a brief usage string and exits, optionally with an error message.
-
-  Args:
-    message: The optional error message.
-  """
-  sys.stderr.write(_USAGE)
-  if message:
-    sys.exit('\nFATAL ERROR: ' + message)
-  else:
-    sys.exit(1)
-
-
-def PrintCategories():
-  """Prints a list of all the error-categories used by error messages.
-
-  These are the categories used to filter messages via --filter.
-  """
-  sys.stderr.write(''.join('  %s\n' % cat for cat in _ERROR_CATEGORIES))
-  sys.exit(0)
-
-
-def ParseArguments(args):
-  """Parses the command line arguments.
-
-  This may set the output format and verbosity level as side-effects.
-
-  Args:
-    args: The command line arguments:
-
-  Returns:
-    The list of filenames to lint.
-  """
-  try:
-    (opts, filenames) = getopt.getopt(args, '', ['help', 'output=', 'verbose=',
-                                                 'counting=',
-                                                 'filter=',
-                                                 'root=',
-                                                 'linelength=',
-                                                 'extensions='])
-  except getopt.GetoptError:
-    PrintUsage('Invalid arguments.')
-
-  verbosity = _VerboseLevel()
-  output_format = _OutputFormat()
-  filters = ''
-  counting_style = ''
-
-  for (opt, val) in opts:
-    if opt == '--help':
-      PrintUsage(None)
-    elif opt == '--output':
-      if val not in ('emacs', 'vs7', 'eclipse'):
-        PrintUsage('The only allowed output formats are emacs, vs7 and eclipse.')
-      output_format = val
-    elif opt == '--verbose':
-      verbosity = int(val)
-    elif opt == '--filter':
-      filters = val
-      if not filters:
-        PrintCategories()
-    elif opt == '--counting':
-      if val not in ('total', 'toplevel', 'detailed'):
-        PrintUsage('Valid counting options are total, toplevel, and detailed')
-      counting_style = val
-    elif opt == '--root':
-      global _root
-      _root = val
-    elif opt == '--linelength':
-      global _line_length
-      try:
-          _line_length = int(val)
-      except ValueError:
-          PrintUsage('Line length must be digits.')
-    elif opt == '--extensions':
-      global _valid_extensions
-      try:
-          _valid_extensions = set(val.split(','))
-      except ValueError:
-          PrintUsage('Extensions must be comma seperated list.')
-
-  if not filenames:
-    PrintUsage('No files were specified.')
-
-  _SetOutputFormat(output_format)
-  _SetVerboseLevel(verbosity)
-  _SetFilters(filters)
-  _SetCountingStyle(counting_style)
-
-  return filenames
-
-
-def main():
-  filenames = ParseArguments(sys.argv[1:])
-
-  # Change stderr to write with replacement characters so we don't die
-  # if we try to print something containing non-ASCII characters.
-  sys.stderr = codecs.StreamReaderWriter(sys.stderr,
-                                         codecs.getreader('utf8'),
-                                         codecs.getwriter('utf8'),
-                                         'replace')
-
-  _cpplint_state.ResetErrorCounts()
-  for filename in filenames:
-    ProcessFile(filename, _cpplint_state.verbose_level)
-  _cpplint_state.PrintErrorCounts()
-
-  sys.exit(_cpplint_state.error_count > 0)
-
-
-if __name__ == '__main__':
-  main()
diff --git a/tools/curr-sig/pgrouting--2.3.2.sig b/tools/curr-sig/pgrouting--2.3.2.sig
deleted file mode 100644
index b24e09e..0000000
--- a/tools/curr-sig/pgrouting--2.3.2.sig
+++ /dev/null
@@ -1,141 +0,0 @@
-#VERSION pgrouting 2.3.2
-#TYPES
-contraction_vertex(int,int,char,text)
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
-#FUNCTIONS
-_pgr_astar(text,bigint,bigint,boolean ,integer ,float ,float ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_maxflow(text,bigint,bigint,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,bigint,anyarray,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,anyarray,bigint,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,anyarray,anyarray,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pickdeliver(text,integer,float,float ,integer ,out integer,out integer,out integer,out bigint,out float,out float,out float,out float,out float )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_tsp(text,bigint ,bigint ,float ,integer ,integer ,integer ,float ,float ,float ,boolean ,out integer,out bigint,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
-pgr_apspjohnson(text)
-pgr_apspwarshall(text,boolean,boolean)
-pgr_astar(text,bigint,bigint,boolean ,integer ,float ,float ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_astar(text,integer,integer,boolean,boolean)
-pgr_bdastar(text,integer,integer,boolean,boolean)
-pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_contractgraph(text,bigint[],integer ,bigint[] ,boolean ,out integer,out text,out bigint,out bigint[],out bigint,out bigint,out float)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracostmatrix(text,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_edgedisjointpaths(in text,in bigint,in bigint,in boolean ,out integer,out integer,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in bigint,in anyarray,in boolean ,out integer,out integer,out bigint,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in anyarray,in bigint,in boolean ,out integer,out integer,out bigint,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in anyarray,in anyarray,in boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint )
-pgr_endpoint(geometry)
-pgr_euclediantsp(text,bigint ,bigint ,float ,integer ,integer ,integer ,float ,float ,float ,boolean ,out integer,out bigint,out float,out float)
-pgr_fakecontraction(text,integer[])
-pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
-pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer )
-pgr_iscolumnintable(text,text)
-pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_maxflowboykovkolmogorov(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maximumcardinalitymatching(text,boolean ,out integer,out bigint,out bigint,out bigint )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
-pgr_quote_ident(text)
-pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
-pgr_version()
-pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscostmatrix(text,text,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
diff --git a/tools/curr-sig/pgrouting--2.4.0.sig b/tools/curr-sig/pgrouting--2.4.0.sig
new file mode 100644
index 0000000..44da2d6
--- /dev/null
+++ b/tools/curr-sig/pgrouting--2.4.0.sig
@@ -0,0 +1,156 @@
+#VERSION pgrouting 2.4.0
+#TYPES
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
+#FUNCTIONS
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
+pgr_apspjohnson(text)
+pgr_apspwarshall(text,boolean,boolean)
+pgr_astarcostmatrix(text,anyarray,boolean,integer,double precision,double precision)
+pgr_astarcost(text,anyarray,anyarray,boolean,integer,double precision,double precision)
+pgr_astarcost(text,anyarray,bigint,boolean,integer,double precision,double precision)
+pgr_astarcost(text,bigint,anyarray,boolean,integer,double precision,double precision)
+pgr_astarcost(text,bigint,bigint,boolean,integer,double precision,double precision)
+pgr_astar(text,anyarray,anyarray,boolean,integer,double precision,double precision)
+_pgr_astar(text,anyarray,anyarray,boolean,integer,double precision,double precision,boolean)
+pgr_astar(text,anyarray,bigint,boolean,integer,double precision,double precision)
+_pgr_astar(text,anyarray,bigint,boolean,integer,double precision,double precision,boolean)
+pgr_astar(text,bigint,anyarray,boolean,integer,double precision,double precision)
+_pgr_astar(text,bigint,anyarray,boolean,integer,double precision,double precision,boolean)
+pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision)
+_pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision,boolean)
+pgr_astar(text,integer,integer,boolean,boolean)
+pgr_bdastar(text,integer,integer,boolean,boolean)
+pgr_bddijkstra(text,bigint,bigint)
+pgr_bddijkstra(text,bigint,bigint,boolean)
+_pgr_bddijkstra(text,bigint,bigint,boolean,boolean)
+pgr_bddijkstra(text,integer,integer,boolean,boolean)
+_pgr_checkverttab(text,text[],integer,text)
+pgr_contractgraph(text,bigint[],integer,bigint[],boolean)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracostmatrix(text,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
+pgr_dijkstra(text,integer,integer,boolean,boolean)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+pgr_edgedisjointpaths(text,anyarray,anyarray,boolean)
+pgr_edgedisjointpaths(text,anyarray,bigint,boolean)
+pgr_edgedisjointpaths(text,bigint,anyarray,boolean)
+pgr_edgedisjointpaths(text,bigint,bigint,boolean)
+_pgr_endpoint(geometry)
+pgr_endpoint(geometry)
+pgr_euclediantsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
+pgr_flipedges(geometry[])
+pgr_floydwarshall(text,boolean)
+pgr_getcolumnname(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
+pgr_iscolumnindexed(text,text)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,integer,integer,integer,boolean)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+pgr_maxflowboykovkolmogorov(text,anyarray,anyarray)
+pgr_maxflowboykovkolmogorov(text,anyarray,bigint)
+pgr_maxflowboykovkolmogorov(text,bigint,anyarray)
+pgr_maxflowboykovkolmogorov(text,bigint,bigint)
+pgr_maxflowedmondskarp(text,anyarray,anyarray)
+pgr_maxflowedmondskarp(text,anyarray,bigint)
+pgr_maxflowedmondskarp(text,bigint,anyarray)
+pgr_maxflowedmondskarp(text,bigint,bigint)
+pgr_maxflowpushrelabel(text,anyarray,anyarray)
+pgr_maxflowpushrelabel(text,anyarray,bigint)
+pgr_maxflowpushrelabel(text,bigint,anyarray)
+pgr_maxflowpushrelabel(text,bigint,bigint)
+pgr_maxflow(text,anyarray,anyarray)
+_pgr_maxflow(text,anyarray,anyarray,text,boolean)
+pgr_maxflow(text,anyarray,bigint)
+_pgr_maxflow(text,anyarray,bigint,text,boolean)
+pgr_maxflow(text,bigint,anyarray)
+_pgr_maxflow(text,bigint,anyarray,text,boolean)
+pgr_maxflow(text,bigint,bigint)
+_pgr_maxflow(text,bigint,bigint,text,boolean)
+pgr_maximumcardinalitymatching(text,boolean)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+_pgr_pickdeliver(text,integer,double precision,double precision,integer)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
+pgr_quote_ident(text)
+_pgr_startpoint(geometry)
+pgr_startpoint(geometry)
+pgr_texttopoints(text,integer)
+_pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
+pgr_tsp(text,integer,integer)
+_pgr_unnest_matrix(double precision[])
+pgr_version()
+_pgr_versionless(text,text)
+pgr_versionless(text,text)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscostmatrix(text,text,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/git-tools/gitattributes b/tools/git-tools/gitattributes
new file mode 100644
index 0000000..46475ef
--- /dev/null
+++ b/tools/git-tools/gitattributes
@@ -0,0 +1,19 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text=auto
+
+# Explicitly declare text files you want to always be normalized and converted
+# to native line endings on checkout.
+*.c text eol=lf
+*.h text eol=lf
+*.cpp text eol=lf
+*.hpp text eol=lf
+*.rst text eol=lf
+*.queries text eol=lf
+*.dox text eol=lf
+*.sh text eol=lf
+*.md text eol=lf
+*.queries text eol=lf
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
diff --git a/tools/mk-signature-file b/tools/mk-signature-file.pl
similarity index 100%
rename from tools/mk-signature-file
rename to tools/mk-signature-file.pl
diff --git a/tools/release-scripts/check-release.sh b/tools/release-scripts/check-release.sh
new file mode 100755
index 0000000..acc7c3c
--- /dev/null
+++ b/tools/release-scripts/check-release.sh
@@ -0,0 +1,327 @@
+#!/bin/bash
+
+set -e
+
+if [[ -z  $1 ]]; then
+    echo "Mayor missing";
+    echo "Usage"
+    echo "tools/release-scripts/release-check.sh Mayor Minor Micro Last";
+    exit 1;
+fi
+if [[ -z  $2 ]]; then
+    echo "Minor missing";
+    echo "Usage"
+    echo "tools/release-scripts/release-check.sh Mayor Minor Micro Last";
+    exit 1;
+fi
+
+if [[ -z  $3 ]]; then
+    echo "Micro missing";
+    echo "Usage"
+    echo "tools/release-scripts/release-check.sh Mayor Minor Micro Last";
+    exit 1;
+fi
+
+if [[ -z  $4 ]]; then
+    echo "Last Micro missing";
+    echo "Usage"
+    echo "tools/release-scripts/release-check.sh Mayor Minor Micro Last";
+    exit 1;
+fi
+
+MAYOR=$1
+MINOR=$2
+MICRO=0
+PREV_REL=$4
+RC=""
+
+#---------------------------------------------------------------------
+echo "### Verify branch to be release/$MAYOR.$MINOR"
+echo
+#---------------------------------------------------------------------
+
+BRANCH="$(git rev-parse --abbrev-ref HEAD)"
+echo "- [x] Working Branch: release/$MAYOR.$MINOR";
+
+if [[ "release/$MAYOR.$MINOR" == "$BRANCH" ]]; then
+   echo "  - [x] Already in branch $BRANCH";
+else
+   echo "  - Current Branch: $BRANCH";
+   echo "  - [x] Changing to branch $BRANCH";
+   echo "\`\`\`"
+   echo git checkout release/$MAYOR.$MINOR
+   echo "\`\`\`"
+   git checkout release/$MAYOR.$MINOR
+fi
+
+#---------------------------------------------------------------------
+echo
+echo "### Verify typos"
+echo
+#---------------------------------------------------------------------
+
+echo "\`\`\`"
+echo sh tools/scripts/fix_typos.sh
+echo "\`\`\`"
+
+sh tools/scripts/fix_typos.sh
+
+if [[ $? != 0 ]]; then
+    echo "FATAL: Typos were found"
+    exit 1
+else
+    echo "- [x] Typos checked: OK"
+fi
+
+
+#---------------------------------------------------------------------
+echo
+echo "### Verify Current NEWS & CHANGLOG"
+echo
+#---------------------------------------------------------------------
+echo
+echo "- [x] Checking NEWS section $MAYOR.$MINOR.$MICRO exists"
+echo "\`\`\`"
+echo "grep $MAYOR.$MINOR.$MICRO NEWS"
+echo "\`\`\`"
+CURRENTNEWS=$(grep $MAYOR.$MINOR.$MICRO NEWS)
+if [[ $? != 0 ]]; then
+    echo "FATAL: Section $MAYOR.$MINOR.$MICRO in NEWS file is missing"
+    exit 1
+else
+    echo 
+fi
+
+
+echo "- [x] Checking release_notes.rst file section $MAYOR.$MINOR.$MICRO exists"
+echo "\`\`\`"
+echo "grep $MAYOR.$MINOR.$MICRO doc/src/release_notes.rst | grep ref"
+echo "\`\`\`"
+CURRENTNEWS=$(grep $MAYOR.$MINOR.$MICRO doc/src/release_notes.rst | grep ref)
+if [[ $? != 0 ]]; then
+    echo "FATAL: Section $MAYOR.$MINOR.$MICRO in release_notes.rst file are missing"
+    exit 1
+else
+    echo 
+fi
+
+
+
+#---------------------------------------------------------------------
+echo
+echo "### Verify $PREV_REL NEWS & CHANGLOG"
+echo
+#---------------------------------------------------------------------
+
+echo "- [x] Checking NEWS section $PREV_REL exists"
+echo "\`\`\`"
+echo "grep $PREV_REL NEWS"
+echo "\`\`\`"
+OLDNEWS=$(grep $PREV_REL NEWS)
+if [[ $? != 0 ]]; then
+    echo "$PREV_REL NEWS are missing in NEWS file"
+    exit 1
+else
+    echo 
+fi
+
+
+echo "- [x] Checking release_notes.rst section $PREV_REL exists"
+echo "\`\`\`"
+grep $PREV_REL doc/src/release_notes.rst | grep ref
+echo "\`\`\`"
+OLDNEWS=$(grep $PREV_REL doc/src/release_notes.rst | grep ref)
+if [[ $? != 0 ]]; then
+    echo "$PREV_REL NEWS are missing in release_notes.rst file"
+    exit 1
+else
+    echo 
+fi
+
+
+
+
+#---------------------------------------------------------------------
+echo
+echo "### Check version information"
+echo 
+#---------------------------------------------------------------------
+echo "- [x] Check mayor information"
+echo "\`\`\`"
+echo "cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_MAJOR \"$MAYOR\")'"
+echo "\`\`\`"
+if [[ $(cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_MAJOR' | grep $MAYOR) != "set(PGROUTING_VERSION_MAJOR \"$MAYOR\")" ]]; then
+    echo "FATAL: PGROUTING_VERSION_MAJOR is not $MAYOR"
+    exit 1
+else
+    echo
+fi
+
+
+echo "- [x] Check minor information"
+echo "\`\`\`"
+echo "cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_MINOR \"$MINOR\")'"
+echo "\`\`\`"
+if [[ $(cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_MINOR' | grep $MINOR) !=  "set(PGROUTING_VERSION_MINOR \"$MINOR\")" ]]; then
+    echo "FATAL: PGROUTING_VERSION_MINOR is not $MINOR"
+    exit 1
+else
+    echo
+fi
+
+echo "- [x] Check patch information"
+echo "\`\`\`"
+echo "cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_PATCH \"0\")'"
+echo "\`\`\`"
+if [[ $(cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_PATCH' | grep $MICRO) !=  "set(PGROUTING_VERSION_PATCH \"$MICRO\")" ]]; then
+    echo "FATAL: PGROUTING_VERSION_PATCH is not $MICRO"
+    exit 1
+else
+    echo
+fi
+
+echo "- [x] Check dev information"
+echo "\`\`\`"
+echo "cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_DEV \"$RC\")'"
+echo "\`\`\`"
+if [[ $(cat CMakeLists.txt | grep 'set(PGROUTING_VERSION_DEV' ) !=  "set(PGROUTING_VERSION_DEV \"$RC\")" ]]; then
+    echo "FATAL: PGROUTING_VERSION_DEV is not $RC"
+    exit 1
+else
+    echo 
+fi
+
+
+#---------------------------------------------------------------------
+echo
+echo "### Check pgr_version test result"
+echo 
+#---------------------------------------------------------------------
+
+echo "\`\`\`"
+echo "cat doc/test/utilities-any.result | grep \"$MAYOR.$MINOR.$MICRO\""
+echo "\`\`\`"
+if [[ $(cat doc/test/utilities-any.result | grep "$MAYOR.$MINOR.$MICRO") != "$MAYOR.$MINOR.$MICRO" ]]; then
+    echo "FATAL: doc/test/utilities-any.result is not $MAYOR.$MINOR.$MICRO"
+    exit 1
+else
+    echo "- [x] pgr_version result: OK"
+fi
+
+echo "\`\`\`"
+echo "cat VERSION | grep \"release/$MAYOR.$MINOR\""
+echo "\`\`\`"
+if [[ $(cat VERSION | grep "release/$MAYOR.$MINOR") != *"release/$MAYOR.$MINOR" ]]; then
+    echo "FATAL: VERSION branch should be release/$MAYOR.$MINOR"
+    #exit 1
+else
+    echo "  -[x] VERSION file branch: OK"
+fi
+
+#---------------------------------------------------------------------
+function test_file {                                                                                                                                                        
+
+if [ -f tools/sigs/pgrouting--$1.sig ]
+then
+    echo "- [x] tools/sigs/pgrouting--$1.sig"
+else
+    echo "  FATAL: tools/sigs/pgrouting--$1.sig Not found"
+fi
+}
+
+#---------------------------------------------------------------------
+echo "### Checking signature files"
+test_file 2.3.2
+test_file 2.3.1
+test_file 2.3.0
+test_file 2.2.4
+test_file 2.2.3
+test_file 2.2.2
+test_file 2.2.1
+test_file 2.2.0
+test_file 2.1.0
+test_file 2.0.1
+test_file 2.0.0
+
+
+#---------------------------------------------------------------------
+echo "### Locally make a clean build as Release"
+#---------------------------------------------------------------------
+echo "\`\`\`"
+echo "sudo rm -f /usr/lib/postgresql/9.3/lib/libpgrouting-2.4.so"
+echo "sudo rm -f /usr/share/postgresql/9.3/extension/pgrouting*2.4.0*"
+echo "rm -rf build"
+echo cd build
+echo cmake  -DWITH_DOC=ON -DBUILD_DOXY=ON -DCMAKE_BUILD_TYPE=Release ..
+echo make
+echo sudo make install
+echo make doc
+echo make doxy
+echo cd ..
+echo "\`\`\`"
+
+echo - [x] completed local builds
+
+bash tools/release-scripts/compile-release.sh 5
+bash tools/release-scripts/compile-release.sh 4.9
+bash tools/release-scripts/compile-release.sh 4.6
+bash tools/release-scripts/compile-release.sh 4.8
+
+#---------------------------------------------------------------------
+echo "### checking the signature files dont change"
+#---------------------------------------------------------------------
+
+sh tools/release-scripts/get_signatures.sh 2.4.0 ___sig_generate___ curr-sig > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.3.2 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.3.1 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.3.0 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.2.4 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.2.3 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.2.2 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.2.1 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.2.0 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.1.0 ___sig_generate___ sigs > build/tmp_sigs.txt
+#version 2.0.1 can not be upgraded
+#sh tools/release-scripts/get_signatures.sh 2.0.1 ___sig_generate___ sigs > build/tmp_sigs.txt
+sh tools/release-scripts/get_signatures.sh 2.0.0 ___sig_generate___ sigs > build/tmp_sigs.txt
+
+echo
+echo - [x] completed check: OK
+echo
+
+#---------------------------------------------------------------------
+echo "### Locally run the update tester"
+#---------------------------------------------------------------------
+echo "\`\`\`"
+echo bash tools/testers/update-tester.sh
+echo "\`\`\`"
+bash tools/testers/update-tester.sh
+if [[ $? != 0 ]]; then
+    echo "FATAL on the update-tester"
+    exit 1
+fi
+echo - [x] completed update testing
+
+
+#---------------------------------------------------------------------
+echo "### execute the documentation queries"
+#---------------------------------------------------------------------
+echo "\`\`\`"
+echo tools/testers/algorithm-tester.pl -documentation
+echo git status
+echo "\`\`\`"
+tools/testers/algorithm-tester.pl -documentation > build/tmp_generate_doc.txt
+if [[ $? != 0 ]]; then
+    echo "FATAL errors found generating documentation result files"
+    exit 1
+fi
+
+if [[ $(git status | grep 'Changes not staged for commit:') ]]; then
+    echo "FATAL: at least one result file changed"
+    exit 1
+fi
+
+echo - [x] No files changed
+
+
+echo "End of check"
diff --git a/tools/release-scripts/compile-release.sh b/tools/release-scripts/compile-release.sh
new file mode 100755
index 0000000..a5d94fa
--- /dev/null
+++ b/tools/release-scripts/compile-release.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+set -e
+
+CPPVERSION=$1
+
+function test_compile {                                                                                                                                                                                                          
+
+echo ------------------------------------
+echo ------------------------------------
+echo Compiling with $1
+echo ------------------------------------
+
+sudo update-alternatives --set gcc /usr/bin/gcc-$1
+
+cd build/
+cmake  -DWITH_DOC=ON -DBUILD_DOXY=ON -DCMAKE_BUILD_TYPE=Release .. > tmp_cmake.txt
+make > tmp_make.txt 2>tmp_make_err.txt
+sudo make install > tmp_make_install.txt
+cp lib/pgrouting--2.4.0.sig  ../tools/curr-sig/
+cd ..
+
+echo "  - [x] Compilation OK"
+
+tools/testers/algorithm-tester.pl > build/tmp_tests.txt
+echo "  - [x] Documentation tests OK"
+
+
+dropdb --if-exists ___pgr___test___
+createdb  ___pgr___test___
+sh ./tools/testers/pg_prove_tests.sh vicky > build/tmp_pgtap.txt
+dropdb  ___pgr___test___
+echo '  - [x] Pgtap tests OK'
+
+if [[ "$1" == "4.8" ]]; then
+    cd build
+    make doc 
+    echo "  - [x] Build Users documentation OK"
+    make doxy
+    echo "  - [x] Build developers documentation OK"
+    cd ..
+fi
+
+}
+
+sudo rm -f /usr/lib/postgresql/9.3/lib/libpgrouting-2.4.so
+sudo rm -f /usr/share/postgresql/9.3/extension/pgrouting*2.4.0*
+rm -rf build/*
+test_compile $CPPVERSION
+
+exit 0
diff --git a/tools/release-scripts/get_signatures.sh b/tools/release-scripts/get_signatures.sh
new file mode 100755
index 0000000..d5dde28
--- /dev/null
+++ b/tools/release-scripts/get_signatures.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+set -e
+
+if [  "$#" -lt 3 ] ; then
+    echo "Usage: getSignatures.sh VERSION DB_ARGS"
+    echo "  VERSION like '2.4.0'"
+    echo "  DB_NAME like 'routing'"
+    echo "  DIR: 'curr-sig' OR 'sigs'"
+    echo "  (optional) DB_ARGS like  -U postgres -h localhost -p 5432 "
+    exit 0
+fi
+
+VERSION=$1
+DB_NAME=$2
+DIR=$3
+shift
+shift
+shift
+# DB_ARGS is the remaining of the arguments
+
+FILE=tools/$DIR/pgrouting--$VERSION.sig
+#FILE=test.sig
+
+createdb $* $DB_NAME
+
+psql  $*  $DB_NAME <<EOF
+SET client_min_messages = WARNING;
+drop extension if exists pgrouting;
+drop extension if exists postgis;
+create extension postgis;
+create extension pgrouting with version '$VERSION';
+EOF
+
+echo "#VERSION pgrouting $VERSION" > $FILE
+echo "#TYPES" >> $FILE
+psql $* $DB_NAME -c '\dx+ pgrouting' -A | grep '^type' | cut -d ' ' -f2- | sort >> $FILE
+echo "#FUNCTIONS" >> $FILE
+psql $* $DB_NAME -c '\dx+ pgrouting' -A | grep '^function' | cut -d ' ' -f2- | sort >> $FILE
+
+dropdb --if-exists $* $DB_NAME
diff --git a/tools/scripts/README.txt b/tools/scripts/README.txt
new file mode 100644
index 0000000..4568f62
--- /dev/null
+++ b/tools/scripts/README.txt
@@ -0,0 +1,32 @@
+scripts for developers
+----------------------
+
+To be executed from the root of the repository
+cd /path/to/repo/
+
+Spell checker
+..............
+
+sh tools/scripts/fix_typos.sh
+
+- creates a directory fix_typos:
+  - contains the code and dictonaries
+- checks the spelling of the:
+  - src
+  - doc
+- does not check:
+  - tools
+
+
+Code linter
+...........
+
+Requierements
+- python
+
+sh tools/scripts/code_checker.sh <directory>
+
+- if no directory is given:
+  - it works on all src/*/src
+
+- output is grouped by extension
diff --git a/tools/scripts/code_checker.sh b/tools/scripts/code_checker.sh
new file mode 100644
index 0000000..992049b
--- /dev/null
+++ b/tools/scripts/code_checker.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+#  Project:  pgRouting
+#  Purpose:  (Interactive) script to lint C and C++ code
+#  Author:   Vicky Vergara <vicky_vergara at hotmail.com>
+#
+###############################################################################
+#  Copyright (c) 2016, Vicky Vergara <vicky_vergara at hotmail.com>
+#
+#  Permission is hereby granted, free of charge, to any person obtaining a
+#  copy of this software and associated documentation files (the "Software"),
+#  to deal in the Software without restriction, including without limitation
+#  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#  and/or sell copies of the Software, and to permit persons to whom the
+#  Software is furnished to do so, subject to the following conditions:
+#
+#  The above copyright notice and this permission notice shall be included
+#  in all copies or substantial portions of the Software.
+#
+#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+#  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+#  DEALINGS IN THE SOFTWARE.
+###############################################################################
+
+if ! test -d code_linter; then
+    # Get our fork of codespell that adds --words-white-list and full filename support for -S option
+    mkdir code_linter
+    cd code_linter
+    git clone https://github.com/google/styleguide
+    cd styleguide
+    git checkout gh-pages
+    cd ../..
+fi
+
+DIRECTORY=$1
+if test -z "$DIRECTORY"; then
+    echo --------------------
+    echo ------   *.h  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py src/*/src/*.h
+    echo --------------------
+    echo ------ *.hpp  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py --extensions=hpp --headers=hpp --filter=-runtime/references src/*/src/*.hpp
+    echo --------------------
+    echo ------   *.c  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py --extensions=c src/*/src/*.c
+    echo --------------------
+    echo ------ *.cpp  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py --filter=-runtime/references src/*/src/*.cpp
+else
+    echo --------------------
+    echo ------   *.c  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py --extensions=c --filter=-readability/casting src/$DIRECTORY/src/*.c
+    echo --------------------
+    echo ------ *.cpp  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py --filter=-runtime/references src/$DIRECTORY/src/*.cpp
+    echo --------------------
+    echo ------   *.h  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py src/$DIRECTORY/src/*.h
+    echo --------------------
+    echo ------ *.hpp  ------
+    echo --------------------
+    python code_linter/styleguide/cpplint/cpplint.py --extensions=hpp --headers=hpp --filter=-runtime/references src/$DIRECTORY/src/*.hpp
+fi
+
+
diff --git a/tools/scripts/fix_typos.sh b/tools/scripts/fix_typos.sh
index db5d744..c35b6db 100644
--- a/tools/scripts/fix_typos.sh
+++ b/tools/scripts/fix_typos.sh
@@ -47,15 +47,14 @@ if ! test -d fix_typos; then
 fi
 
 EXCLUDED_FILES="*/doc/i18n/*"
-#EXCLUDED_FILES="$EXCLUDED_FILES,*/src/*/test/*"
 EXCLUDED_FILES="$EXCLUDED_FILES,*/src/*/test/pgtap/*"
-#EXCLUDED_FILES="$EXCLUDED_FILES,*/src/*/src/*"
-#EXCLUDED_FILES="$EXCLUDED_FILES,*/src/*/sql/*"
-#EXCLUDED_FILES="$EXCLUDED_FILES,*/src/*/doc/*"
-EXCLUDED_FILES="$EXCLUDED_FILES,*/fix_typos/*,*/build/*"
+EXCLUDED_FILES="$EXCLUDED_FILES,*/fix_typos/*"
+EXCLUDED_FILES="$EXCLUDED_FILES,*/build/*"
+EXCLUDED_FILES="$EXCLUDED_FILES,*/code_linter/*"
 EXCLUDED_FILES="$EXCLUDED_FILES,*/.git/*"
 EXCLUDED_FILES="$EXCLUDED_FILES,*/tools/*"
 
+
 #WORDS_WHITE_LIST="poSession,FIDN,TRAFIC,HTINK,repID,oCurr,INTREST,oPosition"
 #WORDS_WHITE_LIST="$WORDS_WHITE_LIST,CPL_SUPRESS_CPLUSPLUS,SRP_NAM,ADRG_NAM,'SRP_NAM,AuxilaryTarget"
 # IRIS driver metadata item names: FIXME ?
diff --git a/tools/sigs/pgrouting--2.0.0.sig b/tools/sigs/pgrouting--2.0.0.sig
index df4e0dc..33a4204 100644
--- a/tools/sigs/pgrouting--2.0.0.sig
+++ b/tools/sigs/pgrouting--2.0.0.sig
@@ -1,12 +1,12 @@
 #VERSION pgrouting 2.0.0
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-pgr_alphashape(text,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
+pgr_alphashape(text)
 pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
@@ -15,23 +15,24 @@ pgr_bddijkstra(text,integer,integer,boolean,boolean)
 pgr_createtopology(text,double precision,text,text,text,text,text)
 pgr_createverticestable(text,text,text,text,text)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_drivingdistance(text,integer,float8,boolean,boolean)
+pgr_drivingdistance(text,integer,double precision,boolean,boolean)
 pgr_endpoint(geometry)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
+pgr_gettablename(text)
+pgr_iscolumnindexed(text,text)
 pgr_iscolumnintable(text,text)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_makedistancematrix(text,out double precision[],out integer[])
+pgr_makedistancematrix(text)
 pgr_nodenetwork(text,double precision,text,text,text)
+pgr_pointsaspolygon(character varying)
 pgr_pointtoid(geometry,double precision,text,integer)
-pgr_pointsaspolygon(varchar)
 pgr_quote_ident(text)
 pgr_startpoint(geometry)
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
 pgr_trsp(text,integer,integer,boolean,boolean,text)
-pgr_tsp(float8[][],integer,integer,out integer,out integer)
+pgr_tsp(double precision[],integer,integer)
 pgr_tsp(text,integer,integer)
 pgr_version()
 pgr_versionless(text,text)
diff --git a/tools/sigs/pgrouting--2.0.1.sig b/tools/sigs/pgrouting--2.0.1.sig
index 2f22ebb..f94f2f9 100644
--- a/tools/sigs/pgrouting--2.0.1.sig
+++ b/tools/sigs/pgrouting--2.0.1.sig
@@ -1,12 +1,12 @@
 #VERSION pgrouting 2.0.1
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-pgr_alphashape(text,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
+pgr_alphashape(text)
 pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
@@ -15,23 +15,24 @@ pgr_bddijkstra(text,integer,integer,boolean,boolean)
 pgr_createtopology(text,double precision,text,text,text,text,text)
 pgr_createverticestable(text,text,text,text,text)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_drivingdistance(text,integer,float8,boolean,boolean)
+pgr_drivingdistance(text,integer,double precision,boolean,boolean)
 pgr_endpoint(geometry)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
+pgr_gettablename(text)
+pgr_iscolumnindexed(text,text)
 pgr_iscolumnintable(text,text)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_makedistancematrix(text,out double precision[],out integer[])
+pgr_makedistancematrix(text)
 pgr_nodenetwork(text,double precision,text,text,text)
+pgr_pointsaspolygon(character varying)
 pgr_pointtoid(geometry,double precision,text,integer)
-pgr_pointsaspolygon(varchar)
 pgr_quote_ident(text)
 pgr_startpoint(geometry)
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
 pgr_trsp(text,integer,integer,boolean,boolean,text)
-pgr_tsp(float8[][],integer,integer,out integer,out integer)
+pgr_tsp(double precision[],integer,integer)
 pgr_tsp(text,integer,integer)
 pgr_version()
 pgr_versionless(text,text)
diff --git a/tools/sigs/pgrouting--2.1.0.sig b/tools/sigs/pgrouting--2.1.0.sig
index a6a67bf..2034648 100644
--- a/tools/sigs/pgrouting--2.1.0.sig
+++ b/tools/sigs/pgrouting--2.1.0.sig
@@ -1,88 +1,86 @@
 #VERSION pgrouting 2.1.0
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean,boolean,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean,boolean,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_versionless(text,text)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,bigint,bigint,boolean,boolean)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,bigint,float8,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean,boolean)
+pgr_drivingdistance(text,bigint,double precision)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
 pgr_flipedges(geometry[])
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer,out integer,out integer,out integer,out integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_makedistancematrix(text,out double precision[],out integer[])
-pgr_nodenetwork(text,double precision,text ,text ,text )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+pgr_makedistancematrix(text)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer[],float8[],boolean,boolean,text )
-pgr_trsp(text,integer[],boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,integer[],boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer[],boolean,boolean,text)
+pgr_trsp(text,integer[],double precision[],boolean,boolean,text)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],bool,bool,bool)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
diff --git a/tools/sigs/pgrouting--2.2.0.sig b/tools/sigs/pgrouting--2.2.0.sig
index 215c855..e658c85 100644
--- a/tools/sigs/pgrouting--2.2.0.sig
+++ b/tools/sigs/pgrouting--2.2.0.sig
@@ -1,109 +1,109 @@
 #VERSION pgrouting 2.2.0
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer,out integer,out integer,out integer,out integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],bool,bool,bool)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.2.1.sig b/tools/sigs/pgrouting--2.2.1.sig
index 740f8cf..4a7a0b7 100644
--- a/tools/sigs/pgrouting--2.2.1.sig
+++ b/tools/sigs/pgrouting--2.2.1.sig
@@ -1,109 +1,109 @@
 #VERSION pgrouting 2.2.1
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer,out integer,out integer,out integer,out integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],bool,bool,bool)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.2.2.sig b/tools/sigs/pgrouting--2.2.2.sig
index 22f3147..239a0fd 100644
--- a/tools/sigs/pgrouting--2.2.2.sig
+++ b/tools/sigs/pgrouting--2.2.2.sig
@@ -1,109 +1,109 @@
 #VERSION pgrouting 2.2.2
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer,out integer,out integer,out integer,out integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],bool,bool,bool)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.2.3.sig b/tools/sigs/pgrouting--2.2.3.sig
index d96653c..56aa6d1 100644
--- a/tools/sigs/pgrouting--2.2.3.sig
+++ b/tools/sigs/pgrouting--2.2.3.sig
@@ -1,109 +1,109 @@
 #VERSION pgrouting 2.2.3
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer,out integer,out integer,out integer,out integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],bool,bool,bool)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.2.4.sig b/tools/sigs/pgrouting--2.2.4.sig
index 6afe484..3d1e6dc 100644
--- a/tools/sigs/pgrouting--2.2.4.sig
+++ b/tools/sigs/pgrouting--2.2.4.sig
@@ -1,109 +1,109 @@
 #VERSION pgrouting 2.2.4
 #TYPES
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer,out integer,out integer,out integer,out integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
-pgr_vidstodmatrix(text,integer[],bool,bool,bool)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.3.0.sig b/tools/sigs/pgrouting--2.3.0.sig
index d22bfe3..2799108 100644
--- a/tools/sigs/pgrouting--2.3.0.sig
+++ b/tools/sigs/pgrouting--2.3.0.sig
@@ -1,140 +1,140 @@
 #VERSION pgrouting 2.3.0
 #TYPES
-contraction_vertex(int,int,char,text)
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+contraction_vertex
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_astar(text,bigint,bigint,boolean ,integer ,float ,float ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_maxflow(text,bigint,bigint,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,bigint,anyarray,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,anyarray,bigint,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,anyarray,anyarray,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pickdeliver(text,integer,float,float ,integer ,out integer,out integer,out integer,out bigint,out float,out float,out float,out float,out float )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_tsp(text,bigint ,bigint ,float ,integer ,integer ,integer ,float ,float ,float ,boolean ,out integer,out bigint,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
-pgr_astar(text,bigint,bigint,boolean ,integer ,float ,float ,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision)
+_pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_contractgraph(text,bigint[],integer ,bigint[] ,boolean ,out integer,out text,out bigint,out bigint[],out bigint,out bigint,out float)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+pgr_contractgraph(text,bigint[],integer,bigint[],boolean)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracostmatrix(text,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracostmatrix(text,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_edgedisjointpaths(in text,in bigint,in bigint,in boolean ,out integer,out integer,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in bigint,in anyarray,in boolean ,out integer,out integer,out bigint,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in anyarray,in bigint,in boolean ,out integer,out integer,out bigint,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in anyarray,in anyarray,in boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint )
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+pgr_edgedisjointpaths(text,anyarray,anyarray,boolean)
+pgr_edgedisjointpaths(text,anyarray,bigint,boolean)
+pgr_edgedisjointpaths(text,bigint,anyarray,boolean)
+pgr_edgedisjointpaths(text,bigint,bigint,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
-pgr_euclediantsp(text,bigint ,bigint ,float ,integer ,integer ,integer ,float ,float ,float ,boolean ,out integer,out bigint,out float,out float)
+pgr_euclediantsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
 pgr_fakecontraction(text,integer[])
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_maxflowboykovkolmogorov(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maximumcardinalitymatching(text,boolean ,out integer,out bigint,out bigint,out bigint )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+pgr_maxflowboykovkolmogorov(text,anyarray,anyarray)
+pgr_maxflowboykovkolmogorov(text,anyarray,bigint)
+pgr_maxflowboykovkolmogorov(text,bigint,anyarray)
+pgr_maxflowboykovkolmogorov(text,bigint,bigint)
+pgr_maxflowedmondskarp(text,anyarray,anyarray)
+pgr_maxflowedmondskarp(text,anyarray,bigint)
+pgr_maxflowedmondskarp(text,bigint,anyarray)
+pgr_maxflowedmondskarp(text,bigint,bigint)
+pgr_maxflowpushrelabel(text,anyarray,anyarray)
+pgr_maxflowpushrelabel(text,anyarray,bigint)
+pgr_maxflowpushrelabel(text,bigint,anyarray)
+pgr_maxflowpushrelabel(text,bigint,bigint)
+_pgr_maxflow(text,anyarray,anyarray,text)
+_pgr_maxflow(text,anyarray,bigint,text)
+_pgr_maxflow(text,bigint,anyarray,text)
+_pgr_maxflow(text,bigint,bigint,text)
+pgr_maximumcardinalitymatching(text,boolean)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+_pgr_pickdeliver(text,integer,double precision,double precision,integer)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
 pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscostmatrix(text,text,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscostmatrix(text,text,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.3.1.sig b/tools/sigs/pgrouting--2.3.1.sig
index bf44758..3b50cce 100644
--- a/tools/sigs/pgrouting--2.3.1.sig
+++ b/tools/sigs/pgrouting--2.3.1.sig
@@ -1,141 +1,141 @@
 #VERSION pgrouting 2.3.1
 #TYPES
-contraction_vertex(int,int,char,text)
-pgr_costResult(integer,integer,integer,float8)
-pgr_costResult3(integer,integer,integer,integer,float8)
-pgr_geomResult(integer,integer,integer,geometry)
+contraction_vertex
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
 #FUNCTIONS
-_pgr_astar(text,bigint,bigint,boolean ,integer ,float ,float ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_checkverttab(text,text[],in int ,in text ,out text,out text)
-_pgr_createindex(text,text,text,text,in int ,in text )
-_pgr_createindex(text,text,text,in int ,in text )
-_pgr_dijkstra(text,bigint,bigint,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,bigint,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,bigint,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_dijkstra(text,anyarray,anyarray,boolean ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,bigint,float8,boolean,out integer,out bigint,out bigint,out float,out float)
-_pgr_drivingdistance(text,anyarray,float8,boolean,boolean,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_endpoint(geometry)
-_pgr_getcolumnname(text,text,text,in int ,in text )
-_pgr_getcolumnname(text,text,in int ,in text )
-_pgr_getcolumntype(text,text,text,in int ,in text )
-_pgr_getcolumntype(text,text,in int ,in text )
-_pgr_gettablename(in text,in int ,in text ,out text,out text)
-_pgr_get_statement(text)
-_pgr_iscolumnintable(text,text)
-_pgr_iscolumnindexed(text,text,text,in int ,in text )
-_pgr_iscolumnindexed(text,text,in int ,in text )
-_pgr_ksp(text,bigint,bigint,integer,boolean,boolean,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_makedistancematrix(text,out double precision[],out integer[])
-_pgr_maxflow(text,bigint,bigint,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,bigint,anyarray,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,anyarray,bigint,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_maxflow(text,anyarray,anyarray,text ,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-_pgr_msg(in int,in text,in text )
-_pgr_onerror(in boolean,in int,in text,in text,in text ,in text )
-_pgr_parameter_check(text,text,boolean )
-_pgr_pickdeliver(text,integer,float,float ,integer ,out integer,out integer,out integer,out bigint,out float,out float,out float,out float,out float )
-_pgr_pointtoid(geometry,double precision,text,integer)
-_pgr_quote_ident(text)
-_pgr_startpoint(geometry)
-_pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-_pgr_trsp(text,integer,integer,boolean,boolean,text )
-_pgr_trspviavertices(text,integer[],boolean,boolean,text )
-_pgr_versionless(text,text)
-_pgr_withpoints(text,text,bigint,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,bigint,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,bigint,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpoints(text,text,anyarray,anyarray,boolean,char,boolean,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-_pgr_withpointsvia(text,bigint[],float[],boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_tsp(text,bigint ,bigint ,float ,integer ,integer ,integer ,float ,float ,float ,boolean ,out integer,out bigint,out float,out float)
-pgr_alphashape(text,float8 ,out float8,out float8)
-pgr_analyzeoneway(text,text[],text[],text[],text[],boolean ,text ,text ,text )
-pgr_analyzegraph(text,double precision,text ,text ,text ,text ,text )
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
 pgr_apspjohnson(text)
 pgr_apspwarshall(text,boolean,boolean)
-pgr_astar(text,bigint,bigint,boolean ,integer ,float ,float ,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision)
+_pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision,boolean)
 pgr_astar(text,integer,integer,boolean,boolean)
 pgr_bdastar(text,integer,integer,boolean,boolean)
 pgr_bddijkstra(text,integer,integer,boolean,boolean)
-pgr_contractgraph(text,bigint[],integer ,bigint[] ,boolean ,out integer,out text,out bigint,out bigint[],out bigint,out bigint,out float)
-pgr_createtopology(text,double precision,text ,text ,text ,text ,text ,boolean )
-pgr_createverticestable(text,text ,text ,text ,text )
-pgr_dijkstra(text,bigint,bigint,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,bigint,boolean,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,bigint,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
+_pgr_checkverttab(text,text[],integer,text)
+pgr_contractgraph(text,bigint[],integer,bigint[],boolean)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracostmatrix(text,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
 pgr_dijkstra(text,integer,integer,boolean,boolean)
-pgr_dijkstra(text,anyarray,bigint,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstra(text,anyarray,anyarray,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_dijkstracost(text,bigint,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,bigint,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,bigint,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracost(text,anyarray,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstracostmatrix(text,anyarray,boolean ,out bigint,out bigint,out float)
-pgr_dijkstravia(text,anyarray,boolean ,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float,out float)
-pgr_drivingdistance(text,bigint,float8,boolean,boolean)
-pgr_drivingdistance(text,bigint,float8,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_drivingdistance(text,anyarray,float8,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_edgedisjointpaths(in text,in bigint,in bigint,in boolean ,out integer,out integer,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in bigint,in anyarray,in boolean ,out integer,out integer,out bigint,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in anyarray,in bigint,in boolean ,out integer,out integer,out bigint,out bigint,out bigint )
-pgr_edgedisjointpaths(in text,in anyarray,in anyarray,in boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint )
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+pgr_edgedisjointpaths(text,anyarray,anyarray,boolean)
+pgr_edgedisjointpaths(text,anyarray,bigint,boolean)
+pgr_edgedisjointpaths(text,bigint,anyarray,boolean)
+pgr_edgedisjointpaths(text,bigint,bigint,boolean)
+_pgr_endpoint(geometry)
 pgr_endpoint(geometry)
-pgr_euclediantsp(text,bigint ,bigint ,float ,integer ,integer ,integer ,float ,float ,float ,boolean ,out integer,out bigint,out float,out float)
+pgr_euclediantsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
 pgr_fakecontraction(text,integer[])
 pgr_flipedges(geometry[])
-pgr_floydwarshall(text,boolean ,out bigint,out bigint,out float)
+pgr_floydwarshall(text,boolean)
 pgr_getcolumnname(text,text)
-pgr_gettablename(in text,out text,out text)
-pgr_gsoc_vrppdtw(text,integer,integer )
-pgr_iscolumnintable(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
 pgr_iscolumnindexed(text,text)
-pgr_johnson(text,boolean ,out bigint,out bigint,out float)
-pgr_kdijkstrapath(text,integer,integer array,boolean,boolean)
-pgr_kdijkstracost(text,integer,integer array,boolean,boolean)
-pgr_ksp(text,bigint,bigint,integer,boolean ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
 pgr_ksp(text,integer,integer,integer,boolean)
-pgr_labelgraph(text,text ,text ,text ,text ,text )
-pgr_maxflowboykovkolmogorov(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowboykovkolmogorov(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowedmondskarp(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,bigint,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,bigint,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,anyarray,bigint,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maxflowpushrelabel(text,anyarray,anyarray,out integer,out bigint,out bigint,out bigint,out bigint,out bigint )
-pgr_maximumcardinalitymatching(text,boolean ,out integer,out bigint,out bigint,out bigint )
-pgr_nodenetwork(text,double precision,text ,text ,text ,text ,boolean )
-pgr_pointsaspolygon(varchar,float8 )
-pgr_pointstodmatrix(geometry[],integer )
-pgr_pointstovids(geometry[],text,float8 )
-pgr_pointtoedgenode(text,geometry,float8)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+pgr_maxflowboykovkolmogorov(text,anyarray,anyarray)
+pgr_maxflowboykovkolmogorov(text,anyarray,bigint)
+pgr_maxflowboykovkolmogorov(text,bigint,anyarray)
+pgr_maxflowboykovkolmogorov(text,bigint,bigint)
+pgr_maxflowedmondskarp(text,anyarray,anyarray)
+pgr_maxflowedmondskarp(text,anyarray,bigint)
+pgr_maxflowedmondskarp(text,bigint,anyarray)
+pgr_maxflowedmondskarp(text,bigint,bigint)
+pgr_maxflowpushrelabel(text,anyarray,anyarray)
+pgr_maxflowpushrelabel(text,anyarray,bigint)
+pgr_maxflowpushrelabel(text,bigint,anyarray)
+pgr_maxflowpushrelabel(text,bigint,bigint)
+_pgr_maxflow(text,anyarray,anyarray,text)
+_pgr_maxflow(text,anyarray,bigint,text)
+_pgr_maxflow(text,bigint,anyarray,text)
+_pgr_maxflow(text,bigint,bigint,text)
+pgr_maximumcardinalitymatching(text,boolean)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+_pgr_pickdeliver(text,integer,double precision,double precision,integer)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
 pgr_quote_ident(text)
+_pgr_startpoint(geometry)
 pgr_startpoint(geometry)
-pgr_texttopoints(text,integer )
-pgr_trsp(text,integer,integer,boolean,boolean,text )
-pgr_trsp(text,integer,float8,integer,float8,boolean,boolean,text )
-pgr_trspviaedges(text,integer[],float8[],boolean,boolean,text )
-pgr_trspviavertices(text,anyarray,boolean,boolean,text )
-pgr_tsp(float8[][],integer,integer ,out integer,out integer)
-pgr_tsp(text,integer,integer )
+pgr_texttopoints(text,integer)
+_pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
+pgr_tsp(text,integer,integer)
 pgr_version()
+_pgr_versionless(text,text)
 pgr_versionless(text,text)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
 pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
-pgr_vidstodmatrix(in integer[],in geometry[],in text,float8 )
-pgr_vrponedepot(text,text,text,integer,out integer,out integer,out integer,out integer,out integer)
-pgr_withpoints(text,text,bigint,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,bigint,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,bigint,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpoints(text,text,anyarray,anyarray,boolean ,char ,boolean ,out integer,out integer,out bigint,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointscost(text,text,bigint,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,bigint,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,bigint,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscost(text,text,anyarray,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointscostmatrix(text,text,anyarray,boolean ,char ,out bigint,out bigint,out float)
-pgr_withpointsdd(text,text,anyarray,float,boolean ,char ,boolean ,boolean ,out integer,out bigint,out bigint,out bigint,out float,out float)
-pgr_withpointsdd(text,text,bigint,float,boolean ,char ,boolean ,out integer,out bigint,out bigint,out float,out float)
-pgr_withpointsksp(text,text,bigint,bigint,integer,boolean ,boolean ,char ,boolean ,out integer,out integer,out integer,out bigint,out bigint,out float,out float)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscostmatrix(text,text,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/sigs/pgrouting--2.3.2.sig b/tools/sigs/pgrouting--2.3.2.sig
new file mode 100644
index 0000000..16950e9
--- /dev/null
+++ b/tools/sigs/pgrouting--2.3.2.sig
@@ -0,0 +1,141 @@
+#VERSION pgrouting 2.3.2
+#TYPES
+contraction_vertex
+pgr_costresult
+pgr_costresult3
+pgr_geomresult
+#FUNCTIONS
+pgr_alphashape(text,double precision)
+pgr_analyzegraph(text,double precision,text,text,text,text,text)
+pgr_analyzeoneway(text,text[],text[],text[],text[],boolean,text,text,text)
+pgr_apspjohnson(text)
+pgr_apspwarshall(text,boolean,boolean)
+pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision)
+_pgr_astar(text,bigint,bigint,boolean,integer,double precision,double precision,boolean)
+pgr_astar(text,integer,integer,boolean,boolean)
+pgr_bdastar(text,integer,integer,boolean,boolean)
+pgr_bddijkstra(text,integer,integer,boolean,boolean)
+_pgr_checkverttab(text,text[],integer,text)
+pgr_contractgraph(text,bigint[],integer,bigint[],boolean)
+_pgr_createindex(text,text,text,integer,text)
+_pgr_createindex(text,text,text,text,integer,text)
+pgr_createtopology(text,double precision,text,text,text,text,text,boolean)
+pgr_createverticestable(text,text,text,text,text)
+pgr_dijkstracostmatrix(text,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,anyarray,boolean)
+pgr_dijkstracost(text,anyarray,bigint,boolean)
+pgr_dijkstracost(text,bigint,anyarray,boolean)
+pgr_dijkstracost(text,bigint,bigint,boolean)
+pgr_dijkstra(text,anyarray,anyarray,boolean)
+_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean)
+pgr_dijkstra(text,anyarray,bigint,boolean)
+_pgr_dijkstra(text,anyarray,bigint,boolean,boolean)
+pgr_dijkstra(text,bigint,anyarray,boolean)
+_pgr_dijkstra(text,bigint,anyarray,boolean,boolean)
+pgr_dijkstra(text,bigint,bigint)
+pgr_dijkstra(text,bigint,bigint,boolean)
+_pgr_dijkstra(text,bigint,bigint,boolean,boolean)
+pgr_dijkstra(text,integer,integer,boolean,boolean)
+pgr_dijkstravia(text,anyarray,boolean,boolean,boolean)
+_pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+pgr_drivingdistance(text,anyarray,double precision,boolean,boolean)
+_pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean)
+pgr_drivingdistance(text,bigint,double precision,boolean,boolean)
+pgr_edgedisjointpaths(text,anyarray,anyarray,boolean)
+pgr_edgedisjointpaths(text,anyarray,bigint,boolean)
+pgr_edgedisjointpaths(text,bigint,anyarray,boolean)
+pgr_edgedisjointpaths(text,bigint,bigint,boolean)
+_pgr_endpoint(geometry)
+pgr_endpoint(geometry)
+pgr_euclediantsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
+pgr_fakecontraction(text,integer[])
+pgr_flipedges(geometry[])
+pgr_floydwarshall(text,boolean)
+pgr_getcolumnname(text,text)
+_pgr_getcolumnname(text,text,integer,text)
+_pgr_getcolumnname(text,text,text,integer,text)
+_pgr_getcolumntype(text,text,integer,text)
+_pgr_getcolumntype(text,text,text,integer,text)
+_pgr_get_statement(text)
+pgr_gettablename(text)
+_pgr_gettablename(text,integer,text)
+pgr_gsoc_vrppdtw(text,integer,integer)
+pgr_iscolumnindexed(text,text)
+_pgr_iscolumnindexed(text,text,integer,text)
+_pgr_iscolumnindexed(text,text,text,integer,text)
+_pgr_iscolumnintable(text,text)
+pgr_iscolumnintable(text,text)
+pgr_johnson(text,boolean)
+pgr_kdijkstracost(text,integer,integer[],boolean,boolean)
+pgr_kdijkstrapath(text,integer,integer[],boolean,boolean)
+_pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,bigint,bigint,integer,boolean,boolean)
+pgr_ksp(text,integer,integer,integer,boolean)
+pgr_labelgraph(text,text,text,text,text,text)
+_pgr_makedistancematrix(text)
+pgr_maxflowboykovkolmogorov(text,anyarray,anyarray)
+pgr_maxflowboykovkolmogorov(text,anyarray,bigint)
+pgr_maxflowboykovkolmogorov(text,bigint,anyarray)
+pgr_maxflowboykovkolmogorov(text,bigint,bigint)
+pgr_maxflowedmondskarp(text,anyarray,anyarray)
+pgr_maxflowedmondskarp(text,anyarray,bigint)
+pgr_maxflowedmondskarp(text,bigint,anyarray)
+pgr_maxflowedmondskarp(text,bigint,bigint)
+pgr_maxflowpushrelabel(text,anyarray,anyarray)
+pgr_maxflowpushrelabel(text,anyarray,bigint)
+pgr_maxflowpushrelabel(text,bigint,anyarray)
+pgr_maxflowpushrelabel(text,bigint,bigint)
+_pgr_maxflow(text,anyarray,anyarray,text)
+_pgr_maxflow(text,anyarray,bigint,text)
+_pgr_maxflow(text,bigint,anyarray,text)
+_pgr_maxflow(text,bigint,bigint,text)
+pgr_maximumcardinalitymatching(text,boolean)
+_pgr_msg(integer,text,text)
+pgr_nodenetwork(text,double precision,text,text,text,text,boolean)
+_pgr_onerror(boolean,integer,text,text,text,text)
+_pgr_parameter_check(text,text,boolean)
+_pgr_pickdeliver(text,integer,double precision,double precision,integer)
+pgr_pointsaspolygon(character varying,double precision)
+pgr_pointstodmatrix(geometry[],integer)
+pgr_pointstovids(geometry[],text,double precision)
+pgr_pointtoedgenode(text,geometry,double precision)
+_pgr_pointtoid(geometry,double precision,text,integer)
+_pgr_quote_ident(text)
+pgr_quote_ident(text)
+_pgr_startpoint(geometry)
+pgr_startpoint(geometry)
+pgr_texttopoints(text,integer)
+_pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)
+_pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trsp(text,integer,integer,boolean,boolean,text)
+pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)
+pgr_trspviavertices(text,anyarray,boolean,boolean,text)
+_pgr_trspviavertices(text,integer[],boolean,boolean,text)
+pgr_tsp(double precision[],integer,integer)
+pgr_tsp(text,bigint,bigint,double precision,integer,integer,integer,double precision,double precision,double precision,boolean)
+pgr_tsp(text,integer,integer)
+pgr_version()
+_pgr_versionless(text,text)
+pgr_versionless(text,text)
+pgr_vidstodmatrix(integer[],geometry[],text,double precision)
+pgr_vidstodmatrix(text,integer[],boolean,boolean,boolean)
+pgr_vrponedepot(text,text,text,integer)
+pgr_withpointscostmatrix(text,text,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,anyarray,boolean,character)
+pgr_withpointscost(text,text,anyarray,bigint,boolean,character)
+pgr_withpointscost(text,text,bigint,anyarray,boolean,character)
+pgr_withpointscost(text,text,bigint,bigint,boolean,character)
+pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
+pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
+pgr_withpointsksp(text,text,bigint,bigint,integer,boolean,boolean,character,boolean)
+pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,anyarray,bigint,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,anyarray,boolean,character,boolean,boolean)
+pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean)
+_pgr_withpoints(text,text,bigint,bigint,boolean,character,boolean,boolean)
+_pgr_withpointsvia(text,bigint[],double precision[],boolean)
diff --git a/tools/template/create.sh b/tools/template/create.sh
index c8207c1..faa6863 100644
--- a/tools/template/create.sh
+++ b/tools/template/create.sh
@@ -5,28 +5,26 @@
 MY_FUNCTION_NAME="funnyDijkstra"
 DEVELOPER_NAME="Celia Virginia Vergara Castillo"
 DEVELOPER_EMAIL="vicky_vergara at hotmail.com" 
-YEAR="2015"
+YEAR="2016"
 
-# Notice the "\n     " (change line and four spaces) after each comma
+# Note: the "\n     " (change line and four spaces) after each comma
 # first line are the inputs
 # second line are the outputs
-MY_QUERY_LINE1="edges_sql TEXT,\n    start_pid BIGINT,\n    end_pids ANYARRAY,\n    directed BOOLEAN DEFAULT true,"
-MY_QUERY_LINE2="OUT seq INTEGER,\n    OUT path_seq INTEGER,\n    OUT start_vid BIGINT,\n    OUT end_vid BIGINT,\n    OUT node BIGINT,\n    OUT edge BIGINT,\n    OUT cost FLOAT,\n    OUT agg_cost FLOAT"
+MY_QUERY_LINE1="edges_sql TEXT,\n    start_vid BIGINT,\n    end_vid BIGINT,\n    directed BOOLEAN DEFAULT true,\n    only_cost BOOLEAN DEFAULT false,"
+MY_QUERY_LINE2="    OUT seq INTEGER,\n    OUT path_seq INTEGER,\n    OUT node BIGINT,\n    OUT edge BIGINT,\n    OUT cost FLOAT,\n    OUT agg_cost FLOAT"
 
 
 MY_RETURN_VALUE_TYPE="General_path_element_t" 
 MY_FUNCTION_NAME_UPPER=$(echo $MY_FUNCTION_NAME | tr 'a-z' 'A-Z')
+MY_FUNCTION_NAME_LOWER=$(echo $MY_FUNCTION_NAME | tr 'A-Z' 'a-z')
 
 # Available types to store the edge information:
-#  pgr_edge_t      http://docs.pgrouting.org/doxy/2.3-dev-develop/structpgr__edge__t.html
-#  Pgr_edge_xy_t   http://docs.pgrouting.org/doxy/2.3-dev-develop/structPgr__edge__xy__t.html
+#  http://docs.pgrouting.org/doxy/dev/structpgr__edge__t.html
+#  http://docs.pgrouting.org/doxy/dev/structPgr__edge__xy__t.html
 MY_EDGE_TYPE="pgr_edge_t"
 
 # Available functions that read the edge information:
-# pgr_get_edges                 http://docs.pgrouting.org/doxy/2.3-dev-develop/edges__input_8h.html#a5598918a215c72c9bda7a7f016401b73
-# pgr_get_edges_xy              http://docs.pgrouting.org/doxy/2.3-dev-develop/edges__input_8h.html#a5483d52e67b7996d80cd0cf3583d1720
-# pgr_get_edges_xy_reversed     http://docs.pgrouting.org/doxy/2.3-dev-develop/edges__input_8h.html#adce525c316ba6244510553a5cee8451f
-# pgr_get_edges_no_id           http://docs.pgrouting.org/doxy/2.3-dev-develop/edges__input_8h.html#a747dea3b61ecc407746f9d83d923fa64
+# http://docs.pgrouting.org/doxy/dev/edges__input_8h.html#
 MY_EDGE_FUNCTION="pgr_get_edges"
 
 
@@ -69,7 +67,7 @@ sed -i "s/MY_QUERY_LINE1/$MY_QUERY_LINE1/" "$MY_FUNCTION_NAME"/sql/function1.sql
 sed -i "s/MY_QUERY_LINE2/$MY_QUERY_LINE2/" "$MY_FUNCTION_NAME"/sql/function1.sql
 sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/sql/function1.sql
 sed -i "s/DEVELOPER_NAME/$DEVELOPER_NAME/" "$MY_FUNCTION_NAME"/sql/function1.sql
-sed -i "s/DEVELOPER_EMAIL/$MY_DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/sql/function1.sql
+sed -i "s/DEVELOPER_EMAIL/$DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/sql/function1.sql
 sed -i "s/YEAR/$YEAR/" "$MY_FUNCTION_NAME"/sql/function1.sql
 mv "$MY_FUNCTION_NAME"/sql/function1.sql "$MY_FUNCTION_NAME"/sql/"$MY_FUNCTION_NAME".sql
 
@@ -81,7 +79,7 @@ sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/src/CMakeList
 echo "updating the function1.c file in src"
 sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/src/function1.c
 sed -i "s/DEVELOPER_NAME/$DEVELOPER_NAME/" "$MY_FUNCTION_NAME"/src/function1.c
-sed -i "s/DEVELOPER_EMAIL/$MY_DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/src/function1.c
+sed -i "s/DEVELOPER_EMAIL/$DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/src/function1.c
 sed -i "s/YEAR/$YEAR/" "$MY_FUNCTION_NAME"/src/function1.c
 sed -i "s/MY_EDGE_TYPE/$MY_EDGE_TYPE/" "$MY_FUNCTION_NAME"/src/function1.c
 sed -i "s/MY_EDGE_FUNCTION/$MY_EDGE_FUNCTION/" "$MY_FUNCTION_NAME"/src/function1.c
@@ -94,7 +92,7 @@ echo "updating the src/function1_driver.h"
 sed -i "s/MY_FUNCTION_NAME_UPPER/$MY_FUNCTION_NAME_UPPER/g" "$MY_FUNCTION_NAME"/src/function1_driver.h
 sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/src/function1_driver.h
 sed -i "s/DEVELOPER_NAME/$DEVELOPER_NAME/" "$MY_FUNCTION_NAME"/src/function1_driver.h
-sed -i "s/DEVELOPER_EMAIL/$MY_DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/src/function1_driver.h
+sed -i "s/DEVELOPER_EMAIL/$DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/src/function1_driver.h
 sed -i "s/YEAR/$YEAR/" "$MY_FUNCTION_NAME"/src/function1_driver.h
 sed -i "s/MY_EDGE_TYPE/$MY_EDGE_TYPE/" "$MY_FUNCTION_NAME"/src/function1_driver.h
 sed -i "s/MY_QUERY_LINE1/$MY_QUERY_LINE1/" "$MY_FUNCTION_NAME"/src/function1_driver.h
@@ -105,7 +103,7 @@ mv "$MY_FUNCTION_NAME"/src/function1_driver.h "$MY_FUNCTION_NAME"/src/"$MY_FUNCT
 echo "updating the src/function1_driver.cpp"
 sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
 sed -i "s/DEVELOPER_NAME/$DEVELOPER_NAME/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
-sed -i "s/DEVELOPER_EMAIL/$MY_DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
+sed -i "s/DEVELOPER_EMAIL/$DEVELOPER_EMAIL/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
 sed -i "s/YEAR/$YEAR/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
 sed -i "s/MY_EDGE_TYPE/$MY_EDGE_TYPE/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
 sed -i "s/MY_QUERY_LINE1/$MY_QUERY_LINE1/" "$MY_FUNCTION_NAME"/src/function1_driver.cpp
@@ -122,21 +120,31 @@ sed -i "s/MY_QUERY_LINE1/$MY_QUERY_LINE1/" "$MY_FUNCTION_NAME"/doc/pgr_function1
 sed -i "s/MY_QUERY_LINE2/$MY_QUERY_LINE2/" "$MY_FUNCTION_NAME"/doc/pgr_function1.rst
 mv "$MY_FUNCTION_NAME"/doc/pgr_function1.rst "$MY_FUNCTION_NAME"/doc/pgr_"$MY_FUNCTION_NAME".rst
 
-#####   DOC   #########
+echo "updating the doc/doc-pgr_function1.queries"
+sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/doc/doc-pgr_function1.queries
+mv "$MY_FUNCTION_NAME"/doc/doc-pgr_function1.queries "$MY_FUNCTION_NAME"/doc/doc-pgr_"$MY_FUNCTION_NAME".queries
+
+#####   TEST   #########
 
 echo "updating test/test.conf"
 sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/test/test.conf
 
-echo "updating test/test.conf"
+echo "updating test/doc-function1.test.sql"
 sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/test/doc-function1.test.sql
-sed -i "s/MY_QUERY_LINE1/$MY_QUERY_LINE1/" "$MY_FUNCTION_NAME"/test/doc-function1.test.sql
-sed -i "s/MY_QUERY_LINE2/$MY_QUERY_LINE2/" "$MY_FUNCTION_NAME"/test/doc-function1.test.sql
 
 echo "updating the test/pgtap/types-check.sql"
-sed -i "s/MY_FUNCTION_NAME/$MY_FUNCTION_NAME/" "$MY_FUNCTION_NAME"/test/pgtap/types-check.sql
+sed -i "s/MY_FUNCTION_NAME_LOWER/$MY_FUNCTION_NAME_LOWER/g" "$MY_FUNCTION_NAME"/test/pgtap/types-check.sql
+
+echo "updating the test/pgtap/function1-compare-dijkstra.sql"
+sed -i "s/MY_FUNCTION_NAME_LOWER/$MY_FUNCTION_NAME_LOWER/g" "$MY_FUNCTION_NAME"/test/pgtap/function1-compare-dijkstra.sql
+
+echo "updating the test/pgtap/function1-innerQuery.sql"
+sed -i "s/MY_FUNCTION_NAME_LOWER/$MY_FUNCTION_NAME_LOWER/g" "$MY_FUNCTION_NAME"/test/pgtap/function1-innerQuery.sql
 
 mv "$MY_FUNCTION_NAME"/test/doc-function1.test.sql "$MY_FUNCTION_NAME"/test/doc-"$MY_FUNCTION_NAME".test.sql
 mv "$MY_FUNCTION_NAME"/test/doc-function1.result "$MY_FUNCTION_NAME"/test/doc-"$MY_FUNCTION_NAME".result
+mv "$MY_FUNCTION_NAME"/test/pgtap/function1-compare-dijkstra.sql "$MY_FUNCTION_NAME"/test//pgtap/"$MY_FUNCTION_NAME"-compare-dijkstra.sql
+mv "$MY_FUNCTION_NAME"/test/pgtap/function1-innerQuery.sql "$MY_FUNCTION_NAME"/test//pgtap/"$MY_FUNCTION_NAME"-innerQuery.sql
 
 #move the whole structure to its place
 mv "$MY_FUNCTION_NAME" ../../src/"$MY_FUNCTION_NAME"
diff --git a/tools/template/doc/CMakeLists.txt b/tools/template/doc/CMakeLists.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/tools/template/doc/doc-pgr_function1.queries b/tools/template/doc/doc-pgr_function1.queries
new file mode 100644
index 0000000..f7141d3
--- /dev/null
+++ b/tools/template/doc/doc-pgr_function1.queries
@@ -0,0 +1,32 @@
+BEGIN;
+BEGIN
+-- q1
+SELECT * FROM pgr_MY_FUNCTION_NAME(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3
+);
+ seq | path_seq | node | edge | cost | agg_cost 
+-----+----------+------+------+------+----------
+   1 |        1 |    2 |    4 |    1 |        0
+   2 |        2 |    5 |    8 |    1 |        1
+   3 |        3 |    6 |    9 |    1 |        2
+   4 |        4 |    9 |   16 |    1 |        3
+   5 |        5 |    4 |    3 |    1 |        4
+   6 |        6 |    3 |   -1 |    0 |        5
+(6 rows)
+
+-- q2
+SELECT * FROM pgr_MY_FUNCTION_NAME(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3,
+    FALSE
+);
+ seq | path_seq | node | edge | cost | agg_cost 
+-----+----------+------+------+------+----------
+   1 |        1 |    2 |    2 |    1 |        0
+   2 |        2 |    3 |   -1 |    0 |        1
+(2 rows)
+
+-- q3
+ROLLBACK;
+ROLLBACK
diff --git a/tools/template/doc/pgr_function1.rst b/tools/template/doc/pgr_function1.rst
index 5758515..27a373f 100644
--- a/tools/template/doc/pgr_function1.rst
+++ b/tools/template/doc/pgr_function1.rst
@@ -7,34 +7,16 @@
     Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/
    ****************************************************************************
 
-   INSTRUCTIONS
-   - if section consists of only one value then use this file as index.rst
-   - change [...] (including the square braquets) to appropiate values
-   - one file / function,  may signatures of the same function go in the same file
-
 .. _pgr_MY_FUNCTION_NAME:
 
 pgr_MY_FUNCTION_NAME
 ===============================================================================
 
-
-Name
--------------------------------------------------------------------------------
-
-``pgr_MY_FUNCTION_NAME`` — [medium description of
-function1 it can span many
-lines]
-
-.. warning::  This is a proposed function.
-
-     - Is not officially in the current release
-
-
-..
-   keep if uses boost (this is a comment)
+``pgr_MY_FUNCTION_NAME`` — Returns the shortest path(s) using Dijkstra algorithm.
+In particular, the Dijkstra algorithm implemented by Boost.Graph.
 
 .. figure:: ../../../doc/src/introduction/images/boost-inside.jpeg
-   :target: http://www.boost.org/libs/graph
+   :target: http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.html
 
    Boost Graph Inside
 
@@ -42,18 +24,14 @@ lines]
 Synopsis
 -------------------------------------------------------------------------------
 
-Very long description of function
+Dijkstra's algorithm, conceived by Dutch computer scientist Edsger Dijkstra in 1956.
+It is a graph search algorithm that solves the shortest path problem for
+a graph with non-negative edge path costs, producing a shortest path from
+a starting vertex (``start_vid``) to an ending vertex (``end_vid``).
+This implementation can be used with a directed graph and an undirected graph.
 
-..
-   SPHINX manual
-   http://www.sphinx-doc.org/en/stable/rest.html
-
-
-Characteristics:
-----------------
-
-..
-   Here is a sample of the kind of information in this section:
+Characteristics
+-------------------------------------------------------------------------------
 
 The main Characteristics are:
   - Process is done only on edges with positive costs.
@@ -74,208 +52,102 @@ The main Characteristics are:
     - `start_vid` ascending
     - `end_vid` ascending
 
-  - Runing time: :math:`O(| start\_vids | * (V \log V + E))`
+  - Running time: :math:`O(| start\_vids | * (V \log V + E))`
+
 
 Signature Summary
 -----------------
 
-..
-   If the function has more than one signature
-   Remove the unneseary parts of the signature, just leving the name of the parameters
-   Like in these examples
-
 .. code-block:: none
 
-    pgr_MY_FUNCTION_NAME(edges_sql, start_vid,  end_vids)
-    pgr_MY_FUNCTION_NAME(edges_sql, start_vids, end_vids, directed:=true)
-    RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
-      OR EMPTY SET
+    pgr_dijkstra(edges_sql, start_vid,  end_vid)
 
-
-..
-  This is a reminder of how your query looks like
-  pgr_MY_FUNCTION_NAME(
-    MY_QUERY_LINE1
-    MY_QUERY_LINE2)
+    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
+        OR EMPTY SET
 
 
 Signatures
-===============================================================================
+-------------------------------------------------------------------------------
 
-.. index:: 
-    single: pgr_MY_FUNCTION_NAME(edges_sql, start_vid,  end_vids) - proposed
+.. index::
+    single: MY_FUNCTION_NAME(Minimal Use)
 
 Minimal signature
------------------
-
-
-..
-   Small description, example:
-
-The minimal signature is for a **directed** graph from one ``start_vid`` to many ``end_vids``:
+.......................................
 
 .. code-block:: none
 
-    pgr_MY_FUNCTION_NAME(edges_sql, start_vid,  end_vids)
-    RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
-      OR EMPTY SET
-
-:Example:
+    pgr_MY_FUNCTION_NAME(edges_sql, start_vid, end_vid)
+    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost) or EMPTY SET
 
-.. literalinclude:: doc-MY_FUNCTION_NAME.queries
-   :start-after: --q1
-   :end-before: --q2
+The minimal signature is for a **directed** graph from one ``start_vid`` to one ``end_vid``:
 
+:Example:
 
-Complete signature
-------------------
+.. literalinclude:: doc-pgr_MY_FUNCTION_NAME.queries
+   :start-after: -- q1
+   :end-before: -- q2
 
-This signature performs a .....
 
-  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
-  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
+.. index::
+    single: MY_FUNCTION_NAME(Complete signature)
 
-.. index:: 
-    single: pgr_MY_FUNCTION_NAME(edges_sql, start_vids, end_vids, directed:=true) - proposed
+Complete Signature
+.......................................
 
 .. code-block:: none
 
-    pgr_MY_FUNCTION_NAME(  [parameters],
-        boolean directed:=true);
-    RETURNS SET OF ( [output] ) or EMPTY SET
+    pgr_MY_FUNCTION_NAME(edges_sql, start_vid, end_vid, directed);
+    RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost) or EMPTY SET
 
+This signature finds the shortest path from one ``start_vid`` to one ``end_vid``:
+  -  on a **directed** graph when ``directed`` flag is missing or is set to ``true``.
+  -  on an **undirected** graph when ``directed`` flag is set to ``false``.
 
 :Example:
 
-.. literalinclude:: doc-MY_FUNCTION_NAME.queries
-   :start-after: --q2
-   :end-before: --q3
+.. literalinclude:: doc-pgr_MY_FUNCTION_NAME.queries
+   :start-after: -- q2
+   :end-before: -- q3
 
-Description of the Signatures
-=============================
 
-..
-   DELETE / ADD DEPENDING ON YOUR REQUIREMENTS
 
-Description of the SQL query
--------------------------------------------------------------------------------
-
-:edges_sql: an SQL query, which should return a set of rows with the following columns:
-
-================  ===================   =================================================
-Column            Type                  Description
-================  ===================   =================================================
-**id**            ``ANY-INTEGER``       Identifier of the edge.
-**source**        ``ANY-INTEGER``       Identifier of the first end point vertex of the edge.
-**target**        ``ANY-INTEGER``       Identifier of the second end point vertex of the edge.
-**cost**          ``ANY-NUMERICAL``     Weight of the edge `(source, target)`, If negative: edge `(source, target)` does not exist, therefore it's not part of the graph.
-**reverse_cost**  ``ANY-NUMERICAL``     (optional) Weight of the edge `(target, source)`, If negative: edge `(target, source)` does not exist, therefore it's not part of the graph.
-================  ===================   =================================================
-
-Description of the Points SQL query
--------------------------------------------------------------------------------
-
-:points_sql: an SQL query, which should return a set of rows with the following columns:
-
-============ ================= =================================================
-Column            Type              Description
-============ ================= =================================================
-**pid**      ``ANY-INTEGER``   (optional) Identifier of the point. Can not be NULL. If column not present, a sequential identifier will be given automatically.
-**eid**      ``ANY-INTEGER``   Identifier of the "closest" edge to the point.
-**fraction** ``ANY-NUMERICAL`` Value in [0,1] that indicates the relative postition from the first end point of the edge.
-**side**     ``CHAR``          (optional) Value in ['b', 'r', 'l', NULL] indicating if the point is:
-                                 - In the right, left of the edge or
-                                 - If it doesn't matter with 'b' or NULL.
-                                 - If column not present 'b' is considered.
-
-                               Can be in upper or lower case.
-============ ================= =================================================
-
-
-Where:
-
-:ANY-INTEGER: SMALLINT, INTEGER, BIGINT
-:ANY-NUMERICAL: SMALLINT, INTEGER, BIGINT, REAL, FLOAT
-
-
-Description of the parameters of the signatures
+Description of the Signatures
 -------------------------------------------------------------------------------
 
-============== ====================== =================================================
-Column         Type                   Description
-============== ====================== =================================================
-**edges_sql**  ``TEXT``               SQL query as decribed above.
-**points_sql** ``TEXT``               Points SQL query as decribed above.
-**start_vid**  ``BIGINT``             Identifier of the starting vertex of the path.
-**start_vids** ``ARRAY[ANY-INTEGER]`` Array of identifiers of starting vertices.
-**end_vid**    ``BIGINT``             Identifier of the ending vertex of the path.
-**end_vids**   ``ARRAY[ANY-INTEGER]`` Array of identifiers of ending vertices.
-**directed**   ``BOOLEAN``            (optional). When ``false`` the graph is considered as Undirected. Default is ``true`` which considers the graph as Directed.
-============== ====================== =================================================
-
-
-Examples
-========
-
-The examples of this section are based on the :ref:`sampledata` network.
-
-
-
-[put as many examples as needed and use the documentation data for the examples]
-
-:Example:
-
-.. literalinclude:: doc-MY_FUNCTION_NAME.queries
-   :start-after: --q2
-   :end-before: --q3
-
-..
-   If needed here are some subtitles  
-
-Examples for queries marked as ``directed`` with ``cost`` and ``reverse_cost`` columns
---------------------------------------------------------------------------------------
-
-The examples in this section use the following :ref:`fig1`
-
-:Example: This example is in a subtitle
-
-.. literalinclude:: doc-MY_FUNCTION_NAME.queries
-   :start-after: --q2
-   :end-before: --q3
-
-
-Examples for queries marked as ``undirected`` with ``cost`` and ``reverse_cost`` columns
-----------------------------------------------------------------------------------------
-
-The examples in this section use the following :ref:`fig2`
-
-
-
-Examples for queries marked as ``directed`` with ``cost`` column
-----------------------------------------------------------------------------------------
-
-The examples in this section use the following :ref:`fig3`
-
+.. include:: ../../common/src/edges_input.h
+    :start-after: basic_edges_sql_start
+    :end-before: basic_edges_sql_end
 
-Examples for queries marked as ``undirected`` with ``cost`` column
-----------------------------------------------------------------------------------------
+.. include:: ../../dijkstra/sql/dijkstra.sql
+    :start-after: pgr_dijkstra_parameters_start
+    :end-before: pgr_dijkstra_parameters_end
 
-The examples in this section use the following :ref:`fig4`
 
+Description of the return values
+...............................................................................
 
+Returns set of ``(seq, path_seq, node, edge, cost, agg_cost)``
 
-The queries use the :ref:`sampledata` network.
+============== ========== =================================================
+Column         Type       Description
+============== ========== =================================================
+**seq**        ``INT``    Sequential value starting from **1**.
+**path_seq**   ``INT``    Relative position in the path. Has value **1** for the beginning of a path.
+**node**       ``BIGINT`` Identifier of the node in the path from ``start_vid`` to ``end_vid``.
+**edge**       ``BIGINT`` Identifier of the edge used to go from ``node`` to the next node in the path sequence. ``-1`` for the last node of the path.
+**cost**       ``FLOAT``  Cost to traverse from ``node`` using ``edge`` to the next node in the path sequence.
+**agg_cost**   ``FLOAT``  Aggregate cost from ``start_v`` to ``node``.
+============== ========== =================================================
 
-.. rubric:: History
 
-* Official in version X.X
-* Proposed in version Y.Y 
 
 
 See Also
 -------------------------------------------------------------------------------
 
 * http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
+* The queries use the :ref:`sampledata` network.
 
 .. rubric:: Indices and tables
 
diff --git a/tools/template/sql/function1.sql b/tools/template/sql/function1.sql
index 49e58e6..d5991a3 100644
--- a/tools/template/sql/function1.sql
+++ b/tools/template/sql/function1.sql
@@ -2,7 +2,7 @@
 File: MY_FUNCTION_NAME.sql
 
 Generated with Template by:
-Copyright (c) 2015 pgRouting developers
+Copyright (c) 2016 pgRouting developers
 Mail: project at pgrouting.org
 
 Function's developer: 
@@ -31,7 +31,7 @@ CREATE OR REPLACE FUNCTION pgr_MY_FUNCTION_NAME(
     MY_QUERY_LINE1
     MY_QUERY_LINE2)
 
-  RETURNS SETOF RECORD AS
- '$libdir/${PGROUTING_LIBRARY_NAME}', 'MY_FUNCTION_NAME'
-    LANGUAGE c IMMUTABLE STRICT;
+RETURNS SETOF RECORD AS
+'$libdir/${PGROUTING_LIBRARY_NAME}', 'MY_FUNCTION_NAME'
+LANGUAGE c IMMUTABLE STRICT;
 
diff --git a/tools/template/src/CMakeLists.txt b/tools/template/src/CMakeLists.txt
index be950a2..ff3d4b4 100644
--- a/tools/template/src/CMakeLists.txt
+++ b/tools/template/src/CMakeLists.txt
@@ -1,3 +1,4 @@
-ADD_LIBRARY(MY_FUNCTION_NAME OBJECT 
-                            MY_FUNCTION_NAME.c 
-                            MY_FUNCTION_NAME_driver.cpp)
+ADD_LIBRARY(MY_FUNCTION_NAME OBJECT
+    MY_FUNCTION_NAME.c
+    MY_FUNCTION_NAME_driver.cpp
+    )
diff --git a/tools/template/src/function1.c b/tools/template/src/function1.c
index f74a560..b6508f6 100644
--- a/tools/template/src/function1.c
+++ b/tools/template/src/function1.c
@@ -5,10 +5,11 @@ Generated with Template by:
 Copyright (c) 2015 pgRouting developers
 Mail: project at pgrouting.org
 
-Function's developer: 
+Function's developer:
 Copyright (c) YEAR DEVELOPER_NAME
 Mail: DEVELOPER_EMAIL
 
+
 ------
 
 This program is free software; you can redistribute it and/or modify
@@ -27,117 +28,179 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-#include "postgres.h"
-#include "executor/spi.h"
+/** @file MY_FUNCTION_NAME.c
+ * @brief Conecting code with postgres.
+ *
+ * This file is fully documented for understanding
+ *  how the postgres connectinon works
+ *
+ * TODO Remove unnecessary comments before submiting the function.
+ * some comments are in form of PGR_DBG message
+ */
+
+/**
+ *  postgres_connection.h 
+ *
+ *  - should allways be first in the C code
+ */
+#include "./../../common/src/postgres_connection.h"
+
+/**
+ *  funcapi.h
+ *
+ *  - While developing to not show postgres header files warnings:
+ *    - wrap the file(s) with the appropiate dignostic to be ignored
+ */
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
 #include "funcapi.h"
-#include "utils/array.h"
-#include "catalog/pg_type.h"
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
 #if PGSQL_VERSION > 92
 #include "access/htup_details.h"
 #endif
-
-/*
-  Uncomment when needed
-*/
-// #define DEBUG
-
 #include "fmgr.h"
-#include "./../../common/src/debug_macro.h"
-#include "./../../common/src/time_msg.h"
-#include "./../../common/src/pgr_types.h"
-#include "./../../common/src/postgres_connection.h"
-#include "./../../common/src/edges_input.h"
-#include "./../../common/src/arrays_input.h"
 
-#include "./MY_FUNCTION_NAME_driver.h"
+#include "./../../common/src/debug_macro.h" // for macro PGR_DBG
+#include "./../../common/src/e_report.h"  // for pgr_global_report
+#include "./../../common/src/time_msg.h"  // for time_msg & clock
+#include "./../../common/src/pgr_types.h"  // for the current accepted types
+#include "./../../common/src/edges_input.h" // for functions to get edges informtion
+
+#include "./MY_FUNCTION_NAME_driver.h"  // the C++ code of the function
 
 PG_FUNCTION_INFO_V1(MY_FUNCTION_NAME);
-#ifndef _MSC_VER
-Datum
-#else  // _MSC_VER
-PGDLLEXPORT Datum
-#endif
-MY_FUNCTION_NAME(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum MY_FUNCTION_NAME(PG_FUNCTION_ARGS);
 
 
-/*******************************************************************************/
-/*                          MODIFY AS NEEDED                                   */
+/******************************************************************************/
+/*                          MODIFY AS NEEDED                                  */
 static
 void
-process( char* edges_sql,
+process(
+        char* edges_sql,
         int64_t start_vid,
-        int64_t *end_vidsArr,
-        size_t size_end_vidsArr,
+        int64_t end_vid,
+#if 0
+        /*
+         * handling arrays example
+         */
+        ArrayType *starts,
+        ArrayType *ends,
+#endif
         bool directed,
+        bool only_cost,
         MY_RETURN_VALUE_TYPE **result_tuples,
         size_t *result_count) {
+
+    /* https://www.postgresql.org/docs/current/static/spi-spi-connect.html */
     pgr_SPI_connect();
 
+
+#if 0
+    /*
+     *  handling arrays example
+     */
+
+    PGR_DBG("Initializing arrays");
+    int64_t* start_vidsArr = NULL;
+    size_t size_start_vidsArr = 0;
+    start_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_start_vidsArr, starts);
+    PGR_DBG("start_vidsArr size %ld ", size_start_vidsArr);
+
+    int64_t* end_vidsArr = NULL;
+    size_t size_end_vidsArr = 0;
+    end_vidsArr = (int64_t*)
+        pgr_get_bigIntArray(&size_end_vidsArr, ends);
+    PGR_DBG("end_vidsArr size %ld ", size_end_vidsArr);
+#endif
+
+    (*result_tuples) = NULL;
+    (*result_count) = 0;
+
     PGR_DBG("Load data");
     MY_EDGE_TYPE *edges = NULL;
     size_t total_edges = 0;
 
+    if (start_vid == end_vid) {
+        /* https://www.postgresql.org/docs/current/static/spi-spi-finish.html */
+        pgr_SPI_finish();
+        return;
+    }
+
     MY_EDGE_FUNCTION(edges_sql, &edges, &total_edges);
     PGR_DBG("Total %ld edges in query:", total_edges);
 
     if (total_edges == 0) {
         PGR_DBG("No edges found");
-        (*result_count) = 0;
-        (*result_tuples) = NULL;
         pgr_SPI_finish();
         return;
     }
 
     PGR_DBG("Starting processing");
-    char *err_msg = NULL;
-    char *log_msg = NULL;
-
-    // Code standard:
-    // Pass the arrays and the sizes on the same line
     clock_t start_t = clock();
+    char *log_msg = NULL;
+    char *notice_msg = NULL;
+    char *err_msg = NULL;
     do_pgr_MY_FUNCTION_NAME(
-            edges, total_edges,
+            edges,
+            total_edges,
             start_vid,
+            end_vid,
+#if 0
+    /*
+     *  handling arrays example
+     */
+
+            start_vidsArr, size_start_vidsArr,
             end_vidsArr, size_end_vidsArr,
+#endif
+
             directed,
+            only_cost,
             result_tuples,
             result_count,
             &log_msg,
+            &notice_msg,
             &err_msg);
-    time_msg(" processing pgr_funnyDijkstra", start_t, clock());
 
-    PGR_DBG("Returning %ld tuples\n", *result_count);
-    PGR_DBG("LOG: %s\n", log_msg);
-    if (log_msg) free(log_msg);
+    time_msg(" processing pgr_MY_FUNCTION_NAME", start_t, clock());
+    PGR_DBG("Returning %ld tuples", *result_count);
 
     if (err_msg) {
         if (*result_tuples) free(*result_tuples);
-        if (end_vidsArr) free(end_vidsArr);
-        elog(ERROR, "%s", err_msg);
-        free(err_msg);
     }
+    pgr_global_report(&log_msg, &notice_msg, &err_msg);
+
+    if (edges) pfree(edges);
+#if 0
+    /*
+     *  handling arrays example
+     */
+
+    if (end_vidsArr) pfree(end_vidsArr);
+    if (start_vidsArr) pfree(start_vidsArr);
+#endif
 
-    pfree(edges);
     pgr_SPI_finish();
 }
 /*                                                                            */
 /******************************************************************************/
 
-#ifndef _MSC_VER
-Datum
-#else  // _MSC_VER
-PGDLLEXPORT Datum
-#endif
-MY_FUNCTION_NAME(PG_FUNCTION_ARGS) {
+PGDLLEXPORT Datum MY_FUNCTION_NAME(PG_FUNCTION_ARGS) {
     FuncCallContext     *funcctx;
-    uint32_t            call_cntr;
-    uint32_t            max_calls;
     TupleDesc           tuple_desc;
 
     /**************************************************************************/
     /*                          MODIFY AS NEEDED                              */
     /*                                                                        */
-    MY_RETURN_VALUE_TYPE  *result_tuples = 0;
+    MY_RETURN_VALUE_TYPE  *result_tuples = NULL;
     size_t result_count = 0;
     /*                                                                        */
     /**************************************************************************/
@@ -154,90 +217,92 @@ MY_FUNCTION_NAME(PG_FUNCTION_ARGS) {
            MY_QUERY_LINE1
          **********************************************************************/
 
-        PGR_DBG("Initializing arrays");
-        int64_t* end_vidsArr;
-        size_t size_end_vidsArr;
-        end_vidsArr = (int64_t*) pgr_get_bigIntArray(&size_end_vidsArr, PG_GETARG_ARRAYTYPE_P(2));
-        PGR_DBG("targetsArr size %ld ", size_end_vidsArr);
 
         PGR_DBG("Calling process");
-        // Code standard:
-        // Use same order as in the query
-        // Pass the array and it's size on the same line
         process(
-                pgr_text2char(PG_GETARG_TEXT_P(0)),
+                text_to_cstring(PG_GETARG_TEXT_P(0)),
                 PG_GETARG_INT64(1),
-                end_vidsArr, size_end_vidsArr,
+                PG_GETARG_INT64(2),
+#if 0
+                /*
+                 *  handling arrays example
+                 */
+
+                PG_GETARG_ARRAYTYPE_P(1),
+                PG_GETARG_ARRAYTYPE_P(2),
+#endif
                 PG_GETARG_BOOL(3),
+                PG_GETARG_BOOL(4),
                 &result_tuples,
                 &result_count);
 
-        // while developing leave the message as a reminder
-        PGR_DBG("Cleaning arrays using free(<array-name>)");
-        free(end_vidsArr);
-        /*                                                                             */
-        /*******************************************************************************/
 
-        funcctx->max_calls = (uint32_t) result_count;
+        /*                                                                    */
+        /**********************************************************************/
+
+#if PGSQL_VERSION > 94
+        funcctx->max_calls = result_count;
+#else
+        funcctx->max_calls = (uint32_t)result_count;
+#endif
         funcctx->user_fctx = result_tuples;
-        if (get_call_result_type(fcinfo, NULL, &tuple_desc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tuple_desc)
+                != TYPEFUNC_COMPOSITE) {
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
                          "that cannot accept type record")));
+        }
 
         funcctx->tuple_desc = tuple_desc;
         MemoryContextSwitchTo(oldcontext);
     }
 
     funcctx = SRF_PERCALL_SETUP();
-    call_cntr = funcctx->call_cntr;
-    max_calls = funcctx->max_calls;
     tuple_desc = funcctx->tuple_desc;
     result_tuples = (MY_RETURN_VALUE_TYPE*) funcctx->user_fctx;
 
-    if (call_cntr < max_calls) {
+    if (funcctx->call_cntr < funcctx->max_calls) {
         HeapTuple    tuple;
         Datum        result;
         Datum        *values;
         bool*        nulls;
 
-        /*******************************************************************************/
-        /*                          MODIFY!!!!!                                        */
-        /*  This has to match you ouput otherwise the server crashes                   */
+        /**********************************************************************/
+        /*                          MODIFY AS NEEDED                          */
         /*
            MY_QUERY_LINE2
-         ********************************************************************************/
+         ***********************************************************************/
 
+        values = palloc(6 * sizeof(Datum));
+        nulls = palloc(6 * sizeof(bool));
 
-        values = palloc(8 * sizeof(Datum));
-        nulls = palloc(8 * sizeof(bool));
 
         size_t i;
-        for(i = 0; i < 8; ++i) {
+        for (i = 0; i < 6; ++i) {
             nulls[i] = false;
         }
 
-
         // postgres starts counting from 1
-        values[0] = Int32GetDatum(call_cntr + 1);
-        values[1] = Int32GetDatum(result_tuples[call_cntr].seq);
-        values[2] = Int64GetDatum(result_tuples[call_cntr].start_id);
-        values[3] = Int64GetDatum(result_tuples[call_cntr].end_id);
-        values[4] = Int64GetDatum(result_tuples[call_cntr].node);
-        values[5] = Int64GetDatum(result_tuples[call_cntr].edge);
-        values[6] = Float8GetDatum(result_tuples[call_cntr].cost);
-        values[7] = Float8GetDatum(result_tuples[call_cntr].agg_cost);
-        /*******************************************************************************/
+        values[0] = Int32GetDatum(funcctx->call_cntr + 1);
+        values[1] = Int32GetDatum(result_tuples[funcctx->call_cntr].seq);
+        values[2] = Int64GetDatum(result_tuples[funcctx->call_cntr].node);
+        values[3] = Int64GetDatum(result_tuples[funcctx->call_cntr].edge);
+        values[4] = Float8GetDatum(result_tuples[funcctx->call_cntr].cost);
+        values[5] = Float8GetDatum(result_tuples[funcctx->call_cntr].agg_cost);
+        /**********************************************************************/
 
         tuple = heap_form_tuple(tuple_desc, values, nulls);
         result = HeapTupleGetDatum(tuple);
         SRF_RETURN_NEXT(funcctx, result);
     } else {
-        // cleanup
-        if (result_tuples) free(result_tuples);
+        /**********************************************************************/
+        /*                          MODIFY AS NEEDED                          */
+
+        PGR_DBG("Clean up code");
+
+        /**********************************************************************/
 
         SRF_RETURN_DONE(funcctx);
     }
 }
-
diff --git a/tools/template/src/function1_driver.cpp b/tools/template/src/function1_driver.cpp
index 9656245..d9035c5 100644
--- a/tools/template/src/function1_driver.cpp
+++ b/tools/template/src/function1_driver.cpp
@@ -27,134 +27,131 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 ********************************************************************PGR-GNU*/
 
-
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 #include <winsock2.h>
 #include <windows.h>
-#ifdef open
-#undef open
-#endif
 #endif
 
-
 #include <sstream>
 #include <deque>
-#include <algorithm>
 #include <vector>
-#include "./pgr_dijkstra.hpp"
+
 #include "./MY_FUNCTION_NAME_driver.h"
 
-#include "./../../common/src/pgr_types.h"
+
+#include "../../common/src/pgr_alloc.hpp"
 #include "./../../common/src/pgr_assert.h"
-#include "./../../common/src/pgr_alloc.hpp"
+#include "./../../common/src/pgr_types.h"
+
+#include "./../../dijkstra/src/pgr_dijkstra.hpp"
+
+
+
 
 /************************************************************
   MY_QUERY_LINE1
  ***********************************************************/
+
+template < class G >
+static
+Path
+pgr_MY_FUNCTION_NAME(
+        G &graph,
+        int64_t source,
+        int64_t target,
+        bool only_cost = false) {
+    Path path;
+    Pgr_dijkstra< G > fn_dijkstra;
+    return fn_dijkstra.dijkstra(graph, source, target, only_cost);
+}
+
+
 void
 do_pgr_MY_FUNCTION_NAME(
-        MY_EDGE_TYPE  *data_edges, size_t total_edges,
+        MY_EDGE_TYPE  *data_edges,
+        size_t total_edges,
         int64_t start_vid,
-        int64_t  *end_vidsArr, size_t size_end_vidsArr,
+        int64_t end_vid,
         bool directed,
+        bool only_cost,
         MY_RETURN_VALUE_TYPE **return_tuples,
         size_t *return_count,
         char ** log_msg,
-        char ** err_msg){
-    std::ostringstream err;
+        char ** notice_msg,
+        char ** err_msg) {
     std::ostringstream log;
+    std::ostringstream err;
+    std::ostringstream notice;
     try {
-        
         pgassert(!(*log_msg));
+        pgassert(!(*notice_msg));
         pgassert(!(*err_msg));
         pgassert(!(*return_tuples));
         pgassert(*return_count == 0);
         pgassert(total_edges != 0);
 
-        /* depending on the functionality some tests can be done here
-         * For example */
-        if (total_edges <= 1) {
-            err << "Required: more than one edges\n";
-            (*return_tuples) = NULL;
-            (*return_count) = 0;
-            *err_msg = strdup(err.str().c_str());
-            return;
-        }
-
         graphType gType = directed? DIRECTED: UNDIRECTED;
 
-        std::deque< Path >paths;
-        // samll logs
-        log << "Inserting vertices into a c++ vector structure\n";
-        std::vector< int64_t > end_vertices(end_vidsArr, end_vidsArr + size_end_vidsArr);
-        std::sort(end_vertices.begin(),end_vertices.end());
-#ifndef NDEBUG
-        // big logs with cycles wrap them so on release they wont consume time
-        log << "end vids: ";
-        for (const auto &vid : end_vertices) log << vid << ",";
-        log << "\nstart vid:" << start_vid << "\n";
-#endif
+        Path path;
 
         if (directed) {
-            // very detailed logging
             log << "Working with directed Graph\n";
-            pgRouting::DirectedGraph digraph(gType);
-            log << "Working with directed Graph 1 \n";
-            digraph.graph_insert_data(data_edges, total_edges);
-
-#ifndef NDEBUG
-            // a graph log is a big log
-            log << digraph;
-#endif
-            
-            log << "Working with directed Graph 2\n";
-            pgr_dijkstra(digraph, paths, start_vid, end_vertices, false);
-            log << "Working with directed Graph 3\n";
+            pgrouting::DirectedGraph digraph(gType);
+            digraph.insert_edges(data_edges, total_edges);
+            path = pgr_MY_FUNCTION_NAME(digraph,
+                    start_vid,
+                    end_vid,
+                    only_cost);
         } else {
-            // maybe the code is working so cleaner logging
             log << "Working with Undirected Graph\n";
-            pgRouting::UndirectedGraph undigraph(gType);
-            undigraph.graph_insert_data(data_edges, total_edges);
-            pgr_dijkstra(undigraph, paths, start_vid, end_vertices, false);
+            pgrouting::UndirectedGraph undigraph(gType);
+            undigraph.insert_edges(data_edges, total_edges);
+            path = pgr_MY_FUNCTION_NAME(
+                    undigraph,
+                    start_vid,
+                    end_vid,
+                    only_cost);
         }
 
-        // use auto when possible
-        auto count(count_tuples(paths));
+        auto count = path.size();
 
         if (count == 0) {
             (*return_tuples) = NULL;
             (*return_count) = 0;
-            log << 
-                "No paths found between Starting and any of the Ending vertices\n";
-            *log_msg = strdup(log.str().c_str());
+            notice <<
+                "No paths found between start_vid and end_vid vertices";
             return;
         }
 
-        // get the space required to store all the paths
         (*return_tuples) = pgr_alloc(count, (*return_tuples));
-        log << "Converting a set of paths into the tuples\n";
-        (*return_count) = (collapse_paths(return_tuples, paths));
-
-        *err_msg = NULL;
-        *log_msg = strdup(log.str().c_str());
-
-    } catch (AssertFailedException &exept) {
+        size_t sequence = 0;
+        path.generate_postgres_data(return_tuples, sequence);
+        (*return_count) = sequence;
+
+        pgassert(*err_msg == NULL);
+        *log_msg = log.str().empty()?
+            nullptr :
+            strdup(log.str().c_str());
+        *notice_msg = notice.str().empty()?
+            nullptr :
+            strdup(notice.str().c_str());
+    } catch (AssertFailedException &except) {
         if (*return_tuples) free(*return_tuples);
         (*return_count) = 0;
-        err << exept.what() << "\n";
-        *err_msg = strdup(log.str().c_str());
+        err << except.what();
+        *err_msg = strdup(err.str().c_str());
         *log_msg = strdup(log.str().c_str());
-    } catch (std::exception& exept) {
+    } catch (std::exception &except) {
         if (*return_tuples) free(*return_tuples);
         (*return_count) = 0;
-        err << exept.what() << "\n";
-        *err_msg = strdup(log.str().c_str());
+        err << except.what();
+        *err_msg = strdup(err.str().c_str());
         *log_msg = strdup(log.str().c_str());
     } catch(...) {
         if (*return_tuples) free(*return_tuples);
         (*return_count) = 0;
-        err << "Caught unknown exception!\n";
-        *err_msg = strdup(log.str().c_str());
+        err << "Caught unknown exception!";
+        *err_msg = strdup(err.str().c_str());
         *log_msg = strdup(log.str().c_str());
     }
 }
diff --git a/tools/template/src/function1_driver.h b/tools/template/src/function1_driver.h
index 4c4c5a0..69fc890 100644
--- a/tools/template/src/function1_driver.h
+++ b/tools/template/src/function1_driver.h
@@ -1,12 +1,13 @@
 /*PGR-GNU*****************************************************************
 File: MY_FUNCTION_NAME_driver.h
 
+Generated with Template by:
 Copyright (c) 2015 pgRouting developers
 Mail: project at pgrouting.org
 
 Function's developer: 
-Copyright (c) YEAR DEVELOPER_NAME
-Mail: DEVELOPER_EMAIL
+Copyright (c) 2015 Celia Virginia Vergara Castillo
+Mail: vicky_vergara at hotmail.com
 
 ------
 
@@ -28,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 #ifndef SRC_MY_FUNCTION_NAME_UPPER_SRC_MY_FUNCTION_NAME_UPPER_DRIVER_H_
 #define SRC_MY_FUNCTION_NAME_UPPER_SRC_MY_FUNCTION_NAME_UPPER_DRIVER_H_
+#pragma once
 
 #include "./../../common/src/pgr_types.h"
 
@@ -39,16 +41,20 @@ extern "C" {
       MY_QUERY_LINE1
      ********************************************************/
 
-    // Code standard:
-    // Pass the arrays and the sizes on the same line
-    void do_pgr_MY_FUNCTION_NAME(
-            MY_EDGE_TYPE *data_edges, size_t total_edges,
-            int64_t start_vid,
-            int64_t  *end_vidsArr, size_t size_end_vidsArr,
-            bool directed,
-            MY_RETURN_VALUE_TYPE **return_tuples, size_t *return_count,
-            char ** log_msg,
-            char ** err_msg);
+
+    void
+        do_pgr_MY_FUNCTION_NAME(
+                MY_EDGE_TYPE  *data_edges,
+                size_t total_edges,
+                int64_t start_vid,
+                int64_t end_vid,
+                bool directed,
+                bool only_cost,
+                MY_RETURN_VALUE_TYPE **return_tuples,
+                size_t *return_count,
+                char ** log_msg,
+                char ** notice_msg,
+                char ** err_msg);
 
 
 #ifdef __cplusplus
diff --git a/tools/template/test/doc-function1.result b/tools/template/test/doc-function1.result
index 798ae10..3a16953 100644
--- a/tools/template/test/doc-function1.result
+++ b/tools/template/test/doc-function1.result
@@ -1,19 +1,11 @@
---q1
-1|1|2|3|2|4|1|0
-2|2|2|3|5|8|1|1
-3|3|2|3|6|9|1|2
-4|4|2|3|9|16|1|3
-5|5|2|3|4|3|1|4
-6|6|2|3|3|-1|0|5
-7|1|2|5|2|4|1|0
-8|2|2|5|5|-1|0|1
---q2
-1|1|2|3|2|4|1|0
-2|2|2|3|5|8|1|1
-3|3|2|3|6|9|1|2
-4|4|2|3|9|16|1|3
-5|5|2|3|4|3|1|4
-6|6|2|3|3|-1|0|5
-7|1|2|5|2|4|1|0
-8|2|2|5|5|-1|0|1
---q3
+-- q1
+1|1|2|4|1|0
+2|2|5|8|1|1
+3|3|6|9|1|2
+4|4|9|16|1|3
+5|5|4|3|1|4
+6|6|3|-1|0|5
+-- q2
+1|1|2|2|1|0
+2|2|3|-1|0|1
+-- q3
diff --git a/tools/template/test/doc-function1.test.sql b/tools/template/test/doc-function1.test.sql
index ba89b4c..e4dda96 100644
--- a/tools/template/test/doc-function1.test.sql
+++ b/tools/template/test/doc-function1.test.sql
@@ -1,13 +1,17 @@
+BEGIN;
 
-
-\echo --q1
+\echo -- q1
 SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table', 
-    2, ARRAY[5, 3]);
-\echo --q2
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3
+);
 
+\echo -- q2
 SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table', 
-    2, ARRAY[5, 3]);
-\echo --q3
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3,
+    FALSE
+);
+\echo -- q3
 
+ROLLBACK;
diff --git a/tools/template/test/pgtap/function1-compare-dijkstra.sql b/tools/template/test/pgtap/function1-compare-dijkstra.sql
new file mode 100644
index 0000000..361e6d5
--- /dev/null
+++ b/tools/template/test/pgtap/function1-compare-dijkstra.sql
@@ -0,0 +1,73 @@
+\i setup.sql
+
+SELECT plan(1156);
+
+SET client_min_messages TO ERROR;
+
+UPDATE edge_table SET cost = cost + 0.001 * id * id, reverse_cost = reverse_cost + 0.001 * id * id;
+
+CREATE or REPLACE FUNCTION MY_FUNCTION_NAME_LOWER_compare_dijkstra(cant INTEGER default 17)
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+inner_sql TEXT;
+dijkstra_sql TEXT;
+MY_FUNCTION_NAME_LOWER_sql TEXT;
+BEGIN
+
+    FOR i IN 1.. cant LOOP
+        FOR j IN 1.. cant LOOP
+
+            -- DIRECTED
+            inner_sql := 'SELECT id, source, target, cost, reverse_cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+
+            MY_FUNCTION_NAME_LOWER_sql := 'SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+            RETURN query SELECT set_eq(MY_FUNCTION_NAME_LOWER_sql, dijkstra_sql, MY_FUNCTION_NAME_LOWER_sql);
+
+
+            inner_sql := 'SELECT id, source, target, cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+
+            MY_FUNCTION_NAME_LOWER_sql := 'SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', true)';
+            RETURN query SELECT set_eq(MY_FUNCTION_NAME_LOWER_sql, dijkstra_sql, MY_FUNCTION_NAME_LOWER_sql);
+
+
+
+            -- UNDIRECTED
+            inner_sql := 'SELECT id, source, target, cost, reverse_cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+
+            MY_FUNCTION_NAME_LOWER_sql := 'SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+            RETURN query SELECT set_eq(MY_FUNCTION_NAME_LOWER_sql, dijkstra_sql, MY_FUNCTION_NAME_LOWER_sql);
+
+
+            inner_sql := 'SELECT id, source, target, cost FROM edge_table';
+            dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+
+            MY_FUNCTION_NAME_LOWER_sql := 'SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER($$' || inner_sql || '$$, ' || i || ', ' || j
+                || ', false)';
+            RETURN query SELECT set_eq(MY_FUNCTION_NAME_LOWER_sql, dijkstra_sql, MY_FUNCTION_NAME_LOWER_sql);
+
+
+        END LOOP;
+    END LOOP;
+
+    RETURN;
+END
+$BODY$
+language plpgsql;
+
+SELECT * from MY_FUNCTION_NAME_LOWER_compare_dijkstra();
+
+
+SELECT * FROM finish();
+ROLLBACK;
+
diff --git a/tools/template/test/pgtap/function1-innerQuery.sql b/tools/template/test/pgtap/function1-innerQuery.sql
new file mode 100644
index 0000000..dd9a023
--- /dev/null
+++ b/tools/template/test/pgtap/function1-innerQuery.sql
@@ -0,0 +1,116 @@
+\i setup.sql
+
+SELECT plan(47);
+SET client_min_messages TO ERROR;
+
+
+SELECT has_function('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['text', 'bigint', 'bigint', 'boolean','boolean']);
+
+SELECT function_returns('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['text', 'bigint', 'bigint', 'boolean','boolean'],
+    'setof record');
+
+CREATE OR REPLACE FUNCTION test_anyInteger(fn TEXT, params TEXT[], parameter TEXT) 
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+start_sql TEXT;
+end_sql TEXT;
+query TEXT;
+p TEXT;
+BEGIN
+    start_sql = 'select * from ' || fn || '($$ SELECT ';
+    FOREACH  p IN ARRAY params LOOP
+        IF p = parameter THEN CONTINUE;
+        END IF;
+        start_sql = start_sql || p || ', ';
+    END LOOP;
+    end_sql = ' FROM edge_table $$, 2, 3, true)';
+    
+    query := start_sql || parameter || '::SMALLINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::INTEGER ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::BIGINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+
+    query := start_sql || parameter || '::REAL ' || end_sql;
+    RETURN query SELECT throws_ok(query);
+
+    query := start_sql || parameter || '::FLOAT8 ' || end_sql;
+    RETURN query SELECT throws_ok(query);
+END;
+$BODY$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION test_anyNumerical(fn TEXT, params TEXT[], parameter TEXT) 
+RETURNS SETOF TEXT AS
+$BODY$
+DECLARE
+start_sql TEXT;
+end_sql TEXT;
+query TEXT;
+p TEXT;
+BEGIN
+    start_sql = 'select * from ' || fn || '($$ SELECT ';
+    FOREACH  p IN ARRAY params LOOP
+        IF p = parameter THEN CONTINUE;
+        END IF;
+        start_sql = start_sql || p || ', ';
+    END LOOP;
+    end_sql = ' FROM edge_table $$, 2, 3, true)';
+    
+    query := start_sql || parameter || '::SMALLINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::INTEGER ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+    
+    query := start_sql || parameter || '::BIGINT ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+
+    query := start_sql || parameter || '::REAL ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+
+    query := start_sql || parameter || '::FLOAT8 ' || end_sql;
+    RETURN query SELECT lives_ok(query);
+END;
+$BODY$ LANGUAGE plpgsql;
+
+--with reverse cost
+SELECT test_anyInteger('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'id');
+SELECT test_anyInteger('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'source');
+SELECT test_anyInteger('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'target');
+SELECT test_anyNumerical('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'cost');
+SELECT test_anyNumerical('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
+    'reverse_cost');
+
+
+--without reverse cost
+SELECT test_anyInteger('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'id');
+SELECT test_anyInteger('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'source');
+SELECT test_anyInteger('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'target');
+SELECT test_anyNumerical('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['id', 'source', 'target', 'cost'],
+    'cost');
+
+
+SELECT finish();
+ROLLBACK;
diff --git a/tools/template/test/pgtap/types-check.sql b/tools/template/test/pgtap/types-check.sql
index c94d656..c745e56 100644
--- a/tools/template/test/pgtap/types-check.sql
+++ b/tools/template/test/pgtap/types-check.sql
@@ -1,144 +1,53 @@
-
 \i setup.sql
 
-SELECT plan(19);
 
-SELECT has_function('pgr_MY_FUNCTION_NAME', ARRAY['text','bigint','anyarray','boolean']);
-SELECT function_returns('pgr_MY_FUNCTION_NAME', ARRAY['text','bigint','anyarray','boolean'],'setof record');
+SELECT plan(6);
+
+SELECT can(ARRAY['pgr_MY_FUNCTION_NAME_LOWER']);
 
-PREPARE v21q01 AS
-SELECT  'integer'::text AS t1,'integer'::text AS t2,
-'bigint'::text AS t5, 'bigint'::text AS t6,
-'double precision'::text AS t7, 'double precision'::text AS t8;
 
-PREPARE v21q10 AS
+--V2.4+
+SELECT has_function('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['text','bigint','bigint','boolean','boolean']);
+SELECT function_returns('pgr_MY_FUNCTION_NAME_LOWER',
+    ARRAY['text','bigint','bigint','boolean','boolean'],
+    'setof record');
+
+-- testing for the signature that they return the correct names & columns
+
+PREPARE v21q00 AS
 SELECT pg_typeof(seq)::text AS t1, pg_typeof(path_seq)::text AS t2,
-pg_typeof(end_vid)::text AS t4,
-pg_typeof(node)::text AS t5, pg_typeof(edge)::text AS t6,
-pg_typeof(cost)::text AS t7, pg_typeof(agg_cost)::TEXT AS t8 
-FROM ( 
-    SELECT * FROM pgr_MY_FUNCTION_NAME(
-        'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost::FLOAT, reverse_cost::FLOAT FROM edge_table',
-        2, ARRAY[3], true) ) AS a
-limit 1;
-
-SELECT set_eq('v21q01', 'v21q10','pgr_MY_FUNCTION_NAME 1 to many: SHOULD RETURN expected columns names & types');
-
-PREPARE q1 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id::BIGINT, source::SMALLINT, target::BIGINT, cost::INTEGER, reverse_cost::SMALLINT FROM edge_table',
-    2, ARRAY[5,3]);
-
-PREPARE q2 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    2::BIGINT, ARRAY[5,3]);
+    pg_typeof(node)::text AS t5, pg_typeof(edge)::text AS t6,
+    pg_typeof(cost)::text AS t7, pg_typeof(agg_cost)::TEXT AS t8 
+    FROM ( 
+        SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER(
+            'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+            2, 3, true) ) AS a
+    limit 1
+;
 
-PREPARE q3 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    2::SMALLINT, ARRAY[5,3]);
+PREPARE v21q01 AS
+SELECT  'integer'::text AS t1,'integer'::text AS t2,
+    'bigint'::text AS t5, 'bigint'::text AS t6,
+    'double precision'::text AS t7, 'double precision'::text AS t8;
 
-PREPARE q4 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]::INTEGER[]);
+SELECT set_eq('v21q00', 'v21q01','Expected columns names & types in version 2.4');
 
-PREPARE q5 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]::SMALLINT[]);
 
-PREPARE q6 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]::BIGINT[]);
-
-SELECT lives_ok('q1', 'SHOULD LIVE because edges query accepts ANY-INTEGER & ANY NUMERICAL');
-SELECT lives_ok('q2', 'SHOULD LIVE because start_vid accepts BIGINT');
-SELECT lives_ok('q3', 'SHOULD LIVE because start_vid accepts SMALLINT');
-SELECT lives_ok('q4', 'SHOULD LIVE because end_vids accepts array of INTEGER');
-SELECT lives_ok('q5', 'SHOULD LIVE because end_vids accepts array of SMALLINT');
-SELECT lives_ok('q6', 'SHOULD LIVE because end_vids accepts array of BIGINT');
-
-
-PREPARE q10 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id::FLOAT, source, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]);
-
-PREPARE q11 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id::REAL, source, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]);
-
-SELECT throws_ok('q10', 'XX000', 'Unexpected Column ''id'' type. Expected ANY-INTEGER',
-    'SHOULD THROW because id is FLOAT');
-SELECT throws_ok('q11', 'XX000', 'Unexpected Column ''id'' type. Expected ANY-INTEGER',
-    'SHOULD THROW because id is REAL');
-
-PREPARE q12 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source::FLOAT, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]);
-
-PREPARE q13 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source::REAL, target, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]);
-
-SELECT throws_ok('q12', 'XX000', 'Unexpected Column ''source'' type. Expected ANY-INTEGER',
-    'SHOULD THROW because source is FLOAT');
-SELECT throws_ok('q13', 'XX000', 'Unexpected Column ''source'' type. Expected ANY-INTEGER',
-    'SHOULD THROW because source is REAL');
-
-PREPARE q14 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target::FLOAT, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]);
-
-PREPARE q15 AS
-SELECT * FROM pgr_MY_FUNCTION_NAME(
-    'SELECT id, source, target::REAL, cost, reverse_cost FROM edge_table',
-    2, ARRAY[5,3]);
-
-SELECT throws_ok('q14', 'XX000', 'Unexpected Column ''target'' type. Expected ANY-INTEGER',
-    'SHOULD THROW because source is FLOAT');
-SELECT throws_ok('q15', 'XX000', 'Unexpected Column ''target'' type. Expected ANY-INTEGER',
-    'SHOULD THROW because source is REAL');
-
-
-SELECT throws_ok('
-    SELECT * FROM pgr_MY_FUNCTION_NAME(
-        ''SELECT id, source, target, cost, reverse_cost FROM edge_table'',
-        2::FLOAT, ARRAY[5,3]);',
-    '42883', 'function pgr_MY_FUNCTION_NAME(unknown, double precision, integer[]) does not exist',
-    'SHOULD THROW because start_vid is FLOAT');
-
-SELECT throws_ok('
-    SELECT * FROM pgr_MY_FUNCTION_NAME(
-        ''SELECT id, source, target, cost, reverse_cost FROM edge_table'',
-        2::REAL, ARRAY[5,3]);',
-    '42883', 'function pgr_MY_FUNCTION_NAME(unknown, real, integer[]) does not exist',
-    'SHOULD THROW because start_vid is REAL');
-
-
-SELECT throws_ok('
-    SELECT * FROM pgr_MY_FUNCTION_NAME(
-        ''SELECT id, source, target, cost, reverse_cost FROM edge_table'',
-        2, ARRAY[5,3]::FLOAT[]);',
-    'XX000','Expected array of ANY-INTEGER',
-    'SHOULD THROW because end_vids array is of FLOAT');
-
-SELECT throws_ok('
-    SELECT * FROM pgr_MY_FUNCTION_NAME(
-        ''SELECT id, source, target, cost, reverse_cost FROM edge_table'',
-        2, ARRAY[5,3]::REAL[]);',
-    'XX000','Expected array of ANY-INTEGER',
-    'SHOULD THROW because end_vids array is of REAL');
+-- CHECKING WORKS WITH & WITOUT REVERSE COST
 
+PREPARE v20q1 AS
+SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER(
+    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
+    2, 3, true);
 
+PREPARE v20q3 AS
+SELECT * FROM pgr_MY_FUNCTION_NAME_LOWER(
+    'SELECT id, source, target, cost FROM edge_table',
+    2, 3, false);
 
+SELECT lives_ok('v20q1','with reverse cost');
+SELECT lives_ok('v20q3','with NO reverse cost');
 
 
 SELECT finish();
diff --git a/tools/template/test/test.conf b/tools/template/test/test.conf
index 60c3bb7..7d492ca 100644
--- a/tools/template/test/test.conf
+++ b/tools/template/test/test.conf
@@ -2,24 +2,16 @@
 
 %main::tests = (
     'any' => {
-        'comment' => 'Function test for any versions.',
-        'data' => [],
+        'comment' => 'Dijkstra test for any versions.',
+        'data' => [ ],
         'tests' => [qw(
             doc-MY_FUNCTION_NAME
             )],
         'documentation' => [qw(
             doc-MY_FUNCTION_NAME
-            )],
-
-#put here the ones that you are not testing (just a place holder)
-        'nottesting' => [qw(
             )]
     },
-# I dont know what this are for or how to use them.
-#  TODO ask Steve 
-#    'vpg-vpgis' => {}, # for version specific tests
-#    '8-1' => {},       # for pg 8.x and postgis 1.x
-#    '9.2-2.1' => {},   # for pg 9.2 and postgis 2.1
+
 );
 
 1;
diff --git a/tools/testers/algorithm-tester.pl b/tools/testers/algorithm-tester.pl
index 0fec965..f392018 100755
--- a/tools/testers/algorithm-tester.pl
+++ b/tools/testers/algorithm-tester.pl
@@ -278,7 +278,11 @@ sub process_single_test{
         next;
     };
 
-    #reason of opening conection is because the set client_min_messages to warning;
+    my $level = "NOTICE";
+    $level = "WARNING" if $ignore;
+    $level = "DEBUG1" if $DEBUG1;
+
+
     if ($DOCUMENTATION) {
         mysystem("mkdir -p '$dir/../doc' "); # make sure the directory exists
         open(PSQL, "|$psql $connopts --set='VERBOSITY terse' -e $database > $dir/../doc/$x.queries 2>\&1 ") || do {
@@ -286,11 +290,9 @@ sub process_single_test{
             $stats{z_fail}++;
             next;
         };
-        print PSQL "set client_min_messages to WARNING;\n" if $ignore;
-        print PSQL "set client_min_messages to DEBUG1;\n" if $DEBUG1;
     }
     else {
-        open(PSQL, "|$psql $connopts --set='VERBOSITY terse' -A -t -q $database > $TMP 2>\&1 ") || do {
+        open(PSQL, "|$psql $connopts  --set='VERBOSITY terse' -A -t -q $database > $TMP 2>\&1 ") || do {
             $res->{"$dir/$x.test.sql"} = "FAILED: could not open connection to db : $!";
             if (!$INTERNAL_TESTS) {
                $stats{z_fail}++;
@@ -298,13 +300,21 @@ sub process_single_test{
             next;
         };
     }
-    print PSQL "set client_min_messages to WARNING;\n" if $ignore;
-    print PSQL "set client_min_messages to DEBUG1;\n" if $DEBUG1;
+
+
     my @d = ();
     @d = <TIN>; #reads the whole file into the array @d 
-    print PSQL @d; #prints the whole fle stored in @d
-    close(PSQL); #executes everything
-    close(TIN); #closes the input file  /TIN = test input
+
+    print PSQL "BEGIN;\n";
+    print PSQL "SET client_min_messages TO $level;\n";
+    #prints the whole fle stored in @d
+    print PSQL @d;
+    print PSQL "\nROLLBACK;";
+
+    # executes everything
+    close(PSQL);
+    #closes the input file  /TIN = test input
+    close(TIN);
 
     return if $DOCUMENTATION;
 
@@ -394,7 +404,6 @@ sub createTestDB {
     }
     #
 #    else {
-#        if ($vpgis && dbExists("template_postgis_$vpgis")) {
 #            $template = "template_postgis_$vpgis";
 #        }
 #        elsif (dbExists('template_postgis')) {
diff --git a/tools/testers/pg_prove_tests.sh b/tools/testers/pg_prove_tests.sh
index e2c79c6..599784f 100755
--- a/tools/testers/pg_prove_tests.sh
+++ b/tools/testers/pg_prove_tests.sh
@@ -41,11 +41,17 @@ then
     echo "MADE TEST **********************"
 fi
 
+pg_prove ../../src/trsp/test/pgtap/* -d $PGDATABASE  -U $PGUSER
+pg_prove ../../src/dijkstra/test/pgtap/* -d $PGDATABASE  -U $PGUSER
+pg_prove ../../src/bdDijkstra/test/pgtap/* -d $PGDATABASE  -U $PGUSER
+pg_prove ../../src/bd_dijkstra/test/pgtap/* -d $PGDATABASE  -U $PGUSER
+
 pg_prove ../../src/max_flow/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/pickDeliver/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/astar/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 
 
+pg_prove ../../src/withPoints/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/allpairs/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/alpha_shape/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/apsp_johnson/test/pgtap/* -d $PGDATABASE  -U $PGUSER
@@ -53,15 +59,12 @@ pg_prove ../../src/apsp_warshall/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/ksp/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/topology/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/common/test/pgtap/* -d $PGDATABASE  -U $PGUSER
-pg_prove ../../src/dijkstra/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/driving_distance/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/kdijkstra/test/pgtap/* -d $PGDATABASE  -U $PGUSER
-pg_prove ../../src/withPoints/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/trsp/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/tsp/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 
 pg_prove ../../src/bd_astar/test/pgtap/* -d $PGDATABASE  -U $PGUSER
-pg_prove ../../src/bd_dijkstra/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 pg_prove ../../src/convenience/test/pgtap/* -d $PGDATABASE  -U $PGUSER
 
 pg_prove ../../src/tsp/test/performance/* -d $PGDATABASE  -U $PGUSER
diff --git a/tools/testers/setup.sql b/tools/testers/setup.sql
index 386a686..dd144a0 100644
--- a/tools/testers/setup.sql
+++ b/tools/testers/setup.sql
@@ -13,5 +13,7 @@
 \set ON_ERROR_ROLLBACK 1
 \set ON_ERROR_STOP true
 
+SET client_min_messages TO WARNING;
+
 BEGIN;
 
diff --git a/tools/testers/update-tester.pl b/tools/testers/update-tester.pl
deleted file mode 100755
index 52b8cca..0000000
--- a/tools/testers/update-tester.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-dropdb -U postgres -h localhost test_update -p 5432
-createdb -U postgres -h localhost test_update -p 5432
-psql -U postgres -h localhost test_update -p 5432 <<EOF
-create extension postgis;
-create extension pgrouting with version '2.0.0';
-select pgr_version();
-alter extension pgrouting update to '2.1.0';
-select pgr_version();
-
-EOF
-
diff --git a/tools/testers/update-tester.sh b/tools/testers/update-tester.sh
index 4b36712..f42d7a2 100755
--- a/tools/testers/update-tester.sh
+++ b/tools/testers/update-tester.sh
@@ -39,7 +39,7 @@ echo -
 #  bash tools/testers/update-tester.sh
 #
 
-CURRENT=2.3.2
+CURRENT=2.4.0
 
 function update_test {
 set -e
@@ -72,9 +72,10 @@ dropdb   ___test_update
 } 
 
 #------------------------------------
-### updates from 2.3.x
+### updates from 2.3.0
 #------------------------------------
 
+update_test 2.3.2 $CURRENT
 update_test 2.3.1 $CURRENT
 update_test 2.3.0 $CURRENT
 
@@ -82,7 +83,7 @@ update_test 2.3.0 $CURRENT
 ### updates from 2.2.x
 #------------------------------------
 
-update_test 2.2.4 $CURRENT
+#update_test 2.2.4 $CURRENT
 update_test 2.2.3 $CURRENT
 update_test 2.2.2 $CURRENT
 update_test 2.2.1 $CURRENT
@@ -104,4 +105,4 @@ update_test 2.0.0 $CURRENT
 echo Reached end of test, all tests passed
 # CAN NOT BE Update test from 2.0.1  to $CURRENT;
 
-
+exit 0
diff --git a/tools/travis/before_script.sh b/tools/travis/before_script.sh
deleted file mode 100755
index 85c197b..0000000
--- a/tools/travis/before_script.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Build pgRouting
-# ------------------------------------------------------------------------------
-
-# exit script on error
-set -e 
-
-psql --version
-psql -U postgres -c "SELECT version();"
-
diff --git a/tools/travis/install-doxygen.sh b/tools/travis/install-doxygen.sh
index b57be1a..46f7ce9 100755
--- a/tools/travis/install-doxygen.sh
+++ b/tools/travis/install-doxygen.sh
@@ -8,11 +8,11 @@
 
 set -e
 
-OS="$(lsb_release -c -s)"
+#OS="$(lsb_release -c -s)"
 
-if [[ "$OS" != "trusty" ]] ; then
-    exit 0
-fi
+#if [[ "$OS" != "trusty" ]] ; then
+#    exit 0
+#fi
 
 
 #install doxygen only on trusty
diff --git a/tools/travis/install-postgres9.5.sh b/tools/travis/install-postgres9.5.sh
deleted file mode 100755
index dede90e..0000000
--- a/tools/travis/install-postgres9.5.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Install pgRouting prerequesits
-# ------------------------------------------------------------------------------
-
-set -e
-
-POSTGRESQL_VERSION="$1"
-PGUSER="$2"
-
-echo "Postgres $POSTGRESQL_VERSION"
-echo "User $PGUSER"
-
-if test "$POSTGRESQL_VERSION" = "9.5" ; then
-
-    echo "Installing postgresql 9.5 & postgis for 9.5 pgtap & pg_prove"
-    sudo apt-get install -y postgresql-9.5 postgresql-9.5-postgis
-    #sudo apt-get install -y pgtap libtap-parser-sourcehandler-pgtap-perl
-    sudo cp /usr/lib/postgresql/$POSTGRESQL_VERSION/bin/pg_config /usr/bin/pg_config
-    sudo /etc/init.d/postgresql stop
-    sudo /etc/init.d/postgresql stop
-    ps -fea | grep postgres
-    echo "making grep before change"
-    grep port /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
-    echo "finished grep"
-    sudo sed -i -e 's/port = 5433/port = 5432/g' /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
-    echo "making grep after change"
-    grep port /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
-    echo "finished grep"
-    sudo cp $TRAVIS_BUILD_DIR/tools/travis/pg_hba.conf /etc/postgresql/$POSTGRESQL_VERSION/main/pg_hba.conf
-    sudo /etc/init.d/postgresql start $POSTGRESQL_VERSION
-    #sudo service postgres-$POSTGRESQL_VERSION start
-    ps -fea | grep postgres
-    #sudo -u $DBUSER psql -c "ALTER ROLE postgres WITH PASSWORD '';"
-
-fi
diff --git a/tools/travis/install-postgres9.6.sh b/tools/travis/install-postgres9.6.sh
deleted file mode 100755
index df6c7da..0000000
--- a/tools/travis/install-postgres9.6.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Install pgRouting prerequesits
-# ------------------------------------------------------------------------------
-
-set -e
-
-POSTGRESQL_VERSION="$1"
-PGUSER="$2"
-
-echo "Postgres $POSTGRESQL_VERSION"
-echo "User $PGUSER"
-
-if test "$POSTGRESQL_VERSION" = "9.6" ; then
-
-    echo "Installing postgresql 9.6 & postgis for 9.6 pgtap & pg_prove"
-    sudo apt-get install -y postgresql-9.6 postgresql-9.6-postgis-2.2
-    #sudo apt-get install -y pgtap libtap-parser-sourcehandler-pgtap-perl
-    sudo cp /usr/lib/postgresql/$POSTGRESQL_VERSION/bin/pg_config /usr/bin/pg_config
-    sudo /etc/init.d/postgresql stop
-    sudo /etc/init.d/postgresql stop
-    ps -fea | grep postgres
-    echo "making grep before change"
-    grep port /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
-    echo "finished grep"
-    sudo sed -i -e 's/port = 5433/port = 5432/g' /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
-    echo "making grep after change"
-    grep port /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
-    echo "finished grep"
-    sudo cp $TRAVIS_BUILD_DIR/tools/travis/pg_hba.conf /etc/postgresql/$POSTGRESQL_VERSION/main/pg_hba.conf
-    sudo /etc/init.d/postgresql start $POSTGRESQL_VERSION
-    #sudo service postgres-$POSTGRESQL_VERSION start
-    ps -fea | grep postgres
-    #sudo -u $DBUSER psql -c "ALTER ROLE postgres WITH PASSWORD '';"
-
-fi
diff --git a/tools/travis/install_pgtap.sh b/tools/travis/install_pgtap.sh
deleted file mode 100755
index 12b725d..0000000
--- a/tools/travis/install_pgtap.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Install Pgtap
-# ------------------------------------------------------------------------------
-
-POSTGRESQL_VERSION="$1"
-
-# exit script on error
-set -e 
-
-echo "Installing pgtap ... this may take some time."
-PGUSER="postgres"
-
-sudo cp /usr/lib/postgresql/$1/bin/pg_config /usr/bin/pg_config
-
-wget https://github.com/theory/pgtap/archive/master.zip
-unzip master.zip
-cd pgtap-master
-make
-#make installcheck
-sudo make install
-
-#sh test_pgtap.sh
diff --git a/tools/travis/pgrouting_build.sh b/tools/travis/pgrouting_build.sh
index ef834a5..cd6b3c7 100755
--- a/tools/travis/pgrouting_build.sh
+++ b/tools/travis/pgrouting_build.sh
@@ -10,7 +10,10 @@
 set -e 
 
 # build pgRouting
-cmake  -DPOSTGRESQL_VERSION=$POSTGRESQL_VERSION -DWITH_DOC=1 -DBUILD_DOXY=1
+mkdir build
+cd build
+cmake  -DPOSTGRESQL_VERSION=$POSTGRESQL_VERSION -DWITH_DOC=ON -DBUILD_DOXY=ON -DCMAKE_BUILD_TYPE=Debug ..
 make
 sudo make install
-
+make doc
+make doxy
diff --git a/tools/travis/pgrouting_install.sh b/tools/travis/pgrouting_install.sh
deleted file mode 100755
index 95ac449..0000000
--- a/tools/travis/pgrouting_install.sh
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Install pgRouting prerequesits
-# ------------------------------------------------------------------------------
-
-POSTGRESQL_VERSION="$1"
-POSTGIS_VERSION="$2"
-
-# exit script on error
-set -e 
-ERROR=0
-
-# ------------------------------------------------------------------------------
-# Remove PostgreSQL and all its files
-# ------------------------------------------------------------------------------
-sudo service postgresql stop
-sudo apt-get remove postgresql libpq-dev libpq5 postgresql-client-common postgresql-common -qq --purge -y 
-sudo rm -rf /var/lib/postgresql
-
-# Add PPA's'
-# ------------------------------------------------------------------------------
-sudo apt-add-repository -y ppa:georepublic/pgrouting-travis
-
-if [ "$POSTGIS_VERSION" == "2.0" ] || [ "$POSTGIS_VERSION" == "2.1" ]; then 
-	sudo apt-add-repository -y ppa:ubuntugis/ppa
-fi
-
-# Add PostgreSQL Apt repository
-# UPDATE: seems to be already available in Travis
-# ------------------------------------------------------------------------------
-# echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > pgdg.list
-# sudo mv pgdg.list /etc/apt/sources.list.d/
-# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-sudo apt-get update -qq
-
-# ------------------------------------------------------------------------------
-# Install PostgreSQL (always install from PostgreSQL Apt repository)
-# ------------------------------------------------------------------------------
-sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" install -y -qq postgresql-$POSTGRESQL_VERSION postgresql-contrib-$POSTGRESQL_VERSION postgresql-server-dev-$POSTGRESQL_VERSION
-
-# Install packages
-# ------------------------------------------------------------------------------
-echo "Installing packages ... this may take some time."
-sudo apt-get install -y -qq packaging-dev cmake checkinstall libcgal-dev libboost-graph-dev libboost-thread-dev libxml2-dev libproj-dev libjson0-dev xsltproc docbook-xsl docbook-mathml libgeos-dev libgdal1-dev 
-
-if [ "$POSTGIS_VERSION" == "1.5" ]; then 
-	RELEASE="1.5.8"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-if [ "$POSTGIS_VERSION" == "2.0" ]; then 
-	RELEASE="2.0.7"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-if [ "$POSTGIS_VERSION" == "2.1" ]; then 
-	sudo apt-get install -y -qq libpoppler-dev libarmadillo-dev libepsilon-dev liblzma-dev libxml2-dev
-	RELEASE="2.1.7"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-# Build and compile
-cd postgis-*
-./autogen.sh
-./configure 
-make
-sudo make install
-sudo ldconfig
-
-# Build extension for PostGIS > 2.0
-if [ "$POSTGIS_VERSION" != "1.5" ]; then 
-	cd extensions && make && sudo make install
-fi
-
-# ------------------------------------------------------------------------------
-# Restart once
-# ------------------------------------------------------------------------------
-sudo /etc/init.d/postgresql restart
-
-# Return success or failure
-# ------------------------------------------------------------------------------
-exit $ERROR
diff --git a/tools/travis/pgrouting_prepare.sh b/tools/travis/pgrouting_prepare.sh
deleted file mode 100755
index 75a3c0c..0000000
--- a/tools/travis/pgrouting_prepare.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Prepare pgRouting
-# ------------------------------------------------------------------------------
-
-DBUSER="postgres"
-DBNAME="pgrouting"
-
-POSTGRESQL_VERSION="$1"
-POSTGIS_VERSION="$2"
-
-POSTGRESQL_DIRECTORY="/usr/share/postgresql/$POSTGRESQL_VERSION"
-
-echo "POSTGRESQL_VERSION=$POSTGRESQL_VERSION"
-echo "POSTGIS_VERSION=$POSTGIS_VERSION"
-echo "POSTGRESQL_DIRECTORY=/usr/share/postgresql/$POSTGRESQL_VERSION"
-ls $POSTGRESQL_DIRECTORY/extension/postgis--*
-ls /usr/lib/postgresql/$POSTGRESQL_VERSION/lib/postgis-*.so
-
-# exit script on error
-set -e 
-ERROR=0
-
-# Define alias function for psql command
-run_psql () {
-    PGOPTIONS='--client-min-messages=warning' psql -X -q -v ON_ERROR_STOP=1 --pset pager=off "$@"
-    if [ "$?" -ne 0 ]
-    then 
-    	echo "Test query failed: $@"
-    	ERROR=1
-    fi 
-}
-
-# ------------------------------------------------------------------------------
-# Set PostgreSQL users and permissions
-# ------------------------------------------------------------------------------
-sudo cp $TRAVIS_BUILD_DIR/tools/travis/pg_hba.conf `find /etc/postgresql/*/*/pg_hba.conf`
-sudo /etc/init.d/postgresql restart	
-
-# Disable password (better: create new user)
-sudo -u $DBUSER psql -c "ALTER ROLE postgres WITH PASSWORD '';"
-
-exit $ERROR
-
diff --git a/tools/travis/postGIS_install.sh b/tools/travis/postGIS_install.sh
deleted file mode 100755
index 750fe09..0000000
--- a/tools/travis/postGIS_install.sh
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Travis CI scripts 
-# Copyright(c) pgRouting Contributors
-#
-# Install pgRouting prerequesits
-# ------------------------------------------------------------------------------
-
-#POSTGRESQL_VERSION="$1"
-POSTGIS_VERSION="$1"
-
-# exit script on error
-set -e 
-ERROR=0
-
-# ------------------------------------------------------------------------------
-# Remove PostgreSQL and all its files
-# ------------------------------------------------------------------------------
-#sudo service postgresql stop
-#sudo apt-get remove postgresql libpq-dev libpq5 postgresql-client-common postgresql-common -qq --purge -y 
-#sudo rm -rf /var/lib/postgresql
-
-# Add PPA's'
-# ------------------------------------------------------------------------------
-#sudo apt-add-repository -y ppa:georepublic/pgrouting-travis
-
-#if [ "$POSTGIS_VERSION" == "2.0" ] || [ "$POSTGIS_VERSION" == "2.1" ]; then 
-
-# add postGIS PPA
-	sudo apt-add-repository -y ppa:ubuntugis/ppa
-#fi
-
-# Add PostgreSQL Apt repository
-# UPDATE: seems to be already available in Travis
-# ------------------------------------------------------------------------------
-# echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > pgdg.list
-# sudo mv pgdg.list /etc/apt/sources.list.d/
-# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-sudo apt-get update -qq
-
-# ------------------------------------------------------------------------------
-# Install PostgreSQL (always install from PostgreSQL Apt repository)
-# ------------------------------------------------------------------------------
-#sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" install -y -qq postgresql-$POSTGRESQL_VERSION postgresql-contrib-$POSTGRESQL_VERSION postgresql-server-dev-$POSTGRESQL_VERSION
-
-# Install packages
-# ------------------------------------------------------------------------------
-echo "Installing packages ... this may take some time."
-sudo apt-get install -y -qq packaging-dev cmake checkinstall libcgal-dev libboost-graph-dev libboost-thread-dev libxml2-dev libproj-dev libjson0-dev xsltproc docbook-xsl docbook-mathml libgeos-dev libgdal1-dev 
-
-#if [ "$POSTGIS_VERSION" == "1.5" ]; then 
-#	RELEASE="1.5.8"
-#	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-#fi
-
-if [ "$POSTGIS_VERSION" == "2.0" ]; then 
-	RELEASE="2.0.7"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-if [ "$POSTGIS_VERSION" == "2.1" ]; then 
-	sudo apt-get install -y -qq libpoppler-dev libarmadillo-dev libepsilon-dev liblzma-dev libxml2-dev
-	RELEASE="2.1.7"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-if [ "$POSTGIS_VERSION" == "2.2" ]; then 
-	sudo apt-get install -y -qq libpoppler-dev libarmadillo-dev libepsilon-dev liblzma-dev libxml2-dev
-	RELEASE="2.2.1"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-# Build and compile
-cd postgis-*
-./autogen.sh
-./configure 
-make
-sudo make install
-sudo ldconfig
-
-# Build extension for PostGIS > 2.0
-#if [ "$POSTGIS_VERSION" != "1.5" ]; then 
-#	cd extensions && make && sudo make install
-#fi
-
-# ------------------------------------------------------------------------------
-# Restart once
-# ------------------------------------------------------------------------------
-sudo /etc/init.d/postgresql restart
-
-# Return success or failure
-# ------------------------------------------------------------------------------
-exit $ERROR
diff --git a/tools/travis/test-documentation.sh b/tools/travis/test-documentation.sh
index 22ca023..c4d48b8 100755
--- a/tools/travis/test-documentation.sh
+++ b/tools/travis/test-documentation.sh
@@ -8,15 +8,10 @@
 
 set -e
 
-OS="$(lsb_release -c -s)"
-
-if [[ "$OS" != "trusty" ]] ; then
-    exit 0
-fi
-
-
 #testing doxygen only on trusty
 
+echo "generating users documentation"
 make doc
+echo "generating developers documentation"
 make doxy
 
diff --git a/tools/vagrant/Readme.md b/tools/vagrant/Readme.md
deleted file mode 100644
index 2363ee2..0000000
--- a/tools/vagrant/Readme.md
+++ /dev/null
@@ -1,54 +0,0 @@
-
-Vagrant - Virtualized Development for pgRouting
-
-
-1. Install
-
-Just download and install a binary package from the [Vagrant website](http://docs.vagrantup.com/v2/installation/)
-
-For example on Debian squeeze 32bit system:
-
-```
-mkdir work
-cd work
-wget -N http://files.vagrantup.com/packages/7e400d00a3c5a0fdf2809c8b5001a035415a607b/vagrant_1.2.2_i686.deb
-sudo dpkg -i vagrant_1.2.2_i686.deb
-sudo apt-get install virtualbox
-vagrant box add precise32 http://files.vagrantup.com/precise32.box
-cd /path/to/pgrouting
-```
-
-2. Run 
-
-Start the virtual machine:
-
-```
-vagrant up
-```
-
-or if you are using precise32
-
-```
-BOX=precise32 vagrant up
-```
-
-Then login with (Using ssh agent forwarding):
-
-```
-vagrant ssh
-```
-
-Move to shared directory:
-
-```
-cd /vagrant
-```
-
-
-23 Build pgRouting
-
-```
-tools/vagrant/build.sh
-```
-
-Read more about Vagrant in their [official documentation](http://docs.vagrantup.com).
diff --git a/tools/vagrant/bootstrap.sh b/tools/vagrant/bootstrap.sh
deleted file mode 100755
index 2d24dd2..0000000
--- a/tools/vagrant/bootstrap.sh
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Vagrant - Virtualized Development 
-# Copyright(c) pgRouting Contributors
-#
-# Virtual environment bootstrap script
-# ------------------------------------------------------------------------------
-
-# set -e # Exit script immediately on first error.
-# set -x # Print commands and their arguments as they are executed.
-
-# Abort provisioning if pgRouting development environment already setup.
-# ------------------------------------------------------------------------------
-which cmake >/dev/null &&
-{ echo "pgRouting development environment already setup."; exit 0; }
-
-# Run provisioning
-# ------------------------------------------------------------------------------
-POSTGRESQL_VERSION="$1"
-POSTGIS_VERSION="$2"
-
-echo "PostgreSQL version: $POSTGRESQL_VERSION"
-echo "PostGIS version: $POSTGIS_VERSION"
-
-# Enable PPA support
-# ------------------------------------------------------------------------------
-apt-get update -qq
-apt-get install -y -qq python-software-properties vim
-
-# Add PPA's'
-# ------------------------------------------------------------------------------
-apt-add-repository -y ppa:georepublic/pgrouting-travis
-
-if [ "$POSTGIS_VERSION" == "2.0" ] || [ "$POSTGIS_VERSION" == "2.1" ]; then 
-	apt-add-repository -y ppa:ubuntugis/ppa
-fi
-
-# Add PostgreSQL Apt repository
-# ------------------------------------------------------------------------------
-echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > pgdg.list
-sudo mv pgdg.list /etc/apt/sources.list.d/
-wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-sudo apt-get update -qq
-
-# Install packages
-# ------------------------------------------------------------------------------
-echo "Installing packages ... this may take some time."
-apt-get install -y -qq packaging-dev checkinstall libcgal-dev libboost-graph-dev libboost-thread-dev postgresql-$POSTGRESQL_VERSION postgresql-contrib-$POSTGRESQL_VERSION postgresql-server-dev-$POSTGRESQL_VERSION libxml2-dev libproj-dev libjson0-dev xsltproc docbook-xsl docbook-mathml libgeos-dev libgdal1-dev texlive texlive-latex-extra
-
-# ------------------------------------------------------------------------------
-# Manage localization with Transifex
-# https://www.transifex.com/projects/p/pgrouting/ 
-# http://sphinx.readthedocs.org/en/latest/intl.html
-# ------------------------------------------------------------------------------
-apt-get install python-pip python-dev
-pip install sphinx transifex-client sphinx-intl
-
-# ------------------------------------------------------------------------------
-# Install PostGIS (always build from source)
-# ------------------------------------------------------------------------------
-
-if [ "$POSTGIS_VERSION" == "1.5" ]; then 
-	RELEASE="1.5.8"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-if [ "$POSTGIS_VERSION" == "2.0" ]; then 
-	RELEASE="2.0.4"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-if [ "$POSTGIS_VERSION" == "2.1" ]; then 
-	sudo apt-get install -y -qq libpoppler-dev libarmadillo-dev libepsilon-dev liblzma-dev libxml2-dev
-	RELEASE="2.1.1"
-	wget --quiet -O - http://download.osgeo.org/postgis/source/postgis-${RELEASE}.tar.gz | tar xzf -
-fi
-
-# Build and compile
-cd postgis-*
-./autogen.sh
-./configure && make && make install
-ldconfig
-
-# Build extension for PostGIS > 2.0
-if [ "$POSTGIS_VERSION" != "1.5" ]; then 
-	cd extensions
-	make
-	make install
-	ldconfig
-fi
-
-# ------------------------------------------------------------------------------
-# Restart once
-# ------------------------------------------------------------------------------
-/etc/init.d/postgresql restart
diff --git a/tools/vagrant/build.sh b/tools/vagrant/build.sh
deleted file mode 100755
index 7a4ac6f..0000000
--- a/tools/vagrant/build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Vagrant - Virtualized Development 
-# Copyright(c) pgRouting Contributors
-#
-# Build pgRouting
-# ------------------------------------------------------------------------------
-
-set -e # Exit script immediately on first error.
-#set -x # Print commands and their arguments as they are executed.
-
-cd /vagrant
-rm -Rf build 
-cmake -H. -Bbuild -DWITH_DD=ON 
-cd build 
-make 
-cd ..
-
diff --git a/tools/vagrant/install.sh b/tools/vagrant/install.sh
deleted file mode 100755
index cfe421a..0000000
--- a/tools/vagrant/install.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Vagrant - Virtualized Development 
-# Copyright(c) pgRouting Contributors
-#
-# Install pgRouting
-# ------------------------------------------------------------------------------
-
-set -e # Exit script immediately on first error.
-#set -x # Print commands and their arguments as they are executed.
-
-sudo dpkg -r pgrouting 
-cd build 
-sudo checkinstall -y --nodoc --pkgversion=2.0.0 --pkgname=pgrouting 
-cd ..
-
diff --git a/tools/vagrant/packaging.sh b/tools/vagrant/packaging.sh
deleted file mode 100755
index 419de7c..0000000
--- a/tools/vagrant/packaging.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Vagrant - Virtualized Development 
-# Copyright(c) pgRouting Contributors
-#
-# Prepare packaging (sample)
-# ------------------------------------------------------------------------------
-
-echo "DEBEMAIL=daniel at georepublic.de" > ~/.bash_aliases
-echo "DEBFULLNAME='Daniel Kastl (Georepublic)'" >> ~/.bash_aliases
-
-git config --global user.name "Daniel Kastl"
-git config --global user.email "daniel at georepublic.de"
-git config --global core.editor vim
-git config --global color.ui true
diff --git a/tools/vagrant/packaging.sh.sample b/tools/vagrant/packaging.sh.sample
deleted file mode 100755
index 0ebdf38..0000000
--- a/tools/vagrant/packaging.sh.sample
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# Vagrant - Virtualized Development 
-# Copyright(c) pgRouting Contributors
-#
-# Prepare packaging (sample)
-# ------------------------------------------------------------------------------
-
-echo "DEBEMAIL=mail at example.com" > ~/.bash_aliases
-echo "DEBFULLNAME='First Last'" >> ~/.bash_aliases
-
-git config --global user.name "First Last"
-git config --global user.email "mail at example.com"
-git config --global core.editor vim
-git config --global color.ui true
diff --git a/tools/winnie/build_pgrouting.sh b/tools/winnie/build_pgrouting.sh
index b74a9a1..837c269 100644
--- a/tools/winnie/build_pgrouting.sh
+++ b/tools/winnie/build_pgrouting.sh
@@ -107,12 +107,23 @@ rm -rf build${PGROUTING_VER}w${OS_BUILD}${GCC_TYPE}
 mkdir build${PGROUTING_VER}w${OS_BUILD}${GCC_TYPE}
 cd build${PGROUTING_VER}w${OS_BUILD}${GCC_TYPE}
 
-cmake -G "MSYS Makefiles" -DCMAKE_VERBOSE_MAKEFILE=ON -DBOOST_ROOT:PATH=${BOOSTROOT_PATH} -DCGAL_ROOT:PATH=${CGAL_PATH} -DGMP_ROOT:PATH=${PROJECTS}/CGAL/rel-gmp-${GMP_VER}w${OS_BUILD}${GCC_TYPE} -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_MULTITHREADED=ON -DCMAKE_CXX_FLAGS="-I${PROJECTS}/CGAL/rel-gmp-${GMP_VER}w${OS_BUILD}${GCC_TYPE}/include -I${PROJECTS}/CGAL/rel-mpfr-${MPFR_VER}w${OS_BUILD}${GCC_TYPE}/include"  ../branches/${PGROUTING_VER}
+cmake -G "MSYS Makefiles" -DCMAKE_VERBOSE_MAKEFILE=ON \
+ -DBOOST_ROOT:PATH=${BOOSTROOT_PATH} \
+ -DCGAL_ROOT:PATH=${CGAL_PATH} \
+ -DGMP_ROOT:PATH=${PROJECTS}/CGAL/rel-gmp-${GMP_VER}w${OS_BUILD}${GCC_TYPE} \
+ -DBoost_USE_STATIC_LIBS=ON \
+ -DBoost_USE_MULTITHREADED=ON \
+ -DCMAKE_CXX_FLAGS="-I${PROJECTS}/CGAL/rel-gmp-${GMP_VER}w${OS_BUILD}${GCC_TYPE}/include \
+ -I${PROJECTS}/CGAL/rel-mpfr-${MPFR_VER}w${OS_BUILD}${GCC_TYPE}/include" \
+ -DCMAKE_BUILD_TYPE=Release \
+ ../branches/${PGROUTING_VER}
 
 #first delete old pgrouting files from installed folder before we reinstall
 
+echo "Current contents of PGPATH ${PGPATH}"
 ls ${PGPATH}/lib/libpgrouting*
 ls ${PGPATH}/share/extension/pgrouting*
+echo "Current contents of PGPATHEDB ${PGPATHEDB}"
 ls ${PGPATHEDB}/lib/libpgrouting*
 ls ${PGPATHEDB}/share/extension/pgrouting*
 
@@ -121,8 +132,10 @@ rm ${PGPATH}/share/extension/pgrouting*
 rm ${PGPATHEDB}/lib/libpgrouting*
 rm ${PGPATHEDB}/share/extension/pgrouting*
 
+echo "After removing in PGPATH ${PGPATH}"
 ls ${PGPATH}/lib/libpgrouting*
 ls ${PGPATH}/share/extension/pgrouting*
+echo "After removing in PGPATHEDB ${PGPATHEDB}"
 ls ${PGPATHEDB}/lib/libpgrouting*
 ls ${PGPATHEDB}/share/extension/pgrouting*
 
@@ -130,12 +143,15 @@ make
 make install
 
 #we need uninstall and reinstall copy to VC++ EDB instance if we want to test on standard Windows installed versions
+#cp *.dll ${PGPATHEDB}/lib/  #TODO remove this once we fix so the .dlls are created in lib folder
 cp lib/*.dll ${PGPATHEDB}/lib/
 cp lib/*.sql ${PGPATHEDB}/share/extension/
 cp lib/*.control ${PGPATHEDB}/share/extension/
 
+echo "After copy in PGPATH ${PGPATH}"
 ls ${PGPATH}/lib/libpgrouting*
 ls ${PGPATH}/share/extension/pgrouting*
+echo "After copyin PGPATHEDB ${PGPATHEDB}"
 ls ${PGPATHEDB}/lib/libpgrouting*
 ls ${PGPATHEDB}/share/extension/pgrouting*
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pgrouting.git



More information about the Pkg-grass-devel mailing list