diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index 3e322ea4..c73e7ba1 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -58,6 +58,11 @@ set(MUJOCO_DEP_VERSION_benchmark CACHE STRING "Version of `benchmark` to be fetched." ) +set(MUJOCO_DEP_VERSION_sdflib + 492847fa81e46653114da48e8886730ccefed377 + CACHE STRING "Version of `openVDB` to be fetched." +) + mark_as_advanced(MUJOCO_DEP_VERSION_lodepng) mark_as_advanced(MUJOCO_DEP_VERSION_MarchingCubeCpp) mark_as_advanced(MUJOCO_DEP_VERSION_tinyxml2) @@ -68,6 +73,7 @@ mark_as_advanced(MUJOCO_DEP_VERSION_Eigen3) mark_as_advanced(MUJOCO_DEP_VERSION_abseil) mark_as_advanced(MUJOCO_DEP_VERSION_gtest) mark_as_advanced(MUJOCO_DEP_VERSION_benchmark) +mark_as_advanced(MUJOCO_DEP_VERSION_sdflib) include(FetchContent) include(FindOrFetch) @@ -178,6 +184,26 @@ findorfetch( EXCLUDE_FROM_ALL ) +findorfetch( + USE_SYSTEM_PACKAGE + OFF + PACKAGE_NAME + sdflib + LIBRARY_NAME + sdflib + GIT_REPO + https://github.com/UPC-ViRVIG/SdfLib.git + GIT_TAG + ${MUJOCO_DEP_VERSION_sdflib} + PATCH_COMMAND + git apply --reject --whitespace=fix ${CMAKE_SOURCE_DIR}/cmake/sdflib-optional-dependencies.patch + TARGETS + SdfLib + EXCLUDE_FROM_ALL +) +target_compile_options(SdfLib PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS}) +target_link_options(SdfLib PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS}) + set(ENABLE_DOUBLE_PRECISION ON) set(CCD_HIDE_ALL_SYMBOLS ON) findorfetch( diff --git a/cmake/sdflib-optional-dependencies.patch b/cmake/sdflib-optional-dependencies.patch new file mode 100644 index 00000000..2ec2ed04 --- /dev/null +++ b/cmake/sdflib-optional-dependencies.patch @@ -0,0 +1,544 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 20551cf..9145032 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -70,14 +70,21 @@ add_custom_target(copyShaders ALL SOURCES ${SHADER_FILES}) + # Add dependencies + add_subdirectory(libs) + ++if(SDFLIB_USE_ENOKI) ++ target_link_libraries(${PROJECT_NAME} PUBLIC enoki) ++ target_link_libraries(${PROJECT_NAME} PUBLIC fcpw) ++ target_compile_definitions(${PROJECT_NAME} PUBLIC -DENOKI_AVAILABLE) ++endif() ++ ++if(SDFLIB_USE_ASSIMP) ++ target_link_libraries(${PROJECT_NAME} PUBLIC assimp) ++ target_compile_definitions(${PROJECT_NAME} PUBLIC -DASSIMP_AVAILABLE) ++endif() ++ + target_link_libraries(${PROJECT_NAME} PUBLIC glm) +-target_link_libraries(${PROJECT_NAME} PUBLIC assimp) + target_link_libraries(${PROJECT_NAME} PUBLIC args) + target_link_libraries(${PROJECT_NAME} PUBLIC spdlog) + target_link_libraries(${PROJECT_NAME} PUBLIC cereal) +-target_link_libraries(${PROJECT_NAME} PUBLIC enoki) +-target_link_libraries(${PROJECT_NAME} PUBLIC eigen) +-target_link_libraries(${PROJECT_NAME} PUBLIC fcpw) + target_link_libraries(${PROJECT_NAME} PUBLIC stb_image) + target_link_libraries(${PROJECT_NAME} PUBLIC icg) + +@@ -86,17 +93,22 @@ if(CMAKE_CXX_COMPILER_ID MATCHES GNU) + endif() + + # Add openMP +-if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +- message("Enabling openmp llvm extension") +- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp:llvm") +-else() +- find_package(OpenMP) +- if(NOT OpenMP_CXX_FOUND) +- message(FATAL_ERROR "OpenMP not found") +- endif() +- message("OpenMP version ${OpenMP_CXX_VERSION}") +- target_link_libraries(${PROJECT_NAME} PUBLIC OpenMP::OpenMP_CXX) +-endif() ++if(SDFLIB_USE_OPENMP) ++ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") ++ message("Enabling openmp llvm extension") ++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp:llvm") ++ target_compile_definitions(${PROJECT_NAME} PUBLIC -DOPENMP_AVAILABLE) ++ else() ++ find_package(OpenMP) ++ if(OpenMP_CXX_FOUND) ++ message("OpenMP version ${OpenMP_CXX_VERSION}") ++ target_link_libraries(${PROJECT_NAME} PUBLIC OpenMP::OpenMP_CXX) ++ target_compile_definitions(${PROJECT_NAME} PUBLIC -DOPENMP_AVAILABLE) ++ else() ++ message("Disabling openmp") ++ endif() ++ endif() ++endif() + + # Add executable + if (NOT UNIX) +@@ -160,6 +172,7 @@ if(SDFLIB_BUILD_DEBUG_APPS) + add_executable(GJKtest src/tools/GJKtest/main.cpp) + target_link_libraries(GJKtest PUBLIC ${PROJECT_NAME}) + ++ target_link_libraries(${PROJECT_NAME} PUBLIC eigen) + add_executable(CalculateInterpolationParameters src/tools/CalculateInterpolationParameters/main.cpp) + target_link_libraries(CalculateInterpolationParameters PUBLIC ${PROJECT_NAME}) + +diff --git a/include/SdfLib/ExactOctreeSdf.h b/include/SdfLib/ExactOctreeSdf.h +index 79ad82d..06dd7ac 100644 +--- a/include/SdfLib/ExactOctreeSdf.h ++++ b/include/SdfLib/ExactOctreeSdf.h +@@ -214,6 +214,8 @@ private: + }; + } + ++#ifdef OPENMP_AVAILABLE + #include "ExactOctreeSdfDepthFirst.h" ++#endif + + #endif +\ No newline at end of file +diff --git a/include/SdfLib/InterpolationMethods.h b/include/SdfLib/InterpolationMethods.h +index 077dfb2..f707d5b 100644 +--- a/include/SdfLib/InterpolationMethods.h ++++ b/include/SdfLib/InterpolationMethods.h +@@ -4,7 +4,10 @@ + #include + + #include "utils/TriangleUtils.h" ++ ++#ifdef ENOKI_AVAILABLE + #include "enoki/array.h" ++#endif + + namespace sdflib + { +@@ -236,15 +239,6 @@ struct TriLinearInterpolation + // outCoeff[63] = 8 * inValues[0][0] + 4 * inValues[0][1] * nodeSize + 4 * inValues[0][2] * nodeSize + 4 * inValues[0][3] * nodeSize + -8 * inValues[1][0] + 4 * inValues[1][1] * nodeSize + -4 * inValues[1][2] * nodeSize + -4 * inValues[1][3] * nodeSize + -8 * inValues[2][0] + -4 * inValues[2][1] * nodeSize + 4 * inValues[2][2] * nodeSize + -4 * inValues[2][3] * nodeSize + 8 * inValues[3][0] + -4 * inValues[3][1] * nodeSize + -4 * inValues[3][2] * nodeSize + 4 * inValues[3][3] * nodeSize + -8 * inValues[4][0] + -4 * inValues[4][1] * nodeSize + -4 * inValues[4][2] * nodeSize + 4 * inValues[4][3] * nodeSize + 8 * inValues[5][0] + -4 * inValues[5][1] * nodeSize + 4 * inValues[5][2] * nodeSize + -4 * inValues[5][3] * nodeSize + 8 * inValues[6][0] + 4 * inValues[6][1] * nodeSize + -4 * inValues[6][2] * nodeSize + -4 * inValues[6][3] * nodeSize + -8 * inValues[7][0] + 4 * inValues[7][1] * nodeSize + 4 * inValues[7][2] * nodeSize + 4 * inValues[7][3] * nodeSize + 0.0f; + // } + +-// inline static float interpolateValue(const std::array& values, glm::vec3 fracPart) +-// { +-// return 0.0f +-// + values[0] + values[1] * fracPart[0] + values[2] * fracPart[0] * fracPart[0] + values[3] * fracPart[0] * fracPart[0] * fracPart[0] + values[4] * fracPart[1] + values[5] * fracPart[0] * fracPart[1] + values[6] * fracPart[0] * fracPart[0] * fracPart[1] + values[7] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] + values[8] * fracPart[1] * fracPart[1] + values[9] * fracPart[0] * fracPart[1] * fracPart[1] + values[10] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] + values[11] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] + values[12] * fracPart[1] * fracPart[1] * fracPart[1] + values[13] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] + values[14] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] + values[15] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] +-// + values[16] * fracPart[2] + values[17] * fracPart[0] * fracPart[2] + values[18] * fracPart[0] * fracPart[0] * fracPart[2] + values[19] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[2] + values[20] * fracPart[1] * fracPart[2] + values[21] * fracPart[0] * fracPart[1] * fracPart[2] + values[22] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] + values[23] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] + values[24] * fracPart[1] * fracPart[1] * fracPart[2] + values[25] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] + values[26] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] + values[27] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] + values[28] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] + values[29] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] + values[30] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] + values[31] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] +-// + values[32] * fracPart[2] * fracPart[2] + values[33] * fracPart[0] * fracPart[2] * fracPart[2] + values[34] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] + values[35] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] + values[36] * fracPart[1] * fracPart[2] * fracPart[2] + values[37] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] + values[38] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] + values[39] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] + values[40] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[41] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[42] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[43] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[44] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[45] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[46] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[47] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] +-// + values[48] * fracPart[2] * fracPart[2] * fracPart[2] + values[49] * fracPart[0] * fracPart[2] * fracPart[2] * fracPart[2] + values[50] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] * fracPart[2] + values[51] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] * fracPart[2] + values[52] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[53] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[54] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[55] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[56] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[57] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[58] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[59] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[60] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[61] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[62] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[63] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2]; +-// } +- + // inline static void interpolateVertexValues(const std::array& values, glm::vec3 fracPart, float nodeSize, std::array& outValues) + // { + // outValues[0] = 0.0f +@@ -383,6 +377,7 @@ struct TriCubicInterpolation + outCoeff[63] = 8 * inValues[0][0] + 4 * inValues[0][1] + 4 * inValues[0][2] + 4 * inValues[0][3] + 2 * inValues[0][4] + 2 * inValues[0][5] + 2 * inValues[0][6] + 1 * inValues[0][7] + -8 * inValues[1][0] + 4 * inValues[1][1] + -4 * inValues[1][2] + -4 * inValues[1][3] + 2 * inValues[1][4] + 2 * inValues[1][5] + -2 * inValues[1][6] + 1 * inValues[1][7] + -8 * inValues[2][0] + -4 * inValues[2][1] + 4 * inValues[2][2] + -4 * inValues[2][3] + 2 * inValues[2][4] + -2 * inValues[2][5] + 2 * inValues[2][6] + 1 * inValues[2][7] + 8 * inValues[3][0] + -4 * inValues[3][1] + -4 * inValues[3][2] + 4 * inValues[3][3] + 2 * inValues[3][4] + -2 * inValues[3][5] + -2 * inValues[3][6] + 1 * inValues[3][7] + -8 * inValues[4][0] + -4 * inValues[4][1] + -4 * inValues[4][2] + 4 * inValues[4][3] + -2 * inValues[4][4] + 2 * inValues[4][5] + 2 * inValues[4][6] + 1 * inValues[4][7] + 8 * inValues[5][0] + -4 * inValues[5][1] + 4 * inValues[5][2] + -4 * inValues[5][3] + -2 * inValues[5][4] + 2 * inValues[5][5] + -2 * inValues[5][6] + 1 * inValues[5][7] + 8 * inValues[6][0] + 4 * inValues[6][1] + -4 * inValues[6][2] + -4 * inValues[6][3] + -2 * inValues[6][4] + -2 * inValues[6][5] + 2 * inValues[6][6] + 1 * inValues[6][7] + -8 * inValues[7][0] + 4 * inValues[7][1] + 4 * inValues[7][2] + 4 * inValues[7][3] + -2 * inValues[7][4] + -2 * inValues[7][5] + -2 * inValues[7][6] + 1 * inValues[7][7]; + } + ++#ifdef ENOKI_AVAILABLE + using vec4 = enoki::Array; + + inline static float interpolateValue(const std::array& values, glm::vec3 fracPart) +@@ -433,6 +428,16 @@ struct TriCubicInterpolation + + return sum; + } ++#else ++ inline static float interpolateValue(const std::array& values, glm::vec3 fracPart) ++ { ++ return 0.0f ++ + values[0] + values[1] * fracPart[0] + values[2] * fracPart[0] * fracPart[0] + values[3] * fracPart[0] * fracPart[0] * fracPart[0] + values[4] * fracPart[1] + values[5] * fracPart[0] * fracPart[1] + values[6] * fracPart[0] * fracPart[0] * fracPart[1] + values[7] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] + values[8] * fracPart[1] * fracPart[1] + values[9] * fracPart[0] * fracPart[1] * fracPart[1] + values[10] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] + values[11] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] + values[12] * fracPart[1] * fracPart[1] * fracPart[1] + values[13] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] + values[14] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] + values[15] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] ++ + values[16] * fracPart[2] + values[17] * fracPart[0] * fracPart[2] + values[18] * fracPart[0] * fracPart[0] * fracPart[2] + values[19] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[2] + values[20] * fracPart[1] * fracPart[2] + values[21] * fracPart[0] * fracPart[1] * fracPart[2] + values[22] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] + values[23] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] + values[24] * fracPart[1] * fracPart[1] * fracPart[2] + values[25] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] + values[26] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] + values[27] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] + values[28] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] + values[29] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] + values[30] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] + values[31] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] ++ + values[32] * fracPart[2] * fracPart[2] + values[33] * fracPart[0] * fracPart[2] * fracPart[2] + values[34] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] + values[35] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] + values[36] * fracPart[1] * fracPart[2] * fracPart[2] + values[37] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] + values[38] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] + values[39] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] + values[40] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[41] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[42] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[43] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[44] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[45] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[46] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] + values[47] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] ++ + values[48] * fracPart[2] * fracPart[2] * fracPart[2] + values[49] * fracPart[0] * fracPart[2] * fracPart[2] * fracPart[2] + values[50] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] * fracPart[2] + values[51] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[2] * fracPart[2] * fracPart[2] + values[52] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[53] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[54] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[55] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[56] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[57] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[58] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[59] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[60] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[61] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[62] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2] + values[63] * fracPart[0] * fracPart[0] * fracPart[0] * fracPart[1] * fracPart[1] * fracPart[1] * fracPart[2] * fracPart[2] * fracPart[2]; ++ } ++#endif + + inline static glm::vec3 interpolateGradient(const std::array& values, glm::vec3 fracPart) + { +@@ -493,4 +498,4 @@ struct TriCubicInterpolation + }; + } + +-#endif +\ No newline at end of file ++#endif +diff --git a/include/SdfLib/TrianglesInfluence.h b/include/SdfLib/TrianglesInfluence.h +index 3f3d33f..fc2ca52 100644 +--- a/include/SdfLib/TrianglesInfluence.h ++++ b/include/SdfLib/TrianglesInfluence.h +@@ -1,7 +1,10 @@ + #ifndef TRIANGLES_INFLUENCE_H + #define TRIANGLES_INFLUENCE_H + ++#ifdef ENOKI_AVAILABLE + #include ++#endif ++ + #include "utils/Mesh.h" + #include "utils/TriangleUtils.h" + #include "OctreeSdfUtils.h" +@@ -1008,6 +1011,7 @@ struct VHQueries + } + }; + ++#ifdef ENOKI_AVAILABLE + template + struct FCPWQueries + { +@@ -1118,6 +1122,8 @@ struct FCPWQueries + { + } + }; ++#endif ++ + } + +-#endif +\ No newline at end of file ++#endif +diff --git a/include/SdfLib/utils/Mesh.h b/include/SdfLib/utils/Mesh.h +index 28d5486..7d21e44 100644 +--- a/include/SdfLib/utils/Mesh.h ++++ b/include/SdfLib/utils/Mesh.h +@@ -4,9 +4,11 @@ + #include + #include + #include ++#ifdef ASSIMP_AVAILABLE + #include + #include + #include ++#endif + #include "SdfLib/utils/UsefullSerializations.h" + + namespace sdflib +@@ -43,6 +45,23 @@ struct BoundingBox + return glm::length(glm::max(q,glm::vec3(0.0f))) + glm::min(glm::max(q.x, glm::max(q.y,q.z)),0.0f); + } + ++ float getDistance(glm::vec3 point, glm::vec3& outGradient) const ++ { ++ glm::vec3 a = glm::abs(point) - getSize(); ++ int k = a[0] > a[1] ? 0 : 1; ++ int l = a[2] > a[k] ? 2 : k; ++ if (a[l] < 0) { ++ outGradient[l] = point[l] / glm::abs(point[l]); ++ } else { ++ glm::vec3 b = glm::max(a, glm::vec3(0.0f)); ++ float c = glm::length(b); ++ outGradient[0] = a[0] > 0 ? b[0] / c * point[0] / glm::abs(point[0]) : 0; ++ outGradient[1] = a[1] > 0 ? b[1] / c * point[1] / glm::abs(point[1]) : 0; ++ outGradient[2] = a[2] > 0 ? b[2] / c * point[2] / glm::abs(point[2]) : 0; ++ } ++ return getDistance(point); ++ } ++ + template + void serialize(Archive & archive) + { +@@ -54,8 +73,10 @@ class Mesh + { + public: + Mesh() {} ++#ifdef ASSIMP_AVAILABLE + Mesh(std::string filePath); + Mesh(const aiMesh* mesh); ++#endif + Mesh(glm::vec3* vertices, uint32_t numVertices, + uint32_t* indices, uint32_t numIndices); + +@@ -74,7 +95,9 @@ public: + void computeNormals(); + void applyTransform(glm::mat4 trans); + private: ++#ifdef ASSIMP_AVAILABLE + void initMesh(const aiMesh* mesh); ++#endif + + std::vector mVertices; + std::vector mIndices; +@@ -83,4 +106,4 @@ private: + }; + } + +-#endif +\ No newline at end of file ++#endif +diff --git a/include/SdfLib/utils/TriangleUtils.h b/include/SdfLib/utils/TriangleUtils.h +index 9f930ed..6ee2304 100644 +--- a/include/SdfLib/utils/TriangleUtils.h ++++ b/include/SdfLib/utils/TriangleUtils.h +@@ -2,6 +2,7 @@ + #define TRIANGLE_UTILS_H + + #include ++#include + #include + #include + #include +@@ -401,4 +402,4 @@ namespace TriangleUtils + } + } + +-#endif +\ No newline at end of file ++#endif +diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt +index b48bf39..3f143c8 100644 +--- a/libs/CMakeLists.txt ++++ b/libs/CMakeLists.txt +@@ -14,23 +14,25 @@ if(NOT glm_lib_POPULATED) + endif() + + # assimp +-FetchContent_Declare(assimp_lib +- GIT_REPOSITORY https://github.com/assimp/assimp.git +- GIT_TAG 9519a62dd20799c5493c638d1ef5a6f484e5faf1 # 5.2.5 +-) +- +-if(NOT assimp_lib) +- FetchContent_Populate(assimp_lib) +- +- set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) +- set(BUILD_SHARED_LIBS OFF) +- set(ASSIMP_BUILD_ASSIMP_TOOLS OFF) +- set(ASSIMP_BUILD_TESTS OFF) +- set(ASSIMP_INSTALL OFF) +- set(ASSIMP_INJECT_DEBUG_POSTFIX OFF) +- set(ASSIMP_BUILD_ASSIMP_VIEW OFF) ++if(SDF_USE_ASSIMP) ++ FetchContent_Declare(assimp_lib ++ GIT_REPOSITORY https://github.com/assimp/assimp.git ++ GIT_TAG 9519a62dd20799c5493c638d1ef5a6f484e5faf1 # 5.2.5 ++ ) + +- add_subdirectory(${assimp_lib_SOURCE_DIR} ${assimp_lib_BINARY_DIR}) ++ if(NOT assimp_lib) ++ FetchContent_Populate(assimp_lib) ++ ++ set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) ++ set(BUILD_SHARED_LIBS OFF) ++ set(ASSIMP_BUILD_ASSIMP_TOOLS OFF) ++ set(ASSIMP_BUILD_TESTS OFF) ++ set(ASSIMP_INSTALL OFF) ++ set(ASSIMP_INJECT_DEBUG_POSTFIX OFF) ++ set(ASSIMP_BUILD_ASSIMP_VIEW OFF) ++ ++ add_subdirectory(${assimp_lib_SOURCE_DIR} ${assimp_lib_BINARY_DIR}) ++ endif() + endif() + + # args +@@ -76,43 +78,47 @@ if(NOT cereal_lib_POPULATED) + endif() + + # Enoki +-FetchContent_Declare(enoki_lib +- GIT_REPOSITORY https://github.com/mitsuba-renderer/enoki.git +- GIT_TAG 2a18afa +-) +-FetchContent_GetProperties(enoki_lib) +-if(NOT enoki_lib_POPULATED) +- FetchContent_Populate(enoki_lib) +- add_library(enoki INTERFACE) +- add_subdirectory(${enoki_lib_SOURCE_DIR} ${enoki_lib_BINARY_DIR}) +- target_include_directories(enoki INTERFACE ${enoki_lib_SOURCE_DIR}/include) +-endif() +- +-# eigen +-FetchContent_Declare(eigen_lib +-GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git +-GIT_TAG 46126273552afe13692929523d34006f54c19719 # 3.4 +-) ++if(SDFLIB_USE_ENOKI) ++ FetchContent_Declare(enoki_lib ++ GIT_REPOSITORY https://github.com/mitsuba-renderer/enoki.git ++ GIT_TAG 2a18afa ++ ) ++ FetchContent_GetProperties(enoki_lib) ++ if(NOT enoki_lib_POPULATED) ++ FetchContent_Populate(enoki_lib) ++ add_library(enoki INTERFACE) ++ add_subdirectory(${enoki_lib_SOURCE_DIR} ${enoki_lib_BINARY_DIR}) ++ target_include_directories(enoki INTERFACE ${enoki_lib_SOURCE_DIR}/include) ++ endif() + +-FetchContent_GetProperties(eigen_lib) +-if(NOT eigen_lib_POPULATED) +- FetchContent_Populate(eigen_lib) +- add_library(eigen INTERFACE) +- target_include_directories(eigen INTERFACE ${eigen_lib_SOURCE_DIR}) ++ # FCPW ++ FetchContent_Declare(fcpw_lib ++ GIT_REPOSITORY https://github.com/rohan-sawhney/fcpw.git ++ GIT_TAG dd65ec2 ++ ) ++ ++ FetchContent_GetProperties(fcpw_lib) ++ if(NOT fcpw_lib_POPULATED) ++ FetchContent_Populate(fcpw_lib) ++ add_subdirectory(${fcpw_lib_SOURCE_DIR} ${fcpw_lib_BINARY_DIR}) ++ target_include_directories(fcpw INTERFACE ${fcpw_lib_SOURCE_DIR}) ++ endif() + endif() + +-# FCPW +-FetchContent_Declare(fcpw_lib +- GIT_REPOSITORY https://github.com/rohan-sawhney/fcpw.git +- GIT_TAG dd65ec2 +-) +- +-FetchContent_GetProperties(fcpw_lib) +-if(NOT fcpw_lib_POPULATED) +- FetchContent_Populate(fcpw_lib) +- add_subdirectory(${fcpw_lib_SOURCE_DIR} ${fcpw_lib_BINARY_DIR}) +- target_include_directories(fcpw INTERFACE ${fcpw_lib_SOURCE_DIR}) +-endif() ++# eigen ++if(SDFLIB_BUILD_DEBUG_APPS) ++ FetchContent_Declare(eigen_lib ++ GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git ++ GIT_TAG 46126273552afe13692929523d34006f54c19719 # 3.4 ++ ) ++ ++ FetchContent_GetProperties(eigen_lib) ++ if(NOT eigen_lib_POPULATED) ++ FetchContent_Populate(eigen_lib) ++ add_library(eigen INTERFACE) ++ target_include_directories(eigen INTERFACE ${eigen_lib_SOURCE_DIR}) ++ endif() ++ endif() + + # stb + add_library(stb_image INTERFACE) +diff --git a/src/sdf/OctreeSdf.cpp b/src/sdf/OctreeSdf.cpp +index ef8ed4d..0e1eb97 100644 +--- a/src/sdf/OctreeSdf.cpp ++++ b/src/sdf/OctreeSdf.cpp +@@ -6,7 +6,9 @@ + #include "SdfLib/InterpolationMethods.h" + #include "sdf/OctreeSdfDepthFirst.h" + #include "sdf/OctreeSdfBreadthFirst.h" ++#ifdef OPENMP_AVAILABLE + #include "sdf/OctreeSdfBreadthFirstNoDelay.h" ++#endif + #include + #include + +@@ -46,8 +48,11 @@ OctreeSdf::OctreeSdf(const Mesh& mesh, BoundingBox box, + break; + case OctreeSdf::InitAlgorithm::CONTINUITY: + //initOctreeWithContinuity>(mesh, startDepth, depth, terminationThreshold, terminationRule); +- // initOctreeWithContinuity>(mesh, startDepth, depth, terminationThreshold, terminationRule); ++#ifdef OPENMP_AVAILABLE + initOctreeWithContinuityNoDelay>(mesh, startDepth, depth, terminationThreshold, terminationRule, numThreads); ++#else ++ initOctreeWithContinuity>(mesh, startDepth, depth, terminationThreshold, terminationRule); ++#endif + break; + // case OctreeSdf::InitAlgorithm::GPU_IMPLEMENTATION: + // Timer time; +@@ -78,7 +83,7 @@ float OctreeSdf::getDistance(glm::vec3 sample) const + startArrayPos.y < 0 || startArrayPos.y >= mStartGridSize || + startArrayPos.z < 0 || startArrayPos.z >= mStartGridSize) + { +- return mBox.getDistance(sample) + glm::sqrt(3.0f) * mBox.getSize().x; ++ return mBox.getDistance(sample) + mMinBorderValue; + } + + const OctreeNode* currentNode = &mOctreeData[startArrayPos.z * mStartGridXY + startArrayPos.y * mStartGridSize + startArrayPos.x]; +@@ -108,7 +113,7 @@ float OctreeSdf::getDistance(glm::vec3 sample, glm::vec3& outGradient) const + startArrayPos.y < 0 || startArrayPos.y >= mStartGridSize || + startArrayPos.z < 0 || startArrayPos.z >= mStartGridSize) + { +- return mBox.getDistance(sample) + mMinBorderValue; ++ return mBox.getDistance(sample, outGradient) + mMinBorderValue; + } + + const OctreeNode* currentNode = &mOctreeData[startArrayPos.z * mStartGridXY + startArrayPos.y * mStartGridSize + startArrayPos.x]; +@@ -253,4 +258,4 @@ void OctreeSdf::getDepthDensity(std::vector& depthsDensity) + size *= 0.125f; + } + } +-} +\ No newline at end of file ++} +diff --git a/src/sdf/OctreeSdfDepthFirst.h b/src/sdf/OctreeSdfDepthFirst.h +index 53ee4b2..196d191 100644 +--- a/src/sdf/OctreeSdfDepthFirst.h ++++ b/src/sdf/OctreeSdfDepthFirst.h +@@ -7,7 +7,10 @@ + #include "SdfLib/OctreeSdfUtils.h" + #include + #include ++#ifdef OPENMP_AVAILABLE + #include ++#endif ++ + + namespace sdflib + { +@@ -381,7 +384,9 @@ void OctreeSdf::initOctree(const Mesh& mesh, uint32_t startDepth, uint32_t maxDe + }; + + const uint32_t voxlesPerAxis = 1 << startDepth; ++#ifdef OPENMP_AVAILABLE + if(numThreads < 2) ++#endif + { + // Create the grid + mOctreeData.resize(voxlesPerAxis * voxlesPerAxis * voxlesPerAxis); +@@ -402,7 +407,8 @@ void OctreeSdf::initOctree(const Mesh& mesh, uint32_t startDepth, uint32_t maxDe + + mValueRange = mainThread.valueRange; + } +- else ++#ifdef OPENMP_AVAILABLE ++ else + { + std::vector threadsContext(numThreads, mainThread); + +@@ -511,6 +517,7 @@ void OctreeSdf::initOctree(const Mesh& mesh, uint32_t startDepth, uint32_t maxDe + } + #endif + } ++#endif + + #ifdef SDFLIB_PRINT_STATISTICS + SPDLOG_INFO("Used an octree of max depth {}", maxDepth); +@@ -544,4 +551,4 @@ void OctreeSdf::initOctree(const Mesh& mesh, uint32_t startDepth, uint32_t maxDe + } + } + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/utils/Mesh.cpp b/src/utils/Mesh.cpp +index b407d38..6fff5fe 100644 +--- a/src/utils/Mesh.cpp ++++ b/src/utils/Mesh.cpp +@@ -5,6 +5,7 @@ + + namespace sdflib + { ++#ifdef ASSIMP_AVAILABLE + Mesh::Mesh(std::string filePath) + { + Assimp::Importer import; +@@ -28,6 +29,7 @@ Mesh::Mesh(const aiMesh* mesh) + { + initMesh(mesh); + } ++#endif + + Mesh::Mesh(glm::vec3* vertices, uint32_t numVertices, + uint32_t* indices, uint32_t numIndices) +@@ -39,7 +41,7 @@ Mesh::Mesh(glm::vec3* vertices, uint32_t numVertices, + std::memcpy(mIndices.data(), indices, sizeof(uint32_t) * numIndices); + } + +- ++#ifdef ASSIMP_AVAILABLE + void Mesh::initMesh(const aiMesh* mesh) + { + if(!(mesh->mPrimitiveTypes & aiPrimitiveType_TRIANGLE)) +@@ -83,6 +85,7 @@ void Mesh::initMesh(const aiMesh* mesh) + computeNormals(); + } + } ++#endif + + void Mesh::computeBoundingBox() + { +@@ -134,4 +137,4 @@ void Mesh::applyTransform(glm::mat4 trans) + + computeBoundingBox(); + } +-} +\ No newline at end of file ++} diff --git a/doc/APIreference/APIglobals.rst b/doc/APIreference/APIglobals.rst index 9f8fddc5..6bb4726e 100644 --- a/doc/APIreference/APIglobals.rst +++ b/doc/APIreference/APIglobals.rst @@ -450,9 +450,15 @@ shown in the table below. Their names are in the format ``mjKEY_XXX``. They corr - The maximal number of real-valued parameters used to define the impedance of each scalar constraint. Determines the size of all ``mjModel.XXX_solimp`` fields. * - ``mjNSOLVER`` - - 1000 - - The size of the preallocated array ``mjData.solver``. This is used to store diagnostic information about each - iteration of the constraint solver. The actual number of iterations is given by ``mjData.solver_iter``. + - 200 + - The number of iterations where solver statistics can be stored in ``mjData.solver``. This array is used + to store diagnostic information about each iteration of the constraint solver. + The actual number of iterations is given by ``mjData.solver_iter``. + * - ``mjNISLAND`` + - 20 + - The number of islands for which solver statistics can be stored in ``mjData.solver``. This array is + used to store diagnostic information about each iteration of the constraint solver. + The actual number of islands for which the solver was run is given by ``mjData.nsolver_island``. * - ``mjNGROUP`` - 6 - The number of geom, site, joint, tendon and actuator groups whose rendering can be enabled and disabled via diff --git a/doc/APIreference/functions.rst b/doc/APIreference/functions.rst index 6df1f7fa..1f33d81b 100644 --- a/doc/APIreference/functions.rst +++ b/doc/APIreference/functions.rst @@ -3444,7 +3444,7 @@ mju_threadPoolCreate .. mujoco-include:: mju_threadPoolCreate -Creates a thread pool with the specified number of threads running. +Create a thread pool with the specified number of threads running. .. _mju_threadPoolEnqueue: @@ -3453,16 +3453,7 @@ mju_threadPoolEnqueue .. mujoco-include:: mju_threadPoolEnqueue -Enqueues a task in a thread pool. - -.. _mju_taskJoin: - -mju_taskJoin -~~~~~~~~~~~~ - -.. mujoco-include:: mju_taskJoin - -Waits for a task to complete. +Enqueue a task in a thread pool. .. _mju_threadPoolDestroy: @@ -3471,5 +3462,23 @@ mju_threadPoolDestroy .. mujoco-include:: mju_threadPoolDestroy -Destroys a thread pool. +Destroy a thread pool. + +.. _mju_defaultTask: + +mju_defaultTask +~~~~~~~~~~~~~~~ + +.. mujoco-include:: mju_defaultTask + +Initialize an mjTask. + +.. _mju_taskJoin: + +mju_taskJoin +~~~~~~~~~~~~ + +.. mujoco-include:: mju_taskJoin + +Wait for a task to complete. diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index c189757a..fa2d63fe 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -1322,9 +1322,9 @@ also known as terrain map, is a 2D matrix of elevation data. The data can be spe .. _asset-hfield-content_type: -:at:`content_type`: :at-val: `string, optional` +:at:`content_type`: :at-val:`string, optional` If the file attribute is specified, then this sets the - `Media Type `_ (formerly known as MIME types) of the + `Media Type `__ (formerly known as MIME types) of the file to be loaded. Any filename extensions will be overloaded. Currently ``image/png`` and ``image/vnd.mujoco.hfield`` are supported. @@ -1439,15 +1439,16 @@ Positioning and orienting is complicated by the fact that vertex data are often whose origin is not inside the mesh. In contrast, MuJoCo expects the origin of a geom's local frame to coincide with the geometric center of the shape. We resolve this discrepancy by pre-processing the mesh in the compiler, so that it is centered around (0,0,0) and its principal axes of inertia are the coordinate axes. We also save the translation and -rotation offsets needed to achieve such alignment. These offsets are then applied to the referencing geom's position and -orientation; see also :at:`mesh` attribute of :ref:`geom ` below. Fortunately most meshes used in robot -models are designed in a coordinate frame centered at the joint. This makes the corresponding MJCF model intuitive: we -set the body frame at the joint, so that the joint position is (0,0,0) in the body frame, and simply reference the mesh. -Below is an MJCF model fragment of a forearm, containing all the information needed to put the mesh where one would -expect it to be. The body position is specified relative to the parent body, namely the upper arm (not shown). It is -offset by 35 cm which is the typical length of the human upper arm. If the mesh vertex data were not designed in the -above convention, we would have to use the geom position and orientation (or the new refpos, refquat mechanism) to -compensate, but in practice this is rarely needed. +rotation offsets needed to achieve such alignment in :ref:`mjModel.mesh_pos` and +:ref:`mjModel.mesh_quat`. These offsets are then applied to the referencing geom's position and orientation; see +also :at:`mesh` attribute of :ref:`geom ` below. Fortunately most meshes used in robot models are designed in +a coordinate frame centered at the joint. This makes the corresponding MJCF model intuitive: we set the body frame at the +joint, so that the joint position is (0,0,0) in the body frame, and simply reference the mesh. Below is an MJCF model +fragment of a forearm, containing all the information needed to put the mesh where one would expect it to be. The body +position is specified relative to the parent body, namely the upper arm (not shown). It is offset by 35 cm which is the +typical length of the human upper arm. If the mesh vertex data were not designed in the above convention, we would have +to use the geom position and orientation (or the new refpos, refquat mechanism) to compensate, but in practice this is +rarely needed. .. code-block:: xml @@ -3054,6 +3055,13 @@ and the +Y axis points up. Thus the frame position and orientation are the key a Vertical field of view of the camera, expressed in degrees regardless of the global angle setting. The horizontal field of view is computed automatically given the window size and the vertical field of view. +.. _body-camera-resolution: + +:at:`resolution`: :at-val:`int(2), "1 1"` + Resolution of the camera in pixels [width height]. Note that these values are not used for rendering since those + dimensions are determined by the size of the rendering context. This attribute serves as a convenient + location to save the required resolution when creating a context. + .. _body-camera-ipd: :at:`ipd`: :at-val:`real, "0.068"` @@ -5412,7 +5420,6 @@ site frame. The output is a 3D vector. :at:`site`: :at-val:`string, required` The site where the sensor is attached. - .. _sensor-rangefinder: :el-prefix:`sensor/` |-| **rangefinder** (*) @@ -5441,6 +5448,39 @@ excluded; this is because sensor calculations are independent of the visualizer. :at:`site`: :at-val:`string, required` The site where the sensor is attached. +.. _sensor-camprojection: + +:el-prefix:`sensor/` |-| **camprojection** (*) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This element creates a camprojection sensor, which returns the location of a target site, projected onto a camera image +in pixel coordinates. The origin of this system is located at the top-left corner of the first pixel, so a target +which projects exactly onto the corner of the image, will have value (0, 0). Values are not clipped, so targets which +fall outside the camera image will take values above or below the pixel limits. Moreover, points behind the camera +are also projected onto the image, so it is up to the user to filter out such points, if desired. This can be done using +a `framepos` sensor with the camera as reference frame, then a negative/positive value in the +z-coordinate indicates (respectively) a location in the front/back of the camera. + +.. _sensor-camprojection-site: + +:at:`site`: :at-val:`string, required` + The site which is projected on to the camera image. + +.. _sensor-camprojection-camera: + +:at:`camera`: :at-val:`string, required` + The camera used for the projection, its :ref:`resolution` attribute must be positive. + +.. _sensor-camprojection-name: + +.. _sensor-camprojection-noise: + +.. _sensor-camprojection-cutoff: + +.. _sensor-camprojection-user: + +:at:`name`, :at:`noise`, :at:`cutoff`, :at:`user` + See :ref:`CSensor`. .. _sensor-jointpos: @@ -6655,6 +6695,8 @@ if omitted. .. _default-camera-fovy: +.. _default-camera-resolution: + .. _default-camera-ipd: .. _default-camera-pos: diff --git a/doc/XMLschema.rst b/doc/XMLschema.rst index 2951b722..6cc3590a 100644 --- a/doc/XMLschema.rst +++ b/doc/XMLschema.rst @@ -364,11 +364,11 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`name` | :ref:`class` | :ref:`fovy` | :ref:`ipd` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`pos` | :ref:`quat` | :ref:`axisangle` | :ref:`xyaxes` | | +| | | | :ref:`resolution` | :ref:`pos` | :ref:`quat` | :ref:`axisangle` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`zaxis` | :ref:`euler` | :ref:`mode` | :ref:`target` | | +| | | | :ref:`xyaxes` | :ref:`zaxis` | :ref:`euler` | :ref:`mode` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`user` | | | | | +| | | | :ref:`target` | :ref:`user` | | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| body |br| |_| |L| | | .. table:: | @@ -835,6 +835,15 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| sensor |br| |_| |L| | | .. table:: | +| :ref:`camprojection | \* | :class: mjcf-attributes | +| ` | | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`name` | :ref:`site` | :ref:`camera` | :ref:`cutoff` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`noise` | :ref:`user` | | | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | ++------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| |_| sensor |br| |_| |L| | | .. table:: | | :ref:`rangefinder | \* | :class: mjcf-attributes | | ` | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | @@ -1223,9 +1232,9 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`fovy` | :ref:`ipd` | :ref:`pos` | :ref:`quat` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`axisangle` | :ref:`xyaxes` | :ref:`zaxis` | :ref:`euler` | | +| | | | :ref:`resolution` | :ref:`axisangle` | :ref:`xyaxes` | :ref:`zaxis` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`mode` | :ref:`user` | | | | +| | | | :ref:`euler` | :ref:`mode` | :ref:`user` | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| default |br| |_| |L| | | .. table:: | diff --git a/doc/changelog.rst b/doc/changelog.rst index 835ab828..d3465061 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -51,30 +51,45 @@ General 6. Renamed the ``nstack`` field in :ref:`mjModel` and :ref:`mjData` to ``narena``. Changed ``narena``, ``pstack``, and ``maxuse_stack`` to count number of bytes rather than number of :ref:`mjtNum` |-| s. -7. Added a new :ref:`dyntype`, ``filterexact``, which updates first-order filter states with + 7. Changed :ref:`mjData.solver`, the array used to collect solver diagnostic information. + This array of :ref:`mjSolverStat` structs is now of length ``mjNISLAND * mjNSOLVER``, interpreted as as a matrix. + Each row of length ``mjNSOLVER`` contains separate solver statistics for each constraint island. + If the solver does not use islands, only row 0 is filled. + + - The new constant :ref:`mjNISLAND` was set to 20. + - :ref:`mjNSOLVER` was reduced from 1000 to 200. + - Added :ref:`mjData.solver_nisland`: the number of islands for which the solver ran. + - Renamed ``mjData.solver_iter`` to ``solver_niter``. Both this member and ``mjData.solver_nnz`` are now integer + vectors of length ``mjNISLAND``. + +8. Added a new :ref:`dyntype`, ``filterexact``, which updates first-order filter states with the exact formula rather than with Euler integration. -8. Added an actuator attribute, :ref:`actearly`, which uses semi-implicit integration for +9. Added an actuator attribute, :ref:`actearly`, which uses semi-implicit integration for actuator forces: using the next step's actuator state to compute the current actuator forces at the current timestep. -9. Renamed ``actuatorforcerange`` and ``actuatorforcelimited``, introduced in the previous version to - :ref:`actuatorfrcrange` and - :ref:`actuatorfrclimited`, respectively. -10. Added the flag :ref:`eulerdamp`, which disables implicit integration of joint damping in the +10. Renamed ``actuatorforcerange`` and ``actuatorforcelimited``, introduced in the previous version to + :ref:`actuatorfrcrange` and + :ref:`actuatorfrclimited`, respectively. +11. Added the flag :ref:`eulerdamp`, which disables implicit integration of joint damping in the Euler integrator. See the :ref:`Numerical Integration` section for more details. -11. Added the flag :ref:`invdiscrete`, which enables discrete-time inverse dynamics for all +12. Added the flag :ref:`invdiscrete`, which enables discrete-time inverse dynamics for all :ref:`integrators` other than ``RK4``. See the flag documentation for more details. -12. Added :ref:`ls_iterations` and :ref:`ls_tolerance` options for adjusting +13. Added :ref:`ls_iterations` and :ref:`ls_tolerance` options for adjusting linesearch stopping criteria in CG and Newton solvers. This can be useful for performance tuning. +14. Added ``mesh_pos`` and ``mesh_quat`` fields to :ref:`mjModel` to store normalizing transformation. +15. Added camera :ref:`resolution` attribute and :ref:`camprojection` + sensor. If camera resolution is set to positive values, the camera projection sensor will report the location of a + target site, projected onto the camera image, in pixel coordinates. Python bindings ^^^^^^^^^^^^^^^ -13. Fixed `#870 `__ where calling ``update_scene`` with an invalid +16. Fixed `#870 `__ where calling ``update_scene`` with an invalid camera name used the default camera. Bug fixes ^^^^^^^^^ -14. Fixed a bug that was causing the geom margins to be ignored during the midphase. +17. Fixed a bug that was causing the geom margins to be ignored during the midphase. Version 2.3.7 (July 20, 2023) @@ -90,8 +105,8 @@ General :ref:`Cartesian actuator` forces are realizable by individual motors at the joints. See :ref:`CForceRange` for details. #. Added an optional ``content_type`` attribute to hfield, texture, and mesh assets. This attribute supports a formatted - `Media Type `_ (previously known as MIME type) string - used to determine the type of the asset file without resorting to pulling the type from the file extension. + `Media Type `__ (previously known as MIME type) + string used to determine the type of the asset file without resorting to pulling the type from the file extension. #. Added analytic derivatives for quaternion :ref:`subtraction` and :ref:`integration` (rotation with an angular velocity). Derivatives are in the 3D tangent space. #. Added :ref:`mjv_connector` which has identical functionality to :ref:`mjv_makeConnector`, but with more convenient diff --git a/doc/includes/references.h b/doc/includes/references.h index eda352fe..e13b9bbb 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -146,9 +146,10 @@ struct mjData_ { mjTimerStat timer[mjNTIMER]; // timer statistics // solver statistics - mjSolverStat solver[mjNSOLVER]; // solver statistics per iteration - int solver_iter; // number of solver iterations - int solver_nnz; // number of non-zeros in Hessian or efc_AR + mjSolverStat solver[mjNISLAND*mjNSOLVER]; // solver statistics per island, per iteration + int solver_nisland; // number of islands processed by solver + int solver_niter[mjNISLAND]; // number of solver iterations, per island + int solver_nnz[mjNISLAND]; // number of non-zeros in Hessian or efc_AR, per island mjtNum solver_fwdinv[2]; // forward-inverse comparison: qfrc, efc // collision statistics @@ -577,6 +578,7 @@ typedef enum mjtSensor_ { // type of sensor mjSENS_TORQUE, // 3D torque between site's body and its parent body mjSENS_MAGNETOMETER, // 3D magnetometer mjSENS_RANGEFINDER, // scalar distance to nearest geom or site along z-axis + mjSENS_CAMPROJECTION, // pixel coordinates of a site in the camera image // sensors related to scalar joints, tendons, actuators mjSENS_JOINTPOS, // scalar joint position (hinge and slide only) @@ -1010,6 +1012,7 @@ struct mjModel_ { mjtNum* cam_poscom0; // global position rel. to sub-com in qpos0 (ncam x 3) mjtNum* cam_pos0; // global position rel. to body in qpos0 (ncam x 3) mjtNum* cam_mat0; // global orientation in qpos0 (ncam x 9) + int* cam_resolution; // [width, height] in pixels (ncam x 2) mjtNum* cam_fovy; // y-field of view (deg) (ncam x 1) mjtNum* cam_ipd; // inter-pupilary distance (ncam x 1) mjtNum* cam_user; // user data (ncam x nuser_cam) @@ -1045,6 +1048,8 @@ struct mjModel_ { int* mesh_texcoordadr; // texcoord data address; -1: no texcoord (nmesh x 1) int* mesh_texcoordnum; // number of texcoord (nmesh x 1) int* mesh_graphadr; // graph data address; -1: no graph (nmesh x 1) + mjtNum* mesh_pos; // translation applied to asset vertices (nmesh x 3) + mjtNum* mesh_quat; // rotation applied to asset vertices (nmesh x 4) float* mesh_vert; // vertex positions for all meshes (nmeshvert x 3) float* mesh_normal; // normals for all meshes (nmeshnormal x 3) float* mesh_texcoord; // vertex texcoords for all meshes (nmeshtexcoord x 2) @@ -1441,14 +1446,21 @@ struct mjrContext_ { // custom OpenGL context int readPixelFormat; // default color pixel format for mjr_readPixels }; typedef struct mjrContext_ mjrContext; -struct mjTask_ { - char buffer[24]; -}; -typedef struct mjTask_ mjTask; +typedef enum mjtTaskStatus_ { // status values for mjTask + mjTASK_NEW = 0, // newly created + mjTASK_QUEUED, // enqueued in a thread pool + mjTASK_COMPLETED // completed execution +} mjtTaskStatus; struct mjThreadPool_ { - char buffer[6208]; + int nworker; // number of workers in the pool }; typedef struct mjThreadPool_ mjThreadPool; +struct mjTask_ { // a task that can be executed by a thread pool. + mjfTask func; // pointer to the function that implements the task + void* args; // arguments to func + volatile int status; // status of the task +}; +typedef struct mjTask_ mjTask; typedef enum mjtButton_ { // mouse button mjBUTTON_NONE = 0, // no button mjBUTTON_LEFT, // left button @@ -2586,9 +2598,8 @@ int mjp_resourceProviderCount(void); const mjpResourceProvider* mjp_getResourceProvider(const char* resource_name); const mjpResourceProvider* mjp_getResourceProviderAtSlot(int slot); mjThreadPool* mju_threadPoolCreate(size_t number_of_threads); -void mju_threadPoolEnqueue( -ThreadPool* thread_pool, mjTask* task, void*(start_routine)(void*), -id* args); -void mju_taskJoin(mjTask* task); +void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task); void mju_threadPoolDestroy(mjThreadPool* thread_pool); +void mju_defaultTask(mjTask* task); +void mju_taskJoin(mjTask* task); // NOLINTEND diff --git a/doc/models.rst b/doc/models.rst index f69e83fa..47de904e 100644 --- a/doc/models.rst +++ b/doc/models.rst @@ -12,8 +12,8 @@ by Google DeepMind. For more information, visit the `Menagerie repository `__. -Bipeds & Quadrupeds -^^^^^^^^^^^^^^^^^^^ +Bipeds +^^^^^^ .. list-table:: :header-rows: 1 @@ -22,12 +22,38 @@ Bipeds & Quadrupeds - Preview * - `Agility Cassie `_ - .. youtube:: rcdsAdwNhtc + * - `Robotis OP3 `_ + - .. youtube:: jLZ3sdkyz_w + +Mobile Manipulators +^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Model + - Preview + * - `Hello Robot Stretch 2 `_ + - .. youtube:: w_NUKO61wIc + +Quadrupeds +^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Model + - Preview * - `Unitree A1 `_ - .. youtube:: paQMrMtnTtc + * - `Unitree Go1 `_ + - .. youtube:: 4d7I67BzDJg * - `Anybotics ANYmal B `_ - .. youtube:: fRHau-PMGgM * - `Anybotics ANYmal C `_ - .. youtube:: v04uJWBLwFQ + * - `Google Barkour v0 `_ + - .. youtube:: w9EA0joEAMo Grippers & Hands ^^^^^^^^^^^^^^^^ @@ -41,6 +67,8 @@ Grippers & Hands - .. youtube:: wi_zJzRm8Ic * - `Robotiq 2F-85 `_ - .. youtube:: yYm9fLj32Xw + * - `Wonik Allegro `_ + - .. youtube:: jDWko1WTRXc Arms ^^^^ @@ -54,4 +82,20 @@ Arms - .. youtube:: H5zSrWcJlGs * - `Universal Robots UR5e `_ - .. youtube:: gAqwNeY0juo + * - `LBR iiwa14 `_ + - .. youtube:: 4Z44nkNXkwo + * - `UFACTORY xArm7 `_ + - .. youtube:: mMDisja5ark + * - `Rethink Robotics Sawyer `_ + - .. youtube:: sZ41oklVvBg +Drones +^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Model + - Preview + * - `Skydio X2 `_ + - .. youtube:: LBsvsgnSvoM diff --git a/doc/programming/samples.rst b/doc/programming/samples.rst index 455de128..f9c3e247 100644 --- a/doc/programming/samples.rst +++ b/doc/programming/samples.rst @@ -118,7 +118,7 @@ Windows power plan so that the minimum processor state is 100%. .. _saRecord: `record `_ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This code sample simulates the passive dynamics of a given model, renders it offscreen, reads the color and depth pixel values, and saves them into a raw data file that can then be converted into a movie file with tools such as ffmpeg. The diff --git a/include/mujoco/mjdata.h b/include/mujoco/mjdata.h index 408e62f8..c55d91a4 100644 --- a/include/mujoco/mjdata.h +++ b/include/mujoco/mjdata.h @@ -173,9 +173,10 @@ struct mjData_ { mjTimerStat timer[mjNTIMER]; // timer statistics // solver statistics - mjSolverStat solver[mjNSOLVER]; // solver statistics per iteration - int solver_iter; // number of solver iterations - int solver_nnz; // number of non-zeros in Hessian or efc_AR + mjSolverStat solver[mjNISLAND*mjNSOLVER]; // solver statistics per island, per iteration + int solver_nisland; // number of islands processed by solver + int solver_niter[mjNISLAND]; // number of solver iterations, per island + int solver_nnz[mjNISLAND]; // number of non-zeros in Hessian or efc_AR, per island mjtNum solver_fwdinv[2]; // forward-inverse comparison: qfrc, efc // collision statistics diff --git a/include/mujoco/mjmodel.h b/include/mujoco/mjmodel.h index 13b7fc5a..efa27d57 100644 --- a/include/mujoco/mjmodel.h +++ b/include/mujoco/mjmodel.h @@ -41,7 +41,8 @@ #define mjNFLUID 12 // number of fluid interaction parameters #define mjNREF 2 // number of solver reference parameters #define mjNIMP 5 // number of solver impedance parameters -#define mjNSOLVER 1000 // size of mjData.solver_XXX arrays +#define mjNSOLVER 200 // size of one mjData.solver array +#define mjNISLAND 20 // number of mjData.solver arrays //---------------------------------- enum types (mjt) ---------------------------------------------- @@ -283,6 +284,7 @@ typedef enum mjtSensor_ { // type of sensor mjSENS_TORQUE, // 3D torque between site's body and its parent body mjSENS_MAGNETOMETER, // 3D magnetometer mjSENS_RANGEFINDER, // scalar distance to nearest geom or site along z-axis + mjSENS_CAMPROJECTION, // pixel coordinates of a site in the camera image // sensors related to scalar joints, tendons, actuators mjSENS_JOINTPOS, // scalar joint position (hinge and slide only) @@ -745,6 +747,7 @@ struct mjModel_ { mjtNum* cam_poscom0; // global position rel. to sub-com in qpos0 (ncam x 3) mjtNum* cam_pos0; // global position rel. to body in qpos0 (ncam x 3) mjtNum* cam_mat0; // global orientation in qpos0 (ncam x 9) + int* cam_resolution; // [width, height] in pixels (ncam x 2) mjtNum* cam_fovy; // y-field of view (deg) (ncam x 1) mjtNum* cam_ipd; // inter-pupilary distance (ncam x 1) mjtNum* cam_user; // user data (ncam x nuser_cam) @@ -780,6 +783,8 @@ struct mjModel_ { int* mesh_texcoordadr; // texcoord data address; -1: no texcoord (nmesh x 1) int* mesh_texcoordnum; // number of texcoord (nmesh x 1) int* mesh_graphadr; // graph data address; -1: no graph (nmesh x 1) + mjtNum* mesh_pos; // translation applied to asset vertices (nmesh x 3) + mjtNum* mesh_quat; // rotation applied to asset vertices (nmesh x 4) float* mesh_vert; // vertex positions for all meshes (nmeshvert x 3) float* mesh_normal; // normals for all meshes (nmeshnormal x 3) float* mesh_texcoord; // vertex texcoords for all meshes (nmeshtexcoord x 2) diff --git a/include/mujoco/mjthread.h b/include/mujoco/mjthread.h index 66290370..c716e70f 100644 --- a/include/mujoco/mjthread.h +++ b/include/mujoco/mjthread.h @@ -15,33 +15,26 @@ #ifndef MUJOCO_INCLUDE_MJTHREAD_H_ #define MUJOCO_INCLUDE_MJTHREAD_H_ -// C API for MuJoCo threading -#ifdef __cplusplus -extern "C" { -#endif +typedef enum mjtTaskStatus_ { // status values for mjTask + mjTASK_NEW = 0, // newly created + mjTASK_QUEUED, // enqueued in a thread pool + mjTASK_COMPLETED // completed execution +} mjtTaskStatus; -#include - -#include - -// These types are implemented in C++, they're just used as opaque pointers in C -// to provide type safety for functions. -struct mjTask_ { - char buffer[24]; -}; -typedef struct mjTask_ mjTask; +// function pointer type for mjTask +typedef void* (*mjfTask)(void*); +// An opaque type representing a thread pool. struct mjThreadPool_ { - char buffer[6208]; + int nworker; // number of workers in the pool }; typedef struct mjThreadPool_ mjThreadPool; -typedef void*(*mjStartRoutine_)(void*); -typedef mjStartRoutine_ mjStartRoutine; - -#ifdef __cplusplus -} -#endif - +struct mjTask_ { // a task that can be executed by a thread pool. + mjfTask func; // pointer to the function that implements the task + void* args; // arguments to func + volatile int status; // status of the task +}; +typedef struct mjTask_ mjTask; #endif // MUJOCO_INCLUDE_MJTHREAD_H_ diff --git a/include/mujoco/mjxmacro.h b/include/mujoco/mjxmacro.h index 842d7914..2ba5a4ec 100644 --- a/include/mujoco/mjxmacro.h +++ b/include/mujoco/mjxmacro.h @@ -258,6 +258,7 @@ X ( int, cam_mode, ncam, 1 ) \ X ( int, cam_bodyid, ncam, 1 ) \ X ( int, cam_targetbodyid, ncam, 1 ) \ + X ( int, cam_resolution, ncam, 2 ) \ X ( mjtNum, cam_pos, ncam, 3 ) \ X ( mjtNum, cam_quat, ncam, 4 ) \ X ( mjtNum, cam_poscom0, ncam, 3 ) \ @@ -294,6 +295,8 @@ XMJV( int, mesh_bvhadr, nmesh, 1 ) \ XMJV( int, mesh_bvhnum, nmesh, 1 ) \ XMJV( int, mesh_graphadr, nmesh, 1 ) \ + X ( mjtNum, mesh_pos, nmesh, 3 ) \ + X ( mjtNum, mesh_quat, nmesh, 4 ) \ X ( float, mesh_vert, nmeshvert, 3 ) \ X ( float, mesh_normal, nmeshnormal, 3 ) \ X ( float, mesh_texcoord, nmeshtexcoord, 2 ) \ @@ -633,8 +636,7 @@ X( size_t, maxuse_arena ) \ X( int, maxuse_con ) \ X( int, maxuse_efc ) \ - X( int, solver_iter ) \ - X( int, solver_nnz ) \ + X( int, solver_nisland ) \ X( int, nbodypair_broad ) \ X( int, nbodypair_narrow ) \ X( int, ngeompair_mid ) \ @@ -651,12 +653,14 @@ // vector fields of mjData -#define MJDATA_VECTOR \ - X( mjWarningStat, warning, mjNWARNING, 1 ) \ - X( mjTimerStat, timer, mjNTIMER, 1 ) \ - X( mjSolverStat, solver, mjNSOLVER, 1 ) \ - X( mjtNum, solver_fwdinv, 2, 1 ) \ - X( mjtNum, energy, 2, 1 ) +#define MJDATA_VECTOR \ + X( mjWarningStat, warning, mjNWARNING, 1 ) \ + X( mjTimerStat, timer, mjNTIMER, 1 ) \ + X( mjSolverStat, solver, mjNILSAND, mjNSOLVER ) \ + X( int, solver_niter, mjNISLAND, 1 ) \ + X( int, solver_nnz, mjNISLAND, 1 ) \ + X( mjtNum, solver_fwdinv, 2, 1 ) \ + X( mjtNum, energy, 2, 1 ) // alias XMJV to be the same as X diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index 8abb1e1f..c7964c73 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -1307,19 +1307,21 @@ MJAPI const mjpResourceProvider* mjp_getResourceProviderAtSlot(int slot); //---------------------- Thread ------------------------------------------------------------------- -// Creates a thread pool with the specified number of threads running. +// Create a thread pool with the specified number of threads running. MJAPI mjThreadPool* mju_threadPoolCreate(size_t number_of_threads); -// Enqueues a task in a thread pool. -MJAPI void mju_threadPoolEnqueue( - mjThreadPool* thread_pool, mjTask* task, void*(start_routine)(void*), - void* args); +// Enqueue a task in a thread pool. +MJAPI void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task); -// Waits for a task to complete. +// Destroy a thread pool. +MJAPI void mju_threadPoolDestroy(mjThreadPool* thread_pool); + +// Initialize an mjTask. +MJAPI void mju_defaultTask(mjTask* task); + +// Wait for a task to complete. MJAPI void mju_taskJoin(mjTask* task); -// Destroys a thread pool. -MJAPI void mju_threadPoolDestroy(mjThreadPool* thread_pool); #if defined(__cplusplus) } diff --git a/introspect/codegen/generate_enums.py b/introspect/codegen/generate_enums.py index 68e9592f..59d7ff3b 100644 --- a/introspect/codegen/generate_enums.py +++ b/introspect/codegen/generate_enums.py @@ -56,7 +56,10 @@ class MjEnumVisitor: child_kind = child.get('kind') if child_kind == 'EnumConstantDecl': next_idx = values[-1][1] + 1 if values else 0 - value = int(child['inner'][0].get('value', next_idx)) + if 'inner' in child: + value = int(child['inner'][0].get('value', next_idx)) + else: + value = next_idx values.append((child['name'], value)) return ast_nodes.EnumDecl(name=name, declname=name, values=dict(values)) diff --git a/introspect/enums.py b/introspect/enums.py index 6be0abe7..d9cc2772 100644 --- a/introspect/enums.py +++ b/introspect/enums.py @@ -313,37 +313,38 @@ ENUMS: Mapping[str, EnumDecl] = dict([ ('mjSENS_TORQUE', 5), ('mjSENS_MAGNETOMETER', 6), ('mjSENS_RANGEFINDER', 7), - ('mjSENS_JOINTPOS', 8), - ('mjSENS_JOINTVEL', 9), - ('mjSENS_TENDONPOS', 10), - ('mjSENS_TENDONVEL', 11), - ('mjSENS_ACTUATORPOS', 12), - ('mjSENS_ACTUATORVEL', 13), - ('mjSENS_ACTUATORFRC', 14), - ('mjSENS_JOINTACTFRC', 15), - ('mjSENS_BALLQUAT', 16), - ('mjSENS_BALLANGVEL', 17), - ('mjSENS_JOINTLIMITPOS', 18), - ('mjSENS_JOINTLIMITVEL', 19), - ('mjSENS_JOINTLIMITFRC', 20), - ('mjSENS_TENDONLIMITPOS', 21), - ('mjSENS_TENDONLIMITVEL', 22), - ('mjSENS_TENDONLIMITFRC', 23), - ('mjSENS_FRAMEPOS', 24), - ('mjSENS_FRAMEQUAT', 25), - ('mjSENS_FRAMEXAXIS', 26), - ('mjSENS_FRAMEYAXIS', 27), - ('mjSENS_FRAMEZAXIS', 28), - ('mjSENS_FRAMELINVEL', 29), - ('mjSENS_FRAMEANGVEL', 30), - ('mjSENS_FRAMELINACC', 31), - ('mjSENS_FRAMEANGACC', 32), - ('mjSENS_SUBTREECOM', 33), - ('mjSENS_SUBTREELINVEL', 34), - ('mjSENS_SUBTREEANGMOM', 35), - ('mjSENS_CLOCK', 36), - ('mjSENS_PLUGIN', 37), - ('mjSENS_USER', 38), + ('mjSENS_CAMPROJECTION', 8), + ('mjSENS_JOINTPOS', 9), + ('mjSENS_JOINTVEL', 10), + ('mjSENS_TENDONPOS', 11), + ('mjSENS_TENDONVEL', 12), + ('mjSENS_ACTUATORPOS', 13), + ('mjSENS_ACTUATORVEL', 14), + ('mjSENS_ACTUATORFRC', 15), + ('mjSENS_JOINTACTFRC', 16), + ('mjSENS_BALLQUAT', 17), + ('mjSENS_BALLANGVEL', 18), + ('mjSENS_JOINTLIMITPOS', 19), + ('mjSENS_JOINTLIMITVEL', 20), + ('mjSENS_JOINTLIMITFRC', 21), + ('mjSENS_TENDONLIMITPOS', 22), + ('mjSENS_TENDONLIMITVEL', 23), + ('mjSENS_TENDONLIMITFRC', 24), + ('mjSENS_FRAMEPOS', 25), + ('mjSENS_FRAMEQUAT', 26), + ('mjSENS_FRAMEXAXIS', 27), + ('mjSENS_FRAMEYAXIS', 28), + ('mjSENS_FRAMEZAXIS', 29), + ('mjSENS_FRAMELINVEL', 30), + ('mjSENS_FRAMEANGVEL', 31), + ('mjSENS_FRAMELINACC', 32), + ('mjSENS_FRAMEANGACC', 33), + ('mjSENS_SUBTREECOM', 34), + ('mjSENS_SUBTREELINVEL', 35), + ('mjSENS_SUBTREEANGMOM', 36), + ('mjSENS_CLOCK', 37), + ('mjSENS_PLUGIN', 38), + ('mjSENS_USER', 39), ]), )), ('mjtStage', @@ -642,6 +643,16 @@ ENUMS: Mapping[str, EnumDecl] = dict([ ('mjFONT_BIG', 2), ]), )), + ('mjtTaskStatus', + EnumDecl( + name='mjtTaskStatus', + declname='enum mjtTaskStatus_', + values=dict([ + ('mjTASK_NEW', 0), + ('mjTASK_QUEUED', 1), + ('mjTASK_COMPLETED', 2), + ]), + )), ('mjtButton', EnumDecl( name='mjtButton', diff --git a/introspect/functions.py b/introspect/functions.py index e5323e4c..a27e95db 100644 --- a/introspect/functions.py +++ b/introspect/functions.py @@ -8269,7 +8269,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ type=ValueType(name='size_t'), ), ), - doc='Creates a thread pool with the specified number of threads running.', # pylint: disable=line-too-long + doc='Create a thread pool with the specified number of threads running.', # pylint: disable=line-too-long )), ('mju_threadPoolEnqueue', FunctionDecl( @@ -8288,32 +8288,8 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ inner_type=ValueType(name='mjTask'), ), ), - FunctionParameterDecl( - name='start_routine', - type=ValueType(name='void *(*)(void *)'), - ), - FunctionParameterDecl( - name='args', - type=PointerType( - inner_type=ValueType(name='void'), - ), - ), ), - doc='Enqueues a task in a thread pool.', - )), - ('mju_taskJoin', - FunctionDecl( - name='mju_taskJoin', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='task', - type=PointerType( - inner_type=ValueType(name='mjTask'), - ), - ), - ), - doc='Waits for a task to complete.', + doc='Enqueue a task in a thread pool.', )), ('mju_threadPoolDestroy', FunctionDecl( @@ -8327,6 +8303,34 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ ), ), ), - doc='Destroys a thread pool.', + doc='Destroy a thread pool.', + )), + ('mju_defaultTask', + FunctionDecl( + name='mju_defaultTask', + return_type=ValueType(name='void'), + parameters=( + FunctionParameterDecl( + name='task', + type=PointerType( + inner_type=ValueType(name='mjTask'), + ), + ), + ), + doc='Initialize an mjTask.', + )), + ('mju_taskJoin', + FunctionDecl( + name='mju_taskJoin', + return_type=ValueType(name='void'), + parameters=( + FunctionParameterDecl( + name='task', + type=PointerType( + inner_type=ValueType(name='mjTask'), + ), + ), + ), + doc='Wait for a task to complete.', )), ]) diff --git a/introspect/structs.py b/introspect/structs.py index 2e5f08a0..50d614f8 100644 --- a/introspect/structs.py +++ b/introspect/structs.py @@ -1885,6 +1885,13 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), doc='global orientation in qpos0 (ncam x 9)', ), + StructFieldDecl( + name='cam_resolution', + type=PointerType( + inner_type=ValueType(name='int'), + ), + doc='[width, height] in pixels (ncam x 2)', + ), StructFieldDecl( name='cam_fovy', type=PointerType( @@ -2102,6 +2109,20 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), doc='graph data address; -1: no graph (nmesh x 1)', ), + StructFieldDecl( + name='mesh_pos', + type=PointerType( + inner_type=ValueType(name='mjtNum'), + ), + doc='translation applied to asset vertices (nmesh x 3)', + ), + StructFieldDecl( + name='mesh_quat', + type=PointerType( + inner_type=ValueType(name='mjtNum'), + ), + doc='rotation applied to asset vertices (nmesh x 4)', + ), StructFieldDecl( name='mesh_vert', type=PointerType( @@ -3562,19 +3583,30 @@ STRUCTS: Mapping[str, StructDecl] = dict([ name='solver', type=ArrayType( inner_type=ValueType(name='mjSolverStat'), - extents=(1000,), + extents=(4000,), ), - doc='solver statistics per iteration', + doc='solver statistics per island, per iteration', ), StructFieldDecl( - name='solver_iter', + name='solver_nisland', type=ValueType(name='int'), - doc='number of solver iterations', + doc='number of islands processed by solver', + ), + StructFieldDecl( + name='solver_niter', + type=ArrayType( + inner_type=ValueType(name='int'), + extents=(20,), + ), + doc='number of solver iterations, per island', ), StructFieldDecl( name='solver_nnz', - type=ValueType(name='int'), - doc='number of non-zeros in Hessian or efc_AR', + type=ArrayType( + inner_type=ValueType(name='int'), + extents=(20,), + ), + doc='number of non-zeros in Hessian or efc_AR, per island', ), StructFieldDecl( name='solver_fwdinv', @@ -6993,33 +7025,39 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), ), )), - ('mjTask', - StructDecl( - name='mjTask', - declname='struct mjTask_', - fields=( - StructFieldDecl( - name='buffer', - type=ArrayType( - inner_type=ValueType(name='char'), - extents=(24,), - ), - doc='', - ), - ), - )), ('mjThreadPool', StructDecl( name='mjThreadPool', declname='struct mjThreadPool_', fields=( StructFieldDecl( - name='buffer', - type=ArrayType( - inner_type=ValueType(name='char'), - extents=(6208,), + name='nworker', + type=ValueType(name='int'), + doc='number of workers in the pool', + ), + ), + )), + ('mjTask', + StructDecl( + name='mjTask', + declname='struct mjTask_', + fields=( + StructFieldDecl( + name='func', + type=ValueType(name='mjfTask'), + doc='pointer to the function that implements the task', + ), + StructFieldDecl( + name='args', + type=PointerType( + inner_type=ValueType(name='void'), ), - doc='', + doc='arguments to func', + ), + StructFieldDecl( + name='status', + type=ValueType(name='int', is_volatile=True), + doc='status of the task', ), ), )), diff --git a/model/plugin/sdf/asset/README.md b/model/plugin/sdf/asset/README.md new file mode 100644 index 00000000..b558004f --- /dev/null +++ b/model/plugin/sdf/asset/README.md @@ -0,0 +1,2 @@ +The spot assets were taken from https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/ and are +released under the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication license. diff --git a/model/plugin/sdf/asset/spot.obj b/model/plugin/sdf/asset/spot.obj new file mode 100644 index 00000000..87ecce51 --- /dev/null +++ b/model/plugin/sdf/asset/spot.obj @@ -0,0 +1,12011 @@ +v 0.348799 -0.334989 -0.0832331 +v 0.313132 -0.399051 0.881192 +v 0.266758 0.181628 0.122726 +v 0.229555 0.0663178 0.828702 +v 0.353623 -0.0486456 0.443969 +v 0.335878 -0.384495 0.425693 +v 0.305362 0.0307983 -0.00655663 +v 0.279611 -0.0552387 0.858547 +v 0.266719 0.10578 0.46681 +v 0.149341 -0.451522 0.166423 +v 0.12606 -0.162036 -0.185668 +v 0.114009 -0.358339 -0.0759521 +v 0.101546 -0.475382 0.663157 +v 0.240757 -0.435635 0.421981 +v 0.385825 -0.174501 0.180766 +v 0.358602 -0.37797 0.17897 +v 0.345953 -0.229705 0.664126 +v 0.316102 -0.419396 0.649153 +v 0.131961 -0.201382 0.951731 +v 0.0876766 -0.391182 0.901606 +v 0.161859 0.285356 0.303098 +v 0.177264 0.282839 0.0875537 +v 0.158786 0.0751889 -0.141343 +v 0.310974 -0.0974099 -0.0697762 +v 0.138236 0.191142 0.700393 +v 0.13061 0.109881 0.873657 +v 0.287544 -0.214549 0.864938 +v 0.25445 0.101336 0.680112 +v 0.34304 -0.0541165 0.672286 +v 0.369388 -0.0242775 0.205838 +v 0.273782 0.160332 0.273861 +v 0.36907 -0.228332 0.435279 +v 0.146074 0.206063 0.488052 +v 0.15689 0.317253 -0.0179554 +v 0.184529 0.181235 -0.238574 +v 0.229877 0.446038 -0.0428095 +v 0.326584 0.303676 -0.375494 +v 0.257915 0.488969 -0.517721 +v 0.187711 0.730295 -0.437134 +v 0.190442 0.122856 -0.437696 +v 0.271501 0.201979 -0.579853 +v 0.227961 0.337016 -0.641468 +v 0.323288 -0.645898 -0.0650069 +v 0.277559 -0.660659 0.872426 +v 0.15321 -0.671553 0.116597 +v 0.153343 -0.652512 -0.0628489 +v 0.129752 -0.680413 0.714233 +v 0.310744 -0.658159 0.12474 +v 0.270197 -0.670204 0.705429 +v 0.125665 -0.664371 0.877017 +v 0.264169 0.646946 -0.369897 +v 0.180359 0.68646 -0.148279 +v 0.263204 0.560375 -0.137191 +v 0.371765 0.683869 -0.321196 +v 0.432195 0.751246 -0.233457 +v 0.424574 0.680439 -0.150855 +v 0.379346 0.604049 -0.213075 +v 0 -0.192084 -0.196407 +v 0 0.505678 -0.563016 +v 0 0.340641 -0.665066 +v 0 0.0414775 -0.241591 +v 0 0.117615 -0.305384 +v 0 0.100384 -0.450564 +v 0 0.182587 -0.616155 +v -4.33681e-19 0.765067 -0.449072 +v -4.33681e-19 0.834757 -0.307668 +v 0 -0.434774 0.0615192 +v 0 -0.354126 -0.0677048 +v 0 0.326124 0.139538 +v 0 0.352207 0.0388631 +v 0 0.499175 0.0586613 +v -4.33681e-19 0.723906 -0.0597107 +v 0 0.816061 -0.189369 +v 0 -0.435249 0.726548 +v 0 -0.533724 0.415511 +v 0 0.301194 0.312719 +v 0 0.233342 0.49566 +v 0 -0.340037 0.891691 +v 0 -0.194995 0.971379 +v 0 0.220553 0.711025 +v 0 0.130478 0.891171 +v 0.164015 0.929339 -0.232094 +v 0.205905 0.915741 -0.313374 +v 0.15338 0.935554 -0.282029 +v 0.221786 0.905461 -0.256021 +v 0.115236 0.837896 -0.222054 +v 0.086327 0.812209 -0.211465 +v 0.172231 0.819312 -0.334104 +v 0.162464 0.791078 -0.351846 +v 0.0787362 0.822102 -0.294366 +v 0.102999 0.844736 -0.288229 +v 0.219399 0.754552 -0.28348 +v 0.199751 0.790382 -0.244881 +v 0.184684 0.762009 -0.196152 +v 0.279703 0.762439 -0.233186 +v 0.120311 -0.456517 0.243094 +v 0.111282 -0.477316 0.58188 +v 0.186164 -0.487701 0.417533 +v 0 -0.462404 0.208739 +v 0 -0.483948 0.606421 +v 0.17185 -0.0410977 0.94527 +v 0.106249 -0.0142167 0.968533 +v 0.107395 -0.0653463 0.975253 +v 0 0.00228925 0.987177 +v 0 -0.0756163 0.995507 +v 0.0517509 -0.0608359 1.02473 +v 0.0517951 -0.0798093 1.0112 +v 0 -0.0688251 1.04807 +v 0 -0.0952192 1.02642 +v -0.348799 -0.334989 -0.0832331 +v -0.313132 -0.399051 0.881192 +v -0.266758 0.181628 0.122726 +v -0.229555 0.0663178 0.828702 +v -0.353623 -0.0486456 0.443969 +v -0.335878 -0.384495 0.425693 +v -0.305362 0.0307983 -0.00655663 +v -0.279611 -0.0552387 0.858547 +v -0.266719 0.10578 0.46681 +v -0.149341 -0.451522 0.166423 +v -0.12606 -0.162036 -0.185668 +v -0.114009 -0.358339 -0.0759521 +v -0.101546 -0.475382 0.663157 +v -0.240757 -0.435635 0.421981 +v -0.385825 -0.174501 0.180766 +v -0.358602 -0.37797 0.17897 +v -0.345953 -0.229705 0.664126 +v -0.316102 -0.419396 0.649153 +v -0.131961 -0.201382 0.951731 +v -0.0876766 -0.391182 0.901606 +v -0.161859 0.285356 0.303098 +v -0.177264 0.282839 0.0875537 +v -0.158786 0.0751889 -0.141343 +v -0.310974 -0.0974099 -0.0697762 +v -0.138236 0.191142 0.700393 +v -0.13061 0.109881 0.873657 +v -0.287544 -0.214549 0.864938 +v -0.25445 0.101336 0.680112 +v -0.34304 -0.0541165 0.672286 +v -0.369388 -0.0242775 0.205838 +v -0.273782 0.160332 0.273861 +v -0.36907 -0.228332 0.435279 +v -0.146074 0.206063 0.488052 +v -0.15689 0.317253 -0.0179554 +v -0.184529 0.181235 -0.238574 +v -0.229877 0.446038 -0.0428095 +v -0.326584 0.303676 -0.375494 +v -0.257915 0.488969 -0.517721 +v -0.187711 0.730295 -0.437134 +v -0.190442 0.122856 -0.437696 +v -0.271501 0.201979 -0.579853 +v -0.227961 0.337016 -0.641468 +v -0.323288 -0.645898 -0.0650069 +v -0.277559 -0.660659 0.872426 +v -0.15321 -0.671553 0.116597 +v -0.153343 -0.652512 -0.0628489 +v -0.129752 -0.680413 0.714233 +v -0.310744 -0.658159 0.12474 +v -0.270197 -0.670204 0.705429 +v -0.125665 -0.664371 0.877017 +v -0.264169 0.646946 -0.369897 +v -0.180359 0.68646 -0.148279 +v -0.263204 0.560375 -0.137191 +v -0.371765 0.683869 -0.321196 +v -0.432195 0.751246 -0.233457 +v -0.424574 0.680439 -0.150855 +v -0.379346 0.604049 -0.213075 +v -0.164015 0.929339 -0.232094 +v -0.205905 0.915741 -0.313374 +v -0.15338 0.935554 -0.282029 +v -0.221786 0.905461 -0.256021 +v -0.115236 0.837896 -0.222054 +v -0.086327 0.812209 -0.211465 +v -0.172231 0.819312 -0.334104 +v -0.162464 0.791078 -0.351846 +v -0.0787362 0.822102 -0.294366 +v -0.102999 0.844736 -0.288229 +v -0.219399 0.754552 -0.28348 +v -0.199751 0.790382 -0.244881 +v -0.184684 0.762009 -0.196152 +v -0.279703 0.762439 -0.233186 +v -0.120311 -0.456517 0.243094 +v -0.111282 -0.477316 0.58188 +v -0.186164 -0.487701 0.417533 +v -0.17185 -0.0410977 0.94527 +v -0.106249 -0.0142167 0.968533 +v -0.107395 -0.0653463 0.975253 +v -0.0517509 -0.0608359 1.02473 +v -0.0517951 -0.0798093 1.0112 +v 0.287063 -0.417912 0.42339 +v 0.223323 -0.431749 0.300839 +v 0.262599 -0.446574 0.214165 +v 0.345683 -0.367458 0.305622 +v 0.284862 -0.410239 0.304857 +v 0.320467 -0.390454 0.538527 +v 0.218649 -0.474853 0.619945 +v 0.19621 -0.447285 0.538732 +v 0.257025 -0.429064 0.536591 +v 0.240602 -0.341214 -0.117452 +v 0.12147 -0.249274 -0.145022 +v 0.221157 -0.120393 -0.146058 +v 0.328715 -0.192761 -0.0778193 +v 0.229478 -0.212011 -0.133147 +v 0.307987 -0.0331195 -0.049691 +v 0.139893 -0.0548182 -0.181103 +v 0.237075 0.0521949 -0.0759725 +v 0.227173 -0.0372356 -0.128413 +v 0.301492 -0.292885 0.870674 +v 0.213279 -0.204742 0.922518 +v 0.117499 -0.281642 0.935739 +v 0.211816 -0.394732 0.922409 +v 0.215547 -0.286415 0.919674 +v 0.364968 -0.12541 0.046235 +v 0.382458 -0.25968 0.176197 +v 0.385194 -0.351205 0.0306159 +v 0.375418 -0.216313 0.0359591 +v 0.382575 -0.209764 0.311653 +v 0.361147 -0.316624 0.430338 +v 0.374384 -0.294532 0.308248 +v 0.368668 -0.137134 0.438729 +v 0.385132 -0.101185 0.188168 +v 0.365146 -0.0406368 0.324829 +v 0.381949 -0.125584 0.315412 +v 0.350232 0.00253885 0.0908221 +v 0.361458 -0.0619596 0.0609153 +v 0.343331 -0.409171 0.778577 +v 0.341862 -0.313907 0.657949 +v 0.328019 -0.223318 0.773747 +v 0.336544 -0.303107 0.775339 +v 0.283052 -0.132631 0.863571 +v 0.351001 -0.142438 0.668828 +v 0.322487 -0.0565049 0.774019 +v 0.329 -0.140489 0.774308 +v 0.349301 -0.0521301 0.560904 +v 0.357572 -0.233122 0.551664 +v 0.360647 -0.141814 0.556564 +v 0.349272 -0.319879 0.544579 +v 0.23281 0.229543 0.110217 +v 0.170184 0.299829 0.20555 +v 0.221341 0.236481 0.293418 +v 0.272682 0.181352 0.189589 +v 0.227226 0.252859 0.204008 +v 0.271155 0.129527 0.366223 +v 0.153276 0.244216 0.39384 +v 0.20969 0.164574 0.478658 +v 0.215375 0.198113 0.382954 +v 0.24282 0.0875955 0.770725 +v 0.198521 0.154682 0.689709 +v 0.134533 0.161682 0.796578 +v 0.187262 0.086887 0.854887 +v 0.191558 0.132026 0.78245 +v 0.141545 0.196582 0.593509 +v 0.26179 0.101674 0.574769 +v 0.204392 0.157257 0.584394 +v 0.327755 0.0676272 0.239516 +v 0.317321 0.0335117 0.454173 +v 0.324726 0.0469262 0.344192 +v 0.307072 0.0296092 0.675079 +v 0.253941 0.0157408 0.848168 +v 0.289863 0.0225221 0.77107 +v 0.190901 0.188016 -0.0300482 +v 0.288174 0.116771 0.0639197 +v 0.239299 0.151564 0.0118342 +v 0.313467 0.030566 0.566851 +v 0.317033 0.0909783 0.142973 +v 0.150018 0.148066 -0.170355 +v 0.192003 0.257627 -0.114007 +v 0.150923 0.290686 0.0162651 +v 0.172619 0.221245 -0.0722104 +v 0.274031 0.23831 -0.301318 +v 0.294876 0.383503 -0.203773 +v 0.194068 0.37243 -0.0269037 +v 0.248629 0.311098 -0.153862 +v 0.196806 0.141274 -0.362924 +v 0.23911 0.14497 -0.502892 +v 0.324701 0.24108 -0.502727 +v 0.278147 0.181024 -0.423508 +v 0.263786 0.27805 -0.630217 +v 0.250979 0.388662 -0.601302 +v 0.318198 0.390558 -0.446528 +v 0.314593 0.32071 -0.563292 +v 0.338046 -0.680095 0.0309463 +v 0.228165 -0.692422 0.147407 +v 0.12828 -0.689708 0.0245746 +v 0.238161 -0.677382 -0.0918856 +v 0.229681 -0.733842 0.0266899 +v 0.20056 -0.687393 0.898863 +v 0.107919 -0.696884 0.796995 +v 0.199176 -0.699686 0.68654 +v 0.291818 -0.690195 0.788408 +v 0.198244 -0.736784 0.793448 +v 0.307855 -0.55258 0.89062 +v 0.294592 -0.571581 0.678753 +v 0.335563 -0.561971 0.78431 +v 0.0593616 -0.458076 0.795932 +v 0.110927 -0.595142 0.691599 +v 0.102733 -0.558625 0.896274 +v 0.0716769 -0.583028 0.796447 +v 0.203007 -0.591569 0.647127 +v 0.206666 -0.553636 0.930804 +v 0.339121 -0.546516 0.150832 +v 0.352933 -0.520557 -0.0885122 +v 0.383244 -0.532332 0.0297109 +v 0.132569 -0.534652 -0.0767316 +v 0.24402 -0.524662 -0.124285 +v 0.143499 -0.577512 0.141914 +v 0.241073 -0.571789 0.188527 +v 0.0964942 -0.434904 0.0342915 +v 0.0999951 -0.56397 0.0317575 +v 0.271576 0.561647 -0.416318 +v 0.282894 0.56989 -0.257283 +v 0.23851 0.520387 -0.0907886 +v 0.293195 0.482084 -0.276654 +v 0.213045 0.609177 -0.109989 +v 0.321376 0.576724 -0.185683 +v 0.422878 0.632073 -0.168661 +v 0.32688 0.680784 -0.145207 +v 0.326345 0.612341 -0.141546 +v 0.312594 0.674309 -0.341185 +v 0.379053 0.63587 -0.283895 +v 0.3154 0.606871 -0.278418 +v 0.417773 0.731266 -0.288914 +v 0.460287 0.727236 -0.177367 +v 0.454185 0.684351 -0.230461 +v 0 0.320051 0.223298 +v 0.0857686 0.301184 0.309872 +v 0.0922474 0.320203 0.127906 +v 0.0910385 0.318251 0.216664 +v 0 0.227033 0.602086 +v 0.0710686 0.213115 0.708099 +v 0.0750596 0.22755 0.493766 +v 0.0724773 0.219588 0.599773 +v 0 0.186603 0.810651 +v 0.0670456 0.125156 0.886255 +v 0.0695062 0.18012 0.806775 +v 0 -0.40432 -0.00187701 +v 0.0502685 -0.34467 -0.0665397 +v 0.0661753 -0.432919 0.0879789 +v 0.056363 -0.399912 0.0126968 +v 0 -0.395546 0.810009 +v 0.0398588 -0.442711 0.714357 +v 0.0361117 -0.34665 0.891624 +v 0.0321101 -0.404726 0.804765 +v 0 0.264692 0.401284 +v 0.0798727 0.262384 0.399618 +v 0 0.330325 0.0716557 +v 0.0874752 0.345901 0.0284499 +v 0.0858416 0.32349 0.0605597 +v 0 0.409384 0.0515977 +v 0.124296 0.487548 0.0340513 +v 0.105997 0.402715 0.0360884 +v 0 0.641579 -0.507325 +v 0.104733 0.755088 -0.444831 +v 0.214286 0.629383 -0.484754 +v 0.136392 0.50382 -0.556974 +v 0.121817 0.636846 -0.502061 +v 0 0.412943 -0.623842 +v 0.139278 0.340909 -0.661549 +v 0.138945 0.411476 -0.620153 +v 0 -0.271137 0.943676 +v 0.0622199 -0.197393 0.966789 +v 0.0501277 -0.274014 0.941915 +v 0 -0.286073 -0.138523 +v 0.0553298 -0.185801 -0.197022 +v 0.050202 -0.275405 -0.142323 +v 0 -0.0695404 -0.225378 +v 0.0766662 0.0457919 -0.217551 +v 0.0655056 -0.0670069 -0.214493 +v 0 0.101519 -0.264918 +v 0.0933959 0.130309 -0.285229 +v 0.0838463 0.11062 -0.238883 +v 0 0.106874 -0.369301 +v 0.114603 0.104637 -0.445501 +v 0.102596 0.115199 -0.359834 +v 0 0.126441 -0.539369 +v 0.153665 0.185489 -0.611191 +v 0.137484 0.129002 -0.534091 +v 0 0.259825 -0.661348 +v 0.150371 0.262453 -0.657355 +v 0.0819636 0.707011 -0.0978848 +v 0 0.613137 0.0118372 +v 0.128934 0.593549 -0.0276065 +v 0.230899 0.696193 -0.415496 +v 0.2462 0.632058 -0.451998 +v 0.2255 0.918412 -0.287909 +v 0.182289 0.937359 -0.304334 +v 0.155831 0.94592 -0.253016 +v 0.199042 0.926972 -0.236591 +v 0.198381 0.950853 -0.26973 +v 0.195536 0.768708 -0.323732 +v 0.162591 0.796641 -0.337706 +v 0.198135 0.804412 -0.300184 +v 0.204856 0.767832 -0.258627 +v 0.190344 0.780419 -0.305321 +v 0.158595 0.817014 -0.220186 +v 0.102838 0.815304 -0.21903 +v 0.12548 0.786281 -0.190531 +v 0.18859 0.771476 -0.215131 +v 0.14521 0.793415 -0.208712 +v 0.113814 0.810725 -0.339255 +v 0.0911506 0.822276 -0.28966 +v 0.134346 0.834135 -0.324328 +v 0.12321 0.811864 -0.327105 +v 0.0699464 0.823757 -0.248502 +v 0.0956349 0.846841 -0.248877 +v 0.0836698 0.824545 -0.249204 +v 0.24364 0.757848 -0.207433 +v 0.246443 0.756953 -0.257453 +v 0.21289 0.762245 -0.22883 +v 0.355751 0.762428 -0.238497 +v 0.249966 0.723503 -0.332259 +v 0.32003 0.739642 -0.304714 +v 0.181848 0.741315 -0.180043 +v 0.328516 0.741977 -0.181175 +v 0.0499681 0.812176 -0.199395 +v 0 0.785709 -0.129116 +v 0.0788354 0.774284 -0.158189 +v 0.0505691 0.828853 -0.304368 +v 0.168022 0.778755 -0.386065 +v 0 0.821114 -0.378707 +v 0.0897195 0.811796 -0.373587 +v 0 0.831803 -0.246303 +v 0.0404745 0.828353 -0.247459 +v 0.211302 0.744371 -0.365196 +v 0.193702 0.87269 -0.329392 +v 0.216553 0.856661 -0.251136 +v 0.218551 0.860755 -0.297102 +v 0.126841 0.897388 -0.285836 +v 0.157513 0.887986 -0.320358 +v 0.138938 0.890583 -0.222912 +v 0.120161 0.900194 -0.247801 +v 0.181137 0.872948 -0.224154 +v 0.106299 -0.467348 0.612794 +v 0.156751 -0.485651 0.517662 +v 0.218865 -0.458568 0.419816 +v 0.177713 -0.464461 0.527871 +v 0 -0.459742 0.666605 +v 0.0640756 -0.481225 0.60015 +v 0.0486808 -0.462533 0.655449 +v 0.129769 -0.445891 0.210992 +v 0.0674919 -0.459184 0.218582 +v 0 -0.445956 0.12884 +v 0.0638357 -0.444618 0.15006 +v 0.160168 -0.471758 0.313909 +v 0.192938 -0.45045 0.307624 +v 0 -0.518477 0.519852 +v 0.106971 -0.518553 0.416032 +v 0.0913755 -0.507594 0.518132 +v 0 -0.503509 0.307563 +v 0.0906862 -0.492986 0.310407 +v 0.148938 -0.0188178 0.950827 +v 0.109744 -0.0412763 0.976341 +v 0.152295 -0.0598695 0.957881 +v 0.133131 -0.0374762 0.965091 +v 0.129144 -0.123186 0.961976 +v 0.214922 -0.0472768 0.917853 +v 0.202946 -0.113321 0.930645 +v 0.124777 0.0448234 0.926767 +v 0.189431 0.0176502 0.907717 +v 0.0541294 -0.000582154 0.980957 +v 0 0.0636729 0.946137 +v 0.0627521 0.0592134 0.940397 +v 0.0544734 -0.0758718 0.989219 +v 0 -0.121134 0.98554 +v 0.0631528 -0.123094 0.979468 +v 0.0716307 -0.0432 1.00541 +v 0.052795 -0.0725924 1.01945 +v 0.0717681 -0.0690106 0.994894 +v 0.0809297 -0.0558501 0.997263 +v 0 -0.0400118 1.02513 +v 0.0297219 -0.0653048 1.04059 +v 0.0406958 -0.0395224 1.01839 +v 0.0297587 -0.0908237 1.02001 +v 0 -0.0782912 1.00911 +v 0.0407812 -0.0765567 1.00299 +v 0 -0.0903561 1.04431 +v 0.0264068 -0.0851806 1.03686 +v -0.345683 -0.367458 0.305622 +v -0.262599 -0.446574 0.214165 +v -0.223323 -0.431749 0.300839 +v -0.287063 -0.417912 0.42339 +v -0.284862 -0.410239 0.304857 +v -0.19621 -0.447285 0.538732 +v -0.218649 -0.474853 0.619945 +v -0.320467 -0.390454 0.538527 +v -0.257025 -0.429064 0.536591 +v -0.328715 -0.192761 -0.0778193 +v -0.221157 -0.120393 -0.146058 +v -0.12147 -0.249274 -0.145022 +v -0.240602 -0.341214 -0.117452 +v -0.229478 -0.212011 -0.133147 +v -0.237075 0.0521949 -0.0759725 +v -0.139893 -0.0548182 -0.181103 +v -0.307987 -0.0331195 -0.049691 +v -0.227173 -0.0372356 -0.128413 +v -0.211816 -0.394732 0.922409 +v -0.117499 -0.281642 0.935739 +v -0.213279 -0.204742 0.922518 +v -0.301492 -0.292885 0.870674 +v -0.215547 -0.286415 0.919674 +v -0.385194 -0.351205 0.0306159 +v -0.382458 -0.25968 0.176197 +v -0.364968 -0.12541 0.046235 +v -0.375418 -0.216313 0.0359591 +v -0.361147 -0.316624 0.430338 +v -0.382575 -0.209764 0.311653 +v -0.374384 -0.294532 0.308248 +v -0.365146 -0.0406368 0.324829 +v -0.385132 -0.101185 0.188168 +v -0.368668 -0.137134 0.438729 +v -0.381949 -0.125584 0.315412 +v -0.350232 0.00253885 0.0908221 +v -0.361458 -0.0619596 0.0609153 +v -0.328019 -0.223318 0.773747 +v -0.341862 -0.313907 0.657949 +v -0.343331 -0.409171 0.778577 +v -0.336544 -0.303107 0.775339 +v -0.322487 -0.0565049 0.774019 +v -0.351001 -0.142438 0.668828 +v -0.283052 -0.132631 0.863571 +v -0.329 -0.140489 0.774308 +v -0.357572 -0.233122 0.551664 +v -0.349301 -0.0521301 0.560904 +v -0.360647 -0.141814 0.556564 +v -0.349272 -0.319879 0.544579 +v -0.272682 0.181352 0.189589 +v -0.221341 0.236481 0.293418 +v -0.170184 0.299829 0.20555 +v -0.23281 0.229543 0.110217 +v -0.227226 0.252859 0.204008 +v -0.20969 0.164574 0.478658 +v -0.153276 0.244216 0.39384 +v -0.271155 0.129527 0.366223 +v -0.215375 0.198113 0.382954 +v -0.187262 0.086887 0.854887 +v -0.134533 0.161682 0.796578 +v -0.198521 0.154682 0.689709 +v -0.24282 0.0875955 0.770725 +v -0.191558 0.132026 0.78245 +v -0.26179 0.101674 0.574769 +v -0.141545 0.196582 0.593509 +v -0.204392 0.157257 0.584394 +v -0.317321 0.0335117 0.454173 +v -0.327755 0.0676272 0.239516 +v -0.324726 0.0469262 0.344192 +v -0.253941 0.0157408 0.848168 +v -0.307072 0.0296092 0.675079 +v -0.289863 0.0225221 0.77107 +v -0.288174 0.116771 0.0639197 +v -0.190901 0.188016 -0.0300482 +v -0.239299 0.151564 0.0118342 +v -0.313467 0.030566 0.566851 +v -0.317033 0.0909783 0.142973 +v -0.150923 0.290686 0.0162651 +v -0.192003 0.257627 -0.114007 +v -0.150018 0.148066 -0.170355 +v -0.172619 0.221245 -0.0722104 +v -0.194068 0.37243 -0.0269037 +v -0.294876 0.383503 -0.203773 +v -0.274031 0.23831 -0.301318 +v -0.248629 0.311098 -0.153862 +v -0.324701 0.24108 -0.502727 +v -0.23911 0.14497 -0.502892 +v -0.196806 0.141274 -0.362924 +v -0.278147 0.181024 -0.423508 +v -0.318198 0.390558 -0.446528 +v -0.250979 0.388662 -0.601302 +v -0.263786 0.27805 -0.630217 +v -0.314593 0.32071 -0.563292 +v -0.238161 -0.677382 -0.0918856 +v -0.12828 -0.689708 0.0245746 +v -0.228165 -0.692422 0.147407 +v -0.338046 -0.680095 0.0309463 +v -0.229681 -0.733842 0.0266899 +v -0.291818 -0.690195 0.788408 +v -0.199176 -0.699686 0.68654 +v -0.107919 -0.696884 0.796995 +v -0.20056 -0.687393 0.898863 +v -0.198244 -0.736784 0.793448 +v -0.294592 -0.571581 0.678753 +v -0.307855 -0.55258 0.89062 +v -0.335563 -0.561971 0.78431 +v -0.102733 -0.558625 0.896274 +v -0.110927 -0.595142 0.691599 +v -0.0593616 -0.458076 0.795932 +v -0.0716769 -0.583028 0.796447 +v -0.203007 -0.591569 0.647127 +v -0.206666 -0.553636 0.930804 +v -0.352933 -0.520557 -0.0885122 +v -0.339121 -0.546516 0.150832 +v -0.383244 -0.532332 0.0297109 +v -0.132569 -0.534652 -0.0767316 +v -0.24402 -0.524662 -0.124285 +v -0.143499 -0.577512 0.141914 +v -0.241073 -0.571789 0.188527 +v -0.0964942 -0.434904 0.0342915 +v -0.0999951 -0.56397 0.0317575 +v -0.23851 0.520387 -0.0907886 +v -0.282894 0.56989 -0.257283 +v -0.271576 0.561647 -0.416318 +v -0.293195 0.482084 -0.276654 +v -0.32688 0.680784 -0.145207 +v -0.422878 0.632073 -0.168661 +v -0.321376 0.576724 -0.185683 +v -0.213045 0.609177 -0.109989 +v -0.326345 0.612341 -0.141546 +v -0.379053 0.63587 -0.283895 +v -0.312594 0.674309 -0.341185 +v -0.3154 0.606871 -0.278418 +v -0.460287 0.727236 -0.177367 +v -0.417773 0.731266 -0.288914 +v -0.454185 0.684351 -0.230461 +v -0.0922474 0.320203 0.127906 +v -0.0857686 0.301184 0.309872 +v -0.0910385 0.318251 0.216664 +v -0.0750596 0.22755 0.493766 +v -0.0710686 0.213115 0.708099 +v -0.0724773 0.219588 0.599773 +v -0.0670456 0.125156 0.886255 +v -0.0695062 0.18012 0.806775 +v -0.0661753 -0.432919 0.0879789 +v -0.0502685 -0.34467 -0.0665397 +v -0.056363 -0.399912 0.0126968 +v -0.0361117 -0.34665 0.891624 +v -0.0398588 -0.442711 0.714357 +v -0.0321101 -0.404726 0.804765 +v -0.0798727 0.262384 0.399618 +v -0.0874752 0.345901 0.0284499 +v -0.0858416 0.32349 0.0605597 +v -0.124296 0.487548 0.0340513 +v -0.105997 0.402715 0.0360884 +v -0.136392 0.50382 -0.556974 +v -0.214286 0.629383 -0.484754 +v -0.104733 0.755088 -0.444831 +v -0.121817 0.636846 -0.502061 +v -0.139278 0.340909 -0.661549 +v -0.138945 0.411476 -0.620153 +v -0.0622199 -0.197393 0.966789 +v -0.0501277 -0.274014 0.941915 +v -0.0553298 -0.185801 -0.197022 +v -0.050202 -0.275405 -0.142323 +v -0.0766662 0.0457919 -0.217551 +v -0.0655056 -0.0670069 -0.214493 +v -0.0933959 0.130309 -0.285229 +v -0.0838463 0.11062 -0.238883 +v -0.114603 0.104637 -0.445501 +v -0.102596 0.115199 -0.359834 +v -0.153665 0.185489 -0.611191 +v -0.137484 0.129002 -0.534091 +v -0.150371 0.262453 -0.657355 +v -0.0819636 0.707011 -0.0978848 +v -0.128934 0.593549 -0.0276065 +v -0.230899 0.696193 -0.415496 +v -0.2462 0.632058 -0.451998 +v -0.199042 0.926972 -0.236591 +v -0.155831 0.94592 -0.253016 +v -0.182289 0.937359 -0.304334 +v -0.2255 0.918412 -0.287909 +v -0.198381 0.950853 -0.26973 +v -0.204856 0.767832 -0.258627 +v -0.198135 0.804412 -0.300184 +v -0.162591 0.796641 -0.337706 +v -0.195536 0.768708 -0.323732 +v -0.190344 0.780419 -0.305321 +v -0.18859 0.771476 -0.215131 +v -0.12548 0.786281 -0.190531 +v -0.102838 0.815304 -0.21903 +v -0.158595 0.817014 -0.220186 +v -0.14521 0.793415 -0.208712 +v -0.134346 0.834135 -0.324328 +v -0.0911506 0.822276 -0.28966 +v -0.113814 0.810725 -0.339255 +v -0.12321 0.811864 -0.327105 +v -0.0956349 0.846841 -0.248877 +v -0.0699464 0.823757 -0.248502 +v -0.0836698 0.824545 -0.249204 +v -0.246443 0.756953 -0.257453 +v -0.24364 0.757848 -0.207433 +v -0.21289 0.762245 -0.22883 +v -0.249966 0.723503 -0.332259 +v -0.355751 0.762428 -0.238497 +v -0.32003 0.739642 -0.304714 +v -0.181848 0.741315 -0.180043 +v -0.328516 0.741977 -0.181175 +v -0.0499681 0.812176 -0.199395 +v -0.0788354 0.774284 -0.158189 +v -0.168022 0.778755 -0.386065 +v -0.0505691 0.828853 -0.304368 +v -0.0897195 0.811796 -0.373587 +v -0.0404745 0.828353 -0.247459 +v -0.211302 0.744371 -0.365196 +v -0.216553 0.856661 -0.251136 +v -0.193702 0.87269 -0.329392 +v -0.218551 0.860755 -0.297102 +v -0.126841 0.897388 -0.285836 +v -0.157513 0.887986 -0.320358 +v -0.138938 0.890583 -0.222912 +v -0.120161 0.900194 -0.247801 +v -0.181137 0.872948 -0.224154 +v -0.218865 -0.458568 0.419816 +v -0.156751 -0.485651 0.517662 +v -0.106299 -0.467348 0.612794 +v -0.177713 -0.464461 0.527871 +v -0.0640756 -0.481225 0.60015 +v -0.0486808 -0.462533 0.655449 +v -0.0674919 -0.459184 0.218582 +v -0.129769 -0.445891 0.210992 +v -0.0638357 -0.444618 0.15006 +v -0.160168 -0.471758 0.313909 +v -0.192938 -0.45045 0.307624 +v -0.106971 -0.518553 0.416032 +v -0.0913755 -0.507594 0.518132 +v -0.0906862 -0.492986 0.310407 +v -0.152295 -0.0598695 0.957881 +v -0.109744 -0.0412763 0.976341 +v -0.148938 -0.0188178 0.950827 +v -0.133131 -0.0374762 0.965091 +v -0.214922 -0.0472768 0.917853 +v -0.129144 -0.123186 0.961976 +v -0.202946 -0.113321 0.930645 +v -0.124777 0.0448234 0.926767 +v -0.189431 0.0176502 0.907717 +v -0.0541294 -0.000582154 0.980957 +v -0.0627521 0.0592134 0.940397 +v -0.0544734 -0.0758718 0.989219 +v -0.0631528 -0.123094 0.979468 +v -0.0717681 -0.0690106 0.994894 +v -0.052795 -0.0725924 1.01945 +v -0.0716307 -0.0432 1.00541 +v -0.0809297 -0.0558501 0.997263 +v -0.0297219 -0.0653048 1.04059 +v -0.0406958 -0.0395224 1.01839 +v -0.0297587 -0.0908237 1.02001 +v -0.0407812 -0.0765567 1.00299 +v -0.0264068 -0.0851806 1.03686 +v 0.313121 -0.40468 0.424303 +v 0.289638 -0.411984 0.363044 +v 0.317818 -0.392423 0.305485 +v 0.341299 -0.375944 0.366232 +v 0.317288 -0.397295 0.364448 +v 0.23935 -0.43199 0.361842 +v 0.251544 -0.422435 0.302332 +v 0.261632 -0.427221 0.422701 +v 0.262332 -0.422664 0.362137 +v 0.2099 -0.457622 0.202318 +v 0.274846 -0.418754 0.252658 +v 0.194817 -0.437402 0.239358 +v 0.231211 -0.430966 0.245486 +v 0.350284 -0.364453 0.244783 +v 0.312495 -0.42258 0.208415 +v 0.316601 -0.396416 0.250199 +v 0.328162 -0.387696 0.483083 +v 0.291362 -0.413379 0.536815 +v 0.275025 -0.421949 0.482067 +v 0.303426 -0.408222 0.482265 +v 0.26979 -0.455493 0.624003 +v 0.236564 -0.444228 0.584476 +v 0.315111 -0.397679 0.592146 +v 0.280089 -0.425608 0.586435 +v 0.156119 -0.458526 0.595789 +v 0.222989 -0.439421 0.53835 +v 0.164011 -0.483033 0.631406 +v 0.191143 -0.453861 0.591118 +v 0.225399 -0.440193 0.480871 +v 0.247502 -0.431674 0.481825 +v 0.300873 -0.335808 -0.11045 +v 0.23546 -0.269794 -0.12322 +v 0.283535 -0.198083 -0.11242 +v 0.339519 -0.257182 -0.0802831 +v 0.292915 -0.260195 -0.110308 +v 0.119478 -0.295776 -0.113872 +v 0.173106 -0.230478 -0.142628 +v 0.176383 -0.34915 -0.10631 +v 0.174532 -0.282877 -0.121531 +v 0.172014 -0.141551 -0.170002 +v 0.224047 -0.163495 -0.142015 +v 0.123113 -0.206388 -0.170045 +v 0.171621 -0.184999 -0.160037 +v 0.318497 -0.140059 -0.0746981 +v 0.26898 -0.103901 -0.112945 +v 0.274851 -0.146856 -0.114171 +v 0.307808 -0.00318692 -0.0317095 +v 0.269878 -0.0318881 -0.0928838 +v 0.232462 0.00608204 -0.106821 +v 0.273281 0.0420733 -0.0438498 +v 0.272342 0.00331308 -0.0724007 +v 0.222802 -0.0788504 -0.141507 +v 0.308256 -0.0631453 -0.0619102 +v 0.26804 -0.0666021 -0.106124 +v 0.131964 -0.111136 -0.188613 +v 0.182883 -0.0457092 -0.157469 +v 0.176218 -0.0952439 -0.168768 +v 0.199052 0.0623656 -0.105989 +v 0.148915 0.00578811 -0.165362 +v 0.190658 0.0074224 -0.137241 +v 0.30851 -0.340088 0.875405 +v 0.263105 -0.289222 0.900577 +v 0.214141 -0.334681 0.919903 +v 0.26887 -0.396352 0.909752 +v 0.266995 -0.336923 0.904292 +v 0.253262 -0.209214 0.897882 +v 0.215216 -0.244729 0.920604 +v 0.293898 -0.252639 0.867139 +v 0.258195 -0.248301 0.898482 +v 0.126656 -0.240414 0.945024 +v 0.164801 -0.284207 0.93026 +v 0.172003 -0.202637 0.93974 +v 0.169955 -0.242358 0.935335 +v 0.149733 -0.3934 0.920339 +v 0.104904 -0.328487 0.922781 +v 0.15673 -0.332639 0.924128 +v 0.358457 -0.200112 -0.0267162 +v 0.380901 -0.277243 0.032671 +v 0.375987 -0.340814 -0.0337268 +v 0.367895 -0.263853 -0.0306343 +v 0.342627 -0.106257 -0.015664 +v 0.369603 -0.166291 0.0406057 +v 0.349444 -0.148083 -0.0217878 +v 0.385185 -0.214712 0.178025 +v 0.382253 -0.237542 0.105277 +v 0.379025 -0.149836 0.112764 +v 0.38088 -0.190046 0.108528 +v 0.379176 -0.364086 0.102343 +v 0.375596 -0.311145 0.175939 +v 0.381399 -0.294389 0.103665 +v 0.363729 -0.333817 0.306674 +v 0.367965 -0.307651 0.370431 +v 0.351404 -0.354331 0.427814 +v 0.35769 -0.345276 0.36828 +v 0.379525 -0.278609 0.243679 +v 0.369702 -0.323364 0.243084 +v 0.386398 -0.194374 0.247084 +v 0.380079 -0.252636 0.309953 +v 0.384425 -0.235652 0.245143 +v 0.366553 -0.273812 0.432936 +v 0.376188 -0.22098 0.374406 +v 0.373629 -0.265433 0.372527 +v 0.363531 -0.0923241 0.440867 +v 0.375379 -0.132559 0.377674 +v 0.376221 -0.0834201 0.319025 +v 0.359143 -0.0454376 0.384517 +v 0.369754 -0.0887861 0.380331 +v 0.383633 -0.167556 0.313214 +v 0.370145 -0.182621 0.437038 +v 0.377148 -0.176656 0.375911 +v 0.386429 -0.137312 0.183762 +v 0.385994 -0.115397 0.252169 +v 0.387444 -0.154662 0.24911 +v 0.369328 -0.0337485 0.265179 +v 0.380073 -0.0641595 0.195141 +v 0.380479 -0.0754649 0.257209 +v 0.331012 0.0171674 0.0389716 +v 0.357964 -0.0317511 0.0731655 +v 0.338487 -0.0443826 0.00235778 +v 0.336366 -0.0157204 0.0175237 +v 0.37698 -0.0821329 0.123634 +v 0.363023 -0.0117289 0.147082 +v 0.372551 -0.0487428 0.133083 +v 0.363023 -0.0919062 0.0524717 +v 0.378431 -0.114848 0.117331 +v 0.339774 -0.073126 -0.00816016 +v 0.336842 -0.40362 0.835552 +v 0.340911 -0.350598 0.77666 +v 0.324728 -0.29766 0.82767 +v 0.331904 -0.344898 0.831349 +v 0.334716 -0.360298 0.654176 +v 0.340676 -0.308781 0.717453 +v 0.335933 -0.414813 0.716014 +v 0.339263 -0.356428 0.715872 +v 0.338685 -0.226798 0.720092 +v 0.331546 -0.262105 0.774295 +v 0.344609 -0.271269 0.661246 +v 0.339619 -0.266826 0.718796 +v 0.311718 -0.219243 0.822794 +v 0.317327 -0.257308 0.824743 +v 0.282982 -0.0932074 0.86163 +v 0.309753 -0.137557 0.821642 +v 0.32815 -0.0982774 0.774453 +v 0.304296 -0.0566442 0.818942 +v 0.309064 -0.0966912 0.82069 +v 0.328063 -0.182474 0.773912 +v 0.284251 -0.173813 0.864211 +v 0.309915 -0.178867 0.822052 +v 0.348891 -0.186539 0.666645 +v 0.342261 -0.141944 0.72292 +v 0.340465 -0.184932 0.72153 +v 0.335097 -0.0554519 0.724795 +v 0.349859 -0.0980743 0.670701 +v 0.341372 -0.0985454 0.724072 +v 0.350887 -0.0507559 0.502911 +v 0.3576 -0.096426 0.55865 +v 0.364199 -0.140124 0.498352 +v 0.360004 -0.0947951 0.500374 +v 0.356689 -0.14249 0.613383 +v 0.34723 -0.0531297 0.617509 +v 0.354744 -0.0974434 0.615492 +v 0.35206 -0.232064 0.608144 +v 0.360088 -0.187609 0.554338 +v 0.355112 -0.187591 0.610995 +v 0.363053 -0.232129 0.494204 +v 0.364779 -0.186112 0.496433 +v 0.354812 -0.320109 0.488079 +v 0.338808 -0.358381 0.541229 +v 0.344689 -0.357576 0.485189 +v 0.354746 -0.277669 0.548235 +v 0.360332 -0.277544 0.491251 +v 0.344841 -0.317709 0.600763 +v 0.349578 -0.27523 0.604646 +v 0.335024 -0.360119 0.596759 +v 0.253104 0.203435 0.118078 +v 0.22988 0.247545 0.157829 +v 0.250535 0.219935 0.200112 +v 0.270021 0.183796 0.151405 +v 0.251096 0.217673 0.158942 +v 0.173937 0.295795 0.151795 +v 0.201028 0.279793 0.204606 +v 0.208445 0.255016 0.0997486 +v 0.204742 0.274117 0.153286 +v 0.19325 0.264928 0.298974 +v 0.224342 0.248556 0.249012 +v 0.166122 0.2964 0.255682 +v 0.197174 0.276415 0.252836 +v 0.273837 0.172969 0.230557 +v 0.247672 0.201215 0.285394 +v 0.249328 0.213762 0.242242 +v 0.269047 0.115689 0.415447 +v 0.243641 0.166107 0.375362 +v 0.21248 0.178956 0.429644 +v 0.238934 0.137098 0.472953 +v 0.241351 0.149381 0.423 +v 0.218341 0.218477 0.337805 +v 0.272811 0.14513 0.319056 +v 0.245762 0.184358 0.32963 +v 0.157504 0.266542 0.348704 +v 0.185529 0.224498 0.389084 +v 0.189327 0.246276 0.344018 +v 0.178799 0.187723 0.48375 +v 0.149393 0.222637 0.439843 +v 0.181979 0.203634 0.435289 +v 0.235856 0.0765799 0.805621 +v 0.217701 0.11212 0.775527 +v 0.188626 0.112308 0.821548 +v 0.212012 0.0755801 0.841201 +v 0.213324 0.0965225 0.811853 +v 0.226814 0.130295 0.684497 +v 0.195015 0.146226 0.738197 +v 0.249108 0.0961373 0.728207 +v 0.222367 0.12354 0.732548 +v 0.136442 0.179619 0.750387 +v 0.163968 0.1484 0.789706 +v 0.169138 0.174847 0.695193 +v 0.166543 0.164739 0.744396 +v 0.159999 0.0987976 0.865373 +v 0.13257 0.138159 0.837992 +v 0.161693 0.126272 0.830304 +v 0.207042 0.158534 0.530777 +v 0.233686 0.131486 0.579487 +v 0.264402 0.101968 0.520397 +v 0.236433 0.132176 0.525634 +v 0.143538 0.198754 0.539805 +v 0.173735 0.178964 0.589175 +v 0.176115 0.180806 0.535582 +v 0.201599 0.157166 0.637907 +v 0.139858 0.195421 0.647569 +v 0.171473 0.178284 0.642915 +v 0.258575 0.102323 0.628487 +v 0.230534 0.131902 0.632959 +v 0.34742 0.00319315 0.333602 +v 0.320929 0.0389878 0.398635 +v 0.337836 -0.00655256 0.448549 +v 0.342419 -0.00261151 0.390867 +v 0.351215 0.0204208 0.221415 +v 0.327429 0.0566863 0.291075 +v 0.350974 0.0108683 0.277027 +v 0.298744 0.0894187 0.355449 +v 0.30121 0.115034 0.257783 +v 0.300703 0.102007 0.305644 +v 0.293232 0.0711038 0.460405 +v 0.296022 0.0786559 0.407077 +v 0.328122 -0.0112347 0.673608 +v 0.30029 0.0266191 0.725054 +v 0.308985 -0.0158364 0.772679 +v 0.320738 -0.0133772 0.724898 +v 0.267341 0.0573644 0.769829 +v 0.281859 0.0674534 0.67711 +v 0.275748 0.0634772 0.725933 +v 0.24017 0.0457536 0.838346 +v 0.274888 0.0183198 0.812257 +v 0.256292 0.0501447 0.807253 +v 0.268509 -0.018423 0.854481 +v 0.291897 -0.0177918 0.816142 +v 0.181753 0.135303 -0.0848536 +v 0.213035 0.170022 -0.00953204 +v 0.239418 0.102195 -0.0351077 +v 0.20757 0.117335 -0.0616182 +v 0.236523 0.195781 0.0609139 +v 0.190293 0.237055 0.0258931 +v 0.212268 0.218116 0.0448664 +v 0.276588 0.155574 0.0981021 +v 0.265278 0.133372 0.0353559 +v 0.258648 0.173682 0.0768666 +v 0.298292 0.0729821 0.0271766 +v 0.270541 0.0874645 -0.00640695 +v 0.311113 0.0304905 0.622016 +v 0.288873 0.0678482 0.57056 +v 0.286019 0.0682635 0.624906 +v 0.334099 -0.00961306 0.563635 +v 0.332102 -0.0102295 0.619617 +v 0.315185 0.0311388 0.510574 +v 0.335537 -0.00863692 0.506376 +v 0.291063 0.0681481 0.515313 +v 0.33595 0.0447295 0.115485 +v 0.324423 0.0791082 0.189745 +v 0.346277 0.0318576 0.16704 +v 0.305188 0.103086 0.100412 +v 0.320025 0.0585873 0.0683354 +v 0.295396 0.137443 0.169109 +v 0.288286 0.145212 0.129998 +v 0.299573 0.127115 0.211987 +v 0.149034 0.119255 -0.152767 +v 0.167034 0.18223 -0.122798 +v 0.177314 0.204818 -0.0510199 +v 0.168725 0.158519 -0.103729 +v 0.194921 0.221357 -0.173014 +v 0.177164 0.238112 -0.093383 +v 0.160058 0.168229 -0.195838 +v 0.175228 0.201681 -0.146613 +v 0.149721 0.3008 -0.00470029 +v 0.167426 0.259011 -0.0241111 +v 0.17918 0.290497 -0.0609743 +v 0.168557 0.27236 -0.0447148 +v 0.159665 0.285267 0.0452783 +v 0.175009 0.248965 0.00116269 +v 0.233098 0.21084 -0.267301 +v 0.26422 0.274293 -0.228207 +v 0.21819 0.281995 -0.133552 +v 0.227725 0.245742 -0.199837 +v 0.314639 0.343639 -0.292523 +v 0.27622 0.344814 -0.176785 +v 0.306638 0.268641 -0.338166 +v 0.294985 0.306469 -0.259249 +v 0.21453 0.407775 -0.0317089 +v 0.225521 0.344757 -0.0845003 +v 0.267222 0.417414 -0.116444 +v 0.249809 0.379204 -0.0978893 +v 0.173263 0.341693 -0.0238379 +v 0.200073 0.314908 -0.0732157 +v 0.192666 0.159829 -0.308601 +v 0.240251 0.15911 -0.387649 +v 0.279797 0.207117 -0.366981 +v 0.238726 0.181983 -0.331175 +v 0.213461 0.12942 -0.465108 +v 0.265715 0.160342 -0.469212 +v 0.195451 0.128497 -0.407372 +v 0.233311 0.142158 -0.432916 +v 0.305787 0.218563 -0.547441 +v 0.307399 0.208213 -0.46356 +v 0.259412 0.1698 -0.542722 +v 0.290901 0.186126 -0.509143 +v 0.330786 0.26947 -0.445487 +v 0.31171 0.235804 -0.406418 +v 0.32675 0.280027 -0.535933 +v 0.321008 0.352655 -0.511417 +v 0.329541 0.345256 -0.410956 +v 0.333345 0.309542 -0.480189 +v 0.272516 0.239582 -0.609537 +v 0.296456 0.295786 -0.60247 +v 0.307295 0.256707 -0.578835 +v 0.240548 0.35766 -0.62796 +v 0.289278 0.358786 -0.584918 +v 0.246645 0.312827 -0.640337 +v 0.274305 0.331026 -0.617491 +v 0.295245 0.436762 -0.484187 +v 0.255976 0.429549 -0.563622 +v 0.295399 0.395443 -0.540067 +v 0.335047 -0.66747 -0.026194 +v 0.288313 -0.71953 0.0292002 +v 0.233667 -0.718383 -0.0394682 +v 0.288912 -0.666279 -0.0831981 +v 0.288523 -0.704927 -0.0329901 +v 0.276152 -0.679477 0.14116 +v 0.227442 -0.724741 0.0933852 +v 0.327044 -0.674066 0.0872825 +v 0.281161 -0.710704 0.0910758 +v 0.136631 -0.686121 0.0787634 +v 0.172796 -0.723594 0.0247169 +v 0.182766 -0.687312 0.135767 +v 0.176191 -0.716151 0.0857864 +v 0.187443 -0.669698 -0.0818819 +v 0.136552 -0.67511 -0.0280042 +v 0.179633 -0.708233 -0.0350267 +v 0.2461 -0.678205 0.889508 +v 0.198896 -0.723335 0.85193 +v 0.248642 -0.724519 0.790895 +v 0.288217 -0.679435 0.838379 +v 0.246831 -0.711912 0.845432 +v 0.113033 -0.684171 0.844965 +v 0.148661 -0.727347 0.795626 +v 0.15574 -0.680004 0.892121 +v 0.151829 -0.713932 0.849146 +v 0.157976 -0.694713 0.696986 +v 0.198408 -0.728532 0.734591 +v 0.115859 -0.693483 0.748115 +v 0.153047 -0.720555 0.741401 +v 0.283587 -0.684515 0.738785 +v 0.24088 -0.688682 0.691628 +v 0.244434 -0.716483 0.736358 +v 0.342489 -0.483419 0.78141 +v 0.32282 -0.565952 0.726198 +v 0.30391 -0.498066 0.668956 +v 0.331237 -0.488983 0.719836 +v 0.31354 -0.474577 0.887895 +v 0.331331 -0.556659 0.842236 +v 0.337524 -0.478425 0.840051 +v 0.319732 -0.633454 0.786428 +v 0.294197 -0.618974 0.884469 +v 0.315639 -0.625673 0.839496 +v 0.28283 -0.632563 0.691009 +v 0.308326 -0.632734 0.733956 +v 0.0634711 -0.431765 0.851899 +v 0.0654567 -0.515878 0.79543 +v 0.0774719 -0.570173 0.85133 +v 0.0969194 -0.478778 0.897495 +v 0.0707234 -0.496321 0.852392 +v 0.106684 -0.534636 0.682874 +v 0.0832655 -0.591144 0.740087 +v 0.069956 -0.47422 0.735292 +v 0.0773661 -0.528459 0.735056 +v 0.0840444 -0.64607 0.797118 +v 0.119063 -0.647679 0.702012 +v 0.0943475 -0.648249 0.746058 +v 0.112805 -0.624088 0.888986 +v 0.0899111 -0.634521 0.847274 +v 0.252371 -0.581833 0.652832 +v 0.208287 -0.52835 0.637223 +v 0.260651 -0.513618 0.642398 +v 0.20034 -0.651356 0.660475 +v 0.244653 -0.641994 0.666514 +v 0.15335 -0.595644 0.66033 +v 0.156436 -0.650983 0.672896 +v 0.153645 -0.534978 0.650489 +v 0.149543 -0.554429 0.922812 +v 0.209392 -0.47177 0.928314 +v 0.147798 -0.472236 0.922294 +v 0.203436 -0.628169 0.923071 +v 0.153584 -0.625261 0.914716 +v 0.262868 -0.552296 0.920108 +v 0.253551 -0.622939 0.912658 +v 0.267734 -0.472455 0.917082 +v 0.348561 -0.464054 0.158716 +v 0.369537 -0.538419 0.0961211 +v 0.387436 -0.440321 0.0296682 +v 0.376444 -0.45013 0.0999599 +v 0.368236 -0.614976 0.0306267 +v 0.325558 -0.615423 0.139592 +v 0.354786 -0.614851 0.0904298 +v 0.340742 -0.597899 -0.0798229 +v 0.378455 -0.525308 -0.0356201 +v 0.364087 -0.605614 -0.0296813 +v 0.354445 -0.427851 -0.0878125 +v 0.380964 -0.432504 -0.0361787 +v 0.243518 -0.430642 -0.121062 +v 0.182701 -0.527846 -0.109937 +v 0.12704 -0.448099 -0.0735785 +v 0.179139 -0.436248 -0.106528 +v 0.304443 -0.521287 -0.117606 +v 0.305291 -0.427537 -0.115465 +v 0.241923 -0.609859 -0.117359 +v 0.296601 -0.602967 -0.109127 +v 0.141316 -0.607217 -0.0730372 +v 0.186967 -0.607615 -0.104287 +v 0.148115 -0.512563 0.149929 +v 0.188536 -0.577394 0.174934 +v 0.25113 -0.502745 0.197094 +v 0.196177 -0.511769 0.183546 +v 0.233064 -0.638226 0.175543 +v 0.145237 -0.635178 0.13052 +v 0.185474 -0.638484 0.162245 +v 0.293784 -0.559568 0.181063 +v 0.282371 -0.626877 0.167977 +v 0.304357 -0.484216 0.189956 +v 0.105712 -0.548895 -0.0268432 +v 0.0997946 -0.492468 0.0352712 +v 0.0953701 -0.405611 -0.0214782 +v 0.102107 -0.469936 -0.0239275 +v 0.106751 -0.633108 0.0275567 +v 0.114552 -0.619641 -0.0267392 +v 0.113288 -0.573273 0.0910993 +v 0.117988 -0.635837 0.0828 +v 0.112515 -0.451919 0.0935688 +v 0.115559 -0.506404 0.0968639 +v 0.271184 0.525759 -0.460079 +v 0.285353 0.520853 -0.361551 +v 0.308658 0.43336 -0.368305 +v 0.291391 0.478507 -0.418527 +v 0.278055 0.600765 -0.320108 +v 0.282577 0.535883 -0.259681 +v 0.267 0.601931 -0.388185 +v 0.278645 0.563976 -0.33172 +v 0.247008 0.54474 -0.114114 +v 0.271214 0.498067 -0.167977 +v 0.277875 0.55689 -0.190965 +v 0.271665 0.531425 -0.180446 +v 0.298509 0.427522 -0.236282 +v 0.235335 0.485531 -0.0647615 +v 0.272045 0.45855 -0.143225 +v 0.317802 0.38717 -0.32759 +v 0.192626 0.647576 -0.125774 +v 0.267679 0.610284 -0.129549 +v 0.326452 0.645309 -0.138504 +v 0.252363 0.682167 -0.15033 +v 0.258116 0.645451 -0.13607 +v 0.289471 0.569074 -0.162469 +v 0.324346 0.587714 -0.15672 +v 0.239082 0.578957 -0.111996 +v 0.279361 0.583208 -0.137022 +v 0.401583 0.612716 -0.19176 +v 0.380321 0.61857 -0.152413 +v 0.35448 0.589213 -0.202564 +v 0.367842 0.597467 -0.17194 +v 0.388682 0.680406 -0.144893 +v 0.430349 0.658277 -0.154382 +v 0.384792 0.647908 -0.143704 +v 0.294439 0.591849 -0.266039 +v 0.318359 0.584666 -0.230094 +v 0.294318 0.572729 -0.209871 +v 0.28588 0.662049 -0.349089 +v 0.312606 0.638668 -0.319124 +v 0.290372 0.624108 -0.317788 +v 0.375881 0.662505 -0.310821 +v 0.343967 0.620068 -0.286887 +v 0.345079 0.681327 -0.333156 +v 0.34177 0.649107 -0.318477 +v 0.380591 0.614582 -0.245535 +v 0.347363 0.598425 -0.244565 +v 0.393743 0.706765 -0.3123 +v 0.444197 0.711394 -0.263256 +v 0.419572 0.658706 -0.261892 +v 0.412958 0.685943 -0.291128 +v 0.452589 0.744444 -0.206816 +v 0.471552 0.708579 -0.199184 +v 0.43241 0.746455 -0.258303 +v 0.460792 0.730831 -0.231063 +v 0.447289 0.655956 -0.196803 +v 0.447397 0.702392 -0.15815 +v 0.460337 0.681448 -0.17325 +v 0.417303 0.633713 -0.225256 +v 0 0.324094 0.180165 +v 0.0462436 0.320164 0.221337 +v 0.0925539 0.320139 0.170699 +v 0.0467382 0.325284 0.136739 +v 0.0468991 0.323707 0.17766 +v 0.0434892 0.30185 0.311934 +v 0.0886491 0.312396 0.263435 +v 0 0.312812 0.267846 +v 0.0450231 0.313323 0.266515 +v 0.132936 0.312061 0.210485 +v 0.125628 0.296564 0.306829 +v 0.129481 0.307575 0.259519 +v 0.135299 0.30832 0.112598 +v 0.13572 0.310986 0.159838 +v 0 0.228164 0.547798 +v 0.0364517 0.2252 0.601479 +v 0.0735327 0.221293 0.545706 +v 0.0377827 0.232065 0.495188 +v 0.0369868 0.226526 0.54726 +v 0.0357781 0.218679 0.710249 +v 0.0717153 0.218255 0.65442 +v 0 0.22586 0.657001 +v 0.0360809 0.22396 0.656319 +v 0.107651 0.210086 0.597079 +v 0.105384 0.203917 0.704755 +v 0.106456 0.208743 0.651454 +v 0.111325 0.219111 0.491389 +v 0.109197 0.212143 0.543201 +v 0 0.20702 0.762635 +v 0.035033 0.18494 0.809623 +v 0.0703592 0.199987 0.759265 +v 0.0354469 0.205232 0.761742 +v 0.0337403 0.129119 0.889852 +v 0.0684286 0.154761 0.849486 +v 0 0.160642 0.853891 +v 0.0344822 0.159128 0.852718 +v 0.10286 0.172311 0.802347 +v 0.0994805 0.118705 0.880737 +v 0.101303 0.147713 0.844481 +v 0.104202 0.191409 0.755412 +v 0 -0.422236 0.0297518 +v 0.0290027 -0.401336 0.00260959 +v 0.0619855 -0.419454 0.0516405 +v 0.032544 -0.433336 0.0684456 +v 0.0312142 -0.420036 0.03584 +v 0.024587 -0.350255 -0.0669927 +v 0.0524989 -0.374486 -0.0268658 +v 0 -0.38147 -0.0341137 +v 0.0265726 -0.377866 -0.0315624 +v 0.0804386 -0.407577 0.025012 +v 0.0781392 -0.343402 -0.0680291 +v 0.0771327 -0.378765 -0.022981 +v 0.101981 -0.43742 0.118873 +v 0.0918712 -0.426509 0.0746889 +v 0 -0.369655 0.853165 +v 0.0162142 -0.396858 0.808469 +v 0.032518 -0.377955 0.851217 +v 0.0173499 -0.340897 0.891348 +v 0.0161103 -0.370733 0.852319 +v 0.0190571 -0.436735 0.723869 +v 0.0352263 -0.426311 0.757202 +v 0 -0.417485 0.766409 +v 0.0173127 -0.418962 0.764189 +v 0.0473693 -0.423079 0.799815 +v 0.0641499 -0.454693 0.696538 +v 0.0543417 -0.44245 0.745122 +v 0.0576974 -0.360469 0.893822 +v 0.0495204 -0.395304 0.851292 +v 0 0.284012 0.356829 +v 0.0403407 0.264584 0.4009 +v 0.08278 0.283223 0.354838 +v 0.0418935 0.284411 0.356338 +v 0.0772361 0.242537 0.445498 +v 0 0.24666 0.447191 +v 0.0389355 0.245943 0.446792 +v 0.117787 0.25622 0.397308 +v 0.114267 0.235186 0.443214 +v 0.121652 0.278062 0.352302 +v 0 0.337744 0.0495788 +v 0.0441574 0.329119 0.0693112 +v 0.084777 0.331134 0.0392602 +v 0.0448664 0.351036 0.0368917 +v 0.0436281 0.336529 0.047541 +v 0.0891709 0.320583 0.0906503 +v 0 0.327327 0.102505 +v 0.0455092 0.326229 0.0998335 +v 0.122579 0.311429 0.0436831 +v 0.129137 0.308034 0.0737864 +v 0.125569 0.33518 0.0110101 +v 0.120968 0.319807 0.0225689 +v 0 0.450581 0.0596803 +v 0.0541098 0.40816 0.0483714 +v 0.116503 0.442256 0.0399308 +v 0.0632284 0.496693 0.0522852 +v 0.0593708 0.448955 0.0551193 +v 0.0954346 0.370179 0.029827 +v 0 0.37634 0.0420973 +v 0.0488177 0.375217 0.039732 +v 0.153438 0.391277 0.0121446 +v 0.13765 0.35956 0.0095734 +v 0.18104 0.470039 0.00485434 +v 0.169159 0.42866 0.0126096 +v 0 0.570891 -0.534672 +v 0.0626485 0.640189 -0.506046 +v 0.130136 0.568004 -0.528764 +v 0.0692761 0.505582 -0.562042 +v 0.0664738 0.570216 -0.533525 +v 0.0536794 0.762368 -0.447664 +v 0.113201 0.701726 -0.474505 +v 0 0.709164 -0.479338 +v 0.0582379 0.707055 -0.477971 +v 0.199905 0.685497 -0.462496 +v 0.174025 0.632377 -0.495223 +v 0.150533 0.744043 -0.44196 +v 0.161614 0.694175 -0.469576 +v 0.199187 0.49892 -0.545668 +v 0.232047 0.565216 -0.501918 +v 0.188173 0.564066 -0.51907 +v 0 0.376475 -0.648788 +v 0.0711811 0.413275 -0.623292 +v 0.138282 0.375681 -0.645424 +v 0.0726958 0.340957 -0.664799 +v 0.0716465 0.376815 -0.648416 +v 0.138821 0.452917 -0.589054 +v 0 0.45452 -0.593995 +v 0.0706181 0.454733 -0.593233 +v 0.199873 0.404748 -0.612935 +v 0.202195 0.446614 -0.579567 +v 0.193634 0.339499 -0.652866 +v 0.194895 0.370921 -0.637938 +v 0 -0.233549 0.959877 +v 0.0240468 -0.271835 0.943264 +v 0.057123 -0.235922 0.956621 +v 0.0306399 -0.195728 0.970285 +v 0.0277858 -0.234252 0.959139 +v 0.0425527 -0.311463 0.921053 +v 0 -0.306916 0.921405 +v 0.0202817 -0.307657 0.921165 +v 0.0802769 -0.277764 0.939515 +v 0.0688023 -0.319918 0.921674 +v 0.0956803 -0.199455 0.960676 +v 0.0895627 -0.238122 0.952018 +v 0 -0.322733 -0.103397 +v 0.0238367 -0.283103 -0.139843 +v 0.049547 -0.311956 -0.105817 +v 0.023709 -0.319134 -0.103998 +v 0.0267024 -0.190718 -0.197111 +v 0.0521008 -0.23408 -0.173683 +v 0 -0.242929 -0.170415 +v 0.0248684 -0.240765 -0.171792 +v 0.0816243 -0.264189 -0.144485 +v 0.0878074 -0.176513 -0.193941 +v 0.0840611 -0.222685 -0.173847 +v 0.0796433 -0.304819 -0.108871 +v 0 -0.132321 -0.213832 +v 0.0321871 -0.0691596 -0.222731 +v 0.0599751 -0.128388 -0.209467 +v 0.0292367 -0.131565 -0.213064 +v 0.0381981 0.0419961 -0.235526 +v 0.0713902 -0.00682142 -0.215572 +v 0 -0.00964083 -0.233734 +v 0.035269 -0.00935459 -0.229192 +v 0.101087 -0.0620719 -0.200364 +v 0.115674 0.055105 -0.187883 +v 0.109216 -0.00036684 -0.192884 +v 0.0937169 -0.121882 -0.201748 +v 0 0.0779149 -0.251636 +v 0.0428926 0.103386 -0.257977 +v 0.0803711 0.0844567 -0.225271 +v 0.0406901 0.0790388 -0.244814 +v 0.0470212 0.120443 -0.299626 +v 0.0884331 0.12573 -0.258533 +v 0 0.114136 -0.282485 +v 0.0449537 0.11665 -0.27594 +v 0.120922 0.124855 -0.209363 +v 0.138478 0.148595 -0.265069 +v 0.128964 0.142918 -0.232488 +v 0.118034 0.096215 -0.193935 +v 0 0.113801 -0.334664 +v 0.0518947 0.108853 -0.365753 +v 0.097999 0.124878 -0.319976 +v 0.0492429 0.116377 -0.329956 +v 0.0595919 0.101024 -0.449026 +v 0.107541 0.107031 -0.401861 +v 0 0.101009 -0.408276 +v 0.0552525 0.102268 -0.405836 +v 0.150911 0.126322 -0.356271 +v 0.16045 0.112915 -0.441079 +v 0.153901 0.116281 -0.399697 +v 0.145782 0.140078 -0.308863 +v 0 0.109177 -0.495145 +v 0.0709982 0.126709 -0.538642 +v 0.125551 0.112279 -0.490196 +v 0.065189 0.10952 -0.494143 +v 0.0790718 0.182988 -0.615599 +v 0.1475 0.153854 -0.575332 +v 0 0.151226 -0.580589 +v 0.0759743 0.151547 -0.579976 +v 0.194944 0.134806 -0.523346 +v 0.219301 0.191387 -0.600189 +v 0.210129 0.15949 -0.56385 +v 0.176258 0.119186 -0.482359 +v 0 0.219576 -0.64342 +v 0.0775425 0.260206 -0.661002 +v 0.154044 0.222564 -0.638941 +v 0.0792455 0.219987 -0.642965 +v 0.144378 0.302534 -0.665208 +v 0 0.300969 -0.668909 +v 0.0750102 0.301309 -0.668637 +v 0.213772 0.26767 -0.647803 +v 0.202463 0.304851 -0.656009 +v 0.21995 0.228648 -0.628685 +v 0.126715 0.537337 0.0111468 +v 0.0606884 0.60785 0.00104436 +v 0 0.554408 0.0408567 +v 0.0643107 0.550463 0.0321785 +v 0.191637 0.550233 -0.0477524 +v 0.185308 0.513743 -0.0172354 +v 0.171165 0.605799 -0.0764289 +v 0.209701 0.569968 -0.0807895 +v 0.126096 0.69557 -0.127071 +v 0.0987466 0.656786 -0.062447 +v 0.142824 0.650926 -0.0969906 +v 0 0.672219 -0.0228265 +v 0.0403517 0.7183 -0.0719016 +v 0.0504326 0.666442 -0.034872 +v 0.237614 0.630468 -0.469873 +v 0.258514 0.602197 -0.445199 +v 0.253217 0.578269 -0.474783 +v 0.212896 0.714905 -0.428435 +v 0.240943 0.662224 -0.43894 +v 0.224501 0.676789 -0.452578 +v 0.246529 0.67248 -0.397952 +v 0.254771 0.635976 -0.4207 +v 0.226436 0.912723 -0.26973 +v 0.21544 0.938681 -0.279423 +v 0.201014 0.943338 -0.25145 +v 0.214224 0.916672 -0.246046 +v 0.216965 0.931825 -0.261167 +v 0.196917 0.927676 -0.311546 +v 0.191876 0.948989 -0.288378 +v 0.216862 0.918936 -0.303965 +v 0.207634 0.937732 -0.29671 +v 0.1537 0.943252 -0.269054 +v 0.17745 0.953646 -0.260405 +v 0.165912 0.939303 -0.292739 +v 0.173109 0.951035 -0.277835 +v 0.179801 0.930945 -0.23207 +v 0.159856 0.939686 -0.239651 +v 0.180783 0.946411 -0.244635 +v 0.207814 0.759869 -0.30299 +v 0.191438 0.774734 -0.312022 +v 0.199084 0.77337 -0.281405 +v 0.209996 0.761876 -0.268358 +v 0.201734 0.767127 -0.28955 +v 0.161743 0.793141 -0.342758 +v 0.178221 0.788374 -0.325575 +v 0.180956 0.7796 -0.34144 +v 0.178357 0.783728 -0.331262 +v 0.18742 0.811743 -0.321532 +v 0.192387 0.789092 -0.301842 +v 0.165819 0.804418 -0.335288 +v 0.181068 0.796668 -0.322844 +v 0.202175 0.775482 -0.251997 +v 0.203233 0.797472 -0.273932 +v 0.199221 0.78193 -0.2764 +v 0.181336 0.804317 -0.228606 +v 0.151415 0.801648 -0.215482 +v 0.168503 0.781447 -0.210541 +v 0.192516 0.777938 -0.227759 +v 0.174268 0.789156 -0.220565 +v 0.108345 0.822919 -0.221075 +v 0.12229 0.805309 -0.211386 +v 0.135327 0.828572 -0.217894 +v 0.128262 0.813355 -0.215464 +v 0.103071 0.800257 -0.198013 +v 0.137434 0.789176 -0.20042 +v 0.0963023 0.812563 -0.21585 +v 0.114773 0.801816 -0.205592 +v 0.186175 0.766882 -0.204739 +v 0.153638 0.772539 -0.191376 +v 0.162292 0.776737 -0.200861 +v 0.13845 0.801677 -0.350685 +v 0.119159 0.809804 -0.331351 +v 0.143329 0.804627 -0.337252 +v 0.140844 0.802002 -0.341998 +v 0.086003 0.820458 -0.291304 +v 0.10501 0.817882 -0.310157 +v 0.0934554 0.817549 -0.318853 +v 0.100185 0.816042 -0.313185 +v 0.116614 0.840248 -0.308051 +v 0.127696 0.819206 -0.325202 +v 0.0961567 0.829666 -0.288835 +v 0.109848 0.825231 -0.308777 +v 0.153713 0.826966 -0.334024 +v 0.147191 0.8121 -0.335056 +v 0.0710179 0.824335 -0.270682 +v 0.0780919 0.822576 -0.248928 +v 0.084054 0.824638 -0.268864 +v 0.0786961 0.822795 -0.269513 +v 0.0899479 0.821575 -0.232115 +v 0.0751675 0.819879 -0.228529 +v 0.084018 0.819324 -0.230668 +v 0.102029 0.843892 -0.232989 +v 0.0888081 0.831892 -0.249223 +v 0.095203 0.828981 -0.232883 +v 0.0959818 0.847028 -0.267898 +v 0.0891348 0.832003 -0.268429 +v 0.208076 0.764415 -0.241789 +v 0.226075 0.759994 -0.240858 +v 0.231902 0.754223 -0.26947 +v 0.216972 0.759952 -0.252956 +v 0.20189 0.765574 -0.22074 +v 0.201854 0.770051 -0.234112 +v 0.215759 0.757673 -0.200462 +v 0.223444 0.760451 -0.217689 +v 0.205912 0.761992 -0.209879 +v 0.264144 0.760816 -0.243923 +v 0.265103 0.760852 -0.220189 +v 0.240714 0.760641 -0.229576 +v 0.278995 0.751255 -0.279238 +v 0.277858 0.727498 -0.319523 +v 0.234872 0.742799 -0.306286 +v 0.256224 0.744786 -0.293184 +v 0.311167 0.763685 -0.236173 +v 0.343965 0.756617 -0.269721 +v 0.300161 0.759231 -0.259113 +v 0.37536 0.738148 -0.30116 +v 0.402685 0.758643 -0.236201 +v 0.390758 0.753705 -0.27032 +v 0.317986 0.708047 -0.333577 +v 0.358205 0.712515 -0.324745 +v 0.258236 0.693552 -0.356883 +v 0.284726 0.698216 -0.343913 +v 0.183529 0.754714 -0.188935 +v 0.248651 0.737773 -0.18066 +v 0.277376 0.753251 -0.197126 +v 0.23327 0.750984 -0.191422 +v 0.329845 0.712932 -0.159268 +v 0.178779 0.718135 -0.16643 +v 0.252112 0.713887 -0.166078 +v 0.409003 0.736167 -0.174314 +v 0.39942 0.710994 -0.155057 +v 0.352617 0.756796 -0.208565 +v 0.409429 0.752424 -0.202781 +v 0.303456 0.759588 -0.213776 +v 0.0705006 0.811753 -0.205807 +v 0.0602661 0.797425 -0.177797 +v 0.106741 0.782082 -0.178969 +v 0.0845451 0.798015 -0.188581 +v 0 0.80352 -0.16013 +v 0.0359638 0.781745 -0.13792 +v 0.0258744 0.814456 -0.19275 +v 0.0313039 0.800824 -0.16616 +v 0.0771688 0.744134 -0.128582 +v 0 0.760454 -0.0953915 +v 0.0372542 0.755486 -0.106376 +v 0.128352 0.75368 -0.16956 +v 0.122404 0.729951 -0.151266 +v 0.140544 0.766364 -0.181936 +v 0.0269807 0.832763 -0.306956 +v 0.0647564 0.824008 -0.337021 +v 0.0438017 0.818098 -0.377412 +v 0 0.831312 -0.342444 +v 0.0352238 0.828719 -0.341387 +v 0.105446 0.812324 -0.352131 +v 0.0673729 0.8251 -0.299446 +v 0.0829065 0.820245 -0.328154 +v 0.163948 0.787613 -0.366372 +v 0.134148 0.794627 -0.38492 +v 0.134862 0.801108 -0.364702 +v 0.0968568 0.789376 -0.411772 +v 0.176513 0.760515 -0.410655 +v 0.140375 0.776566 -0.412207 +v 0 0.800708 -0.414889 +v 0.0494105 0.797681 -0.413491 +v 0.0431316 0.822381 -0.222498 +v 0.0209585 0.83068 -0.246717 +v 0 0.825505 -0.217769 +v 0.0222752 0.824379 -0.219341 +v 0.0571055 0.825864 -0.248034 +v 0.0611506 0.820889 -0.225684 +v 0.0427143 0.830406 -0.274631 +v 0.0589761 0.827121 -0.27268 +v 0 0.834904 -0.275945 +v 0.0223763 0.833445 -0.275661 +v 0.192333 0.761236 -0.378584 +v 0.220893 0.723503 -0.390265 +v 0.20182 0.742487 -0.402976 +v 0.202503 0.759013 -0.342238 +v 0.185497 0.772855 -0.357643 +v 0.229147 0.73046 -0.348619 +v 0.217964 0.748268 -0.323878 +v 0.238328 0.704586 -0.373617 +v 0.182638 0.844163 -0.332751 +v 0.20855 0.866089 -0.317157 +v 0.208154 0.830042 -0.298948 +v 0.197796 0.836731 -0.320106 +v 0.225435 0.891324 -0.293612 +v 0.202088 0.898609 -0.32219 +v 0.216036 0.894273 -0.311279 +v 0.221713 0.885753 -0.253374 +v 0.22169 0.856724 -0.273536 +v 0.227222 0.886884 -0.273083 +v 0.207473 0.823979 -0.249259 +v 0.212209 0.824662 -0.273398 +v 0.113654 0.869597 -0.287244 +v 0.140188 0.893495 -0.304854 +v 0.144889 0.85895 -0.323167 +v 0.127225 0.865094 -0.306986 +v 0.170407 0.915574 -0.314537 +v 0.141278 0.921251 -0.283964 +v 0.154011 0.919177 -0.300925 +v 0.17602 0.88052 -0.329499 +v 0.186655 0.907214 -0.322451 +v 0.164181 0.851772 -0.332764 +v 0.125921 0.862724 -0.222037 +v 0.126235 0.896792 -0.232757 +v 0.106278 0.87162 -0.248059 +v 0.112672 0.868658 -0.232446 +v 0.136706 0.926532 -0.249134 +v 0.152825 0.914652 -0.226568 +v 0.141818 0.921807 -0.235425 +v 0.120264 0.900007 -0.266157 +v 0.136018 0.925025 -0.266007 +v 0.106638 0.871852 -0.266963 +v 0.201725 0.863227 -0.234578 +v 0.169297 0.842653 -0.222278 +v 0.191458 0.831381 -0.232334 +v 0.191735 0.902282 -0.228209 +v 0.209229 0.892731 -0.238166 +v 0.158724 0.882351 -0.220155 +v 0.171199 0.908866 -0.224253 +v 0.146124 0.853579 -0.218747 +v 0.183641 -0.455489 0.534379 +v 0.20511 -0.461837 0.475502 +v 0.228365 -0.446181 0.420977 +v 0.21326 -0.450303 0.478539 +v 0.102981 -0.465723 0.632974 +v 0.142559 -0.466669 0.57469 +v 0.143787 -0.462243 0.587914 +v 0.132033 -0.481167 0.556781 +v 0.17086 -0.474631 0.521789 +v 0.109552 -0.472057 0.595485 +v 0.140849 -0.473458 0.563316 +v 0.206663 -0.472505 0.418626 +v 0.176881 -0.48852 0.469991 +v 0.194975 -0.474631 0.472428 +v 0.0439995 -0.453929 0.682063 +v 0.0755892 -0.465387 0.639018 +v 0.0705061 -0.461083 0.663389 +v 0 -0.448613 0.69461 +v 0.0238268 -0.46053 0.664171 +v 0.0210984 -0.44987 0.691901 +v 0.0329053 -0.483094 0.604968 +v 0.0549351 -0.471091 0.629642 +v 0 -0.470799 0.638539 +v 0.0276324 -0.470883 0.636565 +v 0.0917758 -0.479034 0.591505 +v 0.0815781 -0.471375 0.616771 +v 0.065741 -0.440111 0.119726 +v 0.0317646 -0.445352 0.134276 +v 0 -0.441491 0.0941719 +v 0.0323291 -0.440606 0.100743 +v 0.138015 -0.443895 0.192281 +v 0.0965198 -0.444834 0.175662 +v 0.101319 -0.442167 0.150389 +v 0.0981278 -0.457279 0.230677 +v 0.0636123 -0.450028 0.182161 +v 0.124102 -0.450719 0.228684 +v 0.0942201 -0.449501 0.201118 +v 0 -0.451738 0.166652 +v 0.034368 -0.461296 0.211229 +v 0.0320458 -0.45108 0.17059 +v 0.205661 -0.440923 0.30331 +v 0.163536 -0.447685 0.255959 +v 0.174785 -0.442414 0.24495 +v 0.213095 -0.454425 0.36305 +v 0.224677 -0.442616 0.362277 +v 0.178344 -0.481123 0.364052 +v 0.179537 -0.460826 0.31166 +v 0.199389 -0.4673 0.363772 +v 0.138385 -0.462583 0.271465 +v 0.153491 -0.454897 0.266081 +v 0 -0.501354 0.566258 +v 0.0472884 -0.515301 0.519274 +v 0.0774159 -0.49456 0.56248 +v 0.0400356 -0.499329 0.565268 +v 0.0552219 -0.529321 0.415644 +v 0.102374 -0.516827 0.468605 +v 0 -0.53078 0.469003 +v 0.0529288 -0.526727 0.468796 +v 0.12906 -0.497175 0.517019 +v 0.151776 -0.503865 0.416665 +v 0.144853 -0.503338 0.468859 +v 0.109485 -0.488354 0.558077 +v 0 -0.522771 0.361177 +v 0.046641 -0.500432 0.308431 +v 0.101727 -0.509066 0.362546 +v 0.0524328 -0.518796 0.361628 +v 0.0778956 -0.474931 0.261875 +v 0 -0.481524 0.256229 +v 0.0399262 -0.479506 0.257737 +v 0.12954 -0.482953 0.312862 +v 0.111951 -0.469275 0.268257 +v 0.144743 -0.495777 0.363499 +v 0.16267 -0.0297463 0.947597 +v 0.137897 -0.0298265 0.961061 +v 0.139042 -0.0451633 0.963659 +v 0.164631 -0.0504489 0.951176 +v 0.150007 -0.038161 0.957034 +v 0.109331 -0.0304408 0.974293 +v 0.122462 -0.037914 0.969963 +v 0.130968 -0.0135459 0.956851 +v 0.124172 -0.0273895 0.966259 +v 0.133714 -0.0642499 0.965416 +v 0.109851 -0.0516794 0.976283 +v 0.125245 -0.0487781 0.969619 +v 0.172782 -0.0812671 0.947651 +v 0.213918 -0.078022 0.922841 +v 0.18873 -0.0434748 0.935764 +v 0.185903 -0.064746 0.940486 +v 0.119758 -0.0911109 0.968067 +v 0.163882 -0.120989 0.949271 +v 0.149065 -0.0885975 0.957545 +v 0.209867 -0.161573 0.925244 +v 0.133001 -0.161124 0.956956 +v 0.170754 -0.160591 0.943861 +v 0.24743 -0.125194 0.898745 +v 0.2493 -0.167014 0.898651 +v 0.247517 -0.0516572 0.891815 +v 0.248772 -0.0872467 0.896118 +v 0.206641 -0.0168625 0.913183 +v 0.165953 -0.00373407 0.934179 +v 0.181563 -0.0218941 0.9332 +v 0.225597 0.0165132 0.878354 +v 0.237857 -0.0169093 0.886885 +v 0.188508 0.055577 0.881861 +v 0.216542 0.0481267 0.863247 +v 0.128713 0.0776757 0.9026 +v 0.155037 0.0342159 0.918365 +v 0.159167 0.0664178 0.894094 +v 0.116698 0.0146029 0.948102 +v 0.143447 0.00727528 0.940085 +v 0.0272441 0.00174637 0.985368 +v 0.0591053 0.0273947 0.96148 +v 0.0314129 0.062618 0.944549 +v 0 0.031249 0.967483 +v 0.0296124 0.0304081 0.965777 +v 0.0939443 0.0532189 0.93429 +v 0.0802969 -0.0053962 0.974961 +v 0.0883591 0.0217178 0.955411 +v 0.0652762 0.0925539 0.91594 +v 0.0973395 0.0863776 0.910036 +v 0 0.0974522 0.921309 +v 0.032753 0.0962353 0.919852 +v 0.0640997 -0.158632 0.974036 +v 0.0313918 -0.121887 0.983992 +v 0 -0.156323 0.979553 +v 0.0317497 -0.157085 0.978196 +v 0.0956523 -0.123707 0.972085 +v 0.0976501 -0.160225 0.966985 +v 0.0810019 -0.0733797 0.982855 +v 0.05977 -0.0942344 0.98419 +v 0.0898671 -0.0931811 0.977114 +v 0 -0.0930316 0.990478 +v 0.0273784 -0.0760818 0.993721 +v 0.0298425 -0.0936976 0.988793 +v 0.0955999 -0.0476973 0.985969 +v 0.0789269 -0.06284 0.994959 +v 0.0864529 -0.0640166 0.98579 +v 0.0940951 -0.0565412 0.98502 +v 0.0861068 -0.0306433 0.989153 +v 0.0788425 -0.0488271 1.00064 +v 0.0938769 -0.0385712 0.986828 +v 0.0525009 -0.0662129 1.0231 +v 0.0666347 -0.0644079 1.00864 +v 0.0598411 -0.0536198 1.01768 +v 0.0652608 -0.0582549 1.01251 +v 0.0598989 -0.0753391 1.00401 +v 0.0525276 -0.0775374 1.01483 +v 0.0652946 -0.0700523 1.00523 +v 0.0476184 -0.0223971 1.0006 +v 0.0582598 -0.0403976 1.0119 +v 0.0694706 -0.025394 0.994502 +v 0 -0.0210975 1.00705 +v 0.0209047 -0.039677 1.02317 +v 0.0242006 -0.0212264 1.00515 +v 0.0152462 -0.0676801 1.04602 +v 0.0344846 -0.0534302 1.03232 +v 0 -0.0555541 1.03946 +v 0.0177789 -0.0547726 1.03745 +v 0.0426567 -0.0627588 1.03251 +v 0.0490439 -0.0525287 1.02501 +v 0.0477856 -0.0718253 0.995571 +v 0.0209476 -0.0779737 1.00716 +v 0 -0.0724905 1.00177 +v 0.0242757 -0.0726037 0.999895 +v 0.0583871 -0.073576 0.998233 +v 0.0697639 -0.0690371 0.990088 +v 0.0427012 -0.0854758 1.01505 +v 0.0345351 -0.0845283 1.01121 +v 0.0491057 -0.0804193 1.00671 +v 0 -0.0876552 1.01738 +v 0.0152667 -0.0940994 1.02438 +v 0.0178069 -0.0869021 1.01538 +v 0.0271444 -0.0763309 1.04139 +v 0.0394909 -0.0796254 1.02906 +v 0.0399318 -0.0720589 1.03309 +v 0 -0.0809251 1.049 +v 0.0132272 -0.0889316 1.04223 +v 0.0137291 -0.0795664 1.04692 +v 0.0271637 -0.0905263 1.02914 +v 0 -0.0956202 1.03609 +v 0.01374 -0.0942759 1.03402 +v 0.0399551 -0.0846544 1.02277 +v -0.341299 -0.375944 0.366232 +v -0.317818 -0.392423 0.305485 +v -0.289638 -0.411984 0.363044 +v -0.313121 -0.40468 0.424303 +v -0.317288 -0.397295 0.364448 +v -0.312495 -0.42258 0.208415 +v -0.274846 -0.418754 0.252658 +v -0.350284 -0.364453 0.244783 +v -0.316601 -0.396416 0.250199 +v -0.194817 -0.437402 0.239358 +v -0.251544 -0.422435 0.302332 +v -0.2099 -0.457622 0.202318 +v -0.231211 -0.430966 0.245486 +v -0.261632 -0.427221 0.422701 +v -0.23935 -0.43199 0.361842 +v -0.262332 -0.422664 0.362137 +v -0.275025 -0.421949 0.482067 +v -0.291362 -0.413379 0.536815 +v -0.328162 -0.387696 0.483083 +v -0.303426 -0.408222 0.482265 +v -0.225399 -0.440193 0.480871 +v -0.222989 -0.439421 0.53835 +v -0.247502 -0.431674 0.481825 +v -0.164011 -0.483033 0.631406 +v -0.236564 -0.444228 0.584476 +v -0.156119 -0.458526 0.595789 +v -0.191143 -0.453861 0.591118 +v -0.315111 -0.397679 0.592146 +v -0.26979 -0.455493 0.624003 +v -0.280089 -0.425608 0.586435 +v -0.339519 -0.257182 -0.0802831 +v -0.283535 -0.198083 -0.11242 +v -0.23546 -0.269794 -0.12322 +v -0.300873 -0.335808 -0.11045 +v -0.292915 -0.260195 -0.110308 +v -0.26898 -0.103901 -0.112945 +v -0.224047 -0.163495 -0.142015 +v -0.318497 -0.140059 -0.0746981 +v -0.274851 -0.146856 -0.114171 +v -0.123113 -0.206388 -0.170045 +v -0.173106 -0.230478 -0.142628 +v -0.172014 -0.141551 -0.170002 +v -0.171621 -0.184999 -0.160037 +v -0.176383 -0.34915 -0.10631 +v -0.119478 -0.295776 -0.113872 +v -0.174532 -0.282877 -0.121531 +v -0.273281 0.0420733 -0.0438498 +v -0.232462 0.00608204 -0.106821 +v -0.269878 -0.0318881 -0.0928838 +v -0.307808 -0.00318692 -0.0317095 +v -0.272342 0.00331308 -0.0724007 +v -0.148915 0.00578811 -0.165362 +v -0.182883 -0.0457092 -0.157469 +v -0.199052 0.0623656 -0.105989 +v -0.190658 0.0074224 -0.137241 +v -0.222802 -0.0788504 -0.141507 +v -0.131964 -0.111136 -0.188613 +v -0.176218 -0.0952439 -0.168768 +v -0.308256 -0.0631453 -0.0619102 +v -0.26804 -0.0666021 -0.106124 +v -0.26887 -0.396352 0.909752 +v -0.214141 -0.334681 0.919903 +v -0.263105 -0.289222 0.900577 +v -0.30851 -0.340088 0.875405 +v -0.266995 -0.336923 0.904292 +v -0.104904 -0.328487 0.922781 +v -0.164801 -0.284207 0.93026 +v -0.149733 -0.3934 0.920339 +v -0.15673 -0.332639 0.924128 +v -0.172003 -0.202637 0.93974 +v -0.215216 -0.244729 0.920604 +v -0.126656 -0.240414 0.945024 +v -0.169955 -0.242358 0.935335 +v -0.293898 -0.252639 0.867139 +v -0.253262 -0.209214 0.897882 +v -0.258195 -0.248301 0.898482 +v -0.375987 -0.340814 -0.0337268 +v -0.380901 -0.277243 0.032671 +v -0.358457 -0.200112 -0.0267162 +v -0.367895 -0.263853 -0.0306343 +v -0.375596 -0.311145 0.175939 +v -0.382253 -0.237542 0.105277 +v -0.379176 -0.364086 0.102343 +v -0.381399 -0.294389 0.103665 +v -0.379025 -0.149836 0.112764 +v -0.369603 -0.166291 0.0406057 +v -0.385185 -0.214712 0.178025 +v -0.38088 -0.190046 0.108528 +v -0.342627 -0.106257 -0.015664 +v -0.349444 -0.148083 -0.0217878 +v -0.351404 -0.354331 0.427814 +v -0.367965 -0.307651 0.370431 +v -0.363729 -0.333817 0.306674 +v -0.35769 -0.345276 0.36828 +v -0.376188 -0.22098 0.374406 +v -0.380079 -0.252636 0.309953 +v -0.366553 -0.273812 0.432936 +v -0.373629 -0.265433 0.372527 +v -0.379525 -0.278609 0.243679 +v -0.386398 -0.194374 0.247084 +v -0.384425 -0.235652 0.245143 +v -0.369702 -0.323364 0.243084 +v -0.359143 -0.0454376 0.384517 +v -0.376221 -0.0834201 0.319025 +v -0.375379 -0.132559 0.377674 +v -0.363531 -0.0923241 0.440867 +v -0.369754 -0.0887861 0.380331 +v -0.380073 -0.0641595 0.195141 +v -0.385994 -0.115397 0.252169 +v -0.369328 -0.0337485 0.265179 +v -0.380479 -0.0754649 0.257209 +v -0.383633 -0.167556 0.313214 +v -0.386429 -0.137312 0.183762 +v -0.387444 -0.154662 0.24911 +v -0.370145 -0.182621 0.437038 +v -0.377148 -0.176656 0.375911 +v -0.338487 -0.0443826 0.00235778 +v -0.357964 -0.0317511 0.0731655 +v -0.331012 0.0171674 0.0389716 +v -0.336366 -0.0157204 0.0175237 +v -0.363023 -0.0919062 0.0524717 +v -0.339774 -0.073126 -0.00816016 +v -0.37698 -0.0821329 0.123634 +v -0.378431 -0.114848 0.117331 +v -0.363023 -0.0117289 0.147082 +v -0.372551 -0.0487428 0.133083 +v -0.324728 -0.29766 0.82767 +v -0.340911 -0.350598 0.77666 +v -0.336842 -0.40362 0.835552 +v -0.331904 -0.344898 0.831349 +v -0.311718 -0.219243 0.822794 +v -0.331546 -0.262105 0.774295 +v -0.317327 -0.257308 0.824743 +v -0.344609 -0.271269 0.661246 +v -0.340676 -0.308781 0.717453 +v -0.338685 -0.226798 0.720092 +v -0.339619 -0.266826 0.718796 +v -0.335933 -0.414813 0.716014 +v -0.334716 -0.360298 0.654176 +v -0.339263 -0.356428 0.715872 +v -0.304296 -0.0566442 0.818942 +v -0.32815 -0.0982774 0.774453 +v -0.309753 -0.137557 0.821642 +v -0.282982 -0.0932074 0.86163 +v -0.309064 -0.0966912 0.82069 +v -0.349859 -0.0980743 0.670701 +v -0.342261 -0.141944 0.72292 +v -0.335097 -0.0554519 0.724795 +v -0.341372 -0.0985454 0.724072 +v -0.328063 -0.182474 0.773912 +v -0.348891 -0.186539 0.666645 +v -0.340465 -0.184932 0.72153 +v -0.284251 -0.173813 0.864211 +v -0.309915 -0.178867 0.822052 +v -0.364199 -0.140124 0.498352 +v -0.3576 -0.096426 0.55865 +v -0.350887 -0.0507559 0.502911 +v -0.360004 -0.0947951 0.500374 +v -0.363053 -0.232129 0.494204 +v -0.360088 -0.187609 0.554338 +v -0.364779 -0.186112 0.496433 +v -0.356689 -0.14249 0.613383 +v -0.35206 -0.232064 0.608144 +v -0.355112 -0.187591 0.610995 +v -0.34723 -0.0531297 0.617509 +v -0.354744 -0.0974434 0.615492 +v -0.338808 -0.358381 0.541229 +v -0.354812 -0.320109 0.488079 +v -0.344689 -0.357576 0.485189 +v -0.344841 -0.317709 0.600763 +v -0.335024 -0.360119 0.596759 +v -0.354746 -0.277669 0.548235 +v -0.349578 -0.27523 0.604646 +v -0.360332 -0.277544 0.491251 +v -0.270021 0.183796 0.151405 +v -0.250535 0.219935 0.200112 +v -0.22988 0.247545 0.157829 +v -0.253104 0.203435 0.118078 +v -0.251096 0.217673 0.158942 +v -0.247672 0.201215 0.285394 +v -0.224342 0.248556 0.249012 +v -0.273837 0.172969 0.230557 +v -0.249328 0.213762 0.242242 +v -0.166122 0.2964 0.255682 +v -0.201028 0.279793 0.204606 +v -0.19325 0.264928 0.298974 +v -0.197174 0.276415 0.252836 +v -0.208445 0.255016 0.0997486 +v -0.173937 0.295795 0.151795 +v -0.204742 0.274117 0.153286 +v -0.238934 0.137098 0.472953 +v -0.21248 0.178956 0.429644 +v -0.243641 0.166107 0.375362 +v -0.269047 0.115689 0.415447 +v -0.241351 0.149381 0.423 +v -0.149393 0.222637 0.439843 +v -0.185529 0.224498 0.389084 +v -0.178799 0.187723 0.48375 +v -0.181979 0.203634 0.435289 +v -0.218341 0.218477 0.337805 +v -0.157504 0.266542 0.348704 +v -0.189327 0.246276 0.344018 +v -0.272811 0.14513 0.319056 +v -0.245762 0.184358 0.32963 +v -0.212012 0.0755801 0.841201 +v -0.188626 0.112308 0.821548 +v -0.217701 0.11212 0.775527 +v -0.235856 0.0765799 0.805621 +v -0.213324 0.0965225 0.811853 +v -0.13257 0.138159 0.837992 +v -0.163968 0.1484 0.789706 +v -0.159999 0.0987976 0.865373 +v -0.161693 0.126272 0.830304 +v -0.169138 0.174847 0.695193 +v -0.195015 0.146226 0.738197 +v -0.136442 0.179619 0.750387 +v -0.166543 0.164739 0.744396 +v -0.249108 0.0961373 0.728207 +v -0.226814 0.130295 0.684497 +v -0.222367 0.12354 0.732548 +v -0.264402 0.101968 0.520397 +v -0.233686 0.131486 0.579487 +v -0.207042 0.158534 0.530777 +v -0.236433 0.132176 0.525634 +v -0.201599 0.157166 0.637907 +v -0.258575 0.102323 0.628487 +v -0.230534 0.131902 0.632959 +v -0.139858 0.195421 0.647569 +v -0.173735 0.178964 0.589175 +v -0.171473 0.178284 0.642915 +v -0.143538 0.198754 0.539805 +v -0.176115 0.180806 0.535582 +v -0.337836 -0.00655256 0.448549 +v -0.320929 0.0389878 0.398635 +v -0.34742 0.00319315 0.333602 +v -0.342419 -0.00261151 0.390867 +v -0.298744 0.0894187 0.355449 +v -0.293232 0.0711038 0.460405 +v -0.296022 0.0786559 0.407077 +v -0.30121 0.115034 0.257783 +v -0.327429 0.0566863 0.291075 +v -0.300703 0.102007 0.305644 +v -0.351215 0.0204208 0.221415 +v -0.350974 0.0108683 0.277027 +v -0.308985 -0.0158364 0.772679 +v -0.30029 0.0266191 0.725054 +v -0.328122 -0.0112347 0.673608 +v -0.320738 -0.0133772 0.724898 +v -0.268509 -0.018423 0.854481 +v -0.274888 0.0183198 0.812257 +v -0.291897 -0.0177918 0.816142 +v -0.267341 0.0573644 0.769829 +v -0.24017 0.0457536 0.838346 +v -0.256292 0.0501447 0.807253 +v -0.281859 0.0674534 0.67711 +v -0.275748 0.0634772 0.725933 +v -0.239418 0.102195 -0.0351077 +v -0.213035 0.170022 -0.00953204 +v -0.181753 0.135303 -0.0848536 +v -0.20757 0.117335 -0.0616182 +v -0.298292 0.0729821 0.0271766 +v -0.265278 0.133372 0.0353559 +v -0.270541 0.0874645 -0.00640695 +v -0.236523 0.195781 0.0609139 +v -0.276588 0.155574 0.0981021 +v -0.258648 0.173682 0.0768666 +v -0.190293 0.237055 0.0258931 +v -0.212268 0.218116 0.0448664 +v -0.288873 0.0678482 0.57056 +v -0.311113 0.0304905 0.622016 +v -0.286019 0.0682635 0.624906 +v -0.315185 0.0311388 0.510574 +v -0.291063 0.0681481 0.515313 +v -0.334099 -0.00961306 0.563635 +v -0.335537 -0.00863692 0.506376 +v -0.332102 -0.0102295 0.619617 +v -0.324423 0.0791082 0.189745 +v -0.33595 0.0447295 0.115485 +v -0.346277 0.0318576 0.16704 +v -0.295396 0.137443 0.169109 +v -0.299573 0.127115 0.211987 +v -0.305188 0.103086 0.100412 +v -0.288286 0.145212 0.129998 +v -0.320025 0.0585873 0.0683354 +v -0.177314 0.204818 -0.0510199 +v -0.167034 0.18223 -0.122798 +v -0.149034 0.119255 -0.152767 +v -0.168725 0.158519 -0.103729 +v -0.159665 0.285267 0.0452783 +v -0.167426 0.259011 -0.0241111 +v -0.175009 0.248965 0.00116269 +v -0.17918 0.290497 -0.0609743 +v -0.177164 0.238112 -0.093383 +v -0.149721 0.3008 -0.00470029 +v -0.168557 0.27236 -0.0447148 +v -0.160058 0.168229 -0.195838 +v -0.194921 0.221357 -0.173014 +v -0.175228 0.201681 -0.146613 +v -0.21819 0.281995 -0.133552 +v -0.26422 0.274293 -0.228207 +v -0.233098 0.21084 -0.267301 +v -0.227725 0.245742 -0.199837 +v -0.173263 0.341693 -0.0238379 +v -0.225521 0.344757 -0.0845003 +v -0.200073 0.314908 -0.0732157 +v -0.267222 0.417414 -0.116444 +v -0.27622 0.344814 -0.176785 +v -0.21453 0.407775 -0.0317089 +v -0.249809 0.379204 -0.0978893 +v -0.306638 0.268641 -0.338166 +v -0.314639 0.343639 -0.292523 +v -0.294985 0.306469 -0.259249 +v -0.279797 0.207117 -0.366981 +v -0.240251 0.15911 -0.387649 +v -0.192666 0.159829 -0.308601 +v -0.238726 0.181983 -0.331175 +v -0.330786 0.26947 -0.445487 +v -0.307399 0.208213 -0.46356 +v -0.31171 0.235804 -0.406418 +v -0.259412 0.1698 -0.542722 +v -0.265715 0.160342 -0.469212 +v -0.305787 0.218563 -0.547441 +v -0.290901 0.186126 -0.509143 +v -0.195451 0.128497 -0.407372 +v -0.213461 0.12942 -0.465108 +v -0.233311 0.142158 -0.432916 +v -0.329541 0.345256 -0.410956 +v -0.321008 0.352655 -0.511417 +v -0.32675 0.280027 -0.535933 +v -0.333345 0.309542 -0.480189 +v -0.255976 0.429549 -0.563622 +v -0.289278 0.358786 -0.584918 +v -0.295245 0.436762 -0.484187 +v -0.295399 0.395443 -0.540067 +v -0.246645 0.312827 -0.640337 +v -0.296456 0.295786 -0.60247 +v -0.240548 0.35766 -0.62796 +v -0.274305 0.331026 -0.617491 +v -0.272516 0.239582 -0.609537 +v -0.307295 0.256707 -0.578835 +v -0.288912 -0.666279 -0.0831981 +v -0.233667 -0.718383 -0.0394682 +v -0.288313 -0.71953 0.0292002 +v -0.335047 -0.66747 -0.026194 +v -0.288523 -0.704927 -0.0329901 +v -0.136552 -0.67511 -0.0280042 +v -0.172796 -0.723594 0.0247169 +v -0.187443 -0.669698 -0.0818819 +v -0.179633 -0.708233 -0.0350267 +v -0.182766 -0.687312 0.135767 +v -0.227442 -0.724741 0.0933852 +v -0.136631 -0.686121 0.0787634 +v -0.176191 -0.716151 0.0857864 +v -0.327044 -0.674066 0.0872825 +v -0.276152 -0.679477 0.14116 +v -0.281161 -0.710704 0.0910758 +v -0.288217 -0.679435 0.838379 +v -0.248642 -0.724519 0.790895 +v -0.198896 -0.723335 0.85193 +v -0.2461 -0.678205 0.889508 +v -0.246831 -0.711912 0.845432 +v -0.24088 -0.688682 0.691628 +v -0.198408 -0.728532 0.734591 +v -0.283587 -0.684515 0.738785 +v -0.244434 -0.716483 0.736358 +v -0.115859 -0.693483 0.748115 +v -0.148661 -0.727347 0.795626 +v -0.157976 -0.694713 0.696986 +v -0.153047 -0.720555 0.741401 +v -0.15574 -0.680004 0.892121 +v -0.113033 -0.684171 0.844965 +v -0.151829 -0.713932 0.849146 +v -0.30391 -0.498066 0.668956 +v -0.32282 -0.565952 0.726198 +v -0.342489 -0.483419 0.78141 +v -0.331237 -0.488983 0.719836 +v -0.319732 -0.633454 0.786428 +v -0.28283 -0.632563 0.691009 +v -0.308326 -0.632734 0.733956 +v -0.294197 -0.618974 0.884469 +v -0.331331 -0.556659 0.842236 +v -0.315639 -0.625673 0.839496 +v -0.31354 -0.474577 0.887895 +v -0.337524 -0.478425 0.840051 +v -0.0969194 -0.478778 0.897495 +v -0.0774719 -0.570173 0.85133 +v -0.0654567 -0.515878 0.79543 +v -0.0634711 -0.431765 0.851899 +v -0.0707234 -0.496321 0.852392 +v -0.0840444 -0.64607 0.797118 +v -0.112805 -0.624088 0.888986 +v -0.0899111 -0.634521 0.847274 +v -0.119063 -0.647679 0.702012 +v -0.0832655 -0.591144 0.740087 +v -0.0943475 -0.648249 0.746058 +v -0.069956 -0.47422 0.735292 +v -0.106684 -0.534636 0.682874 +v -0.0773661 -0.528459 0.735056 +v -0.208287 -0.52835 0.637223 +v -0.252371 -0.581833 0.652832 +v -0.260651 -0.513618 0.642398 +v -0.15335 -0.595644 0.66033 +v -0.153645 -0.534978 0.650489 +v -0.20034 -0.651356 0.660475 +v -0.156436 -0.650983 0.672896 +v -0.244653 -0.641994 0.666514 +v -0.209392 -0.47177 0.928314 +v -0.149543 -0.554429 0.922812 +v -0.147798 -0.472236 0.922294 +v -0.262868 -0.552296 0.920108 +v -0.267734 -0.472455 0.917082 +v -0.203436 -0.628169 0.923071 +v -0.253551 -0.622939 0.912658 +v -0.153584 -0.625261 0.914716 +v -0.387436 -0.440321 0.0296682 +v -0.369537 -0.538419 0.0961211 +v -0.348561 -0.464054 0.158716 +v -0.376444 -0.45013 0.0999599 +v -0.354445 -0.427851 -0.0878125 +v -0.378455 -0.525308 -0.0356201 +v -0.380964 -0.432504 -0.0361787 +v -0.368236 -0.614976 0.0306267 +v -0.340742 -0.597899 -0.0798229 +v -0.364087 -0.605614 -0.0296813 +v -0.325558 -0.615423 0.139592 +v -0.354786 -0.614851 0.0904298 +v -0.12704 -0.448099 -0.0735785 +v -0.182701 -0.527846 -0.109937 +v -0.243518 -0.430642 -0.121062 +v -0.179139 -0.436248 -0.106528 +v -0.241923 -0.609859 -0.117359 +v -0.141316 -0.607217 -0.0730372 +v -0.186967 -0.607615 -0.104287 +v -0.304443 -0.521287 -0.117606 +v -0.296601 -0.602967 -0.109127 +v -0.305291 -0.427537 -0.115465 +v -0.25113 -0.502745 0.197094 +v -0.188536 -0.577394 0.174934 +v -0.148115 -0.512563 0.149929 +v -0.196177 -0.511769 0.183546 +v -0.293784 -0.559568 0.181063 +v -0.304357 -0.484216 0.189956 +v -0.233064 -0.638226 0.175543 +v -0.282371 -0.626877 0.167977 +v -0.145237 -0.635178 0.13052 +v -0.185474 -0.638484 0.162245 +v -0.0953701 -0.405611 -0.0214782 +v -0.0997946 -0.492468 0.0352712 +v -0.105712 -0.548895 -0.0268432 +v -0.102107 -0.469936 -0.0239275 +v -0.113288 -0.573273 0.0910993 +v -0.112515 -0.451919 0.0935688 +v -0.115559 -0.506404 0.0968639 +v -0.106751 -0.633108 0.0275567 +v -0.117988 -0.635837 0.0828 +v -0.114552 -0.619641 -0.0267392 +v -0.308658 0.43336 -0.368305 +v -0.285353 0.520853 -0.361551 +v -0.271184 0.525759 -0.460079 +v -0.291391 0.478507 -0.418527 +v -0.298509 0.427522 -0.236282 +v -0.317802 0.38717 -0.32759 +v -0.235335 0.485531 -0.0647615 +v -0.271214 0.498067 -0.167977 +v -0.272045 0.45855 -0.143225 +v -0.277875 0.55689 -0.190965 +v -0.282577 0.535883 -0.259681 +v -0.247008 0.54474 -0.114114 +v -0.271665 0.531425 -0.180446 +v -0.267 0.601931 -0.388185 +v -0.278055 0.600765 -0.320108 +v -0.278645 0.563976 -0.33172 +v -0.252363 0.682167 -0.15033 +v -0.326452 0.645309 -0.138504 +v -0.267679 0.610284 -0.129549 +v -0.192626 0.647576 -0.125774 +v -0.258116 0.645451 -0.13607 +v -0.430349 0.658277 -0.154382 +v -0.380321 0.61857 -0.152413 +v -0.388682 0.680406 -0.144893 +v -0.384792 0.647908 -0.143704 +v -0.35448 0.589213 -0.202564 +v -0.324346 0.587714 -0.15672 +v -0.401583 0.612716 -0.19176 +v -0.367842 0.597467 -0.17194 +v -0.239082 0.578957 -0.111996 +v -0.289471 0.569074 -0.162469 +v -0.279361 0.583208 -0.137022 +v -0.318359 0.584666 -0.230094 +v -0.294439 0.591849 -0.266039 +v -0.294318 0.572729 -0.209871 +v -0.380591 0.614582 -0.245535 +v -0.343967 0.620068 -0.286887 +v -0.347363 0.598425 -0.244565 +v -0.345079 0.681327 -0.333156 +v -0.312606 0.638668 -0.319124 +v -0.375881 0.662505 -0.310821 +v -0.34177 0.649107 -0.318477 +v -0.28588 0.662049 -0.349089 +v -0.290372 0.624108 -0.317788 +v -0.419572 0.658706 -0.261892 +v -0.444197 0.711394 -0.263256 +v -0.393743 0.706765 -0.3123 +v -0.412958 0.685943 -0.291128 +v -0.447289 0.655956 -0.196803 +v -0.417303 0.633713 -0.225256 +v -0.447397 0.702392 -0.15815 +v -0.471552 0.708579 -0.199184 +v -0.460337 0.681448 -0.17325 +v -0.43241 0.746455 -0.258303 +v -0.452589 0.744444 -0.206816 +v -0.460792 0.730831 -0.231063 +v -0.0467382 0.325284 0.136739 +v -0.0925539 0.320139 0.170699 +v -0.0462436 0.320164 0.221337 +v -0.0468991 0.323707 0.17766 +v -0.132936 0.312061 0.210485 +v -0.135299 0.30832 0.112598 +v -0.13572 0.310986 0.159838 +v -0.125628 0.296564 0.306829 +v -0.0886491 0.312396 0.263435 +v -0.129481 0.307575 0.259519 +v -0.0434892 0.30185 0.311934 +v -0.0450231 0.313323 0.266515 +v -0.0377827 0.232065 0.495188 +v -0.0735327 0.221293 0.545706 +v -0.0364517 0.2252 0.601479 +v -0.0369868 0.226526 0.54726 +v -0.107651 0.210086 0.597079 +v -0.111325 0.219111 0.491389 +v -0.109197 0.212143 0.543201 +v -0.105384 0.203917 0.704755 +v -0.0717153 0.218255 0.65442 +v -0.106456 0.208743 0.651454 +v -0.0357781 0.218679 0.710249 +v -0.0360809 0.22396 0.656319 +v -0.0703592 0.199987 0.759265 +v -0.035033 0.18494 0.809623 +v -0.0354469 0.205232 0.761742 +v -0.10286 0.172311 0.802347 +v -0.104202 0.191409 0.755412 +v -0.0994805 0.118705 0.880737 +v -0.0684286 0.154761 0.849486 +v -0.101303 0.147713 0.844481 +v -0.0337403 0.129119 0.889852 +v -0.0344822 0.159128 0.852718 +v -0.032544 -0.433336 0.0684456 +v -0.0619855 -0.419454 0.0516405 +v -0.0290027 -0.401336 0.00260959 +v -0.0312142 -0.420036 0.03584 +v -0.0804386 -0.407577 0.025012 +v -0.101981 -0.43742 0.118873 +v -0.0918712 -0.426509 0.0746889 +v -0.0781392 -0.343402 -0.0680291 +v -0.0524989 -0.374486 -0.0268658 +v -0.0771327 -0.378765 -0.022981 +v -0.024587 -0.350255 -0.0669927 +v -0.0265726 -0.377866 -0.0315624 +v -0.0173499 -0.340897 0.891348 +v -0.032518 -0.377955 0.851217 +v -0.0162142 -0.396858 0.808469 +v -0.0161103 -0.370733 0.852319 +v -0.0473693 -0.423079 0.799815 +v -0.0576974 -0.360469 0.893822 +v -0.0495204 -0.395304 0.851292 +v -0.0641499 -0.454693 0.696538 +v -0.0352263 -0.426311 0.757202 +v -0.0543417 -0.44245 0.745122 +v -0.0190571 -0.436735 0.723869 +v -0.0173127 -0.418962 0.764189 +v -0.08278 0.283223 0.354838 +v -0.0403407 0.264584 0.4009 +v -0.0418935 0.284411 0.356338 +v -0.117787 0.25622 0.397308 +v -0.121652 0.278062 0.352302 +v -0.0772361 0.242537 0.445498 +v -0.114267 0.235186 0.443214 +v -0.0389355 0.245943 0.446792 +v -0.0448664 0.351036 0.0368917 +v -0.084777 0.331134 0.0392602 +v -0.0441574 0.329119 0.0693112 +v -0.0436281 0.336529 0.047541 +v -0.122579 0.311429 0.0436831 +v -0.125569 0.33518 0.0110101 +v -0.120968 0.319807 0.0225689 +v -0.0891709 0.320583 0.0906503 +v -0.129137 0.308034 0.0737864 +v -0.0455092 0.326229 0.0998335 +v -0.0632284 0.496693 0.0522852 +v -0.116503 0.442256 0.0399308 +v -0.0541098 0.40816 0.0483714 +v -0.0593708 0.448955 0.0551193 +v -0.153438 0.391277 0.0121446 +v -0.18104 0.470039 0.00485434 +v -0.169159 0.42866 0.0126096 +v -0.0954346 0.370179 0.029827 +v -0.13765 0.35956 0.0095734 +v -0.0488177 0.375217 0.039732 +v -0.0692761 0.505582 -0.562042 +v -0.130136 0.568004 -0.528764 +v -0.0626485 0.640189 -0.506046 +v -0.0664738 0.570216 -0.533525 +v -0.232047 0.565216 -0.501918 +v -0.174025 0.632377 -0.495223 +v -0.199187 0.49892 -0.545668 +v -0.188173 0.564066 -0.51907 +v -0.150533 0.744043 -0.44196 +v -0.113201 0.701726 -0.474505 +v -0.199905 0.685497 -0.462496 +v -0.161614 0.694175 -0.469576 +v -0.0536794 0.762368 -0.447664 +v -0.0582379 0.707055 -0.477971 +v -0.0726958 0.340957 -0.664799 +v -0.138282 0.375681 -0.645424 +v -0.0711811 0.413275 -0.623292 +v -0.0716465 0.376815 -0.648416 +v -0.199873 0.404748 -0.612935 +v -0.193634 0.339499 -0.652866 +v -0.194895 0.370921 -0.637938 +v -0.138821 0.452917 -0.589054 +v -0.202195 0.446614 -0.579567 +v -0.0706181 0.454733 -0.593233 +v -0.0306399 -0.195728 0.970285 +v -0.057123 -0.235922 0.956621 +v -0.0240468 -0.271835 0.943264 +v -0.0277858 -0.234252 0.959139 +v -0.0802769 -0.277764 0.939515 +v -0.0956803 -0.199455 0.960676 +v -0.0895627 -0.238122 0.952018 +v -0.0425527 -0.311463 0.921053 +v -0.0688023 -0.319918 0.921674 +v -0.0202817 -0.307657 0.921165 +v -0.049547 -0.311956 -0.105817 +v -0.0238367 -0.283103 -0.139843 +v -0.023709 -0.319134 -0.103998 +v -0.0816243 -0.264189 -0.144485 +v -0.0796433 -0.304819 -0.108871 +v -0.0878074 -0.176513 -0.193941 +v -0.0521008 -0.23408 -0.173683 +v -0.0840611 -0.222685 -0.173847 +v -0.0267024 -0.190718 -0.197111 +v -0.0248684 -0.240765 -0.171792 +v -0.0599751 -0.128388 -0.209467 +v -0.0321871 -0.0691596 -0.222731 +v -0.0292367 -0.131565 -0.213064 +v -0.101087 -0.0620719 -0.200364 +v -0.0937169 -0.121882 -0.201748 +v -0.115674 0.055105 -0.187883 +v -0.0713902 -0.00682142 -0.215572 +v -0.109216 -0.00036684 -0.192884 +v -0.0381981 0.0419961 -0.235526 +v -0.035269 -0.00935459 -0.229192 +v -0.0803711 0.0844567 -0.225271 +v -0.0428926 0.103386 -0.257977 +v -0.0406901 0.0790388 -0.244814 +v -0.120922 0.124855 -0.209363 +v -0.118034 0.096215 -0.193935 +v -0.138478 0.148595 -0.265069 +v -0.0884331 0.12573 -0.258533 +v -0.128964 0.142918 -0.232488 +v -0.0470212 0.120443 -0.299626 +v -0.0449537 0.11665 -0.27594 +v -0.097999 0.124878 -0.319976 +v -0.0518947 0.108853 -0.365753 +v -0.0492429 0.116377 -0.329956 +v -0.150911 0.126322 -0.356271 +v -0.145782 0.140078 -0.308863 +v -0.16045 0.112915 -0.441079 +v -0.107541 0.107031 -0.401861 +v -0.153901 0.116281 -0.399697 +v -0.0595919 0.101024 -0.449026 +v -0.0552525 0.102268 -0.405836 +v -0.125551 0.112279 -0.490196 +v -0.0709982 0.126709 -0.538642 +v -0.065189 0.10952 -0.494143 +v -0.194944 0.134806 -0.523346 +v -0.176258 0.119186 -0.482359 +v -0.219301 0.191387 -0.600189 +v -0.1475 0.153854 -0.575332 +v -0.210129 0.15949 -0.56385 +v -0.0790718 0.182988 -0.615599 +v -0.0759743 0.151547 -0.579976 +v -0.154044 0.222564 -0.638941 +v -0.0775425 0.260206 -0.661002 +v -0.0792455 0.219987 -0.642965 +v -0.213772 0.26767 -0.647803 +v -0.21995 0.228648 -0.628685 +v -0.144378 0.302534 -0.665208 +v -0.202463 0.304851 -0.656009 +v -0.0750102 0.301309 -0.668637 +v -0.0606884 0.60785 0.00104436 +v -0.126715 0.537337 0.0111468 +v -0.0643107 0.550463 0.0321785 +v -0.0403517 0.7183 -0.0719016 +v -0.0987466 0.656786 -0.062447 +v -0.0504326 0.666442 -0.034872 +v -0.171165 0.605799 -0.0764289 +v -0.126096 0.69557 -0.127071 +v -0.142824 0.650926 -0.0969906 +v -0.191637 0.550233 -0.0477524 +v -0.209701 0.569968 -0.0807895 +v -0.185308 0.513743 -0.0172354 +v -0.258514 0.602197 -0.445199 +v -0.237614 0.630468 -0.469873 +v -0.253217 0.578269 -0.474783 +v -0.246529 0.67248 -0.397952 +v -0.240943 0.662224 -0.43894 +v -0.254771 0.635976 -0.4207 +v -0.212896 0.714905 -0.428435 +v -0.224501 0.676789 -0.452578 +v -0.214224 0.916672 -0.246046 +v -0.201014 0.943338 -0.25145 +v -0.21544 0.938681 -0.279423 +v -0.226436 0.912723 -0.26973 +v -0.216965 0.931825 -0.261167 +v -0.159856 0.939686 -0.239651 +v -0.17745 0.953646 -0.260405 +v -0.179801 0.930945 -0.23207 +v -0.180783 0.946411 -0.244635 +v -0.165912 0.939303 -0.292739 +v -0.191876 0.948989 -0.288378 +v -0.1537 0.943252 -0.269054 +v -0.173109 0.951035 -0.277835 +v -0.216862 0.918936 -0.303965 +v -0.196917 0.927676 -0.311546 +v -0.207634 0.937732 -0.29671 +v -0.209996 0.761876 -0.268358 +v -0.199084 0.77337 -0.281405 +v -0.191438 0.774734 -0.312022 +v -0.207814 0.759869 -0.30299 +v -0.201734 0.767127 -0.28955 +v -0.203233 0.797472 -0.273932 +v -0.192387 0.789092 -0.301842 +v -0.202175 0.775482 -0.251997 +v -0.199221 0.78193 -0.2764 +v -0.165819 0.804418 -0.335288 +v -0.178221 0.788374 -0.325575 +v -0.18742 0.811743 -0.321532 +v -0.181068 0.796668 -0.322844 +v -0.180956 0.7796 -0.34144 +v -0.161743 0.793141 -0.342758 +v -0.178357 0.783728 -0.331262 +v -0.192516 0.777938 -0.227759 +v -0.168503 0.781447 -0.210541 +v -0.151415 0.801648 -0.215482 +v -0.181336 0.804317 -0.228606 +v -0.174268 0.789156 -0.220565 +v -0.153638 0.772539 -0.191376 +v -0.137434 0.789176 -0.20042 +v -0.186175 0.766882 -0.204739 +v -0.162292 0.776737 -0.200861 +v -0.0963023 0.812563 -0.21585 +v -0.12229 0.805309 -0.211386 +v -0.103071 0.800257 -0.198013 +v -0.114773 0.801816 -0.205592 +v -0.135327 0.828572 -0.217894 +v -0.108345 0.822919 -0.221075 +v -0.128262 0.813355 -0.215464 +v -0.143329 0.804627 -0.337252 +v -0.119159 0.809804 -0.331351 +v -0.13845 0.801677 -0.350685 +v -0.140844 0.802002 -0.341998 +v -0.153713 0.826966 -0.334024 +v -0.127696 0.819206 -0.325202 +v -0.147191 0.8121 -0.335056 +v -0.0961567 0.829666 -0.288835 +v -0.10501 0.817882 -0.310157 +v -0.116614 0.840248 -0.308051 +v -0.109848 0.825231 -0.308777 +v -0.0934554 0.817549 -0.318853 +v -0.086003 0.820458 -0.291304 +v -0.100185 0.816042 -0.313185 +v -0.084054 0.824638 -0.268864 +v -0.0780919 0.822576 -0.248928 +v -0.0710179 0.824335 -0.270682 +v -0.0786961 0.822795 -0.269513 +v -0.0959818 0.847028 -0.267898 +v -0.0888081 0.831892 -0.249223 +v -0.0891348 0.832003 -0.268429 +v -0.0899479 0.821575 -0.232115 +v -0.102029 0.843892 -0.232989 +v -0.095203 0.828981 -0.232883 +v -0.0751675 0.819879 -0.228529 +v -0.084018 0.819324 -0.230668 +v -0.231902 0.754223 -0.26947 +v -0.226075 0.759994 -0.240858 +v -0.208076 0.764415 -0.241789 +v -0.216972 0.759952 -0.252956 +v -0.265103 0.760852 -0.220189 +v -0.223444 0.760451 -0.217689 +v -0.264144 0.760816 -0.243923 +v -0.240714 0.760641 -0.229576 +v -0.20189 0.765574 -0.22074 +v -0.215759 0.757673 -0.200462 +v -0.205912 0.761992 -0.209879 +v -0.201854 0.770051 -0.234112 +v -0.234872 0.742799 -0.306286 +v -0.277858 0.727498 -0.319523 +v -0.278995 0.751255 -0.279238 +v -0.256224 0.744786 -0.293184 +v -0.317986 0.708047 -0.333577 +v -0.258236 0.693552 -0.356883 +v -0.284726 0.698216 -0.343913 +v -0.37536 0.738148 -0.30116 +v -0.358205 0.712515 -0.324745 +v -0.402685 0.758643 -0.236201 +v -0.343965 0.756617 -0.269721 +v -0.390758 0.753705 -0.27032 +v -0.311167 0.763685 -0.236173 +v -0.300161 0.759231 -0.259113 +v -0.277376 0.753251 -0.197126 +v -0.248651 0.737773 -0.18066 +v -0.183529 0.754714 -0.188935 +v -0.23327 0.750984 -0.191422 +v -0.352617 0.756796 -0.208565 +v -0.303456 0.759588 -0.213776 +v -0.409003 0.736167 -0.174314 +v -0.409429 0.752424 -0.202781 +v -0.329845 0.712932 -0.159268 +v -0.39942 0.710994 -0.155057 +v -0.178779 0.718135 -0.16643 +v -0.252112 0.713887 -0.166078 +v -0.106741 0.782082 -0.178969 +v -0.0602661 0.797425 -0.177797 +v -0.0705006 0.811753 -0.205807 +v -0.0845451 0.798015 -0.188581 +v -0.128352 0.75368 -0.16956 +v -0.140544 0.766364 -0.181936 +v -0.0771688 0.744134 -0.128582 +v -0.122404 0.729951 -0.151266 +v -0.0359638 0.781745 -0.13792 +v -0.0372542 0.755486 -0.106376 +v -0.0258744 0.814456 -0.19275 +v -0.0313039 0.800824 -0.16616 +v -0.0438017 0.818098 -0.377412 +v -0.0647564 0.824008 -0.337021 +v -0.0269807 0.832763 -0.306956 +v -0.0352238 0.828719 -0.341387 +v -0.0968568 0.789376 -0.411772 +v -0.0494105 0.797681 -0.413491 +v -0.176513 0.760515 -0.410655 +v -0.134148 0.794627 -0.38492 +v -0.140375 0.776566 -0.412207 +v -0.105446 0.812324 -0.352131 +v -0.163948 0.787613 -0.366372 +v -0.134862 0.801108 -0.364702 +v -0.0673729 0.8251 -0.299446 +v -0.0829065 0.820245 -0.328154 +v -0.0209585 0.83068 -0.246717 +v -0.0431316 0.822381 -0.222498 +v -0.0222752 0.824379 -0.219341 +v -0.0427143 0.830406 -0.274631 +v -0.0223763 0.833445 -0.275661 +v -0.0571055 0.825864 -0.248034 +v -0.0589761 0.827121 -0.27268 +v -0.0611506 0.820889 -0.225684 +v -0.220893 0.723503 -0.390265 +v -0.192333 0.761236 -0.378584 +v -0.20182 0.742487 -0.402976 +v -0.229147 0.73046 -0.348619 +v -0.238328 0.704586 -0.373617 +v -0.202503 0.759013 -0.342238 +v -0.217964 0.748268 -0.323878 +v -0.185497 0.772855 -0.357643 +v -0.208154 0.830042 -0.298948 +v -0.20855 0.866089 -0.317157 +v -0.182638 0.844163 -0.332751 +v -0.197796 0.836731 -0.320106 +v -0.207473 0.823979 -0.249259 +v -0.22169 0.856724 -0.273536 +v -0.212209 0.824662 -0.273398 +v -0.225435 0.891324 -0.293612 +v -0.221713 0.885753 -0.253374 +v -0.227222 0.886884 -0.273083 +v -0.202088 0.898609 -0.32219 +v -0.216036 0.894273 -0.311279 +v -0.144889 0.85895 -0.323167 +v -0.140188 0.893495 -0.304854 +v -0.113654 0.869597 -0.287244 +v -0.127225 0.865094 -0.306986 +v -0.17602 0.88052 -0.329499 +v -0.164181 0.851772 -0.332764 +v -0.170407 0.915574 -0.314537 +v -0.186655 0.907214 -0.322451 +v -0.141278 0.921251 -0.283964 +v -0.154011 0.919177 -0.300925 +v -0.106278 0.87162 -0.248059 +v -0.126235 0.896792 -0.232757 +v -0.125921 0.862724 -0.222037 +v -0.112672 0.868658 -0.232446 +v -0.120264 0.900007 -0.266157 +v -0.106638 0.871852 -0.266963 +v -0.136706 0.926532 -0.249134 +v -0.136018 0.925025 -0.266007 +v -0.152825 0.914652 -0.226568 +v -0.141818 0.921807 -0.235425 +v -0.169297 0.842653 -0.222278 +v -0.201725 0.863227 -0.234578 +v -0.191458 0.831381 -0.232334 +v -0.158724 0.882351 -0.220155 +v -0.146124 0.853579 -0.218747 +v -0.191735 0.902282 -0.228209 +v -0.171199 0.908866 -0.224253 +v -0.209229 0.892731 -0.238166 +v -0.228365 -0.446181 0.420977 +v -0.20511 -0.461837 0.475502 +v -0.183641 -0.455489 0.534379 +v -0.21326 -0.450303 0.478539 +v -0.176881 -0.48852 0.469991 +v -0.17086 -0.474631 0.521789 +v -0.206663 -0.472505 0.418626 +v -0.194975 -0.474631 0.472428 +v -0.109552 -0.472057 0.595485 +v -0.142559 -0.466669 0.57469 +v -0.132033 -0.481167 0.556781 +v -0.140849 -0.473458 0.563316 +v -0.102981 -0.465723 0.632974 +v -0.143787 -0.462243 0.587914 +v -0.0755892 -0.465387 0.639018 +v -0.0439995 -0.453929 0.682063 +v -0.0705061 -0.461083 0.663389 +v -0.0917758 -0.479034 0.591505 +v -0.0549351 -0.471091 0.629642 +v -0.0815781 -0.471375 0.616771 +v -0.0238268 -0.46053 0.664171 +v -0.0329053 -0.483094 0.604968 +v -0.0276324 -0.470883 0.636565 +v -0.0210984 -0.44987 0.691901 +v -0.0317646 -0.445352 0.134276 +v -0.065741 -0.440111 0.119726 +v -0.0323291 -0.440606 0.100743 +v -0.034368 -0.461296 0.211229 +v -0.0636123 -0.450028 0.182161 +v -0.0320458 -0.45108 0.17059 +v -0.124102 -0.450719 0.228684 +v -0.0965198 -0.444834 0.175662 +v -0.0981278 -0.457279 0.230677 +v -0.0942201 -0.449501 0.201118 +v -0.138015 -0.443895 0.192281 +v -0.101319 -0.442167 0.150389 +v -0.163536 -0.447685 0.255959 +v -0.205661 -0.440923 0.30331 +v -0.174785 -0.442414 0.24495 +v -0.138385 -0.462583 0.271465 +v -0.179537 -0.460826 0.31166 +v -0.153491 -0.454897 0.266081 +v -0.213095 -0.454425 0.36305 +v -0.178344 -0.481123 0.364052 +v -0.199389 -0.4673 0.363772 +v -0.224677 -0.442616 0.362277 +v -0.0774159 -0.49456 0.56248 +v -0.0472884 -0.515301 0.519274 +v -0.0400356 -0.499329 0.565268 +v -0.12906 -0.497175 0.517019 +v -0.109485 -0.488354 0.558077 +v -0.151776 -0.503865 0.416665 +v -0.102374 -0.516827 0.468605 +v -0.144853 -0.503338 0.468859 +v -0.0552219 -0.529321 0.415644 +v -0.0529288 -0.526727 0.468796 +v -0.101727 -0.509066 0.362546 +v -0.046641 -0.500432 0.308431 +v -0.0524328 -0.518796 0.361628 +v -0.12954 -0.482953 0.312862 +v -0.144743 -0.495777 0.363499 +v -0.0778956 -0.474931 0.261875 +v -0.111951 -0.469275 0.268257 +v -0.0399262 -0.479506 0.257737 +v -0.164631 -0.0504489 0.951176 +v -0.139042 -0.0451633 0.963659 +v -0.137897 -0.0298265 0.961061 +v -0.16267 -0.0297463 0.947597 +v -0.150007 -0.038161 0.957034 +v -0.109851 -0.0516794 0.976283 +v -0.122462 -0.037914 0.969963 +v -0.133714 -0.0642499 0.965416 +v -0.125245 -0.0487781 0.969619 +v -0.130968 -0.0135459 0.956851 +v -0.109331 -0.0304408 0.974293 +v -0.124172 -0.0273895 0.966259 +v -0.18873 -0.0434748 0.935764 +v -0.213918 -0.078022 0.922841 +v -0.172782 -0.0812671 0.947651 +v -0.185903 -0.064746 0.940486 +v -0.24743 -0.125194 0.898745 +v -0.247517 -0.0516572 0.891815 +v -0.248772 -0.0872467 0.896118 +v -0.209867 -0.161573 0.925244 +v -0.2493 -0.167014 0.898651 +v -0.133001 -0.161124 0.956956 +v -0.163882 -0.120989 0.949271 +v -0.170754 -0.160591 0.943861 +v -0.119758 -0.0911109 0.968067 +v -0.149065 -0.0885975 0.957545 +v -0.165953 -0.00373407 0.934179 +v -0.206641 -0.0168625 0.913183 +v -0.181563 -0.0218941 0.9332 +v -0.116698 0.0146029 0.948102 +v -0.155037 0.0342159 0.918365 +v -0.143447 0.00727528 0.940085 +v -0.188508 0.055577 0.881861 +v -0.128713 0.0776757 0.9026 +v -0.159167 0.0664178 0.894094 +v -0.225597 0.0165132 0.878354 +v -0.216542 0.0481267 0.863247 +v -0.237857 -0.0169093 0.886885 +v -0.0314129 0.062618 0.944549 +v -0.0591053 0.0273947 0.96148 +v -0.0272441 0.00174637 0.985368 +v -0.0296124 0.0304081 0.965777 +v -0.0652762 0.0925539 0.91594 +v -0.032753 0.0962353 0.919852 +v -0.0939443 0.0532189 0.93429 +v -0.0973395 0.0863776 0.910036 +v -0.0802969 -0.0053962 0.974961 +v -0.0883591 0.0217178 0.955411 +v -0.0313918 -0.121887 0.983992 +v -0.0640997 -0.158632 0.974036 +v -0.0317497 -0.157085 0.978196 +v -0.0273784 -0.0760818 0.993721 +v -0.05977 -0.0942344 0.98419 +v -0.0298425 -0.0936976 0.988793 +v -0.0956523 -0.123707 0.972085 +v -0.0810019 -0.0733797 0.982855 +v -0.0898671 -0.0931811 0.977114 +v -0.0976501 -0.160225 0.966985 +v -0.0864529 -0.0640166 0.98579 +v -0.0789269 -0.06284 0.994959 +v -0.0955999 -0.0476973 0.985969 +v -0.0940951 -0.0565412 0.98502 +v -0.0525276 -0.0775374 1.01483 +v -0.0666347 -0.0644079 1.00864 +v -0.0598989 -0.0753391 1.00401 +v -0.0652946 -0.0700523 1.00523 +v -0.0598411 -0.0536198 1.01768 +v -0.0788425 -0.0488271 1.00064 +v -0.0525009 -0.0662129 1.0231 +v -0.0652608 -0.0582549 1.01251 +v -0.0861068 -0.0306433 0.989153 +v -0.0938769 -0.0385712 0.986828 +v -0.0582598 -0.0403976 1.0119 +v -0.0476184 -0.0223971 1.0006 +v -0.0694706 -0.025394 0.994502 +v -0.0426567 -0.0627588 1.03251 +v -0.0344846 -0.0534302 1.03232 +v -0.0490439 -0.0525287 1.02501 +v -0.0209047 -0.039677 1.02317 +v -0.0152462 -0.0676801 1.04602 +v -0.0177789 -0.0547726 1.03745 +v -0.0242006 -0.0212264 1.00515 +v -0.0209476 -0.0779737 1.00716 +v -0.0477856 -0.0718253 0.995571 +v -0.0242757 -0.0726037 0.999895 +v -0.0152667 -0.0940994 1.02438 +v -0.0345351 -0.0845283 1.01121 +v -0.0178069 -0.0869021 1.01538 +v -0.0583871 -0.073576 0.998233 +v -0.0427012 -0.0854758 1.01505 +v -0.0491057 -0.0804193 1.00671 +v -0.0697639 -0.0690371 0.990088 +v -0.0394909 -0.0796254 1.02906 +v -0.0271444 -0.0763309 1.04139 +v -0.0399318 -0.0720589 1.03309 +v -0.0271637 -0.0905263 1.02914 +v -0.0399551 -0.0846544 1.02277 +v -0.0132272 -0.0889316 1.04223 +v -0.01374 -0.0942759 1.03402 +v -0.0137291 -0.0795664 1.04692 +vt 0.800375 0.667457 +vt 0.789584 0.668215 +vt 0.799923 0.663933 +vt 0.789057 0.664897 +vt 0.811842 0.670848 +vt 0.80103 0.671718 +vt 0.811217 0.666381 +vt 0.810346 0.655189 +vt 0.810548 0.658683 +vt 0.799442 0.658809 +vt 0.799641 0.661178 +vt 0.788653 0.662549 +vt 0.821717 0.660492 +vt 0.821466 0.655998 +vt 0.832622 0.658487 +vt 0.832389 0.653218 +vt 0.821251 0.651569 +vt 0.822539 0.669852 +vt 0.822041 0.665116 +vt 0.832855 0.663756 +vt 0.768389 0.668485 +vt 0.778915 0.668524 +vt 0.769427 0.673433 +vt 0.779732 0.673035 +vt 0.778165 0.664791 +vt 0.74577 0.661865 +vt 0.756532 0.663039 +vt 0.747747 0.667793 +vt 0.758027 0.6682 +vt 0.759367 0.673605 +vt 0.753496 0.653114 +vt 0.765177 0.656219 +vt 0.755019 0.658037 +vt 0.76625 0.660042 +vt 0.743793 0.655937 +vt 0.777492 0.661858 +vt 0.776857 0.659324 +vt 0.860743 0.66105 +vt 0.85437 0.658994 +vt 0.861885 0.655612 +vt 0.85471 0.654338 +vt 0.858253 0.665619 +vt 0.86356 0.668573 +vt 0.867109 0.663417 +vt 0.870052 0.650753 +vt 0.862482 0.650015 +vt 0.870421 0.644717 +vt 0.862589 0.644612 +vt 0.85505 0.649682 +vt 0.883125 0.662497 +vt 0.876218 0.659429 +vt 0.885992 0.655087 +vt 0.877897 0.652301 +vt 0.878895 0.645534 +vt 0.869196 0.672347 +vt 0.87346 0.666407 +vt 0.879453 0.669777 +vt 0.889305 0.677736 +vt 0.893116 0.683944 +vt 0.881403 0.682863 +vt 0.884277 0.688027 +vt 0.896144 0.692562 +vt 0.90593 0.689794 +vt 0.901798 0.679591 +vt 0.889995 0.666526 +vt 0.884742 0.673283 +vt 0.878268 0.679148 +vt 0.902596 0.665971 +vt 0.89431 0.659538 +vt 0.908133 0.659549 +vt 0.89794 0.652608 +vt 0.916609 0.686107 +vt 0.910596 0.674701 +vt 0.918591 0.668435 +vt 0.713434 0.678889 +vt 0.718232 0.673865 +vt 0.719971 0.68226 +vt 0.723135 0.677582 +vt 0.720227 0.663887 +vt 0.722594 0.669482 +vt 0.714094 0.668877 +vt 0.690854 0.689174 +vt 0.699881 0.681004 +vt 0.701094 0.693026 +vt 0.707762 0.685198 +vt 0.716169 0.688193 +vt 0.697269 0.662673 +vt 0.702107 0.668949 +vt 0.686646 0.668347 +vt 0.692886 0.67536 +vt 0.6822 0.683174 +vt 0.710252 0.663404 +vt 0.717861 0.658291 +vt 0.706788 0.657767 +vt 0.858365 0.672357 +vt 0.853611 0.668611 +vt 0.843559 0.666338 +vt 0.848795 0.664994 +vt 0.847566 0.670615 +vt 0.855227 0.679121 +vt 0.862995 0.676364 +vt 0.858343 0.683022 +vt 0.867102 0.680206 +vt 0.834415 0.678265 +vt 0.843484 0.67676 +vt 0.836434 0.683129 +vt 0.846261 0.68128 +vt 0.848914 0.685681 +vt 0.840865 0.672225 +vt 0.838324 0.667682 +vt 0.832962 0.673545 +vt 0.812703 0.675707 +vt 0.801925 0.676679 +vt 0.791163 0.677558 +vt 0.792268 0.683394 +vt 0.803066 0.682261 +vt 0.82446 0.679693 +vt 0.823312 0.674685 +vt 0.815369 0.686723 +vt 0.826081 0.684957 +vt 0.817113 0.692704 +vt 0.827981 0.690382 +vt 0.79352 0.689825 +vt 0.804461 0.688386 +vt 0.806115 0.694921 +vt 0.798864 0.71184 +vt 0.810186 0.708981 +vt 0.801046 0.72017 +vt 0.812549 0.716812 +vt 0.823667 0.712859 +vt 0.826337 0.721153 +vt 0.81509 0.725328 +vt 0.819076 0.698906 +vt 0.808032 0.701735 +vt 0.796857 0.704106 +vt 0.829963 0.69587 +vt 0.840668 0.692798 +vt 0.832092 0.701818 +vt 0.842717 0.698135 +vt 0.834432 0.708622 +vt 0.837107 0.716573 +vt 0.844937 0.704332 +vt 0.867471 0.703655 +vt 0.86533 0.696176 +vt 0.877095 0.699305 +vt 0.875007 0.692109 +vt 0.872828 0.687102 +vt 0.853212 0.694487 +vt 0.855272 0.700217 +vt 0.857607 0.707609 +vt 0.851162 0.689863 +vt 0.861137 0.686828 +vt 0.870286 0.68346 +vt 0.737342 0.674399 +vt 0.736161 0.679693 +vt 0.731151 0.674738 +vt 0.729268 0.679242 +vt 0.727195 0.684244 +vt 0.743049 0.685744 +vt 0.743345 0.679784 +vt 0.751789 0.685777 +vt 0.751276 0.679628 +vt 0.743533 0.67406 +vt 0.73204 0.698591 +vt 0.733516 0.691513 +vt 0.741945 0.699272 +vt 0.742539 0.692176 +vt 0.751932 0.692359 +vt 0.72474 0.690242 +vt 0.722029 0.697328 +vt 0.716708 0.714828 +vt 0.715092 0.72481 +vt 0.702617 0.714132 +vt 0.700538 0.724407 +vt 0.728191 0.725265 +vt 0.727285 0.735883 +vt 0.713954 0.735509 +vt 0.730575 0.706575 +vt 0.719186 0.705595 +vt 0.70688 0.704276 +vt 0.740902 0.715992 +vt 0.741399 0.707225 +vt 0.75229 0.716217 +vt 0.752093 0.707508 +vt 0.740453 0.725533 +vt 0.740092 0.735897 +vt 0.752425 0.725529 +vt 0.789126 0.722623 +vt 0.790991 0.731868 +vt 0.776943 0.72426 +vt 0.778298 0.733889 +vt 0.787299 0.713921 +vt 0.76386 0.71596 +vt 0.764649 0.725167 +vt 0.765442 0.735096 +vt 0.773153 0.698992 +vt 0.774288 0.706826 +vt 0.762394 0.699466 +vt 0.763091 0.707391 +vt 0.785576 0.705767 +vt 0.784024 0.698116 +vt 0.781583 0.684283 +vt 0.780606 0.678305 +vt 0.77033 0.678903 +vt 0.772112 0.691699 +vt 0.782707 0.69092 +vt 0.761214 0.685501 +vt 0.761821 0.692189 +vt 0.760412 0.679339 +vt 0.899727 0.753469 +vt 0.893091 0.747999 +vt 0.905106 0.743418 +vt 0.897762 0.739947 +vt 0.887783 0.741206 +vt 0.880731 0.745814 +vt 0.886161 0.754214 +vt 0.904716 0.775474 +vt 0.898651 0.768079 +vt 0.914323 0.765617 +vt 0.907202 0.758849 +vt 0.913707 0.74723 +vt 0.877978 0.781668 +vt 0.872582 0.772759 +vt 0.888929 0.775502 +vt 0.883177 0.767576 +vt 0.894526 0.783756 +vt 0.872228 0.750111 +vt 0.877492 0.759308 +vt 0.867387 0.763696 +vt 0.843778 0.771729 +vt 0.83028 0.775596 +vt 0.839713 0.76143 +vt 0.826842 0.765165 +vt 0.83386 0.786091 +vt 0.815809 0.779609 +vt 0.818643 0.790465 +vt 0.860927 0.77752 +vt 0.856148 0.767799 +vt 0.851602 0.757722 +vt 0.852231 0.792074 +vt 0.865736 0.787127 +vt 0.856409 0.802551 +vt 0.870501 0.796949 +vt 0.837491 0.796705 +vt 0.821654 0.801351 +vt 0.841215 0.807639 +vt 0.724356 0.780932 +vt 0.721897 0.791331 +vt 0.712133 0.77893 +vt 0.708432 0.787628 +vt 0.688991 0.788336 +vt 0.696924 0.781352 +vt 0.7032 0.796344 +vt 0.734947 0.804179 +vt 0.736823 0.793158 +vt 0.751835 0.804371 +vt 0.752608 0.793134 +vt 0.738282 0.782037 +vt 0.732844 0.815397 +vt 0.730608 0.827229 +vt 0.715066 0.812163 +vt 0.711339 0.823597 +vt 0.751007 0.816099 +vt 0.681689 0.797702 +vt 0.697958 0.806263 +vt 0.692594 0.817566 +vt 0.802671 0.795049 +vt 0.800517 0.783977 +vt 0.798447 0.773092 +vt 0.783398 0.776846 +vt 0.784699 0.788076 +vt 0.788691 0.822864 +vt 0.787323 0.810943 +vt 0.807157 0.818048 +vt 0.804858 0.806345 +vt 0.768947 0.80275 +vt 0.769269 0.814405 +vt 0.769629 0.82649 +vt 0.768262 0.779889 +vt 0.768648 0.791284 +vt 0.829319 0.730383 +vt 0.817782 0.734631 +vt 0.807922 0.748352 +vt 0.80562 0.738467 +vt 0.820629 0.744508 +vt 0.843731 0.736281 +vt 0.840238 0.725959 +vt 0.854152 0.732184 +vt 0.850604 0.721518 +vt 0.847491 0.747042 +vt 0.836031 0.750919 +vt 0.858049 0.743181 +vt 0.823637 0.754744 +vt 0.810425 0.758547 +vt 0.739591 0.758816 +vt 0.739858 0.747133 +vt 0.753132 0.758368 +vt 0.752889 0.746823 +vt 0.726681 0.747058 +vt 0.739135 0.77052 +vt 0.725558 0.770057 +vt 0.753262 0.7701 +vt 0.69786 0.758579 +vt 0.712375 0.758296 +vt 0.700367 0.76912 +vt 0.712782 0.769064 +vt 0.712907 0.746891 +vt 0.698005 0.747078 +vt 0.929639 0.699595 +vt 0.928443 0.716654 +vt 0.918934 0.700571 +vt 0.918764 0.716584 +vt 0.908376 0.702434 +vt 0.917291 0.732639 +vt 0.908091 0.730817 +vt 0.926839 0.733706 +vt 0.899583 0.717133 +vt 0.899655 0.729345 +vt 0.890467 0.718513 +vt 0.891789 0.729325 +vt 0.898356 0.704249 +vt 0.888732 0.70646 +vt 0.766981 0.757058 +vt 0.767683 0.768445 +vt 0.782175 0.765786 +vt 0.779622 0.744124 +vt 0.766227 0.745834 +vt 0.794659 0.751851 +vt 0.792827 0.741649 +vt 0.796513 0.762357 +vt 0.870023 0.713177 +vt 0.860485 0.717218 +vt 0.863872 0.728122 +vt 0.881776 0.720957 +vt 0.879363 0.709514 +vt 0.876505 0.735646 +vt 0.884297 0.731857 +vt 0.867737 0.739401 +vt 0.942885 0.685053 +vt 0.953367 0.687709 +vt 0.940102 0.70044 +vt 0.950147 0.702062 +vt 0.938165 0.716742 +vt 0.968754 0.704629 +vt 0.964644 0.717556 +vt 0.959599 0.703413 +vt 0.956139 0.717201 +vt 0.963128 0.689798 +vt 0.953145 0.730828 +vt 0.951463 0.743182 +vt 0.945243 0.731521 +vt 0.944286 0.744982 +vt 0.960533 0.730482 +vt 0.936315 0.732906 +vt 0.935707 0.747908 +vt 0.168776 0.186925 +vt 0.153188 0.186399 +vt 0.169355 0.173108 +vt 0.15372 0.172537 +vt 0.137511 0.174005 +vt 0.154886 0.15836 +vt 0.139434 0.160894 +vt 0.135878 0.200202 +vt 0.153921 0.199631 +vt 0.13741 0.213278 +vt 0.156324 0.212569 +vt 0.169774 0.199674 +vt 0.115769 0.200908 +vt 0.0946273 0.201684 +vt 0.11798 0.188318 +vt 0.0992616 0.189776 +vt 0.115489 0.212947 +vt 0.120823 0.175844 +vt 0.123982 0.163427 +vt 0.103896 0.177868 +vt 0.197705 0.18287 +vt 0.184318 0.177386 +vt 0.204286 0.174321 +vt 0.191177 0.166862 +vt 0.182759 0.189357 +vt 0.218051 0.196712 +vt 0.206672 0.195261 +vt 0.218754 0.189245 +vt 0.208611 0.187062 +vt 0.213838 0.179979 +vt 0.195322 0.2024 +vt 0.206572 0.20383 +vt 0.197221 0.212029 +vt 0.207879 0.212331 +vt 0.217851 0.204542 +vt 0.183316 0.200806 +vt 0.185616 0.211745 +vt 0.200177 0.221191 +vt 0.189289 0.222187 +vt 0.176497 0.223558 +vt 0.183072 0.235218 +vt 0.194814 0.232099 +vt 0.222696 0.225794 +vt 0.213531 0.227462 +vt 0.220244 0.219432 +vt 0.210159 0.220329 +vt 0.219048 0.242324 +vt 0.210793 0.236729 +vt 0.224444 0.237674 +vt 0.218111 0.23337 +vt 0.225701 0.231231 +vt 0.192704 0.246651 +vt 0.20267 0.241446 +vt 0.21291 0.248905 +vt 0.147552 0.942756 +vt 0.13896 0.937482 +vt 0.15442 0.936036 +vt 0.145004 0.930904 +vt 0.131991 0.943023 +vt 0.122815 0.936756 +vt 0.130641 0.931218 +vt 0.148962 0.952945 +vt 0.155644 0.947301 +vt 0.157149 0.955791 +vt 0.164222 0.950166 +vt 0.162965 0.941085 +vt 0.125551 0.956525 +vt 0.133402 0.953212 +vt 0.134656 0.9604 +vt 0.141677 0.957166 +vt 0.14902 0.960085 +vt 0.115375 0.942445 +vt 0.124894 0.947972 +vt 0.116632 0.951525 +vt 0.871579 0.942636 +vt 0.878596 0.946725 +vt 0.86416 0.948207 +vt 0.872055 0.95214 +vt 0.886187 0.942108 +vt 0.885478 0.951547 +vt 0.893652 0.946846 +vt 0.872605 0.934139 +vt 0.865133 0.939046 +vt 0.865671 0.931509 +vt 0.858017 0.93669 +vt 0.857275 0.944342 +vt 0.895145 0.930139 +vt 0.887213 0.93361 +vt 0.887365 0.926738 +vt 0.880339 0.930202 +vt 0.873942 0.927331 +vt 0.901581 0.942011 +vt 0.893918 0.937827 +vt 0.902324 0.934359 +vt 0.937778 0.969427 +vt 0.924742 0.963135 +vt 0.963417 0.953814 +vt 0.94277 0.951002 +vt 0.929636 0.938971 +vt 0.950985 0.939207 +vt 0.924587 0.948175 +vt 0.897606 0.964725 +vt 0.904637 0.974329 +vt 0.880983 0.968761 +vt 0.883219 0.980673 +vt 0.91214 0.985041 +vt 0.902437 0.951808 +vt 0.891517 0.95734 +vt 0.87954 0.960235 +vt 0.911331 0.94532 +vt 0.915423 0.938551 +vt 0.837802 0.927994 +vt 0.819804 0.940196 +vt 0.826204 0.927352 +vt 0.800609 0.943494 +vt 0.811605 0.952025 +vt 0.831685 0.94681 +vt 0.836697 0.937574 +vt 0.857877 0.916732 +vt 0.87928 0.910354 +vt 0.863614 0.921492 +vt 0.880267 0.917735 +vt 0.851798 0.911211 +vt 0.857703 0.929735 +vt 0.868668 0.924726 +vt 0.880724 0.922242 +vt 0.845039 0.94326 +vt 0.848987 0.936302 +vt 0.924475 0.930625 +vt 0.941648 0.929031 +vt 0.96114 0.927417 +vt 0.933224 0.916635 +vt 0.922496 0.92029 +vt 0.903495 0.926861 +vt 0.911938 0.93218 +vt 0.897103 0.91889 +vt 0.892712 0.923251 +vt 0.905308 0.905852 +vt 0.901263 0.912802 +vt 0.820926 0.962167 +vt 0.836809 0.955124 +vt 0.840048 0.970839 +vt 0.802886 0.96989 +vt 0.830758 0.980145 +vt 0.856645 0.954682 +vt 0.848379 0.949442 +vt 0.864116 0.967327 +vt 0.867473 0.958814 +vt 0.86125 0.978259 +vt 0.85863 0.990399 +vt 0.191842 0.938528 +vt 0.18483 0.928669 +vt 0.214023 0.932819 +vt 0.202519 0.920832 +vt 0.190621 0.899112 +vt 0.222723 0.912315 +vt 0.180131 0.909732 +vt 0.161958 0.928403 +vt 0.17217 0.935147 +vt 0.177196 0.942628 +vt 0.133862 0.910183 +vt 0.152639 0.912726 +vt 0.135915 0.920575 +vt 0.149326 0.922843 +vt 0.155653 0.899975 +vt 0.158518 0.885909 +vt 0.131 0.896051 +vt 0.0727151 0.905945 +vt 0.0872616 0.914579 +vt 0.045865 0.922565 +vt 0.0688679 0.927864 +vt 0.0891699 0.932953 +vt 0.0611106 0.940896 +vt 0.0850445 0.943365 +vt 0.116168 0.914322 +vt 0.108088 0.902447 +vt 0.0995652 0.889326 +vt 0.112481 0.9301 +vt 0.123364 0.923705 +vt 0.10407 0.937626 +vt 0.101008 0.945485 +vt 0.141749 0.967835 +vt 0.159735 0.964585 +vt 0.141615 0.973986 +vt 0.164947 0.968203 +vt 0.198452 0.956803 +vt 0.170264 0.972446 +vt 0.186612 0.957297 +vt 0.165935 0.957311 +vt 0.154732 0.962219 +vt 0.141924 0.964387 +vt 0.187555 0.948567 +vt 0.17427 0.950399 +vt 0.205846 0.945238 +vt 0.226639 0.94116 +vt 0.0918948 0.952851 +vt 0.072194 0.95227 +vt 0.0497805 0.951411 +vt 0.080546 0.963637 +vt 0.0937428 0.962144 +vt 0.116457 0.959008 +vt 0.10617 0.952878 +vt 0.123264 0.966181 +vt 0.12877 0.963081 +vt 0.111312 0.975863 +vt 0.117382 0.970674 +vt 0.168188 0.257701 +vt 0.179853 0.251475 +vt 0.181861 0.270696 +vt 0.19145 0.264485 +vt 0.168322 0.238524 +vt 0.157989 0.278114 +vt 0.139623 0.26474 +vt 0.161775 0.267111 +vt 0.143271 0.254169 +vt 0.176773 0.279775 +vt 0.122129 0.24267 +vt 0.0996677 0.231893 +vt 0.121641 0.233595 +vt 0.0964428 0.225792 +vt 0.121258 0.251367 +vt 0.141637 0.226246 +vt 0.118437 0.223765 +vt 0.0932179 0.219692 +vt 0.160802 0.225544 +vt 0.0419152 0.53618 +vt 0.0472563 0.523503 +vt 0.0332681 0.539408 +vt 0.038828 0.522754 +vt 0.0547796 0.5128 +vt 0.0629257 0.517019 +vt 0.0550589 0.52441 +vt 0.0478604 0.554178 +vt 0.0476885 0.543737 +vt 0.0376346 0.561691 +vt 0.0380519 0.549348 +vt 0.0277081 0.556063 +vt 0.0662616 0.533766 +vt 0.0581 0.532485 +vt 0.0632249 0.540131 +vt 0.0559107 0.540335 +vt 0.055828 0.548702 +vt 0.0616102 0.525629 +vt 0.0679204 0.520553 +vt 0.0687181 0.527585 +vt 0.0509533 0.580146 +vt 0.0426311 0.57189 +vt 0.0442882 0.588789 +vt 0.0332182 0.580753 +vt 0.0513392 0.563763 +vt 0.0757862 0.577556 +vt 0.0655669 0.57722 +vt 0.0718228 0.588438 +vt 0.060513 0.586655 +vt 0.0553583 0.596825 +vt 0.0637107 0.564356 +vt 0.0704192 0.569255 +vt 0.070071 0.55722 +vt 0.0760258 0.562179 +vt 0.0789464 0.569999 +vt 0.0586375 0.557107 +vt 0.0648092 0.550898 +vt 0.0904211 0.548013 +vt 0.0833422 0.555408 +vt 0.0957205 0.55254 +vt 0.0881221 0.560358 +vt 0.0767944 0.549978 +vt 0.090315 0.526886 +vt 0.0877993 0.53464 +vt 0.0982366 0.53011 +vt 0.0953147 0.539062 +vt 0.100791 0.542278 +vt 0.0746039 0.537227 +vt 0.0781908 0.530701 +vt 0.0798442 0.524364 +vt 0.0701373 0.544116 +vt 0.925171 0.815649 +vt 0.920243 0.805051 +vt 0.934775 0.80669 +vt 0.929739 0.796503 +vt 0.93322 0.778201 +vt 0.938087 0.788562 +vt 0.924761 0.786096 +vt 0.904862 0.803051 +vt 0.910168 0.813683 +vt 0.893079 0.810992 +vt 0.898686 0.821929 +vt 0.915568 0.824608 +vt 0.910263 0.784583 +vt 0.899742 0.793007 +vt 0.888113 0.80057 +vt 0.919899 0.77525 +vt 0.928896 0.766724 +vt 0.815787 0.855921 +vt 0.819336 0.868912 +vt 0.793818 0.862058 +vt 0.795798 0.875795 +vt 0.831679 0.83698 +vt 0.836161 0.849417 +vt 0.812478 0.843031 +vt 0.770591 0.852857 +vt 0.771369 0.867508 +vt 0.748599 0.854921 +vt 0.748212 0.870509 +vt 0.772261 0.882678 +vt 0.790259 0.835472 +vt 0.77004 0.839246 +vt 0.749297 0.841006 +vt 0.80965 0.830342 +vt 0.827993 0.824626 +vt 0.724119 0.869298 +vt 0.722193 0.885121 +vt 0.69961 0.865356 +vt 0.695663 0.88068 +vt 0.726136 0.854086 +vt 0.681189 0.844692 +vt 0.675206 0.860163 +vt 0.659402 0.836491 +vt 0.651382 0.852648 +vt 0.669133 0.87624 +vt 0.686995 0.830434 +vt 0.707465 0.836555 +vt 0.667117 0.821916 +vt 0.728335 0.840094 +vt 0.844791 0.630193 +vt 0.844724 0.634228 +vt 0.843982 0.630547 +vt 0.842478 0.634715 +vt 0.837664 0.639425 +vt 0.840419 0.635163 +vt 0.840973 0.638882 +vt 0.848717 0.637567 +vt 0.847346 0.633664 +vt 0.854083 0.636646 +vt 0.851791 0.632782 +vt 0.845599 0.629839 +vt 0.849337 0.641623 +vt 0.849581 0.645756 +vt 0.844215 0.642375 +vt 0.843773 0.646487 +vt 0.855223 0.640762 +vt 0.839469 0.64305 +vt 0.83491 0.643687 +vt 0.837964 0.647218 +vt 0.725656 0.643083 +vt 0.719643 0.64232 +vt 0.724939 0.640251 +vt 0.71996 0.638782 +vt 0.711679 0.641543 +vt 0.711659 0.645946 +vt 0.719749 0.645744 +vt 0.738356 0.646598 +vt 0.732577 0.6462 +vt 0.736627 0.644893 +vt 0.731247 0.643959 +vt 0.729918 0.641719 +vt 0.727515 0.648634 +vt 0.733906 0.64844 +vt 0.728655 0.651352 +vt 0.735235 0.65068 +vt 0.740086 0.648303 +vt 0.712958 0.649959 +vt 0.7207 0.648941 +vt 0.722074 0.652024 +vt 0.884966 0.82932 +vt 0.890192 0.840682 +vt 0.86976 0.836188 +vt 0.87442 0.847798 +vt 0.879899 0.818138 +vt 0.849222 0.830896 +vt 0.853822 0.842863 +vt 0.858647 0.854913 +vt 0.860816 0.813432 +vt 0.845073 0.819095 +vt 0.87515 0.807317 +vt 0.953522 0.784398 +vt 0.950371 0.775653 +vt 0.958094 0.777732 +vt 0.955796 0.769832 +vt 0.959544 0.757237 +vt 0.961105 0.764151 +vt 0.953683 0.761713 +vt 0.940794 0.771842 +vt 0.944716 0.781755 +vt 0.94895 0.791065 +vt 0.945308 0.756461 +vt 0.937496 0.760723 +vt 0.957984 0.750323 +vt 0.951941 0.753153 +vt 0.237985 0.738297 +vt 0.268705 0.737229 +vt 0.241633 0.762787 +vt 0.268705 0.761697 +vt 0.200475 0.715676 +vt 0.234693 0.711537 +vt 0.207029 0.741466 +vt 0.222333 0.788147 +vt 0.245519 0.78554 +vt 0.230341 0.810102 +vt 0.249523 0.807426 +vt 0.268705 0.784364 +vt 0.159946 0.773803 +vt 0.187254 0.769363 +vt 0.175961 0.794629 +vt 0.199147 0.791261 +vt 0.211159 0.812779 +vt 0.165843 0.72393 +vt 0.175598 0.746705 +vt 0.14393 0.752977 +vt 0.253345 0.280308 +vt 0.268706 0.280765 +vt 0.253464 0.295744 +vt 0.268576 0.296249 +vt 0.238317 0.265747 +vt 0.253558 0.266767 +vt 0.238168 0.279086 +vt 0.239577 0.31028 +vt 0.253859 0.311911 +vt 0.240382 0.325349 +vt 0.254334 0.327593 +vt 0.268615 0.312525 +vt 0.21323 0.291052 +vt 0.225134 0.292637 +vt 0.214544 0.305067 +vt 0.22632 0.307825 +vt 0.227134 0.322083 +vt 0.223441 0.277203 +vt 0.223004 0.263413 +vt 0.210121 0.276206 +vt 0.268934 0.241592 +vt 0.268768 0.248379 +vt 0.255927 0.241503 +vt 0.254998 0.248112 +vt 0.243677 0.241038 +vt 0.256594 0.23557 +vt 0.244966 0.235422 +vt 0.239676 0.25526 +vt 0.254158 0.256284 +vt 0.268799 0.256538 +vt 0.225586 0.253155 +vt 0.229504 0.24562 +vt 0.233074 0.239996 +vt 0.235164 0.235206 +vt 0.672084 0.639787 +vt 0.66845 0.628475 +vt 0.686608 0.639919 +vt 0.68396 0.631421 +vt 0.660815 0.654442 +vt 0.655577 0.64149 +vt 0.676137 0.650509 +vt 0.700237 0.640623 +vt 0.701506 0.646666 +vt 0.69947 0.634368 +vt 0.693146 0.655714 +vt 0.703781 0.652284 +vt 0.681027 0.660046 +vt 0.66725 0.665722 +vt 0.869213 0.629853 +vt 0.859507 0.631337 +vt 0.868187 0.625508 +vt 0.857298 0.627496 +vt 0.861301 0.635363 +vt 0.891113 0.635857 +vt 0.879896 0.634217 +vt 0.89156 0.629458 +vt 0.879626 0.628853 +vt 0.879077 0.62352 +vt 0.870406 0.639191 +vt 0.879607 0.639641 +vt 0.889853 0.641715 +vt 0.862262 0.639758 +vt 0.92121 0.637592 +vt 0.905828 0.63279 +vt 0.925118 0.630408 +vt 0.907542 0.62597 +vt 0.903798 0.639508 +vt 0.942567 0.656273 +vt 0.930472 0.650822 +vt 0.949711 0.646823 +vt 0.936482 0.642606 +vt 0.942694 0.634846 +vt 0.912967 0.652217 +vt 0.924862 0.659954 +vt 0.936428 0.667127 +vt 0.901136 0.646022 +vt 0.966001 0.650564 +vt 0.958961 0.649232 +vt 0.970644 0.639264 +vt 0.965457 0.639274 +vt 0.952791 0.65981 +vt 0.969418 0.663982 +vt 0.972601 0.651548 +vt 0.976942 0.665473 +vt 0.97898 0.652359 +vt 0.975831 0.639254 +vt 0.957281 0.67448 +vt 0.966331 0.676693 +vt 0.974903 0.678588 +vt 0.947274 0.67163 +vt 0.269766 0.158525 +vt 0.250658 0.159766 +vt 0.270029 0.149052 +vt 0.248065 0.150831 +vt 0.220307 0.146351 +vt 0.245291 0.141613 +vt 0.226699 0.154829 +vt 0.24059 0.178843 +vt 0.237237 0.170956 +vt 0.254532 0.176342 +vt 0.25289 0.168134 +vt 0.269586 0.166899 +vt 0.216438 0.167843 +vt 0.223799 0.174757 +vt 0.228354 0.181409 +vt 0.20652 0.159758 +vt 0.195322 0.151089 +vt 0.255674 0.193252 +vt 0.255353 0.184799 +vt 0.26904 0.192481 +vt 0.269203 0.183716 +vt 0.242017 0.186776 +vt 0.242969 0.210229 +vt 0.242663 0.202753 +vt 0.255922 0.209205 +vt 0.255817 0.201447 +vt 0.269103 0.200716 +vt 0.229862 0.196333 +vt 0.229944 0.203984 +vt 0.230377 0.211402 +vt 0.229853 0.188704 +vt 0.256133 0.216346 +vt 0.269011 0.215922 +vt 0.256393 0.223033 +vt 0.26887 0.222737 +vt 0.243486 0.217235 +vt 0.244951 0.229727 +vt 0.256648 0.229427 +vt 0.268973 0.2293 +vt 0.232926 0.224635 +vt 0.234642 0.230172 +vt 0.231438 0.218332 +vt 0.231875 0.681974 +vt 0.195405 0.687835 +vt 0.268705 0.681041 +vt 0.268707 0.649795 +vt 0.231298 0.650222 +vt 0.159651 0.701684 +vt 0.124255 0.719528 +vt 0.152896 0.681504 +vt 0.120595 0.706905 +vt 0.162996 0.634435 +vt 0.141452 0.664926 +vt 0.142052 0.61864 +vt 0.127664 0.650149 +vt 0.116935 0.694282 +vt 0.211524 0.580428 +vt 0.203702 0.612749 +vt 0.187831 0.570739 +vt 0.178593 0.601672 +vt 0.15644 0.58713 +vt 0.268705 0.617234 +vt 0.234725 0.616894 +vt 0.239135 0.585332 +vt 0.199167 0.27764 +vt 0.203439 0.290476 +vt 0.191338 0.282164 +vt 0.195938 0.298294 +vt 0.204702 0.30253 +vt 0.194745 0.309006 +vt 0.204397 0.314025 +vt 0.187394 0.290439 +vt 0.185378 0.30188 +vt 0.158413 0.418134 +vt 0.159054 0.422514 +vt 0.151701 0.418126 +vt 0.153357 0.422511 +vt 0.148767 0.427196 +vt 0.147324 0.422254 +vt 0.154331 0.42702 +vt 0.164378 0.426932 +vt 0.164461 0.422716 +vt 0.169254 0.42687 +vt 0.169733 0.422548 +vt 0.164807 0.418553 +vt 0.159617 0.435925 +vt 0.159655 0.431437 +vt 0.163693 0.43525 +vt 0.1639 0.431123 +vt 0.16807 0.431122 +vt 0.15511 0.43158 +vt 0.150273 0.432153 +vt 0.155198 0.436148 +vt 0.137897 0.391939 +vt 0.139469 0.389504 +vt 0.17063 0.392906 +vt 0.177579 0.390684 +vt 0.108525 0.396264 +vt 0.10962 0.392167 +vt 0.136029 0.394644 +vt 0.189135 0.398093 +vt 0.201386 0.395105 +vt 0.205359 0.404085 +vt 0.221392 0.400547 +vt 0.215689 0.391863 +vt 0.159402 0.397834 +vt 0.180988 0.400577 +vt 0.156251 0.401361 +vt 0.175531 0.40322 +vt 0.1956 0.40625 +vt 0.133566 0.39789 +vt 0.106177 0.400376 +vt 0.13333 0.401583 +vt 0.105778 0.419582 +vt 0.112909 0.431692 +vt 0.0857539 0.42372 +vt 0.0978159 0.435407 +vt 0.0792543 0.412786 +vt 0.0493589 0.420043 +vt 0.0604704 0.429958 +vt 0.113824 0.445537 +vt 0.130697 0.452864 +vt 0.104492 0.449389 +vt 0.127195 0.455721 +vt 0.123421 0.442151 +vt 0.0620736 0.445754 +vt 0.0967788 0.453971 +vt 0.042503 0.451596 +vt 0.0898755 0.458919 +vt 0.12693 0.459685 +vt 0.0109524 0.427572 +vt 0.0292777 0.436932 +vt -0.00486957 0.444274 +vt 0.218498 0.42425 +vt 0.211205 0.424626 +vt 0.236149 0.408646 +vt 0.221871 0.411246 +vt 0.209393 0.413479 +vt 0.194343 0.436667 +vt 0.197771 0.438115 +vt 0.182271 0.446693 +vt 0.18375 0.449328 +vt 0.200848 0.439853 +vt 0.190212 0.435797 +vt 0.185733 0.435099 +vt 0.197971 0.425316 +vt 0.191608 0.425692 +vt 0.179819 0.445093 +vt 0.200514 0.414982 +vt 0.193566 0.416303 +vt 0.160223 0.460849 +vt 0.159192 0.459271 +vt 0.17171 0.458153 +vt 0.171322 0.455881 +vt 0.17064 0.453743 +vt 0.14455 0.458507 +vt 0.146064 0.460995 +vt 0.148735 0.463545 +vt 0.158128 0.455703 +vt 0.14535 0.456142 +vt 0.158194 0.452773 +vt 0.147456 0.453335 +vt 0.169371 0.451874 +vt 0.167924 0.449711 +vt 0.0851413 0.39891 +vt 0.0922294 0.393554 +vt 0.0991561 0.388722 +vt 0.100257 0.388524 +vt 0.0806903 0.395723 +vt 0.0520286 0.41091 +vt 0.0799332 0.404918 +vt 0.0223556 0.413036 +vt 0.0433475 0.407848 +vt -0.0149432 0.424994 +vt 0.019659 0.417742 +vt 0.0699681 0.398298 +vt 0.0980548 0.388921 +vt 0.0596545 0.401078 +vt 0.112325 0.545469 +vt 0.112227 0.562147 +vt 0.121292 0.533311 +vt 0.124355 0.551553 +vt 0.0994555 0.572536 +vt 0.0969232 0.587328 +vt 0.112171 0.578561 +vt 0.106779 0.524557 +vt 0.107589 0.538443 +vt 0.110423 0.513527 +vt 0.112506 0.528264 +vt 0.118228 0.515069 +vt 0.0989423 0.555133 +vt 0.104283 0.542593 +vt 0.104701 0.530629 +vt 0.0882754 0.571292 +vt 0.0894754 0.56478 +vt 0.0853955 0.582515 +vt 0.0816758 0.596094 +vt 0.0753139 0.485928 +vt 0.0650052 0.492652 +vt 0.0850253 0.491819 +vt 0.076075 0.499356 +vt 0.0930081 0.48361 +vt 0.100394 0.488016 +vt 0.0945577 0.497873 +vt 0.0651895 0.505551 +vt 0.073766 0.51176 +vt 0.0546966 0.499376 +vt 0.0900973 0.518593 +vt 0.0785101 0.518041 +vt 0.0994002 0.522709 +vt 0.100625 0.514782 +vt 0.107779 0.492421 +vt 0.103732 0.504253 +vt 0.23946 0.508287 +vt 0.230571 0.517622 +vt 0.228964 0.503271 +vt 0.217261 0.507781 +vt 0.188396 0.491269 +vt 0.206255 0.496224 +vt 0.200655 0.50824 +vt 0.268702 0.540749 +vt 0.243925 0.538213 +vt 0.268704 0.526377 +vt 0.248486 0.524031 +vt 0.253257 0.51249 +vt 0.215104 0.553361 +vt 0.241505 0.558876 +vt 0.268704 0.561105 +vt 0.190298 0.545736 +vt 0.166291 0.537055 +vt 0.187254 0.524533 +vt 0.161754 0.51849 +vt 0.170538 0.486314 +vt 0.179959 0.505005 +vt 0.157216 0.499924 +vt 0.24946 0.367438 +vt 0.258636 0.367175 +vt 0.255765 0.379731 +vt 0.262283 0.37965 +vt 0.255826 0.354536 +vt 0.268674 0.354878 +vt 0.268728 0.367451 +vt 0.234227 0.359499 +vt 0.242109 0.369275 +vt 0.228611 0.363909 +vt 0.23567 0.3719 +vt 0.249247 0.379811 +vt 0.215158 0.338968 +vt 0.227222 0.344776 +vt 0.214279 0.345817 +vt 0.224857 0.351242 +vt 0.221552 0.355917 +vt 0.240937 0.339238 +vt 0.227708 0.334728 +vt 0.215289 0.329543 +vt 0.268674 0.342201 +vt 0.254691 0.341571 +vt 0.244771 0.497304 +vt 0.256308 0.499747 +vt 0.268704 0.500841 +vt 0.268703 0.486337 +vt 0.258069 0.48605 +vt 0.225998 0.491141 +vt 0.227882 0.481103 +vt 0.234955 0.49435 +vt 0.237658 0.483058 +vt 0.249236 0.471672 +vt 0.239501 0.471434 +vt 0.250178 0.458265 +vt 0.240915 0.459645 +vt 0.229767 0.471064 +vt 0.25897 0.471644 +vt 0.268704 0.471564 +vt 0.259441 0.456884 +vt 0.203423 0.33552 +vt 0.203968 0.325186 +vt 0.193422 0.320894 +vt 0.18965 0.357864 +vt 0.190908 0.345555 +vt 0.202072 0.352895 +vt 0.202774 0.344537 +vt 0.18128 0.331343 +vt 0.179249 0.347026 +vt 0.17058 0.329645 +vt 0.167693 0.348723 +vt 0.177228 0.362833 +vt 0.183331 0.315904 +vt 0.173467 0.310566 +vt 0.17135 0.406685 +vt 0.182441 0.411169 +vt 0.16826 0.410583 +vt 0.176559 0.414437 +vt 0.155839 0.404764 +vt 0.157521 0.413533 +vt 0.166076 0.414524 +vt 0.172571 0.417098 +vt 0.135724 0.413665 +vt 0.144491 0.409813 +vt 0.142544 0.416326 +vt 0.148879 0.413937 +vt 0.13814 0.405626 +vt 0.124506 0.410074 +vt 0.174252 0.441387 +vt 0.171559 0.438762 +vt 0.181259 0.434168 +vt 0.176807 0.433082 +vt 0.186036 0.426037 +vt 0.174588 0.426678 +vt 0.172391 0.431921 +vt 0.168862 0.436383 +vt 0.180644 0.419795 +vt 0.175028 0.421443 +vt 0.186883 0.417995 +vt 0.149859 0.449516 +vt 0.140851 0.446115 +vt 0.152195 0.445145 +vt 0.145413 0.441926 +vt 0.158597 0.449574 +vt 0.159394 0.440679 +vt 0.154101 0.440679 +vt 0.14915 0.438598 +vt 0.165593 0.443116 +vt 0.164422 0.439274 +vt 0.166713 0.446693 +vt 0.121193 0.418911 +vt 0.132677 0.420037 +vt 0.1248 0.429441 +vt 0.142327 0.427533 +vt 0.140909 0.42129 +vt 0.13921 0.436123 +vt 0.145149 0.43376 +vt 0.131925 0.438966 +vt 0.718331 0.590305 +vt 0.746935 0.609408 +vt 0.714187 0.592962 +vt 0.74538 0.618837 +vt 0.776045 0.619539 +vt 0.775836 0.606046 +vt 0.748316 0.600181 +vt 0.698297 0.570265 +vt 0.691016 0.56935 +vt 0.678793 0.553513 +vt 0.668258 0.550016 +vt 0.682993 0.567088 +vt 0.724973 0.581367 +vt 0.704095 0.568485 +vt 0.726629 0.571953 +vt 0.707052 0.562689 +vt 0.687534 0.554647 +vt 0.775571 0.595734 +vt 0.74935 0.591359 +vt 0.749786 0.580241 +vt 0.631527 0.521919 +vt 0.643349 0.524282 +vt 0.641663 0.531566 +vt 0.653323 0.535777 +vt 0.66485 0.539385 +vt 0.649849 0.514184 +vt 0.635476 0.513181 +vt 0.647883 0.501604 +vt 0.631937 0.501954 +vt 0.62139 0.512271 +vt 0.684619 0.531929 +vt 0.668859 0.529 +vt 0.681508 0.516892 +vt 0.664797 0.515372 +vt 0.663468 0.501153 +vt 0.676113 0.541788 +vt 0.689104 0.545131 +vt 0.919101 0.529512 +vt 0.932277 0.513107 +vt 0.933894 0.53169 +vt 0.952549 0.514234 +vt 0.938271 0.4968 +vt 0.915407 0.496828 +vt 0.912378 0.512315 +vt 0.874997 0.559455 +vt 0.89162 0.543518 +vt 0.884334 0.563198 +vt 0.903546 0.546094 +vt 0.915238 0.549145 +vt 0.888008 0.52727 +vt 0.879227 0.541892 +vt 0.86975 0.528566 +vt 0.864702 0.54298 +vt 0.866281 0.556104 +vt 0.894945 0.496872 +vt 0.893224 0.512192 +vt 0.87312 0.513029 +vt 0.860186 0.581167 +vt 0.86658 0.586129 +vt 0.833052 0.598471 +vt 0.836578 0.605656 +vt 0.854086 0.575883 +vt 0.804878 0.613577 +vt 0.803304 0.602321 +vt 0.806576 0.625184 +vt 0.801979 0.591764 +vt 0.80095 0.579355 +vt 0.826879 0.582241 +vt 0.824828 0.570521 +vt 0.848572 0.569954 +vt 0.845415 0.561476 +vt 0.723056 0.499144 +vt 0.723365 0.520768 +vt 0.700461 0.499917 +vt 0.701169 0.518891 +vt 0.702985 0.536491 +vt 0.773996 0.544472 +vt 0.748527 0.544271 +vt 0.773366 0.521907 +vt 0.747679 0.521923 +vt 0.747248 0.498271 +vt 0.725988 0.558685 +vt 0.74937 0.564127 +vt 0.774586 0.566031 +vt 0.705814 0.551558 +vt 0.799676 0.520274 +vt 0.799659 0.497042 +vt 0.825661 0.517765 +vt 0.825711 0.49681 +vt 0.799857 0.542467 +vt 0.848896 0.532613 +vt 0.850371 0.515118 +vt 0.850862 0.496842 +vt 0.824745 0.55595 +vt 0.846383 0.548548 +vt 0.800262 0.562542 +vt 0.622835 0.741898 +vt 0.629822 0.737341 +vt 0.630937 0.748106 +vt 0.637348 0.741916 +vt 0.638168 0.732456 +vt 0.632743 0.72671 +vt 0.623594 0.732979 +vt 0.601364 0.736825 +vt 0.612351 0.737387 +vt 0.601727 0.746549 +vt 0.614012 0.74515 +vt 0.621199 0.753622 +vt 0.623692 0.721651 +vt 0.615298 0.729693 +vt 0.603694 0.727299 +vt 0.64705 0.720202 +vt 0.651064 0.728223 +vt 0.666861 0.725286 +vt 0.666356 0.736499 +vt 0.651523 0.736804 +vt 0.655097 0.70327 +vt 0.638367 0.712843 +vt 0.644545 0.693632 +vt 0.627328 0.703786 +vt 0.680292 0.699272 +vt 0.669656 0.692929 +vt 0.66043 0.68407 +vt 0.686784 0.713263 +vt 0.693307 0.702612 +vt 0.683906 0.72429 +vt 0.682763 0.73584 +vt 0.664776 0.7482 +vt 0.649538 0.745843 +vt 0.644256 0.754878 +vt 0.68235 0.760278 +vt 0.681446 0.748063 +vt 0.67624 0.777475 +vt 0.68787 0.771805 +vt 0.657375 0.798004 +vt 0.64028 0.785894 +vt 0.666427 0.786487 +vt 0.651148 0.774455 +vt 0.634824 0.763445 +vt 0.622928 0.773335 +vt 0.597165 0.801047 +vt 0.584037 0.816073 +vt 0.575655 0.789046 +vt 0.561282 0.802854 +vt 0.606349 0.829025 +vt 0.594793 0.84477 +vt 0.570888 0.831255 +vt 0.629233 0.799056 +vt 0.610251 0.786335 +vt 0.590115 0.774943 +vt 0.648026 0.811186 +vt 0.638424 0.825833 +vt 0.628613 0.841743 +vt 0.618698 0.858285 +vt 0.643447 0.660513 +vt 0.635997 0.646287 +vt 0.6049 0.637043 +vt 0.628919 0.631286 +vt 0.614692 0.652678 +vt 0.634531 0.681735 +vt 0.651642 0.673186 +vt 0.584936 0.681759 +vt 0.604883 0.675219 +vt 0.597105 0.697898 +vt 0.616244 0.690669 +vt 0.593009 0.659162 +vt 0.58088 0.642801 +vt 0.571868 0.665802 +vt 0.586302 0.735665 +vt 0.587541 0.725613 +vt 0.566532 0.713946 +vt 0.585456 0.714475 +vt 0.569532 0.724249 +vt 0.584349 0.745549 +vt 0.579071 0.755761 +vt 0.565094 0.743135 +vt 0.557994 0.751956 +vt 0.550572 0.731836 +vt 0.547179 0.740294 +vt 0.532926 0.729581 +vt 0.530226 0.737883 +vt 0.540511 0.747664 +vt 0.550413 0.713789 +vt 0.552359 0.722818 +vt 0.536163 0.720718 +vt 0.553225 0.778158 +vt 0.567858 0.766798 +vt 0.546459 0.760192 +vt 0.496408 0.78312 +vt 0.5145 0.775693 +vt 0.521696 0.80043 +vt 0.537687 0.789339 +vt 0.512875 0.758052 +vt 0.492969 0.762083 +vt 0.500324 0.747435 +vt 0.478432 0.748437 +vt 0.471121 0.76581 +vt 0.5289 0.753414 +vt 0.51732 0.74582 +vt 0.55219 0.672662 +vt 0.56563 0.687095 +vt 0.519008 0.667707 +vt 0.537934 0.658133 +vt 0.533662 0.679776 +vt 0.558759 0.703094 +vt 0.577435 0.701334 +vt 0.516448 0.703502 +vt 0.530573 0.696655 +vt 0.529774 0.709521 +vt 0.542602 0.705297 +vt 0.515971 0.687177 +vt 0.500082 0.677282 +vt 0.500703 0.696106 +vt 0.496419 0.736002 +vt 0.513862 0.73676 +vt 0.515969 0.727011 +vt 0.476228 0.734685 +vt 0.454664 0.733089 +vt 0.481514 0.721061 +vt 0.463494 0.717678 +vt 0.505915 0.712954 +vt 0.489445 0.707801 +vt 0.472325 0.702267 +vt 0.521085 0.717345 +vt 0.817772 0.32972 +vt 0.817268 0.334177 +vt 0.807098 0.329266 +vt 0.806518 0.333516 +vt 0.806012 0.337004 +vt 0.795796 0.333142 +vt 0.795184 0.336418 +vt 0.838686 0.341177 +vt 0.827785 0.339607 +vt 0.838685 0.335915 +vt 0.827985 0.335004 +vt 0.82832 0.330282 +vt 0.827498 0.348469 +vt 0.816308 0.345239 +vt 0.82763 0.344073 +vt 0.816582 0.341797 +vt 0.838688 0.346438 +vt 0.805553 0.339703 +vt 0.794562 0.338721 +vt 0.805117 0.342008 +vt 0.784417 0.336886 +vt 0.785167 0.333173 +vt 0.774651 0.33352 +vt 0.775476 0.328538 +vt 0.785864 0.328653 +vt 0.771718 0.345756 +vt 0.772735 0.341953 +vt 0.782822 0.342267 +vt 0.783629 0.339781 +vt 0.763085 0.339283 +vt 0.761859 0.344306 +vt 0.752475 0.340764 +vt 0.750993 0.34675 +vt 0.760614 0.349246 +vt 0.765302 0.328633 +vt 0.764271 0.334092 +vt 0.753958 0.334778 +vt 0.872696 0.335583 +vt 0.866407 0.338084 +vt 0.86882 0.330441 +vt 0.863658 0.333516 +vt 0.867867 0.343569 +vt 0.860064 0.340257 +vt 0.860616 0.34494 +vt 0.882136 0.339457 +vt 0.878875 0.332422 +vt 0.888775 0.336165 +vt 0.88462 0.328842 +vt 0.874176 0.326498 +vt 0.876903 0.354499 +vt 0.876407 0.348394 +vt 0.885368 0.353577 +vt 0.88421 0.346688 +vt 0.892061 0.343631 +vt 0.868751 0.349227 +vt 0.861168 0.349623 +vt 0.869036 0.354668 +vt 0.905832 0.318045 +vt 0.897126 0.314006 +vt 0.909273 0.307792 +vt 0.899606 0.305356 +vt 0.888216 0.310241 +vt 0.885668 0.315488 +vt 0.89379 0.320385 +vt 0.912856 0.338167 +vt 0.907418 0.331814 +vt 0.922353 0.328655 +vt 0.914539 0.322618 +vt 0.91968 0.310994 +vt 0.895263 0.331765 +vt 0.899861 0.338745 +vt 0.903538 0.34573 +vt 0.882771 0.319356 +vt 0.889606 0.32508 +vt 0.726761 0.338632 +vt 0.720269 0.333665 +vt 0.728661 0.332789 +vt 0.724048 0.328479 +vt 0.728685 0.324646 +vt 0.725283 0.320091 +vt 0.718943 0.323554 +vt 0.708141 0.33392 +vt 0.716815 0.339387 +vt 0.703619 0.340611 +vt 0.713734 0.345346 +vt 0.724861 0.344474 +vt 0.705092 0.321759 +vt 0.698212 0.327693 +vt 0.695328 0.313899 +vt 0.68654 0.320218 +vt 0.692159 0.335172 +vt 0.721158 0.3143 +vt 0.712853 0.317398 +vt 0.705649 0.309794 +vt 0.849098 0.333114 +vt 0.852849 0.328742 +vt 0.854305 0.334344 +vt 0.858906 0.330607 +vt 0.863427 0.326736 +vt 0.848559 0.322731 +vt 0.846187 0.327308 +vt 0.839608 0.321509 +vt 0.838379 0.326237 +vt 0.84389 0.331884 +vt 0.862887 0.316059 +vt 0.859996 0.320044 +vt 0.853481 0.313684 +vt 0.851078 0.31815 +vt 0.841341 0.316617 +vt 0.867789 0.322599 +vt 0.871643 0.31863 +vt 0.808609 0.31864 +vt 0.807782 0.324278 +vt 0.797841 0.317858 +vt 0.797082 0.323766 +vt 0.818436 0.324849 +vt 0.821851 0.307693 +vt 0.820468 0.313742 +vt 0.810856 0.305827 +vt 0.809616 0.312441 +vt 0.79869 0.311344 +vt 0.829771 0.320444 +vt 0.831091 0.315141 +vt 0.832672 0.309663 +vt 0.828882 0.32546 +vt 0.827295 0.287378 +vt 0.81609 0.283741 +vt 0.829537 0.279056 +vt 0.81819 0.275174 +vt 0.802762 0.289081 +vt 0.80451 0.280694 +vt 0.814142 0.291631 +vt 0.836158 0.298133 +vt 0.838143 0.291297 +vt 0.84681 0.301473 +vt 0.848714 0.295264 +vt 0.84041 0.283327 +vt 0.823454 0.301435 +vt 0.834348 0.304125 +vt 0.84504 0.30685 +vt 0.801169 0.296892 +vt 0.812381 0.298942 +vt 0.876986 0.311536 +vt 0.878898 0.306488 +vt 0.870963 0.295312 +vt 0.88062 0.29932 +vt 0.869186 0.302754 +vt 0.865464 0.312169 +vt 0.874638 0.315263 +vt 0.855505 0.309448 +vt 0.857319 0.304788 +vt 0.859093 0.299048 +vt 0.861066 0.291675 +vt 0.732418 0.318062 +vt 0.734712 0.322982 +vt 0.743001 0.327869 +vt 0.736781 0.327408 +vt 0.741594 0.322579 +vt 0.738426 0.310793 +vt 0.729673 0.312154 +vt 0.736628 0.303749 +vt 0.726615 0.305165 +vt 0.757036 0.316401 +vt 0.748245 0.31651 +vt 0.75687 0.309754 +vt 0.747447 0.310045 +vt 0.746533 0.302937 +vt 0.748795 0.322531 +vt 0.749221 0.328331 +vt 0.756792 0.322664 +vt 0.731654 0.277237 +vt 0.718591 0.277987 +vt 0.730298 0.26671 +vt 0.717089 0.267402 +vt 0.704046 0.278768 +vt 0.706282 0.288897 +vt 0.720525 0.287868 +vt 0.756105 0.285792 +vt 0.744751 0.286232 +vt 0.755817 0.276484 +vt 0.743878 0.276719 +vt 0.743048 0.266393 +vt 0.734816 0.295809 +vt 0.745635 0.294985 +vt 0.756313 0.294527 +vt 0.710968 0.298566 +vt 0.723383 0.296998 +vt 0.792536 0.278545 +vt 0.791154 0.28731 +vt 0.780323 0.277204 +vt 0.793935 0.269245 +vt 0.781204 0.267531 +vt 0.78873 0.303265 +vt 0.777827 0.302657 +vt 0.789858 0.295534 +vt 0.778545 0.294752 +vt 0.767676 0.285819 +vt 0.767323 0.294432 +vt 0.767022 0.302415 +vt 0.768024 0.276581 +vt 0.768346 0.266629 +vt 0.776124 0.323009 +vt 0.786496 0.323337 +vt 0.787134 0.317284 +vt 0.766566 0.316536 +vt 0.766062 0.322804 +vt 0.777196 0.310038 +vt 0.766828 0.309761 +vt 0.78785 0.310554 +vt 0.887192 0.245173 +vt 0.894254 0.251226 +vt 0.882204 0.253513 +vt 0.889316 0.257984 +vt 0.899158 0.259059 +vt 0.906216 0.25556 +vt 0.900579 0.245749 +vt 0.873068 0.226854 +vt 0.883747 0.231913 +vt 0.868263 0.235954 +vt 0.878436 0.240212 +vt 0.873612 0.249405 +vt 0.899039 0.231269 +vt 0.889175 0.22393 +vt 0.904851 0.223823 +vt 0.894483 0.215603 +vt 0.878092 0.21784 +vt 0.907771 0.240362 +vt 0.914548 0.251706 +vt 0.914646 0.233613 +vt 0.83088 0.224634 +vt 0.816277 0.220886 +vt 0.83396 0.214024 +vt 0.818586 0.209908 +vt 0.827947 0.235154 +vt 0.840898 0.238644 +vt 0.844486 0.228275 +vt 0.855747 0.197071 +vt 0.852027 0.207701 +vt 0.840323 0.192176 +vt 0.837098 0.203273 +vt 0.821041 0.19888 +vt 0.861296 0.22221 +vt 0.8657 0.212494 +vt 0.870075 0.20254 +vt 0.852868 0.242144 +vt 0.856947 0.232012 +vt 0.689623 0.215775 +vt 0.70332 0.207275 +vt 0.697939 0.222493 +vt 0.709017 0.215819 +vt 0.725203 0.22199 +vt 0.713143 0.224363 +vt 0.722188 0.211648 +vt 0.691318 0.186238 +vt 0.709695 0.179461 +vt 0.697458 0.197483 +vt 0.714155 0.190926 +vt 0.68169 0.206684 +vt 0.751207 0.197567 +vt 0.734425 0.198302 +vt 0.74968 0.185753 +vt 0.731649 0.18705 +vt 0.728678 0.175143 +vt 0.738996 0.220423 +vt 0.736932 0.209325 +vt 0.752641 0.20886 +vt 0.784858 0.21308 +vt 0.800826 0.216826 +vt 0.784162 0.2244 +vt 0.799325 0.227809 +vt 0.802394 0.205632 +vt 0.768345 0.19871 +vt 0.768707 0.210268 +vt 0.768953 0.22173 +vt 0.786206 0.189958 +vt 0.767985 0.186934 +vt 0.786915 0.177877 +vt 0.767639 0.174701 +vt 0.803984 0.194191 +vt 0.805673 0.182317 +vt 0.809955 0.252364 +vt 0.822756 0.255918 +vt 0.80815 0.262293 +vt 0.820407 0.265831 +vt 0.832047 0.269793 +vt 0.837735 0.249207 +vt 0.825254 0.245637 +vt 0.811949 0.242115 +vt 0.856542 0.267463 +vt 0.846044 0.263615 +vt 0.859897 0.256492 +vt 0.849272 0.252848 +vt 0.843066 0.273938 +vt 0.853522 0.278101 +vt 0.742291 0.255201 +vt 0.729185 0.255607 +vt 0.755289 0.255203 +vt 0.754976 0.243665 +vt 0.741468 0.243564 +vt 0.715531 0.256156 +vt 0.700801 0.256437 +vt 0.714427 0.244869 +vt 0.700028 0.24508 +vt 0.72694 0.232765 +vt 0.714289 0.234159 +vt 0.701971 0.234531 +vt 0.754532 0.231935 +vt 0.740439 0.231904 +vt 0.911041 0.2953 +vt 0.921301 0.296781 +vt 0.93161 0.297423 +vt 0.929903 0.281016 +vt 0.920542 0.281282 +vt 0.901221 0.293843 +vt 0.891715 0.291968 +vt 0.901867 0.281252 +vt 0.892897 0.280142 +vt 0.909625 0.267746 +vt 0.901437 0.269362 +vt 0.893739 0.269552 +vt 0.927824 0.264632 +vt 0.918548 0.265802 +vt 0.783513 0.23552 +vt 0.768967 0.233217 +vt 0.768829 0.24463 +vt 0.796609 0.249173 +vt 0.797938 0.238614 +vt 0.782032 0.257262 +vt 0.795284 0.259419 +vt 0.768618 0.255873 +vt 0.866329 0.271283 +vt 0.863474 0.282119 +vt 0.873054 0.28587 +vt 0.878455 0.263629 +vt 0.869642 0.26007 +vt 0.884271 0.277953 +vt 0.886283 0.267215 +vt 0.882397 0.289232 +vt 0.941581 0.296368 +vt 0.939264 0.280761 +vt 0.944658 0.31122 +vt 0.954503 0.308374 +vt 0.951091 0.294591 +vt 0.945764 0.266671 +vt 0.937066 0.26534 +vt 0.944666 0.253926 +vt 0.936188 0.251002 +vt 0.964594 0.279716 +vt 0.956479 0.280128 +vt 0.960523 0.267756 +vt 0.953407 0.267371 +vt 0.951694 0.255808 +vt 0.963661 0.306017 +vt 0.960023 0.293069 +vt 0.968665 0.291676 +vt 0.386764 0.173365 +vt 0.386251 0.159166 +vt 0.403134 0.175347 +vt 0.40173 0.162164 +vt 0.370756 0.187276 +vt 0.370795 0.173446 +vt 0.38669 0.187253 +vt 0.422389 0.190328 +vt 0.419955 0.177717 +vt 0.441316 0.192402 +vt 0.437002 0.180281 +vt 0.417209 0.165162 +vt 0.401826 0.214817 +vt 0.403793 0.201683 +vt 0.424104 0.215186 +vt 0.424198 0.203052 +vt 0.44563 0.204522 +vt 0.385442 0.200518 +vt 0.36925 0.200049 +vt 0.382596 0.213492 +vt 0.356262 0.189263 +vt 0.355175 0.177265 +vt 0.348714 0.166736 +vt 0.334762 0.173858 +vt 0.341079 0.182428 +vt 0.340863 0.211835 +vt 0.342946 0.202073 +vt 0.352708 0.211778 +vt 0.355322 0.200767 +vt 0.331414 0.194664 +vt 0.331412 0.203371 +vt 0.319782 0.196009 +vt 0.319946 0.204047 +vt 0.330031 0.212063 +vt 0.324674 0.179566 +vt 0.32968 0.18654 +vt 0.319256 0.188731 +vt 0.34302 0.232291 +vt 0.34877 0.222299 +vt 0.354926 0.235741 +vt 0.361782 0.224028 +vt 0.337711 0.221083 +vt 0.32682 0.236795 +vt 0.334971 0.241716 +vt 0.31849 0.242434 +vt 0.324587 0.249202 +vt 0.345001 0.247217 +vt 0.32414 0.227342 +vt 0.319507 0.233375 +vt 0.314915 0.225618 +vt 0.311922 0.231227 +vt 0.313143 0.237776 +vt 0.327627 0.220146 +vt 0.317481 0.219239 +vt 0.63785 0.953205 +vt 0.630881 0.947663 +vt 0.647016 0.946972 +vt 0.6392 0.9414 +vt 0.622289 0.952938 +vt 0.615431 0.946184 +vt 0.624837 0.941085 +vt 0.636439 0.963394 +vt 0.644947 0.958154 +vt 0.644288 0.966733 +vt 0.653209 0.961707 +vt 0.654465 0.952626 +vt 0.612697 0.965958 +vt 0.620878 0.963127 +vt 0.620821 0.970267 +vt 0.628164 0.967348 +vt 0.635184 0.970582 +vt 0.606875 0.951267 +vt 0.614197 0.957483 +vt 0.605619 0.960347 +vt 0.367121 0.917394 +vt 0.374142 0.923099 +vt 0.360165 0.922438 +vt 0.367724 0.92812 +vt 0.381201 0.91911 +vt 0.388569 0.925813 +vt 0.380653 0.929651 +vt 0.367048 0.90811 +vt 0.360477 0.912329 +vt 0.360243 0.904335 +vt 0.353385 0.908573 +vt 0.353375 0.916883 +vt 0.388646 0.907697 +vt 0.381128 0.909826 +vt 0.380927 0.902848 +vt 0.374115 0.905116 +vt 0.367999 0.901318 +vt 0.396044 0.921905 +vt 0.388216 0.915684 +vt 0.396055 0.913595 +vt 0.328818 0.915038 +vt 0.333156 0.924854 +vt 0.309844 0.916921 +vt 0.317341 0.929308 +vt 0.32345 0.950038 +vt 0.299401 0.934005 +vt 0.334074 0.942122 +vt 0.352513 0.92816 +vt 0.344718 0.920885 +vt 0.341477 0.913527 +vt 0.373801 0.947808 +vt 0.357974 0.943112 +vt 0.374058 0.938334 +vt 0.362633 0.93464 +vt 0.352852 0.95399 +vt 0.347499 0.966072 +vt 0.373169 0.960769 +vt 0.418321 0.915362 +vt 0.435775 0.918439 +vt 0.422947 0.925132 +vt 0.443681 0.930756 +vt 0.455589 0.922184 +vt 0.430406 0.905691 +vt 0.418226 0.905767 +vt 0.397194 0.906411 +vt 0.405585 0.913617 +vt 0.409188 0.921144 +vt 0.376316 0.893935 +vt 0.392361 0.898152 +vt 0.375205 0.897753 +vt 0.386735 0.900808 +vt 0.405223 0.889198 +vt 0.398631 0.894039 +vt 0.377906 0.887331 +vt 0.336894 0.897334 +vt 0.318775 0.906333 +vt 0.327696 0.895339 +vt 0.301524 0.906655 +vt 0.333962 0.906288 +vt 0.360174 0.89468 +vt 0.356966 0.889714 +vt 0.353868 0.884022 +vt 0.353137 0.901438 +vt 0.363602 0.898194 +vt 0.345023 0.906797 +vt 0.434342 0.941415 +vt 0.453466 0.949534 +vt 0.415406 0.950555 +vt 0.42616 0.960391 +vt 0.417515 0.933928 +vt 0.390161 0.946583 +vt 0.394517 0.958315 +vt 0.398853 0.971248 +vt 0.39657 0.933133 +vt 0.385766 0.937253 +vt 0.40528 0.927706 +vt 0.57922 0.909293 +vt 0.58971 0.919914 +vt 0.547117 0.922496 +vt 0.567321 0.931013 +vt 0.577999 0.948709 +vt 0.555818 0.943001 +vt 0.585011 0.938851 +vt 0.617202 0.922908 +vt 0.614188 0.910157 +vt 0.635979 0.920365 +vt 0.638841 0.906233 +vt 0.611323 0.89609 +vt 0.607883 0.938585 +vt 0.620514 0.933025 +vt 0.633926 0.930757 +vt 0.597671 0.945329 +vt 0.592645 0.95281 +vt 0.700973 0.938045 +vt 0.70873 0.951078 +vt 0.680671 0.943135 +vt 0.684796 0.953548 +vt 0.697126 0.916127 +vt 0.723976 0.932747 +vt 0.682579 0.924761 +vt 0.65736 0.940282 +vt 0.665771 0.947808 +vt 0.668833 0.955667 +vt 0.653673 0.924504 +vt 0.646476 0.933887 +vt 0.670275 0.899507 +vt 0.661753 0.912628 +vt 0.571389 0.966985 +vt 0.583228 0.967478 +vt 0.599576 0.982628 +vt 0.604894 0.978385 +vt 0.628092 0.978017 +vt 0.628226 0.984167 +vt 0.610106 0.974767 +vt 0.582286 0.958749 +vt 0.563995 0.95542 +vt 0.543202 0.951342 +vt 0.603906 0.967493 +vt 0.595571 0.96058 +vt 0.615108 0.972401 +vt 0.627917 0.974569 +vt 0.676098 0.972325 +vt 0.697647 0.962452 +vt 0.689295 0.973819 +vt 0.72006 0.961593 +vt 0.677946 0.963033 +vt 0.646577 0.976363 +vt 0.652459 0.980856 +vt 0.658529 0.986044 +vt 0.653384 0.96919 +vt 0.64107 0.973262 +vt 0.663671 0.963059 +vt 0.36984 0.23949 +vt 0.357948 0.252377 +vt 0.346028 0.26526 +vt 0.355607 0.271672 +vt 0.369662 0.258935 +vt 0.397205 0.227812 +vt 0.377725 0.226506 +vt 0.417354 0.23588 +vt 0.420828 0.226027 +vt 0.4431 0.22875 +vt 0.446522 0.222697 +vt 0.398497 0.266882 +vt 0.394993 0.256063 +vt 0.417376 0.253869 +vt 0.416668 0.245046 +vt 0.439677 0.234803 +vt 0.375987 0.26863 +vt 0.360587 0.280948 +vt 0.379618 0.279895 +vt 0.470993 0.595329 +vt 0.466212 0.581429 +vt 0.482679 0.589544 +vt 0.476881 0.579741 +vt 0.489311 0.600458 +vt 0.499356 0.579702 +vt 0.49224 0.574945 +vt 0.479771 0.564752 +vt 0.472749 0.572159 +vt 0.474256 0.558067 +vt 0.468458 0.56471 +vt 0.46434 0.573191 +vt 0.492648 0.557082 +vt 0.486003 0.554296 +vt 0.497062 0.544746 +vt 0.490231 0.543792 +vt 0.480758 0.549772 +vt 0.509401 0.558946 +vt 0.500678 0.558385 +vt 0.505852 0.543851 +vt 0.497996 0.536049 +vt 0.505621 0.535332 +vt 0.501948 0.53012 +vt 0.507915 0.530515 +vt 0.51368 0.534353 +vt 0.482316 0.532549 +vt 0.489579 0.530568 +vt 0.484501 0.537962 +vt 0.491239 0.536243 +vt 0.491373 0.524968 +vt 0.485801 0.52569 +vt 0.484285 0.519868 +vt 0.479547 0.521219 +vt 0.479193 0.527051 +vt 0.496798 0.525508 +vt 0.50215 0.526678 +vt 0.490005 0.520085 +vt 0.473801 0.535793 +vt 0.470659 0.528429 +vt 0.469034 0.521857 +vt 0.460157 0.521751 +vt 0.461514 0.530505 +vt 0.469248 0.549809 +vt 0.476929 0.543255 +vt 0.456268 0.544777 +vt 0.462181 0.555305 +vt 0.449568 0.548141 +vt 0.456741 0.560093 +vt 0.451562 0.524114 +vt 0.453071 0.533958 +vt 0.446261 0.536501 +vt 0.933404 0.221309 +vt 0.924739 0.213284 +vt 0.938258 0.211078 +vt 0.929637 0.202912 +vt 0.924585 0.183534 +vt 0.934625 0.192739 +vt 0.919804 0.19418 +vt 0.910176 0.214711 +vt 0.920022 0.224053 +vt 0.929173 0.232598 +vt 0.892208 0.188152 +vt 0.904301 0.196133 +vt 0.88756 0.198715 +vt 0.899431 0.206272 +vt 0.909372 0.185384 +vt 0.914544 0.174329 +vt 0.89751 0.177035 +vt 0.829357 0.162643 +vt 0.809729 0.156901 +vt 0.833272 0.14992 +vt 0.812406 0.143745 +vt 0.789947 0.13803 +vt 0.815325 0.130471 +vt 0.791208 0.124039 +vt 0.787797 0.165074 +vt 0.807536 0.169823 +vt 0.826253 0.175235 +vt 0.767318 0.161769 +vt 0.746459 0.160576 +vt 0.767097 0.147949 +vt 0.744921 0.146466 +vt 0.767051 0.133048 +vt 0.767091 0.117607 +vt 0.743596 0.130619 +vt 0.722473 0.147996 +vt 0.719464 0.132562 +vt 0.695065 0.137329 +vt 0.716504 0.116494 +vt 0.690034 0.121812 +vt 0.725582 0.162157 +vt 0.70494 0.166437 +vt 0.656395 0.167991 +vt 0.677929 0.158979 +vt 0.665245 0.182639 +vt 0.684786 0.173336 +vt 0.670811 0.143368 +vt 0.663563 0.127131 +vt 0.647183 0.151721 +vt 0.844502 0.359871 +vt 0.847714 0.360296 +vt 0.847408 0.363957 +vt 0.849348 0.364269 +vt 0.851648 0.36844 +vt 0.850981 0.368241 +vt 0.851475 0.364632 +vt 0.850753 0.356913 +vt 0.846081 0.356324 +vt 0.850205 0.353003 +vt 0.844447 0.352351 +vt 0.841595 0.355786 +vt 0.855799 0.357604 +vt 0.861641 0.358449 +vt 0.855262 0.361451 +vt 0.860512 0.36239 +vt 0.855963 0.353655 +vt 0.853976 0.365096 +vt 0.852315 0.368639 +vt 0.858224 0.366005 +vt 0.720036 0.362311 +vt 0.71959 0.357661 +vt 0.728015 0.361123 +vt 0.727779 0.35756 +vt 0.73391 0.360061 +vt 0.73344 0.362971 +vt 0.728708 0.364784 +vt 0.736235 0.351526 +vt 0.735307 0.354339 +vt 0.729598 0.350921 +vt 0.728459 0.354192 +vt 0.720575 0.353357 +vt 0.740522 0.356645 +vt 0.741697 0.354388 +vt 0.746207 0.356041 +vt 0.747858 0.354388 +vt 0.742872 0.352131 +vt 0.739347 0.358902 +vt 0.738172 0.361159 +vt 0.744555 0.357694 +vt 0.878699 0.181029 +vt 0.883387 0.169647 +vt 0.867761 0.162851 +vt 0.888238 0.158069 +vt 0.871973 0.151014 +vt 0.874335 0.192023 +vt 0.859716 0.186019 +vt 0.843668 0.180528 +vt 0.847301 0.168505 +vt 0.85139 0.156282 +vt 0.855707 0.143958 +vt 0.959959 0.243101 +vt 0.954077 0.238396 +vt 0.961713 0.236753 +vt 0.956323 0.230743 +vt 0.954067 0.216174 +vt 0.958767 0.22329 +vt 0.950811 0.224595 +vt 0.952226 0.24645 +vt 0.945638 0.243001 +vt 0.958206 0.249448 +vt 0.941091 0.227849 +vt 0.937833 0.238648 +vt 0.949366 0.209059 +vt 0.945053 0.218173 +vt 0.336934 0.71568 +vt 0.33038 0.741466 +vt 0.302716 0.711537 +vt 0.299424 0.738297 +vt 0.295776 0.762787 +vt 0.393479 0.752977 +vt 0.377463 0.773803 +vt 0.361811 0.746705 +vt 0.350155 0.769363 +vt 0.371566 0.72393 +vt 0.338262 0.791261 +vt 0.32625 0.812779 +vt 0.315076 0.788147 +vt 0.307068 0.810102 +vt 0.361448 0.794629 +vt 0.29189 0.78554 +vt 0.287886 0.807426 +vt 0.299023 0.2659 +vt 0.299047 0.279209 +vt 0.283956 0.266822 +vt 0.283986 0.280354 +vt 0.283688 0.295775 +vt 0.327087 0.27663 +vt 0.323816 0.291325 +vt 0.313749 0.277461 +vt 0.311916 0.292761 +vt 0.31433 0.263721 +vt 0.296663 0.325331 +vt 0.297456 0.310292 +vt 0.309865 0.321929 +vt 0.31066 0.307783 +vt 0.322425 0.305028 +vt 0.283294 0.311929 +vt 0.282898 0.327607 +vt 0.281812 0.241506 +vt 0.281311 0.235544 +vt 0.29388 0.241063 +vt 0.292617 0.235389 +vt 0.282538 0.248141 +vt 0.307969 0.245729 +vt 0.304463 0.240079 +vt 0.302421 0.235265 +vt 0.297743 0.255375 +vt 0.311831 0.253377 +vt 0.283363 0.256332 +vt 0.665914 0.351378 +vt 0.682493 0.354562 +vt 0.661557 0.365446 +vt 0.679123 0.366239 +vt 0.694271 0.365301 +vt 0.676262 0.378559 +vt 0.692167 0.374571 +vt 0.699871 0.348099 +vt 0.686879 0.344167 +vt 0.6718 0.339046 +vt 0.709168 0.357329 +vt 0.711074 0.351244 +vt 0.708348 0.363848 +vt 0.708071 0.370584 +vt 0.867597 0.363815 +vt 0.865591 0.367703 +vt 0.874845 0.369526 +vt 0.873284 0.373919 +vt 0.863133 0.371378 +vt 0.876827 0.360099 +vt 0.868698 0.3595 +vt 0.885694 0.365176 +vt 0.885881 0.359586 +vt 0.896427 0.363349 +vt 0.895778 0.357262 +vt 0.884753 0.370807 +vt 0.883435 0.376459 +vt 0.896131 0.370165 +vt 0.908527 0.359153 +vt 0.909799 0.366215 +vt 0.924545 0.360491 +vt 0.927731 0.367892 +vt 0.910658 0.373446 +vt 0.917439 0.345549 +vt 0.906434 0.352429 +vt 0.933647 0.34626 +vt 0.928384 0.337086 +vt 0.944982 0.340124 +vt 0.93903 0.329282 +vt 0.939163 0.354526 +vt 0.944804 0.362339 +vt 0.951802 0.349505 +vt 0.954599 0.336095 +vt 0.960613 0.346611 +vt 0.967306 0.344981 +vt 0.971931 0.35627 +vt 0.966904 0.356527 +vt 0.949139 0.32438 +vt 0.958528 0.321259 +vt 0.967014 0.318797 +vt 0.975048 0.316665 +vt 0.970264 0.331384 +vt 0.97736 0.329695 +vt 0.976958 0.356012 +vt 0.973591 0.343753 +vt 0.979672 0.342725 +vt 0.320524 0.146521 +vt 0.313373 0.154734 +vt 0.2954 0.141698 +vt 0.292003 0.150779 +vt 0.28884 0.159589 +vt 0.322801 0.167455 +vt 0.333528 0.159639 +vt 0.345648 0.151344 +vt 0.301572 0.170503 +vt 0.31486 0.174313 +vt 0.297761 0.178302 +vt 0.309891 0.180957 +vt 0.286147 0.16786 +vt 0.284108 0.176013 +vt 0.296019 0.186221 +vt 0.282908 0.18447 +vt 0.282346 0.192959 +vt 0.307895 0.195694 +vt 0.308085 0.188134 +vt 0.295125 0.202337 +vt 0.307775 0.203492 +vt 0.294766 0.209933 +vt 0.307347 0.211107 +vt 0.28222 0.201212 +vt 0.28215 0.209032 +vt 0.294211 0.217025 +vt 0.281754 0.216221 +vt 0.281328 0.222946 +vt 0.304681 0.22447 +vt 0.306231 0.218115 +vt 0.292675 0.229646 +vt 0.302952 0.230124 +vt 0.281165 0.229372 +vt 0.305534 0.681974 +vt 0.306111 0.650222 +vt 0.342004 0.687835 +vt 0.333707 0.612749 +vt 0.302684 0.616894 +vt 0.325885 0.580428 +vt 0.298274 0.585332 +vt 0.395357 0.618639 +vt 0.374414 0.634434 +vt 0.380969 0.58713 +vt 0.358816 0.601672 +vt 0.349578 0.570739 +vt 0.384513 0.681504 +vt 0.395957 0.664926 +vt 0.416814 0.706905 +vt 0.420474 0.694282 +vt 0.409745 0.650149 +vt 0.377758 0.701684 +vt 0.413154 0.719528 +vt 0.338053 0.278233 +vt 0.345863 0.28289 +vt 0.333606 0.290848 +vt 0.34226 0.309133 +vt 0.341074 0.298701 +vt 0.351677 0.302345 +vt 0.349731 0.291219 +vt 0.332267 0.302652 +vt 0.332584 0.313884 +vt 0.387723 0.422423 +vt 0.382162 0.422373 +vt 0.388869 0.417427 +vt 0.382859 0.417822 +vt 0.377549 0.413541 +vt 0.384244 0.41338 +vt 0.377169 0.417955 +vt 0.377116 0.426931 +vt 0.381664 0.426972 +vt 0.377432 0.431442 +vt 0.381856 0.431562 +vt 0.386531 0.427438 +vt 0.367249 0.422554 +vt 0.372123 0.422513 +vt 0.368692 0.426806 +vt 0.372857 0.426712 +vt 0.373317 0.430853 +vt 0.371782 0.41828 +vt 0.37118 0.414106 +vt 0.366505 0.41823 +vt 0.426004 0.390403 +vt 0.398456 0.389437 +vt 0.424679 0.386349 +vt 0.396424 0.386762 +vt 0.363793 0.388475 +vt 0.394705 0.384351 +vt 0.356716 0.386401 +vt 0.378598 0.396645 +vt 0.375308 0.393171 +vt 0.401577 0.396345 +vt 0.401115 0.392641 +vt 0.428621 0.394516 +vt 0.353918 0.396416 +vt 0.339672 0.402446 +vt 0.345629 0.394106 +vt 0.329812 0.40053 +vt 0.35953 0.398947 +vt 0.33321 0.391382 +vt 0.318726 0.38845 +vt 0.313563 0.397303 +vt 0.476084 0.423195 +vt 0.45045 0.417502 +vt 0.486588 0.412986 +vt 0.456271 0.406372 +vt 0.430198 0.413801 +vt 0.423791 0.426121 +vt 0.43912 0.429517 +vt 0.507665 0.429493 +vt 0.542219 0.436093 +vt 0.475452 0.439099 +vt 0.495356 0.444524 +vt 0.525393 0.419675 +vt 0.43331 0.443713 +vt 0.441295 0.448141 +vt 0.411039 0.45059 +vt 0.411532 0.454564 +vt 0.448493 0.452954 +vt 0.423753 0.440055 +vt 0.413961 0.436871 +vt 0.407352 0.447798 +vt 0.31374 0.40806 +vt 0.32634 0.410021 +vt 0.317907 0.421046 +vt 0.299322 0.405773 +vt 0.325214 0.421259 +vt 0.338474 0.421652 +vt 0.3353 0.411329 +vt 0.344846 0.421904 +vt 0.34232 0.412499 +vt 0.355509 0.44277 +vt 0.342793 0.432971 +vt 0.357815 0.441106 +vt 0.346865 0.432004 +vt 0.351296 0.431202 +vt 0.336492 0.43632 +vt 0.339458 0.434504 +vt 0.354149 0.44545 +vt 0.366963 0.45175 +vt 0.367513 0.449587 +vt 0.378353 0.456489 +vt 0.366715 0.454041 +vt 0.379286 0.45488 +vt 0.368666 0.447681 +vt 0.369978 0.445476 +vt 0.38013 0.451272 +vt 0.379885 0.448331 +vt 0.392918 0.451424 +vt 0.393862 0.45378 +vt 0.390643 0.448651 +vt 0.392502 0.456314 +vt 0.389991 0.458936 +vt 0.434919 0.382651 +vt 0.453791 0.389264 +vt 0.433807 0.382477 +vt 0.442133 0.387347 +vt 0.449541 0.392567 +vt 0.49183 0.400597 +vt 0.464657 0.391608 +vt 0.513113 0.405332 +vt 0.475128 0.394166 +vt 0.436031 0.382826 +vt 0.516095 0.409998 +vt 0.483347 0.40387 +vt 0.551098 0.416497 +vt 0.455111 0.398484 +vt 0.472738 0.503366 +vt 0.465757 0.493643 +vt 0.482409 0.502085 +vt 0.475421 0.491708 +vt 0.456009 0.49597 +vt 0.450804 0.485866 +vt 0.459618 0.483598 +vt 0.474669 0.513513 +vt 0.481402 0.512442 +vt 0.489397 0.512463 +vt 0.46027 0.514483 +vt 0.470459 0.516768 +vt 0.449301 0.508912 +vt 0.450715 0.51651 +vt 0.441643 0.516565 +vt 0.44392 0.523436 +vt 0.44199 0.488134 +vt 0.446094 0.499081 +vt 0.437618 0.505763 +vt 0.409641 0.53125 +vt 0.417486 0.517634 +vt 0.424725 0.549489 +vt 0.428372 0.534587 +vt 0.421164 0.563953 +vt 0.440531 0.58304 +vt 0.440131 0.567599 +vt 0.438076 0.530458 +vt 0.43219 0.518805 +vt 0.42533 0.504018 +vt 0.445266 0.55059 +vt 0.442015 0.535846 +vt 0.453943 0.564519 +vt 0.453765 0.571874 +vt 0.456182 0.585446 +vt 0.459898 0.602127 +vt 0.349013 0.491269 +vt 0.336754 0.508239 +vt 0.331154 0.496224 +vt 0.320148 0.507781 +vt 0.297949 0.508264 +vt 0.308444 0.503271 +vt 0.306838 0.517622 +vt 0.350155 0.524533 +vt 0.35745 0.505005 +vt 0.375656 0.518489 +vt 0.380193 0.499924 +vt 0.366871 0.486313 +vt 0.322305 0.553361 +vt 0.347111 0.545735 +vt 0.371118 0.537055 +vt 0.293484 0.538213 +vt 0.295904 0.558876 +vt 0.288923 0.524031 +vt 0.284152 0.512489 +vt 0.281519 0.354585 +vt 0.27883 0.367232 +vt 0.275331 0.37971 +vt 0.281861 0.37985 +vt 0.288051 0.367559 +vt 0.296239 0.339242 +vt 0.282591 0.341601 +vt 0.310112 0.344766 +vt 0.309416 0.334597 +vt 0.322149 0.338741 +vt 0.321809 0.329248 +vt 0.30337 0.359703 +vt 0.312751 0.351414 +vt 0.309216 0.364244 +vt 0.316363 0.356301 +vt 0.323307 0.345678 +vt 0.295502 0.369475 +vt 0.288392 0.37999 +vt 0.302069 0.372187 +vt 0.281101 0.499747 +vt 0.27934 0.48605 +vt 0.292638 0.497304 +vt 0.28723 0.458265 +vt 0.288173 0.471672 +vt 0.277967 0.456884 +vt 0.278439 0.471644 +vt 0.299751 0.483057 +vt 0.297907 0.471434 +vt 0.309526 0.481102 +vt 0.307642 0.471064 +vt 0.296494 0.459645 +vt 0.302454 0.49435 +vt 0.311411 0.491141 +vt 0.343632 0.320416 +vt 0.333105 0.324778 +vt 0.333814 0.334838 +vt 0.363585 0.310039 +vt 0.366431 0.327171 +vt 0.353718 0.315393 +vt 0.355806 0.329495 +vt 0.346397 0.343469 +vt 0.357889 0.343783 +vt 0.347817 0.354895 +vt 0.35997 0.358164 +vt 0.369277 0.344302 +vt 0.334695 0.343565 +vt 0.335664 0.351626 +vt 0.379291 0.400052 +vt 0.363918 0.402333 +vt 0.367243 0.406178 +vt 0.353116 0.407088 +vt 0.35919 0.410239 +vt 0.41091 0.404675 +vt 0.399926 0.408536 +vt 0.397021 0.400516 +vt 0.390935 0.404866 +vt 0.37815 0.408898 +vt 0.386805 0.409108 +vt 0.393279 0.411364 +vt 0.363338 0.412821 +vt 0.369666 0.410088 +vt 0.350438 0.422105 +vt 0.355707 0.430165 +vt 0.363148 0.437257 +vt 0.365676 0.434559 +vt 0.360087 0.428972 +vt 0.349098 0.414046 +vt 0.35544 0.415713 +vt 0.361911 0.422489 +vt 0.36115 0.417241 +vt 0.368224 0.432108 +vt 0.364426 0.427706 +vt 0.379285 0.445126 +vt 0.388009 0.44487 +vt 0.385408 0.440532 +vt 0.396797 0.441249 +vt 0.391983 0.437144 +vt 0.371003 0.442416 +vt 0.371902 0.438797 +vt 0.377944 0.436209 +vt 0.372836 0.434912 +vt 0.388047 0.433887 +vt 0.38323 0.436089 +vt 0.411804 0.424136 +vt 0.414761 0.413476 +vt 0.40336 0.414868 +vt 0.405273 0.433865 +vt 0.397822 0.431174 +vt 0.394183 0.422617 +vt 0.391746 0.428935 +vt 0.395216 0.416313 +vt 0.775924 0.375151 +vt 0.775728 0.388743 +vt 0.746453 0.386032 +vt 0.747928 0.395308 +vt 0.717395 0.406114 +vt 0.713072 0.403611 +vt 0.744823 0.376573 +vt 0.749092 0.40422 +vt 0.749645 0.415483 +vt 0.72449 0.414957 +vt 0.72621 0.424666 +vt 0.7756 0.399248 +vt 0.70368 0.428763 +vt 0.687208 0.443737 +vt 0.697322 0.42707 +vt 0.677635 0.445158 +vt 0.707038 0.434775 +vt 0.68965 0.428163 +vt 0.681322 0.43065 +vt 0.666675 0.448773 +vt 0.663815 0.460707 +vt 0.651924 0.464538 +vt 0.630412 0.480156 +vt 0.639991 0.468922 +vt 0.642366 0.477595 +vt 0.66825 0.472074 +vt 0.675624 0.457981 +vt 0.68415 0.468328 +vt 0.689031 0.45406 +vt 0.649396 0.488552 +vt 0.664408 0.486592 +vt 0.681197 0.484039 +vt 0.634969 0.490079 +vt 0.620833 0.49139 +vt 0.912385 0.481335 +vt 0.932278 0.480511 +vt 0.952544 0.479369 +vt 0.933883 0.461959 +vt 0.919103 0.464149 +vt 0.869741 0.465154 +vt 0.887953 0.466437 +vt 0.873151 0.480724 +vt 0.893241 0.481526 +vt 0.865824 0.437779 +vt 0.874945 0.43437 +vt 0.878921 0.451884 +vt 0.891561 0.450226 +vt 0.864248 0.450831 +vt 0.915223 0.44455 +vt 0.903554 0.447624 +vt 0.884353 0.430602 +vt 0.854087 0.418075 +vt 0.860227 0.412749 +vt 0.833101 0.395604 +vt 0.866565 0.407739 +vt 0.836568 0.388337 +vt 0.826949 0.411924 +vt 0.848341 0.424031 +vt 0.824944 0.4236 +vt 0.84502 0.432484 +vt 0.803376 0.3921 +vt 0.802127 0.402739 +vt 0.801153 0.415145 +vt 0.804904 0.380706 +vt 0.806571 0.368936 +vt 0.702688 0.462561 +vt 0.700952 0.48073 +vt 0.723247 0.47733 +vt 0.725766 0.438352 +vt 0.705712 0.446642 +vt 0.74847 0.451919 +vt 0.749286 0.431814 +vt 0.774044 0.450536 +vt 0.774704 0.42899 +vt 0.747651 0.474504 +vt 0.773403 0.473071 +vt 0.799984 0.45176 +vt 0.799741 0.47385 +vt 0.825727 0.475971 +vt 0.824826 0.438046 +vt 0.800446 0.431839 +vt 0.848903 0.461112 +vt 0.846154 0.445298 +vt 0.850422 0.478567 +vt 0.62364 0.273336 +vt 0.631303 0.268742 +vt 0.633284 0.279074 +vt 0.640023 0.273125 +vt 0.639784 0.263935 +vt 0.632769 0.258173 +vt 0.623739 0.264647 +vt 0.600029 0.280268 +vt 0.598688 0.270903 +vt 0.613376 0.277111 +vt 0.610984 0.269667 +vt 0.621969 0.284647 +vt 0.621719 0.253201 +vt 0.613611 0.261924 +vt 0.599928 0.261159 +vt 0.670072 0.278979 +vt 0.653616 0.276716 +vt 0.669832 0.267969 +vt 0.654614 0.268283 +vt 0.648422 0.284838 +vt 0.690213 0.290189 +vt 0.687377 0.279381 +vt 0.68627 0.268024 +vt 0.683842 0.304224 +vt 0.697203 0.300525 +vt 0.645124 0.311795 +vt 0.656458 0.301386 +vt 0.663002 0.320505 +vt 0.672639 0.311009 +vt 0.637949 0.292669 +vt 0.625515 0.302527 +vt 0.64648 0.25088 +vt 0.652498 0.259521 +vt 0.667905 0.256541 +vt 0.65209 0.231125 +vt 0.635774 0.242815 +vt 0.639961 0.22002 +vt 0.62248 0.233347 +vt 0.677556 0.227123 +vt 0.666981 0.218489 +vt 0.656893 0.207226 +vt 0.684642 0.243963 +vt 0.689474 0.232327 +vt 0.684466 0.25604 +vt 0.602642 0.176918 +vt 0.580529 0.190632 +vt 0.589953 0.161017 +vt 0.566382 0.1753 +vt 0.557833 0.204588 +vt 0.573039 0.21849 +vt 0.594645 0.205765 +vt 0.635672 0.179448 +vt 0.62466 0.163426 +vt 0.613523 0.146733 +vt 0.646437 0.19413 +vt 0.627782 0.207015 +vt 0.588272 0.232651 +vt 0.608699 0.2205 +vt 0.608211 0.373618 +vt 0.616832 0.356454 +vt 0.634284 0.378082 +vt 0.640225 0.361705 +vt 0.646724 0.346174 +vt 0.603899 0.333518 +vt 0.593087 0.35113 +vt 0.582299 0.32801 +vt 0.570201 0.34546 +vt 0.582138 0.369154 +vt 0.635039 0.324678 +vt 0.614437 0.31673 +vt 0.593411 0.310569 +vt 0.65434 0.332333 +vt 0.561644 0.296106 +vt 0.564966 0.285457 +vt 0.580542 0.294418 +vt 0.583116 0.283009 +vt 0.582766 0.272899 +vt 0.546607 0.278466 +vt 0.547908 0.287734 +vt 0.528899 0.281331 +vt 0.53186 0.290461 +vt 0.545646 0.297066 +vt 0.561955 0.266155 +vt 0.543727 0.269714 +vt 0.555322 0.257166 +vt 0.537387 0.262094 +vt 0.526554 0.27266 +vt 0.581699 0.262937 +vt 0.576957 0.252641 +vt 0.565582 0.241532 +vt 0.543702 0.248829 +vt 0.550357 0.230094 +vt 0.496387 0.262785 +vt 0.509284 0.25153 +vt 0.513745 0.264403 +vt 0.525705 0.256225 +vt 0.51058 0.233141 +vt 0.488727 0.247432 +vt 0.491672 0.225616 +vt 0.466102 0.243633 +vt 0.473932 0.261753 +vt 0.534066 0.218808 +vt 0.517242 0.2076 +vt 0.516335 0.345283 +vt 0.530115 0.332372 +vt 0.5362 0.354987 +vt 0.549386 0.339171 +vt 0.561842 0.32354 +vt 0.526052 0.315178 +vt 0.511862 0.325172 +vt 0.511906 0.308506 +vt 0.496234 0.31623 +vt 0.49647 0.33558 +vt 0.537837 0.306011 +vt 0.553916 0.307529 +vt 0.525234 0.302122 +vt 0.572839 0.308275 +vt 0.511827 0.28428 +vt 0.509974 0.274041 +vt 0.492244 0.274874 +vt 0.501435 0.298913 +vt 0.516739 0.294259 +vt 0.458569 0.293763 +vt 0.476889 0.290416 +vt 0.467587 0.30982 +vt 0.484835 0.304206 +vt 0.471621 0.276173 +vt 0.449551 0.277706 +vt 0.79029 0.672484 +vt 0.810842 0.6624 +vt 0.788538 0.66243 +vt 0.832155 0.647948 +vt 0.833088 0.669026 +vt 0.767347 0.664111 +vt 0.749725 0.673721 +vt 0.741816 0.650008 +vt 0.85403 0.66365 +vt 0.868881 0.657298 +vt 0.85539 0.645025 +vt 0.888074 0.648027 +vt 0.874212 0.676013 +vt 0.886607 0.695639 +vt 0.89598 0.672443 +vt 0.929571 0.681021 +vt 0.72496 0.675077 +vt 0.707382 0.674426 +vt 0.711754 0.695525 +vt 0.674442 0.675309 +vt 0.715494 0.652696 +vt 0.851241 0.674754 +vt 0.83861 0.688008 +vt 0.813905 0.681083 +vt 0.795054 0.69679 +vt 0.803314 0.729031 +vt 0.821237 0.705648 +vt 0.847489 0.712022 +vt 0.863108 0.691149 +vt 0.734908 0.685353 +vt 0.751974 0.699565 +vt 0.699285 0.735409 +vt 0.729177 0.71566 +vt 0.752628 0.735708 +vt 0.775609 0.715256 +vt 0.771295 0.685081 +vt 0.892477 0.736968 +vt 0.891992 0.760942 +vt 0.924257 0.752441 +vt 0.883161 0.790753 +vt 0.862406 0.753942 +vt 0.813012 0.768991 +vt 0.847704 0.781855 +vt 0.824711 0.812689 +vt 0.703179 0.776568 +vt 0.71878 0.801121 +vt 0.75314 0.781706 +vt 0.750148 0.828139 +vt 0.674567 0.808938 +vt 0.785894 0.799205 +vt 0.832437 0.740517 +vt 0.726143 0.758511 +vt 0.908808 0.716733 +vt 0.780855 0.754707 +vt 0.872961 0.724451 +vt 0.947275 0.716911 +vt 0.972864 0.691703 +vt 0.956423 0.743409 +vt 0.170337 0.155827 +vt 0.136076 0.187112 +vt 0.172299 0.21177 +vt 0.0899929 0.213591 +vt 0.10853 0.16596 +vt 0.195445 0.192426 +vt 0.220169 0.183556 +vt 0.218642 0.212212 +vt 0.204829 0.229447 +vt 0.228379 0.234767 +vt 0.205687 0.259413 +vt 0.137176 0.927417 +vt 0.140528 0.948093 +vt 0.168383 0.944741 +vt 0.141913 0.961891 +vt 0.11077 0.946594 +vt 0.878967 0.954757 +vt 0.879367 0.938048 +vt 0.853203 0.941375 +vt 0.880712 0.92523 +vt 0.906681 0.938262 +vt 0.989055 0.9382 +vt 0.912651 0.957127 +vt 0.886501 1.00065 +vt 0.775015 0.959635 +vt 0.84864 0.929044 +vt 0.877392 0.895069 +vt 0.91222 0.923978 +vt 0.849069 0.962192 +vt 0.254826 0.925518 +vt 0.170213 0.919654 +vt 0.126415 0.872706 +vt 0.0190149 0.939185 +vt 0.100899 0.922774 +vt 0.142077 0.988088 +vt 0.17534 0.957124 +vt 0.106027 0.960245 +vt 0.148988 0.242126 +vt 0.176354 0.291487 +vt 0.102893 0.237993 +vt 0.044388 0.5061 +vt 0.0504472 0.534124 +vt 0.0221481 0.572717 +vt 0.0611958 0.546374 +vt 0.0719578 0.52396 +vt 0.0576334 0.571748 +vt 0.0664284 0.60486 +vt 0.0810156 0.564522 +vt 0.0825732 0.542567 +vt 0.101769 0.534189 +vt 0.944378 0.797731 +vt 0.915109 0.794589 +vt 0.905965 0.833567 +vt 0.842874 0.862029 +vt 0.791851 0.848437 +vt 0.748723 0.889561 +vt 0.703598 0.850293 +vt 0.642603 0.8718 +vt 0.843173 0.630902 +vt 0.84458 0.638283 +vt 0.846408 0.629484 +vt 0.71498 0.637314 +vt 0.726461 0.64589 +vt 0.734897 0.643187 +vt 0.865004 0.824698 +vt 0.962666 0.771065 +vt 0.94749 0.766441 +vt 0.268705 0.710477 +vt 0.214528 0.765549 +vt 0.268705 0.80475 +vt 0.191977 0.815455 +vt 0.127915 0.732152 +vt 0.268814 0.267129 +vt 0.238957 0.294344 +vt 0.268669 0.328244 +vt 0.215045 0.317962 +vt 0.269051 0.235581 +vt 0.241893 0.247542 +vt 0.652939 0.625528 +vt 0.689461 0.648127 +vt 0.870091 0.634597 +vt 0.889967 0.621532 +vt 0.917129 0.645104 +vt 0.960269 0.639284 +vt 0.9614 0.662237 +vt 0.981019 0.639244 +vt 0.270276 0.136874 +vt 0.232631 0.163206 +vt 0.269409 0.175133 +vt 0.242681 0.194855 +vt 0.269141 0.208639 +vt 0.244466 0.223601 +vt 0.189521 0.653078 +vt 0.113276 0.681659 +vt 0.170828 0.555621 +vt 0.268705 0.586687 +vt 0.197069 0.290309 +vt 0.147015 0.418787 +vt 0.159401 0.426978 +vt 0.169209 0.419346 +vt 0.166865 0.4343 +vt 0.151569 0.435731 +vt 0.101359 0.388325 +vt 0.164076 0.395797 +vt 0.253799 0.393043 +vt 0.188648 0.408382 +vt 0.10719 0.406598 +vt 0.0810976 0.440196 +vt 0.135792 0.449792 +vt 0.137248 0.466241 +vt -0.0522421 0.436952 +vt 0.203585 0.425014 +vt 0.183198 0.455456 +vt 0.176955 0.4435 +vt 0.158284 0.457002 +vt 0.0646922 0.403325 +vt 0.0969534 0.389119 +vt 0.127418 0.569795 +vt 0.101838 0.557019 +vt 0.115165 0.496827 +vt 0.0856225 0.479205 +vt 0.0876161 0.508163 +vt 0.224113 0.501179 +vt 0.216094 0.528531 +vt 0.268704 0.514179 +vt 0.152679 0.481359 +vt 0.268801 0.37957 +vt 0.241478 0.353126 +vt 0.242729 0.379892 +vt 0.214493 0.347926 +vt 0.247642 0.484503 +vt 0.231652 0.461026 +vt 0.268704 0.455503 +vt 0.192219 0.333104 +vt 0.164806 0.367802 +vt 0.156354 0.409665 +vt 0.179537 0.42641 +vt 0.158914 0.444672 +vt 0.1348 0.428233 +vt 0.776574 0.644712 +vt 0.722394 0.585817 +vt 0.651799 0.541213 +vt 0.694305 0.554226 +vt 0.775203 0.583316 +vt 0.656336 0.526524 +vt 0.611254 0.502624 +vt 0.680604 0.50058 +vt 0.971205 0.496778 +vt 0.903217 0.52798 +vt 0.896582 0.566601 +vt 0.859045 0.553539 +vt 0.874064 0.496896 +vt 0.829393 0.590056 +vt 0.725299 0.540094 +vt 0.773136 0.497495 +vt 0.8247 0.537119 +vt 0.64197 0.737033 +vt 0.61964 0.737363 +vt 0.604328 0.759732 +vt 0.608299 0.714718 +vt 0.667128 0.712276 +vt 0.663413 0.762979 +vt 0.546984 0.81774 +vt 0.617742 0.813781 +vt 0.624356 0.66752 +vt 0.55686 0.648558 +vt 0.568421 0.733816 +vt 0.529143 0.743889 +vt 0.538817 0.714517 +vt 0.531598 0.768055 +vt 0.445833 0.7485 +vt 0.547123 0.691597 +vt 0.481156 0.686856 +vt 0.499408 0.724217 +vt 0.796428 0.328877 +vt 0.8169 0.338119 +vt 0.838683 0.330654 +vt 0.838689 0.3517 +vt 0.793926 0.338777 +vt 0.773732 0.337889 +vt 0.74951 0.352736 +vt 0.755441 0.328792 +vt 0.859512 0.335574 +vt 0.874845 0.341757 +vt 0.878929 0.322664 +vt 0.894264 0.350808 +vt 0.86172 0.354306 +vt 0.890121 0.302638 +vt 0.900633 0.325513 +vt 0.932192 0.315548 +vt 0.730562 0.326947 +vt 0.713106 0.328223 +vt 0.72296 0.350316 +vt 0.678736 0.328632 +vt 0.716325 0.307131 +vt 0.856285 0.324517 +vt 0.84324 0.311687 +vt 0.81933 0.31943 +vt 0.799782 0.304286 +vt 0.806322 0.271776 +vt 0.825244 0.294637 +vt 0.850879 0.287575 +vt 0.86722 0.30781 +vt 0.740091 0.316932 +vt 0.756566 0.302501 +vt 0.702583 0.267919 +vt 0.73303 0.286789 +vt 0.75555 0.26631 +vt 0.779434 0.286256 +vt 0.776741 0.316735 +vt 0.894098 0.262064 +vt 0.892695 0.238422 +vt 0.863735 0.245736 +vt 0.882937 0.208649 +vt 0.924796 0.246563 +vt 0.814013 0.231601 +vt 0.847948 0.218052 +vt 0.823544 0.187373 +vt 0.704382 0.227027 +vt 0.718515 0.201921 +vt 0.673705 0.195595 +vt 0.748091 0.173595 +vt 0.753811 0.220319 +vt 0.785435 0.201844 +vt 0.834654 0.259639 +vt 0.728096 0.244245 +vt 0.910872 0.281409 +vt 0.782742 0.246644 +vt 0.87545 0.274707 +vt 0.948004 0.28051 +vt 0.956452 0.255796 +vt 0.972736 0.303635 +vt 0.370772 0.156168 +vt 0.404072 0.188535 +vt 0.432688 0.16816 +vt 0.449944 0.216643 +vt 0.366322 0.212187 +vt 0.343097 0.19204 +vt 0.319164 0.211948 +vt 0.318073 0.183115 +vt 0.332918 0.229442 +vt 0.33175 0.259955 +vt 0.309225 0.234833 +vt 0.632664 0.937599 +vt 0.629313 0.958275 +vt 0.659071 0.956775 +vt 0.627927 0.972073 +vt 0.601457 0.954923 +vt 0.374133 0.932158 +vt 0.374091 0.913509 +vt 0.349193 0.91288 +vt 0.374675 0.900396 +vt 0.400674 0.918841 +vt 0.275352 0.917971 +vt 0.344112 0.934726 +vt 0.371547 0.982105 +vt 0.480772 0.938676 +vt 0.406833 0.906276 +vt 0.38004 0.872706 +vt 0.345731 0.899719 +vt 0.405214 0.941284 +vt 0.515015 0.935699 +vt 0.599629 0.929832 +vt 0.643425 0.882887 +vt 0.750826 0.949367 +vt 0.668941 0.932959 +vt 0.627764 0.99827 +vt 0.594501 0.967304 +vt 0.663814 0.97043 +vt 0.389421 0.243699 +vt 0.436255 0.240856 +vt 0.360739 0.292908 +vt 0.479266 0.621214 +vt 0.485524 0.569542 +vt 0.463254 0.566666 +vt 0.48531 0.54359 +vt 0.519446 0.53819 +vt 0.495549 0.530351 +vt 0.47602 0.523291 +vt 0.496385 0.522841 +vt 0.465093 0.54022 +vt 0.446797 0.527765 +vt 0.944666 0.201943 +vt 0.914837 0.204675 +vt 0.904503 0.165124 +vt 0.839442 0.136903 +vt 0.788702 0.151899 +vt 0.742974 0.111175 +vt 0.700099 0.152559 +vt 0.637093 0.13245 +vt 0.850315 0.368043 +vt 0.851223 0.360798 +vt 0.852982 0.368837 +vt 0.723976 0.366596 +vt 0.734474 0.357174 +vt 0.742904 0.359347 +vt 0.863449 0.174562 +vt 0.963467 0.230405 +vt 0.947856 0.233441 +vt 0.322881 0.76555 +vt 0.409494 0.732152 +vt 0.345432 0.815455 +vt 0.298143 0.294421 +vt 0.321942 0.31772 +vt 0.295585 0.24761 +vt 0.660357 0.382546 +vt 0.69659 0.356392 +vt 0.876132 0.364721 +vt 0.893585 0.379 +vt 0.921054 0.3528 +vt 0.961877 0.356785 +vt 0.962698 0.33339 +vt 0.981984 0.355755 +vt 0.306768 0.162912 +vt 0.295194 0.194359 +vt 0.29317 0.223456 +vt 0.347888 0.653078 +vt 0.366581 0.55562 +vt 0.424133 0.681659 +vt 0.340033 0.290817 +vt 0.388965 0.413938 +vt 0.377097 0.422446 +vt 0.385455 0.431061 +vt 0.370091 0.429971 +vt 0.366833 0.415002 +vt 0.432694 0.382302 +vt 0.370508 0.391231 +vt 0.427991 0.40079 +vt 0.346746 0.40443 +vt 0.280737 0.3905 +vt 0.456111 0.433947 +vt 0.589083 0.427663 +vt 0.401629 0.461384 +vt 0.402075 0.444828 +vt 0.332854 0.421481 +vt 0.360577 0.439441 +vt 0.355077 0.451593 +vt 0.380059 0.45258 +vt 0.470234 0.396534 +vt 0.437143 0.383 +vt 0.468433 0.48133 +vt 0.462264 0.506664 +vt 0.433175 0.490402 +vt 0.401796 0.544866 +vt 0.440576 0.55139 +vt 0.313296 0.501179 +vt 0.321314 0.528529 +vt 0.38473 0.481358 +vt 0.295899 0.353213 +vt 0.32351 0.348357 +vt 0.294922 0.38013 +vt 0.289767 0.484501 +vt 0.305757 0.461026 +vt 0.344952 0.331857 +vt 0.372123 0.361433 +vt 0.379071 0.404986 +vt 0.356951 0.422334 +vt 0.378668 0.44021 +vt 0.40174 0.423148 +vt 0.776574 0.349534 +vt 0.721657 0.410555 +vt 0.77532 0.411729 +vt 0.694232 0.4441 +vt 0.649571 0.457689 +vt 0.655529 0.474973 +vt 0.903209 0.465704 +vt 0.85855 0.440351 +vt 0.896562 0.42714 +vt 0.829462 0.404087 +vt 0.725094 0.457517 +vt 0.824792 0.456782 +vt 0.644474 0.268488 +vt 0.619495 0.269287 +vt 0.604207 0.292645 +vt 0.603235 0.247789 +vt 0.669742 0.291872 +vt 0.665491 0.242026 +vt 0.542812 0.189584 +vt 0.615129 0.192251 +vt 0.625589 0.340224 +vt 0.556065 0.36469 +vt 0.56464 0.275636 +vt 0.534275 0.296732 +vt 0.525704 0.266294 +vt 0.528338 0.24086 +vt 0.440532 0.261649 +vt 0.542934 0.319725 +vt 0.476605 0.325877 +vt 0.495044 0.287182 +f 739/1 735/2 736/3 +f 189/4 736/3 735/2 +f 192/5 738/6 737/7 +f 739/1 737/7 738/6 +f 190/8 741/9 740/10 +f 743/11 740/10 741/9 +f 736/3 189/4 743/11 +f 742/12 743/11 189/4 +f 745/13 747/14 191/15 +f 744/16 191/15 747/14 +f 746/17 747/14 190/8 +f 741/9 190/8 747/14 +f 748/18 192/5 750/19 +f 737/7 750/19 192/5 +f 191/15 749/20 745/13 +f 750/19 745/13 749/20 +f 752/21 754/22 194/23 +f 751/24 194/23 754/22 +f 753/25 189/4 754/22 +f 735/2 754/22 189/4 +f 195/26 756/27 755/28 +f 758/29 755/28 756/27 +f 194/23 757/30 752/21 +f 758/29 752/21 757/30 +f 759/31 196/32 762/33 +f 760/34 762/33 196/32 +f 761/35 762/33 195/26 +f 756/27 195/26 762/33 +f 764/36 742/12 753/25 +f 189/4 753/25 742/12 +f 196/32 763/37 760/34 +f 764/36 760/34 763/37 +f 769/38 765/39 766/40 +f 198/41 766/40 765/39 +f 768/42 769/38 201/43 +f 767/44 201/43 769/38 +f 771/45 773/46 199/47 +f 770/48 199/47 773/46 +f 772/49 773/46 198/41 +f 766/40 198/41 773/46 +f 200/50 775/51 774/52 +f 777/53 774/52 775/51 +f 199/47 776/54 771/45 +f 777/53 771/45 776/54 +f 201/43 767/44 778/55 +f 780/56 778/55 767/44 +f 779/57 780/56 200/50 +f 775/51 200/50 780/56 +f 782/58 785/59 203/60 +f 781/61 203/60 785/59 +f 784/62 785/59 205/63 +f 783/64 205/63 785/59 +f 200/50 786/65 779/57 +f 788/66 779/57 786/65 +f 203/60 787/67 782/58 +f 788/66 782/58 787/67 +f 790/68 791/69 204/70 +f 789/71 204/70 791/69 +f 774/52 791/69 200/50 +f 786/65 200/50 791/69 +f 205/63 783/64 792/72 +f 794/73 792/72 783/64 +f 204/70 793/74 790/68 +f 794/73 790/68 793/74 +f 796/75 799/76 207/77 +f 795/78 207/77 799/76 +f 210/79 798/80 797/81 +f 799/76 797/81 798/80 +f 208/82 801/83 800/84 +f 803/85 800/84 801/83 +f 207/77 802/86 796/75 +f 803/85 796/75 802/86 +f 209/87 805/88 804/89 +f 807/90 804/89 805/88 +f 806/91 807/90 208/82 +f 801/83 208/82 807/90 +f 797/81 810/92 210/79 +f 808/93 210/79 810/92 +f 809/94 810/92 209/87 +f 805/88 209/87 810/92 +f 201/43 811/95 768/42 +f 814/96 768/42 811/95 +f 214/97 813/98 812/99 +f 814/96 812/99 813/98 +f 816/100 817/101 212/102 +f 815/103 212/102 817/101 +f 778/55 817/101 201/43 +f 811/95 201/43 817/101 +f 213/104 819/105 818/106 +f 821/107 818/106 819/105 +f 212/102 820/108 816/100 +f 821/107 816/100 820/108 +f 812/99 824/109 214/97 +f 822/110 214/97 824/109 +f 823/111 824/109 213/104 +f 819/105 213/104 824/109 +f 825/112 828/113 192/5 +f 738/6 192/5 828/113 +f 827/114 828/113 217/115 +f 826/116 217/115 828/113 +f 213/104 829/117 823/111 +f 830/118 823/111 829/117 +f 830/118 825/112 748/18 +f 192/5 748/18 825/112 +f 832/119 833/120 216/121 +f 831/122 216/121 833/120 +f 818/106 833/120 213/104 +f 829/117 213/104 833/120 +f 217/115 826/116 834/123 +f 836/124 834/123 826/116 +f 216/121 835/125 832/119 +f 836/124 832/119 835/125 +f 219/126 838/127 837/128 +f 841/129 837/128 838/127 +f 839/130 221/131 841/129 +f 840/132 841/129 221/131 +f 842/133 844/134 216/121 +f 835/125 216/121 844/134 +f 843/135 844/134 219/126 +f 838/127 219/126 844/134 +f 847/136 845/137 846/138 +f 220/139 846/138 845/137 +f 216/121 831/122 842/133 +f 847/136 842/133 831/122 +f 850/140 848/141 839/130 +f 221/131 839/130 848/141 +f 846/138 220/139 850/140 +f 849/142 850/140 220/139 +f 223/143 852/144 851/145 +f 854/146 851/145 852/144 +f 203/60 781/61 853/147 +f 854/146 853/147 781/61 +f 220/139 855/148 849/142 +f 857/149 849/142 855/148 +f 852/144 223/143 857/149 +f 856/150 857/149 223/143 +f 820/108 212/102 859/151 +f 858/152 859/151 212/102 +f 845/137 859/151 220/139 +f 855/148 220/139 859/151 +f 787/67 203/60 860/153 +f 853/147 860/153 203/60 +f 212/102 815/103 858/152 +f 860/153 858/152 815/103 +f 225/154 862/155 861/156 +f 864/157 861/156 862/155 +f 207/77 795/78 863/158 +f 864/157 863/158 795/78 +f 866/159 868/160 226/161 +f 865/162 226/161 868/160 +f 867/163 868/160 225/154 +f 862/155 225/154 868/160 +f 227/164 870/165 869/166 +f 872/167 869/166 870/165 +f 226/161 871/168 866/159 +f 872/167 866/159 871/168 +f 863/158 874/169 207/77 +f 802/86 207/77 874/169 +f 873/170 874/169 227/164 +f 870/165 227/164 874/169 +f 876/171 879/172 229/173 +f 875/174 229/173 879/172 +f 877/175 231/176 879/172 +f 878/177 879/172 231/176 +f 227/164 880/178 873/170 +f 882/179 873/170 880/178 +f 229/173 881/180 876/171 +f 882/179 876/171 881/180 +f 884/181 885/182 230/183 +f 883/184 230/183 885/182 +f 869/166 885/182 227/164 +f 880/178 227/164 885/182 +f 888/185 886/186 877/175 +f 231/176 877/175 886/186 +f 230/183 887/187 884/181 +f 888/185 884/181 887/187 +f 892/188 889/189 890/190 +f 233/191 890/190 889/189 +f 892/188 891/192 837/128 +f 219/126 837/128 891/192 +f 893/193 895/194 230/183 +f 887/187 230/183 895/194 +f 894/195 895/194 233/191 +f 890/190 233/191 895/194 +f 234/196 897/197 896/198 +f 898/199 896/198 897/197 +f 230/183 883/184 893/193 +f 898/199 893/193 883/184 +f 900/200 843/135 891/192 +f 219/126 891/192 843/135 +f 899/201 900/200 234/196 +f 897/197 234/196 900/200 +f 217/115 901/202 827/114 +f 903/203 827/114 901/202 +f 194/23 751/24 902/204 +f 903/203 902/204 751/24 +f 234/196 904/205 899/201 +f 905/206 899/201 904/205 +f 834/123 905/206 217/115 +f 901/202 217/115 905/206 +f 906/207 907/208 226/161 +f 871/168 226/161 907/208 +f 896/198 907/208 234/196 +f 904/205 234/196 907/208 +f 908/209 757/30 902/204 +f 194/23 902/204 757/30 +f 226/161 865/162 906/207 +f 908/209 906/207 865/162 +f 910/210 913/211 237/212 +f 909/213 237/212 913/211 +f 912/214 913/211 240/215 +f 911/216 240/215 913/211 +f 238/217 915/218 914/219 +f 917/220 914/219 915/218 +f 917/220 910/210 916/221 +f 237/212 916/221 910/210 +f 918/222 239/223 921/224 +f 919/225 921/224 239/223 +f 920/226 921/224 238/217 +f 915/218 238/217 921/224 +f 240/215 911/216 922/227 +f 924/228 922/227 911/216 +f 239/223 923/229 919/225 +f 924/228 919/225 923/229 +f 926/230 929/231 242/232 +f 925/233 242/232 929/231 +f 929/231 927/234 928/235 +f 244/236 928/235 927/234 +f 239/223 930/237 923/229 +f 932/238 923/229 930/237 +f 242/232 931/239 926/230 +f 932/238 926/230 931/239 +f 934/240 935/241 243/242 +f 933/243 243/242 935/241 +f 918/222 935/241 239/223 +f 930/237 239/223 935/241 +f 938/244 936/245 927/234 +f 244/236 927/234 936/245 +f 243/242 937/246 934/240 +f 938/244 934/240 937/246 +f 246/247 940/248 939/249 +f 943/250 939/249 940/248 +f 249/251 942/252 941/253 +f 943/250 941/253 942/252 +f 945/254 947/255 247/256 +f 944/257 247/256 947/255 +f 946/258 947/255 246/247 +f 940/248 246/247 947/255 +f 951/259 948/260 949/261 +f 248/262 949/261 948/260 +f 247/256 950/263 945/254 +f 951/259 945/254 950/263 +f 952/264 249/251 954/265 +f 941/253 954/265 249/251 +f 953/266 954/265 248/262 +f 949/261 248/262 954/265 +f 955/267 958/268 244/236 +f 928/235 244/236 958/268 +f 957/269 958/268 252/270 +f 956/271 252/270 958/268 +f 251/272 960/273 959/274 +f 961/275 959/274 960/273 +f 244/236 936/245 955/267 +f 961/275 955/267 936/245 +f 962/276 964/277 247/256 +f 950/263 247/256 964/277 +f 963/278 964/277 251/272 +f 960/273 251/272 964/277 +f 252/270 956/271 965/279 +f 966/280 965/279 956/271 +f 247/256 944/257 962/276 +f 966/280 962/276 944/257 +f 221/131 967/281 840/132 +f 970/282 840/132 967/281 +f 255/283 969/284 968/285 +f 970/282 968/285 969/284 +f 972/286 973/287 254/288 +f 971/289 254/288 973/287 +f 848/141 973/287 221/131 +f 967/281 221/131 973/287 +f 976/290 931/239 974/291 +f 242/232 974/291 931/239 +f 254/288 975/292 972/286 +f 976/290 972/286 975/292 +f 968/285 978/293 255/283 +f 977/294 255/283 978/293 +f 974/291 242/232 978/293 +f 925/233 978/293 242/232 +f 980/295 982/296 257/297 +f 979/298 257/297 982/296 +f 886/186 982/296 231/176 +f 981/299 231/176 982/296 +f 985/300 946/258 983/301 +f 246/247 983/301 946/258 +f 257/297 984/302 980/295 +f 985/300 980/295 984/302 +f 258/303 987/304 986/305 +f 988/306 986/305 987/304 +f 246/247 939/249 983/301 +f 988/306 983/301 939/249 +f 231/176 981/299 878/177 +f 990/307 878/177 981/299 +f 990/307 987/304 989/308 +f 258/303 989/308 987/304 +f 991/309 260/310 994/311 +f 992/312 994/311 260/310 +f 792/72 994/311 205/63 +f 993/313 205/63 994/311 +f 916/221 237/212 997/314 +f 995/315 997/314 237/212 +f 260/310 996/316 992/312 +f 997/314 992/312 996/316 +f 999/317 1000/318 261/319 +f 998/320 261/319 1000/318 +f 237/212 909/213 995/315 +f 1000/318 995/315 909/213 +f 205/63 993/313 784/62 +f 1002/321 784/62 993/313 +f 1002/321 999/317 1001/322 +f 261/319 1001/322 999/317 +f 1003/323 1005/324 257/297 +f 984/302 257/297 1005/324 +f 965/279 1005/324 252/270 +f 1004/325 252/270 1005/324 +f 233/191 1006/326 894/195 +f 1007/327 894/195 1006/326 +f 257/297 979/298 1003/323 +f 1007/327 1003/323 979/298 +f 1008/328 1009/329 255/283 +f 969/284 255/283 1009/329 +f 889/189 1009/329 233/191 +f 1006/326 233/191 1009/329 +f 252/270 1004/325 957/269 +f 1010/330 957/269 1004/325 +f 255/283 977/294 1008/328 +f 1010/330 1008/328 977/294 +f 223/143 1011/331 856/150 +f 1013/332 856/150 1011/331 +f 254/288 971/289 1012/333 +f 1013/332 1012/333 971/289 +f 1014/334 1015/335 261/319 +f 1001/322 261/319 1015/335 +f 851/145 1015/335 223/143 +f 1011/331 223/143 1015/335 +f 240/215 1016/336 912/214 +f 1017/337 912/214 1016/336 +f 261/319 998/320 1014/334 +f 1017/337 1014/334 998/320 +f 1012/333 1018/338 254/288 +f 975/292 254/288 1018/338 +f 922/227 1018/338 240/215 +f 1016/336 240/215 1018/338 +f 1019/339 265/340 1022/341 +f 1020/342 1022/341 265/340 +f 1022/341 1021/343 991/309 +f 260/310 991/309 1021/343 +f 1023/344 266/345 1026/346 +f 1024/347 1026/346 266/345 +f 1025/348 1026/346 265/340 +f 1020/342 265/340 1026/346 +f 1030/349 1027/350 1028/351 +f 267/352 1028/351 1027/350 +f 266/345 1029/353 1024/347 +f 1030/349 1024/347 1029/353 +f 1021/343 1032/354 260/310 +f 996/316 260/310 1032/354 +f 1028/351 267/352 1032/354 +f 1031/355 1032/354 267/352 +f 269/356 1034/357 1033/358 +f 1036/359 1033/358 1034/357 +f 1036/359 1035/360 1023/361 +f 266/362 1023/361 1035/360 +f 1038/363 1040/364 270/365 +f 1037/366 270/365 1040/364 +f 1039/367 1040/364 269/356 +f 1034/357 269/356 1040/364 +f 1044/368 1041/369 1042/370 +f 271/371 1042/370 1041/369 +f 270/365 1043/372 1038/363 +f 1044/368 1038/363 1043/372 +f 1035/360 1046/373 266/362 +f 1029/374 266/362 1046/373 +f 1042/370 271/371 1046/373 +f 1045/375 1046/373 271/371 +f 1048/376 1050/377 273/378 +f 1047/379 273/378 1050/377 +f 1033/358 1050/377 269/356 +f 1049/380 269/356 1050/377 +f 274/381 1052/382 1051/383 +f 1054/384 1051/383 1052/382 +f 273/378 1053/385 1048/376 +f 1054/384 1048/376 1053/385 +f 1056/386 1058/387 275/388 +f 1055/389 275/388 1058/387 +f 1057/390 1058/387 274/381 +f 1052/382 274/381 1058/387 +f 269/356 1049/380 1039/367 +f 1060/391 1039/367 1049/380 +f 275/388 1059/392 1056/386 +f 1060/391 1056/386 1059/392 +f 1061/393 1064/394 275/388 +f 1059/392 275/388 1064/394 +f 1063/395 1064/394 279/396 +f 1062/397 279/396 1064/394 +f 277/398 1066/399 1065/400 +f 1067/401 1065/400 1066/399 +f 275/388 1055/389 1061/393 +f 1067/401 1061/393 1055/389 +f 278/402 1069/403 1068/404 +f 1071/405 1068/404 1069/403 +f 1070/406 1071/405 277/398 +f 1066/399 277/398 1071/405 +f 279/396 1062/397 1072/407 +f 1074/408 1072/407 1062/397 +f 1073/409 1074/408 278/402 +f 1069/403 278/402 1074/408 +f 1076/410 1079/411 281/412 +f 1075/413 281/412 1079/411 +f 1077/414 284/415 1079/411 +f 1078/416 1079/411 284/415 +f 1081/417 1083/418 282/419 +f 1080/420 282/419 1083/418 +f 281/412 1082/421 1076/410 +f 1083/418 1076/410 1082/421 +f 283/422 1085/423 1084/424 +f 1087/425 1084/424 1085/423 +f 282/419 1086/426 1081/417 +f 1087/425 1081/417 1086/426 +f 284/415 1077/414 1088/427 +f 1090/428 1088/427 1077/414 +f 1090/428 1085/423 1089/429 +f 283/422 1089/429 1085/423 +f 1092/430 1095/431 286/432 +f 1091/433 286/432 1095/431 +f 1095/431 1093/434 1094/435 +f 289/436 1094/435 1093/434 +f 1097/437 1099/438 287/439 +f 1096/440 287/439 1099/438 +f 286/432 1098/441 1092/430 +f 1099/438 1092/430 1098/441 +f 288/442 1101/443 1100/444 +f 1103/445 1100/444 1101/443 +f 287/439 1102/446 1097/437 +f 1103/445 1097/437 1102/446 +f 289/436 1093/434 1104/447 +f 1106/448 1104/447 1093/434 +f 1101/443 288/442 1106/448 +f 1105/449 1106/448 288/442 +f 225/450 1107/451 867/452 +f 1110/453 867/452 1107/451 +f 292/454 1109/455 1108/456 +f 1110/453 1108/456 1109/455 +f 1112/457 1113/458 291/459 +f 1111/460 291/459 1113/458 +f 861/461 1113/458 225/450 +f 1107/451 225/450 1113/458 +f 289/436 1114/462 1094/435 +f 1116/463 1094/435 1114/462 +f 291/459 1115/464 1112/457 +f 1116/463 1112/457 1115/464 +f 1108/456 1118/465 292/454 +f 1117/466 292/454 1118/465 +f 289/436 1104/447 1114/462 +f 1118/465 1114/462 1104/447 +f 1120/467 1123/468 294/469 +f 1119/470 294/469 1123/468 +f 1122/471 1123/468 296/472 +f 1121/473 296/472 1123/468 +f 1127/474 1124/475 1125/476 +f 295/477 1125/476 1124/475 +f 294/469 1126/478 1120/467 +f 1127/474 1120/467 1126/478 +f 1128/479 1130/480 287/439 +f 1102/446 287/439 1130/480 +f 295/477 1129/481 1125/476 +f 1130/480 1125/476 1129/481 +f 296/472 1121/473 1131/482 +f 1132/483 1131/482 1121/473 +f 287/439 1096/440 1128/479 +f 1132/483 1128/479 1096/440 +f 1133/484 1135/485 292/454 +f 1109/455 292/454 1135/485 +f 755/486 1135/485 195/487 +f 1134/488 195/487 1135/485 +f 288/442 1136/489 1105/449 +f 1137/490 1105/449 1136/489 +f 292/454 1117/466 1133/484 +f 1137/490 1133/484 1117/466 +f 295/477 1138/491 1129/481 +f 1139/492 1129/481 1138/491 +f 1136/489 288/442 1139/492 +f 1100/444 1139/492 288/442 +f 195/487 1134/488 761/493 +f 1140/494 761/493 1134/488 +f 295/477 1124/475 1138/491 +f 1140/494 1138/491 1124/475 +f 1143/495 1122/471 1141/496 +f 296/472 1141/496 1122/471 +f 1143/495 1142/497 808/498 +f 210/499 808/498 1142/497 +f 1144/500 1145/501 286/432 +f 1098/441 286/432 1145/501 +f 1141/496 296/472 1145/501 +f 1131/482 1145/501 296/472 +f 291/459 1146/502 1115/464 +f 1147/503 1115/464 1146/502 +f 286/432 1091/433 1144/500 +f 1147/503 1144/500 1091/433 +f 1142/497 1148/504 210/499 +f 798/505 210/499 1148/504 +f 1146/502 291/459 1148/504 +f 1111/460 1148/504 291/459 +f 300/506 1150/507 1149/508 +f 1152/509 1149/508 1150/507 +f 214/510 822/511 1151/512 +f 1152/509 1151/512 822/511 +f 1153/513 1155/514 281/412 +f 1082/421 281/412 1155/514 +f 1150/507 300/506 1155/514 +f 1154/515 1155/514 300/506 +f 301/516 1157/517 1156/518 +f 1158/519 1156/518 1157/517 +f 281/412 1075/413 1153/513 +f 1158/519 1153/513 1075/413 +f 1151/512 1160/520 214/510 +f 813/521 214/510 1160/520 +f 1157/517 301/516 1160/520 +f 1159/522 1160/520 301/516 +f 198/523 1161/524 772/525 +f 1164/526 772/525 1161/524 +f 1164/526 1162/527 1163/528 +f 303/529 1163/528 1162/527 +f 1165/530 1166/531 301/516 +f 1159/522 301/516 1166/531 +f 765/532 1166/531 198/523 +f 1161/524 198/523 1166/531 +f 284/415 1167/533 1078/416 +f 1168/534 1078/416 1167/533 +f 301/516 1156/518 1165/530 +f 1168/534 1165/530 1156/518 +f 1162/527 1170/535 303/529 +f 1169/536 303/529 1170/535 +f 1167/533 284/415 1170/535 +f 1088/427 1170/535 284/415 +f 305/537 1172/538 1171/539 +f 1174/540 1171/539 1172/538 +f 191/541 744/542 1173/543 +f 1174/540 1173/543 744/542 +f 1175/544 1177/545 282/419 +f 1086/426 282/419 1177/545 +f 1176/546 1177/545 305/537 +f 1172/538 305/537 1177/545 +f 300/506 1178/547 1154/515 +f 1179/548 1154/515 1178/547 +f 282/419 1080/420 1175/544 +f 1179/548 1175/544 1080/420 +f 1173/543 1180/549 191/541 +f 749/550 191/541 1180/549 +f 1149/508 1180/549 300/506 +f 1178/547 300/506 1180/549 +f 1181/551 1184/552 303/529 +f 1163/528 303/529 1184/552 +f 1183/553 1184/552 307/554 +f 1182/555 307/554 1184/552 +f 283/422 1185/556 1089/429 +f 1186/557 1089/429 1185/556 +f 303/529 1169/536 1181/551 +f 1186/557 1181/551 1169/536 +f 305/537 1187/558 1176/546 +f 1188/559 1176/546 1187/558 +f 283/422 1084/424 1185/556 +f 1188/559 1185/556 1084/424 +f 307/554 1182/555 1189/560 +f 1190/561 1189/560 1182/555 +f 1171/539 1190/561 305/537 +f 1187/558 305/537 1190/561 +f 1192/562 1194/563 309/564 +f 1191/565 309/564 1194/563 +f 1072/407 1194/563 279/396 +f 1193/566 279/396 1194/563 +f 1195/567 310/568 1198/569 +f 1196/570 1198/569 310/568 +f 1192/562 309/564 1198/569 +f 1197/571 1198/569 309/564 +f 1202/572 1199/573 1200/574 +f 311/575 1200/574 1199/573 +f 310/568 1201/576 1196/570 +f 1202/572 1196/570 1201/576 +f 1203/577 1205/578 270/365 +f 1043/372 270/365 1205/578 +f 1200/574 311/575 1205/578 +f 1204/579 1205/578 311/575 +f 279/396 1193/566 1063/395 +f 1206/580 1063/395 1193/566 +f 270/365 1037/366 1203/577 +f 1206/580 1203/577 1037/366 +f 1208/581 1211/582 313/583 +f 1207/584 313/583 1211/582 +f 1210/585 1211/582 316/586 +f 1209/587 316/586 1211/582 +f 314/588 1213/589 1212/590 +f 1215/591 1212/590 1213/589 +f 313/583 1214/592 1208/581 +f 1215/591 1208/581 1214/592 +f 315/593 1217/594 1216/595 +f 1219/596 1216/595 1217/594 +f 1219/596 1213/589 1218/597 +f 314/588 1218/597 1213/589 +f 1209/587 1222/598 316/586 +f 1220/599 316/586 1222/598 +f 1221/600 1222/598 315/593 +f 1217/594 315/593 1222/598 +f 1223/601 1225/602 310/603 +f 1201/604 310/603 1225/602 +f 1212/590 1225/602 314/588 +f 1224/605 314/588 1225/602 +f 318/606 1227/607 1226/608 +f 1228/609 1226/608 1227/607 +f 1228/609 1223/601 1195/610 +f 310/603 1195/610 1223/601 +f 1230/611 1232/612 319/613 +f 1229/614 319/613 1232/612 +f 1231/615 1232/612 318/606 +f 1227/607 318/606 1232/612 +f 314/588 1224/605 1218/597 +f 1234/616 1218/597 1224/605 +f 319/613 1233/617 1230/611 +f 1234/616 1230/611 1233/617 +f 1236/618 1238/619 321/620 +f 1235/621 321/620 1238/619 +f 1237/622 319/613 1238/619 +f 1229/614 1238/619 319/613 +f 322/623 1240/624 1239/625 +f 1242/626 1239/625 1240/624 +f 321/620 1241/627 1236/618 +f 1242/626 1236/618 1241/627 +f 315/593 1243/628 1221/600 +f 1245/629 1221/600 1243/628 +f 1240/624 322/623 1245/629 +f 1244/630 1245/629 322/623 +f 319/613 1237/622 1233/617 +f 1246/631 1233/617 1237/622 +f 1246/631 1243/628 1216/595 +f 315/593 1216/595 1243/628 +f 324/632 1248/633 1247/634 +f 1251/635 1247/634 1248/633 +f 326/636 1250/637 1249/638 +f 1251/635 1249/638 1250/637 +f 1253/639 1255/640 325/641 +f 1252/642 325/641 1255/640 +f 1254/643 1255/640 324/632 +f 1248/633 324/632 1255/640 +f 238/217 1256/644 920/226 +f 1258/645 920/226 1256/644 +f 325/641 1257/646 1253/639 +f 1258/645 1253/639 1257/646 +f 1249/638 1260/647 326/636 +f 1259/648 326/636 1260/647 +f 914/219 1260/647 238/217 +f 1256/644 238/217 1260/647 +f 1265/649 1261/650 1262/651 +f 328/652 1262/651 1261/650 +f 330/653 1264/654 1263/655 +f 1265/649 1263/655 1264/654 +f 1267/656 1269/657 329/658 +f 1266/659 329/658 1269/657 +f 1262/651 328/652 1269/657 +f 1268/660 1269/657 328/652 +f 251/272 1270/661 963/278 +f 1272/662 963/278 1270/661 +f 1272/662 1267/656 1271/663 +f 329/658 1271/663 1267/656 +f 1263/655 1274/664 330/653 +f 1273/665 330/653 1274/664 +f 959/274 1274/664 251/272 +f 1270/661 251/272 1274/664 +f 1278/666 1275/667 1276/668 +f 332/669 1276/668 1275/667 +f 329/658 1266/659 1277/670 +f 1278/666 1277/670 1266/659 +f 1280/671 1282/672 333/673 +f 1279/674 333/673 1282/672 +f 1276/668 332/669 1282/672 +f 1281/675 1282/672 332/669 +f 1285/676 953/266 1283/677 +f 248/262 1283/677 953/266 +f 333/673 1284/678 1280/671 +f 1285/676 1280/671 1284/678 +f 1271/663 329/658 1286/679 +f 1277/670 1286/679 329/658 +f 948/260 1286/679 248/262 +f 1283/677 248/262 1286/679 +f 335/680 1288/681 1287/682 +f 1291/683 1287/682 1288/681 +f 337/684 1290/685 1289/686 +f 1291/683 1289/686 1290/685 +f 1293/687 1295/688 336/689 +f 1292/690 336/689 1295/688 +f 1288/681 335/680 1295/688 +f 1294/691 1295/688 335/680 +f 1298/692 1183/693 1296/694 +f 307/695 1296/694 1183/693 +f 1298/692 1293/687 1297/696 +f 336/689 1297/696 1293/687 +f 1289/686 1300/697 337/684 +f 1299/698 337/684 1300/697 +f 1296/694 307/695 1300/697 +f 1189/699 1300/697 307/695 +f 1302/700 1305/701 339/702 +f 1301/703 339/702 1305/701 +f 1304/704 1305/701 341/705 +f 1303/706 341/705 1305/701 +f 340/707 1307/708 1306/709 +f 1309/710 1306/709 1307/708 +f 1309/710 1302/700 1308/711 +f 339/702 1308/711 1302/700 +f 1310/712 1312/713 294/714 +f 1126/715 294/714 1312/713 +f 1307/708 340/707 1312/713 +f 1311/716 1312/713 340/707 +f 341/705 1303/706 1313/717 +f 1314/718 1313/717 1303/706 +f 294/714 1119/719 1310/712 +f 1314/718 1310/712 1119/719 +f 1318/720 1315/721 1316/722 +f 343/723 1316/722 1315/721 +f 325/641 1252/642 1317/724 +f 1318/720 1317/724 1252/642 +f 1319/725 1321/726 330/653 +f 1264/654 330/653 1321/726 +f 1316/722 343/723 1321/726 +f 1320/727 1321/726 343/723 +f 243/242 1322/728 937/246 +f 1323/729 937/246 1322/728 +f 1323/729 1319/725 1273/665 +f 330/653 1273/665 1319/725 +f 1317/724 1324/730 325/641 +f 1257/646 325/641 1324/730 +f 933/243 1324/730 243/242 +f 1322/728 243/242 1324/730 +f 345/731 1326/732 1325/733 +f 1329/734 1325/733 1326/732 +f 346/735 1328/736 1327/737 +f 1329/734 1327/737 1328/736 +f 1330/738 1332/739 326/636 +f 1250/637 326/636 1332/739 +f 1331/740 1332/739 345/731 +f 1326/732 345/731 1332/739 +f 267/352 1333/741 1031/355 +f 1334/742 1031/355 1333/741 +f 326/636 1259/648 1330/738 +f 1334/742 1330/738 1259/648 +f 1335/743 346/735 1336/744 +f 1327/737 1336/744 346/735 +f 1027/350 1336/744 267/352 +f 1333/741 267/352 1336/744 +f 1341/745 1337/746 1338/747 +f 348/748 1338/747 1337/746 +f 349/749 1340/750 1339/751 +f 1341/745 1339/751 1340/750 +f 1342/752 1344/753 346/754 +f 1328/755 346/754 1344/753 +f 1338/747 348/748 1344/753 +f 1343/756 1344/753 348/748 +f 271/757 1345/758 1045/759 +f 1346/760 1045/759 1345/758 +f 1346/760 1342/752 1335/761 +f 346/754 1335/761 1342/752 +f 349/749 1339/751 1347/762 +f 1348/763 1347/762 1339/751 +f 1041/764 1348/763 271/757 +f 1345/758 271/757 1348/763 +f 1353/765 1349/766 1350/767 +f 351/768 1350/767 1349/766 +f 354/769 1352/770 1351/771 +f 1353/765 1351/771 1352/770 +f 1355/772 1357/773 352/774 +f 1354/775 352/774 1357/773 +f 1350/767 351/768 1357/773 +f 1356/776 1357/773 351/768 +f 353/777 1359/778 1358/779 +f 1361/780 1358/779 1359/778 +f 352/774 1360/781 1355/772 +f 1361/780 1355/772 1360/781 +f 1351/771 1364/782 354/769 +f 1362/783 354/769 1364/782 +f 1363/784 1364/782 353/777 +f 1359/778 353/777 1364/782 +f 1365/785 356/786 1369/787 +f 1366/788 1369/787 356/786 +f 1369/787 1367/789 1368/790 +f 357/791 1368/790 1367/789 +f 1370/792 1372/793 354/769 +f 1352/770 354/769 1372/793 +f 356/786 1371/794 1366/788 +f 1372/793 1366/788 1371/794 +f 1374/795 1073/409 1373/796 +f 278/402 1373/796 1073/409 +f 354/769 1362/783 1370/792 +f 1374/795 1370/792 1362/783 +f 1367/789 1376/797 357/791 +f 1375/798 357/791 1376/797 +f 278/402 1068/404 1373/796 +f 1376/797 1373/796 1068/404 +f 1381/799 1377/800 1378/801 +f 359/802 1378/801 1377/800 +f 360/803 1380/804 1379/805 +f 1381/799 1379/805 1380/804 +f 1384/806 1304/704 1382/807 +f 341/705 1382/807 1304/704 +f 1378/801 359/802 1384/806 +f 1383/808 1384/806 359/802 +f 209/87 1385/809 809/94 +f 1386/810 809/94 1385/809 +f 1382/807 341/705 1386/810 +f 1313/717 1386/810 341/705 +f 1379/805 1388/811 360/803 +f 1387/812 360/803 1388/811 +f 804/89 1388/811 209/87 +f 1385/809 209/87 1388/811 +f 1390/813 1392/814 362/815 +f 1389/816 362/815 1392/814 +f 1391/817 336/689 1392/814 +f 1292/690 1392/814 336/689 +f 363/818 1394/819 1393/820 +f 1396/821 1393/820 1394/819 +f 1396/821 1390/813 1395/822 +f 362/815 1395/822 1390/813 +f 1397/823 1399/824 199/47 +f 776/54 199/47 1399/824 +f 1398/825 1399/824 363/818 +f 1394/819 363/818 1399/824 +f 1400/826 1297/696 1391/817 +f 336/689 1391/817 1297/696 +f 199/47 770/48 1397/823 +f 1400/826 1397/823 770/48 +f 1402/827 1404/828 365/829 +f 1401/830 365/829 1404/828 +f 1403/831 363/818 1404/828 +f 1393/820 1404/828 363/818 +f 366/832 1406/833 1405/834 +f 1408/835 1405/834 1406/833 +f 1408/835 1402/827 1407/836 +f 365/829 1407/836 1402/827 +f 1409/837 1411/838 204/70 +f 793/74 204/70 1411/838 +f 1410/839 1411/838 366/832 +f 1406/833 366/832 1411/838 +f 363/818 1403/831 1398/825 +f 1412/840 1398/825 1403/831 +f 204/70 789/71 1409/837 +f 1412/840 1409/837 789/71 +f 1414/841 1416/842 368/843 +f 1413/844 368/843 1416/842 +f 1405/834 1416/842 366/832 +f 1415/845 366/832 1416/842 +f 1418/846 1420/847 369/848 +f 1417/849 369/848 1420/847 +f 1419/850 1420/847 368/843 +f 1414/841 368/843 1420/847 +f 265/340 1421/851 1025/348 +f 1423/852 1025/348 1421/851 +f 1423/852 1418/846 1422/853 +f 369/848 1422/853 1418/846 +f 366/832 1415/845 1410/839 +f 1424/854 1410/839 1415/845 +f 1424/854 1421/851 1019/339 +f 265/340 1019/339 1421/851 +f 371/855 1426/856 1425/857 +f 1428/858 1425/857 1426/856 +f 369/859 1417/860 1427/861 +f 1428/858 1427/861 1417/860 +f 372/862 1430/863 1429/864 +f 1432/865 1429/864 1430/863 +f 1431/866 1432/865 371/855 +f 1426/856 371/855 1432/865 +f 1433/867 1435/868 273/378 +f 1053/385 273/378 1435/868 +f 1434/869 1435/868 372/862 +f 1430/863 372/862 1435/868 +f 1427/861 1436/870 369/859 +f 1422/871 369/859 1436/870 +f 273/378 1047/379 1433/867 +f 1436/870 1433/867 1047/379 +f 1438/872 1440/873 374/874 +f 1437/875 374/874 1440/873 +f 1429/864 1440/873 372/862 +f 1439/876 372/862 1440/873 +f 375/877 1442/878 1441/879 +f 1444/880 1441/879 1442/878 +f 1444/880 1438/872 1443/881 +f 374/874 1443/881 1438/872 +f 1445/882 1447/883 274/381 +f 1057/390 274/381 1447/883 +f 1446/884 1447/883 375/877 +f 1442/878 375/877 1447/883 +f 372/862 1439/876 1434/869 +f 1448/885 1434/869 1439/876 +f 274/381 1051/383 1445/882 +f 1448/885 1445/882 1051/383 +f 1452/886 1449/887 1450/888 +f 377/889 1450/888 1449/887 +f 1451/890 375/877 1452/886 +f 1441/879 1452/886 375/877 +f 1453/891 1455/892 357/791 +f 1368/790 357/791 1455/892 +f 1450/888 377/889 1455/892 +f 1454/893 1455/892 377/889 +f 277/398 1456/894 1070/406 +f 1457/895 1070/406 1456/894 +f 357/791 1375/798 1453/891 +f 1457/895 1453/891 1375/798 +f 1446/884 375/877 1458/896 +f 1451/890 1458/896 375/877 +f 1065/400 1458/896 277/398 +f 1456/894 277/398 1458/896 +f 1462/897 1340/750 1459/898 +f 349/749 1459/898 1340/750 +f 1461/899 1462/897 380/900 +f 1460/901 380/900 1462/897 +f 1464/902 1204/903 1463/904 +f 311/905 1463/904 1204/903 +f 1459/898 349/749 1464/902 +f 1347/762 1464/902 349/749 +f 1465/906 1466/907 313/908 +f 1214/909 313/908 1466/907 +f 1199/910 1466/907 311/905 +f 1463/904 311/905 1466/907 +f 379/911 1468/912 1467/913 +f 1469/914 1467/913 1468/912 +f 313/908 1207/915 1465/906 +f 1469/914 1465/906 1207/915 +f 380/900 1460/901 1470/916 +f 1472/917 1470/916 1460/901 +f 1472/917 1468/912 1471/918 +f 379/911 1471/918 1468/912 +f 1363/784 353/777 1475/919 +f 1473/920 1475/919 353/777 +f 1191/565 1475/919 309/564 +f 1474/921 309/564 1475/919 +f 1477/922 1478/923 382/924 +f 1476/925 382/924 1478/923 +f 1358/779 1478/923 353/777 +f 1473/920 353/777 1478/923 +f 309/564 1474/921 1197/571 +f 1480/926 1197/571 1474/921 +f 382/924 1479/927 1477/922 +f 1480/926 1477/922 1479/927 +f 384/928 1482/929 1481/930 +f 1485/931 1481/930 1482/929 +f 387/932 1484/933 1483/934 +f 1485/931 1483/934 1484/933 +f 1487/935 1489/936 385/937 +f 1486/938 385/937 1489/936 +f 1488/939 1489/936 384/928 +f 1482/929 384/928 1489/936 +f 386/940 1491/941 1490/942 +f 1493/943 1490/942 1491/941 +f 385/937 1492/944 1487/935 +f 1493/943 1487/935 1492/944 +f 1483/934 1496/945 387/932 +f 1494/946 387/932 1496/945 +f 1491/941 386/940 1496/945 +f 1495/947 1496/945 386/940 +f 1501/948 1497/949 1498/950 +f 389/951 1498/950 1497/949 +f 392/952 1500/953 1499/954 +f 1501/948 1499/954 1500/953 +f 1503/955 1505/956 390/957 +f 1502/958 390/957 1505/956 +f 1498/950 389/951 1505/956 +f 1504/959 1505/956 389/951 +f 1507/960 1509/961 391/962 +f 1506/963 391/962 1509/961 +f 1509/961 1503/955 1508/964 +f 390/957 1508/964 1503/955 +f 1499/954 1512/965 392/952 +f 1510/966 392/952 1512/965 +f 391/962 1511/967 1507/960 +f 1512/965 1507/960 1511/967 +f 1513/968 394/969 1517/970 +f 1514/971 1517/970 394/969 +f 1516/972 1517/970 397/973 +f 1515/974 397/973 1517/970 +f 1521/975 1518/976 1519/977 +f 395/978 1519/977 1518/976 +f 1514/971 394/969 1521/975 +f 1520/979 1521/975 394/969 +f 1523/980 1525/981 396/982 +f 1522/983 396/982 1525/981 +f 1519/977 395/978 1525/981 +f 1524/984 1525/981 395/978 +f 397/973 1515/974 1526/985 +f 1528/986 1526/985 1515/974 +f 1528/986 1523/980 1527/987 +f 396/982 1527/987 1523/980 +f 399/988 1530/989 1529/990 +f 1532/991 1529/990 1530/989 +f 1502/958 1532/991 390/957 +f 1531/992 390/957 1532/991 +f 1534/993 1536/994 400/995 +f 1533/996 400/995 1536/994 +f 399/988 1535/997 1530/989 +f 1536/994 1530/989 1535/997 +f 1540/998 1537/999 1538/1000 +f 401/1001 1538/1000 1537/999 +f 400/995 1539/1002 1534/993 +f 1540/998 1534/993 1539/1002 +f 1531/992 1542/1003 390/957 +f 1508/964 390/957 1542/1003 +f 1538/1000 401/1001 1542/1003 +f 1541/1004 1542/1003 401/1001 +f 403/1005 1544/1006 1543/1007 +f 1546/1008 1543/1007 1544/1006 +f 1546/1008 1545/1009 1533/996 +f 400/995 1533/996 1545/1009 +f 395/978 1547/1010 1524/984 +f 1549/1011 1524/984 1547/1010 +f 1549/1011 1544/1006 1548/1012 +f 403/1005 1548/1012 1544/1006 +f 1551/1013 1552/1014 404/1015 +f 1550/1016 404/1015 1552/1014 +f 1518/976 1552/1014 395/978 +f 1547/1010 395/978 1552/1014 +f 1545/1009 1554/1017 400/995 +f 1539/1002 400/995 1554/1017 +f 1554/1017 1551/1013 1553/1018 +f 404/1015 1553/1018 1551/1013 +f 1555/1019 1558/1020 392/952 +f 1500/953 392/952 1558/1020 +f 407/1021 1557/1022 1556/1023 +f 1558/1020 1556/1023 1557/1022 +f 397/973 1559/1024 1516/972 +f 1560/1025 1516/972 1559/1024 +f 392/952 1510/966 1555/1019 +f 1560/1025 1555/1019 1510/966 +f 406/1026 1562/1027 1561/1028 +f 1563/1029 1561/1028 1562/1027 +f 1526/985 1563/1029 397/973 +f 1559/1024 397/973 1563/1029 +f 1556/1023 1566/1030 407/1021 +f 1564/1031 407/1021 1566/1030 +f 1565/1032 1566/1030 406/1026 +f 1562/1027 406/1026 1566/1030 +f 1567/1033 1570/1034 407/1035 +f 1557/1036 407/1035 1570/1034 +f 1568/1037 410/1038 1570/1034 +f 1569/1039 1570/1034 410/1038 +f 409/1040 1572/1041 1571/1042 +f 1573/1043 1571/1042 1572/1041 +f 407/1035 1564/1044 1567/1033 +f 1573/1043 1567/1033 1564/1044 +f 1574/1045 1576/1046 321/620 +f 1241/627 321/620 1576/1046 +f 1575/1047 1576/1046 409/1040 +f 1572/1041 409/1040 1576/1046 +f 318/606 1577/1048 1231/615 +f 1578/1049 1231/615 1577/1048 +f 321/620 1235/621 1574/1045 +f 1578/1049 1574/1045 1235/621 +f 1568/1037 1580/1050 410/1038 +f 1579/1051 410/1038 1580/1050 +f 1226/608 1580/1050 318/606 +f 1577/1048 318/606 1580/1050 +f 1581/1052 412/1053 1584/1054 +f 1582/1055 1584/1054 412/1053 +f 1561/1056 1584/1054 406/1057 +f 1583/1058 406/1057 1584/1054 +f 1587/1059 1210/585 1585/1060 +f 316/586 1585/1060 1210/585 +f 1587/1059 1582/1055 1586/1061 +f 412/1053 1586/1061 1582/1055 +f 322/623 1588/1062 1244/630 +f 1589/1063 1244/630 1588/1062 +f 1589/1063 1585/1060 1220/599 +f 316/586 1220/599 1585/1060 +f 1591/1064 1575/1047 1590/1065 +f 409/1040 1590/1065 1575/1047 +f 322/623 1239/625 1588/1062 +f 1591/1064 1588/1062 1239/625 +f 406/1057 1583/1058 1565/1066 +f 1592/1067 1565/1066 1583/1058 +f 409/1040 1571/1042 1590/1065 +f 1592/1067 1590/1065 1571/1042 +f 414/1068 1594/1069 1593/1070 +f 1596/1071 1593/1070 1594/1069 +f 396/1072 1522/1073 1595/1074 +f 1596/1071 1595/1074 1522/1073 +f 415/1075 1598/1076 1597/1077 +f 1600/1078 1597/1077 1598/1076 +f 1600/1078 1594/1069 1599/1079 +f 414/1068 1599/1079 1594/1069 +f 1601/1080 1603/1081 379/911 +f 1471/918 379/911 1603/1081 +f 1602/1082 1603/1081 415/1075 +f 1598/1076 415/1075 1603/1081 +f 1605/1083 1586/1084 1604/1085 +f 412/1086 1604/1085 1586/1084 +f 379/911 1467/913 1601/1080 +f 1605/1083 1601/1080 1467/913 +f 1527/1087 396/1072 1606/1088 +f 1595/1074 1606/1088 396/1072 +f 1604/1085 412/1086 1606/1088 +f 1581/1089 1606/1088 412/1086 +f 1608/1090 1611/1091 417/1092 +f 1607/1093 417/1092 1611/1091 +f 1609/1094 419/1095 1611/1091 +f 1610/1096 1611/1091 419/1095 +f 1612/1097 1614/1098 399/1099 +f 1535/1100 399/1099 1614/1098 +f 1614/1098 1608/1090 1613/1101 +f 417/1092 1613/1101 1608/1090 +f 418/1102 1616/1103 1615/1104 +f 1617/1105 1615/1104 1616/1103 +f 1612/1097 399/1099 1617/1105 +f 1529/1106 1617/1105 399/1099 +f 1618/1107 1620/1108 352/774 +f 1360/781 352/774 1620/1108 +f 1619/1109 1620/1108 418/1102 +f 1616/1103 418/1102 1620/1108 +f 419/1095 1609/1094 1621/1110 +f 1622/1111 1621/1110 1609/1094 +f 352/774 1354/775 1618/1107 +f 1622/1111 1618/1107 1354/775 +f 414/1068 1623/1112 1599/1079 +f 1626/1113 1599/1079 1623/1112 +f 1625/1114 1626/1113 421/1115 +f 1624/1116 421/1115 1626/1113 +f 1548/1117 403/1118 1628/1119 +f 1627/1120 1628/1119 403/1118 +f 1593/1070 1628/1119 414/1068 +f 1623/1112 414/1068 1628/1119 +f 1629/1121 1630/1122 417/1123 +f 1613/1124 417/1123 1630/1122 +f 1627/1120 403/1118 1630/1122 +f 1543/1125 1630/1122 403/1118 +f 1632/1126 1631/1127 1624/1116 +f 421/1115 1624/1116 1631/1127 +f 417/1123 1607/1128 1629/1121 +f 1632/1126 1629/1121 1607/1128 +f 418/1102 1633/1129 1619/1109 +f 1635/1130 1619/1109 1633/1129 +f 382/924 1476/925 1634/1131 +f 1635/1130 1634/1131 1476/925 +f 389/1132 1636/1133 1504/1134 +f 1637/1135 1504/1134 1636/1133 +f 1615/1104 1637/1135 418/1102 +f 1633/1129 418/1102 1637/1135 +f 1638/1136 1639/1137 410/1138 +f 1569/1139 410/1138 1639/1137 +f 1497/1140 1639/1137 389/1132 +f 1636/1133 389/1132 1639/1137 +f 1634/1131 1640/1141 382/924 +f 1479/927 382/924 1640/1141 +f 1579/1142 1640/1141 410/1138 +f 1638/1136 410/1138 1640/1141 +f 1644/1143 1641/1144 1642/1145 +f 424/1146 1642/1145 1641/1144 +f 391/962 1506/963 1643/1147 +f 1644/1143 1643/1147 1506/963 +f 384/928 1645/1148 1488/939 +f 1647/1149 1488/939 1645/1148 +f 424/1146 1646/1150 1642/1145 +f 1647/1149 1642/1145 1646/1150 +f 425/1151 1649/1152 1648/1153 +f 1650/1154 1648/1153 1649/1152 +f 384/928 1481/930 1645/1148 +f 1650/1154 1645/1148 1481/930 +f 1643/1147 1652/1155 391/962 +f 1511/967 391/962 1652/1155 +f 1651/1156 1652/1155 425/1151 +f 1649/1152 425/1151 1652/1155 +f 1653/1157 427/1158 1656/1159 +f 1654/1160 1656/1159 427/1158 +f 1537/999 1656/1159 401/1001 +f 1655/1161 401/1001 1656/1159 +f 385/937 1657/1162 1492/944 +f 1659/1163 1492/944 1657/1162 +f 427/1158 1658/1164 1654/1160 +f 1659/1163 1654/1160 1658/1164 +f 424/1146 1660/1165 1646/1150 +f 1661/1166 1646/1150 1660/1165 +f 385/937 1486/938 1657/1162 +f 1661/1166 1657/1162 1486/938 +f 401/1001 1655/1161 1541/1004 +f 1662/1167 1541/1004 1655/1161 +f 1641/1144 1662/1167 424/1146 +f 1660/1165 424/1146 1662/1167 +f 1666/1168 1663/1169 1664/1170 +f 429/1171 1664/1170 1663/1169 +f 404/1015 1550/1016 1665/1172 +f 1666/1168 1665/1172 1550/1016 +f 386/940 1667/1173 1495/947 +f 1669/1174 1495/947 1667/1173 +f 429/1171 1668/1175 1664/1170 +f 1669/1174 1664/1170 1668/1175 +f 1670/1176 1671/1177 427/1158 +f 1658/1164 427/1158 1671/1177 +f 1667/1173 386/940 1671/1177 +f 1490/942 1671/1177 386/940 +f 1553/1018 404/1015 1672/1178 +f 1665/1172 1672/1178 404/1015 +f 1672/1178 1670/1176 1653/1157 +f 427/1158 1653/1157 1670/1176 +f 1651/1156 425/1151 1675/1179 +f 1673/1180 1675/1179 425/1151 +f 1513/968 1675/1179 394/969 +f 1674/1181 394/969 1675/1179 +f 387/932 1676/1182 1484/933 +f 1677/1183 1484/933 1676/1182 +f 425/1151 1648/1153 1673/1180 +f 1677/1183 1673/1180 1648/1153 +f 429/1171 1678/1184 1668/1175 +f 1679/1185 1668/1175 1678/1184 +f 387/932 1494/946 1676/1182 +f 1679/1185 1676/1182 1494/946 +f 394/969 1674/1181 1520/979 +f 1680/1186 1520/979 1674/1181 +f 1680/1186 1678/1184 1663/1169 +f 429/1171 1663/1169 1678/1184 +f 1681/1187 1684/1188 196/1189 +f 763/1190 196/1189 1684/1188 +f 1683/1191 1684/1188 434/1192 +f 1682/1193 434/1192 1684/1188 +f 1686/1194 1687/1195 432/1196 +f 1685/1197 432/1196 1687/1195 +f 1687/1195 1681/1187 759/1198 +f 196/1189 759/1198 1681/1187 +f 1689/1199 1691/1200 433/1201 +f 1688/1202 433/1201 1691/1200 +f 1691/1200 1686/1194 1690/1203 +f 432/1196 1690/1203 1686/1194 +f 434/1192 1682/1193 1692/1204 +f 1694/1205 1692/1204 1682/1193 +f 1694/1205 1689/1199 1693/1206 +f 433/1201 1693/1206 1689/1199 +f 340/1207 1695/1208 1311/1209 +f 1697/1210 1311/1209 1695/1208 +f 432/1196 1685/1197 1696/1211 +f 1697/1210 1696/1211 1685/1197 +f 1699/1212 1700/1213 436/1214 +f 1698/1215 436/1214 1700/1213 +f 1306/1216 1700/1213 340/1207 +f 1695/1208 340/1207 1700/1213 +f 437/1217 1702/1218 1701/1219 +f 1704/1220 1701/1219 1702/1218 +f 436/1214 1703/1221 1699/1212 +f 1704/1220 1699/1212 1703/1221 +f 1690/1203 432/1196 1706/1222 +f 1696/1211 1706/1222 432/1196 +f 1705/1223 1706/1222 437/1217 +f 1702/1218 437/1217 1706/1222 +f 1707/1224 1710/1225 337/1226 +f 1290/1227 337/1226 1710/1225 +f 1709/1228 1710/1225 441/1229 +f 1708/1230 441/1229 1710/1225 +f 439/1231 1712/1232 1711/1233 +f 1713/1234 1711/1233 1712/1232 +f 337/1226 1299/1235 1707/1224 +f 1713/1234 1707/1224 1299/1235 +f 1715/1236 1717/1237 440/1238 +f 1714/1239 440/1238 1717/1237 +f 1716/1240 1717/1237 439/1231 +f 1712/1232 439/1231 1717/1237 +f 441/1229 1708/1230 1718/1241 +f 1720/1242 1718/1241 1708/1230 +f 440/1238 1719/1243 1715/1236 +f 1720/1242 1715/1236 1719/1243 +f 1723/1244 746/1245 1721/1246 +f 190/1247 1721/1246 746/1245 +f 1722/1248 439/1231 1723/1244 +f 1711/1233 1723/1244 439/1231 +f 1725/1249 1683/1191 1724/1250 +f 434/1192 1724/1250 1683/1191 +f 1721/1246 190/1247 1725/1249 +f 740/1251 1725/1249 190/1247 +f 1728/1252 1726/1253 1727/1254 +f 443/1255 1727/1254 1726/1253 +f 434/1192 1692/1204 1724/1250 +f 1728/1252 1724/1250 1692/1204 +f 1730/1256 1716/1240 1722/1248 +f 439/1231 1722/1248 1716/1240 +f 1727/1254 443/1255 1730/1256 +f 1729/1257 1730/1256 443/1255 +f 445/1258 1732/1259 1731/1260 +f 1734/1261 1731/1260 1732/1259 +f 1701/1219 1734/1261 437/1217 +f 1733/1262 437/1217 1734/1261 +f 446/1263 1736/1264 1735/1265 +f 1738/1266 1735/1265 1736/1264 +f 1737/1267 1738/1266 445/1258 +f 1732/1259 445/1258 1738/1266 +f 1739/1268 1741/1269 433/1201 +f 1693/1206 433/1201 1741/1269 +f 1740/1270 1741/1269 446/1263 +f 1736/1264 446/1263 1741/1269 +f 437/1217 1733/1262 1705/1223 +f 1742/1271 1705/1223 1733/1262 +f 433/1201 1688/1202 1739/1268 +f 1742/1271 1739/1268 1688/1202 +f 1746/1272 1743/1273 1744/1274 +f 448/1275 1744/1274 1743/1273 +f 446/1263 1735/1265 1745/1276 +f 1746/1272 1745/1276 1735/1265 +f 1747/1277 1749/1278 440/1238 +f 1719/1243 440/1238 1749/1278 +f 1744/1274 448/1275 1749/1278 +f 1748/1279 1749/1278 448/1275 +f 443/1255 1750/1280 1729/1257 +f 1751/1281 1729/1257 1750/1280 +f 440/1238 1714/1239 1747/1277 +f 1751/1281 1747/1277 1714/1239 +f 1745/1276 1752/1282 446/1263 +f 1740/1270 446/1263 1752/1282 +f 1726/1253 1752/1282 443/1255 +f 1750/1280 443/1255 1752/1282 +f 1754/1283 1757/1284 450/1285 +f 1753/1286 450/1285 1757/1284 +f 1756/1287 1757/1284 452/1288 +f 1755/1289 452/1288 1757/1284 +f 451/1290 1759/1291 1758/1292 +f 1761/1293 1758/1292 1759/1291 +f 450/1285 1760/1294 1754/1283 +f 1761/1293 1754/1283 1760/1294 +f 452/1288 1755/1289 1762/1295 +f 1764/1296 1762/1295 1755/1289 +f 1763/1297 1764/1296 451/1290 +f 1759/1291 451/1290 1764/1296 +f 452/1288 1765/1298 1756/1287 +f 1768/1299 1756/1287 1765/1298 +f 1766/1300 455/1301 1768/1299 +f 1767/1302 1768/1299 455/1301 +f 1770/1303 1771/1304 454/1305 +f 1769/1306 454/1305 1771/1304 +f 1762/1295 1771/1304 452/1288 +f 1765/1298 452/1288 1771/1304 +f 208/82 1772/1307 806/91 +f 1774/1308 806/91 1772/1307 +f 454/1305 1773/1309 1770/1303 +f 1774/1308 1770/1303 1773/1309 +f 1775/1310 1776/1311 229/173 +f 881/180 229/173 1776/1311 +f 800/84 1776/1311 208/82 +f 1772/1307 208/82 1776/1311 +f 1778/1312 1777/1313 1766/1300 +f 455/1301 1766/1300 1777/1313 +f 229/173 875/174 1775/1310 +f 1778/1312 1775/1310 875/174 +f 455/1301 1779/1314 1767/1302 +f 1781/1315 1767/1302 1779/1314 +f 450/1285 1753/1286 1780/1316 +f 1781/1315 1780/1316 1753/1286 +f 1782/1317 1783/1318 258/303 +f 989/308 258/303 1783/1318 +f 1777/1313 1783/1318 455/1301 +f 1779/1314 455/1301 1783/1318 +f 1784/1319 1785/1320 249/251 +f 942/252 249/251 1785/1320 +f 258/303 986/305 1782/1317 +f 1785/1320 1782/1317 986/305 +f 1786/1321 457/1322 1788/1323 +f 1787/1324 1788/1323 457/1322 +f 1784/1319 249/251 1788/1323 +f 952/264 1788/1323 249/251 +f 1780/1316 1790/1325 450/1285 +f 1760/1294 450/1285 1790/1325 +f 1789/1326 1790/1325 457/1322 +f 1787/1324 457/1322 1790/1325 +f 1792/1327 1795/1328 459/1329 +f 1791/1330 459/1329 1795/1328 +f 1793/1331 460/1332 1795/1328 +f 1794/1333 1795/1328 460/1332 +f 457/1322 1796/1334 1789/1326 +f 1798/1335 1789/1326 1796/1334 +f 459/1329 1797/1336 1792/1327 +f 1798/1335 1792/1327 1797/1336 +f 1284/678 333/673 1800/1337 +f 1799/1338 1800/1337 333/673 +f 1786/1321 1800/1337 457/1322 +f 1796/1334 457/1322 1800/1337 +f 1802/1339 1801/1340 1793/1331 +f 460/1332 1793/1331 1801/1340 +f 333/673 1279/674 1799/1338 +f 1802/1339 1799/1338 1279/674 +f 360/803 1803/1341 1380/804 +f 1806/1342 1380/804 1803/1341 +f 463/1343 1805/1344 1804/1345 +f 1806/1342 1804/1345 1805/1344 +f 1807/1346 1808/1347 454/1305 +f 1773/1309 454/1305 1808/1347 +f 1387/812 1808/1347 360/803 +f 1803/1341 360/803 1808/1347 +f 462/1348 1810/1349 1809/1350 +f 1811/1351 1809/1350 1810/1349 +f 454/1305 1769/1306 1807/1346 +f 1811/1351 1807/1346 1769/1306 +f 1804/1345 1814/1352 463/1343 +f 1812/1353 463/1343 1814/1352 +f 1813/1354 1814/1352 462/1348 +f 1810/1349 462/1348 1814/1352 +f 451/1290 1815/1355 1763/1297 +f 1818/1356 1763/1297 1815/1355 +f 467/1357 1817/1358 1816/1359 +f 1818/1356 1816/1359 1817/1358 +f 1821/1360 1819/1361 1820/1362 +f 465/1363 1820/1362 1819/1361 +f 1758/1292 1821/1360 451/1290 +f 1815/1355 451/1290 1821/1360 +f 1823/1364 1825/1365 466/1366 +f 1822/1367 466/1366 1825/1365 +f 1820/1362 465/1363 1825/1365 +f 1824/1368 1825/1365 465/1363 +f 1826/1369 467/1357 1828/1370 +f 1816/1359 1828/1370 467/1357 +f 1823/1364 466/1366 1828/1370 +f 1827/1371 1828/1370 466/1366 +f 1829/1372 1831/1373 459/1329 +f 1797/1336 459/1329 1831/1373 +f 1819/1361 1831/1373 465/1363 +f 1830/1374 465/1363 1831/1373 +f 469/1375 1833/1376 1832/1377 +f 1834/1378 1832/1377 1833/1376 +f 459/1329 1791/1330 1829/1372 +f 1834/1378 1829/1372 1791/1330 +f 1836/1379 1838/1380 470/1381 +f 1835/1382 470/1381 1838/1380 +f 1837/1383 1838/1380 469/1375 +f 1833/1376 469/1375 1838/1380 +f 465/1363 1830/1374 1824/1368 +f 1840/1384 1824/1368 1830/1374 +f 470/1381 1839/1385 1836/1379 +f 1840/1384 1836/1379 1839/1385 +f 1844/1386 1813/1354 1841/1387 +f 462/1348 1841/1387 1813/1354 +f 473/1388 1843/1389 1842/1390 +f 1844/1386 1842/1390 1843/1389 +f 1845/1391 1846/1392 467/1357 +f 1817/1358 467/1357 1846/1392 +f 1841/1387 462/1348 1846/1392 +f 1809/1350 1846/1392 462/1348 +f 472/1393 1848/1394 1847/1395 +f 1849/1396 1847/1395 1848/1394 +f 1849/1396 1845/1391 1826/1369 +f 467/1357 1826/1369 1845/1391 +f 1842/1390 1852/1397 473/1388 +f 1850/1398 473/1388 1852/1397 +f 1851/1399 1852/1397 472/1393 +f 1848/1394 472/1393 1852/1397 +f 1853/1400 1855/1401 470/1381 +f 1839/1385 470/1381 1855/1401 +f 1854/1402 466/1366 1855/1401 +f 1822/1367 1855/1401 466/1366 +f 1858/1403 1856/1404 1857/1405 +f 475/1406 1857/1405 1856/1404 +f 470/1381 1835/1382 1853/1400 +f 1858/1403 1853/1400 1835/1382 +f 472/1393 1859/1407 1851/1399 +f 1861/1408 1851/1399 1859/1407 +f 475/1406 1860/1409 1857/1405 +f 1861/1408 1857/1405 1860/1409 +f 1854/1402 1862/1410 466/1366 +f 1827/1371 466/1366 1862/1410 +f 1859/1407 472/1393 1862/1410 +f 1847/1395 1862/1410 472/1393 +f 477/1411 1864/1412 1863/1413 +f 1867/1414 1863/1413 1864/1412 +f 1867/1414 1865/1415 1866/1416 +f 480/1417 1866/1416 1865/1415 +f 478/1418 1869/1419 1868/1420 +f 1871/1421 1868/1420 1869/1419 +f 1870/1422 1871/1421 477/1411 +f 1864/1412 477/1411 1871/1421 +f 1872/1423 479/1424 1875/1425 +f 1873/1426 1875/1425 479/1424 +f 1874/1427 1875/1425 478/1418 +f 1869/1419 478/1418 1875/1425 +f 1865/1415 1878/1428 480/1417 +f 1876/1429 480/1417 1878/1428 +f 479/1424 1877/1430 1873/1426 +f 1878/1428 1873/1426 1877/1430 +f 1879/1431 1882/1432 480/1417 +f 1866/1416 480/1417 1882/1432 +f 1880/1433 484/1434 1882/1432 +f 1881/1435 1882/1432 484/1434 +f 482/1436 1884/1437 1883/1438 +f 1885/1439 1883/1438 1884/1437 +f 1885/1439 1879/1431 1876/1429 +f 480/1417 1876/1429 1879/1431 +f 1887/1440 1889/1441 483/1442 +f 1886/1443 483/1442 1889/1441 +f 1888/1444 1889/1441 482/1436 +f 1884/1437 482/1436 1889/1441 +f 484/1434 1880/1433 1890/1445 +f 1892/1446 1890/1445 1880/1433 +f 483/1442 1891/1447 1887/1440 +f 1892/1446 1887/1440 1891/1447 +f 1894/1448 1897/1449 486/1450 +f 1893/1451 486/1450 1897/1449 +f 1897/1449 1895/1452 1896/1453 +f 489/1454 1896/1453 1895/1452 +f 1899/1455 1901/1456 487/1457 +f 1898/1458 487/1457 1901/1456 +f 486/1450 1900/1459 1894/1448 +f 1901/1456 1894/1448 1900/1459 +f 488/1460 1903/1461 1902/1462 +f 1905/1463 1902/1462 1903/1461 +f 487/1457 1904/1464 1899/1455 +f 1905/1463 1899/1455 1904/1464 +f 1895/1452 1908/1465 489/1454 +f 1906/1466 489/1454 1908/1465 +f 1907/1467 1908/1465 488/1460 +f 1903/1461 488/1460 1908/1465 +f 1910/1468 1913/1469 491/1470 +f 1909/1471 491/1470 1913/1469 +f 1912/1472 1913/1469 493/1473 +f 1911/1474 493/1473 1913/1469 +f 492/1475 1915/1476 1914/1477 +f 1917/1478 1914/1477 1915/1476 +f 491/1470 1916/1479 1910/1468 +f 1917/1478 1910/1468 1916/1479 +f 1918/1480 1920/1481 487/1457 +f 1904/1464 487/1457 1920/1481 +f 1919/1482 1920/1481 492/1475 +f 1915/1476 492/1475 1920/1481 +f 493/1473 1911/1474 1921/1483 +f 1922/1484 1921/1483 1911/1474 +f 487/1457 1898/1458 1918/1480 +f 1922/1484 1918/1480 1898/1458 +f 495/1485 1924/1486 1923/1487 +f 1927/1488 1923/1487 1924/1486 +f 1926/1489 1927/1488 498/1490 +f 1925/1491 498/1490 1927/1488 +f 1929/1492 1931/1493 496/1494 +f 1928/1495 496/1494 1931/1493 +f 1930/1496 1931/1493 495/1485 +f 1924/1486 495/1485 1931/1493 +f 1933/1497 1935/1498 497/1499 +f 1932/1500 497/1499 1935/1498 +f 496/1494 1934/1501 1929/1492 +f 1935/1498 1929/1492 1934/1501 +f 498/1490 1925/1491 1936/1502 +f 1938/1503 1936/1502 1925/1491 +f 497/1499 1937/1504 1933/1497 +f 1938/1503 1933/1497 1937/1504 +f 500/1505 1940/1506 1939/1507 +f 1942/1508 1939/1507 1940/1506 +f 486/1450 1893/1451 1941/1509 +f 1942/1508 1941/1509 1893/1451 +f 1944/1510 1946/1511 501/1512 +f 1943/1513 501/1512 1946/1511 +f 1945/1514 1946/1511 500/1505 +f 1940/1506 500/1505 1946/1511 +f 502/1515 1948/1516 1947/1517 +f 1950/1518 1947/1517 1948/1516 +f 501/1512 1949/1519 1944/1510 +f 1950/1518 1944/1510 1949/1519 +f 1941/1509 1952/1520 486/1450 +f 1900/1459 486/1450 1952/1520 +f 1951/1521 1952/1520 502/1515 +f 1948/1516 502/1515 1952/1520 +f 1954/1522 1956/1523 504/1524 +f 1953/1525 504/1524 1956/1523 +f 1955/1526 477/1411 1956/1523 +f 1863/1413 1956/1523 477/1411 +f 505/1527 1958/1528 1957/1529 +f 1960/1530 1957/1529 1958/1528 +f 504/1524 1959/1531 1954/1522 +f 1960/1530 1954/1522 1959/1531 +f 1961/1532 1963/1533 501/1512 +f 1949/1519 501/1512 1963/1533 +f 1962/1534 1963/1533 505/1527 +f 1958/1528 505/1527 1963/1533 +f 1964/1535 1870/1422 1955/1526 +f 477/1411 1955/1526 1870/1422 +f 501/1512 1943/1513 1961/1532 +f 1964/1535 1961/1532 1943/1513 +f 1966/1536 1969/1537 507/1538 +f 1965/1539 507/1538 1969/1537 +f 509/1540 1968/1541 1967/1542 +f 1969/1537 1967/1542 1968/1541 +f 1971/1543 1973/1544 508/1545 +f 1970/1546 508/1545 1973/1544 +f 1973/1544 1966/1536 1972/1547 +f 507/1538 1972/1547 1966/1536 +f 505/1527 1974/1548 1962/1534 +f 1976/1549 1962/1534 1974/1548 +f 1976/1549 1971/1543 1975/1550 +f 508/1545 1975/1550 1971/1543 +f 1977/1551 509/1540 1978/1552 +f 1967/1542 1978/1552 509/1540 +f 1957/1529 1978/1552 505/1527 +f 1974/1548 505/1527 1978/1552 +f 493/1473 1979/1553 1912/1472 +f 1982/1554 1912/1472 1979/1553 +f 511/1555 1981/1556 1980/1557 +f 1982/1554 1980/1557 1981/1556 +f 502/1515 1983/1558 1951/1521 +f 1984/1559 1951/1521 1983/1558 +f 1921/1483 1984/1559 493/1473 +f 1979/1553 493/1473 1984/1559 +f 1975/1550 508/1545 1986/1560 +f 1985/1561 1986/1560 508/1545 +f 1947/1517 1986/1560 502/1515 +f 1983/1558 502/1515 1986/1560 +f 1980/1557 1988/1562 511/1555 +f 1987/1563 511/1555 1988/1562 +f 508/1545 1970/1546 1985/1561 +f 1988/1562 1985/1561 1970/1546 +f 498/1490 1989/1564 1926/1489 +f 1992/1565 1926/1489 1989/1564 +f 515/1566 1991/1567 1990/1568 +f 1992/1565 1990/1568 1991/1567 +f 1994/1569 1995/1570 513/1571 +f 1993/1572 513/1571 1995/1570 +f 1936/1502 1995/1570 498/1490 +f 1989/1564 498/1490 1995/1570 +f 514/1573 1997/1574 1996/1575 +f 1999/1576 1996/1575 1997/1574 +f 513/1571 1998/1577 1994/1569 +f 1999/1576 1994/1569 1998/1577 +f 1990/1568 2002/1578 515/1566 +f 2000/1579 515/1566 2002/1578 +f 2001/1580 2002/1578 514/1573 +f 1997/1574 514/1573 2002/1578 +f 2004/1581 2007/1582 517/1583 +f 2003/1584 517/1583 2007/1582 +f 2006/1585 2007/1582 519/1586 +f 2005/1587 519/1586 2007/1582 +f 518/1588 2009/1589 2008/1590 +f 2011/1591 2008/1590 2009/1589 +f 2011/1591 2004/1581 2010/1592 +f 517/1583 2010/1592 2004/1581 +f 2012/1593 2014/1594 513/1571 +f 1998/1577 513/1571 2014/1594 +f 2013/1595 2014/1594 518/1588 +f 2009/1589 518/1588 2014/1594 +f 519/1586 2005/1587 2015/1596 +f 2016/1597 2015/1596 2005/1587 +f 513/1571 1993/1572 2012/1593 +f 2016/1597 2012/1593 1993/1572 +f 2020/1598 1968/1541 2017/1599 +f 509/1540 2017/1599 1968/1541 +f 2020/1598 2018/1600 2019/1601 +f 522/1602 2019/1601 2018/1600 +f 2021/1603 521/1604 2023/1605 +f 2022/1606 2023/1605 521/1604 +f 2023/1605 2017/1599 1977/1551 +f 509/1540 1977/1551 2017/1599 +f 518/1588 2024/1607 2013/1595 +f 2026/1608 2013/1595 2024/1607 +f 521/1604 2025/1609 2022/1606 +f 2026/1608 2022/1606 2025/1609 +f 2018/1600 2028/1610 522/1602 +f 2027/1611 522/1602 2028/1610 +f 2008/1590 2028/1610 518/1588 +f 2024/1607 518/1588 2028/1610 +f 484/1434 2029/1612 1881/1435 +f 2031/1613 1881/1435 2029/1612 +f 504/1524 1953/1525 2030/1614 +f 2031/1613 2030/1614 1953/1525 +f 514/1573 2032/1615 2001/1580 +f 2033/1616 2001/1580 2032/1615 +f 1890/1445 2033/1616 484/1434 +f 2029/1612 484/1434 2033/1616 +f 2034/1617 2035/1618 521/1604 +f 2025/1609 521/1604 2035/1618 +f 1996/1575 2035/1618 514/1573 +f 2032/1615 514/1573 2035/1618 +f 1959/1531 504/1524 2036/1619 +f 2030/1614 2036/1619 504/1524 +f 521/1604 2021/1603 2034/1617 +f 2036/1619 2034/1617 2021/1603 +f 2038/1620 2041/1621 525/1622 +f 2037/1623 525/1622 2041/1621 +f 2040/1624 2041/1621 528/1625 +f 2039/1626 528/1625 2041/1621 +f 526/1627 2043/1628 2042/1629 +f 2045/1630 2042/1629 2043/1628 +f 525/1622 2044/1631 2038/1620 +f 2045/1630 2038/1620 2044/1631 +f 2047/1632 2049/1633 527/1634 +f 2046/1635 527/1634 2049/1633 +f 2048/1636 2049/1633 526/1627 +f 2043/1628 526/1627 2049/1633 +f 2052/1637 2050/1638 2039/1626 +f 528/1625 2039/1626 2050/1638 +f 527/1634 2051/1639 2047/1632 +f 2052/1637 2047/1632 2051/1639 +f 2057/1640 2053/1641 2054/1642 +f 530/1643 2054/1642 2053/1641 +f 2056/1644 2057/1640 532/1645 +f 2055/1646 532/1645 2057/1640 +f 531/1647 2059/1648 2058/1649 +f 2061/1650 2058/1649 2059/1648 +f 2061/1650 2054/1642 2060/1651 +f 530/1643 2060/1651 2054/1642 +f 2062/1652 2064/1653 526/1627 +f 2048/1636 526/1627 2064/1653 +f 2063/1654 2064/1653 531/1647 +f 2059/1648 531/1647 2064/1653 +f 532/1645 2055/1646 2065/1655 +f 2066/1656 2065/1655 2055/1646 +f 526/1627 2042/1629 2062/1652 +f 2066/1656 2062/1652 2042/1629 +f 534/1657 2068/1658 2067/1659 +f 2071/1660 2067/1659 2068/1658 +f 537/1661 2070/1662 2069/1663 +f 2071/1660 2069/1663 2070/1662 +f 2072/1664 535/1665 2075/1666 +f 2073/1667 2075/1666 535/1665 +f 2074/1668 2075/1666 534/1657 +f 2068/1658 534/1657 2075/1666 +f 536/1669 2077/1670 2076/1671 +f 2079/1672 2076/1671 2077/1670 +f 2079/1672 2073/1667 2078/1673 +f 535/1665 2078/1673 2073/1667 +f 2080/1674 537/1661 2082/1675 +f 2069/1663 2082/1675 537/1661 +f 2081/1676 2082/1675 536/1669 +f 2077/1670 536/1669 2082/1675 +f 2084/1677 2086/1678 539/1679 +f 2083/1680 539/1679 2086/1678 +f 2053/1641 2086/1678 530/1643 +f 2085/1681 530/1643 2086/1678 +f 536/1669 2087/1682 2081/1676 +f 2089/1683 2081/1676 2087/1682 +f 539/1679 2088/1684 2084/1677 +f 2089/1683 2084/1677 2088/1684 +f 2091/1685 2092/1686 540/1687 +f 2090/1688 540/1687 2092/1686 +f 2076/1671 2092/1686 536/1669 +f 2087/1682 536/1669 2092/1686 +f 530/1643 2085/1681 2060/1651 +f 2094/1689 2060/1651 2085/1681 +f 540/1687 2093/1690 2091/1685 +f 2094/1689 2091/1685 2093/1690 +f 542/1691 2096/1692 2095/1693 +f 2098/1694 2095/1693 2096/1692 +f 507/1538 1965/1539 2097/1695 +f 2098/1694 2097/1695 1965/1539 +f 2099/1696 2101/1697 532/1645 +f 2056/1644 532/1645 2101/1697 +f 2100/1698 2101/1697 542/1691 +f 2096/1692 542/1691 2101/1697 +f 543/1699 2103/1700 2102/1701 +f 2104/1702 2102/1701 2103/1700 +f 2104/1702 2099/1696 2065/1655 +f 532/1645 2065/1655 2099/1696 +f 2097/1695 2106/1703 507/1538 +f 1972/1547 507/1538 2106/1703 +f 2105/1704 2106/1703 543/1699 +f 2103/1700 543/1699 2106/1703 +f 2010/1592 517/1583 2110/1705 +f 2107/1706 2110/1705 517/1583 +f 2109/1707 2110/1705 546/1708 +f 2108/1709 546/1708 2110/1705 +f 2113/1710 2111/1711 2112/1712 +f 545/1713 2112/1712 2111/1711 +f 517/1583 2003/1584 2107/1706 +f 2113/1710 2107/1706 2003/1584 +f 537/1661 2114/1714 2070/1662 +f 2116/1715 2070/1662 2114/1714 +f 545/1713 2115/1716 2112/1712 +f 2116/1715 2112/1712 2115/1716 +f 546/1708 2108/1709 2117/1717 +f 2118/1718 2117/1717 2108/1709 +f 2080/1674 2118/1718 537/1661 +f 2114/1714 537/1661 2118/1718 +f 2119/1719 2122/1720 491/1470 +f 1916/1479 491/1470 2122/1720 +f 2121/1721 2122/1720 549/1722 +f 2120/1723 549/1722 2122/1720 +f 2125/1724 2123/1725 2124/1726 +f 548/1727 2124/1726 2123/1725 +f 491/1470 1909/1471 2119/1719 +f 2125/1724 2119/1719 1909/1471 +f 528/1625 2126/1728 2040/1624 +f 2128/1729 2040/1624 2126/1728 +f 2124/1726 548/1727 2128/1729 +f 2127/1730 2128/1729 548/1727 +f 549/1722 2120/1723 2129/1731 +f 2130/1732 2129/1731 2120/1723 +f 2050/1638 2130/1732 528/1625 +f 2126/1728 528/1625 2130/1732 +f 2131/1733 2133/1734 539/1679 +f 2088/1684 539/1679 2133/1734 +f 2117/1717 2133/1734 546/1708 +f 2132/1735 546/1708 2133/1734 +f 542/1691 2134/1736 2100/1698 +f 2135/1737 2100/1698 2134/1736 +f 539/1679 2083/1680 2131/1733 +f 2135/1737 2131/1733 2083/1680 +f 2136/1738 2137/1739 522/1602 +f 2019/1601 522/1602 2137/1739 +f 2095/1693 2137/1739 542/1691 +f 2134/1736 542/1691 2137/1739 +f 546/1708 2132/1735 2109/1707 +f 2138/1740 2109/1707 2132/1735 +f 522/1602 2027/1611 2136/1738 +f 2138/1740 2136/1738 2027/1611 +f 543/1699 2139/1741 2105/1704 +f 2141/1742 2105/1704 2139/1741 +f 511/1555 1987/1563 2140/1743 +f 2141/1742 2140/1743 1987/1563 +f 2142/1744 2143/1745 525/1622 +f 2044/1631 525/1622 2143/1745 +f 2102/1701 2143/1745 543/1699 +f 2139/1741 543/1699 2143/1745 +f 548/1727 2144/1746 2127/1730 +f 2145/1747 2127/1730 2144/1746 +f 525/1622 2037/1623 2142/1744 +f 2145/1747 2142/1744 2037/1623 +f 2140/1743 2146/1748 511/1555 +f 1981/1556 511/1555 2146/1748 +f 2123/1725 2146/1748 548/1727 +f 2144/1746 548/1727 2146/1748 +f 2150/1749 2121/1721 2147/1750 +f 549/1722 2147/1750 2121/1721 +f 2149/1751 2150/1749 555/1752 +f 2148/1753 555/1752 2150/1749 +f 2152/1754 2153/1755 553/1756 +f 2151/1757 553/1756 2153/1755 +f 2147/1750 549/1722 2153/1755 +f 2129/1731 2153/1755 549/1722 +f 554/1758 2155/1759 2154/1760 +f 2157/1761 2154/1760 2155/1759 +f 2157/1761 2152/1754 2156/1762 +f 553/1756 2156/1762 2152/1754 +f 2158/1763 555/1752 2160/1764 +f 2148/1753 2160/1764 555/1752 +f 2159/1765 2160/1764 554/1758 +f 2155/1759 554/1758 2160/1764 +f 2164/1766 2159/1767 2161/1768 +f 554/1769 2161/1768 2159/1767 +f 559/1770 2163/1771 2162/1772 +f 2164/1766 2162/1772 2163/1771 +f 2166/1773 2167/1774 557/1775 +f 2165/1776 557/1775 2167/1774 +f 2161/1768 554/1769 2167/1774 +f 2154/1777 2167/1774 554/1769 +f 558/1778 2169/1779 2168/1780 +f 2171/1781 2168/1780 2169/1779 +f 2171/1781 2166/1773 2170/1782 +f 557/1775 2170/1782 2166/1773 +f 2162/1772 2174/1783 559/1770 +f 2172/1784 559/1770 2174/1783 +f 2173/1785 2174/1783 558/1778 +f 2169/1779 558/1778 2174/1783 +f 2175/1786 2178/1787 559/1770 +f 2163/1771 559/1770 2178/1787 +f 2177/1788 2178/1787 563/1789 +f 2176/1790 563/1789 2178/1787 +f 561/1791 2180/1792 2179/1793 +f 2181/1794 2179/1793 2180/1792 +f 559/1770 2172/1784 2175/1786 +f 2181/1794 2175/1786 2172/1784 +f 2183/1795 2185/1796 562/1797 +f 2182/1798 562/1797 2185/1796 +f 2184/1799 2185/1796 561/1791 +f 2180/1792 561/1791 2185/1796 +f 563/1789 2176/1790 2186/1800 +f 2188/1801 2186/1800 2176/1790 +f 562/1797 2187/1802 2183/1795 +f 2188/1801 2183/1795 2187/1802 +f 2190/1803 2192/1804 565/1805 +f 2189/1806 565/1805 2192/1804 +f 2179/1793 2192/1804 561/1791 +f 2191/1807 561/1791 2192/1804 +f 2194/1808 2196/1809 566/1810 +f 2193/1811 566/1810 2196/1809 +f 565/1805 2195/1812 2190/1803 +f 2196/1809 2190/1803 2195/1812 +f 2198/1813 2200/1814 567/1815 +f 2197/1816 567/1815 2200/1814 +f 566/1810 2199/1817 2194/1808 +f 2200/1814 2194/1808 2199/1817 +f 561/1791 2191/1807 2184/1799 +f 2202/1818 2184/1799 2191/1807 +f 567/1815 2201/1819 2198/1813 +f 2202/1818 2198/1813 2201/1819 +f 2204/1820 2207/1821 569/1822 +f 2203/1823 569/1822 2207/1821 +f 2205/1824 572/1825 2207/1821 +f 2206/1826 2207/1821 572/1825 +f 2209/1827 2211/1828 570/1829 +f 2208/1830 570/1829 2211/1828 +f 569/1822 2210/1831 2204/1820 +f 2211/1828 2204/1820 2210/1831 +f 571/1832 2213/1833 2212/1834 +f 2215/1835 2212/1834 2213/1833 +f 570/1829 2214/1836 2209/1827 +f 2215/1835 2209/1827 2214/1836 +f 572/1825 2205/1824 2216/1837 +f 2218/1838 2216/1837 2205/1824 +f 2213/1833 571/1832 2218/1838 +f 2217/1839 2218/1838 571/1832 +f 2220/1840 2223/1841 574/1842 +f 2219/1843 574/1842 2223/1841 +f 2221/1844 577/1845 2223/1841 +f 2222/1846 2223/1841 577/1845 +f 2225/1847 2227/1848 575/1849 +f 2224/1850 575/1849 2227/1848 +f 574/1842 2226/1851 2220/1840 +f 2227/1848 2220/1840 2226/1851 +f 576/1852 2229/1853 2228/1854 +f 2231/1855 2228/1854 2229/1853 +f 575/1849 2230/1856 2225/1847 +f 2231/1855 2225/1847 2230/1856 +f 577/1845 2221/1844 2232/1857 +f 2234/1858 2232/1857 2221/1844 +f 2229/1853 576/1852 2234/1858 +f 2233/1859 2234/1858 576/1852 +f 579/1860 2236/1861 2235/1862 +f 2238/1863 2235/1862 2236/1861 +f 515/1864 2000/1865 2237/1866 +f 2238/1863 2237/1866 2000/1865 +f 574/1842 2239/1867 2226/1851 +f 2241/1868 2226/1851 2239/1867 +f 2236/1861 579/1860 2241/1868 +f 2240/1869 2241/1868 579/1860 +f 580/1870 2243/1871 2242/1872 +f 2244/1873 2242/1872 2243/1871 +f 574/1842 2219/1843 2239/1867 +f 2244/1873 2239/1867 2219/1843 +f 2237/1866 2246/1874 515/1864 +f 1991/1875 515/1864 2246/1874 +f 2243/1871 580/1870 2246/1874 +f 2245/1876 2246/1874 580/1870 +f 2248/1877 2251/1878 582/1879 +f 2247/1880 582/1879 2251/1878 +f 2250/1881 2251/1878 584/1882 +f 2249/1883 584/1882 2251/1878 +f 576/1852 2252/1884 2233/1859 +f 2254/1885 2233/1859 2252/1884 +f 582/1879 2253/1886 2248/1877 +f 2254/1885 2248/1877 2253/1886 +f 583/1887 2256/1888 2255/1889 +f 2257/1890 2255/1889 2256/1888 +f 2252/1884 576/1852 2257/1890 +f 2228/1854 2257/1890 576/1852 +f 584/1882 2249/1883 2258/1891 +f 2260/1892 2258/1891 2249/1883 +f 2260/1892 2256/1888 2259/1893 +f 583/1887 2259/1893 2256/1888 +f 2261/1894 2263/1895 483/1896 +f 1891/1897 483/1896 2263/1895 +f 2235/1862 2263/1895 579/1860 +f 2262/1898 579/1860 2263/1895 +f 583/1887 2264/1899 2259/1893 +f 2265/1900 2259/1893 2264/1899 +f 483/1896 1886/1901 2261/1894 +f 2265/1900 2261/1894 1886/1901 +f 2266/1902 2267/1903 575/1849 +f 2230/1856 575/1849 2267/1903 +f 583/1887 2255/1889 2264/1899 +f 2267/1903 2264/1899 2255/1889 +f 579/1860 2262/1898 2240/1869 +f 2268/1904 2240/1869 2262/1898 +f 575/1849 2224/1850 2266/1902 +f 2268/1904 2266/1902 2224/1850 +f 2271/1905 1930/1906 2269/1907 +f 495/1908 2269/1907 1930/1906 +f 2271/1905 2270/1909 2247/1880 +f 582/1879 2247/1880 2270/1909 +f 2272/1910 2273/1911 580/1870 +f 2245/1876 580/1870 2273/1911 +f 2269/1907 495/1908 2273/1911 +f 1923/1912 2273/1911 495/1908 +f 577/1845 2274/1913 2222/1846 +f 2275/1914 2222/1846 2274/1913 +f 580/1870 2242/1872 2272/1910 +f 2275/1914 2272/1910 2242/1872 +f 2270/1909 2276/1915 582/1879 +f 2253/1886 582/1879 2276/1915 +f 2276/1915 2274/1913 2232/1857 +f 577/1845 2232/1857 2274/1913 +f 500/1916 2277/1917 1945/1918 +f 2280/1919 1945/1918 2277/1917 +f 589/1920 2279/1921 2278/1922 +f 2280/1919 2278/1922 2279/1921 +f 2282/1923 2283/1924 588/1925 +f 2281/1926 588/1925 2283/1924 +f 1939/1927 2283/1924 500/1916 +f 2277/1917 500/1916 2283/1924 +f 572/1825 2284/1928 2206/1826 +f 2286/1929 2206/1826 2284/1928 +f 588/1925 2285/1930 2282/1923 +f 2286/1929 2282/1923 2285/1930 +f 2278/1922 2288/1931 589/1920 +f 2287/1932 589/1920 2288/1931 +f 2284/1928 572/1825 2288/1931 +f 2216/1837 2288/1931 572/1825 +f 2292/1933 2289/1934 2290/1935 +f 591/1936 2290/1935 2289/1934 +f 489/1937 1906/1938 2291/1939 +f 2292/1933 2291/1939 1906/1938 +f 2293/1940 2295/1941 569/1822 +f 2210/1831 569/1822 2295/1941 +f 2290/1935 591/1936 2295/1941 +f 2294/1942 2295/1941 591/1936 +f 588/1925 2296/1943 2285/1930 +f 2297/1944 2285/1930 2296/1943 +f 569/1822 2203/1823 2293/1940 +f 2297/1944 2293/1940 2203/1823 +f 1896/1945 489/1937 2298/1946 +f 2291/1939 2298/1946 489/1937 +f 2296/1943 588/1925 2298/1946 +f 2281/1926 2298/1946 588/1925 +f 478/1947 2299/1948 1874/1949 +f 2302/1950 1874/1949 2299/1948 +f 593/1951 2301/1952 2300/1953 +f 2302/1950 2300/1953 2301/1952 +f 2303/1954 2304/1955 589/1920 +f 2279/1921 589/1920 2304/1955 +f 1868/1956 2304/1955 478/1947 +f 2299/1948 478/1947 2304/1955 +f 571/1832 2305/1957 2217/1839 +f 2306/1958 2217/1839 2305/1957 +f 589/1920 2287/1932 2303/1954 +f 2306/1958 2303/1954 2287/1932 +f 2300/1953 2308/1959 593/1951 +f 2307/1960 593/1951 2308/1959 +f 2212/1834 2308/1959 571/1832 +f 2305/1957 571/1832 2308/1959 +f 2310/1961 2312/1962 595/1963 +f 2309/1964 595/1963 2312/1962 +f 2289/1934 2312/1962 591/1936 +f 2311/1965 591/1936 2312/1962 +f 2313/1966 2315/1967 593/1951 +f 2301/1952 593/1951 2315/1967 +f 595/1963 2314/1968 2310/1961 +f 2315/1967 2310/1961 2314/1968 +f 570/1829 2316/1969 2214/1836 +f 2317/1970 2214/1836 2316/1969 +f 593/1951 2307/1960 2313/1966 +f 2317/1970 2313/1966 2307/1960 +f 591/1936 2311/1965 2294/1942 +f 2318/1971 2294/1942 2311/1965 +f 570/1829 2208/1830 2316/1969 +f 2318/1971 2316/1969 2208/1830 +f 2319/1972 2322/1973 565/1805 +f 2195/1812 565/1805 2322/1973 +f 2321/1974 2322/1973 599/1975 +f 2320/1976 599/1975 2322/1973 +f 558/1778 2323/1977 2173/1785 +f 2324/1978 2173/1785 2323/1977 +f 565/1805 2189/1806 2319/1972 +f 2324/1978 2319/1972 2189/1806 +f 2326/1979 2327/1980 597/1981 +f 2325/1982 597/1981 2327/1980 +f 2323/1977 558/1778 2327/1980 +f 2168/1780 2327/1980 558/1778 +f 598/1983 2329/1984 2328/1985 +f 2331/1986 2328/1985 2329/1984 +f 2331/1986 2326/1979 2330/1987 +f 597/1981 2330/1987 2326/1979 +f 2320/1976 2334/1988 599/1975 +f 2332/1989 599/1975 2334/1988 +f 2333/1990 2334/1988 598/1983 +f 2329/1984 598/1983 2334/1988 +f 2335/1991 601/1992 2339/1993 +f 2336/1994 2339/1993 601/1992 +f 2338/1995 2339/1993 604/1996 +f 2337/1997 604/1996 2339/1993 +f 2341/1998 2343/1999 602/2000 +f 2340/2001 602/2000 2343/1999 +f 2336/1994 601/1992 2343/1999 +f 2342/2002 2343/1999 601/1992 +f 2345/2003 2347/2004 603/2005 +f 2344/2006 603/2005 2347/2004 +f 602/2000 2346/2007 2341/1998 +f 2347/2004 2341/1998 2346/2007 +f 604/1996 2337/1997 2348/2008 +f 2350/2009 2348/2008 2337/1997 +f 603/2005 2349/2010 2345/2003 +f 2350/2009 2345/2003 2349/2010 +f 2351/2011 2353/2012 603/2005 +f 2349/2010 603/2005 2353/2012 +f 2352/2013 598/2014 2353/2012 +f 2328/2015 2353/2012 598/2014 +f 606/2016 2355/2017 2354/2018 +f 2356/2019 2354/2018 2355/2017 +f 603/2005 2344/2006 2351/2011 +f 2356/2019 2351/2011 2344/2006 +f 2358/2020 2360/2021 607/2022 +f 2357/2023 607/2022 2360/2021 +f 2359/2024 2360/2021 606/2016 +f 2355/2017 606/2016 2360/2021 +f 2362/2025 2333/2026 2352/2013 +f 598/2014 2352/2013 2333/2026 +f 607/2022 2361/2027 2358/2020 +f 2362/2025 2358/2020 2361/2027 +f 2363/2028 2366/2029 606/2016 +f 2359/2024 606/2016 2366/2029 +f 2365/2030 2366/2029 610/2031 +f 2364/2032 610/2031 2366/2029 +f 2367/2033 2368/2034 602/2000 +f 2346/2007 602/2000 2368/2034 +f 606/2016 2354/2018 2363/2028 +f 2368/2034 2363/2028 2354/2018 +f 2370/2035 2371/2036 609/2037 +f 2369/2038 609/2037 2371/2036 +f 602/2000 2340/2001 2367/2033 +f 2371/2036 2367/2033 2340/2001 +f 610/2031 2364/2032 2372/2039 +f 2374/2040 2372/2039 2364/2032 +f 609/2037 2373/2041 2370/2035 +f 2374/2040 2370/2035 2373/2041 +f 612/2042 2376/2043 2375/2044 +f 2378/2045 2375/2044 2376/2043 +f 324/2046 1247/2047 2377/2048 +f 2378/2045 2377/2048 1247/2047 +f 2379/2049 2381/2050 527/1634 +f 2051/1639 527/1634 2381/2050 +f 2380/2051 2381/2050 612/2042 +f 2376/2043 612/2042 2381/2050 +f 613/2052 2383/2053 2382/2054 +f 2384/2055 2382/2054 2383/2053 +f 527/1634 2046/1635 2379/2049 +f 2384/2055 2379/2049 2046/1635 +f 2377/2048 2386/2056 324/2046 +f 1254/2057 324/2046 2386/2056 +f 2385/2058 2386/2056 613/2052 +f 2383/2053 613/2052 2386/2056 +f 615/2059 2388/2060 2387/2061 +f 2390/2062 2387/2061 2388/2060 +f 2390/2062 2389/2063 1261/2064 +f 328/2065 1261/2064 2389/2063 +f 2391/2066 2393/2067 540/1687 +f 2093/1690 540/1687 2393/2067 +f 2392/2068 2393/2067 615/2059 +f 2388/2060 615/2059 2393/2067 +f 2396/2069 2394/2070 2395/2071 +f 616/2072 2395/2071 2394/2070 +f 540/1687 2090/1688 2391/2066 +f 2396/2069 2391/2066 2090/1688 +f 2389/2063 2398/2073 328/2065 +f 1268/2074 328/2065 2398/2073 +f 2395/2071 616/2072 2398/2073 +f 2397/2075 2398/2073 616/2072 +f 616/2072 2399/2076 2397/2075 +f 2401/2077 2397/2075 2399/2076 +f 2401/2077 2400/2078 1275/2079 +f 332/2080 1275/2079 2400/2078 +f 2078/1673 535/1665 2403/2081 +f 2402/2082 2403/2081 535/1665 +f 2394/2070 2403/2081 616/2072 +f 2399/2076 616/2072 2403/2081 +f 618/2083 2405/2084 2404/2085 +f 2406/2086 2404/2085 2405/2084 +f 2406/2086 2402/2082 2072/1664 +f 535/1665 2072/1664 2402/2082 +f 2400/2078 2408/2087 332/2080 +f 1281/2088 332/2080 2408/2087 +f 2405/2084 618/2083 2408/2087 +f 2407/2089 2408/2087 618/2083 +f 620/2090 2410/2091 2409/2092 +f 2412/2093 2409/2092 2410/2091 +f 335/2094 1287/2095 2411/2096 +f 2412/2093 2411/2096 1287/2095 +f 2413/2097 2415/2098 595/2099 +f 2314/2100 595/2099 2415/2098 +f 2414/2101 2415/2098 620/2090 +f 2410/2091 620/2090 2415/2098 +f 2418/2102 2416/2103 2417/2104 +f 621/2105 2417/2104 2416/2103 +f 2418/2102 2413/2097 2309/2106 +f 595/2099 2309/2106 2413/2097 +f 2411/2096 2420/2107 335/2094 +f 1294/2108 335/2094 2420/2107 +f 2417/2104 621/2105 2420/2107 +f 2419/2109 2420/2107 621/2105 +f 2421/2110 623/2111 2424/2112 +f 2422/2113 2424/2112 623/2111 +f 2423/2114 339/2115 2424/2112 +f 1301/2116 2424/2112 339/2115 +f 584/2117 2425/2118 2250/2119 +f 2427/2120 2250/2119 2425/2118 +f 623/2111 2426/2121 2422/2113 +f 2427/2120 2422/2113 2426/2121 +f 2429/2122 2430/2123 624/2124 +f 2428/2125 624/2124 2430/2123 +f 2425/2118 584/2117 2430/2123 +f 2258/2126 2430/2123 584/2117 +f 2432/2127 1308/2128 2423/2114 +f 339/2115 2423/2114 1308/2128 +f 624/2124 2431/2129 2429/2122 +f 2432/2127 2429/2122 2431/2129 +f 613/2052 2433/2130 2385/2058 +f 2435/2131 2385/2058 2433/2130 +f 2435/2131 2434/2132 1315/2133 +f 343/2134 1315/2133 2434/2132 +f 2063/1654 531/1647 2437/2135 +f 2436/2136 2437/2135 531/1647 +f 2382/2054 2437/2135 613/2052 +f 2433/2130 613/2052 2437/2135 +f 2439/2137 2392/2068 2438/2138 +f 615/2059 2438/2138 2392/2068 +f 531/1647 2058/1649 2436/2136 +f 2439/2137 2436/2136 2058/1649 +f 2434/2132 2440/2139 343/2134 +f 1320/2140 343/2134 2440/2139 +f 2438/2138 615/2059 2440/2139 +f 2387/2061 2440/2139 615/2059 +f 627/2141 2442/2142 2441/2143 +f 2444/2144 2441/2143 2442/2142 +f 345/2145 1325/2146 2443/2147 +f 2444/2144 2443/2147 1325/2146 +f 2156/1762 553/1756 2447/2148 +f 2445/2149 2447/2148 553/1756 +f 2446/2150 2447/2148 627/2141 +f 2442/2142 627/2141 2447/2148 +f 612/2042 2448/2151 2380/2051 +f 2449/2152 2380/2051 2448/2151 +f 553/1756 2151/1757 2445/2149 +f 2449/2152 2445/2149 2151/1757 +f 1331/2153 345/2145 2450/2154 +f 2443/2147 2450/2154 345/2145 +f 2375/2044 2450/2154 612/2042 +f 2448/2151 612/2042 2450/2154 +f 629/2155 2452/2156 2451/2157 +f 2454/2158 2451/2157 2452/2156 +f 2454/2158 2453/2159 1337/746 +f 348/748 1337/746 2453/2159 +f 2170/2160 557/2161 2457/2162 +f 2455/2163 2457/2162 557/2161 +f 629/2155 2456/2164 2452/2156 +f 2457/2162 2452/2156 2456/2164 +f 2459/2165 2446/2166 2458/2167 +f 627/2168 2458/2167 2446/2166 +f 557/2161 2165/2169 2455/2163 +f 2459/2165 2455/2163 2165/2169 +f 2453/2159 2460/2170 348/748 +f 1343/756 348/748 2460/2170 +f 2458/2167 627/2168 2460/2170 +f 2441/2171 2460/2170 627/2168 +f 631/2172 2462/2173 2461/2174 +f 2464/2175 2461/2174 2462/2173 +f 2464/2175 2463/2176 1349/766 +f 351/768 1349/766 2463/2176 +f 2465/2177 632/2178 2468/2179 +f 2466/2180 2468/2179 632/2178 +f 2467/2181 2468/2179 631/2172 +f 2462/2173 631/2172 2468/2179 +f 633/2182 2470/2183 2469/2184 +f 2472/2185 2469/2184 2470/2183 +f 632/2178 2471/2186 2466/2180 +f 2472/2185 2466/2180 2471/2186 +f 2463/2176 2474/2187 351/768 +f 1356/776 351/768 2474/2187 +f 2473/2188 2474/2187 633/2182 +f 2470/2183 633/2182 2474/2187 +f 2478/2189 2475/2190 2476/2191 +f 635/2192 2476/2191 2475/2190 +f 1365/785 2478/2189 356/786 +f 2477/2193 356/786 2478/2189 +f 566/1810 2479/2194 2199/1817 +f 2481/2195 2199/1817 2479/2194 +f 2476/2191 635/2192 2481/2195 +f 2480/2196 2481/2195 635/2192 +f 631/2172 2482/2197 2467/2181 +f 2483/2198 2467/2181 2482/2197 +f 2193/1811 2483/2198 566/1810 +f 2479/2194 566/1810 2483/2198 +f 356/786 2477/2193 1371/794 +f 2484/2199 1371/794 2477/2193 +f 2482/2197 631/2172 2484/2199 +f 2461/2174 2484/2199 631/2172 +f 637/2200 2486/2201 2485/2202 +f 2488/2203 2485/2202 2486/2201 +f 2488/2203 2487/2204 1377/2205 +f 359/2206 1377/2205 2487/2204 +f 2489/2207 2491/2208 496/1494 +f 1934/1501 496/1494 2491/2208 +f 2490/2209 2491/2208 637/2200 +f 2486/2201 637/2200 2491/2208 +f 2492/2210 2493/2211 623/2111 +f 2426/2121 623/2111 2493/2211 +f 496/1494 1928/1495 2489/2207 +f 2493/2211 2489/2207 1928/1495 +f 2487/2204 2494/2212 359/2206 +f 1383/2213 359/2206 2494/2212 +f 2494/2212 2492/2210 2421/2110 +f 623/2111 2421/2110 2492/2210 +f 2495/2214 2497/2215 621/2105 +f 2419/2109 621/2105 2497/2215 +f 2496/2216 362/2217 2497/2215 +f 1389/2218 2497/2215 362/2217 +f 488/1460 2498/2219 1907/1467 +f 2499/2220 1907/1467 2498/2219 +f 2499/2220 2495/2214 2416/2103 +f 621/2105 2416/2103 2495/2214 +f 2501/2221 2502/2222 639/2223 +f 2500/2224 639/2223 2502/2222 +f 1902/1462 2502/2222 488/1460 +f 2498/2219 488/1460 2502/2222 +f 2504/2225 1395/2226 2496/2216 +f 362/2217 2496/2216 1395/2226 +f 639/2223 2503/2227 2501/2221 +f 2504/2225 2501/2221 2503/2227 +f 2505/2228 2507/2229 639/2223 +f 2503/2227 639/2223 2507/2229 +f 2506/2230 365/2231 2507/2229 +f 1401/2232 2507/2229 365/2231 +f 492/1475 2508/2233 1919/1482 +f 2509/2234 1919/1482 2508/2233 +f 639/2223 2500/2224 2505/2228 +f 2509/2234 2505/2228 2500/2224 +f 2511/2235 2512/2236 641/2237 +f 2510/2238 641/2237 2512/2236 +f 1914/1477 2512/2236 492/1475 +f 2508/2233 492/1475 2512/2236 +f 2514/2239 1407/2240 2506/2230 +f 365/2231 2506/2230 1407/2240 +f 641/2237 2513/2241 2511/2235 +f 2514/2239 2511/2235 2513/2241 +f 2515/2242 2517/2243 641/2237 +f 2513/2241 641/2237 2517/2243 +f 2516/2244 368/2245 2517/2243 +f 1413/2246 2517/2243 368/2245 +f 2519/2247 2149/1751 2518/2248 +f 555/1752 2518/2248 2149/1751 +f 641/2237 2510/2238 2515/2242 +f 2519/2247 2515/2242 2510/2238 +f 2522/2249 2520/2250 2521/2251 +f 643/2252 2521/2251 2520/2250 +f 555/1752 2158/1763 2518/2248 +f 2522/2249 2518/2248 2158/1763 +f 1419/2253 368/2245 2524/2254 +f 2516/2244 2524/2254 368/2245 +f 2521/2251 643/2252 2524/2254 +f 2523/2255 2524/2254 643/2252 +f 643/2256 2525/2257 2523/2258 +f 2527/2259 2523/2258 2525/2257 +f 371/855 1425/857 2526/2260 +f 2527/2259 2526/2260 1425/857 +f 563/1789 2528/2261 2177/1788 +f 2529/2262 2177/1788 2528/2261 +f 2520/2263 2529/2262 643/2256 +f 2525/2257 643/2256 2529/2262 +f 2531/2264 2532/2265 645/2266 +f 2530/2267 645/2266 2532/2265 +f 2186/1800 2532/2265 563/1789 +f 2528/2261 563/1789 2532/2265 +f 1431/866 371/855 2534/2268 +f 2526/2260 2534/2268 371/855 +f 645/2266 2533/2269 2531/2264 +f 2534/2268 2531/2264 2533/2269 +f 2535/2270 2537/2271 645/2266 +f 2533/2269 645/2266 2537/2271 +f 2536/2272 374/874 2537/2271 +f 1437/875 2537/2271 374/874 +f 562/1797 2538/2273 2187/1802 +f 2539/2274 2187/1802 2538/2273 +f 645/2266 2530/2267 2535/2270 +f 2539/2274 2535/2270 2530/2267 +f 2541/2275 2542/2276 647/2277 +f 2540/2278 647/2277 2542/2276 +f 2182/1798 2542/2276 562/1797 +f 2538/2273 562/1797 2542/2276 +f 2544/2279 1443/881 2536/2272 +f 374/874 2536/2272 1443/881 +f 647/2277 2543/2280 2541/2275 +f 2544/2279 2541/2275 2543/2280 +f 2545/2281 2547/2282 647/2277 +f 2543/2280 647/2277 2547/2282 +f 2547/2282 2546/2283 1449/887 +f 377/889 1449/887 2546/2283 +f 2548/2284 2549/2285 567/1815 +f 2201/1819 567/1815 2549/2285 +f 2540/2278 2549/2285 647/2277 +f 2545/2281 647/2277 2549/2285 +f 635/2192 2550/2286 2480/2196 +f 2551/2287 2480/2196 2550/2286 +f 567/1815 2197/1816 2548/2284 +f 2551/2287 2548/2284 2197/1816 +f 2546/2283 2552/2288 377/889 +f 1454/893 377/889 2552/2288 +f 2550/2286 635/2192 2552/2288 +f 2475/2190 2552/2288 635/2192 +f 2555/2289 1461/899 2553/2290 +f 380/900 2553/2290 1461/899 +f 2555/2289 2554/2291 2451/2157 +f 629/2155 2451/2157 2554/2291 +f 2557/2292 2558/2293 650/2294 +f 2556/2295 650/2294 2558/2293 +f 380/900 1470/916 2553/2290 +f 2558/2293 2553/2290 1470/916 +f 604/2296 2559/2297 2338/2298 +f 2561/2299 2338/2298 2559/2297 +f 650/2294 2560/2300 2557/2292 +f 2561/2299 2557/2292 2560/2300 +f 2562/2301 2563/2302 597/2303 +f 2330/2304 597/2303 2563/2302 +f 2348/2305 2563/2302 604/2296 +f 2559/2297 604/2296 2563/2302 +f 2554/2291 2564/2306 629/2155 +f 2456/2164 629/2155 2564/2306 +f 2564/2306 2562/2301 2325/2307 +f 597/2303 2325/2307 2562/2301 +f 2321/1974 599/1975 2567/2308 +f 2565/2309 2567/2308 599/1975 +f 2465/2177 2567/2308 632/2178 +f 2566/2310 632/2178 2567/2308 +f 652/2311 2569/2312 2568/2313 +f 2570/2314 2568/2313 2569/2312 +f 599/1975 2332/1989 2565/2309 +f 2570/2314 2565/2309 2332/1989 +f 2471/2186 632/2178 2572/2315 +f 2566/2310 2572/2315 632/2178 +f 2571/2316 2572/2315 652/2311 +f 2569/2312 652/2311 2572/2315 +f 654/2317 2574/2318 2573/2319 +f 2577/2320 2573/2319 2574/2318 +f 657/2321 2576/2322 2575/2323 +f 2577/2320 2575/2323 2576/2322 +f 2579/2324 2581/2325 655/2326 +f 2578/2327 655/2326 2581/2325 +f 2580/2328 2581/2325 654/2317 +f 2574/2318 654/2317 2581/2325 +f 656/2329 2583/2330 2582/2331 +f 2585/2332 2582/2331 2583/2330 +f 655/2326 2584/2333 2579/2324 +f 2585/2332 2579/2324 2584/2333 +f 2575/2323 2588/2334 657/2321 +f 2586/2335 657/2321 2588/2334 +f 2587/2336 2588/2334 656/2329 +f 2583/2330 656/2329 2588/2334 +f 659/2337 2590/2338 2589/2339 +f 2593/2340 2589/2339 2590/2338 +f 2593/2340 2591/2341 2592/2342 +f 662/2343 2592/2342 2591/2341 +f 660/2344 2595/2345 2594/2346 +f 2597/2347 2594/2346 2595/2345 +f 2590/2338 659/2337 2597/2347 +f 2596/2348 2597/2347 659/2337 +f 2601/2349 2598/2350 2599/2351 +f 661/2352 2599/2351 2598/2350 +f 2595/2345 660/2344 2601/2349 +f 2600/2353 2601/2349 660/2344 +f 2591/2341 2604/2354 662/2343 +f 2602/2355 662/2343 2604/2354 +f 2599/2351 661/2352 2604/2354 +f 2603/2356 2604/2354 661/2352 +f 2606/2357 2609/2358 664/2359 +f 2605/2360 664/2359 2609/2358 +f 2608/2361 2609/2358 667/2362 +f 2607/2363 667/2362 2609/2358 +f 2613/2364 2610/2365 2611/2366 +f 665/2367 2611/2366 2610/2365 +f 664/2359 2612/2368 2606/2357 +f 2613/2364 2606/2357 2612/2368 +f 2615/2369 2617/2370 666/2371 +f 2614/2372 666/2371 2617/2370 +f 2611/2366 665/2367 2617/2370 +f 2616/2373 2617/2370 665/2367 +f 2607/2363 2620/2374 667/2362 +f 2618/2375 667/2362 2620/2374 +f 2620/2374 2615/2369 2619/2376 +f 666/2371 2619/2376 2615/2369 +f 2603/2356 661/2352 2624/2377 +f 2621/2378 2624/2377 661/2352 +f 671/2379 2623/2380 2622/2381 +f 2624/2377 2622/2381 2623/2380 +f 2626/2382 2627/2383 669/2384 +f 2625/2385 669/2384 2627/2383 +f 2621/2378 661/2352 2627/2383 +f 2598/2350 2627/2383 661/2352 +f 670/2386 2629/2387 2628/2388 +f 2631/2389 2628/2388 2629/2387 +f 2631/2389 2626/2382 2630/2390 +f 669/2384 2630/2390 2626/2382 +f 671/2379 2622/2381 2632/2391 +f 2634/2392 2632/2391 2622/2381 +f 2629/2387 670/2386 2634/2392 +f 2633/2393 2634/2392 670/2386 +f 2638/2394 2633/2393 2635/2395 +f 670/2386 2635/2395 2633/2393 +f 674/2396 2637/2397 2636/2398 +f 2638/2394 2636/2398 2637/2397 +f 2641/2399 2639/2400 2640/2401 +f 673/2402 2640/2401 2639/2400 +f 2635/2395 670/2386 2641/2399 +f 2628/2388 2641/2399 670/2386 +f 2619/2376 666/2371 2644/2403 +f 2642/2404 2644/2403 666/2371 +f 2644/2403 2640/2401 2643/2405 +f 673/2402 2643/2405 2640/2401 +f 2646/2406 2645/2407 2636/2398 +f 674/2396 2636/2398 2645/2407 +f 666/2371 2614/2372 2642/2404 +f 2646/2406 2642/2404 2614/2372 +f 676/2408 2648/2409 2647/2410 +f 2650/2411 2647/2410 2648/2409 +f 2589/2339 2650/2411 659/2337 +f 2649/2412 659/2337 2650/2411 +f 2652/2413 2654/2414 677/2415 +f 2651/2416 677/2415 2654/2414 +f 2653/2417 2654/2414 676/2408 +f 2648/2409 676/2408 2654/2414 +f 2612/2368 664/2359 2657/2418 +f 2655/2419 2657/2418 664/2359 +f 677/2415 2656/2420 2652/2413 +f 2657/2418 2652/2413 2656/2420 +f 659/2337 2649/2412 2596/2348 +f 2658/2421 2596/2348 2649/2412 +f 664/2359 2605/2360 2655/2419 +f 2658/2421 2655/2419 2605/2360 +f 2660/2422 2662/2423 679/2424 +f 2659/2425 679/2424 2662/2423 +f 2661/2426 676/2427 2662/2423 +f 2647/2428 2662/2423 676/2427 +f 2663/2429 2665/2430 607/2022 +f 2361/2027 607/2022 2665/2430 +f 2664/2431 2665/2430 679/2424 +f 2660/2422 679/2424 2665/2430 +f 610/2031 2666/2432 2365/2030 +f 2667/2433 2365/2030 2666/2432 +f 607/2022 2357/2023 2663/2429 +f 2667/2433 2663/2429 2357/2023 +f 2669/2434 2670/2435 680/2436 +f 2668/2437 680/2436 2670/2435 +f 2372/2039 2670/2435 610/2031 +f 2666/2432 610/2031 2670/2435 +f 676/2427 2661/2426 2653/2438 +f 2672/2439 2653/2438 2661/2426 +f 680/2436 2671/2440 2669/2434 +f 2672/2439 2669/2434 2671/2440 +f 2656/2441 677/2442 2676/2443 +f 2673/2444 2676/2443 677/2442 +f 2675/2445 2676/2443 682/2446 +f 2674/2447 682/2446 2676/2443 +f 680/2436 2677/2448 2671/2440 +f 2678/2449 2671/2440 2677/2448 +f 677/2442 2651/2450 2673/2444 +f 2678/2449 2673/2444 2651/2450 +f 609/2037 2679/2451 2373/2041 +f 2680/2452 2373/2041 2679/2451 +f 2680/2452 2677/2448 2668/2437 +f 680/2436 2668/2437 2677/2448 +f 2682/2453 2342/2002 2681/2454 +f 601/1992 2681/2454 2342/2002 +f 609/2037 2369/2038 2679/2451 +f 2682/2453 2679/2451 2369/2038 +f 2684/2455 2683/2456 2674/2447 +f 682/2446 2674/2447 2683/2456 +f 2684/2455 2681/2454 2335/1991 +f 601/1992 2335/1991 2681/2454 +f 665/2457 2685/2458 2616/2459 +f 2688/2460 2616/2459 2685/2458 +f 684/2461 2687/2462 2686/2463 +f 2688/2460 2686/2463 2687/2462 +f 2689/2464 2690/2465 682/2466 +f 2675/2467 682/2466 2690/2465 +f 2610/2468 2690/2465 665/2457 +f 2685/2458 665/2457 2690/2465 +f 650/2294 2691/2469 2560/2300 +f 2692/2470 2560/2300 2691/2469 +f 2692/2470 2689/2464 2683/2471 +f 682/2466 2683/2471 2689/2464 +f 2693/2472 2694/2473 415/1075 +f 1602/1082 415/1075 2694/2473 +f 2556/2295 2694/2473 650/2294 +f 2691/2469 650/2294 2694/2473 +f 2686/2463 2696/2474 684/2461 +f 2695/2475 684/2461 2696/2474 +f 415/1075 1597/1077 2693/2472 +f 2696/2474 2693/2472 1597/1077 +f 2697/2476 2700/2477 419/1095 +f 1610/1096 419/1095 2700/2477 +f 2699/2478 2700/2477 687/2479 +f 2698/2480 687/2479 2700/2477 +f 633/2182 2701/2481 2473/2188 +f 2702/2482 2473/2188 2701/2481 +f 419/1095 1621/1110 2697/2476 +f 2702/2482 2697/2476 1621/1110 +f 2704/2483 2705/2484 686/2485 +f 2703/2486 686/2485 2705/2484 +f 2469/2184 2705/2484 633/2182 +f 2701/2481 633/2182 2705/2484 +f 2706/2487 2708/2488 671/2489 +f 2623/2490 671/2489 2708/2488 +f 686/2485 2707/2491 2704/2483 +f 2708/2488 2704/2483 2707/2491 +f 2710/2492 2709/2493 2698/2480 +f 687/2479 2698/2480 2709/2493 +f 2706/2487 671/2489 2710/2492 +f 2632/2494 2710/2492 671/2489 +f 1625/1114 421/1115 2713/2495 +f 2711/2496 2713/2495 421/1115 +f 684/2461 2695/2475 2712/2497 +f 2713/2495 2712/2497 2695/2475 +f 687/2498 2714/2499 2699/2500 +f 2715/2501 2699/2500 2714/2499 +f 2715/2501 2711/2496 1631/1127 +f 421/1115 1631/1127 2711/2496 +f 2716/2502 2717/2503 674/2504 +f 2637/2505 674/2504 2717/2503 +f 2714/2499 687/2498 2717/2503 +f 2709/2506 2717/2503 687/2498 +f 2712/2497 2718/2507 684/2461 +f 2687/2462 684/2461 2718/2507 +f 2645/2508 2718/2507 674/2504 +f 2716/2502 674/2504 2718/2507 +f 652/2311 2719/2509 2571/2316 +f 2721/2510 2571/2316 2719/2509 +f 686/2485 2703/2486 2720/2511 +f 2721/2510 2720/2511 2703/2486 +f 2664/2512 679/2513 2723/2514 +f 2722/2515 2723/2514 679/2513 +f 2568/2313 2723/2514 652/2311 +f 2719/2509 652/2311 2723/2514 +f 2724/2516 2725/2517 662/2518 +f 2592/2519 662/2518 2725/2517 +f 2659/2520 2725/2517 679/2513 +f 2722/2515 679/2513 2725/2517 +f 2720/2511 2726/2521 686/2485 +f 2707/2491 686/2485 2726/2521 +f 662/2518 2602/2522 2724/2516 +f 2726/2521 2724/2516 2602/2522 +f 660/2344 2727/2523 2600/2353 +f 2730/2524 2600/2353 2727/2523 +f 2730/2524 2728/2525 2729/2526 +f 692/2527 2729/2526 2728/2525 +f 2731/2528 691/2529 2733/2530 +f 2732/2531 2733/2530 691/2529 +f 2594/2346 2733/2530 660/2344 +f 2727/2523 660/2344 2733/2530 +f 657/2321 2734/2532 2576/2322 +f 2736/2533 2576/2322 2734/2532 +f 691/2529 2735/2534 2732/2531 +f 2736/2533 2732/2531 2735/2534 +f 692/2527 2728/2525 2737/2535 +f 2738/2536 2737/2535 2728/2525 +f 657/2321 2586/2335 2734/2532 +f 2738/2536 2734/2532 2586/2335 +f 2739/2537 2742/2538 669/2384 +f 2630/2390 669/2384 2742/2538 +f 2741/2539 2742/2538 694/2540 +f 2740/2541 694/2540 2742/2538 +f 2729/2526 692/2527 2744/2542 +f 2743/2543 2744/2542 692/2527 +f 669/2384 2625/2385 2739/2537 +f 2744/2542 2739/2537 2625/2385 +f 656/2329 2745/2544 2587/2336 +f 2746/2545 2587/2336 2745/2544 +f 692/2527 2737/2535 2743/2543 +f 2746/2545 2743/2543 2737/2535 +f 694/2540 2740/2541 2747/2546 +f 2748/2547 2747/2546 2740/2541 +f 656/2329 2582/2331 2745/2544 +f 2748/2547 2745/2544 2582/2331 +f 673/2402 2749/2548 2643/2405 +f 2752/2549 2643/2405 2749/2548 +f 2752/2549 2750/2550 2751/2551 +f 696/2552 2751/2551 2750/2550 +f 2754/2553 2741/2539 2753/2554 +f 694/2540 2753/2554 2741/2539 +f 2639/2400 2754/2553 673/2402 +f 2749/2548 673/2402 2754/2553 +f 2755/2555 2756/2556 655/2326 +f 2584/2333 655/2326 2756/2556 +f 2753/2554 694/2540 2756/2556 +f 2747/2546 2756/2556 694/2540 +f 696/2552 2750/2550 2757/2557 +f 2758/2558 2757/2557 2750/2550 +f 655/2326 2578/2327 2755/2555 +f 2758/2558 2755/2555 2578/2327 +f 2759/2559 2761/2560 667/2362 +f 2608/2361 667/2362 2761/2560 +f 2731/2528 2761/2560 691/2529 +f 2760/2561 691/2529 2761/2560 +f 2763/2562 2751/2551 2762/2563 +f 696/2552 2762/2563 2751/2551 +f 667/2362 2618/2375 2759/2559 +f 2763/2562 2759/2559 2618/2375 +f 654/2317 2764/2564 2580/2328 +f 2765/2565 2580/2328 2764/2564 +f 696/2552 2757/2557 2762/2563 +f 2765/2565 2762/2563 2757/2557 +f 691/2529 2760/2561 2735/2534 +f 2766/2566 2735/2534 2760/2561 +f 654/2317 2573/2319 2764/2564 +f 2766/2566 2764/2564 2573/2319 +f 2767/2567 699/2568 2770/2569 +f 2768/2570 2770/2569 699/2568 +f 2769/2571 482/2572 2770/2569 +f 1883/2573 2770/2569 482/2572 +f 2774/2574 2771/2575 2772/2576 +f 700/2577 2772/2576 2771/2575 +f 699/2568 2773/2578 2768/2570 +f 2774/2574 2768/2570 2773/2578 +f 2778/2579 2775/2580 2776/2581 +f 701/2582 2776/2581 2775/2580 +f 2772/2576 700/2577 2778/2579 +f 2777/2583 2778/2579 700/2577 +f 2780/2584 1888/2585 2769/2571 +f 482/2572 2769/2571 1888/2585 +f 2776/2581 701/2582 2780/2584 +f 2779/2586 2780/2584 701/2582 +f 701/2582 2781/2587 2779/2586 +f 2783/2588 2779/2586 2781/2587 +f 624/2589 2428/2590 2782/2591 +f 2783/2588 2782/2591 2428/2590 +f 2785/2592 2786/2593 703/2594 +f 2784/2595 703/2594 2786/2593 +f 2775/2580 2786/2593 701/2582 +f 2781/2587 701/2582 2786/2593 +f 436/1214 2787/2596 1703/1221 +f 2789/2597 1703/1221 2787/2596 +f 703/2594 2788/2598 2785/2592 +f 2789/2597 2785/2592 2788/2598 +f 2782/2591 2790/2599 624/2589 +f 2431/2600 624/2589 2790/2599 +f 1698/1215 2790/2599 436/1214 +f 2787/2596 436/1214 2790/2599 +f 2791/2601 2793/2602 441/1229 +f 1709/1228 441/1229 2793/2602 +f 2409/2603 2793/2602 620/2604 +f 2792/2605 620/2604 2793/2602 +f 705/2606 2795/2607 2794/2608 +f 2796/2609 2794/2608 2795/2607 +f 441/1229 1718/1241 2791/2601 +f 2796/2609 2791/2601 1718/1241 +f 2797/2610 706/2611 2800/2612 +f 2798/2613 2800/2612 706/2611 +f 2799/2614 2800/2612 705/2606 +f 2795/2607 705/2606 2800/2612 +f 620/2604 2792/2605 2414/2615 +f 2802/2616 2414/2615 2792/2605 +f 706/2611 2801/2617 2798/2613 +f 2802/2616 2798/2613 2801/2617 +f 2803/2618 2805/2619 706/2611 +f 2801/2617 706/2611 2805/2619 +f 2805/2619 2804/2620 1872/2621 +f 479/2622 1872/2621 2804/2620 +f 2807/2623 2808/2624 708/2625 +f 2806/2626 708/2625 2808/2624 +f 2808/2624 2803/2618 2797/2610 +f 706/2611 2797/2610 2803/2618 +f 699/2568 2809/2627 2773/2578 +f 2811/2628 2773/2578 2809/2627 +f 2811/2628 2807/2623 2810/2629 +f 708/2625 2810/2629 2807/2623 +f 2804/2620 2812/2630 479/2622 +f 1877/2631 479/2622 2812/2630 +f 2812/2630 2809/2627 2767/2567 +f 699/2568 2767/2567 2809/2627 +f 2813/2632 2815/2633 703/2594 +f 2788/2598 703/2594 2815/2633 +f 445/1258 1731/1260 2814/2634 +f 2815/2633 2814/2634 1731/1260 +f 700/2577 2816/2635 2777/2583 +f 2817/2636 2777/2583 2816/2635 +f 703/2594 2784/2595 2813/2632 +f 2817/2636 2813/2632 2784/2595 +f 2819/2637 2820/2638 710/2639 +f 2818/2640 710/2639 2820/2638 +f 2771/2575 2820/2638 700/2577 +f 2816/2635 700/2577 2820/2638 +f 2822/2641 1737/1267 2814/2634 +f 445/1258 2814/2634 1737/1267 +f 710/2639 2821/2642 2819/2637 +f 2822/2641 2819/2637 2821/2642 +f 710/2639 2823/2643 2821/2642 +f 2825/2644 2821/2642 2823/2643 +f 1743/1273 2825/2644 448/1275 +f 2824/2645 448/1275 2825/2644 +f 2826/2646 2827/2647 708/2625 +f 2810/2629 708/2625 2827/2647 +f 2818/2640 2827/2647 710/2639 +f 2823/2643 710/2639 2827/2647 +f 705/2606 2828/2648 2799/2614 +f 2829/2649 2799/2614 2828/2648 +f 708/2625 2806/2626 2826/2646 +f 2829/2649 2826/2646 2806/2626 +f 2824/2645 2830/2650 448/1275 +f 1748/1279 448/1275 2830/2650 +f 2794/2608 2830/2650 705/2606 +f 2828/2648 705/2606 2830/2650 +f 2832/2651 2835/2652 713/2653 +f 2831/2654 713/2653 2835/2652 +f 2834/2655 2835/2652 715/2656 +f 2833/2657 715/2656 2835/2652 +f 2836/2658 714/2659 2839/2660 +f 2837/2661 2839/2660 714/2659 +f 713/2653 2838/2662 2832/2651 +f 2839/2660 2832/2651 2838/2662 +f 715/2656 2833/2657 2840/2663 +f 2842/2664 2840/2663 2833/2657 +f 714/2659 2841/2665 2837/2661 +f 2842/2664 2837/2661 2841/2665 +f 2844/2666 2846/2667 717/2668 +f 2843/2669 717/2668 2846/2667 +f 713/2653 2831/2654 2845/2670 +f 2846/2667 2845/2670 2831/2654 +f 519/1586 2847/2671 2006/1585 +f 2849/2672 2006/1585 2847/2671 +f 2849/2672 2844/2666 2848/2673 +f 717/2668 2848/2673 2844/2666 +f 2850/2674 2851/2675 497/1499 +f 1937/1504 497/1499 2851/2675 +f 2015/1596 2851/2675 519/1586 +f 2847/2671 519/1586 2851/2675 +f 718/2676 2853/2677 2852/2678 +f 2854/2679 2852/2678 2853/2677 +f 497/1499 1932/1500 2850/2674 +f 2854/2679 2850/2674 1932/1500 +f 2845/2670 2856/2680 713/2653 +f 2838/2662 713/2653 2856/2680 +f 2855/2681 2856/2680 718/2676 +f 2853/2677 718/2676 2856/2680 +f 715/2656 2857/2682 2834/2655 +f 2859/2683 2834/2655 2857/2682 +f 717/2668 2843/2669 2858/2684 +f 2859/2683 2858/2684 2843/2669 +f 2861/2685 2862/2686 720/2687 +f 2860/2688 720/2687 2862/2686 +f 2840/2663 2862/2686 715/2656 +f 2857/2682 715/2656 2862/2686 +f 2863/2689 2865/2690 534/1657 +f 2074/1668 534/1657 2865/2690 +f 2864/2691 2865/2690 720/2687 +f 2861/2685 720/2687 2865/2690 +f 545/1713 2866/2692 2115/1716 +f 2867/2693 2115/1716 2866/2692 +f 2863/2689 534/1657 2867/2693 +f 2067/1659 2867/2693 534/1657 +f 2858/2684 2868/2694 717/2668 +f 2848/2673 717/2668 2868/2694 +f 2111/1711 2868/2694 545/1713 +f 2866/2692 545/1713 2868/2694 +f 2869/2695 2872/2696 460/2697 +f 1794/2698 460/2697 2872/2696 +f 2871/2699 2872/2696 722/2700 +f 2870/2701 722/2700 2872/2696 +f 618/2083 2873/2702 2407/2089 +f 2874/2703 2407/2089 2873/2702 +f 2874/2703 2869/2695 1801/2704 +f 460/2697 1801/2704 2869/2695 +f 2864/2691 720/2687 2876/2705 +f 2875/2706 2876/2705 720/2687 +f 2404/2085 2876/2705 618/2083 +f 2873/2702 618/2083 2876/2705 +f 722/2700 2870/2701 2877/2707 +f 2878/2708 2877/2707 2870/2701 +f 720/2687 2860/2688 2875/2706 +f 2878/2708 2875/2706 2860/2688 +f 463/2709 2879/2710 1805/2711 +f 2881/2712 1805/2711 2879/2710 +f 637/2200 2485/2202 2880/2713 +f 2881/2712 2880/2713 2485/2202 +f 2883/2714 2884/2715 724/2716 +f 2882/2717 724/2716 2884/2715 +f 1812/2718 2884/2715 463/2709 +f 2879/2710 463/2709 2884/2715 +f 718/2676 2885/2719 2855/2681 +f 2887/2720 2855/2681 2885/2719 +f 724/2716 2886/2721 2883/2714 +f 2887/2720 2883/2714 2886/2721 +f 2880/2713 2888/2722 637/2200 +f 2490/2209 637/2200 2888/2722 +f 2852/2678 2888/2722 718/2676 +f 2885/2719 718/2676 2888/2722 +f 726/2723 2890/2724 2889/2725 +f 2892/2726 2889/2725 2890/2724 +f 714/2659 2836/2658 2891/2727 +f 2892/2726 2891/2727 2836/2658 +f 2894/2728 2896/2729 727/2730 +f 2893/2731 727/2730 2896/2729 +f 2895/2732 2896/2729 726/2723 +f 2890/2724 726/2723 2896/2729 +f 2898/2733 2900/2734 728/2735 +f 2897/2736 728/2735 2900/2734 +f 2894/2728 727/2730 2900/2734 +f 2899/2737 2900/2734 727/2730 +f 2841/2665 714/2659 2902/2738 +f 2891/2727 2902/2738 714/2659 +f 2902/2738 2898/2733 2901/2739 +f 728/2735 2901/2739 2898/2733 +f 2901/2739 728/2735 2905/2740 +f 2903/2741 2905/2740 728/2735 +f 2877/2707 2905/2740 722/2700 +f 2904/2742 722/2700 2905/2740 +f 730/2743 2907/2744 2906/2745 +f 2908/2746 2906/2745 2907/2744 +f 728/2735 2897/2736 2903/2741 +f 2908/2746 2903/2741 2897/2736 +f 2909/2747 2911/2748 469/2749 +f 1837/2750 469/2749 2911/2748 +f 2910/2751 2911/2748 730/2743 +f 2907/2744 730/2743 2911/2748 +f 722/2700 2904/2742 2871/2699 +f 2912/2752 2871/2699 2904/2742 +f 469/2749 1832/2753 2909/2747 +f 2912/2752 2909/2747 1832/2753 +f 473/2754 2913/2755 1843/2756 +f 2915/2757 1843/2756 2913/2755 +f 2915/2757 2914/2758 2882/2717 +f 724/2716 2882/2717 2914/2758 +f 2917/2759 2918/2760 732/2761 +f 2916/2762 732/2761 2918/2760 +f 1850/2763 2918/2760 473/2754 +f 2913/2755 473/2754 2918/2760 +f 2921/2764 2895/2732 2919/2765 +f 726/2723 2919/2765 2895/2732 +f 732/2761 2920/2766 2917/2759 +f 2921/2764 2917/2759 2920/2766 +f 2914/2758 2922/2767 724/2716 +f 2886/2721 724/2716 2922/2767 +f 2919/2765 726/2723 2922/2767 +f 2889/2725 2922/2767 726/2723 +f 2923/2768 2925/2769 727/2730 +f 2899/2737 727/2730 2925/2769 +f 2906/2745 2925/2769 730/2743 +f 2924/2770 730/2743 2925/2769 +f 2926/2771 2927/2772 732/2761 +f 2920/2766 732/2761 2927/2772 +f 2923/2768 727/2730 2927/2772 +f 2893/2731 2927/2772 727/2730 +f 475/2773 2928/2774 1860/2775 +f 2929/2776 1860/2775 2928/2774 +f 732/2761 2916/2762 2926/2771 +f 2929/2776 2926/2771 2916/2762 +f 730/2743 2924/2770 2910/2751 +f 2930/2777 2910/2751 2924/2770 +f 2930/2777 2928/2774 1856/2778 +f 475/2773 1856/2778 2928/2774 +f 738/6 6/2779 739/1 +f 735/2 739/1 6/2779 +f 193/2780 737/7 736/3 +f 739/1 736/3 737/7 +f 743/11 742/12 740/10 +f 14/2781 740/10 742/12 +f 741/9 193/2780 743/11 +f 736/3 743/11 193/2780 +f 747/14 746/17 744/16 +f 10/2782 744/16 746/17 +f 193/2780 741/9 745/13 +f 747/14 745/13 741/9 +f 16/2783 748/18 749/20 +f 750/19 749/20 748/18 +f 745/13 750/19 193/2780 +f 737/7 193/2780 750/19 +f 754/22 735/2 751/24 +f 6/2779 751/24 735/2 +f 197/2784 753/25 752/21 +f 754/22 752/21 753/25 +f 18/2785 755/28 757/30 +f 758/29 757/30 755/28 +f 752/21 758/29 197/2784 +f 756/27 197/2784 758/29 +f 762/33 761/35 759/31 +f 13/2786 759/31 761/35 +f 197/2784 756/27 760/34 +f 762/33 760/34 756/27 +f 763/37 14/2781 764/36 +f 742/12 764/36 14/2781 +f 760/34 764/36 197/2784 +f 753/25 197/2784 764/36 +f 1/2787 765/39 768/42 +f 769/38 768/42 765/39 +f 767/44 769/38 202/2788 +f 766/40 202/2788 769/38 +f 12/2789 770/48 772/49 +f 773/46 772/49 770/48 +f 202/2788 766/40 771/45 +f 773/46 771/45 766/40 +f 774/52 777/53 11/2790 +f 776/54 11/2790 777/53 +f 771/45 777/53 202/2788 +f 775/51 202/2788 777/53 +f 24/2791 778/55 779/57 +f 780/56 779/57 778/55 +f 202/2788 775/51 767/44 +f 780/56 767/44 775/51 +f 7/2792 781/61 784/62 +f 785/59 784/62 781/61 +f 206/2793 783/64 782/58 +f 785/59 782/58 783/64 +f 779/57 788/66 24/2791 +f 787/67 24/2791 788/66 +f 782/58 788/66 206/2793 +f 786/65 206/2793 788/66 +f 11/2790 789/71 774/52 +f 791/69 774/52 789/71 +f 206/2793 786/65 790/68 +f 791/69 790/68 786/65 +f 792/72 794/73 23/2794 +f 793/74 23/2794 794/73 +f 790/68 794/73 206/2793 +f 783/64 206/2793 794/73 +f 2/2795 795/78 798/80 +f 799/76 798/80 795/78 +f 211/2796 797/81 796/75 +f 799/76 796/75 797/81 +f 800/84 803/85 27/2797 +f 802/86 27/2797 803/85 +f 796/75 803/85 211/2796 +f 801/83 211/2796 803/85 +f 804/89 807/90 19/2798 +f 806/91 19/2798 807/90 +f 211/2796 801/83 805/88 +f 807/90 805/88 801/83 +f 20/2799 808/93 809/94 +f 810/92 809/94 808/93 +f 810/92 797/81 805/88 +f 211/2796 805/88 797/81 +f 768/42 814/96 1/2787 +f 813/98 1/2787 814/96 +f 812/99 814/96 215/2800 +f 811/95 215/2800 814/96 +f 24/2791 815/103 778/55 +f 817/101 778/55 815/103 +f 215/2800 811/95 816/100 +f 817/101 816/100 811/95 +f 818/106 821/107 15/2801 +f 820/108 15/2801 821/107 +f 816/100 821/107 215/2800 +f 819/105 215/2800 821/107 +f 16/2783 822/110 823/111 +f 824/109 823/111 822/110 +f 215/2800 819/105 812/99 +f 824/109 812/99 819/105 +f 828/113 827/114 738/6 +f 6/2779 738/6 827/114 +f 218/2802 826/116 825/112 +f 828/113 825/112 826/116 +f 16/2783 823/111 748/18 +f 830/118 748/18 823/111 +f 825/112 830/118 218/2802 +f 829/117 218/2802 830/118 +f 15/2801 831/122 818/106 +f 833/120 818/106 831/122 +f 218/2802 829/117 832/119 +f 833/120 832/119 829/117 +f 834/123 836/124 32/2803 +f 835/125 32/2803 836/124 +f 832/119 836/124 218/2802 +f 826/116 218/2802 836/124 +f 841/129 840/132 837/128 +f 5/2804 837/128 840/132 +f 838/127 222/2805 841/129 +f 839/130 841/129 222/2805 +f 32/2803 835/125 843/135 +f 844/134 843/135 835/125 +f 844/134 842/133 838/127 +f 222/2805 838/127 842/133 +f 831/122 15/2801 847/136 +f 845/137 847/136 15/2801 +f 842/133 847/136 222/2805 +f 846/138 222/2805 847/136 +f 849/142 30/2806 850/140 +f 848/141 850/140 30/2806 +f 222/2805 846/138 839/130 +f 850/140 839/130 846/138 +f 851/145 854/146 7/2792 +f 781/61 7/2792 854/146 +f 853/147 854/146 224/2807 +f 852/144 224/2807 854/146 +f 857/149 856/150 849/142 +f 30/2806 849/142 856/150 +f 855/148 224/2807 857/149 +f 852/144 857/149 224/2807 +f 15/2801 820/108 845/137 +f 859/151 845/137 820/108 +f 859/151 858/152 855/148 +f 224/2807 855/148 858/152 +f 24/2791 787/67 815/103 +f 860/153 815/103 787/67 +f 858/152 860/153 224/2807 +f 853/147 224/2807 860/153 +f 861/156 864/157 2/2795 +f 795/78 2/2795 864/157 +f 863/158 864/157 228/2808 +f 862/155 228/2808 864/157 +f 18/2785 865/162 867/163 +f 868/160 867/163 865/162 +f 228/2808 862/155 866/159 +f 868/160 866/159 862/155 +f 869/166 872/167 17/2809 +f 871/168 17/2809 872/167 +f 866/159 872/167 228/2808 +f 870/165 228/2808 872/167 +f 27/2797 802/86 873/170 +f 874/169 873/170 802/86 +f 228/2808 870/165 863/158 +f 874/169 863/158 870/165 +f 879/172 878/177 875/174 +f 8/2810 875/174 878/177 +f 232/2811 877/175 876/171 +f 879/172 876/171 877/175 +f 873/170 882/179 27/2797 +f 881/180 27/2797 882/179 +f 876/171 882/179 232/2811 +f 880/178 232/2811 882/179 +f 17/2809 883/184 869/166 +f 885/182 869/166 883/184 +f 232/2811 880/178 884/181 +f 885/182 884/181 880/178 +f 887/187 29/2812 888/185 +f 886/186 888/185 29/2812 +f 884/181 888/185 232/2811 +f 877/175 232/2811 888/185 +f 837/128 5/2804 892/188 +f 889/189 892/188 5/2804 +f 891/192 892/188 235/2813 +f 890/190 235/2813 892/188 +f 29/2812 887/187 894/195 +f 895/194 894/195 887/187 +f 235/2813 890/190 893/193 +f 895/194 893/193 890/190 +f 896/198 898/199 17/2809 +f 883/184 17/2809 898/199 +f 893/193 898/199 235/2813 +f 897/197 235/2813 898/199 +f 899/201 32/2803 900/200 +f 843/135 900/200 32/2803 +f 235/2813 897/197 891/192 +f 900/200 891/192 897/197 +f 751/24 6/2779 903/203 +f 827/114 903/203 6/2779 +f 236/2814 902/204 901/202 +f 903/203 901/202 902/204 +f 32/2803 899/201 834/123 +f 905/206 834/123 899/201 +f 901/202 905/206 236/2814 +f 904/205 236/2814 905/206 +f 17/2809 871/168 896/198 +f 907/208 896/198 871/168 +f 236/2814 904/205 906/207 +f 907/208 906/207 904/205 +f 18/2785 757/30 865/162 +f 908/209 865/162 757/30 +f 906/207 908/209 236/2814 +f 902/204 236/2814 908/209 +f 913/211 912/214 909/213 +f 3/2815 909/213 912/214 +f 241/2816 911/216 910/210 +f 913/211 910/210 911/216 +f 22/2817 914/219 916/221 +f 917/220 916/221 914/219 +f 915/218 241/2816 917/220 +f 910/210 917/220 241/2816 +f 21/2818 918/222 920/226 +f 921/224 920/226 918/222 +f 921/224 919/225 915/218 +f 241/2816 915/218 919/225 +f 31/2819 922/227 923/229 +f 924/228 923/229 922/227 +f 919/225 924/228 241/2816 +f 911/216 241/2816 924/228 +f 925/233 929/231 9/2820 +f 928/235 9/2820 929/231 +f 245/2821 927/234 926/230 +f 929/231 926/230 927/234 +f 923/229 932/238 31/2819 +f 931/239 31/2819 932/238 +f 926/230 932/238 245/2821 +f 930/237 245/2821 932/238 +f 21/2818 933/243 918/222 +f 935/241 918/222 933/243 +f 245/2821 930/237 934/240 +f 935/241 934/240 930/237 +f 938/244 937/246 936/245 +f 33/2822 936/245 937/246 +f 934/240 938/244 245/2821 +f 927/234 245/2821 938/244 +f 939/249 943/250 4/2823 +f 942/252 4/2823 943/250 +f 941/253 943/250 250/2824 +f 940/248 250/2824 943/250 +f 28/2825 944/257 946/258 +f 947/255 946/258 944/257 +f 250/2824 940/248 945/254 +f 947/255 945/254 940/248 +f 948/260 951/259 25/2826 +f 950/263 25/2826 951/259 +f 945/254 951/259 250/2824 +f 949/261 250/2824 951/259 +f 26/2827 952/264 953/266 +f 954/265 953/266 952/264 +f 954/265 941/253 949/261 +f 250/2824 949/261 941/253 +f 9/2820 928/235 957/269 +f 958/268 957/269 928/235 +f 253/2828 956/271 955/267 +f 958/268 955/267 956/271 +f 959/274 961/275 33/2822 +f 936/245 33/2822 961/275 +f 955/267 961/275 253/2828 +f 960/273 253/2828 961/275 +f 25/2826 950/263 963/278 +f 964/277 963/278 950/263 +f 253/2828 960/273 962/276 +f 964/277 962/276 960/273 +f 965/279 966/280 28/2825 +f 944/257 28/2825 966/280 +f 962/276 966/280 253/2828 +f 956/271 253/2828 966/280 +f 840/132 970/282 5/2804 +f 969/284 5/2804 970/282 +f 968/285 970/282 256/2829 +f 967/281 256/2829 970/282 +f 30/2806 971/289 848/141 +f 973/287 848/141 971/289 +f 256/2829 967/281 972/286 +f 973/287 972/286 967/281 +f 975/292 31/2819 976/290 +f 931/239 976/290 31/2819 +f 972/286 976/290 256/2829 +f 974/291 256/2829 976/290 +f 9/2820 977/294 925/233 +f 978/293 925/233 977/294 +f 256/2829 974/291 968/285 +f 978/293 968/285 974/291 +f 29/2812 979/298 886/186 +f 982/296 886/186 979/298 +f 982/296 980/295 981/299 +f 259/2830 981/299 980/295 +f 946/258 985/300 28/2825 +f 984/302 28/2825 985/300 +f 980/295 985/300 259/2830 +f 983/301 259/2830 985/300 +f 986/305 988/306 4/2823 +f 939/249 4/2823 988/306 +f 259/2830 983/301 987/304 +f 988/306 987/304 983/301 +f 878/177 990/307 8/2810 +f 989/308 8/2810 990/307 +f 981/299 259/2830 990/307 +f 987/304 990/307 259/2830 +f 23/2794 991/309 792/72 +f 994/311 792/72 991/309 +f 994/311 992/312 993/313 +f 262/2831 993/313 992/312 +f 22/2817 916/221 996/316 +f 997/314 996/316 916/221 +f 992/312 997/314 262/2831 +f 995/315 262/2831 997/314 +f 998/320 1000/318 3/2815 +f 909/213 3/2815 1000/318 +f 262/2831 995/315 999/317 +f 1000/318 999/317 995/315 +f 784/62 1002/321 7/2792 +f 1001/322 7/2792 1002/321 +f 993/313 262/2831 1002/321 +f 999/317 1002/321 262/2831 +f 28/2825 984/302 965/279 +f 1005/324 965/279 984/302 +f 263/2832 1004/325 1003/323 +f 1005/324 1003/323 1004/325 +f 894/195 1007/327 29/2812 +f 979/298 29/2812 1007/327 +f 1003/323 1007/327 263/2832 +f 1006/326 263/2832 1007/327 +f 5/2804 969/284 889/189 +f 1009/329 889/189 969/284 +f 263/2832 1006/326 1008/328 +f 1009/329 1008/328 1006/326 +f 957/269 1010/330 9/2820 +f 977/294 9/2820 1010/330 +f 1008/328 1010/330 263/2832 +f 1004/325 263/2832 1010/330 +f 856/150 1013/332 30/2806 +f 971/289 30/2806 1013/332 +f 1012/333 1013/332 264/2833 +f 1011/331 264/2833 1013/332 +f 7/2792 1001/322 851/145 +f 1015/335 851/145 1001/322 +f 264/2833 1011/331 1014/334 +f 1015/335 1014/334 1011/331 +f 912/214 1017/337 3/2815 +f 998/320 3/2815 1017/337 +f 1014/334 1017/337 264/2833 +f 1016/336 264/2833 1017/337 +f 31/2819 975/292 922/227 +f 1018/338 922/227 975/292 +f 264/2833 1016/336 1012/333 +f 1018/338 1012/333 1016/336 +f 23/2794 1019/339 991/309 +f 1022/341 991/309 1019/339 +f 1020/342 268/2834 1022/341 +f 1021/343 1022/341 268/2834 +f 35/2835 1023/344 1025/348 +f 1026/346 1025/348 1023/344 +f 1026/346 1024/347 1020/342 +f 268/2834 1020/342 1024/347 +f 1029/353 34/2836 1030/349 +f 1027/350 1030/349 34/2836 +f 1024/347 1030/349 268/2834 +f 1028/351 268/2834 1030/349 +f 1032/354 1031/355 996/316 +f 22/2817 996/316 1031/355 +f 268/2834 1028/351 1021/343 +f 1032/354 1021/343 1028/351 +f 1033/358 1036/359 35/2837 +f 1023/361 35/2837 1036/359 +f 1035/360 1036/359 272/2838 +f 1034/357 272/2838 1036/359 +f 37/2839 1037/366 1039/367 +f 1040/364 1039/367 1037/366 +f 272/2838 1034/357 1038/363 +f 1040/364 1038/363 1034/357 +f 1043/372 36/2840 1044/368 +f 1041/369 1044/368 36/2840 +f 1038/363 1044/368 272/2838 +f 1042/370 272/2838 1044/368 +f 1046/373 1045/375 1029/374 +f 34/2841 1029/374 1045/375 +f 272/2838 1042/370 1035/360 +f 1046/373 1035/360 1042/370 +f 35/2837 1047/379 1033/358 +f 1050/377 1033/358 1047/379 +f 276/2842 1049/380 1048/376 +f 1050/377 1048/376 1049/380 +f 1051/383 1054/384 40/2843 +f 1053/385 40/2843 1054/384 +f 1048/376 1054/384 276/2842 +f 1052/382 276/2842 1054/384 +f 41/2844 1055/389 1057/390 +f 1058/387 1057/390 1055/389 +f 276/2842 1052/382 1056/386 +f 1058/387 1056/386 1052/382 +f 1039/367 1060/391 37/2839 +f 1059/392 37/2839 1060/391 +f 1056/386 1060/391 276/2842 +f 1049/380 276/2842 1060/391 +f 37/2839 1059/392 1063/395 +f 1064/394 1063/395 1059/392 +f 280/2845 1062/397 1061/393 +f 1064/394 1061/393 1062/397 +f 1065/400 1067/401 41/2844 +f 1055/389 41/2844 1067/401 +f 1061/393 1067/401 280/2845 +f 1066/399 280/2845 1067/401 +f 1071/405 1070/406 1068/404 +f 42/2846 1068/404 1070/406 +f 280/2845 1066/399 1069/403 +f 1071/405 1069/403 1066/399 +f 38/2847 1072/407 1073/409 +f 1074/408 1073/409 1072/407 +f 1074/408 1062/397 1069/403 +f 280/2845 1069/403 1062/397 +f 1079/411 1078/416 1075/413 +f 43/2848 1075/413 1078/416 +f 285/2849 1077/414 1076/410 +f 1079/411 1076/410 1077/414 +f 1080/420 1083/418 48/2850 +f 1082/421 48/2850 1083/418 +f 285/2849 1076/410 1081/417 +f 1083/418 1081/417 1076/410 +f 1084/424 1087/425 45/2851 +f 1086/426 45/2851 1087/425 +f 285/2849 1081/417 1085/423 +f 1087/425 1085/423 1081/417 +f 1088/427 1090/428 46/2852 +f 1089/429 46/2852 1090/428 +f 285/2849 1085/423 1077/414 +f 1090/428 1077/414 1085/423 +f 1091/433 1095/431 44/2853 +f 1094/435 44/2853 1095/431 +f 290/2854 1093/434 1092/430 +f 1095/431 1092/430 1093/434 +f 1099/438 1098/441 1096/440 +f 50/2855 1096/440 1098/441 +f 290/2854 1092/430 1097/437 +f 1099/438 1097/437 1092/430 +f 1100/444 1103/445 47/2856 +f 1102/446 47/2856 1103/445 +f 1097/437 1103/445 290/2854 +f 1101/443 290/2854 1103/445 +f 1104/447 1106/448 49/2857 +f 1105/449 49/2857 1106/448 +f 290/2854 1101/443 1093/434 +f 1106/448 1093/434 1101/443 +f 18/2858 867/452 1109/455 +f 1110/453 1109/455 867/452 +f 1107/451 293/2859 1110/453 +f 1108/456 1110/453 293/2859 +f 1113/458 861/461 1111/460 +f 2/2860 1111/460 861/461 +f 293/2859 1107/451 1112/457 +f 1113/458 1112/457 1107/451 +f 1094/435 1116/463 44/2853 +f 1115/464 44/2853 1116/463 +f 1112/457 1116/463 293/2859 +f 1114/462 293/2859 1116/463 +f 1117/466 1118/465 49/2857 +f 1104/447 49/2857 1118/465 +f 293/2859 1114/462 1108/456 +f 1118/465 1108/456 1114/462 +f 20/2861 1119/470 1122/471 +f 1123/468 1122/471 1119/470 +f 297/2862 1121/473 1120/467 +f 1123/468 1120/467 1121/473 +f 13/2863 1124/475 1126/478 +f 1127/474 1126/478 1124/475 +f 1120/467 1127/474 297/2862 +f 1125/476 297/2862 1127/474 +f 1102/446 1130/480 47/2856 +f 1129/481 47/2856 1130/480 +f 297/2862 1125/476 1128/479 +f 1130/480 1128/479 1125/476 +f 1131/482 1132/483 50/2855 +f 1096/440 50/2855 1132/483 +f 1128/479 1132/483 297/2862 +f 1121/473 297/2862 1132/483 +f 18/2858 1109/455 755/486 +f 1135/485 755/486 1109/455 +f 298/2864 1134/488 1133/484 +f 1135/485 1133/484 1134/488 +f 1105/449 1137/490 49/2857 +f 1117/466 49/2857 1137/490 +f 1133/484 1137/490 298/2864 +f 1136/489 298/2864 1137/490 +f 1129/481 1139/492 47/2856 +f 1100/444 47/2856 1139/492 +f 298/2864 1136/489 1138/491 +f 1139/492 1138/491 1136/489 +f 13/2863 761/493 1124/475 +f 1140/494 1124/475 761/493 +f 1138/491 1140/494 298/2864 +f 1134/488 298/2864 1140/494 +f 20/2861 1122/471 808/498 +f 1143/495 808/498 1122/471 +f 1142/497 1143/495 299/2865 +f 1141/496 299/2865 1143/495 +f 1098/441 1145/501 50/2855 +f 1131/482 50/2855 1145/501 +f 299/2865 1141/496 1144/500 +f 1145/501 1144/500 1141/496 +f 1115/464 1147/503 44/2853 +f 1091/433 44/2853 1147/503 +f 1144/500 1147/503 299/2865 +f 1146/502 299/2865 1147/503 +f 1148/504 1111/460 798/505 +f 2/2860 798/505 1111/460 +f 1148/504 1142/497 1146/502 +f 299/2865 1146/502 1142/497 +f 16/2866 1149/508 822/511 +f 1152/509 822/511 1149/508 +f 1151/512 1152/509 302/2867 +f 1150/507 302/2867 1152/509 +f 1082/421 1155/514 48/2850 +f 1154/515 48/2850 1155/514 +f 302/2867 1150/507 1153/513 +f 1155/514 1153/513 1150/507 +f 1156/518 1158/519 43/2848 +f 1075/413 43/2848 1158/519 +f 1153/513 1158/519 302/2867 +f 1157/517 302/2867 1158/519 +f 1160/520 1159/522 813/521 +f 1/2868 813/521 1159/522 +f 302/2867 1157/517 1151/512 +f 1160/520 1151/512 1157/517 +f 772/525 1164/526 12/2869 +f 1163/528 12/2869 1164/526 +f 1161/524 304/2870 1164/526 +f 1162/527 1164/526 304/2870 +f 1159/522 1166/531 1/2868 +f 765/532 1/2868 1166/531 +f 1166/531 1165/530 1161/524 +f 304/2870 1161/524 1165/530 +f 1078/416 1168/534 43/2848 +f 1156/518 43/2848 1168/534 +f 1165/530 1168/534 304/2870 +f 1167/533 304/2870 1168/534 +f 1169/536 1170/535 46/2852 +f 1088/427 46/2852 1170/535 +f 304/2870 1167/533 1162/527 +f 1170/535 1162/527 1167/533 +f 1171/539 1174/540 10/2871 +f 744/542 10/2871 1174/540 +f 1173/543 1174/540 306/2872 +f 1172/538 306/2872 1174/540 +f 1086/426 1177/545 45/2851 +f 1176/546 45/2851 1177/545 +f 306/2872 1172/538 1175/544 +f 1177/545 1175/544 1172/538 +f 1154/515 1179/548 48/2850 +f 1080/420 48/2850 1179/548 +f 1175/544 1179/548 306/2872 +f 1178/547 306/2872 1179/548 +f 16/2866 749/550 1149/508 +f 1180/549 1149/508 749/550 +f 306/2872 1178/547 1173/543 +f 1180/549 1173/543 1178/547 +f 12/2869 1163/528 1183/553 +f 1184/552 1183/553 1163/528 +f 308/2873 1182/555 1181/551 +f 1184/552 1181/551 1182/555 +f 1089/429 1186/557 46/2852 +f 1169/536 46/2852 1186/557 +f 1181/551 1186/557 308/2873 +f 1185/556 308/2873 1186/557 +f 1176/546 1188/559 45/2851 +f 1084/424 45/2851 1188/559 +f 308/2873 1185/556 1187/558 +f 1188/559 1187/558 1185/556 +f 10/2871 1189/560 1171/539 +f 1190/561 1171/539 1189/560 +f 1187/558 1190/561 308/2873 +f 1182/555 308/2873 1190/561 +f 38/2847 1191/565 1072/407 +f 1194/563 1072/407 1191/565 +f 312/2874 1193/566 1192/562 +f 1194/563 1192/562 1193/566 +f 51/2875 1195/567 1197/571 +f 1198/569 1197/571 1195/567 +f 312/2874 1192/562 1196/570 +f 1198/569 1196/570 1192/562 +f 1201/576 53/2876 1202/572 +f 1199/573 1202/572 53/2876 +f 312/2874 1196/570 1200/574 +f 1202/572 1200/574 1196/570 +f 1205/578 1204/579 1043/372 +f 36/2840 1043/372 1204/579 +f 312/2874 1200/574 1203/577 +f 1205/578 1203/577 1200/574 +f 1063/395 1206/580 37/2839 +f 1037/366 37/2839 1206/580 +f 1203/577 1206/580 312/2874 +f 1193/566 312/2874 1206/580 +f 52/2877 1207/584 1210/585 +f 1211/582 1210/585 1207/584 +f 1211/582 1208/581 1209/587 +f 317/2878 1209/587 1208/581 +f 1212/590 1215/591 53/2879 +f 1214/592 53/2879 1215/591 +f 1208/581 1215/591 317/2878 +f 1213/589 317/2878 1215/591 +f 1216/595 1219/596 57/2880 +f 1218/597 57/2880 1219/596 +f 1217/594 317/2878 1219/596 +f 1213/589 1219/596 317/2878 +f 1222/598 1221/600 1220/599 +f 56/2881 1220/599 1221/600 +f 317/2878 1217/594 1209/587 +f 1222/598 1209/587 1217/594 +f 1225/602 1212/590 1201/604 +f 53/2879 1201/604 1212/590 +f 320/2882 1224/605 1223/601 +f 1225/602 1223/601 1224/605 +f 51/2883 1226/608 1195/610 +f 1228/609 1195/610 1226/608 +f 1227/607 320/2882 1228/609 +f 1223/601 1228/609 320/2882 +f 1232/612 1231/615 1229/614 +f 54/2884 1229/614 1231/615 +f 320/2882 1227/607 1230/611 +f 1232/612 1230/611 1227/607 +f 1218/597 1234/616 57/2880 +f 1233/617 57/2880 1234/616 +f 1230/611 1234/616 320/2882 +f 1224/605 320/2882 1234/616 +f 1238/619 1229/614 1235/621 +f 54/2884 1235/621 1229/614 +f 323/2885 1237/622 1236/618 +f 1238/619 1236/618 1237/622 +f 1239/625 1242/626 55/2886 +f 1241/627 55/2886 1242/626 +f 1236/618 1242/626 323/2885 +f 1240/624 323/2885 1242/626 +f 1221/600 1245/629 56/2881 +f 1244/630 56/2881 1245/629 +f 323/2885 1240/624 1243/628 +f 1245/629 1243/628 1240/624 +f 1233/617 1246/631 57/2880 +f 1216/595 57/2880 1246/631 +f 1243/628 1246/631 323/2885 +f 1237/622 323/2885 1246/631 +f 1247/634 1251/635 69/2887 +f 1250/637 69/2887 1251/635 +f 1249/638 1251/635 327/2888 +f 1248/633 327/2888 1251/635 +f 76/2889 1252/642 1254/643 +f 1255/640 1254/643 1252/642 +f 327/2888 1248/633 1253/639 +f 1255/640 1253/639 1248/633 +f 920/226 1258/645 21/2818 +f 1257/646 21/2818 1258/645 +f 1253/639 1258/645 327/2888 +f 1256/644 327/2888 1258/645 +f 22/2817 1259/648 914/219 +f 1260/647 914/219 1259/648 +f 327/2888 1256/644 1249/638 +f 1260/647 1249/638 1256/644 +f 1264/654 77/2890 1265/649 +f 1261/650 1265/649 77/2890 +f 1263/655 1265/649 331/2891 +f 1262/651 331/2891 1265/649 +f 1269/657 1268/660 1266/659 +f 80/2892 1266/659 1268/660 +f 331/2891 1262/651 1267/656 +f 1269/657 1267/656 1262/651 +f 963/278 1272/662 25/2826 +f 1271/663 25/2826 1272/662 +f 1270/661 331/2891 1272/662 +f 1267/656 1272/662 331/2891 +f 33/2822 1273/665 959/274 +f 1274/664 959/274 1273/665 +f 331/2891 1270/661 1263/655 +f 1274/664 1263/655 1270/661 +f 1266/659 80/2892 1278/666 +f 1275/667 1278/666 80/2892 +f 1277/670 1278/666 334/2893 +f 1276/668 334/2893 1278/666 +f 1282/672 1281/675 1279/674 +f 81/2894 1279/674 1281/675 +f 334/2893 1276/668 1280/671 +f 1282/672 1280/671 1276/668 +f 1284/678 26/2827 1285/676 +f 953/266 1285/676 26/2827 +f 1280/671 1285/676 334/2893 +f 1283/677 334/2893 1285/676 +f 25/2826 1271/663 948/260 +f 1286/679 948/260 1271/663 +f 1286/679 1277/670 1283/677 +f 334/2893 1283/677 1277/670 +f 1287/682 1291/683 67/2895 +f 1290/685 67/2895 1291/683 +f 1289/686 1291/683 338/2896 +f 1288/681 338/2896 1291/683 +f 1295/688 1294/691 1292/690 +f 68/2897 1292/690 1294/691 +f 338/2896 1288/681 1293/687 +f 1295/688 1293/687 1288/681 +f 1297/696 12/2789 1298/692 +f 1183/693 1298/692 12/2789 +f 1293/687 1298/692 338/2896 +f 1296/694 338/2896 1298/692 +f 1300/697 1189/699 1299/698 +f 10/2782 1299/698 1189/699 +f 338/2896 1296/694 1289/686 +f 1300/697 1289/686 1296/694 +f 78/2898 1301/703 1304/704 +f 1305/701 1304/704 1301/703 +f 1305/701 1302/700 1303/706 +f 342/2899 1303/706 1302/700 +f 1306/709 1309/710 74/2900 +f 1308/711 74/2900 1309/710 +f 1307/708 342/2899 1309/710 +f 1302/700 1309/710 342/2899 +f 1312/713 1311/716 1126/715 +f 13/2786 1126/715 1311/716 +f 342/2899 1307/708 1310/712 +f 1312/713 1310/712 1307/708 +f 1313/717 1314/718 20/2799 +f 1119/719 20/2799 1314/718 +f 1303/706 342/2899 1314/718 +f 1310/712 1314/718 342/2899 +f 1315/721 1318/720 76/2889 +f 1252/642 76/2889 1318/720 +f 1317/724 1318/720 344/2901 +f 1316/722 344/2901 1318/720 +f 1321/726 1320/727 1264/654 +f 77/2890 1264/654 1320/727 +f 344/2901 1316/722 1319/725 +f 1321/726 1319/725 1316/722 +f 937/246 1323/729 33/2822 +f 1273/665 33/2822 1323/729 +f 1322/728 344/2901 1323/729 +f 1319/725 1323/729 344/2901 +f 21/2818 1257/646 933/243 +f 1324/730 933/243 1257/646 +f 344/2901 1322/728 1317/724 +f 1324/730 1317/724 1322/728 +f 1328/736 70/2902 1329/734 +f 1325/733 1329/734 70/2902 +f 1326/732 347/2903 1329/734 +f 1327/737 1329/734 347/2903 +f 69/2887 1250/637 1331/740 +f 1332/739 1331/740 1250/637 +f 347/2903 1326/732 1330/738 +f 1332/739 1330/738 1326/732 +f 1031/355 1334/742 22/2817 +f 1259/648 22/2817 1334/742 +f 1330/738 1334/742 347/2903 +f 1333/741 347/2903 1334/742 +f 34/2836 1335/743 1027/350 +f 1336/744 1027/350 1335/743 +f 347/2903 1333/741 1327/737 +f 1336/744 1327/737 1333/741 +f 1340/750 71/2904 1341/745 +f 1337/746 1341/745 71/2904 +f 1339/751 1341/745 350/2905 +f 1338/747 350/2905 1341/745 +f 1344/753 1343/756 1328/755 +f 70/2906 1328/755 1343/756 +f 350/2905 1338/747 1342/752 +f 1344/753 1342/752 1338/747 +f 1045/759 1346/760 34/2907 +f 1335/761 34/2907 1346/760 +f 1345/758 350/2905 1346/760 +f 1342/752 1346/760 350/2905 +f 36/2908 1347/762 1041/764 +f 1348/763 1041/764 1347/762 +f 1348/763 1339/751 1345/758 +f 350/2905 1345/758 1339/751 +f 59/2909 1349/766 1352/770 +f 1353/765 1352/770 1349/766 +f 1351/771 1353/765 355/2910 +f 1350/767 355/2910 1353/765 +f 65/2911 1354/775 1356/776 +f 1357/773 1356/776 1354/775 +f 355/2910 1350/767 1355/772 +f 1357/773 1355/772 1350/767 +f 1358/779 1361/780 39/2912 +f 1360/781 39/2912 1361/780 +f 1355/772 1361/780 355/2910 +f 1359/778 355/2910 1361/780 +f 38/2847 1362/783 1363/784 +f 1364/782 1363/784 1362/783 +f 355/2910 1359/778 1351/771 +f 1364/782 1351/771 1359/778 +f 1368/790 60/2913 1369/787 +f 1365/785 1369/787 60/2913 +f 358/2914 1367/789 1366/788 +f 1369/787 1366/788 1367/789 +f 1372/793 1371/794 1352/770 +f 59/2909 1352/770 1371/794 +f 1370/792 358/2914 1372/793 +f 1366/788 1372/793 358/2914 +f 38/2847 1073/409 1362/783 +f 1374/795 1362/783 1073/409 +f 1374/795 1373/796 1370/792 +f 358/2914 1370/792 1373/796 +f 1375/798 1376/797 42/2846 +f 1068/404 42/2846 1376/797 +f 1373/796 1376/797 358/2914 +f 1367/789 358/2914 1376/797 +f 1380/804 79/2915 1381/799 +f 1377/800 1381/799 79/2915 +f 1379/805 1381/799 361/2916 +f 1378/801 361/2916 1381/799 +f 1383/808 78/2898 1384/806 +f 1304/704 1384/806 78/2898 +f 361/2916 1378/801 1382/807 +f 1384/806 1382/807 1378/801 +f 20/2799 809/94 1313/717 +f 1386/810 1313/717 809/94 +f 1385/809 361/2916 1386/810 +f 1382/807 1386/810 361/2916 +f 19/2798 1387/812 804/89 +f 1388/811 804/89 1387/812 +f 1388/811 1379/805 1385/809 +f 361/2916 1385/809 1379/805 +f 68/2897 1389/816 1292/690 +f 1392/814 1292/690 1389/816 +f 364/2917 1391/817 1390/813 +f 1392/814 1390/813 1391/817 +f 1393/820 1396/821 58/2918 +f 1395/822 58/2918 1396/821 +f 1394/819 364/2917 1396/821 +f 1390/813 1396/821 364/2917 +f 11/2790 776/54 1398/825 +f 1399/824 1398/825 776/54 +f 364/2917 1394/819 1397/823 +f 1399/824 1397/823 1394/819 +f 770/48 12/2789 1400/826 +f 1297/696 1400/826 12/2789 +f 1397/823 1400/826 364/2917 +f 1391/817 364/2917 1400/826 +f 1404/828 1393/820 1401/830 +f 58/2918 1401/830 1393/820 +f 367/2919 1403/831 1402/827 +f 1404/828 1402/827 1403/831 +f 1405/834 1408/835 61/2920 +f 1407/836 61/2920 1408/835 +f 1406/833 367/2919 1408/835 +f 1402/827 1408/835 367/2919 +f 23/2794 793/74 1410/839 +f 1411/838 1410/839 793/74 +f 367/2919 1406/833 1409/837 +f 1411/838 1409/837 1406/833 +f 1398/825 1412/840 11/2790 +f 789/71 11/2790 1412/840 +f 1409/837 1412/840 367/2919 +f 1403/831 367/2919 1412/840 +f 1413/844 1416/842 61/2920 +f 1405/834 61/2920 1416/842 +f 370/2921 1415/845 1414/841 +f 1416/842 1414/841 1415/845 +f 1420/847 1419/850 1417/849 +f 62/2922 1417/849 1419/850 +f 370/2921 1414/841 1418/846 +f 1420/847 1418/846 1414/841 +f 35/2835 1025/348 1422/853 +f 1423/852 1422/853 1025/348 +f 1421/851 370/2921 1423/852 +f 1418/846 1423/852 370/2921 +f 1410/839 1424/854 23/2794 +f 1019/339 23/2794 1424/854 +f 1421/851 1424/854 370/2921 +f 1415/845 370/2921 1424/854 +f 1425/857 1428/858 62/2923 +f 1417/860 62/2923 1428/858 +f 1427/861 1428/858 373/2924 +f 1426/856 373/2924 1428/858 +f 1429/864 1432/865 63/2925 +f 1431/866 63/2925 1432/865 +f 373/2924 1426/856 1430/863 +f 1432/865 1430/863 1426/856 +f 1435/868 1434/869 1053/385 +f 40/2843 1053/385 1434/869 +f 1433/867 373/2924 1435/868 +f 1430/863 1435/868 373/2924 +f 35/2837 1422/871 1047/379 +f 1436/870 1047/379 1422/871 +f 1436/870 1427/861 1433/867 +f 373/2924 1433/867 1427/861 +f 1440/873 1429/864 1437/875 +f 63/2925 1437/875 1429/864 +f 376/2926 1439/876 1438/872 +f 1440/873 1438/872 1439/876 +f 1441/879 1444/880 64/2927 +f 1443/881 64/2927 1444/880 +f 1438/872 1444/880 376/2926 +f 1442/878 376/2926 1444/880 +f 41/2844 1057/390 1446/884 +f 1447/883 1446/884 1057/390 +f 376/2926 1442/878 1445/882 +f 1447/883 1445/882 1442/878 +f 1434/869 1448/885 40/2843 +f 1051/383 40/2843 1448/885 +f 1445/882 1448/885 376/2926 +f 1439/876 376/2926 1448/885 +f 1452/886 1441/879 1449/887 +f 64/2927 1449/887 1441/879 +f 1451/890 1452/886 378/2928 +f 1450/888 378/2928 1452/886 +f 1455/892 1454/893 1368/790 +f 60/2913 1368/790 1454/893 +f 378/2928 1450/888 1453/891 +f 1455/892 1453/891 1450/888 +f 1070/406 1457/895 42/2846 +f 1375/798 42/2846 1457/895 +f 1453/891 1457/895 378/2928 +f 1456/894 378/2928 1457/895 +f 41/2844 1446/884 1065/400 +f 1458/896 1065/400 1446/884 +f 1458/896 1451/890 1456/894 +f 378/2928 1456/894 1451/890 +f 1462/897 1461/899 1340/750 +f 71/2904 1340/750 1461/899 +f 381/2929 1460/901 1459/898 +f 1462/897 1459/898 1460/901 +f 1347/762 36/2908 1464/902 +f 1204/903 1464/902 36/2908 +f 381/2929 1459/898 1463/904 +f 1464/902 1463/904 1459/898 +f 53/2930 1214/909 1199/910 +f 1466/907 1199/910 1214/909 +f 381/2929 1463/904 1465/906 +f 1466/907 1465/906 1463/904 +f 1467/913 1469/914 52/2931 +f 1207/915 52/2931 1469/914 +f 381/2929 1465/906 1468/912 +f 1469/914 1468/912 1465/906 +f 1470/916 1472/917 72/2932 +f 1471/918 72/2932 1472/917 +f 381/2929 1468/912 1460/901 +f 1472/917 1460/901 1468/912 +f 38/2847 1363/784 1191/565 +f 1475/919 1191/565 1363/784 +f 1475/919 1473/920 1474/921 +f 383/2933 1474/921 1473/920 +f 39/2912 1476/925 1358/779 +f 1478/923 1358/779 1476/925 +f 1478/923 1477/922 1473/920 +f 383/2933 1473/920 1477/922 +f 1197/571 1480/926 51/2875 +f 1479/927 51/2875 1480/926 +f 1477/922 1480/926 383/2933 +f 1474/921 383/2933 1480/926 +f 1485/931 1484/933 1481/930 +f 85/2934 1481/930 1484/933 +f 1483/934 1485/931 388/2935 +f 1482/929 388/2935 1485/931 +f 1489/936 1488/939 1486/938 +f 83/2936 1486/938 1488/939 +f 388/2935 1482/929 1487/935 +f 1489/936 1487/935 1482/929 +f 1490/942 1493/943 84/2937 +f 1492/944 84/2937 1493/943 +f 1487/935 1493/943 388/2935 +f 1491/941 388/2935 1493/943 +f 1496/945 1495/947 1494/946 +f 82/2938 1494/946 1495/947 +f 388/2935 1491/941 1483/934 +f 1496/945 1483/934 1491/941 +f 1497/949 1501/948 92/2939 +f 1500/953 92/2939 1501/948 +f 1499/954 1501/948 393/2940 +f 1498/950 393/2940 1501/948 +f 1505/956 1504/959 1502/958 +f 89/2941 1502/958 1504/959 +f 393/2940 1498/950 1503/955 +f 1505/956 1503/955 1498/950 +f 1509/961 1508/964 1506/963 +f 88/2942 1506/963 1508/964 +f 1507/960 393/2940 1509/961 +f 1503/955 1509/961 393/2940 +f 93/2943 1510/966 1511/967 +f 1512/965 1511/967 1510/966 +f 1512/965 1499/954 1507/960 +f 393/2940 1507/960 1499/954 +f 93/2943 1513/968 1516/972 +f 1517/970 1516/972 1513/968 +f 1517/970 1514/971 1515/974 +f 398/2944 1515/974 1514/971 +f 1521/975 1520/979 1518/976 +f 86/2945 1518/976 1520/979 +f 1514/971 1521/975 398/2944 +f 1519/977 398/2944 1521/975 +f 1525/981 1524/984 1522/983 +f 87/2946 1522/983 1524/984 +f 398/2944 1519/977 1523/980 +f 1525/981 1523/980 1519/977 +f 1526/985 1528/986 94/2947 +f 1527/987 94/2947 1528/986 +f 1515/974 398/2944 1528/986 +f 1523/980 1528/986 398/2944 +f 89/2941 1529/990 1502/958 +f 1532/991 1502/958 1529/990 +f 1530/989 402/2948 1532/991 +f 1531/992 1532/991 402/2948 +f 1535/997 90/2949 1536/994 +f 1533/996 1536/994 90/2949 +f 1530/989 1536/994 402/2948 +f 1534/993 402/2948 1536/994 +f 1539/1002 91/2950 1540/998 +f 1537/999 1540/998 91/2950 +f 1534/993 1540/998 402/2948 +f 1538/1000 402/2948 1540/998 +f 1542/1003 1541/1004 1508/964 +f 88/2942 1508/964 1541/1004 +f 402/2948 1538/1000 1531/992 +f 1542/1003 1531/992 1538/1000 +f 1543/1007 1546/1008 90/2949 +f 1533/996 90/2949 1546/1008 +f 1544/1006 405/2951 1546/1008 +f 1545/1009 1546/1008 405/2951 +f 1524/984 1549/1011 87/2946 +f 1548/1012 87/2946 1549/1011 +f 1547/1010 405/2951 1549/1011 +f 1544/1006 1549/1011 405/2951 +f 1518/976 86/2945 1552/1014 +f 1550/1016 1552/1014 86/2945 +f 405/2951 1547/1010 1551/1013 +f 1552/1014 1551/1013 1547/1010 +f 1554/1017 1553/1018 1539/1002 +f 91/2950 1539/1002 1553/1018 +f 1545/1009 405/2951 1554/1017 +f 1551/1013 1554/1017 405/2951 +f 92/2939 1500/953 1557/1022 +f 1558/1020 1557/1022 1500/953 +f 408/2952 1556/1023 1555/1019 +f 1558/1020 1555/1019 1556/1023 +f 93/2943 1516/972 1510/966 +f 1560/1025 1510/966 1516/972 +f 1555/1019 1560/1025 408/2952 +f 1559/1024 408/2952 1560/1025 +f 1561/1028 1563/1029 94/2947 +f 1526/985 94/2947 1563/1029 +f 1562/1027 408/2952 1563/1029 +f 1559/1024 1563/1029 408/2952 +f 95/2953 1564/1031 1565/1032 +f 1566/1030 1565/1032 1564/1031 +f 408/2952 1562/1027 1556/1023 +f 1566/1030 1556/1023 1562/1027 +f 1570/1034 1569/1039 1557/1036 +f 92/2954 1557/1036 1569/1039 +f 411/2955 1568/1037 1567/1033 +f 1570/1034 1567/1033 1568/1037 +f 1571/1042 1573/1043 95/2956 +f 1564/1044 95/2956 1573/1043 +f 411/2955 1567/1033 1572/1041 +f 1573/1043 1572/1041 1567/1033 +f 55/2886 1241/627 1575/1047 +f 1576/1046 1575/1047 1241/627 +f 411/2955 1572/1041 1574/1045 +f 1576/1046 1574/1045 1572/1041 +f 1231/615 1578/1049 54/2884 +f 1235/621 54/2884 1578/1049 +f 1574/1045 1578/1049 411/2955 +f 1577/1048 411/2955 1578/1049 +f 51/2883 1579/1051 1226/608 +f 1580/1050 1226/608 1579/1051 +f 411/2955 1577/1048 1568/1037 +f 1580/1050 1568/1037 1577/1048 +f 94/2957 1581/1052 1561/1056 +f 1584/1054 1561/1056 1581/1052 +f 1584/1054 1582/1055 1583/1058 +f 413/2958 1583/1058 1582/1055 +f 1586/1061 52/2877 1587/1059 +f 1210/585 1587/1059 52/2877 +f 1585/1060 413/2958 1587/1059 +f 1582/1055 1587/1059 413/2958 +f 1244/630 1589/1063 56/2881 +f 1220/599 56/2881 1589/1063 +f 413/2958 1585/1060 1588/1062 +f 1589/1063 1588/1062 1585/1060 +f 1575/1047 1591/1064 55/2886 +f 1239/625 55/2886 1591/1064 +f 413/2958 1588/1062 1590/1065 +f 1591/1064 1590/1065 1588/1062 +f 1571/1042 95/2956 1592/1067 +f 1565/1066 1592/1067 95/2956 +f 1590/1065 1592/1067 413/2958 +f 1583/1058 413/2958 1592/1067 +f 1593/1070 1596/1071 87/2959 +f 1522/1073 87/2959 1596/1071 +f 416/2960 1595/1074 1594/1069 +f 1596/1071 1594/1069 1595/1074 +f 1597/1077 1600/1078 73/2961 +f 1599/1079 73/2961 1600/1078 +f 416/2960 1594/1069 1598/1076 +f 1600/1078 1598/1076 1594/1069 +f 72/2932 1471/918 1602/1082 +f 1603/1081 1602/1082 1471/918 +f 416/2960 1598/1076 1601/1080 +f 1603/1081 1601/1080 1598/1076 +f 1605/1083 1467/913 1586/1084 +f 52/2931 1586/1084 1467/913 +f 416/2960 1601/1080 1604/1085 +f 1605/1083 1604/1085 1601/1080 +f 94/2962 1527/1087 1581/1089 +f 1606/1088 1581/1089 1527/1087 +f 1606/1088 1595/1074 1604/1085 +f 416/2960 1604/1085 1595/1074 +f 1611/1091 1610/1096 1607/1093 +f 66/2963 1607/1093 1610/1096 +f 420/2964 1609/1094 1608/1090 +f 1611/1091 1608/1090 1609/1094 +f 1614/1098 1613/1101 1535/1100 +f 90/2965 1535/1100 1613/1101 +f 420/2964 1608/1090 1612/1097 +f 1614/1098 1612/1097 1608/1090 +f 1615/1104 1617/1105 89/2966 +f 1529/1106 89/2966 1617/1105 +f 420/2964 1612/1097 1616/1103 +f 1617/1105 1616/1103 1612/1097 +f 39/2912 1360/781 1619/1109 +f 1620/1108 1619/1109 1360/781 +f 420/2964 1616/1103 1618/1107 +f 1620/1108 1618/1107 1616/1103 +f 1621/1110 1622/1111 65/2911 +f 1354/775 65/2911 1622/1111 +f 1618/1107 1622/1111 420/2964 +f 1609/1094 420/2964 1622/1111 +f 73/2961 1599/1079 1625/1114 +f 1626/1113 1625/1114 1599/1079 +f 1626/1113 1623/1112 1624/1116 +f 422/2967 1624/1116 1623/1112 +f 87/2959 1548/1117 1593/1070 +f 1628/1119 1593/1070 1548/1117 +f 422/2967 1623/1112 1627/1120 +f 1628/1119 1627/1120 1623/1112 +f 1630/1122 1543/1125 1613/1124 +f 90/2968 1613/1124 1543/1125 +f 422/2967 1627/1120 1629/1121 +f 1630/1122 1629/1121 1627/1120 +f 66/2969 1631/1127 1607/1128 +f 1632/1126 1607/1128 1631/1127 +f 1624/1116 422/2967 1632/1126 +f 1629/1121 1632/1126 422/2967 +f 1619/1109 1635/1130 39/2912 +f 1476/925 39/2912 1635/1130 +f 1634/1131 1635/1130 423/2970 +f 1633/1129 423/2970 1635/1130 +f 1637/1135 1615/1104 1504/1134 +f 89/2966 1504/1134 1615/1104 +f 423/2970 1633/1129 1636/1133 +f 1637/1135 1636/1133 1633/1129 +f 92/2971 1569/1139 1497/1140 +f 1639/1137 1497/1140 1569/1139 +f 423/2970 1636/1133 1638/1136 +f 1639/1137 1638/1136 1636/1133 +f 51/2875 1479/927 1579/1142 +f 1640/1141 1579/1142 1479/927 +f 423/2970 1638/1136 1634/1131 +f 1640/1141 1634/1131 1638/1136 +f 1506/963 88/2942 1644/1143 +f 1641/1144 1644/1143 88/2942 +f 1643/1147 1644/1143 426/2972 +f 1642/1145 426/2972 1644/1143 +f 1488/939 1647/1149 83/2936 +f 1646/1150 83/2936 1647/1149 +f 1642/1145 1647/1149 426/2972 +f 1645/1148 426/2972 1647/1149 +f 1648/1153 1650/1154 85/2934 +f 1481/930 85/2934 1650/1154 +f 1649/1152 426/2972 1650/1154 +f 1645/1148 1650/1154 426/2972 +f 93/2943 1511/967 1651/1156 +f 1652/1155 1651/1156 1511/967 +f 426/2972 1649/1152 1643/1147 +f 1652/1155 1643/1147 1649/1152 +f 91/2950 1653/1157 1537/999 +f 1656/1159 1537/999 1653/1157 +f 1656/1159 1654/1160 1655/1161 +f 428/2973 1655/1161 1654/1160 +f 1492/944 1659/1163 84/2937 +f 1658/1164 84/2937 1659/1163 +f 1654/1160 1659/1163 428/2973 +f 1657/1162 428/2973 1659/1163 +f 1646/1150 1661/1166 83/2936 +f 1486/938 83/2936 1661/1166 +f 1657/1162 1661/1166 428/2973 +f 1660/1165 428/2973 1661/1166 +f 1541/1004 1662/1167 88/2942 +f 1641/1144 88/2942 1662/1167 +f 1662/1167 1655/1161 1660/1165 +f 428/2973 1660/1165 1655/1161 +f 86/2945 1663/1169 1550/1016 +f 1666/1168 1550/1016 1663/1169 +f 1665/1172 1666/1168 430/2974 +f 1664/1170 430/2974 1666/1168 +f 1668/1175 82/2938 1669/1174 +f 1495/947 1669/1174 82/2938 +f 1664/1170 1669/1174 430/2974 +f 1667/1173 430/2974 1669/1174 +f 1658/1164 1671/1177 84/2937 +f 1490/942 84/2937 1671/1177 +f 1670/1176 430/2974 1671/1177 +f 1667/1173 1671/1177 430/2974 +f 91/2950 1553/1018 1653/1157 +f 1672/1178 1653/1157 1553/1018 +f 1672/1178 1665/1172 1670/1176 +f 430/2974 1670/1176 1665/1172 +f 93/2943 1651/1156 1513/968 +f 1675/1179 1513/968 1651/1156 +f 431/2975 1674/1181 1673/1180 +f 1675/1179 1673/1180 1674/1181 +f 1484/933 1677/1183 85/2934 +f 1648/1153 85/2934 1677/1183 +f 1673/1180 1677/1183 431/2975 +f 1676/1182 431/2975 1677/1183 +f 1668/1175 1679/1185 82/2938 +f 1494/946 82/2938 1679/1185 +f 1678/1184 431/2975 1679/1185 +f 1676/1182 1679/1185 431/2975 +f 1520/979 1680/1186 86/2945 +f 1663/1169 86/2945 1680/1186 +f 1674/1181 431/2975 1680/1186 +f 1678/1184 1680/1186 431/2975 +f 14/2976 763/1190 1683/1191 +f 1684/1188 1683/1191 763/1190 +f 1684/1188 1681/1187 1682/1193 +f 435/2977 1682/1193 1681/1187 +f 1687/1195 759/1198 1685/1197 +f 13/2978 1685/1197 759/1198 +f 435/2977 1681/1187 1686/1194 +f 1687/1195 1686/1194 1681/1187 +f 1688/1202 1691/1200 97/2979 +f 1690/1203 97/2979 1691/1200 +f 1689/1199 435/2977 1691/1200 +f 1686/1194 1691/1200 435/2977 +f 1692/1204 1694/1205 98/2980 +f 1693/1206 98/2980 1694/1205 +f 1682/1193 435/2977 1694/1205 +f 1689/1199 1694/1205 435/2977 +f 1685/1197 13/2978 1697/1210 +f 1311/1209 1697/1210 13/2978 +f 1696/1211 1697/1210 438/2981 +f 1695/1208 438/2981 1697/1210 +f 1700/1213 1306/1216 1698/1215 +f 74/2982 1698/1215 1306/1216 +f 438/2981 1695/1208 1699/1212 +f 1700/1213 1699/1212 1695/1208 +f 1701/1219 1704/1220 100/2983 +f 1703/1221 100/2983 1704/1220 +f 1699/1212 1704/1220 438/2981 +f 1702/1218 438/2981 1704/1220 +f 97/2979 1690/1203 1705/1223 +f 1706/1222 1705/1223 1690/1203 +f 438/2981 1702/1218 1696/1211 +f 1706/1222 1696/1211 1702/1218 +f 67/2984 1290/1227 1709/1228 +f 1710/1225 1709/1228 1290/1227 +f 442/2985 1708/1230 1707/1224 +f 1710/1225 1707/1224 1708/1230 +f 1711/1233 1713/1234 10/2986 +f 1299/1235 10/2986 1713/1234 +f 1707/1224 1713/1234 442/2985 +f 1712/1232 442/2985 1713/1234 +f 96/2987 1714/1239 1716/1240 +f 1717/1237 1716/1240 1714/1239 +f 442/2985 1712/1232 1715/1236 +f 1717/1237 1715/1236 1712/1232 +f 1718/1241 1720/1242 99/2988 +f 1719/1243 99/2988 1720/1242 +f 1715/1236 1720/1242 442/2985 +f 1708/1230 442/2985 1720/1242 +f 10/2986 746/1245 1711/1233 +f 1723/1244 1711/1233 746/1245 +f 1721/1246 444/2989 1723/1244 +f 1722/1248 1723/1244 444/2989 +f 740/1251 14/2976 1725/1249 +f 1683/1191 1725/1249 14/2976 +f 1725/1249 1724/1250 1721/1246 +f 444/2989 1721/1246 1724/1250 +f 1692/1204 98/2980 1728/1252 +f 1726/1253 1728/1252 98/2980 +f 1724/1250 1728/1252 444/2989 +f 1727/1254 444/2989 1728/1252 +f 1729/1257 96/2987 1730/1256 +f 1716/1240 1730/1256 96/2987 +f 444/2989 1727/1254 1722/1248 +f 1730/1256 1722/1248 1727/1254 +f 1734/1261 1701/1219 1731/1260 +f 100/2983 1731/1260 1701/1219 +f 447/2990 1733/1262 1732/1259 +f 1734/1261 1732/1259 1733/1262 +f 75/2991 1735/1265 1737/1267 +f 1738/1266 1737/1267 1735/1265 +f 1732/1259 1738/1266 447/2990 +f 1736/1264 447/2990 1738/1266 +f 98/2980 1693/1206 1740/1270 +f 1741/1269 1740/1270 1693/1206 +f 447/2990 1736/1264 1739/1268 +f 1741/1269 1739/1268 1736/1264 +f 1688/1202 97/2979 1742/1271 +f 1705/1223 1742/1271 97/2979 +f 1739/1268 1742/1271 447/2990 +f 1733/1262 447/2990 1742/1271 +f 75/2991 1743/1273 1735/1265 +f 1746/1272 1735/1265 1743/1273 +f 1745/1276 1746/1272 449/2992 +f 1744/1274 449/2992 1746/1272 +f 1749/1278 1748/1279 1719/1243 +f 99/2988 1719/1243 1748/1279 +f 449/2992 1744/1274 1747/1277 +f 1749/1278 1747/1277 1744/1274 +f 1729/1257 1751/1281 96/2987 +f 1714/1239 96/2987 1751/1281 +f 1747/1277 1751/1281 449/2992 +f 1750/1280 449/2992 1751/1281 +f 98/2980 1740/1270 1726/1253 +f 1752/1282 1726/1253 1740/1270 +f 449/2992 1750/1280 1745/1276 +f 1752/1282 1745/1276 1750/1280 +f 1757/1284 1756/1287 1753/1286 +f 101/2993 1753/1286 1756/1287 +f 1757/1284 1754/1283 1755/1289 +f 453/2994 1755/1289 1754/1283 +f 1758/1292 1761/1293 102/2995 +f 1760/1294 102/2995 1761/1293 +f 1754/1283 1761/1293 453/2994 +f 1759/1291 453/2994 1761/1293 +f 1762/1295 1764/1296 103/2996 +f 1763/1297 103/2996 1764/1296 +f 1759/1291 1764/1296 453/2994 +f 1755/1289 453/2994 1764/1296 +f 1768/1299 1767/1302 1756/1287 +f 101/2993 1756/1287 1767/1302 +f 456/2997 1766/1300 1765/1298 +f 1768/1299 1765/1298 1766/1300 +f 103/2996 1769/1306 1762/1295 +f 1771/1304 1762/1295 1769/1306 +f 456/2997 1765/1298 1770/1303 +f 1771/1304 1770/1303 1765/1298 +f 806/91 1774/1308 19/2798 +f 1773/1309 19/2798 1774/1308 +f 1770/1303 1774/1308 456/2997 +f 1772/1307 456/2997 1774/1308 +f 27/2797 881/180 800/84 +f 1776/1311 800/84 881/180 +f 456/2997 1772/1307 1775/1310 +f 1776/1311 1775/1310 1772/1307 +f 875/174 8/2810 1778/1312 +f 1777/1313 1778/1312 8/2810 +f 456/2997 1775/1310 1766/1300 +f 1778/1312 1766/1300 1775/1310 +f 1767/1302 1781/1315 101/2993 +f 1753/1286 101/2993 1781/1315 +f 458/2998 1780/1316 1779/1314 +f 1781/1315 1779/1314 1780/1316 +f 8/2810 989/308 1777/1313 +f 1783/1318 1777/1313 989/308 +f 458/2998 1779/1314 1782/1317 +f 1783/1318 1782/1317 1779/1314 +f 1785/1320 986/305 942/252 +f 4/2823 942/252 986/305 +f 458/2998 1782/1317 1784/1319 +f 1785/1320 1784/1319 1782/1317 +f 26/2827 1786/1321 952/264 +f 1788/1323 952/264 1786/1321 +f 458/2998 1784/1319 1787/1324 +f 1788/1323 1787/1324 1784/1319 +f 102/2995 1760/1294 1789/1326 +f 1790/1325 1789/1326 1760/1294 +f 458/2998 1787/1324 1780/1316 +f 1790/1325 1780/1316 1787/1324 +f 1795/1328 1794/1333 1791/1330 +f 104/2999 1791/1330 1794/1333 +f 461/3000 1793/1331 1792/1327 +f 1795/1328 1792/1327 1793/1331 +f 1789/1326 1798/1335 102/2995 +f 1797/1336 102/2995 1798/1335 +f 1792/1327 1798/1335 461/3000 +f 1796/1334 461/3000 1798/1335 +f 1786/1321 26/2827 1800/1337 +f 1284/678 1800/1337 26/2827 +f 1800/1337 1799/1338 1796/1334 +f 461/3000 1796/1334 1799/1338 +f 1279/674 81/2894 1802/1339 +f 1801/1340 1802/1339 81/2894 +f 1799/1338 1802/1339 461/3000 +f 1793/1331 461/3000 1802/1339 +f 1805/1344 79/2915 1806/1342 +f 1380/804 1806/1342 79/2915 +f 1804/1345 1806/1342 464/3001 +f 1803/1341 464/3001 1806/1342 +f 19/2798 1773/1309 1387/812 +f 1808/1347 1387/812 1773/1309 +f 464/3001 1803/1341 1807/1346 +f 1808/1347 1807/1346 1803/1341 +f 1809/1350 1811/1351 103/2996 +f 1769/1306 103/2996 1811/1351 +f 1807/1346 1811/1351 464/3001 +f 1810/1349 464/3001 1811/1351 +f 1814/1352 1813/1354 1812/1353 +f 105/3002 1812/1353 1813/1354 +f 464/3001 1810/1349 1804/1345 +f 1814/1352 1804/1345 1810/1349 +f 1763/1297 1818/1356 103/2996 +f 1817/1358 103/2996 1818/1356 +f 1815/1355 468/3003 1818/1356 +f 1816/1359 1818/1356 468/3003 +f 102/2995 1819/1361 1758/1292 +f 1821/1360 1758/1292 1819/1361 +f 1821/1360 1820/1362 1815/1355 +f 468/3003 1815/1355 1820/1362 +f 1825/1365 1824/1368 1822/1367 +f 106/3004 1822/1367 1824/1368 +f 468/3003 1820/1362 1823/1364 +f 1825/1365 1823/1364 1820/1362 +f 1828/1370 1827/1371 1826/1369 +f 107/3005 1826/1369 1827/1371 +f 1828/1370 1816/1359 1823/1364 +f 468/3003 1823/1364 1816/1359 +f 102/2995 1797/1336 1819/1361 +f 1831/1373 1819/1361 1797/1336 +f 471/3006 1830/1374 1829/1372 +f 1831/1373 1829/1372 1830/1374 +f 1832/1377 1834/1378 104/2999 +f 1791/1330 104/2999 1834/1378 +f 1829/1372 1834/1378 471/3006 +f 1833/1376 471/3006 1834/1378 +f 108/3007 1835/1382 1837/1383 +f 1838/1380 1837/1383 1835/1382 +f 471/3006 1833/1376 1836/1379 +f 1838/1380 1836/1379 1833/1376 +f 1824/1368 1840/1384 106/3004 +f 1839/1385 106/3004 1840/1384 +f 1836/1379 1840/1384 471/3006 +f 1830/1374 471/3006 1840/1384 +f 1843/1389 105/3002 1844/1386 +f 1813/1354 1844/1386 105/3002 +f 1842/1390 1844/1386 474/3008 +f 1841/1387 474/3008 1844/1386 +f 1846/1392 1809/1350 1817/1358 +f 103/2996 1817/1358 1809/1350 +f 474/3008 1841/1387 1845/1391 +f 1846/1392 1845/1391 1841/1387 +f 1847/1395 1849/1396 107/3005 +f 1826/1369 107/3005 1849/1396 +f 1848/1394 474/3008 1849/1396 +f 1845/1391 1849/1396 474/3008 +f 109/3009 1850/1398 1851/1399 +f 1852/1397 1851/1399 1850/1398 +f 1852/1397 1842/1390 1848/1394 +f 474/3008 1848/1394 1842/1390 +f 1855/1401 1822/1367 1839/1385 +f 106/3004 1839/1385 1822/1367 +f 476/3010 1854/1402 1853/1400 +f 1855/1401 1853/1400 1854/1402 +f 1856/1404 1858/1403 108/3007 +f 1835/1382 108/3007 1858/1403 +f 1853/1400 1858/1403 476/3010 +f 1857/1405 476/3010 1858/1403 +f 1851/1399 1861/1408 109/3009 +f 1860/1409 109/3009 1861/1408 +f 1857/1405 1861/1408 476/3010 +f 1859/1407 476/3010 1861/1408 +f 1862/1410 1847/1395 1827/1371 +f 107/3005 1827/1371 1847/1395 +f 476/3010 1859/1407 1854/1402 +f 1862/1410 1854/1402 1859/1407 +f 1863/1413 1867/1414 115/3011 +f 1866/1416 115/3011 1867/1414 +f 481/3012 1865/1415 1864/1412 +f 1867/1414 1864/1412 1865/1415 +f 125/3013 1868/1420 1870/1422 +f 1871/1421 1870/1422 1868/1420 +f 1869/1419 481/3012 1871/1421 +f 1864/1412 1871/1421 481/3012 +f 1875/1425 1874/1427 1872/1423 +f 119/3014 1872/1423 1874/1427 +f 481/3012 1869/1419 1873/1426 +f 1875/1425 1873/1426 1869/1419 +f 1878/1428 1877/1430 1876/1429 +f 123/3015 1876/1429 1877/1430 +f 1873/1426 1878/1428 481/3012 +f 1865/1415 481/3012 1878/1428 +f 1882/1432 1881/1435 1866/1416 +f 115/3011 1866/1416 1881/1435 +f 485/3016 1880/1433 1879/1431 +f 1882/1432 1879/1431 1880/1433 +f 1883/1438 1885/1439 123/3015 +f 1876/1429 123/3015 1885/1439 +f 1884/1437 485/3016 1885/1439 +f 1879/1431 1885/1439 485/3016 +f 1889/1441 1888/1444 1886/1443 +f 122/3017 1886/1443 1888/1444 +f 485/3016 1884/1437 1887/1440 +f 1889/1441 1887/1440 1884/1437 +f 127/3018 1890/1445 1891/1447 +f 1892/1446 1891/1447 1890/1445 +f 1887/1440 1892/1446 485/3016 +f 1880/1433 485/3016 1892/1446 +f 110/3019 1893/1451 1896/1453 +f 1897/1449 1896/1453 1893/1451 +f 1895/1452 1897/1449 490/3020 +f 1894/1448 490/3020 1897/1449 +f 133/3021 1898/1458 1900/1459 +f 1901/1456 1900/1459 1898/1458 +f 490/3020 1894/1448 1899/1455 +f 1901/1456 1899/1455 1894/1448 +f 1902/1462 1905/1463 120/3022 +f 1904/1464 120/3022 1905/1463 +f 1899/1455 1905/1463 490/3020 +f 1903/1461 490/3020 1905/1463 +f 121/3023 1906/1466 1907/1467 +f 1908/1465 1907/1467 1906/1466 +f 490/3020 1903/1461 1895/1452 +f 1908/1465 1895/1452 1903/1461 +f 116/3024 1909/1471 1912/1472 +f 1913/1469 1912/1472 1909/1471 +f 494/3025 1911/1474 1910/1468 +f 1913/1469 1910/1468 1911/1474 +f 1914/1477 1917/1478 132/3026 +f 1916/1479 132/3026 1917/1478 +f 1910/1468 1917/1478 494/3025 +f 1915/1476 494/3025 1917/1478 +f 120/3022 1904/1464 1919/1482 +f 1920/1481 1919/1482 1904/1464 +f 494/3025 1915/1476 1918/1480 +f 1920/1481 1918/1480 1915/1476 +f 1921/1483 1922/1484 133/3021 +f 1898/1458 133/3021 1922/1484 +f 1918/1480 1922/1484 494/3025 +f 1911/1474 494/3025 1922/1484 +f 111/3027 1923/1487 1926/1489 +f 1927/1488 1926/1489 1923/1487 +f 499/3028 1925/1491 1924/1486 +f 1927/1488 1924/1486 1925/1491 +f 129/3029 1928/1495 1930/1496 +f 1931/1493 1930/1496 1928/1495 +f 1931/1493 1929/1492 1924/1486 +f 499/3028 1924/1486 1929/1492 +f 1935/1498 1934/1501 1932/1500 +f 128/3030 1932/1500 1934/1501 +f 499/3028 1929/1492 1933/1497 +f 1935/1498 1933/1497 1929/1492 +f 1936/1502 1938/1503 136/3031 +f 1937/1504 136/3031 1938/1503 +f 1933/1497 1938/1503 499/3028 +f 1925/1491 499/3028 1938/1503 +f 1939/1507 1942/1508 110/3019 +f 1893/1451 110/3019 1942/1508 +f 1941/1509 1942/1508 503/3032 +f 1940/1506 503/3032 1942/1508 +f 125/3013 1943/1513 1945/1514 +f 1946/1511 1945/1514 1943/1513 +f 503/3032 1940/1506 1944/1510 +f 1946/1511 1944/1510 1940/1506 +f 1947/1517 1950/1518 124/3033 +f 1949/1519 124/3033 1950/1518 +f 1944/1510 1950/1518 503/3032 +f 1948/1516 503/3032 1950/1518 +f 133/3021 1900/1459 1951/1521 +f 1952/1520 1951/1521 1900/1459 +f 503/3032 1948/1516 1941/1509 +f 1952/1520 1941/1509 1948/1516 +f 1956/1523 1863/1413 1953/1525 +f 115/3011 1953/1525 1863/1413 +f 506/3034 1955/1526 1954/1522 +f 1956/1523 1954/1522 1955/1526 +f 1957/1529 1960/1530 141/3035 +f 1959/1531 141/3035 1960/1530 +f 1954/1522 1960/1530 506/3034 +f 1958/1528 506/3034 1960/1530 +f 124/3033 1949/1519 1962/1534 +f 1963/1533 1962/1534 1949/1519 +f 506/3034 1958/1528 1961/1532 +f 1963/1533 1961/1532 1958/1528 +f 125/3013 1870/1422 1943/1513 +f 1964/1535 1943/1513 1870/1422 +f 1961/1532 1964/1535 506/3034 +f 1955/1526 506/3034 1964/1535 +f 1969/1537 1968/1541 1965/1539 +f 114/3036 1965/1539 1968/1541 +f 1967/1542 1969/1537 510/3037 +f 1966/1536 510/3037 1969/1537 +f 1970/1546 1973/1544 139/3038 +f 1972/1547 139/3038 1973/1544 +f 510/3037 1966/1536 1971/1543 +f 1973/1544 1971/1543 1966/1536 +f 1962/1534 1976/1549 124/3033 +f 1975/1550 124/3033 1976/1549 +f 1974/1548 510/3037 1976/1549 +f 1971/1543 1976/1549 510/3037 +f 141/3035 1977/1551 1957/1529 +f 1978/1552 1957/1529 1977/1551 +f 1978/1552 1967/1542 1974/1548 +f 510/3037 1974/1548 1967/1542 +f 1912/1472 1982/1554 116/3024 +f 1981/1556 116/3024 1982/1554 +f 1979/1553 512/3039 1982/1554 +f 1980/1557 1982/1554 512/3039 +f 133/3021 1951/1521 1921/1483 +f 1984/1559 1921/1483 1951/1521 +f 1983/1558 512/3039 1984/1559 +f 1979/1553 1984/1559 512/3039 +f 124/3033 1975/1550 1947/1517 +f 1986/1560 1947/1517 1975/1550 +f 1986/1560 1985/1561 1983/1558 +f 512/3039 1983/1558 1985/1561 +f 1988/1562 1970/1546 1987/1563 +f 139/3038 1987/1563 1970/1546 +f 1985/1561 1988/1562 512/3039 +f 1980/1557 512/3039 1988/1562 +f 1926/1489 1992/1565 111/3027 +f 1991/1567 111/3027 1992/1565 +f 1990/1568 1992/1565 516/3040 +f 1989/1564 516/3040 1992/1565 +f 136/3031 1993/1572 1936/1502 +f 1995/1570 1936/1502 1993/1572 +f 516/3040 1989/1564 1994/1569 +f 1995/1570 1994/1569 1989/1564 +f 1996/1575 1999/1576 126/3041 +f 1998/1577 126/3041 1999/1576 +f 1994/1569 1999/1576 516/3040 +f 1997/1574 516/3040 1999/1576 +f 127/3018 2000/1579 2001/1580 +f 2002/1578 2001/1580 2000/1579 +f 516/3040 1997/1574 1990/1568 +f 2002/1578 1990/1568 1997/1574 +f 2007/1582 2006/1585 2003/1584 +f 117/3042 2003/1584 2006/1585 +f 520/3043 2005/1587 2004/1581 +f 2007/1582 2004/1581 2005/1587 +f 2008/1590 2011/1591 138/3044 +f 2010/1592 138/3044 2011/1591 +f 2009/1589 520/3043 2011/1591 +f 2004/1581 2011/1591 520/3043 +f 126/3041 1998/1577 2013/1595 +f 2014/1594 2013/1595 1998/1577 +f 520/3043 2009/1589 2012/1593 +f 2014/1594 2012/1593 2009/1589 +f 2015/1596 2016/1597 136/3031 +f 1993/1572 136/3031 2016/1597 +f 2012/1593 2016/1597 520/3043 +f 2005/1587 520/3043 2016/1597 +f 1968/1541 2020/1598 114/3036 +f 2019/1601 114/3036 2020/1598 +f 2017/1599 523/3045 2020/1598 +f 2018/1600 2020/1598 523/3045 +f 2021/1603 2023/1605 141/3035 +f 1977/1551 141/3035 2023/1605 +f 523/3045 2017/1599 2022/1606 +f 2023/1605 2022/1606 2017/1599 +f 2013/1595 2026/1608 126/3041 +f 2025/1609 126/3041 2026/1608 +f 2022/1606 2026/1608 523/3045 +f 2024/1607 523/3045 2026/1608 +f 138/3044 2027/1611 2008/1590 +f 2028/1610 2008/1590 2027/1611 +f 523/3045 2024/1607 2018/1600 +f 2028/1610 2018/1600 2024/1607 +f 1881/1435 2031/1613 115/3011 +f 1953/1525 115/3011 2031/1613 +f 524/3046 2030/1614 2029/1612 +f 2031/1613 2029/1612 2030/1614 +f 127/3018 2001/1580 1890/1445 +f 2033/1616 1890/1445 2001/1580 +f 2032/1615 524/3046 2033/1616 +f 2029/1612 2033/1616 524/3046 +f 126/3041 2025/1609 1996/1575 +f 2035/1618 1996/1575 2025/1609 +f 524/3046 2032/1615 2034/1617 +f 2035/1618 2034/1617 2032/1615 +f 141/3035 1959/1531 2021/1603 +f 2036/1619 2021/1603 1959/1531 +f 2034/1617 2036/1619 524/3046 +f 2030/1614 524/3046 2036/1619 +f 2041/1621 2040/1624 2037/1623 +f 112/3047 2037/1623 2040/1624 +f 529/3048 2039/1626 2038/1620 +f 2041/1621 2038/1620 2039/1626 +f 140/3049 2042/1629 2044/1631 +f 2045/1630 2044/1631 2042/1629 +f 2043/1628 529/3048 2045/1630 +f 2038/1620 2045/1630 529/3048 +f 130/3050 2046/1635 2048/1636 +f 2049/1633 2048/1636 2046/1635 +f 2049/1633 2047/1632 2043/1628 +f 529/3048 2043/1628 2047/1632 +f 131/3051 2050/1638 2051/1639 +f 2052/1637 2051/1639 2050/1638 +f 2047/1632 2052/1637 529/3048 +f 2039/1626 529/3048 2052/1637 +f 2056/1644 118/3052 2057/1640 +f 2053/1641 2057/1640 118/3052 +f 533/3053 2055/1646 2054/1642 +f 2057/1640 2054/1642 2055/1646 +f 2061/1650 2060/1651 2058/1649 +f 142/3054 2058/1649 2060/1651 +f 2054/1642 2061/1650 533/3053 +f 2059/1648 533/3053 2061/1650 +f 130/3050 2048/1636 2063/1654 +f 2064/1653 2063/1654 2048/1636 +f 533/3053 2059/1648 2062/1652 +f 2064/1653 2062/1652 2059/1648 +f 2065/1655 2066/1656 140/3049 +f 2042/1629 140/3049 2066/1656 +f 2062/1652 2066/1656 533/3053 +f 2055/1646 533/3053 2066/1656 +f 2067/1659 2071/1660 113/3055 +f 2070/1662 113/3055 2071/1660 +f 2069/1663 2071/1660 538/3056 +f 2068/1658 538/3056 2071/1660 +f 135/3057 2072/1664 2074/1668 +f 2075/1666 2074/1668 2072/1664 +f 2075/1666 2073/1667 2068/1658 +f 538/3056 2068/1658 2073/1667 +f 2076/1671 2079/1672 134/3058 +f 2078/1673 134/3058 2079/1672 +f 2073/1667 2079/1672 538/3056 +f 2077/1670 538/3056 2079/1672 +f 137/3059 2080/1674 2081/1676 +f 2082/1675 2081/1676 2080/1674 +f 538/3056 2077/1670 2069/1663 +f 2082/1675 2069/1663 2077/1670 +f 118/3052 2083/1680 2053/1641 +f 2086/1678 2053/1641 2083/1680 +f 541/3060 2085/1681 2084/1677 +f 2086/1678 2084/1677 2085/1681 +f 2081/1676 2089/1683 137/3059 +f 2088/1684 137/3059 2089/1683 +f 2084/1677 2089/1683 541/3060 +f 2087/1682 541/3060 2089/1683 +f 134/3058 2090/1688 2076/1671 +f 2092/1686 2076/1671 2090/1688 +f 541/3060 2087/1682 2091/1685 +f 2092/1686 2091/1685 2087/1682 +f 2060/1651 2094/1689 142/3054 +f 2093/1690 142/3054 2094/1689 +f 2091/1685 2094/1689 541/3060 +f 2085/1681 541/3060 2094/1689 +f 2095/1693 2098/1694 114/3036 +f 1965/1539 114/3036 2098/1694 +f 2097/1695 2098/1694 544/3061 +f 2096/1692 544/3061 2098/1694 +f 118/3052 2056/1644 2100/1698 +f 2101/1697 2100/1698 2056/1644 +f 544/3061 2096/1692 2099/1696 +f 2101/1697 2099/1696 2096/1692 +f 2102/1701 2104/1702 140/3049 +f 2065/1655 140/3049 2104/1702 +f 2099/1696 2104/1702 544/3061 +f 2103/1700 544/3061 2104/1702 +f 139/3038 1972/1547 2105/1704 +f 2106/1703 2105/1704 1972/1547 +f 544/3061 2103/1700 2097/1695 +f 2106/1703 2097/1695 2103/1700 +f 138/3044 2010/1592 2109/1707 +f 2110/1705 2109/1707 2010/1592 +f 2110/1705 2107/1706 2108/1709 +f 547/3062 2108/1709 2107/1706 +f 2111/1711 2113/1710 117/3042 +f 2003/1584 117/3042 2113/1710 +f 2107/1706 2113/1710 547/3062 +f 2112/1712 547/3062 2113/1710 +f 2070/1662 2116/1715 113/3055 +f 2115/1716 113/3055 2116/1715 +f 547/3062 2112/1712 2114/1714 +f 2116/1715 2114/1714 2112/1712 +f 2117/1717 2118/1718 137/3059 +f 2080/1674 137/3059 2118/1718 +f 2108/1709 547/3062 2118/1718 +f 2114/1714 2118/1718 547/3062 +f 132/3026 1916/1479 2121/1721 +f 2122/1720 2121/1721 1916/1479 +f 2122/1720 2119/1719 2120/1723 +f 550/3063 2120/1723 2119/1719 +f 2123/1725 2125/1724 116/3024 +f 1909/1471 116/3024 2125/1724 +f 2119/1719 2125/1724 550/3063 +f 2124/1726 550/3063 2125/1724 +f 2128/1729 2127/1730 2040/1624 +f 112/3047 2040/1624 2127/1730 +f 550/3063 2124/1726 2126/1728 +f 2128/1729 2126/1728 2124/1726 +f 131/3051 2129/1731 2050/1638 +f 2130/1732 2050/1638 2129/1731 +f 2120/1723 550/3063 2130/1732 +f 2126/1728 2130/1732 550/3063 +f 137/3059 2088/1684 2117/1717 +f 2133/1734 2117/1717 2088/1684 +f 551/3064 2132/1735 2131/1733 +f 2133/1734 2131/1733 2132/1735 +f 2100/1698 2135/1737 118/3052 +f 2083/1680 118/3052 2135/1737 +f 2131/1733 2135/1737 551/3064 +f 2134/1736 551/3064 2135/1737 +f 114/3036 2019/1601 2095/1693 +f 2137/1739 2095/1693 2019/1601 +f 551/3064 2134/1736 2136/1738 +f 2137/1739 2136/1738 2134/1736 +f 2109/1707 2138/1740 138/3044 +f 2027/1611 138/3044 2138/1740 +f 2136/1738 2138/1740 551/3064 +f 2132/1735 551/3064 2138/1740 +f 2105/1704 2141/1742 139/3038 +f 1987/1563 139/3038 2141/1742 +f 2140/1743 2141/1742 552/3065 +f 2139/1741 552/3065 2141/1742 +f 140/3049 2044/1631 2102/1701 +f 2143/1745 2102/1701 2044/1631 +f 552/3065 2139/1741 2142/1744 +f 2143/1745 2142/1744 2139/1741 +f 2127/1730 2145/1747 112/3047 +f 2037/1623 112/3047 2145/1747 +f 2142/1744 2145/1747 552/3065 +f 2144/1746 552/3065 2145/1747 +f 116/3024 1981/1556 2123/1725 +f 2146/1748 2123/1725 1981/1556 +f 552/3065 2144/1746 2140/1743 +f 2146/1748 2140/1743 2144/1746 +f 132/3026 2121/1721 2149/1751 +f 2150/1749 2149/1751 2121/1721 +f 2148/1753 2150/1749 556/3066 +f 2147/1750 556/3066 2150/1749 +f 2153/1755 2129/1731 2151/1757 +f 131/3051 2151/1757 2129/1731 +f 556/3066 2147/1750 2152/1754 +f 2153/1755 2152/1754 2147/1750 +f 2154/1760 2157/1761 143/3067 +f 2156/1762 143/3067 2157/1761 +f 2155/1759 556/3066 2157/1761 +f 2152/1754 2157/1761 556/3066 +f 144/3068 2158/1763 2159/1765 +f 2160/1764 2159/1765 2158/1763 +f 2160/1764 2148/1753 2155/1759 +f 556/3066 2155/1759 2148/1753 +f 2159/1767 2164/1766 144/3069 +f 2163/1771 144/3069 2164/1766 +f 2162/1772 2164/1766 560/3070 +f 2161/1768 560/3070 2164/1766 +f 2167/1774 2154/1777 2165/1776 +f 143/3071 2165/1776 2154/1777 +f 560/3070 2161/1768 2166/1773 +f 2167/1774 2166/1773 2161/1768 +f 2168/1780 2171/1781 145/3072 +f 2170/1782 145/3072 2171/1781 +f 2169/1779 560/3070 2171/1781 +f 2166/1773 2171/1781 560/3070 +f 146/3073 2172/1784 2173/1785 +f 2174/1783 2173/1785 2172/1784 +f 560/3070 2169/1779 2162/1772 +f 2174/1783 2162/1772 2169/1779 +f 144/3069 2163/1771 2177/1788 +f 2178/1787 2177/1788 2163/1771 +f 564/3074 2176/1790 2175/1786 +f 2178/1787 2175/1786 2176/1790 +f 2179/1793 2181/1794 146/3073 +f 2172/1784 146/3073 2181/1794 +f 2175/1786 2181/1794 564/3074 +f 2180/1792 564/3074 2181/1794 +f 150/3075 2182/1798 2184/1799 +f 2185/1796 2184/1799 2182/1798 +f 564/3074 2180/1792 2183/1795 +f 2185/1796 2183/1795 2180/1792 +f 2186/1800 2188/1801 149/3076 +f 2187/1802 149/3076 2188/1801 +f 2183/1795 2188/1801 564/3074 +f 2176/1790 564/3074 2188/1801 +f 146/3073 2189/1806 2179/1793 +f 2192/1804 2179/1793 2189/1806 +f 568/3077 2191/1807 2190/1803 +f 2192/1804 2190/1803 2191/1807 +f 147/3078 2193/1811 2195/1812 +f 2196/1809 2195/1812 2193/1811 +f 2190/1803 2196/1809 568/3077 +f 2194/1808 568/3077 2196/1809 +f 2200/1814 2199/1817 2197/1816 +f 151/3079 2197/1816 2199/1817 +f 568/3077 2194/1808 2198/1813 +f 2200/1814 2198/1813 2194/1808 +f 2184/1799 2202/1818 150/3075 +f 2201/1819 150/3075 2202/1818 +f 2198/1813 2202/1818 568/3077 +f 2191/1807 568/3077 2202/1818 +f 2207/1821 2206/1826 2203/1823 +f 152/3080 2203/1823 2206/1826 +f 573/3081 2205/1824 2204/1820 +f 2207/1821 2204/1820 2205/1824 +f 2208/1830 2211/1828 155/3082 +f 2210/1831 155/3082 2211/1828 +f 573/3081 2204/1820 2209/1827 +f 2211/1828 2209/1827 2204/1820 +f 2212/1834 2215/1835 154/3083 +f 2214/1836 154/3083 2215/1835 +f 573/3081 2209/1827 2213/1833 +f 2215/1835 2213/1833 2209/1827 +f 2216/1837 2218/1838 157/3084 +f 2217/1839 157/3084 2218/1838 +f 573/3081 2213/1833 2205/1824 +f 2218/1838 2205/1824 2213/1833 +f 2223/1841 2222/1846 2219/1843 +f 153/3085 2219/1843 2222/1846 +f 578/3086 2221/1844 2220/1840 +f 2223/1841 2220/1840 2221/1844 +f 2224/1850 2227/1848 158/3087 +f 2226/1851 158/3087 2227/1848 +f 578/3086 2220/1840 2225/1847 +f 2227/1848 2225/1847 2220/1840 +f 2228/1854 2231/1855 156/3088 +f 2230/1856 156/3088 2231/1855 +f 2225/1847 2231/1855 578/3086 +f 2229/1853 578/3086 2231/1855 +f 2232/1857 2234/1858 159/3089 +f 2233/1859 159/3089 2234/1858 +f 578/3086 2229/1853 2221/1844 +f 2234/1858 2221/1844 2229/1853 +f 127/3090 2235/1862 2000/1865 +f 2238/1863 2000/1865 2235/1862 +f 2237/1866 2238/1863 581/3091 +f 2236/1861 581/3091 2238/1863 +f 2226/1851 2241/1868 158/3087 +f 2240/1869 158/3087 2241/1868 +f 581/3091 2236/1861 2239/1867 +f 2241/1868 2239/1867 2236/1861 +f 2242/1872 2244/1873 153/3085 +f 2219/1843 153/3085 2244/1873 +f 2239/1867 2244/1873 581/3091 +f 2243/1871 581/3091 2244/1873 +f 2246/1874 2245/1876 1991/1875 +f 111/3092 1991/1875 2245/1876 +f 581/3091 2243/1871 2237/1866 +f 2246/1874 2237/1866 2243/1871 +f 129/3093 2247/1880 2250/1881 +f 2251/1878 2250/1881 2247/1880 +f 585/3094 2249/1883 2248/1877 +f 2251/1878 2248/1877 2249/1883 +f 2233/1859 2254/1885 159/3089 +f 2253/1886 159/3089 2254/1885 +f 2248/1877 2254/1885 585/3094 +f 2252/1884 585/3094 2254/1885 +f 2255/1889 2257/1890 156/3088 +f 2228/1854 156/3088 2257/1890 +f 585/3094 2252/1884 2256/1888 +f 2257/1890 2256/1888 2252/1884 +f 122/3095 2258/1891 2259/1893 +f 2260/1892 2259/1893 2258/1891 +f 2256/1888 2260/1892 585/3094 +f 2249/1883 585/3094 2260/1892 +f 127/3090 1891/1897 2235/1862 +f 2263/1895 2235/1862 1891/1897 +f 586/3096 2262/1898 2261/1894 +f 2263/1895 2261/1894 2262/1898 +f 122/3095 2259/1893 1886/1901 +f 2265/1900 1886/1901 2259/1893 +f 2261/1894 2265/1900 586/3096 +f 2264/1899 586/3096 2265/1900 +f 2230/1856 2267/1903 156/3088 +f 2255/1889 156/3088 2267/1903 +f 586/3096 2264/1899 2266/1902 +f 2267/1903 2266/1902 2264/1899 +f 2240/1869 2268/1904 158/3087 +f 2224/1850 158/3087 2268/1904 +f 2266/1902 2268/1904 586/3096 +f 2262/1898 586/3096 2268/1904 +f 129/3093 1930/1906 2247/1880 +f 2271/1905 2247/1880 1930/1906 +f 2269/1907 587/3097 2271/1905 +f 2270/1909 2271/1905 587/3097 +f 2273/1911 1923/1912 2245/1876 +f 111/3092 2245/1876 1923/1912 +f 2273/1911 2272/1910 2269/1907 +f 587/3097 2269/1907 2272/1910 +f 2222/1846 2275/1914 153/3085 +f 2242/1872 153/3085 2275/1914 +f 2272/1910 2275/1914 587/3097 +f 2274/1913 587/3097 2275/1914 +f 2253/1886 2276/1915 159/3089 +f 2232/1857 159/3089 2276/1915 +f 587/3097 2274/1913 2270/1909 +f 2276/1915 2270/1909 2274/1913 +f 125/3098 1945/1918 2279/1921 +f 2280/1919 2279/1921 1945/1918 +f 2278/1922 2280/1919 590/3099 +f 2277/1917 590/3099 2280/1919 +f 2283/1924 1939/1927 2281/1926 +f 110/3100 2281/1926 1939/1927 +f 590/3099 2277/1917 2282/1923 +f 2283/1924 2282/1923 2277/1917 +f 2206/1826 2286/1929 152/3080 +f 2285/1930 152/3080 2286/1929 +f 2282/1923 2286/1929 590/3099 +f 2284/1928 590/3099 2286/1929 +f 2287/1932 2288/1931 157/3084 +f 2216/1837 157/3084 2288/1931 +f 590/3099 2284/1928 2278/1922 +f 2288/1931 2278/1922 2284/1928 +f 2289/1934 2292/1933 121/3101 +f 1906/1938 121/3101 2292/1933 +f 2291/1939 2292/1933 592/3102 +f 2290/1935 592/3102 2292/1933 +f 2210/1831 2295/1941 155/3082 +f 2294/1942 155/3082 2295/1941 +f 592/3102 2290/1935 2293/1940 +f 2295/1941 2293/1940 2290/1935 +f 2285/1930 2297/1944 152/3080 +f 2203/1823 152/3080 2297/1944 +f 2293/1940 2297/1944 592/3102 +f 2296/1943 592/3102 2297/1944 +f 2281/1926 110/3100 2298/1946 +f 1896/1945 2298/1946 110/3100 +f 2298/1946 2291/1939 2296/1943 +f 592/3102 2296/1943 2291/1939 +f 1874/1949 2302/1950 119/3103 +f 2301/1952 119/3103 2302/1950 +f 2300/1953 2302/1950 594/3104 +f 2299/1948 594/3104 2302/1950 +f 125/3098 2279/1921 1868/1956 +f 2304/1955 1868/1956 2279/1921 +f 594/3104 2299/1948 2303/1954 +f 2304/1955 2303/1954 2299/1948 +f 2217/1839 2306/1958 157/3084 +f 2287/1932 157/3084 2306/1958 +f 2303/1954 2306/1958 594/3104 +f 2305/1957 594/3104 2306/1958 +f 2308/1959 2212/1834 2307/1960 +f 154/3083 2307/1960 2212/1834 +f 594/3104 2305/1957 2300/1953 +f 2308/1959 2300/1953 2305/1957 +f 121/3101 2309/1964 2289/1934 +f 2312/1962 2289/1934 2309/1964 +f 596/3105 2311/1965 2310/1961 +f 2312/1962 2310/1961 2311/1965 +f 119/3103 2301/1952 2314/1968 +f 2315/1967 2314/1968 2301/1952 +f 2310/1961 2315/1967 596/3105 +f 2313/1966 596/3105 2315/1967 +f 2214/1836 2317/1970 154/3083 +f 2307/1960 154/3083 2317/1970 +f 596/3105 2313/1966 2316/1969 +f 2317/1970 2316/1969 2313/1966 +f 2294/1942 2318/1971 155/3082 +f 2208/1830 155/3082 2318/1971 +f 2316/1969 2318/1971 596/3105 +f 2311/1965 596/3105 2318/1971 +f 147/3078 2195/1812 2321/1974 +f 2322/1973 2321/1974 2195/1812 +f 600/3106 2320/1976 2319/1972 +f 2322/1973 2319/1972 2320/1976 +f 2173/1785 2324/1978 146/3073 +f 2189/1806 146/3073 2324/1978 +f 2319/1972 2324/1978 600/3106 +f 2323/1977 600/3106 2324/1978 +f 2327/1980 2168/1780 2325/1982 +f 145/3072 2325/1982 2168/1780 +f 600/3106 2323/1977 2326/1979 +f 2327/1980 2326/1979 2323/1977 +f 2328/1985 2331/1986 162/3107 +f 2330/1987 162/3107 2331/1986 +f 600/3106 2326/1979 2329/1984 +f 2331/1986 2329/1984 2326/1979 +f 160/3108 2332/1989 2333/1990 +f 2334/1988 2333/1990 2332/1989 +f 600/3106 2329/1984 2320/1976 +f 2334/1988 2320/1976 2329/1984 +f 161/3109 2335/1991 2338/1995 +f 2339/1993 2338/1995 2335/1991 +f 2339/1993 2336/1994 2337/1997 +f 605/3110 2337/1997 2336/1994 +f 2343/1999 2342/2002 2340/2001 +f 165/3111 2340/2001 2342/2002 +f 605/3110 2336/1994 2341/1998 +f 2343/1999 2341/1998 2336/1994 +f 2344/2006 2347/2004 166/3112 +f 2346/2007 166/3112 2347/2004 +f 2341/1998 2347/2004 605/3110 +f 2345/2003 605/3110 2347/2004 +f 2349/2010 162/3113 2350/2009 +f 2348/2008 2350/2009 162/3113 +f 2337/1997 605/3110 2350/2009 +f 2345/2003 2350/2009 605/3110 +f 2353/2012 2328/2015 2349/2010 +f 162/3113 2349/2010 2328/2015 +f 608/3114 2352/2013 2351/2011 +f 2353/2012 2351/2011 2352/2013 +f 2354/2018 2356/2019 166/3112 +f 2344/2006 166/3112 2356/2019 +f 2351/2011 2356/2019 608/3114 +f 2355/2017 608/3114 2356/2019 +f 2360/2021 2359/2024 2357/2023 +f 163/3115 2357/2023 2359/2024 +f 608/3114 2355/2017 2358/2020 +f 2360/2021 2358/2020 2355/2017 +f 160/3116 2333/2026 2361/2027 +f 2362/2025 2361/2027 2333/2026 +f 2358/2020 2362/2025 608/3114 +f 2352/2013 608/3114 2362/2025 +f 2366/2029 2365/2030 2359/2024 +f 163/3115 2359/2024 2365/2030 +f 611/3117 2364/2032 2363/2028 +f 2366/2029 2363/2028 2364/2032 +f 2346/2007 2368/2034 166/3112 +f 2354/2018 166/3112 2368/2034 +f 2363/2028 2368/2034 611/3117 +f 2367/2033 611/3117 2368/2034 +f 2369/2038 2371/2036 165/3111 +f 2340/2001 165/3111 2371/2036 +f 611/3117 2367/2033 2370/2035 +f 2371/2036 2370/2035 2367/2033 +f 2373/2041 164/3118 2374/2040 +f 2372/2039 2374/2040 164/3118 +f 2370/2035 2374/2040 611/3117 +f 2364/2032 611/3117 2374/2040 +f 2375/2044 2378/2045 69/3119 +f 1247/2047 69/3119 2378/2045 +f 2377/2048 2378/2045 614/3120 +f 2376/2043 614/3120 2378/2045 +f 131/3051 2051/1639 2380/2051 +f 2381/2050 2380/2051 2051/1639 +f 614/3120 2376/2043 2379/2049 +f 2381/2050 2379/2049 2376/2043 +f 2382/2054 2384/2055 130/3050 +f 2046/1635 130/3050 2384/2055 +f 2379/2049 2384/2055 614/3120 +f 2383/2053 614/3120 2384/2055 +f 76/3121 1254/2057 2385/2058 +f 2386/2056 2385/2058 1254/2057 +f 614/3120 2383/2053 2377/2048 +f 2386/2056 2377/2048 2383/2053 +f 2387/2061 2390/2062 77/3122 +f 1261/2064 77/3122 2390/2062 +f 2388/2060 617/3123 2390/2062 +f 2389/2063 2390/2062 617/3123 +f 142/3054 2093/1690 2392/2068 +f 2393/2067 2392/2068 2093/1690 +f 617/3123 2388/2060 2391/2066 +f 2393/2067 2391/2066 2388/2060 +f 2394/2070 2396/2069 134/3058 +f 2090/1688 134/3058 2396/2069 +f 2391/2066 2396/2069 617/3123 +f 2395/2071 617/3123 2396/2069 +f 2398/2073 2397/2075 1268/2074 +f 80/3124 1268/2074 2397/2075 +f 617/3123 2395/2071 2389/2063 +f 2398/2073 2389/2063 2395/2071 +f 2397/2075 2401/2077 80/3124 +f 1275/2079 80/3124 2401/2077 +f 2399/2076 619/3125 2401/2077 +f 2400/2078 2401/2077 619/3125 +f 134/3058 2078/1673 2394/2070 +f 2403/2081 2394/2070 2078/1673 +f 2403/2081 2402/2082 2399/2076 +f 619/3125 2399/2076 2402/2082 +f 2404/2085 2406/2086 135/3057 +f 2072/1664 135/3057 2406/2086 +f 2405/2084 619/3125 2406/2086 +f 2402/2082 2406/2086 619/3125 +f 2408/2087 2407/2089 1281/2088 +f 81/3126 1281/2088 2407/2089 +f 619/3125 2405/2084 2400/2078 +f 2408/2087 2400/2078 2405/2084 +f 2409/2092 2412/2093 67/3127 +f 1287/2095 67/3127 2412/2093 +f 2411/2096 2412/2093 622/3128 +f 2410/2091 622/3128 2412/2093 +f 2415/2098 2414/2101 2314/2100 +f 119/3014 2314/2100 2414/2101 +f 622/3128 2410/2091 2413/2097 +f 2415/2098 2413/2097 2410/2091 +f 2416/2103 2418/2102 121/3023 +f 2309/2106 121/3023 2418/2102 +f 2417/2104 622/3128 2418/2102 +f 2413/2097 2418/2102 622/3128 +f 2420/2107 2419/2109 1294/2108 +f 68/3129 1294/2108 2419/2109 +f 622/3128 2417/2104 2411/2096 +f 2420/2107 2411/2096 2417/2104 +f 78/3130 2421/2110 1301/2116 +f 2424/2112 1301/2116 2421/2110 +f 2424/2112 2422/2113 2423/2114 +f 625/3131 2423/2114 2422/2113 +f 2250/2119 2427/2120 129/3029 +f 2426/2121 129/3029 2427/2120 +f 2422/2113 2427/2120 625/3131 +f 2425/2118 625/3131 2427/2120 +f 2430/2123 2258/2126 2428/2125 +f 122/3017 2428/2125 2258/2126 +f 625/3131 2425/2118 2429/2122 +f 2430/2123 2429/2122 2425/2118 +f 2431/2129 74/3132 2432/2127 +f 1308/2128 2432/2127 74/3132 +f 2429/2122 2432/2127 625/3131 +f 2423/2114 625/3131 2432/2127 +f 2385/2058 2435/2131 76/3121 +f 1315/2133 76/3121 2435/2131 +f 2434/2132 2435/2131 626/3133 +f 2433/2130 626/3133 2435/2131 +f 130/3050 2063/1654 2382/2054 +f 2437/2135 2382/2054 2063/1654 +f 626/3133 2433/2130 2436/2136 +f 2437/2135 2436/2136 2433/2130 +f 2058/1649 142/3054 2439/2137 +f 2392/2068 2439/2137 142/3054 +f 2436/2136 2439/2137 626/3133 +f 2438/2138 626/3133 2439/2137 +f 2440/2139 2387/2061 1320/2140 +f 77/3122 1320/2140 2387/2061 +f 626/3133 2438/2138 2434/2132 +f 2440/2139 2434/2132 2438/2138 +f 2441/2143 2444/2144 70/3134 +f 1325/2146 70/3134 2444/2144 +f 2443/2147 2444/2144 628/3135 +f 2442/2142 628/3135 2444/2144 +f 143/3067 2156/1762 2446/2150 +f 2447/2148 2446/2150 2156/1762 +f 628/3135 2442/2142 2445/2149 +f 2447/2148 2445/2149 2442/2142 +f 2380/2051 2449/2152 131/3051 +f 2151/1757 131/3051 2449/2152 +f 2445/2149 2449/2152 628/3135 +f 2448/2151 628/3135 2449/2152 +f 69/3119 1331/2153 2375/2044 +f 2450/2154 2375/2044 1331/2153 +f 628/3135 2448/2151 2443/2147 +f 2450/2154 2443/2147 2448/2151 +f 2451/2157 2454/2158 71/2904 +f 1337/746 71/2904 2454/2158 +f 2452/2156 630/3136 2454/2158 +f 2453/2159 2454/2158 630/3136 +f 145/3137 2170/2160 2456/2164 +f 2457/2162 2456/2164 2170/2160 +f 2457/2162 2455/2163 2452/2156 +f 630/3136 2452/2156 2455/2163 +f 2165/2169 143/3138 2459/2165 +f 2446/2166 2459/2165 143/3138 +f 2455/2163 2459/2165 630/3136 +f 2458/2167 630/3136 2459/2165 +f 2460/2170 2441/2171 1343/756 +f 70/2906 1343/756 2441/2171 +f 630/3136 2458/2167 2453/2159 +f 2460/2170 2453/2159 2458/2167 +f 59/2909 2461/2174 1349/766 +f 2464/2175 1349/766 2461/2174 +f 2463/2176 2464/2175 634/3139 +f 2462/2173 634/3139 2464/2175 +f 147/3078 2465/2177 2467/2181 +f 2468/2179 2467/2181 2465/2177 +f 634/3139 2462/2173 2466/2180 +f 2468/2179 2466/2180 2462/2173 +f 2469/2184 2472/2185 148/3140 +f 2471/2186 148/3140 2472/2185 +f 2466/2180 2472/2185 634/3139 +f 2470/2183 634/3139 2472/2185 +f 65/2911 1356/776 2473/2188 +f 2474/2187 2473/2188 1356/776 +f 634/3139 2470/2183 2463/2176 +f 2474/2187 2463/2176 2470/2183 +f 2475/2190 2478/2189 60/2913 +f 1365/785 60/2913 2478/2189 +f 636/3141 2477/2193 2476/2191 +f 2478/2189 2476/2191 2477/2193 +f 2199/1817 2481/2195 151/3079 +f 2480/2196 151/3079 2481/2195 +f 2479/2194 636/3141 2481/2195 +f 2476/2191 2481/2195 636/3141 +f 147/3078 2467/2181 2193/1811 +f 2483/2198 2193/1811 2467/2181 +f 2483/2198 2482/2197 2479/2194 +f 636/3141 2479/2194 2482/2197 +f 2484/2199 2461/2174 1371/794 +f 59/2909 1371/794 2461/2174 +f 2482/2197 2484/2199 636/3141 +f 2477/2193 636/3141 2484/2199 +f 2485/2202 2488/2203 79/3142 +f 1377/2205 79/3142 2488/2203 +f 2486/2201 638/3143 2488/2203 +f 2487/2204 2488/2203 638/3143 +f 128/3030 1934/1501 2490/2209 +f 2491/2208 2490/2209 1934/1501 +f 2491/2208 2489/2207 2486/2201 +f 638/3143 2486/2201 2489/2207 +f 129/3029 2426/2121 1928/1495 +f 2493/2211 1928/1495 2426/2121 +f 2489/2207 2493/2211 638/3143 +f 2492/2210 638/3143 2493/2211 +f 1383/2213 2494/2212 78/3130 +f 2421/2110 78/3130 2494/2212 +f 638/3143 2492/2210 2487/2204 +f 2494/2212 2487/2204 2492/2210 +f 68/3129 2419/2109 1389/2218 +f 2497/2215 1389/2218 2419/2109 +f 640/3144 2496/2216 2495/2214 +f 2497/2215 2495/2214 2496/2216 +f 1907/1467 2499/2220 121/3023 +f 2416/2103 121/3023 2499/2220 +f 2495/2214 2499/2220 640/3144 +f 2498/2219 640/3144 2499/2220 +f 120/3022 2500/2224 1902/1462 +f 2502/2222 1902/1462 2500/2224 +f 640/3144 2498/2219 2501/2221 +f 2502/2222 2501/2221 2498/2219 +f 2503/2227 58/3145 2504/2225 +f 1395/2226 2504/2225 58/3145 +f 2501/2221 2504/2225 640/3144 +f 2496/2216 640/3144 2504/2225 +f 2507/2229 1401/2232 2503/2227 +f 58/3145 2503/2227 1401/2232 +f 642/3146 2506/2230 2505/2228 +f 2507/2229 2505/2228 2506/2230 +f 1919/1482 2509/2234 120/3022 +f 2500/2224 120/3022 2509/2234 +f 2505/2228 2509/2234 642/3146 +f 2508/2233 642/3146 2509/2234 +f 132/3026 2510/2238 1914/1477 +f 2512/2236 1914/1477 2510/2238 +f 642/3146 2508/2233 2511/2235 +f 2512/2236 2511/2235 2508/2233 +f 2513/2241 61/3147 2514/2239 +f 1407/2240 2514/2239 61/3147 +f 2511/2235 2514/2239 642/3146 +f 2506/2230 642/3146 2514/2239 +f 2517/2243 1413/2246 2513/2241 +f 61/3147 2513/2241 1413/2246 +f 644/3148 2516/2244 2515/2242 +f 2517/2243 2515/2242 2516/2244 +f 2149/1751 2519/2247 132/3026 +f 2510/2238 132/3026 2519/2247 +f 2518/2248 644/3148 2519/2247 +f 2515/2242 2519/2247 644/3148 +f 144/3068 2520/2250 2158/1763 +f 2522/2249 2158/1763 2520/2250 +f 2518/2248 2522/2249 644/3148 +f 2521/2251 644/3148 2522/2249 +f 2524/2254 2523/2255 1419/2253 +f 62/3149 1419/2253 2523/2255 +f 644/3148 2521/2251 2516/2244 +f 2524/2254 2516/2244 2521/2251 +f 1425/857 62/2923 2527/2259 +f 2523/2258 2527/2259 62/2923 +f 2526/2260 2527/2259 646/3150 +f 2525/2257 646/3150 2527/2259 +f 144/3069 2177/1788 2520/2263 +f 2529/2262 2520/2263 2177/1788 +f 2529/2262 2528/2261 2525/2257 +f 646/3150 2525/2257 2528/2261 +f 2532/2265 2186/1800 2530/2267 +f 149/3076 2530/2267 2186/1800 +f 2528/2261 2532/2265 646/3150 +f 2531/2264 646/3150 2532/2265 +f 2533/2269 63/2925 2534/2268 +f 1431/866 2534/2268 63/2925 +f 646/3150 2531/2264 2526/2260 +f 2534/2268 2526/2260 2531/2264 +f 2537/2271 1437/875 2533/2269 +f 63/2925 2533/2269 1437/875 +f 648/3151 2536/2272 2535/2270 +f 2537/2271 2535/2270 2536/2272 +f 2187/1802 2539/2274 149/3076 +f 2530/2267 149/3076 2539/2274 +f 2535/2270 2539/2274 648/3151 +f 2538/2273 648/3151 2539/2274 +f 150/3075 2540/2278 2182/1798 +f 2542/2276 2182/1798 2540/2278 +f 648/3151 2538/2273 2541/2275 +f 2542/2276 2541/2275 2538/2273 +f 2543/2280 64/2927 2544/2279 +f 1443/881 2544/2279 64/2927 +f 2541/2275 2544/2279 648/3151 +f 2536/2272 648/3151 2544/2279 +f 2547/2282 1449/887 2543/2280 +f 64/2927 2543/2280 1449/887 +f 2545/2281 649/3152 2547/2282 +f 2546/2283 2547/2282 649/3152 +f 150/3075 2201/1819 2540/2278 +f 2549/2285 2540/2278 2201/1819 +f 2549/2285 2548/2284 2545/2281 +f 649/3152 2545/2281 2548/2284 +f 2480/2196 2551/2287 151/3079 +f 2197/1816 151/3079 2551/2287 +f 2548/2284 2551/2287 649/3152 +f 2550/2286 649/3152 2551/2287 +f 2552/2288 2475/2190 1454/893 +f 60/2913 1454/893 2475/2190 +f 649/3152 2550/2286 2546/2283 +f 2552/2288 2546/2283 2550/2286 +f 1461/899 2555/2289 71/2904 +f 2451/2157 71/2904 2555/2289 +f 651/3153 2554/2291 2553/2290 +f 2555/2289 2553/2290 2554/2291 +f 2558/2293 1470/916 2556/2295 +f 72/2932 2556/2295 1470/916 +f 651/3153 2553/2290 2557/2292 +f 2558/2293 2557/2292 2553/2290 +f 2338/2298 2561/2299 161/3154 +f 2560/2300 161/3154 2561/2299 +f 651/3153 2557/2292 2559/2297 +f 2561/2299 2559/2297 2557/2292 +f 162/3155 2330/2304 2348/2305 +f 2563/2302 2348/2305 2330/2304 +f 651/3153 2559/2297 2562/2301 +f 2563/2302 2562/2301 2559/2297 +f 2456/2164 2564/2306 145/3137 +f 2325/2307 145/3137 2564/2306 +f 651/3153 2562/2301 2554/2291 +f 2564/2306 2554/2291 2562/2301 +f 147/3078 2321/1974 2465/2177 +f 2567/2308 2465/2177 2321/1974 +f 2567/2308 2565/2309 2566/2310 +f 653/3156 2566/2310 2565/2309 +f 2568/2313 2570/2314 160/3108 +f 2332/1989 160/3108 2570/2314 +f 2565/2309 2570/2314 653/3156 +f 2569/2312 653/3156 2570/2314 +f 148/3140 2471/2186 2571/2316 +f 2572/2315 2571/2316 2471/2186 +f 2572/2315 2566/2310 2569/2312 +f 653/3156 2569/2312 2566/2310 +f 2577/2320 2576/2322 2573/2319 +f 170/3157 2573/2319 2576/2322 +f 2575/2323 2577/2320 658/3158 +f 2574/2318 658/3158 2577/2320 +f 2581/2325 2580/2328 2578/2327 +f 167/3159 2578/2327 2580/2328 +f 658/3158 2574/2318 2579/2324 +f 2581/2325 2579/2324 2574/2318 +f 2582/2331 2585/2332 169/3160 +f 2584/2333 169/3160 2585/2332 +f 2579/2324 2585/2332 658/3158 +f 2583/2330 658/3158 2585/2332 +f 2588/2334 2587/2336 2586/2335 +f 168/3161 2586/2335 2587/2336 +f 658/3158 2583/2330 2575/2323 +f 2588/2334 2575/2323 2583/2330 +f 2589/2339 2593/2340 177/3162 +f 2592/2342 177/3162 2593/2340 +f 2590/2338 663/3163 2593/2340 +f 2591/2341 2593/2340 663/3163 +f 178/3164 2594/2346 2596/2348 +f 2597/2347 2596/2348 2594/2346 +f 2597/2347 2595/2345 2590/2338 +f 663/3163 2590/2338 2595/2345 +f 2601/2349 2600/2353 2598/2350 +f 173/3165 2598/2350 2600/2353 +f 2595/2345 2601/2349 663/3163 +f 2599/2351 663/3163 2601/2349 +f 2604/2354 2603/2356 2602/2355 +f 174/3166 2602/2355 2603/2356 +f 663/3163 2599/2351 2591/2341 +f 2604/2354 2591/2341 2599/2351 +f 178/3164 2605/2360 2608/2361 +f 2609/2358 2608/2361 2605/2360 +f 2609/2358 2606/2357 2607/2363 +f 668/3167 2607/2363 2606/2357 +f 2612/2368 179/3168 2613/2364 +f 2610/2365 2613/2364 179/3168 +f 2606/2357 2613/2364 668/3167 +f 2611/2366 668/3167 2613/2364 +f 2617/2370 2616/2373 2614/2372 +f 172/3169 2614/2372 2616/2373 +f 668/3167 2611/2366 2615/2369 +f 2617/2370 2615/2369 2611/2366 +f 2620/2374 2619/2376 2618/2375 +f 171/3170 2618/2375 2619/2376 +f 2607/2363 668/3167 2620/2374 +f 2615/2369 2620/2374 668/3167 +f 174/3166 2603/2356 2623/2380 +f 2624/2377 2623/2380 2603/2356 +f 2622/2381 2624/2377 672/3171 +f 2621/2378 672/3171 2624/2377 +f 2627/2383 2598/2350 2625/2385 +f 173/3165 2625/2385 2598/2350 +f 672/3171 2621/2378 2626/2382 +f 2627/2383 2626/2382 2621/2378 +f 2628/2388 2631/2389 176/3172 +f 2630/2390 176/3172 2631/2389 +f 2629/2387 672/3171 2631/2389 +f 2626/2382 2631/2389 672/3171 +f 2632/2391 2634/2392 175/3173 +f 2633/2393 175/3173 2634/2392 +f 2622/2381 672/3171 2634/2392 +f 2629/2387 2634/2392 672/3171 +f 2637/2397 175/3173 2638/2394 +f 2633/2393 2638/2394 175/3173 +f 2636/2398 2638/2394 675/3174 +f 2635/2395 675/3174 2638/2394 +f 2641/2399 2628/2388 2639/2400 +f 176/3172 2639/2400 2628/2388 +f 2635/2395 2641/2399 675/3174 +f 2640/2401 675/3174 2641/2399 +f 2619/2376 2644/2403 171/3170 +f 2643/2405 171/3170 2644/2403 +f 675/3174 2640/2401 2642/2404 +f 2644/2403 2642/2404 2640/2401 +f 2614/2372 172/3169 2646/2406 +f 2645/2407 2646/2406 172/3169 +f 2642/2404 2646/2406 675/3174 +f 2636/2398 675/3174 2646/2406 +f 177/3162 2647/2410 2589/2339 +f 2650/2411 2589/2339 2647/2410 +f 678/3175 2649/2412 2648/2409 +f 2650/2411 2648/2409 2649/2412 +f 180/3176 2651/2416 2653/2417 +f 2654/2414 2653/2417 2651/2416 +f 678/3175 2648/2409 2652/2413 +f 2654/2414 2652/2413 2648/2409 +f 2656/2420 179/3168 2657/2418 +f 2612/2368 2657/2418 179/3168 +f 2652/2413 2657/2418 678/3175 +f 2655/2419 678/3175 2657/2418 +f 178/3164 2596/2348 2605/2360 +f 2658/2421 2605/2360 2596/2348 +f 2655/2419 2658/2421 678/3175 +f 2649/2412 678/3175 2658/2421 +f 2662/2423 2647/2428 2659/2425 +f 177/3177 2659/2425 2647/2428 +f 681/3178 2661/2426 2660/2422 +f 2662/2423 2660/2422 2661/2426 +f 160/3116 2361/2027 2664/2431 +f 2665/2430 2664/2431 2361/2027 +f 681/3178 2660/2422 2663/2429 +f 2665/2430 2663/2429 2660/2422 +f 2365/2030 2667/2433 163/3115 +f 2357/2023 163/3115 2667/2433 +f 2663/2429 2667/2433 681/3178 +f 2666/2432 681/3178 2667/2433 +f 164/3118 2668/2437 2372/2039 +f 2670/2435 2372/2039 2668/2437 +f 681/3178 2666/2432 2669/2434 +f 2670/2435 2669/2434 2666/2432 +f 2671/2440 180/3179 2672/2439 +f 2653/2438 2672/2439 180/3179 +f 681/3178 2669/2434 2661/2426 +f 2672/2439 2661/2426 2669/2434 +f 179/3180 2656/2441 2675/2445 +f 2676/2443 2675/2445 2656/2441 +f 2676/2443 2673/2444 2674/2447 +f 683/3181 2674/2447 2673/2444 +f 2671/2440 2678/2449 180/3179 +f 2651/2450 180/3179 2678/2449 +f 2677/2448 683/3181 2678/2449 +f 2673/2444 2678/2449 683/3181 +f 2373/2041 2680/2452 164/3118 +f 2668/2437 164/3118 2680/2452 +f 683/3181 2677/2448 2679/2451 +f 2680/2452 2679/2451 2677/2448 +f 2342/2002 2682/2453 165/3111 +f 2369/2038 165/3111 2682/2453 +f 683/3181 2679/2451 2681/2454 +f 2682/2453 2681/2454 2679/2451 +f 2683/2456 2684/2455 161/3109 +f 2335/1991 161/3109 2684/2455 +f 2681/2454 2684/2455 683/3181 +f 2674/2447 683/3181 2684/2455 +f 2616/2459 2688/2460 172/3182 +f 2687/2462 172/3182 2688/2460 +f 685/3183 2686/2463 2685/2458 +f 2688/2460 2685/2458 2686/2463 +f 179/3184 2675/2467 2610/2468 +f 2690/2465 2610/2468 2675/2467 +f 2690/2465 2689/2464 2685/2458 +f 685/3183 2685/2458 2689/2464 +f 2692/2470 2683/2471 2560/2300 +f 161/3154 2560/2300 2683/2471 +f 685/3183 2689/2464 2691/2469 +f 2692/2470 2691/2469 2689/2464 +f 72/2932 1602/1082 2556/2295 +f 2694/2473 2556/2295 1602/1082 +f 685/3183 2691/2469 2693/2472 +f 2694/2473 2693/2472 2691/2469 +f 2696/2474 1597/1077 2695/2475 +f 73/2961 2695/2475 1597/1077 +f 685/3183 2693/2472 2686/2463 +f 2696/2474 2686/2463 2693/2472 +f 1610/1096 2700/2477 66/2963 +f 2699/2478 66/2963 2700/2477 +f 688/3185 2698/2480 2697/2476 +f 2700/2477 2697/2476 2698/2480 +f 2473/2188 2702/2482 65/2911 +f 1621/1110 65/2911 2702/2482 +f 2697/2476 2702/2482 688/3185 +f 2701/2481 688/3185 2702/2482 +f 148/3140 2703/2486 2469/2184 +f 2705/2484 2469/2184 2703/2486 +f 688/3185 2701/2481 2704/2483 +f 2705/2484 2704/2483 2701/2481 +f 2707/2491 174/3186 2708/2488 +f 2623/2490 2708/2488 174/3186 +f 688/3185 2704/2483 2706/2487 +f 2708/2488 2706/2487 2704/2483 +f 2710/2492 2632/2494 2709/2493 +f 175/3187 2709/2493 2632/2494 +f 688/3185 2706/2487 2698/2480 +f 2710/2492 2698/2480 2706/2487 +f 73/2961 1625/1114 2695/2475 +f 2713/2495 2695/2475 1625/1114 +f 2713/2495 2711/2496 2712/2497 +f 689/3188 2712/2497 2711/2496 +f 66/2969 2699/2500 1631/1127 +f 2715/2501 1631/1127 2699/2500 +f 2711/2496 2715/2501 689/3188 +f 2714/2499 689/3188 2715/2501 +f 2717/2503 2709/2506 2637/2505 +f 175/3189 2637/2505 2709/2506 +f 689/3188 2714/2499 2716/2502 +f 2717/2503 2716/2502 2714/2499 +f 172/3182 2687/2462 2645/2508 +f 2718/2507 2645/2508 2687/2462 +f 689/3188 2716/2502 2712/2497 +f 2718/2507 2712/2497 2716/2502 +f 2571/2316 2721/2510 148/3140 +f 2703/2486 148/3140 2721/2510 +f 2720/2511 2721/2510 690/3190 +f 2719/2509 690/3190 2721/2510 +f 160/3108 2664/2512 2568/2313 +f 2723/2514 2568/2313 2664/2512 +f 690/3190 2719/2509 2722/2515 +f 2723/2514 2722/2515 2719/2509 +f 177/3191 2592/2519 2659/2520 +f 2725/2517 2659/2520 2592/2519 +f 690/3190 2722/2515 2724/2516 +f 2725/2517 2724/2516 2722/2515 +f 2726/2521 2602/2522 2707/2491 +f 174/3186 2707/2491 2602/2522 +f 690/3190 2724/2516 2720/2511 +f 2726/2521 2720/2511 2724/2516 +f 2600/2353 2730/2524 173/3165 +f 2729/2526 173/3165 2730/2524 +f 2727/2523 693/3192 2730/2524 +f 2728/2525 2730/2524 693/3192 +f 178/3164 2731/2528 2594/2346 +f 2733/2530 2594/2346 2731/2528 +f 693/3192 2727/2523 2732/2531 +f 2733/2530 2732/2531 2727/2523 +f 2576/2322 2736/2533 170/3157 +f 2735/2534 170/3157 2736/2533 +f 2732/2531 2736/2533 693/3192 +f 2734/2532 693/3192 2736/2533 +f 2737/2535 2738/2536 168/3161 +f 2586/2335 168/3161 2738/2536 +f 2728/2525 693/3192 2738/2536 +f 2734/2532 2738/2536 693/3192 +f 176/3172 2630/2390 2741/2539 +f 2742/2538 2741/2539 2630/2390 +f 2742/2538 2739/2537 2740/2541 +f 695/3193 2740/2541 2739/2537 +f 2625/2385 173/3165 2744/2542 +f 2729/2526 2744/2542 173/3165 +f 2744/2542 2743/2543 2739/2537 +f 695/3193 2739/2537 2743/2543 +f 2587/2336 2746/2545 168/3161 +f 2737/2535 168/3161 2746/2545 +f 2743/2543 2746/2545 695/3193 +f 2745/2544 695/3193 2746/2545 +f 2747/2546 2748/2547 169/3160 +f 2582/2331 169/3160 2748/2547 +f 2740/2541 695/3193 2748/2547 +f 2745/2544 2748/2547 695/3193 +f 171/3170 2643/2405 2751/2551 +f 2752/2549 2751/2551 2643/2405 +f 2749/2548 697/3194 2752/2549 +f 2750/2550 2752/2549 697/3194 +f 176/3172 2741/2539 2639/2400 +f 2754/2553 2639/2400 2741/2539 +f 2754/2553 2753/2554 2749/2548 +f 697/3194 2749/2548 2753/2554 +f 2584/2333 2756/2556 169/3160 +f 2747/2546 169/3160 2756/2556 +f 2753/2554 2756/2556 697/3194 +f 2755/2555 697/3194 2756/2556 +f 2757/2557 2758/2558 167/3159 +f 2578/2327 167/3159 2758/2558 +f 2750/2550 697/3194 2758/2558 +f 2755/2555 2758/2558 697/3194 +f 178/3164 2608/2361 2731/2528 +f 2761/2560 2731/2528 2608/2361 +f 698/3195 2760/2561 2759/2559 +f 2761/2560 2759/2559 2760/2561 +f 2751/2551 2763/2562 171/3170 +f 2618/2375 171/3170 2763/2562 +f 2759/2559 2763/2562 698/3195 +f 2762/2563 698/3195 2763/2562 +f 2580/2328 2765/2565 167/3159 +f 2757/2557 167/3159 2765/2565 +f 2762/2563 2765/2565 698/3195 +f 2764/2564 698/3195 2765/2565 +f 2735/2534 2766/2566 170/3157 +f 2573/2319 170/3157 2766/2566 +f 2764/2564 2766/2566 698/3195 +f 2760/2561 698/3195 2766/2566 +f 123/3196 2767/2567 1883/2573 +f 2770/2569 1883/2573 2767/2567 +f 2770/2569 2768/2570 2769/2571 +f 702/3197 2769/2571 2768/2570 +f 2773/2578 183/3198 2774/2574 +f 2771/2575 2774/2574 183/3198 +f 2768/2570 2774/2574 702/3197 +f 2772/2576 702/3197 2774/2574 +f 2777/2583 182/3199 2778/2579 +f 2775/2580 2778/2579 182/3199 +f 2772/2576 2778/2579 702/3197 +f 2776/2581 702/3197 2778/2579 +f 2780/2584 2779/2586 1888/2585 +f 122/3200 1888/2585 2779/2586 +f 702/3197 2776/2581 2769/2571 +f 2780/2584 2769/2571 2776/2581 +f 2779/2586 2783/2588 122/3200 +f 2428/2590 122/3200 2783/2588 +f 2782/2591 2783/2588 704/3201 +f 2781/2587 704/3201 2783/2588 +f 182/3199 2784/2595 2775/2580 +f 2786/2593 2775/2580 2784/2595 +f 704/3201 2781/2587 2785/2592 +f 2786/2593 2785/2592 2781/2587 +f 1703/1221 2789/2597 100/2983 +f 2788/2598 100/2983 2789/2597 +f 2785/2592 2789/2597 704/3201 +f 2787/2596 704/3201 2789/2597 +f 2790/2599 1698/1215 2431/2600 +f 74/2982 2431/2600 1698/1215 +f 704/3201 2787/2596 2782/2591 +f 2790/2599 2782/2591 2787/2596 +f 67/2984 1709/1228 2409/2603 +f 2793/2602 2409/2603 1709/1228 +f 707/3202 2792/2605 2791/2601 +f 2793/2602 2791/2601 2792/2605 +f 2794/2608 2796/2609 99/2988 +f 1718/1241 99/2988 2796/2609 +f 2791/2601 2796/2609 707/3202 +f 2795/2607 707/3202 2796/2609 +f 181/3203 2797/2610 2799/2614 +f 2800/2612 2799/2614 2797/2610 +f 707/3202 2795/2607 2798/2613 +f 2800/2612 2798/2613 2795/2607 +f 2801/2617 119/3204 2802/2616 +f 2414/2615 2802/2616 119/3204 +f 2798/2613 2802/2616 707/3202 +f 2792/2605 707/3202 2802/2616 +f 119/3204 2801/2617 1872/2621 +f 2805/2619 1872/2621 2801/2617 +f 2804/2620 2805/2619 709/3205 +f 2803/2618 709/3205 2805/2619 +f 2806/2626 2808/2624 181/3203 +f 2797/2610 181/3203 2808/2624 +f 709/3205 2803/2618 2807/2623 +f 2808/2624 2807/2623 2803/2618 +f 2773/2578 2811/2628 183/3198 +f 2810/2629 183/3198 2811/2628 +f 2809/2627 709/3205 2811/2628 +f 2807/2623 2811/2628 709/3205 +f 1877/2631 2812/2630 123/3196 +f 2767/2567 123/3196 2812/2630 +f 2812/2630 2804/2620 2809/2627 +f 709/3205 2809/2627 2804/2620 +f 2815/2633 1731/1260 2788/2598 +f 100/2983 2788/2598 1731/1260 +f 711/3206 2814/2634 2813/2632 +f 2815/2633 2813/2632 2814/2634 +f 2777/2583 2817/2636 182/3199 +f 2784/2595 182/3199 2817/2636 +f 2813/2632 2817/2636 711/3206 +f 2816/2635 711/3206 2817/2636 +f 183/3198 2818/2640 2771/2575 +f 2820/2638 2771/2575 2818/2640 +f 711/3206 2816/2635 2819/2637 +f 2820/2638 2819/2637 2816/2635 +f 75/2991 1737/1267 2821/2642 +f 2822/2641 2821/2642 1737/1267 +f 2819/2637 2822/2641 711/3206 +f 2814/2634 711/3206 2822/2641 +f 75/2991 2821/2642 1743/1273 +f 2825/2644 1743/1273 2821/2642 +f 2824/2645 2825/2644 712/3207 +f 2823/2643 712/3207 2825/2644 +f 183/3198 2810/2629 2818/2640 +f 2827/2647 2818/2640 2810/2629 +f 712/3207 2823/2643 2826/2646 +f 2827/2647 2826/2646 2823/2643 +f 2806/2626 181/3203 2829/2649 +f 2799/2614 2829/2649 181/3203 +f 2826/2646 2829/2649 712/3207 +f 2828/2648 712/3207 2829/2649 +f 2830/2650 2794/2608 1748/1279 +f 99/2988 1748/1279 2794/2608 +f 712/3207 2828/2648 2824/2645 +f 2830/2650 2824/2645 2828/2648 +f 2835/2652 2834/2655 2831/2654 +f 184/3208 2831/2654 2834/2655 +f 2835/2652 2832/2651 2833/2657 +f 716/3209 2833/2657 2832/2651 +f 2838/2662 186/3210 2839/2660 +f 2836/2658 2839/2660 186/3210 +f 2832/2651 2839/2660 716/3209 +f 2837/2661 716/3209 2839/2660 +f 2840/2663 2842/2664 185/3211 +f 2841/2665 185/3211 2842/2664 +f 2837/2661 2842/2664 716/3209 +f 2833/2657 716/3209 2842/2664 +f 2843/2669 2846/2667 184/3208 +f 2831/2654 184/3208 2846/2667 +f 719/3212 2845/2670 2844/2666 +f 2846/2667 2844/2666 2845/2670 +f 2006/1585 2849/2672 117/3042 +f 2848/2673 117/3042 2849/2672 +f 719/3212 2844/2666 2847/2671 +f 2849/2672 2847/2671 2844/2666 +f 136/3031 1937/1504 2015/1596 +f 2851/2675 2015/1596 1937/1504 +f 719/3212 2847/2671 2850/2674 +f 2851/2675 2850/2674 2847/2671 +f 2852/2678 2854/2679 128/3030 +f 1932/1500 128/3030 2854/2679 +f 2850/2674 2854/2679 719/3212 +f 2853/2677 719/3212 2854/2679 +f 186/3210 2838/2662 2855/2681 +f 2856/2680 2855/2681 2838/2662 +f 719/3212 2853/2677 2845/2670 +f 2856/2680 2845/2670 2853/2677 +f 2834/2655 2859/2683 184/3208 +f 2843/2669 184/3208 2859/2683 +f 721/3213 2858/2684 2857/2682 +f 2859/2683 2857/2682 2858/2684 +f 185/3211 2860/2688 2840/2663 +f 2862/2686 2840/2663 2860/2688 +f 721/3213 2857/2682 2861/2685 +f 2862/2686 2861/2685 2857/2682 +f 135/3057 2074/1668 2864/2691 +f 2865/2690 2864/2691 2074/1668 +f 721/3213 2861/2685 2863/2689 +f 2865/2690 2863/2689 2861/2685 +f 2115/1716 2867/2693 113/3055 +f 2067/1659 113/3055 2867/2693 +f 721/3213 2863/2689 2866/2692 +f 2867/2693 2866/2692 2863/2689 +f 117/3042 2848/2673 2111/1711 +f 2868/2694 2111/1711 2848/2673 +f 721/3213 2866/2692 2858/2684 +f 2868/2694 2858/2684 2866/2692 +f 2872/2696 2871/2699 1794/2698 +f 104/3214 1794/2698 2871/2699 +f 723/3215 2870/2701 2869/2695 +f 2872/2696 2869/2695 2870/2701 +f 2407/2089 2874/2703 81/3126 +f 1801/2704 81/3126 2874/2703 +f 2873/2702 723/3215 2874/2703 +f 2869/2695 2874/2703 723/3215 +f 2864/2691 2876/2705 135/3057 +f 2404/2085 135/3057 2876/2705 +f 2876/2705 2875/2706 2873/2702 +f 723/3215 2873/2702 2875/2706 +f 2877/2707 2878/2708 185/3211 +f 2860/2688 185/3211 2878/2708 +f 2875/2706 2878/2708 723/3215 +f 2870/2701 723/3215 2878/2708 +f 1805/2711 2881/2712 79/3142 +f 2485/2202 79/3142 2881/2712 +f 2880/2713 2881/2712 725/3216 +f 2879/2710 725/3216 2881/2712 +f 2884/2715 1812/2718 2882/2717 +f 105/3217 2882/2717 1812/2718 +f 725/3216 2879/2710 2883/2714 +f 2884/2715 2883/2714 2879/2710 +f 2855/2681 2887/2720 186/3210 +f 2886/2721 186/3210 2887/2720 +f 2883/2714 2887/2720 725/3216 +f 2885/2719 725/3216 2887/2720 +f 128/3030 2490/2209 2852/2678 +f 2888/2722 2852/2678 2490/2209 +f 725/3216 2885/2719 2880/2713 +f 2888/2722 2880/2713 2885/2719 +f 2836/2658 186/3210 2892/2726 +f 2889/2725 2892/2726 186/3210 +f 2891/2727 2892/2726 729/3218 +f 2890/2724 729/3218 2892/2726 +f 2896/2729 2895/2732 2893/2731 +f 188/3219 2893/2731 2895/2732 +f 2896/2729 2894/2728 2890/2724 +f 729/3218 2890/2724 2894/2728 +f 2900/2734 2899/2737 2897/2736 +f 187/3220 2897/2736 2899/2737 +f 729/3218 2894/2728 2898/2733 +f 2900/2734 2898/2733 2894/2728 +f 185/3211 2841/2665 2901/2739 +f 2902/2738 2901/2739 2841/2665 +f 2902/2738 2891/2727 2898/2733 +f 729/3218 2898/2733 2891/2727 +f 185/3211 2901/2739 2877/2707 +f 2905/2740 2877/2707 2901/2739 +f 731/3221 2904/2742 2903/2741 +f 2905/2740 2903/2741 2904/2742 +f 2906/2745 2908/2746 187/3220 +f 2897/2736 187/3220 2908/2746 +f 2903/2741 2908/2746 731/3221 +f 2907/2744 731/3221 2908/2746 +f 108/3222 1837/2750 2910/2751 +f 2911/2748 2910/2751 1837/2750 +f 731/3221 2907/2744 2909/2747 +f 2911/2748 2909/2747 2907/2744 +f 2871/2699 2912/2752 104/3214 +f 1832/2753 104/3214 2912/2752 +f 2909/2747 2912/2752 731/3221 +f 2904/2742 731/3221 2912/2752 +f 1843/2756 2915/2757 105/3217 +f 2882/2717 105/3217 2915/2757 +f 2913/2755 733/3223 2915/2757 +f 2914/2758 2915/2757 733/3223 +f 109/3224 2916/2762 1850/2763 +f 2918/2760 1850/2763 2916/2762 +f 2918/2760 2917/2759 2913/2755 +f 733/3223 2913/2755 2917/2759 +f 2920/2766 188/3219 2921/2764 +f 2895/2732 2921/2764 188/3219 +f 2917/2759 2921/2764 733/3223 +f 2919/2765 733/3223 2921/2764 +f 2922/2767 2889/2725 2886/2721 +f 186/3210 2886/2721 2889/2725 +f 733/3223 2919/2765 2914/2758 +f 2922/2767 2914/2758 2919/2765 +f 2925/2769 2906/2745 2899/2737 +f 187/3220 2899/2737 2906/2745 +f 734/3225 2924/2770 2923/2768 +f 2925/2769 2923/2768 2924/2770 +f 2927/2772 2893/2731 2920/2766 +f 188/3219 2920/2766 2893/2731 +f 734/3225 2923/2768 2926/2771 +f 2927/2772 2926/2771 2923/2768 +f 1860/2775 2929/2776 109/3224 +f 2916/2762 109/3224 2929/2776 +f 2926/2771 2929/2776 734/3225 +f 2928/2774 734/3225 2929/2776 +f 2910/2751 2930/2777 108/3222 +f 1856/2778 108/3222 2930/2777 +f 2928/2774 2930/2777 734/3225 +f 2924/2770 734/3225 2930/2777 diff --git a/model/plugin/sdf/asset/spot.png b/model/plugin/sdf/asset/spot.png new file mode 100644 index 00000000..63094487 Binary files /dev/null and b/model/plugin/sdf/asset/spot.png differ diff --git a/model/plugin/sdf/cow.xml b/model/plugin/sdf/cow.xml new file mode 100644 index 00000000..0e9528a2 --- /dev/null +++ b/model/plugin/sdf/cow.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugin/sdf/CMakeLists.txt b/plugin/sdf/CMakeLists.txt index a87cd067..3e216fc4 100644 --- a/plugin/sdf/CMakeLists.txt +++ b/plugin/sdf/CMakeLists.txt @@ -28,6 +28,8 @@ set(MUJOCO_SDF_SRCS register.cc nut.cc nut.h + sdflib.cc + sdflib.h torus.cc torus.h ) @@ -35,7 +37,7 @@ set(MUJOCO_SDF_SRCS add_library(sdf SHARED) target_sources(sdf PRIVATE ${MUJOCO_SDF_SRCS}) target_include_directories(sdf PRIVATE ${MUJOCO_SDF_INCLUDE}) -target_link_libraries(sdf PRIVATE mujoco) +target_link_libraries(sdf PRIVATE mujoco SdfLib) target_compile_options( sdf PRIVATE ${AVX_COMPILE_OPTIONS} diff --git a/plugin/sdf/register.cc b/plugin/sdf/register.cc index 4e727e38..4b453e18 100644 --- a/plugin/sdf/register.cc +++ b/plugin/sdf/register.cc @@ -17,6 +17,7 @@ #include "gear.h" #include "nut.h" #include "torus.h" +#include "sdflib.h" namespace mujoco::plugin::sdf { @@ -26,6 +27,7 @@ mjPLUGIN_LIB_INIT { Gear::RegisterPlugin(); Nut::RegisterPlugin(); Torus::RegisterPlugin(); + SdfLib::RegisterPlugin(); } } // namespace mujoco::plugin::sdf diff --git a/plugin/sdf/sdflib.cc b/plugin/sdf/sdflib.cc new file mode 100644 index 00000000..62628d13 --- /dev/null +++ b/plugin/sdf/sdflib.cc @@ -0,0 +1,161 @@ +// Copyright 2022 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include + +#include +#include +#include +#include +#include "sdf.h" +#include "sdflib.h" + +namespace mujoco::plugin::sdf { +namespace { + +inline unsigned int* MakeNonConstUnsigned(const int* ptr) { + return reinterpret_cast(const_cast(ptr)); +} + +} // namespace + +// factory function +std::optional SdfLib::Create(const mjModel* m, mjData* d, + int instance) { + int geomid = 0; + for (int i = 0; i < m->ngeom; ++i) { + if (m->geom_plugin[i] == instance) { + geomid = i; + break; + } + } + int meshid = m->geom_dataid[geomid]; + int nvert = m->mesh_vertnum[meshid]; + int nface = m->mesh_facenum[meshid]; + int* indices = m->mesh_face + 3*m->mesh_faceadr[meshid]; + float* verts = m->mesh_vert + 3*m->mesh_vertadr[meshid]; + std::vector vertices(nvert); + for (int i = 0; i < nvert; i++) { + mjtNum vert[3] = {verts[3*i+0], verts[3*i+1], verts[3*i+2]}; + mju_rotVecQuat(vert, vert, m->mesh_quat + 4*meshid); + mju_addTo3(vert, m->mesh_pos + 3*meshid); + vertices[i].x = vert[0]; + vertices[i].y = vert[1]; + vertices[i].z = vert[2]; + } + sdflib::Mesh mesh(vertices.data(), nvert, + MakeNonConstUnsigned(indices), 3*nface); + mesh.computeBoundingBox(); + return SdfLib(std::move(mesh)); +} + +// plugin constructor +SdfLib::SdfLib(sdflib::Mesh&& mesh) { + sdf_func_ = + sdflib::OctreeSdf(mesh, mesh.getBoundingBox(), 8, 3, 1e-3, + sdflib::OctreeSdf::InitAlgorithm::CONTINUITY, 1); +} + +// plugin computation +void SdfLib::Compute(const mjModel* m, mjData* d, int instance) { + visualizer_.Next(); +} + +// plugin reset +void SdfLib::Reset() { + visualizer_.Reset(); +} + +// plugin visualization +void SdfLib::Visualize(const mjModel* m, mjData* d, const mjvOption* opt, + mjvScene* scn, int instance) { + visualizer_.Visualize(m, d, opt, scn, instance); +} + +// sdf +mjtNum SdfLib::Distance(const mjtNum p[3]) const { + glm::vec3 point(p[0], p[1], p[2]); + return sdf_func_.getDistance(point); +} + +// gradient of sdf +void SdfLib::Gradient(mjtNum grad[3], const mjtNum point[3]) const { + glm::vec3 gradient; + glm::vec3 p(point[0], point[1], point[2]); + sdf_func_.getDistance(p, gradient); + grad[0] = gradient[0]; + grad[1] = gradient[1]; + grad[2] = gradient[2]; +} + +// plugin registration +void SdfLib::RegisterPlugin() { + mjpPlugin plugin; + mjp_defaultPlugin(&plugin); + + plugin.name = "mujoco.sdf.sdflib"; + plugin.capabilityflags |= mjPLUGIN_SDF; + + const char* attributes[] = {"aabb"}; + plugin.nattribute = sizeof(attributes) / sizeof(attributes[0]); + plugin.attributes = attributes; + plugin.nstate = +[](const mjModel* m, int instance) { return 0; }; + + plugin.init = +[](const mjModel* m, mjData* d, int instance) { + auto sdf_or_null = SdfLib::Create(m, d, instance); + if (!sdf_or_null.has_value()) { + return -1; + } + d->plugin_data[instance] = reinterpret_cast( + new SdfLib(std::move(*sdf_or_null))); + return 0; + }; + plugin.destroy = +[](mjData* d, int instance) { + delete reinterpret_cast(d->plugin_data[instance]); + d->plugin_data[instance] = 0; + }; + plugin.reset = +[](const mjModel* m, double* plugin_state, void* plugin_data, + int instance) { + auto sdf = reinterpret_cast(plugin_data); + sdf->Reset(); + }; + plugin.visualize = +[](const mjModel* m, mjData* d, const mjvOption* opt, + mjvScene* scn, int instance) { + auto* sdf = reinterpret_cast(d->plugin_data[instance]); + sdf->Visualize(m, d, opt, scn, instance); + }; + plugin.compute = + +[](const mjModel* m, mjData* d, int instance, int capability_bit) { + auto* sdf = reinterpret_cast(d->plugin_data[instance]); + sdf->Compute(m, d, instance); + }; + plugin.sdf_distance = + +[](const mjtNum point[3], const mjData* d, int instance) { + auto* sdf = reinterpret_cast(d->plugin_data[instance]); + sdf->visualizer_.AddPoint(point); + return sdf->Distance(point); + }; + plugin.sdf_gradient = +[](mjtNum gradient[3], const mjtNum point[3], + const mjData* d, int instance) { + auto* sdf = reinterpret_cast(d->plugin_data[instance]); + sdf->Gradient(gradient, point); + }; + + mjp_registerPlugin(&plugin); +} + +} // namespace mujoco::plugin::sdf diff --git a/plugin/sdf/sdflib.h b/plugin/sdf/sdflib.h new file mode 100644 index 00000000..93e92a4d --- /dev/null +++ b/plugin/sdf/sdflib.h @@ -0,0 +1,54 @@ +// Copyright 2022 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MUJOCO_PLUGIN_SDF_SDFLIB_H_ +#define MUJOCO_PLUGIN_SDF_SDFLIB_H_ + +#include + +#include +#include +#include +#include +#include +#include +#include "sdf.h" + +namespace mujoco::plugin::sdf { +class SdfLib { + public: + // Creates a new SdfLib instance or returns null on failure. + static std::optional Create(const mjModel* m, mjData* d, + int instance); + SdfLib(SdfLib&&) = default; + ~SdfLib() = default; + + void Reset(); + void Visualize(const mjModel* m, mjData* d, const mjvOption* opt, + mjvScene* scn, int instance); + void Compute(const mjModel* m, mjData* d, int instance); + mjtNum Distance(const mjtNum point[3]) const; + void Gradient(mjtNum grad[3], const mjtNum point[3]) const; + + static void RegisterPlugin(); + + private: + SdfLib(sdflib::Mesh&& mesh); + SdfVisualizer visualizer_; + sdflib::OctreeSdf sdf_func_; +}; + +} // namespace mujoco::plugin::sdf + +#endif // MUJOCO_PLUGIN_SDF_SDFLIB_H_ diff --git a/python/mujoco/indexer_xmacro.h b/python/mujoco/indexer_xmacro.h index bc462853..9e4c32a7 100644 --- a/python/mujoco/indexer_xmacro.h +++ b/python/mujoco/indexer_xmacro.h @@ -281,7 +281,8 @@ X( mjtNum, key_, qvel, nkey, MJ_M(nv) ) \ X( mjtNum, key_, act, nkey, MJ_M(na) ) \ X( mjtNum, key_, mpos, nkey, MJ_M(nmocap)*3 ) \ - X( mjtNum, key_, mquat, nkey, MJ_M(nmocap)*4 ) + X( mjtNum, key_, mquat, nkey, MJ_M(nmocap)*4 ) \ + X( mjtNum, key_, ctrl, nkey, MJ_M(nu) ) #define MJMODEL_VIEW_GROUPS \ XGROUP( MjModelActuatorViews, actuator, nu, MJMODEL_ACTUATOR ) \ diff --git a/python/mujoco/structs.h b/python/mujoco/structs.h index 00001379..62b18431 100644 --- a/python/mujoco/structs.h +++ b/python/mujoco/structs.h @@ -582,6 +582,8 @@ class MjWrapper: public WrapperBase { py_array_or_tuple_t warning; py_array_or_tuple_t timer; py_array_or_tuple_t solver; + py_array_or_tuple_t solver_niter; + py_array_or_tuple_t solver_nnz; py_array_or_tuple_t solver_fwdinv; py_array_or_tuple_t energy; diff --git a/simulate/main.cc b/simulate/main.cc index e3df24c6..55c09dee 100644 --- a/simulate/main.cc +++ b/simulate/main.cc @@ -437,7 +437,8 @@ __attribute__((used, visibility("default"))) extern "C" void _mj_rosettaError(co #endif // run event loop -int main(int argc, const char** argv) { +int main(int argc, char** argv) { + // display an error if running on macOS under Rosetta 2 #if defined(__APPLE__) && defined(__AVX__) if (rosetta_error_msg) { diff --git a/simulate/simulate.cc b/simulate/simulate.cc index 95fd574f..65425097 100644 --- a/simulate/simulate.cc +++ b/simulate/simulate.cc @@ -14,6 +14,7 @@ #include "simulate.h" +#include #include #include #include @@ -175,6 +176,10 @@ const char help_title[] = //-------------------------------- profiler, sensor, info, watch ----------------------------------- +// number of lines in the Constraint ("Counts") and Cost ("Convergence") figures +static constexpr int kConstraintNum = 5; +static constexpr int kCostNum = 3; + // init profiler figures void InitializeProfiler(mj::Simulate* sim) { // set figures to default @@ -211,6 +216,20 @@ void InitializeProfiler(mj::Simulate* sim) { sim->figsize.figurergba[3] = 0.5f; sim->figtimer.figurergba[3] = 0.5f; + // repeat line colors for constraint and cost figures + mjvFigure* fig = &sim->figcost; + for (int i=kCostNum; ilinergb[i][0] = fig->linergb[i - kCostNum][0]; + fig->linergb[i][1] = fig->linergb[i - kCostNum][1]; + fig->linergb[i][2] = fig->linergb[i - kCostNum][2]; + } + fig = &sim->figconstraint; + for (int i=kConstraintNum; ilinergb[i][0] = fig->linergb[i - kConstraintNum][0]; + fig->linergb[i][1] = fig->linergb[i - kConstraintNum][1]; + fig->linergb[i][2] = fig->linergb[i - kConstraintNum][2]; + } + // legends mju::strcpy_arr(sim->figconstraint.linename[0], "total"); mju::strcpy_arr(sim->figconstraint.linename[1], "active"); @@ -271,54 +290,76 @@ void InitializeProfiler(mj::Simulate* sim) { // update profiler figures void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) { - // update constraint figure - sim->figconstraint.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT); - for (int i=1; i<5; i++) { - sim->figconstraint.linepnt[i] = sim->figconstraint.linepnt[0]; - } - if (m->opt.solver==mjSOL_PGS) { - sim->figconstraint.linepnt[3] = 0; - sim->figconstraint.linepnt[4] = 0; - } - if (m->opt.solver==mjSOL_CG) { - sim->figconstraint.linepnt[4] = 0; - } - for (int i=0; ifigconstraint.linepnt[0]; i++) { - // x - sim->figconstraint.linedata[0][2*i] = i; - sim->figconstraint.linedata[1][2*i] = i; - sim->figconstraint.linedata[2][2*i] = i; - sim->figconstraint.linedata[3][2*i] = i; - sim->figconstraint.linedata[4][2*i] = i; + // reset lines in Constraint and Cost figures + memset(sim->figconstraint.linepnt, 0, mjMAXLINE*sizeof(int)); + memset(sim->figcost.linepnt, 0, mjMAXLINE*sizeof(int)); - // y - sim->figconstraint.linedata[0][2*i+1] = d->nefc; - sim->figconstraint.linedata[1][2*i+1] = d->solver[i].nactive; - sim->figconstraint.linedata[2][2*i+1] = d->solver[i].nchange; - sim->figconstraint.linedata[3][2*i+1] = d->solver[i].neval; - sim->figconstraint.linedata[4][2*i+1] = d->solver[i].nupdate; - } + // number of islands that have diagnostics + int nisland = mjMIN(d->solver_nisland, mjNISLAND); - // update cost figure - sim->figcost.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT); - for (int i=1; i<3; i++) { - sim->figcost.linepnt[i] = sim->figcost.linepnt[0]; - } - if (m->opt.solver==mjSOL_PGS) { - sim->figcost.linepnt[1] = 0; - sim->figcost.linepnt[2] = 0; - } + // iterate over islands + for (int k=0; k < nisland; k++) { + // ==== update Constraint ("Counts") figure - for (int i=0; ifigcost.linepnt[0]; i++) { - // x - sim->figcost.linedata[0][2*i] = i; - sim->figcost.linedata[1][2*i] = i; - sim->figcost.linedata[2][2*i] = i; + // number of points to plot, starting line + int npoints = mjMIN(mjMIN(d->solver_niter[k], mjNSOLVER), mjMAXLINEPNT); + int start = kConstraintNum * k; - // y - sim->figcost.linedata[0][2*i+1] = mju_log10(mju_max(mjMINVAL, d->solver[i].improvement)); - sim->figcost.linedata[1][2*i+1] = mju_log10(mju_max(mjMINVAL, d->solver[i].gradient)); - sim->figcost.linedata[2][2*i+1] = mju_log10(mju_max(mjMINVAL, d->solver[i].lineslope)); + sim->figconstraint.linepnt[start + 0] = npoints; + for (int i=1; i < kConstraintNum; i++) { + sim->figconstraint.linepnt[start + i] = npoints; + } + if (m->opt.solver == mjSOL_PGS) { + sim->figconstraint.linepnt[start + 3] = 0; + sim->figconstraint.linepnt[start + 4] = 0; + } + if (m->opt.solver == mjSOL_CG) { + sim->figconstraint.linepnt[start + 4] = 0; + } + for (int i=0; ifigconstraint.linedata[start + 0][2*i] = i; + sim->figconstraint.linedata[start + 1][2*i] = i; + sim->figconstraint.linedata[start + 2][2*i] = i; + sim->figconstraint.linedata[start + 3][2*i] = i; + sim->figconstraint.linedata[start + 4][2*i] = i; + + // y + int nefc = nisland == 1 ? d->nefc : d->island_efcnum[k]; + sim->figconstraint.linedata[start + 0][2*i+1] = nefc; + const mjSolverStat* stat = d->solver + k*mjNSOLVER + i; + sim->figconstraint.linedata[start + 1][2*i+1] = stat->nactive; + sim->figconstraint.linedata[start + 2][2*i+1] = stat->nchange; + sim->figconstraint.linedata[start + 3][2*i+1] = stat->neval; + sim->figconstraint.linedata[start + 4][2*i+1] = stat->nupdate; + } + + // update cost figure + start = kCostNum * k; + sim->figcost.linepnt[start + 0] = npoints; + for (int i=1; ifigcost.linepnt[start + i] = npoints; + } + if (m->opt.solver==mjSOL_PGS) { + sim->figcost.linepnt[start + 1] = 0; + sim->figcost.linepnt[start + 2] = 0; + } + + for (int i=0; ifigcost.linepnt[0]; i++) { + // x + sim->figcost.linedata[start + 0][2*i] = i; + sim->figcost.linedata[start + 1][2*i] = i; + sim->figcost.linedata[start + 2][2*i] = i; + + // y + const mjSolverStat* stat = d->solver + k*mjNSOLVER + i; + sim->figcost.linedata[start + 0][2*i + 1] = + mju_log10(mju_max(mjMINVAL, stat->improvement)); + sim->figcost.linedata[start + 1][2*i + 1] = + mju_log10(mju_max(mjMINVAL, stat->gradient)); + sim->figcost.linedata[start + 2][2*i + 1] = + mju_log10(mju_max(mjMINVAL, stat->lineslope)); + } } // get timers: total, collision, prepare, solve, other @@ -354,14 +395,22 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) { } } + // get total number of iterations and nonzeros + mjtNum sqrt_nnz = 0; + int solver_niter = 0; + for (int island=0; island < nisland; island++) { + sqrt_nnz += mju_sqrt(d->solver_nnz[island]); + solver_niter += d->solver_niter[island]; + } + // get sizes: nv, nbody, nefc, sqrt(nnz), ncont, iter float sdata[6] = { static_cast(m->nv), static_cast(m->nbody), static_cast(d->nefc), - static_cast(mju_sqrt(d->solver_nnz)), + static_cast(sqrt_nnz), static_cast(d->ncon), - static_cast(d->solver_iter) + static_cast(solver_niter) }; // update figsize @@ -496,14 +545,22 @@ void UpdateInfoText(mj::Simulate* sim, const mjModel* m, const mjData* d, char (&content)[mj::Simulate::kMaxFilenameLength]) { char tmp[20]; - // compute solver error + // number of islands with statistics + int nisland = mjMIN(d->solver_nisland, mjNISLAND); + + // compute solver error (maximum over islands) mjtNum solerr = 0; - if (d->solver_iter) { - int ind = mjMIN(d->solver_iter-1, mjNSOLVER-1); - solerr = mju_min(d->solver[ind].improvement, d->solver[ind].gradient); - if (solerr==0) { - solerr = mju_max(d->solver[ind].improvement, d->solver[ind].gradient); + for (int i=0; i < nisland; i++) { + mjtNum solerr_i = 0; + if (d->solver_niter[i]) { + int ind = mjMIN(d->solver_niter[i], mjNSOLVER) - 1; + const mjSolverStat* stat = d->solver + i*mjNSOLVER + ind; + solerr_i = mju_min(stat->improvement, stat->gradient); + if (solerr_i==0) { + solerr_i = mju_max(stat->improvement, stat->gradient); + } } + solerr = mju_max(solerr, solerr_i); } solerr = mju_log10(mju_max(mjMINVAL, solerr)); @@ -515,6 +572,12 @@ void UpdateInfoText(mj::Simulate* sim, const mjModel* m, const mjData* d, mju::sprintf_arr(fps, "%.0f ", sim->fps_); } + // total iterations of all islands with statistics + int solver_niter = 0; + for (int i=0; i < nisland; i++) { + solver_niter += d->solver_niter[i]; + } + // prepare info text mju::strcpy_arr(title, "Time\nSize\nCPU\nSolver \nFPS\nMemory"); mju::sprintf_arr(content, @@ -524,7 +587,7 @@ void UpdateInfoText(mj::Simulate* sim, const mjModel* m, const mjData* d, sim->run ? d->timer[mjTIMER_STEP].duration / mjMAX(1, d->timer[mjTIMER_STEP].number) : d->timer[mjTIMER_FORWARD].duration / mjMAX(1, d->timer[mjTIMER_FORWARD].number), - solerr, d->solver_iter, + solerr, solver_niter, fps, d->maxuse_arena/(double)(d->narena), mju_writeNumBytes(d->narena)); @@ -1638,8 +1701,8 @@ void Simulate::Sync() { return; } - bool update_profiler = this->profiler && (this->run || !this->m_); - bool update_sensor = this->sensor && (this->run || !this->m_); + bool update_profiler = this->profiler && (this->pause_update || this->run); + bool update_sensor = this->sensor && (this->pause_update || this->run); for (int i = 0; i < m_->njnt; ++i) { std::optional> range; diff --git a/simulate/simulate.h b/simulate/simulate.h index eee4ebd0..08be8d22 100644 --- a/simulate/simulate.h +++ b/simulate/simulate.h @@ -155,6 +155,7 @@ class Simulate { int info = 0; int profiler = 0; int sensor = 0; + int pause_update = 1; int fullscreen = 0; int vsync = 1; int busywait = 0; @@ -187,7 +188,7 @@ class Simulate { int real_time_index = 0; bool speed_changed = true; float measured_slowdown = 1.0; - // logarithmically spaced realtime slow-down coefficients (percent) + // logarithmically spaced real-time slow-down coefficients (percent) static constexpr float percentRealTime[] = { 100, 80, 66, 50, 40, 33, 25, 20, 16, 13, 10, 8, 6.6, 5.0, 4, 3.3, 2.5, 2, 1.6, 1.3, @@ -232,7 +233,7 @@ class Simulate { // Constant arrays needed for the option section of UI and the UI interface // TODO setting the size here is not ideal - const mjuiDef def_option[14] = { + const mjuiDef def_option[15] = { {mjITEM_SECTION, "Option", 1, nullptr, "AO"}, {mjITEM_SELECT, "Spacing", 1, &this->spacing, "Tight\nWide"}, {mjITEM_SELECT, "Color", 1, &this->color, "Default\nOrange\nWhite\nBlack"}, @@ -243,6 +244,7 @@ class Simulate { {mjITEM_CHECKINT, "Info", 2, &this->info, " #291"}, {mjITEM_CHECKINT, "Profiler", 2, &this->profiler, " #292"}, {mjITEM_CHECKINT, "Sensor", 2, &this->sensor, " #293"}, + {mjITEM_CHECKINT, "Pause update", 2, &this->pause_update, ""}, #ifdef __APPLE__ {mjITEM_CHECKINT, "Fullscreen", 0, &this->fullscreen, " #294"}, #else diff --git a/src/engine/CMakeLists.txt b/src/engine/CMakeLists.txt index b5cd890f..875b97ec 100644 --- a/src/engine/CMakeLists.txt +++ b/src/engine/CMakeLists.txt @@ -29,7 +29,7 @@ set(MUJOCO_ENGINE_SRCS engine_core_constraint.h engine_core_smooth.c engine_core_smooth.h - engine_crossplatform.c + engine_crossplatform.cc engine_crossplatform.h engine_derivative.c engine_derivative.h diff --git a/src/engine/engine_collision_sdf.c b/src/engine/engine_collision_sdf.c index 65006785..bdf16679 100644 --- a/src/engine/engine_collision_sdf.c +++ b/src/engine/engine_collision_sdf.c @@ -259,8 +259,8 @@ static void undoTransformation(const mjModel* m, const mjData* d, int g, mjtNum* xmat = d->geom_xmat + 9 * g; if (m->geom_type[g]==mjGEOM_MESH || m->geom_type[g]==mjGEOM_SDF) { mjtNum negpos[3], negquat[4], xquat[4]; - mjtNum* pos = m->geom_pos + 3 * g; - mjtNum* quat = m->geom_quat + 4 * g; + mjtNum* pos = m->mesh_pos + 3 * m->geom_dataid[g]; + mjtNum* quat = m->mesh_quat + 4 * m->geom_dataid[g]; mju_mat2Quat(xquat, xmat); mju_negPose(negpos, negquat, pos, quat); mju_mulPose(sdf_xpos, sdf_quat, xpos, xquat, negpos, negquat); @@ -367,7 +367,9 @@ static mjtNum stepGradient(mjtNum x[3], const mjModel* m, const mjSDF* s, mjc_gradient(m, d, s, grad, x); // sanity check - if (isnan(grad[0]) || isnan(grad[1]) || isnan(grad[2])) { + if (isnan(grad[0]) || grad[0]>mjMAXVAL || grad[0]<-mjMAXVAL || + isnan(grad[1]) || grad[1]>mjMAXVAL || grad[1]<-mjMAXVAL || + isnan(grad[2]) || grad[2]>mjMAXVAL || grad[2]<-mjMAXVAL) { return mjMAXVAL; } diff --git a/src/engine/engine_core_smooth.c b/src/engine/engine_core_smooth.c index a56665c6..b175c495 100644 --- a/src/engine/engine_core_smooth.c +++ b/src/engine/engine_core_smooth.c @@ -1212,11 +1212,17 @@ void mj_solveM(const mjModel* m, mjData* d, mjtNum* x, const mjtNum* y, int n) { // in-place sparse backsubstitution for one island: x = inv(L'*D*L)*x // L is in lower triangle of qLD; D is on diagonal of qLD void mj_solveM_island(const mjModel* m, const mjData* d, mjtNum* restrict x, int island) { + // if no islands, call mj_solveLD + const mjtNum* qLD = d->qLD; + const mjtNum* qLDiagInv = d->qLDiagInv; + if (island < 0) { + mj_solveLD(m, x, 1, qLD, qLDiagInv); + return; + } + // local constants: general const int* Madr = m->dof_Madr; const int* parentid = m->dof_parentid; - const mjtNum* qLD = d->qLD; - const mjtNum* qLDiagInv = d->qLDiagInv; const int* simplenum = m->dof_simplenum; // local constants: island specific diff --git a/src/engine/engine_crossplatform.c b/src/engine/engine_crossplatform.c deleted file mode 100644 index e031f30a..00000000 --- a/src/engine/engine_crossplatform.c +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2022 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -void _mj_crossplatform_void(void) {} // ISO C does not permit empty translation units - -#if defined(__APPLE__) && defined(__AVX__) - -#include -#include -#include - -__attribute__((weak, visibility("default"))) void _mj_rosettaError(const char* msg) { - fprintf(stderr, "%s\n", msg); - __asm__ __volatile__ ("ud2"); // raises SIGILL but leave this function at the top of the stack -} - -__attribute__((constructor(10000), target("no-avx"))) static void _mj_checkRosetta(void) { - int is_translated = 0; - { - size_t len = sizeof(is_translated); - if (sysctlbyname("sysctl.proc_translated", &is_translated, &len, NULL, 0)) { - is_translated = 0; - } - } - if (is_translated) { - _mj_rosettaError("MuJoCo cannot be run under Rosetta 2 on an Apple Silicon machine."); - } -} - -#endif // defined(__APPLE__) && defined(__AVX__) diff --git a/src/engine/engine_crossplatform.cc b/src/engine/engine_crossplatform.cc new file mode 100644 index 00000000..9ddcca6d --- /dev/null +++ b/src/engine/engine_crossplatform.cc @@ -0,0 +1,99 @@ +// Copyright 2022 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "engine/engine_crossplatform.h" // IWYU pragma: keep + +#if defined(__APPLE__) && defined(__AVX__) +#include + +#include +#include + +namespace { +__attribute__((weak, visibility("default"))) +extern "C" void _mj_rosettaError(const char* msg) { + fprintf(stderr, "%s\n", msg); + __asm__ __volatile__ ("ud2"); // raises SIGILL but leave this function at the top of the stack +} + +__attribute__((constructor(10000), target("no-avx"))) +void CheckRosetta() { + int is_translated = 0; + { + size_t len = sizeof(is_translated); + if (sysctlbyname("sysctl.proc_translated", &is_translated, &len, NULL, 0)) { + is_translated = 0; + } + } + if (is_translated) { + _mj_rosettaError("MuJoCo cannot be run under Rosetta 2 on an Apple Silicon machine."); + } +} +} // namespace +#endif // defined(__APPLE__) && defined(__AVX__) + +#ifdef ADDRESS_SANITIZER +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { +std::string_view SymbolizeCached(void* pc) { + static auto* mu = new std::shared_mutex; + static auto* pc_to_func_name_map = new std::unordered_map; + + { + std::shared_lock lock(*mu); + auto it = pc_to_func_name_map->find(pc); + if (it != pc_to_func_name_map->end()) { + return it->second; + } + } + + std::array buf; + __sanitizer_symbolize_pc(pc, "%f", buf.data(), buf.size()); + { + std::unique_lock lock(*mu); + return pc_to_func_name_map->emplace(pc, buf.data()).first->second; + } +} +} // namespace + +int _mj_comparePcFuncName(void* pc1, void* pc2) { + static auto* mu = new std::shared_mutex; + static auto* same_func_map = new std::map, bool>; + + auto pc_pair = std::make_pair(pc1, pc2); + { + std::shared_lock lock(*mu); + auto it = same_func_map->find(pc_pair); + if (it != same_func_map->end()) { + return it->second; + } + } + + bool is_same = (SymbolizeCached(pc1) == SymbolizeCached(pc2)); + { + std::unique_lock lock(*mu); + return same_func_map->emplace(pc_pair, is_same).first->second; + } +} +#endif // ADDRESS_SANITIZER diff --git a/src/engine/engine_crossplatform.h b/src/engine/engine_crossplatform.h index e0ab316c..d52e12e9 100644 --- a/src/engine/engine_crossplatform.h +++ b/src/engine/engine_crossplatform.h @@ -75,4 +75,16 @@ #define mjUNLIKELY(x) (x) #endif +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef ADDRESS_SANITIZER +int _mj_comparePcFuncName(void* pc1, void* pc2); +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + #endif // MUJOCO_SRC_ENGINE_ENGINE_CROSSPLATFORM_H_ diff --git a/src/engine/engine_forward.c b/src/engine/engine_forward.c index 5a38c92e..dd59cc26 100644 --- a/src/engine/engine_forward.c +++ b/src/engine/engine_forward.c @@ -264,7 +264,7 @@ void mj_fwdActuation(const mjModel* m, mjData* d) { mjcb_act_dyn(m, d, i); } } else { - d->act_dot[j] = 0; + mju_zero(d->act_dot + j, m->actuator_actnum[i]); } } } @@ -501,7 +501,7 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) { mju_copy(d->qacc, d->qacc_smooth, nv); mju_copy(d->qacc_warmstart, d->qacc_smooth, nv); mju_zero(d->qfrc_constraint, nv); - d->solver_iter = 0; + mju_zeroInt(d->solver_niter, mjNISLAND); TM_END(mjTIMER_CONSTRAINT); return; } @@ -512,7 +512,7 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) { // warmstart solver warmstart(m, d); - d->solver_iter = 0; + mju_zeroInt(d->solver_niter, mjNISLAND); // run main solver switch ((mjtSolver) m->opt.solver) { @@ -532,6 +532,9 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) { mjERROR("unknown solver type %d", m->opt.solver); } + // one (monolithic) island + d->solver_nisland = 1; + // save result for next step warmstart mju_copy(d->qacc_warmstart, d->qacc, nv); @@ -551,7 +554,7 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) { static void mj_advance(const mjModel* m, mjData* d, const mjtNum* act_dot, const mjtNum* qacc, const mjtNum* qvel) { // advance activations and clamp - if (m->na) { + if (m->na && !mjDISABLED(mjDSBL_ACTUATION)) { for (int i=0; i < m->nu; i++) { int actadr = m->actuator_actadr[i]; int actadr_end = actadr + m->actuator_actnum[i]; diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index a9eb5444..a47a02fd 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -1351,29 +1351,17 @@ void mj_freeStack(mjData* d) { mjStackFrame* s = (mjStackFrame*) ((char*)d->arena + d->narena - d->pbase); #ifdef ADDRESS_SANITIZER - #define mjSYMBOLIZELEN 256 - - // symbolize s->pc to get the function name of most recent caller to mj_markStack - char markstack_func[mjSYMBOLIZELEN]; - __sanitizer_symbolize_pc(s->pc, "%f", markstack_func, mjSYMBOLIZELEN); - markstack_func[mjSYMBOLIZELEN - 1] = '\0'; - - // symbolize current program counter to get the function name of caller to this function - char freestack_func[mjSYMBOLIZELEN]; - __sanitizer_symbolize_pc(__sanitizer_return_address(), "%f", freestack_func, mjSYMBOLIZELEN); - freestack_func[mjSYMBOLIZELEN - 1] = '\0'; - // raise an error if caller function name doesn't match the most recent caller of mj_markStack - if (strncmp(markstack_func, freestack_func, mjSYMBOLIZELEN)) { + if (!_mj_comparePcFuncName(s->pc, __sanitizer_return_address())) { + #define mjSYMBOLIZELEN 256 char dbginfo[mjSYMBOLIZELEN]; __sanitizer_symbolize_pc( s->pc, "mj_markStack %F at %S has no corresponding mj_freeStack", dbginfo, sizeof(dbginfo)); dbginfo[mjSYMBOLIZELEN - 1] = '\0'; mjERROR("%s", dbginfo); + #undef mjSYMBOLIZELEN } - - #undef mjSYMBOLIZELEN #endif // restore pbase and pstack @@ -1440,9 +1428,10 @@ static void _resetData(const mjModel* m, mjData* d, unsigned char debug_value) { // clear solver diagnostics memset(d->warning, 0, mjNWARNING*sizeof(mjWarningStat)); memset(d->timer, 0, mjNTIMER*sizeof(mjTimerStat)); - memset(d->solver, 0, mjNSOLVER*sizeof(mjSolverStat)); - d->solver_iter = 0; - d->solver_nnz = 0; + memset(d->solver, 0, mjNSOLVER*mjNISLAND*sizeof(mjSolverStat)); + d->solver_nisland = 0; + mju_zeroInt(d->solver_niter, mjNISLAND); + mju_zeroInt(d->solver_nnz, mjNISLAND); mju_zero(d->solver_fwdinv, 2); // clear collision diagnostics @@ -1624,6 +1613,9 @@ static int sensorSize(mjtSensor sensor_type, int sensor_dim) { case mjSENS_CLOCK: return 1; + case mjSENS_CAMPROJECTION: + return 2; + case mjSENS_ACCELEROMETER: case mjSENS_VELOCIMETER: case mjSENS_GYRO: diff --git a/src/engine/engine_print.c b/src/engine/engine_print.c index 7504f3f8..735a9c25 100644 --- a/src/engine/engine_print.c +++ b/src/engine/engine_print.c @@ -837,24 +837,33 @@ void mj_printFormattedData(const mjModel* m, mjData* d, const char* filename, } // SOLVER STAT - if (d->solver_iter) { + if (d->nefc) { fprintf(fp, "SOLVER STAT\n"); - fprintf(fp, " solver_iter = %d\n", d->solver_iter); - fprintf(fp, " solver_nnz = %d\n", d->solver_nnz); - for (int i=0; i < mjMIN(mjNSOLVER, d->solver_iter); i++) { - fprintf(fp, " %d: improvement = ", i); - fprintf(fp, float_format, d->solver[i].improvement); - fprintf(fp, " gradient = "); - fprintf(fp, float_format, d->solver[i].gradient); - fprintf(fp, " lineslope = "); - fprintf(fp, float_format, d->solver[i].lineslope); - fprintf(fp, "\n"); - fprintf(fp, " nactive = %d nchange = %d neval = %d nupdate = %d\n", - d->solver[i].nactive, d->solver[i].nchange, - d->solver[i].neval, d->solver[i].nupdate); + fprintf(fp, " solver_nisland = %d\n", d->solver_nisland); + printVector(" solver_fwdinv = ", d->solver_fwdinv, 2, fp, float_format); + int nisland_stat = mjMIN(d->solver_nisland, mjNISLAND); + for (int island=0; island < nisland_stat; island++) { + int niter_stat = mjMIN(mjNSOLVER, d->solver_niter[island]); + if (niter_stat) { + fprintf(fp, " ISLAND %d\n", island); + fprintf(fp, " solver_niter = %d\n", d->solver_niter[island]); + fprintf(fp, " solver_nnz = %d\n", d->solver_nnz[island]); + for (int i=0; i < niter_stat; i++) { + mjSolverStat* stat = d->solver + island*mjNSOLVER + i; + fprintf(fp, " %d: improvement = ", i); + fprintf(fp, float_format, stat->improvement); + fprintf(fp, " gradient = "); + fprintf(fp, float_format, stat->gradient); + fprintf(fp, " lineslope = "); + fprintf(fp, float_format, stat->lineslope); + fprintf(fp, "\n"); + fprintf(fp, " nactive = %d nchange = %d neval = %d nupdate = %d\n", + stat->nactive, stat->nchange, + stat->neval, stat->nupdate); + } + fprintf(fp, "\n"); + } } - printVector("solver_fwdinv = ", d->solver_fwdinv, 2, fp, float_format); - fprintf(fp, "\n"); } printVector("ENERGY = ", d->energy, 2, fp, float_format); diff --git a/src/engine/engine_ray.c b/src/engine/engine_ray.c index 9904ee7a..74bc5b3c 100644 --- a/src/engine/engine_ray.c +++ b/src/engine/engine_ray.c @@ -774,6 +774,9 @@ mjtNum ray_sdf(const mjModel* m, const mjData* d, int g, if (distance < 1e-8) { return distance_total; } + if (distance > 1e6) { + break; + } } // reset counter diff --git a/src/engine/engine_sensor.c b/src/engine/engine_sensor.c index 6be75fc9..4fbf5b1e 100644 --- a/src/engine/engine_sensor.c +++ b/src/engine/engine_sensor.c @@ -187,6 +187,91 @@ static void get_xquat(const mjModel* m, const mjData* d, mjtObj type, int id, in } +static void cam_project(mjtNum sensordata[2], const mjtNum target_xpos[3], + const mjtNum cam_xpos[3], const mjtNum cam_xmat[9], + const int cam_res[2], mjtNum cam_fovy) { + // translation matrix (4x4) + mjtNum translation[4][4] = {0}; + translation[0][0] = 1; + translation[1][1] = 1; + translation[2][2] = 1; + translation[3][3] = 1; + translation[0][3] = -cam_xpos[0]; + translation[1][3] = -cam_xpos[1]; + translation[2][3] = -cam_xpos[2]; + + // rotation matrix (4x4) + mjtNum rotation[4][4] = {0}; + rotation[0][0] = 1; + rotation[1][1] = 1; + rotation[2][2] = 1; + rotation[3][3] = 1; + for (int i=0; i<3; i++) { + for (int j=0; j<3; j++) { + rotation[i][j] = cam_xmat[j*3+i]; + } + } + + // focal transformation matrix (3x4) + mjtNum height = (mjtNum) cam_res[1]; + mjtNum fy = .5 / mju_tan(cam_fovy * mjPI / 360.) * height; + mjtNum focal[3][4] = {0}; + focal[0][0] = -fy; + focal[1][1] = fy; + focal[2][2] = 1.0; + + // image matrix (3x3) + mjtNum image[3][3] = {0}; + image[0][0] = 1; + image[1][1] = 1; + image[2][2] = 1; + image[0][2] = (mjtNum)cam_res[0] / 2.0; + image[1][2] = (mjtNum)cam_res[1] / 2.0; + + // projection matrix (3x4): product of all 4 matrices + mjtNum proj[3][4] = {0}; + for (int i=0; i<3; i++) { + for (int j=0; j<3; j++) { + for (int k=0; k<4; k++) { + for (int l=0; l<4; l++) { + for (int n=0; n<4; n++) { + proj[i][n] += image[i][j] * focal[j][k] * rotation[k][l] * translation[l][n]; + } + } + } + } + } + + // projection matrix multiplies homogenous [x, y, z, 1] vectors + mjtNum pos_hom[4] = {0, 0, 0, 1}; + mju_copy3(pos_hom, target_xpos); + + // project world coordinates into pixel space, see: + // https://en.wikipedia.org/wiki/3D_projection#Mathematical_formula + mjtNum pixel_coord_hom[3] = {0}; + for (int i=0; i<3; i++) { + for (int j=0; j<4; j++) { + pixel_coord_hom[i] += proj[i][j] * pos_hom[j]; + } + } + + // avoid dividing by tiny numbers + mjtNum denom = pixel_coord_hom[2]; + if (mju_abs(denom) < mjMINVAL) { + if (denom < 0) { + denom = mju_min(denom, -mjMINVAL); + } else { + denom = mju_max(denom, mjMINVAL); + } + } + + // compute projection + sensordata[0] = pixel_coord_hom[0] / denom; + sensordata[1] = pixel_coord_hom[1] / denom; +} + + + //-------------------------------- sensor ---------------------------------------------------------- // position-dependent sensors @@ -221,6 +306,11 @@ void mj_sensorPos(const mjModel* m, mjData* d) { mju_mulMatTVec(d->sensordata+adr, d->site_xmat+9*objid, m->opt.magnetic, 3, 3); break; + case mjSENS_CAMPROJECTION: // camera projection + cam_project(d->sensordata+adr, d->site_xpos+3*objid, d->cam_xpos+3*refid, + d->cam_xmat+9*refid, m->cam_resolution+2*refid, m->cam_fovy[refid]); + break; + case mjSENS_RANGEFINDER: // rangefinder rvec[0] = d->site_xmat[9*objid+2]; rvec[1] = d->site_xmat[9*objid+5]; diff --git a/src/engine/engine_solver.c b/src/engine/engine_solver.c index 7eeb41f2..bcaea385 100644 --- a/src/engine/engine_solver.c +++ b/src/engine/engine_solver.c @@ -39,24 +39,30 @@ static mjtNum rescale(const mjModel* m, mjtNum x) { -// save solver statistics, count -static void saveStats(const mjModel* m, mjData* d, int* piter, +// save solver statistics +static void saveStats(const mjModel* m, mjData* d, int island, int iter, mjtNum improvement, mjtNum gradient, mjtNum lineslope, int nactive, int nchange, int neval, int nupdate) { - // compute position, increase iter - int i = d->solver_iter + (*piter); - (*piter)++; - - // save if within range - if (i < mjNSOLVER) { - d->solver[i].improvement = improvement; - d->solver[i].gradient = gradient; - d->solver[i].lineslope = lineslope; - d->solver[i].nactive = nactive; - d->solver[i].nchange = nchange; - d->solver[i].neval = neval; - d->solver[i].nupdate = nupdate; + // if out of range, return + if (island >= mjNISLAND) { + return; } + + // if no islands, use first island + island = mjMAX(0, island); + + // get mjSolverStat pointer + iter += d->solver_niter[island]; // add current niter (in case of noslip) + mjSolverStat* stat = d->solver + island*mjNSOLVER + iter; + + // save stats + stat->improvement = improvement; + stat->gradient = gradient; + stat->lineslope = lineslope; + stat->nactive = nactive; + stat->nchange = nchange; + stat->neval = neval; + stat->nupdate = nupdate; } @@ -313,6 +319,9 @@ void mj_solPGS(const mjModel* m, mjData* d, int maxiter) { mjtNum* ARinv = mj_stackAllocNum(d, nefc); int* oldstate = mj_stackAllocInt(d, nefc); + // TODO: b/295296178 - Use island index (currently hardcoded to 0) + int island = 0; + // precompute inverse diagonal of AR ARdiaginv(m, d, ARinv, 0); @@ -471,9 +480,13 @@ void mj_solPGS(const mjModel* m, mjData* d, int maxiter) { nchange += (oldstate[i] != d->efc_state[i]); } - // scale improvement, save stats, count + // scale improvement, save stats improvement = rescale(m, improvement); - saveStats(m, d, &iter, improvement, 0, 0, nactive, nchange, 0, 0); + saveStats(m, d, island, iter, improvement, 0, 0, nactive, nchange, 0, 0); + + // increment iteration count + iter++; + // terminate if (improvement < m->opt.tolerance) { @@ -481,17 +494,20 @@ void mj_solPGS(const mjModel* m, mjData* d, int maxiter) { } } - // update solver iterations - d->solver_iter += iter; + // finalize statistics + if (island < mjNISLAND) { + // update solver iterations + d->solver_niter[island] += iter; - // set nnz - if (mj_isSparse(m)) { - d->solver_nnz = 0; - for (int i=0; i < nefc; i++) { - d->solver_nnz += d->efc_AR_rownnz[i]; + // set nnz + if (mj_isSparse(m)) { + d->solver_nnz[island] = 0; + for (int i=0; i < nefc; i++) { + d->solver_nnz[island] += d->efc_AR_rownnz[i]; + } + } else { + d->solver_nnz[island] = nefc*nefc; } - } else { - d->solver_nnz = nefc*nefc; } // map to joint space @@ -515,6 +531,9 @@ void mj_solNoSlip(const mjModel* m, mjData* d, int maxiter) { mjtNum* ARinv = mj_stackAllocNum(d, nefc); int* oldstate = mj_stackAllocInt(d, nefc); + // TODO: b/295296178 - Use island index (currently hardcoded to 0) + int island = 0; + // precompute inverse diagonal of A ARdiaginv(m, d, ARinv, 1); @@ -687,9 +706,12 @@ void mj_solNoSlip(const mjModel* m, mjData* d, int maxiter) { nchange += (oldstate[i] != d->efc_state[i]); } - // scale improvement, save stats, count + // scale improvement, save stats improvement = rescale(m, improvement); - saveStats(m, d, &iter, improvement, 0, 0, nactive, nchange, 0, 0); + saveStats(m, d, island, iter, improvement, 0, 0, nactive, nchange, 0, 0); + + // increment iteration count + iter++; // terminate if (improvement < m->opt.noslip_tolerance) { @@ -698,7 +720,7 @@ void mj_solNoSlip(const mjModel* m, mjData* d, int maxiter) { } // update solver iterations - d->solver_iter += iter; + d->solver_niter[island] += iter; // map to joint space dualFinish(m, d); @@ -1514,6 +1536,9 @@ static void mj_solCGNewton(const mjModel* m, mjData* d, int maxiter, int flg_New mjCGContext ctx; mj_markStack(d); + // TODO: b/295296178 - Use island index (currently hardcoded to 0) + int island = 0; + // allocate context CGallocate(m, d, &ctx, flg_Newton); @@ -1576,12 +1601,15 @@ static void mj_solCGNewton(const mjModel* m, mjData* d, int maxiter, int flg_New nchange += (d->efc_state[i] != oldstate[i]); } - // scale improvement, save stats, count + // scale improvement, save stats mjtNum improvement = rescale(m, oldcost-ctx.cost); mjtNum gradient = rescale(m, mju_norm(ctx.grad, nv)); - saveStats(m, d, &iter, improvement, gradient, ctx.LSslope, + saveStats(m, d, island, iter, improvement, gradient, ctx.LSslope, ctx.nactive, nchange, ctx.LSiter, ctx.nupdate); + // increment iteration count + iter++; + // termination if (improvement < m->opt.tolerance || gradient < m->opt.tolerance) { break; @@ -1608,18 +1636,21 @@ static void mj_solCGNewton(const mjModel* m, mjData* d, int maxiter, int flg_New } } - // update solver iterations - d->solver_iter += iter; + // finalize statistics + if (island < mjNISLAND) { + // update solver iterations + d->solver_niter[island] += iter; - // set solver_nnz - if (flg_Newton) { - if (mj_isSparse(m)) { - d->solver_nnz = 2*ctx.nnz - nv; + // set solver_nnz + if (flg_Newton) { + if (mj_isSparse(m)) { + d->solver_nnz[island] = 2*ctx.nnz - nv; + } else { + d->solver_nnz[island] = nv*nv; + } } else { - d->solver_nnz = nv*nv; + d->solver_nnz[island] = 0; } - } else { - d->solver_nnz = 0; } mj_freeStack(d); diff --git a/src/engine/engine_util_blas.c b/src/engine/engine_util_blas.c index bb7d16f5..d5eb960a 100644 --- a/src/engine/engine_util_blas.c +++ b/src/engine/engine_util_blas.c @@ -220,7 +220,7 @@ mjtNum mju_normalize4(mjtNum vec[4]) { vec[1] = 0; vec[2] = 0; vec[3] = 0; - } else { + } else if (mju_abs(norm - 1) > mjMINVAL) { mjtNum normInv = 1/norm; vec[0] *= normInv; vec[1] *= normInv; diff --git a/src/thread/CMakeLists.txt b/src/thread/CMakeLists.txt index 948cd2e7..e320c20b 100644 --- a/src/thread/CMakeLists.txt +++ b/src/thread/CMakeLists.txt @@ -13,11 +13,11 @@ # limitations under the License. set(MUJOCO_THREAD_SRCS - lockless_queue.h - task.cc - task.h thread_pool.cc thread_pool.h + thread_queue.h + thread_task.cc + thread_task.h ) target_sources(mujoco PRIVATE ${MUJOCO_THREAD_SRCS}) diff --git a/src/thread/task.h b/src/thread/task.h deleted file mode 100644 index 1a4f8c28..00000000 --- a/src/thread/task.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2023 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// IWYU pragma: private, include "third_party/mujoco/include/mujoco.h" -// IWYU pragma: friend "third_party/(py/)?mujoco/.*" - -#ifndef MUJOCO_SRC_THREAD_TASK_H_ -#define MUJOCO_SRC_THREAD_TASK_H_ - -#ifdef __cplusplus - -#include -#include -#include - -namespace mujoco { - -class Task { - public: - using FunctionPtr = void* (*)(void*); - enum Status { - QUEUED, - COMPLETE, - }; - - static void Initialize( - Task* task, - FunctionPtr start_routine, - void* args) { - // instantiate a task at the pointer passed in - new(task) Task(); - task->start_routine_ = start_routine; - task->args_ = args; - task->status_ = Status::QUEUED; - } - - void Execute() { - args_ = start_routine_(args_); - status_ = Status::COMPLETE; - } - - void Join() { - while (status_ != Status::COMPLETE) { - std::this_thread::yield(); - } - } - - private: - FunctionPtr start_routine_; - - void* args_; - - std::atomic status_ = Status::QUEUED; -}; - -} // namespace mujoco - -#endif // __cplusplus - -#endif // MUJOCO_SRC_THREAD_TASK_H_ diff --git a/src/thread/thread_pool.cc b/src/thread/thread_pool.cc index dd060737..6916849f 100644 --- a/src/thread/thread_pool.cc +++ b/src/thread/thread_pool.cc @@ -14,39 +14,117 @@ #include "thread/thread_pool.h" +#include #include +#include +#include +#include +#include #include -#include -#include "thread/task.h" +#include "engine/engine_crossplatform.h" +#include "engine/engine_util_errmem.h" +#include "thread/thread_queue.h" +#include "thread/thread_task.h" -static constexpr size_t kMaxThreads = 128; +namespace mujoco { +namespace { +constexpr size_t kThreadPoolQueueSize = 640; + +struct WorkerThread { + // Shutdown function passed to running threads to ensure clean shutdown. + static void* ShutdownFunction(void* args) { + return nullptr; + } + + // Thread for the worker. + std::unique_ptr thread_; + + // An mjTask for shutting down this worker. + mjTask shutdown_task_ { + &ShutdownFunction, + nullptr, + mjTASK_NEW + }; +}; +} // namespace + +// Concrete C++ class definition for mjThreadPool. +// (The public mjThreadPool C struct is an opaque one.) +class ThreadPoolImpl : public mjThreadPool { + public: + ThreadPoolImpl(int num_worker) : mjThreadPool{num_worker} { + // initialize worker threads + for (int i = 0; i < num_worker; ++i) { + WorkerThread worker{ + std::make_unique(ThreadPoolWorker, this)}; + workers_.push_back(std::move(worker)); + } + } + + // start a task in the threadpool + void Enqueue(mjTask* task) { + if (mjUNLIKELY(GetAtomicTaskStatus(task).exchange(mjTASK_QUEUED) != + mjTASK_NEW)) { + mjERROR("task->status is not mjTASK_NEW"); + } + lockless_queue_.push(task); + } + + // shutdown the threadpool + void Shutdown() { + if (shutdown_) { + return; + } + + shutdown_ = true; + std::vector shutdown_tasks(workers_.size()); + for (auto& worker : workers_) { + Enqueue(&worker.shutdown_task_); + } + + for (auto& worker : workers_) { + worker.thread_->join(); + } + } + + ~ThreadPoolImpl() { Shutdown(); } + + private: + // method executed by running threads + static void ThreadPoolWorker(ThreadPoolImpl* thread_pool) { + while (!thread_pool->shutdown_) { + auto task = static_cast(thread_pool->lockless_queue_.pop()); + task->args = task->func(task->args); + GetAtomicTaskStatus(task).store(mjTASK_COMPLETED); + } + } + + // indicates whether the thread pool is being shut down + std::atomic shutdown_ = false; + + // OS threads that are running in this pool + std::vector workers_; + + // queue of tasks to execute + mujoco::LocklessQueue lockless_queue_; +}; // create a thread pool mjThreadPool* mju_threadPoolCreate(size_t number_of_threads) { - mujoco::ThreadPool* thread_pool = - new mujoco::ThreadPool(number_of_threads); - return static_cast(static_cast(thread_pool)); + return new ThreadPoolImpl(number_of_threads); } // start a task in the threadpool -void mju_threadPoolEnqueue( - mjThreadPool* thread_pool, mjTask* task, mjStartRoutine start_routine, - void* args) { - mujoco::ThreadPool* thread_pool_ptr = - static_cast*>( - static_cast(thread_pool)); - thread_pool_ptr->Enqueue( - static_cast(static_cast(task)), start_routine, - args); +void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task) { + auto thread_pool_impl = static_cast(thread_pool); + thread_pool_impl->Enqueue(task); } // shutdown the threadpool and free the memory void mju_threadPoolDestroy(mjThreadPool* thread_pool) { - mujoco::ThreadPool* thread_pool_ptr = - static_cast*>( - static_cast(thread_pool)); - thread_pool_ptr->Shutdown(); - delete thread_pool_ptr; + auto thread_pool_impl = static_cast(thread_pool); + thread_pool_impl->Shutdown(); + delete thread_pool_impl; } - +} // namespace mujoco diff --git a/src/thread/thread_pool.h b/src/thread/thread_pool.h index 11b51145..1d539437 100644 --- a/src/thread/thread_pool.h +++ b/src/thread/thread_pool.h @@ -11,92 +11,32 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// IWYU pragma: private, include "third_party/mujoco/include/mujoco.h" -// IWYU pragma: friend "third_party/(py/)?mujoco/.*" #ifndef MUJOCO_SRC_THREAD_THREAD_POOL_H_ #define MUJOCO_SRC_THREAD_THREAD_POOL_H_ +#include + +#include +#include + #ifdef __cplusplus - -#include -#include -#include - -#include "thread/lockless_queue.h" -#include "thread/task.h" - namespace mujoco { +extern "C" { +#endif -static constexpr size_t kThreadPoolQueueSize = 640; +// Create a thread pool with the specified number of threads running. +MJAPI mjThreadPool* mju_threadPoolCreate(size_t number_of_threads); -template -class ThreadPool { - public: - ThreadPool(size_t number_of_threads) - : number_of_threads_(number_of_threads) { - for (int i = 0; i < number_of_threads_; ++i) { - threads_[i] = std::thread(ThreadPoolWorker, static_cast(this)); - } - } +// Enqueue a task in a thread pool. +MJAPI void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task); - // start a task in the threadpool - void Enqueue( - Task* task, Task::FunctionPtr start_routine, void* args) { - Task::Initialize(task, start_routine, args); - lockless_queue_.push(static_cast(task)); - } - - // shutdown the threadpool - void Shutdown() { - if (shutdown_) { - return; - } - - shutdown_ = true; - Task shutdown_tasks[max_number_of_threads]; - for (int i = 0; i < number_of_threads_; ++i) { - Enqueue(&shutdown_tasks[i], ShutdownFunction, nullptr); - } - - for (int i = 0; i < number_of_threads_; ++i) { - threads_[i].join(); - } - } - - ~ThreadPool() { Shutdown(); } - - private: - // method executed by running threads - static void ThreadPoolWorker(void* arg) { - ThreadPool* thread_pool = - static_cast*>(arg); - while (!thread_pool->shutdown_) { - Task* task = static_cast(thread_pool->lockless_queue_.pop()); - task->Execute(); - } - } - - // shutdown function passed to running threads to ensure cleans shutdown - static void* ShutdownFunction(void* args) { - return NULL; - } - - // is the thread pool is being shut down - std::atomic shutdown_ = false; - - // actual number of running threads in the threadpool - const size_t number_of_threads_; - - // OS threads that are running in this pool - std::thread threads_[max_number_of_threads]; - - // queue of tasks to execute - LocklessQueue lockless_queue_; -}; +// Destroy a thread pool. +MJAPI void mju_threadPoolDestroy(mjThreadPool* thread_pool); +#ifdef __cplusplus +} // extern "C" } // namespace mujoco - #endif // __cplusplus #endif // MUJOCO_SRC_THREAD_THREAD_POOL_H_ diff --git a/src/thread/lockless_queue.h b/src/thread/thread_queue.h similarity index 97% rename from src/thread/lockless_queue.h rename to src/thread/thread_queue.h index fbe21b96..3178f8ec 100644 --- a/src/thread/lockless_queue.h +++ b/src/thread/thread_queue.h @@ -11,8 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// IWYU pragma: private, include "third_party/mujoco/include/mujoco.h" -// IWYU pragma: friend "third_party/(py/)?mujoco/.*" #ifndef MUJOCO_SRC_THREAD_LOCKLESS_QUEUE_H_ #define MUJOCO_SRC_THREAD_LOCKLESS_QUEUE_H_ diff --git a/src/thread/task.cc b/src/thread/thread_task.cc similarity index 68% rename from src/thread/task.cc rename to src/thread/thread_task.cc index acb1858b..77ce2bfd 100644 --- a/src/thread/task.cc +++ b/src/thread/thread_task.cc @@ -12,13 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "thread/task.h" +#include "thread/thread_task.h" + +#include #include -#include -// waits for a task to complete -void mju_taskJoin(mjTask* task) { - mujoco::Task* task_ptr = static_cast(static_cast(task)); - task_ptr->Join(); +namespace mujoco { +void mju_defaultTask(mjTask* task) { + task->func = nullptr; + task->args = nullptr; + task->status = mjTASK_NEW; } + +void mju_taskJoin(mjTask* task) { + while (GetAtomicTaskStatus(task) != mjTASK_COMPLETED) { + std::this_thread::yield(); + } +} +} // namespace mujoco diff --git a/src/thread/thread_task.h b/src/thread/thread_task.h new file mode 100644 index 00000000..81c63dd7 --- /dev/null +++ b/src/thread/thread_task.h @@ -0,0 +1,50 @@ +// Copyright 2023 DeepMind Technologies Limited +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MUJOCO_SRC_THREAD_THREAD_TASK_H_ +#define MUJOCO_SRC_THREAD_THREAD_TASK_H_ + +#include +#include +#include + +#include +#include + +#ifdef __cplusplus +namespace mujoco { +extern "C" { +#endif + +// Initialize an mjTask. +MJAPI void mju_defaultTask(mjTask* task); + +// Wait for a task to complete. +MJAPI void mju_taskJoin(mjTask* task); + +#ifdef __cplusplus +} // extern "C" + +using TaskStatus = std::remove_volatile_t; +inline std::atomic& GetAtomicTaskStatus(mjTask* task) { + static_assert(sizeof(std::atomic) == sizeof(TaskStatus)); + static_assert(alignof(std::atomic) == alignof(TaskStatus)); + static_assert(std::atomic::is_always_lock_free); + return *std::launder(reinterpret_cast*>( + const_cast(&task->status))); +} +} // namespace mujoco +#endif // __cplusplus + +#endif // MUJOCO_SRC_THREAD_THREAD_TASK_H_ diff --git a/src/user/user_mesh.cc b/src/user/user_mesh.cc index 606fc468..deaaa2cc 100644 --- a/src/user/user_mesh.cc +++ b/src/user/user_mesh.cc @@ -134,6 +134,9 @@ mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) { mjuu_setvec(pos_volume_, 0, 0, 0); mjuu_setvec(quat_surface_, 1, 0, 0, 0); mjuu_setvec(quat_volume_, 1, 0, 0, 0); + mjuu_setvec(pos_, 0, 0, 0); + mjuu_setvec(quat_, 1, 0, 0, 0); + mjuu_setvec(boxsz_surface_, 0, 0, 0); mjuu_setvec(boxsz_volume_, 0, 0, 0); mjuu_setvec(aabb_, 1e10, 1e10, 1e10); @@ -391,7 +394,7 @@ void mjCMesh::Compile(const mjVFS* vfs) { } // create using marching cubes - if (is_plugin) { + else if (is_plugin) { LoadSDF(); } @@ -630,6 +633,18 @@ double* mjCMesh::GetQuatPtr(mjtMeshType type) { +double* mjCMesh::GetOffsetPosPtr() { + return pos_; +} + + + +double* mjCMesh::GetOffsetQuatPtr() { + return quat_; +} + + + bool mjCMesh::HasTexcoord() const { return texcoord_ != nullptr; } diff --git a/src/user/user_model.cc b/src/user/user_model.cc index 8b782f08..4cb2a541 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -1586,6 +1586,7 @@ void mjCModel::CopyTree(mjModel* m) { copyvec(m->cam_quat+4*cid, pc->locquat, 4); m->cam_fovy[cid] = (mjtNum)pc->fovy; m->cam_ipd[cid] = (mjtNum)pc->ipd; + copyvec(m->cam_resolution+2*cid, pc->resolution, 2); copyvec(m->cam_user+nuser_cam*cid, pc->userdata.data(), nuser_cam); } @@ -1737,6 +1738,8 @@ void mjCModel::CopyObjects(mjModel* m) { m->mesh_graphadr[i] = (pme->szgraph() ? graph_adr : -1); m->mesh_bvhadr[i] = bvh_adr; m->mesh_bvhnum[i] = pme->tree().nbvh; + copyvec(&m->mesh_pos[3 * i], pme->GetOffsetPosPtr(), 3); + copyvec(&m->mesh_quat[4 * i], pme->GetOffsetQuatPtr(), 4); // copy vertices, normals, faces, texcoords, aux data pme->CopyVert(m->mesh_vert + 3*vert_adr); @@ -3015,6 +3018,15 @@ bool mjCModel::CopyBack(const mjModel* m) { } } + // mesh + mjCMesh* pm; + for (int i=0; iGetOffsetPosPtr(), m->mesh_pos+3*i, 3); + copyvec(pm->GetOffsetQuatPtr(), m->mesh_quat+4*i, 4); + } + // sites for (int i=0; isize, m->site_size + 3 * i, 3); @@ -3033,6 +3045,7 @@ bool mjCModel::CopyBack(const mjModel* m) { copyvec(cameras[i]->quat, m->cam_quat+4*i, 4); cameras[i]->fovy = (double)m->cam_fovy[i]; cameras[i]->ipd = (double)m->cam_ipd[i]; + copyvec(cameras[i]->resolution, m->cam_resolution+2*i, 2); if (nuser_cam) { copyvec(cameras[i]->userdata.data(), m->cam_user + nuser_cam*i, nuser_cam); diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index df06cafe..9229faf9 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -1747,6 +1747,8 @@ void mjCGeom::Compile(void) { // apply geom pos/quat as offset mjuu_frameaccum(pos, quat, meshpos, pmesh->GetQuatPtr(typeinertia)); + mjuu_copyvec(pmesh->GetOffsetPosPtr(), meshpos, 3); + mjuu_copyvec(pmesh->GetOffsetQuatPtr(), pmesh->GetQuatPtr(typeinertia), 4); } // check size parameters @@ -1947,6 +1949,7 @@ mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) { fovy = 45; ipd = 0.068; userdata.clear(); + resolution[0] = resolution[1] = 1; // clear private variables body = 0; @@ -2001,6 +2004,12 @@ void mjCCamera::Compile(void) { if (targetbodyid==body->id) { throw mjCError(this, "parent-targeting in camera '%s' (id = %d)", name.c_str(), id); } + + // make sure the image size is finite + if (fovy >= 180) { + throw mjCError(this, "fovy too large in camera '%s' (id = %d, value = %d)", + name.c_str(), id, fovy); + } } @@ -4042,6 +4051,7 @@ void mjCSensor::Compile(void) { case mjSENS_TORQUE: case mjSENS_MAGNETOMETER: case mjSENS_RANGEFINDER: + case mjSENS_CAMPROJECTION: // must be attached to site if (objtype!=mjOBJ_SITE) { throw mjCError(this, @@ -4052,19 +4062,32 @@ void mjCSensor::Compile(void) { if (type==mjSENS_TOUCH || type==mjSENS_RANGEFINDER) { dim = 1; datatype = mjDATATYPE_POSITIVE; + } else if (type==mjSENS_CAMPROJECTION) { + dim = 2; + datatype = mjDATATYPE_REAL; } else { dim = 3; datatype = mjDATATYPE_REAL; } // set stage - if (type==mjSENS_MAGNETOMETER || type==mjSENS_RANGEFINDER) { + if (type==mjSENS_MAGNETOMETER || type==mjSENS_RANGEFINDER || type==mjSENS_CAMPROJECTION) { needstage = mjSTAGE_POS; } else if (type==mjSENS_GYRO || type==mjSENS_VELOCIMETER) { needstage = mjSTAGE_VEL; } else { needstage = mjSTAGE_ACC; } + + // check for camera resolution for camera projection sensor + if (type==mjSENS_CAMPROJECTION) { + mjCCamera* camref = (mjCCamera*) model->FindObject(mjOBJ_CAMERA, refname); + if (!camref->resolution[0] || !camref->resolution[1]) { + throw mjCError(this, + "camera projection sensor requires camera resolution '%s' (id = %d)", + name.c_str(), id); + } + } break; case mjSENS_JOINTPOS: diff --git a/src/user/user_objects.h b/src/user/user_objects.h index 148b3997..d8d012a4 100644 --- a/src/user/user_objects.h +++ b/src/user/user_objects.h @@ -465,6 +465,7 @@ class mjCCamera : public mjCBase { double ipd; // inter-pupilary distance double pos[3]; // position double quat[4]; // orientation + float resolution[2]; // resolution [pixel] std::vector userdata; // user data mjCAlternative alt; // alternative orientation specification @@ -576,6 +577,8 @@ class mjCMesh: public mjCBase { void Compile(const mjVFS* vfs); // compiler double* GetPosPtr(mjtMeshType type); // get position double* GetQuatPtr(mjtMeshType type); // get orientation + double* GetOffsetPosPtr(); // get position offset for geom + double* GetOffsetQuatPtr(); // get orientation offset for geom double* GetInertiaBoxPtr(mjtMeshType type); // get inertia box double& GetVolumeRef(mjtMeshType type); // get volume void FitGeom(mjCGeom* geom, double* meshpos); // approximate mesh with simple geom @@ -639,6 +642,8 @@ class mjCMesh: public mjCBase { double pos_surface_[3]; // CoM position double quat_volume_[4]; // inertia orientation double quat_surface_[4]; // inertia orientation + double pos_[3]; // translation applied to asset vertices + double quat_[4]; // rotation applied to asset vertices double boxsz_volume_[3]; // half-sizes of equivalent inertia box (volume) double boxsz_surface_[3]; // half-sizes of equivalent inertia box (surface) double aabb_[6]; // axis-aligned bounding box diff --git a/src/user/user_util.cc b/src/user/user_util.cc index 4882d4a5..1a8ccee3 100644 --- a/src/user/user_util.cc +++ b/src/user/user_util.cc @@ -669,6 +669,8 @@ std::string mjuu_extToContentType(std::string_view filename) { return "model/stl"; } else if (!strcasecmp(ext.c_str(), ".obj")) { return "model/obj"; + } else if (!strcasecmp(ext.c_str(), ".ply")) { + return "model/ply"; } else if (!strcasecmp(ext.c_str(), ".msh")) { return "model/vnd.mujoco.msh"; } else if (!strcasecmp(ext.c_str(), ".png")) { diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index dc5129d6..8e244550 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -80,7 +80,7 @@ void ReadPluginConfigs(tinyxml2::XMLElement* elem, mjCPlugin* pp) { //---------------------------------- MJCF schema --------------------------------------------------- -static const int nMJCF = 203; +static const int nMJCF = 204; static const char* MJCF[nMJCF][mjXATTRNUM] = { {"mujoco", "!", "1", "model"}, {"<"}, @@ -151,7 +151,7 @@ static const char* MJCF[nMJCF][mjXATTRNUM] = { "hfield", "mesh", "fitscale", "rgba", "fluidshape", "fluidcoef", "user"}, {"site", "?", "13", "type", "group", "pos", "quat", "material", "size", "fromto", "axisangle", "xyaxes", "zaxis", "euler", "rgba", "user"}, - {"camera", "?", "10", "fovy", "ipd", "pos", "quat", + {"camera", "?", "11", "fovy", "ipd", "pos", "quat", "resolution", "axisangle", "xyaxes", "zaxis", "euler", "mode", "user"}, {"light", "?", "12", "pos", "dir", "directional", "castshadow", "active", "attenuation", "cutoff", "exponent", "ambient", "diffuse", "specular", "mode"}, @@ -264,7 +264,7 @@ static const char* MJCF[nMJCF][mjXATTRNUM] = { {">"}, {"site", "*", "15", "name", "class", "type", "group", "pos", "quat", "material", "size", "fromto", "axisangle", "xyaxes", "zaxis", "euler", "rgba", "user"}, - {"camera", "*", "13", "name", "class", "fovy", "ipd", + {"camera", "*", "14", "name", "class", "fovy", "ipd", "resolution", "pos", "quat", "axisangle", "xyaxes", "zaxis", "euler", "mode", "target", "user"}, {"light", "*", "15", "name", "class", "directional", "castshadow", "active", @@ -398,6 +398,7 @@ static const char* MJCF[nMJCF][mjXATTRNUM] = { {"force", "*", "5", "name", "site", "cutoff", "noise", "user"}, {"torque", "*", "5", "name", "site", "cutoff", "noise", "user"}, {"magnetometer", "*", "5", "name", "site", "cutoff", "noise", "user"}, + {"camprojection", "*", "6", "name", "site", "camera", "cutoff", "noise", "user"}, {"rangefinder", "*", "5", "name", "site", "cutoff", "noise", "user"}, {"jointpos", "*", "5", "name", "joint", "cutoff", "noise", "user"}, {"jointvel", "*", "5", "name", "joint", "cutoff", "noise", "user"}, @@ -1476,6 +1477,10 @@ void mjXReader::OneCamera(XMLElement* elem, mjCCamera* pcam) { ReadAlternative(elem, pcam->alt); ReadAttr(elem, "fovy", 1, &pcam->fovy, text); ReadAttr(elem, "ipd", 1, &pcam->ipd, text); + ReadAttr(elem, "resolution", 2, pcam->resolution, text); + if (pcam->resolution[0] < 0 || pcam->resolution[1] < 0) { + throw mjXError(elem, "camera resolution cannot be negative"); + } // read userdata ReadVector(elem, "user", pcam->userdata, text); @@ -3013,6 +3018,12 @@ void mjXReader::Sensor(XMLElement* section) { psen->type = mjSENS_MAGNETOMETER; psen->objtype = mjOBJ_SITE; ReadAttrTxt(elem, "site", psen->objname, true); + } else if (type=="camprojection") { + psen->type = mjSENS_CAMPROJECTION; + psen->objtype = mjOBJ_SITE; + ReadAttrTxt(elem, "site", psen->objname, true); + ReadAttrTxt(elem, "camera", psen->refname, true); + psen->reftype = mjOBJ_CAMERA; } else if (type=="rangefinder") { psen->type = mjSENS_RANGEFINDER; psen->objtype = mjOBJ_SITE; diff --git a/src/xml/xml_native_writer.cc b/src/xml/xml_native_writer.cc index bcd0ffff..debe73b5 100644 --- a/src/xml/xml_native_writer.cc +++ b/src/xml/xml_native_writer.cc @@ -408,6 +408,7 @@ void mjXWriter::OneCamera(XMLElement* elem, mjCCamera* pcam, mjCDef* def) { WriteAttr(elem, "ipd", 1, &pcam->ipd, &def->camera.ipd); WriteAttr(elem, "fovy", 1, &pcam->fovy, &def->camera.fovy); WriteAttrKey(elem, "mode", camlight_map, camlight_sz, pcam->mode, def->camera.mode); + WriteAttr(elem, "resolution", 2, pcam->resolution, def->camera.resolution); // userdata if (writingdefaults) { @@ -1648,6 +1649,11 @@ void mjXWriter::Sensor(XMLElement* root) { elem = InsertEnd(section, "rangefinder"); WriteAttrTxt(elem, "site", psen->objname); break; + case mjSENS_CAMPROJECTION: + elem = InsertEnd(section, "camprojection"); + WriteAttrTxt(elem, "site", psen->objname); + WriteAttrTxt(elem, "camera", psen->refname); + break; // sensors related to scalar joints, tendons, actuators case mjSENS_JOINTPOS: @@ -1836,7 +1842,7 @@ void mjXWriter::Sensor(XMLElement* root) { WriteVector(elem, "user", psen->userdata); // add reference if present - if (psen->reftype != mjOBJ_UNKNOWN) { + if (psen->reftype != mjOBJ_UNKNOWN && psen->type != mjSENS_CAMPROJECTION) { WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); WriteAttrTxt(elem, "refname", psen->refname); } diff --git a/test/engine/engine_inverse_test.cc b/test/engine/engine_inverse_test.cc index a15b9c78..29936b0b 100644 --- a/test/engine/engine_inverse_test.cc +++ b/test/engine/engine_inverse_test.cc @@ -104,7 +104,7 @@ TEST_F(InverseTest, DiscreteInverseMatch) { // depending on mjENBL_INVDISCRETE flag, expect mismatch to be small/large if (invdiscrete) { - mjtNum epsilon = 1e-10; + mjtNum epsilon = 1e-9; EXPECT_LT(data->solver_fwdinv[0], epsilon); EXPECT_LT(data->solver_fwdinv[1], epsilon); } else { diff --git a/test/engine/engine_plugin_test.cc b/test/engine/engine_plugin_test.cc index 9966715d..abc69e82 100644 --- a/test/engine/engine_plugin_test.cc +++ b/test/engine/engine_plugin_test.cc @@ -32,7 +32,7 @@ namespace { using ::testing::HasSubstr; using ::testing::NotNull; -constexpr int kNumTruePlugins = 8; +constexpr int kNumTruePlugins = 9; constexpr int kNumFakePlugins = 30; constexpr int kNumTestPlugins = 3; diff --git a/test/engine/engine_sensor_test.cc b/test/engine/engine_sensor_test.cc index ae66fc0e..53101197 100644 --- a/test/engine/engine_sensor_test.cc +++ b/test/engine/engine_sensor_test.cc @@ -432,5 +432,51 @@ TEST_F(SensorTest, Clock) { mj_deleteModel(model); } +// ------------------------- camera sensor tests ----------------------------- + +// test clock sensor +TEST_F(SensorTest, CameraProjection) { + constexpr char xml[] = R"( + + + + + + + + + + + + + + + + + + + + )"; + mjModel* model = LoadModelFromString(xml); + mjData* data = mj_makeData(model); + + // call step to update sensors + mj_step(model, data); + mj_step1(model, data); // update values of position-based sensors + EXPECT_THAT(model->cam_resolution[0], 1920); + EXPECT_THAT(model->cam_resolution[1], 1200); + mjtNum eps = 1e-4; + EXPECT_NEAR(data->sensordata[0], 0, eps); + EXPECT_NEAR(data->sensordata[1], 0, eps); + EXPECT_NEAR(data->sensordata[2], 1920, eps); + EXPECT_NEAR(data->sensordata[3], 1200, eps); + EXPECT_NEAR(data->sensordata[4], 960, eps); + EXPECT_NEAR(data->sensordata[5], 600, eps); + + mj_deleteData(data); + mj_deleteModel(model); +} + } // namespace } // namespace mujoco diff --git a/test/engine/testdata/sensor/camprojection.xml b/test/engine/testdata/sensor/camprojection.xml new file mode 100644 index 00000000..b805a8ee --- /dev/null +++ b/test/engine/testdata/sensor/camprojection.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/pipeline_test.cc b/test/pipeline_test.cc index 2d9cb28e..fa2ffb9f 100644 --- a/test/pipeline_test.cc +++ b/test/pipeline_test.cc @@ -14,6 +14,9 @@ // Tests of the entire pipeline that are not easily associated with one file. +#include +#include + #include #include #include @@ -61,5 +64,48 @@ TEST_F(PipelineTest, SparseDenseEquivalent) { mj_deleteModel(model); } +// mj_forward should be deterministic when warm starts are disabled +TEST_F(PipelineTest, DeterministicNoWarmstart) { + const std::string xml_path = GetTestDataFilePath(kDefaultModel); + mjModel* model = mj_loadXML(xml_path.c_str(), nullptr, nullptr, 0); + mjData* data = mj_makeData(model); + mjData* data2 = mj_makeData(model); + + // disable warmstarts + model->opt.disableflags |= mjDSBL_WARMSTART; + + int nv = model->nv; + + int kNumSteps = 50; + + for (mjtSolver solver : {mjSOL_NEWTON, mjSOL_PGS, mjSOL_CG}) { + model->opt.solver = solver; + mj_resetData(model, data); + mj_resetData(model, data2); + + for (int step = 0; step < kNumSteps; step++) { + mj_step(model, data); + mj_forward(model, data); + + mj_step(model, data2); + mj_forward(model, data2); + + // test determinism: both models steps did the same thing + EXPECT_EQ(AsVector(data->qacc, nv), AsVector(data2->qacc, nv)); + + // one more mj_forward call on data2 + mj_forward(model, data2); + + // expect that the extra mj_forward call didn't change anything + EXPECT_EQ(AsVector(data->qacc, nv), AsVector(data2->qacc, nv)); + } + } + + mj_deleteData(data2); + mj_deleteData(data); + mj_deleteModel(model); +} + + } // namespace } // namespace mujoco diff --git a/test/thread/CMakeLists.txt b/test/thread/CMakeLists.txt new file mode 100644 index 00000000..920bea0d --- /dev/null +++ b/test/thread/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright 2023 DeepMind Technologies Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +mujoco_test(thread_pool_test) +target_link_libraries(thread_pool_test fixture gmock) + +mujoco_test(thread_queue_test) +target_link_libraries(thread_queue_test fixture gmock) diff --git a/test/thread/mjthread_test.cc b/test/thread/mjthread_test.cc deleted file mode 100644 index ba3ee7e9..00000000 --- a/test/thread/mjthread_test.cc +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2023 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include - -#include -#include -#include "src/thread/task.h" -#include "src/thread/thread_pool.h" - -namespace { - -struct TestFunctionArgs_ { - int input; - // make this atomic to avoid red-herring tsan failures. - std::atomic output; -}; -typedef struct TestFunctionArgs_ TestFunctionArgs; - -void* test_function(void* args) { - TestFunctionArgs* test_function_args = static_cast(args); - if (!test_function_args) { - return nullptr; - } - test_function_args->output = test_function_args->input; - return nullptr; -} - -TEST(TestMjThreadPool, EnsureStructClassSizeMatch) { - EXPECT_EQ(sizeof(mjTask), sizeof(mujoco::Task)); - EXPECT_EQ(sizeof(mjThreadPool), sizeof(mujoco::ThreadPool<128>)); -} - -TEST(TestMjThreadPool, TestMjThreadPool10Threads) { - mjThreadPool* thread_pool = mju_threadPoolCreate(10); - - TestFunctionArgs test_function_args[1000]; - mjTask tasks[1000]; - for (int i = 0; i < 1000; ++i) { - test_function_args[i].input = i; - mju_threadPoolEnqueue(thread_pool, &tasks[i], test_function, - (void*)&test_function_args[i]); - } - - for (int i = 0; i < 1000; ++i) { - mju_taskJoin(&tasks[i]); - } - - for (int i = 0; i < 1000; ++i) { - EXPECT_EQ(test_function_args[i].input, test_function_args[i].output); - } - mju_threadPoolDestroy(thread_pool); -} - -TEST(TestMjThreadPool, TestMjThreadPool100Threads) { - mjThreadPool* thread_pool = mju_threadPoolCreate(100); - - TestFunctionArgs test_function_args[1000]; - mjTask tasks[1000]; - for (int i = 0; i < 1000; ++i) { - test_function_args[i].input = i; - mju_threadPoolEnqueue(thread_pool, &tasks[i], test_function, - (void*)&test_function_args[i]); - } - - for (int i = 0; i < 1000; ++i) { - mju_taskJoin(&tasks[i]); - } - - for (int i = 0; i < 1000; ++i) { - EXPECT_EQ(test_function_args[i].input, test_function_args[i].output); - } - - mju_threadPoolDestroy(thread_pool); -} - -} // namespace diff --git a/test/thread/task_test.cc b/test/thread/task_test.cc deleted file mode 100644 index 7bd53274..00000000 --- a/test/thread/task_test.cc +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2023 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "src/thread/task.h" - -#include - -namespace mujoco { -namespace { - -struct TestFunctionArgs { - int input; - int output; -}; - -void* test_function(void* args) { - TestFunctionArgs* test_function_args = (TestFunctionArgs*)args; - test_function_args->output = test_function_args->input; - return nullptr; -} - -TEST(TestMjThread, TestMjThread) { - TestFunctionArgs test_function_args; - test_function_args.input = 1; - test_function_args.output = 2; - Task task; - Task::Initialize( - &task, test_function, static_cast(&test_function_args)); - task.Execute(); - task.Join(); - EXPECT_EQ(test_function_args.input, test_function_args.output); -} - -} // namespace -} // namespace mujoco diff --git a/test/thread/thread_pool_test.cc b/test/thread/thread_pool_test.cc index a488e21f..2532ec65 100644 --- a/test/thread/thread_pool_test.cc +++ b/test/thread/thread_pool_test.cc @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "src/thread/thread_pool.h" - #include #include #include @@ -21,75 +19,82 @@ #include #include -#include "src/thread/task.h" +#include namespace mujoco { namespace { -struct TestFunctionArgs { +struct TestFunctionArgs_ { int input; // make this atomic to avoid red-herring tsan failures. std::atomic output; }; +typedef struct TestFunctionArgs_ TestFunctionArgs; void* test_function(void* args) { TestFunctionArgs* test_function_args = static_cast(args); + if (!test_function_args) { + return nullptr; + } test_function_args->output = test_function_args->input; return nullptr; } TEST(TestMjThreadPool, TestMjThreadPool10Threads) { - ThreadPool<10> thread_pool(10); + mjThreadPool* thread_pool = mju_threadPoolCreate(10); constexpr int kTasks = 1000; TestFunctionArgs test_function_args[kTasks]; - Task tasks[kTasks]; + mjTask tasks[kTasks]; for (int i = 0; i < kTasks; ++i) { test_function_args[i].input = i; - thread_pool.Enqueue( - &tasks[i], test_function, static_cast(&test_function_args[i])); + mju_defaultTask(&tasks[i]); + tasks[i].func = test_function; + tasks[i].args = &test_function_args[i]; + mju_threadPoolEnqueue(thread_pool, &tasks[i]); } for (int i = 0; i < kTasks; ++i) { - tasks[i].Join(); + mju_taskJoin(&tasks[i]); } for (int i = 0; i < kTasks; ++i) { EXPECT_EQ(test_function_args[i].input, test_function_args[i].output); } - - thread_pool.Shutdown(); + mju_threadPoolDestroy(thread_pool); } TEST(TestMjThreadPool, TestMjThreadPool100Threads) { - ThreadPool<100> thread_pool(100); + mjThreadPool* thread_pool = mju_threadPoolCreate(100); constexpr int kTasks = 1000; TestFunctionArgs test_function_args[kTasks]; - Task tasks[kTasks]; + mjTask tasks[kTasks]; for (int i = 0; i < kTasks; ++i) { test_function_args[i].input = i; - thread_pool.Enqueue( - &tasks[i], test_function, static_cast(&test_function_args[i])); + mju_defaultTask(&tasks[i]); + tasks[i].func = test_function; + tasks[i].args = &test_function_args[i]; + mju_threadPoolEnqueue(thread_pool, &tasks[i]); } for (int i = 0; i < kTasks; ++i) { - tasks[i].Join(); + mju_taskJoin(&tasks[i]); } for (int i = 0; i < kTasks; ++i) { EXPECT_EQ(test_function_args[i].input, test_function_args[i].output); } - thread_pool.Shutdown(); + mju_threadPoolDestroy(thread_pool); } TEST(TestMjThreadPool, TestMjThreadPoolManyWriters) { - ThreadPool<10> thread_pool(10); + mjThreadPool* thread_pool = mju_threadPoolCreate(10); constexpr int kTasks = 20; TestFunctionArgs test_function_args[kTasks]; - Task tasks[kTasks]; + mjTask tasks[kTasks]; std::unique_ptr enqueue_threads[kTasks]; // add tasks to the thread pool from many threads @@ -98,6 +103,10 @@ TEST(TestMjThreadPool, TestMjThreadPoolManyWriters) { bool start = false; for (int i = 0; i < kTasks; ++i) { test_function_args[i].input = i; + mju_defaultTask(&tasks[i]); + tasks[i].func = &test_function; + tasks[i].args = &test_function_args[i]; + enqueue_threads[i] = std::make_unique([&, i] { // synchronize all threads adding to the thread_pool at the same time { @@ -105,8 +114,7 @@ TEST(TestMjThreadPool, TestMjThreadPoolManyWriters) { start_cv.wait(lock, [&] { return start; }); } // enqueue outside the lock, to get some concurrency - thread_pool.Enqueue( - &tasks[i], test_function, static_cast(&test_function_args[i])); + mju_threadPoolEnqueue(thread_pool, &tasks[i]); }); } { @@ -120,14 +128,14 @@ TEST(TestMjThreadPool, TestMjThreadPoolManyWriters) { } for (int i = 0; i < kTasks; ++i) { - tasks[i].Join(); + mju_taskJoin(&tasks[i]); } for (int i = 0; i < kTasks; ++i) { EXPECT_EQ(test_function_args[i].input, test_function_args[i].output); } - thread_pool.Shutdown(); + mju_threadPoolDestroy(thread_pool); } } // namespace diff --git a/test/thread/lockless_queue_test.cc b/test/thread/thread_queue_test.cc similarity index 97% rename from test/thread/lockless_queue_test.cc rename to test/thread/thread_queue_test.cc index 774f0ac4..7b68b6f9 100644 --- a/test/thread/lockless_queue_test.cc +++ b/test/thread/thread_queue_test.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "src/thread/lockless_queue.h" +#include "src/thread/thread_queue.h" #include diff --git a/test/user/user_mesh_test.cc b/test/user/user_mesh_test.cc index d3c65a4f..4013ed74 100644 --- a/test/user/user_mesh_test.cc +++ b/test/user/user_mesh_test.cc @@ -802,5 +802,62 @@ TEST_F(MjCMeshTest, ExactShellInertia) { mj_deleteModel(model); } +TEST_F(MjCMeshTest, MeshPosQuat) { + static constexpr char xml[] = R"( + + + + + + + + + + )"; + mjModel* model = LoadModelFromString(xml); + ASSERT_THAT(model, testing::NotNull()); + // Loading the mesh results in an offset of the geom's pos and quat due to the + // fact that the geom's center is not the volumetric center of the mesh. To + // recover the geom's originally specified pose, the offset used is stored in + // mesh_pos and mesh_quat. In order to recover the originally specified pose + // and orientation, first invert the specified mesh_pos and mesh_quat. + mjtNum inverse_mesh_pos[3]; + mjtNum inverse_mesh_quat[4]; + mju_negPose(inverse_mesh_pos, inverse_mesh_quat, + &model->mesh_pos[0], &model->mesh_quat[0]); + + // Apply the inverted mesh_pos and inverted mesh_quat to the geom's pos and + // quat. It should match the originally specified values. + double recovered_pos[3]; + double recovered_quat[4]; + mju_mulPose(recovered_pos, recovered_quat, + &model->geom_pos[0], &model->geom_quat[0], + inverse_mesh_pos, inverse_mesh_quat); + EXPECT_NEAR(recovered_pos[0], 0, 1e-12); + EXPECT_NEAR(recovered_pos[1], 0, 1e-12); + EXPECT_NEAR(recovered_pos[2], 0, 1e-12); + + EXPECT_NEAR(recovered_quat[0], 1, 1e-12); + EXPECT_NEAR(recovered_quat[1], 0, 1e-12); + EXPECT_NEAR(recovered_quat[2], 0, 1e-12); + EXPECT_NEAR(recovered_quat[3], 0, 1e-12); + + // Same test on the other geom. + mju_negPose(inverse_mesh_pos, inverse_mesh_quat, + &model->mesh_pos[0], &model->mesh_quat[0]); + mju_mulPose(recovered_pos, recovered_quat, + &model->geom_pos[3], &model->geom_quat[4], + inverse_mesh_pos, inverse_mesh_quat); + EXPECT_NEAR(recovered_pos[0], 1, 1e-12); + EXPECT_NEAR(recovered_pos[1], 2, 1e-12); + EXPECT_NEAR(recovered_pos[2], 3, 1e-12); + + EXPECT_NEAR(recovered_quat[0], 0.5, 1e-12); + EXPECT_NEAR(recovered_quat[1], 0.5, 1e-12); + EXPECT_NEAR(recovered_quat[2], 0.5, 1e-12); + EXPECT_NEAR(recovered_quat[3], 0.5, 1e-12); + mj_deleteModel(model); +} + } // namespace } // namespace mujoco diff --git a/test/user/user_objects_test.cc b/test/user/user_objects_test.cc index 7f4ce069..e7dd3b42 100644 --- a/test/user/user_objects_test.cc +++ b/test/user/user_objects_test.cc @@ -732,6 +732,28 @@ TEST_F(QuatNorm, QuatNotNormalized) { mj_deleteModel(m); } +// ------------- test camera specifications ------------------------------------ + +using CameraSpecTest = MujocoTest; + +TEST_F(CameraSpecTest, FovyLimits) { + static constexpr char xml[] = R"( + + + + + + + + + )"; + std::array error; + mjModel* m = LoadModelFromString(xml, error.data(), error.size()); + EXPECT_THAT(m, IsNull()) << error.data(); + EXPECT_THAT(error.data(), HasSubstr("fovy too large")); + mj_deleteModel(m); +} + // ------------- test actuator order ------------------------------------------- using ActuatorTest = MujocoTest; diff --git a/test/xml/xml_native_writer_test.cc b/test/xml/xml_native_writer_test.cc index 7d5b9ad2..97b2be9c 100644 --- a/test/xml/xml_native_writer_test.cc +++ b/test/xml/xml_native_writer_test.cc @@ -1063,7 +1063,8 @@ TEST_F(PluginTest, WriteReadCompare) { // if file is meant to fail, skip it if (absl::StrContains(p.path().string(), "malformed_") || - absl::StrContains(p.path().string(), "touch_grid")) { + absl::StrContains(p.path().string(), "touch_grid") || + absl::StrContains(p.path().string(), "cow")) { continue; } diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 2500e8a6..61da4982 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -50,7 +50,8 @@ public const int mjNBIAS = 10; public const int mjNFLUID = 12; public const int mjNREF = 2; public const int mjNIMP = 5; -public const int mjNSOLVER = 1000; +public const int mjNSOLVER = 200; +public const int mjNISLAND = 20; public const bool THIRD_PARTY_MUJOCO_INCLUDE_MJPLUGIN_H_ = true; public const bool mjEXTERNC = true; public const bool THIRD_PARTY_MUJOCO_MJRENDER_H_ = true; @@ -324,37 +325,38 @@ public enum mjtSensor : int{ mjSENS_TORQUE = 5, mjSENS_MAGNETOMETER = 6, mjSENS_RANGEFINDER = 7, - mjSENS_JOINTPOS = 8, - mjSENS_JOINTVEL = 9, - mjSENS_TENDONPOS = 10, - mjSENS_TENDONVEL = 11, - mjSENS_ACTUATORPOS = 12, - mjSENS_ACTUATORVEL = 13, - mjSENS_ACTUATORFRC = 14, - mjSENS_JOINTACTFRC = 15, - mjSENS_BALLQUAT = 16, - mjSENS_BALLANGVEL = 17, - mjSENS_JOINTLIMITPOS = 18, - mjSENS_JOINTLIMITVEL = 19, - mjSENS_JOINTLIMITFRC = 20, - mjSENS_TENDONLIMITPOS = 21, - mjSENS_TENDONLIMITVEL = 22, - mjSENS_TENDONLIMITFRC = 23, - mjSENS_FRAMEPOS = 24, - mjSENS_FRAMEQUAT = 25, - mjSENS_FRAMEXAXIS = 26, - mjSENS_FRAMEYAXIS = 27, - mjSENS_FRAMEZAXIS = 28, - mjSENS_FRAMELINVEL = 29, - mjSENS_FRAMEANGVEL = 30, - mjSENS_FRAMELINACC = 31, - mjSENS_FRAMEANGACC = 32, - mjSENS_SUBTREECOM = 33, - mjSENS_SUBTREELINVEL = 34, - mjSENS_SUBTREEANGMOM = 35, - mjSENS_CLOCK = 36, - mjSENS_PLUGIN = 37, - mjSENS_USER = 38, + mjSENS_CAMPROJECTION = 8, + mjSENS_JOINTPOS = 9, + mjSENS_JOINTVEL = 10, + mjSENS_TENDONPOS = 11, + mjSENS_TENDONVEL = 12, + mjSENS_ACTUATORPOS = 13, + mjSENS_ACTUATORVEL = 14, + mjSENS_ACTUATORFRC = 15, + mjSENS_JOINTACTFRC = 16, + mjSENS_BALLQUAT = 17, + mjSENS_BALLANGVEL = 18, + mjSENS_JOINTLIMITPOS = 19, + mjSENS_JOINTLIMITVEL = 20, + mjSENS_JOINTLIMITFRC = 21, + mjSENS_TENDONLIMITPOS = 22, + mjSENS_TENDONLIMITVEL = 23, + mjSENS_TENDONLIMITFRC = 24, + mjSENS_FRAMEPOS = 25, + mjSENS_FRAMEQUAT = 26, + mjSENS_FRAMEXAXIS = 27, + mjSENS_FRAMEYAXIS = 28, + mjSENS_FRAMEZAXIS = 29, + mjSENS_FRAMELINVEL = 30, + mjSENS_FRAMEANGVEL = 31, + mjSENS_FRAMELINACC = 32, + mjSENS_FRAMEANGACC = 33, + mjSENS_SUBTREECOM = 34, + mjSENS_SUBTREELINVEL = 35, + mjSENS_SUBTREEANGMOM = 36, + mjSENS_CLOCK = 37, + mjSENS_PLUGIN = 38, + mjSENS_USER = 39, } public enum mjtStage : int{ mjSTAGE_NONE = 0, @@ -403,6 +405,11 @@ public enum mjtFont : int{ mjFONT_SHADOW = 1, mjFONT_BIG = 2, } +public enum mjtTaskStatus : int{ + mjTASK_NEW = 0, + mjTASK_QUEUED = 1, + mjTASK_COMPLETED = 2, +} public enum mjtButton : int{ mjBUTTON_NONE = 0, mjBUTTON_LEFT = 1, @@ -1602,8 +1609,3009 @@ public unsafe struct mjData_ { public mjSolverStat_ solver997; public mjSolverStat_ solver998; public mjSolverStat_ solver999; - public int solver_iter; - public int solver_nnz; + public mjSolverStat_ solver1000; + public mjSolverStat_ solver1001; + public mjSolverStat_ solver1002; + public mjSolverStat_ solver1003; + public mjSolverStat_ solver1004; + public mjSolverStat_ solver1005; + public mjSolverStat_ solver1006; + public mjSolverStat_ solver1007; + public mjSolverStat_ solver1008; + public mjSolverStat_ solver1009; + public mjSolverStat_ solver1010; + public mjSolverStat_ solver1011; + public mjSolverStat_ solver1012; + public mjSolverStat_ solver1013; + public mjSolverStat_ solver1014; + public mjSolverStat_ solver1015; + public mjSolverStat_ solver1016; + public mjSolverStat_ solver1017; + public mjSolverStat_ solver1018; + public mjSolverStat_ solver1019; + public mjSolverStat_ solver1020; + public mjSolverStat_ solver1021; + public mjSolverStat_ solver1022; + public mjSolverStat_ solver1023; + public mjSolverStat_ solver1024; + public mjSolverStat_ solver1025; + public mjSolverStat_ solver1026; + public mjSolverStat_ solver1027; + public mjSolverStat_ solver1028; + public mjSolverStat_ solver1029; + public mjSolverStat_ solver1030; + public mjSolverStat_ solver1031; + public mjSolverStat_ solver1032; + public mjSolverStat_ solver1033; + public mjSolverStat_ solver1034; + public mjSolverStat_ solver1035; + public mjSolverStat_ solver1036; + public mjSolverStat_ solver1037; + public mjSolverStat_ solver1038; + public mjSolverStat_ solver1039; + public mjSolverStat_ solver1040; + public mjSolverStat_ solver1041; + public mjSolverStat_ solver1042; + public mjSolverStat_ solver1043; + public mjSolverStat_ solver1044; + public mjSolverStat_ solver1045; + public mjSolverStat_ solver1046; + public mjSolverStat_ solver1047; + public mjSolverStat_ solver1048; + public mjSolverStat_ solver1049; + public mjSolverStat_ solver1050; + public mjSolverStat_ solver1051; + public mjSolverStat_ solver1052; + public mjSolverStat_ solver1053; + public mjSolverStat_ solver1054; + public mjSolverStat_ solver1055; + public mjSolverStat_ solver1056; + public mjSolverStat_ solver1057; + public mjSolverStat_ solver1058; + public mjSolverStat_ solver1059; + public mjSolverStat_ solver1060; + public mjSolverStat_ solver1061; + public mjSolverStat_ solver1062; + public mjSolverStat_ solver1063; + public mjSolverStat_ solver1064; + public mjSolverStat_ solver1065; + public mjSolverStat_ solver1066; + public mjSolverStat_ solver1067; + public mjSolverStat_ solver1068; + public mjSolverStat_ solver1069; + public mjSolverStat_ solver1070; + public mjSolverStat_ solver1071; + public mjSolverStat_ solver1072; + public mjSolverStat_ solver1073; + public mjSolverStat_ solver1074; + public mjSolverStat_ solver1075; + public mjSolverStat_ solver1076; + public mjSolverStat_ solver1077; + public mjSolverStat_ solver1078; + public mjSolverStat_ solver1079; + public mjSolverStat_ solver1080; + public mjSolverStat_ solver1081; + public mjSolverStat_ solver1082; + public mjSolverStat_ solver1083; + public mjSolverStat_ solver1084; + public mjSolverStat_ solver1085; + public mjSolverStat_ solver1086; + public mjSolverStat_ solver1087; + public mjSolverStat_ solver1088; + public mjSolverStat_ solver1089; + public mjSolverStat_ solver1090; + public mjSolverStat_ solver1091; + public mjSolverStat_ solver1092; + public mjSolverStat_ solver1093; + public mjSolverStat_ solver1094; + public mjSolverStat_ solver1095; + public mjSolverStat_ solver1096; + public mjSolverStat_ solver1097; + public mjSolverStat_ solver1098; + public mjSolverStat_ solver1099; + public mjSolverStat_ solver1100; + public mjSolverStat_ solver1101; + public mjSolverStat_ solver1102; + public mjSolverStat_ solver1103; + public mjSolverStat_ solver1104; + public mjSolverStat_ solver1105; + public mjSolverStat_ solver1106; + public mjSolverStat_ solver1107; + public mjSolverStat_ solver1108; + public mjSolverStat_ solver1109; + public mjSolverStat_ solver1110; + public mjSolverStat_ solver1111; + public mjSolverStat_ solver1112; + public mjSolverStat_ solver1113; + public mjSolverStat_ solver1114; + public mjSolverStat_ solver1115; + public mjSolverStat_ solver1116; + public mjSolverStat_ solver1117; + public mjSolverStat_ solver1118; + public mjSolverStat_ solver1119; + public mjSolverStat_ solver1120; + public mjSolverStat_ solver1121; + public mjSolverStat_ solver1122; + public mjSolverStat_ solver1123; + public mjSolverStat_ solver1124; + public mjSolverStat_ solver1125; + public mjSolverStat_ solver1126; + public mjSolverStat_ solver1127; + public mjSolverStat_ solver1128; + public mjSolverStat_ solver1129; + public mjSolverStat_ solver1130; + public mjSolverStat_ solver1131; + public mjSolverStat_ solver1132; + public mjSolverStat_ solver1133; + public mjSolverStat_ solver1134; + public mjSolverStat_ solver1135; + public mjSolverStat_ solver1136; + public mjSolverStat_ solver1137; + public mjSolverStat_ solver1138; + public mjSolverStat_ solver1139; + public mjSolverStat_ solver1140; + public mjSolverStat_ solver1141; + public mjSolverStat_ solver1142; + public mjSolverStat_ solver1143; + public mjSolverStat_ solver1144; + public mjSolverStat_ solver1145; + public mjSolverStat_ solver1146; + public mjSolverStat_ solver1147; + public mjSolverStat_ solver1148; + public mjSolverStat_ solver1149; + public mjSolverStat_ solver1150; + public mjSolverStat_ solver1151; + public mjSolverStat_ solver1152; + public mjSolverStat_ solver1153; + public mjSolverStat_ solver1154; + public mjSolverStat_ solver1155; + public mjSolverStat_ solver1156; + public mjSolverStat_ solver1157; + public mjSolverStat_ solver1158; + public mjSolverStat_ solver1159; + public mjSolverStat_ solver1160; + public mjSolverStat_ solver1161; + public mjSolverStat_ solver1162; + public mjSolverStat_ solver1163; + public mjSolverStat_ solver1164; + public mjSolverStat_ solver1165; + public mjSolverStat_ solver1166; + public mjSolverStat_ solver1167; + public mjSolverStat_ solver1168; + public mjSolverStat_ solver1169; + public mjSolverStat_ solver1170; + public mjSolverStat_ solver1171; + public mjSolverStat_ solver1172; + public mjSolverStat_ solver1173; + public mjSolverStat_ solver1174; + public mjSolverStat_ solver1175; + public mjSolverStat_ solver1176; + public mjSolverStat_ solver1177; + public mjSolverStat_ solver1178; + public mjSolverStat_ solver1179; + public mjSolverStat_ solver1180; + public mjSolverStat_ solver1181; + public mjSolverStat_ solver1182; + public mjSolverStat_ solver1183; + public mjSolverStat_ solver1184; + public mjSolverStat_ solver1185; + public mjSolverStat_ solver1186; + public mjSolverStat_ solver1187; + public mjSolverStat_ solver1188; + public mjSolverStat_ solver1189; + public mjSolverStat_ solver1190; + public mjSolverStat_ solver1191; + public mjSolverStat_ solver1192; + public mjSolverStat_ solver1193; + public mjSolverStat_ solver1194; + public mjSolverStat_ solver1195; + public mjSolverStat_ solver1196; + public mjSolverStat_ solver1197; + public mjSolverStat_ solver1198; + public mjSolverStat_ solver1199; + public mjSolverStat_ solver1200; + public mjSolverStat_ solver1201; + public mjSolverStat_ solver1202; + public mjSolverStat_ solver1203; + public mjSolverStat_ solver1204; + public mjSolverStat_ solver1205; + public mjSolverStat_ solver1206; + public mjSolverStat_ solver1207; + public mjSolverStat_ solver1208; + public mjSolverStat_ solver1209; + public mjSolverStat_ solver1210; + public mjSolverStat_ solver1211; + public mjSolverStat_ solver1212; + public mjSolverStat_ solver1213; + public mjSolverStat_ solver1214; + public mjSolverStat_ solver1215; + public mjSolverStat_ solver1216; + public mjSolverStat_ solver1217; + public mjSolverStat_ solver1218; + public mjSolverStat_ solver1219; + public mjSolverStat_ solver1220; + public mjSolverStat_ solver1221; + public mjSolverStat_ solver1222; + public mjSolverStat_ solver1223; + public mjSolverStat_ solver1224; + public mjSolverStat_ solver1225; + public mjSolverStat_ solver1226; + public mjSolverStat_ solver1227; + public mjSolverStat_ solver1228; + public mjSolverStat_ solver1229; + public mjSolverStat_ solver1230; + public mjSolverStat_ solver1231; + public mjSolverStat_ solver1232; + public mjSolverStat_ solver1233; + public mjSolverStat_ solver1234; + public mjSolverStat_ solver1235; + public mjSolverStat_ solver1236; + public mjSolverStat_ solver1237; + public mjSolverStat_ solver1238; + public mjSolverStat_ solver1239; + public mjSolverStat_ solver1240; + public mjSolverStat_ solver1241; + public mjSolverStat_ solver1242; + public mjSolverStat_ solver1243; + public mjSolverStat_ solver1244; + public mjSolverStat_ solver1245; + public mjSolverStat_ solver1246; + public mjSolverStat_ solver1247; + public mjSolverStat_ solver1248; + public mjSolverStat_ solver1249; + public mjSolverStat_ solver1250; + public mjSolverStat_ solver1251; + public mjSolverStat_ solver1252; + public mjSolverStat_ solver1253; + public mjSolverStat_ solver1254; + public mjSolverStat_ solver1255; + public mjSolverStat_ solver1256; + public mjSolverStat_ solver1257; + public mjSolverStat_ solver1258; + public mjSolverStat_ solver1259; + public mjSolverStat_ solver1260; + public mjSolverStat_ solver1261; + public mjSolverStat_ solver1262; + public mjSolverStat_ solver1263; + public mjSolverStat_ solver1264; + public mjSolverStat_ solver1265; + public mjSolverStat_ solver1266; + public mjSolverStat_ solver1267; + public mjSolverStat_ solver1268; + public mjSolverStat_ solver1269; + public mjSolverStat_ solver1270; + public mjSolverStat_ solver1271; + public mjSolverStat_ solver1272; + public mjSolverStat_ solver1273; + public mjSolverStat_ solver1274; + public mjSolverStat_ solver1275; + public mjSolverStat_ solver1276; + public mjSolverStat_ solver1277; + public mjSolverStat_ solver1278; + public mjSolverStat_ solver1279; + public mjSolverStat_ solver1280; + public mjSolverStat_ solver1281; + public mjSolverStat_ solver1282; + public mjSolverStat_ solver1283; + public mjSolverStat_ solver1284; + public mjSolverStat_ solver1285; + public mjSolverStat_ solver1286; + public mjSolverStat_ solver1287; + public mjSolverStat_ solver1288; + public mjSolverStat_ solver1289; + public mjSolverStat_ solver1290; + public mjSolverStat_ solver1291; + public mjSolverStat_ solver1292; + public mjSolverStat_ solver1293; + public mjSolverStat_ solver1294; + public mjSolverStat_ solver1295; + public mjSolverStat_ solver1296; + public mjSolverStat_ solver1297; + public mjSolverStat_ solver1298; + public mjSolverStat_ solver1299; + public mjSolverStat_ solver1300; + public mjSolverStat_ solver1301; + public mjSolverStat_ solver1302; + public mjSolverStat_ solver1303; + public mjSolverStat_ solver1304; + public mjSolverStat_ solver1305; + public mjSolverStat_ solver1306; + public mjSolverStat_ solver1307; + public mjSolverStat_ solver1308; + public mjSolverStat_ solver1309; + public mjSolverStat_ solver1310; + public mjSolverStat_ solver1311; + public mjSolverStat_ solver1312; + public mjSolverStat_ solver1313; + public mjSolverStat_ solver1314; + public mjSolverStat_ solver1315; + public mjSolverStat_ solver1316; + public mjSolverStat_ solver1317; + public mjSolverStat_ solver1318; + public mjSolverStat_ solver1319; + public mjSolverStat_ solver1320; + public mjSolverStat_ solver1321; + public mjSolverStat_ solver1322; + public mjSolverStat_ solver1323; + public mjSolverStat_ solver1324; + public mjSolverStat_ solver1325; + public mjSolverStat_ solver1326; + public mjSolverStat_ solver1327; + public mjSolverStat_ solver1328; + public mjSolverStat_ solver1329; + public mjSolverStat_ solver1330; + public mjSolverStat_ solver1331; + public mjSolverStat_ solver1332; + public mjSolverStat_ solver1333; + public mjSolverStat_ solver1334; + public mjSolverStat_ solver1335; + public mjSolverStat_ solver1336; + public mjSolverStat_ solver1337; + public mjSolverStat_ solver1338; + public mjSolverStat_ solver1339; + public mjSolverStat_ solver1340; + public mjSolverStat_ solver1341; + public mjSolverStat_ solver1342; + public mjSolverStat_ solver1343; + public mjSolverStat_ solver1344; + public mjSolverStat_ solver1345; + public mjSolverStat_ solver1346; + public mjSolverStat_ solver1347; + public mjSolverStat_ solver1348; + public mjSolverStat_ solver1349; + public mjSolverStat_ solver1350; + public mjSolverStat_ solver1351; + public mjSolverStat_ solver1352; + public mjSolverStat_ solver1353; + public mjSolverStat_ solver1354; + public mjSolverStat_ solver1355; + public mjSolverStat_ solver1356; + public mjSolverStat_ solver1357; + public mjSolverStat_ solver1358; + public mjSolverStat_ solver1359; + public mjSolverStat_ solver1360; + public mjSolverStat_ solver1361; + public mjSolverStat_ solver1362; + public mjSolverStat_ solver1363; + public mjSolverStat_ solver1364; + public mjSolverStat_ solver1365; + public mjSolverStat_ solver1366; + public mjSolverStat_ solver1367; + public mjSolverStat_ solver1368; + public mjSolverStat_ solver1369; + public mjSolverStat_ solver1370; + public mjSolverStat_ solver1371; + public mjSolverStat_ solver1372; + public mjSolverStat_ solver1373; + public mjSolverStat_ solver1374; + public mjSolverStat_ solver1375; + public mjSolverStat_ solver1376; + public mjSolverStat_ solver1377; + public mjSolverStat_ solver1378; + public mjSolverStat_ solver1379; + public mjSolverStat_ solver1380; + public mjSolverStat_ solver1381; + public mjSolverStat_ solver1382; + public mjSolverStat_ solver1383; + public mjSolverStat_ solver1384; + public mjSolverStat_ solver1385; + public mjSolverStat_ solver1386; + public mjSolverStat_ solver1387; + public mjSolverStat_ solver1388; + public mjSolverStat_ solver1389; + public mjSolverStat_ solver1390; + public mjSolverStat_ solver1391; + public mjSolverStat_ solver1392; + public mjSolverStat_ solver1393; + public mjSolverStat_ solver1394; + public mjSolverStat_ solver1395; + public mjSolverStat_ solver1396; + public mjSolverStat_ solver1397; + public mjSolverStat_ solver1398; + public mjSolverStat_ solver1399; + public mjSolverStat_ solver1400; + public mjSolverStat_ solver1401; + public mjSolverStat_ solver1402; + public mjSolverStat_ solver1403; + public mjSolverStat_ solver1404; + public mjSolverStat_ solver1405; + public mjSolverStat_ solver1406; + public mjSolverStat_ solver1407; + public mjSolverStat_ solver1408; + public mjSolverStat_ solver1409; + public mjSolverStat_ solver1410; + public mjSolverStat_ solver1411; + public mjSolverStat_ solver1412; + public mjSolverStat_ solver1413; + public mjSolverStat_ solver1414; + public mjSolverStat_ solver1415; + public mjSolverStat_ solver1416; + public mjSolverStat_ solver1417; + public mjSolverStat_ solver1418; + public mjSolverStat_ solver1419; + public mjSolverStat_ solver1420; + public mjSolverStat_ solver1421; + public mjSolverStat_ solver1422; + public mjSolverStat_ solver1423; + public mjSolverStat_ solver1424; + public mjSolverStat_ solver1425; + public mjSolverStat_ solver1426; + public mjSolverStat_ solver1427; + public mjSolverStat_ solver1428; + public mjSolverStat_ solver1429; + public mjSolverStat_ solver1430; + public mjSolverStat_ solver1431; + public mjSolverStat_ solver1432; + public mjSolverStat_ solver1433; + public mjSolverStat_ solver1434; + public mjSolverStat_ solver1435; + public mjSolverStat_ solver1436; + public mjSolverStat_ solver1437; + public mjSolverStat_ solver1438; + public mjSolverStat_ solver1439; + public mjSolverStat_ solver1440; + public mjSolverStat_ solver1441; + public mjSolverStat_ solver1442; + public mjSolverStat_ solver1443; + public mjSolverStat_ solver1444; + public mjSolverStat_ solver1445; + public mjSolverStat_ solver1446; + public mjSolverStat_ solver1447; + public mjSolverStat_ solver1448; + public mjSolverStat_ solver1449; + public mjSolverStat_ solver1450; + public mjSolverStat_ solver1451; + public mjSolverStat_ solver1452; + public mjSolverStat_ solver1453; + public mjSolverStat_ solver1454; + public mjSolverStat_ solver1455; + public mjSolverStat_ solver1456; + public mjSolverStat_ solver1457; + public mjSolverStat_ solver1458; + public mjSolverStat_ solver1459; + public mjSolverStat_ solver1460; + public mjSolverStat_ solver1461; + public mjSolverStat_ solver1462; + public mjSolverStat_ solver1463; + public mjSolverStat_ solver1464; + public mjSolverStat_ solver1465; + public mjSolverStat_ solver1466; + public mjSolverStat_ solver1467; + public mjSolverStat_ solver1468; + public mjSolverStat_ solver1469; + public mjSolverStat_ solver1470; + public mjSolverStat_ solver1471; + public mjSolverStat_ solver1472; + public mjSolverStat_ solver1473; + public mjSolverStat_ solver1474; + public mjSolverStat_ solver1475; + public mjSolverStat_ solver1476; + public mjSolverStat_ solver1477; + public mjSolverStat_ solver1478; + public mjSolverStat_ solver1479; + public mjSolverStat_ solver1480; + public mjSolverStat_ solver1481; + public mjSolverStat_ solver1482; + public mjSolverStat_ solver1483; + public mjSolverStat_ solver1484; + public mjSolverStat_ solver1485; + public mjSolverStat_ solver1486; + public mjSolverStat_ solver1487; + public mjSolverStat_ solver1488; + public mjSolverStat_ solver1489; + public mjSolverStat_ solver1490; + public mjSolverStat_ solver1491; + public mjSolverStat_ solver1492; + public mjSolverStat_ solver1493; + public mjSolverStat_ solver1494; + public mjSolverStat_ solver1495; + public mjSolverStat_ solver1496; + public mjSolverStat_ solver1497; + public mjSolverStat_ solver1498; + public mjSolverStat_ solver1499; + public mjSolverStat_ solver1500; + public mjSolverStat_ solver1501; + public mjSolverStat_ solver1502; + public mjSolverStat_ solver1503; + public mjSolverStat_ solver1504; + public mjSolverStat_ solver1505; + public mjSolverStat_ solver1506; + public mjSolverStat_ solver1507; + public mjSolverStat_ solver1508; + public mjSolverStat_ solver1509; + public mjSolverStat_ solver1510; + public mjSolverStat_ solver1511; + public mjSolverStat_ solver1512; + public mjSolverStat_ solver1513; + public mjSolverStat_ solver1514; + public mjSolverStat_ solver1515; + public mjSolverStat_ solver1516; + public mjSolverStat_ solver1517; + public mjSolverStat_ solver1518; + public mjSolverStat_ solver1519; + public mjSolverStat_ solver1520; + public mjSolverStat_ solver1521; + public mjSolverStat_ solver1522; + public mjSolverStat_ solver1523; + public mjSolverStat_ solver1524; + public mjSolverStat_ solver1525; + public mjSolverStat_ solver1526; + public mjSolverStat_ solver1527; + public mjSolverStat_ solver1528; + public mjSolverStat_ solver1529; + public mjSolverStat_ solver1530; + public mjSolverStat_ solver1531; + public mjSolverStat_ solver1532; + public mjSolverStat_ solver1533; + public mjSolverStat_ solver1534; + public mjSolverStat_ solver1535; + public mjSolverStat_ solver1536; + public mjSolverStat_ solver1537; + public mjSolverStat_ solver1538; + public mjSolverStat_ solver1539; + public mjSolverStat_ solver1540; + public mjSolverStat_ solver1541; + public mjSolverStat_ solver1542; + public mjSolverStat_ solver1543; + public mjSolverStat_ solver1544; + public mjSolverStat_ solver1545; + public mjSolverStat_ solver1546; + public mjSolverStat_ solver1547; + public mjSolverStat_ solver1548; + public mjSolverStat_ solver1549; + public mjSolverStat_ solver1550; + public mjSolverStat_ solver1551; + public mjSolverStat_ solver1552; + public mjSolverStat_ solver1553; + public mjSolverStat_ solver1554; + public mjSolverStat_ solver1555; + public mjSolverStat_ solver1556; + public mjSolverStat_ solver1557; + public mjSolverStat_ solver1558; + public mjSolverStat_ solver1559; + public mjSolverStat_ solver1560; + public mjSolverStat_ solver1561; + public mjSolverStat_ solver1562; + public mjSolverStat_ solver1563; + public mjSolverStat_ solver1564; + public mjSolverStat_ solver1565; + public mjSolverStat_ solver1566; + public mjSolverStat_ solver1567; + public mjSolverStat_ solver1568; + public mjSolverStat_ solver1569; + public mjSolverStat_ solver1570; + public mjSolverStat_ solver1571; + public mjSolverStat_ solver1572; + public mjSolverStat_ solver1573; + public mjSolverStat_ solver1574; + public mjSolverStat_ solver1575; + public mjSolverStat_ solver1576; + public mjSolverStat_ solver1577; + public mjSolverStat_ solver1578; + public mjSolverStat_ solver1579; + public mjSolverStat_ solver1580; + public mjSolverStat_ solver1581; + public mjSolverStat_ solver1582; + public mjSolverStat_ solver1583; + public mjSolverStat_ solver1584; + public mjSolverStat_ solver1585; + public mjSolverStat_ solver1586; + public mjSolverStat_ solver1587; + public mjSolverStat_ solver1588; + public mjSolverStat_ solver1589; + public mjSolverStat_ solver1590; + public mjSolverStat_ solver1591; + public mjSolverStat_ solver1592; + public mjSolverStat_ solver1593; + public mjSolverStat_ solver1594; + public mjSolverStat_ solver1595; + public mjSolverStat_ solver1596; + public mjSolverStat_ solver1597; + public mjSolverStat_ solver1598; + public mjSolverStat_ solver1599; + public mjSolverStat_ solver1600; + public mjSolverStat_ solver1601; + public mjSolverStat_ solver1602; + public mjSolverStat_ solver1603; + public mjSolverStat_ solver1604; + public mjSolverStat_ solver1605; + public mjSolverStat_ solver1606; + public mjSolverStat_ solver1607; + public mjSolverStat_ solver1608; + public mjSolverStat_ solver1609; + public mjSolverStat_ solver1610; + public mjSolverStat_ solver1611; + public mjSolverStat_ solver1612; + public mjSolverStat_ solver1613; + public mjSolverStat_ solver1614; + public mjSolverStat_ solver1615; + public mjSolverStat_ solver1616; + public mjSolverStat_ solver1617; + public mjSolverStat_ solver1618; + public mjSolverStat_ solver1619; + public mjSolverStat_ solver1620; + public mjSolverStat_ solver1621; + public mjSolverStat_ solver1622; + public mjSolverStat_ solver1623; + public mjSolverStat_ solver1624; + public mjSolverStat_ solver1625; + public mjSolverStat_ solver1626; + public mjSolverStat_ solver1627; + public mjSolverStat_ solver1628; + public mjSolverStat_ solver1629; + public mjSolverStat_ solver1630; + public mjSolverStat_ solver1631; + public mjSolverStat_ solver1632; + public mjSolverStat_ solver1633; + public mjSolverStat_ solver1634; + public mjSolverStat_ solver1635; + public mjSolverStat_ solver1636; + public mjSolverStat_ solver1637; + public mjSolverStat_ solver1638; + public mjSolverStat_ solver1639; + public mjSolverStat_ solver1640; + public mjSolverStat_ solver1641; + public mjSolverStat_ solver1642; + public mjSolverStat_ solver1643; + public mjSolverStat_ solver1644; + public mjSolverStat_ solver1645; + public mjSolverStat_ solver1646; + public mjSolverStat_ solver1647; + public mjSolverStat_ solver1648; + public mjSolverStat_ solver1649; + public mjSolverStat_ solver1650; + public mjSolverStat_ solver1651; + public mjSolverStat_ solver1652; + public mjSolverStat_ solver1653; + public mjSolverStat_ solver1654; + public mjSolverStat_ solver1655; + public mjSolverStat_ solver1656; + public mjSolverStat_ solver1657; + public mjSolverStat_ solver1658; + public mjSolverStat_ solver1659; + public mjSolverStat_ solver1660; + public mjSolverStat_ solver1661; + public mjSolverStat_ solver1662; + public mjSolverStat_ solver1663; + public mjSolverStat_ solver1664; + public mjSolverStat_ solver1665; + public mjSolverStat_ solver1666; + public mjSolverStat_ solver1667; + public mjSolverStat_ solver1668; + public mjSolverStat_ solver1669; + public mjSolverStat_ solver1670; + public mjSolverStat_ solver1671; + public mjSolverStat_ solver1672; + public mjSolverStat_ solver1673; + public mjSolverStat_ solver1674; + public mjSolverStat_ solver1675; + public mjSolverStat_ solver1676; + public mjSolverStat_ solver1677; + public mjSolverStat_ solver1678; + public mjSolverStat_ solver1679; + public mjSolverStat_ solver1680; + public mjSolverStat_ solver1681; + public mjSolverStat_ solver1682; + public mjSolverStat_ solver1683; + public mjSolverStat_ solver1684; + public mjSolverStat_ solver1685; + public mjSolverStat_ solver1686; + public mjSolverStat_ solver1687; + public mjSolverStat_ solver1688; + public mjSolverStat_ solver1689; + public mjSolverStat_ solver1690; + public mjSolverStat_ solver1691; + public mjSolverStat_ solver1692; + public mjSolverStat_ solver1693; + public mjSolverStat_ solver1694; + public mjSolverStat_ solver1695; + public mjSolverStat_ solver1696; + public mjSolverStat_ solver1697; + public mjSolverStat_ solver1698; + public mjSolverStat_ solver1699; + public mjSolverStat_ solver1700; + public mjSolverStat_ solver1701; + public mjSolverStat_ solver1702; + public mjSolverStat_ solver1703; + public mjSolverStat_ solver1704; + public mjSolverStat_ solver1705; + public mjSolverStat_ solver1706; + public mjSolverStat_ solver1707; + public mjSolverStat_ solver1708; + public mjSolverStat_ solver1709; + public mjSolverStat_ solver1710; + public mjSolverStat_ solver1711; + public mjSolverStat_ solver1712; + public mjSolverStat_ solver1713; + public mjSolverStat_ solver1714; + public mjSolverStat_ solver1715; + public mjSolverStat_ solver1716; + public mjSolverStat_ solver1717; + public mjSolverStat_ solver1718; + public mjSolverStat_ solver1719; + public mjSolverStat_ solver1720; + public mjSolverStat_ solver1721; + public mjSolverStat_ solver1722; + public mjSolverStat_ solver1723; + public mjSolverStat_ solver1724; + public mjSolverStat_ solver1725; + public mjSolverStat_ solver1726; + public mjSolverStat_ solver1727; + public mjSolverStat_ solver1728; + public mjSolverStat_ solver1729; + public mjSolverStat_ solver1730; + public mjSolverStat_ solver1731; + public mjSolverStat_ solver1732; + public mjSolverStat_ solver1733; + public mjSolverStat_ solver1734; + public mjSolverStat_ solver1735; + public mjSolverStat_ solver1736; + public mjSolverStat_ solver1737; + public mjSolverStat_ solver1738; + public mjSolverStat_ solver1739; + public mjSolverStat_ solver1740; + public mjSolverStat_ solver1741; + public mjSolverStat_ solver1742; + public mjSolverStat_ solver1743; + public mjSolverStat_ solver1744; + public mjSolverStat_ solver1745; + public mjSolverStat_ solver1746; + public mjSolverStat_ solver1747; + public mjSolverStat_ solver1748; + public mjSolverStat_ solver1749; + public mjSolverStat_ solver1750; + public mjSolverStat_ solver1751; + public mjSolverStat_ solver1752; + public mjSolverStat_ solver1753; + public mjSolverStat_ solver1754; + public mjSolverStat_ solver1755; + public mjSolverStat_ solver1756; + public mjSolverStat_ solver1757; + public mjSolverStat_ solver1758; + public mjSolverStat_ solver1759; + public mjSolverStat_ solver1760; + public mjSolverStat_ solver1761; + public mjSolverStat_ solver1762; + public mjSolverStat_ solver1763; + public mjSolverStat_ solver1764; + public mjSolverStat_ solver1765; + public mjSolverStat_ solver1766; + public mjSolverStat_ solver1767; + public mjSolverStat_ solver1768; + public mjSolverStat_ solver1769; + public mjSolverStat_ solver1770; + public mjSolverStat_ solver1771; + public mjSolverStat_ solver1772; + public mjSolverStat_ solver1773; + public mjSolverStat_ solver1774; + public mjSolverStat_ solver1775; + public mjSolverStat_ solver1776; + public mjSolverStat_ solver1777; + public mjSolverStat_ solver1778; + public mjSolverStat_ solver1779; + public mjSolverStat_ solver1780; + public mjSolverStat_ solver1781; + public mjSolverStat_ solver1782; + public mjSolverStat_ solver1783; + public mjSolverStat_ solver1784; + public mjSolverStat_ solver1785; + public mjSolverStat_ solver1786; + public mjSolverStat_ solver1787; + public mjSolverStat_ solver1788; + public mjSolverStat_ solver1789; + public mjSolverStat_ solver1790; + public mjSolverStat_ solver1791; + public mjSolverStat_ solver1792; + public mjSolverStat_ solver1793; + public mjSolverStat_ solver1794; + public mjSolverStat_ solver1795; + public mjSolverStat_ solver1796; + public mjSolverStat_ solver1797; + public mjSolverStat_ solver1798; + public mjSolverStat_ solver1799; + public mjSolverStat_ solver1800; + public mjSolverStat_ solver1801; + public mjSolverStat_ solver1802; + public mjSolverStat_ solver1803; + public mjSolverStat_ solver1804; + public mjSolverStat_ solver1805; + public mjSolverStat_ solver1806; + public mjSolverStat_ solver1807; + public mjSolverStat_ solver1808; + public mjSolverStat_ solver1809; + public mjSolverStat_ solver1810; + public mjSolverStat_ solver1811; + public mjSolverStat_ solver1812; + public mjSolverStat_ solver1813; + public mjSolverStat_ solver1814; + public mjSolverStat_ solver1815; + public mjSolverStat_ solver1816; + public mjSolverStat_ solver1817; + public mjSolverStat_ solver1818; + public mjSolverStat_ solver1819; + public mjSolverStat_ solver1820; + public mjSolverStat_ solver1821; + public mjSolverStat_ solver1822; + public mjSolverStat_ solver1823; + public mjSolverStat_ solver1824; + public mjSolverStat_ solver1825; + public mjSolverStat_ solver1826; + public mjSolverStat_ solver1827; + public mjSolverStat_ solver1828; + public mjSolverStat_ solver1829; + public mjSolverStat_ solver1830; + public mjSolverStat_ solver1831; + public mjSolverStat_ solver1832; + public mjSolverStat_ solver1833; + public mjSolverStat_ solver1834; + public mjSolverStat_ solver1835; + public mjSolverStat_ solver1836; + public mjSolverStat_ solver1837; + public mjSolverStat_ solver1838; + public mjSolverStat_ solver1839; + public mjSolverStat_ solver1840; + public mjSolverStat_ solver1841; + public mjSolverStat_ solver1842; + public mjSolverStat_ solver1843; + public mjSolverStat_ solver1844; + public mjSolverStat_ solver1845; + public mjSolverStat_ solver1846; + public mjSolverStat_ solver1847; + public mjSolverStat_ solver1848; + public mjSolverStat_ solver1849; + public mjSolverStat_ solver1850; + public mjSolverStat_ solver1851; + public mjSolverStat_ solver1852; + public mjSolverStat_ solver1853; + public mjSolverStat_ solver1854; + public mjSolverStat_ solver1855; + public mjSolverStat_ solver1856; + public mjSolverStat_ solver1857; + public mjSolverStat_ solver1858; + public mjSolverStat_ solver1859; + public mjSolverStat_ solver1860; + public mjSolverStat_ solver1861; + public mjSolverStat_ solver1862; + public mjSolverStat_ solver1863; + public mjSolverStat_ solver1864; + public mjSolverStat_ solver1865; + public mjSolverStat_ solver1866; + public mjSolverStat_ solver1867; + public mjSolverStat_ solver1868; + public mjSolverStat_ solver1869; + public mjSolverStat_ solver1870; + public mjSolverStat_ solver1871; + public mjSolverStat_ solver1872; + public mjSolverStat_ solver1873; + public mjSolverStat_ solver1874; + public mjSolverStat_ solver1875; + public mjSolverStat_ solver1876; + public mjSolverStat_ solver1877; + public mjSolverStat_ solver1878; + public mjSolverStat_ solver1879; + public mjSolverStat_ solver1880; + public mjSolverStat_ solver1881; + public mjSolverStat_ solver1882; + public mjSolverStat_ solver1883; + public mjSolverStat_ solver1884; + public mjSolverStat_ solver1885; + public mjSolverStat_ solver1886; + public mjSolverStat_ solver1887; + public mjSolverStat_ solver1888; + public mjSolverStat_ solver1889; + public mjSolverStat_ solver1890; + public mjSolverStat_ solver1891; + public mjSolverStat_ solver1892; + public mjSolverStat_ solver1893; + public mjSolverStat_ solver1894; + public mjSolverStat_ solver1895; + public mjSolverStat_ solver1896; + public mjSolverStat_ solver1897; + public mjSolverStat_ solver1898; + public mjSolverStat_ solver1899; + public mjSolverStat_ solver1900; + public mjSolverStat_ solver1901; + public mjSolverStat_ solver1902; + public mjSolverStat_ solver1903; + public mjSolverStat_ solver1904; + public mjSolverStat_ solver1905; + public mjSolverStat_ solver1906; + public mjSolverStat_ solver1907; + public mjSolverStat_ solver1908; + public mjSolverStat_ solver1909; + public mjSolverStat_ solver1910; + public mjSolverStat_ solver1911; + public mjSolverStat_ solver1912; + public mjSolverStat_ solver1913; + public mjSolverStat_ solver1914; + public mjSolverStat_ solver1915; + public mjSolverStat_ solver1916; + public mjSolverStat_ solver1917; + public mjSolverStat_ solver1918; + public mjSolverStat_ solver1919; + public mjSolverStat_ solver1920; + public mjSolverStat_ solver1921; + public mjSolverStat_ solver1922; + public mjSolverStat_ solver1923; + public mjSolverStat_ solver1924; + public mjSolverStat_ solver1925; + public mjSolverStat_ solver1926; + public mjSolverStat_ solver1927; + public mjSolverStat_ solver1928; + public mjSolverStat_ solver1929; + public mjSolverStat_ solver1930; + public mjSolverStat_ solver1931; + public mjSolverStat_ solver1932; + public mjSolverStat_ solver1933; + public mjSolverStat_ solver1934; + public mjSolverStat_ solver1935; + public mjSolverStat_ solver1936; + public mjSolverStat_ solver1937; + public mjSolverStat_ solver1938; + public mjSolverStat_ solver1939; + public mjSolverStat_ solver1940; + public mjSolverStat_ solver1941; + public mjSolverStat_ solver1942; + public mjSolverStat_ solver1943; + public mjSolverStat_ solver1944; + public mjSolverStat_ solver1945; + public mjSolverStat_ solver1946; + public mjSolverStat_ solver1947; + public mjSolverStat_ solver1948; + public mjSolverStat_ solver1949; + public mjSolverStat_ solver1950; + public mjSolverStat_ solver1951; + public mjSolverStat_ solver1952; + public mjSolverStat_ solver1953; + public mjSolverStat_ solver1954; + public mjSolverStat_ solver1955; + public mjSolverStat_ solver1956; + public mjSolverStat_ solver1957; + public mjSolverStat_ solver1958; + public mjSolverStat_ solver1959; + public mjSolverStat_ solver1960; + public mjSolverStat_ solver1961; + public mjSolverStat_ solver1962; + public mjSolverStat_ solver1963; + public mjSolverStat_ solver1964; + public mjSolverStat_ solver1965; + public mjSolverStat_ solver1966; + public mjSolverStat_ solver1967; + public mjSolverStat_ solver1968; + public mjSolverStat_ solver1969; + public mjSolverStat_ solver1970; + public mjSolverStat_ solver1971; + public mjSolverStat_ solver1972; + public mjSolverStat_ solver1973; + public mjSolverStat_ solver1974; + public mjSolverStat_ solver1975; + public mjSolverStat_ solver1976; + public mjSolverStat_ solver1977; + public mjSolverStat_ solver1978; + public mjSolverStat_ solver1979; + public mjSolverStat_ solver1980; + public mjSolverStat_ solver1981; + public mjSolverStat_ solver1982; + public mjSolverStat_ solver1983; + public mjSolverStat_ solver1984; + public mjSolverStat_ solver1985; + public mjSolverStat_ solver1986; + public mjSolverStat_ solver1987; + public mjSolverStat_ solver1988; + public mjSolverStat_ solver1989; + public mjSolverStat_ solver1990; + public mjSolverStat_ solver1991; + public mjSolverStat_ solver1992; + public mjSolverStat_ solver1993; + public mjSolverStat_ solver1994; + public mjSolverStat_ solver1995; + public mjSolverStat_ solver1996; + public mjSolverStat_ solver1997; + public mjSolverStat_ solver1998; + public mjSolverStat_ solver1999; + public mjSolverStat_ solver2000; + public mjSolverStat_ solver2001; + public mjSolverStat_ solver2002; + public mjSolverStat_ solver2003; + public mjSolverStat_ solver2004; + public mjSolverStat_ solver2005; + public mjSolverStat_ solver2006; + public mjSolverStat_ solver2007; + public mjSolverStat_ solver2008; + public mjSolverStat_ solver2009; + public mjSolverStat_ solver2010; + public mjSolverStat_ solver2011; + public mjSolverStat_ solver2012; + public mjSolverStat_ solver2013; + public mjSolverStat_ solver2014; + public mjSolverStat_ solver2015; + public mjSolverStat_ solver2016; + public mjSolverStat_ solver2017; + public mjSolverStat_ solver2018; + public mjSolverStat_ solver2019; + public mjSolverStat_ solver2020; + public mjSolverStat_ solver2021; + public mjSolverStat_ solver2022; + public mjSolverStat_ solver2023; + public mjSolverStat_ solver2024; + public mjSolverStat_ solver2025; + public mjSolverStat_ solver2026; + public mjSolverStat_ solver2027; + public mjSolverStat_ solver2028; + public mjSolverStat_ solver2029; + public mjSolverStat_ solver2030; + public mjSolverStat_ solver2031; + public mjSolverStat_ solver2032; + public mjSolverStat_ solver2033; + public mjSolverStat_ solver2034; + public mjSolverStat_ solver2035; + public mjSolverStat_ solver2036; + public mjSolverStat_ solver2037; + public mjSolverStat_ solver2038; + public mjSolverStat_ solver2039; + public mjSolverStat_ solver2040; + public mjSolverStat_ solver2041; + public mjSolverStat_ solver2042; + public mjSolverStat_ solver2043; + public mjSolverStat_ solver2044; + public mjSolverStat_ solver2045; + public mjSolverStat_ solver2046; + public mjSolverStat_ solver2047; + public mjSolverStat_ solver2048; + public mjSolverStat_ solver2049; + public mjSolverStat_ solver2050; + public mjSolverStat_ solver2051; + public mjSolverStat_ solver2052; + public mjSolverStat_ solver2053; + public mjSolverStat_ solver2054; + public mjSolverStat_ solver2055; + public mjSolverStat_ solver2056; + public mjSolverStat_ solver2057; + public mjSolverStat_ solver2058; + public mjSolverStat_ solver2059; + public mjSolverStat_ solver2060; + public mjSolverStat_ solver2061; + public mjSolverStat_ solver2062; + public mjSolverStat_ solver2063; + public mjSolverStat_ solver2064; + public mjSolverStat_ solver2065; + public mjSolverStat_ solver2066; + public mjSolverStat_ solver2067; + public mjSolverStat_ solver2068; + public mjSolverStat_ solver2069; + public mjSolverStat_ solver2070; + public mjSolverStat_ solver2071; + public mjSolverStat_ solver2072; + public mjSolverStat_ solver2073; + public mjSolverStat_ solver2074; + public mjSolverStat_ solver2075; + public mjSolverStat_ solver2076; + public mjSolverStat_ solver2077; + public mjSolverStat_ solver2078; + public mjSolverStat_ solver2079; + public mjSolverStat_ solver2080; + public mjSolverStat_ solver2081; + public mjSolverStat_ solver2082; + public mjSolverStat_ solver2083; + public mjSolverStat_ solver2084; + public mjSolverStat_ solver2085; + public mjSolverStat_ solver2086; + public mjSolverStat_ solver2087; + public mjSolverStat_ solver2088; + public mjSolverStat_ solver2089; + public mjSolverStat_ solver2090; + public mjSolverStat_ solver2091; + public mjSolverStat_ solver2092; + public mjSolverStat_ solver2093; + public mjSolverStat_ solver2094; + public mjSolverStat_ solver2095; + public mjSolverStat_ solver2096; + public mjSolverStat_ solver2097; + public mjSolverStat_ solver2098; + public mjSolverStat_ solver2099; + public mjSolverStat_ solver2100; + public mjSolverStat_ solver2101; + public mjSolverStat_ solver2102; + public mjSolverStat_ solver2103; + public mjSolverStat_ solver2104; + public mjSolverStat_ solver2105; + public mjSolverStat_ solver2106; + public mjSolverStat_ solver2107; + public mjSolverStat_ solver2108; + public mjSolverStat_ solver2109; + public mjSolverStat_ solver2110; + public mjSolverStat_ solver2111; + public mjSolverStat_ solver2112; + public mjSolverStat_ solver2113; + public mjSolverStat_ solver2114; + public mjSolverStat_ solver2115; + public mjSolverStat_ solver2116; + public mjSolverStat_ solver2117; + public mjSolverStat_ solver2118; + public mjSolverStat_ solver2119; + public mjSolverStat_ solver2120; + public mjSolverStat_ solver2121; + public mjSolverStat_ solver2122; + public mjSolverStat_ solver2123; + public mjSolverStat_ solver2124; + public mjSolverStat_ solver2125; + public mjSolverStat_ solver2126; + public mjSolverStat_ solver2127; + public mjSolverStat_ solver2128; + public mjSolverStat_ solver2129; + public mjSolverStat_ solver2130; + public mjSolverStat_ solver2131; + public mjSolverStat_ solver2132; + public mjSolverStat_ solver2133; + public mjSolverStat_ solver2134; + public mjSolverStat_ solver2135; + public mjSolverStat_ solver2136; + public mjSolverStat_ solver2137; + public mjSolverStat_ solver2138; + public mjSolverStat_ solver2139; + public mjSolverStat_ solver2140; + public mjSolverStat_ solver2141; + public mjSolverStat_ solver2142; + public mjSolverStat_ solver2143; + public mjSolverStat_ solver2144; + public mjSolverStat_ solver2145; + public mjSolverStat_ solver2146; + public mjSolverStat_ solver2147; + public mjSolverStat_ solver2148; + public mjSolverStat_ solver2149; + public mjSolverStat_ solver2150; + public mjSolverStat_ solver2151; + public mjSolverStat_ solver2152; + public mjSolverStat_ solver2153; + public mjSolverStat_ solver2154; + public mjSolverStat_ solver2155; + public mjSolverStat_ solver2156; + public mjSolverStat_ solver2157; + public mjSolverStat_ solver2158; + public mjSolverStat_ solver2159; + public mjSolverStat_ solver2160; + public mjSolverStat_ solver2161; + public mjSolverStat_ solver2162; + public mjSolverStat_ solver2163; + public mjSolverStat_ solver2164; + public mjSolverStat_ solver2165; + public mjSolverStat_ solver2166; + public mjSolverStat_ solver2167; + public mjSolverStat_ solver2168; + public mjSolverStat_ solver2169; + public mjSolverStat_ solver2170; + public mjSolverStat_ solver2171; + public mjSolverStat_ solver2172; + public mjSolverStat_ solver2173; + public mjSolverStat_ solver2174; + public mjSolverStat_ solver2175; + public mjSolverStat_ solver2176; + public mjSolverStat_ solver2177; + public mjSolverStat_ solver2178; + public mjSolverStat_ solver2179; + public mjSolverStat_ solver2180; + public mjSolverStat_ solver2181; + public mjSolverStat_ solver2182; + public mjSolverStat_ solver2183; + public mjSolverStat_ solver2184; + public mjSolverStat_ solver2185; + public mjSolverStat_ solver2186; + public mjSolverStat_ solver2187; + public mjSolverStat_ solver2188; + public mjSolverStat_ solver2189; + public mjSolverStat_ solver2190; + public mjSolverStat_ solver2191; + public mjSolverStat_ solver2192; + public mjSolverStat_ solver2193; + public mjSolverStat_ solver2194; + public mjSolverStat_ solver2195; + public mjSolverStat_ solver2196; + public mjSolverStat_ solver2197; + public mjSolverStat_ solver2198; + public mjSolverStat_ solver2199; + public mjSolverStat_ solver2200; + public mjSolverStat_ solver2201; + public mjSolverStat_ solver2202; + public mjSolverStat_ solver2203; + public mjSolverStat_ solver2204; + public mjSolverStat_ solver2205; + public mjSolverStat_ solver2206; + public mjSolverStat_ solver2207; + public mjSolverStat_ solver2208; + public mjSolverStat_ solver2209; + public mjSolverStat_ solver2210; + public mjSolverStat_ solver2211; + public mjSolverStat_ solver2212; + public mjSolverStat_ solver2213; + public mjSolverStat_ solver2214; + public mjSolverStat_ solver2215; + public mjSolverStat_ solver2216; + public mjSolverStat_ solver2217; + public mjSolverStat_ solver2218; + public mjSolverStat_ solver2219; + public mjSolverStat_ solver2220; + public mjSolverStat_ solver2221; + public mjSolverStat_ solver2222; + public mjSolverStat_ solver2223; + public mjSolverStat_ solver2224; + public mjSolverStat_ solver2225; + public mjSolverStat_ solver2226; + public mjSolverStat_ solver2227; + public mjSolverStat_ solver2228; + public mjSolverStat_ solver2229; + public mjSolverStat_ solver2230; + public mjSolverStat_ solver2231; + public mjSolverStat_ solver2232; + public mjSolverStat_ solver2233; + public mjSolverStat_ solver2234; + public mjSolverStat_ solver2235; + public mjSolverStat_ solver2236; + public mjSolverStat_ solver2237; + public mjSolverStat_ solver2238; + public mjSolverStat_ solver2239; + public mjSolverStat_ solver2240; + public mjSolverStat_ solver2241; + public mjSolverStat_ solver2242; + public mjSolverStat_ solver2243; + public mjSolverStat_ solver2244; + public mjSolverStat_ solver2245; + public mjSolverStat_ solver2246; + public mjSolverStat_ solver2247; + public mjSolverStat_ solver2248; + public mjSolverStat_ solver2249; + public mjSolverStat_ solver2250; + public mjSolverStat_ solver2251; + public mjSolverStat_ solver2252; + public mjSolverStat_ solver2253; + public mjSolverStat_ solver2254; + public mjSolverStat_ solver2255; + public mjSolverStat_ solver2256; + public mjSolverStat_ solver2257; + public mjSolverStat_ solver2258; + public mjSolverStat_ solver2259; + public mjSolverStat_ solver2260; + public mjSolverStat_ solver2261; + public mjSolverStat_ solver2262; + public mjSolverStat_ solver2263; + public mjSolverStat_ solver2264; + public mjSolverStat_ solver2265; + public mjSolverStat_ solver2266; + public mjSolverStat_ solver2267; + public mjSolverStat_ solver2268; + public mjSolverStat_ solver2269; + public mjSolverStat_ solver2270; + public mjSolverStat_ solver2271; + public mjSolverStat_ solver2272; + public mjSolverStat_ solver2273; + public mjSolverStat_ solver2274; + public mjSolverStat_ solver2275; + public mjSolverStat_ solver2276; + public mjSolverStat_ solver2277; + public mjSolverStat_ solver2278; + public mjSolverStat_ solver2279; + public mjSolverStat_ solver2280; + public mjSolverStat_ solver2281; + public mjSolverStat_ solver2282; + public mjSolverStat_ solver2283; + public mjSolverStat_ solver2284; + public mjSolverStat_ solver2285; + public mjSolverStat_ solver2286; + public mjSolverStat_ solver2287; + public mjSolverStat_ solver2288; + public mjSolverStat_ solver2289; + public mjSolverStat_ solver2290; + public mjSolverStat_ solver2291; + public mjSolverStat_ solver2292; + public mjSolverStat_ solver2293; + public mjSolverStat_ solver2294; + public mjSolverStat_ solver2295; + public mjSolverStat_ solver2296; + public mjSolverStat_ solver2297; + public mjSolverStat_ solver2298; + public mjSolverStat_ solver2299; + public mjSolverStat_ solver2300; + public mjSolverStat_ solver2301; + public mjSolverStat_ solver2302; + public mjSolverStat_ solver2303; + public mjSolverStat_ solver2304; + public mjSolverStat_ solver2305; + public mjSolverStat_ solver2306; + public mjSolverStat_ solver2307; + public mjSolverStat_ solver2308; + public mjSolverStat_ solver2309; + public mjSolverStat_ solver2310; + public mjSolverStat_ solver2311; + public mjSolverStat_ solver2312; + public mjSolverStat_ solver2313; + public mjSolverStat_ solver2314; + public mjSolverStat_ solver2315; + public mjSolverStat_ solver2316; + public mjSolverStat_ solver2317; + public mjSolverStat_ solver2318; + public mjSolverStat_ solver2319; + public mjSolverStat_ solver2320; + public mjSolverStat_ solver2321; + public mjSolverStat_ solver2322; + public mjSolverStat_ solver2323; + public mjSolverStat_ solver2324; + public mjSolverStat_ solver2325; + public mjSolverStat_ solver2326; + public mjSolverStat_ solver2327; + public mjSolverStat_ solver2328; + public mjSolverStat_ solver2329; + public mjSolverStat_ solver2330; + public mjSolverStat_ solver2331; + public mjSolverStat_ solver2332; + public mjSolverStat_ solver2333; + public mjSolverStat_ solver2334; + public mjSolverStat_ solver2335; + public mjSolverStat_ solver2336; + public mjSolverStat_ solver2337; + public mjSolverStat_ solver2338; + public mjSolverStat_ solver2339; + public mjSolverStat_ solver2340; + public mjSolverStat_ solver2341; + public mjSolverStat_ solver2342; + public mjSolverStat_ solver2343; + public mjSolverStat_ solver2344; + public mjSolverStat_ solver2345; + public mjSolverStat_ solver2346; + public mjSolverStat_ solver2347; + public mjSolverStat_ solver2348; + public mjSolverStat_ solver2349; + public mjSolverStat_ solver2350; + public mjSolverStat_ solver2351; + public mjSolverStat_ solver2352; + public mjSolverStat_ solver2353; + public mjSolverStat_ solver2354; + public mjSolverStat_ solver2355; + public mjSolverStat_ solver2356; + public mjSolverStat_ solver2357; + public mjSolverStat_ solver2358; + public mjSolverStat_ solver2359; + public mjSolverStat_ solver2360; + public mjSolverStat_ solver2361; + public mjSolverStat_ solver2362; + public mjSolverStat_ solver2363; + public mjSolverStat_ solver2364; + public mjSolverStat_ solver2365; + public mjSolverStat_ solver2366; + public mjSolverStat_ solver2367; + public mjSolverStat_ solver2368; + public mjSolverStat_ solver2369; + public mjSolverStat_ solver2370; + public mjSolverStat_ solver2371; + public mjSolverStat_ solver2372; + public mjSolverStat_ solver2373; + public mjSolverStat_ solver2374; + public mjSolverStat_ solver2375; + public mjSolverStat_ solver2376; + public mjSolverStat_ solver2377; + public mjSolverStat_ solver2378; + public mjSolverStat_ solver2379; + public mjSolverStat_ solver2380; + public mjSolverStat_ solver2381; + public mjSolverStat_ solver2382; + public mjSolverStat_ solver2383; + public mjSolverStat_ solver2384; + public mjSolverStat_ solver2385; + public mjSolverStat_ solver2386; + public mjSolverStat_ solver2387; + public mjSolverStat_ solver2388; + public mjSolverStat_ solver2389; + public mjSolverStat_ solver2390; + public mjSolverStat_ solver2391; + public mjSolverStat_ solver2392; + public mjSolverStat_ solver2393; + public mjSolverStat_ solver2394; + public mjSolverStat_ solver2395; + public mjSolverStat_ solver2396; + public mjSolverStat_ solver2397; + public mjSolverStat_ solver2398; + public mjSolverStat_ solver2399; + public mjSolverStat_ solver2400; + public mjSolverStat_ solver2401; + public mjSolverStat_ solver2402; + public mjSolverStat_ solver2403; + public mjSolverStat_ solver2404; + public mjSolverStat_ solver2405; + public mjSolverStat_ solver2406; + public mjSolverStat_ solver2407; + public mjSolverStat_ solver2408; + public mjSolverStat_ solver2409; + public mjSolverStat_ solver2410; + public mjSolverStat_ solver2411; + public mjSolverStat_ solver2412; + public mjSolverStat_ solver2413; + public mjSolverStat_ solver2414; + public mjSolverStat_ solver2415; + public mjSolverStat_ solver2416; + public mjSolverStat_ solver2417; + public mjSolverStat_ solver2418; + public mjSolverStat_ solver2419; + public mjSolverStat_ solver2420; + public mjSolverStat_ solver2421; + public mjSolverStat_ solver2422; + public mjSolverStat_ solver2423; + public mjSolverStat_ solver2424; + public mjSolverStat_ solver2425; + public mjSolverStat_ solver2426; + public mjSolverStat_ solver2427; + public mjSolverStat_ solver2428; + public mjSolverStat_ solver2429; + public mjSolverStat_ solver2430; + public mjSolverStat_ solver2431; + public mjSolverStat_ solver2432; + public mjSolverStat_ solver2433; + public mjSolverStat_ solver2434; + public mjSolverStat_ solver2435; + public mjSolverStat_ solver2436; + public mjSolverStat_ solver2437; + public mjSolverStat_ solver2438; + public mjSolverStat_ solver2439; + public mjSolverStat_ solver2440; + public mjSolverStat_ solver2441; + public mjSolverStat_ solver2442; + public mjSolverStat_ solver2443; + public mjSolverStat_ solver2444; + public mjSolverStat_ solver2445; + public mjSolverStat_ solver2446; + public mjSolverStat_ solver2447; + public mjSolverStat_ solver2448; + public mjSolverStat_ solver2449; + public mjSolverStat_ solver2450; + public mjSolverStat_ solver2451; + public mjSolverStat_ solver2452; + public mjSolverStat_ solver2453; + public mjSolverStat_ solver2454; + public mjSolverStat_ solver2455; + public mjSolverStat_ solver2456; + public mjSolverStat_ solver2457; + public mjSolverStat_ solver2458; + public mjSolverStat_ solver2459; + public mjSolverStat_ solver2460; + public mjSolverStat_ solver2461; + public mjSolverStat_ solver2462; + public mjSolverStat_ solver2463; + public mjSolverStat_ solver2464; + public mjSolverStat_ solver2465; + public mjSolverStat_ solver2466; + public mjSolverStat_ solver2467; + public mjSolverStat_ solver2468; + public mjSolverStat_ solver2469; + public mjSolverStat_ solver2470; + public mjSolverStat_ solver2471; + public mjSolverStat_ solver2472; + public mjSolverStat_ solver2473; + public mjSolverStat_ solver2474; + public mjSolverStat_ solver2475; + public mjSolverStat_ solver2476; + public mjSolverStat_ solver2477; + public mjSolverStat_ solver2478; + public mjSolverStat_ solver2479; + public mjSolverStat_ solver2480; + public mjSolverStat_ solver2481; + public mjSolverStat_ solver2482; + public mjSolverStat_ solver2483; + public mjSolverStat_ solver2484; + public mjSolverStat_ solver2485; + public mjSolverStat_ solver2486; + public mjSolverStat_ solver2487; + public mjSolverStat_ solver2488; + public mjSolverStat_ solver2489; + public mjSolverStat_ solver2490; + public mjSolverStat_ solver2491; + public mjSolverStat_ solver2492; + public mjSolverStat_ solver2493; + public mjSolverStat_ solver2494; + public mjSolverStat_ solver2495; + public mjSolverStat_ solver2496; + public mjSolverStat_ solver2497; + public mjSolverStat_ solver2498; + public mjSolverStat_ solver2499; + public mjSolverStat_ solver2500; + public mjSolverStat_ solver2501; + public mjSolverStat_ solver2502; + public mjSolverStat_ solver2503; + public mjSolverStat_ solver2504; + public mjSolverStat_ solver2505; + public mjSolverStat_ solver2506; + public mjSolverStat_ solver2507; + public mjSolverStat_ solver2508; + public mjSolverStat_ solver2509; + public mjSolverStat_ solver2510; + public mjSolverStat_ solver2511; + public mjSolverStat_ solver2512; + public mjSolverStat_ solver2513; + public mjSolverStat_ solver2514; + public mjSolverStat_ solver2515; + public mjSolverStat_ solver2516; + public mjSolverStat_ solver2517; + public mjSolverStat_ solver2518; + public mjSolverStat_ solver2519; + public mjSolverStat_ solver2520; + public mjSolverStat_ solver2521; + public mjSolverStat_ solver2522; + public mjSolverStat_ solver2523; + public mjSolverStat_ solver2524; + public mjSolverStat_ solver2525; + public mjSolverStat_ solver2526; + public mjSolverStat_ solver2527; + public mjSolverStat_ solver2528; + public mjSolverStat_ solver2529; + public mjSolverStat_ solver2530; + public mjSolverStat_ solver2531; + public mjSolverStat_ solver2532; + public mjSolverStat_ solver2533; + public mjSolverStat_ solver2534; + public mjSolverStat_ solver2535; + public mjSolverStat_ solver2536; + public mjSolverStat_ solver2537; + public mjSolverStat_ solver2538; + public mjSolverStat_ solver2539; + public mjSolverStat_ solver2540; + public mjSolverStat_ solver2541; + public mjSolverStat_ solver2542; + public mjSolverStat_ solver2543; + public mjSolverStat_ solver2544; + public mjSolverStat_ solver2545; + public mjSolverStat_ solver2546; + public mjSolverStat_ solver2547; + public mjSolverStat_ solver2548; + public mjSolverStat_ solver2549; + public mjSolverStat_ solver2550; + public mjSolverStat_ solver2551; + public mjSolverStat_ solver2552; + public mjSolverStat_ solver2553; + public mjSolverStat_ solver2554; + public mjSolverStat_ solver2555; + public mjSolverStat_ solver2556; + public mjSolverStat_ solver2557; + public mjSolverStat_ solver2558; + public mjSolverStat_ solver2559; + public mjSolverStat_ solver2560; + public mjSolverStat_ solver2561; + public mjSolverStat_ solver2562; + public mjSolverStat_ solver2563; + public mjSolverStat_ solver2564; + public mjSolverStat_ solver2565; + public mjSolverStat_ solver2566; + public mjSolverStat_ solver2567; + public mjSolverStat_ solver2568; + public mjSolverStat_ solver2569; + public mjSolverStat_ solver2570; + public mjSolverStat_ solver2571; + public mjSolverStat_ solver2572; + public mjSolverStat_ solver2573; + public mjSolverStat_ solver2574; + public mjSolverStat_ solver2575; + public mjSolverStat_ solver2576; + public mjSolverStat_ solver2577; + public mjSolverStat_ solver2578; + public mjSolverStat_ solver2579; + public mjSolverStat_ solver2580; + public mjSolverStat_ solver2581; + public mjSolverStat_ solver2582; + public mjSolverStat_ solver2583; + public mjSolverStat_ solver2584; + public mjSolverStat_ solver2585; + public mjSolverStat_ solver2586; + public mjSolverStat_ solver2587; + public mjSolverStat_ solver2588; + public mjSolverStat_ solver2589; + public mjSolverStat_ solver2590; + public mjSolverStat_ solver2591; + public mjSolverStat_ solver2592; + public mjSolverStat_ solver2593; + public mjSolverStat_ solver2594; + public mjSolverStat_ solver2595; + public mjSolverStat_ solver2596; + public mjSolverStat_ solver2597; + public mjSolverStat_ solver2598; + public mjSolverStat_ solver2599; + public mjSolverStat_ solver2600; + public mjSolverStat_ solver2601; + public mjSolverStat_ solver2602; + public mjSolverStat_ solver2603; + public mjSolverStat_ solver2604; + public mjSolverStat_ solver2605; + public mjSolverStat_ solver2606; + public mjSolverStat_ solver2607; + public mjSolverStat_ solver2608; + public mjSolverStat_ solver2609; + public mjSolverStat_ solver2610; + public mjSolverStat_ solver2611; + public mjSolverStat_ solver2612; + public mjSolverStat_ solver2613; + public mjSolverStat_ solver2614; + public mjSolverStat_ solver2615; + public mjSolverStat_ solver2616; + public mjSolverStat_ solver2617; + public mjSolverStat_ solver2618; + public mjSolverStat_ solver2619; + public mjSolverStat_ solver2620; + public mjSolverStat_ solver2621; + public mjSolverStat_ solver2622; + public mjSolverStat_ solver2623; + public mjSolverStat_ solver2624; + public mjSolverStat_ solver2625; + public mjSolverStat_ solver2626; + public mjSolverStat_ solver2627; + public mjSolverStat_ solver2628; + public mjSolverStat_ solver2629; + public mjSolverStat_ solver2630; + public mjSolverStat_ solver2631; + public mjSolverStat_ solver2632; + public mjSolverStat_ solver2633; + public mjSolverStat_ solver2634; + public mjSolverStat_ solver2635; + public mjSolverStat_ solver2636; + public mjSolverStat_ solver2637; + public mjSolverStat_ solver2638; + public mjSolverStat_ solver2639; + public mjSolverStat_ solver2640; + public mjSolverStat_ solver2641; + public mjSolverStat_ solver2642; + public mjSolverStat_ solver2643; + public mjSolverStat_ solver2644; + public mjSolverStat_ solver2645; + public mjSolverStat_ solver2646; + public mjSolverStat_ solver2647; + public mjSolverStat_ solver2648; + public mjSolverStat_ solver2649; + public mjSolverStat_ solver2650; + public mjSolverStat_ solver2651; + public mjSolverStat_ solver2652; + public mjSolverStat_ solver2653; + public mjSolverStat_ solver2654; + public mjSolverStat_ solver2655; + public mjSolverStat_ solver2656; + public mjSolverStat_ solver2657; + public mjSolverStat_ solver2658; + public mjSolverStat_ solver2659; + public mjSolverStat_ solver2660; + public mjSolverStat_ solver2661; + public mjSolverStat_ solver2662; + public mjSolverStat_ solver2663; + public mjSolverStat_ solver2664; + public mjSolverStat_ solver2665; + public mjSolverStat_ solver2666; + public mjSolverStat_ solver2667; + public mjSolverStat_ solver2668; + public mjSolverStat_ solver2669; + public mjSolverStat_ solver2670; + public mjSolverStat_ solver2671; + public mjSolverStat_ solver2672; + public mjSolverStat_ solver2673; + public mjSolverStat_ solver2674; + public mjSolverStat_ solver2675; + public mjSolverStat_ solver2676; + public mjSolverStat_ solver2677; + public mjSolverStat_ solver2678; + public mjSolverStat_ solver2679; + public mjSolverStat_ solver2680; + public mjSolverStat_ solver2681; + public mjSolverStat_ solver2682; + public mjSolverStat_ solver2683; + public mjSolverStat_ solver2684; + public mjSolverStat_ solver2685; + public mjSolverStat_ solver2686; + public mjSolverStat_ solver2687; + public mjSolverStat_ solver2688; + public mjSolverStat_ solver2689; + public mjSolverStat_ solver2690; + public mjSolverStat_ solver2691; + public mjSolverStat_ solver2692; + public mjSolverStat_ solver2693; + public mjSolverStat_ solver2694; + public mjSolverStat_ solver2695; + public mjSolverStat_ solver2696; + public mjSolverStat_ solver2697; + public mjSolverStat_ solver2698; + public mjSolverStat_ solver2699; + public mjSolverStat_ solver2700; + public mjSolverStat_ solver2701; + public mjSolverStat_ solver2702; + public mjSolverStat_ solver2703; + public mjSolverStat_ solver2704; + public mjSolverStat_ solver2705; + public mjSolverStat_ solver2706; + public mjSolverStat_ solver2707; + public mjSolverStat_ solver2708; + public mjSolverStat_ solver2709; + public mjSolverStat_ solver2710; + public mjSolverStat_ solver2711; + public mjSolverStat_ solver2712; + public mjSolverStat_ solver2713; + public mjSolverStat_ solver2714; + public mjSolverStat_ solver2715; + public mjSolverStat_ solver2716; + public mjSolverStat_ solver2717; + public mjSolverStat_ solver2718; + public mjSolverStat_ solver2719; + public mjSolverStat_ solver2720; + public mjSolverStat_ solver2721; + public mjSolverStat_ solver2722; + public mjSolverStat_ solver2723; + public mjSolverStat_ solver2724; + public mjSolverStat_ solver2725; + public mjSolverStat_ solver2726; + public mjSolverStat_ solver2727; + public mjSolverStat_ solver2728; + public mjSolverStat_ solver2729; + public mjSolverStat_ solver2730; + public mjSolverStat_ solver2731; + public mjSolverStat_ solver2732; + public mjSolverStat_ solver2733; + public mjSolverStat_ solver2734; + public mjSolverStat_ solver2735; + public mjSolverStat_ solver2736; + public mjSolverStat_ solver2737; + public mjSolverStat_ solver2738; + public mjSolverStat_ solver2739; + public mjSolverStat_ solver2740; + public mjSolverStat_ solver2741; + public mjSolverStat_ solver2742; + public mjSolverStat_ solver2743; + public mjSolverStat_ solver2744; + public mjSolverStat_ solver2745; + public mjSolverStat_ solver2746; + public mjSolverStat_ solver2747; + public mjSolverStat_ solver2748; + public mjSolverStat_ solver2749; + public mjSolverStat_ solver2750; + public mjSolverStat_ solver2751; + public mjSolverStat_ solver2752; + public mjSolverStat_ solver2753; + public mjSolverStat_ solver2754; + public mjSolverStat_ solver2755; + public mjSolverStat_ solver2756; + public mjSolverStat_ solver2757; + public mjSolverStat_ solver2758; + public mjSolverStat_ solver2759; + public mjSolverStat_ solver2760; + public mjSolverStat_ solver2761; + public mjSolverStat_ solver2762; + public mjSolverStat_ solver2763; + public mjSolverStat_ solver2764; + public mjSolverStat_ solver2765; + public mjSolverStat_ solver2766; + public mjSolverStat_ solver2767; + public mjSolverStat_ solver2768; + public mjSolverStat_ solver2769; + public mjSolverStat_ solver2770; + public mjSolverStat_ solver2771; + public mjSolverStat_ solver2772; + public mjSolverStat_ solver2773; + public mjSolverStat_ solver2774; + public mjSolverStat_ solver2775; + public mjSolverStat_ solver2776; + public mjSolverStat_ solver2777; + public mjSolverStat_ solver2778; + public mjSolverStat_ solver2779; + public mjSolverStat_ solver2780; + public mjSolverStat_ solver2781; + public mjSolverStat_ solver2782; + public mjSolverStat_ solver2783; + public mjSolverStat_ solver2784; + public mjSolverStat_ solver2785; + public mjSolverStat_ solver2786; + public mjSolverStat_ solver2787; + public mjSolverStat_ solver2788; + public mjSolverStat_ solver2789; + public mjSolverStat_ solver2790; + public mjSolverStat_ solver2791; + public mjSolverStat_ solver2792; + public mjSolverStat_ solver2793; + public mjSolverStat_ solver2794; + public mjSolverStat_ solver2795; + public mjSolverStat_ solver2796; + public mjSolverStat_ solver2797; + public mjSolverStat_ solver2798; + public mjSolverStat_ solver2799; + public mjSolverStat_ solver2800; + public mjSolverStat_ solver2801; + public mjSolverStat_ solver2802; + public mjSolverStat_ solver2803; + public mjSolverStat_ solver2804; + public mjSolverStat_ solver2805; + public mjSolverStat_ solver2806; + public mjSolverStat_ solver2807; + public mjSolverStat_ solver2808; + public mjSolverStat_ solver2809; + public mjSolverStat_ solver2810; + public mjSolverStat_ solver2811; + public mjSolverStat_ solver2812; + public mjSolverStat_ solver2813; + public mjSolverStat_ solver2814; + public mjSolverStat_ solver2815; + public mjSolverStat_ solver2816; + public mjSolverStat_ solver2817; + public mjSolverStat_ solver2818; + public mjSolverStat_ solver2819; + public mjSolverStat_ solver2820; + public mjSolverStat_ solver2821; + public mjSolverStat_ solver2822; + public mjSolverStat_ solver2823; + public mjSolverStat_ solver2824; + public mjSolverStat_ solver2825; + public mjSolverStat_ solver2826; + public mjSolverStat_ solver2827; + public mjSolverStat_ solver2828; + public mjSolverStat_ solver2829; + public mjSolverStat_ solver2830; + public mjSolverStat_ solver2831; + public mjSolverStat_ solver2832; + public mjSolverStat_ solver2833; + public mjSolverStat_ solver2834; + public mjSolverStat_ solver2835; + public mjSolverStat_ solver2836; + public mjSolverStat_ solver2837; + public mjSolverStat_ solver2838; + public mjSolverStat_ solver2839; + public mjSolverStat_ solver2840; + public mjSolverStat_ solver2841; + public mjSolverStat_ solver2842; + public mjSolverStat_ solver2843; + public mjSolverStat_ solver2844; + public mjSolverStat_ solver2845; + public mjSolverStat_ solver2846; + public mjSolverStat_ solver2847; + public mjSolverStat_ solver2848; + public mjSolverStat_ solver2849; + public mjSolverStat_ solver2850; + public mjSolverStat_ solver2851; + public mjSolverStat_ solver2852; + public mjSolverStat_ solver2853; + public mjSolverStat_ solver2854; + public mjSolverStat_ solver2855; + public mjSolverStat_ solver2856; + public mjSolverStat_ solver2857; + public mjSolverStat_ solver2858; + public mjSolverStat_ solver2859; + public mjSolverStat_ solver2860; + public mjSolverStat_ solver2861; + public mjSolverStat_ solver2862; + public mjSolverStat_ solver2863; + public mjSolverStat_ solver2864; + public mjSolverStat_ solver2865; + public mjSolverStat_ solver2866; + public mjSolverStat_ solver2867; + public mjSolverStat_ solver2868; + public mjSolverStat_ solver2869; + public mjSolverStat_ solver2870; + public mjSolverStat_ solver2871; + public mjSolverStat_ solver2872; + public mjSolverStat_ solver2873; + public mjSolverStat_ solver2874; + public mjSolverStat_ solver2875; + public mjSolverStat_ solver2876; + public mjSolverStat_ solver2877; + public mjSolverStat_ solver2878; + public mjSolverStat_ solver2879; + public mjSolverStat_ solver2880; + public mjSolverStat_ solver2881; + public mjSolverStat_ solver2882; + public mjSolverStat_ solver2883; + public mjSolverStat_ solver2884; + public mjSolverStat_ solver2885; + public mjSolverStat_ solver2886; + public mjSolverStat_ solver2887; + public mjSolverStat_ solver2888; + public mjSolverStat_ solver2889; + public mjSolverStat_ solver2890; + public mjSolverStat_ solver2891; + public mjSolverStat_ solver2892; + public mjSolverStat_ solver2893; + public mjSolverStat_ solver2894; + public mjSolverStat_ solver2895; + public mjSolverStat_ solver2896; + public mjSolverStat_ solver2897; + public mjSolverStat_ solver2898; + public mjSolverStat_ solver2899; + public mjSolverStat_ solver2900; + public mjSolverStat_ solver2901; + public mjSolverStat_ solver2902; + public mjSolverStat_ solver2903; + public mjSolverStat_ solver2904; + public mjSolverStat_ solver2905; + public mjSolverStat_ solver2906; + public mjSolverStat_ solver2907; + public mjSolverStat_ solver2908; + public mjSolverStat_ solver2909; + public mjSolverStat_ solver2910; + public mjSolverStat_ solver2911; + public mjSolverStat_ solver2912; + public mjSolverStat_ solver2913; + public mjSolverStat_ solver2914; + public mjSolverStat_ solver2915; + public mjSolverStat_ solver2916; + public mjSolverStat_ solver2917; + public mjSolverStat_ solver2918; + public mjSolverStat_ solver2919; + public mjSolverStat_ solver2920; + public mjSolverStat_ solver2921; + public mjSolverStat_ solver2922; + public mjSolverStat_ solver2923; + public mjSolverStat_ solver2924; + public mjSolverStat_ solver2925; + public mjSolverStat_ solver2926; + public mjSolverStat_ solver2927; + public mjSolverStat_ solver2928; + public mjSolverStat_ solver2929; + public mjSolverStat_ solver2930; + public mjSolverStat_ solver2931; + public mjSolverStat_ solver2932; + public mjSolverStat_ solver2933; + public mjSolverStat_ solver2934; + public mjSolverStat_ solver2935; + public mjSolverStat_ solver2936; + public mjSolverStat_ solver2937; + public mjSolverStat_ solver2938; + public mjSolverStat_ solver2939; + public mjSolverStat_ solver2940; + public mjSolverStat_ solver2941; + public mjSolverStat_ solver2942; + public mjSolverStat_ solver2943; + public mjSolverStat_ solver2944; + public mjSolverStat_ solver2945; + public mjSolverStat_ solver2946; + public mjSolverStat_ solver2947; + public mjSolverStat_ solver2948; + public mjSolverStat_ solver2949; + public mjSolverStat_ solver2950; + public mjSolverStat_ solver2951; + public mjSolverStat_ solver2952; + public mjSolverStat_ solver2953; + public mjSolverStat_ solver2954; + public mjSolverStat_ solver2955; + public mjSolverStat_ solver2956; + public mjSolverStat_ solver2957; + public mjSolverStat_ solver2958; + public mjSolverStat_ solver2959; + public mjSolverStat_ solver2960; + public mjSolverStat_ solver2961; + public mjSolverStat_ solver2962; + public mjSolverStat_ solver2963; + public mjSolverStat_ solver2964; + public mjSolverStat_ solver2965; + public mjSolverStat_ solver2966; + public mjSolverStat_ solver2967; + public mjSolverStat_ solver2968; + public mjSolverStat_ solver2969; + public mjSolverStat_ solver2970; + public mjSolverStat_ solver2971; + public mjSolverStat_ solver2972; + public mjSolverStat_ solver2973; + public mjSolverStat_ solver2974; + public mjSolverStat_ solver2975; + public mjSolverStat_ solver2976; + public mjSolverStat_ solver2977; + public mjSolverStat_ solver2978; + public mjSolverStat_ solver2979; + public mjSolverStat_ solver2980; + public mjSolverStat_ solver2981; + public mjSolverStat_ solver2982; + public mjSolverStat_ solver2983; + public mjSolverStat_ solver2984; + public mjSolverStat_ solver2985; + public mjSolverStat_ solver2986; + public mjSolverStat_ solver2987; + public mjSolverStat_ solver2988; + public mjSolverStat_ solver2989; + public mjSolverStat_ solver2990; + public mjSolverStat_ solver2991; + public mjSolverStat_ solver2992; + public mjSolverStat_ solver2993; + public mjSolverStat_ solver2994; + public mjSolverStat_ solver2995; + public mjSolverStat_ solver2996; + public mjSolverStat_ solver2997; + public mjSolverStat_ solver2998; + public mjSolverStat_ solver2999; + public mjSolverStat_ solver3000; + public mjSolverStat_ solver3001; + public mjSolverStat_ solver3002; + public mjSolverStat_ solver3003; + public mjSolverStat_ solver3004; + public mjSolverStat_ solver3005; + public mjSolverStat_ solver3006; + public mjSolverStat_ solver3007; + public mjSolverStat_ solver3008; + public mjSolverStat_ solver3009; + public mjSolverStat_ solver3010; + public mjSolverStat_ solver3011; + public mjSolverStat_ solver3012; + public mjSolverStat_ solver3013; + public mjSolverStat_ solver3014; + public mjSolverStat_ solver3015; + public mjSolverStat_ solver3016; + public mjSolverStat_ solver3017; + public mjSolverStat_ solver3018; + public mjSolverStat_ solver3019; + public mjSolverStat_ solver3020; + public mjSolverStat_ solver3021; + public mjSolverStat_ solver3022; + public mjSolverStat_ solver3023; + public mjSolverStat_ solver3024; + public mjSolverStat_ solver3025; + public mjSolverStat_ solver3026; + public mjSolverStat_ solver3027; + public mjSolverStat_ solver3028; + public mjSolverStat_ solver3029; + public mjSolverStat_ solver3030; + public mjSolverStat_ solver3031; + public mjSolverStat_ solver3032; + public mjSolverStat_ solver3033; + public mjSolverStat_ solver3034; + public mjSolverStat_ solver3035; + public mjSolverStat_ solver3036; + public mjSolverStat_ solver3037; + public mjSolverStat_ solver3038; + public mjSolverStat_ solver3039; + public mjSolverStat_ solver3040; + public mjSolverStat_ solver3041; + public mjSolverStat_ solver3042; + public mjSolverStat_ solver3043; + public mjSolverStat_ solver3044; + public mjSolverStat_ solver3045; + public mjSolverStat_ solver3046; + public mjSolverStat_ solver3047; + public mjSolverStat_ solver3048; + public mjSolverStat_ solver3049; + public mjSolverStat_ solver3050; + public mjSolverStat_ solver3051; + public mjSolverStat_ solver3052; + public mjSolverStat_ solver3053; + public mjSolverStat_ solver3054; + public mjSolverStat_ solver3055; + public mjSolverStat_ solver3056; + public mjSolverStat_ solver3057; + public mjSolverStat_ solver3058; + public mjSolverStat_ solver3059; + public mjSolverStat_ solver3060; + public mjSolverStat_ solver3061; + public mjSolverStat_ solver3062; + public mjSolverStat_ solver3063; + public mjSolverStat_ solver3064; + public mjSolverStat_ solver3065; + public mjSolverStat_ solver3066; + public mjSolverStat_ solver3067; + public mjSolverStat_ solver3068; + public mjSolverStat_ solver3069; + public mjSolverStat_ solver3070; + public mjSolverStat_ solver3071; + public mjSolverStat_ solver3072; + public mjSolverStat_ solver3073; + public mjSolverStat_ solver3074; + public mjSolverStat_ solver3075; + public mjSolverStat_ solver3076; + public mjSolverStat_ solver3077; + public mjSolverStat_ solver3078; + public mjSolverStat_ solver3079; + public mjSolverStat_ solver3080; + public mjSolverStat_ solver3081; + public mjSolverStat_ solver3082; + public mjSolverStat_ solver3083; + public mjSolverStat_ solver3084; + public mjSolverStat_ solver3085; + public mjSolverStat_ solver3086; + public mjSolverStat_ solver3087; + public mjSolverStat_ solver3088; + public mjSolverStat_ solver3089; + public mjSolverStat_ solver3090; + public mjSolverStat_ solver3091; + public mjSolverStat_ solver3092; + public mjSolverStat_ solver3093; + public mjSolverStat_ solver3094; + public mjSolverStat_ solver3095; + public mjSolverStat_ solver3096; + public mjSolverStat_ solver3097; + public mjSolverStat_ solver3098; + public mjSolverStat_ solver3099; + public mjSolverStat_ solver3100; + public mjSolverStat_ solver3101; + public mjSolverStat_ solver3102; + public mjSolverStat_ solver3103; + public mjSolverStat_ solver3104; + public mjSolverStat_ solver3105; + public mjSolverStat_ solver3106; + public mjSolverStat_ solver3107; + public mjSolverStat_ solver3108; + public mjSolverStat_ solver3109; + public mjSolverStat_ solver3110; + public mjSolverStat_ solver3111; + public mjSolverStat_ solver3112; + public mjSolverStat_ solver3113; + public mjSolverStat_ solver3114; + public mjSolverStat_ solver3115; + public mjSolverStat_ solver3116; + public mjSolverStat_ solver3117; + public mjSolverStat_ solver3118; + public mjSolverStat_ solver3119; + public mjSolverStat_ solver3120; + public mjSolverStat_ solver3121; + public mjSolverStat_ solver3122; + public mjSolverStat_ solver3123; + public mjSolverStat_ solver3124; + public mjSolverStat_ solver3125; + public mjSolverStat_ solver3126; + public mjSolverStat_ solver3127; + public mjSolverStat_ solver3128; + public mjSolverStat_ solver3129; + public mjSolverStat_ solver3130; + public mjSolverStat_ solver3131; + public mjSolverStat_ solver3132; + public mjSolverStat_ solver3133; + public mjSolverStat_ solver3134; + public mjSolverStat_ solver3135; + public mjSolverStat_ solver3136; + public mjSolverStat_ solver3137; + public mjSolverStat_ solver3138; + public mjSolverStat_ solver3139; + public mjSolverStat_ solver3140; + public mjSolverStat_ solver3141; + public mjSolverStat_ solver3142; + public mjSolverStat_ solver3143; + public mjSolverStat_ solver3144; + public mjSolverStat_ solver3145; + public mjSolverStat_ solver3146; + public mjSolverStat_ solver3147; + public mjSolverStat_ solver3148; + public mjSolverStat_ solver3149; + public mjSolverStat_ solver3150; + public mjSolverStat_ solver3151; + public mjSolverStat_ solver3152; + public mjSolverStat_ solver3153; + public mjSolverStat_ solver3154; + public mjSolverStat_ solver3155; + public mjSolverStat_ solver3156; + public mjSolverStat_ solver3157; + public mjSolverStat_ solver3158; + public mjSolverStat_ solver3159; + public mjSolverStat_ solver3160; + public mjSolverStat_ solver3161; + public mjSolverStat_ solver3162; + public mjSolverStat_ solver3163; + public mjSolverStat_ solver3164; + public mjSolverStat_ solver3165; + public mjSolverStat_ solver3166; + public mjSolverStat_ solver3167; + public mjSolverStat_ solver3168; + public mjSolverStat_ solver3169; + public mjSolverStat_ solver3170; + public mjSolverStat_ solver3171; + public mjSolverStat_ solver3172; + public mjSolverStat_ solver3173; + public mjSolverStat_ solver3174; + public mjSolverStat_ solver3175; + public mjSolverStat_ solver3176; + public mjSolverStat_ solver3177; + public mjSolverStat_ solver3178; + public mjSolverStat_ solver3179; + public mjSolverStat_ solver3180; + public mjSolverStat_ solver3181; + public mjSolverStat_ solver3182; + public mjSolverStat_ solver3183; + public mjSolverStat_ solver3184; + public mjSolverStat_ solver3185; + public mjSolverStat_ solver3186; + public mjSolverStat_ solver3187; + public mjSolverStat_ solver3188; + public mjSolverStat_ solver3189; + public mjSolverStat_ solver3190; + public mjSolverStat_ solver3191; + public mjSolverStat_ solver3192; + public mjSolverStat_ solver3193; + public mjSolverStat_ solver3194; + public mjSolverStat_ solver3195; + public mjSolverStat_ solver3196; + public mjSolverStat_ solver3197; + public mjSolverStat_ solver3198; + public mjSolverStat_ solver3199; + public mjSolverStat_ solver3200; + public mjSolverStat_ solver3201; + public mjSolverStat_ solver3202; + public mjSolverStat_ solver3203; + public mjSolverStat_ solver3204; + public mjSolverStat_ solver3205; + public mjSolverStat_ solver3206; + public mjSolverStat_ solver3207; + public mjSolverStat_ solver3208; + public mjSolverStat_ solver3209; + public mjSolverStat_ solver3210; + public mjSolverStat_ solver3211; + public mjSolverStat_ solver3212; + public mjSolverStat_ solver3213; + public mjSolverStat_ solver3214; + public mjSolverStat_ solver3215; + public mjSolverStat_ solver3216; + public mjSolverStat_ solver3217; + public mjSolverStat_ solver3218; + public mjSolverStat_ solver3219; + public mjSolverStat_ solver3220; + public mjSolverStat_ solver3221; + public mjSolverStat_ solver3222; + public mjSolverStat_ solver3223; + public mjSolverStat_ solver3224; + public mjSolverStat_ solver3225; + public mjSolverStat_ solver3226; + public mjSolverStat_ solver3227; + public mjSolverStat_ solver3228; + public mjSolverStat_ solver3229; + public mjSolverStat_ solver3230; + public mjSolverStat_ solver3231; + public mjSolverStat_ solver3232; + public mjSolverStat_ solver3233; + public mjSolverStat_ solver3234; + public mjSolverStat_ solver3235; + public mjSolverStat_ solver3236; + public mjSolverStat_ solver3237; + public mjSolverStat_ solver3238; + public mjSolverStat_ solver3239; + public mjSolverStat_ solver3240; + public mjSolverStat_ solver3241; + public mjSolverStat_ solver3242; + public mjSolverStat_ solver3243; + public mjSolverStat_ solver3244; + public mjSolverStat_ solver3245; + public mjSolverStat_ solver3246; + public mjSolverStat_ solver3247; + public mjSolverStat_ solver3248; + public mjSolverStat_ solver3249; + public mjSolverStat_ solver3250; + public mjSolverStat_ solver3251; + public mjSolverStat_ solver3252; + public mjSolverStat_ solver3253; + public mjSolverStat_ solver3254; + public mjSolverStat_ solver3255; + public mjSolverStat_ solver3256; + public mjSolverStat_ solver3257; + public mjSolverStat_ solver3258; + public mjSolverStat_ solver3259; + public mjSolverStat_ solver3260; + public mjSolverStat_ solver3261; + public mjSolverStat_ solver3262; + public mjSolverStat_ solver3263; + public mjSolverStat_ solver3264; + public mjSolverStat_ solver3265; + public mjSolverStat_ solver3266; + public mjSolverStat_ solver3267; + public mjSolverStat_ solver3268; + public mjSolverStat_ solver3269; + public mjSolverStat_ solver3270; + public mjSolverStat_ solver3271; + public mjSolverStat_ solver3272; + public mjSolverStat_ solver3273; + public mjSolverStat_ solver3274; + public mjSolverStat_ solver3275; + public mjSolverStat_ solver3276; + public mjSolverStat_ solver3277; + public mjSolverStat_ solver3278; + public mjSolverStat_ solver3279; + public mjSolverStat_ solver3280; + public mjSolverStat_ solver3281; + public mjSolverStat_ solver3282; + public mjSolverStat_ solver3283; + public mjSolverStat_ solver3284; + public mjSolverStat_ solver3285; + public mjSolverStat_ solver3286; + public mjSolverStat_ solver3287; + public mjSolverStat_ solver3288; + public mjSolverStat_ solver3289; + public mjSolverStat_ solver3290; + public mjSolverStat_ solver3291; + public mjSolverStat_ solver3292; + public mjSolverStat_ solver3293; + public mjSolverStat_ solver3294; + public mjSolverStat_ solver3295; + public mjSolverStat_ solver3296; + public mjSolverStat_ solver3297; + public mjSolverStat_ solver3298; + public mjSolverStat_ solver3299; + public mjSolverStat_ solver3300; + public mjSolverStat_ solver3301; + public mjSolverStat_ solver3302; + public mjSolverStat_ solver3303; + public mjSolverStat_ solver3304; + public mjSolverStat_ solver3305; + public mjSolverStat_ solver3306; + public mjSolverStat_ solver3307; + public mjSolverStat_ solver3308; + public mjSolverStat_ solver3309; + public mjSolverStat_ solver3310; + public mjSolverStat_ solver3311; + public mjSolverStat_ solver3312; + public mjSolverStat_ solver3313; + public mjSolverStat_ solver3314; + public mjSolverStat_ solver3315; + public mjSolverStat_ solver3316; + public mjSolverStat_ solver3317; + public mjSolverStat_ solver3318; + public mjSolverStat_ solver3319; + public mjSolverStat_ solver3320; + public mjSolverStat_ solver3321; + public mjSolverStat_ solver3322; + public mjSolverStat_ solver3323; + public mjSolverStat_ solver3324; + public mjSolverStat_ solver3325; + public mjSolverStat_ solver3326; + public mjSolverStat_ solver3327; + public mjSolverStat_ solver3328; + public mjSolverStat_ solver3329; + public mjSolverStat_ solver3330; + public mjSolverStat_ solver3331; + public mjSolverStat_ solver3332; + public mjSolverStat_ solver3333; + public mjSolverStat_ solver3334; + public mjSolverStat_ solver3335; + public mjSolverStat_ solver3336; + public mjSolverStat_ solver3337; + public mjSolverStat_ solver3338; + public mjSolverStat_ solver3339; + public mjSolverStat_ solver3340; + public mjSolverStat_ solver3341; + public mjSolverStat_ solver3342; + public mjSolverStat_ solver3343; + public mjSolverStat_ solver3344; + public mjSolverStat_ solver3345; + public mjSolverStat_ solver3346; + public mjSolverStat_ solver3347; + public mjSolverStat_ solver3348; + public mjSolverStat_ solver3349; + public mjSolverStat_ solver3350; + public mjSolverStat_ solver3351; + public mjSolverStat_ solver3352; + public mjSolverStat_ solver3353; + public mjSolverStat_ solver3354; + public mjSolverStat_ solver3355; + public mjSolverStat_ solver3356; + public mjSolverStat_ solver3357; + public mjSolverStat_ solver3358; + public mjSolverStat_ solver3359; + public mjSolverStat_ solver3360; + public mjSolverStat_ solver3361; + public mjSolverStat_ solver3362; + public mjSolverStat_ solver3363; + public mjSolverStat_ solver3364; + public mjSolverStat_ solver3365; + public mjSolverStat_ solver3366; + public mjSolverStat_ solver3367; + public mjSolverStat_ solver3368; + public mjSolverStat_ solver3369; + public mjSolverStat_ solver3370; + public mjSolverStat_ solver3371; + public mjSolverStat_ solver3372; + public mjSolverStat_ solver3373; + public mjSolverStat_ solver3374; + public mjSolverStat_ solver3375; + public mjSolverStat_ solver3376; + public mjSolverStat_ solver3377; + public mjSolverStat_ solver3378; + public mjSolverStat_ solver3379; + public mjSolverStat_ solver3380; + public mjSolverStat_ solver3381; + public mjSolverStat_ solver3382; + public mjSolverStat_ solver3383; + public mjSolverStat_ solver3384; + public mjSolverStat_ solver3385; + public mjSolverStat_ solver3386; + public mjSolverStat_ solver3387; + public mjSolverStat_ solver3388; + public mjSolverStat_ solver3389; + public mjSolverStat_ solver3390; + public mjSolverStat_ solver3391; + public mjSolverStat_ solver3392; + public mjSolverStat_ solver3393; + public mjSolverStat_ solver3394; + public mjSolverStat_ solver3395; + public mjSolverStat_ solver3396; + public mjSolverStat_ solver3397; + public mjSolverStat_ solver3398; + public mjSolverStat_ solver3399; + public mjSolverStat_ solver3400; + public mjSolverStat_ solver3401; + public mjSolverStat_ solver3402; + public mjSolverStat_ solver3403; + public mjSolverStat_ solver3404; + public mjSolverStat_ solver3405; + public mjSolverStat_ solver3406; + public mjSolverStat_ solver3407; + public mjSolverStat_ solver3408; + public mjSolverStat_ solver3409; + public mjSolverStat_ solver3410; + public mjSolverStat_ solver3411; + public mjSolverStat_ solver3412; + public mjSolverStat_ solver3413; + public mjSolverStat_ solver3414; + public mjSolverStat_ solver3415; + public mjSolverStat_ solver3416; + public mjSolverStat_ solver3417; + public mjSolverStat_ solver3418; + public mjSolverStat_ solver3419; + public mjSolverStat_ solver3420; + public mjSolverStat_ solver3421; + public mjSolverStat_ solver3422; + public mjSolverStat_ solver3423; + public mjSolverStat_ solver3424; + public mjSolverStat_ solver3425; + public mjSolverStat_ solver3426; + public mjSolverStat_ solver3427; + public mjSolverStat_ solver3428; + public mjSolverStat_ solver3429; + public mjSolverStat_ solver3430; + public mjSolverStat_ solver3431; + public mjSolverStat_ solver3432; + public mjSolverStat_ solver3433; + public mjSolverStat_ solver3434; + public mjSolverStat_ solver3435; + public mjSolverStat_ solver3436; + public mjSolverStat_ solver3437; + public mjSolverStat_ solver3438; + public mjSolverStat_ solver3439; + public mjSolverStat_ solver3440; + public mjSolverStat_ solver3441; + public mjSolverStat_ solver3442; + public mjSolverStat_ solver3443; + public mjSolverStat_ solver3444; + public mjSolverStat_ solver3445; + public mjSolverStat_ solver3446; + public mjSolverStat_ solver3447; + public mjSolverStat_ solver3448; + public mjSolverStat_ solver3449; + public mjSolverStat_ solver3450; + public mjSolverStat_ solver3451; + public mjSolverStat_ solver3452; + public mjSolverStat_ solver3453; + public mjSolverStat_ solver3454; + public mjSolverStat_ solver3455; + public mjSolverStat_ solver3456; + public mjSolverStat_ solver3457; + public mjSolverStat_ solver3458; + public mjSolverStat_ solver3459; + public mjSolverStat_ solver3460; + public mjSolverStat_ solver3461; + public mjSolverStat_ solver3462; + public mjSolverStat_ solver3463; + public mjSolverStat_ solver3464; + public mjSolverStat_ solver3465; + public mjSolverStat_ solver3466; + public mjSolverStat_ solver3467; + public mjSolverStat_ solver3468; + public mjSolverStat_ solver3469; + public mjSolverStat_ solver3470; + public mjSolverStat_ solver3471; + public mjSolverStat_ solver3472; + public mjSolverStat_ solver3473; + public mjSolverStat_ solver3474; + public mjSolverStat_ solver3475; + public mjSolverStat_ solver3476; + public mjSolverStat_ solver3477; + public mjSolverStat_ solver3478; + public mjSolverStat_ solver3479; + public mjSolverStat_ solver3480; + public mjSolverStat_ solver3481; + public mjSolverStat_ solver3482; + public mjSolverStat_ solver3483; + public mjSolverStat_ solver3484; + public mjSolverStat_ solver3485; + public mjSolverStat_ solver3486; + public mjSolverStat_ solver3487; + public mjSolverStat_ solver3488; + public mjSolverStat_ solver3489; + public mjSolverStat_ solver3490; + public mjSolverStat_ solver3491; + public mjSolverStat_ solver3492; + public mjSolverStat_ solver3493; + public mjSolverStat_ solver3494; + public mjSolverStat_ solver3495; + public mjSolverStat_ solver3496; + public mjSolverStat_ solver3497; + public mjSolverStat_ solver3498; + public mjSolverStat_ solver3499; + public mjSolverStat_ solver3500; + public mjSolverStat_ solver3501; + public mjSolverStat_ solver3502; + public mjSolverStat_ solver3503; + public mjSolverStat_ solver3504; + public mjSolverStat_ solver3505; + public mjSolverStat_ solver3506; + public mjSolverStat_ solver3507; + public mjSolverStat_ solver3508; + public mjSolverStat_ solver3509; + public mjSolverStat_ solver3510; + public mjSolverStat_ solver3511; + public mjSolverStat_ solver3512; + public mjSolverStat_ solver3513; + public mjSolverStat_ solver3514; + public mjSolverStat_ solver3515; + public mjSolverStat_ solver3516; + public mjSolverStat_ solver3517; + public mjSolverStat_ solver3518; + public mjSolverStat_ solver3519; + public mjSolverStat_ solver3520; + public mjSolverStat_ solver3521; + public mjSolverStat_ solver3522; + public mjSolverStat_ solver3523; + public mjSolverStat_ solver3524; + public mjSolverStat_ solver3525; + public mjSolverStat_ solver3526; + public mjSolverStat_ solver3527; + public mjSolverStat_ solver3528; + public mjSolverStat_ solver3529; + public mjSolverStat_ solver3530; + public mjSolverStat_ solver3531; + public mjSolverStat_ solver3532; + public mjSolverStat_ solver3533; + public mjSolverStat_ solver3534; + public mjSolverStat_ solver3535; + public mjSolverStat_ solver3536; + public mjSolverStat_ solver3537; + public mjSolverStat_ solver3538; + public mjSolverStat_ solver3539; + public mjSolverStat_ solver3540; + public mjSolverStat_ solver3541; + public mjSolverStat_ solver3542; + public mjSolverStat_ solver3543; + public mjSolverStat_ solver3544; + public mjSolverStat_ solver3545; + public mjSolverStat_ solver3546; + public mjSolverStat_ solver3547; + public mjSolverStat_ solver3548; + public mjSolverStat_ solver3549; + public mjSolverStat_ solver3550; + public mjSolverStat_ solver3551; + public mjSolverStat_ solver3552; + public mjSolverStat_ solver3553; + public mjSolverStat_ solver3554; + public mjSolverStat_ solver3555; + public mjSolverStat_ solver3556; + public mjSolverStat_ solver3557; + public mjSolverStat_ solver3558; + public mjSolverStat_ solver3559; + public mjSolverStat_ solver3560; + public mjSolverStat_ solver3561; + public mjSolverStat_ solver3562; + public mjSolverStat_ solver3563; + public mjSolverStat_ solver3564; + public mjSolverStat_ solver3565; + public mjSolverStat_ solver3566; + public mjSolverStat_ solver3567; + public mjSolverStat_ solver3568; + public mjSolverStat_ solver3569; + public mjSolverStat_ solver3570; + public mjSolverStat_ solver3571; + public mjSolverStat_ solver3572; + public mjSolverStat_ solver3573; + public mjSolverStat_ solver3574; + public mjSolverStat_ solver3575; + public mjSolverStat_ solver3576; + public mjSolverStat_ solver3577; + public mjSolverStat_ solver3578; + public mjSolverStat_ solver3579; + public mjSolverStat_ solver3580; + public mjSolverStat_ solver3581; + public mjSolverStat_ solver3582; + public mjSolverStat_ solver3583; + public mjSolverStat_ solver3584; + public mjSolverStat_ solver3585; + public mjSolverStat_ solver3586; + public mjSolverStat_ solver3587; + public mjSolverStat_ solver3588; + public mjSolverStat_ solver3589; + public mjSolverStat_ solver3590; + public mjSolverStat_ solver3591; + public mjSolverStat_ solver3592; + public mjSolverStat_ solver3593; + public mjSolverStat_ solver3594; + public mjSolverStat_ solver3595; + public mjSolverStat_ solver3596; + public mjSolverStat_ solver3597; + public mjSolverStat_ solver3598; + public mjSolverStat_ solver3599; + public mjSolverStat_ solver3600; + public mjSolverStat_ solver3601; + public mjSolverStat_ solver3602; + public mjSolverStat_ solver3603; + public mjSolverStat_ solver3604; + public mjSolverStat_ solver3605; + public mjSolverStat_ solver3606; + public mjSolverStat_ solver3607; + public mjSolverStat_ solver3608; + public mjSolverStat_ solver3609; + public mjSolverStat_ solver3610; + public mjSolverStat_ solver3611; + public mjSolverStat_ solver3612; + public mjSolverStat_ solver3613; + public mjSolverStat_ solver3614; + public mjSolverStat_ solver3615; + public mjSolverStat_ solver3616; + public mjSolverStat_ solver3617; + public mjSolverStat_ solver3618; + public mjSolverStat_ solver3619; + public mjSolverStat_ solver3620; + public mjSolverStat_ solver3621; + public mjSolverStat_ solver3622; + public mjSolverStat_ solver3623; + public mjSolverStat_ solver3624; + public mjSolverStat_ solver3625; + public mjSolverStat_ solver3626; + public mjSolverStat_ solver3627; + public mjSolverStat_ solver3628; + public mjSolverStat_ solver3629; + public mjSolverStat_ solver3630; + public mjSolverStat_ solver3631; + public mjSolverStat_ solver3632; + public mjSolverStat_ solver3633; + public mjSolverStat_ solver3634; + public mjSolverStat_ solver3635; + public mjSolverStat_ solver3636; + public mjSolverStat_ solver3637; + public mjSolverStat_ solver3638; + public mjSolverStat_ solver3639; + public mjSolverStat_ solver3640; + public mjSolverStat_ solver3641; + public mjSolverStat_ solver3642; + public mjSolverStat_ solver3643; + public mjSolverStat_ solver3644; + public mjSolverStat_ solver3645; + public mjSolverStat_ solver3646; + public mjSolverStat_ solver3647; + public mjSolverStat_ solver3648; + public mjSolverStat_ solver3649; + public mjSolverStat_ solver3650; + public mjSolverStat_ solver3651; + public mjSolverStat_ solver3652; + public mjSolverStat_ solver3653; + public mjSolverStat_ solver3654; + public mjSolverStat_ solver3655; + public mjSolverStat_ solver3656; + public mjSolverStat_ solver3657; + public mjSolverStat_ solver3658; + public mjSolverStat_ solver3659; + public mjSolverStat_ solver3660; + public mjSolverStat_ solver3661; + public mjSolverStat_ solver3662; + public mjSolverStat_ solver3663; + public mjSolverStat_ solver3664; + public mjSolverStat_ solver3665; + public mjSolverStat_ solver3666; + public mjSolverStat_ solver3667; + public mjSolverStat_ solver3668; + public mjSolverStat_ solver3669; + public mjSolverStat_ solver3670; + public mjSolverStat_ solver3671; + public mjSolverStat_ solver3672; + public mjSolverStat_ solver3673; + public mjSolverStat_ solver3674; + public mjSolverStat_ solver3675; + public mjSolverStat_ solver3676; + public mjSolverStat_ solver3677; + public mjSolverStat_ solver3678; + public mjSolverStat_ solver3679; + public mjSolverStat_ solver3680; + public mjSolverStat_ solver3681; + public mjSolverStat_ solver3682; + public mjSolverStat_ solver3683; + public mjSolverStat_ solver3684; + public mjSolverStat_ solver3685; + public mjSolverStat_ solver3686; + public mjSolverStat_ solver3687; + public mjSolverStat_ solver3688; + public mjSolverStat_ solver3689; + public mjSolverStat_ solver3690; + public mjSolverStat_ solver3691; + public mjSolverStat_ solver3692; + public mjSolverStat_ solver3693; + public mjSolverStat_ solver3694; + public mjSolverStat_ solver3695; + public mjSolverStat_ solver3696; + public mjSolverStat_ solver3697; + public mjSolverStat_ solver3698; + public mjSolverStat_ solver3699; + public mjSolverStat_ solver3700; + public mjSolverStat_ solver3701; + public mjSolverStat_ solver3702; + public mjSolverStat_ solver3703; + public mjSolverStat_ solver3704; + public mjSolverStat_ solver3705; + public mjSolverStat_ solver3706; + public mjSolverStat_ solver3707; + public mjSolverStat_ solver3708; + public mjSolverStat_ solver3709; + public mjSolverStat_ solver3710; + public mjSolverStat_ solver3711; + public mjSolverStat_ solver3712; + public mjSolverStat_ solver3713; + public mjSolverStat_ solver3714; + public mjSolverStat_ solver3715; + public mjSolverStat_ solver3716; + public mjSolverStat_ solver3717; + public mjSolverStat_ solver3718; + public mjSolverStat_ solver3719; + public mjSolverStat_ solver3720; + public mjSolverStat_ solver3721; + public mjSolverStat_ solver3722; + public mjSolverStat_ solver3723; + public mjSolverStat_ solver3724; + public mjSolverStat_ solver3725; + public mjSolverStat_ solver3726; + public mjSolverStat_ solver3727; + public mjSolverStat_ solver3728; + public mjSolverStat_ solver3729; + public mjSolverStat_ solver3730; + public mjSolverStat_ solver3731; + public mjSolverStat_ solver3732; + public mjSolverStat_ solver3733; + public mjSolverStat_ solver3734; + public mjSolverStat_ solver3735; + public mjSolverStat_ solver3736; + public mjSolverStat_ solver3737; + public mjSolverStat_ solver3738; + public mjSolverStat_ solver3739; + public mjSolverStat_ solver3740; + public mjSolverStat_ solver3741; + public mjSolverStat_ solver3742; + public mjSolverStat_ solver3743; + public mjSolverStat_ solver3744; + public mjSolverStat_ solver3745; + public mjSolverStat_ solver3746; + public mjSolverStat_ solver3747; + public mjSolverStat_ solver3748; + public mjSolverStat_ solver3749; + public mjSolverStat_ solver3750; + public mjSolverStat_ solver3751; + public mjSolverStat_ solver3752; + public mjSolverStat_ solver3753; + public mjSolverStat_ solver3754; + public mjSolverStat_ solver3755; + public mjSolverStat_ solver3756; + public mjSolverStat_ solver3757; + public mjSolverStat_ solver3758; + public mjSolverStat_ solver3759; + public mjSolverStat_ solver3760; + public mjSolverStat_ solver3761; + public mjSolverStat_ solver3762; + public mjSolverStat_ solver3763; + public mjSolverStat_ solver3764; + public mjSolverStat_ solver3765; + public mjSolverStat_ solver3766; + public mjSolverStat_ solver3767; + public mjSolverStat_ solver3768; + public mjSolverStat_ solver3769; + public mjSolverStat_ solver3770; + public mjSolverStat_ solver3771; + public mjSolverStat_ solver3772; + public mjSolverStat_ solver3773; + public mjSolverStat_ solver3774; + public mjSolverStat_ solver3775; + public mjSolverStat_ solver3776; + public mjSolverStat_ solver3777; + public mjSolverStat_ solver3778; + public mjSolverStat_ solver3779; + public mjSolverStat_ solver3780; + public mjSolverStat_ solver3781; + public mjSolverStat_ solver3782; + public mjSolverStat_ solver3783; + public mjSolverStat_ solver3784; + public mjSolverStat_ solver3785; + public mjSolverStat_ solver3786; + public mjSolverStat_ solver3787; + public mjSolverStat_ solver3788; + public mjSolverStat_ solver3789; + public mjSolverStat_ solver3790; + public mjSolverStat_ solver3791; + public mjSolverStat_ solver3792; + public mjSolverStat_ solver3793; + public mjSolverStat_ solver3794; + public mjSolverStat_ solver3795; + public mjSolverStat_ solver3796; + public mjSolverStat_ solver3797; + public mjSolverStat_ solver3798; + public mjSolverStat_ solver3799; + public mjSolverStat_ solver3800; + public mjSolverStat_ solver3801; + public mjSolverStat_ solver3802; + public mjSolverStat_ solver3803; + public mjSolverStat_ solver3804; + public mjSolverStat_ solver3805; + public mjSolverStat_ solver3806; + public mjSolverStat_ solver3807; + public mjSolverStat_ solver3808; + public mjSolverStat_ solver3809; + public mjSolverStat_ solver3810; + public mjSolverStat_ solver3811; + public mjSolverStat_ solver3812; + public mjSolverStat_ solver3813; + public mjSolverStat_ solver3814; + public mjSolverStat_ solver3815; + public mjSolverStat_ solver3816; + public mjSolverStat_ solver3817; + public mjSolverStat_ solver3818; + public mjSolverStat_ solver3819; + public mjSolverStat_ solver3820; + public mjSolverStat_ solver3821; + public mjSolverStat_ solver3822; + public mjSolverStat_ solver3823; + public mjSolverStat_ solver3824; + public mjSolverStat_ solver3825; + public mjSolverStat_ solver3826; + public mjSolverStat_ solver3827; + public mjSolverStat_ solver3828; + public mjSolverStat_ solver3829; + public mjSolverStat_ solver3830; + public mjSolverStat_ solver3831; + public mjSolverStat_ solver3832; + public mjSolverStat_ solver3833; + public mjSolverStat_ solver3834; + public mjSolverStat_ solver3835; + public mjSolverStat_ solver3836; + public mjSolverStat_ solver3837; + public mjSolverStat_ solver3838; + public mjSolverStat_ solver3839; + public mjSolverStat_ solver3840; + public mjSolverStat_ solver3841; + public mjSolverStat_ solver3842; + public mjSolverStat_ solver3843; + public mjSolverStat_ solver3844; + public mjSolverStat_ solver3845; + public mjSolverStat_ solver3846; + public mjSolverStat_ solver3847; + public mjSolverStat_ solver3848; + public mjSolverStat_ solver3849; + public mjSolverStat_ solver3850; + public mjSolverStat_ solver3851; + public mjSolverStat_ solver3852; + public mjSolverStat_ solver3853; + public mjSolverStat_ solver3854; + public mjSolverStat_ solver3855; + public mjSolverStat_ solver3856; + public mjSolverStat_ solver3857; + public mjSolverStat_ solver3858; + public mjSolverStat_ solver3859; + public mjSolverStat_ solver3860; + public mjSolverStat_ solver3861; + public mjSolverStat_ solver3862; + public mjSolverStat_ solver3863; + public mjSolverStat_ solver3864; + public mjSolverStat_ solver3865; + public mjSolverStat_ solver3866; + public mjSolverStat_ solver3867; + public mjSolverStat_ solver3868; + public mjSolverStat_ solver3869; + public mjSolverStat_ solver3870; + public mjSolverStat_ solver3871; + public mjSolverStat_ solver3872; + public mjSolverStat_ solver3873; + public mjSolverStat_ solver3874; + public mjSolverStat_ solver3875; + public mjSolverStat_ solver3876; + public mjSolverStat_ solver3877; + public mjSolverStat_ solver3878; + public mjSolverStat_ solver3879; + public mjSolverStat_ solver3880; + public mjSolverStat_ solver3881; + public mjSolverStat_ solver3882; + public mjSolverStat_ solver3883; + public mjSolverStat_ solver3884; + public mjSolverStat_ solver3885; + public mjSolverStat_ solver3886; + public mjSolverStat_ solver3887; + public mjSolverStat_ solver3888; + public mjSolverStat_ solver3889; + public mjSolverStat_ solver3890; + public mjSolverStat_ solver3891; + public mjSolverStat_ solver3892; + public mjSolverStat_ solver3893; + public mjSolverStat_ solver3894; + public mjSolverStat_ solver3895; + public mjSolverStat_ solver3896; + public mjSolverStat_ solver3897; + public mjSolverStat_ solver3898; + public mjSolverStat_ solver3899; + public mjSolverStat_ solver3900; + public mjSolverStat_ solver3901; + public mjSolverStat_ solver3902; + public mjSolverStat_ solver3903; + public mjSolverStat_ solver3904; + public mjSolverStat_ solver3905; + public mjSolverStat_ solver3906; + public mjSolverStat_ solver3907; + public mjSolverStat_ solver3908; + public mjSolverStat_ solver3909; + public mjSolverStat_ solver3910; + public mjSolverStat_ solver3911; + public mjSolverStat_ solver3912; + public mjSolverStat_ solver3913; + public mjSolverStat_ solver3914; + public mjSolverStat_ solver3915; + public mjSolverStat_ solver3916; + public mjSolverStat_ solver3917; + public mjSolverStat_ solver3918; + public mjSolverStat_ solver3919; + public mjSolverStat_ solver3920; + public mjSolverStat_ solver3921; + public mjSolverStat_ solver3922; + public mjSolverStat_ solver3923; + public mjSolverStat_ solver3924; + public mjSolverStat_ solver3925; + public mjSolverStat_ solver3926; + public mjSolverStat_ solver3927; + public mjSolverStat_ solver3928; + public mjSolverStat_ solver3929; + public mjSolverStat_ solver3930; + public mjSolverStat_ solver3931; + public mjSolverStat_ solver3932; + public mjSolverStat_ solver3933; + public mjSolverStat_ solver3934; + public mjSolverStat_ solver3935; + public mjSolverStat_ solver3936; + public mjSolverStat_ solver3937; + public mjSolverStat_ solver3938; + public mjSolverStat_ solver3939; + public mjSolverStat_ solver3940; + public mjSolverStat_ solver3941; + public mjSolverStat_ solver3942; + public mjSolverStat_ solver3943; + public mjSolverStat_ solver3944; + public mjSolverStat_ solver3945; + public mjSolverStat_ solver3946; + public mjSolverStat_ solver3947; + public mjSolverStat_ solver3948; + public mjSolverStat_ solver3949; + public mjSolverStat_ solver3950; + public mjSolverStat_ solver3951; + public mjSolverStat_ solver3952; + public mjSolverStat_ solver3953; + public mjSolverStat_ solver3954; + public mjSolverStat_ solver3955; + public mjSolverStat_ solver3956; + public mjSolverStat_ solver3957; + public mjSolverStat_ solver3958; + public mjSolverStat_ solver3959; + public mjSolverStat_ solver3960; + public mjSolverStat_ solver3961; + public mjSolverStat_ solver3962; + public mjSolverStat_ solver3963; + public mjSolverStat_ solver3964; + public mjSolverStat_ solver3965; + public mjSolverStat_ solver3966; + public mjSolverStat_ solver3967; + public mjSolverStat_ solver3968; + public mjSolverStat_ solver3969; + public mjSolverStat_ solver3970; + public mjSolverStat_ solver3971; + public mjSolverStat_ solver3972; + public mjSolverStat_ solver3973; + public mjSolverStat_ solver3974; + public mjSolverStat_ solver3975; + public mjSolverStat_ solver3976; + public mjSolverStat_ solver3977; + public mjSolverStat_ solver3978; + public mjSolverStat_ solver3979; + public mjSolverStat_ solver3980; + public mjSolverStat_ solver3981; + public mjSolverStat_ solver3982; + public mjSolverStat_ solver3983; + public mjSolverStat_ solver3984; + public mjSolverStat_ solver3985; + public mjSolverStat_ solver3986; + public mjSolverStat_ solver3987; + public mjSolverStat_ solver3988; + public mjSolverStat_ solver3989; + public mjSolverStat_ solver3990; + public mjSolverStat_ solver3991; + public mjSolverStat_ solver3992; + public mjSolverStat_ solver3993; + public mjSolverStat_ solver3994; + public mjSolverStat_ solver3995; + public mjSolverStat_ solver3996; + public mjSolverStat_ solver3997; + public mjSolverStat_ solver3998; + public mjSolverStat_ solver3999; + public int solver_nisland; + public fixed int solver_niter[20]; + public fixed int solver_nnz[20]; public fixed double solver_fwdinv[2]; public int nbodypair_broad; public int nbodypair_narrow; @@ -2084,6 +5092,7 @@ public unsafe struct mjModel_ { public double* cam_poscom0; public double* cam_pos0; public double* cam_mat0; + public int* cam_resolution; public double* cam_fovy; public double* cam_ipd; public double* cam_user; @@ -2115,6 +5124,8 @@ public unsafe struct mjModel_ { public int* mesh_texcoordadr; public int* mesh_texcoordnum; public int* mesh_graphadr; + public double* mesh_pos; + public double* mesh_quat; public float* mesh_vert; public float* mesh_normal; public float* mesh_texcoord; @@ -2358,16 +5369,6 @@ public unsafe struct mjrContext_ { public int readPixelFormat; } -[StructLayout(LayoutKind.Sequential)] -public unsafe struct mjTask_ { - public fixed sbyte buffer[24]; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct mjThreadPool_ { - public fixed sbyte buffer[6208]; -} - [StructLayout(LayoutKind.Sequential)] public unsafe struct mjuiState_ { public int nrect; @@ -3948,14 +6949,5 @@ public static unsafe extern void mjd_subQuat(double* qa, double* qb, double* Da, [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjd_quatIntegrate(double* vel, double scale, double* Dquat, double* Dvel, double* Dscale); - -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern mjThreadPool_* mju_threadPoolCreate(UIntPtr number_of_threads); - -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mju_taskJoin(mjTask_* task); - -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mju_threadPoolDestroy(mjThreadPool_* thread_pool); } }