diff --git a/.gitignore b/.gitignore index b2e4f8b4aa523c96ddb8a5d8162edf580c76e6a3..ea19debf57c7e07a045315d8fffd25a25a77c536 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build* contrib/mobile/frameworks_* contrib/3M contrib/Parasolid +*~ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..39e9a383f15039cf85e75ff6923a02f559638bff --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,8 @@ +makegmsh: + image : immc/gmsh:v0.4 + script: + - mkdir build + - cd build + - cmake .. + - make -j4 + - ctest --output-on-failure diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 300122e2c28ac733ab786a460fb8df102d62fcee..80ab7457b4527cbe744b286fb4ef5023a3cc638f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,7 +1,12 @@ -2.xx: new interface to CAD entity creation, constructive solid geometry features -and boolean operations using SetFactory("OpenCASCADE"); replaced "Ruled Surface" -with "Surface"; new "Unique" operator; faster 3D tetrahedral mesh optimization -enabled by default. +3.0.0 (?): new constructive solid geometry features and boolean operations using +OpenCASCADE; improved graphical user interface for interactive, parametric +geometry construction; new or modified commands in .geo files: SetFactory, +Circle, Ellipse, Wire, Surface, Sphere, Block, Torus, Rectangle, Disk, Cylinder, +Cone, Wedge, ThickSolid, ThruSections, Ruled ThruSections, Fillet, Extrude, +BooleanUnion, BooleanIntersection, BooleanDifference, BooleanFragments, +ShapeFromFile, Recursive Delete, Unique; "Surface" replaces the deprecated +"Ruled Surface" command; faster 3D tetrahedral mesh optimization enabled by +default; major code refactoring and numerous bug fixes. 2.16.0 (January 3, 2017): small improvements (list functions, second order hexes for MED, GUI) and bug fixes. @@ -200,7 +205,7 @@ trimmed NURBS from a STEP file into a GEO file will fail); "lateral" entities are now added at the end of the list returned by extrusion commands; fixed various bugs. -2.0 (Feb 5, 2007): new geometry and mesh databases, with support for STEP and +2.0.0 (Feb 5, 2007): new geometry and mesh databases, with support for STEP and IGES import via Open CASCADE; complete rewrite of geometry and mesh drawing code; complete rewrite of mesh I/O layer (with new native binary MSH format and support for import/export of I-deas UNV, Nastran BDF, STL, Medit MESH and VRML diff --git a/CMakeLists.txt b/CMakeLists.txt index cc64080b3b5cff6f06f4fb73422d4443258ae877..e50ea04100afda56fab5db2d68b33bec5c9cfa90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,7 +45,7 @@ opt(CGNS "Enable CGNS mesh export (experimental)" OFF) opt(CAIRO "Enable Cairo to render fonts (experimental)" ${DEFAULT}) opt(CHACO "Enable Chaco mesh partitioner (alternative to Metis)" ${DEFAULT}) opt(COMPRESSED_IO "Enable compressed (gzip) input/output using zlib" OFF) -opt(CXX11 "Compile with -std=c++11" OFF) +opt(CXX11 "Enable C++11" ${DEFAULT}) opt(DINTEGRATION "Enable discrete integration (needed for levelsets)" ${DEFAULT}) opt(FLTK "Enable FLTK graphical user interface (requires mesh/post)" ${DEFAULT}) opt(FOURIER_MODEL "Enable Fourier geometrical models (experimental)" OFF) @@ -91,8 +91,8 @@ opt(WRAP_JAVA "Enable generation of Java wrappers (experimental)" OFF) opt(WRAP_PYTHON "Enable generation of Python wrappers" OFF) opt(ZIPPER "Enable Zip file compression/decompression" OFF) -set(GMSH_MAJOR_VERSION 2) -set(GMSH_MINOR_VERSION 16) +set(GMSH_MAJOR_VERSION 3) +set(GMSH_MINOR_VERSION 0) set(GMSH_PATCH_VERSION 0) set(GMSH_EXTRA_VERSION "" CACHE STRING "Gmsh extra version string") @@ -194,6 +194,7 @@ if(APPLE) set(GMSH_OS "MacOSX") elseif(CYGWIN) set(GMSH_OS "Windows") + add_definitions(-DWIN32) # recent mingw compiler doesn't define it else(APPLE) set(GMSH_OS "${CMAKE_SYSTEM_NAME}") endif(APPLE) @@ -246,7 +247,11 @@ endif(ENABLE_OPENMP) if(ENABLE_CXX11) # in recent cmake versions we could do e.g. set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + check_cxx_compiler_flag("-std=c++11" STDCXX11) + if(STDCXX11) + set_config_option(HAVE_CXX11 "C++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif(STDCXX11) endif(ENABLE_CXX11) macro(append_gmsh_src DIRNAME FILES) @@ -1025,7 +1030,7 @@ if(HAVE_SOLVER) add_definitions(-DOSTYPE_win32) elseif(APPLE) add_definitions(-DOSTYPE_darwin) - else(WIN32) + else(WIN32 OR CYGWIN) add_definitions(-DOSTYPE_linux) endif(WIN32 OR CYGWIN) file(GLOB_RECURSE TAUCS_D ${CMAKE_CURRENT_BINARY_DIR}/contrib/taucs/D/*.c) @@ -1261,18 +1266,18 @@ if(LINUX_JOYSTICK_H) set_config_option(HAVE_LINUX_JOYSTICK "LinuxJoystick") endif(LINUX_JOYSTICK_H) +if(WIN32 OR CYGWIN) + add_definitions(-D_USE_MATH_DEFINES) + list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi) +endif(WIN32 OR CYGWIN) + if(MSVC) - add_definitions(-D_USE_MATH_DEFINES -DNOMINMAX - -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE) + add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE) if(HAVE_FLTK) set(GMSH_SRC ${GMSH_SRC};Fltk/Win32Icon.rc) endif(HAVE_FLTK) endif(MSVC) -if(WIN32 OR CYGWIN) - list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi) -endif(WIN32 OR CYGWIN) - # force full warnings to encourage everybody to write clean(er) code check_cxx_compiler_flag("-Wall" WALL) if(WALL AND NOT MSVC) @@ -1445,6 +1450,7 @@ if(ENABLE_BUILD_ANDROID) message(FATAL_ERROR "Cannot compile Gmsh for android without android-cmake") endif(NOT CMAKE_TOOLCHAIN_FILE) add_definitions(-D_GLIBCXX_USE_C99_MATH=1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_BUILD_TYPE Release) set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR}) set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs/) @@ -1797,10 +1803,10 @@ if(APPLE AND ENABLE_OS_SPECIFIC_INSTALL) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info.plist "${F1}") set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns) - if(PACKAGER STREQUAL "geuzaine") + if(PACKAGER STREQUAL "geuzaine - removed: we sign on a separate machine") # codesigning requires CMake >= 3.2 set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: Christophe Geuzaine") - endif(PACKAGER STREQUAL "geuzaine") + endif(PACKAGER STREQUAL "geuzaine - removed: we sign on a separate machine") install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsGeo.icns DESTINATION . RENAME GmshGeo.icns) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsMsh.icns DESTINATION . diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index ecc9177a6543e56c05f00d24d5d64f693c5b0634..dc0860e0f4478a51db5ad458b0d188f4e896487a 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -177,10 +177,15 @@ std::vector<std::pair<std::string, std::string> > GetShortcutsUsage(const std::s s.push_back(mp("2 or F2", "Mesh surfaces")); s.push_back(mp("3 or F3", "Mesh volumes")); s.push_back(mp("Escape", "Cancel lasso zoom/selection, toggle mouse selection ON/OFF")); + s.push_back(mp("e", "End/accept selection in geometry creation mode")); s.push_back(mp("g", "Go to geometry module")); s.push_back(mp("m", "Go to mesh module")); s.push_back(mp("p", "Go to post-processing module")); + s.push_back(mp("q", "Abort selection in geometry creation mode")); s.push_back(mp("s", "Go to solver module")); + s.push_back(mp("x", "Freeze x coordinate in geometry creation mode")); + s.push_back(mp("y", "Freeze y coordinate in geometry creation mode")); + s.push_back(mp("z", "Freeze z coordinate in geometry creation mode")); s.push_back(mp("Shift+a", "Bring all windows to front")); s.push_back(mp("Shift+g", "Show geometry options")); s.push_back(mp("Shift+m", "Show mesh options")); @@ -191,6 +196,7 @@ std::vector<std::pair<std::string, std::string> > GetShortcutsUsage(const std::s s.push_back(mp("Shift+w", "Show post-processing view options")); s.push_back(mp("Shift+Escape", "Enable full mouse selection")); s.push_back(mp(cc + "d", "Attach/detach menu")); + s.push_back(mp(cc + "e", "Export project")); s.push_back(mp(cc + "f", "Enter full screen")); s.push_back(mp(cc + "i", "Show statistics window")); s.push_back(mp(cc + "j", "Save model options")); @@ -202,14 +208,13 @@ std::vector<std::pair<std::string, std::string> > GetShortcutsUsage(const std::s s.push_back(mp(cc + "o", "Open project file")); s.push_back(mp(cc + "q", "Quit")); s.push_back(mp(cc + "r", "Rename project file")); - s.push_back(mp(cc + "s", "Save file as")); + s.push_back(mp(cc + "s", "Save mesh in default format")); s.push_back(mp("Shift+" + cc + "c", "Show clipping plane window")); s.push_back(mp("Shift+" + cc + "h", "Show current options and workspace window")); s.push_back(mp("Shift+" + cc + "j", "Save options as default")); s.push_back(mp("Shift+" + cc + "m", "Show manipulator window")); s.push_back(mp("Shift+" + cc + "n", "Show option window")); s.push_back(mp("Shift+" + cc + "o", "Merge file(s)")); - s.push_back(mp("Shift+" + cc + "s", "Save mesh in default format")); s.push_back(mp("Shift+" + cc + "u", "Show plugin window")); s.push_back(mp("Shift+" + cc + "v", "Show visibility window")); s.push_back(mp("Alt+a", "Loop through axes modes")); diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp index ac69c8691e97030118c715ada638d8a79163f48e..bae00a890cfac7ec7ea7e96310b6710c913d7069 100644 --- a/Common/OpenFile.cpp +++ b/Common/OpenFile.cpp @@ -639,7 +639,8 @@ void ClearProject() #if defined(HAVE_PARSER) gmsh_yysymbols.clear(); gmsh_yystringsymbols.clear(); - nameSpaces.clear(); + gmsh_yyfactory.clear(); + gmsh_yynamespaces.clear(); #endif for(int i = GModel::list.size() - 1; i >= 0; i--) delete GModel::list[i]; @@ -653,7 +654,8 @@ void ClearProject() Msg::Info("Done clearing all models and views"); new GModel(); - GModel::current()->setFileName(CTX::instance()->defaultFileName); + std::string base = (getenv("PWD") ? "" : CTX::instance()->homeDir); + GModel::current()->setFileName(base + CTX::instance()->defaultFileName); GModel::current()->setName(""); #if defined(HAVE_FLTK) if(FlGui::available()){ @@ -701,7 +703,8 @@ void OpenProject(const std::string &fileName) for(std::map<std::string, std::string>::iterator it = cls.begin(); it != cls.end(); it++) gmsh_yystringsymbols[it->first] = std::vector<std::string>(1, it->second); - nameSpaces.clear(); + gmsh_yyfactory.clear(); + gmsh_yynamespaces.clear(); FunctionManager::Instance()->clear(); #endif diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp index fd8afdc7628ec2c1c3fe0933ee91e9e3c5eb6c0e..7958e9c7d5ed99135c488ae4ab71fd422d170dc8 100644 --- a/Fltk/FlGui.cpp +++ b/Fltk/FlGui.cpp @@ -11,6 +11,7 @@ #include <FL/Fl_Shared_Image.H> #include <FL/Fl_File_Icon.H> #include <FL/fl_draw.H> +#include <FL/fl_ask.H> #include "FlGui.h" #include "drawContextFltk.h" #include "drawContextFltkCairo.h" @@ -398,6 +399,9 @@ FlGui::FlGui(int argc, char **argv) fl_mac_set_about(help_about_cb, 0); #endif + // don't move input dialogs to follow mouse + fl_message_hotspot(0); + // create main graphic window (note that we create all the windows even if // some are not displayed, since the shortcuts should be valid even for hidden // windows, and we don't want to test for widget existence every time) @@ -625,6 +629,18 @@ int FlGui::testGlobalShortcuts(int event) graph[i]->gl[j]->invertSelection = 1; status = 0; // trick: do as if we didn't use it } + else if(Fl::test_shortcut('x')) { + elementaryContext->butt[0]->value(!elementaryContext->butt[0]->value()); + status = 1; // trick: do as if we didn't use it + } + else if(Fl::test_shortcut('y')) { + elementaryContext->butt[1]->value(!elementaryContext->butt[1]->value()); + status = 1; // trick: do as if we didn't use it + } + else if(Fl::test_shortcut('z')) { + elementaryContext->butt[2]->value(!elementaryContext->butt[2]->value()); + status = 1; // trick: do as if we didn't use it + } else if(Fl::test_shortcut(FL_Escape) || Fl::test_shortcut(FL_META + FL_Escape) || Fl::test_shortcut(FL_SHIFT + FL_Escape) || diff --git a/Fltk/contextWindow.cpp b/Fltk/contextWindow.cpp index 0d567eda76a71cee0e3575d519a4e3db75890519..03c43364e4e9354cd89b21850b035359a1327ab3 100644 --- a/Fltk/contextWindow.cpp +++ b/Fltk/contextWindow.cpp @@ -3,18 +3,95 @@ // See the LICENSE.txt file for license information. Please report all // bugs and problems to the public mailing list <gmsh@onelab.info>. +#include <stdlib.h> #include <FL/Fl_Tabs.H> #include <FL/Fl_Return_Button.H> #include "FlGui.h" #include "drawContext.h" #include "contextWindow.h" #include "paletteWindow.h" -#include "GModel.h" +#include "graphicWindow.h" +#include "openglWindow.h" #include "Parser.h" +#include "GModel.h" +#ifdef Convex // can be defined by Xlib +#undef Convex +#endif +#include "GModelIO_OCC.h" #include "GeoStringInterface.h" #include "OpenFile.h" #include "Context.h" +#include "Options.h" #include "MallocUtils.h" +#include "Geo.h" +#include "VertexArray.h" +#include "mathEvaluator.h" + +static bool getval(const char *str, double &val) +{ + std::vector<std::string> var; + std::vector<double> valVar; + + // we should probably use the actual .geo parser instead... + for(std::map<std::string, gmsh_yysymbol>::iterator it = gmsh_yysymbols.begin(); + it != gmsh_yysymbols.end(); it++){ + if(it->second.value.size() == 1){ + var.push_back(it->first); + valVar.push_back(it->second.value[0]); + } + } + + std::vector<std::string> expr(1); + expr[0] = str; + std::vector<double> res(1); + mathEvaluator f(expr, var); + if(expr.empty()) return false; + if(!f.eval(valVar, res)) return false; + val = res[0]; + return true; +} + +static void draw_stl(std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) +{ + GLint mode[2]; + glGetIntegerv(GL_POLYGON_MODE, mode); + if(CTX::instance()->geom.surfaceType > 1) + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + else + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glEnable(GL_LIGHTING); + glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); + glColor4ubv((GLubyte *) & CTX::instance()->color.geom.highlight[0]); + + VertexArray va(3, triangles.size()); + for(unsigned int i = 0; i < triangles.size(); i+=3){ + SPoint3 p1 = vertices[triangles[i]]; + SPoint3 p2 = vertices[triangles[i + 1]]; + SPoint3 p3 = vertices[triangles[i + 2]]; + SVector3 n1 = normals[triangles[i]]; + SVector3 n2 = normals[triangles[i + 1]]; + SVector3 n3 = normals[triangles[i + 2]]; + double x[3] = {p1.x(), p2.x(), p3.x()}; + double y[3] = {p1.y(), p2.y(), p3.y()}; + double z[3] = {p1.z(), p2.z(), p3.z()}; + SVector3 nn[3] = {n1, n2, n3}; + va.add(x, y, z, nn); + } + va.finalize(); + + glVertexPointer(3, GL_FLOAT, 0, va.getVertexArray()); + glEnableClientState(GL_VERTEX_ARRAY); + glNormalPointer(GL_BYTE, 0, va.getNormalArray()); + glEnableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glDrawArrays(GL_TRIANGLES, 0, va.getNumVertices()); + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, mode[1]); +} static void elementary_add_parameter_cb(Fl_Widget *w, void *data) { @@ -27,6 +104,17 @@ static void elementary_add_parameter_cb(Fl_Widget *w, void *data) FlGui::instance()->rebuildTree(true); } +static void elementary_draw_point_cb(Fl_Widget *w, void *data) +{ + if(data) return; // we are here from do_callback() + double x, y, z; + if(!getval(FlGui::instance()->elementaryContext->input[4]->value(), x)) return; + if(!getval(FlGui::instance()->elementaryContext->input[5]->value(), y)) return; + if(!getval(FlGui::instance()->elementaryContext->input[6]->value(), z)) return; + FlGui::instance()->getCurrentOpenglWindow()->setPoint(x, y, z); + drawContext::global()->draw(); +} + static void elementary_add_point_cb(Fl_Widget *w, void *data) { add_point(GModel::current()->getFileName(), @@ -40,6 +128,37 @@ static void elementary_add_point_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_circle(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, r, angle1, angle2; + if(!getval(FlGui::instance()->elementaryContext->input[8]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[9]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[10]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[11]->value(), r)) return; + if(!getval(FlGui::instance()->elementaryContext->input[12]->value(), angle1)) return; + if(!getval(FlGui::instance()->elementaryContext->input[13]->value(), angle2)) return; + + if(angle2 <= angle1) return; + glColor4ubv((GLubyte *) & CTX::instance()->color.geom.highlight[0]); + glBegin(GL_LINE_STRIP); + const int N = 30; + for(int i = 0; i < N; i++) { + double t = angle1 + (double)i / (double)(N - 1) * (angle2 - angle1); + double x = xc + r * cos(t); + double y = yc + r * sin(t); + double z = zc; + glVertex3d(x, y, z); + } + glEnd(); +} + +static void elementary_draw_circle_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_circle); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_circle_cb(Fl_Widget *w, void *data) { add_circle(GModel::current()->getFileName(), @@ -55,6 +174,37 @@ static void elementary_add_circle_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_ellipse(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, rx, ry, angle1, angle2; + if(!getval(FlGui::instance()->elementaryContext->input[14]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[15]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[16]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[17]->value(), rx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[18]->value(), ry)) return; + if(!getval(FlGui::instance()->elementaryContext->input[19]->value(), angle1)) return; + if(!getval(FlGui::instance()->elementaryContext->input[20]->value(), angle2)) return; + if(angle2 <= angle1) return; + glColor4ubv((GLubyte *) & CTX::instance()->color.geom.highlight[0]); + glBegin(GL_LINE_STRIP); + const int N = 30; + for(int i = 0; i < N; i++) { + double t = angle1 + (double)i / (double)(N - 1) * (angle2 - angle1); + double x = xc + rx * cos(t); + double y = yc + ry * sin(t); + double z = zc; + glVertex3d(x, y, z); + } + glEnd(); +} + +static void elementary_draw_ellipse_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_ellipse); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_ellipse_cb(Fl_Widget *w, void *data) { add_ellipse(GModel::current()->getFileName(), @@ -71,6 +221,30 @@ static void elementary_add_ellipse_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_disk(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, rx, ry; + if(!getval(FlGui::instance()->elementaryContext->input[21]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[22]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[23]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[24]->value(), rx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[25]->value(), ry)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeDiskSTL + (xc, yc, zc, rx, ry, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_disk_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_disk); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_disk_cb(Fl_Widget *w, void *data) { add_disk(GModel::current()->getFileName(), @@ -85,6 +259,31 @@ static void elementary_add_disk_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_rectangle(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double x, y, z, dx, dy, r; + if(!getval(FlGui::instance()->elementaryContext->input[26]->value(), x)) return; + if(!getval(FlGui::instance()->elementaryContext->input[27]->value(), y)) return; + if(!getval(FlGui::instance()->elementaryContext->input[28]->value(), z)) return; + if(!getval(FlGui::instance()->elementaryContext->input[29]->value(), dx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[30]->value(), dy)) return; + if(!getval(FlGui::instance()->elementaryContext->input[31]->value(), r)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeRectangleSTL + (x, y, z, dx, dy, r, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_rectangle_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_rectangle); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_rectangle_cb(Fl_Widget *w, void *data) { add_rectangle(GModel::current()->getFileName(), @@ -100,6 +299,32 @@ static void elementary_add_rectangle_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_sphere(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, r, angle1, angle2, angle3; + if(!getval(FlGui::instance()->elementaryContext->input[32]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[33]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[34]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[35]->value(), r)) return; + if(!getval(FlGui::instance()->elementaryContext->input[36]->value(), angle1)) return; + if(!getval(FlGui::instance()->elementaryContext->input[37]->value(), angle2)) return; + if(!getval(FlGui::instance()->elementaryContext->input[38]->value(), angle3)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeSphereSTL + (xc, yc, zc, r, angle1, angle2, angle3, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_sphere_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_sphere); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_sphere_cb(Fl_Widget *w, void *data) { add_sphere(GModel::current()->getFileName(), @@ -112,10 +337,38 @@ static void elementary_add_sphere_cb(Fl_Widget *w, void *data) FlGui::instance()->elementaryContext->input[38]->value()); FlGui::instance()->resetVisibility(); GModel::current()->setSelection(0); + drawContext::setDrawGeomTransientFunction(0); SetBoundingBox(); drawContext::global()->draw(); } +static void draw_cylinder(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, dx, dy, dz, r, angle; + if(!getval(FlGui::instance()->elementaryContext->input[39]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[40]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[41]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[42]->value(), dx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[43]->value(), dy)) return; + if(!getval(FlGui::instance()->elementaryContext->input[44]->value(), dz)) return; + if(!getval(FlGui::instance()->elementaryContext->input[45]->value(), r)) return; + if(!getval(FlGui::instance()->elementaryContext->input[46]->value(), angle)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeCylinderSTL + (xc, yc, zc, dx, dy, dz, r, angle, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_cylinder_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_cylinder); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_cylinder_cb(Fl_Widget *w, void *data) { add_cylinder(GModel::current()->getFileName(), @@ -133,6 +386,31 @@ static void elementary_add_cylinder_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_block(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double x, y, z, dx, dy, dz; + if(!getval(FlGui::instance()->elementaryContext->input[47]->value(), x)) return; + if(!getval(FlGui::instance()->elementaryContext->input[48]->value(), y)) return; + if(!getval(FlGui::instance()->elementaryContext->input[49]->value(), z)) return; + if(!getval(FlGui::instance()->elementaryContext->input[50]->value(), dx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[51]->value(), dy)) return; + if(!getval(FlGui::instance()->elementaryContext->input[52]->value(), dz)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeBlockSTL + (x, y, z, dx, dy, dz, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_block_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_block); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_block_cb(Fl_Widget *w, void *data) { add_block(GModel::current()->getFileName(), @@ -148,6 +426,31 @@ static void elementary_add_block_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_torus(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, r1, r2, angle; + if(!getval(FlGui::instance()->elementaryContext->input[53]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[54]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[55]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[56]->value(), r1)) return; + if(!getval(FlGui::instance()->elementaryContext->input[57]->value(), r2)) return; + if(!getval(FlGui::instance()->elementaryContext->input[58]->value(), angle)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeTorusSTL + (xc, yc, zc, r1, r2, angle, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_torus_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_torus); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_torus_cb(Fl_Widget *w, void *data) { add_torus(GModel::current()->getFileName(), @@ -163,6 +466,34 @@ static void elementary_add_torus_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_cone(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double xc, yc, zc, dx, dy, dz, r1, r2, angle; + if(!getval(FlGui::instance()->elementaryContext->input[59]->value(), xc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[60]->value(), yc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[61]->value(), zc)) return; + if(!getval(FlGui::instance()->elementaryContext->input[62]->value(), dx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[63]->value(), dy)) return; + if(!getval(FlGui::instance()->elementaryContext->input[64]->value(), dz)) return; + if(!getval(FlGui::instance()->elementaryContext->input[65]->value(), r1)) return; + if(!getval(FlGui::instance()->elementaryContext->input[66]->value(), r2)) return; + if(!getval(FlGui::instance()->elementaryContext->input[67]->value(), angle)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeConeSTL + (xc, yc, zc, dx, dy, dz, r1, r2, angle, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_cone_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_cone); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_cone_cb(Fl_Widget *w, void *data) { add_cone(GModel::current()->getFileName(), @@ -181,6 +512,32 @@ static void elementary_add_cone_cb(Fl_Widget *w, void *data) drawContext::global()->draw(); } +static void draw_wedge(void *context) +{ + if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); + double x, y, z, dx, dy, dz, ltx; + if(!getval(FlGui::instance()->elementaryContext->input[68]->value(), x)) return; + if(!getval(FlGui::instance()->elementaryContext->input[69]->value(), y)) return; + if(!getval(FlGui::instance()->elementaryContext->input[70]->value(), z)) return; + if(!getval(FlGui::instance()->elementaryContext->input[71]->value(), dx)) return; + if(!getval(FlGui::instance()->elementaryContext->input[72]->value(), dy)) return; + if(!getval(FlGui::instance()->elementaryContext->input[73]->value(), dz)) return; + if(!getval(FlGui::instance()->elementaryContext->input[74]->value(), ltx)) return; + std::vector<SPoint3> vertices; + std::vector<SVector3> normals; + std::vector<int> triangles; + if(!GModel::current()->getOCCInternals()->makeWedgeSTL + (x, y, z, dx, dy, dz, ltx, vertices, normals, triangles)) + return; + draw_stl(vertices, normals, triangles); +} + +static void elementary_draw_wedge_cb(Fl_Widget *w, void *data) +{ + drawContext::setDrawGeomTransientFunction(draw_wedge); + if(!data) drawContext::global()->draw(); +} + static void elementary_add_wedge_cb(Fl_Widget *w, void *data) { add_wedge(GModel::current()->getFileName(), @@ -220,18 +577,18 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) { FL_NORMAL_SIZE -= deltaFontSize; - int width = 31 * FL_NORMAL_SIZE; - int height = 4 * WB + 10 * BH; + int width = 34 * FL_NORMAL_SIZE; + int height = 5 * WB + 10 * BH; win = new paletteWindow(width, height, CTX::instance()->nonModalWindows ? true : false, "Elementary Entity Context"); win->box(GMSH_WINDOW_BOX); { - tab1 = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB); + tab1 = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - BH); // 0: Parameter { group[0] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Parameter"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Parameter"); input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Name"); input[0]->value("lc"); input[1] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Value"); @@ -240,10 +597,12 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) input[2]->value(""); input[3] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Path"); input[3]->value("Parameters"); - for(int i = 0; i < 4; i++) input[i]->align(FL_ALIGN_RIGHT); + for(int i = 0; i < 4; i++){ + input[i]->align(FL_ALIGN_RIGHT); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_parameter_cb); } group[0]->end(); @@ -251,34 +610,23 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 1: Point { group[1] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Point"); - input[4] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Point"); + input[4] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); input[4]->value("0"); - input[5] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate"); + input[5] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); input[5]->value("0"); - input[6] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate"); + input[6] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z"); input[6]->value("0"); input[7] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, - "Prescribed mesh element size at point"); + "Prescribed mesh size at point"); input[7]->value("1.0"); - for(int i = 4; i < 8; i++) + for(int i = 4; i < 8; i++){ input[i]->align(FL_ALIGN_RIGHT); - - for(int i = 0; i < 3; i++) - _butt[i] = new Fl_Check_Button - (width - 2 * WB - IW, 2 * WB + (i+1) * BH, IW, BH, "Freeze"); - - value[0] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW/3, BH); - value[1] = new Fl_Value_Input(2 * WB + IW/3, 2 * WB + 5 * BH, IW/3, BH); - value[2] = new Fl_Value_Input(2 * WB + 2*IW/3, 2 * WB + 5 * BH, IW/3, BH, - "Snapping grid spacing"); - for(int i = 0; i < 3; i++) { - value[i]->align(FL_ALIGN_RIGHT); - value[i]->callback(elementary_snap_cb); + input[i]->callback(elementary_draw_point_cb); } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_point_cb); } group[1]->end(); @@ -286,24 +634,26 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 2: Circle { group[2] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Circle"); - input[8] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X coordinate"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Circle"); + input[8] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X"); input[8]->value("0"); - input[9] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y coordinate"); + input[9] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y"); input[9]->value("0"); - input[10] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z coordinate"); + input[10] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z"); input[10]->value("0"); input[11] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Radius"); - input[11]->value("1"); + input[11]->value("0.5"); input[12] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Angle 1"); - input[12]->value(""); + input[12]->value("0"); input[13] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Angle 2"); - input[13]->value(""); - for(int i = 8; i < 14; i++) + input[13]->value("2*Pi"); + for(int i = 8; i < 14; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_circle_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_circle_cb); } group[2]->end(); @@ -311,26 +661,28 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 3: Ellipse { group[3] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Ellipse"); - input[14] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X coordinate"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Ellipse"); + input[14] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X"); input[14]->value("0"); - input[15] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y coordinate"); + input[15] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y"); input[15]->value("0"); - input[16] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z coordinate"); + input[16] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z"); input[16]->value("0"); - input[17] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "X radius"); - input[17]->value("1"); - input[18] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Y radius"); - input[18]->value("0.5"); - input[19] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Angle 1"); - input[19]->value(""); - input[20] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Angle 2"); - input[20]->value(""); - for(int i = 14; i < 21; i++) + input[17] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Radius X"); + input[17]->value("0.5"); + input[18] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Radius Y"); + input[18]->value("0.25"); + input[19] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Angle 1"); + input[19]->value("0"); + input[20] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle 2"); + input[20]->value("2*Pi"); + for(int i = 14; i < 21; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_ellipse_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_ellipse_cb); } group[3]->end(); @@ -338,22 +690,24 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 4: Disk { group[4] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Disk"); - input[21] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X coordinate"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Disk"); + input[21] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X"); input[21]->value("0"); - input[22] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y coordinate"); + input[22] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y"); input[22]->value("0"); - input[23] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z coordinate"); + input[23] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z"); input[23]->value("0"); - input[24] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "X radius"); - input[24]->value("1"); - input[25] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Y radius"); - input[25]->value("0.5"); - for(int i = 21; i < 26; i++) + input[24] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Radius X"); + input[24]->value("0.5"); + input[25] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Radius Y"); + input[25]->value("0.25"); + for(int i = 21; i < 26; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_disk_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_disk_cb); } group[4]->end(); @@ -361,24 +715,26 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 5: Rectangle { group[5] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Rectangle"); - input[26] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Bottom left X coordinate"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Rectangle"); + input[26] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); input[26]->value("0"); - input[27] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Bottom left Y coordinate"); + input[27] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); input[27]->value("0"); - input[28] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Bottom left Z coordinate"); + input[28] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z"); input[28]->value("0"); - input[29] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Width"); + input[29] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "DX"); input[29]->value("1"); - input[30] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Height"); + input[30] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "DY"); input[30]->value("0.5"); input[31] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Rounded radius"); - input[31]->value(""); - for(int i = 26; i < 32; i++) + input[31]->value("0"); + for(int i = 26; i < 32; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_rectangle_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_rectangle_cb); } group[5]->end(); @@ -386,30 +742,32 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) tab1->end(); } { - tab2 = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB); + tab2 = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - BH); // 6: Sphere { group[6] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Sphere"); - input[32] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X coordinate"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Sphere"); + input[32] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X"); input[32]->value("0"); - input[33] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y coordinate"); + input[33] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y"); input[33]->value("0"); - input[34] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z coordinate"); + input[34] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z"); input[34]->value("0"); input[35] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Radius"); - input[35]->value("1"); + input[35]->value("0.5"); input[36] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Angle 1"); - input[36]->value(""); + input[36]->value("-Pi/2"); input[37] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Angle 2"); - input[37]->value(""); + input[37]->value("Pi/2"); input[38] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle 3"); - input[38]->value(""); - for(int i = 32; i < 39; i++) + input[38]->value("2*Pi"); + for(int i = 32; i < 39; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_sphere_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_sphere_cb); } group[6]->end(); @@ -417,28 +775,30 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 7: Cylinder { group[7] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Cylinder"); - input[39] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Cylinder"); + input[39] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center base X"); input[39]->value("0"); - input[40] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); + input[40] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center base Y"); input[40]->value("0"); - input[41] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z"); + input[41] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center base Z"); input[41]->value("0"); - input[42] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "DX"); + input[42] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Axis DX"); input[42]->value("1"); - input[43] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "DY"); + input[43] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Axis DY"); input[43]->value("0"); - input[44] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "DZ"); + input[44] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Axis DZ"); input[44]->value("0"); input[45] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Radius"); - input[45]->value("1"); + input[45]->value("0.5"); input[46] = new Fl_Input(2 * WB, 2 * WB + 8 * BH, IW, BH, "Angle"); - input[46]->value(""); - for(int i = 39; i < 47; i++) + input[46]->value("2*Pi"); + for(int i = 39; i < 47; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_cylinder_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_cylinder_cb); } group[7]->end(); @@ -446,7 +806,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 8: Block { group[8] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Block"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Block"); input[47] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); input[47]->value("0"); input[48] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); @@ -459,69 +819,73 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) input[51]->value("1"); input[52] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "DZ"); input[52]->value("1"); - for(int i = 47; i < 53; i++) + for(int i = 47; i < 53; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_block_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_block_cb); } group[8]->end(); } - // 9: Torus { group[9] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Torus"); - input[53] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Torus"); + input[53] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X"); input[53]->value("0"); - input[54] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); + input[54] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y"); input[54]->value("0"); - input[55] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z"); + input[55] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z"); input[55]->value("0"); - input[56] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "r1"); - input[56]->value("1"); - input[57] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "r2"); - input[57]->value("0.3"); + input[56] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Radius 1"); + input[56]->value("0.5"); + input[57] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Radius 2"); + input[57]->value("0.2"); input[58] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Angle"); - input[58]->value(""); - for(int i = 53; i < 59; i++) + input[58]->value("2*Pi"); + for(int i = 53; i < 59; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_torus_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_torus_cb); } group[9]->end(); } - // 10: Cone { group[10] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Cone"); - input[59] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Cone"); + input[59] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center base X"); input[59]->value("0"); - input[60] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); + input[60] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center base Y"); input[60]->value("0"); - input[61] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z"); + input[61] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center base Z"); input[61]->value("0"); - input[62] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "DX"); - input[62]->value("0.5"); - input[63] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "DY"); + input[62] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Axis DX"); + input[62]->value("1"); + input[63] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Axis DY"); input[63]->value("0"); - input[64] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "DZ"); + input[64] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Axis DZ"); input[64]->value("0"); - input[65] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "r1"); + input[65] = new Fl_Input(2 * WB + (width - 2 * WB)/2, 2 * WB + 4 * BH, IW, BH, "Radius 1"); input[65]->value("0.5"); - input[66] = new Fl_Input(2 * WB, 2 * WB + 8 * BH, IW, BH, "r2"); + input[66] = new Fl_Input(2 * WB + (width - 2 * WB)/2, 2 * WB + 5 * BH, IW, BH, "Radius 2"); input[66]->value("0.1"); - input[67] = new Fl_Input(2 * WB, 2 * WB + 9 * BH, IW, BH, "Angle"); - input[67]->value(""); - for(int i = 59; i < 68; i++) + input[67] = new Fl_Input(2 * WB + (width - 2 * WB)/2, 2 * WB + 6 * BH, IW, BH, "Angle"); + input[67]->value("2*Pi"); + for(int i = 59; i < 68; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_cone_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_cone_cb); } group[10]->end(); @@ -529,7 +893,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) // 11: Wedge { group[11] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Wedge"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Wedge"); input[68] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X"); input[68]->value("0"); input[69] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y"); @@ -542,13 +906,15 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) input[72]->value("0.5"); input[73] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "DZ"); input[73]->value("0.5"); - input[74] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Ltx"); + input[74] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Top DX"); input[74]->value("0"); - for(int i = 68; i < 75; i++) + for(int i = 68; i < 75; i++){ input[i]->align(FL_ALIGN_RIGHT); + input[i]->callback(elementary_draw_wedge_cb); + } { - Fl_Return_Button *o = new Fl_Return_Button - (width - BB - 2 * WB, height - 2 * WB - BH, BB, BH, "Add"); + Fl_Button *o = new Fl_Button + (width - BB - 2 * WB, height - 3 * WB - 2 * BH, BB, BH, "Add"); o->callback(elementary_add_wedge_cb); } group[11]->end(); @@ -560,6 +926,21 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) Fl_Button *o = new Fl_Button(width - 4 * WB, WB, 3*WB, 3*WB, "..."); o->callback(elementary_switch_tabs_cb); } + { + value[0] = new Fl_Value_Input(WB, height - WB - BH, IW/3, BH, "X"); + value[1] = new Fl_Value_Input(WB + IW/2, height - WB - BH, IW/3, BH, "Y"); + value[2] = new Fl_Value_Input(WB + IW, height - WB - BH, IW/3, BH, "Z snap"); + for(int i = 0; i < 3; i++) { + value[i]->align(FL_ALIGN_RIGHT); + value[i]->callback(elementary_snap_cb); + } + butt[0] = new Fl_Check_Button(width - 6 * BH, height - WB - BH, 1.2 * BH, BH, "X"); + butt[0]->tooltip("(x)"); + butt[1] = new Fl_Check_Button(width - 6 * BH + 1.2 * BH, height - WB - BH, 1.2*BH, BH, "Y"); + butt[1]->tooltip("(y)"); + butt[2] = new Fl_Check_Button(width - 6 * BH + 2.4 * BH, height - WB - BH, (6 - 2*1.2) * BH - WB, BH, "Z freeze"); + butt[2]->tooltip("(z)"); + } tab1->show(); tab2->hide(); @@ -573,7 +954,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) bool elementaryContextWindow::frozenPointCoord(int coord) { if(coord < 0 || coord > 2) return false; - return _butt[coord]->value() ? true : false; + return butt[coord]->value() ? true : false; } void elementaryContextWindow::updatePoint(double pt[3], int which) @@ -583,17 +964,13 @@ void elementaryContextWindow::updatePoint(double pt[3], int which) char str[32]; sprintf(str, "%g", pt[i]); if(which == 1){ - input[4 + i]->value(str); - input[8 + i]->value(str); - input[14 + i]->value(str); - input[21 + i]->value(str); - input[26 + i]->value(str); - input[32 + i]->value(str); - input[39 + i]->value(str); - input[47 + i]->value(str); - input[53 + i]->value(str); - input[59 + i]->value(str); - input[68 + i]->value(str); + int start[11] = {4, 8, 14, 21, 26, 32, 39, 47, 53, 59, 68}; + for(int k = 0; k < 11; k++){ + input[start[k] + i]->value(str); + if(input[start[k] + i]->parent()->active()){ + input[start[k] + i]->do_callback(0, (void*)"no_redraw"); + } + } } } } @@ -603,8 +980,10 @@ void elementaryContextWindow::show(int pane) { if(pane < 0 || pane > 11) return; - for(int i = 0; i < 12; i++) + for(int i = 0; i < 12; i++){ group[i]->hide(); + group[i]->deactivate(); + } if(pane < 6){ tab1->show(); @@ -616,119 +995,234 @@ void elementaryContextWindow::show(int pane) } group[pane]->show(); + group[pane]->activate(); win->show(); } +static Fl_Menu_Item menu_selection_mode[] = { + {"All entities", 0, 0, 0}, + {"Points", 0, 0, 0}, + {"Lines", 0, 0, 0}, + {"Surfaces", 0, 0, 0}, + {"Volumes", 0, 0, 0}, + {0} +}; + +static void selection_mode_cb(Fl_Widget *w, void *data) +{ + Fl_Choice *c = (Fl_Choice*)w; + int mode = ENT_ALL; + switch(c->value()){ + case 1: + mode = ENT_POINT; + opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); + break; + case 2: + mode = ENT_LINE; + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); + break; + case 3: + mode = ENT_SURFACE; + opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1); + break; + case 4: + mode = ENT_VOLUME; + opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, 1); + break; + } + for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) + for(unsigned int j = 0; j < FlGui::instance()->graph[i]->gl.size(); j++) + FlGui::instance()->graph[i]->gl[j]->changeSelection = mode; + drawContext::global()->draw(); +} + transformContextWindow::transformContextWindow(int deltaFontSize) { FL_NORMAL_SIZE -= deltaFontSize; - int width = 31 * FL_NORMAL_SIZE; - int height = 4 * WB + 8 * BH; + int width = 34 * FL_NORMAL_SIZE; + int height = 5 * WB + 10 * BH; win = new paletteWindow(width, height, CTX::instance()->nonModalWindows ? true : false, - "Transformation Context"); + "Elementary Operation Context"); win->box(GMSH_WINDOW_BOX); { - Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB); - // 0: Translation + Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - BH); + // 0: Translate { group[0] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Translation"); - input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component"); + (WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Translate"); + input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "DX"); input[0]->value("0"); - input[1] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component"); + input[1] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "DY"); input[1]->value("0"); - input[2] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component"); + input[2] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "DZ"); input[2]->value("1"); for(int i = 0; i < 3; i++) { input[i]->align(FL_ALIGN_RIGHT); } + butt[0] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, width - 4 * WB, BH, + "Apply translation on copy"); + butt[0]->value(0); + butt[7] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, width - 4 * WB, BH, + "Extrude mesh"); + butt[7]->value(0); + input[21] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Mesh layers"); + input[21]->value("5"); + input[21]->align(FL_ALIGN_RIGHT); + butt[8] = new Fl_Check_Button + (width / 2 + 2 * WB, 2 * WB + 6 * BH, width / 2 - 4 * WB, BH, "Recombine"); + butt[8]->value(1); group[0]->end(); } - // 1: Rotation + // 1: Rotate { - group[1] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Rotation"); - input[3] = new Fl_Input - (2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate of an axis point"); + group[1] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Rotate"); + input[3] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Axis point X"); input[3]->value("0"); - input[4] = new Fl_Input - (2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate of an axis point"); + input[4] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Axis point Y"); input[4]->value("0"); - input[5] = new Fl_Input - (2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate of an axis point"); + input[5] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Axis point Z"); input[5]->value("0"); - input[6] = new Fl_Input - (2 * WB, 2 * WB + 4 * BH, IW, BH, "X component of axis direction"); + input[6] = new Fl_Input(width / 2 + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Axis DX"); input[6]->value("0"); - input[7] = new Fl_Input - (2 * WB, 2 * WB + 5 * BH, IW, BH, "Y component of axis direction"); + input[7] = new Fl_Input(width / 2 + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Axis DY"); input[7]->value("1"); - input[8] = new Fl_Input - (2 * WB, 2 * WB + 6 * BH, IW, BH, "Z component of axis direction"); + input[8] = new Fl_Input(width / 2 + 2 * WB, 2 * WB + 3 * BH, IW, BH, "Axis DZ"); input[8]->value("0"); - input[9] = new Fl_Input - (2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle in radians"); + input[9] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Angle"); input[9]->value("Pi/4"); for(int i = 3; i < 10; i++) { input[i]->align(FL_ALIGN_RIGHT); } + butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, width - 4 * WB, BH, + "Apply rotation on copy"); + butt[1]->value(0); + butt[9] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, width - 4 * WB, BH, + "Extrude mesh"); + butt[9]->value(0); + input[22] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Mesh layers"); + input[22]->value("5"); + input[22]->align(FL_ALIGN_RIGHT); + butt[10] = new Fl_Check_Button + (width / 2 + 2 * WB, 2 * WB + 7 * BH, width / 2 - 4 * WB, BH, "Recombine"); + butt[10]->value(1); group[1]->end(); } // 2: Scale { - group[2] = new Fl_Group - (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Scale"); - input[10] = new Fl_Input - (2 * WB, 2 * WB + 1 * BH, IW, BH, "X component of direction"); + group[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Scale"); + input[10] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X"); input[10]->value("0"); - input[11] = new Fl_Input - (2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component of direction"); + input[11] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y"); input[11]->value("0"); - input[12] = new Fl_Input - (2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component of direction"); + input[12] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z"); input[12]->value("0"); - input[13] = new Fl_Input - (2 * WB, 2 * WB + 4 * BH, IW, BH, "Factor"); + input[13] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Scale X"); input[13]->value("0.5"); - for(int i = 10; i < 14; i++) { + input[14] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Scale Y"); + input[14]->value("0.5"); + input[15] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Scale Z"); + input[15]->value("0.5"); + for(int i = 10; i < 16; i++) { input[i]->align(FL_ALIGN_RIGHT); } + butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, width - 4 * WB, BH, + "Apply scaling on copy"); + butt[2]->value(0); group[2]->end(); } // 3: Symmetry { group[3] = new Fl_Group (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Symmetry"); - input[14] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "A"); - input[14]->value("1"); - input[15] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "B"); - input[15]->value("0"); - input[16] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "C"); - input[16]->value("0"); - input[17] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "D"); - input[17]->value("1"); - for(int i = 14; i < 18; i++) { + input[16] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Plane A"); + input[16]->value("1"); + input[17] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Plane B"); + input[17]->value("0"); + input[18] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Plane C"); + input[18]->value("0"); + input[19] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Plane D"); + input[19]->value("1"); + for(int i = 16; i < 20; i++) { input[i]->align(FL_ALIGN_RIGHT); } + butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, width - 4 * WB, BH, + "Apply symmetry on copy"); + butt[3]->value(0); group[3]->end(); } + // 4: Boolean + { + group[4] = new Fl_Group + (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Boolean"); + butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, width - 4 * WB, BH, + "Delete object"); + butt[4]->value(1); + butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, width - 4 * WB, BH, + "Delete tool"); + butt[5]->value(1); + group[4]->end(); + } + // 5: Fillet + { + group[5] = new Fl_Group + (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Fillet"); + input[20] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Radius"); + input[20]->value("0.1"); + input[20]->align(FL_ALIGN_RIGHT); + group[5]->end(); + } + // 6: Delete + { + group[6] = new Fl_Group + (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Delete"); + butt[6] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, width - 4 * WB, BH, + "Recursive"); + butt[6]->value(1); + group[6]->end(); + } o->end(); } + choice = new Fl_Choice(WB, height - WB - BH, IW, BH, "Selection mode"); + choice->menu(menu_selection_mode); + choice->align(FL_ALIGN_RIGHT); + choice->callback(selection_mode_cb); + win->position(CTX::instance()->ctxPosition[0], CTX::instance()->ctxPosition[1]); win->end(); FL_NORMAL_SIZE += deltaFontSize; } -void transformContextWindow::show(int pane) +void transformContextWindow::show(int pane, bool extrude, bool selection) { - if(pane < 0 || pane > 3) return; - for(int i = 0; i < 4; i++) + for(int i = 0; i < 7; i++){ group[i]->hide(); - group[pane]->show(); + group[i]->deactivate(); + } + for(int i = 0; i < 4; i++){ + if(extrude) butt[i]->deactivate(); + else butt[i]->activate(); + } + for(int i = 7; i < 11; i++){ + if(!extrude) butt[i]->deactivate(); + else butt[i]->activate(); + } + for(int i = 21; i < 23; i++){ + if(!extrude) input[i]->deactivate(); + else input[i]->activate(); + } + if(selection) choice->activate(); + else choice->deactivate(); + if(pane < 0 || pane > 6){ + group[0]->show(); + } + else{ + group[pane]->show(); + group[pane]->activate(); + } win->show(); } @@ -947,8 +1441,11 @@ meshContextWindow::meshContextWindow(int deltaFontSize) void meshContextWindow::show(int pane) { - for(int i = 0; i < 3; i++) + for(int i = 0; i < 3; i++){ group[i]->hide(); + group[i]->deactivate(); + } group[pane]->show(); + group[pane]->activate(); win->show(); } diff --git a/Fltk/contextWindow.h b/Fltk/contextWindow.h index 076453099d6e2a698556bf5a61c24380f3503360..079cbbb34d985cba12a1985ecf4d62a2298cb43d 100644 --- a/Fltk/contextWindow.h +++ b/Fltk/contextWindow.h @@ -22,10 +22,11 @@ class elementaryContextWindow{ Fl_Input *input[80]; Fl_Value_Input *value[10]; Fl_Group *group[20]; - Fl_Check_Button *_butt[3]; + Fl_Check_Button *butt[3]; public: elementaryContextWindow(int deltaFontSize=0); void show(int pane); + void hide(){ win->hide(); } void updatePoint(double pt[3], int which); bool frozenPointCoord(int coord); }; @@ -36,10 +37,12 @@ class transformContextWindow{ Fl_Input *input[30]; Fl_Value_Input *value[10]; Fl_Group *group[10]; - Fl_Check_Button *_butt[3]; + Fl_Check_Button *butt[20]; + Fl_Choice *choice; public: transformContextWindow(int deltaFontSize=0); - void show(int pane); + void show(int pane, bool extrude=false, bool selection=true); + void hide(){ win->hide(); } }; class physicalContextWindow{ @@ -54,6 +57,7 @@ class physicalContextWindow{ public: physicalContextWindow(int deltaFontSize=0); void show(bool remove); + void hide(){ win->hide(); } }; class meshContextWindow{ @@ -65,6 +69,7 @@ class meshContextWindow{ public: meshContextWindow(int deltaFontSize=0); void show(int pane); + void hide(){ win->hide(); } }; #endif diff --git a/Fltk/drawContextFltkCairo.cpp b/Fltk/drawContextFltkCairo.cpp index 84f393e5d508dca5675c1ab5abdb79de7e3f9ce3..9e6595c091fd2eb8ad01d9851e5c191e413629fe 100644 --- a/Fltk/drawContextFltkCairo.cpp +++ b/Fltk/drawContextFltkCairo.cpp @@ -56,6 +56,7 @@ class drawContextFltkCairo::queueString { void flush() { + if(_elements.empty()) return; cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_A8, _totalWidth, _maxHeight); cairo_t *cr = cairo_create(surface); int pos = 0; diff --git a/Fltk/drawContextFltkStringTexture.cpp b/Fltk/drawContextFltkStringTexture.cpp index 11750ed16e1d6e3c6e7c3a8a45a5d5b321db671a..fc4ebb51ca9ee165473ae7efa076b37be680d0fb 100644 --- a/Fltk/drawContextFltkStringTexture.cpp +++ b/Fltk/drawContextFltkStringTexture.cpp @@ -44,6 +44,7 @@ class drawContextFltkStringTexture::queueString { } void flush() { + if(_elements.empty()) return; //1000 should be _totalWidth but it does not work int w = 1000, h = _maxHeight; Fl_Offscreen offscreen = fl_create_offscreen(w, h); diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index 31ecedd0058c79d7c6143222199307889b17275d..7689c0d2ca0cbeb1ae6c411ecc04812bb458aa64 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -16,6 +16,7 @@ typedef unsigned long intptr_t; #include <time.h> #include <fstream> #include <string> +#include <algorithm> #include <FL/Fl_Box.H> #include <FL/fl_ask.H> #include <FL/filename.H> @@ -69,6 +70,13 @@ static void file_new_cb(Fl_Widget *w, void *data) test: if(fileChooser(FILE_CHOOSER_CREATE, "New", "")) { std::string name = fileChooserGetName(1); + std::vector<std::string> split = SplitFileName(name); + if(split[2] != ".geo"){ + if(fl_choice("File '%s' does not have the '.geo' extension.\n\n" + "Do you want to continue as-is?", + "Continue as-is", "Use '.geo' extension", 0, name.c_str())) + name = split[0] + split[1] + ".geo"; + } if(!StatFile(name)){ if(fl_choice("File '%s' already exists.\n\nDo you want to delete it?", "Cancel", "Delete", 0, name.c_str())) @@ -81,9 +89,12 @@ static void file_new_cb(Fl_Widget *w, void *data) Msg::Error("Unable to open file '%s'", name.c_str()); return; } + int factory = fl_choice("Which geometry kernel do you want to use?", + "Built-in", "OpenCASCADE", 0); time_t now; time(&now); fprintf(fp, "// Gmsh project created on %s", ctime(&now)); + if(factory) fprintf(fp, "SetFactory(\"OpenCASCADE\");\n"); fclose(fp); OpenProject(name); drawContext::global()->draw(); @@ -390,7 +401,7 @@ typedef struct{ int (*func) (const char *name); } patXfunc; -static void file_save_as_cb(Fl_Widget *w, void *data) +static void file_export_cb(Fl_Widget *w, void *data) { static patXfunc formats[] = { {"Guess From Extension" TT "*.*", _save_auto}, @@ -461,7 +472,7 @@ static void file_save_as_cb(Fl_Widget *w, void *data) } test: - if(fileChooser(FILE_CHOOSER_CREATE, "Save As", pat)) { + if(fileChooser(FILE_CHOOSER_CREATE, "Export", pat)) { std::string name = fileChooserGetName(1); if(CTX::instance()->confirmOverwrite) { if(!StatFile(name)) @@ -620,6 +631,7 @@ void geometry_reload_cb(Fl_Widget *w, void *data) void geometry_remove_last_command_cb(Fl_Widget *w, void *data) { std::string fileName = GModel::current()->getFileName(); + if(StatFile(fileName)) return; // FIXME: make this work with compressed files std::ifstream t; t.open(fileName.c_str(), std::ifstream::in); @@ -648,6 +660,7 @@ void geometry_remove_last_command_cb(Fl_Widget *w, void *data) static void add_new_point_based_entity(const std::string &what, int pane) { + opt_general_axes(0, GMSH_SET | GMSH_GUI, 3); opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); drawContext::global()->draw(); @@ -657,10 +670,11 @@ static void add_new_point_based_entity(const std::string &what, int pane) for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++) for(unsigned int j = 0; j < FlGui::instance()->graph[i]->gl.size(); j++) FlGui::instance()->graph[i]->gl[j]->addPointMode = 1; - std::string msg = std::string("Move mouse and/or enter coordinates\n") + - "[Press 'Shift' to hold position, 'e' to add " + what + - " or 'q' to abort]"; - Msg::StatusGl(msg.c_str()); + std::string name = what; + std::transform(name.begin(), name.end(), name.begin(), ::tolower); + Msg::StatusGl("Move mouse and/or enter coordinates\n" + "[Press 'Shift' to hold position, 'e' to add %s or 'q' to abort]", + name.c_str()); char ib = FlGui::instance()->selectEntity(ENT_NONE); if(ib == 'e'){ switch(pane){ @@ -780,6 +794,9 @@ static void add_new_point_based_entity(const std::string &what, int pane) } } + FlGui::instance()->elementaryContext->hide(); + drawContext::setDrawGeomTransientFunction(0); + // at the end, not during creation to avoid having things jumping around SetBoundingBox(); Msg::StatusGl(""); @@ -1204,6 +1221,8 @@ static void geometry_elementary_add_new_cb(Fl_Widget *w, void *data) add_new_multiline(str); else if(str == "BSpline") add_new_multiline(str); + else if(str == "Bezier") + add_new_multiline(str); else if(str == "Circle arc") add_new_circle_arc(); else if(str == "Circle") @@ -1238,287 +1257,284 @@ static void geometry_elementary_add_new_cb(Fl_Widget *w, void *data) Msg::Error("Unknown entity to create: %s", str.c_str()); } -static void split_selection() +static void action_point_line_surface_volume(int action, const std::string &onwhat="") { - opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); - drawContext::global()->draw(); - Msg::StatusGl("Select a line to split\n" - "[Press 'q' to abort]"); - GEdge* edge_to_split = 0; - while(1){ - char ib = FlGui::instance()->selectEntity(ENT_LINE); - if(ib == 'q') - break; - if(!FlGui::instance()->selectedEdges.empty()){ - edge_to_split = FlGui::instance()->selectedEdges[0]; - edge_to_split->setSelection(1); - break; - } - } - Msg::StatusGl(""); - if(FlGui::instance()->selectedEdges.empty()) return; - List_T *List1 = List_Create(5, 5, sizeof(int)); - Msg::StatusGl("Select break points\n" - "[Press 'e' to end selection or 'q' to abort]"); - opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); - drawContext::global()->draw(); - while(1){ - char ib = FlGui::instance()->selectEntity(ENT_POINT); - if(ib == 'q') - break; - if(ib == 'e'){ - split_edge(edge_to_split->tag(), List1, GModel::current()->getFileName()); - break; - } - for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ - int tag = FlGui::instance()->selectedVertices[i]->tag(); - int index = List_ISearchSeq(List1, &tag, fcmp_int); - if(index < 0) List_Add(List1, &tag); - FlGui::instance()->selectedVertices[i]->setSelection(1); - } - } - Msg::StatusGl(""); - FlGui::instance()->resetVisibility(); - GModel::current()->setSelection(0); drawContext::global()->draw(); -} -static void action_point_line_surface_volume(int action, int mode, const char *what) -{ - int type; - const char *str; - - if(!strcmp(what, "Point")) { - type = ENT_POINT; - str = "points"; + std::string what(onwhat); + if(what == "Point") opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); - } - else if(!strcmp(what, "Line")) { - type = ENT_LINE; - str = "lines"; + else if(what == "Line") opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); - } - else if(!strcmp(what, "Surface")) { - type = ENT_SURFACE; - str = "surfaces"; + else if(what == "Surface") opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1); - } - else if(!strcmp(what, "Volume")) { - type = ENT_VOLUME; - str = "volumes"; + else if(what == "Volume") opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, 1); - } - else{ - Msg::Error("Unknown entity to select"); - return; - } - if(action == 8){ - FlGui::instance()->meshContext->show(0); - } - - drawContext::global()->draw(); - - List_T *List1 = List_Create(5, 5, sizeof(int)); + std::vector<std::pair<int, int> > dimTags, dimTagsSaved; + std::vector<std::pair<int, int> >::iterator it; while(1) { - if(!List_Nbr(List1)) + std::string str; + int type; + if(what == "Point"){ + str = "points"; + type = ENT_POINT; + } + else if(what == "Line"){ + str = "lines"; + type = ENT_LINE; + } + else if(what == "Surface"){ + str = "surfaces"; + type = ENT_SURFACE; + } + else if(what == "Volume"){ + str = "volumes"; + type = ENT_VOLUME; + } + else{ + switch(FlGui::instance()->transformContext->choice->value()){ + case 1: str = "points"; type = ENT_POINT; break; + case 2: str = "lines"; type = ENT_LINE; break; + case 3: str = "surfaces"; type = ENT_SURFACE; break; + case 4: str = "volumes"; type = ENT_VOLUME; break; + default: str = "entities"; type = ENT_ALL; break; + } + } + + if(dimTags.empty()) Msg::StatusGl("Select %s\n" - "[Press 'e' to end selection or 'q' to abort]", str); + "[Press 'e' to end selection or 'q' to abort]", str.c_str()); else Msg::StatusGl("Select %s\n" "[Press 'e' to end selection, 'u' to undo last selection " - "or 'q' to abort]", str); + "or 'q' to abort]", str.c_str()); char ib = FlGui::instance()->selectEntity(type); if(ib == 'l') { - // we don't use List_Insert in order to keep the original ordering (this - // is slower, but this way undo works as expected) - int tag; - switch (type) { - case ENT_POINT: - for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ - FlGui::instance()->selectedVertices[i]->setSelection(1); - tag = FlGui::instance()->selectedVertices[i]->tag(); - if(List_ISearchSeq(List1, &tag, fcmp_int) < 0) - List_Add(List1, &tag); - } - break; - case ENT_LINE: - for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ - FlGui::instance()->selectedEdges[i]->setSelection(1); - tag = FlGui::instance()->selectedEdges[i]->tag(); - if(List_ISearchSeq(List1, &tag, fcmp_int) < 0) - List_Add(List1, &tag); - } - break; - case ENT_SURFACE: - for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ - FlGui::instance()->selectedFaces[i]->setSelection(1); - tag = FlGui::instance()->selectedFaces[i]->tag(); - if(List_ISearchSeq(List1, &tag, fcmp_int) < 0) - List_Add(List1, &tag); - } - break; - case ENT_VOLUME: - for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ - FlGui::instance()->selectedRegions[i]->setSelection(1); - tag = FlGui::instance()->selectedRegions[i]->tag(); - if(List_ISearchSeq(List1, &tag, fcmp_int) < 0) - List_Add(List1, &tag); - } - break; + for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ + FlGui::instance()->selectedVertices[i]->setSelection(1); + std::pair<int, int> t(0, FlGui::instance()->selectedVertices[i]->tag()); + if(std::find(dimTags.begin(), dimTags.end(), t) == dimTags.end()) + dimTags.push_back(t); + } + for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ + FlGui::instance()->selectedEdges[i]->setSelection(1); + std::pair<int, int> t(1, FlGui::instance()->selectedEdges[i]->tag()); + if(std::find(dimTags.begin(), dimTags.end(), t) == dimTags.end()) + dimTags.push_back(t); + } + for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ + FlGui::instance()->selectedFaces[i]->setSelection(1); + std::pair<int, int> t(2, FlGui::instance()->selectedFaces[i]->tag()); + if(std::find(dimTags.begin(), dimTags.end(), t) == dimTags.end()) + dimTags.push_back(t); + } + for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ + FlGui::instance()->selectedRegions[i]->setSelection(1); + std::pair<int, int> t(3, FlGui::instance()->selectedRegions[i]->tag()); + if(std::find(dimTags.begin(), dimTags.end(), t) == dimTags.end()) + dimTags.push_back(t); } drawContext::global()->draw(); } if(ib == 'r') { - // we don't use List_Suppress in order to keep the original ordering (this - // is slower, but this way undo works as expected) - int index, tag; - switch (type) { - case ENT_POINT: - for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ - tag = FlGui::instance()->selectedVertices[i]->tag(); - index = List_ISearchSeq(List1, &tag, fcmp_int); - if(index >= 0) List_PSuppress(List1, index); - FlGui::instance()->selectedVertices[i]->setSelection(0); + std::vector<std::pair<int, int> >::iterator it; + for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ + std::pair<int, int> t(0, FlGui::instance()->selectedVertices[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); } - break; - case ENT_LINE: - for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ - tag = FlGui::instance()->selectedEdges[i]->tag(); - index = List_ISearchSeq(List1, &tag, fcmp_int); - if(index >= 0) List_PSuppress(List1, index); - FlGui::instance()->selectedEdges[i]->setSelection(0); + } + for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ + std::pair<int, int> t(1, FlGui::instance()->selectedEdges[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); } - break; - case ENT_SURFACE: - for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ - tag = FlGui::instance()->selectedFaces[i]->tag(); - index = List_ISearchSeq(List1, &tag, fcmp_int); - if(index >= 0) List_PSuppress(List1, index); - FlGui::instance()->selectedFaces[i]->setSelection(0); + } + for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ + std::pair<int, int> t(2, FlGui::instance()->selectedFaces[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); } - break; - case ENT_VOLUME: - for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ - tag = FlGui::instance()->selectedRegions[i]->tag(); - index = List_ISearchSeq(List1, &tag, fcmp_int); - if(index >= 0) List_PSuppress(List1, index); - FlGui::instance()->selectedRegions[i]->setSelection(0); + } + for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ + std::pair<int, int> t(3, FlGui::instance()->selectedRegions[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); } - break; } drawContext::global()->draw(); } if(ib == 'u') { - if(List_Nbr(List1)) { - int num; - List_Read(List1, List_Nbr(List1) - 1, &num); - if(type == ENT_POINT){ - GVertex *gv = GModel::current()->getVertexByTag(num); - if(gv) gv->setSelection(0); - } - else if(type == ENT_LINE){ - GEdge *ge = GModel::current()->getEdgeByTag(num); - if(ge) ge->setSelection(0); - } - else if(type == ENT_SURFACE){ - GFace *gf = GModel::current()->getFaceByTag(num); - if(gf) gf->setSelection(0); - } - else if(type == ENT_VOLUME){ - GRegion *gr = GModel::current()->getRegionByTag(num); - if(gr) gr->setSelection(0); - } + if(dimTags.size()) { + std::pair<int, int> t = dimTags.back(); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); + dimTags.pop_back(); drawContext::global()->draw(); - List_Pop(List1); } } if(ib == 'i') { Msg::Error("Inverting selection!"); } if(ib == 'e') { - if(List_Nbr(List1)){ + if(dimTags.size()){ switch (action) { case 0: - translate(mode, List1, GModel::current()->getFileName(), what, + translate(GModel::current()->getFileName(), dimTags, FlGui::instance()->transformContext->input[0]->value(), FlGui::instance()->transformContext->input[1]->value(), - FlGui::instance()->transformContext->input[2]->value()); + FlGui::instance()->transformContext->input[2]->value(), + FlGui::instance()->transformContext->butt[0]->value()); break; case 1: - rotate(mode, List1, GModel::current()->getFileName(), what, + rotate(GModel::current()->getFileName(), dimTags, FlGui::instance()->transformContext->input[6]->value(), FlGui::instance()->transformContext->input[7]->value(), FlGui::instance()->transformContext->input[8]->value(), FlGui::instance()->transformContext->input[3]->value(), FlGui::instance()->transformContext->input[4]->value(), FlGui::instance()->transformContext->input[5]->value(), - FlGui::instance()->transformContext->input[9]->value()); + FlGui::instance()->transformContext->input[9]->value(), + FlGui::instance()->transformContext->butt[1]->value()); break; case 2: - dilate(mode, List1, GModel::current()->getFileName(), what, + dilate(GModel::current()->getFileName(), dimTags, FlGui::instance()->transformContext->input[10]->value(), FlGui::instance()->transformContext->input[11]->value(), FlGui::instance()->transformContext->input[12]->value(), - FlGui::instance()->transformContext->input[13]->value()); + FlGui::instance()->transformContext->input[13]->value(), + FlGui::instance()->transformContext->input[14]->value(), + FlGui::instance()->transformContext->input[15]->value(), + FlGui::instance()->transformContext->butt[2]->value()); break; case 3: - symmetry(mode, List1, GModel::current()->getFileName(), what, - FlGui::instance()->transformContext->input[14]->value(), - FlGui::instance()->transformContext->input[15]->value(), + symmetry(GModel::current()->getFileName(), dimTags, FlGui::instance()->transformContext->input[16]->value(), - FlGui::instance()->transformContext->input[17]->value()); + FlGui::instance()->transformContext->input[17]->value(), + FlGui::instance()->transformContext->input[18]->value(), + FlGui::instance()->transformContext->input[19]->value(), + FlGui::instance()->transformContext->butt[3]->value()); break; case 4: - extrude(List1, GModel::current()->getFileName(), what, + extrude(GModel::current()->getFileName(), dimTags, FlGui::instance()->transformContext->input[0]->value(), FlGui::instance()->transformContext->input[1]->value(), - FlGui::instance()->transformContext->input[2]->value()); + FlGui::instance()->transformContext->input[2]->value(), + FlGui::instance()->transformContext->butt[7]->value(), + FlGui::instance()->transformContext->input[21]->value(), + FlGui::instance()->transformContext->butt[8]->value()); break; case 5: - protude(List1, GModel::current()->getFileName(), what, + protude(GModel::current()->getFileName(), dimTags, FlGui::instance()->transformContext->input[6]->value(), FlGui::instance()->transformContext->input[7]->value(), FlGui::instance()->transformContext->input[8]->value(), FlGui::instance()->transformContext->input[3]->value(), FlGui::instance()->transformContext->input[4]->value(), FlGui::instance()->transformContext->input[5]->value(), - FlGui::instance()->transformContext->input[9]->value()); + FlGui::instance()->transformContext->input[9]->value(), + FlGui::instance()->transformContext->butt[9]->value(), + FlGui::instance()->transformContext->input[22]->value(), + FlGui::instance()->transformContext->butt[10]->value()); break; case 6: - delet(List1, GModel::current()->getFileName(), what); + delete_entities(GModel::current()->getFileName(), dimTags, + FlGui::instance()->transformContext->butt[6]->value()); break; case 7: case 11: - add_physical(what, List1, GModel::current()->getFileName(), - FlGui::instance()->physicalContext->input[0]->value(), - FlGui::instance()->physicalContext->butt[0]->value() ? 0 : - FlGui::instance()->physicalContext->value[0]->value(), - FlGui::instance()->physicalContext->append, - FlGui::instance()->physicalContext->mode); + { + std::vector<int> tags; + for(unsigned int i = 0; i < dimTags.size(); i++){ + if((dimTags[i].first == 0 && what == "Point") || + (dimTags[i].first == 1 && what == "Line") || + (dimTags[i].first == 2 && what == "Surface") || + (dimTags[i].first == 3 && what == "Volume")) + tags.push_back(dimTags[i].second); + } + add_remove_physical(GModel::current()->getFileName(), what, tags, + FlGui::instance()->physicalContext->input[0]->value(), + FlGui::instance()->physicalContext->butt[0]->value() ? 0 : + FlGui::instance()->physicalContext->value[0]->value(), + FlGui::instance()->physicalContext->append, + FlGui::instance()->physicalContext->mode); + } FlGui::instance()->physicalContext->show(action == 7 ? false : true); // ask clients to update the tree using the new physical definition onelab_cb(0, (void*)"check"); break; case 8: - add_charlength(List1, GModel::current()->getFileName(), - FlGui::instance()->meshContext->input[0]->value()); + { + std::vector<int> tags; + for(unsigned int i = 0; i < dimTags.size(); i++){ + if(dimTags[i].first == 0 && what == "Point") + tags.push_back(dimTags[i].second); + } + if(tags.size()) + add_charlength(GModel::current()->getFileName(), tags, + FlGui::instance()->meshContext->input[0]->value()); + } break; case 9: - add_recosurf(List1, GModel::current()->getFileName()); + { + std::vector<int> tags; + for(unsigned int i = 0; i < dimTags.size(); i++){ + if(dimTags[i].first == 2 && what == "Surface") + tags.push_back(dimTags[i].second); + } + add_recosurf(GModel::current()->getFileName(), tags); + } break; case 10: - add_compound(what, List1, GModel::current()->getFileName()); + { + std::vector<int> tags; + for(unsigned int i = 0; i < dimTags.size(); i++){ + if((dimTags[i].first == 1 && what == "Line") || + (dimTags[i].first == 2 && what == "Surface") || + (dimTags[i].first == 3 && what == "Volume")) + tags.push_back(dimTags[i].second); + } + add_compound(GModel::current()->getFileName(), what, tags); + } + break; + case 12: + if(dimTagsSaved.empty()){ + dimTagsSaved = dimTags; + dimTags.clear(); + what = "Line"; + continue; + } + else{ + std::vector<int> l; + for(unsigned int i = 0; i < dimTags.size(); i++){ + if(dimTags[i].first == 1) l.push_back(dimTags[i].second); + } + add_pipe(GModel::current()->getFileName(), dimTagsSaved, l); + dimTagsSaved.clear(); + } break; default: Msg::Error("Unknown action on selected entities"); break; } - List_Reset(List1); + dimTags.clear(); FlGui::instance()->resetVisibility(); GModel::current()->setSelection(0); - if(action <= 6) SetBoundingBox(); + if(action <= 6 || action >= 12) SetBoundingBox(); drawContext::global()->draw(); } } @@ -1528,98 +1544,74 @@ static void action_point_line_surface_volume(int action, int mode, const char *w break; } } - List_Delete(List1); Msg::StatusGl(""); } -static void geometry_elementary_add_translate_cb(Fl_Widget *w, void *data) -{ - if(!data) return; - FlGui::instance()->transformContext->show(0); - action_point_line_surface_volume(0, 1, (const char*)data); -} - -static void geometry_elementary_add_rotate_cb(Fl_Widget *w, void *data) -{ - if(!data) return; - FlGui::instance()->transformContext->show(1); - action_point_line_surface_volume(1, 1, (const char*)data); -} - -static void geometry_elementary_add_scale_cb(Fl_Widget *w, void *data) -{ - if(!data) return; - FlGui::instance()->transformContext->show(2); - action_point_line_surface_volume(2, 1, (const char*)data); -} - -static void geometry_elementary_add_symmetry_cb(Fl_Widget *w, void *data) -{ - if(!data) return; - FlGui::instance()->transformContext->show(3); - action_point_line_surface_volume(3, 1, (const char*)data); -} - static void geometry_elementary_translate_cb(Fl_Widget *w, void *data) { - if(!data) return; FlGui::instance()->transformContext->show(0); - action_point_line_surface_volume(0, 0, (const char*)data); + action_point_line_surface_volume(0); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_rotate_cb(Fl_Widget *w, void *data) { - if(!data) return; FlGui::instance()->transformContext->show(1); - action_point_line_surface_volume(1, 0, (const char*)data); + action_point_line_surface_volume(1); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_scale_cb(Fl_Widget *w, void *data) { - if(!data) return; FlGui::instance()->transformContext->show(2); - action_point_line_surface_volume(2, 0, (const char*)data); + action_point_line_surface_volume(2); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_symmetry_cb(Fl_Widget *w, void *data) { - if(!data) return; FlGui::instance()->transformContext->show(3); - action_point_line_surface_volume(3, 0, (const char*)data); + action_point_line_surface_volume(3); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_extrude_translate_cb(Fl_Widget *w, void *data) { - if(!data) return; - FlGui::instance()->transformContext->show(0); - action_point_line_surface_volume(4, 0, (const char*)data); + FlGui::instance()->transformContext->show(0, true); + action_point_line_surface_volume(4); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_extrude_rotate_cb(Fl_Widget *w, void *data) { - if(!data) return; - FlGui::instance()->transformContext->show(1); - action_point_line_surface_volume(5, 0, (const char*)data); + FlGui::instance()->transformContext->show(1, true); + action_point_line_surface_volume(5); + FlGui::instance()->transformContext->hide(); +} + +static void geometry_elementary_pipe_cb(Fl_Widget *w, void *data) +{ + FlGui::instance()->transformContext->show(-1, true); + action_point_line_surface_volume(12); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_delete_cb(Fl_Widget *w, void *data) { - if(!data) return; - action_point_line_surface_volume(6, 0, (const char*)data); + FlGui::instance()->transformContext->show(6); + action_point_line_surface_volume(6); + FlGui::instance()->transformContext->hide(); } static void geometry_elementary_boolean_cb(Fl_Widget *w, void *data) { if(!data) return; + FlGui::instance()->transformContext->show(4); + std::string mode((const char*)data); bool selectObject = true; - std::vector<GEntity*> object, tool; - - if(GModel::current()->getDim() == 3) - opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, 1); - else if(GModel::current()->getDim() == 2) - opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1); + std::vector<std::pair<int, int> > object, tool; while(1) { if(object.empty()) @@ -1637,47 +1629,61 @@ static void geometry_elementary_boolean_cb(Fl_Widget *w, void *data) "[Press 'e' to end selection, 'u' to undo last selection or " "'q' to abort]"); - char ib = FlGui::instance()->selectEntity(ENT_ALL); + int type = ENT_ALL; + switch(FlGui::instance()->transformContext->choice->value()){ + case 1: type = ENT_POINT; break; + case 2: type = ENT_LINE; break; + case 3: type = ENT_SURFACE; break; + case 4: type = ENT_VOLUME; break; + } + + char ib = FlGui::instance()->selectEntity(type); if(ib == 'l') { for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ if(FlGui::instance()->selectedEdges[i]->getSelection() != 1){ FlGui::instance()->selectedEdges[i]->setSelection(1); - if(selectObject){ - object.push_back(FlGui::instance()->selectedEdges[i]); - } + std::pair<int, int> t(1, FlGui::instance()->selectedEdges[i]->tag()); + if(selectObject) + object.push_back(t); else - tool.push_back(FlGui::instance()->selectedEdges[i]); + tool.push_back(t); } } for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ if(FlGui::instance()->selectedFaces[i]->getSelection() != 1){ FlGui::instance()->selectedFaces[i]->setSelection(1); + std::pair<int, int> t(2, FlGui::instance()->selectedFaces[i]->tag()); if(selectObject) - object.push_back(FlGui::instance()->selectedFaces[i]); + object.push_back(t); else - tool.push_back(FlGui::instance()->selectedFaces[i]); + tool.push_back(t); } } for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ if(FlGui::instance()->selectedRegions[i]->getSelection() != 1){ FlGui::instance()->selectedRegions[i]->setSelection(1); + std::pair<int, int> t(3, FlGui::instance()->selectedRegions[i]->tag()); if(selectObject) - object.push_back(FlGui::instance()->selectedRegions[i]); + object.push_back(t); else - tool.push_back(FlGui::instance()->selectedRegions[i]); + tool.push_back(t); } } } if(ib == 'r') { - Msg::Warning("Entity de-selection not implemented yet in boolean operations"); + Msg::Warning("Entity de-selection not supported yet during boolean operation"); } if(ib == 'u') { if(selectObject && object.size()){ - object[object.size() - 1]->setSelection(0); + std::pair<int, int> t = object.back(); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); object.pop_back(); } else if(tool.size()){ - tool[tool.size() - 1]->setSelection(0); + std::pair<int, int> t = tool.back(); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); tool.pop_back(); } } @@ -1692,7 +1698,9 @@ static void geometry_elementary_boolean_cb(Fl_Widget *w, void *data) Msg::Error("At least one tool must be selected"); } else{ - apply_boolean(GModel::current()->getFileName(), mode, object, tool); + apply_boolean(GModel::current()->getFileName(), mode, object, tool, + FlGui::instance()->transformContext->butt[4]->value(), + FlGui::instance()->transformContext->butt[5]->value()); GModel::current()->setSelection(0); selectObject = true; object.clear(); @@ -1705,6 +1713,93 @@ static void geometry_elementary_boolean_cb(Fl_Widget *w, void *data) } } + FlGui::instance()->transformContext->hide(); + drawContext::global()->draw(); + Msg::StatusGl(""); +} + +static void geometry_elementary_fillet_cb(Fl_Widget *w, void *data) +{ + opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, 1); + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); + + FlGui::instance()->transformContext->show(5, false, false); + + bool selectRegions = true; + std::vector<int> regions, edges; + + while(1) { + if(regions.empty()) + Msg::StatusGl("Select volume\n" + "[Press 'e' to end selection or 'q' to abort]"); + else if(selectRegions) + Msg::StatusGl("Select volume\n" + "[Press 'e' to end selection, 'u' to undo last selection or " + "'q' to abort]"); + else if(edges.empty()) + Msg::StatusGl("Select line\n" + "[Press 'e' to end selection or 'q' to abort]"); + else + Msg::StatusGl("Select line\n" + "[Press 'e' to end selection, 'u' to undo last selection or " + "'q' to abort]"); + + char ib = FlGui::instance()->selectEntity(selectRegions ? ENT_VOLUME : ENT_LINE); + if(ib == 'l') { + for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ + if(FlGui::instance()->selectedEdges[i]->getSelection() != 1){ + FlGui::instance()->selectedEdges[i]->setSelection(1); + edges.push_back(FlGui::instance()->selectedEdges[i]->tag()); + } + } + for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ + if(FlGui::instance()->selectedRegions[i]->getSelection() != 1){ + FlGui::instance()->selectedRegions[i]->setSelection(1); + regions.push_back(FlGui::instance()->selectedRegions[i]->tag()); + } + } + } + if(ib == 'r') { + Msg::Warning("Entity de-selection not supported yet during boolean operation"); + } + if(ib == 'u') { + if(selectRegions && regions.size()){ + GRegion *ge = GModel::current()->getRegionByTag(regions.back()); + if(ge) ge->setSelection(0); + regions.pop_back(); + } + else if(edges.size()){ + GEdge *ge = GModel::current()->getEdgeByTag(edges.back()); + if(ge) ge->setSelection(0); + edges.pop_back(); + } + } + if(ib == 'e') { + if(selectRegions){ + if(regions.empty()) + Msg::Error("At least one volume must be selected"); + else + selectRegions = false; + } + else if(edges.empty()){ + Msg::Error("At least one line must be selected"); + } + else{ + apply_fillet(GModel::current()->getFileName(), regions, edges, + FlGui::instance()->transformContext->input[20]->value()); + GModel::current()->setSelection(0); + selectRegions = true; + regions.clear(); + edges.clear(); + } + } + if(ib == 'q') { + GModel::current()->setSelection(0); + break; + } + } + + FlGui::instance()->transformContext->hide(); drawContext::global()->draw(); Msg::StatusGl(""); } @@ -1712,7 +1807,47 @@ static void geometry_elementary_boolean_cb(Fl_Widget *w, void *data) static void geometry_elementary_split_cb(Fl_Widget *w, void *data) { if(!data) return; - split_selection(); + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); + drawContext::global()->draw(); + Msg::StatusGl("Select line to split\n" + "[Press 'q' to abort]"); + GEdge* edge_to_split = 0; + while(1){ + char ib = FlGui::instance()->selectEntity(ENT_LINE); + if(ib == 'q') + break; + if(!FlGui::instance()->selectedEdges.empty()){ + edge_to_split = FlGui::instance()->selectedEdges[0]; + edge_to_split->setSelection(1); + break; + } + } + Msg::StatusGl(""); + if(FlGui::instance()->selectedEdges.empty()) return; + List_T *List1 = List_Create(5, 5, sizeof(int)); + Msg::StatusGl("Select break points\n" + "[Press 'e' to end selection or 'q' to abort]"); + opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); + drawContext::global()->draw(); + while(1){ + char ib = FlGui::instance()->selectEntity(ENT_POINT); + if(ib == 'q') + break; + if(ib == 'e'){ + split_edge(edge_to_split->tag(), List1, GModel::current()->getFileName()); + break; + } + for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ + int tag = FlGui::instance()->selectedVertices[i]->tag(); + int index = List_ISearchSeq(List1, &tag, fcmp_int); + if(index < 0) List_Add(List1, &tag); + FlGui::instance()->selectedVertices[i]->setSelection(1); + } + } + Msg::StatusGl(""); + FlGui::instance()->resetVisibility(); + GModel::current()->setSelection(0); + drawContext::global()->draw(); } static void geometry_elementary_coherence_cb(Fl_Widget *w, void *data) @@ -1729,7 +1864,8 @@ static void geometry_physical_add_cb(Fl_Widget *w, void *data) else if(str == "Line") FlGui::instance()->callForSolverPlugin(1); FlGui::instance()->physicalContext->show(false); - action_point_line_surface_volume(7, 0, str.c_str()); + action_point_line_surface_volume(7, str); + FlGui::instance()->physicalContext->hide(); } static void geometry_physical_remove_cb(Fl_Widget *w, void *data) @@ -1737,7 +1873,8 @@ static void geometry_physical_remove_cb(Fl_Widget *w, void *data) if(!data) return; std::string str((const char*)data); FlGui::instance()->physicalContext->show(true); - action_point_line_surface_volume(11, 0, str.c_str()); + action_point_line_surface_volume(11, str); + FlGui::instance()->physicalContext->hide(); } void mesh_save_cb(Fl_Widget *w, void *data) @@ -1945,8 +2082,8 @@ static std::vector<std::string> getInfoStrings(MElement *ele) std::ostringstream sstream; sstream.precision(12); sstream << " Quality: " - << "gamma = " << ele->gammaShapeMeasure() << " " - << "rho = " << ele->rhoShapeMeasure(); + << "gamma = " << ele->gammaShapeMeasure() << " " + << "rho = " << ele->rhoShapeMeasure(); info.push_back(sstream.str()); } { @@ -2065,15 +2202,17 @@ static void mesh_partition_cb(Fl_Widget *w, void *data) static void mesh_define_length_cb(Fl_Widget *w, void *data) { - action_point_line_surface_volume(8, 0, "Point"); + FlGui::instance()->meshContext->show(0); + action_point_line_surface_volume(8, "Point"); + FlGui::instance()->meshContext->hide(); } static void mesh_define_recombine_cb(Fl_Widget *w, void *data) { - action_point_line_surface_volume(9, 0, "Surface"); + action_point_line_surface_volume(9, "Surface"); } -static void add_transfinite_embedded(int dim, bool embed) +static void mesh_define_transfinite(int dim) { opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); switch (dim) { @@ -2164,20 +2303,18 @@ static void add_transfinite_embedded(int dim, bool embed) } while(1) { if(p.size() == 1) - Msg::StatusGl("Select %s points\n" - "[Press 'e' to end selection or 'q' to abort]", - embed ? "embedded" : "(ordered) boundary"); + Msg::StatusGl("Select (ordered) boundary points\n" + "[Press 'e' to end selection or 'q' to abort]"); else - Msg::StatusGl("Select %s points\n" + Msg::StatusGl("Select (ordered) boundary points\n" "[Press 'e' to end selection, 'u' to undo last selection " - "or 'q' to abort]", - embed ? "embedded" : "(ordered) boundary"); + "or 'q' to abort]"); ib = FlGui::instance()->selectEntity(ENT_POINT); if(ib == 'l') { for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ FlGui::instance()->selectedVertices[i]->setSelection(1); p.push_back(FlGui::instance()->selectedVertices[i]->tag()); - if(!embed) break; + break; } drawContext::global()->draw(); } @@ -2196,10 +2333,7 @@ static void add_transfinite_embedded(int dim, bool embed) if(ib == 'e') { switch (dim) { case 2: - if(embed && p.size()) - add_embedded("Point", p, GModel::current()->getFileName()); - else if(!embed && - (p.size() == 0 + 1 || p.size() == 3 + 1 || p.size() == 4 + 1)) + if((p.size() == 0 + 1 || p.size() == 3 + 1 || p.size() == 4 + 1)) add_trsfsurf(p, GModel::current()->getFileName(), FlGui::instance()->meshContext->choice[1]->text()); else @@ -2235,28 +2369,141 @@ static void add_transfinite_embedded(int dim, bool embed) static void mesh_define_transfinite_line_cb(Fl_Widget *w, void *data) { FlGui::instance()->meshContext->show(1); - add_transfinite_embedded(1, false); + mesh_define_transfinite(1); + FlGui::instance()->meshContext->hide(); } static void mesh_define_transfinite_surface_cb(Fl_Widget *w, void *data) { FlGui::instance()->meshContext->show(2); - add_transfinite_embedded(2, false); + mesh_define_transfinite(2); + FlGui::instance()->meshContext->hide(); } static void mesh_define_transfinite_volume_cb(Fl_Widget *w, void *data) { - add_transfinite_embedded(3, false); + mesh_define_transfinite(3); } static void mesh_define_embedded_cb(Fl_Widget *w, void *data) { - add_transfinite_embedded(2, true); + if(!data) return; + std::string what((const char*)data); + std::vector<int> entities; + bool selectEntities = true; + + int type; const char *str = ""; + if(what == "Surface"){ + type = ENT_SURFACE; str = "surfaces"; + opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1); + } + else if(what == "Line"){ + type = ENT_LINE; str = "lines"; + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); + } + else if(what == "Point"){ + type = ENT_POINT; str = "points"; + opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); + } + else{ + Msg::Error("Unknown type of entity to embed: %s", what.c_str()); + return; + } + while(1) { + if(entities.empty()) + Msg::StatusGl("Select %s\n" + "[Press 'e' to end selection or 'q' to abort]", str); + else if(selectEntities) + Msg::StatusGl("Select %s\n" + "[Press 'e' to end selection, 'u' to undo last selection or " + "'q' to abort]", str); + else + Msg::StatusGl("Select entity in which to embed the %s\n" + "[Press 'q' to abort]", str); + int t = type; + if(!selectEntities){ + switch(FlGui::instance()->transformContext->choice->value()){ + case 2: t = ENT_LINE; break; + case 3: t = ENT_SURFACE; break; + case 4: t = ENT_VOLUME; break; + default: t = ENT_ALL; break; + } + } + char ib = FlGui::instance()->selectEntity(t); + if(ib == 'l') { + if(selectEntities && what == "Point"){ + for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ + if(FlGui::instance()->selectedVertices[i]->getSelection() != 1){ + FlGui::instance()->selectedVertices[i]->setSelection(1); + entities.push_back(FlGui::instance()->selectedVertices[i]->tag()); + } + } + } + else if(selectEntities && what == "Line"){ + for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ + if(FlGui::instance()->selectedEdges[i]->getSelection() != 1){ + FlGui::instance()->selectedEdges[i]->setSelection(1); + entities.push_back(FlGui::instance()->selectedEdges[i]->tag()); + } + } + } + else if(selectEntities && what == "Surface"){ + for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ + if(FlGui::instance()->selectedFaces[i]->getSelection() != 1){ + FlGui::instance()->selectedFaces[i]->setSelection(1); + entities.push_back(FlGui::instance()->selectedFaces[i]->tag()); + } + } + } + else if(!selectEntities && (FlGui::instance()->selectedFaces.size() || + FlGui::instance()->selectedRegions.size())){ + int dim = FlGui::instance()->selectedFaces.size() ? 2 : 3; + if(dim == 2) + FlGui::instance()->selectedFaces[0]->setSelection(1); + else + FlGui::instance()->selectedRegions[0]->setSelection(1); + drawContext::global()->draw(); + int tag = (dim == 2) ? FlGui::instance()->selectedFaces[0]->tag() : + FlGui::instance()->selectedRegions[0]->tag(); + add_embedded(GModel::current()->getFileName(), what, entities, dim, tag); + GModel::current()->setSelection(0); + selectEntities = true; + entities.clear(); + } + } + if(ib == 'r') { + Msg::Warning("Entity de-selection not supported yet during boolean operation"); + } + if(ib == 'u') { + if(selectEntities && entities.size()){ + int dim = (what == "Surface") ? 2 : (what == "Line") ? 1 : 0; + GEntity *ge = GModel::current()->getEntityByTag(dim, entities.back()); + if(ge) ge->setSelection(0); + entities.pop_back(); + } + } + if(ib == 'e') { + if(selectEntities){ + if(entities.empty()) + Msg::Error("At least one entity must be selected"); + else + selectEntities = false; + } + } + if(ib == 'q') { + GModel::current()->setSelection(0); + break; + } + } + + FlGui::instance()->transformContext->hide(); + drawContext::global()->draw(); + Msg::StatusGl(""); } static void mesh_define_compound_entity_cb(Fl_Widget *w, void *data) { - action_point_line_surface_volume(10, 0, (const char *)data); + action_point_line_surface_volume(10, (const char *)data); } // The static menus (we cannot use the 'g', 'm' 's' and 'p' mnemonics since they @@ -2277,21 +2524,21 @@ static Fl_Menu_Item bar_table[] = { {"", 0, (Fl_Callback *)file_open_recent_cb, 0}, {"", 0, (Fl_Callback *)file_open_recent_cb, 0}, {0}, - {"M&erge...", FL_CTRL+FL_SHIFT+'o', (Fl_Callback *)file_open_merge_cb, (void*)"merge"}, - {"Watch Pattern...", 0, (Fl_Callback *)file_watch_cb, 0}, - {"&Clear", 0, (Fl_Callback *)file_clear_cb, 0, FL_MENU_DIVIDER}, + {"M&erge...", FL_CTRL+FL_SHIFT+'o', (Fl_Callback *)file_open_merge_cb, (void*)"merge"}, + {"Watch Pattern...", 0, (Fl_Callback *)file_watch_cb, 0, FL_MENU_DIVIDER}, + {"&Clear", 0, (Fl_Callback *)file_clear_cb, 0}, + {"&Rename...", FL_CTRL+'r', (Fl_Callback *)file_rename_cb, 0}, + {"Delete", 0, (Fl_Callback *)file_delete_cb, 0, FL_MENU_DIVIDER}, {"Remote", 0, 0, 0, FL_MENU_DIVIDER | FL_SUBMENU}, {"Start...", 0, (Fl_Callback *)file_remote_cb, (void*)"start"}, {"Merge...", 0, (Fl_Callback *)file_remote_cb, (void*)"merge"}, {"Clear", 0, (Fl_Callback *)file_remote_cb, (void*)"clear"}, {"Stop", 0, (Fl_Callback *)file_remote_cb, (void*)"stop"}, {0}, - {"&Rename...", FL_CTRL+'r', (Fl_Callback *)file_rename_cb, 0}, - {"Save &As...", FL_CTRL+'s', (Fl_Callback *)file_save_as_cb, 0}, {"Sa&ve Mesh", FL_CTRL+FL_SHIFT+'s', (Fl_Callback *)mesh_save_cb, 0}, {"Save Model Options", FL_CTRL+'j', (Fl_Callback *)file_options_save_cb, (void*)"file"}, {"Save Options As Default", FL_CTRL+FL_SHIFT+'j', (Fl_Callback *)file_options_save_cb, (void*)"default", FL_MENU_DIVIDER}, - {"Delete", 0, (Fl_Callback *)file_delete_cb, 0, FL_MENU_DIVIDER}, + {"&Export...", FL_CTRL+'e', (Fl_Callback *)file_export_cb, 0, FL_MENU_DIVIDER}, {"&Quit", FL_CTRL+'q', (Fl_Callback *)file_quit_cb, 0}, {0}, {"&Tools", 0, 0, 0, FL_SUBMENU}, @@ -2352,20 +2599,20 @@ static Fl_Menu_Item sysbar_table[] = { {"", 0, (Fl_Callback *)file_open_recent_cb, 0}, {0}, {"Merge...", FL_META+FL_SHIFT+'o', (Fl_Callback *)file_open_merge_cb, (void*)"merge"}, - {"Watch Pattern...", 0, (Fl_Callback *)file_watch_cb, 0}, - {"Clear", 0, (Fl_Callback *)file_clear_cb, 0, FL_MENU_DIVIDER}, + {"Watch Pattern...", 0, (Fl_Callback *)file_watch_cb, 0, FL_MENU_DIVIDER}, + {"Clear", 0, (Fl_Callback *)file_clear_cb, 0}, + {"Rename...", FL_META+'r', (Fl_Callback *)file_rename_cb, 0}, + {"Delete", 0, (Fl_Callback *)file_delete_cb, 0, FL_MENU_DIVIDER}, {"Remote", 0, 0, 0, FL_MENU_DIVIDER | FL_SUBMENU}, {"Start...", 0, (Fl_Callback *)file_remote_cb, (void*)"start"}, {"Merge...", 0, (Fl_Callback *)file_remote_cb, (void*)"merge"}, {"Clear", 0, (Fl_Callback *)file_remote_cb, (void*)"clear"}, {"Stop", 0, (Fl_Callback *)file_remote_cb, (void*)"stop"}, {0}, - {"Rename...", FL_META+'r', (Fl_Callback *)file_rename_cb, 0}, - {"Save As...", FL_META+'s', (Fl_Callback *)file_save_as_cb, 0}, - {"Save Mesh", FL_META+FL_SHIFT+'s', (Fl_Callback *)mesh_save_cb, 0}, + {"Save Mesh", FL_META+'s', (Fl_Callback *)mesh_save_cb, 0}, {"Save Model Options", FL_META+'j', (Fl_Callback *)file_options_save_cb, (void*)"file"}, {"Save Options As Default", FL_META+FL_SHIFT+'j', (Fl_Callback *)file_options_save_cb, (void*)"default", FL_MENU_DIVIDER}, - {"Delete", 0, (Fl_Callback *)file_delete_cb, 0}, + {"Export...", FL_META+'e', (Fl_Callback *)file_export_cb, 0}, {0}, {"Tools", 0, 0, 0, FL_SUBMENU}, {"Options", FL_META+FL_SHIFT+'n', (Fl_Callback *)options_cb, 0}, @@ -2544,10 +2791,8 @@ void quick_access_cb(Fl_Widget *w, void *data) status_xyz1p_cb(0, (void *)"z"); } else if(what == "axes"){ - opt_general_axes(0, GMSH_SET|GMSH_GUI, !opt_general_axes(0, GMSH_GET, 0)); - for(unsigned int i = 0; i < PView::list.size(); i++) - if(opt_view_visible(i, GMSH_GET, 0)) - opt_view_axes(i, GMSH_SET | GMSH_GUI, !opt_view_axes(i, GMSH_GET, 0)); + opt_general_axes(0, GMSH_SET|GMSH_GUI, + opt_general_axes(0, GMSH_GET, 0) ? 0 : 3); } else if(what == "orthographic") opt_general_orthographic(0, GMSH_SET | GMSH_GUI, 1); @@ -3883,9 +4128,9 @@ typedef struct{ } menuItem; static menuItem static_modules[] = { - {"0Modules/Geometry/Elementary entities/Set factory/Gmsh", - (Fl_Callback *)geometry_elementary_set_factory_cb, (void*)"Gmsh"} , - {"0Modules/Geometry/Elementary entities/Set factory/OpenCASCADE", + {"0Modules/Geometry/Elementary entities/Set geometry kernel/Built-in", + (Fl_Callback *)geometry_elementary_set_factory_cb, (void*)"Built-in"} , + {"0Modules/Geometry/Elementary entities/Set geometry kernel/OpenCASCADE", (Fl_Callback *)geometry_elementary_set_factory_cb, (void*)"OpenCASCADE"} , {"0Modules/Geometry/Elementary entities/Add/Parameter", (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Parameter"} , @@ -3895,10 +4140,10 @@ static menuItem static_modules[] = { (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Line"} , {"0Modules/Geometry/Elementary entities/Add/Spline", (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Spline"} , - {"0Modules/Geometry/Elementary entities/Add/B-Spline", - (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"BSpline"} , {"0Modules/Geometry/Elementary entities/Add/Bezier", (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Bezier"} , + {"0Modules/Geometry/Elementary entities/Add/B-Spline", + (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"BSpline"} , {"0Modules/Geometry/Elementary entities/Add/Circle", (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Circle"} , {"0Modules/Geometry/Elementary entities/Add/Circle arc", @@ -3929,82 +4174,20 @@ static menuItem static_modules[] = { (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Wedge"} , {"0Modules/Geometry/Elementary entities/Add/Volume", (Fl_Callback *)geometry_elementary_add_new_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Translate/Point", - (Fl_Callback *)geometry_elementary_translate_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Translate/Line", - (Fl_Callback *)geometry_elementary_translate_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Translate/Surface", - (Fl_Callback *)geometry_elementary_translate_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Translate/Volume", - (Fl_Callback *)geometry_elementary_translate_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Translate/Duplicate point", - (Fl_Callback *)geometry_elementary_add_translate_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Translate/Duplicate line", - (Fl_Callback *)geometry_elementary_add_translate_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Translate/Duplicate surface", - (Fl_Callback *)geometry_elementary_add_translate_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Translate/Duplicate volume", - (Fl_Callback *)geometry_elementary_add_translate_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Translate/Extrude point", - (Fl_Callback *)geometry_elementary_extrude_translate_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Translate/Extrude line", - (Fl_Callback *)geometry_elementary_extrude_translate_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Translate/Extrude surface", - (Fl_Callback *)geometry_elementary_extrude_translate_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Rotate/Point", - (Fl_Callback *)geometry_elementary_rotate_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Rotate/Line", - (Fl_Callback *)geometry_elementary_rotate_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Rotate/Surface", - (Fl_Callback *)geometry_elementary_rotate_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Rotate/Volume", - (Fl_Callback *)geometry_elementary_rotate_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Rotate/Duplicate point", - (Fl_Callback *)geometry_elementary_add_rotate_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Rotate/Duplicate line", - (Fl_Callback *)geometry_elementary_add_rotate_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Rotate/Duplicate surface", - (Fl_Callback *)geometry_elementary_add_rotate_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Rotate/Duplicate volume", - (Fl_Callback *)geometry_elementary_add_rotate_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Rotate/Extrude point", - (Fl_Callback *)geometry_elementary_extrude_rotate_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Rotate/Extrude line", - (Fl_Callback *)geometry_elementary_extrude_rotate_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Rotate/Extrude surface", - (Fl_Callback *)geometry_elementary_extrude_rotate_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Scale/Point", - (Fl_Callback *)geometry_elementary_scale_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Scale/Line", - (Fl_Callback *)geometry_elementary_scale_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Scale/Surface", - (Fl_Callback *)geometry_elementary_scale_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Scale/Volume", - (Fl_Callback *)geometry_elementary_scale_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Scale/Duplicate point", - (Fl_Callback *)geometry_elementary_add_scale_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Scale/Duplicate line", - (Fl_Callback *)geometry_elementary_add_scale_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Scale/Duplicate surface", - (Fl_Callback *)geometry_elementary_add_scale_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Scale/Duplicate volume", - (Fl_Callback *)geometry_elementary_add_scale_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Point", - (Fl_Callback *)geometry_elementary_symmetry_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Line", - (Fl_Callback *)geometry_elementary_symmetry_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Surface", - (Fl_Callback *)geometry_elementary_symmetry_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Volume", - (Fl_Callback *)geometry_elementary_symmetry_cb, (void*)"Volume"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Duplicate point", - (Fl_Callback *)geometry_elementary_add_symmetry_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Duplicate line", - (Fl_Callback *)geometry_elementary_add_symmetry_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Duplicate surface", - (Fl_Callback *)geometry_elementary_add_symmetry_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Symmetry/Duplicate volume", - (Fl_Callback *)geometry_elementary_add_symmetry_cb, (void*)"Volume"} , + {"0Modules/Geometry/Elementary entities/Transform/Translate", + (Fl_Callback *)geometry_elementary_translate_cb} , + {"0Modules/Geometry/Elementary entities/Transform/Rotate", + (Fl_Callback *)geometry_elementary_rotate_cb} , + {"0Modules/Geometry/Elementary entities/Transform/Scale", + (Fl_Callback *)geometry_elementary_scale_cb} , + {"0Modules/Geometry/Elementary entities/Transform/Symmetry", + (Fl_Callback *)geometry_elementary_symmetry_cb} , + {"0Modules/Geometry/Elementary entities/Extrude/Translate", + (Fl_Callback *)geometry_elementary_extrude_translate_cb} , + {"0Modules/Geometry/Elementary entities/Extrude/Rotate", + (Fl_Callback *)geometry_elementary_extrude_rotate_cb} , + {"0Modules/Geometry/Elementary entities/Extrude/Pipe", + (Fl_Callback *)geometry_elementary_pipe_cb} , {"0Modules/Geometry/Elementary entities/Boolean/Intersection", (Fl_Callback *)geometry_elementary_boolean_cb, (void*)"BooleanIntersection"} , {"0Modules/Geometry/Elementary entities/Boolean/Union", @@ -4013,16 +4196,12 @@ static menuItem static_modules[] = { (Fl_Callback *)geometry_elementary_boolean_cb, (void*)"BooleanDifference"} , {"0Modules/Geometry/Elementary entities/Boolean/Fragments", (Fl_Callback *)geometry_elementary_boolean_cb, (void*)"BooleanFragments"} , - {"0Modules/Geometry/Elementary entities/Delete/Point", - (Fl_Callback *)geometry_elementary_delete_cb, (void*)"Point"} , - {"0Modules/Geometry/Elementary entities/Delete/Line", - (Fl_Callback *)geometry_elementary_delete_cb, (void*)"Line"} , - {"0Modules/Geometry/Elementary entities/Delete/Surface", - (Fl_Callback *)geometry_elementary_delete_cb, (void*)"Surface"} , - {"0Modules/Geometry/Elementary entities/Delete/Volume", - (Fl_Callback *)geometry_elementary_delete_cb, (void*)"Volume"} , + {"0Modules/Geometry/Elementary entities/Fillet", + (Fl_Callback *)geometry_elementary_fillet_cb}, {"0Modules/Geometry/Elementary entities/Split line", - (Fl_Callback *)geometry_elementary_split_cb,(void*)"Line"}, + (Fl_Callback *)geometry_elementary_split_cb, (void*)"Line"}, + {"0Modules/Geometry/Elementary entities/Delete", + (Fl_Callback *)geometry_elementary_delete_cb} , {"0Modules/Geometry/Elementary entities/Coherence", (Fl_Callback *)geometry_elementary_coherence_cb} , {"0Modules/Geometry/Physical groups/Add/Point", @@ -4047,14 +4226,16 @@ static menuItem static_modules[] = { (Fl_Callback *)geometry_remove_last_command_cb} , {"0Modules/Geometry/Edit script", (Fl_Callback *)geometry_edit_cb} , + {"0Modules/Mesh/Define/Size at points", + (Fl_Callback *)mesh_define_length_cb } , {"0Modules/Mesh/Define/Size fields", (Fl_Callback *)field_cb}, - {"0Modules/Mesh/Define/Element size at points", - (Fl_Callback *)mesh_define_length_cb } , - {"0Modules/Mesh/Define/Embedded points", - (Fl_Callback *)mesh_define_embedded_cb, (void*)"point" } , - {"0Modules/Mesh/Define/Recombine", - (Fl_Callback *)mesh_define_recombine_cb } , + {"0Modules/Mesh/Define/Embedded/Point", + (Fl_Callback *)mesh_define_embedded_cb, (void*)"Point" } , + {"0Modules/Mesh/Define/Embedded/Line", + (Fl_Callback *)mesh_define_embedded_cb, (void*)"Line" } , + {"0Modules/Mesh/Define/Embedded/Surface", + (Fl_Callback *)mesh_define_embedded_cb, (void*)"Surface" } , {"0Modules/Mesh/Define/Transfinite/Line", (Fl_Callback *)mesh_define_transfinite_line_cb} , {"0Modules/Mesh/Define/Transfinite/Surface", @@ -4067,6 +4248,8 @@ static menuItem static_modules[] = { (Fl_Callback *)mesh_define_compound_entity_cb, (void*)"Surface"} , {"0Modules/Mesh/Define/Compound/Volume", (Fl_Callback *)mesh_define_compound_entity_cb, (void*)"Volume"} , + {"0Modules/Mesh/Define/Recombine", + (Fl_Callback *)mesh_define_recombine_cb } , {"0Modules/Mesh/1D", (Fl_Callback *)mesh_1d_cb} , {"0Modules/Mesh/2D", diff --git a/Fltk/openglWindow.cpp b/Fltk/openglWindow.cpp index 02e1d62dd3808d7858eab5c4adbff4a9179c6078..b3750e75a3e320d8018378e7bf87f58898f934ec 100644 --- a/Fltk/openglWindow.cpp +++ b/Fltk/openglWindow.cpp @@ -76,6 +76,7 @@ openglWindow::openglWindow(int x, int y, int w, int h) addPointMode = 0; lassoMode = selectionMode = false; endSelection = undoSelection = invertSelection = quitSelection = 0; + changeSelection = 0; if(CTX::instance()->gamepad) Fl::add_timeout(.5, navigator_handler, (void*)this); } @@ -219,7 +220,7 @@ void openglWindow::draw() glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); _ctx->draw3d(); - glColor4ubv((GLubyte *) & CTX::instance()->color.fg); + glColor4ubv((GLubyte *) & CTX::instance()->color.geom.highlight[0]); float ps = CTX::instance()->geom.pointSize; if(_ctx->isHighResolution()) ps *= CTX::instance()->highResolutionPointSizeFactor; @@ -774,6 +775,7 @@ char openglWindow::selectEntity(int type, _trySelection = 0; selectionMode = true; quitSelection = 0; + changeSelection = 0; endSelection = 0; undoSelection = 0; invertSelection = 0; @@ -785,6 +787,11 @@ char openglWindow::selectEntity(int type, regions.clear(); elements.clear(); FlGui::instance()->wait(); + if(changeSelection) { + Msg::Debug("Changing selection mode to %d", changeSelection); + _selection = changeSelection; + changeSelection = 0; + } if(quitSelection) { _selection = ENT_NONE; selectionMode = false; diff --git a/Fltk/openglWindow.h b/Fltk/openglWindow.h index 998f03a30440f677db9d091a1ed3d04581f5212a..8d8bd0bc5d810095d300a7ca97e760e783d62ae9 100644 --- a/Fltk/openglWindow.h +++ b/Fltk/openglWindow.h @@ -47,7 +47,7 @@ class openglWindow : public Fl_Gl_Window { double response_frequency; int addPointMode; bool lassoMode, selectionMode; - int endSelection, undoSelection, invertSelection, quitSelection; + int endSelection, undoSelection, invertSelection, quitSelection, changeSelection; std::string screenMessage[2]; openglWindow(int x, int y, int w, int h); ~openglWindow(); @@ -63,6 +63,11 @@ class openglWindow : public Fl_Gl_Window { double frequency; void moveWithGamepad(); Navigator *Nautilus; + void setPoint(double x, double y, double z) + { + _point[0] = x; _point[1] = y; _point[2] = z; + } + }; #endif diff --git a/Geo/GEntity.h b/Geo/GEntity.h index cf857263d20f787dbdf73758715dbbfa42be9e48..e384e1d1494519bdac59825dc7b5c19f5e5311b4 100644 --- a/Geo/GEntity.h +++ b/Geo/GEntity.h @@ -36,7 +36,7 @@ class GEntity { // gives the number of the master entity in periodic mesh, gives _tag // if non-periodic - GEntity* _meshMaster; + GEntity *_meshMaster; // the visibility and the selection flag char _visible, _selection; @@ -181,7 +181,6 @@ class GEntity { virtual ~GEntity(){} - // mesh generation of the entity virtual void mesh(bool verbose) {} @@ -206,20 +205,25 @@ class GEntity { // vertices that bound this entity. virtual std::list<GVertex*> vertices() const { return std::list<GVertex*>(); } - // for python, temporary solution while iterator are not binded - std::vector<GRegion*> bindingsGetRegions() { - std::list<GRegion*> r = regions(); // NOTE : two-line to dont create two different lists with diff pointers + // for Python, temporary solution while iterator are not binded + std::vector<GRegion*> bindingsGetRegions() + { + // NOTE: two-line to not create two different lists with diff pointers + std::list<GRegion*> r = regions(); return std::vector<GRegion*> (r.begin(), r.end()); } - std::vector<GFace*> bindingsGetFaces() { + std::vector<GFace*> bindingsGetFaces() + { std::list<GFace*> f = faces(); return std::vector<GFace*> (f.begin(), f.end()); } - std::vector<GEdge*> bindingsGetEdges() { + std::vector<GEdge*> bindingsGetEdges() + { std::list<GEdge*> e = edges(); return std::vector<GEdge*> (e.begin(), e.end()); } - std::vector<GVertex*> bindingsGetVertices() { + std::vector<GVertex*> bindingsGetVertices() + { std::list<GVertex*> v = vertices(); return std::vector<GVertex*> (v.begin(), v.end()); } diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp index 66c0d6dbe3427a9519eb5fd72484bed5c54a0118..93415dd82f7e976e93dfb40e1a3b1181fbecaa8b 100644 --- a/Geo/GFace.cpp +++ b/Geo/GFace.cpp @@ -285,10 +285,12 @@ std::vector<MVertex*> GFace::getEmbeddedMeshVertices() const for(std::list<GEdge *>::const_iterator it = embedded_edges.begin(); it != embedded_edges.end(); it++){ tmp.insert((*it)->mesh_vertices.begin(), (*it)->mesh_vertices.end()); - tmp.insert((*it)->getBeginVertex()->mesh_vertices.begin(), - (*it)->getBeginVertex()->mesh_vertices.end()); - tmp.insert((*it)->getEndVertex()->mesh_vertices.begin(), - (*it)->getEndVertex()->mesh_vertices.end()); + if((*it)->getBeginVertex()) + tmp.insert((*it)->getBeginVertex()->mesh_vertices.begin(), + (*it)->getBeginVertex()->mesh_vertices.end()); + if((*it)->getEndVertex()) + tmp.insert((*it)->getEndVertex()->mesh_vertices.begin(), + (*it)->getEndVertex()->mesh_vertices.end()); } for(std::list<GVertex *>::const_iterator it = embedded_vertices.begin(); it != embedded_vertices.end(); it++){ @@ -694,7 +696,7 @@ void GFace::computeMeshSizeFieldAccuracy(double &avg,double &max_e, double &min_ double oneoversqr2 = 1. / sqrt(2.); double sqr2 = sqrt(2.); for (std::set<MEdge, Less_Edge>::const_iterator it = es.begin(); - it != es.end();++it){ + it != es.end(); ++it){ double u1,v1,u2,v2; MVertex *vert1 = it->getVertex(0); vert1->getParameter(0, u1); @@ -1327,7 +1329,7 @@ int GFace::genusGeom() const int nSeams = 0; std::set<GEdge*> single_seams; for (std::list<GEdge*>::const_iterator it = l_edges.begin(); - it!=l_edges.end();++it){ + it != l_edges.end(); ++it){ if ((*it)->isSeam(this)){ nSeams++; std::set<GEdge*>::iterator it2 = single_seams.find(*it); @@ -1390,8 +1392,8 @@ bool GFace::fillPointCloud(double maxDist, #if defined(HAVE_MESH) -static void meshCompound (GFace* gf, bool verbose) { - +static void meshCompound (GFace* gf, bool verbose) +{ discreteFace *df = new discreteFace (gf->model(), gf->tag() + 100000); std::set<int> ec; @@ -1403,8 +1405,10 @@ static void meshCompound (GFace* gf, bool verbose) { if (found == ec.end())ec.insert((*it)->tag()); else ec.erase(found); } - df->triangles.insert(df->triangles.end(), c->triangles.begin(),c->triangles.end()); - df->mesh_vertices.insert(df->mesh_vertices.end(), c->mesh_vertices.begin(),c->mesh_vertices.end()); + df->triangles.insert(df->triangles.end(), c->triangles.begin(), + c->triangles.end()); + df->mesh_vertices.insert(df->mesh_vertices.end(), c->mesh_vertices.begin(), + c->mesh_vertices.end()); for (unsigned int j=0;j<c->triangles.size();j++)df->_CAD.push_back(c); c->triangles.clear(); c->mesh_vertices.clear(); @@ -1426,7 +1430,7 @@ void GFace::mesh(bool verbose) if (!_compound.empty()){ // Some faces are meshed together if (_compound[0] == this){ // I'm the one that makes the compound job bool ok = true; - for (unsigned int i=0;i<_compound.size();i++){ + for (unsigned int i = 0; i < _compound.size(); i++){ GFace *gf = (GFace*)_compound[i]; ok &= (gf->meshStatistics.status == GFace::DONE); } @@ -1516,7 +1520,7 @@ void GFace::setMeshMaster(GFace* master, const std::vector<double>& tfo) std::set<GVertex*> l_vertices; std::map<std::pair<GVertex*,GVertex*>,GEdge* > l_vtxToEdge; - for (eIter=l_edges.begin();eIter!=l_edges.end();++eIter) { + for (eIter=l_edges.begin();eIter!=l_edges.end(); ++eIter) { GVertex* v0 = (*eIter)->getBeginVertex(); GVertex* v1 = (*eIter)->getEndVertex(); l_vertices.insert(v0); @@ -1524,7 +1528,7 @@ void GFace::setMeshMaster(GFace* master, const std::vector<double>& tfo) l_vtxToEdge[std::make_pair(v0,v1)] = (*eIter); } - for (eIter=embedded_edges.begin();eIter!=embedded_edges.end();++eIter) { + for (eIter=embedded_edges.begin();eIter!=embedded_edges.end(); ++eIter) { GVertex* v0 = (*eIter)->getBeginVertex(); GVertex* v1 = (*eIter)->getEndVertex(); l_vertices.insert(v0); @@ -1539,7 +1543,7 @@ void GFace::setMeshMaster(GFace* master, const std::vector<double>& tfo) std::list<GEdge*> m_edges = master->edges(); std::set<GVertex*> m_vertices; std::map<std::pair<GVertex*,GVertex*>,GEdge* > m_vtxToEdge; - for (eIter=m_edges.begin();eIter!=m_edges.end();++eIter) { + for (eIter=m_edges.begin();eIter!=m_edges.end(); ++eIter) { GVertex* v0 = (*eIter)->getBeginVertex(); GVertex* v1 = (*eIter)->getEndVertex(); m_vertices.insert(v0); @@ -1581,7 +1585,7 @@ void GFace::setMeshMaster(GFace* master, const std::vector<double>& tfo) std::map<GVertex*,GVertex*> gVertexCounterparts; std::set<GVertex*>::iterator mvIter; - for (mvIter=m_vertices.begin();mvIter!=m_vertices.end();++mvIter) { + for (mvIter=m_vertices.begin();mvIter!=m_vertices.end(); ++mvIter) { GVertex* m_vertex = *mvIter; @@ -1597,7 +1601,7 @@ void GFace::setMeshMaster(GFace* master, const std::vector<double>& tfo) GVertex* l_vertex = NULL; std::set<GVertex*>::iterator lvIter = l_vertices.begin(); - for (;lvIter!=l_vertices.end();++lvIter) { + for (;lvIter!=l_vertices.end(); ++lvIter) { SPoint3 xyz((*lvIter)->x(),(*lvIter)->y(),(*lvIter)->z()); SVector3 dist = xyz - xyzTfo; @@ -1743,8 +1747,7 @@ void GFace::setMeshMaster(GFace* master,const std::map<int,int>& edgeCopies) { std::map<GVertex*,GVertex*> vs2vt; - for (std::list<GEdge*>::iterator it=l_edges.begin();it!=l_edges.end();++it){ - + for (std::list<GEdge*>::iterator it = l_edges.begin(); it != l_edges.end(); ++it){ // slave edge GEdge* le = *it; diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index ef1d3af007046028465fa32d1325da2c8ed93fa4..a8cccd32978113ae360000ab745cdceb4af3055f 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -84,9 +84,8 @@ GModel::GModel(std::string name) // on-demand _createGEOInternals(); - // FIXME: GModelFactory will be deprecated, replaced by direct interfaces to - // internal CAD data, with an "integer-based" API, easily wrapped in C, Python - // or any other scripting language + // FIXME: GModelFactory is deprecated and will be removed in Gmsh 3.1. You + // should use GEO_Internals or OCC_Internals instead. setFactory("Gmsh"); #if defined(HAVE_MESH) @@ -742,16 +741,22 @@ SBoundingBox3d GModel::bounds(bool aroundVisible) { std::vector<GEntity*> entities; getEntities(entities); - // using the mesh vertices for now; should use entities[i]->bounds() instead SBoundingBox3d bb; - for(unsigned int i = 0; i < entities.size(); i++) + for(unsigned int i = 0; i < entities.size(); i++){ if(!aroundVisible || entities[i]->getVisibility()){ - if(entities[i]->dim() == 0) - bb += static_cast<GVertex*>(entities[i])->xyz(); - else - for(unsigned int j = 0; j < entities[i]->mesh_vertices.size(); j++) - bb += entities[i]->mesh_vertices[j]->point(); + if(entities[i]->getNativeType() == GEntity::OpenCascadeModel){ + bb += entities[i]->bounds(); + } + else{ + // using the mesh vertices for now + if(entities[i]->dim() == 0) + bb += static_cast<GVertex*>(entities[i])->xyz(); + else + for(unsigned int j = 0; j < entities[i]->mesh_vertices.size(); j++) + bb += entities[i]->mesh_vertices[j]->point(); + } } + } return bb; } @@ -3233,14 +3238,26 @@ GFace* GModel::addCompoundFace(std::vector<GFace*> faces, int param, int split, #endif } +// FIXME: what follows will be removed in Gmsh 3.1 +static void factoryWarning() +{ + static bool warn = true; + if(warn){ + Msg::Warning("GModelFactory is deprecated and will be removed in Gmsh 3.1"); + warn = false; + } +} + GVertex *GModel::addVertex(double x, double y, double z, double lc) { + factoryWarning(); if(_factory) return _factory->addVertex(this, x, y, z, lc); return 0; } GEdge *GModel::addLine(GVertex *v1, GVertex *v2) { + factoryWarning(); if(_factory) return _factory->addLine(this, v1, v2); return 0; } @@ -3248,6 +3265,7 @@ GEdge *GModel::addLine(GVertex *v1, GVertex *v2) GEdge *GModel::addCircleArcCenter(double x, double y, double z, GVertex *start, GVertex *end) { + factoryWarning(); if(_factory) return _factory->addCircleArc(this, GModelFactory::CENTER_START_END, start, end, SPoint3(x, y, z)); @@ -3256,6 +3274,7 @@ GEdge *GModel::addCircleArcCenter(double x, double y, double z, GVertex *start, GEdge *GModel::addCircleArcCenter(GVertex *start, GVertex *center, GVertex *end) { + factoryWarning(); if(_factory) return _factory->addCircleArc(this, start, center, end); return 0; @@ -3264,6 +3283,7 @@ GEdge *GModel::addCircleArcCenter(GVertex *start, GVertex *center, GVertex *end) GEdge *GModel::addCircleArc3Points(double x, double y, double z, GVertex *start, GVertex *end) { + factoryWarning(); if(_factory) return _factory->addCircleArc(this, GModelFactory::THREE_POINTS, start, end, SPoint3(x, y, z)); @@ -3273,6 +3293,7 @@ GEdge *GModel::addCircleArc3Points(double x, double y, double z, GVertex *start, GEdge *GModel::addBezier(GVertex *start, GVertex *end, std::vector<std::vector<double> > points) { + factoryWarning(); if(_factory) return _factory->addSpline(this, GModelFactory::BEZIER, start, end, points); @@ -3282,6 +3303,7 @@ GEdge *GModel::addBezier(GVertex *start, GVertex *end, GEdge *GModel::addBSpline(GVertex *start, GVertex *end, std::vector<std::vector<double> > points) { + factoryWarning(); if(_factory) return _factory->addSpline(this, GModelFactory::BSPLINE, start, end, points); @@ -3294,6 +3316,7 @@ GEdge *GModel::addNURBS(GVertex *start, GVertex *end, std::vector<double> weights, std::vector<int> mult) { + factoryWarning(); if(_factory) return _factory->addNURBS(this, start,end,points,knots,weights, mult); return 0; @@ -3301,6 +3324,7 @@ GEdge *GModel::addNURBS(GVertex *start, GVertex *end, std::vector<GFace *> GModel::addRuledFaces (std::vector<std::vector<GEdge *> > edges) { + factoryWarning(); std::vector<GFace *> faces; if(_factory) faces = _factory->addRuledFaces(this, edges); @@ -3310,6 +3334,7 @@ std::vector<GFace *> GModel::addRuledFaces (std::vector<std::vector<GEdge *> > e GFace* GModel::addFace (std::vector<GEdge *> edges, std::vector< std::vector<double > > points) { + factoryWarning(); if(_factory) return _factory->addFace(this, edges, points); return 0; @@ -3317,6 +3342,7 @@ GFace* GModel::addFace (std::vector<GEdge *> edges, GFace* GModel::addPlanarFace (std::vector<std::vector<GEdge *> > edges) { + factoryWarning(); if(_factory) return _factory->addPlanarFace(this, edges); return 0; @@ -3324,6 +3350,7 @@ GFace* GModel::addPlanarFace (std::vector<std::vector<GEdge *> > edges) GFace* GModel::addPlanarFace (std::vector<std::vector<GEdgeSigned> > edges) { + factoryWarning(); if(_factory) return _factory->addPlanarFace(this, edges); return 0; @@ -3331,6 +3358,7 @@ GFace* GModel::addPlanarFace (std::vector<std::vector<GEdgeSigned> > edges) GRegion* GModel::addVolume (std::vector<std::vector<GFace *> > faces) { + factoryWarning(); if(_factory) return _factory->addVolume(this, faces); return 0; @@ -3338,6 +3366,7 @@ GRegion* GModel::addVolume (std::vector<std::vector<GFace *> > faces) GFace *GModel::add2Drect(double x0, double y0, double dx, double dy) { + factoryWarning(); if(_factory) return _factory->add2Drect(this, x0, y0, dx, dy); return 0; @@ -3345,6 +3374,7 @@ GFace *GModel::add2Drect(double x0, double y0, double dx, double dy) GFace *GModel::add2Dellips(double xc, double yc, double rx, double ry) { + factoryWarning(); if(_factory) return _factory->add2Dellips(this, xc, yc, rx, ry); return 0; @@ -3353,6 +3383,7 @@ GFace *GModel::add2Dellips(double xc, double yc, double rx, double ry) GEntity *GModel::revolve(GEntity *e, std::vector<double> p1, std::vector<double> p2, double angle) { + factoryWarning(); if(_factory) return _factory->revolve(this, e, p1, p2, angle); return 0; @@ -3360,6 +3391,7 @@ GEntity *GModel::revolve(GEntity *e, std::vector<double> p1, std::vector<double> GEntity *GModel::extrude(GEntity *e, std::vector<double> p1, std::vector<double> p2) { + factoryWarning(); if(_factory) return _factory->extrude(this, e, p1, p2); return 0; @@ -3368,6 +3400,7 @@ GEntity *GModel::extrude(GEntity *e, std::vector<double> p1, std::vector<double> std::vector<GEntity*> GModel::extrudeBoundaryLayer(GEntity *e, int nbLayers, double hLayers, int dir, int view) { + factoryWarning(); if(_factory) return _factory->extrudeBoundaryLayer(this, e, nbLayers,hLayers, dir, view); std::vector<GEntity*> empty; @@ -3376,6 +3409,7 @@ std::vector<GEntity*> GModel::extrudeBoundaryLayer(GEntity *e, int nbLayers, GEntity *GModel::addPipe(GEntity *e, std::vector<GEdge *> edges) { + factoryWarning(); if(_factory) return _factory->addPipe(this,e,edges); return 0; @@ -3383,6 +3417,7 @@ GEntity *GModel::addPipe(GEntity *e, std::vector<GEdge *> edges) GEntity *GModel::addThruSections(std::vector<std::vector<GEdge *> > edges) { + factoryWarning(); if(_factory) return _factory->addThruSections(this,edges); return 0; @@ -3390,6 +3425,7 @@ GEntity *GModel::addThruSections(std::vector<std::vector<GEdge *> > edges) GEntity *GModel::addSphere(double cx, double cy, double cz, double radius) { + factoryWarning(); if(_factory) return _factory->addSphere(this, cx, cy, cz, radius); return 0; } @@ -3397,6 +3433,7 @@ GEntity *GModel::addSphere(double cx, double cy, double cz, double radius) GEntity *GModel::addCylinder(std::vector<double> p1, std::vector<double> p2, double radius) { + factoryWarning(); if(_factory) return _factory->addCylinder(this, p1, p2, radius); return 0; } @@ -3404,18 +3441,21 @@ GEntity *GModel::addCylinder(std::vector<double> p1, std::vector<double> p2, GEntity *GModel::addTorus(std::vector<double> p1, std::vector<double> p2, double radius1, double radius2) { + factoryWarning(); if(_factory) return _factory->addTorus(this, p1, p2, radius1, radius2); return 0; } GEntity *GModel::addBlock(std::vector<double> p1, std::vector<double> p2) { + factoryWarning(); if(_factory) return _factory->addBlock(this, p1, p2); return 0; } GEntity *GModel::add3DBlock(std::vector<double> p1, double dx, double dy, double dz ) { + factoryWarning(); if(_factory) return _factory->add3DBlock(this, p1, dx, dy, dz); return 0; } @@ -3423,17 +3463,20 @@ GEntity *GModel::add3DBlock(std::vector<double> p1, double dx, double dy, double GEntity *GModel::addCone(std::vector<double> p1, std::vector<double> p2, double radius1, double radius2) { + factoryWarning(); if(_factory) return _factory->addCone(this, p1, p2,radius1, radius2); return 0; } void GModel::healGeometry(double tolerance) { + factoryWarning(); if(_factory) _factory->healGeometry(this, tolerance); } GModel *GModel::computeBooleanUnion(GModel *tool, int createNewModel) { + factoryWarning(); if(_factory) return _factory->computeBooleanUnion(this, tool, createNewModel); return 0; @@ -3441,6 +3484,7 @@ GModel *GModel::computeBooleanUnion(GModel *tool, int createNewModel) GModel *GModel::computeBooleanIntersection(GModel *tool, int createNewModel) { + factoryWarning(); if(_factory) return _factory->computeBooleanIntersection(this, tool, createNewModel); return 0; @@ -3448,6 +3492,7 @@ GModel *GModel::computeBooleanIntersection(GModel *tool, int createNewModel) GModel *GModel::computeBooleanDifference(GModel *tool, int createNewModel) { + factoryWarning(); if(_factory) return _factory->computeBooleanDifference(this, tool, createNewModel); return 0; @@ -3455,12 +3500,14 @@ GModel *GModel::computeBooleanDifference(GModel *tool, int createNewModel) void GModel::setPeriodicAllFaces(std::vector<double> FaceTranslationVector) { + factoryWarning(); if(_factory) _factory->setPeriodicAllFaces(this, FaceTranslationVector); } void GModel::setPeriodicPairOfFaces(int numFaceMaster, std::vector<int> EdgeListMaster, int numFaceSlave, std::vector<int> EdgeListSlave) { + factoryWarning(); if(_factory) _factory->setPeriodicPairOfFaces(this, numFaceMaster, EdgeListMaster, numFaceSlave, EdgeListSlave); diff --git a/Geo/GModelFactory.cpp b/Geo/GModelFactory.cpp index 2a06bf8afe7e80007faf50c5c41db39dea0da113..b275f7d03fb32a616adcd51fe1e59ade31d0bd05 100644 --- a/Geo/GModelFactory.cpp +++ b/Geo/GModelFactory.cpp @@ -886,7 +886,7 @@ GEntity *OCCFactory::addSphere(GModel *gm, double xc, double yc, double zc, doub gm->destroy(); gm->_occ_internals->buildLists(); gm->_occ_internals->buildGModel(gm); - return gm->_occ_internals->getOCCRegionByNativePtr(gm, TopoDS::Solid(shape)); + return gm->_occ_internals->getRegionForOCCShape(gm, TopoDS::Solid(shape)); } GRegion* OCCFactory::addVolume (GModel *gm, std::vector<std::vector<GFace *> > faces) @@ -924,7 +924,7 @@ GEntity *OCCFactory::addCylinder(GModel *gm, std::vector<double> p1, gm->destroy(); gm->_occ_internals->buildLists(); gm->_occ_internals->buildGModel(gm); - return gm->_occ_internals->getOCCRegionByNativePtr(gm, TopoDS::Solid(shape)); + return gm->_occ_internals->getRegionForOCCShape(gm, TopoDS::Solid(shape)); } GEntity *OCCFactory::addTorus(GModel *gm, std::vector<double> p1, @@ -956,7 +956,7 @@ GEntity *OCCFactory::addTorus(GModel *gm, std::vector<double> p1, gm->destroy(); gm->_occ_internals->buildLists(); gm->_occ_internals->buildGModel(gm); - return gm->_occ_internals->getOCCRegionByNativePtr(gm, TopoDS::Solid(shape)); + return gm->_occ_internals->getRegionForOCCShape(gm, TopoDS::Solid(shape)); } GEntity *OCCFactory::addCone(GModel *gm, std::vector<double> p1, @@ -989,7 +989,7 @@ GEntity *OCCFactory::addCone(GModel *gm, std::vector<double> p1, gm->destroy(); gm->_occ_internals->buildLists(); gm->_occ_internals->buildGModel(gm); - return gm->_occ_internals->getOCCRegionByNativePtr(gm,TopoDS::Solid(shape)); + return gm->_occ_internals->getRegionForOCCShape(gm,TopoDS::Solid(shape)); } GEntity *OCCFactory::addBlock(GModel *gm, std::vector<double> p1, @@ -1011,7 +1011,7 @@ GEntity *OCCFactory::addBlock(GModel *gm, std::vector<double> p1, gm->destroy(); gm->_occ_internals->buildLists(); gm->_occ_internals->buildGModel(gm); - return gm->_occ_internals->getOCCRegionByNativePtr(gm, TopoDS::Solid(shape)); + return gm->_occ_internals->getRegionForOCCShape(gm, TopoDS::Solid(shape)); } GEntity *OCCFactory::add3DBlock(GModel *gm,std::vector<double> p1, @@ -1032,7 +1032,7 @@ GEntity *OCCFactory::add3DBlock(GModel *gm,std::vector<double> p1, gm->destroy(); gm->_occ_internals->buildLists(); gm->_occ_internals->buildGModel(gm); - return gm->_occ_internals->getOCCRegionByNativePtr(gm, TopoDS::Solid(shape)); + return gm->_occ_internals->getRegionForOCCShape(gm, TopoDS::Solid(shape)); } GModel *OCCFactory::computeBooleanUnion(GModel* obj, GModel* tool, @@ -1174,8 +1174,8 @@ void OCCFactory::setPeriodicAllFaces(GModel *gm, std::vector<double> FaceTransla && IsEqualG(BarycenterFace1.X()+FaceTranslationVector[0],BarycenterFace2.X()) && IsEqualG(BarycenterFace1.Y()+FaceTranslationVector[1],BarycenterFace2.Y()) && IsEqualG(BarycenterFace1.Z()+FaceTranslationVector[2],BarycenterFace2.Z())){ - numFaceMaster = gm->getOCCInternals()->getOCCFaceByNativePtr(gm,aFace1)->tag(); - numFaceSlave = gm->getOCCInternals()->getOCCFaceByNativePtr(gm,aFace2)->tag(); + numFaceMaster = gm->getOCCInternals()->getFaceForOCCShape(gm,aFace1)->tag(); + numFaceSlave = gm->getOCCInternals()->getFaceForOCCShape(gm,aFace2)->tag(); //Msg::Info("Face %d (slave) is most likely Face %d (master) translated by (%.2e,%.2e,%.2e)!", // numFaceSlave,numFaceMaster,FaceTranslationVector[0],FaceTranslationVector[1], // FaceTranslationVector[2]); @@ -1188,7 +1188,7 @@ void OCCFactory::setPeriodicAllFaces(GModel *gm, std::vector<double> FaceTransla for (TopExp_Explorer aEdgeExplorer1(aFace1,TopAbs_EDGE); aEdgeExplorer1.More(); aEdgeExplorer1.Next()) { TopoDS_Edge aEdge1 = TopoDS::Edge(aEdgeExplorer1.Current()); - int numEdgeMaster = gm->getOCCInternals()->getOCCEdgeByNativePtr(gm,aEdge1)->tag(); + int numEdgeMaster = gm->getOCCInternals()->getEdgeForOCCShape(gm,aEdge1)->tag(); EdgeListMaster[i1] = numEdgeMaster; //i2=0; for (TopExp_Explorer aEdgeExplorer2(aFace2,TopAbs_EDGE); aEdgeExplorer2.More(); @@ -1206,7 +1206,7 @@ void OCCFactory::setPeriodicAllFaces(GModel *gm, std::vector<double> FaceTransla && IsEqualG(BarycenterEdge1.X()+FaceTranslationVector[0],BarycenterEdge2.X()) && IsEqualG(BarycenterEdge1.Y()+FaceTranslationVector[1],BarycenterEdge2.Y()) && IsEqualG(BarycenterEdge1.Z()+FaceTranslationVector[2],BarycenterEdge2.Z())){ - int numEdgeSlave = gm->getOCCInternals()->getOCCEdgeByNativePtr(gm,aEdge2)->tag(); + int numEdgeSlave = gm->getOCCInternals()->getEdgeForOCCShape(gm,aEdge2)->tag(); EdgeListSlave[i1] = numEdgeSlave; } } @@ -1326,7 +1326,7 @@ void OCCFactory::rotate(GModel *gm, std::vector<double> p1, std::vector<double> gm->_occ_internals->buildGModel(gm); } -void OCCFactory::dilate(GModel *gm, std::vector<double> p, std::vector<double> s, +void OCCFactory::dilate(GModel *gm, std::vector<double> p, std::vector<double> s, int addToTheModel) { if (!gm->_occ_internals) diff --git a/Geo/GModelIO_GEO.cpp b/Geo/GModelIO_GEO.cpp index cb0a950fb0bd4d76a0eb676df1c27158ff38ff87..26fe71acef74c9335b7d19be4eb083ab5d97eb31 100644 --- a/Geo/GModelIO_GEO.cpp +++ b/Geo/GModelIO_GEO.cpp @@ -23,10 +23,7 @@ #include "gmshRegion.h" #include "Field.h" #include "Context.h" - -#if defined(HAVE_PARSER) #include "Parser.h" -#endif void GEO_Internals::_allocateAll() { @@ -99,51 +96,54 @@ int GEO_Internals::getMaxTag(int dim) const } } -bool GEO_Internals::addVertex(int num, double x, double y, double z, double lc) +bool GEO_Internals::addVertex(int &tag, double x, double y, double z, double lc) { - if(FindPoint(num)){ - Msg::Error("GEO vertex with tag %d already exists", num); + if(tag >= 0 && FindPoint(tag)){ + Msg::Error("GEO vertex with tag %d already exists", tag); return false; } - Vertex *v = CreateVertex(num, x, y, z, lc, 1.0); + if(tag < 0) tag = getMaxTag(0) + 1; + Vertex *v = CreateVertex(tag, x, y, z, lc, 1.0); Tree_Add(Points, &v); _changed = true; return true; } -bool GEO_Internals::addVertex(int num, double x, double y, gmshSurface *surface, +bool GEO_Internals::addVertex(int &tag, double x, double y, gmshSurface *surface, double lc) { - if(FindPoint(num)){ - Msg::Error("GEO vertex with tag %d already exists", num); + if(tag >= 0 && FindPoint(tag)){ + Msg::Error("GEO vertex with tag %d already exists", tag); return false; } - Vertex *v = CreateVertex(num, x, y, surface, lc); + if(tag < 0) tag = getMaxTag(0) + 1; + Vertex *v = CreateVertex(tag, x, y, surface, lc); Tree_Add(Points, &v); _changed = true; return true; } -bool GEO_Internals::addLine(int num, int startTag, int endTag) +bool GEO_Internals::addLine(int &tag, int startTag, int endTag) { std::vector<int> points; points.push_back(startTag); points.push_back(endTag); - return addLine(num, points); + return addLine(tag, points); } -bool GEO_Internals::addLine(int num, const std::vector<int> &vertexTags) +bool GEO_Internals::addLine(int &tag, const std::vector<int> &vertexTags) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(1) + 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < vertexTags.size(); i++){ int t = vertexTags[i]; List_Add(tmp, &t); } - Curve *c = CreateCurve(num, MSH_SEGM_LINE, 1, tmp, NULL, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_LINE, 1, tmp, NULL, -1, -1, 0., 1.); Tree_Add(Curves, &c); CreateReversedCurve(c); List_Delete(tmp); @@ -151,18 +151,19 @@ bool GEO_Internals::addLine(int num, const std::vector<int> &vertexTags) return true; } -bool GEO_Internals::addCircleArc(int num, int startTag, int centerTag, int endTag, +bool GEO_Internals::addCircleArc(int &tag, int startTag, int centerTag, int endTag, double nx, double ny, double nz) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(1) + 1; List_T *tmp = List_Create(3, 2, sizeof(int)); List_Add(tmp, &startTag); List_Add(tmp, ¢erTag); List_Add(tmp, &endTag); - Curve *c = CreateCurve(num, MSH_SEGM_CIRC, 2, tmp, NULL, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_CIRC, 2, tmp, NULL, -1, -1, 0., 1.); if(nx || ny || nz){ c->Circle.n[0] = nx; c->Circle.n[1] = ny; @@ -182,19 +183,20 @@ bool GEO_Internals::addCircleArc(int num, int startTag, int centerTag, int endTa return true; } -bool GEO_Internals::addEllipseArc(int num, int startTag, int centerTag, int majorTag, +bool GEO_Internals::addEllipseArc(int &tag, int startTag, int centerTag, int majorTag, int endTag, double nx, double ny, double nz) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(1) + 1; List_T *tmp = List_Create(3, 2, sizeof(int)); List_Add(tmp, &startTag); List_Add(tmp, ¢erTag); List_Add(tmp, &majorTag); List_Add(tmp, &endTag); - Curve *c = CreateCurve(num, MSH_SEGM_ELLI, 2, tmp, NULL, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_ELLI, 2, tmp, NULL, -1, -1, 0., 1.); if(nx || ny || nz){ c->Circle.n[0] = nx; c->Circle.n[1] = ny; @@ -214,18 +216,19 @@ bool GEO_Internals::addEllipseArc(int num, int startTag, int centerTag, int majo return true; } -bool GEO_Internals::addSpline(int num, const std::vector<int> &vertexTags) +bool GEO_Internals::addSpline(int &tag, const std::vector<int> &vertexTags) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(1) + 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < vertexTags.size(); i++){ int t = vertexTags[i]; List_Add(tmp, &t); } - Curve *c = CreateCurve(num, MSH_SEGM_SPLN, 3, tmp, NULL, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_SPLN, 3, tmp, NULL, -1, -1, 0., 1.); Tree_Add(Curves, &c); CreateReversedCurve(c); List_Delete(tmp); @@ -233,18 +236,19 @@ bool GEO_Internals::addSpline(int num, const std::vector<int> &vertexTags) return true; } -bool GEO_Internals::addBSpline(int num, const std::vector<int> &vertexTags) +bool GEO_Internals::addBSpline(int &tag, const std::vector<int> &vertexTags) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(1) + 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < vertexTags.size(); i++){ int t = vertexTags[i]; List_Add(tmp, &t); } - Curve *c = CreateCurve(num, MSH_SEGM_BSPLN, 2, tmp, NULL, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_BSPLN, 2, tmp, NULL, -1, -1, 0., 1.); Tree_Add(Curves, &c); CreateReversedCurve(c); List_Delete(tmp); @@ -252,10 +256,15 @@ bool GEO_Internals::addBSpline(int num, const std::vector<int> &vertexTags) return true; } -bool GEO_Internals::addBezier(int num, const std::vector<int> &vertexTags) +bool GEO_Internals::addBezier(int &tag, const std::vector<int> &vertexTags) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); + return false; + } + if(tag < 0) tag = getMaxTag(1) + 1; + if(vertexTags.size() < 4){ + Msg::Error("Bezier curve requires at least 4 control points"); return false; } List_T *tmp = List_Create(2, 2, sizeof(int)); @@ -263,7 +272,7 @@ bool GEO_Internals::addBezier(int num, const std::vector<int> &vertexTags) int t = vertexTags[i]; List_Add(tmp, &t); } - Curve *c = CreateCurve(num, MSH_SEGM_BEZIER, 2, tmp, NULL, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_BEZIER, 2, tmp, NULL, -1, -1, 0., 1.); Tree_Add(Curves, &c); CreateReversedCurve(c); List_Delete(tmp); @@ -271,13 +280,14 @@ bool GEO_Internals::addBezier(int num, const std::vector<int> &vertexTags) return true; } -bool GEO_Internals::addNurbs(int num, const std::vector<int> &vertexTags, +bool GEO_Internals::addNurbs(int &tag, const std::vector<int> &vertexTags, const std::vector<double> &knots) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(1) + 1; int order = knots.size() - vertexTags.size() - 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < vertexTags.size(); i++){ @@ -289,7 +299,7 @@ bool GEO_Internals::addNurbs(int num, const std::vector<int> &vertexTags, double d = knots[i]; List_Add(knotsList, &d); } - Curve *c = CreateCurve(num, MSH_SEGM_NURBS, order, tmp, knotsList, -1, -1, 0., 1.); + Curve *c = CreateCurve(tag, MSH_SEGM_NURBS, order, tmp, knotsList, -1, -1, 0., 1.); Tree_Add(Curves, &c); CreateReversedCurve(c); List_Delete(tmp); @@ -297,14 +307,14 @@ bool GEO_Internals::addNurbs(int num, const std::vector<int> &vertexTags, return true; } -bool GEO_Internals::addCompoundLine(int num, const std::vector<int> &edgeTags) +bool GEO_Internals::addCompoundLine(int &tag, const std::vector<int> &edgeTags) { - if(FindCurve(num)){ - Msg::Error("GEO edge with tag %d already exists", num); + if(tag >= 0 && FindCurve(tag)){ + Msg::Error("GEO edge with tag %d already exists", tag); return false; } - - Curve *c = CreateCurve(num, MSH_SEGM_COMPOUND, 1, NULL, NULL, -1, -1, 0., 1.); + if(tag < 0) tag = getMaxTag(1) + 1; + Curve *c = CreateCurve(tag, MSH_SEGM_COMPOUND, 1, NULL, NULL, -1, -1, 0., 1.); c->compound = edgeTags; EndCurve(c); Tree_Add(Curves, &c); @@ -313,31 +323,33 @@ bool GEO_Internals::addCompoundLine(int num, const std::vector<int> &edgeTags) return true; } -bool GEO_Internals::addLineLoop(int num, const std::vector<int> &edgeTags) +bool GEO_Internals::addLineLoop(int &tag, const std::vector<int> &edgeTags) { - if(FindEdgeLoop(num)){ - Msg::Error("GEO line loop with tag %d already exists", num); + if(tag >= 0 && FindEdgeLoop(tag)){ + Msg::Error("GEO line loop with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(-1) + 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < edgeTags.size(); i++){ int t = edgeTags[i]; List_Add(tmp, &t); } - SortEdgesInLoop(num, tmp); - EdgeLoop *l = CreateEdgeLoop(num, tmp); + SortEdgesInLoop(tag, tmp); + EdgeLoop *l = CreateEdgeLoop(tag, tmp); Tree_Add(EdgeLoops, &l); List_Delete(tmp); _changed = true; return true; } -bool GEO_Internals::addPlaneSurface(int num, const std::vector<int> &wireTags) +bool GEO_Internals::addPlaneSurface(int &tag, const std::vector<int> &wireTags) { - if(FindSurface(num)){ - Msg::Error("GEO face with tag %d already exists", num); + if(tag >= 0 && FindSurface(tag)){ + Msg::Error("GEO face with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(2) + 1; if(wireTags.empty()){ Msg::Error("Plane surface requires at least one line loop"); return false; @@ -347,7 +359,7 @@ bool GEO_Internals::addPlaneSurface(int num, const std::vector<int> &wireTags) int t = wireTags[i]; List_Add(tmp, &t); } - Surface *s = CreateSurface(num, MSH_SURF_PLAN); + Surface *s = CreateSurface(tag, MSH_SURF_PLAN); SetSurfaceGeneratrices(s, tmp); List_Delete(tmp); EndSurface(s); @@ -356,25 +368,27 @@ bool GEO_Internals::addPlaneSurface(int num, const std::vector<int> &wireTags) return true; } -bool GEO_Internals::addDiscreteSurface(int num) +bool GEO_Internals::addDiscreteSurface(int &tag) { - if(FindSurface(num)){ - Msg::Error("GEO face with tag %d already exists", num); + if(tag >= 0 && FindSurface(tag)){ + Msg::Error("GEO face with tag %d already exists", tag); return false; } - Surface *s = CreateSurface(num, MSH_SURF_DISCRETE); + if(tag < 0) tag = getMaxTag(2) + 1; + Surface *s = CreateSurface(tag, MSH_SURF_DISCRETE); Tree_Add(Surfaces, &s); _changed = true; return true; } -bool GEO_Internals::addSurfaceFilling(int num, const std::vector<int> &wireTags, +bool GEO_Internals::addSurfaceFilling(int &tag, const std::vector<int> &wireTags, int sphereCenterTag) { - if(FindSurface(num)){ - Msg::Error("GEO face with tag %d already exists", num); + if(tag >= 0 && FindSurface(tag)){ + Msg::Error("GEO face with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(2) + 1; if(wireTags.empty()){ Msg::Error("Face requires at least one line loop"); return false; @@ -392,7 +406,7 @@ bool GEO_Internals::addSurfaceFilling(int num, const std::vector<int> &wireTags, type = MSH_SURF_TRIC; else{ Msg::Error("Wrong definition of face %d: %d borders instead of 3 or 4", - num, j); + tag, j); return false; } List_T *tmp = List_Create(2, 2, sizeof(int)); @@ -400,7 +414,7 @@ bool GEO_Internals::addSurfaceFilling(int num, const std::vector<int> &wireTags, int t = wireTags[i]; List_Add(tmp, &t); } - Surface *s = CreateSurface(num, type); + Surface *s = CreateSurface(tag, type); SetSurfaceGeneratrices(s, tmp); List_Delete(tmp); EndSurface(s); @@ -415,15 +429,16 @@ bool GEO_Internals::addSurfaceFilling(int num, const std::vector<int> &wireTags, return true; } -bool GEO_Internals::addCompoundSurface(int num, const std::vector<int> &faceTags, +bool GEO_Internals::addCompoundSurface(int &tag, const std::vector<int> &faceTags, std::vector<int> edgeTags[4]) { - if(FindSurface(num)){ - Msg::Error("GEO face with tag %d already exists", num); + if(tag >= 0 && FindSurface(tag)){ + Msg::Error("GEO face with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(2) + 1; - Surface *s = CreateSurface(num, MSH_SURF_COMPOUND); + Surface *s = CreateSurface(tag, MSH_SURF_COMPOUND); s->compound = faceTags; if(edgeTags){ for(int i = 0; i < 4; i++) @@ -435,38 +450,40 @@ bool GEO_Internals::addCompoundSurface(int num, const std::vector<int> &faceTags return true; } -bool GEO_Internals::addSurfaceLoop(int num, const std::vector<int> &faceTags) +bool GEO_Internals::addSurfaceLoop(int &tag, const std::vector<int> &faceTags) { - if(FindSurfaceLoop(num)){ - Msg::Error("GEO surface loop with tag %d already exists", num); + if(tag >= 0 && FindSurfaceLoop(tag)){ + Msg::Error("GEO surface loop with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(-2) + 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < faceTags.size(); i++){ int t = faceTags[i]; List_Add(tmp, &t); } - SurfaceLoop *l = CreateSurfaceLoop(num, tmp); + SurfaceLoop *l = CreateSurfaceLoop(tag, tmp); Tree_Add(SurfaceLoops, &l); List_Delete(tmp); _changed = true; return true; } -bool GEO_Internals::addVolume(int num, const std::vector<int> &shellTags) +bool GEO_Internals::addVolume(int &tag, const std::vector<int> &shellTags) { - if(FindVolume(num)){ - Msg::Error("GEO region with tag %d already exists", num); + if(tag >= 0 && FindVolume(tag)){ + Msg::Error("GEO region with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(3) + 1; List_T *tmp = List_Create(2, 2, sizeof(int)); for(unsigned int i = 0; i < shellTags.size(); i++){ int t = shellTags[i]; List_Add(tmp, &t); } - Volume *v = CreateVolume(num, MSH_VOLUME); + Volume *v = CreateVolume(tag, MSH_VOLUME); SetVolumeSurfaces(v, tmp); List_Delete(tmp); Tree_Add(Volumes, &v); @@ -474,14 +491,15 @@ bool GEO_Internals::addVolume(int num, const std::vector<int> &shellTags) return true; } -bool GEO_Internals::addCompoundVolume(int num, const std::vector<int> ®ionTags) +bool GEO_Internals::addCompoundVolume(int &tag, const std::vector<int> ®ionTags) { - if(FindVolume(num)){ - Msg::Error("GEO region with tag %d already exists", num); + if(tag >= 0 && FindVolume(tag)){ + Msg::Error("GEO region with tag %d already exists", tag); return false; } + if(tag < 0) tag = getMaxTag(3) + 1; - Volume *v = CreateVolume(num, MSH_VOLUME_COMPOUND); + Volume *v = CreateVolume(tag, MSH_VOLUME_COMPOUND); v->compound = regionTags; Tree_Add(Volumes, &v); _changed = true; @@ -753,7 +771,7 @@ void GEO_Internals::resetPhysicalGroups() _changed = true; } -bool GEO_Internals::modifyPhysicalGroup(int dim, int num, int op, +bool GEO_Internals::modifyPhysicalGroup(int dim, int tag, int op, const std::vector<int> &tags) { int type; @@ -766,13 +784,13 @@ bool GEO_Internals::modifyPhysicalGroup(int dim, int num, int op, default: return false; } - PhysicalGroup *p = FindPhysicalGroup(num, type); + PhysicalGroup *p = FindPhysicalGroup(tag, type); if(p && op == 0){ - Msg::Error("Physical %s %d already exists", str.c_str(), num); + Msg::Error("Physical %s %d already exists", str.c_str(), tag); return false; } else if(!p && op > 0){ - Msg::Error("Physical %s %d does not exist", str.c_str(), num); + Msg::Error("Physical %s %d does not exist", str.c_str(), tag); return false; } else if(op == 0){ @@ -781,7 +799,7 @@ bool GEO_Internals::modifyPhysicalGroup(int dim, int num, int op, int t = tags[i]; List_Add(tmp, &t); } - p = CreatePhysicalGroup(num, type, tmp); + p = CreatePhysicalGroup(tag, type, tmp); List_Delete(tmp); List_Add(PhysicalGroups, &p); } @@ -798,15 +816,15 @@ bool GEO_Internals::modifyPhysicalGroup(int dim, int num, int op, } if(!List_Nbr(p->Entities)){ switch(dim){ - case 0: DeletePhysicalPoint(num); break; - case 1: DeletePhysicalLine(num); break; - case 2: DeletePhysicalSurface(num); break; - case 3: DeletePhysicalVolume(num); break; + case 0: DeletePhysicalPoint(tag); break; + case 1: DeletePhysicalLine(tag); break; + case 2: DeletePhysicalSurface(tag); break; + case 3: DeletePhysicalVolume(tag); break; } } } else{ - Msg::Error("Unsupported operation on physical %s %d", str.c_str(), num); + Msg::Error("Unsupported operation on physical %s %d", str.c_str(), tag); return false; } _changed = true; @@ -1364,7 +1382,7 @@ bool GEO_Internals::getVertex(int tag, double &x, double &y, double &z) return false; } -gmshSurface *GEO_Internals::newGeometrySphere(int num, int centerTag, int pointTag) +gmshSurface *GEO_Internals::newGeometrySphere(int tag, int centerTag, int pointTag) { Vertex *v1 = FindPoint(centerTag); if(!v1){ @@ -1377,13 +1395,13 @@ gmshSurface *GEO_Internals::newGeometrySphere(int num, int centerTag, int pointT return 0; } return gmshSphere::NewSphere - (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z, + (tag, v1->Pos.X, v1->Pos.Y, v1->Pos.Z, sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) + (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) + (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z))); } -gmshSurface *GEO_Internals::newGeometryPolarSphere(int num, int centerTag, int pointTag) +gmshSurface *GEO_Internals::newGeometryPolarSphere(int tag, int centerTag, int pointTag) { Vertex *v1 = FindPoint(centerTag); if(!v1){ @@ -1396,7 +1414,7 @@ gmshSurface *GEO_Internals::newGeometryPolarSphere(int num, int centerTag, int p return 0; } return gmshPolarSphere::NewPolarSphere - (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z, + (tag, v1->Pos.X, v1->Pos.Y, v1->Pos.Z, sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) + (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) + (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z))); @@ -1657,7 +1675,7 @@ int GModel::exportDiscreteGEOInternals() } // TODO: create Volumes from discreteRegions ; meanwhile, keep track of - // maximum volume num so that we don't break later operations: + // maximum volume tag so that we don't break later operations: _geo_internals->setMaxTag(3, maxv); Msg::Debug("Geo internal model has:"); diff --git a/Geo/GModelIO_GEO.h b/Geo/GModelIO_GEO.h index ba4b76caf1982c60cb7d7a0fdef574192de723b3..aaae95e20e7b9050fe1709450e5141956b19f8d7 100644 --- a/Geo/GModelIO_GEO.h +++ b/Geo/GModelIO_GEO.h @@ -48,31 +48,31 @@ class GEO_Internals{ void setMaxTag(int dim, int val); int getMaxTag(int dim) const; - // add shapes - bool addVertex(int num, double x, double y, double z, double lc); - bool addVertex(int num, double x, double y, gmshSurface *s, double lc); - bool addLine(int num, int startTag, int endTag); - bool addLine(int num, const std::vector<int> &vertexTags); - bool addCircleArc(int num, int startTag, int centerTag, int EndTag, + // add shapes (if tag is < 0, a new tag is automatically created and returned) + bool addVertex(int &tag, double x, double y, double z, double lc); + bool addVertex(int &tag, double x, double y, gmshSurface *s, double lc); + bool addLine(int &tag, int startTag, int endTag); + bool addLine(int &tag, const std::vector<int> &vertexTags); + bool addCircleArc(int &tag, int startTag, int centerTag, int EndTag, double nx=0., double ny=0., double nz=0.); - bool addEllipseArc(int num, int startTag, int centerTag, int majorTag, + bool addEllipseArc(int &tag, int startTag, int centerTag, int majorTag, int endTag, double nx=0., double ny=0., double nz=0.); - bool addSpline(int num, const std::vector<int> &vertexTags); - bool addBSpline(int num, const std::vector<int> &vertexTags); - bool addBezier(int num, const std::vector<int> &vertexTags); - bool addNurbs(int num, const std::vector<int> &vertexTags, + bool addSpline(int &tag, const std::vector<int> &vertexTags); + bool addBSpline(int &tag, const std::vector<int> &vertexTags); + bool addBezier(int &tag, const std::vector<int> &vertexTags); + bool addNurbs(int &tag, const std::vector<int> &vertexTags, const std::vector<double> &knots); - bool addCompoundLine(int num, const std::vector<int> &edgeTags); - bool addLineLoop(int num, const std::vector<int> &edgeTags); - bool addPlaneSurface(int num, const std::vector<int> &wireTags); - bool addDiscreteSurface(int num); - bool addSurfaceFilling(int num, const std::vector<int> &wireTags, + bool addCompoundLine(int &tag, const std::vector<int> &edgeTags); + bool addLineLoop(int &tag, const std::vector<int> &edgeTags); + bool addPlaneSurface(int &tag, const std::vector<int> &wireTags); + bool addDiscreteSurface(int &tag); + bool addSurfaceFilling(int &tag, const std::vector<int> &wireTags, int sphereCenterTag=-1); - bool addSurfaceLoop(int num, const std::vector<int> &faceTags); - bool addCompoundSurface(int num, const std::vector<int> &faceTags, + bool addSurfaceLoop(int &tag, const std::vector<int> &faceTags); + bool addCompoundSurface(int &tag, const std::vector<int> &faceTags, std::vector<int> edgeTags[4]=0); - bool addVolume(int num, const std::vector<int> &shellTags); - bool addCompoundVolume(int num, const std::vector<int> ®ionTags); + bool addVolume(int &tag, const std::vector<int> &shellTags); + bool addCompoundVolume(int &tag, const std::vector<int> ®ionTags); // extrude and revolve bool extrude(const std::vector<std::pair<int, int> > &inDimTags, @@ -120,7 +120,7 @@ class GEO_Internals{ // manipulate physical groups void resetPhysicalGroups(); - bool modifyPhysicalGroup(int dim, int num, int op, const std::vector<int> &tags); + bool modifyPhysicalGroup(int dim, int tag, int op, const std::vector<int> &tags); int getMaxPhysicalTag() const { return _maxPhysicalNum; } void setMaxPhysicalTag(int val) { _maxPhysicalNum = val; } @@ -148,8 +148,8 @@ class GEO_Internals{ bool getVertex(int tag, double &x, double &y, double &z); // create coordinate systems - gmshSurface *newGeometrySphere(int num, int centerTag, int pointTag); - gmshSurface *newGeometryPolarSphere(int num, int centerTag, int pointTag); + gmshSurface *newGeometrySphere(int tag, int centerTag, int pointTag); + gmshSurface *newGeometryPolarSphere(int tag, int centerTag, int pointTag); }; #endif diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp index 4b8bdd2739003c71f0e472b7f0618c9ad7cefe2f..3b158a0d2509d39bf5a072ec9a11b6a133dab985 100644 --- a/Geo/GModelIO_OCC.cpp +++ b/Geo/GModelIO_OCC.cpp @@ -19,10 +19,12 @@ #if defined(HAVE_OCC) +#include <Bnd_Box.hxx> #include <BRepAlgoAPI_Common.hxx> #include <BRepAlgoAPI_Cut.hxx> #include <BRepAlgoAPI_Fuse.hxx> #include <BRepAlgoAPI_Section.hxx> +#include <BRepBndLib.hxx> #include <BRepBuilderAPI_Copy.hxx> #include <BRepBuilderAPI_MakeEdge.hxx> #include <BRepBuilderAPI_MakeFace.hxx> @@ -37,6 +39,7 @@ #include <BRepFilletAPI_MakeFillet.hxx> #include <BRepGProp.hxx> #include <BRepLib.hxx> +#include <BRepMesh_FastDiscret.hxx> #include <BRepOffsetAPI_MakeFilling.hxx> #include <BRepOffsetAPI_MakePipe.hxx> #include <BRepOffsetAPI_MakeThickSolid.hxx> @@ -59,9 +62,12 @@ #include <Geom_BezierCurve.hxx> #include <Geom_Circle.hxx> #include <Geom_Ellipse.hxx> +#include <Geom_Surface.hxx> #include <Geom_TrimmedCurve.hxx> #include <IGESControl_Reader.hxx> #include <IGESControl_Writer.hxx> +#include <Poly_Triangulation.hxx> +#include <Poly_Triangle.hxx> #include <STEPControl_Reader.hxx> #include <STEPControl_Writer.hxx> #include <ShapeBuild_ReShape.hxx> @@ -70,6 +76,7 @@ #include <ShapeFix_Wireframe.hxx> #include <Standard_Version.hxx> #include <TColgp_Array1OfPnt.hxx> +#include <TColgp_Array1OfPnt2d.hxx> #include <TopExp.hxx> #include <TopExp_Explorer.hxx> #include <TopTools_DataMapIteratorOfDataMapOfIntegerShape.hxx> @@ -80,6 +87,10 @@ #include <gce_MakeElips.hxx> #include <gce_MakePln.hxx> +#if OCC_VERSION_HEX < 0x060900 +#error "Gmsh requires OpenCASCADE >= 6.9" +#endif + OCC_Internals::OCC_Internals() { for(int i = 0; i < 6; i++) _maxTag[i] = 0; @@ -132,23 +143,26 @@ void OCC_Internals::bind(TopoDS_Vertex vertex, int tag, bool recursive) { if(_vertexTag.IsBound(vertex) && _vertexTag.Find(vertex) != tag){ Msg::Debug("OpenCASCADE vertex %d is already bound to another tag", tag); - return; } - _vertexTag.Bind(vertex, tag); - _tagVertex.Bind(tag, vertex); - setMaxTag(0, tag); - _changed = true; + else{ + _vertexTag.Bind(vertex, tag); + _tagVertex.Bind(tag, vertex); + setMaxTag(0, tag); + _changed = true; + } } void OCC_Internals::bind(TopoDS_Edge edge, int tag, bool recursive) { if(_edgeTag.IsBound(edge) && _edgeTag.Find(edge) != tag){ Msg::Debug("OpenCASCADE edge %d is already bound to another tag", tag); - return; } - _edgeTag.Bind(edge, tag); - _tagEdge.Bind(tag, edge); - setMaxTag(1, tag); + else{ + _edgeTag.Bind(edge, tag); + _tagEdge.Bind(tag, edge); + setMaxTag(1, tag); + _changed = true; + } if(recursive){ TopExp_Explorer exp0; for(exp0.Init(edge, TopAbs_VERTEX); exp0.More(); exp0.Next()){ @@ -159,19 +173,19 @@ void OCC_Internals::bind(TopoDS_Edge edge, int tag, bool recursive) } } } - - _changed = true; } void OCC_Internals::bind(TopoDS_Wire wire, int tag, bool recursive) { if(_wireTag.IsBound(wire) && _wireTag.Find(wire) != tag){ Msg::Debug("OpenCASCADE wire %d is already bound to anthor tag", tag); - return; } - _wireTag.Bind(wire, tag); - _tagWire.Bind(tag, wire); - setMaxTag(-1, tag); + else{ + _wireTag.Bind(wire, tag); + _tagWire.Bind(tag, wire); + setMaxTag(-1, tag); + _changed = true; + } if(recursive){ TopExp_Explorer exp0; for(exp0.Init(wire, TopAbs_EDGE); exp0.More(); exp0.Next()){ @@ -182,18 +196,19 @@ void OCC_Internals::bind(TopoDS_Wire wire, int tag, bool recursive) } } } - _changed = true; } void OCC_Internals::bind(TopoDS_Face face, int tag, bool recursive) { if(_faceTag.IsBound(face) && _faceTag.Find(face) != tag){ Msg::Debug("OpenCASCADE face %d is already bound to another tag", tag); - return; } - _faceTag.Bind(face, tag); - _tagFace.Bind(tag, face); - setMaxTag(2, tag); + else{ + _faceTag.Bind(face, tag); + _tagFace.Bind(tag, face); + setMaxTag(2, tag); + _changed = true; + } if(recursive){ TopExp_Explorer exp0; for(exp0.Init(face, TopAbs_WIRE); exp0.More(); exp0.Next()){ @@ -211,18 +226,19 @@ void OCC_Internals::bind(TopoDS_Face face, int tag, bool recursive) } } } - _changed = true; } void OCC_Internals::bind(TopoDS_Shell shell, int tag, bool recursive) { if(_shellTag.IsBound(shell) && _shellTag.Find(shell) != tag){ Msg::Debug("OpenCASCADE shell %d is already bound to another tag", tag); - return; } - _shellTag.Bind(shell, tag); - _tagShell.Bind(tag, shell); - setMaxTag(-2, tag); + else{ + _shellTag.Bind(shell, tag); + _tagShell.Bind(tag, shell); + setMaxTag(-2, tag); + _changed = true; + } if(recursive){ TopExp_Explorer exp0; for(exp0.Init(shell, TopAbs_FACE); exp0.More(); exp0.Next()){ @@ -233,18 +249,19 @@ void OCC_Internals::bind(TopoDS_Shell shell, int tag, bool recursive) } } } - _changed = true; } void OCC_Internals::bind(TopoDS_Solid solid, int tag, bool recursive) { if(_solidTag.IsBound(solid) && _solidTag.Find(solid) != tag){ Msg::Debug("OpenCASCADE solid %d is already bound to another tag", tag); - return; } - _solidTag.Bind(solid, tag); - _tagSolid.Bind(tag, solid); - setMaxTag(3, tag); + else{ + _solidTag.Bind(solid, tag); + _tagSolid.Bind(tag, solid); + setMaxTag(3, tag); + _changed = true; + } if(recursive){ TopExp_Explorer exp0; for(exp0.Init(solid, TopAbs_SHELL); exp0.More(); exp0.Next()){ @@ -262,7 +279,6 @@ void OCC_Internals::bind(TopoDS_Solid solid, int tag, bool recursive) } } } - _changed = true; } void OCC_Internals::bind(TopoDS_Shape shape, int dim, int tag, bool recursive) @@ -290,6 +306,7 @@ void OCC_Internals::unbind(TopoDS_Vertex vertex, int tag, bool recursive) } _vertexTag.UnBind(vertex); _tagVertex.UnBind(tag); + _toRemove.insert(std::pair<int, int>(0, tag)); _recomputeMaxTag(0); _changed = true; } @@ -306,6 +323,7 @@ void OCC_Internals::unbind(TopoDS_Edge edge, int tag, bool recursive) } _edgeTag.UnBind(edge); _tagEdge.UnBind(tag); + _toRemove.insert(std::pair<int, int>(1, tag)); _recomputeMaxTag(1); if(recursive){ TopExp_Explorer exp0; @@ -332,6 +350,7 @@ void OCC_Internals::unbind(TopoDS_Wire wire, int tag, bool recursive) } _wireTag.UnBind(wire); _tagWire.UnBind(tag); + _toRemove.insert(std::pair<int, int>(-1, tag)); _recomputeMaxTag(-1); if(recursive){ TopExp_Explorer exp0; @@ -358,6 +377,7 @@ void OCC_Internals::unbind(TopoDS_Face face, int tag, bool recursive) } _faceTag.UnBind(face); _tagFace.UnBind(tag); + _toRemove.insert(std::pair<int, int>(2, tag)); _recomputeMaxTag(2); if(recursive){ TopExp_Explorer exp0; @@ -391,6 +411,7 @@ void OCC_Internals::unbind(TopoDS_Shell shell, int tag, bool recursive) } _shellTag.UnBind(shell); _tagShell.UnBind(tag); + _toRemove.insert(std::pair<int, int>(-2, tag)); _recomputeMaxTag(-2); if(recursive){ TopExp_Explorer exp0; @@ -409,6 +430,7 @@ void OCC_Internals::unbind(TopoDS_Solid solid, int tag, bool recursive) { _solidTag.UnBind(solid); _tagSolid.UnBind(tag); + _toRemove.insert(std::pair<int, int>(3, tag)); _recomputeMaxTag(3); if(recursive){ TopExp_Explorer exp0; @@ -443,12 +465,13 @@ void OCC_Internals::unbind(TopoDS_Shape shape, int dim, int tag, bool recursive) } } -void OCC_Internals::bind(TopoDS_Shape shape, int tag, - std::vector<std::pair<int, int> > &outDimTags, - bool highestDimOnly, bool recursive) +void OCC_Internals::_multiBind(TopoDS_Shape shape, int tag, + std::vector<std::pair<int, int> > &outDimTags, + bool returnHighestDimOnly, bool recursive, + bool returnNewOnly) { TopExp_Explorer exp0; - bool first = true; + int count = 0; for(exp0.Init(shape, TopAbs_SOLID); exp0.More(); exp0.Next()){ TopoDS_Solid solid = TopoDS::Solid(exp0.Current()); bool exists = false; @@ -461,12 +484,17 @@ void OCC_Internals::bind(TopoDS_Shape shape, int tag, else t = getMaxTag(3) + 1; } - else if(first){ first = false; } - else{ Msg::Error("Cannot bind multiple regions to single tag %d", t); return; } - if(!exists) bind(solid, t, recursive); - outDimTags.push_back(std::pair<int, int>(3, t)); + else if(count){ + Msg::Error("Cannot bind multiple regions to single tag %d", t); + return; + } + if(!exists) + bind(solid, t, recursive); + if(!exists || !returnNewOnly) + outDimTags.push_back(std::pair<int, int>(3, t)); + count++; } - if(highestDimOnly && outDimTags.size()) return; + if(returnHighestDimOnly && count) return; for(exp0.Init(shape, TopAbs_FACE); exp0.More(); exp0.Next()){ TopoDS_Face face = TopoDS::Face(exp0.Current()); bool exists = false; @@ -479,12 +507,17 @@ void OCC_Internals::bind(TopoDS_Shape shape, int tag, else t = getMaxTag(2) + 1; } - else if(first){ first = false; } - else{ Msg::Error("Cannot bind multiple faces to single tag %d", t); return; } - if(!exists) bind(face, t, recursive); - outDimTags.push_back(std::pair<int, int>(2, t)); + else if(count){ + Msg::Error("Cannot bind multiple faces to single tag %d", t); + return; + } + if(!exists) + bind(face, t, recursive); + if(!exists || !returnNewOnly) + outDimTags.push_back(std::pair<int, int>(2, t)); + count++; } - if(highestDimOnly && outDimTags.size()) return; + if(returnHighestDimOnly && count) return; for(exp0.Init(shape, TopAbs_EDGE); exp0.More(); exp0.Next()){ TopoDS_Edge edge = TopoDS::Edge(exp0.Current()); bool exists = false; @@ -497,12 +530,17 @@ void OCC_Internals::bind(TopoDS_Shape shape, int tag, else t = getMaxTag(1) + 1; } - else if(first){ first = false; } - else{ Msg::Error("Cannot bind multiple edges to single tag %d", t); return; } - if(!exists) bind(edge, t, recursive); - outDimTags.push_back(std::pair<int, int>(1, t)); + else if(count){ + Msg::Error("Cannot bind multiple edges to single tag %d", t); + return; + } + if(!exists) + bind(edge, t, recursive); + if(!exists || !returnNewOnly) + outDimTags.push_back(std::pair<int, int>(1, t)); + count++; } - if(highestDimOnly && outDimTags.size()) return; + if(returnHighestDimOnly && count) return; for(exp0.Init(shape, TopAbs_VERTEX); exp0.More(); exp0.Next()){ TopoDS_Vertex vertex = TopoDS::Vertex(exp0.Current()); bool exists = false; @@ -514,14 +552,19 @@ void OCC_Internals::bind(TopoDS_Shape shape, int tag, } t = getMaxTag(0) + 1; } - else if(first){ first = false; } - else{ Msg::Error("Cannot bind multiple vertices to single tag %d", t); return; } - if(!exists) bind(vertex, t, recursive); - outDimTags.push_back(std::pair<int, int>(0, t)); + else if(count){ + Msg::Error("Cannot bind multiple vertices to single tag %d", t); + return; + } + if(!exists) + bind(vertex, t, recursive); + if(!exists || !returnNewOnly) + outDimTags.push_back(std::pair<int, int>(0, t)); + count++; } } -bool OCC_Internals::isBound(int dim, int tag) +bool OCC_Internals::_isBound(int dim, int tag) { switch(dim){ case 0 : return _tagVertex.IsBound(tag); @@ -534,7 +577,20 @@ bool OCC_Internals::isBound(int dim, int tag) } } -TopoDS_Shape OCC_Internals::find(int dim, int tag) +bool OCC_Internals::_isBound(int dim, TopoDS_Shape shape) +{ + switch(dim){ + case 0 : return _vertexTag.IsBound(shape); + case 1 : return _edgeTag.IsBound(shape); + case 2 : return _faceTag.IsBound(shape); + case 3 : return _solidTag.IsBound(shape); + case -1 : return _wireTag.IsBound(shape); + case -2 : return _shellTag.IsBound(shape); + default: return false; + } +} + +TopoDS_Shape OCC_Internals::_find(int dim, int tag) { switch(dim){ case 0: return _tagVertex.Find(tag); @@ -547,10 +603,23 @@ TopoDS_Shape OCC_Internals::find(int dim, int tag) } } -bool OCC_Internals::addVertex(int tag, double x, double y, double z, +int OCC_Internals::_find(int dim, TopoDS_Shape shape) +{ + switch(dim){ + case 0 : return _vertexTag.Find(shape); + case 1 : return _edgeTag.Find(shape); + case 2 : return _faceTag.Find(shape); + case 3 : return _solidTag.Find(shape); + case -1 : return _wireTag.Find(shape); + case -2 : return _shellTag.Find(shape); + default : return -1; + } +} + +bool OCC_Internals::addVertex(int &tag, double x, double y, double z, double meshSize) { - if(tag > 0 && _tagVertex.IsBound(tag)){ + if(tag >= 0 && _tagVertex.IsBound(tag)){ Msg::Error("OpenCASCADE vertex with tag %d already exists", tag); return false; } @@ -571,14 +640,14 @@ bool OCC_Internals::addVertex(int tag, double x, double y, double z, } if(meshSize > 0 && meshSize < MAX_LC) _meshAttr.Bind(result, meshAttr(meshSize)); - if(tag <= 0) tag = getMaxTag(0) + 1; + if(tag < 0) tag = getMaxTag(0) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addLine(int tag, int startTag, int endTag) +bool OCC_Internals::addLine(int &tag, int startTag, int endTag) { - if(tag > 0 && _tagEdge.IsBound(tag)){ + if(tag >= 0 && _tagEdge.IsBound(tag)){ Msg::Error("OpenCASCADE edge with tag %d already exists", tag); return false; } @@ -607,12 +676,12 @@ bool OCC_Internals::addLine(int tag, int startTag, int endTag) Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(1) + 1; + if(tag < 0) tag = getMaxTag(1) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addLine(int tag, const std::vector<int> &vertexTags) +bool OCC_Internals::addLine(int &tag, const std::vector<int> &vertexTags) { if(vertexTags.size() == 2) return addLine(tag, vertexTags[0], vertexTags[1]); @@ -622,10 +691,10 @@ bool OCC_Internals::addLine(int tag, const std::vector<int> &vertexTags) return false; } -bool OCC_Internals::_addArc(int tag, int startTag, int centerTag, int endTag, +bool OCC_Internals::_addArc(int &tag, int startTag, int centerTag, int endTag, int mode) { - if(tag > 0 && _tagEdge.IsBound(tag)){ + if(tag >= 0 && _tagEdge.IsBound(tag)){ Msg::Error("OpenCASCADE edge with tag %d already exists", tag); return false; } @@ -688,25 +757,25 @@ bool OCC_Internals::_addArc(int tag, int startTag, int centerTag, int endTag, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(1) + 1; + if(tag < 0) tag = getMaxTag(1) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addCircleArc(int tag, int startTag, int centerTag, int endTag) +bool OCC_Internals::addCircleArc(int &tag, int startTag, int centerTag, int endTag) { return _addArc(tag, startTag, centerTag, endTag, 0); } -bool OCC_Internals::addEllipseArc(int tag, int startTag, int centerTag, int endTag) +bool OCC_Internals::addEllipseArc(int &tag, int startTag, int centerTag, int endTag) { return _addArc(tag, startTag, centerTag, endTag, 1); } -bool OCC_Internals::addCircle(int tag, double x, double y, double z, double r, +bool OCC_Internals::addCircle(int &tag, double x, double y, double z, double r, double angle1, double angle2) { - if(tag > 0 && _tagEdge.IsBound(tag)){ + if(tag >= 0 && _tagEdge.IsBound(tag)){ Msg::Error("OpenCASCADE edge with tag %d already exists", tag); return false; } @@ -736,18 +805,22 @@ bool OCC_Internals::addCircle(int tag, double x, double y, double z, double r, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(1) + 1; + if(tag < 0) tag = getMaxTag(1) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addEllipse(int tag, double x, double y, double z, double r1, - double r2, double angle1, double angle2) +bool OCC_Internals::addEllipse(int &tag, double x, double y, double z, double rx, + double ry, double angle1, double angle2) { - if(tag > 0 && _tagEdge.IsBound(tag)){ + if(tag >= 0 && _tagEdge.IsBound(tag)){ Msg::Error("OpenCASCADE edge with tag %d already exists", tag); return false; } + if(ry > rx){ + Msg::Error("Major radius rx should be larger than minor radius ry"); + return false; + } TopoDS_Edge result; try{ @@ -755,7 +828,7 @@ bool OCC_Internals::addEllipse(int tag, double x, double y, double z, double r1, gp_Dir x_dir(1., 0., 0.); gp_Pnt center(x, y, z); gp_Ax2 axis(center, N_dir, x_dir); - gp_Elips elips(axis, r1, r2); + gp_Elips elips(axis, rx, ry); if(angle1 == 0 && angle2 == 2 * M_PI){ result = BRepBuilderAPI_MakeEdge(elips); } @@ -774,14 +847,14 @@ bool OCC_Internals::addEllipse(int tag, double x, double y, double z, double r1, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(1) + 1; + if(tag < 0) tag = getMaxTag(1) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::_addSpline(int tag, const std::vector<int> &vertexTags, int mode) +bool OCC_Internals::_addSpline(int &tag, const std::vector<int> &vertexTags, int mode) { - if(tag > 0 && _tagEdge.IsBound(tag)){ + if(tag >= 0 && _tagEdge.IsBound(tag)){ Msg::Error("OpenCASCADE edge with tag %d already exists", tag); return false; } @@ -804,48 +877,60 @@ bool OCC_Internals::_addSpline(int tag, const std::vector<int> &vertexTags, int if(i == 0) start = vertex; if(i == vertexTags.size() - 1) end = vertex; } - if(mode == 0){ - Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(ctrlPoints); + if(mode == 0){ // BSpline through points (called "Spline" in Gmsh) + Handle(Geom_BSplineCurve) curve = GeomAPI_PointsToBSpline(ctrlPoints).Curve(); BRepBuilderAPI_MakeEdge e(curve, start, end); if(!e.IsDone()){ - Msg::Error("Could not create Bezier curve"); + Msg::Error("Could not create spline"); return false; } result = e.Edge(); } - else{ - Handle(Geom_BSplineCurve) curve = GeomAPI_PointsToBSpline(ctrlPoints).Curve(); + else if(mode == 1){ + Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(ctrlPoints); BRepBuilderAPI_MakeEdge e(curve, start, end); if(!e.IsDone()){ - Msg::Error("Could not create BSpline curve"); + Msg::Error("Could not create Bezier curve"); return false; } result = e.Edge(); } + else if(mode == 2){ + // TODO: BSpline treat periodic case, allow to set order, etc. + // Handle(Geom_BSplineCurve) curve = new Geom_BSplineCurve(ctrlPoints, ...); + // ... + Msg::Error("OpenCASCADE BSpline not implemented yet"); + return false; + } } catch(Standard_Failure &err){ Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(1) + 1; + if(tag < 0) tag = getMaxTag(1) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addBezier(int tag, const std::vector<int> &vertexTags) +bool OCC_Internals::addSpline(int &tag, const std::vector<int> &vertexTags) { return _addSpline(tag, vertexTags, 0); } -bool OCC_Internals::addBSpline(int tag, const std::vector<int> &vertexTags) +bool OCC_Internals::addBezier(int &tag, const std::vector<int> &vertexTags) { return _addSpline(tag, vertexTags, 1); } -bool OCC_Internals::addWire(int tag, const std::vector<int> &edgeTags, +bool OCC_Internals::addBSpline(int &tag, const std::vector<int> &vertexTags) +{ + return _addSpline(tag, vertexTags, 2); +} + +bool OCC_Internals::addWire(int &tag, const std::vector<int> &edgeTags, bool checkClosed) { - if(tag > 0 && _tagWire.IsBound(tag)){ + if(tag >= 0 && _tagWire.IsBound(tag)){ Msg::Error("OpenCASCADE wire or line loop with tag %d already exists", tag); return false; } @@ -871,24 +956,19 @@ bool OCC_Internals::addWire(int tag, const std::vector<int> &edgeTags, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(-1) + 1; + if(tag < 0) tag = getMaxTag(-1) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addLineLoop(int tag, const std::vector<int> &edgeTags) +bool OCC_Internals::addLineLoop(int &tag, const std::vector<int> &edgeTags) { return addWire(tag, edgeTags, true); } -bool OCC_Internals::addRectangle(int tag, double x, double y, double z, - double dx, double dy, double roundedRadius) +bool OCC_Internals::_makeRectangle(TopoDS_Face &result, double x, double y, double z, + double dx, double dy, double roundedRadius) { - if(tag > 0 && _tagFace.IsBound(tag)){ - Msg::Error("OpenCASCADE face with tag %d already exists", tag); - return false; - } - TopoDS_Face result; try{ TopoDS_Wire wire; double x1 = x, y1 = y, z1 = z, x2 = x1 + dx, y2 = y1 + dy; @@ -949,20 +1029,31 @@ bool OCC_Internals::addRectangle(int tag, double x, double y, double z, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(2) + 1; - bind(result, tag, true); return true; } -bool OCC_Internals::addDisk(int tag, double xc, double yc, double zc, - double rx, double ry) +bool OCC_Internals::addRectangle(int &tag, double x, double y, double z, + double dx, double dy, double roundedRadius) { - if(tag > 0 && _tagFace.IsBound(tag)){ + if(tag >= 0 && _tagFace.IsBound(tag)){ Msg::Error("OpenCASCADE face with tag %d already exists", tag); return false; } - TopoDS_Face result; + if(!_makeRectangle(result, x, y, z, dx, dy, roundedRadius)) + return false; + if(tag < 0) tag = getMaxTag(2) + 1; + bind(result, tag, true); + return true; +} + +bool OCC_Internals::_makeDisk(TopoDS_Face &result, double xc, double yc, double zc, + double rx, double ry) +{ + if(ry > rx){ + Msg::Error("Major radius rx should be larger than minor radius ry"); + return false; + } try{ gp_Dir N_dir(0., 0., 1.); gp_Dir x_dir(1., 0., 0.); @@ -977,16 +1068,29 @@ bool OCC_Internals::addDisk(int tag, double xc, double yc, double zc, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(2) + 1; + return true; +} + +bool OCC_Internals::addDisk(int &tag, double xc, double yc, double zc, + double rx, double ry) +{ + if(tag >= 0 && _tagFace.IsBound(tag)){ + Msg::Error("OpenCASCADE face with tag %d already exists", tag); + return false; + } + TopoDS_Face result; + if(!_makeDisk(result, xc, yc, zc, rx, ry)) + return false; + if(tag < 0) tag = getMaxTag(2) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addPlaneSurface(int tag, const std::vector<int> &wireTags) +bool OCC_Internals::addPlaneSurface(int &tag, const std::vector<int> &wireTags) { const bool autoFix = true; - if(tag > 0 && _tagFace.IsBound(tag)){ + if(tag >= 0 && _tagFace.IsBound(tag)){ Msg::Error("OpenCASCADE face with tag %d already exists", tag); return false; } @@ -1007,7 +1111,13 @@ bool OCC_Internals::addPlaneSurface(int tag, const std::vector<int> &wireTags) return false; } else if(wires.size() == 1){ - result = BRepBuilderAPI_MakeFace(wires[0]); + BRepBuilderAPI_MakeFace f(wires[0]); + f.Build(); + if(!f.IsDone()){ + Msg::Error("Could not create face"); + return false; + } + result = f.Face(); } else{ // compute mean plane @@ -1052,14 +1162,14 @@ bool OCC_Internals::addPlaneSurface(int tag, const std::vector<int> &wireTags) return false; } } - if(tag <= 0) tag = getMaxTag(2) + 1; + if(tag < 0) tag = getMaxTag(2) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addSurfaceFilling(int tag, int wireTag) +bool OCC_Internals::addSurfaceFilling(int &tag, int wireTag) { - if(tag > 0 && _tagFace.IsBound(tag)){ + if(tag >= 0 && _tagFace.IsBound(tag)){ Msg::Error("OpenCASCADE face with tag %d already exists", tag); return false; } @@ -1075,7 +1185,11 @@ bool OCC_Internals::addSurfaceFilling(int tag, int wireTag) TopoDS_Wire wire = TopoDS::Wire(_tagWire.Find(wireTag)); TopExp_Explorer exp0; for(exp0.Init(wire, TopAbs_EDGE); exp0.More(); exp0.Next()){ - f.Add(TopoDS::Edge(exp0.Current()), GeomAbs_C0); + TopoDS_Edge edge = TopoDS::Edge(exp0.Current()); + f.Add(edge, GeomAbs_C0); + // face filling will duplicate the edge + if(_edgeTag.IsBound(edge)) + unbind(edge, _edgeTag.Find(edge), true); } // TODO: add optional point constraints using // f.Add(gp_Pnt(x, y, z); @@ -1092,16 +1206,16 @@ bool OCC_Internals::addSurfaceFilling(int tag, int wireTag) return false; } - if(tag <= 0) tag = getMaxTag(2) + 1; + if(tag < 0) tag = getMaxTag(2) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addSurfaceLoop(int tag, const std::vector<int> &faceTags) +bool OCC_Internals::addSurfaceLoop(int &tag, const std::vector<int> &faceTags) { const bool autoFix = true; - if(tag > 0 && _tagShell.IsBound(tag)){ + if(tag >= 0 && _tagShell.IsBound(tag)){ Msg::Error("OpenCASCADE surface loop with tag %d already exists", tag); return false; } @@ -1148,11 +1262,11 @@ bool OCC_Internals::addSurfaceLoop(int tag, const std::vector<int> &faceTags) return true; } -bool OCC_Internals::addVolume(int tag, const std::vector<int> &shellTags) +bool OCC_Internals::addVolume(int &tag, const std::vector<int> &shellTags) { const bool autoFix = true; - if(tag > 0 && _tagSolid.IsBound(tag)){ + if(tag >= 0 && _tagSolid.IsBound(tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } @@ -1180,21 +1294,15 @@ bool OCC_Internals::addVolume(int tag, const std::vector<int> &shellTags) Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; + if(tag < 0) tag = getMaxTag(3) + 1; bind(result, tag, true); return true; } -bool OCC_Internals::addSphere(int tag, double xc, double yc, double zc, - double radius, double angle1, double angle2, - double angle3) +bool OCC_Internals::_makeSphere(TopoDS_Solid &result, double xc, double yc, double zc, + double radius, double angle1, double angle2, + double angle3) { - if(tag > 0 && _tagSolid.IsBound(tag)){ - Msg::Error("OpenCASCADE region with tag %d already exists", tag); - return false; - } - - TopoDS_Solid result; try{ gp_Pnt p(xc, yc, zc); BRepPrimAPI_MakeSphere s(p, radius, angle1, angle2, angle3); @@ -1209,20 +1317,28 @@ bool OCC_Internals::addSphere(int tag, double xc, double yc, double zc, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; - bind(result, tag, true); return true; } -bool OCC_Internals::addBlock(int tag, double x, double y, double z, - double dx, double dy, double dz) +bool OCC_Internals::addSphere(int &tag, double xc, double yc, double zc, + double radius, double angle1, double angle2, + double angle3) { - if(tag > 0 && _tagSolid.IsBound(tag)){ + if(tag >= 0 && _tagSolid.IsBound(tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } - TopoDS_Solid result; + if(!_makeSphere(result, xc, yc, zc, radius, angle1, angle2, angle3)) + return false; + if(tag < 0) tag = getMaxTag(3) + 1; + bind(result, tag, true); + return true; +} + +bool OCC_Internals::_makeBlock(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz) +{ try{ gp_Pnt P1(x, y, z); gp_Pnt P2(x + dx, y + dy, z + dz); @@ -1238,25 +1354,32 @@ bool OCC_Internals::addBlock(int tag, double x, double y, double z, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; - bind(result, tag, true); return true; } -bool OCC_Internals::addCylinder(int tag, double x, double y, double z, - double dx, double dy, double dz, double r, - double angle) +bool OCC_Internals::addBlock(int &tag, double x, double y, double z, + double dx, double dy, double dz) { - if(tag > 0 && _tagSolid.IsBound(tag)){ + if(tag >= 0 && _tagSolid.IsBound(tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } + TopoDS_Solid result; + if(!_makeBlock(result, x, y, z, dx, dy, dz)) + return false; + if(tag < 0) tag = getMaxTag(3) + 1; + bind(result, tag, true); + return true; +} + +bool OCC_Internals::_makeCylinder(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz, double r, double angle) +{ const double H = sqrt(dx * dx + dy * dy + dz * dz); if(!H){ Msg::Error("Cannot build cylinder of zero height"); return false; } - TopoDS_Solid result; try{ gp_Pnt aP(x, y, z); gp_Vec aV(dx / H, dy / H, dz / H); @@ -1273,19 +1396,28 @@ bool OCC_Internals::addCylinder(int tag, double x, double y, double z, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; - bind(result, tag, true); return true; } -bool OCC_Internals::addTorus(int tag, double x, double y, double z, - double r1, double r2, double angle) +bool OCC_Internals::addCylinder(int &tag, double x, double y, double z, + double dx, double dy, double dz, double r, + double angle) { - if(tag > 0 && _tagSolid.IsBound(tag)){ + if(tag >= 0 && _tagSolid.IsBound(tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } TopoDS_Solid result; + if(!_makeCylinder(result, x, y, z, dx, dy, dz, r, angle)) + return false; + if(tag < 0) tag = getMaxTag(3) + 1; + bind(result, tag, true); + return true; +} + +bool OCC_Internals::_makeTorus(TopoDS_Solid &result, double x, double y, double z, + double r1, double r2, double angle) +{ try{ gp_Pnt aP(x, y, z); gp_Vec aV(0, 0, 1); @@ -1302,26 +1434,33 @@ bool OCC_Internals::addTorus(int tag, double x, double y, double z, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; - bind(result, tag, true); return true; } -bool OCC_Internals::addCone(int tag, double x, double y, double z, - double dx, double dy, double dz, double r1, - double r2, double angle) +bool OCC_Internals::addTorus(int &tag, double x, double y, double z, + double r1, double r2, double angle) { - if(tag > 0 && _tagSolid.IsBound(tag)){ + if(tag >= 0 && _tagSolid.IsBound(tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } + TopoDS_Solid result; + if(!_makeTorus(result, x, y, z, r1, r2, angle)) + return false; + if(tag < 0) tag = getMaxTag(3) + 1; + bind(result, tag, true); + return true; +} +bool OCC_Internals::_makeCone(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz, double r1, double r2, + double angle) +{ const double H = sqrt(dx * dx + dy * dy + dz * dz); if(!H){ Msg::Error("Cannot build cone of zero height"); return false; } - TopoDS_Solid result; try{ gp_Pnt aP(x, y, z); gp_Vec aV(dx / H, dy / H, dz / H); @@ -1338,20 +1477,28 @@ bool OCC_Internals::addCone(int tag, double x, double y, double z, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; - bind(result, tag, true); return true; } -bool OCC_Internals::addWedge(int tag, double x, double y, double z, - double dx, double dy, double dz, double ltx) +bool OCC_Internals::addCone(int &tag, double x, double y, double z, + double dx, double dy, double dz, double r1, + double r2, double angle) { - if(tag > 0 && _tagSolid.IsBound(tag)){ + if(tag >= 0 && _tagSolid.IsBound(tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } - TopoDS_Solid result; + if(!_makeCone(result, x, y, z, dx, dy, dz, r1, r2, angle)) + return false; + if(tag < 0) tag = getMaxTag(3) + 1; + bind(result, tag, true); + return true; +} + +bool OCC_Internals::_makeWedge(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz, double ltx) +{ try{ gp_Pnt aP(x, y, z); gp_Vec aV(0, 0, 1); @@ -1368,17 +1515,30 @@ bool OCC_Internals::addWedge(int tag, double x, double y, double z, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - if(tag <= 0) tag = getMaxTag(3) + 1; + return true; +} + +bool OCC_Internals::addWedge(int &tag, double x, double y, double z, + double dx, double dy, double dz, double ltx) +{ + if(tag >= 0 && _tagSolid.IsBound(tag)){ + Msg::Error("OpenCASCADE region with tag %d already exists", tag); + return false; + } + TopoDS_Solid result; + if(!_makeWedge(result, x, y, z, dx, dy, dz, ltx)) + return false; + if(tag < 0) tag = getMaxTag(3) + 1; bind(result, tag, true); return true; } bool OCC_Internals::addThruSections(int tag, const std::vector<int> &wireTags, - std::vector<std::pair<int, int> > &outDimTags, - bool makeSolid, bool makeRuled) + bool makeSolid, bool makeRuled, + std::vector<std::pair<int, int> > &outDimTags) { int dim = makeSolid ? 3 : 2; - if(tag > 0 && isBound(dim, tag)){ + if(tag >= 0 && _isBound(dim, tag)){ Msg::Error("OpenCASCADE entity of dimension %d with tag %d already exists", dim, tag); return false; @@ -1387,7 +1547,6 @@ bool OCC_Internals::addThruSections(int tag, const std::vector<int> &wireTags, Msg::Error("ThruSections require at least 2 wires"); return false; } - TopoDS_Shape result; try{ BRepOffsetAPI_ThruSections ts(makeSolid, makeRuled); @@ -1415,27 +1574,26 @@ bool OCC_Internals::addThruSections(int tag, const std::vector<int> &wireTags, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - - bind(result, tag, outDimTags, true, true); + _multiBind(result, tag, outDimTags, true, true); return true; } bool OCC_Internals::addThickSolid(int tag, int solidTag, const std::vector<int> &excludeFaceTags, - double offset) + double offset, + std::vector<std::pair<int, int> > &outDimTags) { - if(tag > 0 && isBound(3, tag)){ + if(tag >= 0 && _isBound(3, tag)){ Msg::Error("OpenCASCADE region with tag %d already exists", tag); return false; } - - if(!isBound(3, solidTag)){ + if(!_isBound(3, solidTag)){ Msg::Error("Unknown OpenCASCADE region with tag %d", solidTag); return false; } TopoDS_Shape result; try{ - TopoDS_Shape shape = find(3, solidTag); + TopoDS_Shape shape = _find(3, solidTag); TopTools_ListOfShape exclude; for(unsigned int i = 0; i < excludeFaceTags.size(); i++){ if(!_tagFace.IsBound(excludeFaceTags[i])){ @@ -1457,19 +1615,18 @@ bool OCC_Internals::addThickSolid(int tag, int solidTag, Msg::Error("OpenCASCADE exception %s", err.GetMessageString()); return false; } - - std::vector<std::pair<int, int> > out; - bind(result, tag, out, true, true); + _multiBind(result, tag, outDimTags, true, true); return true; } -void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c, - BRepSweep_Prism *p, - BRepSweep_Revol *r, - ExtrudeParams *e, - double x, double y, double z, - double dx, double dy, double dz, - double ax, double ay, double az, double angle) +void OCC_Internals::_setExtrudedMeshAttr(const TopoDS_Compound &c, + BRepSweep_Prism *p, + BRepSweep_Revol *r, + ExtrudeParams *e, + double x, double y, double z, + double dx, double dy, double dz, + double ax, double ay, double az, + double angle) { if(!p && !r) return; @@ -1544,7 +1701,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c, } } -void OCC_Internals::_copyMeshAttr(TopoDS_Edge edge, GEdge *ge) +void OCC_Internals::_copyExtrudedMeshAttr(TopoDS_Edge edge, GEdge *ge) { if(!_meshAttr.IsBound(edge)) return; meshAttr m = _meshAttr.Find(edge); @@ -1565,7 +1722,7 @@ void OCC_Internals::_copyMeshAttr(TopoDS_Edge edge, GEdge *ge) } } -void OCC_Internals::_copyMeshAttr(TopoDS_Face face, GFace *gf) +void OCC_Internals::_copyExtrudedMeshAttr(TopoDS_Face face, GFace *gf) { if(!_meshAttr.IsBound(face)) return; meshAttr m = _meshAttr.Find(face); @@ -1586,7 +1743,7 @@ void OCC_Internals::_copyMeshAttr(TopoDS_Face face, GFace *gf) } } -void OCC_Internals::_copyMeshAttr(TopoDS_Solid solid, GRegion *gr) +void OCC_Internals::_copyExtrudedMeshAttr(TopoDS_Solid solid, GRegion *gr) { if(!_meshAttr.IsBound(solid)) return; meshAttr m = _meshAttr.Find(solid); @@ -1598,6 +1755,44 @@ void OCC_Internals::_copyMeshAttr(TopoDS_Solid solid, GRegion *gr) } } +template<class T> +static int getReturnedShapes(const TopoDS_Compound &c, T *sweep, + std::vector<TopoDS_Shape> &top, + std::vector<TopoDS_Shape> &body, + std::vector<std::vector<TopoDS_Shape> > &lateral) +{ + TopExp_Explorer exp0, exp1; + for(exp0.Init(c, TopAbs_FACE); exp0.More(); exp0.Next()){ + TopoDS_Face face = TopoDS::Face(exp0.Current()); + top.push_back(sweep->LastShape(face)); + body.push_back(sweep->Shape(face)); + lateral.push_back(std::vector<TopoDS_Shape>()); + for(exp1.Init(face, TopAbs_EDGE); exp1.More(); exp1.Next()){ + TopoDS_Edge edge = TopoDS::Edge(exp1.Current()); + lateral.back().push_back(sweep->Shape(edge)); + } + } + if(top.size()) return 3; + for(exp0.Init(c, TopAbs_EDGE); exp0.More(); exp0.Next()){ + TopoDS_Edge edge = TopoDS::Edge(exp0.Current()); + top.push_back(sweep->LastShape(edge)); + body.push_back(sweep->Shape(edge)); + lateral.push_back(std::vector<TopoDS_Shape>()); + for(exp1.Init(edge, TopAbs_VERTEX); exp1.More(); exp1.Next()){ + TopoDS_Vertex vertex = TopoDS::Vertex(exp1.Current()); + lateral.back().push_back(sweep->Shape(vertex)); + } + } + if(top.size()) return 2; + for(exp0.Init(c, TopAbs_VERTEX); exp0.More(); exp0.Next()){ + TopoDS_Vertex vertex = TopoDS::Vertex(exp0.Current()); + top.push_back(sweep->LastShape(vertex)); + body.push_back(sweep->Shape(vertex)); + } + if(top.size()) return 1; + return 0; +} + bool OCC_Internals::_extrude(int mode, const std::vector<std::pair<int, int> > &inDimTags, double x, double y, double z, @@ -1615,14 +1810,17 @@ bool OCC_Internals::_extrude(int mode, for(unsigned int i = 0; i < inDimTags.size(); i++){ int dim = inDimTags[i].first; int tag = inDimTags[i].second; - if(!isBound(dim, tag)){ + if(!_isBound(dim, tag)){ Msg::Error("Unknown OpenCASCADE entity of dimension %d with tag %d", dim, tag); return false; } - TopoDS_Shape shape = find(dim, tag); + TopoDS_Shape shape = _find(dim, tag); b.Add(c, shape); } TopoDS_Shape result; + std::vector<TopoDS_Shape> top, body; + std::vector<std::vector<TopoDS_Shape> > lateral; + int dim = -1; try{ if(mode == 0){ // extrude BRepPrimAPI_MakePrism p(c, gp_Vec(dx, dy, dz), Standard_False); @@ -1632,11 +1830,12 @@ bool OCC_Internals::_extrude(int mode, return false; } result = p.Shape(); + const BRepSweep_Prism &prism(p.Prism()); if(e){ - const BRepSweep_Prism &prism(p.Prism()); - _setMeshAttr(c, (BRepSweep_Prism*)&prism, 0, e, - 0., 0., 0., dx, dy, dz, 0., 0., 0., 0.); + _setExtrudedMeshAttr(c, (BRepSweep_Prism*)&prism, 0, e, + 0., 0., 0., dx, dy, dz, 0., 0., 0., 0.); } + dim = getReturnedShapes(c, (BRepSweep_Prism*)&prism, top, body, lateral); } else if(mode == 1){ // revolve gp_Ax1 axisOfRevolution(gp_Pnt(x, y, z), gp_Dir(ax, ay, az)); @@ -1647,11 +1846,12 @@ bool OCC_Internals::_extrude(int mode, return false; } result = r.Shape(); + const BRepSweep_Revol &revol(r.Revol()); if(e){ - const BRepSweep_Revol &revol(r.Revol()); - _setMeshAttr(c, 0, (BRepSweep_Revol*)&revol, e, - x, y, z, 0., 0., 0., ax, ay, az, angle); + _setExtrudedMeshAttr(c, 0, (BRepSweep_Revol*)&revol, e, + x, y, z, 0., 0., 0., ax, ay, az, angle); } + dim = getReturnedShapes(c, (BRepSweep_Revol*)&revol, top, body, lateral); } else if(mode == 2){ // pipe if(!_tagWire.IsBound(wireTag)){ @@ -1670,8 +1870,11 @@ bool OCC_Internals::_extrude(int mode, return false; } result = p.Shape(); + //const BRepFill_Pipe &pipe(p.Pipe()); if(e) Msg::Warning("Structured meshes not yet available with OpenCASCADE pipe"); + // TODO - need to pass the profile, too + //dim = getReturnedShapes(c, (BRepFill_Pipe*)&pipe, top, body, lateral); } } catch(Standard_Failure &err){ @@ -1679,7 +1882,26 @@ bool OCC_Internals::_extrude(int mode, return false; } - bind(result, -1, outDimTags, true, true); + _multiBind(result, -1, outDimTags, true, true); + + // return entities in the same order as the built-in kernel extrusion + if(dim >= 1 && dim <= 3 && top.size() == inDimTags.size() && + top.size() == body.size() && top.size() == lateral.size()){ + outDimTags.clear(); + for(unsigned int i = 0; i < top.size(); i++){ + if(_isBound(dim - 1, top[i])) + outDimTags.push_back(std::pair<int, int>(dim - 1, _find(dim - 1, top[i]))); + if(_isBound(dim, body[i])) + outDimTags.push_back(std::pair<int, int>(dim, _find(dim, body[i]))); + if(CTX::instance()->geom.extrudeReturnLateral){ + for(unsigned int j = 0; j < lateral[i].size(); j++){ + if(_isBound(dim - 1, lateral[i][j])) + outDimTags.push_back + (std::pair<int, int>(dim - 1, _find(dim - 1, lateral[i][j]))); + } + } + } + } return true; } @@ -1711,34 +1933,38 @@ bool OCC_Internals::addPipe(const std::vector<std::pair<int, int> > &inDimTags, bool OCC_Internals::fillet(const std::vector<int> ®ionTags, const std::vector<int> &edgeTags, double radius, - std::vector<std::pair<int, int> > &outDimTags) + std::vector<std::pair<int, int> > &outDimTags, + bool removeRegion) { + std::vector<TopoDS_Edge> edges; + for(unsigned int i = 0; i < edgeTags.size(); i++){ + if(!_tagEdge.IsBound(edgeTags[i])){ + Msg::Error("Unknown OpenCASCADE edge with tag %d", edgeTags[i]); + return false; + } + edges.push_back(TopoDS::Edge(_tagEdge.Find(edgeTags[i]))); + } + // build a single compound shape BRep_Builder b; TopoDS_Compound c; b.MakeCompound(c); for(unsigned int i = 0; i < regionTags.size(); i++){ - if(!isBound(3, regionTags[i])){ + if(!_isBound(3, regionTags[i])){ Msg::Error("Unknown OpenCASCADE region with tag %d", regionTags[i]); return false; } - TopoDS_Shape shape = find(3, regionTags[i]); + TopoDS_Shape shape = _find(3, regionTags[i]); b.Add(c, shape); + if(removeRegion) unbind(shape, 3, regionTags[i], true); // recursive } TopoDS_Shape result; try{ BRepFilletAPI_MakeFillet f(c); - for(unsigned int i = 0; i < edgeTags.size(); i++){ - if(!_tagEdge.IsBound(edgeTags[i])){ - Msg::Error("Unknown OpenCASCADE edge with tag %d", edgeTags[i]); - return false; - } - TopoDS_Edge edge = TopoDS::Edge(_tagEdge.Find(edgeTags[i])); - f.Add(edge); - } - for(int i = 1; i <= f.NbContours(); i++){ + for(unsigned int i = 0; i < edges.size(); i++) + f.Add(edges[i]); + for(int i = 1; i <= f.NbContours(); i++) f.SetRadius(radius, i, 1); - } f.Build(); if(!f.IsDone()) { Msg::Error("Could not compute fillet"); @@ -1755,110 +1981,59 @@ bool OCC_Internals::fillet(const std::vector<int> ®ionTags, Msg::Error("Fillet produces empty shape"); return false; } - bind(result, -1, outDimTags, true, true); + _multiBind(result, -1, outDimTags, true, true); return true; } -bool OCC_Internals::applyBooleanOperator - (int tag, BooleanOperator op, - const std::vector<std::pair<int, int> > &objectDimTags, - const std::vector<std::pair<int, int> > &toolDimTags, - std::vector<std::pair<int, int> > &outDimTags, - bool removeObject, bool removeTool) +bool OCC_Internals::booleanOperator(int tag, BooleanOperator op, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) { double tolerance = CTX::instance()->geom.toleranceBoolean; bool parallel = CTX::instance()->geom.occParallel; if(objectDimTags.empty()) return true; - if(tag > 0 && isBound(objectDimTags[0].first, tag)){ + if(tag >= 0 && _isBound(objectDimTags[0].first, tag)){ Msg::Error("OpenCASCADE entity with tag %d already exists", tag); return false; } - std::vector<TopoDS_Shape> objects[4], tools[4]; + TopTools_ListOfShape objectShapes, toolShapes; for(unsigned int i = 0; i < objectDimTags.size(); i++){ int dim = objectDimTags[i].first; int t = objectDimTags[i].second; - if(!isBound(dim, t)){ + if(!_isBound(dim, t)){ Msg::Error("Unknown OpenCASCADE entity of dimension %d with tag %d", dim, t); return false; } else{ - TopoDS_Shape object = find(dim, t); - objects[dim].push_back(object); - if(removeObject) unbind(object, dim, t, true); // recursive + TopoDS_Shape object = _find(dim, t); + objectShapes.Append(object); } } for(unsigned int i = 0; i < toolDimTags.size(); i++){ int dim = toolDimTags[i].first; int t = toolDimTags[i].second; - if(!isBound(dim, t)){ + if(!_isBound(dim, t)){ Msg::Error("Unknown OpenCASCADE entity of dimension %d with tag %d", dim, t); return false; } else{ - TopoDS_Shape tool = find(dim, t); - tools[dim].push_back(tool); - if(removeTool) unbind(tool, dim, t, true); // recursive + TopoDS_Shape tool = _find(dim, t); + toolShapes.Append(tool); } } TopoDS_Shape result; - -#if OCC_VERSION_HEX >= 0x060900 - // if we remove the tool or object, we should act on copies, so that syncing - // with GModel is not confused if the boolean operation does not modify some - // of the shapes that would already have been imported before - TopTools_ListOfShape objectShapes, toolShapes; - for(int dim = 0; dim < 4; dim++){ - for(unsigned int i = 0; i < objects[dim].size(); i++){ - if(removeObject || tolerance > 0.) - objectShapes.Append(BRepBuilderAPI_Copy(objects[dim][i], false).Shape()); - else - objectShapes.Append(objects[dim][i]); - } - for(unsigned int i = 0; i < tools[dim].size(); i++){ - if(removeTool || tolerance > 0.) - toolShapes.Append(BRepBuilderAPI_Copy(tools[dim][i], false).Shape()); - else - toolShapes.Append(tools[dim][i]); - } - } -#endif - + std::vector<TopTools_ListOfShape> mapModified, mapGenerated; + std::vector<bool> mapDeleted; try{ switch(op){ case OCC_Internals::Union : { -#if OCC_VERSION_HEX < 0x060900 - for(int dim = 0; dim < 4; dim++){ - if(objects[dim].empty() || tools[dim].empty()) continue; - result = objects[dim][0]; - for(int i = 1; i < objects[dim].size(); i++){ - BRepAlgoAPI_Fuse fuse(result, objects[dim][i]); - fuse.Build(); - if(!fuse.IsDone()) { - Msg::Error("Fuse operation cannot be performed"); - return false; - } - else{ - result = fuse.Shape(); - } - } - for(int i = 0; i < tools[dim].size(); i++){ - BRepAlgoAPI_Fuse fuse(result, tools[dim][i]); - fuse.Build(); - if(!fuse.IsDone()) { - Msg::Error("Fuse operation cannot be performed"); - return false; - } - else{ - result = fuse.Shape(); - } - } - } -#else BRepAlgoAPI_Fuse fuse; fuse.SetRunParallel(parallel); fuse.SetArguments(objectShapes); @@ -1871,28 +2046,22 @@ bool OCC_Internals::applyBooleanOperator return false; } result = fuse.Shape(); -#endif + TopTools_ListIteratorOfListOfShape it(objectShapes); + for(; it.More(); it.Next()){ + mapModified.push_back(fuse.Modified(it.Value())); + mapDeleted.push_back(fuse.IsDeleted(it.Value())); + mapGenerated.push_back(fuse.Generated(it.Value())); + } + TopTools_ListIteratorOfListOfShape it2(toolShapes); + for(; it2.More(); it2.Next()){ + mapModified.push_back(fuse.Modified(it2.Value())); + mapDeleted.push_back(fuse.IsDeleted(it2.Value())); + mapGenerated.push_back(fuse.Generated(it2.Value())); + } } break; case OCC_Internals::Intersection : { -#if OCC_VERSION_HEX < 0x060900 - for(int dim = 0; dim < 4; dim++){ - if(objects[dim].empty() || tools[dim].empty()) continue; - if(objects[dim].size() != 1 || tools[dim].size() != 1){ - Msg::Error("Multi-intersection requires OCC >= 6.9"); - return false; - } - else{ - BRepAlgoAPI_Common common(objects[dim][0], tools[dim][0]); - common.Build(); - if(!common.IsDone()) { - Msg::Error("Intersection operation cannot be performed"); - } - result = common.Shape(); - } - } -#else BRepAlgoAPI_Common common; common.SetRunParallel(parallel); common.SetArguments(objectShapes); @@ -1905,30 +2074,23 @@ bool OCC_Internals::applyBooleanOperator return false; } result = common.Shape(); -#endif + TopTools_ListIteratorOfListOfShape it(objectShapes); + for(; it.More(); it.Next()){ + mapModified.push_back(common.Modified(it.Value())); + mapDeleted.push_back(common.IsDeleted(it.Value())); + mapGenerated.push_back(common.Generated(it.Value())); + } + TopTools_ListIteratorOfListOfShape it2(toolShapes); + for(; it2.More(); it2.Next()){ + mapModified.push_back(common.Modified(it2.Value())); + mapDeleted.push_back(common.IsDeleted(it2.Value())); + mapGenerated.push_back(common.Generated(it2.Value())); + } } break; case OCC_Internals::Difference : - default: { -#if OCC_VERSION_HEX < 0x060900 - for(int dim = 0; dim < 4; dim++){ - if(objects[dim].empty() || tools[dim].empty()) continue; - if(objects[dim].size() != 1 || tools[dim].size() != 1){ - Msg::Error("Multi-difference requires OCC >= 6.9"); - return false; - } - else{ - BRepAlgoAPI_Cut cut(objects[dim][0], tools[dim][0]); - cut.Build(); - if(!cut.IsDone()) { - Msg::Error("Cut operation cannot be performed"); - } - result = cut.Shape(); - } - } -#else BRepAlgoAPI_Cut cut; cut.SetRunParallel(parallel); cut.SetArguments(objectShapes); @@ -1941,29 +2103,43 @@ bool OCC_Internals::applyBooleanOperator return false; } result = cut.Shape(); -#endif + TopTools_ListIteratorOfListOfShape it(objectShapes); + for(; it.More(); it.Next()){ + mapModified.push_back(cut.Modified(it.Value())); + mapDeleted.push_back(cut.IsDeleted(it.Value())); + mapGenerated.push_back(cut.Generated(it.Value())); + } + TopTools_ListIteratorOfListOfShape it2(toolShapes); + for(; it2.More(); it2.Next()){ + mapModified.push_back(cut.Modified(it2.Value())); + mapDeleted.push_back(cut.IsDeleted(it2.Value())); + mapGenerated.push_back(cut.Generated(it2.Value())); + } } break; case OCC_Internals::Fragments : + default: { -#if OCC_VERSION_HEX < 0x060900 - Msg::Error("Boolean fragments only available with OpenCASCADE >= 6.9"); - return false; -#else - BRepAlgoAPI_BuilderAlgo generalFuse; - generalFuse.SetRunParallel(parallel); + BRepAlgoAPI_BuilderAlgo fragments; + fragments.SetRunParallel(parallel); objectShapes.Append(toolShapes); - generalFuse.SetArguments(objectShapes); - if (tolerance > 0.0) - generalFuse.SetFuzzyValue(tolerance); - generalFuse.Build(); - if (!generalFuse.IsDone()){ + toolShapes.Clear(); + fragments.SetArguments(objectShapes); + if(tolerance > 0.0) + fragments.SetFuzzyValue(tolerance); + fragments.Build(); + if(!fragments.IsDone()){ Msg::Error("Boolean fragments failed"); return false; } - result = generalFuse.Shape(); -#endif + result = fragments.Shape(); + TopTools_ListIteratorOfListOfShape it(objectShapes); + for(; it.More(); it.Next()){ + mapModified.push_back(fragments.Modified(it.Value())); + mapDeleted.push_back(fragments.IsDeleted(it.Value())); + mapGenerated.push_back(fragments.Generated(it.Value())); + } } break; } @@ -1973,10 +2149,180 @@ bool OCC_Internals::applyBooleanOperator return false; } - bind(result, tag, outDimTags, true, true); + // don't try to preserve numbering if we specify the tag explicitly, or if + // there is a problem + bool bug1 = (objectDimTags.size() + toolDimTags.size() != mapModified.size()); + bool bug2 = (op == OCC_Internals::Union); // steange fuse behavior in OCC 7.1 + if(tag >= 0 || bug1 || bug2){ + if(bug1) Msg::Error("Wrong shape count in boolean operation"); + if(removeObject){ + for(unsigned int i = 0; i < objectDimTags.size(); i++){ + int d = objectDimTags[i].first; + int t = objectDimTags[i].second; + if(_isBound(d, t)) unbind(_find(d, t), d, t, true); // recursive + } + } + if(removeTool){ + for(unsigned int i = 0; i < toolDimTags.size(); i++){ + int d = toolDimTags[i].first; + int t = toolDimTags[i].second; + if(_isBound(d, t)) unbind(_find(d, t), d, t, true); // recursive + } + } + _multiBind(result, tag, outDimTags, true, true); + return true; + } + + // otherwise, try to preserve the numbering + std::vector<TopoDS_Shape> toBind; + for(unsigned int i = 0; i < objectDimTags.size(); i++){ + int dim = objectDimTags[i].first; + int tag = objectDimTags[i].second; + if(mapDeleted[i] && !mapGenerated[i].Extent()){ + // the shape has been deleted + if(removeObject && _isBound(dim, tag)){ + unbind(_find(dim, tag), dim, tag, true); + } + } + else if(mapModified[i].Extent() == 0){ + // the shape has not been modified + outDimTags.push_back(std::pair<int, int>(dim, tag)); + // FIXME: since we currently don't guarantee that the tags of the entities + // on the boundary will be preserved, we must force a re-sync of the + // shape, by unbinding (which will add it in _toRemove) and re-binding it + if(removeObject && _isBound(dim, tag)){ + TopoDS_Shape shape = _find(dim, tag); + unbind(shape, dim, tag, true); + bind(shape, dim, tag, true); + } + } + else if(mapModified[i].Extent() == 1){ + if(removeObject){ + // the shape has been replaced by a single shape, keep the same tag + if(_isBound(dim, tag)){ + unbind(_find(dim, tag), dim, tag, true); + } + bind(mapModified[i].First(), dim, tag, true); + outDimTags.push_back(std::pair<int, int>(dim, tag)); + } + else{ + toBind.push_back(mapModified[i].First()); + } + } + else{ + if(removeObject && _isBound(dim, tag)){ + unbind(_find(dim, tag), dim, tag, true); + } + TopTools_ListIteratorOfListOfShape it(mapModified[i]); + for(; it.More(); it.Next()) + toBind.push_back(it.Value()); + } + { + TopTools_ListIteratorOfListOfShape it(mapGenerated[i]); + for(; it.More(); it.Next()) + toBind.push_back(it.Value()); + } + } + + for(unsigned int i = 0; i < toolDimTags.size(); i++){ + int k = objectDimTags.size() + i; + int dim = toolDimTags[i].first; + int tag = toolDimTags[i].second; + if(mapDeleted[k] && !mapGenerated[k].Extent()){ + // the shape has been deleted + if(removeTool && _isBound(dim, tag)){ + unbind(_find(dim, tag), dim, tag, true); // recursive + } + } + else if(mapModified[k].Extent() == 0){ + // the shape has not been modified + outDimTags.push_back(std::pair<int, int>(dim, tag)); + // FIXME: since we currently don't guarantee that the tags of the entities + // on the boundary will be preserved, we must force a re-sync of the + // shape, by unbinding (which will add it in _toRemove) and re-binding it + if(removeTool && _isBound(dim, tag)){ + TopoDS_Shape shape = _find(dim, tag); + unbind(shape, dim, tag, true); + bind(shape, dim, tag, true); + } + } + else if(mapModified[k].Extent() == 1){ + if(removeTool){ + // the shape has been replaced by a single shape, keep the same tag + if(_isBound(dim, tag)){ + unbind(_find(dim, tag), dim, tag, true); // recursive + } + bind(mapModified[k].First(), dim, tag, true); // recursive + outDimTags.push_back(std::pair<int, int>(dim, tag)); + } + else{ + toBind.push_back(mapModified[k].First()); + } + } + else{ + if(removeTool && _isBound(dim, tag)){ + unbind(_find(dim, tag), dim, tag, true); // recursive + } + TopTools_ListIteratorOfListOfShape it(mapModified[k]); + for(; it.More(); it.Next()) + toBind.push_back(it.Value()); + } + { + TopTools_ListIteratorOfListOfShape it(mapGenerated[k]); + for(; it.More(); it.Next()) + toBind.push_back(it.Value()); + } + } + + for(unsigned int i = 0; i < toBind.size(); i++){ + // bind all remaining entities (and only return the new ones, as modified + // entities can appear as "Modified()" subshapes of both object and tool) + _multiBind(toBind[i], -1, outDimTags, true, true, true); + } + return true; } +bool OCC_Internals::booleanUnion(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) +{ + return booleanOperator(tag, OCC_Internals::Union, objectDimTags, toolDimTags, + outDimTags, removeObject, removeTool); +} + +bool OCC_Internals::booleanIntersection(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) +{ + return booleanOperator(tag, OCC_Internals::Intersection, objectDimTags, toolDimTags, + outDimTags, removeObject, removeTool); +} + +bool OCC_Internals::booleanDifference(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) +{ + return booleanOperator(tag, OCC_Internals::Difference, objectDimTags, toolDimTags, + outDimTags, removeObject, removeTool); +} + +bool OCC_Internals::booleanFragments(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) +{ + return booleanOperator(tag, OCC_Internals::Fragments, objectDimTags, toolDimTags, + outDimTags, removeObject, removeTool); +} + bool OCC_Internals::_transform(const std::vector<std::pair<int, int> > &inDimTags, BRepBuilderAPI_Transform *tfo, BRepBuilderAPI_GTransform *gtfo) @@ -1984,12 +2330,12 @@ bool OCC_Internals::_transform(const std::vector<std::pair<int, int> > &inDimTag for(unsigned int i = 0; i < inDimTags.size(); i++){ int dim = inDimTags[i].first; int tag = inDimTags[i].second; - if(!isBound(dim, tag)){ + if(!_isBound(dim, tag)){ Msg::Error("Unknown OpenCASCADE entity of dimension %d with tag %d", dim, tag); return false; } - TopoDS_Shape object = find(dim, tag), result; + TopoDS_Shape object = _find(dim, tag), result; if(tfo){ tfo->Perform(object, Standard_False); if(!tfo->IsDone()){ @@ -2036,10 +2382,25 @@ bool OCC_Internals::dilate(const std::vector<std::pair<int, int> > &inDimTags, double x, double y, double z, double a, double b, double c) { - gp_GTrsf t; - t.SetTranslationPart(gp_XYZ(x,y,z)); - t.SetVectorialPart(gp_Mat(a, 0, 0, 0, b, 0, 0, 0, c)); - BRepBuilderAPI_GTransform gtfo(t); + gp_GTrsf gt; + gt.SetVectorialPart(gp_Mat(a, 0, 0, 0, b, 0, 0, 0, c)); + gt.SetTranslationPart(gp_XYZ(x * (1 - a), y * (1 - b), z * (1 - c))); + BRepBuilderAPI_GTransform gtfo(gt); + return _transform(inDimTags, 0, >fo); +} + +bool OCC_Internals::symmetry(const std::vector<std::pair<int, int> > &inDimTags, + double a, double b, double c, double d) +{ + gp_GTrsf gt; + double p = (a * a + b * b + c * c); + if(!p) p = 1e-12; + double f = -2.0 / p; + gt.SetVectorialPart(gp_Mat(1 + a * a * f, a * b * f, a * c * f, + a * b * f, 1. + b * b * f, b * c * f, + a * c * f, b * c * f, 1. + c * c * f)); + gt.SetTranslationPart(gp_XYZ(a * d * f, b * d * f, c * d * f)); + BRepBuilderAPI_GTransform gtfo(gt); return _transform(inDimTags, 0, >fo); } @@ -2050,13 +2411,13 @@ bool OCC_Internals::copy(const std::vector<std::pair<int, int> > &inDimTags, for(unsigned int i = 0; i < inDimTags.size(); i++){ int dim = inDimTags[i].first; int tag = inDimTags[i].second; - if(!isBound(dim, tag)){ + if(!_isBound(dim, tag)){ Msg::Error("Unknown OpenCASCADE entity of dimension %d with tag %d", dim, tag); ret = false; continue; } - TopoDS_Shape result = BRepBuilderAPI_Copy(find(dim, tag)).Shape(); + TopoDS_Shape result = BRepBuilderAPI_Copy(_find(dim, tag)).Shape(); int newtag = getMaxTag(dim) + 1; bind(result, dim, newtag, true); outDimTags.push_back(std::pair<int, int>(dim, newtag)); @@ -2066,12 +2427,12 @@ bool OCC_Internals::copy(const std::vector<std::pair<int, int> > &inDimTags, bool OCC_Internals::remove(int dim, int tag, bool recursive) { - if(!isBound(dim, tag)){ + if(!_isBound(dim, tag)){ Msg::Error("Unknown OpenCASCADE entity of dimension %d with tag %d", dim, tag); return false; } - unbind(find(dim, tag), dim, tag, recursive); + unbind(_find(dim, tag), dim, tag, recursive); return true; } @@ -2139,14 +2500,14 @@ bool OCC_Internals::importShapes(const std::string &fileName, bool highestDimOnl CTX::instance()->geom.occFixSmallFaces, CTX::instance()->geom.occSewFaces, false, CTX::instance()->geom.occScaling); - bind(result, -1, outDimTags, highestDimOnly, true); + _multiBind(result, -1, outDimTags, highestDimOnly, true); return true; } bool OCC_Internals::importShapes(const TopoDS_Shape *shape, bool highestDimOnly, std::vector<std::pair<int, int> > &outDimTags) { - bind(*shape, -1, outDimTags, highestDimOnly, true); + _multiBind(*shape, -1, outDimTags, highestDimOnly, true); return true; } @@ -2212,50 +2573,29 @@ void OCC_Internals::setMeshSize(int dim, int tag, double size) } } +bool OCC_Internals::getVertex(int tag, double &x, double &y, double &z) +{ + if(_tagVertex.IsBound(tag)){ + gp_Pnt pnt = BRep_Tool::Pnt(TopoDS::Vertex(_tagVertex.Find(tag))); + x = pnt.X(); + y = pnt.Y(); + z = pnt.Z(); + return true; + } + return false; +} + void OCC_Internals::synchronize(GModel *model) { Msg::Debug("Syncing OCC_Internals with GModel"); - // remove all OCC entities in the model that are not bound to tags (because - // they have been deleted in OCC_Internals after being previously added to - // GModel). This can currently only happen when doing boolean operations when - // we remove the object and/or tool; all other removals are explicit and done - // both in the internal CAD data and the GModel + // make sure to remove from GModel all entities that have been deleted in + // OCC_Internals since the last synchronization std::vector<std::pair<int, int> > toRemove; - for(GModel::viter it = model->firstVertex(); it != model->lastVertex(); ++it){ - if((*it)->getNativeType() == GEntity::OpenCascadeModel){ - OCCVertex *occ = (OCCVertex*)(*it); - TopoDS_Vertex v = *(TopoDS_Vertex*)occ->getNativePtr(); - if(!_vertexTag.IsBound(v)) - toRemove.push_back(std::pair<int, int>(0, occ->tag())); - } - } - for(GModel::eiter it = model->firstEdge(); it != model->lastEdge(); ++it){ - if((*it)->getNativeType() == GEntity::OpenCascadeModel){ - OCCEdge *occ = (OCCEdge*)(*it); - TopoDS_Edge v = *(TopoDS_Edge*)occ->getNativePtr(); - if(!_edgeTag.IsBound(v)) - toRemove.push_back(std::pair<int, int>(1, occ->tag())); - } - } - for(GModel::fiter it = model->firstFace(); it != model->lastFace(); ++it){ - if((*it)->getNativeType() == GEntity::OpenCascadeModel){ - OCCFace *occ = (OCCFace*)(*it); - TopoDS_Face v = *(TopoDS_Face*)occ->getNativePtr(); - if(!_faceTag.IsBound(v)) - toRemove.push_back(std::pair<int, int>(2, occ->tag())); - } - } - for(GModel::riter it = model->firstRegion(); it != model->lastRegion(); ++it){ - if((*it)->getNativeType() == GEntity::OpenCascadeModel){ - OCCRegion *occ = (OCCRegion*)(*it); - TopoDS_Solid v = *(TopoDS_Solid*)occ->getNativePtr(); - if(!_solidTag.IsBound(v)) - toRemove.push_back(std::pair<int, int>(3, occ->tag())); - } - } + toRemove.insert(toRemove.end(), _toRemove.begin(), _toRemove.end()); Msg::Debug("Sync is removing %d model entities", toRemove.size()); model->remove(toRemove); + _toRemove.clear(); // iterate over all shapes with tags, and import them into the (sub)shape _maps _somap.Clear(); @@ -2280,7 +2620,7 @@ void OCC_Internals::synchronize(GModel *model) int rTagMax = std::max(model->getMaxElementaryNumber(3), getMaxTag(3)); for(int i = 1; i <= _vmap.Extent(); i++){ TopoDS_Vertex vertex = TopoDS::Vertex(_vmap(i)); - if(!getOCCVertexByNativePtr(model, vertex)){ + if(!getVertexForOCCShape(model, vertex)){ int tag; if(_vertexTag.IsBound(vertex)) tag = _vertexTag.Find(vertex); @@ -2299,9 +2639,9 @@ void OCC_Internals::synchronize(GModel *model) } for(int i = 1; i <= _emap.Extent(); i++){ TopoDS_Edge edge = TopoDS::Edge(_emap(i)); - if(!getOCCEdgeByNativePtr(model, edge)){ - GVertex *v1 = getOCCVertexByNativePtr(model, TopExp::FirstVertex(edge)); - GVertex *v2 = getOCCVertexByNativePtr(model, TopExp::LastVertex(edge)); + if(!getEdgeForOCCShape(model, edge)){ + GVertex *v1 = getVertexForOCCShape(model, TopExp::FirstVertex(edge)); + GVertex *v2 = getVertexForOCCShape(model, TopExp::LastVertex(edge)); int tag; if(_edgeTag.IsBound(edge)) tag = _edgeTag.Find(edge); @@ -2311,12 +2651,12 @@ void OCC_Internals::synchronize(GModel *model) } OCCEdge *occe = new OCCEdge(model, edge, tag, v1, v2); model->add(occe); - _copyMeshAttr(edge, occe); + _copyExtrudedMeshAttr(edge, occe); } } for(int i = 1; i <= _fmap.Extent(); i++){ TopoDS_Face face = TopoDS::Face(_fmap(i)); - if(!getOCCFaceByNativePtr(model, face)){ + if(!getFaceForOCCShape(model, face)){ int tag; if(_faceTag.IsBound(face)) tag = _faceTag.Find(face); @@ -2326,12 +2666,12 @@ void OCC_Internals::synchronize(GModel *model) } OCCFace *occf = new OCCFace(model, face, tag); model->add(occf); - _copyMeshAttr(face, occf); + _copyExtrudedMeshAttr(face, occf); } } for(int i = 1; i <= _somap.Extent(); i++){ TopoDS_Solid region = TopoDS::Solid(_somap(i)); - if(!getOCCRegionByNativePtr(model, region)){ + if(!getRegionForOCCShape(model, region)){ int tag; if(_solidTag.IsBound(region)) tag = _solidTag(region); @@ -2341,7 +2681,7 @@ void OCC_Internals::synchronize(GModel *model) } OCCRegion *occr = new OCCRegion(model, region, tag); model->add(occr); - _copyMeshAttr(region, occr); + _copyExtrudedMeshAttr(region, occr); } } @@ -2350,20 +2690,35 @@ void OCC_Internals::synchronize(GModel *model) Msg::Debug("%d edges", model->getNumEdges()); Msg::Debug("%d faces", model->getNumFaces()); Msg::Debug("%d regions", model->getNumRegions()); - _changed = false; } -bool OCC_Internals::getVertex(int tag, double &x, double &y, double &z) +GVertex *OCC_Internals::getVertexForOCCShape(GModel *model, TopoDS_Vertex toFind) { - if(_tagVertex.IsBound(tag)){ - gp_Pnt pnt = BRep_Tool::Pnt(TopoDS::Vertex(_tagVertex.Find(tag))); - x = pnt.X(); - y = pnt.Y(); - z = pnt.Z(); - return true; - } - return false; + if(_vertexTag.IsBound(toFind)) + return model->getVertexByTag(_vertexTag.Find(toFind)); + return 0; +} + +GEdge *OCC_Internals::getEdgeForOCCShape(GModel *model, TopoDS_Edge toFind) +{ + if(_edgeTag.IsBound(toFind)) + return model->getEdgeByTag(_edgeTag.Find(toFind)); + return 0; +} + +GFace *OCC_Internals::getFaceForOCCShape(GModel *model, TopoDS_Face toFind) +{ + if(_faceTag.IsBound(toFind)) + return model->getFaceByTag(_faceTag.Find(toFind)); + return 0; +} + +GRegion *OCC_Internals::getRegionForOCCShape(GModel *model, TopoDS_Solid toFind) +{ + if(_solidTag.IsBound(toFind)) + return model->getRegionByTag(_solidTag.Find(toFind)); + return 0; } void OCC_Internals::_addShapeToMaps(TopoDS_Shape shape) @@ -2872,35 +3227,193 @@ void OCC_Internals::_healShape(TopoDS_Shape &myshape, double tolerance, Msg::Info("-----------------------------------"); } -GVertex *OCC_Internals::getOCCVertexByNativePtr(GModel *model, TopoDS_Vertex toFind) +bool OCC_Internals::_makeFaceSTL(TopoDS_Face s, + std::vector<SPoint2> *verticesUV, + std::vector<SPoint3> *verticesXYZ, + std::vector<SVector3> *normals, + std::vector<int> &triangles) { - if(_vertexTag.IsBound(toFind)) - return model->getVertexByTag(_vertexTag.Find(toFind)); - return 0; + Bnd_Box aBox; + BRepBndLib::Add(s, aBox); + +#if (OCC_VERSION_MAJOR >= 7) + BRepMesh_FastDiscret::Parameters parameters; + parameters.Deflection = 0.1; + parameters.Angle = 0.35; + parameters.Relative = Standard_True; + BRepMesh_FastDiscret aMesher(aBox, parameters); +#else + BRepMesh_FastDiscret aMesher(0.1, 0.35, aBox, Standard_False, Standard_False, + Standard_True, Standard_False); +#endif + aMesher.Perform(s); + + TopLoc_Location loc; + Handle(Poly_Triangulation) triangulation = BRep_Tool::Triangulation(s, loc); + + if(triangulation.IsNull()) + return false; + + if(verticesUV && !triangulation->HasUVNodes()) + return false; + + int start = 0; + if(verticesUV) start = verticesUV->size(); + if(verticesXYZ) start = verticesXYZ->size(); + for(int i = 1; i <= triangulation->NbNodes(); i++){ + gp_Pnt2d p = (triangulation->UVNodes())(i); + if(verticesUV){ + verticesUV->push_back(SPoint2(p.X(), p.Y())); + } + if(verticesXYZ){ + gp_Pnt pp = (triangulation->Nodes())(i); + verticesXYZ->push_back(SPoint3(pp.X(), pp.Y(), pp.Z())); + } + if(normals){ + Handle(Geom_Surface) sur = BRep_Tool::Surface(s); + gp_Pnt pnt; + gp_Vec du, dv; + sur->D1(p.X(), p.Y(), pnt, du, dv); + SVector3 t1(du.X(), du.Y(), du.Z()); + SVector3 t2(dv.X(), dv.Y(), dv.Z()); + SVector3 n(crossprod(t1, t2)); + n.normalize(); + if(s.Orientation() == TopAbs_REVERSED) return n * (-1.); + normals->push_back(n); + } + } + for(int i = 1; i <= triangulation->NbTriangles(); i++){ + Poly_Triangle triangle = (triangulation->Triangles())(i); + int p1, p2, p3; + triangle.Get(p1, p2, p3); + triangles.push_back(start + p1 - 1); + triangles.push_back(start + p2 - 1); + triangles.push_back(start + p3 - 1); + } + return true; } -GEdge *OCC_Internals::getOCCEdgeByNativePtr(GModel *model, TopoDS_Edge toFind) +bool OCC_Internals::makeFaceSTL(TopoDS_Face s, std::vector<SPoint2> &vertices, + std::vector<int> &triangles) { - if(_edgeTag.IsBound(toFind)) - return model->getEdgeByTag(_edgeTag.Find(toFind)); - return 0; + return _makeFaceSTL(s, &vertices, 0, 0, triangles); } -GFace *OCC_Internals::getOCCFaceByNativePtr(GModel *model, TopoDS_Face toFind) +bool OCC_Internals::makeFaceSTL(TopoDS_Face s, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) { - if(_faceTag.IsBound(toFind)) - return model->getFaceByTag(_faceTag.Find(toFind)); - return 0; + return _makeFaceSTL(s, 0, &vertices, &normals, triangles); } -GRegion *OCC_Internals::getOCCRegionByNativePtr(GModel *model, TopoDS_Solid toFind) +bool OCC_Internals::makeSolidSTL(TopoDS_Solid s, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) { - if(_solidTag.IsBound(toFind)) - return model->getRegionByTag(_solidTag.Find(toFind)); - return 0; + bool ret = true; + TopExp_Explorer exp0; + for(exp0.Init(s, TopAbs_FACE); exp0.More(); exp0.Next()){ + TopoDS_Face face = TopoDS::Face(exp0.Current()); + bool tmp = _makeFaceSTL(TopoDS::Face(face.Oriented(TopAbs_FORWARD)), + 0, &vertices, &normals, triangles); + if(!tmp) ret = false; + } + return ret; } +bool OCC_Internals::makeRectangleSTL(double x, double y, double z, double dx, double dy, + double roundedRadius, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) +{ + TopoDS_Face result; + if(!_makeRectangle(result, x, y, z, dx, dy, roundedRadius)) + return false; + if(!makeFaceSTL(result, vertices, normals, triangles)) + return false; + return true; +} + +bool OCC_Internals::makeDiskSTL(double xc, double yc, double zc, double rx, double ry, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) +{ + TopoDS_Face result; + if(!_makeDisk(result, xc, yc, zc, rx, ry)) + return false; + if(!makeFaceSTL(result, vertices, normals, triangles)) + return false; + return true; +} + +bool OCC_Internals::makeSphereSTL(double xc, double yc, double zc, double radius, double angle1, + double angle2, double angle3, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) +{ + TopoDS_Solid result; + if(!_makeSphere(result, xc, yc, zc, radius, angle1, angle2, angle3)) + return false; + if(!makeSolidSTL(result, vertices, normals, triangles)) + return false; + return true; +} + +bool OCC_Internals::makeBlockSTL(double x, double y, double z, double dx, double dy, double dz, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) +{ + TopoDS_Solid result; + if(!_makeBlock(result, x, y, z, dx, dy, dz)) + return false; + if(!makeSolidSTL(result, vertices, normals, triangles)) + return false; + return true; +} +bool OCC_Internals::makeCylinderSTL(double x, double y, double z, double dx, double dy, double dz, + double r, double angle, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) +{ + TopoDS_Solid result; + if(!_makeCylinder(result, x, y, z, dx, dy, dz, r, angle)) + return false; + if(!makeSolidSTL(result, vertices, normals, triangles)) + return false; + return true; +} + +bool OCC_Internals::makeConeSTL(double x, double y, double z, double dx, double dy, double dz, + double r1, double r2, double angle, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) +{ + TopoDS_Solid result; + if(!_makeCone(result, x, y, z, dx, dy, dz, r1, r2, angle)) + return false; + if(!makeSolidSTL(result, vertices, normals, triangles)) + return false; + return true; +} + +bool OCC_Internals::makeWedgeSTL(double x, double y, double z, double dx, double dy, double dz, + double ltx, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) +{ + TopoDS_Solid result; + if(!_makeWedge(result, x, y, z, dx, dy, dz, ltx)) + return false; + if(!makeSolidSTL(result, vertices, normals, triangles)) + return false; + return true; +} + +bool OCC_Internals::makeTorusSTL(double x, double y, double z, double r1, double r2, double angle, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) +{ + TopoDS_Solid result; + if(!_makeTorus(result, x, y, z, r1, r2, angle)) + return false; + if(!makeSolidSTL(result, vertices, normals, triangles)) + return false; + return true; +} // FIXME ***************** BEGIN WILL BE REMOVED ************************ @@ -2994,37 +3507,37 @@ void OCC_Internals::buildShapeFromLists(TopoDS_Shape shape) GVertex *OCC_Internals::addVertexToModel(GModel *model, TopoDS_Vertex vertex) { - GVertex *gv = getOCCVertexByNativePtr(model, vertex); + GVertex *gv = getVertexForOCCShape(model, vertex); if(gv) return gv; _addShapeToMaps(vertex); buildShapeFromLists(vertex); buildGModel(model); - return getOCCVertexByNativePtr(model, vertex); + return getVertexForOCCShape(model, vertex); } GEdge *OCC_Internals::addEdgeToModel(GModel *model, TopoDS_Edge edge) { - GEdge *ge = getOCCEdgeByNativePtr(model, edge); + GEdge *ge = getEdgeForOCCShape(model, edge); if(ge) return ge; _addShapeToMaps(edge); buildShapeFromLists(edge); buildGModel(model); - return getOCCEdgeByNativePtr(model, edge); + return getEdgeForOCCShape(model, edge); } GFace* OCC_Internals::addFaceToModel(GModel *model, TopoDS_Face face) { - GFace *gf = getOCCFaceByNativePtr(model, face); + GFace *gf = getFaceForOCCShape(model, face); if(gf) return gf; _addShapeToMaps(face); buildShapeFromLists(face); buildGModel(model); - return getOCCFaceByNativePtr(model, face); + return getFaceForOCCShape(model, face); } GRegion* OCC_Internals::addRegionToModel(GModel *model, TopoDS_Solid region) { - GRegion *gr = getOCCRegionByNativePtr(model, region); + GRegion *gr = getRegionForOCCShape(model, region); if(gr) return gr; // FIXME THE PREVIOUS IMPLEMENTATION WAS BETTER FOR SOME USERS :-) @@ -3032,11 +3545,11 @@ GRegion* OCC_Internals::addRegionToModel(GModel *model, TopoDS_Solid region) model->destroy(); buildLists(); buildGModel(model); - return getOCCRegionByNativePtr(model, region); + return getRegionForOCCShape(model, region); // _addShapeToMaps(region); // buildShapeFromLists(region); // buildGModel(model); - // return getOCCRegionByNativePtr(model, region); + // return getRegionForOCCShape(model, region); } void OCC_Internals::buildGModel(GModel *model) @@ -3045,7 +3558,7 @@ void OCC_Internals::buildGModel(GModel *model) int numv = model->getMaxElementaryNumber(0) + 1; for(int i = 1; i <= _vmap.Extent(); i++){ TopoDS_Vertex vertex = TopoDS::Vertex(_vmap(i)); - if(!getOCCVertexByNativePtr(model, vertex)){ + if(!getVertexForOCCShape(model, vertex)){ model->add(new OCCVertex(model, numv, vertex)); numv++; } @@ -3056,9 +3569,9 @@ void OCC_Internals::buildGModel(GModel *model) for(int i = 1; i <= _emap.Extent(); i++){ int i1 = _vmap.FindIndex(TopExp::FirstVertex(TopoDS::Edge(_emap(i)))); int i2 = _vmap.FindIndex(TopExp::LastVertex(TopoDS::Edge(_emap(i)))); - if(!getOCCEdgeByNativePtr(model, TopoDS::Edge(_emap(i)))){ - GVertex *v1 = getOCCVertexByNativePtr(model, TopoDS::Vertex(_vmap(i1))); - GVertex *v2 = getOCCVertexByNativePtr(model, TopoDS::Vertex(_vmap(i2))); + if(!getEdgeForOCCShape(model, TopoDS::Edge(_emap(i)))){ + GVertex *v1 = getVertexForOCCShape(model, TopoDS::Vertex(_vmap(i1))); + GVertex *v2 = getVertexForOCCShape(model, TopoDS::Vertex(_vmap(i2))); model->add(new OCCEdge(model, TopoDS::Edge(_emap(i)), nume, v1, v2)); nume++; } @@ -3067,7 +3580,7 @@ void OCC_Internals::buildGModel(GModel *model) // building geom faces int numf = model->getMaxElementaryNumber(2) + 1; for(int i = 1; i <= _fmap.Extent(); i++){ - if(!getOCCFaceByNativePtr(model, TopoDS::Face(_fmap(i)))){ + if(!getFaceForOCCShape(model, TopoDS::Face(_fmap(i)))){ model->add(new OCCFace(model, TopoDS::Face(_fmap(i)), numf)); numf++; } @@ -3076,7 +3589,7 @@ void OCC_Internals::buildGModel(GModel *model) // building geom regions int numr = model->getMaxElementaryNumber(3) + 1; for(int i = 1; i <= _somap.Extent(); i++){ - if(!getOCCRegionByNativePtr(model, TopoDS::Solid(_somap(i)))){ + if(!getRegionForOCCShape(model, TopoDS::Solid(_somap(i)))){ model->add(new OCCRegion(model, TopoDS::Solid(_somap(i)), numr)); numr++; } @@ -3412,7 +3925,7 @@ GVertex* GModel::getVertexForOCCShape(const void *shape) { if(!_occ_internals) return 0; #if defined(HAVE_OCC) - return _occ_internals->getOCCVertexByNativePtr(this, *(TopoDS_Vertex*)shape); + return _occ_internals->getVertexForOCCShape(this, *(TopoDS_Vertex*)shape); #else return 0; #endif @@ -3422,7 +3935,7 @@ GEdge* GModel::getEdgeForOCCShape(const void *shape) { if(!_occ_internals) return 0; #if defined(HAVE_OCC) - return _occ_internals->getOCCEdgeByNativePtr(this, *(TopoDS_Edge*)shape); + return _occ_internals->getEdgeForOCCShape(this, *(TopoDS_Edge*)shape); #else return 0; #endif @@ -3432,7 +3945,7 @@ GFace* GModel::getFaceForOCCShape(const void *shape) { if(!_occ_internals) return 0; #if defined(HAVE_OCC) - return _occ_internals->getOCCFaceByNativePtr(this, *(TopoDS_Face*)shape); + return _occ_internals->getFaceForOCCShape(this, *(TopoDS_Face*)shape); #else return 0; #endif @@ -3442,7 +3955,7 @@ GRegion* GModel::getRegionForOCCShape(const void *shape) { if(!_occ_internals) return 0; #if defined(HAVE_OCC) - return _occ_internals->getOCCRegionByNativePtr(this, *(TopoDS_Solid*)shape); + return _occ_internals->getRegionForOCCShape(this, *(TopoDS_Solid*)shape); #else return 0; #endif diff --git a/Geo/GModelIO_OCC.h b/Geo/GModelIO_OCC.h index cdc425420cf6d5a86e088521035a31b2926ecbf0..bc4d82ee4061dd19a4f2de77c3066f4ecd95a4d3 100644 --- a/Geo/GModelIO_OCC.h +++ b/Geo/GModelIO_OCC.h @@ -59,6 +59,10 @@ class OCC_Internals { TopTools_DataMapOfShapeInteger _wireTag, _shellTag; TopTools_DataMapOfIntegerShape _tagWire, _tagShell; + // cache of <dim,tag> pairs corresponding to entities that will need to be + // remove from the model at the next synchronization + std::set<std::pair<int, int> > _toRemove; + // internal mesh attributes class meshAttr { public: @@ -74,6 +78,51 @@ class OCC_Internals { // iterate on all bound entities and recompute the maximum tag void _recomputeMaxTag(int dim); + // bind (potentially) mutliple entities in shape and return the tags in + // outTags. If tag > 0 and a single entity if found, use that; if + // highestDimOnly is true, only return the entities of the highest dimension + void _multiBind(TopoDS_Shape shape, int tag, + std::vector<std::pair<int, int> > &outDimTags, + bool returnHighestDimOnly, bool recursive=false, + bool returnNewOnly=false); + // is the entity of a given dimension and tag bound? + bool _isBound(int dim, int tag); + + // is the entity of a given dimension and shape bound? + bool _isBound(int dim, TopoDS_Shape shape); + + // get the entity of a given dimension and tag + TopoDS_Shape _find(int dim, int tag); + + // get the tag of a shape of a given dimension + int _find(int dim, TopoDS_Shape shape); + + // make shapes + bool _makeRectangle(TopoDS_Face &result, double x, double y, double z, + double dx, double dy, double roundedRadius=0.); + bool _makeDisk(TopoDS_Face &result, double xc, double yc, double zc, + double rx, double ry); + bool _makeSphere(TopoDS_Solid &result, double xc, double yc, double zc, + double radius, double angle1, double angle2, double angle3); + bool _makeBlock(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz); + bool _makeCylinder(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz, double r, double angle); + bool _makeCone(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz, double r1, double r2, + double angle); + bool _makeWedge(TopoDS_Solid &result, double x, double y, double z, + double dx, double dy, double dz, double ltx); + bool _makeTorus(TopoDS_Solid &result, double x, double y, double z, + double r1, double r2, double angle); + + // make STL triangulation of a face + bool _makeFaceSTL(TopoDS_Face s, + std::vector<SPoint2> *verticesUV, + std::vector<SPoint3> *verticesXYZ, + std::vector<SVector3> *normalsXYZ, + std::vector<int> &triangles); + // add a shape and all its subshapes to _vmap, _emap, ..., _somap void _addShapeToMaps(TopoDS_Shape shape); @@ -84,14 +133,13 @@ class OCC_Internals { // apply a geometrical transformation bool _transform(const std::vector<std::pair<int, int> > &inDimTags, - BRepBuilderAPI_Transform *tfo, - BRepBuilderAPI_GTransform *gtfo); + BRepBuilderAPI_Transform *tfo, BRepBuilderAPI_GTransform *gtfo); // add circle or ellipse arc - bool _addArc(int tag, int startTag, int centerTag, int endTag, int mode); + bool _addArc(int &tag, int startTag, int centerTag, int endTag, int mode); // add bezier or bspline - bool _addSpline(int tag, const std::vector<int> &vertexTags, int mode); + bool _addSpline(int &tag, const std::vector<int> &vertexTags, int mode); // apply extrusion-like operations bool _extrude(int mode, const std::vector<std::pair<int, int> > &inDimTags, @@ -100,16 +148,15 @@ class OCC_Internals { std::vector<std::pair<int, int> > &outDimTags, ExtrudeParams *e=0); - // set mesh attributes for extruded meshes - void _setMeshAttr(const TopoDS_Compound &c, BRepSweep_Prism *p, - BRepSweep_Revol *r, ExtrudeParams *e, - double x, double y, double z, - double dx, double dy, double dz, - double ax, double ay, double az, double angle); - void _copyMeshAttr(TopoDS_Edge edge, GEdge *ge); - void _copyMeshAttr(TopoDS_Face face, GFace *gf); - void _copyMeshAttr(TopoDS_Solid solid, GRegion *gr); - + // set extruded mesh attributes + void _setExtrudedMeshAttr(const TopoDS_Compound &c, BRepSweep_Prism *p, + BRepSweep_Revol *r, ExtrudeParams *e, + double x, double y, double z, + double dx, double dy, double dz, + double ax, double ay, double az, double angle); + void _copyExtrudedMeshAttr(TopoDS_Edge edge, GEdge *ge); + void _copyExtrudedMeshAttr(TopoDS_Face face, GFace *gf); + void _copyExtrudedMeshAttr(TopoDS_Solid solid, GRegion *gr); public: OCC_Internals(); @@ -119,7 +166,8 @@ class OCC_Internals { // reset all maps void reset(); - // bind and unbind OpenCASCADE shapes to tags + // bind and unbind OpenCASCADE shapes to tags (these methods will become + // private) void bind(TopoDS_Vertex vertex, int tag, bool recursive=false); void bind(TopoDS_Edge edge, int tag, bool recursive=false); void bind(TopoDS_Wire wire, int tag, bool recursive=false); @@ -135,62 +183,52 @@ class OCC_Internals { void unbind(TopoDS_Solid solid, int tag, bool recursive=false); void unbind(TopoDS_Shape shape, int dim, int tag, bool recursive=false); - // bind (potentially) mutliple entities in shape and return the tags in - // outTags. If tag > 0 and a single entity if found, use that; if - // highestDimOnly is true, only return the entities of the highest dimension - void bind(TopoDS_Shape shape, int tag, - std::vector<std::pair<int, int> > &outDimTags, - bool highestDimOnly, bool recursive=false); - - // is the entity of a given dimension and tag bound? - bool isBound(int dim, int tag); - - // get the entity of a given dimension and tag - TopoDS_Shape find(int dim, int tag); - // set/get max tag of entity for each dimension (0, 1, 2, 3), as well as // -2 for shells and -1 for wires void setMaxTag(int dim, int val); int getMaxTag(int dim) const; - // add shapes - bool addVertex(int tag, double x, double y, double z, double meshSize=MAX_LC); - bool addLine(int tag, int startTag, int endTag); - bool addLine(int tag, const std::vector<int> &vertexTags); - bool addCircleArc(int tag, int startTag, int centerTag, int endTag); - bool addCircle(int tag, double x, double y, double z, double r, double angle1, + // add shapes (if tag is < 0, a new tag is automatically created and returned) + bool addVertex(int &tag, double x, double y, double z, double meshSize=MAX_LC); + bool addLine(int &tag, int startTag, int endTag); + bool addLine(int &tag, const std::vector<int> &vertexTags); + bool addCircleArc(int &tag, int startTag, int centerTag, int endTag); + bool addCircle(int &tag, double x, double y, double z, double r, double angle1, double angle2); - bool addEllipseArc(int tag, int startTag, int centerTag, int endTag); - bool addEllipse(int tag, double x, double y, double z, double r1, double r2, + bool addEllipseArc(int &tag, int startTag, int centerTag, int endTag); + bool addEllipse(int &tag, double x, double y, double z, double r1, double r2, double angle1, double angle2); - bool addBezier(int tag, const std::vector<int> &vertexTags); - bool addBSpline(int tag, const std::vector<int> &vertexTags); - bool addWire(int tag, const std::vector<int> &edgeTags, bool checkClosed); - bool addLineLoop(int tag, const std::vector<int> &edgeTags); - bool addRectangle(int tag, double x, double y, double z, + bool addSpline(int &tag, const std::vector<int> &vertexTags); + bool addBezier(int &tag, const std::vector<int> &vertexTags); + bool addBSpline(int &tag, const std::vector<int> &vertexTags); + bool addWire(int &tag, const std::vector<int> &edgeTags, bool checkClosed); + bool addLineLoop(int &tag, const std::vector<int> &edgeTags); + bool addRectangle(int &tag, double x, double y, double z, double dx, double dy, double roundedRadius=0.); - bool addDisk(int tag, double xc, double yc, double zc, double rx, double ry); - bool addPlaneSurface(int tag, const std::vector<int> &wireTags); - bool addSurfaceFilling(int tag, int wireTag); - bool addSurfaceLoop(int tag, const std::vector<int> &faceTags); - bool addVolume(int tag, const std::vector<int> &shellTags); - bool addSphere(int tag, double xc, double yc, double zc, double radius, + bool addDisk(int &tag, double xc, double yc, double zc, double rx, double ry); + bool addPlaneSurface(int &tag, const std::vector<int> &wireTags); + bool addSurfaceFilling(int &tag, int wireTag); + bool addSurfaceLoop(int &tag, const std::vector<int> &faceTags); + bool addVolume(int &tag, const std::vector<int> &shellTags); + bool addSphere(int &tag, double xc, double yc, double zc, double radius, double angle1, double angle2, double angle3); - bool addBlock(int tag, double x, double y, double z, + bool addBlock(int &tag, double x, double y, double z, double dx, double dy, double dz); - bool addCylinder(int tag, double x, double y, double z, + bool addCylinder(int &tag, double x, double y, double z, double dx, double dy, double dz, double r, double angle); - bool addCone(int tag, double x, double y, double z, + bool addCone(int &tag, double x, double y, double z, double dx, double dy, double dz, double r1, double r2, double angle); - bool addWedge(int tag, double x, double y, double z, double dx, double dy, + bool addWedge(int &tag, double x, double y, double z, double dx, double dy, double dz, double ltx); - bool addTorus(int tag, double x, double y, double z, double r1, double r2, + bool addTorus(int &tag, double x, double y, double z, double r1, double r2, double angle); + + // thrusections and thick solids (can create multiple entities) bool addThruSections(int tag, const std::vector<int> &wireTags, - std::vector<std::pair<int, int> > &outDimTags, - bool makeSolid, bool makeRuled); + bool makeSolid, bool makeRuled, + std::vector<std::pair<int, int> > &outDimTags); bool addThickSolid(int tag, int solidTag, const std::vector<int> &excludeFaceTags, - double offset); + double offset, std::vector<std::pair<int, int> > &outDimTags); // extrude and revolve bool extrude(const std::vector<std::pair<int, int> > &inDimTags, @@ -206,14 +244,35 @@ class OCC_Internals { // fillet bool fillet(const std::vector<int> ®ionTags, const std::vector<int> &edgeTags, - double radius, std::vector<std::pair<int, int> > &ouDimTags); + double radius, std::vector<std::pair<int, int> > &outDimTags, + bool removeRegion); // apply boolean operator - bool applyBooleanOperator(int tag, BooleanOperator op, - const std::vector<std::pair<int, int> > &objectDimTags, - const std::vector<std::pair<int, int> > &toolDimTags, - std::vector<std::pair<int, int> > &outDimTags, - bool removeObject, bool removeTool); + bool booleanOperator(int tag, BooleanOperator op, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool); + bool booleanUnion(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool); + bool booleanIntersection(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool); + bool booleanDifference(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool); + bool booleanFragments(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool); // apply transformations bool translate(const std::vector<std::pair<int, int> > &inDimTags, @@ -224,6 +283,8 @@ class OCC_Internals { bool dilate(const std::vector<std::pair<int, int> > &inDimTags, double x, double y, double z, double a, double b, double c); + bool symmetry(const std::vector<std::pair<int, int> > &inDimTags, + double a, double b, double c, double d); // copy and remove bool copy(const std::vector<std::pair<int, int> > &inDimTags, @@ -251,11 +312,42 @@ class OCC_Internals { // queries bool getVertex(int tag, double &x, double &y, double &z); - - GVertex *getOCCVertexByNativePtr(GModel *model, TopoDS_Vertex toFind); - GEdge *getOCCEdgeByNativePtr(GModel *model, TopoDS_Edge toFind); - GFace *getOCCFaceByNativePtr(GModel *model, TopoDS_Face toFind); - GRegion *getOCCRegionByNativePtr(GModel *model, TopoDS_Solid toFind); + GVertex *getVertexForOCCShape(GModel *model, TopoDS_Vertex toFind); + GEdge *getEdgeForOCCShape(GModel *model, TopoDS_Edge toFind); + GFace *getFaceForOCCShape(GModel *model, TopoDS_Face toFind); + GRegion *getRegionForOCCShape(GModel *model, TopoDS_Solid toFind); + + // STL utilities + bool makeFaceSTL(TopoDS_Face s, std::vector<SPoint2> &vertices, + std::vector<int> &triangles); + bool makeFaceSTL(TopoDS_Face s, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeSolidSTL(TopoDS_Solid s, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeRectangleSTL(double x, double y, double z, double dx, double dy, + double roundedRadius, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeDiskSTL(double xc, double yc, double zc, double rx, double ry, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles); + bool makeSphereSTL(double xc, double yc, double zc, double radius, double angle1, + double angle2, double angle3, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeBlockSTL(double x, double y, double z, double dx, double dy, double dz, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles); + bool makeCylinderSTL(double x, double y, double z, double dx, double dy, double dz, + double r, double angle, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeConeSTL(double x, double y, double z, double dx, double dy, double dz, + double r1, double r2, double angle, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeWedgeSTL(double x, double y, double z, double dx, double dy, double dz, + double ltx, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles); + bool makeTorusSTL(double x, double y, double z, double r1, double r2, double angle, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles); // *** FIXME what follows will be removed *** private: @@ -304,115 +396,119 @@ public: void reset(){} void setMaxTag(int dim, int val){} int getMaxTag(int dim) const { return 0; } - bool addVertex(int tag, double x, double y, double z, double meshSize=MAX_LC) + bool addVertex(int &tag, double x, double y, double z, double meshSize=MAX_LC) { return _error("add vertex"); } - bool addLine(int tag, int startTag, int endTag) + bool addLine(int &tag, int startTag, int endTag) { return _error("add line"); } - bool addLine(int tag, const std::vector<int> &vertexTags) + bool addLine(int &tag, const std::vector<int> &vertexTags) { return _error("add line"); } - bool addCircleArc(int tag, int startTag, int centerTag, int endTag) + bool addCircleArc(int &tag, int startTag, int centerTag, int endTag) { return _error("add circle arc"); } - bool addCircle(int tag, double x, double y, double z, double r, double angle1, + bool addCircle(int &tag, double x, double y, double z, double r, double angle1, double angle2) { return _error("add circle"); } - bool addEllipseArc(int tag, int startTag, int centerTag, int endTag) + bool addEllipseArc(int &tag, int startTag, int centerTag, int endTag) { return _error("add ellipse arc"); } - bool addEllipse(int tag, double x, double y, double z, double r1, double r2, + bool addEllipse(int &tag, double x, double y, double z, double r1, double r2, double angle1, double angle2) { return _error("add ellipse"); } - bool addBezier(int tag, const std::vector<int> &vertexTags) + bool addSpline(int &tag, const std::vector<int> &vertexTags) + { + return _error("add spline"); + } + bool addBezier(int &tag, const std::vector<int> &vertexTags) { return _error("add Bezier"); } - bool addBSpline(int tag, const std::vector<int> &vertexTags) + bool addBSpline(int &tag, const std::vector<int> &vertexTags) { return _error("add BSpline"); } - bool addWire(int tag, const std::vector<int> &edgeTags, bool closed) + bool addWire(int &tag, const std::vector<int> &edgeTags, bool closed) { return _error("add wire"); } - bool addLineLoop(int tag, const std::vector<int> &edgeTags) + bool addLineLoop(int &tag, const std::vector<int> &edgeTags) { return _error("add line loop"); } - bool addRectangle(int tag, double x, double y, double z, + bool addRectangle(int &tag, double x, double y, double z, double dx, double dy, double roundedRadius=0.) { return _error("add rectangle"); } - bool addDisk(int tag, double xc, double yc, double zc, double rx, double ry) + bool addDisk(int &tag, double xc, double yc, double zc, double rx, double ry) { return _error("add disk"); } - bool addPlaneSurface(int tag, const std::vector<int> &wireTags) + bool addPlaneSurface(int &tag, const std::vector<int> &wireTags) { return _error("add plane surface"); } - bool addSurfaceFilling(int tag, int wireTag) + bool addSurfaceFilling(int &tag, int wireTag) { return _error("add surface filling"); } - bool addSurfaceLoop(int tag, const std::vector<int> &faceTags) + bool addSurfaceLoop(int &tag, const std::vector<int> &faceTags) { return _error("add surface loop"); } - bool addVolume(int tag, const std::vector<int> &shellTags) + bool addVolume(int &tag, const std::vector<int> &shellTags) { return _error("add volume"); } - bool addSphere(int tag, double xc, double yc, double zc, double radius, + bool addSphere(int &tag, double xc, double yc, double zc, double radius, double angle1, double angle2, double angle3) { return _error("add sphere"); } - bool addBlock(int tag, double x, double y, double z, + bool addBlock(int &tag, double x, double y, double z, double dx, double dy, double dz) { return _error("add block"); } - bool addCylinder(int tag, double x, double y, double z, + bool addCylinder(int &tag, double x, double y, double z, double dx, double dy, double dz, double r, double angle) { return _error("add cylinder"); } - bool addCone(int tag, double x, double y, double z, + bool addCone(int &tag, double x, double y, double z, double dx, double dy, double dz, double r1, double r2, double angle) { return _error("add cone"); } - bool addWedge(int tag, double x, double y, double z, double dx, double dy, + bool addWedge(int &tag, double x, double y, double z, double dx, double dy, double dz, double ltx) { return _error("add wedge"); } - bool addTorus(int tag, double x, double y, double z, double r1, double r2, + bool addTorus(int &tag, double x, double y, double z, double r1, double r2, double angle) { return _error("add torus"); } bool addThruSections(int tag, const std::vector<int> &wireTags, - std::vector<std::pair<int, int> > &outDimTags, - bool makeSolid, bool makeRuled) + bool makeSolid, bool makeRuled, + std::vector<std::pair<int, int> > &outDimTags) { return _error("add thrusection"); } bool addThickSolid(int tag, int solidTag, const std::vector<int> &excludeFaceTags, - double offset) + double offset, std::vector<std::pair<int, int> > &outDimTags) { return _error("add thick solid"); } @@ -436,18 +532,51 @@ public: return _error("add pipe"); } bool fillet(const std::vector<int> ®ionTags, const std::vector<int> &edgeTags, - double radius, std::vector<std::pair<int, int> > &outDimTags) + double radius, std::vector<std::pair<int, int> > &outDimTags, + bool removeRegion) { return _error("create fillet"); } - bool applyBooleanOperator(int tag, BooleanOperator op, - const std::vector<std::pair<int, int> > &objectDimTags, - const std::vector<std::pair<int, int> > &toolDimTags, - std::vector<std::pair<int, int> > &outDimTags, - bool removeObject, bool removeTool) + bool booleanOperator(int tag, BooleanOperator op, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) { return _error("apply boolean operator"); } + bool booleanUnion(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) + { + return _error("apply boolean union"); + } + bool booleanIntersection(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) + { + return _error("apply boolean intersection"); + } + bool booleanDifference(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) + { + return _error("apply boolean difference"); + } + bool booleanFragments(int tag, + const std::vector<std::pair<int, int> > &objectDimTags, + const std::vector<std::pair<int, int> > &toolDimTags, + std::vector<std::pair<int, int> > &outDimTags, + bool removeObject, bool removeTool) + { + return _error("apply boolean fragments"); + } bool translate(const std::vector<std::pair<int, int> > &inDimTags, double dx, double dy, double dz) { @@ -465,6 +594,11 @@ public: { return _error("apply dilatation"); } + bool symmetry(const std::vector<std::pair<int, int> > &inDimTags, + double a, double b, double c, double d) + { + return _error("apply symmetry"); + } bool copy(const std::vector<std::pair<int, int> > &inDimTags, std::vector<std::pair<int, int> > &outDimTags) { @@ -491,6 +625,54 @@ public: void setMeshSize(int dim, int tag, double size){} void synchronize(GModel *model){} bool getVertex(int tag, double &x, double &y, double &z){ return false; } + bool makeRectangleSTL(double x, double y, double z, double dx, double dy, + double roundedRadius, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) + { + return false; + } + bool makeDiskSTL(double xc, double yc, double zc, double rx, double ry, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) + { + return false; + } + bool makeSphereSTL(double xc, double yc, double zc, double radius, double angle1, + double angle2, double angle3, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) + { + return false; + } + bool makeBlockSTL(double x, double y, double z, double dx, double dy, double dz, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) + { + return false; + } + bool makeCylinderSTL(double x, double y, double z, double dx, double dy, double dz, + double r, double angle, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) + { + return false; + } + bool makeConeSTL(double x, double y, double z, double dx, double dy, double dz, + double r1, double r2, double angle, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) + { + return false; + } + bool makeWedgeSTL(double x, double y, double z, double dx, double dy, double dz, + double ltx, std::vector<SPoint3> &vertices, + std::vector<SVector3> &normals, std::vector<int> &triangles) + { + return false; + } + bool makeTorusSTL(double x, double y, double z, double r1, double r2, double angle, + std::vector<SPoint3> &vertices, std::vector<SVector3> &normals, + std::vector<int> &triangles) + { + return false; + } }; #endif diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp index d86ff7a164aca4291d5ff95d8fe12f684e1e9429..79d1fcf002be4cd3779c867c10e33526abbf2c9d 100644 --- a/Geo/Geo.cpp +++ b/Geo/Geo.cpp @@ -9,10 +9,12 @@ #include "Numeric.h" #include "GModel.h" #include "GModelIO_GEO.h" +#include "GModelIO_OCC.h" #include "Geo.h" #include "GeoInterpolation.h" #include "Context.h" #include "MVertexRTree.h" +#include "Field.h" #include "Parser.h" static List_T *ListOfTransformedPoints = NULL; @@ -1240,7 +1242,9 @@ static void SetTranslationMatrix(double matrix[4][4], double T[3]) static void SetSymmetryMatrix(double matrix[4][4], double A, double B, double C, double D) { - double F = -2.0 / (A * A + B * B + C * C); + double p = (A * A + B * B + C * C); + if(!p) p = 1e-12; + double F = -2.0 / p; matrix[0][0] = 1. + A * A * F; matrix[0][1] = A * B * F; matrix[0][2] = A * C * F; @@ -3773,3 +3777,107 @@ void SetVolumeSurfaces(Volume *v, List_T *loops) } } } + +// the following routines should be renamed and moved elsewhere + +int NEWPOINT() +{ + int tag = GModel::current()->getGEOInternals()->getMaxTag(0) + 1; + if(GModel::current()->getOCCInternals()) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(0) + 1); + return tag; +} + +int NEWLINE() +{ + int tag = 0; + if(CTX::instance()->geom.oldNewreg) + tag = NEWREG(); + else + tag = GModel::current()->getGEOInternals()->getMaxTag(1) + 1; + if(GModel::current()->getOCCInternals()) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(1) + 1); + return tag; +} + +int NEWLINELOOP() +{ + int tag = 0; + if(CTX::instance()->geom.oldNewreg) + tag = NEWREG(); + else + tag = GModel::current()->getGEOInternals()->getMaxTag(-1) + 1; + if(GModel::current()->getOCCInternals()) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(-1) + 1); + return tag; +} + +int NEWSURFACE() +{ + int tag = 0; + if(CTX::instance()->geom.oldNewreg) + tag = NEWREG(); + else + tag = GModel::current()->getGEOInternals()->getMaxTag(2) + 1; + if(GModel::current()->getOCCInternals()) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(2) + 1); + return tag; +} + +int NEWSURFACELOOP() +{ + int tag = 0; + if(CTX::instance()->geom.oldNewreg) + tag = NEWREG(); + else + tag = GModel::current()->getGEOInternals()->getMaxTag(-2) + 1; + if(GModel::current()->getOCCInternals()) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(-2) + 1); + return tag; +} + +int NEWVOLUME() +{ + int tag = 0; + if(CTX::instance()->geom.oldNewreg) + tag = NEWREG(); + else + tag = GModel::current()->getGEOInternals()->getMaxTag(3) + 1; + if(GModel::current()->getOCCInternals()) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(3) + 1); + return tag; +} + +int NEWREG() +{ + int tag = 0; + for(int dim = -2; dim <= 3; dim++){ + if(dim) + tag = std::max(tag, GModel::current()->getGEOInternals()->getMaxTag(dim) + 1); + } + tag = std::max(tag, GModel::current()->getGEOInternals()->getMaxPhysicalTag() + 1); + if(GModel::current()->getOCCInternals()){ + for(int dim = -2; dim <= 3; dim++){ + if(dim) + tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(dim) + 1); + } + } + return tag; +} + +int NEWFIELD() +{ +#if defined(HAVE_MESH) + return (GModel::current()->getFields()->maxId() + 1); +#else + return 0; +#endif +} + +int NEWPHYSICAL() +{ + if(CTX::instance()->geom.oldNewreg) + return NEWREG(); + else + return GModel::current()->getGEOInternals()->getMaxPhysicalTag() + 1; +} diff --git a/Geo/Geo.h b/Geo/Geo.h index 19b7a94ae6c970fd4faa448bebe967fb3919ec1d..f0ab8f9e3af8f1c63a9985b324d0266da8ffb7d4 100644 --- a/Geo/Geo.h +++ b/Geo/Geo.h @@ -237,4 +237,14 @@ void SortEdgesInLoop(int num, List_T *edges, bool orient=false); void SetSurfaceGeneratrices(Surface *s, List_T *loops); void SetVolumeSurfaces(Volume *v, List_T *loops); +int NEWPOINT(); +int NEWLINE(); +int NEWLINELOOP(); +int NEWSURFACE(); +int NEWSURFACELOOP(); +int NEWVOLUME(); +int NEWREG(); +int NEWFIELD(); +int NEWPHYSICAL(); + #endif diff --git a/Geo/GeoInterpolation.cpp b/Geo/GeoInterpolation.cpp index 16f88b4893e0d8840d9c5413abcabab28ce7bf85..598ce2e5638aff2d195c3a81de6820ed7a3a5be0 100644 --- a/Geo/GeoInterpolation.cpp +++ b/Geo/GeoInterpolation.cpp @@ -12,8 +12,6 @@ #define SQU(a) ((a)*(a)) -// Cubic spline : - /* static void InterpolateBezier(Vertex *v[4], double t, Vertex &V) { @@ -181,6 +179,11 @@ SPoint2 InterpolateCubicSpline(Vertex *v[4], double t, double mat[4][4], static Vertex InterpolateBezier(Curve *Curve, double u, int derivee) { int NbCurves = (List_Nbr(Curve->Control_Points) - 1) / 3; + if(NbCurves <= 0){ + Msg::Error("Bezier curve requires at least 4 control points"); + Vertex V; + return V; + } int iCurve = (int)floor(u * (double)NbCurves); if(iCurve >= NbCurves) iCurve = NbCurves - 1; // u = 1 if(iCurve <= 0) iCurve = 0; @@ -240,7 +243,7 @@ static Vertex InterpolateUBS(Curve *Curve, double u, int derivee) return V; } else - // return InterpolateCubicSpline(v, t, Curve->mat, derivee, t1, t2); + // return InterpolateCubicSpline(v, t, Curve->mat, derivee, t1, t2); return InterpolateCubicSpline(v, t); } @@ -557,7 +560,7 @@ static Vertex TransfiniteQua(Vertex c1, Vertex c2, Vertex c3, Vertex c4, s1.Pos.Y, s2.Pos.Y, s3.Pos.Y, s4.Pos.Y, u, v); V.Pos.Z = TRAN_QUA(c1.Pos.Z, c2.Pos.Z, c3.Pos.Z, c4.Pos.Z, s1.Pos.Z, s2.Pos.Z, s3.Pos.Z, s4.Pos.Z, u, v); - return (V); + return V; } // Transfinite interpolation on a triangle : diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp index 4b5cd987bb53615a1a099f4b7f46b3d615c6525b..95c2d11ddb42197ebedf1fb52e8457b206a37a1f 100644 --- a/Geo/GeoStringInterface.cpp +++ b/Geo/GeoStringInterface.cpp @@ -23,8 +23,15 @@ #include "onelab.h" #endif -void add_infile(const std::string &text, const std::string &fileName) +void add_infile(const std::string &text, const std::string &fileNameOrEmpty) { + std::string fileName = fileNameOrEmpty; + if(fileName.empty()){ + std::string base = (getenv("PWD") ? "" : CTX::instance()->homeDir); + GModel::current()->setFileName(base + CTX::instance()->defaultFileName); + GModel::current()->setName(""); + } + Msg::Debug("Adding `%s' to file `%s'", text.c_str(), fileName.c_str()); std::vector<std::string> split = SplitFileName(fileName); std::string noExt = split[0] + split[1], ext = split[2]; @@ -151,7 +158,7 @@ void add_infile(const std::string &text, const std::string &fileName) } } -static std::string list2string(List_T *list) +static std::string list2String(List_T *list) { std::ostringstream sstream; for(int i = 0; i < List_Nbr(list); i++){ @@ -163,17 +170,47 @@ static std::string list2string(List_T *list) return sstream.str(); } -void add_charlength(List_T *list, const std::string &fileName, const std::string &lc) +static std::string vector2String(const std::vector<int> &v) +{ + std::ostringstream sstream; + for(unsigned int i = 0; i < v.size(); i++){ + if(i) sstream << ", "; + sstream << v[i]; + } + return sstream.str(); +} + +static std::string dimTags2String(const std::vector<std::pair<int, int> > &l) +{ + std::ostringstream sstream; + for(unsigned int i = 0; i < l.size(); i++){ + switch(l[i].first){ + case 0: sstream << "Point{" << l[i].second << "}; "; break; + case 1: sstream << "Line{" << l[i].second << "}; "; break; + case 2: sstream << "Surface{" << l[i].second << "}; "; break; + case 3: sstream << "Volume{" << l[i].second << "}; "; break; + } + } + return sstream.str(); +} + +static void check_occ(std::ostringstream &sstream) +{ + if(gmsh_yyfactory != "OpenCASCADE") sstream << "SetFactory(\"OpenCASCADE\");\n"; +} + +void add_charlength(const std::string &fileName, const std::vector<int> &l, + const std::string &lc) { std::ostringstream sstream; - sstream << "Characteristic Length {" << list2string(list) << "} = " << lc << ";"; + sstream << "Characteristic Length {" << vector2String(l) << "} = " << lc << ";"; add_infile(sstream.str(), fileName); } -void add_recosurf(List_T *list, const std::string &fileName) +void add_recosurf(const std::string &fileName, const std::vector<int> &l) { std::ostringstream sstream; - sstream << "Recombine Surface {" << list2string(list) << "};"; + sstream << "Recombine Surface {" << vector2String(l) << "};"; add_infile(sstream.str(), fileName); } @@ -224,16 +261,14 @@ void add_trsfvol(std::vector<int> &l, const std::string &fileName) add_infile(sstream.str(), fileName); } -void add_embedded(const std::string &what, std::vector<int> &l, - const std::string &fileName) +void add_embedded(const std::string &fileName, const std::string &what, + std::vector<int> &l, int dim, int tag) { std::ostringstream sstream; - sstream << "Point{"; - for(unsigned int i = 1; i < l.size(); i++) { - if(i > 1) sstream << ", "; - sstream << l[i]; - } - sstream << "} In Surface{" << l[0] << "};"; + sstream << what << "{" << vector2String(l) << "} In "; + if(dim == 2) sstream << "Surface{"; + else sstream << "Volume{"; + sstream << tag << "};"; add_infile(sstream.str(), fileName); } @@ -336,7 +371,7 @@ void add_lineloop(List_T *list, const std::string &fileName, int *numloop) *numloop = std::max (*numloop, GModel::current()->getOCCInternals()->getMaxTag(-1) + 1); std::ostringstream sstream; - sstream << "Line Loop(" << *numloop << ") = {" << list2string(list) << "};"; + sstream << "Line Loop(" << *numloop << ") = {" << list2String(list) << "};"; add_infile(sstream.str(), fileName); } @@ -344,7 +379,7 @@ void add_surf(const std::string &type, List_T *list, const std::string &fileName { std::ostringstream sstream; sstream << type << "(" << GModel::current()->getMaxElementaryNumber(2) + 1 - << ") = {" << list2string(list) << "};"; + << ") = {" << list2String(list) << "};"; add_infile(sstream.str(), fileName); } @@ -356,7 +391,7 @@ void add_surfloop(List_T *list, const std::string &fileName, int *numloop) *numloop = std::max (*numloop, GModel::current()->getOCCInternals()->getMaxTag(-2) + 1); std::ostringstream sstream; - sstream << "Surface Loop(" << *numloop << ") = {" << list2string(list) << "};"; + sstream << "Surface Loop(" << *numloop << ") = {" << list2String(list) << "};"; add_infile(sstream.str(), fileName); } @@ -364,16 +399,16 @@ void add_vol(List_T *list, const std::string &fileName) { std::ostringstream sstream; sstream << "Volume(" << GModel::current()->getMaxElementaryNumber(3) + 1 - << ") = {" << list2string(list) << "};"; + << ") = {" << list2String(list) << "};"; add_infile(sstream.str(), fileName); } -void add_physical(const std::string &type, List_T *list, const std::string &fileName, - const std::string &name, int forceTag, bool append, - const std::string &mode) +void add_remove_physical(const std::string &fileName, const std::string &what, + const std::vector<int> &l, const std::string &name, + int forceTag, bool append, const std::string &mode) { std::ostringstream sstream; - sstream << "Physical " << type << "("; + sstream << "Physical " << what << "("; if(name.size()){ sstream << "\"" << name << "\""; if(forceTag) @@ -388,28 +423,29 @@ void add_physical(const std::string &type, List_T *list, const std::string &file sstream << "-"; else if(append) sstream << "+"; - sstream << "= {" << list2string(list) << "};"; + sstream << "= {" << vector2String(l) << "};"; add_infile(sstream.str(), fileName); } -void add_compound(const std::string &type, List_T *list, const std::string &fileName) +void add_compound(const std::string &fileName, const std::string &type, + const std::vector<int> &l) { std::ostringstream sstream; if(SplitFileName(fileName)[2] != ".geo") sstream << "CreateTopology;\n"; if (type == "Surface"){ sstream << "Compound " << type << "(" << GModel::current()->getMaxElementaryNumber(2) + 1 << ") = {" - << list2string(list) << "};"; + << vector2String(l) << "};"; } else if (type == "Line"){ sstream << "Compound " << type << "(" << GModel::current()->getMaxElementaryNumber(1) + 1 << ") = {" - << list2string(list) << "};"; + << vector2String(l) << "};"; } else{ sstream << "Compound " << type << "(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" - << list2string(list) << "};"; + << vector2String(l) << "};"; } add_infile(sstream.str(), fileName); } @@ -419,6 +455,7 @@ void add_circle(const std::string &fileName, const std::string &x, const std::st const std::string &alpha2) { std::ostringstream sstream; + check_occ(sstream); sstream << "Circle(" << GModel::current()->getMaxElementaryNumber(1) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << r; if(alpha1.size()) @@ -434,6 +471,7 @@ void add_ellipse(const std::string &fileName, const std::string &x, const std::s const std::string &alpha1, const std::string &alpha2) { std::ostringstream sstream; + check_occ(sstream); sstream << "Ellipse(" << GModel::current()->getMaxElementaryNumber(1) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << rx << ", " << ry; if(alpha1.size()) @@ -448,6 +486,7 @@ void add_disk(const std::string &fileName, const std::string &x, const std::stri const std::string &z, const std::string &rx, const std::string &ry) { std::ostringstream sstream; + check_occ(sstream); sstream << "Disk(" << GModel::current()->getMaxElementaryNumber(2) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << rx << ", " << ry << "};"; add_infile(sstream.str(), fileName); @@ -458,6 +497,7 @@ void add_rectangle(const std::string &fileName, const std::string &x, const std: const std::string &roundedRadius) { std::ostringstream sstream; + check_occ(sstream); sstream << "Rectangle(" << GModel::current()->getMaxElementaryNumber(2) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << dx << ", " << dy; if(roundedRadius.size()) @@ -471,6 +511,7 @@ void add_sphere(const std::string &fileName, const std::string &x, const std::st const std::string &alpha2, const std::string &alpha3) { std::ostringstream sstream; + check_occ(sstream); sstream << "Sphere(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << r; if(alpha1.size()) @@ -488,6 +529,7 @@ void add_cylinder(const std::string &fileName, const std::string &x, const std:: const std::string &dz, const std::string &r, const std::string &alpha) { std::ostringstream sstream; + check_occ(sstream); sstream << "Cylinder(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << dx << ", " << dy << ", " << dz << ", " << r; @@ -502,6 +544,7 @@ void add_block(const std::string &fileName, const std::string &x, const std::str const std::string &dz) { std::ostringstream sstream; + check_occ(sstream); sstream << "Block(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << dx << ", " << dy << ", " << dz << "};"; @@ -513,6 +556,7 @@ void add_torus(const std::string &fileName, const std::string &x, const std::str const std::string &alpha) { std::ostringstream sstream; + check_occ(sstream); sstream << "Torus(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << r1 << ", " << r2; if(alpha.size()) @@ -527,6 +571,7 @@ void add_cone(const std::string &fileName, const std::string &x, const std::stri const std::string &alpha) { std::ostringstream sstream; + check_occ(sstream); sstream << "Cone(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << dx << ", " << dy << ", " << dz << ", " << r1 << ", " << r2; @@ -541,116 +586,144 @@ void add_wedge(const std::string &fileName, const std::string &x, const std::str const std::string &dz, const std::string <x) { std::ostringstream sstream; + check_occ(sstream); sstream << "Wedge(" << GModel::current()->getMaxElementaryNumber(3) + 1 << ") = {" << x << ", " << y << ", " << z << ", " << dx << ", " << dy << ", " << dz << ", " << ltx << "};"; add_infile(sstream.str(), fileName); } -void translate(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &tx, - const std::string &ty, const std::string &tz) +void translate(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &tx, const std::string &ty, const std::string &tz, + bool duplicata) { std::ostringstream sstream; sstream << "Translate {" << tx << ", " << ty << ", " << tz << "} {\n "; - if(add) sstream << "Duplicata { "; - sstream << what << "{" << list2string(list) << "};"; - if(add) sstream << " }"; + if(duplicata) sstream << "Duplicata { "; + sstream << dimTags2String(l); + if(duplicata) sstream << "}"; sstream << "\n}"; add_infile(sstream.str(), fileName); } -void rotate(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &ax, const std::string &ay, - const std::string &az, const std::string &px, const std::string &py, - const std::string &pz, const std::string &angle) +void rotate(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &ax, const std::string &ay, const std::string &az, + const std::string &px, const std::string &py, const std::string &pz, + const std::string &angle, bool duplicata) { std::ostringstream sstream; sstream << "Rotate {{" << ax << ", " << ay << ", " << az << "}, {" << px << ", " << py << ", " << pz << "}, " << angle << "} {\n "; - if(add) sstream << "Duplicata { "; - sstream << what << "{" << list2string(list) << "};"; - if(add) sstream << " }"; + if(duplicata) sstream << "Duplicata { "; + sstream << dimTags2String(l); + if(duplicata) sstream << "}"; sstream << "\n}"; add_infile(sstream.str(), fileName); } -void dilate(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &dx, const std::string &dy, - const std::string &dz, const std::string &df) +void dilate(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &cx, const std::string &cy, const std::string &cz, + const std::string &sx, const std::string &sy, const std::string &sz, + bool duplicata) { std::ostringstream sstream; - sstream << "Dilate {{" << dx << ", " << dy << ", " << dz << "}, " << df << "} {\n "; - if(add) sstream << "Duplicata { "; - sstream << what << "{" << list2string(list) << "};"; - if(add) sstream << " }"; + sstream << "Dilate {{" << cx << ", " << cy << ", " << cz << "}, {" + << sx << ", " << sy << ", " << sz << "}} {\n "; + if(duplicata) sstream << "Duplicata { "; + sstream << dimTags2String(l); + if(duplicata) sstream << "}"; sstream << "\n}"; add_infile(sstream.str(), fileName); } -void symmetry(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &sa, const std::string &sb, - const std::string &sc, const std::string &sd) +void symmetry(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &sa, const std::string &sb, const std::string &sc, + const std::string &sd, bool duplicata) { std::ostringstream sstream; sstream << "Symmetry {" << sa << ", " << sb << ", " << sc << ", " << sd << "} {\n "; - if(add) sstream << "Duplicata { "; - sstream << what << "{" << list2string(list) << "};"; - if(add) sstream << " }"; + if(duplicata) sstream << "Duplicata { "; + sstream << dimTags2String(l); + if(duplicata) sstream << "}"; sstream << "\n}"; add_infile(sstream.str(), fileName); } -void extrude(List_T *list, const std::string &fileName, const std::string &what, - const std::string &tx, const std::string &ty, const std::string &tz) +void extrude(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &tx, const std::string &ty, const std::string &tz, + bool extrudeMesh, const std::string &layers, bool recombineMesh) { std::ostringstream sstream; - sstream << "Extrude {" << tx << ", " << ty << ", " << tz << "} {\n " << what - << "{" << list2string(list) << "};\n}"; + sstream << "Extrude {" << tx << ", " << ty << ", " << tz << "} {\n " + << dimTags2String(l); + if(extrudeMesh){ + sstream << "Layers{" << layers << "}; "; + if(recombineMesh) sstream << "Recombine;"; + } + sstream << "\n}"; add_infile(sstream.str(), fileName); } -void protude(List_T *list, const std::string &fileName, const std::string &what, +void protude(const std::string &fileName, const std::vector<std::pair<int, int> > &l, const std::string &ax, const std::string &ay, const std::string &az, const std::string &px, const std::string &py, const std::string &pz, - const std::string &angle) + const std::string &angle, bool extrudeMesh, const std::string &layers, + bool recombineMesh) { std::ostringstream sstream; sstream << "Extrude {{" << ax << ", " << ay << ", " << az << "}, {" << px << ", " << py << ", " << pz << "}, " << angle << "} {\n " - << what << "{" << list2string(list) << "};\n}"; + << dimTags2String(l); + if(extrudeMesh){ + sstream << "Layers{" << layers << "}; "; + if(recombineMesh) sstream << "Recombine;"; + } + sstream << "\n}"; + add_infile(sstream.str(), fileName); +} + +void add_pipe(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::vector<int> &l2) +{ + std::ostringstream sstream; + check_occ(sstream); + int wire = GModel::current()->getGEOInternals()->getMaxTag(-1) + 1; + if(GModel::current()->getOCCInternals()) + wire = std::max(wire, GModel::current()->getOCCInternals()->getMaxTag(-1) + 1); + sstream << "Wire(" << wire << ") = {" << vector2String(l2) << "};\n"; + sstream << "Extrude { " << dimTags2String(l) << "} Using Wire {" << wire << "}\n"; add_infile(sstream.str(), fileName); } void split_edge(int edge_id, List_T *vertices, const std::string &fileName) { std::ostringstream sstream; - sstream << "Split Line(" << edge_id << ") {" << list2string(vertices) << "};"; + sstream << "Split Line(" << edge_id << ") {" << list2String(vertices) << "};"; add_infile(sstream.str(), fileName); } void apply_boolean(const std::string &fileName, const std::string &op, - const std::vector<GEntity*> &object, - const std::vector<GEntity*> &tool) + const std::vector<std::pair<int, int> > &object, + const std::vector<std::pair<int, int> > &tool, + int deleteObject, int deleteTool) { std::ostringstream sstream; - sstream << op << "{ "; - for(unsigned int i = 0; i < object.size(); i++){ - switch(object[i]->dim()){ - case 3: sstream << "Volume{" << object[i]->tag() << "}; "; break; - case 2: sstream << "Surface{" << object[i]->tag() << "}; "; break; - case 1: sstream << "Line{" << object[i]->tag() << "}; "; break; - } - } - sstream << "Delete; }{ "; - for(unsigned int i = 0; i < tool.size(); i++){ - switch(tool[i]->dim()){ - case 3: sstream << "Volume{" << tool[i]->tag() << "}; "; break; - case 2: sstream << "Surface{" << tool[i]->tag() << "}; "; break; - case 1: sstream << "Line{" << tool[i]->tag() << "}; "; break; - } - } - sstream << "Delete; }"; + check_occ(sstream); + sstream << op << "{ " << dimTags2String(object); + if(deleteObject) sstream << "Delete; "; + sstream << "}{ " << dimTags2String(tool); + if(deleteTool) sstream << "Delete; "; + sstream << "}"; + add_infile(sstream.str(), fileName); +} + +void apply_fillet(const std::string &fileName, const std::vector<int> ®ions, + const std::vector<int> &edges, const std::string &radius) +{ + std::ostringstream sstream; + check_occ(sstream); + sstream << "Fillet{" << vector2String(regions) << "}{" + << vector2String(edges) << "}{" << radius << "}"; add_infile(sstream.str(), fileName); } @@ -659,9 +732,11 @@ void coherence(const std::string &fileName) add_infile("Coherence;", fileName); } -void delet(List_T *list, const std::string &fileName, const std::string &what) +void delete_entities(const std::string &fileName, + const std::vector<std::pair<int, int> > &l, bool recursive) { std::ostringstream sstream; - sstream << "Delete {\n " << what << "{" << list2string(list) << "};\n}"; + if(recursive) sstream << "Recursive "; + sstream << "Delete {\n " << dimTags2String(l) << "\n}"; add_infile(sstream.str(), fileName); } diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h index c0db042bffe62de9d7b6ab2166a69650a2967526..0db5b0cc8cf69c8d38632e17d721b854bfe4ef6b 100644 --- a/Geo/GeoStringInterface.h +++ b/Geo/GeoStringInterface.h @@ -10,19 +10,18 @@ #include <vector> #include "ListUtils.h" -class GEntity; - void add_infile(const std::string &text, const std::string &fileName); -void add_charlength(List_T *list, const std::string &fileName, const std::string &lc); -void add_recosurf(List_T *list, const std::string &fileName); +void add_charlength(const std::string &fileName, const std::vector<int> &l, + const std::string &lc); +void add_recosurf(const std::string &fileName, const std::vector<int> &l); void add_trsfline(std::vector<int> &l, const std::string &fileName, const std::string &type, const std::string &typearg, const std::string &pts); void add_trsfsurf(std::vector<int> &l, const std::string &fileName, const std::string &dir); void add_trsfvol(std::vector<int> &l, const std::string &fileName); -void add_embedded(const std::string &what, std::vector<int> &l, - const std::string &fileName); +void add_embedded(const std::string &fileName, const std::string &what, + std::vector<int> &l, int dim, int tag); void add_param(const std::string &par, const std::string &value, const std::string &label, const std::string &path, const std::string &fileName); @@ -42,10 +41,11 @@ void add_lineloop(List_T *list, const std::string &fileName, int *numloop); void add_surf(const std::string &type, List_T *list, const std::string &fileName); void add_surfloop(List_T *list, const std::string &fileName, int *numvol); void add_vol(List_T *list, const std::string &fileName); -void add_physical(const std::string &type, List_T *list, const std::string &fileName, - const std::string &name, int forceTag, bool append, - const std::string &mode); -void add_compound(const std::string &type, List_T *list, const std::string &fileName); +void add_remove_physical(const std::string &fileName, const std::string &what, + const std::vector<int> &l, const std::string &name, + int forceTag, bool append, const std::string &mode); +void add_compound(const std::string &fileName, const std::string &type, + const std::vector<int> &l); void add_circle(const std::string &fileName, const std::string &x, const std::string &y, const std::string &z, const std::string &r, const std::string &alpha1, const std::string &alpha2); @@ -77,32 +77,40 @@ void add_cone(const std::string &fileName, const std::string &x, const std::stri void add_wedge(const std::string &fileName, const std::string &x, const std::string &y, const std::string &z, const std::string &dx, const std::string &dy, const std::string &dz, const std::string <x); -void translate(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &tx, const std::string &ty, - const std::string &tz); -void rotate(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &ax, const std::string &ay, - const std::string &az, const std::string &px, const std::string &py, - const std::string &pz, - const std::string &angle); -void dilate(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &dx, const std::string &dy, - const std::string &dz, const std::string &df); -void symmetry(int add, List_T *list, const std::string &fileName, - const std::string &what, const std::string &sa, const std::string &sb, - const std::string &sc, const std::string &sd); -void extrude(List_T *list, const std::string &fileName, const std::string &what, - const std::string &tx, - const std::string &ty, const std::string &tz); -void protude(List_T *list, const std::string &fileName, const std::string &what, +void translate(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &tx, const std::string &ty, const std::string &tz, + bool duplicata); +void rotate(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &ax, const std::string &ay, const std::string &az, + const std::string &px, const std::string &py, const std::string &pz, + const std::string &angle, bool duplicata); +void dilate(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &cx, const std::string &cy, const std::string &cz, + const std::string &sx, const std::string &sy, const std::string &sz, + bool duplicata); +void symmetry(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &sa, const std::string &sb, const std::string &sc, + const std::string &sd, bool duplicata); +void extrude(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::string &tx, const std::string &ty, const std::string &tz, + bool extrudeMesh, const std::string &layers, bool recombineMesh); +void protude(const std::string &fileName, const std::vector<std::pair<int, int> > &l, const std::string &ax, const std::string &ay, const std::string &az, const std::string &px, const std::string &py, const std::string &pz, - const std::string &angle); + const std::string &angle, bool extrudeMesh, const std::string &layers, + bool recombineMesh); +void add_pipe(const std::string &fileName, const std::vector<std::pair<int, int> > &l, + const std::vector<int> &l2); void split_edge(int edge_id, List_T *vertices, const std::string &fileName); void apply_boolean(const std::string &fileName, const std::string &op, - const std::vector<GEntity*> &object, - const std::vector<GEntity*> &tool); + const std::vector<std::pair<int, int> > &object, + const std::vector<std::pair<int, int> > &tool, + int deleteObject, int deleteTool); +void apply_fillet(const std::string &fileName, const std::vector<int> ®ions, + const std::vector<int> &edges, const std::string &radius); void coherence(const std::string &fileName); -void delet(List_T *list, const std::string &fileName, const std::string &what); +void delete_entities(const std::string &fileName, + const std::vector<std::pair<int, int> > &l, + bool recursive); #endif diff --git a/Geo/OCCEdge.cpp b/Geo/OCCEdge.cpp index 89588df9db2507c30531158d73299a07c6afc053..b0f263cfe782f12c9ca87e520b017203ce27d04a 100644 --- a/Geo/OCCEdge.cpp +++ b/Geo/OCCEdge.cpp @@ -34,11 +34,7 @@ #include <BRepAdaptor_Curve.hxx> #include <BRepAdaptor_Surface.hxx> #include <BRep_Builder.hxx> -#if (OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR < 6) -#include <BOPTools_Tools.hxx> -#else #include <BOPTools_AlgoTools.hxx> -#endif OCCEdge::OCCEdge(GModel *m, TopoDS_Edge edge, int num, GVertex *v1, GVertex *v2) : GEdge(m, num, v1, v2), c(edge), trimmed(0) @@ -89,7 +85,6 @@ void OCCEdge::setTrimmed(OCCFace *f) SPoint2 OCCEdge::reparamOnFace(const GFace *face, double epar, int dir) const { - if (face->getNativeType() != GEntity::OpenCascadeModel){ const GPoint pt = point(epar); SPoint3 sp(pt.x(), pt.y(), pt.z()); @@ -369,11 +364,7 @@ void OCCEdge::replaceEndingPointsInternals(GVertex *g0, GVertex *g1) _replacement=E; } else { -#if (OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR < 6) - BOPTools_Tools::MakeSplitEdge(aEx, aVR1, t1, aVR2, t2, _replacement); -#else BOPTools_AlgoTools::MakeSplitEdge(aEx, aVR1, t1, aVR2, t2, _replacement); -#endif } TopoDS_Edge temp = c; c = _replacement; diff --git a/Geo/OCCFace.cpp b/Geo/OCCFace.cpp index 2fce3e63ebc2c3440c354c748b320ab586815a77..c0eca00e421cf1fb93aa78bd9d5559eb78811bb7 100644 --- a/Geo/OCCFace.cpp +++ b/Geo/OCCFace.cpp @@ -16,9 +16,10 @@ #if defined(HAVE_OCC) +#include <BOPTools_AlgoTools.hxx> +#include <BOPTools_AlgoTools2D.hxx> #include <BRepBndLib.hxx> #include <BRepLProp_SLProps.hxx> -#include <BRepMesh_FastDiscret.hxx> #include <BRep_Builder.hxx> #include <Bnd_Box.hxx> #include <GeomAPI_ProjectPointOnSurf.hxx> @@ -30,29 +31,13 @@ #include <Geom_SphericalSurface.hxx> #include <Geom_SurfaceOfRevolution.hxx> #include <Geom_ToroidalSurface.hxx> -#include <Poly_Triangulation.hxx> -#include <Poly_Triangle.hxx> +#include <IntTools_Context.hxx> #include <ShapeAnalysis.hxx> #include <Standard_Version.hxx> -#include <TColgp_Array1OfPnt2d.hxx> #include <TopExp_Explorer.hxx> #include <TopoDS.hxx> #include <gp_Pln.hxx> -#if ((OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR >= 6)) || (OCC_VERSION_MAJOR >= 7) -#if ((OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR < 8)) -#include <BOPInt_Context.hxx> -#else -#include <IntTools_Context.hxx> -#endif -#include <BOPTools_AlgoTools2D.hxx> -#include <BOPTools_AlgoTools.hxx> -#else -#include <BOPTools_Tools2D.hxx> -#include <BOPTools_Tools3D.hxx> -#include <IntTools_Context.hxx> -#endif - OCCFace::OCCFace(GModel *m, TopoDS_Face _s, int num) : GFace(m, num), s(_s) { @@ -83,12 +68,12 @@ void OCCFace::setup() TopoDS_Edge edge = TopoDS::Edge(exp3.Current()); GEdge *e = 0; if(model()->getOCCInternals()) - e = model()->getOCCInternals()->getOCCEdgeByNativePtr(model(), edge); + e = model()->getOCCInternals()->getEdgeForOCCShape(model(), edge); if(!e){ Msg::Error("Unknown edge in face %d", tag()); } else if(edge.Orientation() == TopAbs_INTERNAL){ - Msg::Info("Adding embedded edge %d", e->tag()); + Msg::Info("Adding embedded edge %d in face %d", e->tag(), tag()); embedded_edges.push_back(e); OCCEdge *occe = (OCCEdge*)e; occe->setTrimmed(this); @@ -144,12 +129,12 @@ void OCCFace::setup() TopoDS_Vertex vertex = TopoDS::Vertex(exp2.Current()); GVertex *v = 0; if(model()->getOCCInternals()) - v = model()->getOCCInternals()->getOCCVertexByNativePtr(model(), vertex); + v = model()->getOCCInternals()->getVertexForOCCShape(model(), vertex); if(!v){ Msg::Error("Unknown vertex in face %d", tag()); } else if(vertex.Orientation() == TopAbs_INTERNAL){ - Msg::Info("Adding embedded vertex %d", v->tag()); + Msg::Info("Adding embedded vertex %d in face %d", v->tag(), tag()); embedded_vertices.push_back(v); } } @@ -424,34 +409,8 @@ bool OCCFace::buildSTLTriangulation(bool force) else return true; } - - Bnd_Box aBox; - BRepBndLib::Add(s, aBox); - -#if (OCC_VERSION_MAJOR >= 7) - BRepMesh_FastDiscret::Parameters parameters; - parameters.Deflection = 0.1; - parameters.Angle = 0.5; - parameters.Relative = Standard_True; - BRepMesh_FastDiscret aMesher(aBox, parameters); -#else - BRepMesh_FastDiscret aMesher(0.1, 0.5, aBox, Standard_False, Standard_False, - Standard_True, Standard_False); -#endif -#if (OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR < 5) - aMesher.Add(s); -#else - aMesher.Perform(s); -#endif - - TopLoc_Location loc; - Handle(Poly_Triangulation) triangulation = BRep_Tool::Triangulation(s, loc); - - if(triangulation.IsNull() || !triangulation->HasUVNodes()){ - if(triangulation.IsNull()) - Msg::Warning("OCC STL triangulation of surface %d failed", tag()); - else - Msg::Warning("OCC STL triangulation of surface %d has no u,v coordinates", tag()); + if(!model()->getOCCInternals()->makeFaceSTL(s, stl_vertices, stl_triangles)){ + Msg::Warning("OpenCASCADE triangulation of surface %d failed", tag()); // add a dummy triangle so that we won't try again stl_vertices.push_back(SPoint2(0., 0.)); stl_triangles.push_back(0); @@ -460,29 +419,18 @@ bool OCCFace::buildSTLTriangulation(bool force) return false; } - for(int i = 1; i <= triangulation->NbNodes(); i++){ - gp_Pnt2d p = (triangulation->UVNodes())(i); - stl_vertices.push_back(SPoint2(p.X(), p.Y())); - } - bool reverse = false; - for(int i = 1; i <= triangulation->NbTriangles(); i++){ - Poly_Triangle triangle = (triangulation->Triangles())(i); - int p1, p2, p3; - triangle.Get(p1, p2, p3); - - // orient STL mesh to get normal right - if(i == 1){ - gp_Pnt2d gp1 = (triangulation->UVNodes())(p1); - gp_Pnt2d gp2 = (triangulation->UVNodes())(p2); - gp_Pnt2d gp3 = (triangulation->UVNodes())(p3); - SPoint2 b = SPoint2(gp1.X(), gp1.Y()) + SPoint2(gp2.X(), gp2.Y()) + - SPoint2(gp3.X(), gp3.Y()); + for(unsigned int i = 0; i < stl_triangles.size(); i += 3){ + if(i == 0){ + SPoint2 gp1 = stl_vertices[stl_triangles[i]]; + SPoint2 gp2 = stl_vertices[stl_triangles[i + 1]]; + SPoint2 gp3 = stl_vertices[stl_triangles[i + 2]]; + SPoint2 b = gp1 + gp2 + gp2; b *= 1. / 3.; SVector3 nf = normal(b); - GPoint sp1 = point(gp1.X(), gp1.Y()); - GPoint sp2 = point(gp2.X(), gp2.Y()); - GPoint sp3 = point(gp3.X(), gp3.Y()); + GPoint sp1 = point(gp1.x(), gp1.y()); + GPoint sp2 = point(gp2.x(), gp2.y()); + GPoint sp3 = point(gp3.x(), gp3.y()); double n[3]; normal3points(sp1.x(), sp1.y(), sp1.z(), sp2.x(), sp2.y(), sp2.z(), @@ -493,34 +441,19 @@ bool OCCFace::buildSTLTriangulation(bool force) reverse = true; } } - - if(!reverse){ - stl_triangles.push_back(p1 - 1); - stl_triangles.push_back(p2 - 1); - stl_triangles.push_back(p3 - 1); - } - else{ - stl_triangles.push_back(p1 - 1); - stl_triangles.push_back(p3 - 1); - stl_triangles.push_back(p2 - 1); + if(reverse){ + int tmp = stl_triangles[i + 1]; + stl_triangles[i + 1] = stl_triangles[i + 2]; + stl_triangles[i + 2] = tmp; } } - return true; } void OCCFace::replaceEdgesInternal(std::list<GEdge*> &new_edges) { - -#if (OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR >= 6) && (OCC_VERSION_MINOR < 8) - Handle(BOPInt_Context) myContext = new BOPInt_Context; -#elif defined(OCC_VERSION_HEX) && OCC_VERSION_HEX >= 0x060503 - Handle(IntTools_Context) myContext = new IntTools_Context; -#else - IntTools_Context myContext; -#endif - // we simply replace old edges by new edges in the structure + Handle(IntTools_Context) myContext = new IntTools_Context; // make a copy of s TopoDS_Face copy_of_s_forward = s; @@ -578,11 +511,7 @@ void OCCFace::replaceEdgesInternal(std::list<GEdge*> &new_edges) continue; } else{ -#if ((OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR >= 6)) || (OCC_VERSION_MAJOR >= 7) aTx = BOPTools_AlgoTools2D::IntermediatePoint(aT1, aT2); -#else - aTx = BOPTools_Tools2D::IntermediatePoint(aT1, aT2); -#endif gp_Pnt2d aP2D; aC2D->D0(aTx, aP2D); aUx=aP2D.X(); @@ -594,18 +523,10 @@ void OCCFace::replaceEdgesInternal(std::list<GEdge*> &new_edges) } } } -#if ((OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR >= 6)) || (OCC_VERSION_MAJOR >= 7) BOPTools_AlgoTools2D::BuildPCurveForEdgeOnFace(aER, copy_of_s_forward); -#else - BOPTools_Tools2D::BuildPCurveForEdgeOnFace(aER, copy_of_s_forward); -#endif // orient image Standard_Boolean bIsToReverse = -#if ((OCC_VERSION_MAJOR == 6) && (OCC_VERSION_MINOR >= 6)) || (OCC_VERSION_MAJOR >= 7) BOPTools_AlgoTools::IsSplitToReverse(aER, aE, myContext); -#else - BOPTools_Tools3D::IsSplitToReverse1(aER, aE, myContext); -#endif if (bIsToReverse) { aER.Reverse(); } diff --git a/Geo/OCCRegion.cpp b/Geo/OCCRegion.cpp index 98dc18ba405b2770e28b7021804bed5519ee631f..2f3682bfcbb6ba8f5ca24713ecf5375fc86af79c 100644 --- a/Geo/OCCRegion.cpp +++ b/Geo/OCCRegion.cpp @@ -46,12 +46,12 @@ void OCCRegion::setup() TopoDS_Face face = TopoDS::Face(exp3.Current()); GFace *f = 0; if(model()->getOCCInternals()) - f = model()->getOCCInternals()->getOCCFaceByNativePtr(model(), face); + f = model()->getOCCInternals()->getFaceForOCCShape(model(), face); if(!f){ Msg::Error("Unknown face in region %d", tag()); } else if (face.Orientation() == TopAbs_INTERNAL){ - Msg::Info("Adding embedded face %d", f->tag()); + Msg::Info("Adding embedded face %d in region %d", f->tag(), tag()); embedded_faces.push_back(f); } else{ @@ -65,12 +65,12 @@ void OCCRegion::setup() TopoDS_Edge edge = TopoDS::Edge(exp3.Current()); GEdge *e = 0; if(model()->getOCCInternals()) - e = model()->getOCCInternals()->getOCCEdgeByNativePtr(model(), edge); + e = model()->getOCCInternals()->getEdgeForOCCShape(model(), edge); if(!e){ Msg::Error("Unknown edge in region %d", tag()); } else if (edge.Orientation() == TopAbs_INTERNAL){ - Msg::Info("Adding embedded edge %d", e->tag()); + Msg::Info("Adding embedded edge %d in region %d", e->tag(), tag()); embedded_edges.push_back(e); //OCCEdge *occe = (OCCEdge*)e; //occe->setTrimmed(this); @@ -81,12 +81,12 @@ void OCCRegion::setup() TopoDS_Vertex vertex = TopoDS::Vertex(exp3.Current()); GVertex *v = 0; if(model()->getOCCInternals()) - v = model()->getOCCInternals()->getOCCVertexByNativePtr(model(), vertex); + v = model()->getOCCInternals()->getVertexForOCCShape(model(), vertex); if (!v){ Msg::Error("Unknown vertex in region %d", tag()); } else if (vertex.Orientation() == TopAbs_INTERNAL){ - Msg::Info("Adding embedded vertex %d", v->tag()); + Msg::Info("Adding embedded vertex %d in region %d", v->tag(), tag()); embedded_vertices.push_back(v); } } @@ -106,7 +106,7 @@ SBoundingBox3d OCCRegion::bounds() const GEntity::GeomType OCCRegion::geomType() const { - return Unknown; + return Volume; } bool FaceHaveDifferentOrientations(const TopoDS_Face& aFR, diff --git a/Geo/discreteFace.cpp b/Geo/discreteFace.cpp index ad36b56e56087684a497b14da4daecd76571675a..eaf08902d1776722a58b6aea2443ea457c62bf62 100644 --- a/Geo/discreteFace.cpp +++ b/Geo/discreteFace.cpp @@ -974,7 +974,7 @@ void discreteFace::crossField() { #if defined(HAVE_SOLVER) && defined(HAVE_ANN) // linear system - linearSystem<double> * lsys; + linearSystem<double> * lsys = 0; #ifdef HAVE_PETSC lsys = new linearSystemPETSc<double>; diff --git a/Graphics/drawAxes.cpp b/Graphics/drawAxes.cpp index 9dbc3308bbee85dcb539a53b8207e9223cf795e1..28f8e13fd36983b3063cd22059dcf6989082bd2f 100644 --- a/Graphics/drawAxes.cpp +++ b/Graphics/drawAxes.cpp @@ -326,7 +326,7 @@ void drawContext::drawAxes() CTX::instance()->axesForceValue ? CTX::instance()->axesValue : CTX::instance()->axesPosition); } - else if(geometryExists){ + else{ double bb[6] = {CTX::instance()->min[0], CTX::instance()->max[0], CTX::instance()->min[1], CTX::instance()->max[1], CTX::instance()->min[2], CTX::instance()->max[2]}; diff --git a/Graphics/drawContext.cpp b/Graphics/drawContext.cpp index 22c4b6ba6cdec820b4db27bb281efe24975503ff..9bc6e0e41df76c398bea220f4029710f98afd946 100644 --- a/Graphics/drawContext.cpp +++ b/Graphics/drawContext.cpp @@ -33,6 +33,12 @@ #endif drawContextGlobal *drawContext::_global = 0; +void (*drawContext::drawGeomTransient)(void*) = 0; + +void drawContext::setDrawGeomTransientFunction(void (*fct)(void *)) +{ + drawGeomTransient = fct; +} extern SPoint2 getGraph2dDataPointForTag(unsigned int); diff --git a/Graphics/drawContext.h b/Graphics/drawContext.h index 8556be92a5e845c5a5ad5cc7dfaa0b514782f80d..122caf2f61944b0103fd2f3f7e9fd31a05efb668 100644 --- a/Graphics/drawContext.h +++ b/Graphics/drawContext.h @@ -255,6 +255,9 @@ class drawContext { double xmax, double ymax, double zmax, double a, double b, double c, double d, int shade=0); + // dynamic pointer to a transient geometry drawing function + static void setDrawGeomTransientFunction(void (*fct)(void *)); + static void (*drawGeomTransient)(void*); }; class mousePosition { diff --git a/Graphics/drawGeom.cpp b/Graphics/drawGeom.cpp index a908118c7d76bba9bd3f1b326d6373009ea745a8..67cf4f25f125e2a3497678e4a77c0637c466e453 100644 --- a/Graphics/drawGeom.cpp +++ b/Graphics/drawGeom.cpp @@ -533,6 +533,9 @@ void drawContext::drawGeom() { if(!CTX::instance()->geom.draw) return; + // draw any transient geometry stuff + if(drawGeomTransient) (*drawGeomTransient)(this); + for(int i = 0; i < 6; i++) if(CTX::instance()->geom.clip & (1 << i)) glEnable((GLenum)(GL_CLIP_PLANE0 + i)); diff --git a/Graphics/drawMesh.cpp b/Graphics/drawMesh.cpp index 824fe9557d5d53d8403b51de0817bec3f92be741..1240f3117024343a61d6782aa4d4b91833ca0369 100644 --- a/Graphics/drawMesh.cpp +++ b/Graphics/drawMesh.cpp @@ -702,6 +702,7 @@ void drawContext::drawMesh() for(unsigned int i = 0; i < GModel::list.size(); i++){ GModel *m = GModel::list[i]; bool changed = m->fillVertexArrays(); + if(changed) Msg::Debug("mesh vertex arrays have changed"); #if defined(HAVE_FLTK) && defined(__APPLE__) // FIXME: resetting texture pile fixes bug with recent MacOS versions if(changed) gl_texture_pile_height(gl_texture_pile_height()); diff --git a/Graphics/drawPost.cpp b/Graphics/drawPost.cpp index a684ac3f20a47b4de286407ffa80865fce54659e..9c960352cceaca4f6ce003ad7903b5c2c7d2caaa 100644 --- a/Graphics/drawPost.cpp +++ b/Graphics/drawPost.cpp @@ -580,6 +580,7 @@ void drawContext::drawPost() for(unsigned int i = 0; i < PView::list.size(); i++){ bool changed = PView::list[i]->fillVertexArrays(); + if(changed) Msg::Debug("post-pro vertex arrays have changed"); #if defined(HAVE_FLTK) && defined(__APPLE__) // FIXME: resetting texture pile fixes bug with recent MacOS versions if(changed) gl_texture_pile_height(gl_texture_pile_height()); diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp index b23e4491340418514929fd077ca4ab6cc6479fa3..1e0dee932f91d670498758c2fe7226ee6efe6923 100644 --- a/Graphics/gl2ps.cpp +++ b/Graphics/gl2ps.cpp @@ -1,6 +1,6 @@ /* * GL2PS, an OpenGL to PostScript Printing Library - * Copyright (C) 1999-2015 C. Geuzaine + * Copyright (C) 1999-2017 C. Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: @@ -65,20 +65,6 @@ #define GL2PS_ZOFFSET_LARGE 20.0F #define GL2PS_ZERO(arg) (fabs(arg) < 1.e-20) -/* Primitive types */ - -#define GL2PS_NO_TYPE -1 -#define GL2PS_TEXT 1 -#define GL2PS_POINT 2 -#define GL2PS_LINE 3 -#define GL2PS_QUADRANGLE 4 -#define GL2PS_TRIANGLE 5 -#define GL2PS_PIXMAP 6 -#define GL2PS_IMAGEMAP 7 -#define GL2PS_IMAGEMAP_WRITTEN 8 -#define GL2PS_IMAGEMAP_VISIBLE 9 -#define GL2PS_SPECIAL 10 - /* BSP tree primitive comparison */ #define GL2PS_COINCIDENT 1 @@ -101,14 +87,16 @@ #define GL2PS_BEGIN_STIPPLE_TOKEN 5 #define GL2PS_END_STIPPLE_TOKEN 6 #define GL2PS_POINT_SIZE_TOKEN 7 -#define GL2PS_LINE_WIDTH_TOKEN 8 -#define GL2PS_BEGIN_BLEND_TOKEN 9 -#define GL2PS_END_BLEND_TOKEN 10 -#define GL2PS_SRC_BLEND_TOKEN 11 -#define GL2PS_DST_BLEND_TOKEN 12 -#define GL2PS_IMAGEMAP_TOKEN 13 -#define GL2PS_DRAW_PIXELS_TOKEN 14 -#define GL2PS_TEXT_TOKEN 15 +#define GL2PS_LINE_CAP_TOKEN 8 +#define GL2PS_LINE_JOIN_TOKEN 9 +#define GL2PS_LINE_WIDTH_TOKEN 10 +#define GL2PS_BEGIN_BLEND_TOKEN 11 +#define GL2PS_END_BLEND_TOKEN 12 +#define GL2PS_SRC_BLEND_TOKEN 13 +#define GL2PS_DST_BLEND_TOKEN 14 +#define GL2PS_IMAGEMAP_TOKEN 15 +#define GL2PS_DRAW_PIXELS_TOKEN 16 +#define GL2PS_TEXT_TOKEN 17 typedef enum { T_UNDEFINED = -1, @@ -119,7 +107,6 @@ typedef enum { T_VAR_ALPHA = 1<<4 } GL2PS_TRIANGLE_PROPERTY; -typedef GLfloat GL2PSxyz[3]; typedef GLfloat GL2PSplane[4]; typedef struct _GL2PSbsptree2d GL2PSbsptree2d; @@ -142,11 +129,6 @@ struct _GL2PSbsptree { GL2PSbsptree *front, *back; }; -typedef struct { - GL2PSxyz xyz; - GL2PSrgba rgba; -} GL2PSvertex; - typedef struct { GL2PSvertex vertex[3]; int prop; @@ -182,7 +164,7 @@ typedef struct { GLshort type, numverts; GLushort pattern; char boundary, offset, culled; - GLint factor; + GLint factor, linecap, linejoin; GLfloat width, ofactor, ounits; GL2PSvertex *verts; union { @@ -209,6 +191,7 @@ typedef struct{ typedef struct { /* General */ GLint format, sort, options, colorsize, colormode, buffersize; + GLint lastlinecap, lastlinejoin; char *title, *producer, *filename; GLboolean boundary, blending; GLfloat *feedback, lastlinewidth; @@ -220,6 +203,8 @@ typedef struct { FILE *stream; GL2PScompress *compress; GLboolean header; + GL2PSvertex rasterpos; + GLboolean forcerasterpos; /* BSP-specific */ GLint maxbestroot; @@ -878,13 +863,20 @@ static GLint gl2psAddText(GLint type, const char *str, const char *fontname, if(gl2ps->options & GL2PS_NO_TEXT) return GL2PS_SUCCESS; - glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); - if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ - - glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); + if (gl2ps->forcerasterpos) { + pos[0] = gl2ps->rasterpos.xyz[0]; + pos[1] = gl2ps->rasterpos.xyz[1]; + pos[2] = gl2ps->rasterpos.xyz[2]; + pos[3] = 1.f; + } + else { + glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); + if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ + glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); + } prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); - prim->type = type; + prim->type = (GLshort)type; prim->boundary = 0; prim->numverts = 1; prim->verts = (GL2PSvertex*)gl2psMalloc(sizeof(GL2PSvertex)); @@ -898,10 +890,23 @@ static GLint gl2psAddText(GLint type, const char *str, const char *fontname, prim->pattern = 0; prim->factor = 0; prim->width = 1; - if (color) + prim->linecap = 0; + prim->linejoin = 0; + + if (color) { memcpy(prim->verts[0].rgba, color, 4 * sizeof(float)); - else - glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); + } + else { + if (gl2ps->forcerasterpos) { + prim->verts[0].rgba[0] = gl2ps->rasterpos.rgba[0]; + prim->verts[0].rgba[1] = gl2ps->rasterpos.rgba[1]; + prim->verts[0].rgba[2] = gl2ps->rasterpos.rgba[2]; + prim->verts[0].rgba[3] = gl2ps->rasterpos.rgba[3]; + } + else { + glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); + } + } prim->data.text = (GL2PSstring*)gl2psMalloc(sizeof(GL2PSstring)); prim->data.text->str = (char*)gl2psMalloc((strlen(str)+1)*sizeof(char)); strcpy(prim->data.text->str, str); @@ -911,8 +916,16 @@ static GLint gl2psAddText(GLint type, const char *str, const char *fontname, prim->data.text->alignment = alignment; prim->data.text->angle = angle; - gl2psListAdd(gl2ps->auxprimitives, &prim); - glPassThrough(GL2PS_TEXT_TOKEN); + gl2ps->forcerasterpos = GL_FALSE; + + /* If no OpenGL context, just add directly to primitives */ + if (gl2ps->options & GL2PS_NO_OPENGL_CONTEXT) { + gl2psListAdd(gl2ps->primitives, &prim); + } + else { + gl2psListAdd(gl2ps->auxprimitives, &prim); + glPassThrough(GL2PS_TEXT_TOKEN); + } return GL2PS_SUCCESS; } @@ -1031,6 +1044,12 @@ static void gl2psInitTriangle(GL2PStriangle *t) /* Miscellaneous helper routines */ +static void gl2psResetLineProperties(void) +{ + gl2ps->lastlinewidth = 0.; + gl2ps->lastlinecap = gl2ps->lastlinejoin = 0; +} + static GL2PSprimitive *gl2psCopyPrimitive(GL2PSprimitive *p) { GL2PSprimitive *prim; @@ -1052,6 +1071,8 @@ static GL2PSprimitive *gl2psCopyPrimitive(GL2PSprimitive *p) prim->factor = p->factor; prim->culled = p->culled; prim->width = p->width; + prim->linecap = p->linecap; + prim->linejoin = p->linejoin; prim->verts = (GL2PSvertex*)gl2psMalloc(p->numverts*sizeof(GL2PSvertex)); memcpy(prim->verts, p->verts, p->numverts * sizeof(GL2PSvertex)); @@ -1250,6 +1271,8 @@ static void gl2psCreateSplitPrimitive(GL2PSprimitive *parent, GL2PSplane plane, child->pattern = parent->pattern; child->factor = parent->factor; child->width = parent->width; + child->linecap = parent->linecap; + child->linejoin = parent->linejoin; child->numverts = numverts; child->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); @@ -1388,6 +1411,8 @@ static void gl2psDivideQuad(GL2PSprimitive *quad, (*t1)->pattern = (*t2)->pattern = quad->pattern; (*t1)->factor = (*t2)->factor = quad->factor; (*t1)->width = (*t2)->width = quad->width; + (*t1)->linecap = (*t2)->linecap = quad->linecap; + (*t1)->linejoin = (*t2)->linejoin = quad->linejoin; (*t1)->verts = (GL2PSvertex*)gl2psMalloc(3 * sizeof(GL2PSvertex)); (*t2)->verts = (GL2PSvertex*)gl2psMalloc(3 * sizeof(GL2PSvertex)); (*t1)->verts[0] = quad->verts[0]; @@ -1929,6 +1954,8 @@ static GL2PSprimitive *gl2psCreateSplitPrimitive2D(GL2PSprimitive *parent, child->pattern = parent->pattern; child->factor = parent->factor; child->width = parent->width; + child->linecap = parent->linecap; + child->linejoin = parent->linejoin; child->numverts = numverts; child->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); for(i = 0; i < numverts; i++){ @@ -2120,6 +2147,8 @@ static void gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list) b->factor = prim->factor; b->culled = prim->culled; b->width = prim->width; + b->linecap = prim->linecap; + b->linejoin = prim->linejoin; b->boundary = 0; b->numverts = 2; b->verts = (GL2PSvertex*)gl2psMalloc(2 * sizeof(GL2PSvertex)); @@ -2185,11 +2214,12 @@ static void gl2psBuildPolygonBoundary(GL2PSbsptree *tree) * *********************************************************************/ -static void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, - GL2PSvertex *verts, GLint offset, - GLfloat ofactor, GLfloat ounits, - GLushort pattern, GLint factor, - GLfloat width, char boundary) +GL2PSDLL_API void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, + GL2PSvertex *verts, GLint offset, + GLfloat ofactor, GLfloat ounits, + GLushort pattern, GLint factor, + GLfloat width, GLint linecap, + GLint linejoin,char boundary) { GL2PSprimitive *prim; @@ -2199,12 +2229,14 @@ static void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, prim->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); memcpy(prim->verts, verts, numverts * sizeof(GL2PSvertex)); prim->boundary = boundary; - prim->offset = offset; + prim->offset = (char)offset; prim->ofactor = ofactor; prim->ounits = ounits; prim->pattern = pattern; prim->factor = factor; prim->width = width; + prim->linecap = linecap; + prim->linejoin = linejoin; prim->culled = 0; /* FIXME: here we should have an option to split stretched @@ -2244,7 +2276,8 @@ static void gl2psParseFeedbackBuffer(GLint used) GLushort pattern = 0; GLboolean boundary; GLint i, sizeoffloat, count, v, vtot, offset = 0, factor = 0, auxindex = 0; - GLfloat lwidth = 1.0F, psize = 1.0F, ofactor=1.0F, ounits=1.0F; + GLint lcap = 0, ljoin = 0; + GLfloat lwidth = 1.0F, psize = 1.0F, ofactor = 0.0F, ounits = 0.0F; GLfloat *current; GL2PSvertex vertices[3]; GL2PSprimitive *prim; @@ -2265,7 +2298,7 @@ static void gl2psParseFeedbackBuffer(GLint used) current += i; used -= i; gl2psAddPolyPrimitive(GL2PS_POINT, 1, vertices, 0, 0.0, 0.0, - pattern, factor, psize, 0); + pattern, factor, psize, lcap, ljoin, 0); break; case GL_LINE_TOKEN : case GL_LINE_RESET_TOKEN : @@ -2278,7 +2311,7 @@ static void gl2psParseFeedbackBuffer(GLint used) current += i; used -= i; gl2psAddPolyPrimitive(GL2PS_LINE, 2, vertices, 0, 0.0, 0.0, - pattern, factor, lwidth, 0); + pattern, factor, lwidth, lcap, ljoin, 0); break; case GL_POLYGON_TOKEN : count = (GLint)current[1]; @@ -2302,7 +2335,8 @@ static void gl2psParseFeedbackBuffer(GLint used) else flag = 0; gl2psAddPolyPrimitive(GL2PS_TRIANGLE, 3, vertices, offset, ofactor, - ounits, pattern, factor, 1, flag); + ounits, pattern, factor, 1, lcap, ljoin, + flag); vertices[1] = vertices[2]; } else @@ -2336,7 +2370,7 @@ static void gl2psParseFeedbackBuffer(GLint used) break; case GL2PS_BEGIN_BOUNDARY_TOKEN : boundary = GL_TRUE; break; case GL2PS_END_BOUNDARY_TOKEN : boundary = GL_FALSE; break; - case GL2PS_END_STIPPLE_TOKEN : pattern = factor = 0; break; + case GL2PS_END_STIPPLE_TOKEN : pattern = 0; factor = 0; break; case GL2PS_BEGIN_BLEND_TOKEN : gl2ps->blending = GL_TRUE; break; case GL2PS_END_BLEND_TOKEN : gl2ps->blending = GL_FALSE; break; case GL2PS_BEGIN_STIPPLE_TOKEN : @@ -2362,6 +2396,16 @@ static void gl2psParseFeedbackBuffer(GLint used) used -= 2; psize = current[1]; break; + case GL2PS_LINE_CAP_TOKEN : + current += 2; + used -= 2; + lcap = current[1]; + break; + case GL2PS_LINE_JOIN_TOKEN : + current += 2; + used -= 2; + ljoin = current[1]; + break; case GL2PS_LINE_WIDTH_TOKEN : current += 2; used -= 2; @@ -2475,7 +2519,7 @@ static void gl2psPrintPostScriptPixmap(GLfloat x, GLfloat y, GL2PSimage *im) { GLuint nbhex, nbyte, nrgb, nbits; GLuint row, col, ibyte, icase; - GLfloat dr, dg, db, fgrey; + GLfloat dr = 0., dg = 0., db = 0., fgrey; unsigned char red = 0, green = 0, blue = 0, b, grey; GLuint width = (GLuint)im->width; GLuint height = (GLuint)im->height; @@ -2757,7 +2801,6 @@ static void gl2psPrintPostScriptHeader(void) gl2psPrintf("%%%%BeginProlog\n" "/gl2psdict 64 dict def gl2psdict begin\n" - "0 setlinecap 0 setlinejoin\n" "/tryPS3shading %s def %% set to false to force subdivision\n" "/rThreshold %g def %% red component subdivision threshold\n" "/gThreshold %g def %% green component subdivision threshold\n" @@ -2768,7 +2811,9 @@ static void gl2psPrintPostScriptHeader(void) gl2psPrintf("/BD { bind def } bind def\n" "/C { setrgbcolor } BD\n" "/G { 0.082 mul exch 0.6094 mul add exch 0.3086 mul add neg 1.0 add setgray } BD\n" - "/W { setlinewidth } BD\n"); + "/W { setlinewidth } BD\n" + "/LC { setlinecap } BD\n" + "/LJ { setlinejoin } BD\n"); gl2psPrintf("/FC { findfont exch /SH exch def SH scalefont setfont } BD\n" "/SW { dup stringwidth pop } BD\n" @@ -3043,6 +3088,8 @@ static void gl2psPrintPostScriptPrimitive(void *data) if(!gl2psSamePosition(gl2ps->lastvertex.xyz, prim->verts[0].xyz) || !gl2psSameColor(gl2ps->lastrgba, prim->verts[0].rgba) || gl2ps->lastlinewidth != prim->width || + gl2ps->lastlinecap != prim->linecap || + gl2ps->lastlinejoin != prim->linejoin || gl2ps->lastpattern != prim->pattern || gl2ps->lastfactor != prim->factor){ /* End the current line if the new segment does not start where @@ -3061,6 +3108,14 @@ static void gl2psPrintPostScriptPrimitive(void *data) gl2ps->lastlinewidth = prim->width; gl2psPrintf("%g W\n", gl2ps->lastlinewidth); } + if(gl2ps->lastlinecap != prim->linecap){ + gl2ps->lastlinecap = prim->linecap; + gl2psPrintf("%d LC\n", gl2ps->lastlinecap); + } + if(gl2ps->lastlinejoin != prim->linejoin){ + gl2ps->lastlinejoin = prim->linejoin; + gl2psPrintf("%d LJ\n", gl2ps->lastlinejoin); + } gl2psPrintPostScriptDash(prim->pattern, prim->factor, "setdash"); gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %s\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], @@ -3182,6 +3237,9 @@ static void gl2psPrintPostScriptBeginViewport(GLint viewport[4]) gl2ps->header = GL_FALSE; } + gl2psResetPostScriptColor(); + gl2psResetLineProperties(); + gl2psPrintf("gsave\n" "1.0 1.0 scale\n"); @@ -3369,6 +3427,8 @@ static void gl2psPrintTeXBeginViewport(GLint viewport[4]) (void) viewport; /* not used */ glRenderMode(GL_FEEDBACK); + gl2psResetLineProperties(); + if(gl2ps->header){ gl2psPrintTeXHeader(); gl2ps->header = GL_FALSE; @@ -3456,6 +3516,22 @@ static int gl2psPrintPDFLineWidth(GLfloat lw) return gl2psPrintf("%g w\n", lw); } +static int gl2psPrintPDFLineCap(GLint lc) +{ + if(gl2ps->lastlinecap == lc) + return 0; + else + return gl2psPrintf("%d J\n", lc); +} + +static int gl2psPrintPDFLineJoin(GLint lj) +{ + if(gl2ps->lastlinejoin == lj) + return 0; + else + return gl2psPrintf("%d j\n", lj); +} + static void gl2psPutPDFText(GL2PSstring *text, int cnt, GLfloat x, GLfloat y) { GLfloat rad, crad, srad; @@ -3483,8 +3559,9 @@ static void gl2psPutPDFText(GL2PSstring *text, int cnt, GLfloat x, GLfloat y) } } -static void gl2psPutPDFSpecial(GL2PSstring *text) +static void gl2psPutPDFSpecial(int prim, int sec, GL2PSstring *text) { + gl2ps->streamlength += gl2psPrintf("/GS%d%d gs\n", prim, sec); gl2ps->streamlength += gl2psPrintf("%s\n", text->str); } @@ -3495,7 +3572,8 @@ static void gl2psPutPDFImage(GL2PSimage *image, int cnt, GLfloat x, GLfloat y) "%d 0 0 %d %f %f cm\n" "/Im%d Do\n" "Q\n", - (int)image->width, (int)image->height, x, y, cnt); + (int)(image->zoom_x * image->width), (int)(image->zoom_y * image->height), + x, y, cnt); } static void gl2psPDFstacksInit(void) @@ -3532,6 +3610,8 @@ static void gl2psPDFgroupListInit(void) GLushort lastpattern = 0; GLint lastfactor = 0; GLfloat lastwidth = 1; + GLint lastlinecap = 0; + GLint lastlinejoin = 0; GL2PStriangle lastt, tmpt; int lastTriangleWasNotSimpleWithSameColor = 0; @@ -3560,6 +3640,7 @@ static void gl2psPDFgroupListInit(void) break; case GL2PS_LINE: if(lasttype != p->type || lastwidth != p->width || + lastlinecap != p->linecap || lastlinejoin != p->linejoin || lastpattern != p->pattern || lastfactor != p->factor || !gl2psSameColor(p->verts[0].rgba, lastrgba)){ gl2psPDFgroupObjectInit(&gro); @@ -3573,6 +3654,8 @@ static void gl2psPDFgroupListInit(void) lastpattern = p->pattern; lastfactor = p->factor; lastwidth = p->width; + lastlinecap = p->linecap; + lastlinejoin = p->linejoin; lastrgba[0] = p->verts[0].rgba[0]; lastrgba[1] = p->verts[0].rgba[1]; lastrgba[2] = p->verts[0].rgba[2]; @@ -3680,7 +3763,7 @@ static void gl2psSortOutTrianglePDFgroup(GL2PSpdfgroup *gro) static void gl2psPDFgroupListWriteMainStream(void) { - int i, j, lastel; + int i, j, lastel, count; GL2PSprimitive *prim = NULL, *prev = NULL; GL2PSpdfgroup *gro; GL2PStriangle t; @@ -3688,7 +3771,9 @@ static void gl2psPDFgroupListWriteMainStream(void) if(!gl2ps->pdfgrouplist) return; - for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ + count = gl2psListNbr(gl2ps->pdfgrouplist); + + for(i = 0; i < count; ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); lastel = gl2psListNbr(gro->ptrlist) - 1; @@ -3717,6 +3802,8 @@ static void gl2psPDFgroupListWriteMainStream(void) order to get nice stippling even when the individual segments are smaller than the stipple */ gl2ps->streamlength += gl2psPrintPDFLineWidth(prim->width); + gl2ps->streamlength += gl2psPrintPDFLineCap(prim->linecap); + gl2ps->streamlength += gl2psPrintPDFLineJoin(prim->linejoin); gl2ps->streamlength += gl2psPrintPDFStrokeColor(prim->verts[0].rgba); gl2ps->streamlength += gl2psPrintPostScriptDash(prim->pattern, prim->factor, "d"); /* start new path */ @@ -3859,9 +3946,13 @@ static void gl2psPDFgroupListWriteMainStream(void) } break; case GL2PS_SPECIAL: + lastel = gl2psListNbr(gro->ptrlist) - 1; + if(lastel < 0) + continue; + for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); - gl2psPutPDFSpecial(prim->data.text); + gl2psPutPDFSpecial(i, j, prim->data.text); } default: break; @@ -3913,7 +4004,6 @@ static int gl2psPDFgroupListWriteShaderResources(void) } /* Images & Mask Shader XObject names */ - static int gl2psPDFgroupListWriteXObjectResources(void) { int i; @@ -4502,8 +4592,8 @@ static int gl2psPrintPDFShaderMask(int obj, int childobj) (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); len = (childobj>0) - ? strlen("/TrSh sh\n") + (int)log10((double)childobj)+1 - : strlen("/TrSh0 sh\n"); + ? (int)strlen("/TrSh sh\n") + (int)log10((double)childobj)+1 + : (int)strlen("/TrSh0 sh\n"); offs += fprintf(gl2ps->stream, "/Length %d\n" @@ -4837,6 +4927,8 @@ static void gl2psPrintPDFBeginViewport(GLint viewport[4]) glRenderMode(GL_FEEDBACK); + gl2psResetLineProperties(); + if(gl2ps->header){ gl2psPrintPDFHeader(); gl2ps->header = GL_FALSE; @@ -4978,7 +5070,7 @@ static void gl2psPrintSVGHeader(void) } /* group all the primitives and disable antialiasing */ - gl2psPrintf("<g shape-rendering=\"crispEdges\">\n"); + gl2psPrintf("<g>\n"); } static void gl2psPrintSVGSmoothTriangle(GL2PSxyz xyz[3], GL2PSrgba rgba[3]) @@ -4996,6 +5088,7 @@ static void gl2psPrintSVGSmoothTriangle(GL2PSxyz xyz[3], GL2PSrgba rgba[3]) gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("<polygon fill=\"%s\" ", col); if(rgba[0][3] < 1.0F) gl2psPrintf("fill-opacity=\"%g\" ", rgba[0][3]); + gl2psPrintf("shape-rendering=\"crispEdges\" "); gl2psPrintf("points=\"%g,%g %g,%g %g,%g\"/>\n", xyz[0][0], xyz[0][1], xyz[1][0], xyz[1][1], xyz[2][0], xyz[2][1]); } @@ -5121,6 +5214,7 @@ static void gl2psPrintSVGPrimitive(void *data) GL2PSxyz xyz[4]; GL2PSrgba rgba[4]; char col[32]; + char lcap[7], ljoin[7]; int newline; prim = *(GL2PSprimitive**)data; @@ -5146,6 +5240,8 @@ static void gl2psPrintSVGPrimitive(void *data) if(!gl2psSamePosition(gl2ps->lastvertex.xyz, prim->verts[0].xyz) || !gl2psSameColor(gl2ps->lastrgba, prim->verts[0].rgba) || gl2ps->lastlinewidth != prim->width || + gl2ps->lastlinecap != prim->linecap || + gl2ps->lastlinejoin != prim->linejoin || gl2ps->lastpattern != prim->pattern || gl2ps->lastfactor != prim->factor){ /* End the current line if the new segment does not start where @@ -5161,12 +5257,38 @@ static void gl2psPrintSVGPrimitive(void *data) gl2ps->lastvertex = prim->verts[1]; gl2psSetLastColor(prim->verts[0].rgba); gl2ps->lastlinewidth = prim->width; + gl2ps->lastlinecap = prim->linecap; + gl2ps->lastlinejoin = prim->linejoin; gl2ps->lastpattern = prim->pattern; gl2ps->lastfactor = prim->factor; if(newline){ gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("<polyline fill=\"none\" stroke=\"%s\" stroke-width=\"%g\" ", col, prim->width); + switch (prim->linecap){ + case GL2PS_LINE_CAP_BUTT: + sprintf (lcap, "%s", "butt"); + break; + case GL2PS_LINE_CAP_ROUND: + sprintf (lcap, "%s", "round"); + break; + case GL2PS_LINE_CAP_SQUARE: + sprintf (lcap, "%s", "square"); + break; + } + switch (prim->linejoin){ + case GL2PS_LINE_JOIN_MITER: + sprintf (ljoin, "%s", "miter"); + break; + case GL2PS_LINE_JOIN_ROUND: + sprintf (ljoin, "%s", "round"); + break; + case GL2PS_LINE_JOIN_BEVEL: + sprintf (ljoin, "%s", "bevel"); + break; + } + gl2psPrintf("stroke-linecap=\"%s\" stroke-linejoin=\"%s\" ", + lcap, ljoin); if(rgba[0][3] < 1.0F) gl2psPrintf("stroke-opacity=\"%g\" ", rgba[0][3]); gl2psPrintSVGDash(prim->pattern, prim->factor); gl2psPrintf("points=\"%g,%g ", xyz[0][0], xyz[0][1]); @@ -5193,38 +5315,38 @@ static void gl2psPrintSVGPrimitive(void *data) -prim->data.text->angle, xyz[0][0], xyz[0][1]); switch(prim->data.text->alignment){ case GL2PS_TEXT_C: - gl2psPrintf("text-anchor=\"middle\" baseline-shift=\"%d\" ", - -prim->data.text->fontsize / 2); + gl2psPrintf("text-anchor=\"middle\" dy=\"%d\" ", + prim->data.text->fontsize / 2); break; case GL2PS_TEXT_CL: - gl2psPrintf("text-anchor=\"start\" baseline-shift=\"%d\" ", - -prim->data.text->fontsize / 2); + gl2psPrintf("text-anchor=\"start\" dy=\"%d\" ", + prim->data.text->fontsize / 2); break; case GL2PS_TEXT_CR: - gl2psPrintf("text-anchor=\"end\" baseline-shift=\"%d\" ", - -prim->data.text->fontsize / 2); + gl2psPrintf("text-anchor=\"end\" dy=\"%d\" ", + prim->data.text->fontsize / 2); break; case GL2PS_TEXT_B: - gl2psPrintf("text-anchor=\"middle\" baseline-shift=\"0\" "); + gl2psPrintf("text-anchor=\"middle\" dy=\"0\" "); break; case GL2PS_TEXT_BR: - gl2psPrintf("text-anchor=\"end\" baseline-shift=\"0\" "); + gl2psPrintf("text-anchor=\"end\" dy=\"0\" "); break; case GL2PS_TEXT_T: - gl2psPrintf("text-anchor=\"middle\" baseline-shift=\"%d\" ", - -prim->data.text->fontsize); + gl2psPrintf("text-anchor=\"middle\" dy=\"%d\" ", + prim->data.text->fontsize); break; case GL2PS_TEXT_TL: - gl2psPrintf("text-anchor=\"start\" baseline-shift=\"%d\" ", - -prim->data.text->fontsize); + gl2psPrintf("text-anchor=\"start\" dy=\"%d\" ", + prim->data.text->fontsize); break; case GL2PS_TEXT_TR: - gl2psPrintf("text-anchor=\"end\" baseline-shift=\"%d\" ", - -prim->data.text->fontsize); + gl2psPrintf("text-anchor=\"end\" dy=\"%d\" ", + prim->data.text->fontsize); break; case GL2PS_TEXT_BL: default: /* same as GL2PS_TEXT_BL */ - gl2psPrintf("text-anchor=\"start\" baseline-shift=\"0\" "); + gl2psPrintf("text-anchor=\"start\" dy=\"0\" "); break; } if(!strcmp(prim->data.text->fontname, "Times-Roman")) @@ -5279,6 +5401,8 @@ static void gl2psPrintSVGBeginViewport(GLint viewport[4]) glRenderMode(GL_FEEDBACK); + gl2psResetLineProperties(); + if(gl2ps->header){ gl2psPrintSVGHeader(); gl2ps->header = GL_FALSE; @@ -5296,11 +5420,12 @@ static void gl2psPrintSVGBeginViewport(GLint viewport[4]) rgba[3] = 1.0F; } gl2psSVGGetColorString(rgba, col); - gl2psPrintf("<polygon fill=\"%s\" points=\"%d,%d %d,%d %d,%d %d,%d\"/>\n", col, + gl2psPrintf("<polygon fill=\"%s\" points=\"%d,%d %d,%d %d,%d %d,%d\" ", col, x, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - (y + h), x, gl2ps->viewport[3] - (y + h)); + gl2psPrintf("shape-rendering=\"crispEdges\"/>\n"); } gl2psPrintf("<clipPath id=\"cp%d%d%d%d\">\n", x, y, w, h); @@ -5443,6 +5568,34 @@ static void gl2psPrintPGFPrimitive(void *data) gl2ps->lastlinewidth = prim->width; fprintf(gl2ps->stream, "\\pgfsetlinewidth{%fpt}\n", gl2ps->lastlinewidth); } + if(gl2ps->lastlinecap != prim->linecap){ + gl2ps->lastlinecap = prim->linecap; + switch (prim->linecap){ + case GL2PS_LINE_CAP_BUTT: + fprintf(gl2ps->stream, "\\pgfset%s\n", "buttcap"); + break; + case GL2PS_LINE_CAP_ROUND: + fprintf(gl2ps->stream, "\\pgfset%s\n", "roundcap"); + break; + case GL2PS_LINE_CAP_SQUARE: + fprintf(gl2ps->stream, "\\pgfset%s\n", "rectcap"); + break; + } + } + if(gl2ps->lastlinejoin != prim->linejoin){ + gl2ps->lastlinejoin = prim->linejoin; + switch (prim->linejoin){ + case GL2PS_LINE_JOIN_MITER: + fprintf(gl2ps->stream, "\\pgfset%s\n", "miterjoin"); + break; + case GL2PS_LINE_JOIN_ROUND: + fprintf(gl2ps->stream, "\\pgfset%s\n", "roundjoin"); + break; + case GL2PS_LINE_JOIN_BEVEL: + fprintf(gl2ps->stream, "\\pgfset%s\n", "beveljoin"); + break; + } + } gl2psPrintPGFDash(prim->pattern, prim->factor); fprintf(gl2ps->stream, "\\pgfpathmoveto{\\pgfpoint{%fpt}{%fpt}}\n" @@ -5456,6 +5609,34 @@ static void gl2psPrintPGFPrimitive(void *data) gl2ps->lastlinewidth = 0; fprintf(gl2ps->stream, "\\pgfsetlinewidth{0.01pt}\n"); } + if(gl2ps->lastlinecap != prim->linecap){ + gl2ps->lastlinecap = prim->linecap; + switch (prim->linecap){ + case GL2PS_LINE_CAP_BUTT: + fprintf(gl2ps->stream, "\\pgfset%s\n", "buttcap"); + break; + case GL2PS_LINE_CAP_ROUND: + fprintf(gl2ps->stream, "\\pgfset%s\n", "roundcap"); + break; + case GL2PS_LINE_CAP_SQUARE: + fprintf(gl2ps->stream, "\\pgfset%s\n", "rectcap"); + break; + } + } + if(gl2ps->lastlinejoin != prim->linejoin){ + gl2ps->lastlinejoin = prim->linejoin; + switch (prim->linejoin){ + case GL2PS_LINE_JOIN_MITER: + fprintf(gl2ps->stream, "\\pgfset%s\n", "miterjoin"); + break; + case GL2PS_LINE_JOIN_ROUND: + fprintf(gl2ps->stream, "\\pgfset%s\n", "roundjoin"); + break; + case GL2PS_LINE_JOIN_BEVEL: + fprintf(gl2ps->stream, "\\pgfset%s\n", "beveljoin"); + break; + } + } gl2psPrintPGFColor(prim->verts[0].rgba); fprintf(gl2ps->stream, "\\pgfpathmoveto{\\pgfpoint{%fpt}{%fpt}}\n" @@ -5513,6 +5694,8 @@ static void gl2psPrintPGFBeginViewport(GLint viewport[4]) glRenderMode(GL_FEEDBACK); + gl2psResetLineProperties(); + if(gl2ps->header){ gl2psPrintPGFHeader(); gl2ps->header = GL_FALSE; @@ -5611,9 +5794,11 @@ static GLint gl2psPrintPrimitives(void) { GL2PSbsptree *root; GL2PSxyz eye = {0.0F, 0.0F, 100.0F * GL2PS_ZSCALE}; - GLint used; + GLint used = 0; - used = glRenderMode(GL_RENDER); + if ((gl2ps->options & GL2PS_NO_OPENGL_CONTEXT) == GL2PS_NONE) { + used = glRenderMode(GL_RENDER); + } if(used < 0){ gl2psMsg(GL2PS_INFO, "OpenGL feedback buffer overflow"); @@ -5681,6 +5866,34 @@ static GLint gl2psPrintPrimitives(void) return GL2PS_SUCCESS; } +static GLboolean gl2psCheckOptions(GLint options, GLint colormode) +{ + if (options & GL2PS_NO_OPENGL_CONTEXT) { + if (options & GL2PS_DRAW_BACKGROUND) { + gl2psMsg(GL2PS_ERROR, "Options GL2PS_NO_OPENGL_CONTEXT and " + "GL2PS_DRAW_BACKGROUND are incompatible."); + return GL_FALSE; + } + if (options & GL2PS_USE_CURRENT_VIEWPORT) { + gl2psMsg(GL2PS_ERROR, "Options GL2PS_NO_OPENGL_CONTEXT and " + "GL2PS_USE_CURRENT_VIEWPORT are incompatible."); + return GL_FALSE; + } + if ((options & GL2PS_NO_BLENDING) == GL2PS_NONE) { + gl2psMsg(GL2PS_ERROR, "Option GL2PS_NO_OPENGL_CONTEXT requires " + "option GL2PS_NO_BLENDING."); + return GL_FALSE; + } + if (colormode != GL_RGBA) { + gl2psMsg(GL2PS_ERROR, "Option GL2PS_NO_OPENGL_CONTEXT requires colormode " + "to be GL_RGBA."); + return GL_FALSE; + } + } + + return GL_TRUE; +} + /********************************************************************* * * Public routines @@ -5704,6 +5917,13 @@ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, gl2ps = (GL2PScontext*)gl2psMalloc(sizeof(GL2PScontext)); + /* Validate options */ + if (gl2psCheckOptions(options, colormode) == GL_FALSE) { + gl2psFree(gl2ps); + gl2ps = NULL; + return GL2PS_ERROR; + } + if(format >= 0 && format < (GLint)(sizeof(gl2psbackends) / sizeof(gl2psbackends[0]))){ gl2ps->format = format; } @@ -5738,6 +5958,7 @@ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, } gl2ps->header = GL_TRUE; + gl2ps->forcerasterpos = GL_FALSE; gl2ps->maxbestroot = 10; gl2ps->options = options; gl2ps->compress = NULL; @@ -5775,6 +5996,8 @@ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, gl2ps->lastrgba[i] = -1.0F; } gl2ps->lastlinewidth = -1.0F; + gl2ps->lastlinecap = 0; + gl2ps->lastlinejoin = 0; gl2ps->lastpattern = 0; gl2ps->lastfactor = 0; gl2ps->imagetree = NULL; @@ -5786,14 +6009,22 @@ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, /* get default blending mode from current OpenGL state (enabled by default for SVG) */ - gl2ps->blending = (gl2ps->format == GL2PS_SVG) ? GL_TRUE : glIsEnabled(GL_BLEND); - glGetIntegerv(GL_BLEND_SRC, &gl2ps->blendfunc[0]); - glGetIntegerv(GL_BLEND_DST, &gl2ps->blendfunc[1]); + if ((gl2ps->options & GL2PS_NO_BLENDING) == GL2PS_NONE) { + gl2ps->blending = (gl2ps->format == GL2PS_SVG) ? GL_TRUE + : glIsEnabled(GL_BLEND); + glGetIntegerv(GL_BLEND_SRC, &gl2ps->blendfunc[0]); + glGetIntegerv(GL_BLEND_DST, &gl2ps->blendfunc[1]); + } + else { + gl2ps->blending = GL_FALSE; + } if(gl2ps->colormode == GL_RGBA){ gl2ps->colorsize = 0; gl2ps->colormap = NULL; - glGetFloatv(GL_COLOR_CLEAR_VALUE, gl2ps->bgcolor); + if ((gl2ps->options & GL2PS_NO_OPENGL_CONTEXT) == GL2PS_NONE) { + glGetFloatv(GL_COLOR_CLEAR_VALUE, gl2ps->bgcolor); + } } else if(gl2ps->colormode == GL_COLOR_INDEX){ if(!colorsize || !colormap){ @@ -5847,9 +6078,16 @@ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, gl2ps->primitives = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); gl2ps->auxprimitives = gl2psListCreate(100, 100, sizeof(GL2PSprimitive*)); - gl2ps->feedback = (GLfloat*)gl2psMalloc(gl2ps->buffersize * sizeof(GLfloat)); - glFeedbackBuffer(gl2ps->buffersize, GL_3D_COLOR, gl2ps->feedback); - glRenderMode(GL_FEEDBACK); + + if ((gl2ps->options & GL2PS_NO_OPENGL_CONTEXT) == GL2PS_NONE) { + gl2ps->feedback = (GLfloat*)gl2psMalloc(gl2ps->buffersize * sizeof(GLfloat)); + glFeedbackBuffer(gl2ps->buffersize, GL_3D_COLOR, gl2ps->feedback); + glRenderMode(GL_FEEDBACK); + } + else { + gl2ps->feedback = NULL; + gl2ps->buffersize = 0; + } return GL2PS_SUCCESS; } @@ -5899,7 +6137,7 @@ GL2PSDLL_API GLint gl2psEndViewport(void) res = (gl2psbackends[gl2ps->format]->endViewport)(); /* reset last used colors, line widths */ - gl2ps->lastlinewidth = -1.0F; + gl2psResetLineProperties(); return res; } @@ -5929,6 +6167,11 @@ GL2PSDLL_API GLint gl2psSpecial(GLint format, const char *str) return gl2psAddText(GL2PS_SPECIAL, str, "", 0, format, 0.0F, NULL); } +GL2PSDLL_API GLint gl2psSpecialColor(GLint format, const char *str, GL2PSrgba rgba) +{ + return gl2psAddText(GL2PS_SPECIAL, str, "", 0, format, 0.0F, rgba); +} + GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, GLint xorig, GLint yorig, GLenum format, GLenum type, @@ -5952,12 +6195,22 @@ GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, return GL2PS_ERROR; } - glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); - if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ - - glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); - glGetFloatv(GL_ZOOM_X, &zoom_x); - glGetFloatv(GL_ZOOM_Y, &zoom_y); + if (gl2ps->forcerasterpos) { + pos[0] = gl2ps->rasterpos.xyz[0]; + pos[1] = gl2ps->rasterpos.xyz[1]; + pos[2] = gl2ps->rasterpos.xyz[2]; + pos[3] = 1.f; + /* Hardcode zoom factors (for now?) */ + zoom_x = 1.f; + zoom_y = 1.f; + } + else { + glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); + if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ + glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); + glGetFloatv(GL_ZOOM_X, &zoom_x); + glGetFloatv(GL_ZOOM_Y, &zoom_y); + } prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = GL2PS_PIXMAP; @@ -5974,7 +6227,15 @@ GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, prim->pattern = 0; prim->factor = 0; prim->width = 1; - glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); + if (gl2ps->forcerasterpos) { + prim->verts[0].rgba[0] = gl2ps->rasterpos.rgba[0]; + prim->verts[0].rgba[1] = gl2ps->rasterpos.rgba[1]; + prim->verts[0].rgba[2] = gl2ps->rasterpos.rgba[2]; + prim->verts[0].rgba[3] = gl2ps->rasterpos.rgba[3]; + } + else { + glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); + } prim->data.image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); prim->data.image->width = width; prim->data.image->height = height; @@ -5983,6 +6244,8 @@ GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, prim->data.image->format = format; prim->data.image->type = type; + gl2ps->forcerasterpos = GL_FALSE; + switch(format){ case GL_RGBA: if(gl2ps->options & GL2PS_NO_BLENDING || !gl2ps->blending){ @@ -6011,8 +6274,14 @@ GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, break; } - gl2psListAdd(gl2ps->auxprimitives, &prim); - glPassThrough(GL2PS_DRAW_PIXELS_TOKEN); + /* If no OpenGL context, just add directly to primitives */ + if ((gl2ps->options & GL2PS_NO_OPENGL_CONTEXT) == GL2PS_NONE) { + gl2psListAdd(gl2ps->auxprimitives, &prim); + glPassThrough(GL2PS_DRAW_PIXELS_TOKEN); + } + else { + gl2psListAdd(gl2ps->primitives, &prim); + } return GL2PS_SUCCESS; } @@ -6113,6 +6382,26 @@ GL2PSDLL_API GLint gl2psPointSize(GLfloat value) return GL2PS_SUCCESS; } +GL2PSDLL_API GLint gl2psLineCap(GLint value) +{ + if(!gl2ps) return GL2PS_UNINITIALIZED; + + glPassThrough(GL2PS_LINE_CAP_TOKEN); + glPassThrough(value); + + return GL2PS_SUCCESS; +} + +GL2PSDLL_API GLint gl2psLineJoin(GLint value) +{ + if(!gl2ps) return GL2PS_UNINITIALIZED; + + glPassThrough(GL2PS_LINE_JOIN_TOKEN); + glPassThrough(value); + + return GL2PS_SUCCESS; +} + GL2PSDLL_API GLint gl2psLineWidth(GLfloat value) { if(!gl2ps) return GL2PS_UNINITIALIZED; @@ -6142,6 +6431,10 @@ GL2PSDLL_API GLint gl2psSetOptions(GLint options) { if(!gl2ps) return GL2PS_UNINITIALIZED; + if(gl2psCheckOptions(options, gl2ps->colormode) == GL_FALSE) { + return GL2PS_ERROR; + } + gl2ps->options = options; return GL2PS_SUCCESS; @@ -6179,3 +6472,22 @@ GL2PSDLL_API GLint gl2psGetFileFormat() { return gl2ps->format; } + +GL2PSDLL_API GLint gl2psForceRasterPos(GL2PSvertex *vert) +{ + + if(!gl2ps) { + return GL2PS_UNINITIALIZED; + } + + gl2ps->forcerasterpos = GL_TRUE; + gl2ps->rasterpos.xyz[0] = vert->xyz[0]; + gl2ps->rasterpos.xyz[1] = vert->xyz[1]; + gl2ps->rasterpos.xyz[2] = vert->xyz[2]; + gl2ps->rasterpos.rgba[0] = vert->rgba[0]; + gl2ps->rasterpos.rgba[1] = vert->rgba[1]; + gl2ps->rasterpos.rgba[2] = vert->rgba[2]; + gl2ps->rasterpos.rgba[3] = vert->rgba[3]; + + return GL2PS_SUCCESS; +} diff --git a/Graphics/gl2ps.h b/Graphics/gl2ps.h index 2433465bb9910a9a9eebbbefc389ac4daff87b9f..513608a739ad0f59724acd5d408417cc637487c1 100644 --- a/Graphics/gl2ps.h +++ b/Graphics/gl2ps.h @@ -1,6 +1,6 @@ /* * GL2PS, an OpenGL to PostScript Printing Library - * Copyright (C) 1999-2015 C. Geuzaine + * Copyright (C) 1999-2017 C. Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: @@ -45,6 +45,7 @@ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) # if defined(_MSC_VER) # pragma warning(disable:4115) +# pragma warning(disable:4127) # pragma warning(disable:4996) # endif # include <windows.h> @@ -84,15 +85,15 @@ /* Version number */ #define GL2PS_MAJOR_VERSION 1 -#define GL2PS_MINOR_VERSION 3 -#define GL2PS_PATCH_VERSION 9 +#define GL2PS_MINOR_VERSION 4 +#define GL2PS_PATCH_VERSION 0 #define GL2PS_EXTRA_VERSION "" #define GL2PS_VERSION (GL2PS_MAJOR_VERSION + \ 0.01 * GL2PS_MINOR_VERSION + \ 0.0001 * GL2PS_PATCH_VERSION) -#define GL2PS_COPYRIGHT "(C) 1999-2015 C. Geuzaine" +#define GL2PS_COPYRIGHT "(C) 1999-2017 C. Geuzaine" /* Output file formats (the values and the ordering are important!) */ @@ -135,6 +136,7 @@ #define GL2PS_COMPRESS (1<<10) #define GL2PS_NO_BLENDING (1<<11) #define GL2PS_TIGHT_BOUNDING_BOX (1<<12) +#define GL2PS_NO_OPENGL_CONTEXT (1<<13) /* Arguments for gl2psEnable/gl2psDisable */ @@ -143,6 +145,17 @@ #define GL2PS_LINE_STIPPLE 3 #define GL2PS_BLEND 4 + +/* Arguments for gl2psLineCap/Join */ + +#define GL2PS_LINE_CAP_BUTT 0 +#define GL2PS_LINE_CAP_ROUND 1 +#define GL2PS_LINE_CAP_SQUARE 2 + +#define GL2PS_LINE_JOIN_MITER 0 +#define GL2PS_LINE_JOIN_ROUND 1 +#define GL2PS_LINE_JOIN_BEVEL 2 + /* Text alignment (o=raster position; default mode is BL): +---+ +---+ +---+ +---+ +---+ +---+ +-o-+ o---+ +---o | o | o | | o | | | | | | | | | | | | @@ -160,6 +173,25 @@ #define GL2PS_TEXT_TR 9 typedef GLfloat GL2PSrgba[4]; +typedef GLfloat GL2PSxyz[3]; + +typedef struct { + GL2PSxyz xyz; + GL2PSrgba rgba; +} GL2PSvertex; + +/* Primitive types */ +#define GL2PS_NO_TYPE -1 +#define GL2PS_TEXT 1 +#define GL2PS_POINT 2 +#define GL2PS_LINE 3 +#define GL2PS_QUADRANGLE 4 +#define GL2PS_TRIANGLE 5 +#define GL2PS_PIXMAP 6 +#define GL2PS_IMAGEMAP 7 +#define GL2PS_IMAGEMAP_WRITTEN 8 +#define GL2PS_IMAGEMAP_VISIBLE 9 +#define GL2PS_SPECIAL 10 #if defined(__cplusplus) extern "C" { @@ -184,15 +216,27 @@ GL2PSDLL_API GLint gl2psTextOptColor(const char *str, const char *fontname, GLshort fontsize, GLint align, GLfloat angle, GL2PSrgba color); GL2PSDLL_API GLint gl2psSpecial(GLint format, const char *str); +GL2PSDLL_API GLint gl2psSpecialColor(GLint format, const char *str, GL2PSrgba rgba); GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, GLint xorig, GLint yorig, GLenum format, GLenum type, const void *pixels); GL2PSDLL_API GLint gl2psEnable(GLint mode); GL2PSDLL_API GLint gl2psDisable(GLint mode); GL2PSDLL_API GLint gl2psPointSize(GLfloat value); +GL2PSDLL_API GLint gl2psLineCap(GLint value); +GL2PSDLL_API GLint gl2psLineJoin(GLint value); GL2PSDLL_API GLint gl2psLineWidth(GLfloat value); GL2PSDLL_API GLint gl2psBlendFunc(GLenum sfactor, GLenum dfactor); +/* referenced in the documentation, but not fully documented */ +GL2PSDLL_API GLint gl2psForceRasterPos(GL2PSvertex *vert); +GL2PSDLL_API void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, + GL2PSvertex *verts, GLint offset, + GLfloat ofactor, GLfloat ounits, + GLushort pattern, GLint factor, + GLfloat width, GLint linecap, + GLint linejoin, char boundary); + /* undocumented */ GL2PSDLL_API GLint gl2psDrawImageMap(GLsizei width, GLsizei height, const GLfloat position[3], diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp index 0899a3f911723859762659093b8546e3f847abc1..ad581332cd84939e3994f0217798733b544df316 100644 --- a/Mesh/HighOrder.cpp +++ b/Mesh/HighOrder.cpp @@ -7,6 +7,8 @@ // Koen Hillewaert // +#include <sstream> +#include "GmshConfig.h" #include "HighOrder.h" #include "MLine.h" #include "MTriangle.h" @@ -22,9 +24,10 @@ #include "fullMatrix.h" #include "BasisFactory.h" #include "MVertexRTree.h" -#include "OptHomFastCurving.h" -#include <sstream> +#if defined(HAVE_OPTHOM) +#include "OptHomFastCurving.h" +#endif // --------- Functions that help optimizing placement of points on geometry ----------- @@ -1654,6 +1657,7 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete, bool onlyVisi for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it) updateHighOrderVertices(*it, newHOVert[*it], onlyVisible); +#if defined(HAVE_OPTHOM) // Determine mesh dimension and curve BL elements FastCurvingParameters p; p.dim = 0; @@ -1662,8 +1666,9 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete, bool onlyVisi if (p.dim == 0) for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it) if ((*it)->getNumMeshElements() > 0) { p.dim = 2; break; } - // if (p.dim > 0) - // HighOrderMeshFastCurving(GModel::current(), p); + // if(p.dim > 0) + // HighOrderMeshFastCurving(GModel::current(), p); +#endif updatePeriodicEdgesAndFaces(m); diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp index ca83c97c47312143b2e313c256d68410f85c966d..79978c14feda7bd7c9e28bc50bd80f7e1c013bfd 100644 --- a/Mesh/meshGEdge.cpp +++ b/Mesh/meshGEdge.cpp @@ -646,7 +646,7 @@ void meshGEdge::operator() (GEdge *ge) return; } else if(ge->getBeginVertex() == ge->getEndVertex() && - ge->getBeginVertex()->edges().size() == 1){ + ge->getBeginVertex()->edges().size() == 1){ end_p = beg_p = ge->point(t_begin); Msg::Debug("Meshing periodic closed curve"); } diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp index 941516e3826b8d3d47ba243da9afc55c7cc27c7a..181fd97d5eca185cb2dbc7a84f770aad0dbb6422 100644 --- a/Mesh/meshGFaceDelaunayInsertion.cpp +++ b/Mesh/meshGFaceDelaunayInsertion.cpp @@ -828,7 +828,7 @@ bool insertVertex(bool force, GFace *gf, MVertex *v, double *param , MTri3 *t, else{ recurFindCavityAniso(gf, shell, cavity, metric, param, t, data); } - + return insertVertexB(shell, cavity, force, gf, v, param , t, allTets, activeTets, @@ -1059,7 +1059,7 @@ void bowyerWatson(GFace *gf, int MAXPNT, // if (equivalence)_printTris ("before.pos", AllTris.begin(), AllTris.end(), DATA); int nbSwaps = edgeSwapPass(gf, AllTris, SWCR_DEL, DATA); // _printTris ("after2.pos", AllTris, Us,Vs); - // Msg::Debug("Delaunization of the initial mesh done (%d swaps)", nbSwaps); + Msg::Debug("Delaunization of the initial mesh done (%d swaps)", nbSwaps); if(AllTris.empty()){ Msg::Error("No triangles in initial mesh"); diff --git a/Mesh/meshGRegionExtruded.cpp b/Mesh/meshGRegionExtruded.cpp index ac0c1a99c0330ab606c1a2369fbffc66b6168f3b..8ce236855d93741e9005bc3ee6c21c0fa683b03b 100644 --- a/Mesh/meshGRegionExtruded.cpp +++ b/Mesh/meshGRegionExtruded.cpp @@ -143,6 +143,23 @@ static void extrudeMesh(GFace *from, GRegion *to, MVertexRTree &pos) std::vector<MVertex*> embedded = from->getEmbeddedMeshVertices(); mesh_vertices.insert(mesh_vertices.end(), embedded.begin(), embedded.end()); + // add all vertices on surface seams + std::set<MVertex*> seam; + std::list<GEdge*> l_edges = from->edges(); + for (std::list<GEdge*>::const_iterator it = l_edges.begin(); + it != l_edges.end(); ++it){ + if ((*it)->isSeam(from)){ + seam.insert((*it)->mesh_vertices.begin(), (*it)->mesh_vertices.end()); + if((*it)->getBeginVertex()) + seam.insert((*it)->getBeginVertex()->mesh_vertices.begin(), + (*it)->getBeginVertex()->mesh_vertices.end()); + if((*it)->getEndVertex()) + seam.insert((*it)->getEndVertex()->mesh_vertices.begin(), + (*it)->getEndVertex()->mesh_vertices.end()); + } + } + mesh_vertices.insert(mesh_vertices.end(), seam.begin(), seam.end()); + // create extruded vertices for(unsigned int i = 0; i < mesh_vertices.size(); i++){ MVertex *v = mesh_vertices[i]; diff --git a/Mesh/yamakawa.cpp b/Mesh/yamakawa.cpp index f0266471c68a53f4cc937f6d1221f9b770015b4e..983fbf4695d3714b58685e0fed39829ab81f8ff3 100644 --- a/Mesh/yamakawa.cpp +++ b/Mesh/yamakawa.cpp @@ -74,9 +74,9 @@ namespace { } // Is this vertex in that hex? - bool inclusion(MVertex* vertex, const Hex& hex) { - return hex.contains(vertex); - } + //bool inclusion(MVertex* vertex, const Hex& hex) { + // return hex.contains(vertex); + //} // Is that vertex in that tet? bool tet_contains_vertex(MElement* tet, MVertex* v) { @@ -131,6 +131,7 @@ namespace { return is_combinatorially_sliver(tet, hex); } + /* double distance(MVertex* v1, MVertex* v2) { double val; double x, y, z; @@ -142,6 +143,7 @@ namespace { val = sqrt(x*x + y*y + z*z); return val; } + */ double distance(MVertex* v, MVertex* v1, MVertex* v2) { double val; @@ -261,10 +263,12 @@ namespace { return true; } + /* bool is_vertex_on_gmodel_boundary(MVertex* v) { return v->onWhat()->dim() < 3; } - + */ + /* bool is_hex_facet_on_gmodel_boundary(const Hex& hex, unsigned int f) { int count_boundary_vertices = 0; for (unsigned int i = 0; i < 4; ++i) { @@ -276,7 +280,8 @@ namespace { } return count_boundary_vertices == 4; } - + */ + /* bool is_hex_facet_planar(const Hex& hex, unsigned int facet_id, double max_angle = 15.) { std::vector<SPoint3> points(4); for (unsigned int v = 0; v < 4; ++v) { @@ -296,7 +301,7 @@ namespace { return true; } } - + */ unsigned int nb_tets_sharing_vertices(MVertex* v1, MVertex* v2, MVertex* v3, TetMeshConnectivity& tet_mesh) { @@ -3233,13 +3238,13 @@ void PostOp::matchQuadFace(MFace &f, MVertex* v1, MVertex* v2, MVertex* v3) { MVertex* vertices[3] = { v1, v2, v3 }; int n = 0, ind = -1; - MVertex *v; + //MVertex *v; for (int i = 0; i < 4; ++i) { if (f.getVertex(i) != v1 && f.getVertex(i) != v2 && f.getVertex(i) != v3) { ++n; - v = f.getVertex(i); + //v = f.getVertex(i); ind = i; } } @@ -6422,7 +6427,7 @@ void Recombinator_Graph::merge_clique(GRegion* gr, cliques_losses_graph<Hex*> &c multimap<int, set<Hex*> >::reverse_iterator it_allen = cl.allQ.rend(); int clique_counter = 0; std::set<MElement*> parts; - int clique_size = 0; + //int clique_size = 0; for (int i = 0; i < clique_number; i++) { it_all++; @@ -6432,7 +6437,7 @@ void Recombinator_Graph::merge_clique(GRegion* gr, cliques_losses_graph<Hex*> &c if (clique_counter >= 1) break; //cout << "--------------------- clique " << clique_counter << " made of "; - clique_size = it_all->second.size(); + //clique_size = it_all->second.size(); set<Hex*>::iterator ithex = it_all->second.begin(); set<Hex*>::iterator ithexen = it_all->second.end(); double quality = 0.; diff --git a/Numeric/mathEvaluator.cpp b/Numeric/mathEvaluator.cpp index 1dea4e31a4332ef01ee0d81fd30ad6bf084e81fc..06500a01a20fd25c7e2129fa19695ec440dec10b 100644 --- a/Numeric/mathEvaluator.cpp +++ b/Numeric/mathEvaluator.cpp @@ -8,8 +8,10 @@ #if defined(HAVE_MATHEX) mathEvaluator::mathEvaluator(std::vector<std::string> &expressions, - std::vector<std::string> &variables) + const std::vector<std::string> &variables) { + static std::string lastError; + _expressions.resize(expressions.size()); _variables.resize(variables.size(), 0.); bool error = false; @@ -22,11 +24,14 @@ mathEvaluator::mathEvaluator(std::vector<std::string> &expressions, _expressions[i]->parse(); } catch(smlib::mathex::error e) { - Msg::Error(e.what()); - std::string pos(_expressions[i]->stopposition(), ' '); - pos.push_back('^'); - Msg::Error(expressions[i].c_str()); - Msg::Error(pos.c_str()); + if(e.what() + expressions[i] != lastError){ + lastError = e.what() + expressions[i]; + Msg::Error(e.what()); + std::string pos(_expressions[i]->stopposition(), ' '); + pos.push_back('^'); + Msg::Error(expressions[i].c_str()); + Msg::Error(pos.c_str()); + } error = true; } } @@ -34,6 +39,7 @@ mathEvaluator::mathEvaluator(std::vector<std::string> &expressions, for(unsigned int i = 0; i < _expressions.size(); i++) delete(_expressions[i]); _expressions.clear(); + expressions.clear(); } } @@ -43,7 +49,7 @@ mathEvaluator::~mathEvaluator() delete(_expressions[i]); } -bool mathEvaluator::eval(std::vector<double> &values, std::vector<double> &res) +bool mathEvaluator::eval(const std::vector<double> &values, std::vector<double> &res) { if(values.size() != _variables.size()){ Msg::Error("Given %d value(s) for %d variable(s)", values.size(), _variables.size()); diff --git a/Numeric/mathEvaluator.h b/Numeric/mathEvaluator.h index 310cc4b523e096c4c01db6c8351a11bf9741493c..93aac398b9a8c51c54de6c957461ccd6cbfa2b40 100644 --- a/Numeric/mathEvaluator.h +++ b/Numeric/mathEvaluator.h @@ -24,11 +24,11 @@ class mathEvaluator{ // variables. If an error occurs the vector of expressions is // cleared. mathEvaluator(std::vector<std::string> &expressions, - std::vector<std::string> &variables); + const std::vector<std::string> &variables); ~mathEvaluator(); // evaluate the expression(s) using the given values and fill the // result vector. Returns true if the evaluation succeeded. - bool eval(std::vector<double> &values, std::vector<double> &res); + bool eval(const std::vector<double> &values, std::vector<double> &res); }; #else @@ -36,14 +36,14 @@ class mathEvaluator{ class mathEvaluator{ public: mathEvaluator(std::vector<std::string> &expressions, - std::vector<std::string> &variables) + const std::vector<std::string> &variables) { Msg::Error("Gmsh must be compiled with MathEx support to evaluate math " "expressions"); expressions.clear(); } ~mathEvaluator(){} - bool eval(std::vector<double> &values, std::vector<double> &res) + bool eval(const std::vector<double> &values, std::vector<double> &res) { return false; } diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l index bb393f21ae0725b059e310219d9495ff6f85c45e..98b4e0117df13c94ad4101b659cf77fc312573c4 100644 --- a/Parser/Gmsh.l +++ b/Parser/Gmsh.l @@ -15,6 +15,7 @@ #include "Parser.h" #include "Gmsh.tab.hpp" #include "GmshIO.h" +#include "Geo.h" // for NEWPOINT(), etc. void parsestring(char endchar); char *strsave(char *ptr); @@ -201,6 +202,7 @@ Function return tMacro; GMSH_MAJOR_VERSION return tGMSH_MAJOR_VERSION; GMSH_MINOR_VERSION return tGMSH_MINOR_VERSION; GMSH_PATCH_VERSION return tGMSH_PATCH_VERSION; +GeoEntity return tGeoEntity; GetEnv return tGetEnv; GetForced return tGetForced; GetForcedStr return tGetForcedStr; diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp index 7fd4b2379e0481d88584e168b9d83e209ed7eb17..012892071f399f46790a913062ea64bc13c4e992 100644 --- a/Parser/Gmsh.tab.cpp +++ b/Parser/Gmsh.tab.cpp @@ -181,122 +181,123 @@ tRectangle = 362, tDisk = 363, tWire = 364, - tCharacteristic = 365, - tLength = 366, - tParametric = 367, - tElliptic = 368, - tRefineMesh = 369, - tAdaptMesh = 370, - tRelocateMesh = 371, - tSetFactory = 372, - tThruSections = 373, - tWedge = 374, - tFillet = 375, - tChamfer = 376, - tPlane = 377, - tRuled = 378, - tTransfinite = 379, - tPhysical = 380, - tCompound = 381, - tPeriodic = 382, - tUsing = 383, - tPlugin = 384, - tDegenerated = 385, - tRecursive = 386, - tRotate = 387, - tTranslate = 388, - tSymmetry = 389, - tDilate = 390, - tExtrude = 391, - tLevelset = 392, - tAffine = 393, - tBooleanUnion = 394, - tBooleanIntersection = 395, - tBooleanDifference = 396, - tBooleanSection = 397, - tBooleanFragments = 398, - tThickSolid = 399, - tRecombine = 400, - tSmoother = 401, - tSplit = 402, - tDelete = 403, - tCoherence = 404, - tIntersect = 405, - tMeshAlgorithm = 406, - tReverse = 407, - tLayers = 408, - tScaleLast = 409, - tHole = 410, - tAlias = 411, - tAliasWithOptions = 412, - tCopyOptions = 413, - tQuadTriAddVerts = 414, - tQuadTriNoNewVerts = 415, - tRecombLaterals = 416, - tTransfQuadTri = 417, - tText2D = 418, - tText3D = 419, - tInterpolationScheme = 420, - tTime = 421, - tCombine = 422, - tBSpline = 423, - tBezier = 424, - tNurbs = 425, - tNurbsOrder = 426, - tNurbsKnots = 427, - tColor = 428, - tColorTable = 429, - tFor = 430, - tIn = 431, - tEndFor = 432, - tIf = 433, - tElseIf = 434, - tElse = 435, - tEndIf = 436, - tExit = 437, - tAbort = 438, - tField = 439, - tReturn = 440, - tCall = 441, - tSlide = 442, - tMacro = 443, - tShow = 444, - tHide = 445, - tGetValue = 446, - tGetStringValue = 447, - tGetEnv = 448, - tGetString = 449, - tGetNumber = 450, - tUnique = 451, - tHomology = 452, - tCohomology = 453, - tBetti = 454, - tExists = 455, - tFileExists = 456, - tGetForced = 457, - tGetForcedStr = 458, - tGMSH_MAJOR_VERSION = 459, - tGMSH_MINOR_VERSION = 460, - tGMSH_PATCH_VERSION = 461, - tGmshExecutableName = 462, - tSetPartition = 463, - tNameToString = 464, - tStringToName = 465, - tAFFECTDIVIDE = 466, - tAFFECTTIMES = 467, - tAFFECTMINUS = 468, - tAFFECTPLUS = 469, - tOR = 470, - tAND = 471, - tNOTEQUAL = 472, - tEQUAL = 473, - tGREATERGREATER = 474, - tLESSLESS = 475, - tGREATEROREQUAL = 476, - tLESSOREQUAL = 477, - UNARYPREC = 478, - tMINUSMINUS = 479, - tPLUSPLUS = 480 + tGeoEntity = 365, + tCharacteristic = 366, + tLength = 367, + tParametric = 368, + tElliptic = 369, + tRefineMesh = 370, + tAdaptMesh = 371, + tRelocateMesh = 372, + tSetFactory = 373, + tThruSections = 374, + tWedge = 375, + tFillet = 376, + tChamfer = 377, + tPlane = 378, + tRuled = 379, + tTransfinite = 380, + tPhysical = 381, + tCompound = 382, + tPeriodic = 383, + tUsing = 384, + tPlugin = 385, + tDegenerated = 386, + tRecursive = 387, + tRotate = 388, + tTranslate = 389, + tSymmetry = 390, + tDilate = 391, + tExtrude = 392, + tLevelset = 393, + tAffine = 394, + tBooleanUnion = 395, + tBooleanIntersection = 396, + tBooleanDifference = 397, + tBooleanSection = 398, + tBooleanFragments = 399, + tThickSolid = 400, + tRecombine = 401, + tSmoother = 402, + tSplit = 403, + tDelete = 404, + tCoherence = 405, + tIntersect = 406, + tMeshAlgorithm = 407, + tReverse = 408, + tLayers = 409, + tScaleLast = 410, + tHole = 411, + tAlias = 412, + tAliasWithOptions = 413, + tCopyOptions = 414, + tQuadTriAddVerts = 415, + tQuadTriNoNewVerts = 416, + tRecombLaterals = 417, + tTransfQuadTri = 418, + tText2D = 419, + tText3D = 420, + tInterpolationScheme = 421, + tTime = 422, + tCombine = 423, + tBSpline = 424, + tBezier = 425, + tNurbs = 426, + tNurbsOrder = 427, + tNurbsKnots = 428, + tColor = 429, + tColorTable = 430, + tFor = 431, + tIn = 432, + tEndFor = 433, + tIf = 434, + tElseIf = 435, + tElse = 436, + tEndIf = 437, + tExit = 438, + tAbort = 439, + tField = 440, + tReturn = 441, + tCall = 442, + tSlide = 443, + tMacro = 444, + tShow = 445, + tHide = 446, + tGetValue = 447, + tGetStringValue = 448, + tGetEnv = 449, + tGetString = 450, + tGetNumber = 451, + tUnique = 452, + tHomology = 453, + tCohomology = 454, + tBetti = 455, + tExists = 456, + tFileExists = 457, + tGetForced = 458, + tGetForcedStr = 459, + tGMSH_MAJOR_VERSION = 460, + tGMSH_MINOR_VERSION = 461, + tGMSH_PATCH_VERSION = 462, + tGmshExecutableName = 463, + tSetPartition = 464, + tNameToString = 465, + tStringToName = 466, + tAFFECTDIVIDE = 467, + tAFFECTTIMES = 468, + tAFFECTMINUS = 469, + tAFFECTPLUS = 470, + tOR = 471, + tAND = 472, + tNOTEQUAL = 473, + tEQUAL = 474, + tGREATERGREATER = 475, + tLESSLESS = 476, + tGREATEROREQUAL = 477, + tLESSOREQUAL = 478, + UNARYPREC = 479, + tMINUSMINUS = 480, + tPLUSPLUS = 481 }; #endif /* Tokens. */ @@ -407,122 +408,123 @@ #define tRectangle 362 #define tDisk 363 #define tWire 364 -#define tCharacteristic 365 -#define tLength 366 -#define tParametric 367 -#define tElliptic 368 -#define tRefineMesh 369 -#define tAdaptMesh 370 -#define tRelocateMesh 371 -#define tSetFactory 372 -#define tThruSections 373 -#define tWedge 374 -#define tFillet 375 -#define tChamfer 376 -#define tPlane 377 -#define tRuled 378 -#define tTransfinite 379 -#define tPhysical 380 -#define tCompound 381 -#define tPeriodic 382 -#define tUsing 383 -#define tPlugin 384 -#define tDegenerated 385 -#define tRecursive 386 -#define tRotate 387 -#define tTranslate 388 -#define tSymmetry 389 -#define tDilate 390 -#define tExtrude 391 -#define tLevelset 392 -#define tAffine 393 -#define tBooleanUnion 394 -#define tBooleanIntersection 395 -#define tBooleanDifference 396 -#define tBooleanSection 397 -#define tBooleanFragments 398 -#define tThickSolid 399 -#define tRecombine 400 -#define tSmoother 401 -#define tSplit 402 -#define tDelete 403 -#define tCoherence 404 -#define tIntersect 405 -#define tMeshAlgorithm 406 -#define tReverse 407 -#define tLayers 408 -#define tScaleLast 409 -#define tHole 410 -#define tAlias 411 -#define tAliasWithOptions 412 -#define tCopyOptions 413 -#define tQuadTriAddVerts 414 -#define tQuadTriNoNewVerts 415 -#define tRecombLaterals 416 -#define tTransfQuadTri 417 -#define tText2D 418 -#define tText3D 419 -#define tInterpolationScheme 420 -#define tTime 421 -#define tCombine 422 -#define tBSpline 423 -#define tBezier 424 -#define tNurbs 425 -#define tNurbsOrder 426 -#define tNurbsKnots 427 -#define tColor 428 -#define tColorTable 429 -#define tFor 430 -#define tIn 431 -#define tEndFor 432 -#define tIf 433 -#define tElseIf 434 -#define tElse 435 -#define tEndIf 436 -#define tExit 437 -#define tAbort 438 -#define tField 439 -#define tReturn 440 -#define tCall 441 -#define tSlide 442 -#define tMacro 443 -#define tShow 444 -#define tHide 445 -#define tGetValue 446 -#define tGetStringValue 447 -#define tGetEnv 448 -#define tGetString 449 -#define tGetNumber 450 -#define tUnique 451 -#define tHomology 452 -#define tCohomology 453 -#define tBetti 454 -#define tExists 455 -#define tFileExists 456 -#define tGetForced 457 -#define tGetForcedStr 458 -#define tGMSH_MAJOR_VERSION 459 -#define tGMSH_MINOR_VERSION 460 -#define tGMSH_PATCH_VERSION 461 -#define tGmshExecutableName 462 -#define tSetPartition 463 -#define tNameToString 464 -#define tStringToName 465 -#define tAFFECTDIVIDE 466 -#define tAFFECTTIMES 467 -#define tAFFECTMINUS 468 -#define tAFFECTPLUS 469 -#define tOR 470 -#define tAND 471 -#define tNOTEQUAL 472 -#define tEQUAL 473 -#define tGREATERGREATER 474 -#define tLESSLESS 475 -#define tGREATEROREQUAL 476 -#define tLESSOREQUAL 477 -#define UNARYPREC 478 -#define tMINUSMINUS 479 -#define tPLUSPLUS 480 +#define tGeoEntity 365 +#define tCharacteristic 366 +#define tLength 367 +#define tParametric 368 +#define tElliptic 369 +#define tRefineMesh 370 +#define tAdaptMesh 371 +#define tRelocateMesh 372 +#define tSetFactory 373 +#define tThruSections 374 +#define tWedge 375 +#define tFillet 376 +#define tChamfer 377 +#define tPlane 378 +#define tRuled 379 +#define tTransfinite 380 +#define tPhysical 381 +#define tCompound 382 +#define tPeriodic 383 +#define tUsing 384 +#define tPlugin 385 +#define tDegenerated 386 +#define tRecursive 387 +#define tRotate 388 +#define tTranslate 389 +#define tSymmetry 390 +#define tDilate 391 +#define tExtrude 392 +#define tLevelset 393 +#define tAffine 394 +#define tBooleanUnion 395 +#define tBooleanIntersection 396 +#define tBooleanDifference 397 +#define tBooleanSection 398 +#define tBooleanFragments 399 +#define tThickSolid 400 +#define tRecombine 401 +#define tSmoother 402 +#define tSplit 403 +#define tDelete 404 +#define tCoherence 405 +#define tIntersect 406 +#define tMeshAlgorithm 407 +#define tReverse 408 +#define tLayers 409 +#define tScaleLast 410 +#define tHole 411 +#define tAlias 412 +#define tAliasWithOptions 413 +#define tCopyOptions 414 +#define tQuadTriAddVerts 415 +#define tQuadTriNoNewVerts 416 +#define tRecombLaterals 417 +#define tTransfQuadTri 418 +#define tText2D 419 +#define tText3D 420 +#define tInterpolationScheme 421 +#define tTime 422 +#define tCombine 423 +#define tBSpline 424 +#define tBezier 425 +#define tNurbs 426 +#define tNurbsOrder 427 +#define tNurbsKnots 428 +#define tColor 429 +#define tColorTable 430 +#define tFor 431 +#define tIn 432 +#define tEndFor 433 +#define tIf 434 +#define tElseIf 435 +#define tElse 436 +#define tEndIf 437 +#define tExit 438 +#define tAbort 439 +#define tField 440 +#define tReturn 441 +#define tCall 442 +#define tSlide 443 +#define tMacro 444 +#define tShow 445 +#define tHide 446 +#define tGetValue 447 +#define tGetStringValue 448 +#define tGetEnv 449 +#define tGetString 450 +#define tGetNumber 451 +#define tUnique 452 +#define tHomology 453 +#define tCohomology 454 +#define tBetti 455 +#define tExists 456 +#define tFileExists 457 +#define tGetForced 458 +#define tGetForcedStr 459 +#define tGMSH_MAJOR_VERSION 460 +#define tGMSH_MINOR_VERSION 461 +#define tGMSH_PATCH_VERSION 462 +#define tGmshExecutableName 463 +#define tSetPartition 464 +#define tNameToString 465 +#define tStringToName 466 +#define tAFFECTDIVIDE 467 +#define tAFFECTTIMES 468 +#define tAFFECTMINUS 469 +#define tAFFECTPLUS 470 +#define tOR 471 +#define tAND 472 +#define tNOTEQUAL 473 +#define tEQUAL 474 +#define tGREATERGREATER 475 +#define tLESSLESS 476 +#define tGREATEROREQUAL 477 +#define tLESSOREQUAL 478 +#define UNARYPREC 479 +#define tMINUSMINUS 480 +#define tPLUSPLUS 481 @@ -599,7 +601,8 @@ int gmsh_yyerrorstate = 0; int gmsh_yyviewindex = 0; std::map<std::string, gmsh_yysymbol> gmsh_yysymbols; std::map<std::string, std::vector<std::string> > gmsh_yystringsymbols; -NameSpaces nameSpaces; +std::string gmsh_yyfactory; +NameSpaces gmsh_yynamespaces; // static parser variables (accessible only in this file) #if defined(HAVE_POST) @@ -616,9 +619,9 @@ static gmshfpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS]; static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS]; static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3]; static std::string LoopControlVariablesNameTab[MAX_RECUR_LOOPS]; -static std::string factory; static std::string struct_name, struct_namespace; static int flag_tSTRING_alloc = 0; +static int dim_entity; static std::map<std::string, std::vector<double> > floatOptions; static std::map<std::string, std::vector<std::string> > charOptions; @@ -711,7 +714,7 @@ struct doubleXstring{ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 163 "Gmsh.y" +#line 164 "Gmsh.y" { char *c; int i; @@ -723,7 +726,7 @@ typedef union YYSTYPE struct TwoChar c2; } /* Line 193 of yacc.c. */ -#line 727 "Gmsh.tab.cpp" +#line 730 "Gmsh.tab.cpp" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -736,7 +739,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 740 "Gmsh.tab.cpp" +#line 743 "Gmsh.tab.cpp" #ifdef short # undef short @@ -951,20 +954,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 16106 +#define YYLAST 14866 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 248 +#define YYNTOKENS 249 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 111 +#define YYNNTS 113 /* YYNRULES -- Number of rules. */ -#define YYNRULES 603 +#define YYNRULES 585 /* YYNRULES -- Number of states. */ -#define YYNSTATES 2195 +#define YYNSTATES 2058 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 480 +#define YYMAXUTOK 481 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -975,16 +978,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 233, 2, 245, 2, 230, 232, 2, - 238, 239, 228, 226, 247, 227, 244, 229, 2, 2, + 2, 2, 2, 234, 2, 246, 2, 231, 233, 2, + 239, 240, 229, 227, 248, 228, 245, 230, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 220, 2, 221, 215, 2, 2, 2, 2, 2, 2, + 221, 2, 222, 216, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 240, 2, 241, 237, 2, 2, 2, 2, 2, + 2, 241, 2, 242, 238, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 242, 231, 243, 246, 2, 2, 2, + 2, 2, 2, 243, 232, 244, 247, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1019,8 +1022,8 @@ static const yytype_uint8 yytranslate[] = 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 216, 217, 218, 219, 222, 223, 224, 225, 234, 235, - 236 + 215, 217, 218, 219, 220, 223, 224, 225, 226, 235, + 236, 237 }; #if YYDEBUG @@ -1043,452 +1046,430 @@ static const yytype_uint16 yyprhs[] = 602, 612, 613, 617, 621, 627, 633, 634, 637, 638, 640, 642, 646, 649, 651, 656, 659, 662, 663, 666, 668, 672, 675, 678, 681, 684, 687, 689, 691, 695, - 697, 699, 703, 705, 707, 711, 713, 715, 719, 720, - 726, 727, 730, 738, 746, 754, 763, 772, 780, 788, - 800, 809, 817, 826, 835, 844, 854, 858, 863, 874, - 882, 890, 898, 906, 914, 922, 930, 938, 946, 954, - 963, 976, 985, 993, 1001, 1010, 1019, 1028, 1037, 1046, - 1055, 1061, 1073, 1079, 1089, 1099, 1104, 1114, 1124, 1126, - 1128, 1129, 1132, 1139, 1146, 1153, 1160, 1169, 1180, 1195, - 1212, 1225, 1240, 1255, 1270, 1285, 1294, 1303, 1310, 1315, - 1321, 1328, 1335, 1339, 1344, 1348, 1354, 1361, 1367, 1371, - 1375, 1380, 1386, 1391, 1397, 1401, 1407, 1415, 1423, 1427, - 1435, 1439, 1442, 1445, 1448, 1451, 1454, 1470, 1473, 1476, - 1479, 1482, 1485, 1502, 1514, 1521, 1530, 1539, 1550, 1552, - 1555, 1558, 1560, 1564, 1568, 1573, 1578, 1580, 1582, 1588, - 1600, 1614, 1615, 1623, 1624, 1638, 1639, 1655, 1656, 1663, - 1673, 1676, 1680, 1691, 1693, 1696, 1702, 1710, 1713, 1716, - 1720, 1723, 1727, 1730, 1734, 1744, 1751, 1753, 1755, 1757, - 1759, 1761, 1762, 1765, 1769, 1773, 1778, 1788, 1793, 1808, - 1809, 1813, 1814, 1816, 1817, 1820, 1821, 1824, 1825, 1828, - 1835, 1843, 1850, 1856, 1860, 1869, 1875, 1880, 1887, 1899, - 1911, 1930, 1949, 1962, 1975, 1988, 1999, 2010, 2021, 2032, - 2043, 2048, 2053, 2058, 2063, 2068, 2073, 2078, 2083, 2088, - 2091, 2095, 2102, 2104, 2106, 2108, 2111, 2117, 2125, 2136, - 2138, 2142, 2145, 2148, 2151, 2155, 2159, 2163, 2167, 2171, - 2175, 2179, 2183, 2187, 2191, 2195, 2199, 2203, 2207, 2211, - 2215, 2219, 2223, 2229, 2234, 2239, 2244, 2249, 2254, 2259, - 2264, 2269, 2274, 2279, 2286, 2291, 2296, 2301, 2306, 2311, - 2316, 2321, 2326, 2333, 2340, 2347, 2352, 2354, 2356, 2358, - 2360, 2362, 2364, 2366, 2368, 2370, 2372, 2374, 2375, 2382, - 2384, 2389, 2396, 2398, 2403, 2408, 2413, 2420, 2426, 2434, - 2439, 2444, 2451, 2456, 2460, 2463, 2469, 2475, 2479, 2485, - 2492, 2501, 2508, 2517, 2524, 2529, 2537, 2544, 2551, 2558, - 2563, 2570, 2575, 2576, 2579, 2580, 2583, 2584, 2592, 2594, - 2598, 2600, 2602, 2605, 2606, 2610, 2612, 2615, 2618, 2622, - 2626, 2638, 2648, 2656, 2664, 2666, 2670, 2672, 2674, 2677, - 2681, 2686, 2692, 2694, 2696, 2699, 2703, 2707, 2713, 2718, - 2721, 2724, 2727, 2730, 2734, 2738, 2742, 2746, 2763, 2780, - 2797, 2814, 2816, 2818, 2820, 2824, 2830, 2838, 2843, 2848, - 2853, 2860, 2867, 2876, 2885, 2890, 2905, 2910, 2915, 2917, - 2919, 2923, 2927, 2937, 2945, 2947, 2953, 2957, 2964, 2966, - 2970, 2972, 2974, 2979, 2984, 2988, 2994, 3001, 3010, 3017, - 3023, 3029, 3035, 3041, 3043, 3048, 3050, 3052, 3054, 3056, - 3061, 3068, 3073, 3080, 3086, 3094, 3099, 3104, 3109, 3118, - 3123, 3128, 3133, 3138, 3147, 3156, 3163, 3168, 3175, 3180, - 3182, 3187, 3192, 3193, 3200, 3205, 3208, 3213, 3218, 3220, - 3222, 3226, 3228, 3230, 3234, 3238, 3242, 3248, 3256, 3262, - 3268, 3277, 3279, 3281 + 696, 702, 703, 706, 714, 722, 730, 739, 748, 756, + 764, 776, 784, 793, 802, 811, 821, 825, 830, 841, + 849, 857, 865, 873, 881, 889, 897, 905, 913, 921, + 930, 938, 946, 955, 964, 977, 978, 988, 990, 992, + 994, 996, 1001, 1003, 1005, 1007, 1012, 1014, 1016, 1021, + 1023, 1025, 1027, 1032, 1038, 1050, 1056, 1066, 1076, 1081, + 1091, 1101, 1103, 1105, 1106, 1109, 1116, 1125, 1136, 1151, + 1168, 1181, 1196, 1211, 1226, 1241, 1250, 1259, 1266, 1271, + 1277, 1284, 1291, 1295, 1300, 1304, 1310, 1317, 1323, 1327, + 1331, 1336, 1342, 1347, 1353, 1357, 1363, 1371, 1379, 1383, + 1391, 1395, 1398, 1401, 1404, 1407, 1410, 1426, 1429, 1432, + 1435, 1438, 1441, 1458, 1470, 1477, 1486, 1495, 1506, 1508, + 1511, 1514, 1516, 1520, 1524, 1529, 1534, 1536, 1538, 1544, + 1556, 1570, 1571, 1579, 1580, 1594, 1595, 1611, 1612, 1619, + 1629, 1632, 1636, 1647, 1649, 1652, 1658, 1666, 1669, 1672, + 1676, 1679, 1683, 1686, 1690, 1700, 1707, 1709, 1711, 1713, + 1715, 1717, 1718, 1721, 1725, 1729, 1734, 1744, 1749, 1764, + 1765, 1769, 1770, 1772, 1773, 1776, 1777, 1780, 1781, 1784, + 1791, 1799, 1806, 1812, 1816, 1825, 1831, 1836, 1843, 1855, + 1867, 1886, 1905, 1918, 1931, 1944, 1955, 1960, 1965, 1970, + 1975, 1978, 1982, 1989, 1991, 1993, 1995, 1998, 2004, 2012, + 2023, 2025, 2029, 2032, 2035, 2038, 2042, 2046, 2050, 2054, + 2058, 2062, 2066, 2070, 2074, 2078, 2082, 2086, 2090, 2094, + 2098, 2102, 2106, 2110, 2116, 2121, 2126, 2131, 2136, 2141, + 2146, 2151, 2156, 2161, 2166, 2173, 2178, 2183, 2188, 2193, + 2198, 2203, 2208, 2213, 2220, 2227, 2234, 2239, 2241, 2243, + 2245, 2247, 2249, 2251, 2253, 2255, 2257, 2259, 2261, 2262, + 2269, 2271, 2276, 2283, 2285, 2290, 2295, 2300, 2307, 2313, + 2321, 2326, 2331, 2338, 2343, 2347, 2350, 2356, 2362, 2366, + 2372, 2379, 2388, 2395, 2404, 2411, 2416, 2424, 2431, 2438, + 2445, 2450, 2457, 2462, 2463, 2466, 2467, 2470, 2471, 2479, + 2481, 2485, 2487, 2489, 2492, 2493, 2497, 2499, 2502, 2505, + 2509, 2513, 2525, 2535, 2543, 2551, 2553, 2557, 2559, 2561, + 2564, 2568, 2573, 2579, 2581, 2583, 2586, 2590, 2594, 2600, + 2605, 2608, 2612, 2629, 2631, 2633, 2635, 2639, 2645, 2653, + 2658, 2663, 2668, 2675, 2682, 2691, 2700, 2705, 2720, 2725, + 2730, 2732, 2734, 2738, 2742, 2752, 2760, 2762, 2768, 2772, + 2779, 2781, 2785, 2787, 2789, 2794, 2799, 2803, 2809, 2816, + 2825, 2832, 2838, 2844, 2850, 2856, 2858, 2863, 2865, 2867, + 2869, 2871, 2876, 2883, 2888, 2895, 2901, 2909, 2914, 2919, + 2924, 2933, 2938, 2943, 2948, 2953, 2962, 2971, 2978, 2983, + 2990, 2995, 2997, 3002, 3007, 3008, 3015, 3020, 3023, 3028, + 3033, 3035, 3037, 3041, 3043, 3045, 3049, 3053, 3057, 3063, + 3071, 3077, 3083, 3092, 3094, 3096 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 249, 0, -1, 250, -1, 1, 6, -1, -1, 250, - 251, -1, 253, -1, 254, -1, 274, -1, 117, 238, - 348, 239, 6, -1, 295, -1, 296, -1, 300, -1, - 301, -1, 302, -1, 303, -1, 307, -1, 316, -1, - 317, -1, 323, -1, 324, -1, 306, -1, 305, -1, - 304, -1, 299, -1, 326, -1, 221, -1, 222, -1, - 44, 238, 348, 239, 6, -1, 45, 238, 348, 239, - 6, -1, 44, 238, 348, 239, 252, 348, 6, -1, - 44, 238, 348, 247, 344, 239, 6, -1, 45, 238, - 348, 247, 344, 239, 6, -1, 44, 238, 348, 247, - 344, 239, 252, 348, 6, -1, 358, 348, 242, 255, - 243, 6, -1, 156, 4, 240, 327, 241, 6, -1, - 157, 4, 240, 327, 241, 6, -1, 158, 4, 240, - 327, 247, 327, 241, 6, -1, -1, 255, 258, -1, - 255, 262, -1, 255, 265, -1, 255, 267, -1, 255, - 268, -1, 327, -1, 256, 247, 327, -1, 327, -1, - 257, 247, 327, -1, -1, -1, 4, 259, 238, 256, - 239, 260, 242, 257, 243, 6, -1, 348, -1, 261, - 247, 348, -1, -1, 163, 238, 327, 247, 327, 247, - 327, 239, 263, 242, 261, 243, 6, -1, 348, -1, - 264, 247, 348, -1, -1, 164, 238, 327, 247, 327, - 247, 327, 247, 327, 239, 266, 242, 264, 243, 6, - -1, 165, 242, 340, 243, 242, 340, 243, 6, -1, - 165, 242, 340, 243, 242, 340, 243, 242, 340, 243, - 242, 340, 243, 6, -1, -1, 166, 269, 242, 257, - 243, 6, -1, 7, -1, 214, -1, 213, -1, 212, - -1, 211, -1, 236, -1, 235, -1, 238, -1, 240, - -1, 239, -1, 241, -1, 81, 240, 276, 241, 6, - -1, 82, 240, 280, 241, 6, -1, 332, 6, -1, - 89, 272, 349, 247, 327, 273, 6, -1, 90, 272, - 358, 247, 349, 273, 6, -1, 358, 270, 341, 6, - -1, 358, 271, 6, -1, 358, 272, 273, 270, 341, - 6, -1, 358, 272, 242, 344, 243, 273, 270, 341, - 6, -1, 358, 240, 327, 241, 270, 327, 6, -1, - 358, 240, 327, 241, 271, 6, -1, 358, 238, 327, - 239, 270, 327, 6, -1, 358, 238, 327, 239, 271, - 6, -1, 358, 7, 349, 6, -1, 358, 272, 273, - 7, 46, 272, 273, 6, -1, 358, 272, 273, 7, - 46, 272, 353, 273, 6, -1, 358, 272, 273, 214, - 46, 272, 353, 273, 6, -1, 358, 244, 4, 7, - 349, 6, -1, 358, 240, 327, 241, 244, 4, 7, - 349, 6, -1, 358, 244, 4, 270, 327, 6, -1, - 358, 240, 327, 241, 244, 4, 270, 327, 6, -1, - 358, 244, 4, 271, 6, -1, 358, 240, 327, 241, - 244, 4, 271, 6, -1, 358, 244, 173, 244, 4, - 7, 345, 6, -1, 358, 240, 327, 241, 244, 173, - 244, 4, 7, 345, 6, -1, 358, 244, 174, 7, - 346, 6, -1, 358, 240, 327, 241, 244, 174, 7, - 346, 6, -1, 358, 184, 7, 327, 6, -1, 184, - 240, 327, 241, 7, 4, 6, -1, 184, 240, 327, - 241, 244, 4, 7, 327, 6, -1, 184, 240, 327, - 241, 244, 4, 7, 349, 6, -1, 184, 240, 327, - 241, 244, 4, 7, 242, 344, 243, 6, -1, 184, - 240, 327, 241, 244, 4, 6, -1, 129, 238, 4, - 239, 244, 4, 7, 327, 6, -1, 129, 238, 4, - 239, 244, 4, 7, 349, 6, -1, -1, 247, -1, - -1, 276, 275, 358, -1, 276, 275, 358, 7, 327, - -1, -1, 276, 275, 358, 7, 242, 341, 277, 282, - 243, -1, -1, 276, 275, 358, 272, 273, 7, 242, - 341, 278, 282, 243, -1, 276, 275, 358, 7, 349, - -1, -1, 276, 275, 358, 7, 242, 349, 279, 286, - 243, -1, -1, 280, 275, 348, -1, 327, 7, 349, - -1, 281, 247, 327, 7, 349, -1, 343, 7, 358, - 238, 239, -1, -1, 247, 284, -1, -1, 284, -1, - 285, -1, 284, 247, 285, -1, 4, 341, -1, 4, - -1, 4, 242, 281, 243, -1, 4, 349, -1, 4, - 352, -1, -1, 247, 287, -1, 288, -1, 287, 247, - 288, -1, 4, 327, -1, 4, 349, -1, 188, 349, - -1, 4, 354, -1, 4, 352, -1, 327, -1, 349, - -1, 349, 247, 327, -1, 327, -1, 349, -1, 349, - 247, 327, -1, 327, -1, 349, -1, 349, 247, 327, - -1, 327, -1, 349, -1, 349, 247, 327, -1, -1, - 176, 95, 242, 327, 243, -1, -1, 122, 338, -1, - 91, 238, 327, 239, 7, 338, 6, -1, 94, 238, - 327, 239, 7, 341, 6, -1, 98, 238, 327, 239, - 7, 341, 6, -1, 92, 238, 327, 239, 7, 341, - 294, 6, -1, 93, 238, 327, 239, 7, 341, 294, - 6, -1, 168, 238, 327, 239, 7, 341, 6, -1, - 169, 238, 327, 239, 7, 341, 6, -1, 170, 238, - 327, 239, 7, 341, 172, 341, 171, 327, 6, -1, - 126, 94, 238, 327, 239, 7, 341, 6, -1, 109, - 238, 327, 239, 7, 341, 6, -1, 94, 4, 238, - 327, 239, 7, 341, 6, -1, 122, 97, 238, 327, - 239, 7, 341, 6, -1, 97, 238, 327, 239, 7, - 341, 293, 6, -1, 123, 97, 238, 327, 239, 7, - 341, 293, 6, -1, 13, 14, 6, -1, 14, 97, - 327, 6, -1, 112, 97, 238, 327, 239, 7, 5, - 5, 5, 6, -1, 95, 238, 327, 239, 7, 341, - 6, -1, 96, 238, 327, 239, 7, 341, 6, -1, - 100, 238, 327, 239, 7, 341, 6, -1, 103, 238, - 327, 239, 7, 341, 6, -1, 107, 238, 327, 239, - 7, 341, 6, -1, 108, 238, 327, 239, 7, 341, - 6, -1, 101, 238, 327, 239, 7, 341, 6, -1, - 102, 238, 327, 239, 7, 341, 6, -1, 119, 238, - 327, 239, 7, 341, 6, -1, 144, 238, 327, 239, - 7, 341, 6, -1, 126, 97, 238, 327, 239, 7, - 341, 6, -1, 126, 97, 238, 327, 239, 7, 341, - 4, 242, 340, 243, 6, -1, 97, 4, 238, 327, - 239, 7, 341, 6, -1, 99, 238, 327, 239, 7, - 341, 6, -1, 118, 238, 327, 239, 7, 341, 6, - -1, 123, 118, 238, 327, 239, 7, 341, 6, -1, - 126, 99, 238, 327, 239, 7, 341, 6, -1, 125, - 91, 238, 289, 239, 270, 341, 6, -1, 125, 94, - 238, 290, 239, 270, 341, 6, -1, 125, 97, 238, - 291, 239, 270, 341, 6, -1, 125, 99, 238, 292, - 239, 270, 341, 6, -1, 133, 338, 242, 297, 243, - -1, 132, 242, 338, 247, 338, 247, 327, 243, 242, - 297, 243, -1, 134, 338, 242, 297, 243, -1, 135, - 242, 338, 247, 327, 243, 242, 297, 243, -1, 135, - 242, 338, 247, 338, 243, 242, 297, 243, -1, 4, - 242, 297, 243, -1, 150, 94, 242, 344, 243, 97, - 242, 327, 243, -1, 147, 94, 238, 327, 239, 242, - 344, 243, 6, -1, 298, -1, 296, -1, -1, 298, - 295, -1, 298, 91, 242, 344, 243, 6, -1, 298, - 94, 242, 344, 243, 6, -1, 298, 97, 242, 344, - 243, 6, -1, 298, 99, 242, 344, 243, 6, -1, - 137, 122, 238, 327, 239, 7, 341, 6, -1, 137, - 91, 238, 327, 239, 7, 242, 340, 243, 6, -1, - 137, 122, 238, 327, 239, 7, 242, 338, 247, 338, - 247, 344, 243, 6, -1, 137, 122, 238, 327, 239, - 7, 242, 338, 247, 338, 247, 338, 247, 344, 243, - 6, -1, 137, 95, 238, 327, 239, 7, 242, 338, - 247, 344, 243, 6, -1, 137, 101, 238, 327, 239, - 7, 242, 338, 247, 338, 247, 344, 243, 6, -1, - 137, 102, 238, 327, 239, 7, 242, 338, 247, 338, - 247, 344, 243, 6, -1, 137, 104, 238, 327, 239, - 7, 242, 338, 247, 338, 247, 344, 243, 6, -1, - 137, 105, 238, 327, 239, 7, 242, 338, 247, 338, - 247, 344, 243, 6, -1, 137, 4, 238, 327, 239, - 7, 341, 6, -1, 137, 4, 238, 327, 239, 7, - 5, 6, -1, 137, 4, 242, 327, 243, 6, -1, - 148, 242, 298, 243, -1, 131, 148, 242, 298, 243, - -1, 148, 184, 240, 327, 241, 6, -1, 148, 4, - 240, 327, 241, 6, -1, 148, 358, 6, -1, 148, - 4, 4, 6, -1, 148, 84, 6, -1, 173, 345, - 242, 298, 243, -1, 131, 173, 345, 242, 298, 243, - -1, 208, 327, 242, 298, 243, -1, 189, 5, 6, - -1, 190, 5, 6, -1, 189, 242, 298, 243, -1, - 131, 189, 242, 298, 243, -1, 190, 242, 298, 243, - -1, 131, 190, 242, 298, 243, -1, 358, 349, 6, - -1, 73, 238, 355, 239, 6, -1, 358, 358, 240, - 327, 241, 348, 6, -1, 358, 358, 358, 240, 327, - 241, 6, -1, 358, 327, 6, -1, 129, 238, 4, - 239, 244, 4, 6, -1, 167, 4, 6, -1, 182, - 6, -1, 183, 6, -1, 70, 6, -1, 71, 6, - -1, 64, 6, -1, 64, 242, 327, 247, 327, 247, - 327, 247, 327, 247, 327, 247, 327, 243, 6, -1, - 65, 6, -1, 66, 6, -1, 78, 6, -1, 79, - 6, -1, 114, 6, -1, 115, 242, 344, 243, 242, - 344, 243, 242, 340, 243, 242, 327, 247, 327, 243, - 6, -1, 187, 238, 242, 344, 243, 247, 349, 247, - 349, 239, 6, -1, 175, 238, 327, 8, 327, 239, - -1, 175, 238, 327, 8, 327, 8, 327, 239, -1, - 175, 4, 176, 242, 327, 8, 327, 243, -1, 175, - 4, 176, 242, 327, 8, 327, 8, 327, 243, -1, - 177, -1, 188, 4, -1, 188, 349, -1, 185, -1, - 186, 358, 6, -1, 186, 349, 6, -1, 178, 238, - 327, 239, -1, 179, 238, 327, 239, -1, 180, -1, - 181, -1, 136, 338, 242, 298, 243, -1, 136, 242, - 338, 247, 338, 247, 327, 243, 242, 298, 243, -1, - 136, 242, 338, 247, 338, 247, 338, 247, 327, 243, - 242, 298, 243, -1, -1, 136, 338, 242, 298, 308, - 312, 243, -1, -1, 136, 242, 338, 247, 338, 247, - 327, 243, 242, 298, 309, 312, 243, -1, -1, 136, - 242, 338, 247, 338, 247, 338, 247, 327, 243, 242, - 298, 310, 312, 243, -1, -1, 136, 242, 298, 311, - 312, 243, -1, 136, 242, 298, 243, 128, 109, 242, - 327, 243, -1, 118, 341, -1, 123, 118, 341, -1, - 120, 242, 344, 243, 242, 344, 243, 242, 327, 243, - -1, 313, -1, 312, 313, -1, 153, 242, 327, 243, - 6, -1, 153, 242, 341, 247, 341, 243, 6, -1, - 154, 6, -1, 145, 6, -1, 145, 327, 6, -1, - 159, 6, -1, 159, 161, 6, -1, 160, 6, -1, - 160, 161, 6, -1, 155, 238, 327, 239, 7, 341, - 128, 327, 6, -1, 128, 4, 240, 327, 241, 6, - -1, 139, -1, 140, -1, 141, -1, 142, -1, 143, - -1, -1, 148, 6, -1, 131, 148, 6, -1, 148, - 327, 6, -1, 131, 148, 327, 6, -1, 314, 242, - 298, 315, 243, 242, 298, 315, 243, -1, 106, 238, - 348, 239, -1, 314, 238, 327, 239, 7, 242, 298, - 315, 243, 242, 298, 315, 243, 6, -1, -1, 128, - 4, 327, -1, -1, 4, -1, -1, 7, 341, -1, - -1, 7, 327, -1, -1, 138, 341, -1, 110, 111, - 341, 7, 327, 6, -1, 124, 94, 342, 7, 327, - 318, 6, -1, 124, 97, 342, 320, 319, 6, -1, - 124, 99, 342, 320, 6, -1, 162, 342, 6, -1, - 151, 97, 242, 344, 243, 7, 327, 6, -1, 145, - 97, 342, 321, 6, -1, 145, 99, 342, 6, -1, - 146, 97, 342, 7, 327, 6, -1, 127, 94, 242, - 344, 243, 7, 242, 344, 243, 322, 6, -1, 127, - 97, 242, 344, 243, 7, 242, 344, 243, 322, 6, - -1, 127, 94, 242, 344, 243, 7, 242, 344, 243, - 132, 242, 338, 247, 338, 247, 327, 243, 6, -1, - 127, 97, 242, 344, 243, 7, 242, 344, 243, 132, - 242, 338, 247, 338, 247, 327, 243, 6, -1, 127, - 94, 242, 344, 243, 7, 242, 344, 243, 133, 338, - 6, -1, 127, 97, 242, 344, 243, 7, 242, 344, - 243, 133, 338, 6, -1, 127, 97, 327, 242, 344, - 243, 7, 327, 242, 344, 243, 6, -1, 91, 242, - 344, 243, 176, 97, 242, 327, 243, 6, -1, 94, - 242, 344, 243, 176, 97, 242, 327, 243, 6, -1, - 91, 242, 344, 243, 176, 99, 242, 327, 243, 6, - -1, 94, 242, 344, 243, 176, 99, 242, 327, 243, - 6, -1, 97, 242, 344, 243, 176, 99, 242, 327, - 243, 6, -1, 152, 97, 342, 6, -1, 152, 94, - 342, 6, -1, 116, 91, 342, 6, -1, 116, 94, - 342, 6, -1, 116, 97, 342, 6, -1, 130, 94, - 341, 6, -1, 126, 94, 341, 6, -1, 126, 97, - 341, 6, -1, 126, 99, 341, 6, -1, 149, 6, - -1, 149, 4, 6, -1, 149, 91, 242, 344, 243, - 6, -1, 197, -1, 198, -1, 199, -1, 325, 6, - -1, 325, 242, 341, 243, 6, -1, 325, 242, 341, - 247, 341, 243, 6, -1, 325, 238, 341, 239, 242, - 341, 247, 341, 243, 6, -1, 328, -1, 238, 327, - 239, -1, 227, 327, -1, 226, 327, -1, 233, 327, - -1, 327, 227, 327, -1, 327, 226, 327, -1, 327, - 228, 327, -1, 327, 229, 327, -1, 327, 231, 327, - -1, 327, 232, 327, -1, 327, 230, 327, -1, 327, - 237, 327, -1, 327, 220, 327, -1, 327, 221, 327, - -1, 327, 225, 327, -1, 327, 224, 327, -1, 327, - 219, 327, -1, 327, 218, 327, -1, 327, 217, 327, - -1, 327, 216, 327, -1, 327, 222, 327, -1, 327, - 223, 327, -1, 327, 215, 327, 8, 327, -1, 16, - 272, 327, 273, -1, 17, 272, 327, 273, -1, 18, - 272, 327, 273, -1, 19, 272, 327, 273, -1, 20, - 272, 327, 273, -1, 21, 272, 327, 273, -1, 22, - 272, 327, 273, -1, 23, 272, 327, 273, -1, 24, - 272, 327, 273, -1, 26, 272, 327, 273, -1, 27, - 272, 327, 247, 327, 273, -1, 28, 272, 327, 273, - -1, 29, 272, 327, 273, -1, 30, 272, 327, 273, - -1, 31, 272, 327, 273, -1, 32, 272, 327, 273, - -1, 33, 272, 327, 273, -1, 34, 272, 327, 273, - -1, 35, 272, 327, 273, -1, 36, 272, 327, 247, - 327, 273, -1, 37, 272, 327, 247, 327, 273, -1, - 38, 272, 327, 247, 327, 273, -1, 25, 272, 327, - 273, -1, 3, -1, 10, -1, 15, -1, 11, -1, - 12, -1, 204, -1, 205, -1, 206, -1, 75, -1, - 76, -1, 77, -1, -1, 83, 272, 327, 329, 282, - 273, -1, 332, -1, 195, 272, 348, 273, -1, 195, - 272, 348, 247, 327, 273, -1, 334, -1, 358, 240, - 327, 241, -1, 358, 238, 327, 239, -1, 200, 238, - 334, 239, -1, 200, 238, 334, 244, 335, 239, -1, - 202, 238, 334, 330, 239, -1, 202, 238, 334, 244, - 335, 330, 239, -1, 201, 238, 349, 239, -1, 245, - 358, 272, 273, -1, 245, 334, 244, 335, 272, 273, - -1, 86, 272, 358, 273, -1, 86, 272, 273, -1, - 358, 271, -1, 358, 240, 327, 241, 271, -1, 358, - 238, 327, 239, 271, -1, 358, 244, 335, -1, 358, - 9, 358, 244, 335, -1, 358, 244, 335, 238, 327, - 239, -1, 358, 9, 358, 244, 335, 238, 327, 239, - -1, 358, 244, 335, 240, 327, 241, -1, 358, 9, - 358, 244, 335, 240, 327, 241, -1, 358, 240, 327, - 241, 244, 4, -1, 358, 244, 4, 271, -1, 358, - 240, 327, 241, 244, 4, 271, -1, 191, 238, 348, - 247, 327, 239, -1, 56, 238, 341, 247, 341, 239, - -1, 57, 272, 348, 247, 348, 273, -1, 55, 272, - 348, 273, -1, 58, 272, 348, 247, 348, 273, -1, - 63, 238, 355, 239, -1, -1, 247, 327, -1, -1, - 247, 348, -1, -1, 84, 334, 337, 333, 240, 283, - 241, -1, 358, -1, 358, 9, 358, -1, 4, -1, - 87, -1, 87, 327, -1, -1, 238, 336, 239, -1, - 339, -1, 227, 338, -1, 226, 338, -1, 338, 227, - 338, -1, 338, 226, 338, -1, 242, 327, 247, 327, - 247, 327, 247, 327, 247, 327, 243, -1, 242, 327, - 247, 327, 247, 327, 247, 327, 243, -1, 242, 327, - 247, 327, 247, 327, 243, -1, 238, 327, 247, 327, - 247, 327, 239, -1, 341, -1, 340, 247, 341, -1, - 327, -1, 343, -1, 242, 243, -1, 242, 344, 243, - -1, 227, 242, 344, 243, -1, 327, 228, 242, 344, - 243, -1, 341, -1, 5, -1, 227, 343, -1, 327, - 228, 343, -1, 327, 8, 327, -1, 327, 8, 327, - 8, 327, -1, 91, 242, 327, 243, -1, 91, 5, - -1, 94, 5, -1, 97, 5, -1, 99, 5, -1, - 125, 91, 342, -1, 125, 94, 342, -1, 125, 97, - 342, -1, 125, 99, 342, -1, 91, 176, 64, 242, - 327, 247, 327, 247, 327, 247, 327, 247, 327, 247, - 327, 243, -1, 94, 176, 64, 242, 327, 247, 327, - 247, 327, 247, 327, 247, 327, 247, 327, 243, -1, - 97, 176, 64, 242, 327, 247, 327, 247, 327, 247, - 327, 247, 327, 247, 327, 243, -1, 99, 176, 64, - 242, 327, 247, 327, 247, 327, 247, 327, 247, 327, - 247, 327, 243, -1, 296, -1, 307, -1, 316, -1, - 358, 272, 273, -1, 358, 244, 335, 272, 273, -1, - 358, 9, 358, 244, 335, 272, 273, -1, 39, 240, - 358, 241, -1, 39, 240, 343, 241, -1, 39, 238, - 343, 239, -1, 39, 272, 242, 344, 243, 273, -1, - 358, 272, 242, 344, 243, 273, -1, 40, 272, 327, - 247, 327, 247, 327, 273, -1, 41, 272, 327, 247, - 327, 247, 327, 273, -1, 42, 272, 348, 273, -1, - 43, 272, 327, 247, 327, 247, 327, 247, 327, 247, - 327, 247, 327, 273, -1, 196, 272, 343, 273, -1, - 32, 272, 343, 273, -1, 327, -1, 343, -1, 344, - 247, 327, -1, 344, 247, 343, -1, 242, 327, 247, - 327, 247, 327, 247, 327, 243, -1, 242, 327, 247, - 327, 247, 327, 243, -1, 358, -1, 4, 244, 173, - 244, 4, -1, 242, 347, 243, -1, 358, 240, 327, - 241, 244, 174, -1, 345, -1, 347, 247, 345, -1, - 349, -1, 358, -1, 358, 240, 327, 241, -1, 358, - 238, 327, 239, -1, 358, 244, 335, -1, 358, 9, - 358, 244, 335, -1, 358, 244, 335, 238, 327, 239, - -1, 358, 9, 358, 244, 335, 238, 327, 239, -1, - 358, 240, 327, 241, 244, 4, -1, 125, 91, 242, - 327, 243, -1, 125, 94, 242, 327, 243, -1, 125, - 97, 242, 327, 243, -1, 125, 99, 242, 327, 243, - -1, 5, -1, 209, 240, 358, 241, -1, 67, -1, - 207, -1, 72, -1, 74, -1, 193, 238, 348, 239, - -1, 192, 238, 348, 247, 348, 239, -1, 194, 272, - 348, 273, -1, 194, 272, 348, 247, 348, 273, -1, - 203, 238, 334, 331, 239, -1, 203, 238, 334, 244, - 335, 331, 239, -1, 48, 272, 355, 273, -1, 49, - 238, 348, 239, -1, 50, 238, 348, 239, -1, 51, - 238, 348, 247, 348, 247, 348, 239, -1, 46, 272, - 355, 273, -1, 60, 272, 348, 273, -1, 61, 272, - 348, 273, -1, 62, 272, 348, 273, -1, 59, 272, - 327, 247, 348, 247, 348, 273, -1, 54, 272, 348, - 247, 327, 247, 327, 273, -1, 54, 272, 348, 247, - 327, 273, -1, 47, 272, 348, 273, -1, 47, 272, - 348, 247, 344, 273, -1, 68, 272, 348, 273, -1, - 69, -1, 53, 272, 348, 273, -1, 52, 272, 348, - 273, -1, -1, 88, 272, 349, 350, 286, 273, -1, - 85, 272, 351, 273, -1, 245, 327, -1, 358, 9, - 245, 327, -1, 46, 272, 354, 273, -1, 355, -1, - 354, -1, 242, 355, 243, -1, 348, -1, 356, -1, - 355, 247, 348, -1, 355, 247, 356, -1, 358, 238, - 239, -1, 358, 244, 335, 238, 239, -1, 358, 9, - 358, 244, 335, 238, 239, -1, 4, 246, 242, 327, - 243, -1, 357, 246, 242, 327, 243, -1, 210, 240, - 348, 241, 246, 242, 327, 243, -1, 4, -1, 357, - -1, 210, 240, 348, 241, -1 + 250, 0, -1, 251, -1, 1, 6, -1, -1, 251, + 252, -1, 254, -1, 255, -1, 275, -1, 118, 239, + 351, 240, 6, -1, 293, -1, 299, -1, 303, -1, + 304, -1, 305, -1, 306, -1, 310, -1, 319, -1, + 320, -1, 326, -1, 327, -1, 309, -1, 308, -1, + 307, -1, 302, -1, 329, -1, 222, -1, 223, -1, + 44, 239, 351, 240, 6, -1, 45, 239, 351, 240, + 6, -1, 44, 239, 351, 240, 253, 351, 6, -1, + 44, 239, 351, 248, 347, 240, 6, -1, 45, 239, + 351, 248, 347, 240, 6, -1, 44, 239, 351, 248, + 347, 240, 253, 351, 6, -1, 361, 351, 243, 256, + 244, 6, -1, 157, 4, 241, 330, 242, 6, -1, + 158, 4, 241, 330, 242, 6, -1, 159, 4, 241, + 330, 248, 330, 242, 6, -1, -1, 256, 259, -1, + 256, 263, -1, 256, 266, -1, 256, 268, -1, 256, + 269, -1, 330, -1, 257, 248, 330, -1, 330, -1, + 258, 248, 330, -1, -1, -1, 4, 260, 239, 257, + 240, 261, 243, 258, 244, 6, -1, 351, -1, 262, + 248, 351, -1, -1, 164, 239, 330, 248, 330, 248, + 330, 240, 264, 243, 262, 244, 6, -1, 351, -1, + 265, 248, 351, -1, -1, 165, 239, 330, 248, 330, + 248, 330, 248, 330, 240, 267, 243, 265, 244, 6, + -1, 166, 243, 343, 244, 243, 343, 244, 6, -1, + 166, 243, 343, 244, 243, 343, 244, 243, 343, 244, + 243, 343, 244, 6, -1, -1, 167, 270, 243, 258, + 244, 6, -1, 7, -1, 215, -1, 214, -1, 213, + -1, 212, -1, 237, -1, 236, -1, 239, -1, 241, + -1, 240, -1, 242, -1, 81, 241, 277, 242, 6, + -1, 82, 241, 281, 242, 6, -1, 335, 6, -1, + 89, 273, 352, 248, 330, 274, 6, -1, 90, 273, + 361, 248, 352, 274, 6, -1, 361, 271, 344, 6, + -1, 361, 272, 6, -1, 361, 273, 274, 271, 344, + 6, -1, 361, 273, 243, 347, 244, 274, 271, 344, + 6, -1, 361, 241, 330, 242, 271, 330, 6, -1, + 361, 241, 330, 242, 272, 6, -1, 361, 239, 330, + 240, 271, 330, 6, -1, 361, 239, 330, 240, 272, + 6, -1, 361, 7, 352, 6, -1, 361, 273, 274, + 7, 46, 273, 274, 6, -1, 361, 273, 274, 7, + 46, 273, 356, 274, 6, -1, 361, 273, 274, 215, + 46, 273, 356, 274, 6, -1, 361, 245, 4, 7, + 352, 6, -1, 361, 241, 330, 242, 245, 4, 7, + 352, 6, -1, 361, 245, 4, 271, 330, 6, -1, + 361, 241, 330, 242, 245, 4, 271, 330, 6, -1, + 361, 245, 4, 272, 6, -1, 361, 241, 330, 242, + 245, 4, 272, 6, -1, 361, 245, 174, 245, 4, + 7, 348, 6, -1, 361, 241, 330, 242, 245, 174, + 245, 4, 7, 348, 6, -1, 361, 245, 175, 7, + 349, 6, -1, 361, 241, 330, 242, 245, 175, 7, + 349, 6, -1, 361, 185, 7, 330, 6, -1, 185, + 241, 330, 242, 7, 4, 6, -1, 185, 241, 330, + 242, 245, 4, 7, 330, 6, -1, 185, 241, 330, + 242, 245, 4, 7, 352, 6, -1, 185, 241, 330, + 242, 245, 4, 7, 243, 347, 244, 6, -1, 185, + 241, 330, 242, 245, 4, 6, -1, 130, 239, 4, + 240, 245, 4, 7, 330, 6, -1, 130, 239, 4, + 240, 245, 4, 7, 352, 6, -1, -1, 248, -1, + -1, 277, 276, 361, -1, 277, 276, 361, 7, 330, + -1, -1, 277, 276, 361, 7, 243, 344, 278, 283, + 244, -1, -1, 277, 276, 361, 273, 274, 7, 243, + 344, 279, 283, 244, -1, 277, 276, 361, 7, 352, + -1, -1, 277, 276, 361, 7, 243, 352, 280, 287, + 244, -1, -1, 281, 276, 351, -1, 330, 7, 352, + -1, 282, 248, 330, 7, 352, -1, 346, 7, 361, + 239, 240, -1, -1, 248, 285, -1, -1, 285, -1, + 286, -1, 285, 248, 286, -1, 4, 344, -1, 4, + -1, 4, 243, 282, 244, -1, 4, 352, -1, 4, + 355, -1, -1, 248, 288, -1, 289, -1, 288, 248, + 289, -1, 4, 330, -1, 4, 352, -1, 189, 352, + -1, 4, 357, -1, 4, 355, -1, 330, -1, 352, + -1, 352, 248, 330, -1, -1, 177, 95, 243, 330, + 244, -1, -1, 123, 341, -1, 91, 239, 330, 240, + 7, 341, 6, -1, 94, 239, 330, 240, 7, 344, + 6, -1, 98, 239, 330, 240, 7, 344, 6, -1, + 92, 239, 330, 240, 7, 344, 292, 6, -1, 93, + 239, 330, 240, 7, 344, 292, 6, -1, 169, 239, + 330, 240, 7, 344, 6, -1, 170, 239, 330, 240, + 7, 344, 6, -1, 171, 239, 330, 240, 7, 344, + 173, 344, 172, 330, 6, -1, 109, 239, 330, 240, + 7, 344, 6, -1, 94, 4, 239, 330, 240, 7, + 344, 6, -1, 123, 97, 239, 330, 240, 7, 344, + 6, -1, 97, 239, 330, 240, 7, 344, 291, 6, + -1, 124, 97, 239, 330, 240, 7, 344, 291, 6, + -1, 13, 14, 6, -1, 14, 97, 330, 6, -1, + 113, 97, 239, 330, 240, 7, 5, 5, 5, 6, + -1, 95, 239, 330, 240, 7, 344, 6, -1, 96, + 239, 330, 240, 7, 344, 6, -1, 100, 239, 330, + 240, 7, 344, 6, -1, 103, 239, 330, 240, 7, + 344, 6, -1, 107, 239, 330, 240, 7, 344, 6, + -1, 108, 239, 330, 240, 7, 344, 6, -1, 101, + 239, 330, 240, 7, 344, 6, -1, 102, 239, 330, + 240, 7, 344, 6, -1, 120, 239, 330, 240, 7, + 344, 6, -1, 145, 239, 330, 240, 7, 344, 6, + -1, 97, 4, 239, 330, 240, 7, 344, 6, -1, + 99, 239, 330, 240, 7, 344, 6, -1, 119, 239, + 330, 240, 7, 344, 6, -1, 124, 119, 239, 330, + 240, 7, 344, 6, -1, 127, 296, 239, 330, 240, + 7, 344, 6, -1, 127, 296, 239, 330, 240, 7, + 344, 4, 243, 343, 244, 6, -1, -1, 126, 295, + 294, 239, 290, 240, 271, 344, 6, -1, 91, -1, + 94, -1, 97, -1, 99, -1, 110, 243, 330, 244, + -1, 94, -1, 97, -1, 99, -1, 110, 243, 330, + 244, -1, 94, -1, 97, -1, 110, 243, 330, 244, + -1, 91, -1, 94, -1, 97, -1, 110, 243, 330, + 244, -1, 134, 341, 243, 300, 244, -1, 133, 243, + 341, 248, 341, 248, 330, 244, 243, 300, 244, -1, + 135, 341, 243, 300, 244, -1, 136, 243, 341, 248, + 330, 244, 243, 300, 244, -1, 136, 243, 341, 248, + 341, 244, 243, 300, 244, -1, 4, 243, 300, 244, + -1, 151, 94, 243, 347, 244, 97, 243, 330, 244, + -1, 148, 94, 239, 330, 240, 243, 347, 244, 6, + -1, 301, -1, 299, -1, -1, 301, 293, -1, 301, + 295, 243, 347, 244, 6, -1, 138, 123, 239, 330, + 240, 7, 344, 6, -1, 138, 91, 239, 330, 240, + 7, 243, 343, 244, 6, -1, 138, 123, 239, 330, + 240, 7, 243, 341, 248, 341, 248, 347, 244, 6, + -1, 138, 123, 239, 330, 240, 7, 243, 341, 248, + 341, 248, 341, 248, 347, 244, 6, -1, 138, 95, + 239, 330, 240, 7, 243, 341, 248, 347, 244, 6, + -1, 138, 101, 239, 330, 240, 7, 243, 341, 248, + 341, 248, 347, 244, 6, -1, 138, 102, 239, 330, + 240, 7, 243, 341, 248, 341, 248, 347, 244, 6, + -1, 138, 104, 239, 330, 240, 7, 243, 341, 248, + 341, 248, 347, 244, 6, -1, 138, 105, 239, 330, + 240, 7, 243, 341, 248, 341, 248, 347, 244, 6, + -1, 138, 4, 239, 330, 240, 7, 344, 6, -1, + 138, 4, 239, 330, 240, 7, 5, 6, -1, 138, + 4, 243, 330, 244, 6, -1, 149, 243, 301, 244, + -1, 132, 149, 243, 301, 244, -1, 149, 185, 241, + 330, 242, 6, -1, 149, 4, 241, 330, 242, 6, + -1, 149, 361, 6, -1, 149, 4, 4, 6, -1, + 149, 84, 6, -1, 174, 348, 243, 301, 244, -1, + 132, 174, 348, 243, 301, 244, -1, 209, 330, 243, + 301, 244, -1, 190, 5, 6, -1, 191, 5, 6, + -1, 190, 243, 301, 244, -1, 132, 190, 243, 301, + 244, -1, 191, 243, 301, 244, -1, 132, 191, 243, + 301, 244, -1, 361, 352, 6, -1, 73, 239, 358, + 240, 6, -1, 361, 361, 241, 330, 242, 351, 6, + -1, 361, 361, 361, 241, 330, 242, 6, -1, 361, + 330, 6, -1, 130, 239, 4, 240, 245, 4, 6, + -1, 168, 4, 6, -1, 183, 6, -1, 184, 6, + -1, 70, 6, -1, 71, 6, -1, 64, 6, -1, + 64, 243, 330, 248, 330, 248, 330, 248, 330, 248, + 330, 248, 330, 244, 6, -1, 65, 6, -1, 66, + 6, -1, 78, 6, -1, 79, 6, -1, 115, 6, + -1, 116, 243, 347, 244, 243, 347, 244, 243, 343, + 244, 243, 330, 248, 330, 244, 6, -1, 188, 239, + 243, 347, 244, 248, 352, 248, 352, 240, 6, -1, + 176, 239, 330, 8, 330, 240, -1, 176, 239, 330, + 8, 330, 8, 330, 240, -1, 176, 4, 177, 243, + 330, 8, 330, 244, -1, 176, 4, 177, 243, 330, + 8, 330, 8, 330, 244, -1, 178, -1, 189, 4, + -1, 189, 352, -1, 186, -1, 187, 361, 6, -1, + 187, 352, 6, -1, 179, 239, 330, 240, -1, 180, + 239, 330, 240, -1, 181, -1, 182, -1, 137, 341, + 243, 301, 244, -1, 137, 243, 341, 248, 341, 248, + 330, 244, 243, 301, 244, -1, 137, 243, 341, 248, + 341, 248, 341, 248, 330, 244, 243, 301, 244, -1, + -1, 137, 341, 243, 301, 311, 315, 244, -1, -1, + 137, 243, 341, 248, 341, 248, 330, 244, 243, 301, + 312, 315, 244, -1, -1, 137, 243, 341, 248, 341, + 248, 341, 248, 330, 244, 243, 301, 313, 315, 244, + -1, -1, 137, 243, 301, 314, 315, 244, -1, 137, + 243, 301, 244, 129, 109, 243, 330, 244, -1, 119, + 344, -1, 124, 119, 344, -1, 121, 243, 347, 244, + 243, 347, 244, 243, 330, 244, -1, 316, -1, 315, + 316, -1, 154, 243, 330, 244, 6, -1, 154, 243, + 344, 248, 344, 244, 6, -1, 155, 6, -1, 146, + 6, -1, 146, 330, 6, -1, 160, 6, -1, 160, + 162, 6, -1, 161, 6, -1, 161, 162, 6, -1, + 156, 239, 330, 240, 7, 344, 129, 330, 6, -1, + 129, 4, 241, 330, 242, 6, -1, 140, -1, 141, + -1, 142, -1, 143, -1, 144, -1, -1, 149, 6, + -1, 132, 149, 6, -1, 149, 330, 6, -1, 132, + 149, 330, 6, -1, 317, 243, 301, 318, 244, 243, + 301, 318, 244, -1, 106, 239, 351, 240, -1, 317, + 239, 330, 240, 7, 243, 301, 318, 244, 243, 301, + 318, 244, 6, -1, -1, 129, 4, 330, -1, -1, + 4, -1, -1, 7, 344, -1, -1, 7, 330, -1, + -1, 139, 344, -1, 111, 112, 344, 7, 330, 6, + -1, 125, 94, 345, 7, 330, 321, 6, -1, 125, + 97, 345, 323, 322, 6, -1, 125, 99, 345, 323, + 6, -1, 163, 345, 6, -1, 152, 97, 243, 347, + 244, 7, 330, 6, -1, 146, 97, 345, 324, 6, + -1, 146, 99, 345, 6, -1, 147, 97, 345, 7, + 330, 6, -1, 128, 94, 243, 347, 244, 7, 243, + 347, 244, 325, 6, -1, 128, 97, 243, 347, 244, + 7, 243, 347, 244, 325, 6, -1, 128, 94, 243, + 347, 244, 7, 243, 347, 244, 133, 243, 341, 248, + 341, 248, 330, 244, 6, -1, 128, 97, 243, 347, + 244, 7, 243, 347, 244, 133, 243, 341, 248, 341, + 248, 330, 244, 6, -1, 128, 94, 243, 347, 244, + 7, 243, 347, 244, 134, 341, 6, -1, 128, 97, + 243, 347, 244, 7, 243, 347, 244, 134, 341, 6, + -1, 128, 97, 330, 243, 347, 244, 7, 330, 243, + 347, 244, 6, -1, 295, 243, 347, 244, 177, 295, + 243, 330, 244, 6, -1, 153, 297, 345, 6, -1, + 117, 298, 345, 6, -1, 131, 94, 344, 6, -1, + 127, 296, 344, 6, -1, 150, 6, -1, 150, 4, + 6, -1, 150, 91, 243, 347, 244, 6, -1, 198, + -1, 199, -1, 200, -1, 328, 6, -1, 328, 243, + 344, 244, 6, -1, 328, 243, 344, 248, 344, 244, + 6, -1, 328, 239, 344, 240, 243, 344, 248, 344, + 244, 6, -1, 331, -1, 239, 330, 240, -1, 228, + 330, -1, 227, 330, -1, 234, 330, -1, 330, 228, + 330, -1, 330, 227, 330, -1, 330, 229, 330, -1, + 330, 230, 330, -1, 330, 232, 330, -1, 330, 233, + 330, -1, 330, 231, 330, -1, 330, 238, 330, -1, + 330, 221, 330, -1, 330, 222, 330, -1, 330, 226, + 330, -1, 330, 225, 330, -1, 330, 220, 330, -1, + 330, 219, 330, -1, 330, 218, 330, -1, 330, 217, + 330, -1, 330, 223, 330, -1, 330, 224, 330, -1, + 330, 216, 330, 8, 330, -1, 16, 273, 330, 274, + -1, 17, 273, 330, 274, -1, 18, 273, 330, 274, + -1, 19, 273, 330, 274, -1, 20, 273, 330, 274, + -1, 21, 273, 330, 274, -1, 22, 273, 330, 274, + -1, 23, 273, 330, 274, -1, 24, 273, 330, 274, + -1, 26, 273, 330, 274, -1, 27, 273, 330, 248, + 330, 274, -1, 28, 273, 330, 274, -1, 29, 273, + 330, 274, -1, 30, 273, 330, 274, -1, 31, 273, + 330, 274, -1, 32, 273, 330, 274, -1, 33, 273, + 330, 274, -1, 34, 273, 330, 274, -1, 35, 273, + 330, 274, -1, 36, 273, 330, 248, 330, 274, -1, + 37, 273, 330, 248, 330, 274, -1, 38, 273, 330, + 248, 330, 274, -1, 25, 273, 330, 274, -1, 3, + -1, 10, -1, 15, -1, 11, -1, 12, -1, 205, + -1, 206, -1, 207, -1, 75, -1, 76, -1, 77, + -1, -1, 83, 273, 330, 332, 283, 274, -1, 335, + -1, 196, 273, 351, 274, -1, 196, 273, 351, 248, + 330, 274, -1, 337, -1, 361, 241, 330, 242, -1, + 361, 239, 330, 240, -1, 201, 239, 337, 240, -1, + 201, 239, 337, 245, 338, 240, -1, 203, 239, 337, + 333, 240, -1, 203, 239, 337, 245, 338, 333, 240, + -1, 202, 239, 352, 240, -1, 246, 361, 273, 274, + -1, 246, 337, 245, 338, 273, 274, -1, 86, 273, + 361, 274, -1, 86, 273, 274, -1, 361, 272, -1, + 361, 241, 330, 242, 272, -1, 361, 239, 330, 240, + 272, -1, 361, 245, 338, -1, 361, 9, 361, 245, + 338, -1, 361, 245, 338, 239, 330, 240, -1, 361, + 9, 361, 245, 338, 239, 330, 240, -1, 361, 245, + 338, 241, 330, 242, -1, 361, 9, 361, 245, 338, + 241, 330, 242, -1, 361, 241, 330, 242, 245, 4, + -1, 361, 245, 4, 272, -1, 361, 241, 330, 242, + 245, 4, 272, -1, 192, 239, 351, 248, 330, 240, + -1, 56, 239, 344, 248, 344, 240, -1, 57, 273, + 351, 248, 351, 274, -1, 55, 273, 351, 274, -1, + 58, 273, 351, 248, 351, 274, -1, 63, 239, 358, + 240, -1, -1, 248, 330, -1, -1, 248, 351, -1, + -1, 84, 337, 340, 336, 241, 284, 242, -1, 361, + -1, 361, 9, 361, -1, 4, -1, 87, -1, 87, + 330, -1, -1, 239, 339, 240, -1, 342, -1, 228, + 341, -1, 227, 341, -1, 341, 228, 341, -1, 341, + 227, 341, -1, 243, 330, 248, 330, 248, 330, 248, + 330, 248, 330, 244, -1, 243, 330, 248, 330, 248, + 330, 248, 330, 244, -1, 243, 330, 248, 330, 248, + 330, 244, -1, 239, 330, 248, 330, 248, 330, 240, + -1, 344, -1, 343, 248, 344, -1, 330, -1, 346, + -1, 243, 244, -1, 243, 347, 244, -1, 228, 243, + 347, 244, -1, 330, 229, 243, 347, 244, -1, 344, + -1, 5, -1, 228, 346, -1, 330, 229, 346, -1, + 330, 8, 330, -1, 330, 8, 330, 8, 330, -1, + 91, 243, 330, 244, -1, 295, 5, -1, 126, 295, + 345, -1, 295, 177, 64, 243, 330, 248, 330, 248, + 330, 248, 330, 248, 330, 248, 330, 244, -1, 299, + -1, 310, -1, 319, -1, 361, 273, 274, -1, 361, + 245, 338, 273, 274, -1, 361, 9, 361, 245, 338, + 273, 274, -1, 39, 241, 361, 242, -1, 39, 241, + 346, 242, -1, 39, 239, 346, 240, -1, 39, 273, + 243, 347, 244, 274, -1, 361, 273, 243, 347, 244, + 274, -1, 40, 273, 330, 248, 330, 248, 330, 274, + -1, 41, 273, 330, 248, 330, 248, 330, 274, -1, + 42, 273, 351, 274, -1, 43, 273, 330, 248, 330, + 248, 330, 248, 330, 248, 330, 248, 330, 274, -1, + 197, 273, 346, 274, -1, 32, 273, 346, 274, -1, + 330, -1, 346, -1, 347, 248, 330, -1, 347, 248, + 346, -1, 243, 330, 248, 330, 248, 330, 248, 330, + 244, -1, 243, 330, 248, 330, 248, 330, 244, -1, + 361, -1, 4, 245, 174, 245, 4, -1, 243, 350, + 244, -1, 361, 241, 330, 242, 245, 175, -1, 348, + -1, 350, 248, 348, -1, 352, -1, 361, -1, 361, + 241, 330, 242, -1, 361, 239, 330, 240, -1, 361, + 245, 338, -1, 361, 9, 361, 245, 338, -1, 361, + 245, 338, 239, 330, 240, -1, 361, 9, 361, 245, + 338, 239, 330, 240, -1, 361, 241, 330, 242, 245, + 4, -1, 126, 91, 243, 330, 244, -1, 126, 94, + 243, 330, 244, -1, 126, 97, 243, 330, 244, -1, + 126, 99, 243, 330, 244, -1, 5, -1, 210, 241, + 361, 242, -1, 67, -1, 208, -1, 72, -1, 74, + -1, 194, 239, 351, 240, -1, 193, 239, 351, 248, + 351, 240, -1, 195, 273, 351, 274, -1, 195, 273, + 351, 248, 351, 274, -1, 204, 239, 337, 334, 240, + -1, 204, 239, 337, 245, 338, 334, 240, -1, 48, + 273, 358, 274, -1, 49, 239, 351, 240, -1, 50, + 239, 351, 240, -1, 51, 239, 351, 248, 351, 248, + 351, 240, -1, 46, 273, 358, 274, -1, 60, 273, + 351, 274, -1, 61, 273, 351, 274, -1, 62, 273, + 351, 274, -1, 59, 273, 330, 248, 351, 248, 351, + 274, -1, 54, 273, 351, 248, 330, 248, 330, 274, + -1, 54, 273, 351, 248, 330, 274, -1, 47, 273, + 351, 274, -1, 47, 273, 351, 248, 347, 274, -1, + 68, 273, 351, 274, -1, 69, -1, 53, 273, 351, + 274, -1, 52, 273, 351, 274, -1, -1, 88, 273, + 352, 353, 287, 274, -1, 85, 273, 354, 274, -1, + 246, 330, -1, 361, 9, 246, 330, -1, 46, 273, + 357, 274, -1, 358, -1, 357, -1, 243, 358, 244, + -1, 351, -1, 359, -1, 358, 248, 351, -1, 358, + 248, 359, -1, 361, 239, 240, -1, 361, 245, 338, + 239, 240, -1, 361, 9, 361, 245, 338, 239, 240, + -1, 4, 247, 243, 330, 244, -1, 360, 247, 243, + 330, 244, -1, 211, 241, 351, 242, 247, 243, 330, + 244, -1, 4, -1, 360, -1, 211, 241, 351, 242, + -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 265, 265, 266, 271, 273, 277, 278, 279, 280, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 318, 322, 329, 334, - 339, 353, 366, 379, 407, 421, 434, 447, 466, 471, - 472, 473, 474, 475, 479, 481, 486, 488, 494, 598, - 493, 616, 623, 634, 633, 651, 658, 669, 668, 685, - 702, 725, 724, 738, 739, 740, 741, 742, 746, 747, - 753, 753, 754, 754, 760, 761, 762, 763, 768, 774, - 836, 851, 880, 890, 895, 903, 908, 916, 925, 930, - 942, 959, 965, 974, 992, 1010, 1019, 1031, 1036, 1044, - 1064, 1087, 1098, 1106, 1128, 1151, 1189, 1210, 1222, 1236, - 1236, 1238, 1240, 1249, 1259, 1258, 1279, 1278, 1296, 1306, - 1305, 1319, 1321, 1329, 1335, 1340, 1366, 1368, 1371, 1373, - 1377, 1378, 1382, 1394, 1407, 1422, 1431, 1444, 1446, 1450, - 1451, 1456, 1464, 1473, 1481, 1495, 1513, 1517, 1524, 1532, - 1536, 1543, 1551, 1555, 1562, 1570, 1574, 1581, 1590, 1593, - 1600, 1603, 1610, 1634, 1650, 1666, 1703, 1743, 1759, 1775, - 1797, 1807, 1823, 1842, 1858, 1879, 1890, 1896, 1902, 1909, - 1940, 1955, 1977, 2000, 2023, 2046, 2070, 2094, 2117, 2142, - 2152, 2175, 2192, 2208, 2226, 2244, 2254, 2266, 2278, 2290, - 2307, 2323, 2339, 2354, 2371, 2388, 2423, 2445, 2469, 2470, - 2475, 2478, 2482, 2493, 2504, 2515, 2531, 2550, 2571, 2586, - 2602, 2620, 2671, 2692, 2714, 2737, 2842, 2858, 2893, 2904, - 2915, 2921, 2936, 2964, 2976, 2985, 2992, 3004, 3023, 3029, - 3035, 3042, 3049, 3056, 3068, 3141, 3159, 3176, 3191, 3224, - 3236, 3260, 3264, 3269, 3276, 3281, 3291, 3296, 3302, 3310, - 3314, 3318, 3327, 3391, 3407, 3424, 3441, 3463, 3485, 3520, - 3528, 3536, 3542, 3549, 3556, 3576, 3602, 3614, 3626, 3644, - 3662, 3681, 3680, 3705, 3704, 3731, 3730, 3755, 3754, 3777, - 3793, 3810, 3827, 3850, 3853, 3859, 3871, 3891, 3895, 3899, - 3903, 3907, 3911, 3915, 3919, 3928, 3941, 3942, 3943, 3944, - 3945, 3949, 3950, 3951, 3952, 3953, 3956, 3979, 3998, 4020, - 4023, 4039, 4042, 4059, 4062, 4068, 4071, 4078, 4081, 4088, - 4105, 4146, 4190, 4229, 4254, 4263, 4293, 4319, 4345, 4377, - 4404, 4430, 4456, 4482, 4508, 4530, 4536, 4542, 4548, 4554, - 4560, 4586, 4612, 4629, 4646, 4663, 4675, 4681, 4687, 4699, - 4703, 4713, 4724, 4725, 4726, 4730, 4736, 4748, 4766, 4794, - 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4809, 4810, - 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, - 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828, 4829, 4830, - 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, - 4841, 4842, 4843, 4844, 4845, 4846, 4855, 4856, 4857, 4858, - 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4870, 4869, 4877, - 4879, 4884, 4889, 4893, 4898, 4903, 4907, 4911, 4915, 4919, - 4925, 4941, 4946, 4952, 4958, 4977, 4998, 5031, 5035, 5040, - 5044, 5048, 5052, 5057, 5062, 5072, 5082, 5087, 5098, 5107, - 5112, 5117, 5145, 5146, 5152, 5153, 5159, 5158, 5181, 5183, - 5188, 5197, 5199, 5205, 5206, 5212, 5216, 5220, 5224, 5228, - 5235, 5239, 5243, 5247, 5254, 5259, 5266, 5271, 5275, 5280, - 5284, 5292, 5303, 5307, 5319, 5327, 5335, 5342, 5352, 5375, - 5381, 5387, 5393, 5399, 5410, 5421, 5432, 5443, 5449, 5455, - 5461, 5467, 5477, 5487, 5497, 5510, 5514, 5520, 5532, 5536, - 5540, 5544, 5562, 5570, 5578, 5607, 5617, 5633, 5644, 5649, - 5653, 5657, 5669, 5673, 5685, 5702, 5712, 5716, 5731, 5736, - 5743, 5747, 5752, 5766, 5783, 5787, 5792, 5796, 5801, 5809, - 5815, 5821, 5827, 5836, 5840, 5844, 5852, 5858, 5864, 5868, - 5876, 5884, 5891, 5901, 5906, 5911, 5926, 5940, 5954, 5966, - 5982, 5991, 6000, 6010, 6021, 6029, 6037, 6041, 6060, 6067, - 6073, 6080, 6088, 6087, 6097, 6121, 6123, 6129, 6134, 6136, - 6141, 6146, 6151, 6153, 6157, 6169, 6184, 6189, 6198, 6207, - 6216, 6228, 6231, 6235 + 0, 266, 266, 267, 272, 274, 278, 279, 280, 281, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 319, 323, 330, 335, + 340, 354, 367, 380, 408, 422, 435, 448, 467, 472, + 473, 474, 475, 476, 480, 482, 487, 489, 495, 599, + 494, 617, 624, 635, 634, 652, 659, 670, 669, 686, + 703, 726, 725, 739, 740, 741, 742, 743, 747, 748, + 754, 754, 755, 755, 761, 762, 763, 764, 769, 775, + 837, 852, 881, 891, 896, 904, 909, 917, 926, 931, + 943, 960, 966, 975, 993, 1011, 1020, 1032, 1037, 1045, + 1065, 1088, 1099, 1107, 1129, 1152, 1190, 1211, 1223, 1237, + 1237, 1239, 1241, 1250, 1260, 1259, 1280, 1279, 1297, 1307, + 1306, 1320, 1322, 1330, 1336, 1341, 1367, 1369, 1372, 1374, + 1378, 1379, 1383, 1395, 1408, 1423, 1432, 1445, 1447, 1451, + 1452, 1457, 1465, 1474, 1482, 1496, 1514, 1518, 1525, 1534, + 1537, 1544, 1547, 1554, 1578, 1594, 1610, 1647, 1687, 1703, + 1719, 1741, 1757, 1776, 1792, 1813, 1824, 1830, 1836, 1843, + 1874, 1889, 1911, 1934, 1957, 1980, 2004, 2028, 2052, 2078, + 2095, 2111, 2129, 2147, 2177, 2207, 2206, 2236, 2238, 2240, + 2242, 2244, 2252, 2254, 2256, 2258, 2266, 2268, 2270, 2278, + 2280, 2282, 2284, 2294, 2310, 2326, 2342, 2358, 2374, 2409, + 2431, 2455, 2456, 2461, 2464, 2468, 2489, 2508, 2529, 2544, + 2560, 2578, 2629, 2650, 2672, 2695, 2800, 2816, 2851, 2873, + 2895, 2901, 2916, 2944, 2956, 2965, 2972, 2984, 3003, 3009, + 3015, 3022, 3029, 3036, 3048, 3121, 3139, 3156, 3171, 3204, + 3216, 3240, 3244, 3249, 3256, 3261, 3271, 3276, 3282, 3290, + 3294, 3298, 3307, 3371, 3387, 3404, 3421, 3443, 3465, 3500, + 3508, 3516, 3522, 3529, 3536, 3556, 3582, 3594, 3605, 3623, + 3641, 3660, 3659, 3684, 3683, 3710, 3709, 3734, 3733, 3756, + 3772, 3789, 3806, 3829, 3832, 3838, 3850, 3870, 3874, 3878, + 3882, 3886, 3890, 3894, 3898, 3907, 3920, 3921, 3922, 3923, + 3924, 3928, 3929, 3930, 3931, 3932, 3935, 3958, 3977, 3999, + 4002, 4018, 4021, 4038, 4041, 4047, 4050, 4057, 4060, 4067, + 4084, 4125, 4169, 4208, 4233, 4242, 4272, 4298, 4324, 4356, + 4383, 4409, 4435, 4461, 4487, 4509, 4520, 4568, 4617, 4629, + 4640, 4644, 4654, 4665, 4666, 4667, 4671, 4677, 4689, 4707, + 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4750, + 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, + 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, + 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, + 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4796, 4797, 4798, + 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4811, 4810, + 4818, 4820, 4825, 4830, 4834, 4839, 4844, 4848, 4852, 4856, + 4860, 4866, 4882, 4887, 4893, 4899, 4918, 4939, 4972, 4976, + 4981, 4985, 4989, 4993, 4998, 5003, 5013, 5023, 5028, 5039, + 5048, 5053, 5058, 5086, 5087, 5093, 5094, 5100, 5099, 5122, + 5124, 5129, 5138, 5140, 5146, 5147, 5152, 5156, 5160, 5164, + 5168, 5175, 5179, 5183, 5187, 5194, 5199, 5206, 5211, 5215, + 5220, 5224, 5232, 5243, 5247, 5259, 5267, 5275, 5282, 5292, + 5315, 5321, 5332, 5338, 5348, 5358, 5368, 5381, 5385, 5391, + 5403, 5407, 5411, 5415, 5433, 5441, 5449, 5478, 5488, 5504, + 5515, 5520, 5524, 5528, 5540, 5544, 5556, 5573, 5583, 5587, + 5602, 5607, 5614, 5618, 5623, 5637, 5654, 5658, 5663, 5667, + 5672, 5680, 5686, 5692, 5698, 5707, 5711, 5715, 5723, 5729, + 5735, 5739, 5747, 5755, 5762, 5772, 5777, 5782, 5797, 5811, + 5825, 5837, 5853, 5862, 5871, 5881, 5892, 5900, 5908, 5912, + 5931, 5938, 5944, 5951, 5959, 5958, 5968, 5992, 5994, 6000, + 6005, 6007, 6012, 6017, 6022, 6024, 6028, 6040, 6054, 6058, + 6065, 6073, 6081, 6092, 6094, 6097 }; #endif @@ -1517,8 +1498,8 @@ static const char *const yytname[] = "tCircle", "tEllipse", "tLine", "tSphere", "tPolarSphere", "tSurface", "tSpline", "tVolume", "tBlock", "tCylinder", "tCone", "tTorus", "tEllipsoid", "tQuadric", "tShapeFromFile", "tRectangle", "tDisk", - "tWire", "tCharacteristic", "tLength", "tParametric", "tElliptic", - "tRefineMesh", "tAdaptMesh", "tRelocateMesh", "tSetFactory", + "tWire", "tGeoEntity", "tCharacteristic", "tLength", "tParametric", + "tElliptic", "tRefineMesh", "tAdaptMesh", "tRelocateMesh", "tSetFactory", "tThruSections", "tWedge", "tFillet", "tChamfer", "tPlane", "tRuled", "tTransfinite", "tPhysical", "tCompound", "tPeriodic", "tUsing", "tPlugin", "tDegenerated", "tRecursive", "tRotate", "tTranslate", @@ -1552,21 +1533,22 @@ static const char *const yytname[] = "Enumeration", "FloatParameterOptionsOrNone", "FloatParameterOptionsOrNone_NoComma", "FloatParameterOptions", "FloatParameterOption", "CharParameterOptionsOrNone", - "CharParameterOptions", "CharParameterOption", "PhysicalId0", - "PhysicalId1", "PhysicalId2", "PhysicalId3", "InSphereCenter", - "CircleOptions", "Shape", "Transform", "MultipleShape", "ListOfShapes", - "LevelSet", "Delete", "Colorify", "SetPartition", "Visibility", - "Command", "Slide", "Loop", "Extrude", "@9", "@10", "@11", "@12", - "ExtrudeParameters", "ExtrudeParameter", "BooleanOperator", - "BooleanOption", "Boolean", "BooleanShape", "TransfiniteType", - "TransfiniteArrangement", "TransfiniteCorners", "RecombineAngle", - "PeriodicTransform", "Constraints", "Coherence", "HomologyCommand", - "Homology", "FExpr", "FExpr_Single", "@13", "GetForced_Default", - "GetForcedStr_Default", "DefineStruct", "@14", "Struct_FullName", - "tSTRING_Member", "Append", "AppendOrNot", "VExpr", "VExpr_Single", - "RecursiveListOfListOfDouble", "ListOfDouble", "ListOfDoubleOrAll", - "FExpr_Multi", "RecursiveListOfDouble", "ColorExpr", "ListOfColor", - "RecursiveListOfColor", "StringExprVar", "StringExpr", "@15", + "CharParameterOptions", "CharParameterOption", + "PhysicalId_per_dim_entity", "InSphereCenter", "CircleOptions", "Shape", + "@9", "GeoEntity", "GeoEntity123", "GeoEntity12", "GeoEntity02", + "Transform", "MultipleShape", "ListOfShapes", "LevelSet", "Delete", + "Colorify", "SetPartition", "Visibility", "Command", "Slide", "Loop", + "Extrude", "@10", "@11", "@12", "@13", "ExtrudeParameters", + "ExtrudeParameter", "BooleanOperator", "BooleanOption", "Boolean", + "BooleanShape", "TransfiniteType", "TransfiniteArrangement", + "TransfiniteCorners", "RecombineAngle", "PeriodicTransform", + "Constraints", "Coherence", "HomologyCommand", "Homology", "FExpr", + "FExpr_Single", "@14", "GetForced_Default", "GetForcedStr_Default", + "DefineStruct", "@15", "Struct_FullName", "tSTRING_Member", "Append", + "AppendOrNot", "VExpr", "VExpr_Single", "RecursiveListOfListOfDouble", + "ListOfDouble", "ListOfDoubleOrAll", "FExpr_Multi", + "RecursiveListOfDouble", "ColorExpr", "ListOfColor", + "RecursiveListOfColor", "StringExprVar", "StringExpr", "@16", "NameStruct_Arg", "Str_BracedRecursiveListOfStringExprVar", "BracedOrNotRecursiveListOfStringExprVar", "BracedRecursiveListOfStringExprVar", "RecursiveListOfStringExprVar", @@ -1600,77 +1582,75 @@ static const yytype_uint16 yytoknum[] = 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 63, 470, 471, 472, 473, - 60, 62, 474, 475, 476, 477, 43, 45, 42, 47, - 37, 124, 38, 33, 478, 479, 480, 94, 40, 41, - 91, 93, 123, 125, 46, 35, 126, 44 + 465, 466, 467, 468, 469, 470, 63, 471, 472, 473, + 474, 60, 62, 475, 476, 477, 478, 43, 45, 42, + 47, 37, 124, 38, 33, 479, 480, 481, 94, 40, + 41, 91, 93, 123, 125, 46, 35, 126, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 248, 249, 249, 250, 250, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 252, 252, 253, 253, - 253, 253, 253, 253, 254, 254, 254, 254, 255, 255, - 255, 255, 255, 255, 256, 256, 257, 257, 259, 260, - 258, 261, 261, 263, 262, 264, 264, 266, 265, 267, - 267, 269, 268, 270, 270, 270, 270, 270, 271, 271, - 272, 272, 273, 273, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 275, - 275, 276, 276, 276, 277, 276, 278, 276, 276, 279, - 276, 280, 280, 281, 281, 281, 282, 282, 283, 283, - 284, 284, 285, 285, 285, 285, 285, 286, 286, 287, - 287, 288, 288, 288, 288, 288, 289, 289, 289, 290, - 290, 290, 291, 291, 291, 292, 292, 292, 293, 293, - 294, 294, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 296, 296, 296, 296, 296, 296, 296, 296, 297, 297, - 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 300, 300, - 300, 300, 300, 300, 300, 301, 301, 302, 303, 303, - 303, 303, 303, 303, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 305, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 307, 307, - 307, 308, 307, 309, 307, 310, 307, 311, 307, 307, - 307, 307, 307, 312, 312, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 314, 314, 314, 314, - 314, 315, 315, 315, 315, 315, 316, 316, 317, 318, - 318, 319, 319, 320, 320, 321, 321, 322, 322, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 324, - 324, 324, 325, 325, 325, 326, 326, 326, 326, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 329, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 330, 330, 331, 331, 333, 332, 334, 334, - 335, 336, 336, 337, 337, 338, 338, 338, 338, 338, - 339, 339, 339, 339, 340, 340, 341, 341, 341, 341, - 341, 341, 342, 342, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, 344, 344, - 344, 344, 345, 345, 345, 345, 346, 346, 347, 347, - 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, - 348, 348, 348, 349, 349, 349, 349, 349, 349, 349, - 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, - 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, - 349, 349, 350, 349, 349, 351, 351, 352, 353, 353, - 354, 355, 355, 355, 355, 356, 356, 356, 357, 357, - 357, 358, 358, 358 + 0, 249, 250, 250, 251, 251, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 253, 253, 254, 254, + 254, 254, 254, 254, 255, 255, 255, 255, 256, 256, + 256, 256, 256, 256, 257, 257, 258, 258, 260, 261, + 259, 262, 262, 264, 263, 265, 265, 267, 266, 268, + 268, 270, 269, 271, 271, 271, 271, 271, 272, 272, + 273, 273, 274, 274, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 276, + 276, 277, 277, 277, 278, 277, 279, 277, 277, 280, + 277, 281, 281, 282, 282, 282, 283, 283, 284, 284, + 285, 285, 286, 286, 286, 286, 286, 287, 287, 288, + 288, 289, 289, 289, 289, 289, 290, 290, 290, 291, + 291, 292, 292, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 294, 293, 295, 295, 295, + 295, 295, 296, 296, 296, 296, 297, 297, 297, 298, + 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, + 299, 300, 300, 301, 301, 301, 302, 302, 302, 302, + 302, 302, 302, 302, 302, 302, 302, 302, 303, 303, + 303, 303, 303, 303, 303, 304, 304, 305, 306, 306, + 306, 306, 306, 306, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 308, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 310, 310, + 310, 311, 310, 312, 310, 313, 310, 314, 310, 310, + 310, 310, 310, 315, 315, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 317, 317, 317, 317, + 317, 318, 318, 318, 318, 318, 319, 319, 320, 321, + 321, 322, 322, 323, 323, 324, 324, 325, 325, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 327, 327, 327, 328, 328, 328, 329, 329, 329, 329, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 332, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 333, 333, 334, 334, 336, 335, 337, + 337, 338, 339, 339, 340, 340, 341, 341, 341, 341, + 341, 342, 342, 342, 342, 343, 343, 344, 344, 344, + 344, 344, 344, 345, 345, 346, 346, 346, 346, 346, + 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, + 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, + 347, 347, 347, 347, 348, 348, 348, 348, 349, 349, + 350, 350, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 353, 352, 352, 354, 354, 355, + 356, 356, 357, 358, 358, 358, 358, 359, 359, 359, + 360, 360, 360, 361, 361, 361 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1690,14 +1670,14 @@ static const yytype_uint8 yyr2[] = 1, 0, 3, 5, 0, 9, 0, 11, 5, 0, 9, 0, 3, 3, 5, 5, 0, 2, 0, 1, 1, 3, 2, 1, 4, 2, 2, 0, 2, 1, - 3, 2, 2, 2, 2, 2, 1, 1, 3, 1, - 1, 3, 1, 1, 3, 1, 1, 3, 0, 5, - 0, 2, 7, 7, 7, 8, 8, 7, 7, 11, - 8, 7, 8, 8, 8, 9, 3, 4, 10, 7, + 3, 2, 2, 2, 2, 2, 1, 1, 3, 0, + 5, 0, 2, 7, 7, 7, 8, 8, 7, 7, + 11, 7, 8, 8, 8, 9, 3, 4, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, - 12, 8, 7, 7, 8, 8, 8, 8, 8, 8, - 5, 11, 5, 9, 9, 4, 9, 9, 1, 1, - 0, 2, 6, 6, 6, 6, 8, 10, 14, 16, + 7, 7, 8, 8, 12, 0, 9, 1, 1, 1, + 1, 4, 1, 1, 1, 4, 1, 1, 4, 1, + 1, 1, 4, 5, 11, 5, 9, 9, 4, 9, + 9, 1, 1, 0, 2, 6, 8, 10, 14, 16, 12, 14, 14, 14, 14, 8, 8, 6, 4, 5, 6, 6, 3, 4, 3, 5, 6, 5, 3, 3, 4, 5, 4, 5, 3, 5, 7, 7, 3, 7, @@ -1710,33 +1690,31 @@ static const yytype_uint8 yyr2[] = 1, 0, 2, 3, 3, 4, 9, 4, 14, 0, 3, 0, 1, 0, 2, 0, 2, 0, 2, 6, 7, 6, 5, 3, 8, 5, 4, 6, 11, 11, - 18, 18, 12, 12, 12, 10, 10, 10, 10, 10, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 3, 6, 1, 1, 1, 2, 5, 7, 10, 1, - 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 18, 18, 12, 12, 12, 10, 4, 4, 4, 4, + 2, 3, 6, 1, 1, 1, 2, 5, 7, 10, + 1, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, - 4, 4, 6, 6, 6, 4, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 6, 1, - 4, 6, 1, 4, 4, 4, 6, 5, 7, 4, - 4, 6, 4, 3, 2, 5, 5, 3, 5, 6, - 8, 6, 8, 6, 4, 7, 6, 6, 6, 4, - 6, 4, 0, 2, 0, 2, 0, 7, 1, 3, - 1, 1, 2, 0, 3, 1, 2, 2, 3, 3, - 11, 9, 7, 7, 1, 3, 1, 1, 2, 3, - 4, 5, 1, 1, 2, 3, 3, 5, 4, 2, - 2, 2, 2, 3, 3, 3, 3, 16, 16, 16, - 16, 1, 1, 1, 3, 5, 7, 4, 4, 4, - 6, 6, 8, 8, 4, 14, 4, 4, 1, 1, - 3, 3, 9, 7, 1, 5, 3, 6, 1, 3, - 1, 1, 4, 4, 3, 5, 6, 8, 6, 5, - 5, 5, 5, 1, 4, 1, 1, 1, 1, 4, - 6, 4, 6, 5, 7, 4, 4, 4, 8, 4, - 4, 4, 4, 8, 8, 6, 4, 6, 4, 1, - 4, 4, 0, 6, 4, 2, 4, 4, 1, 1, - 3, 1, 1, 3, 3, 3, 5, 7, 5, 5, - 8, 1, 1, 4 + 3, 3, 3, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 6, 6, 6, 4, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 6, + 1, 4, 6, 1, 4, 4, 4, 6, 5, 7, + 4, 4, 6, 4, 3, 2, 5, 5, 3, 5, + 6, 8, 6, 8, 6, 4, 7, 6, 6, 6, + 4, 6, 4, 0, 2, 0, 2, 0, 7, 1, + 3, 1, 1, 2, 0, 3, 1, 2, 2, 3, + 3, 11, 9, 7, 7, 1, 3, 1, 1, 2, + 3, 4, 5, 1, 1, 2, 3, 3, 5, 4, + 2, 3, 16, 1, 1, 1, 3, 5, 7, 4, + 4, 4, 6, 6, 8, 8, 4, 14, 4, 4, + 1, 1, 3, 3, 9, 7, 1, 5, 3, 6, + 1, 3, 1, 1, 4, 4, 3, 5, 6, 8, + 6, 5, 5, 5, 5, 1, 4, 1, 1, 1, + 1, 4, 6, 4, 6, 5, 7, 4, 4, 4, + 8, 4, 4, 4, 4, 8, 8, 6, 4, 6, + 4, 1, 4, 4, 0, 6, 4, 2, 4, 4, + 1, 1, 3, 1, 1, 3, 3, 3, 5, 7, + 5, 5, 8, 1, 1, 4 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1744,2668 +1722,2543 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 0, 0, 0, 2, 3, 1, 601, 0, 0, 0, + 0, 0, 0, 2, 3, 1, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, + 189, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 306, 307, 308, 309, + 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 268, 0, 0, 276, 277, 0, 0, 0, 271, 0, + 0, 0, 0, 0, 353, 354, 355, 0, 0, 5, + 6, 7, 8, 10, 0, 11, 24, 12, 13, 14, + 15, 23, 22, 21, 16, 0, 17, 18, 19, 20, + 0, 25, 0, 584, 0, 213, 0, 0, 0, 0, + 0, 255, 0, 257, 258, 253, 254, 0, 259, 260, + 111, 121, 583, 464, 459, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 306, 307, 308, 309, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, - 0, 0, 276, 277, 0, 0, 0, 271, 0, 0, - 0, 0, 0, 362, 363, 364, 0, 0, 5, 6, - 7, 8, 10, 11, 24, 12, 13, 14, 15, 23, - 22, 21, 16, 0, 17, 18, 19, 20, 0, 25, - 0, 602, 0, 210, 0, 0, 0, 0, 0, 255, - 0, 257, 258, 253, 254, 0, 259, 260, 111, 121, - 601, 473, 468, 70, 71, 0, 0, 0, 0, 0, + 0, 261, 0, 199, 200, 201, 0, 0, 0, 407, + 408, 410, 411, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 261, 0, 0, 0, 0, 0, 416, 417, 419, - 420, 418, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 415, 416, 417, + 0, 0, 187, 188, 189, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 412, 413, 414, 0, 0, + 0, 0, 0, 0, 0, 493, 494, 0, 495, 477, + 360, 420, 423, 290, 478, 459, 0, 0, 0, 0, + 0, 0, 0, 0, 187, 185, 192, 193, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 466, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 424, 425, 426, 0, 0, + 0, 0, 0, 583, 0, 0, 213, 0, 0, 350, + 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, + 484, 0, 483, 0, 0, 0, 0, 0, 583, 0, + 0, 516, 0, 0, 0, 0, 251, 252, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 422, 423, 0, 0, 0, 0, - 0, 0, 511, 512, 0, 513, 486, 369, 429, 432, - 290, 487, 468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 537, 0, 561, 539, 540, 0, 0, + 0, 0, 0, 0, 538, 0, 0, 0, 0, 269, + 270, 0, 213, 0, 213, 0, 0, 0, 459, 0, + 0, 0, 213, 356, 0, 0, 76, 0, 63, 0, + 0, 67, 66, 65, 64, 69, 68, 70, 71, 0, + 0, 0, 0, 0, 0, 522, 459, 0, 212, 0, + 211, 0, 166, 0, 0, 522, 523, 0, 0, 573, + 0, 574, 523, 109, 109, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 475, 0, 0, 210, 0, 0, 0, 0, + 0, 0, 0, 510, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 601, 0, 0, 210, 0, 0, 359, 0, 0, 0, - 0, 0, 0, 0, 0, 493, 0, 492, 0, 0, - 0, 0, 0, 601, 0, 0, 534, 0, 0, 0, - 0, 251, 252, 0, 553, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, - 579, 557, 558, 0, 0, 0, 0, 0, 0, 556, - 0, 0, 0, 0, 269, 270, 0, 210, 0, 210, - 0, 0, 0, 468, 0, 0, 210, 365, 0, 0, - 76, 0, 63, 0, 0, 67, 66, 65, 64, 69, - 68, 70, 71, 0, 0, 0, 0, 0, 0, 540, - 468, 0, 209, 0, 208, 0, 176, 0, 0, 540, - 541, 0, 0, 591, 0, 592, 541, 109, 109, 0, - 466, 0, 0, 0, 0, 0, 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 363, 0, 362, 485, 364, + 0, 479, 0, 0, 459, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 70, 71, + 0, 435, 0, 0, 0, 0, 0, 0, 291, 0, + 323, 323, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 213, 0, 213, 213, 0, 468, 467, 0, 0, + 0, 0, 213, 213, 0, 0, 0, 0, 287, 0, + 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 325, 0, 0, 0, 0, 0, 234, 0, 0, + 232, 351, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 333, 250, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, - 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 499, 0, 0, 500, 0, 501, 0, - 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 372, 0, 371, 494, 373, 0, 488, - 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 70, 71, 0, 444, 0, 0, - 0, 0, 0, 0, 291, 0, 323, 323, 0, 0, + 0, 0, 0, 0, 0, 273, 272, 0, 238, 0, + 239, 0, 0, 362, 0, 213, 0, 0, 0, 0, + 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, + 72, 73, 0, 0, 248, 38, 244, 0, 0, 0, + 0, 0, 208, 0, 0, 0, 214, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 0, 210, 210, 0, 477, 476, - 0, 0, 0, 0, 210, 210, 0, 0, 0, 0, - 287, 0, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 325, 0, 0, 0, 0, 0, 234, - 0, 0, 232, 360, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 333, 250, 0, 0, 0, 0, 0, - 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 462, + 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 273, 272, 0, - 238, 0, 239, 0, 0, 371, 0, 210, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, + 317, 0, 0, 0, 191, 0, 0, 0, 0, 0, + 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 72, 73, 0, 0, 248, 38, 244, 0, 0, - 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, - 0, 211, 0, 177, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, - 0, 0, 0, 471, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, - 0, 0, 0, 0, 0, 0, 352, 353, 354, 0, + 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 418, 434, 0, 0, 491, 0, 0, 0, 0, + 0, 453, 0, 361, 480, 0, 0, 0, 487, 0, + 380, 379, 378, 377, 373, 374, 381, 382, 376, 375, + 366, 365, 0, 367, 486, 368, 371, 369, 370, 372, + 460, 0, 0, 461, 438, 0, 496, 0, 0, 0, + 0, 0, 0, 0, 321, 0, 0, 0, 0, 349, + 0, 0, 0, 0, 348, 0, 213, 0, 0, 0, + 0, 0, 470, 469, 0, 0, 0, 0, 0, 0, + 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 336, 0, 0, 233, 0, 0, + 228, 0, 0, 0, 0, 346, 0, 0, 0, 361, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, + 0, 0, 455, 0, 0, 240, 242, 0, 367, 0, + 460, 438, 585, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 361, 0, + 63, 0, 0, 0, 0, 79, 0, 63, 64, 0, + 0, 460, 0, 0, 438, 0, 0, 0, 0, 0, + 580, 28, 26, 27, 0, 0, 0, 0, 0, 461, + 526, 29, 0, 0, 245, 575, 576, 0, 577, 526, + 74, 112, 75, 122, 463, 465, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 427, 443, - 0, 0, 0, 0, 0, 0, 503, 504, 505, 506, - 0, 0, 0, 0, 0, 462, 0, 370, 489, 0, - 0, 496, 0, 389, 388, 387, 386, 382, 383, 390, - 391, 385, 384, 375, 374, 0, 376, 495, 377, 380, - 378, 379, 381, 469, 0, 0, 470, 447, 0, 514, - 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 146, 147, 0, 149, 150, 0, 152, 153, 0, 155, - 156, 0, 356, 0, 357, 0, 358, 0, 0, 0, - 0, 355, 0, 210, 0, 0, 0, 0, 0, 479, - 478, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 336, 0, 0, 233, 0, 0, 228, 0, 0, - 0, 351, 350, 0, 0, 0, 370, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 275, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 582, 0, 0, 0, 464, - 0, 0, 240, 242, 0, 376, 0, 469, 447, 603, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 370, 0, 63, 0, 0, 0, - 0, 79, 0, 63, 64, 0, 0, 469, 0, 0, - 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 598, 28, 26, 27, 0, 0, 0, 0, 0, - 470, 544, 29, 0, 0, 245, 593, 594, 0, 595, - 544, 74, 112, 75, 122, 472, 474, 128, 0, 0, - 0, 0, 530, 531, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 415, 402, 0, 404, - 405, 406, 407, 408, 527, 409, 410, 411, 0, 0, - 0, 519, 518, 517, 0, 0, 0, 524, 0, 459, - 0, 0, 0, 461, 126, 442, 0, 498, 0, 0, - 0, 0, 0, 430, 526, 435, 0, 439, 0, 0, - 0, 490, 0, 0, 440, 0, 0, 0, 0, 434, - 433, 454, 70, 71, 0, 0, 0, 0, 0, 0, - 370, 319, 324, 322, 0, 332, 0, 0, 0, 0, - 0, 0, 0, 0, 370, 370, 370, 0, 0, 0, - 0, 229, 0, 241, 243, 0, 0, 0, 200, 202, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 293, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 326, 335, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 0, 0, 569, 0, 576, - 565, 566, 567, 0, 581, 580, 0, 0, 570, 571, - 572, 578, 585, 584, 0, 137, 0, 559, 0, 561, - 0, 0, 0, 554, 0, 237, 0, 0, 0, 0, - 0, 0, 312, 0, 0, 0, 366, 0, 599, 0, + 512, 513, 202, 9, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 406, 393, 0, 395, 396, 397, 398, + 399, 509, 400, 401, 402, 0, 0, 0, 501, 500, + 499, 0, 0, 0, 506, 0, 450, 0, 0, 0, + 452, 126, 433, 489, 0, 0, 421, 508, 426, 0, + 430, 0, 0, 0, 481, 0, 0, 431, 0, 0, + 0, 0, 0, 425, 424, 445, 70, 71, 0, 0, + 0, 0, 0, 0, 361, 319, 324, 322, 0, 332, + 0, 146, 147, 195, 361, 0, 0, 0, 0, 229, + 0, 241, 243, 0, 0, 0, 203, 205, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, + 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 326, 335, 0, 0, 0, 0, 0, + 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, + 0, 235, 0, 0, 0, 0, 551, 0, 558, 547, + 548, 549, 0, 563, 562, 0, 0, 552, 553, 554, + 560, 567, 566, 0, 137, 0, 541, 0, 543, 0, + 0, 0, 536, 0, 237, 0, 0, 0, 0, 0, + 0, 0, 312, 0, 0, 0, 357, 0, 581, 0, 0, 0, 0, 101, 63, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 61, 0, 39, 40, 41, - 42, 43, 0, 434, 433, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, - 542, 0, 0, 0, 0, 0, 0, 0, 133, 0, - 129, 130, 0, 0, 0, 0, 0, 160, 160, 0, - 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, + 42, 43, 0, 425, 424, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 525, 524, 0, 0, 0, 0, + 0, 0, 0, 133, 0, 129, 130, 0, 0, 0, + 151, 151, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 462, 463, 437, 0, 0, 497, 392, 491, 448, 446, - 0, 445, 0, 0, 515, 0, 0, 0, 0, 0, - 0, 0, 0, 331, 0, 148, 0, 151, 0, 154, - 0, 157, 0, 0, 0, 0, 0, 0, 0, 236, - 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, - 297, 0, 300, 0, 302, 0, 288, 294, 0, 0, - 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 0, 231, 230, 361, 0, 0, 35, 36, 0, - 0, 0, 0, 535, 0, 0, 0, 264, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, - 465, 563, 0, 448, 0, 210, 313, 0, 314, 210, - 0, 0, 549, 550, 551, 552, 0, 86, 0, 0, - 0, 0, 84, 91, 93, 0, 538, 0, 99, 0, + 0, 0, 0, 0, 0, 0, 453, 454, 428, 0, + 0, 0, 488, 383, 482, 439, 437, 0, 436, 0, + 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, + 331, 0, 0, 0, 0, 0, 0, 0, 236, 0, + 0, 0, 0, 0, 0, 0, 298, 0, 0, 297, + 0, 300, 0, 302, 0, 288, 294, 0, 0, 0, + 227, 0, 0, 0, 0, 0, 0, 0, 0, 337, + 0, 231, 230, 352, 0, 0, 35, 36, 0, 0, + 0, 0, 517, 0, 0, 0, 264, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 455, 456, + 545, 0, 439, 0, 0, 213, 313, 0, 314, 213, + 0, 0, 531, 532, 533, 534, 0, 86, 0, 0, + 0, 0, 84, 91, 93, 0, 520, 0, 99, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 34, - 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 31, 0, 545, 0, 0, - 32, 0, 545, 596, 0, 113, 118, 0, 0, 0, - 132, 135, 136, 467, 0, 77, 78, 162, 0, 0, - 0, 0, 0, 0, 163, 0, 0, 179, 180, 0, - 0, 0, 0, 164, 192, 181, 185, 186, 182, 183, - 184, 171, 0, 0, 403, 412, 413, 414, 520, 0, - 0, 0, 457, 458, 460, 127, 428, 0, 0, 0, - 0, 456, 431, 436, 0, 193, 441, 70, 71, 0, - 453, 449, 451, 521, 187, 0, 0, 158, 0, 0, - 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 0, 0, 210, 210, 0, 0, - 299, 486, 0, 0, 301, 303, 0, 0, 282, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, - 102, 106, 0, 577, 0, 0, 575, 0, 586, 0, - 0, 138, 139, 583, 560, 562, 0, 0, 0, 0, - 0, 311, 315, 311, 0, 367, 85, 63, 0, 0, - 0, 0, 83, 0, 536, 0, 0, 0, 0, 0, - 0, 589, 588, 0, 0, 0, 0, 0, 484, 0, - 0, 453, 246, 449, 247, 212, 213, 214, 215, 0, - 0, 0, 0, 0, 0, 548, 546, 0, 0, 114, - 119, 0, 0, 0, 528, 529, 131, 0, 0, 161, - 165, 166, 172, 0, 0, 191, 0, 174, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 516, 455, 0, 173, 0, 194, 320, 196, 197, - 198, 199, 170, 0, 189, 195, 0, 0, 0, 0, - 0, 0, 483, 482, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 226, 225, 0, 0, 0, 0, - 0, 0, 0, 0, 216, 0, 0, 334, 37, 0, - 533, 0, 0, 266, 265, 0, 0, 0, 0, 0, - 0, 141, 142, 145, 144, 143, 0, 564, 0, 600, - 0, 0, 0, 0, 0, 96, 0, 0, 97, 539, - 0, 0, 0, 88, 0, 0, 0, 44, 0, 0, - 0, 0, 0, 46, 0, 33, 0, 0, 597, 126, - 137, 0, 0, 134, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 522, 523, 0, 0, 0, - 0, 0, 450, 452, 0, 175, 0, 327, 327, 0, - 107, 108, 210, 0, 203, 204, 289, 0, 295, 0, - 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, - 207, 206, 0, 0, 0, 0, 103, 104, 568, 574, - 573, 140, 0, 0, 316, 0, 92, 94, 0, 100, - 0, 82, 590, 89, 90, 49, 0, 0, 0, 0, - 485, 0, 0, 450, 547, 0, 0, 0, 116, 587, - 0, 123, 0, 345, 347, 346, 348, 0, 349, 178, - 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 481, 0, 305, - 0, 0, 283, 0, 217, 0, 0, 0, 0, 0, - 0, 0, 532, 267, 0, 0, 210, 368, 0, 537, - 0, 45, 0, 0, 0, 62, 47, 0, 115, 120, - 126, 0, 0, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 338, 0, 0, 339, 0, 201, - 0, 296, 0, 279, 0, 210, 0, 0, 0, 0, - 0, 0, 169, 105, 263, 311, 98, 0, 0, 0, - 0, 0, 0, 124, 125, 0, 0, 0, 0, 0, - 0, 190, 0, 342, 0, 343, 344, 480, 0, 0, - 285, 220, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 59, 0, 0, 117, 0, 0, 0, 0, - 0, 0, 0, 0, 304, 284, 280, 0, 0, 0, + 439, 0, 0, 0, 0, 0, 0, 0, 0, 30, + 31, 0, 527, 0, 0, 32, 0, 527, 578, 0, + 113, 118, 0, 0, 0, 132, 135, 136, 458, 0, + 77, 78, 153, 0, 0, 0, 0, 154, 169, 170, + 0, 0, 0, 155, 180, 171, 175, 176, 172, 173, + 174, 161, 0, 0, 394, 403, 404, 405, 502, 0, + 0, 0, 448, 449, 451, 127, 419, 447, 422, 427, + 0, 181, 432, 0, 70, 71, 0, 444, 440, 442, + 503, 177, 0, 0, 149, 0, 0, 330, 0, 148, + 0, 0, 0, 0, 249, 0, 0, 0, 0, 213, + 213, 0, 0, 299, 477, 0, 0, 301, 303, 0, + 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 0, 0, 0, 0, 158, 159, 0, + 0, 0, 0, 102, 106, 0, 559, 0, 0, 557, + 0, 568, 0, 0, 138, 139, 565, 542, 544, 0, + 0, 0, 0, 0, 0, 311, 315, 311, 0, 358, + 85, 63, 0, 0, 0, 0, 83, 0, 518, 0, + 0, 0, 0, 0, 0, 571, 570, 0, 0, 0, + 0, 0, 475, 0, 0, 444, 246, 440, 247, 0, + 0, 215, 0, 0, 530, 528, 0, 0, 114, 119, + 0, 0, 0, 510, 511, 131, 152, 156, 157, 162, + 179, 0, 164, 0, 0, 0, 0, 0, 429, 0, + 0, 0, 498, 446, 0, 163, 0, 182, 320, 0, + 0, 183, 0, 0, 0, 0, 0, 0, 474, 473, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 226, 225, 0, 0, 0, 0, 0, 0, 0, 0, + 216, 0, 0, 334, 37, 0, 515, 0, 0, 266, + 265, 0, 0, 0, 0, 0, 0, 141, 142, 145, + 144, 143, 0, 546, 0, 582, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 97, 521, 0, 0, 0, + 88, 0, 0, 0, 44, 0, 0, 0, 0, 0, + 46, 0, 33, 0, 0, 579, 126, 137, 0, 0, + 134, 0, 0, 0, 0, 0, 0, 504, 505, 0, + 0, 441, 443, 0, 165, 186, 0, 327, 327, 0, + 107, 108, 213, 0, 206, 207, 289, 0, 295, 0, + 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, + 210, 209, 0, 0, 0, 0, 103, 104, 550, 556, + 555, 140, 0, 0, 0, 316, 0, 92, 94, 0, + 100, 0, 82, 572, 89, 90, 49, 0, 0, 0, + 0, 476, 0, 0, 441, 529, 0, 0, 0, 116, + 569, 0, 123, 0, 0, 168, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, - 222, 223, 224, 0, 218, 318, 50, 0, 57, 0, - 256, 0, 525, 0, 0, 0, 0, 0, 0, 286, - 0, 0, 51, 0, 0, 262, 0, 0, 0, 0, - 0, 0, 219, 0, 0, 0, 0, 507, 508, 509, - 510, 0, 0, 54, 52, 0, 55, 0, 340, 341, - 0, 0, 60, 58, 56 + 472, 0, 305, 0, 0, 283, 0, 217, 0, 0, + 0, 0, 0, 0, 0, 514, 267, 0, 0, 345, + 213, 359, 0, 519, 0, 45, 0, 0, 0, 62, + 47, 0, 115, 120, 126, 0, 0, 150, 0, 0, + 0, 0, 0, 0, 328, 338, 0, 0, 339, 0, + 204, 0, 296, 0, 279, 0, 213, 0, 0, 0, + 0, 0, 0, 160, 105, 263, 311, 98, 0, 0, + 0, 0, 0, 0, 124, 125, 0, 0, 0, 184, + 0, 342, 0, 343, 344, 471, 0, 0, 285, 220, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, + 59, 0, 0, 117, 0, 0, 0, 0, 0, 304, + 284, 280, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 221, 222, 223, 224, 0, 218, 318, 50, 0, + 57, 0, 256, 0, 507, 0, 0, 0, 286, 0, + 0, 51, 0, 0, 262, 0, 0, 0, 219, 0, + 0, 0, 0, 492, 0, 0, 54, 52, 0, 55, + 0, 340, 341, 0, 0, 60, 58, 56 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 2, 3, 108, 1035, 109, 110, 1016, 1866, 1872, - 1307, 1524, 2020, 2161, 1308, 2126, 2185, 1309, 2163, 1310, - 1311, 1528, 404, 557, 558, 1103, 111, 740, 427, 1879, - 2030, 1880, 428, 1753, 1382, 1339, 1340, 1341, 1486, 1691, - 1692, 879, 882, 885, 888, 1581, 1571, 721, 252, 413, - 414, 114, 115, 116, 117, 118, 119, 120, 121, 253, - 1204, 2054, 2117, 916, 1200, 1201, 254, 993, 255, 125, - 1412, 1164, 877, 930, 1991, 126, 127, 128, 129, 256, - 257, 1124, 1140, 1262, 258, 745, 259, 867, 744, 430, - 589, 292, 1727, 327, 328, 261, 530, 335, 1295, 1517, - 423, 419, 1255, 973, 1562, 1720, 1721, 958, 425, 131, - 383 + -1, 2, 3, 109, 994, 110, 111, 980, 1763, 1769, + 1257, 1454, 1904, 2030, 1258, 2001, 2048, 1259, 2032, 1260, + 1261, 1458, 410, 551, 552, 1060, 112, 726, 433, 1776, + 1914, 1777, 434, 1662, 1322, 1284, 1285, 1286, 1415, 1604, + 1605, 1120, 1502, 1494, 706, 562, 254, 280, 326, 187, + 255, 419, 420, 116, 117, 118, 119, 120, 121, 122, + 123, 256, 1152, 1935, 1992, 879, 1148, 1149, 257, 957, + 258, 127, 1349, 1118, 854, 893, 1874, 128, 129, 130, + 131, 259, 260, 1081, 1093, 1211, 261, 731, 262, 844, + 730, 436, 577, 295, 1641, 332, 333, 264, 522, 340, + 1245, 1447, 429, 425, 1204, 936, 1487, 1634, 1635, 921, + 431, 133, 388 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -1847 +#define YYPACT_NINF -1741 static const yytype_int16 yypact[] = { - 10909, 19, 73, 11059, -1847, -1847, 149, 97, -60, -88, - -81, 29, 188, 197, 287, 320, -53, 332, 355, 137, - 162, 12, -153, -153, -14, 151, 170, 37, 175, 285, - 45, 304, 309, 315, 330, 342, 349, 376, 393, 398, - 420, 492, 571, 668, 440, 336, 447, 6024, 454, 475, - 658, -55, 120, 573, 519, -22, 488, 667, -112, 498, - 138, 138, 527, 234, 380, -1847, -1847, -1847, -1847, -1847, - 528, 248, 679, 687, 20, 41, 706, 685, 395, 812, - 820, 827, 5298, 846, 631, 644, 654, 8, 39, -1847, - 677, 710, -1847, -1847, 845, 853, 637, -1847, 11256, 720, - 11286, 15, 21, -1847, -1847, -1847, 10739, 725, -1847, -1847, - -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, - -1847, -1847, -1847, -1, -1847, -1847, -1847, -1847, 7, -1847, - 915, 696, 5051, 333, 724, 965, 10739, 11226, 11226, -1847, - 10739, -1847, -1847, -1847, -1847, 11226, -1847, -1847, -1847, -1847, - 744, 734, 982, -1847, -1847, 11316, 12, 10739, 9178, 10739, - 10739, 776, 10739, 9178, 10739, 10739, 778, 10739, 9178, 10739, - 10739, 10739, 10739, 10739, 10739, 11226, 10739, 10739, 10739, 6260, - 800, -1847, 9178, 5298, 5298, 5298, 11226, -1847, -1847, -1847, - -1847, -1847, -153, -153, -153, -153, -153, -153, -153, -153, - -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, - -153, -153, -153, -153, -153, 184, -153, -153, -153, -153, - -153, 801, -153, -153, 807, -1847, -1847, -1847, -153, -153, - 1, 22, 23, 24, 6260, 874, 630, 810, -153, -153, - 811, 813, 814, -1847, -1847, -1847, 10739, 6496, 10739, 10739, - 6732, 12, -1847, -1847, 758, -1847, 4245, -1847, -1847, -1847, - -1847, -1847, 134, 10739, 9178, 815, 818, 6968, 5298, 5298, - 5298, 819, 821, 822, 825, 7204, 7440, 7676, 766, 9495, - 994, 6260, 808, 8, 816, 823, 138, 138, 138, 10739, - 10739, 140, -1847, 232, 138, 9731, 314, 266, 830, 832, - 842, 843, 856, 857, 858, 10739, 5298, 5298, 5298, 863, - 6, 1077, 862, -1847, 1097, 1098, -1847, 866, 867, 869, - 5298, 5298, 873, 875, 876, -1847, 10739, -1847, 1108, 1114, - 10739, 10739, 10739, 185, 10739, 879, -1847, 946, 10739, 10739, - 10739, -1847, -1847, 10739, -1847, -153, -153, -153, 886, 887, - 889, -153, -153, -153, -153, -153, -153, -153, -1847, -153, - -1847, -1847, -1847, -153, -153, 890, 891, -153, 892, -1847, - 893, 1125, 1126, 894, -1847, -1847, 1128, -1847, 1129, -1847, - -153, 10739, 13753, 152, 11226, 10739, -1847, -1847, 6260, 6260, - -1847, 895, 11316, 639, 1131, -1847, -1847, -1847, -1847, -1847, - -1847, 10739, 10739, 34, 6260, 1134, 452, 1784, 899, 1136, - 46, 901, -1847, 902, 2014, 10739, -1847, 2029, -183, -1847, - 91, -106, 8655, -1847, -83, -1847, 92, -139, -103, 1057, - -1847, 12, 900, 903, 8050, 9178, 4284, -1847, 282, 14269, - 14294, 10739, 14319, 296, 14344, 14369, 10739, 14394, 394, 14419, - 14444, 14469, 14494, 14519, 14544, 907, 14569, 14594, 14619, 1141, - 10739, 464, 1143, 1145, 1146, 916, 10739, 10739, 10739, 10739, - 10739, 10739, 10739, 10739, 10739, 10739, 10739, 10739, 10739, 10739, - 10739, 10739, 9178, 10739, 10739, 10739, 10739, 10739, 10739, 9178, - 9178, 917, 10739, 10739, 11226, 10739, 11226, 6260, 11226, 11226, - 11226, 10739, 82, -1847, 1093, 10739, -1847, 1094, -1847, 1096, - -1847, 1100, 6260, 5298, 5298, 5298, 5298, 11226, 11226, 9178, - 12, 11316, 12, 924, 9178, 924, -1847, 924, 14644, -1847, - 473, 918, 60, 10739, 10739, 10739, 10739, 10739, 10739, 10739, - 10739, 10739, 10739, 10739, 10739, 10739, 10739, 7912, 10739, 10739, - 10739, 10739, 10739, 12, 10739, 10739, 1161, -1847, 805, 14669, - 513, 10739, 10739, 10739, -1847, 1159, 1160, 1160, 9409, 9409, - 9409, 9409, 10739, 1162, 10739, 1181, 10739, 1182, 9178, 9178, - 13781, 953, 1188, -1847, 956, -1847, -1847, -167, -1847, -1847, - 9764, 9995, 138, 138, 333, 333, -144, 9731, 9731, 10739, - 5103, -135, -1847, 10739, 10739, 10739, 10739, 10739, 10739, 10739, - 10739, 10739, 14694, 1189, 1193, 1194, 10739, 1196, 10739, -1847, - 10739, 5619, -1847, -1847, 9178, 9178, 9178, 1197, 1198, 10739, - 10739, 10739, 14719, -1847, -1847, 14744, 14769, 14794, 1027, 10070, - -1847, 963, 4483, 14819, 14844, 13864, 11226, 11226, 11226, 11226, - 11226, 11226, 11226, 11226, 11226, 10739, 11226, 11226, 11226, 11226, - 10, 11316, 11226, 11226, 11226, 12, 12, -1847, -1847, 9178, - -1847, 5855, -1847, 6091, 10739, 924, 10739, -1847, 12, 10739, - 10739, 1161, 966, 14869, 7979, 967, 515, 10739, 1202, 968, - 970, 971, 972, 10739, 14894, 13891, 346, 973, 1208, 1203, - -1847, -1847, -1847, 9178, 186, -1847, -1847, -1847, 12, 10739, - 10739, 1161, 976, -1847, 588, 47, 53, 605, 980, -44, - 530, -1847, 12796, -1847, 11, 9178, 12, 10739, 10739, 1215, - 1214, 9178, 10739, 1216, 11226, 12, 9808, 1215, 1217, -1847, - 12, 1221, 11226, 10739, 989, 981, -1847, 10739, 11316, 1222, - 9178, 1060, 9178, 1226, 1230, 14919, 1239, 1073, 1243, 1244, - 14944, 1245, 1078, 1249, 1250, 1252, 1253, 1254, 1255, -1847, - 1256, 1257, 1258, 10739, 14969, 1024, -1847, -1847, -1847, 1261, - 13837, 13837, 13837, 13837, 13837, 13837, 13837, 13837, 13837, 13837, - 13837, 10303, 13837, 13837, 13837, 13837, 954, 262, 13837, 13837, - 13837, 10387, 10611, 11311, 4284, 1029, 1028, 108, 9178, 11344, - 11377, 262, 11410, 262, 1023, 1026, 1031, -5, 15869, -1847, - 262, 1032, 12825, 1033, 1034, 1039, -1847, -1847, -1847, -1847, - 1035, -171, 262, -85, 1044, -121, 606, 1264, -1847, 1215, - 262, 4747, 4941, 757, 1279, 567, 567, 609, 609, 609, - 609, 609, 609, 522, 522, 9178, 358, -1847, 358, 358, - 924, 924, 924, 1040, 14994, 13918, 80, 461, 9178, -1847, - 1278, 1045, 15019, 15044, 15069, 10739, 6260, 1282, 1283, 1049, - 15869, 1043, 1053, 15869, 1046, 1055, 15869, 1048, 1058, 15869, - 1051, 15094, -1847, 15119, -1847, 15144, -1847, 613, 614, 9178, - 1052, -1847, 6327, -1847, 6563, 6799, 138, 10739, 10739, -1847, - -1847, 1056, 1059, 9731, 4047, 1172, 42, 138, 7035, 15169, - 12854, 15194, 15219, 15244, 15269, 15294, 15319, 15344, 1294, 10739, - 1298, -1847, 10739, 15369, -1847, 13945, 13972, -1847, 615, 621, - 624, -1847, -1847, 13999, 14026, 11443, -1847, 1299, 1300, 1301, - 1065, 10739, 7271, 10739, 10739, -1847, -1847, 32, -126, -111, - -126, 1071, 1074, 1067, 262, 262, 1068, 11476, 262, 262, - 262, 262, 10739, 262, 1303, -1847, 1069, 1079, -18, 429, - 1080, 627, -1847, -1847, 13837, 358, 7507, 1075, 468, 1076, - 1316, 1176, 10039, 1082, 1084, 1321, 6260, 12883, -1847, 10739, - 10739, 10739, 10739, 2615, 350, 98, 11316, 10739, 1322, 1325, - 28, -1847, 629, 1284, 1285, 6260, 26, 1088, 15394, 14053, - 118, 10739, 9178, 9178, 9178, 9178, 10739, 1095, 1099, 1101, - 1102, -1847, -1847, -1847, -1847, 11226, 136, 1090, 15419, 14080, - -1847, 1103, -1847, 176, 11509, -1847, -1847, -1847, 1104, -1847, - 1105, -1847, 59, -1847, -1847, 15869, -1847, 1334, 13837, 262, - 138, 718, 4284, -1847, 6260, 6260, 1335, 6260, 726, 6260, - 6260, 1337, 6260, 1246, 6260, 6260, 6260, 6260, 6260, 6260, - 6260, 6260, 6260, 2656, 1340, 9178, -1847, -1847, -1847, -1847, - -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, 10739, -1847, - -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, 10739, 10739, - 10739, -1847, -1847, -1847, 632, 10739, 10739, -1847, 10739, -1847, - 6260, 11226, 11226, -1847, 1106, -1847, 10739, -1847, 10739, 10739, - 10739, 10739, 10739, -1847, -1847, -1847, 1215, -1847, 1215, 10739, - 1110, -1847, 6260, -153, -1847, 10739, 10739, 640, 1215, 80, - -73, -1847, 10739, 10739, 262, 641, 6260, 9178, 1344, 1347, - 1348, 8027, -1847, -1847, 1350, -1847, 198, 10739, 198, 10739, - 198, 10739, 198, 10739, 1351, 1352, 1353, 1354, 1355, 643, - 1359, -1847, 7743, -1847, -1847, -120, 11542, 11575, -1847, -1847, - 12912, -129, 1248, 1361, 10123, 1124, 1363, 1132, 17, 25, - -8, -1847, -78, -1847, 42, 1360, 1365, 1366, 1367, 1368, - 1369, 1371, 1373, 1374, 6260, 15869, -1847, 2759, 1130, 1377, - 1381, 1383, 1295, 1387, 1398, 1402, 10739, 6260, 6260, 6260, - 1405, 11608, -1847, 5240, 1342, 1406, 1408, -1847, 9178, -1847, - -1847, -1847, -1847, 11226, -1847, -1847, 10739, 11226, -1847, -1847, - -1847, -1847, 15869, -1847, 1169, 1171, 11226, -1847, 11226, -1847, - 1215, 11226, 1177, -1847, 1175, -1847, 1215, 10739, 10739, 1184, - 1185, 10354, -1847, 2799, 1186, 6260, -1847, 1180, -1847, 12941, - 12970, 12999, 13028, -1847, -1847, 10739, 1423, 36, 10739, 1424, - 1425, 2885, -1847, 1426, 8, 1428, 1192, 262, -153, -153, - 1431, -1847, 1200, 1204, 1201, -1847, 1434, -1847, -1847, -1847, - -1847, -1847, 1215, 365, 760, 10739, 14107, 646, 648, 673, - 675, 15444, 10739, 10739, 10739, 10739, 1438, 133, 1215, -1847, - 1205, 10739, 1439, 10739, 1215, 10431, 8148, 262, 4547, 1207, - 1199, -1847, 1444, 1445, 13, 1210, 1211, 1332, 1332, 6260, - 1450, 1218, 1219, 1451, 1456, 6260, 1288, 1223, 1460, 1461, - 1462, 1463, 1464, 1465, 1466, 1467, 1468, -1847, 1470, 680, - 13837, 13837, 13837, 13837, 262, 11641, 11674, 11707, 1237, 262, - 262, 1334, 262, 11740, 11773, 11806, 11839, 15469, 13837, 1240, - 1231, 15869, -1847, 1474, 262, 15869, 15869, -1847, 505, -1847, - 1478, -1847, 15494, 14134, -1847, 262, 1477, 681, 6260, 6260, - 6260, 1480, 1479, -1847, 6260, 15869, 6260, 15869, 6260, 15869, - 6260, 15869, 6260, 6260, 6260, 1247, 1251, 1481, 448, -1847, - 10739, 10739, 10739, 1271, 1272, 1273, 1277, -1847, 3073, 6260, - -1847, 10739, -1847, 1484, -1847, 1485, -1847, -1847, 9731, 524, - 5552, -1847, 1280, 1281, 1286, 1287, 1289, 1290, 8384, 1486, - -1847, 9178, -1847, -1847, -1847, 1291, 10739, -1847, -1847, 14161, - 1488, 1489, 1314, -1847, 10739, 10739, 10739, -1847, 1514, 457, - 67, 1292, 8320, 1293, 10739, 18, 262, 1297, 262, 1305, - -1847, -1847, 11316, 563, 10739, -1847, -1847, 3115, -1847, -1847, - 1306, 1519, -1847, -1847, -1847, -1847, 3173, -1847, 397, 1302, - 1520, 3203, -1847, -1847, -1847, 8, -1847, 683, -1847, 10739, - 198, 1038, 1840, -1847, 1296, 10739, 10739, 6260, 1312, -1847, - 506, 1483, 1524, 15519, 1531, 1532, 1535, 1536, 1538, 1264, - 15544, 15569, 15594, 15619, -1847, -1847, 11226, 1307, 1522, 15644, - -1847, 11872, 1309, -1847, 4805, 15869, -1847, 1548, -153, 6732, - -1847, -1847, -1847, -1847, 1334, -1847, -1847, -1847, 10739, 10739, - 138, 1569, 1570, 1571, -1847, 10739, 10739, -1847, -1847, 1572, - 1487, 1574, 10739, -1847, -1847, -1847, -1847, -1847, -1847, -1847, - -1847, -1847, 1578, 1343, -1847, -1847, -1847, -1847, -1847, 10739, - 10739, 10739, -1847, -1847, -1847, 1199, -1847, 10739, 10739, 10739, - 10739, -1847, -1847, -1847, 1345, -1847, -1847, 10739, 10739, 262, - 80, -1847, -1847, -1847, -1847, 1346, 1580, 1288, 1581, 10739, - -1847, 1583, 1584, 1585, 1586, 1587, 838, 1588, 9178, 9178, - 10739, -1847, 9409, 13057, 15669, 9114, 333, 333, 10739, 10739, - -1847, 219, 1357, 15694, -1847, -1847, 13086, -59, -1847, 1589, - 1591, 6260, 138, 138, 138, 138, 138, 5788, 1592, -1847, - 686, 10739, 3226, 1593, -1847, -1847, 6260, 9440, 682, 15719, - -1847, -1847, 8620, -1847, 11226, 10739, -1847, 11226, 15869, 8706, - 11316, 1358, -1847, -1847, -1847, -1847, 1362, 1364, 10739, 10739, - 13115, 7979, -1847, 7979, 6260, -1847, -1847, 11316, 10739, 1594, - 1598, 28, -1847, 1600, -1847, 8, 14188, 6260, 11226, 1602, - 262, -1847, 1370, 262, 10739, 11905, 11938, 688, -1847, 10739, - 10739, 370, -1847, 1372, -1847, -1847, -1847, -1847, -1847, 1348, - 1351, 1352, 1353, 1604, 10739, -1847, -1847, 10739, 10662, -1847, - -1847, 1376, 1840, 689, 4108, 1605, -1847, 13144, 13173, 508, - -1847, -1847, -1847, 13202, 13231, -1847, 1378, -1847, 13260, 1608, - 6260, 13837, 13837, 11971, 12004, 12037, 12070, 12103, -1847, 15744, - 14215, -1847, -1847, 10739, -1847, 1609, -1847, 15869, -1847, -1847, - -1847, -1847, -1847, 1380, -1847, -1847, 691, 694, 13809, 3321, - 1610, 1382, -1847, -1847, 10739, 1384, 1385, 13289, 14242, 1613, - 6260, 1616, 1388, 10739, -1847, -1847, 697, -11, 124, 167, - 179, 226, 8942, 243, -1847, 1619, 13318, -1847, -1847, 1455, - -1847, 10739, 10739, -1847, -1847, 9178, 3354, 1623, 1392, 13837, - 262, 15869, -1847, -1847, -1847, -1847, 18, -1847, 11316, -1847, - 1389, 1390, 1391, 1631, 3662, -1847, 1632, 1634, -1847, -1847, - 1394, 1635, 702, -1847, 1636, 1637, 178, 15869, 10739, 10739, - 1404, 6260, 704, 15869, 15769, -1847, 15794, 12136, -1847, 1106, - 1171, 6260, 262, -1847, 10739, 11316, 12, 1641, 1642, 1644, - 1645, 10739, 1646, 1647, 712, -1847, -1847, 10739, 10739, 10739, - 10739, 10739, -1847, -1847, 13347, -1847, 6260, 502, 548, 9178, - -1847, -1847, 333, 9680, -1847, -1847, -1847, 1648, -1847, 1412, - 6260, -1847, 13376, 1655, 9178, 138, 138, 138, 138, 138, - -1847, -1847, 10739, 13405, 13434, 713, -1847, -1847, -1847, -1847, - -1847, -1847, 1427, 1420, -1847, 1657, -1847, -1847, 8, -1847, - 1491, -1847, -1847, -1847, -1847, -1847, 10739, 12169, 12202, 6260, - -1847, 1662, 10739, 1429, -1847, 10739, 1432, 1435, -1847, -1847, - 4222, -1847, 1441, -1847, -1847, -1847, -1847, 13463, -1847, -1847, - 1440, 12235, 12268, 12301, 12334, 12367, -1847, 714, 1443, 138, - 6260, 1663, 1446, 138, 1671, 721, 1437, -1847, 10739, -1847, - 1677, 1558, 8200, 1447, -1847, 754, 251, 280, 305, 307, - 319, 3825, -1847, -1847, 1681, 1684, -1847, -1847, 1685, -1847, - 1452, 15869, 10739, 10739, 756, -1847, 15869, 12400, -1847, -1847, - 1106, 11316, 1453, -1847, 10739, 10739, 10739, 10739, 10739, 10739, - 1687, 138, 75, -1847, -1847, 138, 113, -1847, 1696, -1847, - 13492, -1847, 10739, -1847, 42, -1847, 1697, 9178, 9178, 9178, - 9178, 8942, -1847, -1847, -1847, 7979, -1847, 10739, 15819, 12433, - 52, 10739, 1473, -1847, -1847, 12466, 12499, 12532, 12565, 12598, - 12631, -1847, 322, -1847, 344, -1847, -1847, -1847, 3950, 543, - 9009, -1847, 762, 763, 768, 770, 347, 780, 1475, 781, - -1847, 10739, -1847, 6260, 13521, -1847, 10739, 10739, 10739, 10739, - 10739, 10739, 138, 138, -1847, -1847, -1847, 42, 1698, 1699, - 1700, 1701, 9178, 1703, 1704, 1705, 1471, 15844, 786, 1711, - 13550, 13837, 12664, 12697, 12730, 12763, 352, 357, 559, -1847, - -1847, -1847, -1847, 787, -1847, -1847, -1847, 11226, -1847, 1482, - -1847, 1713, -1847, 10739, 10739, 10739, 10739, 10739, 10739, -1847, - 1714, 788, -1847, 1490, 6260, -1847, 13579, 13608, 13637, 13666, - 13695, 13724, -1847, 1715, 11226, 11226, 793, -1847, -1847, -1847, - -1847, 1716, 1717, -1847, -1847, 794, -1847, 1719, -1847, -1847, - 1720, 11226, -1847, -1847, -1847 + 10092, 54, 40, 10243, -1741, -1741, -172, 64, -8, -135, + -123, 45, 137, 166, 211, 217, 6, 232, 251, 140, + 147, 24, -59, -59, 66, 167, 194, 59, 206, 225, + 62, 244, 249, 271, 298, 303, 337, 342, 357, 360, + 386, 17, 359, 398, 559, 304, 283, 407, 5348, 436, + 346, 580, -49, 76, 530, 520, 9, 451, 598, -90, + 452, -160, -160, 484, 377, 58, -1741, -1741, -1741, -1741, + -1741, 462, 55, 614, 676, 15, 43, 689, 695, 449, + 730, 819, 834, 3787, 836, 623, 659, 660, 18, 65, + -1741, 661, 663, -1741, -1741, 840, 857, 635, -1741, 10411, + 665, 10441, 19, 20, -1741, -1741, -1741, 9609, 664, -1741, + -1741, -1741, -1741, -1741, 666, -1741, -1741, -1741, -1741, -1741, + -1741, -1741, -1741, -1741, -1741, 231, -1741, -1741, -1741, -1741, + 46, -1741, 900, 684, 4635, 295, 667, 901, 9609, 3437, + 3437, -1741, 9609, -1741, -1741, -1741, -1741, 3437, -1741, -1741, + -1741, -1741, 686, 669, 902, -1741, -1741, 1185, 24, 9609, + 9609, 9609, 673, 9609, 9609, 9609, 674, 9609, 9609, 9609, + 9609, 9609, 9609, 9609, 3437, 9609, 9609, 9609, 9609, 5585, + 698, -1741, 7481, -1741, -1741, -1741, 691, 3787, 3437, -1741, + -1741, -1741, -1741, -1741, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, 81, -59, -59, + -59, -59, -59, 699, -59, -59, 700, -1741, -1741, -1741, + -59, -59, 693, -1741, -1741, -1741, 5585, 821, 530, 702, + -59, -59, 703, 704, 705, -1741, -1741, -1741, 9609, 5822, + 9609, 9609, 6059, 24, 34, -1741, -1741, 706, -1741, 8067, + -1741, -1741, -1741, -1741, -1741, 99, 9609, 7481, 707, 708, + 6296, 3787, 3787, 3787, -1741, -1741, -1741, -1741, -1741, 709, + 6533, 711, 8354, 941, 5585, 713, 18, 715, 716, -160, + -160, -160, 9609, 9609, -29, -1741, 238, -160, 8431, 379, + 418, 714, 721, 722, 725, 726, 728, 729, 9609, 3787, + 3787, 3787, 731, 12, 944, 732, -1741, 963, 966, -1741, + 735, 738, 739, -1741, -1741, 740, 3787, 734, 746, 747, + -1741, 9609, -1741, 968, 983, 9609, 9609, 9609, 256, 9609, + 751, -1741, 813, 9609, 9609, 9609, -1741, -1741, 9609, -1741, + -59, -59, -59, 759, 770, 771, -59, -59, -59, -59, + -59, -59, -59, -1741, -59, -1741, -1741, -1741, -59, -59, + 772, 774, -59, 775, -1741, 778, 1006, 1009, 780, -1741, + -1741, 1010, -1741, 1028, -1741, -59, 9609, 12587, 106, 3437, + 7481, 9609, -1741, -1741, 5585, 5585, -1741, 792, 1185, 579, + 1030, -1741, -1741, -1741, -1741, -1741, -1741, 9609, 9609, 31, + 5585, 1032, 510, 2267, 796, 1034, 37, 798, -1741, 799, + 10562, 9609, -1741, 2467, -131, -1741, 72, -102, 10525, -1741, + -44, -1741, 73, -198, -187, 955, -1741, 24, 797, 800, + 13103, 13128, 13153, 9609, 13178, 13203, 13228, 9609, 13253, 13278, + 13303, 13328, 13353, 13378, 13403, 804, 13428, 13453, 13478, 9480, + 1039, 9609, 7481, 8302, -1741, 3, 9609, 1041, 825, 9609, + 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, + 9609, 9609, 9609, 9609, 9609, 7481, 9609, 9609, 9609, 9609, + 9609, 9609, 7481, 7481, 823, 9609, 9609, 3437, 9609, 3437, + 5585, 3437, 3437, 3437, 9609, 60, 9609, 5585, 3787, 3437, + 3437, 7481, 24, 1185, 24, 830, 7481, 830, -1741, 830, + 13503, -1741, 458, 826, 98, -1741, 1008, 9609, 9609, 9609, + 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, + 9609, 6770, 9609, 9609, 9609, 9609, 9609, 24, 9609, 9609, + 1066, -1741, 654, 13528, 459, 9609, 9609, 9609, -1741, 1070, + 1071, 1071, 841, 9609, 9609, 1067, 7481, 7481, 12615, 839, + 1075, -1741, 843, -1741, -1741, -171, -1741, -1741, 10558, 10591, + -160, -160, 295, 295, -154, 8431, 8431, 9609, 5889, -115, + -1741, 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, 9609, + 13553, 1076, 1078, 1080, 9609, 1082, 9609, -1741, 9609, 6126, + -1741, -1741, 7481, 7481, 7481, 9609, 1083, 9609, 9609, 9609, + 13578, -1741, -1741, 13603, 13628, 13653, 916, 10624, -1741, 848, + 8386, 13678, 13703, 12698, 3437, 3437, 3437, 3437, 3437, 3437, + 3437, 3437, 3437, 9609, 3437, 3437, 3437, 3437, 8, 1185, + 3437, 3437, 3437, 24, 24, -1741, -1741, 7481, -1741, 6363, + -1741, 6600, 9609, 830, 9609, -1741, 24, 9609, 9609, 1066, + 851, 468, 13728, 10442, 854, 501, 9609, 1089, 853, 855, + 856, 858, 9609, 13753, 12725, 158, 852, 1095, 1097, -1741, + -1741, -1741, 7481, 149, -1741, -1741, -1741, 24, 9609, 9609, + 1066, 863, -1741, 867, -43, 520, -1741, 866, 11746, -1741, + 21, 7481, 24, 9609, 9609, 1106, 1124, 7481, 9609, 1125, + 3437, 24, 8668, 1106, 1126, -1741, 24, 1130, 3437, 9609, + 903, 904, -1741, 9609, 1185, 1134, 1137, 1139, 13778, 1140, + 1144, 1145, 13803, 1146, 1147, 1148, 1149, 1150, 1151, 1153, + -1741, 1154, 1155, 1156, -1741, 9609, 13828, 7481, 922, 7481, + 11775, -1741, 1160, 12671, 12671, 12671, 12671, 12671, 12671, 12671, + 12671, 12671, 12671, 12671, 10657, 12671, 12671, 12671, 12671, 895, + 110, 12671, 12671, 12671, 10690, 10723, 10756, 8302, 927, 926, + 89, 7481, 10789, 10822, 110, 10855, 110, 923, 924, 928, + -16, 14628, -1741, 110, 11804, -1741, 929, -33, 110, 145, + 938, -122, 503, 1172, -1741, 1106, 110, 937, 8623, 8699, + 697, 831, 1281, 1281, 453, 453, 453, 453, 453, 453, + 467, 467, 7481, 380, -1741, 380, 380, 830, 830, 830, + 936, 13853, 12752, -45, 311, 7481, -1741, 1175, 940, 13878, + 13903, 13928, 9609, 5585, 1181, 1180, 8122, 11833, 13953, -1741, + 511, 514, 7481, 942, -1741, 6837, -1741, 7074, 7311, -160, + 9609, 9609, -1741, -1741, 947, 948, 8431, 9249, 1059, -36, + -160, 9637, 13978, 11862, 14003, 14028, 14053, 14078, 14103, 14128, + 14153, 1187, 9609, 1189, -1741, 9609, 14178, -1741, 12779, 12806, + -1741, 516, 517, 519, 11891, -1741, 12833, 12860, 10888, -1741, + 1191, 1192, 1193, 951, 9609, 9676, 9609, 9609, -1741, -1741, + 30, 176, 199, 176, 961, 965, 958, 110, 110, 960, + 10921, 110, 110, 110, 110, 9609, 110, 1194, -1741, 962, + 969, 236, 267, 971, 525, -1741, -1741, 12671, 380, 9767, + 970, 316, 964, 1040, 1209, 1072, 8752, 975, 977, 1217, + 5585, 11920, -1741, 9609, 9609, 9609, 9609, 2647, 186, 79, + 1185, 9609, 1218, 1221, 29, -1741, 527, 1182, 1183, 5585, + 22, 985, 14203, 12887, 481, 9609, 9609, 1001, 1003, 7481, + -1741, -1741, -1741, -1741, 3437, 117, 998, 14228, 12914, -1741, + 1011, -1741, 172, 10954, -1741, -1741, -1741, 1004, -1741, 1012, + -1741, 80, -1741, -1741, 14628, -1741, 1244, 12671, 110, -160, + 5585, 5585, 1249, 5585, 5585, 5585, 1251, 5585, 5585, 5585, + 5585, 5585, 5585, 5585, 5585, 5585, 5585, 2815, 1253, 7481, + 8302, -1741, -1741, -1741, -1741, -1741, -1741, -1741, -1741, -1741, + -1741, -1741, -1741, -1741, -1741, 9609, -1741, -1741, -1741, -1741, + -1741, -1741, -1741, -1741, -1741, 9609, 9609, 9609, -1741, -1741, + -1741, 528, 9609, 9609, -1741, 9609, -1741, 5585, 3437, 3437, + -1741, 1014, -1741, -1741, 9609, 9609, -1741, -1741, -1741, 1106, + -1741, 1106, 9609, 1023, -1741, 5585, -59, -1741, 9609, 9609, + 9609, 533, 1106, -45, -68, -1741, 9609, 9609, 110, 538, + 5585, 7481, 1258, 1259, 1260, 1896, -1741, -1741, 1263, -1741, + 1031, 14628, 1024, -1741, 1267, 1268, 1271, 541, 1275, -1741, + 9858, -1741, -1741, -106, 10987, 11020, -1741, -1741, 11949, -61, + 1173, 1277, 8984, 1042, 1278, 1047, 28, 32, 296, -1741, + -87, -1741, -36, 1283, 1282, 1284, 1285, 1287, 1288, 1290, + 1292, 1293, 5585, 14628, -1741, 3388, 1060, 1296, 1298, 1299, + 1210, 1303, -1741, 1300, 1305, 9609, 5585, 5585, 5585, 1308, + 11053, -1741, 8939, 2323, 1309, 1311, -1741, 7481, -1741, -1741, + -1741, -1741, 3437, -1741, -1741, 9609, 3437, -1741, -1741, -1741, + -1741, 14628, -1741, 1074, 1068, 3437, -1741, 3437, -1741, 1106, + 3437, 1081, -1741, 1079, -1741, 1106, 9609, 9609, 1085, 530, + 1086, 9068, -1741, 3537, 1087, 5585, -1741, 1088, -1741, 11978, + 12007, 12036, 12065, -1741, -1741, 9609, 1320, 38, 9609, 1325, + 1327, 3845, -1741, 1328, 18, 1330, 1093, 110, -59, -59, + 1331, -1741, 1099, 1100, 1098, -1741, 1339, -1741, -1741, -1741, + -1741, -1741, 1106, -9, 2704, 9609, 12941, 14253, 9609, 9609, + 568, 1340, 133, 1106, -1741, 1102, 9609, 1343, 9609, 1106, + 9300, 7713, 110, 4099, 1111, 1108, -1741, 1348, 1351, 105, + 1235, 1235, 5585, 1354, 1355, 1356, 5585, 1186, 1358, 1360, + 1362, 1363, 1364, 1365, 1366, 1367, 1368, -1741, 1370, 569, + 12671, 12671, 12671, 12671, 110, 11086, 11119, 11152, 1141, 110, + 110, 1244, 110, 14278, 12671, 1142, 1129, 14628, -1741, 1377, + 110, 11185, 14628, 14628, -1741, 387, -1741, 1381, -1741, 14303, + 12968, -1741, 110, 1380, 570, 5585, 5585, 5585, 1384, 1385, + -1741, 196, 9609, 5585, 1157, 1158, 1383, 733, -1741, 9609, + 9609, 9609, 1161, 1162, 1163, 1166, -1741, 4035, 5585, -1741, + 9609, -1741, 1386, -1741, 1388, -1741, -1741, 8431, 307, 4874, + -1741, 1165, 1168, 1169, 1171, 1174, 1176, 7007, 1390, -1741, + 7481, -1741, -1741, -1741, 1177, 9609, -1741, -1741, 12995, 1391, + 1392, 1226, -1741, 9609, 9609, 9609, -1741, 1397, 773, 473, + 1167, 9015, 1170, 9609, 27, 110, 1184, 110, 1178, -1741, + -1741, 1185, 423, 9609, 1179, -1741, -1741, 4137, -1741, -1741, + 1188, 1403, -1741, -1741, -1741, -1741, 4314, -1741, 190, 1190, + 1409, 4509, -1741, -1741, -1741, 18, -1741, 576, -1741, 9609, + 196, 1633, 3125, -1741, 1195, 9609, 9609, 5585, 1196, -1741, + 505, 1419, 1422, 14328, 1424, 1172, 14353, 14378, 1425, -1741, + -1741, 3437, 1198, 1421, 14403, -1741, 11218, 1199, -1741, 4377, + 14628, -1741, 1426, -59, 6059, -1741, -1741, -1741, -1741, 1244, + -1741, -1741, -1741, -160, 1434, 1435, 1437, -1741, -1741, -1741, + 1438, 1337, 1439, -1741, -1741, -1741, -1741, -1741, -1741, -1741, + -1741, -1741, 1441, 1204, -1741, -1741, -1741, -1741, -1741, 9609, + 9609, 9609, -1741, -1741, -1741, 1108, -1741, -1741, -1741, -1741, + 1212, -1741, -1741, 9609, 9609, 9609, 110, -45, -1741, -1741, + -1741, -1741, 1207, 1447, 1186, 1449, 9609, -1741, 5585, 14628, + 556, 7481, 7481, 9609, -1741, 8122, 12094, 14428, 9333, 295, + 295, 9609, 9609, -1741, 301, 1208, 14453, -1741, -1741, 12123, + -70, -1741, 1451, 1452, 5585, -160, -160, -160, -160, -160, + 5111, 1453, -1741, 578, 9609, 4547, 1454, -1741, -1741, 5585, + 9896, 577, 14478, -1741, -1741, 7799, -1741, 3437, 9609, -1741, + 3437, 14628, 8036, 1185, 1213, -1741, -1741, -1741, -1741, 1222, + 1216, 9609, 9609, 12152, 9609, 10442, -1741, 10442, 5585, -1741, + -1741, 1185, 9609, 1459, 1462, 29, -1741, 1461, -1741, 18, + 13022, 5585, 3437, 1463, 110, -1741, 1223, 110, 9609, 11251, + 11284, 583, -1741, 9609, 9609, 416, -1741, 1227, -1741, 1260, + 1267, -1741, 1466, 9609, -1741, -1741, 9609, 9377, -1741, -1741, + 1230, 3125, 586, 7418, 1467, -1741, 563, -1741, -1741, -1741, + -1741, 1232, -1741, 1472, 5585, 12671, 12671, 11317, -1741, 11350, + 14503, 13049, -1741, -1741, 9609, -1741, 1473, -1741, 14628, 1474, + 1239, -1741, 588, 589, 12643, 4570, 1477, 1241, -1741, -1741, + 9609, 1234, 1243, 12181, 13076, 1479, 5585, 1481, 1247, 9609, + -1741, -1741, 591, -26, -7, 131, 141, 169, 7244, 187, + -1741, 1485, 12210, -1741, -1741, 1321, -1741, 9609, 9609, -1741, + -1741, 7481, 4810, 1486, 1254, 12671, 110, 14628, -1741, -1741, + -1741, -1741, 27, -1741, 1185, -1741, 12239, 1252, 1255, 1256, + 1489, 5047, -1741, 1490, 1492, -1741, -1741, 1270, 1510, 599, + -1741, 1511, 1512, 192, 14628, 9609, 9609, 1279, 5585, 604, + 14628, 14528, -1741, 14553, 11383, -1741, 1014, 1068, 5585, 110, + -1741, 9609, 1185, 24, 9609, 1517, 605, -1741, -1741, 9609, + 9609, -1741, -1741, 12268, -1741, -1741, 5585, 535, 554, 7481, + -1741, -1741, 295, 10492, -1741, -1741, -1741, 1519, -1741, 1286, + 5585, -1741, 12297, 1521, 7481, -160, -160, -160, -160, -160, + -1741, -1741, 9609, 12326, 12355, 607, -1741, -1741, -1741, -1741, + -1741, -1741, 1289, 1522, 1294, -1741, 1525, -1741, -1741, 18, + -1741, 1357, -1741, -1741, -1741, -1741, -1741, 9609, 11416, 11449, + 5585, -1741, 1529, 9609, 1295, -1741, 9609, 1297, 1306, -1741, + -1741, 7745, -1741, 1301, 12384, -1741, 1304, 11482, 11515, -1741, + 610, 1310, -160, 5585, 1530, 1313, -160, 1533, 612, 1307, + -1741, 9609, -1741, 1537, 1415, 9897, 1314, -1741, 613, 210, + 221, 227, 308, 321, 5284, -1741, -1741, 1548, 1557, -1741, + -1741, -1741, 1558, -1741, 1322, 14628, 9609, 9609, 621, -1741, + 14628, 11548, -1741, -1741, 1014, 1185, 1326, -1741, 9609, 9609, + 9609, 1561, -160, 121, -1741, -1741, -160, 126, -1741, 1562, + -1741, 12413, -1741, 9609, -1741, -36, -1741, 1563, 7481, 7481, + 7481, 7481, 7244, -1741, -1741, -1741, 10442, -1741, 9609, 14578, + 11581, 52, 9609, 1329, -1741, -1741, 11614, 11647, 11680, -1741, + 326, -1741, 343, -1741, -1741, -1741, 5521, 331, 9962, -1741, + 624, 626, 629, 631, 350, 634, 1332, 637, -1741, 9609, + -1741, 5585, 12442, -1741, 9609, 9609, 9609, -160, -160, -1741, + -1741, -1741, -36, 1564, 1568, 1569, 1572, 7481, 1574, 1575, + 1576, 1341, 14603, 639, 1577, 12471, 12671, 11713, 367, 375, + 412, -1741, -1741, -1741, -1741, 640, -1741, -1741, -1741, 3437, + -1741, 1342, -1741, 1581, -1741, 9609, 9609, 9609, -1741, 1582, + 642, -1741, 1346, 5585, -1741, 12500, 12529, 12558, -1741, 1585, + 3437, 3437, 645, -1741, 1586, 1587, -1741, -1741, 647, -1741, + 1589, -1741, -1741, 1590, 3437, -1741, -1741, -1741 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -1847, -1847, -1847, -1847, 400, -1847, -1847, -1847, -1847, -339, - -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, - -1847, -1847, -642, -124, 4008, 3010, -1847, 1308, -1847, -1847, - -1847, -1847, -1847, -1847, -1846, -1847, 353, 169, -142, -1847, - -104, -1847, -1847, -1847, -1847, 119, 392, 1744, -2, -592, - -261, -1847, -1847, -1847, -1847, -1847, -1847, -1847, -1847, 1745, - -1847, -1847, -1847, -1847, -1200, -1195, 1747, -1692, 1748, -1847, - -1847, -1847, 1187, -1847, -156, -1847, -1847, -1847, -1847, 2041, - -1847, -1847, 363, 267, 1754, -1847, 0, -571, -1847, -1847, - 33, -1847, -1646, 321, -95, 2200, 2230, -276, 48, -1847, - 121, -33, -1847, -1847, 69, 239, -1643, -97, 1030, -1847, - -3 + -1741, -1741, -1741, -1741, 327, -1741, -1741, -1741, -1741, -350, + -1741, -1741, -1741, -1741, -1741, -1741, -1741, -1741, -1741, -1741, + -1741, -1741, -672, -124, 2864, 2643, -1741, 1197, -1741, -1741, + -1741, -1741, -1741, -1741, -1740, -1741, 279, 112, -175, -1741, + -138, -1741, 61, 315, 1604, -1741, -1, 905, -1741, -1741, + 0, -575, -287, -1741, -1741, -1741, -1741, -1741, -1741, -1741, + -1741, 1605, -1741, -1741, -1741, -1741, -1151, -1139, 1606, -1600, + 1608, -1741, -1741, -1741, 1051, -1741, -180, -1741, -1741, -1741, + -1741, 1747, -1741, -1741, 291, 201, 1617, -1741, 2, -505, + -1741, -1741, 86, -1741, -1560, -28, -181, 1915, 710, -281, + -4, -1741, 91, -69, -1741, -1741, 23, 171, -1559, -143, + 907, -1741, -3 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -549 +#define YYTABLE_NINF -531 static const yytype_int16 yytable[] = { - 132, 113, 911, 912, 1449, 1447, 503, 584, 405, 1850, - 617, 1851, 333, 387, 150, 1816, 150, 1032, 152, 1567, - 376, 151, 1689, 1442, 310, 4, 378, 506, 508, 510, - 1301, 1444, 150, 1966, 600, 139, 282, 136, 696, 1235, - 1508, 161, 266, 337, 262, 315, 1844, 316, 424, 166, - 150, 161, 621, 266, 1007, 708, 724, 166, 2102, 592, - 593, 283, 1015, 267, 725, 371, 1336, 375, 701, 431, - 702, 314, 278, 5, 1027, 279, 1132, 284, 285, 262, - 906, 2083, 592, 593, 336, 153, 150, 154, 462, 463, - 464, 592, 593, 291, 293, 372, 296, 592, 593, 409, - 726, 735, 738, 913, 311, 1284, 592, 593, 739, 1882, - 988, 135, 917, 701, 1434, 702, 671, 553, 673, 2085, - 1193, 734, 432, 1138, 1894, 684, 1139, 1430, 701, 410, - 702, 412, 317, 730, 420, 420, 1238, 1194, 741, 1545, - 1020, 731, 426, 553, 739, 1195, 1196, 1197, 592, 593, - 137, 1198, 1199, 433, 1135, 262, 733, 138, 1041, 1136, - 262, 678, 399, 400, 734, 262, 1050, 592, 593, 1448, - 1193, 1400, 420, 565, 566, 567, 262, 504, 1443, 262, - 262, 262, 262, 420, 2072, 145, 1445, 1194, 1813, 1302, - 1303, 1304, 1305, 1013, 141, 1195, 1196, 1197, 507, 509, - 511, 1198, 1199, 142, 312, 1284, 1690, 697, 698, 1509, - 1510, 613, 614, 615, 268, 592, 593, 269, 107, 270, - 107, 701, 107, 702, 157, 627, 628, 533, 158, 1258, - 107, 262, 1033, 1034, 1123, 1446, 1924, 385, 107, 592, - 593, 386, 734, 505, 262, 388, 618, 262, 532, 389, - 334, 531, 134, 408, 1447, 972, 107, 377, 418, 421, - 1987, 262, 313, 379, 262, 262, 262, 262, 1143, 1306, - 1294, 140, 262, 262, 262, 162, 1236, 338, 262, 163, - 336, 399, 400, 167, 709, 162, 710, 168, -541, 1023, - 711, 167, 107, 143, 2103, 1024, 455, 153, 153, 154, - 154, 592, 593, 262, 262, 262, 701, 465, 702, 395, - 396, 397, 398, 2024, 752, 399, 400, 262, 262, 587, - 588, 701, 902, 702, 904, 905, 144, 596, 601, 727, - 736, 728, 728, 399, 400, 729, 737, 411, 146, 592, - 593, 918, 1287, 399, 400, 306, 554, 307, 555, 1113, - 592, 593, 556, 1006, 1033, 1034, 1315, 1284, 1268, 688, - -544, 147, 1285, 1288, 287, 288, 592, 593, 260, 399, - 400, 1925, 554, 2098, 555, 1327, 289, 148, 556, 952, - 290, 420, 594, 752, 297, 262, 262, 399, 400, 159, - 679, 133, 680, 592, 593, 134, 681, 395, 396, 397, - 1014, 262, 149, 817, 1707, 592, 593, 712, 160, 395, - 396, 397, 398, 164, 1926, 1332, 986, 1955, 826, 827, - 828, 829, 489, 752, 490, 1956, 1927, 183, 746, 638, - 184, 134, 262, 185, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 592, 593, 1641, 1642, 552, 2128, 592, 593, - 287, 288, 1809, 1681, 1682, 59, 60, 61, 62, 592, - 593, 298, 289, 1928, 595, 299, 295, 592, 593, 262, - 73, 300, 301, 76, 302, 303, 262, 807, 834, 320, - 1929, 420, 321, 420, 262, 420, 420, 426, 2057, 820, - 459, 701, 304, 702, 603, 682, 592, 593, 604, 262, - 262, 262, 262, 262, 420, 420, 262, 152, 2176, 152, - 833, 262, 835, 165, 1414, 751, 1416, 2058, 1418, 752, - 1420, 592, 593, 592, 593, 881, 884, 887, 890, 757, - 592, 593, 169, 752, 262, 592, 593, 170, 592, 593, - 863, 960, 2059, 171, 2060, 260, 602, 395, 396, 397, - 398, 395, 396, 397, 398, 1389, 2061, 1390, 172, 2112, - 592, 593, 1008, 592, 593, 262, 262, 1398, 592, 593, - 173, 399, 400, 592, 593, 399, 400, 174, 564, 550, - 551, 2113, 412, 412, 2122, 552, 573, 575, 577, 2157, - 399, 400, 582, 179, 2158, 399, 400, -543, 395, 396, - 397, 398, -548, 275, 175, 811, 276, 813, 277, 815, - 816, 262, 262, 262, 1028, 909, 910, 1029, 975, 1030, - 588, 176, 399, 400, 1988, 1989, 177, 762, 830, 831, - 1990, 752, 1182, 426, 420, 426, 420, 420, 420, 420, - 420, 420, 1193, 420, 420, 420, 420, 974, 178, 420, - 420, 420, 152, 980, 271, 979, 262, 272, 180, 1194, - 273, 1193, 274, 1260, 181, 987, 1261, 1195, 1196, 1197, - 1992, 1993, 182, 1198, 1199, 186, 1990, 1193, 1194, 1489, - 1832, 701, 263, 702, 703, 1493, 1195, 1196, 1197, 1152, - 262, 1153, 1198, 1199, 1194, 1017, 1267, 775, 1268, 685, - 686, 752, 1195, 1196, 1197, 1059, 838, 264, 1198, 1199, - 752, 513, 262, 1037, 514, 699, 280, 515, 262, 516, - 689, 426, 1048, 690, 592, 593, 691, 1052, 692, 420, - 286, 1530, 1151, 1617, 1730, 1618, 1699, 262, -545, 262, - 676, 548, 549, 550, 551, 265, 871, 1547, 995, 552, - 752, 281, 996, 1552, 150, 344, 305, 1658, 959, 294, - 961, 962, 963, 964, 965, 966, 308, 968, 969, 970, - 971, 309, 319, 976, 977, 978, 2115, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 318, 1698, 2159, 1699, 552, 262, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 1345, 322, 1346, 814, 354, - 355, 356, 357, 1351, 323, 1352, 157, 358, 359, 360, - 1022, 324, 361, 564, 362, 545, 546, 676, 548, 549, - 550, 551, 1793, 170, 1794, 363, 552, 1025, 364, 1141, - 329, 341, 262, 752, 2089, 1046, 1177, 1178, 1221, 342, - 752, 752, 752, 1054, 1222, 262, 1708, 1223, 752, 330, - 1264, 752, 1297, 262, 752, 1374, 752, 343, 1717, 752, - 1286, 1289, 331, 1397, 1405, 393, 1427, 752, 752, 1535, - 752, 1536, 332, 752, 1447, 752, 262, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 339, 1537, 2138, 1538, 552, - 752, 390, 752, 1593, 1625, 1833, 1714, 752, 752, 1825, - 1715, 1870, 1883, 752, 1907, 1871, 1884, 1908, 752, 1185, - 1923, 752, 391, 1447, 1871, 1952, 1191, 1961, 340, 734, - 1202, 1962, 365, 366, 367, 1980, 2014, 2040, 373, 1871, - 752, 1871, 533, 368, 2048, 384, 415, 369, 752, 370, - 107, 416, 429, 1290, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 134, 431, 512, 262, 552, 399, 400, 2056, 581, 2070, - 386, 752, -542, 1871, 1531, 2118, 2119, 1296, 578, 752, - 752, 2120, 262, 2121, 441, 752, 446, 752, 1516, 262, - 262, 262, 262, 2123, 2125, 1399, 1401, 752, 1962, 2149, - 2160, 2173, 420, 1871, 752, 2174, 2187, 2190, 460, 497, - 1871, 2191, 150, 344, 701, 500, 702, 868, 517, 520, - 583, 521, 522, 561, 1805, 1806, 562, 568, 585, 569, - 570, 262, 262, 571, 262, 586, 262, 262, 605, 262, - 606, 262, 262, 262, 262, 262, 262, 262, 262, 262, - 607, 608, 262, 619, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 1344, 609, 610, 611, 354, 355, 356, - 357, 616, 620, 622, 623, 358, 359, 360, 624, 625, - 361, 626, 362, 629, 633, 630, 631, 262, 420, 420, - 634, 640, 641, 363, 649, 650, 364, 651, 662, 663, - 665, 667, 668, 666, 670, 672, 669, 687, 693, 262, - 700, 706, 707, 133, 743, 713, 769, 747, 773, 776, - 748, 777, 778, 262, 262, 779, 1326, 821, 823, 808, - 824, 552, 839, 393, 825, 866, 875, 876, 892, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 750, 548, 549, 550, 551, 894, 896, 1399, - 1401, 552, 900, 701, 901, 702, 929, 1162, 903, 931, - 950, 932, 934, 941, 942, 953, 994, 989, 998, 1011, - 999, 262, 1000, 1001, 1002, 1010, 1021, 1009, 1026, 1040, - 1042, 1057, 1045, 1051, 262, 262, 262, 1053, 1056, 1060, - 365, 366, 367, 1064, 1701, 262, 1061, 1065, 1703, 1713, - 420, 368, 1379, 1380, 420, 369, 1067, 370, 107, 1068, - 1069, 1070, 1072, 420, 1073, 420, 1074, 1075, 420, 1076, - 1077, 1078, 1079, 1080, 1081, 1082, 1085, 1086, 1111, 1112, - 1120, 1142, 262, 1121, 1126, 1128, 1129, 701, 1122, 702, - 1718, 1130, 1131, 1137, 1148, 1156, 1163, 1157, 1166, 1165, - 1167, 336, 1168, 1169, 1170, 1171, 1180, 1172, 1173, 1188, - 1192, 1214, 1189, 1556, 1216, 1561, 1227, 1228, 1229, 1230, - 1241, 420, 1254, 1242, 1243, 1246, 1256, 1277, 1257, 1266, - 1996, 1263, 1269, 1270, 1271, 1274, 1275, 1276, 1292, 1293, - 1298, 1299, 1312, 1322, 1328, 262, 1300, 1323, 1338, 1324, - 1325, 1331, 1349, 1335, 1355, 1357, 262, 1368, 1334, 1392, - 1476, 1408, 262, 1381, 1409, 1410, 1413, 1435, 1422, 1423, - 1424, 1425, 1426, 1428, 1481, 1436, 1439, 1450, 1483, 1440, - 1441, 1451, 1461, 1452, 1453, 1454, 1455, 1487, 1456, 1488, - 1457, 1458, 1490, 1462, 1709, 1347, 1348, 1463, 1350, 1464, - 1353, 1354, 1465, 1356, 1466, 1358, 1359, 1360, 1361, 1362, - 1363, 1364, 1365, 1366, 1467, 262, 262, 262, 1468, 1473, - 1478, 262, 1479, 262, 1484, 262, 1491, 262, 1485, 262, - 262, 262, 1492, 1501, 1722, 1722, 1494, 1495, 1499, 1507, - 1512, 1513, 1519, 1515, 1518, 1532, 262, 1523, 1525, 1859, - 1529, 1378, 1526, 1527, 1544, 1550, 1564, 262, 1563, 1548, - 1565, 1566, 1568, 1569, 1570, 262, 1574, 1577, 262, 1697, - 1575, 1576, 1578, 1393, 1580, 1582, 1583, 1584, 1585, 1586, - 1587, 1588, 1589, 1590, 1591, 1592, 1602, 1406, 1139, 1613, - 1615, 1657, 1620, 1624, 1629, 1630, 1676, 1731, 1640, 1638, - 1654, 1655, 1669, 1639, 1674, 1675, 1782, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 336, 1646, 1647, 1648, 552, 1649, 426, 426, - 1680, 1750, 1661, 1662, 262, 1705, 1745, 1711, 1663, 1664, - 1732, 1665, 1666, 1671, 1724, 1459, 1694, 1734, 1735, 1684, - 1687, 1736, 1737, 420, 1738, 1744, 1710, 1748, 1470, 1471, - 1472, 262, 1261, 1704, 1729, 1751, 262, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 1760, 1761, 1762, 1765, 552, - 1767, 1477, 1766, 1769, 1778, 1770, 1784, 1786, 1783, 1788, - 1789, 1790, 1791, 1792, 1795, 1814, 1500, 1815, 1824, 1828, - 1855, 1847, 1856, 1759, 1810, 1846, 1858, 1782, 1863, 1800, - 1875, 1848, 1886, 1893, -546, 1905, 1911, 734, 1881, 1918, - 1891, 1862, 1906, 1920, 1912, 1930, 1932, 1914, 1915, 1937, - 1921, 1938, 1943, 1944, 1945, 262, 262, 1946, 1950, 1948, - 1949, 1951, 1953, 1954, 412, 412, 1959, 1973, 1974, 1837, - 1975, 1976, 1978, 1979, 1999, 2000, 1842, 1845, 262, 1560, - 2002, 2004, 2016, 2017, 262, 2019, 2015, 1743, 2025, 2044, - 1573, -547, 2018, 262, 1853, 2028, 1579, 2047, 2029, 2032, - 2049, 420, 2034, 2051, 420, 2041, 2052, 2063, 2045, 2055, - 2064, 2066, 2074, 2081, 2067, 1817, 1818, 1819, 1820, 1821, - 1823, 262, 2086, 2091, 2139, 2140, 2141, 2142, 1296, 2144, - 2145, 2146, 336, 2147, 262, 426, 2105, 2150, 2124, 2165, - 2172, 2183, 2188, 2189, 2164, 2192, 2193, 1546, 2099, 1626, - 1627, 1628, 2175, 1756, 1605, 1631, 742, 1632, 1967, 1633, - 1572, 1634, 1941, 1635, 1636, 1637, 1785, 112, 122, 426, - 123, 124, 1994, 1614, 878, 2065, 1696, 130, 1843, 1857, - 1652, 1723, 0, 0, 1047, 0, 0, 262, 0, 0, - 0, 1660, 0, 0, 0, 0, 0, 0, 0, 1668, + 134, 1378, 114, 115, 430, 572, 467, 874, 875, 1376, + 411, 588, 152, 971, 1712, 1747, 605, 1748, 154, 313, + 263, 979, 338, 153, 381, 383, 1251, 991, 152, 609, + 376, 1602, 380, 152, 1371, 685, 1857, 1184, 1373, 525, + 5, 152, 1438, 1740, 724, 265, 697, 318, 269, 319, + 725, 141, 393, 275, 269, 727, 580, 581, 1980, 285, + 4, 725, 300, 162, 152, 415, 166, 290, 291, 342, + 270, 135, 317, 580, 581, 136, 987, 869, 137, 292, + 265, 712, 721, 293, 286, 341, 1234, 1281, 438, 138, + 559, 560, 561, 1141, 876, 659, 377, 661, 547, 314, + 287, 288, 1779, 281, 139, 673, 282, 437, 547, 710, + 1142, 1492, 580, 581, 1786, 666, 140, 711, 1143, 1144, + 1145, 580, 581, 1091, 1146, 1147, 1092, 1961, 601, 602, + 603, 416, 1963, 880, 320, 418, 426, 426, 716, 1470, + 580, 581, 1359, 143, 432, 616, 717, 294, 296, 301, + 299, 460, 309, 302, 310, 439, 977, 580, 581, 303, + 304, 1377, 305, 306, 951, 970, 580, 581, 405, 406, + 271, 426, 144, 272, 1953, 273, 265, 1337, 1709, 265, + 155, 307, 156, 1363, 265, 426, 1252, 1253, 1254, 1255, + 1372, 405, 406, 1234, 1374, 984, 719, 1621, 580, 581, + 315, 580, 581, 1234, 720, 686, 687, 690, 263, 691, + 1000, 526, 1439, 1440, 582, 1085, 1603, 145, 1009, 108, + 580, 581, 1814, 146, 1080, 414, 108, 405, 406, 108, + 424, 427, 720, 265, -525, 108, 1870, 508, 148, 1376, + 108, 1815, 558, 992, 993, 147, 265, 758, 108, 265, + 524, 759, 565, 606, 935, 523, 570, 149, 316, 136, + 178, 339, 382, 384, 265, 455, 1256, 265, 265, 265, + 265, 108, 1244, 405, 406, 1185, 698, 265, 699, 468, + -523, 265, 700, 341, 865, 394, 867, 868, 142, 395, + 1908, 401, 402, 403, 404, 1981, 1235, 1238, 163, 417, + 690, 167, 691, 881, 343, 159, 265, 265, 265, 527, + 1096, 713, 722, 714, 714, 405, 406, 715, 723, 155, + 492, 156, 493, 265, 1237, 405, 406, 805, 548, 677, + 549, 1070, 580, 581, 550, 405, 406, 155, 548, 156, + 549, 915, 405, 406, 550, 667, 1976, 668, 580, 581, + 690, 669, 691, 580, 581, 992, 993, 1272, 580, 581, + 800, 401, 402, 403, 978, 759, 674, 675, 580, 581, + 401, 402, 403, 404, 183, 575, 576, 184, 949, 1816, + 185, 150, 688, 584, 589, 1088, 426, 265, 151, 1817, + 1089, 265, 265, 186, 405, 406, 580, 581, 401, 402, + 403, 404, 401, 402, 403, 404, 160, 265, 401, 402, + 403, 404, 1277, 701, 580, 581, 690, 1818, 691, 707, + 759, 2003, 405, 406, 720, 1141, 405, 406, 60, 61, + 62, 63, 1846, 161, 732, 1819, 1141, 580, 581, 690, + 1847, 691, 1142, 74, 810, 164, 77, 1187, 580, 581, + 1143, 1144, 1145, 1142, 580, 581, 1146, 1147, 1938, 265, + 1141, 1143, 1144, 1145, 165, 580, 581, 1146, 1147, 1939, + 391, 179, 797, 2042, 392, 1940, 690, 1142, 691, 558, + 670, 583, 265, 168, 1207, 1143, 1144, 1145, 169, 265, + 790, 1146, 1147, 923, 426, 180, 426, 265, 426, 426, + 432, 626, 803, 136, 265, 265, 426, 426, 265, 154, + 170, 154, 1209, 265, 809, 1210, 811, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 580, 581, 171, 265, 546, + 1375, 1141, 172, 323, 840, 1705, 324, 182, 580, 581, + 1106, 1571, 1107, 580, 581, 1216, 1941, 1217, 1142, 325, + 1690, 972, 1691, 265, 265, 181, 1143, 1144, 1145, 1942, + 580, 581, 1146, 1147, 1987, 1990, 173, 580, 581, 1130, + 938, 174, 418, 418, 1325, 1728, 1326, 707, 794, 267, + 796, 1988, 798, 799, 580, 581, 175, 1335, 1997, 176, + 806, 807, 580, 581, 290, 291, 580, 581, 707, 265, + 265, 265, 544, 545, 276, 2026, 292, 277, 546, 278, + 298, 274, 590, 2027, 233, 177, 1534, 234, 1535, 235, + 279, 432, 426, 432, 426, 426, 426, 426, 426, 426, + 41, 426, 426, 426, 426, 937, 188, 426, 426, 426, + 154, 943, 405, 406, 265, 942, 2028, 591, 707, -530, + 707, 592, 1611, 950, 1612, 1018, 872, 873, 1871, 1872, + 678, 576, 707, 679, 1873, 266, 680, 268, 681, 1548, + 539, 540, 664, 542, 543, 544, 545, 1875, 1876, 265, + 283, 546, 284, 1873, 981, 289, 664, 542, 543, 544, + 545, 308, 814, 848, 1418, 546, 759, 759, 265, 996, + 1422, 311, 953, 690, 265, 691, 759, 432, 1007, 1105, + 1265, 759, 1217, 1011, -526, 426, 922, 297, 924, 925, + 926, 927, 928, 929, 327, 931, 932, 933, 934, 1554, + 1555, 939, 940, 941, 1644, 959, 1612, 1094, -527, 960, + 690, 759, 691, 692, 265, 1125, 265, 1460, 1126, 759, + 1169, 1170, 759, 1171, 759, 759, 1622, 759, 1472, 1213, + 312, 1247, 1314, 759, 1477, 759, 759, 1334, 1631, 1594, + 1595, 759, 1342, 321, 1967, 1356, 759, 1122, 265, 759, + 580, 581, 322, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 1005, 1468, 1513, 1542, 546, 759, 759, 759, 1013, + 1628, 1729, 1721, 328, 1629, 1116, 759, 1767, 1376, 265, + 1780, 1768, 1797, 1798, 1781, 1813, 759, 759, 329, 1768, + 334, 2010, 265, 1843, 1236, 1239, 346, 720, 1852, 1866, + 265, 1897, 1853, 1768, 1921, 759, 1929, 1937, 1768, 265, + 759, 759, 335, 347, 707, 1951, 707, 707, 1993, 1768, + 1994, 1376, 759, 1995, 759, 1996, 348, 759, 1998, 759, + 707, 2000, 759, 2021, 2029, 1853, 2039, 1768, 759, 2050, + 2040, 2053, 465, 1768, 690, 2054, 691, 845, 336, 337, + 344, 1240, 345, 527, 378, 389, 396, 422, 435, 390, + 421, 437, 443, 447, 707, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 397, 1227, 136, 466, 546, 506, 461, 500, 503, + 507, 509, 512, 513, 514, 569, 555, 556, 707, 392, + 607, 1250, 563, 593, 566, 1133, 571, 265, 573, 574, + 594, 595, 1139, 1446, 596, 597, 1150, 598, 599, 610, + 604, 1246, 611, 608, 621, 617, 265, 554, 612, 1336, + 1338, 613, 614, 615, 1701, 1702, 265, 618, 619, 622, + 629, 426, 1290, 1291, 628, 1293, 1294, 1295, 637, 1297, + 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 638, + 639, 650, 655, 651, 653, 656, 658, 265, 265, 654, + 265, 265, 265, 657, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 660, 676, 265, 682, 689, 695, + 696, 135, 729, 702, 750, 733, 755, 761, 734, 1318, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 762, 791, 1329, 546, 546, + 843, 815, 817, 859, 265, 426, 426, 852, 853, 863, + 856, 864, 1343, 892, 894, 1271, 866, 895, 897, 905, + 913, 916, 265, 952, 958, 962, 963, 973, 964, 965, + 671, 966, 974, 975, 985, 1289, 986, 265, 265, 989, + 999, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 757, 542, 543, 544, 545, 707, + 1001, 1004, 1010, 546, 1388, 690, 1012, 691, 1615, 1336, + 1338, 1019, 1617, 1015, 1020, 1016, 1021, 1023, 1399, 1400, + 1401, 1024, 1025, 1027, 1028, 1029, 1030, 1031, 1032, 265, + 1033, 1034, 1035, 1036, 1627, 1039, 1043, 1068, 1069, 1319, + 1320, 1077, 1078, 265, 265, 265, 1079, 1084, 1090, 1095, + 1098, 1102, 1110, 1111, 265, 1117, 1119, 1128, 1140, 426, + 349, 1136, 1137, 426, 1162, 1164, 1179, 1430, 1176, 1177, + 1178, 1190, 426, 1203, 426, 1191, 1192, 426, 1195, 1206, + 1205, 1218, 1481, 1212, 1486, 1215, 1220, 1219, 1424, 1224, + 1225, 1221, 265, 1226, 1242, 1243, 812, 1879, 1248, 1249, + 1262, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 1268, 341, 1269, 1273, 359, 360, 361, 362, 1283, 1279, + 1276, 1280, 363, 364, 365, 1485, 1292, 366, 1296, 367, + 1308, 426, 1321, 1328, 1496, 1345, 1346, 1347, 1500, 1350, + 368, 1351, 1352, 369, 1353, 1354, 860, 861, 1355, 1357, + 265, 1365, 1364, 1410, 1369, 1368, 1370, 1412, 1380, 265, + 1379, 1381, 1382, 265, 1383, 1384, 1416, 1385, 1417, 1386, + 1387, 1419, 1391, 1390, 1392, 1393, 1396, 1394, 1636, 1636, + 1395, 1397, 1402, 1407, 1623, 1408, 1414, 1543, 1544, 1545, + 1413, 1420, 901, 902, 903, 1550, 1437, 1421, 1423, 1425, + 1429, 1442, 1431, 1443, 1449, 1445, 1448, 1453, 1455, 1456, + 1565, 1457, 265, 265, 265, 1459, 1469, 1473, 1756, 1475, + 265, 1573, 1610, 1488, 1490, 1462, 1489, 1491, 1493, 1581, + 1497, 1498, 1499, 1501, 1503, 265, 1504, 944, 1505, 1506, + 1507, 1508, 1509, 1510, 1511, 1512, 265, 1092, 370, 371, + 372, 1522, 1529, 1531, 265, 1537, 1541, 265, 1546, 373, + 1553, 1547, 1567, 374, 1568, 375, 1582, 1587, 1588, 1589, + 1551, 1552, 976, 1593, 1559, 1560, 1561, 1562, 1574, 1619, + 1659, 1575, 1576, 1683, 1577, 1597, 1625, 1578, 1600, 1579, + 1584, 995, 1614, 1645, 1607, 1654, 1210, 1002, 1646, 1642, + 1648, 1651, 1671, 1660, 1638, 1624, 1618, 1653, 1657, 1643, + 1667, 1668, 341, 1669, 1670, 1672, 1673, 1674, 432, 432, + 1684, 1658, 1678, 1685, 265, 1687, 1706, 1710, 1711, 1720, + 1724, 1742, 1743, 1570, 1744, 1752, 1753, 1755, 426, 1760, + -528, 720, 1772, 1778, 1783, 1784, 265, 1785, 1804, 1794, + 1795, 265, 1796, 1801, 1802, 1808, 1696, 1805, 1810, 1759, + 1811, 1820, 1827, 1822, 1828, 1837, 1834, 1839, 1840, 1835, + 1836, 1071, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 1841, 1842, 1844, 1845, 546, + 1689, 1683, 1850, 1865, 1885, 1882, 1733, 1887, 1899, 1898, + 1883, 1901, 1903, 1738, 1741, 1909, 1925, 1900, -529, 1928, + 1916, 1912, 1101, 1932, 1933, 265, 1642, 1918, 265, 265, + 1913, 1930, 1750, 1922, 1944, 1109, 1926, 1936, 1902, 418, + 418, 1725, 1652, 1945, 1947, 1948, 1955, 1959, 1964, 1969, + 2011, 265, 1127, 1983, 2012, 2013, 1999, 265, 2014, 1666, + 2016, 2017, 2018, 2022, 2019, 2033, 265, 2034, 2038, 2041, + 1749, 2046, 2051, 2052, 426, 2055, 2056, 426, 1977, 1471, + 1525, 1665, 1858, 1758, 1831, 1686, 1495, 113, 124, 125, + 988, 126, 855, 1946, 707, 265, 707, 1530, 1877, 1609, + 132, 1754, 1246, 1637, 0, 1739, 341, 1006, 265, 432, + 0, 728, 0, 0, 0, 0, 0, 152, 349, 0, + 0, 0, 0, 0, 0, 0, 1642, 0, 0, 1968, + 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, + 0, 1713, 1714, 1715, 1716, 1717, 1719, 0, 0, 0, + 0, 265, 0, 0, 0, 1832, 0, 0, 1809, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 1734, 0, + 0, 1736, 359, 360, 361, 362, 0, 0, 0, 1270, + 363, 364, 365, 265, 0, 366, 0, 367, 0, 0, + 0, 0, 0, 1862, 0, 265, 0, 0, 368, 0, + 0, 369, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 705, 0, 0, 0, 2090, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1838, 0, 262, 1840, 0, - 0, 0, 0, 0, 0, 1942, 0, 0, 0, 262, + 1851, 0, 0, 0, 0, 0, 0, 0, 0, 1309, + 1859, 0, 0, 0, 0, 0, 0, 0, 0, 399, + 0, 0, 0, 0, 0, 265, 0, 0, 1642, 0, + 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, + 1863, 0, 1884, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 265, 0, 0, 265, 0, 0, 0, + 0, 0, 418, 0, 0, 0, 0, 265, 0, 0, + 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1344, 1642, 0, 0, 0, 370, 371, 372, 0, + 0, 0, 0, 0, 0, 0, 341, 373, 0, 0, + 0, 374, 0, 375, 108, 1924, 1954, 265, 0, 0, + 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 150, 344, 0, 0, 1728, 0, - 0, 0, 1971, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 1749, 0, 0, 262, 0, - 0, 0, 0, 1972, 0, 0, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 0, 0, 0, 0, 354, - 355, 356, 357, 262, 0, 0, 262, 358, 359, 360, - 412, 0, 361, 0, 362, 0, 0, 262, 0, 0, - 0, 262, 0, 0, 0, 363, 0, 0, 364, 0, + 265, 0, 0, 690, 0, 691, 1632, 0, 0, 0, + 0, 413, 0, 0, 707, 423, 0, 0, 0, 428, + 0, 0, 0, 0, 0, 0, 0, 1409, 0, 0, + 0, 1889, 1890, 1891, 1892, 1893, 440, 441, 442, 0, + 444, 445, 446, 0, 448, 449, 450, 451, 452, 453, + 454, 0, 456, 457, 458, 459, 0, 0, 0, 463, + 0, 0, 0, 0, 0, 265, 265, 265, 265, 265, + 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, + 0, 0, 0, 1642, 0, 0, 0, 0, 1923, 0, + 0, 0, 1927, 0, 0, 0, 0, 707, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 262, 0, 2006, 2007, - 2008, 2009, 2010, 0, 0, 393, 0, 0, 0, 0, + 0, 0, 0, 0, 265, 515, 517, 519, 520, 463, + 0, 0, 0, 0, 0, 1642, 0, 0, 1960, 0, + 0, 0, 1962, 553, 463, 0, 426, 0, 0, 0, + 0, 0, 0, 0, 0, 1348, 0, 0, 1974, 568, + 265, 0, 0, 0, 0, 0, 0, 426, 426, 578, + 579, 0, 0, 0, 0, 579, 0, 0, 0, 0, + 0, 426, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1728, 0, 0, 0, 0, 262, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1829, 2073, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 2042, 0, 0, 1852, 2046, 7, 8, 0, - 0, 0, 365, 366, 367, 723, 0, 0, 1861, 0, - 0, 0, 0, 368, 0, 0, 0, 369, 0, 370, - 107, 0, 0, 0, 262, 262, 262, 262, 262, 0, + 0, 0, 0, 2008, 2009, 0, 0, 0, 620, 0, + 0, 0, 623, 624, 625, 0, 627, 0, 0, 0, + 630, 631, 632, 0, 0, 633, 0, 464, 0, 0, + 1583, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2031, 0, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 2047, 2049, 663, 546, 0, 0, 463, 672, 0, + 0, 0, 0, 0, 0, 2057, 0, 0, 0, 0, + 0, 0, 0, 0, 683, 684, 0, 0, 0, 0, + 0, 0, 0, 0, 518, 0, 0, 464, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2082, 0, 0, 0, 2084, 0, - 0, 0, 1718, 0, 0, 0, 0, 0, 0, 0, - 0, 1728, 0, 0, 2096, 0, 0, 0, 0, 0, - 262, 0, 0, 0, 0, 714, 25, 26, 715, 28, - 29, 716, 31, 717, 33, 34, 35, 36, 0, 262, - 0, 38, 39, 40, 0, 0, 42, 0, 0, 0, - 0, 1919, 718, 48, 0, 0, 50, 719, 0, 53, - 720, 0, 0, 0, 420, 2136, 2137, 382, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, - 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 420, 420, 407, 0, 0, 0, 417, 0, 0, - 0, 422, 84, 85, 86, 0, 0, 0, 420, 0, - 0, 0, 1960, 0, 0, 0, 0, 0, 434, 436, - 439, 440, 1968, 442, 436, 444, 445, 0, 447, 436, - 449, 450, 451, 452, 453, 454, 0, 456, 457, 458, - 0, 0, 0, 436, 0, 0, 0, 1728, 0, 0, + 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, + 738, 0, 0, 0, 742, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 756, 517, + 0, 0, 0, 760, 0, 0, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 781, 782, 783, 784, 785, 786, 787, + 787, 0, 792, 793, 0, 795, 0, 0, 0, 0, + 0, 801, 0, 804, 0, 0, 0, 0, 787, 0, + 0, 1692, 1693, 463, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 694, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 833, 835, + 836, 837, 838, 839, 0, 841, 842, 0, 0, 0, + 0, 0, 849, 850, 851, 464, 0, 0, 0, 0, + 857, 858, 0, 463, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2001, 0, 0, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 2162, 0, + 0, 1405, 515, 663, 877, 0, 0, 0, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 0, 0, 0, + 0, 896, 0, 898, 0, 899, 0, 0, 0, 463, + 463, 463, 904, 0, 906, 907, 908, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1728, 0, 0, 0, 0, 0, 0, 523, 525, 527, - 528, 436, 0, 0, 0, 2184, 2186, 0, 0, 0, - 0, 0, 0, 0, 559, 436, 0, 0, 0, 0, - 0, 2043, 2194, 0, 0, 0, 0, 0, 0, 0, - 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 591, 0, 0, 0, 0, 591, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, - 0, 0, 0, 437, 0, 0, 0, 632, 437, 0, - 0, 635, 636, 637, 0, 639, 0, 0, 0, 642, - 643, 644, 437, 0, 645, 0, 0, 0, 438, 0, - 0, 0, 0, 443, 0, 0, 0, 0, 448, 0, + 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 780, 0, 0, 0, 463, 0, 0, 788, 789, 947, + 0, 948, 0, 0, 841, 842, 0, 0, 0, 0, + 0, 0, 0, 961, 0, 0, 808, 0, 0, 967, + 0, 464, 0, 0, 0, 0, 0, 0, 0, 463, + 0, 1825, 0, 0, 0, 982, 983, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 834, 0, 463, 0, + 997, 998, 0, 0, 463, 1003, 0, 0, 0, 997, + 0, 0, 0, 709, 0, 0, 1014, 0, 0, 0, + 1017, 464, 464, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 1037, 0, 833, 546, 1040, 0, 0, 1878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 675, 0, 1728, 0, 683, 0, 0, 0, + 0, 0, 0, 0, 1888, 0, 0, 464, 464, 464, + 0, 0, 0, 0, 0, 0, 0, 0, 463, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1406, 0, 0, 0, 0, 0, 0, + 0, 0, 464, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 694, 695, 0, 0, 0, 526, 0, 0, - 437, 0, 0, 0, 0, 0, 722, 0, 0, 0, - 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, - 0, 0, 755, 0, 0, 1728, 0, 760, 0, 0, - 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, - 0, 774, 0, 0, 0, 0, 0, 780, 781, 782, - 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, - 793, 794, 795, 796, 798, 799, 800, 801, 802, 803, - 804, 804, 0, 809, 810, 0, 812, 0, 0, 0, - 0, 0, 818, 0, 0, 0, 822, 0, 0, 0, + 0, 0, 463, 0, 0, 0, 0, 0, 0, 1115, + 0, 0, 0, 1121, 0, 0, 0, 464, 0, 463, + 0, 0, 0, 0, 0, 0, 0, 1134, 1135, 0, + 0, 0, 0, 1138, 0, 0, 464, 0, 0, 0, + 0, 0, 464, 0, 0, 0, 0, 0, 0, 1163, + 0, 0, 1165, 0, 0, 0, 0, 0, 1970, 1971, + 1972, 1973, 1975, 1233, 0, 0, 0, 0, 0, 0, + 0, 1180, 0, 1182, 1183, 0, 0, 0, 0, 0, + 0, 0, 834, 0, 1041, 0, 0, 0, 0, 0, + 0, 0, 1201, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 1223, 0, 546, 464, 2015, 152, 349, + 1229, 1230, 1231, 1232, 0, 0, 0, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 804, 0, 0, 0, 0, 436, 0, 0, 0, 0, - 0, 0, 0, 0, 841, 842, 843, 844, 845, 846, - 847, 848, 849, 850, 851, 852, 853, 854, 856, 858, - 859, 860, 861, 862, 0, 864, 865, 0, 0, 0, - 0, 0, 872, 873, 874, 0, 0, 0, 0, 880, - 883, 886, 889, 891, 0, 893, 0, 895, 0, 436, - 436, 1283, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 526, 0, 0, 523, 675, - 914, 0, 0, 0, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 0, 0, 0, 0, 933, 0, 935, - 0, 936, 1367, 0, 0, 436, 436, 436, 0, 0, - 943, 944, 945, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 797, 0, 0, 0, 0, 0, 0, 805, - 806, 0, 0, 0, 0, 0, 967, 0, 0, 0, + 0, 0, 1266, 1267, 0, 0, 463, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 0, + 464, 0, 0, 359, 360, 361, 362, 0, 0, 0, + 0, 363, 364, 365, 0, 0, 366, 464, 367, 0, + 0, 0, 0, 0, 0, 0, 463, 0, 0, 368, + 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1310, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1311, 1312, 1313, 0, 0, 0, 0, 1315, + 1316, 1307, 1317, 0, 0, 0, 0, 0, 0, 0, + 399, 1323, 1324, 0, 0, 0, 0, 0, 0, 1327, + 0, 0, 0, 0, 0, 1331, 1332, 1333, 0, 0, + 0, 0, 0, 1339, 1340, 0, 0, 0, 463, 0, + 0, 0, 0, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 157, 158, 0, 1367, + 0, 0, 0, 0, 0, 0, 0, 370, 371, 372, + 0, 0, 0, 0, 464, 0, 0, 0, 373, 0, + 0, 0, 374, 0, 375, 108, 0, 0, 0, 0, + 0, 0, 1398, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, + 405, 406, 1411, 0, 0, 0, 0, -524, 0, 1461, + 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 1339, 1340, 0, 0, 0, 1427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 984, 0, 985, 0, 832, - 864, 865, 0, 0, 437, 0, 0, 0, 997, 0, - 0, 0, 0, 0, 1003, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 436, 0, 0, 857, 0, 0, - 1018, 1019, 0, 0, 836, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1460, 436, 0, 1038, 1039, - 0, 0, 436, 1044, 0, 0, 0, 1038, 437, 437, - 0, 0, 0, 0, 1055, 0, 0, 0, 1058, 0, - 0, 856, 0, 1062, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1498, 0, 0, 897, 898, - 0, 0, 0, 0, 1083, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 437, 437, 437, 0, 0, 0, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 436, - 0, 0, 552, 0, 938, 939, 940, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, - 0, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 1514, 0, 552, 0, 0, 436, 0, 0, 981, - 0, 0, 0, 437, 0, 0, 0, 0, 0, 436, - 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, - 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, - 0, 437, 0, 1012, 0, 0, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 0, 0, 0, 1186, 1187, - 857, 0, 1063, 0, 1190, 1036, 0, 0, 0, 0, - 0, 1043, 0, 0, 0, 0, 0, 0, 0, 0, - 1215, 0, 0, 1217, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 1231, 0, 1233, 1234, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, - 0, 0, 0, 1252, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 1273, 0, 0, 552, 0, 1114, 0, - 1279, 1280, 1281, 1282, 0, 0, 0, 0, 1291, 0, - 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, - 0, 0, 1316, 436, 436, 436, 436, 1321, 437, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1650, - 0, 0, 0, 0, 0, 1147, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1155, 437, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 1702, 552, 0, 0, 0, 436, 0, 0, 1179, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1370, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1371, - 1372, 1373, 0, 0, 0, 0, 1375, 1376, 0, 1377, - 0, 0, 0, 0, 0, 0, 0, 1383, 0, 1384, - 1385, 1386, 1387, 1388, 0, 0, 0, 0, 0, 1706, - 1391, 0, 0, 0, 0, 0, 1395, 1396, 0, 0, - 0, 0, 0, 1402, 1403, 0, 0, 0, 436, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1415, 1712, - 1417, 0, 1419, 0, 1421, 0, 0, 0, 0, 0, - 0, 0, 437, 437, 437, 437, 0, 0, 0, 0, - 0, 0, 1827, 0, 0, 1438, 0, 0, 0, 0, + 0, 0, 1436, 0, 0, 1441, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1317, 1318, 1319, 1320, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1469, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, - 0, 0, 0, 0, 0, 437, 0, 1482, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 1402, 1403, - 552, 0, 1497, 0, 0, 1369, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1506, 1910, 0, 1511, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 1533, 437, 0, 0, - 1936, 0, 0, 1540, 1541, 1542, 1543, 0, 0, 0, - 0, 0, 1549, 0, 1551, 0, 1549, 1555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1407, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 704, 0, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 437, 0, - 552, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 1480, 0, - 0, 1643, 1644, 1645, 0, 0, 0, 0, 0, 0, - 1651, 0, 1653, 0, 0, 0, 0, 0, 0, 1656, + 0, 0, 1463, 0, 0, 1466, 1467, 0, 0, 0, + 0, 0, 0, 1474, 0, 1476, 464, 1474, 1480, 0, + 0, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 693, 0, 0, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 494, 495, 496, 497, 498, 499, 0, 501, 502, + 0, 0, 0, 0, 504, 505, 0, 0, 0, 1549, + 0, 0, 464, 0, 510, 511, 1556, 1557, 1558, 0, + 0, 0, 0, 0, 0, 1564, 0, 1566, 0, 0, + 0, 0, 0, 0, 1569, 0, 0, 0, 0, 152, + 349, 0, 0, 0, 0, 0, 0, 463, 0, 0, + 0, 0, 1585, 0, 0, 0, 0, 0, 802, 0, + 1590, 1591, 1592, 0, 0, 0, 0, 0, 0, 0, + 1601, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1613, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 0, 0, 0, 0, 359, 360, 361, 362, 0, 0, + 0, 0, 363, 364, 365, 846, 1630, 366, 0, 367, + 0, 0, 1639, 1640, 0, 0, 0, 0, 0, 0, + 368, 0, 0, 369, 634, 635, 636, 0, 0, 0, + 640, 641, 642, 643, 644, 645, 646, 0, 647, 0, + 0, 1663, 648, 649, 0, 0, 652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1675, 1676, 1677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 436, 0, 0, 0, 0, 1672, 0, 0, - 0, 0, 819, 0, 0, 1677, 1678, 1679, 0, 0, - 0, 0, 0, 0, 0, 1688, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1700, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 1716, 0, 0, 0, 0, 0, 1725, 1726, 869, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 1754, 0, 0, 0, 0, 0, 0, 0, 0, 1757, - 1758, 0, 0, 0, 0, 0, 1763, 1764, 0, 0, - 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, + 1679, 1680, 1681, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1688, 0, 0, 0, 0, 463, 463, + 1694, 0, 1695, 0, 0, 464, 0, 0, 1703, 1704, + 0, 0, 0, 0, 0, 0, 0, 0, 370, 371, + 372, 0, 0, 0, 0, 0, 0, 463, 0, 373, + 0, 1722, 0, 374, 0, 375, 108, 0, 0, 0, + 0, 0, 1732, 0, 0, 1735, 0, 0, 0, 1737, + 0, 0, 0, 0, 0, 0, 0, 0, 1680, 1681, + 0, 1746, 0, 0, 0, 0, 0, 0, 1632, 1751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1771, 1772, 1773, 0, 0, 0, 0, 0, 1774, 1775, - 1776, 1777, 0, 0, 0, 0, 0, 0, 1779, 1780, - 0, 437, 0, 0, 0, 0, 0, 0, 1947, 0, - 1787, 0, 0, 0, 0, 0, 0, 0, 0, 436, - 436, 1798, 0, 1799, 0, 0, 0, 0, 0, 1807, - 1808, 1670, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, - 0, 0, 1826, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1836, 0, 0, 1839, 0, 0, 0, - 1841, 0, 0, 0, 0, 0, 0, 0, 0, 1779, - 1780, 0, 0, 0, 0, 0, 0, 0, 0, 1854, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1755, - 0, 0, 0, 0, 0, 1867, 0, 0, 0, 0, - 1873, 1874, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1876, 0, 0, 1877, 1876, - 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, - 1097, 0, 1099, 1100, 1101, 1102, 0, 1104, 1105, 1106, - 1107, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1117, 0, 1119, 1904, 0, 0, 0, 0, 0, - 1125, 2062, 0, 0, 0, 0, 0, 0, 437, 437, - 0, 1133, 1134, 0, 0, 1913, 0, 0, 0, 0, - 1144, 0, 0, 0, 1922, 0, 0, 0, 0, 0, - 0, 0, 0, 525, 0, 0, 0, 437, 1796, 1797, - 0, 0, 1933, 1934, 0, 0, 436, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1957, - 1958, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1970, 0, 0, 0, 0, - 0, 0, 1977, 0, 0, 0, 0, 0, 1981, 1982, - 1983, 1984, 1985, 0, 0, 0, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 0, 2114, 0, 0, 0, - 0, 0, 0, 0, 0, 436, 0, 0, 1237, 1239, - 1240, 0, 0, 2011, 1244, 1245, 0, 0, 1248, 1249, - 1250, 1251, 0, 1253, 0, 0, 0, 0, 1259, 0, - 0, 0, 0, 0, 0, 0, 0, 2021, 0, 0, - 0, 0, 0, 2026, 0, 0, 2027, 0, 0, 0, + 0, 0, 0, 0, 0, 1764, 0, 0, 816, 0, + 1770, 1771, 0, 0, 1389, 0, 0, 0, 0, 1664, + 1773, 0, 0, 1774, 1773, 0, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 0, 1056, 1057, + 1058, 1059, 0, 1061, 1062, 1063, 1064, 0, 0, 0, + 0, 1793, 0, 0, 0, 0, 0, 1074, 0, 1076, + 0, 152, 349, 0, 0, 0, 1082, 1803, 0, 0, + 1086, 1087, 0, 0, 0, 0, 1812, 0, 0, 1097, + 0, 0, 0, 0, 0, 517, 464, 464, 0, 0, + 0, 0, 0, 0, 1823, 1824, 0, 0, 463, 0, + 0, 0, 0, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 0, 0, 0, 464, 359, 360, 361, 362, + 0, 0, 0, 0, 363, 364, 365, 0, 0, 366, + 0, 367, 1848, 1849, 0, 0, 0, 0, 0, 0, + 0, 0, 368, 0, 0, 369, 0, 0, 1861, 0, + 0, 1864, 0, 0, 0, 0, 1867, 1868, 0, 0, + 0, 0, 0, 1428, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, - 155, 156, 0, 0, 0, 437, 0, 0, 0, 2050, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 2068, 2069, 1935, 0, 0, 1342, 1343, - 0, 0, 0, 0, 0, 2075, 2076, 2077, 2078, 2079, - 2080, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2088, 0, 0, 0, 0, 436, 436, - 436, 436, 436, 0, 0, 0, 0, 0, 1873, 437, - 0, 0, 2104, 0, 0, 1885, 533, 0, 0, 0, - 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1995, - 406, 0, 2127, 0, 0, 0, 0, 2130, 2131, 2132, - 2133, 2134, 2135, 0, 2005, 0, 0, 0, 0, 0, - 0, 0, 0, 436, 1404, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 2166, 2167, 2168, 2169, 2170, 2171, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 491, 492, 493, 494, 495, 496, 2031, - 498, 499, 0, 0, 0, 0, 501, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 518, 519, 0, 0, - 0, 0, 0, 533, 0, 0, 0, 437, 437, 437, - 437, 437, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 946, 2092, 2093, 2094, - 2095, 2097, 533, 0, 907, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1520, 0, 0, + 0, 463, 0, 399, 1186, 1188, 1189, 0, 0, 1894, + 1193, 1194, 0, 0, 1197, 1198, 1199, 1200, 0, 1202, + 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1905, 0, 0, 0, 0, 0, + 1910, 0, 0, 1911, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1931, 0, + 370, 371, 372, 518, 0, 0, 0, 0, 0, 0, + 0, 373, 0, 0, 0, 374, 464, 375, 108, 0, + 0, 0, 0, 1949, 1950, 0, 0, 0, 0, 0, + 1287, 1288, 0, 0, 0, 1956, 1957, 1958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 437, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 750, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 1557, 0, 0, - 0, 0, 2143, 646, 647, 648, 0, 0, 0, 652, - 653, 654, 655, 656, 657, 658, 0, 659, 0, 0, - 0, 660, 661, 0, 0, 664, 0, 0, 0, 0, - 1594, 1595, 1596, 1597, 1598, 0, 0, 0, 674, 1603, - 1604, 0, 1606, 0, 0, 0, 0, 0, 1612, 0, - 0, 0, 0, 0, 1616, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1623, 0, 0, 0, 0, + 1966, 0, 0, 0, 0, 463, 463, 463, 463, 463, + 0, 0, 0, 0, 0, 1770, 0, 0, 0, 1982, + 0, 0, 0, 0, 0, 0, 0, 0, 1108, 0, + 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2002, 0, 0, 464, + 0, 2005, 2006, 2007, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, + 0, 1341, 0, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 2035, 2036, 2037, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, - 1683, 954, 1686, 0, 0, 0, 1693, 0, 1695, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 750, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1719, 0, 0, 0, 0, 0, 0, 0, 0, - 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 187, 6, 344, 0, 0, 0, 0, 188, 189, 190, - 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 189, 6, 330, 0, 0, 0, 0, 190, 191, 192, + 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 222, 223, 224, 225, 0, 0, 0, 0, + 226, 1444, 0, 464, 464, 464, 464, 464, 0, 0, + 0, 0, 227, 228, 229, 0, 0, 0, 0, 0, + 230, 21, 0, 231, 0, 1282, 0, 0, 232, 0, + 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, + 1450, 0, 0, 37, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 236, 0, 50, 0, + 0, 237, 464, 238, 0, 0, 0, 0, 0, 0, + 60, 61, 62, 63, 64, 1482, 0, 66, 67, 68, + 69, 70, 0, 0, 0, 74, 0, 0, 77, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1514, 1515, 1516, 1517, 1518, 0, 0, + 1330, 0, 1523, 1524, 0, 1526, 0, 1528, 0, 0, + 0, 0, 0, 1532, 0, 0, 0, 0, 0, 239, + 0, 0, 0, 240, 241, 1540, 0, 0, 242, 243, + 244, 0, 245, 246, 247, 0, 0, 0, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 248, 249, 0, 0, 0, 0, + 0, 250, 0, 0, 0, 0, 331, 0, 0, 0, + 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, + 0, 1563, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1596, 0, 1599, 0, 0, 0, 1606, 0, + 1608, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, + 0, 0, 189, 6, 349, 0, 0, 0, 0, 190, + 191, 192, 1451, 1452, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 0, 0, 1558, 346, 347, 348, 349, 350, 351, - 352, 353, 220, 221, 222, 223, 354, 355, 356, 357, - 224, 0, 0, 0, 358, 359, 360, 0, 0, 361, - 0, 362, 225, 226, 227, 0, 0, 0, 0, 1781, - 228, 21, 363, 229, 0, 364, 0, 0, 230, 0, - 0, 231, 0, 0, 232, 0, 233, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 234, 0, 49, 0, 0, - 235, 0, 236, 0, 0, 0, 0, 0, 0, 59, - 60, 61, 62, 63, 0, 0, 65, 66, 67, 68, - 69, 0, 0, 0, 73, 0, 0, 76, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1864, 0, 0, 1865, 0, 0, 0, 0, 237, 365, - 366, 367, 238, 239, 0, 0, 0, 240, 241, 242, - 368, 243, 244, 245, 369, 1145, 370, 107, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 0, 0, 0, 0, 0, - 248, 1895, 1896, 0, 0, 326, 0, 0, 0, 1559, - 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 6, - 344, 0, 0, 0, 0, 188, 189, 190, 0, 0, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 219, 220, 221, 1616, 0, 1483, 351, 352, 353, 354, + 355, 356, 357, 358, 222, 223, 224, 225, 359, 360, + 361, 362, 226, 0, 0, 0, 363, 364, 365, 0, + 0, 366, 0, 367, 227, 228, 229, 0, 0, 1682, + 0, 0, 230, 21, 368, 231, 0, 369, 0, 0, + 232, 0, 0, 233, 0, 0, 234, 0, 235, 1536, + 0, 0, 0, 0, 0, 37, 0, 0, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, + 50, 0, 0, 237, 0, 238, 0, 0, 0, 0, + 0, 0, 60, 61, 62, 63, 64, 0, 0, 66, + 67, 68, 69, 70, 0, 0, 0, 74, 0, 0, + 77, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 1761, 0, 0, + 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 370, 371, 372, 240, 241, 0, 0, 0, + 242, 243, 244, 373, 245, 246, 247, 374, 0, 375, + 108, 0, 0, 0, 0, 0, 0, 0, 1787, 1788, + 1620, 0, 0, 0, 0, 0, 248, 249, 0, 0, + 0, 0, 0, 250, 0, 0, 0, 0, 331, 0, + 0, 0, 1484, 0, 0, 253, 0, 1661, 0, 0, + 0, 0, 0, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 1829, 1830, + 189, 6, 349, 0, 0, 0, 0, 190, 191, 192, + 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 1939, - 1940, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 220, 221, 222, 223, 354, 355, 356, 357, 224, 0, - 0, 0, 358, 359, 360, 1154, 0, 361, 0, 362, - 225, 226, 227, 0, 0, 0, 0, 0, 228, 21, - 363, 229, 1969, 364, 0, 0, 230, 0, 0, 231, - 0, 0, 232, 0, 233, 0, 0, 0, 0, 0, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 234, 0, 49, 0, 0, 235, 0, - 236, 0, 0, 0, 0, 0, 0, 59, 60, 61, - 62, 63, 0, 0, 65, 66, 67, 68, 69, 1146, - 0, 0, 73, 0, 0, 76, 0, 0, 0, 0, - 0, 0, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 365, 366, 367, - 238, 239, 0, 0, 0, 240, 241, 242, 368, 243, - 244, 245, 369, 0, 370, 107, 0, 0, 0, 0, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 0, 1860, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 222, 223, 224, 225, 359, 360, 361, 362, + 226, 0, 0, 0, 363, 364, 365, 0, 0, 366, + 0, 367, 227, 228, 229, 0, 0, 0, 0, 0, + 230, 21, 368, 231, 0, 369, 0, 0, 232, 0, + 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, + 0, 0, 0, 37, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 236, 0, 50, 0, + 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, + 60, 61, 62, 63, 64, 1626, 0, 66, 67, 68, + 69, 70, 0, 0, 0, 74, 0, 0, 77, 0, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 1723, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 370, 371, 372, 240, 241, 0, 1800, 0, 242, 243, + 244, 373, 245, 246, 247, 374, 0, 375, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 0, 0, 0, 0, 0, 248, 0, - 0, 0, 0, 326, 0, 0, 0, 250, 0, 0, - 251, 0, 0, 0, 187, 150, 344, 0, 392, 0, - 1337, 188, 189, 190, 0, 0, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 380, 209, 210, 211, 212, 213, 214, - 0, 0, 0, 0, 0, 0, 0, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 220, 221, 222, 223, - 354, 355, 356, 357, 224, 0, 7, 8, 358, 359, - 360, 0, 0, 361, 0, 362, 225, 226, 227, 0, - 0, 0, 0, 0, 228, 21, 363, 229, 0, 364, - 0, 2152, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1394, 0, 0, 0, 0, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 393, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 714, 25, 26, 715, 28, 29, - 716, 31, 717, 33, 34, 35, 36, 0, 0, 0, - 38, 39, 40, 0, 0, 42, 0, 0, 0, 0, - 0, 718, 48, 0, 0, 50, 719, 0, 53, 720, - 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, - 0, 0, 237, 365, 366, 367, 238, 70, 1475, 0, - 0, 240, 241, 242, 368, 243, 244, 245, 369, 0, - 370, 107, 395, 396, 397, 398, 0, 0, 0, 0, - 0, 84, 85, 86, 0, 0, 0, 246, 381, 0, - 0, 0, 0, 0, 248, 0, 399, 400, 0, 401, - 0, 402, 0, 0, 0, 403, 251, 0, 0, 0, - 0, 187, 6, 325, 0, 0, 1521, 1522, 188, 189, - 190, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 0, 0, 0, 0, 915, 0, 0, 0, - 0, 0, 0, 220, 221, 222, 223, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 225, 226, 227, 0, 0, 0, 0, - 0, 228, 21, 0, 229, 0, 0, 0, 0, 230, - 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, - 0, 0, 0, 0, 37, 0, 1619, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 234, 0, 49, 0, - 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, - 59, 60, 61, 62, 63, 0, 0, 65, 66, 67, - 68, 69, 0, 0, 0, 73, 0, 0, 76, 0, - 0, 0, 0, 0, 0, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 238, 239, 0, 0, 0, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 107, 0, + 0, 0, 0, 0, 248, 249, 0, 0, 0, 0, + 0, 250, 0, 0, 0, 0, 331, 0, 0, 0, + 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 189, 152, + 349, 0, 398, 0, 0, 190, 191, 192, 0, 2024, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 385, 211, 212, + 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, + 0, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 222, 223, 224, 225, 359, 360, 361, 362, 226, 0, + 0, 0, 363, 364, 365, 0, 0, 366, 0, 367, + 227, 228, 229, 0, 0, 0, 0, 0, 230, 21, + 368, 231, 0, 369, 0, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 0, 0, 0, 0, - 0, 248, 0, 0, 0, 0, 326, 0, 0, 0, - 250, 0, 0, 251, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 6, 1659, 0, 0, - 0, 0, 188, 189, 190, 0, 1752, 191, 192, 193, + 0, 399, 0, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 0, 0, 1826, 0, 0, 0, + 400, 0, 0, 0, 0, 0, 0, 239, 370, 371, + 372, 240, 0, 0, 0, 0, 242, 243, 244, 373, + 245, 246, 247, 374, 0, 375, 108, 401, 402, 403, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 248, 386, 0, 0, 0, 0, 0, 250, + 0, 405, 406, 0, 407, 0, 408, 189, 6, 1572, + 409, 253, 0, 0, 190, 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 220, 221, 222, - 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, - 0, 0, 7, 8, 0, 228, 21, 0, 229, 0, - 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, - 0, 233, 0, 0, 0, 0, 0, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 234, 0, 49, 0, 0, 235, 0, 236, 0, 0, - 0, 0, 0, 0, 59, 60, 61, 62, 63, 0, - 0, 65, 66, 67, 68, 69, 0, 0, 0, 73, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 714, 25, 26, 715, 28, 29, 716, 31, 717, 33, - 34, 35, 36, 0, 0, 0, 38, 39, 40, 0, - 0, 42, 0, 0, 0, 0, 0, 718, 48, 0, - 0, 50, 719, 237, 53, 720, 0, 238, 239, 0, - 0, 0, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 107, 70, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 246, 247, - 0, 0, 0, 0, 0, 248, 0, 84, 85, 86, - 326, 187, 6, 0, 250, 0, 0, 251, 188, 189, - 190, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 221, 222, 223, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 937, 225, 226, 227, 0, 0, 7, 8, - 0, 228, 21, 0, 229, 0, 0, 0, 0, 230, - 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, - 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 234, 0, 49, 0, - 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, - 59, 60, 61, 62, 63, 0, 0, 65, 66, 67, - 68, 69, 0, 0, 0, 73, 0, 0, 76, 0, - 0, 0, 0, 0, 0, 0, 714, 25, 26, 715, - 28, 29, 716, 31, 717, 33, 34, 35, 36, 0, - 0, 0, 38, 39, 40, 0, 0, 42, 0, 0, - 0, 0, 0, 718, 48, 0, 0, 50, 719, 237, - 53, 720, 0, 238, 239, 0, 0, 0, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 107, 70, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 597, 1822, 0, 0, 0, 0, - 0, 248, 0, 84, 85, 86, 599, 187, 6, 0, - 290, 529, 0, 251, 188, 189, 190, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 221, 222, 223, 0, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 982, 225, - 226, 227, 0, 0, 7, 8, 0, 228, 21, 0, - 229, 0, 0, 0, 0, 230, 0, 0, 231, 0, - 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 49, 0, 0, 235, 0, 236, - 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, - 63, 0, 0, 65, 66, 67, 68, 69, 0, 0, - 0, 73, 0, 0, 76, 0, 0, 0, 0, 0, - 0, 0, 714, 25, 26, 715, 28, 29, 716, 31, - 717, 33, 34, 35, 36, 0, 0, 0, 38, 39, - 40, 0, 0, 42, 0, 0, 0, 0, 0, 718, - 48, 0, 0, 50, 719, 237, 53, 720, 0, 238, - 239, 0, 0, 0, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 107, 70, 0, 0, 0, 0, + 214, 215, 216, 217, 218, 219, 220, 221, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 223, 224, 225, 0, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, + 228, 229, 0, 0, 0, 0, 0, 230, 21, 0, + 231, 0, 0, 0, 0, 232, 0, 0, 233, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 236, 0, 50, 0, 0, 237, 0, + 238, 0, 0, 0, 0, 0, 0, 60, 61, 62, + 63, 64, 0, 0, 66, 67, 68, 69, 70, 0, + 0, 0, 74, 0, 0, 77, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 1838, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, + 240, 241, 0, 0, 0, 242, 243, 244, 0, 245, + 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 0, 0, 0, 0, 0, 248, 0, 84, - 85, 86, 249, 187, 6, 0, 250, 0, 0, 251, - 188, 189, 190, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 220, 221, 222, 223, 0, - 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 983, 225, 226, 227, 0, 0, - 7, 8, 0, 228, 21, 0, 229, 0, 0, 0, - 0, 230, 0, 0, 231, 0, 0, 232, 0, 233, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, - 49, 0, 0, 235, 0, 236, 0, 0, 0, 0, - 0, 0, 59, 60, 61, 62, 63, 0, 0, 65, - 66, 67, 68, 69, 0, 0, 0, 73, 0, 0, - 76, 0, 0, 0, 0, 0, 0, 0, 714, 25, - 26, 715, 28, 29, 716, 31, 717, 33, 34, 35, - 36, 0, 0, 0, 38, 39, 40, 0, 0, 42, - 0, 0, 0, 0, 0, 718, 48, 0, 0, 50, - 719, 237, 53, 720, 0, 238, 239, 0, 0, 0, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 107, 70, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 0, 0, - 0, 0, 0, 248, 0, 84, 85, 86, 326, 187, - 6, 0, 250, 0, 0, 251, 188, 189, 190, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 0, 248, 249, 0, 0, 0, 0, 0, 250, 0, + 0, 0, 0, 331, 189, 6, 0, 252, 0, 0, + 253, 190, 191, 192, 0, 0, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 223, 224, 225, + 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 227, 228, 229, 0, + 0, 0, 0, 0, 230, 21, 0, 231, 0, 0, + 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, + 235, 0, 0, 0, 0, 0, 0, 37, 0, 0, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 236, 0, 50, 0, 0, 237, 0, 238, 0, 0, + 0, 0, 0, 0, 60, 61, 62, 63, 64, 0, + 0, 66, 67, 68, 69, 70, 0, 0, 0, 74, + 0, 0, 77, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 1943, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 0, 240, 241, 0, + 0, 0, 242, 243, 244, 0, 245, 246, 247, 0, + 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 585, 1718, + 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, + 587, 189, 6, 0, 293, 521, 0, 253, 190, 191, + 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 222, 223, 224, 225, 0, 0, 0, + 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 227, 228, 229, 0, 0, 0, 0, + 0, 230, 21, 0, 231, 0, 0, 0, 0, 232, + 0, 0, 233, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 0, 0, 37, 0, 0, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 236, 0, 50, + 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, + 0, 60, 61, 62, 63, 64, 0, 0, 66, 67, + 68, 69, 70, 0, 0, 0, 74, 0, 0, 77, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 1989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 220, 221, 222, 223, 0, 0, 0, 0, 224, + 239, 0, 0, 0, 240, 241, 0, 0, 0, 242, + 243, 244, 0, 245, 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1181, 225, 226, 227, 0, 0, 7, 8, 0, 228, - 21, 0, 229, 0, 0, 0, 0, 230, 0, 0, - 231, 0, 0, 232, 0, 233, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 234, 0, 49, 0, 0, 235, - 0, 236, 0, 0, 0, 0, 0, 0, 59, 60, - 61, 62, 63, 0, 0, 65, 66, 67, 68, 69, - 0, 0, 0, 73, 0, 0, 76, 0, 0, 0, - 0, 0, 0, 0, 714, 25, 26, 715, 28, 29, - 716, 31, 717, 33, 34, 35, 36, 0, 0, 0, - 38, 39, 40, 0, 0, 42, 0, 0, 0, 0, - 0, 718, 48, 0, 0, 50, 719, 237, 53, 720, - 0, 238, 239, 0, 0, 0, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 107, 70, 0, 0, + 0, 0, 0, 0, 0, 248, 249, 0, 0, 0, + 0, 0, 250, 0, 0, 0, 0, 251, 189, 6, + 0, 252, 0, 0, 253, 190, 191, 192, 0, 0, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 246, 435, 0, 0, 0, 0, 0, 248, - 0, 84, 85, 86, 326, 187, 6, 0, 524, 0, - 0, 251, 188, 189, 190, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 220, 221, 222, - 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1183, 225, 226, 227, - 0, 0, 7, 8, 0, 228, 21, 0, 229, 0, - 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, - 0, 233, 0, 0, 0, 0, 0, 0, 37, 0, + 222, 223, 224, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 234, 0, 49, 0, 0, 235, 0, 236, 0, 0, - 0, 0, 0, 0, 59, 60, 61, 62, 63, 0, - 0, 65, 66, 67, 68, 69, 0, 0, 0, 73, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 714, 25, 26, 715, 28, 29, 716, 31, 717, 33, - 34, 35, 36, 0, 0, 0, 38, 39, 40, 0, - 0, 42, 0, 0, 0, 0, 0, 718, 48, 0, - 0, 50, 719, 237, 53, 720, 0, 238, 239, 0, - 0, 0, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 107, 70, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 246, 435, - 0, 0, 0, 0, 0, 248, 0, 84, 85, 86, - 326, 187, 6, 0, 0, 529, 0, 251, 188, 189, - 190, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 221, 222, 223, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1184, 225, 226, 227, 0, 0, 7, 8, - 0, 228, 21, 0, 229, 0, 0, 0, 0, 230, - 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, - 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 234, 0, 49, 0, - 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, - 59, 60, 61, 62, 63, 0, 0, 65, 66, 67, - 68, 69, 0, 0, 0, 73, 0, 0, 76, 0, - 0, 0, 0, 0, 0, 0, 714, 25, 26, 715, - 28, 29, 716, 31, 717, 33, 34, 35, 36, 0, - 0, 0, 38, 39, 40, 0, 0, 42, 0, 0, - 0, 0, 0, 718, 48, 0, 0, 50, 719, 237, - 53, 720, 0, 238, 239, 0, 0, 0, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 107, 70, + 227, 228, 229, 0, 0, 0, 0, 0, 230, 21, + 0, 231, 0, 0, 0, 0, 232, 0, 0, 233, + 0, 0, 234, 0, 235, 0, 0, 0, 0, 0, + 0, 37, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 0, 50, 0, 0, 237, + 0, 238, 0, 0, 0, 0, 0, 0, 60, 61, + 62, 63, 64, 0, 0, 66, 67, 68, 69, 70, + 0, 0, 0, 74, 0, 0, 77, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 246, 247, 0, 0, 0, 0, - 0, 248, 0, 84, 85, 86, 563, 187, 6, 0, - 250, 0, 0, 251, 188, 189, 190, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 221, 222, 223, 0, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1203, 225, - 226, 227, 0, 0, 7, 8, 0, 228, 21, 0, - 229, 0, 0, 0, 0, 230, 0, 0, 231, 0, - 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 49, 0, 0, 235, 0, 236, - 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, - 63, 0, 0, 65, 66, 67, 68, 69, 0, 0, - 0, 73, 0, 0, 76, 0, 0, 0, 0, 0, - 0, 0, 714, 25, 26, 715, 28, 29, 716, 31, - 717, 33, 34, 35, 36, 0, 0, 0, 38, 39, - 40, 0, 0, 42, 0, 0, 0, 0, 0, 718, - 48, 0, 0, 50, 719, 237, 53, 720, 0, 238, - 239, 0, 0, 0, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 107, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 0, 240, 241, 0, 0, 0, 242, 243, 244, 0, + 245, 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 0, 0, 0, 0, 0, 248, 0, 84, - 85, 86, 572, 187, 6, 0, 250, 0, 0, 251, - 188, 189, 190, 0, 0, 191, 192, 193, 194, 195, + 0, 0, 248, 249, 0, 0, 0, 0, 0, 250, + 0, 0, 0, 0, 331, 189, 6, 0, 252, 0, + 0, 253, 190, 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 220, 221, 222, 223, 0, - 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1232, 225, 226, 227, 0, 0, - 7, 8, 0, 228, 21, 0, 229, 0, 0, 0, - 0, 230, 0, 0, 231, 0, 0, 232, 0, 233, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, - 49, 0, 0, 235, 0, 236, 0, 0, 0, 0, - 0, 0, 59, 60, 61, 62, 63, 0, 0, 65, - 66, 67, 68, 69, 0, 0, 0, 73, 0, 0, - 76, 0, 0, 0, 0, 0, 0, 0, 714, 25, - 26, 715, 28, 29, 716, 31, 717, 33, 34, 35, - 36, 0, 0, 0, 38, 39, 40, 0, 0, 42, - 0, 0, 0, 0, 0, 718, 48, 0, 0, 50, - 719, 237, 53, 720, 0, 238, 239, 0, 0, 0, - 240, 241, 242, 0, 243, 244, 245, 0, 0, 0, - 107, 70, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 246, 247, 0, 0, - 0, 0, 0, 248, 0, 84, 85, 86, 574, 187, - 6, 0, 250, 0, 0, 251, 188, 189, 190, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 216, 217, 218, 219, 220, 221, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 222, 223, 224, + 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 227, 228, 229, + 0, 0, 7, 8, 0, 230, 21, 0, 231, 0, + 0, 0, 0, 232, 0, 0, 233, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 0, 0, 37, 0, + 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 236, 0, 50, 0, 0, 237, 0, 238, 0, + 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, + 0, 0, 66, 67, 68, 69, 70, 0, 0, 0, + 74, 0, 0, 77, 0, 0, 0, 0, 0, 0, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 0, 0, 0, 38, 39, 40, 41, + 0, 0, 43, 0, 0, 0, 0, 0, 703, 49, + 0, 0, 51, 704, 239, 54, 705, 0, 240, 241, + 0, 0, 0, 242, 243, 244, 0, 245, 246, 247, + 0, 0, 0, 108, 71, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, + 462, 0, 0, 0, 0, 0, 250, 0, 85, 86, + 87, 331, 189, 6, 0, 516, 0, 0, 253, 190, + 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 223, 224, 225, 0, 0, + 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 878, 227, 228, 229, 0, 0, 7, + 8, 0, 230, 21, 0, 231, 0, 0, 0, 0, + 232, 0, 0, 233, 0, 0, 234, 0, 235, 0, + 0, 0, 0, 0, 0, 37, 0, 0, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, + 50, 0, 0, 237, 0, 238, 0, 0, 0, 0, + 0, 0, 60, 61, 62, 63, 64, 0, 0, 66, + 67, 68, 69, 70, 0, 0, 0, 74, 0, 0, + 77, 0, 0, 0, 0, 0, 0, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 0, 0, 0, 38, 39, 40, 41, 0, 0, 43, + 0, 0, 0, 0, 0, 703, 49, 0, 0, 51, + 704, 239, 54, 705, 0, 240, 241, 0, 0, 0, + 242, 243, 244, 0, 245, 246, 247, 0, 0, 0, + 108, 71, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 248, 462, 0, 0, + 0, 0, 0, 250, 0, 85, 86, 87, 331, 189, + 6, 0, 0, 521, 0, 253, 190, 191, 192, 0, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 223, 224, 225, 0, 0, 0, 0, 226, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 900, 227, 228, 229, 0, 0, 7, 8, 0, 230, + 21, 0, 231, 0, 0, 0, 0, 232, 0, 0, + 233, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 0, 0, 37, 0, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 236, 0, 50, 0, 0, + 237, 0, 238, 0, 0, 0, 0, 0, 0, 60, + 61, 62, 63, 64, 0, 0, 66, 67, 68, 69, + 70, 0, 0, 0, 74, 0, 0, 77, 0, 0, + 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 0, 0, 0, + 38, 39, 40, 41, 0, 0, 43, 0, 0, 0, + 0, 0, 703, 49, 0, 0, 51, 704, 239, 54, + 705, 0, 240, 241, 0, 0, 0, 242, 243, 244, + 0, 245, 246, 247, 0, 0, 0, 108, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 220, 221, 222, 223, 0, 0, 0, 0, 224, + 0, 0, 0, 248, 249, 0, 0, 0, 0, 0, + 250, 0, 85, 86, 87, 557, 189, 6, 0, 252, + 0, 0, 253, 190, 191, 192, 0, 0, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 223, + 224, 225, 0, 0, 0, 0, 226, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 945, 227, 228, + 229, 0, 0, 7, 8, 0, 230, 21, 0, 231, + 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, + 234, 0, 235, 0, 0, 0, 0, 0, 0, 37, + 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 236, 0, 50, 0, 0, 237, 0, 238, + 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, + 64, 0, 0, 66, 67, 68, 69, 70, 0, 0, + 0, 74, 0, 0, 77, 0, 0, 0, 0, 0, + 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 0, 0, 0, 38, 39, 40, + 41, 0, 0, 43, 0, 0, 0, 0, 0, 703, + 49, 0, 0, 51, 704, 239, 54, 705, 0, 240, + 241, 0, 0, 0, 242, 243, 244, 0, 245, 246, + 247, 0, 0, 0, 108, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1265, 225, 226, 227, 0, 0, 7, 8, 0, 228, - 21, 0, 229, 0, 0, 0, 0, 230, 0, 0, - 231, 0, 0, 232, 0, 233, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 234, 0, 49, 0, 0, 235, - 0, 236, 0, 0, 0, 0, 0, 0, 59, 60, - 61, 62, 63, 0, 0, 65, 66, 67, 68, 69, - 0, 0, 0, 73, 0, 0, 76, 0, 0, 0, - 0, 0, 0, 0, 714, 25, 26, 715, 28, 29, - 716, 31, 717, 33, 34, 35, 36, 0, 0, 0, - 38, 39, 40, 0, 0, 42, 0, 0, 0, 0, - 0, 718, 48, 0, 0, 50, 719, 237, 53, 720, - 0, 238, 239, 0, 0, 0, 240, 241, 242, 0, - 243, 244, 245, 0, 0, 0, 107, 70, 0, 0, + 248, 249, 0, 0, 0, 0, 0, 250, 0, 85, + 86, 87, 564, 189, 6, 0, 252, 0, 0, 253, + 190, 191, 192, 0, 0, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 222, 223, 224, 225, 0, + 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 946, 227, 228, 229, 0, 0, + 7, 8, 0, 230, 21, 0, 231, 0, 0, 0, + 0, 232, 0, 0, 233, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 236, + 0, 50, 0, 0, 237, 0, 238, 0, 0, 0, + 0, 0, 0, 60, 61, 62, 63, 64, 0, 0, + 66, 67, 68, 69, 70, 0, 0, 0, 74, 0, + 0, 77, 0, 0, 0, 0, 0, 0, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 0, 0, 0, 38, 39, 40, 41, 0, 0, + 43, 0, 0, 0, 0, 0, 703, 49, 0, 0, + 51, 704, 239, 54, 705, 0, 240, 241, 0, 0, + 0, 242, 243, 244, 0, 245, 246, 247, 0, 0, + 0, 108, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 248, 462, 0, + 0, 0, 0, 0, 250, 0, 85, 86, 87, 331, + 189, 6, 0, 832, 0, 0, 253, 190, 191, 192, + 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 222, 223, 224, 225, 0, 0, 0, 0, + 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1129, 227, 228, 229, 0, 0, 7, 8, 0, + 230, 21, 0, 231, 0, 0, 0, 0, 232, 0, + 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, + 0, 0, 0, 37, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 236, 0, 50, 0, + 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, + 60, 61, 62, 63, 64, 0, 0, 66, 67, 68, + 69, 70, 0, 0, 0, 74, 0, 0, 77, 0, + 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 0, 0, + 0, 38, 39, 40, 41, 0, 0, 43, 0, 0, + 0, 0, 0, 703, 49, 0, 0, 51, 704, 239, + 54, 705, 0, 240, 241, 0, 0, 0, 242, 243, + 244, 0, 245, 246, 247, 0, 0, 0, 108, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 246, 247, 0, 0, 0, 0, 0, 248, - 0, 84, 85, 86, 576, 187, 6, 0, 250, 0, - 0, 251, 188, 189, 190, 0, 0, 191, 192, 193, + 0, 0, 0, 0, 248, 249, 0, 0, 0, 0, + 0, 250, 0, 85, 86, 87, 331, 189, 6, 0, + 1580, 0, 0, 253, 190, 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 220, 221, 222, - 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1429, 225, 226, 227, - 0, 0, 7, 8, 0, 228, 21, 0, 229, 0, - 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, - 0, 233, 0, 0, 0, 0, 0, 0, 37, 0, + 214, 215, 216, 217, 218, 219, 220, 221, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 223, 224, 225, 0, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1131, 227, + 228, 229, 0, 0, 7, 8, 0, 230, 21, 0, + 231, 0, 0, 0, 0, 232, 0, 0, 233, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 236, 0, 50, 0, 0, 237, 0, + 238, 0, 0, 0, 0, 0, 0, 60, 61, 62, + 63, 64, 0, 0, 66, 67, 68, 69, 70, 0, + 0, 0, 74, 0, 0, 77, 0, 0, 0, 0, + 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 0, 0, 0, 38, 39, + 40, 41, 0, 0, 43, 1782, 527, 0, 0, 0, + 703, 49, 0, 0, 51, 704, 239, 54, 705, 0, + 240, 241, 0, 0, 0, 242, 243, 244, 0, 245, + 246, 247, 0, 0, 0, 108, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 234, 0, 49, 0, 0, 235, 0, 236, 0, 0, - 0, 0, 0, 0, 59, 60, 61, 62, 63, 0, - 0, 65, 66, 67, 68, 69, 0, 0, 0, 73, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 714, 25, 26, 715, 28, 29, 716, 31, 717, 33, - 34, 35, 36, 0, 0, 0, 38, 39, 40, 0, - 0, 42, 0, 0, 0, 0, 0, 718, 48, 0, - 0, 50, 719, 237, 53, 720, 0, 238, 239, 0, - 991, 0, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 107, 70, 0, 0, 0, 992, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 246, 435, - 0, 0, 0, 0, 0, 248, 0, 84, 85, 86, - 326, 187, 150, 344, 855, 1411, 0, 251, 188, 189, - 190, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 380, 209, 210, 211, 212, 213, 214, 0, 0, 0, - 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 220, 221, 222, 223, 354, 355, 356, - 357, 224, 0, 7, 8, 358, 359, 360, 0, 0, - 361, 0, 362, 225, 226, 227, 0, 0, 0, 0, - 0, 228, 21, 363, 229, 0, 364, 0, 0, 0, - 0, 0, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 749, - 0, 714, 25, 26, 715, 28, 29, 716, 31, 717, - 33, 34, 35, 36, 0, 0, 0, 38, 39, 40, - 0, 0, 42, 0, 0, 0, 0, 0, 718, 48, - 0, 0, 50, 719, 0, 53, 720, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 365, 366, 367, 238, 70, 0, 0, 0, 240, 241, - 242, 368, 243, 244, 245, 369, 0, 370, 107, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, - 86, 0, 0, 0, 246, 381, 0, 0, 0, 0, - 0, 248, 0, 0, 0, 0, 326, 187, 6, 0, - 1554, 0, 0, 251, 188, 189, 190, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 221, 222, 223, 2053, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, - 226, 227, 0, 0, 0, 0, 0, 228, 21, 0, - 229, 0, 0, 0, 0, 230, 0, 0, 231, 0, - 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 49, 0, 0, 235, 0, 236, - 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, - 63, 0, 0, 65, 66, 67, 68, 69, 0, 0, - 0, 73, 0, 0, 76, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 701, - 0, 702, 0, 0, 0, 0, 0, 1685, 0, 0, - 0, 0, 0, 0, 0, 237, 0, 0, 0, 238, - 239, 0, 0, 0, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 107, 0, 0, 0, 0, 0, + 0, 585, 1718, 0, 0, 0, 0, 0, 250, 0, + 85, 86, 87, 587, 189, 6, 0, 293, 0, 0, + 253, 190, 191, 192, 0, 0, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 223, 224, 225, + 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1132, 227, 228, 229, 0, + 0, 0, 0, 0, 230, 21, 0, 231, 0, 0, + 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, + 235, 0, 0, 0, 0, 0, 0, 37, 0, 0, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 236, 0, 50, 0, 0, 237, 0, 238, 0, 0, + 0, 0, 0, 0, 60, 61, 62, 63, 64, 0, + 0, 66, 67, 68, 69, 70, 0, 0, 0, 74, + 0, 0, 77, 0, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 757, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 246, 247, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 326, 187, 150, 344, 1667, 0, 0, 251, - 188, 189, 190, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 380, 209, 210, 211, 212, 213, 214, 0, - 0, 0, 0, 0, 0, 0, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 220, 221, 222, 223, 354, - 355, 356, 357, 224, 0, 0, 0, 358, 359, 360, - 0, 0, 361, 0, 362, 225, 226, 227, 0, 0, - 0, 0, 0, 228, 21, 363, 229, 0, 364, 187, - 150, 344, 0, 0, 0, 0, 188, 189, 190, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 380, 209, - 210, 211, 212, 213, 214, 0, 0, 0, 0, 0, - 0, 0, 1558, 346, 347, 348, 349, 350, 351, 352, - 353, 220, 221, 222, 223, 354, 355, 356, 357, 224, - 0, 0, 0, 358, 359, 360, 0, 0, 361, 0, - 362, 225, 226, 227, 0, 0, 0, 0, 0, 228, - 21, 363, 229, 0, 364, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 0, 240, 241, 0, + 0, 0, 242, 243, 244, 0, 245, 246, 247, 0, + 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 248, 462, + 0, 0, 0, 0, 0, 250, 189, 152, 349, 0, + 331, 0, 0, 190, 191, 192, 0, 253, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 385, 211, 212, 213, 214, + 215, 216, 1915, 0, 0, 0, 0, 0, 0, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 222, 223, + 224, 225, 359, 360, 361, 362, 226, 0, 0, 0, + 363, 364, 365, 0, 0, 366, 0, 367, 227, 228, + 229, 0, 0, 0, 0, 0, 230, 21, 368, 231, + 0, 369, 189, 152, 349, 0, 0, 0, 0, 190, + 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 385, 211, 212, 213, 214, 215, 216, 0, 0, + 0, 0, 0, 0, 0, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 222, 223, 224, 225, 359, 360, + 361, 362, 226, 0, 0, 0, 363, 364, 365, 0, + 0, 366, 0, 367, 227, 228, 229, 0, 0, 0, + 0, 0, 230, 21, 368, 231, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 365, 366, 367, 238, 0, 0, 0, 0, - 240, 241, 242, 368, 243, 244, 245, 369, 0, 370, - 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 246, 381, 0, 0, - 0, 0, 0, 248, 0, 0, 0, 0, 326, 0, - 0, 0, 1835, 0, 0, 251, 0, 0, 0, 0, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 237, 365, 366, - 367, 238, 732, 0, 0, 0, 240, 241, 242, 368, - 243, 244, 245, 369, 0, 370, 107, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 370, 371, 372, 240, + 0, 0, 0, 0, 242, 243, 244, 373, 245, 246, + 247, 374, 0, 375, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 246, 381, 0, 0, 0, 0, 0, 248, - 0, 0, 0, 0, 326, 187, 6, 0, 1718, 0, - 0, 251, 188, 189, 190, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 220, 221, 222, - 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, - 0, 0, 7, 8, 0, 228, 21, 0, 229, 0, - 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, - 0, 233, 0, 0, 0, 0, 0, 0, 37, 0, + 248, 386, 0, 0, 0, 0, 0, 250, 0, 0, + 0, 0, 331, 0, 0, 0, 1479, 0, 0, 253, + 0, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 239, 370, 371, 372, 240, 0, 0, 0, 0, + 242, 243, 244, 373, 245, 246, 247, 374, 0, 375, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 248, 386, 0, 0, + 0, 0, 0, 250, 0, 0, 0, 0, 331, 189, + 152, 349, 1731, 0, 0, 253, 190, 191, 192, 0, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 385, 211, + 212, 213, 214, 215, 216, 527, 0, 0, 0, 0, + 0, 0, 1483, 351, 352, 353, 354, 355, 356, 357, + 358, 222, 223, 224, 225, 359, 360, 361, 362, 226, + 0, 0, 0, 363, 364, 365, 0, 0, 366, 0, + 367, 227, 228, 229, 0, 0, 0, 0, 0, 230, + 21, 368, 231, 0, 369, 189, 152, 349, 0, 0, + 0, 0, 190, 191, 192, 0, 0, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 385, 211, 212, 213, 214, 215, + 216, 0, 0, 0, 0, 0, 0, 0, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 222, 223, 224, + 225, 359, 360, 361, 362, 226, 0, 0, 0, 363, + 364, 365, 0, 0, 366, 0, 367, 227, 228, 229, + 0, 0, 0, 0, 0, 230, 21, 368, 231, 0, + 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 370, + 371, 372, 240, 0, 0, 0, 0, 242, 243, 244, + 373, 245, 246, 247, 374, 0, 375, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 234, 0, 49, 0, 0, 235, 0, 236, 0, 0, - 0, 0, 0, 0, 59, 60, 61, 62, 63, 0, - 0, 65, 66, 67, 68, 69, 0, 0, 0, 73, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 714, 25, 26, 715, 28, 29, 716, 31, 717, 33, - 34, 35, 36, 0, 0, 0, 38, 39, 40, 0, - 0, 42, 0, 0, 0, 0, 0, 718, 48, 0, - 0, 50, 719, 237, 53, 720, 0, 238, 239, 0, - 0, 0, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 107, 70, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 597, 1822, - 0, 0, 0, 0, 0, 248, 0, 84, 85, 86, - 599, 187, 6, 0, 290, 0, 0, 251, 188, 189, - 190, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 221, 222, 223, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2116, 225, 226, 227, 0, 0, 0, 0, - 0, 228, 21, 0, 229, 0, 0, 0, 0, 230, - 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, - 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 234, 0, 49, 0, - 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, - 59, 60, 61, 62, 63, 0, 0, 65, 66, 67, - 68, 69, 0, 0, 0, 73, 0, 0, 76, 534, + 0, 0, 0, 248, 386, 0, 0, 0, 0, 0, + 250, 0, 0, 0, 0, 331, 0, 0, 0, 1632, + 0, 0, 253, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 1803, 0, 0, - 0, 1804, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 238, 239, 0, 0, 0, 240, 241, - 242, 0, 243, 244, 245, 0, 0, 0, 107, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 246, 435, 0, 0, 0, 0, - 0, 248, 187, 150, 344, 0, 326, 0, 0, 188, - 189, 190, 0, 251, 191, 192, 193, 194, 195, 196, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 527, 0, 0, 0, 239, 370, 371, 372, 240, 0, + 0, 0, 0, 242, 243, 244, 373, 245, 246, 247, + 374, 0, 375, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, + 386, 0, 0, 0, 0, 0, 250, 189, 152, 0, + 0, 331, 0, 0, 190, 191, 192, 0, 253, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 385, 211, 212, 213, + 214, 215, 216, 0, 917, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 223, 224, 225, 0, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, + 228, 229, 0, 0, 189, 152, 0, 230, 21, 0, + 231, 190, 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 380, 209, 210, 211, 212, 213, 214, 0, 0, - 0, 0, 0, 0, 0, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 220, 221, 222, 223, 354, 355, - 356, 357, 224, 0, 0, 0, 358, 359, 360, 0, - 0, 361, 0, 362, 225, 226, 227, 0, 0, 0, - 0, 0, 228, 21, 363, 229, 0, 364, 187, 150, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 380, 209, 210, - 211, 212, 213, 214, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 220, 221, 222, 223, 0, 0, 0, 0, 224, 0, + 207, 208, 209, 385, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 225, 226, 227, 0, 0, 0, 0, 0, 228, 21, - 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 223, 224, 225, + 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 227, 228, 229, 0, + 0, 0, 0, 0, 230, 21, 0, 231, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 757, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 239, 0, 0, 0, + 240, 0, 0, 0, 0, 242, 243, 244, 0, 245, + 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 237, 365, 366, 367, 238, 0, 0, 0, 0, 240, - 241, 242, 368, 243, 244, 245, 369, 0, 370, 107, + 0, 248, 386, 0, 0, 0, 0, 0, 250, 0, + 0, 0, 0, 331, 0, 0, 0, 567, 0, 0, + 253, 0, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 239, 546, 0, 0, 240, 0, 0, + 0, 1099, 242, 243, 244, 0, 245, 246, 247, 0, + 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 585, 586, + 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, + 587, 189, 152, 0, 293, 0, 0, 253, 190, 191, + 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 385, 211, 212, 213, 214, 215, 216, 1100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 246, 381, 0, 0, 0, - 0, 0, 248, 0, 0, 0, 0, 326, 0, 0, - 0, 0, 0, 0, 251, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 1830, 0, 0, 237, 1831, 0, 0, - 238, 0, 0, 0, 0, 240, 241, 242, 0, 243, - 244, 245, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 222, 223, 224, 225, 0, 0, 0, + 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 227, 228, 229, 0, 0, 0, 0, + 0, 230, 21, 0, 231, 189, 152, 0, 1222, 0, + 0, 0, 190, 191, 192, 0, 0, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 385, 211, 212, 213, 214, 215, + 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 222, 223, 224, + 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 227, 228, 229, + 0, 0, 0, 0, 0, 230, 21, 0, 231, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 239, 546, 0, 0, 240, 0, 0, 0, 0, 242, + 243, 244, 0, 245, 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 246, 381, 0, 0, 0, 0, 0, 248, 0, - 0, 0, 0, 326, 187, 150, 0, 579, 0, 0, - 251, 188, 189, 190, 0, 0, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 380, 209, 210, 211, 212, 213, 214, + 0, 0, 0, 0, 0, 248, 386, 0, 0, 0, + 0, 0, 250, 0, 0, 0, 0, 331, 1008, 0, + 0, 0, 0, 0, 253, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 1404, 240, 0, + 0, 0, 0, 242, 243, 244, 0, 245, 246, 247, + 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, + 386, 0, 0, 0, 0, 0, 250, 189, 152, 0, + 1366, 331, 0, 0, 190, 191, 192, 0, 253, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 385, 211, 212, 213, + 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 223, 224, 225, 0, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, + 228, 229, 0, 0, 0, 0, 0, 230, 21, 0, + 231, 189, 152, 0, 1426, 0, 0, 0, 190, 191, + 192, 0, 0, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 385, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 220, 221, 222, 223, - 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, - 0, 187, 150, 0, 228, 21, 0, 229, 188, 189, - 190, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 380, 209, 210, 211, 212, 213, 214, 0, 0, 0, + 0, 0, 0, 222, 223, 224, 225, 0, 0, 0, + 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 227, 228, 229, 0, 0, 0, 0, + 0, 230, 21, 0, 231, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 239, 546, 0, 0, + 240, 0, 0, 0, 0, 242, 243, 244, 0, 245, + 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 221, 222, 223, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 225, 226, 227, 0, 0, 0, 0, - 0, 228, 21, 0, 229, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 237, 1997, 0, 0, 238, 1998, 0, 0, - 0, 240, 241, 242, 0, 243, 244, 245, 0, 0, - 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 597, 598, 0, - 0, 0, 0, 0, 248, 0, 0, 0, 0, 599, - 0, 0, 0, 290, 0, 0, 251, 0, 0, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 237, - 0, 552, 0, 238, 0, 0, 0, 0, 240, 241, - 242, 907, 243, 244, 245, 0, 0, 0, 107, 0, + 0, 248, 386, 0, 0, 0, 0, 0, 250, 0, + 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, + 253, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 690, 0, 691, 0, 0, + 239, 0, 0, 1598, 240, 0, 0, 0, 0, 242, + 243, 244, 0, 245, 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 246, 381, 0, 0, 0, 0, - 0, 248, 187, 150, 0, 1272, 326, 1049, 0, 188, - 189, 190, 0, 251, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 380, 209, 210, 211, 212, 213, 214, 0, 0, + 0, 0, 0, 0, 0, 248, 386, 0, 0, 0, + 0, 0, 250, 189, 152, 0, 0, 331, 0, 0, + 190, 191, 192, 0, 253, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 385, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 220, 221, 222, 223, 0, 0, - 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 225, 226, 227, 0, 0, 0, - 0, 0, 228, 21, 0, 229, 187, 150, 0, 1437, - 0, 0, 0, 188, 189, 190, 0, 0, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 380, 209, 210, 211, 212, - 213, 214, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 220, 221, - 222, 223, 0, 0, 0, 0, 224, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, - 227, 0, 0, 0, 0, 0, 228, 21, 0, 229, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 237, 0, 552, 0, 238, 0, 0, 0, 0, 240, - 241, 242, 908, 243, 244, 245, 0, 0, 0, 107, + 0, 0, 0, 0, 0, 222, 223, 224, 225, 0, + 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 227, 228, 229, 0, 0, + 189, 152, 0, 230, 21, 0, 231, 190, 191, 192, + 0, 0, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 385, + 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 246, 381, 0, 0, 0, - 0, 0, 248, 0, 0, 0, 0, 326, 0, 0, - 0, 0, 0, 0, 251, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 951, 238, 0, - 0, 0, 0, 240, 241, 242, 0, 243, 244, 245, - 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, - 381, 0, 0, 0, 0, 0, 248, 187, 150, 0, - 1496, 326, 0, 0, 188, 189, 190, 0, 251, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 380, 209, 210, 211, - 212, 213, 214, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 221, 222, 223, 0, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, - 226, 227, 0, 0, 187, 150, 0, 228, 21, 0, - 229, 188, 189, 190, 0, 0, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 380, 209, 210, 211, 212, 213, 214, + 0, 0, 222, 223, 224, 225, 0, 0, 0, 0, + 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 227, 228, 229, 0, 0, 0, 0, 0, + 230, 21, 0, 231, 0, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 909, + 0, 0, 239, 0, 0, 0, 240, 870, 0, 0, + 0, 242, 243, 244, 0, 245, 246, 247, 0, 0, + 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 248, 386, 0, + 0, 0, 0, 0, 250, 0, 0, 0, 0, 331, + 1478, 0, 0, 0, 0, 0, 253, 0, 0, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 239, + 0, 546, 0, 240, 0, 0, 0, 1699, 242, 243, + 244, 1700, 245, 246, 247, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 220, 221, 222, 223, - 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, - 0, 0, 0, 0, 228, 21, 0, 229, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 237, 0, 0, 0, 238, - 1098, 0, 0, 0, 240, 241, 242, 0, 243, 244, - 245, 0, 0, 0, 107, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 248, 386, 0, 0, 0, 0, + 0, 250, 189, 152, 0, 0, 331, 1775, 0, 190, + 191, 192, 0, 253, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 385, 211, 212, 213, 214, 215, 216, 0, 0, + 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 223, 224, 225, 0, 0, + 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 227, 228, 229, 0, 0, 7, + 8, 0, 230, 21, 0, 231, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 754, 0, 0, 0, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 0, 0, 0, 38, 39, 40, 41, 0, 0, + 43, 0, 0, 0, 0, 0, 703, 49, 0, 0, + 51, 704, 0, 54, 705, 0, 0, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 7, 8, 71, 38, 39, 40, 41, 0, 0, 43, + 0, 0, 0, 0, 0, 703, 49, 0, 0, 51, + 704, 239, 54, 705, 0, 240, 85, 86, 87, 0, + 242, 243, 244, 0, 245, 246, 247, 0, 0, 0, + 108, 71, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 248, 386, 0, 0, + 0, 0, 0, 250, 0, 85, 86, 87, 331, 0, + 0, 0, 0, 0, 0, 253, 0, 0, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 7, 8, 0, 38, 39, 40, 41, 0, 0, + 43, 1151, 0, 0, 0, 0, 703, 49, 0, 0, + 51, 704, 0, 54, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 246, 381, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 326, 0, 0, 0, 0, 0, 0, 251, - 0, 0, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 237, 0, 552, 0, 238, 0, 0, 0, - 0, 240, 241, 242, 1108, 243, 244, 245, 0, 0, - 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 246, 381, 0, - 0, 0, 0, 0, 248, 187, 150, 0, 0, 326, - 1553, 0, 188, 189, 190, 0, 251, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 380, 209, 210, 211, 212, 213, - 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 220, 221, 222, - 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, - 0, 0, 187, 150, 0, 228, 21, 0, 229, 188, - 189, 190, 0, 0, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 380, 209, 210, 211, 212, 213, 214, 0, 0, + 7, 8, 71, 0, 0, 0, 0, 0, 0, 0, + 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 85, 86, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 0, 0, 0, 38, 39, 40, 41, 0, + 0, 43, 0, 0, 0, 7, 8, 703, 49, 0, + 0, 51, 704, 0, 54, 705, 0, 0, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 0, 0, 71, 38, 39, 40, 41, 0, 0, + 43, 1214, 0, 0, 0, 0, 703, 49, 0, 0, + 51, 704, 0, 54, 705, 0, 0, 85, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 220, 221, 222, 223, 0, 0, - 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 225, 226, 227, 0, 0, 0, - 0, 0, 228, 21, 0, 229, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 237, 0, 0, 0, 238, 1109, 0, - 0, 0, 240, 241, 242, 0, 243, 244, 245, 0, - 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 246, 381, - 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, - 326, 1878, 0, 0, 0, 0, 0, 251, 0, -4, - 1, 0, 0, -4, 0, 0, 0, 0, 0, 0, - 0, 0, -4, -4, 0, 0, 0, 0, 0, 0, - 237, 0, 0, 0, 238, 0, 0, 0, 0, 240, - 241, 242, 0, 243, 244, 245, 0, 0, 0, 107, - 0, 0, 0, -4, -4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 246, 381, 0, 0, 0, - 0, 0, 248, -4, -4, -4, 0, 326, 0, -4, - -4, 0, -4, 0, 251, 0, 0, -4, -4, 0, - -4, -4, 0, -4, 0, 0, 0, 0, -4, -4, + 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 85, 86, 87, 38, + 39, 40, 41, 0, 0, 43, 0, 0, 0, 0, + 0, 703, 49, 0, 0, 51, 704, 0, 54, 705, + 0, 0, -4, 1, 0, 0, -4, 0, 0, 0, + 0, 0, 1358, 0, 0, -4, -4, 71, 0, 0, + 0, 0, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 85, 86, 87, 546, 0, -4, -4, 0, 0, + 1726, 1934, 0, 0, 1727, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -4, -4, -4, 0, + 0, 0, -4, -4, 0, -4, 0, 0, 0, 0, + -4, -4, 0, -4, -4, 0, -4, 0, 0, 0, + 0, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, 0, 0, -4, -4, + -4, -4, -4, -4, 0, -4, 1991, -4, -4, -4, + -4, -4, -4, -4, 0, -4, -4, -4, -4, -4, + -4, 0, -4, -4, -4, -4, -4, -4, -4, -4, + -4, 0, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, 0, 6, 0, -4, + -4, -4, 0, 0, 0, -4, 7, 8, 0, 0, + -4, -4, -4, -4, 0, 0, -4, 0, -4, 0, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, - -4, -4, -4, 0, 0, -4, -4, -4, -4, -4, - 0, -4, 0, -4, -4, -4, -4, -4, -4, -4, - 0, -4, -4, -4, -4, -4, -4, 0, -4, -4, - -4, -4, -4, -4, -4, -4, -4, 0, -4, -4, - -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, - -4, -4, 0, 6, 0, -4, -4, -4, 0, 0, - 0, -4, 7, 8, 0, 0, -4, -4, -4, -4, - 0, 0, -4, 0, -4, 0, -4, -4, -4, -4, - -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, - 0, 0, 0, 9, 10, 0, -4, -4, -4, 0, - 0, 0, 0, 0, 0, 0, 0, -4, 0, -4, - 0, 0, 0, 11, 12, 13, 0, 0, 0, 14, - 15, 0, 16, 0, 0, 0, 0, 17, 18, 0, - 19, 20, 0, 21, 0, 0, 0, 0, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 0, 0, 37, 38, 39, 40, 41, - 0, 42, 0, 43, 44, 45, 46, 47, 48, 49, - 0, 50, 51, 52, 53, 54, 55, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 0, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 0, 0, 0, 79, 80, 81, 0, 0, - 0, 82, 0, 0, 0, 0, 83, 84, 85, 86, - 150, 344, 87, 0, 88, 0, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 0, 0, 0, 0, 0, 0, 103, 104, 105, 0, - 150, 344, 0, 0, 0, 0, 0, 106, 0, 107, - 0, 0, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 0, 0, 0, 0, 354, 355, 356, 357, 0, - 374, 344, 0, 358, 359, 360, 0, 0, 361, 0, - 362, 0, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 363, 0, 0, 364, 354, 355, 356, 357, 0, - 0, 344, 0, 358, 359, 360, 0, 0, 361, 0, - 362, 0, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 363, 0, 0, 364, 354, 355, 356, 357, 0, - 0, 393, 0, 358, 359, 360, 0, 0, 361, 0, - 362, 0, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 363, 0, 0, 364, 354, 355, 356, 357, 0, - 0, 0, 0, 358, 359, 360, 0, 0, 361, 0, - 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, - 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, - 0, 0, 0, 369, 0, 370, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, - 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, - 0, 0, 0, 369, 0, 370, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, - 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, - 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, - 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, - 0, 0, 0, 369, 0, 370, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1110, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1115, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1116, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1118, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1226, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1247, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1333, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1431, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1432, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1474, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1599, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1600, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1601, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1607, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1608, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1609, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1610, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1747, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1868, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1869, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1897, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1898, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1899, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1900, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1901, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1965, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2022, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2023, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2035, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2036, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2037, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2038, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2039, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2071, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2101, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2106, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2107, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2108, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2109, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2110, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2111, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2153, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2154, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2155, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2156, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 1031, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 1127, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 1206, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 1278, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 1433, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 1502, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 1503, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 1504, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 1505, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 1801, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 1812, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 1849, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 1887, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 1888, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 1889, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 1890, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 1892, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 1916, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 1931, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 1986, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 2003, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 2012, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 2013, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 2033, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 2087, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 2129, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 2151, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 2177, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 2178, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 2179, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 2180, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 0, 0, 2181, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 0, 0, 2182, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 677, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 899, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 1909, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 701, 0, 702, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 957, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 1005, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 1150, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 1219, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 1220, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 1224, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 676, 548, 549, 550, 551, 0, - 0, 0, 0, 552, 0, 0, 0, 1225, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 676, 548, 549, 550, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 1314, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 676, 548, - 549, 550, 551, 0, 0, 0, 0, 552, 0, 0, - 0, 1330, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 676, 548, 549, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 1534, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 0, 0, 1622, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 676, - 548, 549, 550, 551, 0, 0, 0, 0, 552, 0, - 0, 0, 1673, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 676, 548, 549, 550, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 1860, - 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 545, 546, 676, 548, 549, 550, 551, 0, 0, - 0, 0, 552, 0, 0, 0, 1903, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 676, 548, 549, 550, 551, 0, 0, 0, 0, 552, - 0, 0, 0, 1917, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 753, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 754, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 756, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 758, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 759, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 761, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 763, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 764, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 765, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 766, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 767, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 768, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 770, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 771, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 772, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 837, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 870, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 928, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 946, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 947, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 948, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 949, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 955, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 956, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 990, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1004, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1066, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1071, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1084, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1149, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1158, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1159, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1160, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1174, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1175, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1176, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1205, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1207, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1208, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1209, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1210, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1211, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1212, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1213, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1218, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1313, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1329, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1539, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1611, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1621, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1733, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1739, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1740, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1741, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1742, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1746, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1802, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1811, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1834, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1902, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 1963, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 1964, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552, 0, 2100, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 676, 548, 549, 550, 551, 0, 0, 0, - 0, 552, 0, 2148, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 676, 548, 549, - 550, 551, 0, 0, 0, 0, 552 + -4, -4, -4, -4, 0, 0, 0, 9, 10, 0, + -4, -4, -4, 0, 0, 0, 0, 0, 0, 0, + 0, -4, 0, -4, 0, 0, 0, 11, 12, 13, + 0, 0, 0, 14, 15, 0, 16, 0, 0, 0, + 0, 17, 18, 0, 19, 20, 0, 21, 0, 0, + 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 0, 0, 37, + 38, 39, 40, 41, 42, 0, 43, 0, 44, 45, + 46, 47, 48, 49, 50, 0, 51, 52, 53, 54, + 55, 56, 0, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 0, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, + 80, 81, 82, 0, 0, 0, 83, 0, 0, 0, + 0, 84, 85, 86, 87, 152, 349, 88, 0, 89, + 0, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 0, 0, 0, 0, 0, + 0, 104, 105, 106, 0, 379, 349, 0, 0, 0, + 0, 0, 107, 0, 108, 7, 8, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 0, 0, 0, 0, + 359, 360, 361, 362, 0, 0, 0, 0, 363, 364, + 365, 0, 0, 366, 0, 367, 0, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 368, 0, 0, 369, + 359, 360, 361, 362, 0, 0, 0, 0, 363, 364, + 365, 0, 0, 366, 0, 367, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 368, 0, 0, 369, + 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 0, 0, 0, 38, + 39, 40, 41, 0, 0, 43, 0, 0, 0, 0, + 0, 703, 49, 0, 0, 51, 704, 0, 54, 705, + 0, 0, 0, 0, 955, 7, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, + 0, 956, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 370, 371, 372, 0, 0, 0, + 0, 85, 86, 87, 0, 373, 0, 0, 0, 374, + 0, 375, 108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 370, 371, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, + 0, 375, 0, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 0, 0, 0, 38, + 39, 40, 41, 0, 0, 43, 0, 0, 0, 0, + 0, 703, 49, 0, 0, 51, 704, 0, 54, 705, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 85, 86, 87, 0, 0, 1880, 0, 0, 0, + 1881, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 718, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 870, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 871, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 914, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1055, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1065, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1066, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1067, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1072, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1073, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1075, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1175, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1196, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1278, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1360, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1361, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1403, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1519, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1521, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1533, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1656, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1765, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1766, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1789, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1790, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1856, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1906, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1907, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1919, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1920, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1952, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1979, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1984, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1985, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1986, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2025, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 990, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 1042, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 1083, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 1123, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 1154, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 1172, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 1228, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 1362, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 1432, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 0, 1433, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 1434, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 1435, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 1697, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 1708, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 1745, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 1806, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 1821, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 1833, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 1869, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 0, 1886, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 1895, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 1896, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 0, 0, 1917, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 0, 1965, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 0, 0, 2004, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 0, 0, 2023, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 0, 0, 2043, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 2044, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 0, 0, 2045, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, + 665, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 862, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 0, 1799, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 690, 0, 691, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 920, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 969, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 1104, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 1167, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 1168, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 0, 0, 1173, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 664, + 542, 543, 544, 545, 0, 0, 0, 0, 546, 0, + 0, 0, 1174, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 664, 542, 543, 544, + 545, 0, 0, 0, 0, 546, 0, 0, 0, 1264, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 664, 542, 543, 544, 545, 0, 0, + 0, 0, 546, 0, 0, 0, 1275, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 664, 542, 543, 544, 545, 0, 0, 0, 0, 546, + 0, 0, 0, 1464, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 0, 0, + 1539, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 664, 542, 543, 544, 545, 0, + 0, 0, 0, 546, 0, 0, 0, 1586, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 664, 542, 543, 544, 545, 0, 0, 0, 0, + 546, 0, 0, 0, 1757, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 664, 542, + 543, 544, 545, 0, 0, 0, 0, 546, 0, 0, + 0, 1792, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 664, 542, 543, 544, 545, + 0, 0, 0, 0, 546, 0, 0, 0, 1807, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 735, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 736, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 737, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 739, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 740, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 741, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 743, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 744, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 745, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 746, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 747, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 748, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 749, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 751, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 752, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 753, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 813, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 847, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 891, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 909, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 910, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 911, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 912, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 918, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 919, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 954, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 968, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1022, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1026, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1038, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1103, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1112, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1113, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1114, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1124, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1153, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1155, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1156, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1157, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1158, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1159, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1160, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1161, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1166, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1263, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1274, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1465, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1538, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1647, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1649, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1650, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1655, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1698, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1707, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1730, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1791, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1854, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 1855, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546, 0, 1978, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 664, 542, 543, 544, 545, 0, 0, 0, + 0, 546, 0, 2020, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 664, 542, 543, + 544, 545, 0, 0, 0, 0, 546 }; static const yytype_int16 yycheck[] = { - 3, 3, 594, 595, 1204, 1200, 5, 283, 132, 1701, - 4, 1703, 4, 6, 4, 1661, 4, 6, 21, 6, - 5, 21, 4, 6, 4, 6, 5, 5, 5, 5, - 4, 6, 4, 1879, 295, 6, 148, 97, 4, 7, - 4, 4, 97, 4, 47, 4, 1689, 6, 145, 4, - 4, 4, 313, 97, 696, 9, 239, 4, 6, 226, - 227, 173, 704, 118, 247, 98, 7, 100, 239, 9, - 241, 74, 94, 0, 118, 97, 247, 189, 190, 82, - 247, 6, 226, 227, 87, 238, 4, 240, 183, 184, - 185, 226, 227, 60, 61, 98, 63, 226, 227, 132, - 9, 9, 241, 247, 84, 7, 226, 227, 247, 1752, - 681, 14, 247, 239, 243, 241, 377, 9, 379, 6, - 128, 247, 155, 244, 1770, 386, 247, 247, 239, 132, - 241, 133, 91, 239, 137, 138, 247, 145, 241, 6, - 711, 247, 145, 9, 247, 153, 154, 155, 226, 227, - 238, 159, 160, 156, 239, 158, 239, 238, 729, 244, - 163, 9, 235, 236, 247, 168, 737, 226, 227, 247, - 128, 244, 175, 268, 269, 270, 179, 176, 161, 182, - 183, 184, 185, 186, 2030, 238, 161, 145, 247, 163, - 164, 165, 166, 7, 6, 153, 154, 155, 176, 176, - 176, 159, 160, 6, 184, 7, 188, 173, 174, 173, - 174, 306, 307, 308, 94, 226, 227, 97, 210, 99, - 210, 239, 210, 241, 238, 320, 321, 8, 242, 247, - 210, 234, 221, 222, 239, 243, 247, 238, 210, 226, - 227, 242, 247, 242, 247, 238, 240, 250, 251, 242, - 242, 251, 246, 132, 1449, 245, 210, 242, 137, 138, - 1906, 264, 242, 242, 267, 268, 269, 270, 839, 243, - 242, 242, 275, 276, 277, 238, 244, 238, 281, 242, - 283, 235, 236, 238, 238, 238, 240, 242, 242, 242, - 244, 238, 210, 6, 242, 242, 175, 238, 238, 240, - 240, 226, 227, 306, 307, 308, 239, 186, 241, 211, - 212, 213, 214, 1959, 247, 235, 236, 320, 321, 286, - 287, 239, 583, 241, 585, 586, 6, 294, 295, 238, - 238, 240, 240, 235, 236, 244, 244, 4, 6, 226, - 227, 602, 244, 235, 236, 97, 238, 99, 240, 241, - 226, 227, 244, 7, 221, 222, 238, 7, 240, 392, - 242, 6, 1004, 1005, 226, 227, 226, 227, 47, 235, - 236, 247, 238, 2065, 240, 239, 238, 240, 244, 640, - 242, 384, 242, 247, 4, 388, 389, 235, 236, 238, - 238, 242, 240, 226, 227, 246, 244, 211, 212, 213, - 214, 404, 240, 500, 7, 226, 227, 410, 238, 211, - 212, 213, 214, 238, 247, 239, 677, 239, 513, 514, - 515, 516, 238, 247, 240, 247, 247, 91, 431, 244, - 94, 246, 435, 97, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 226, 227, 6, 7, 237, 2103, 226, 227, - 226, 227, 243, 6, 7, 132, 133, 134, 135, 226, - 227, 91, 238, 247, 242, 95, 242, 226, 227, 482, - 147, 101, 102, 150, 104, 105, 489, 490, 521, 94, - 247, 494, 97, 496, 497, 498, 499, 500, 247, 502, - 179, 239, 122, 241, 238, 384, 226, 227, 242, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 2164, 522, - 520, 524, 522, 238, 1166, 243, 1168, 247, 1170, 247, - 1172, 226, 227, 226, 227, 568, 569, 570, 571, 243, - 226, 227, 238, 247, 547, 226, 227, 238, 226, 227, - 553, 648, 247, 238, 247, 234, 242, 211, 212, 213, - 214, 211, 212, 213, 214, 1136, 247, 1138, 238, 247, - 226, 227, 696, 226, 227, 578, 579, 1148, 226, 227, - 238, 235, 236, 226, 227, 235, 236, 238, 267, 231, - 232, 247, 594, 595, 247, 237, 275, 276, 277, 247, - 235, 236, 281, 111, 247, 235, 236, 242, 211, 212, - 213, 214, 242, 94, 238, 494, 97, 496, 99, 498, - 499, 624, 625, 626, 94, 592, 593, 97, 661, 99, - 597, 238, 235, 236, 132, 133, 238, 243, 517, 518, - 138, 247, 903, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 128, 656, 657, 658, 659, 660, 238, 662, - 663, 664, 665, 666, 91, 665, 669, 94, 97, 145, - 97, 128, 99, 244, 6, 678, 247, 153, 154, 155, - 132, 133, 242, 159, 160, 238, 138, 128, 145, 1260, - 8, 239, 238, 241, 242, 1266, 153, 154, 155, 238, - 703, 240, 159, 160, 145, 708, 238, 243, 240, 388, - 389, 247, 153, 154, 155, 748, 243, 242, 159, 160, - 247, 91, 725, 726, 94, 404, 238, 97, 731, 99, - 91, 734, 735, 94, 226, 227, 97, 740, 99, 742, - 242, 1312, 866, 238, 238, 240, 240, 750, 242, 752, - 228, 229, 230, 231, 232, 97, 243, 1328, 243, 237, - 247, 94, 247, 1334, 4, 5, 238, 243, 647, 242, - 649, 650, 651, 652, 653, 654, 97, 656, 657, 658, - 659, 94, 97, 662, 663, 664, 243, 220, 221, 222, + 3, 1152, 3, 3, 147, 286, 187, 582, 583, 1148, + 134, 298, 4, 685, 1574, 1615, 4, 1617, 21, 4, + 48, 693, 4, 21, 5, 5, 4, 6, 4, 316, + 99, 4, 101, 4, 6, 4, 1776, 7, 6, 5, + 0, 4, 4, 1602, 242, 48, 9, 4, 97, 6, + 248, 6, 6, 54, 97, 242, 227, 228, 6, 149, + 6, 248, 4, 4, 4, 134, 4, 227, 228, 4, + 119, 243, 75, 227, 228, 247, 119, 248, 14, 239, + 83, 9, 9, 243, 174, 88, 7, 7, 157, 97, + 271, 272, 273, 129, 248, 382, 99, 384, 9, 84, + 190, 191, 1661, 94, 239, 392, 97, 9, 9, 240, + 146, 6, 227, 228, 1674, 9, 239, 248, 154, 155, + 156, 227, 228, 245, 160, 161, 248, 6, 309, 310, + 311, 134, 6, 248, 91, 135, 139, 140, 240, 6, + 227, 228, 248, 6, 147, 326, 248, 61, 62, 91, + 64, 179, 97, 95, 99, 158, 7, 227, 228, 101, + 102, 248, 104, 105, 669, 7, 227, 228, 236, 237, + 94, 174, 6, 97, 1914, 99, 179, 245, 248, 182, + 239, 123, 241, 244, 187, 188, 164, 165, 166, 167, + 162, 236, 237, 7, 162, 700, 240, 7, 227, 228, + 185, 227, 228, 7, 248, 174, 175, 240, 236, 242, + 715, 177, 174, 175, 243, 248, 189, 6, 723, 211, + 227, 228, 248, 6, 240, 134, 211, 236, 237, 211, + 139, 140, 248, 236, 243, 211, 1796, 238, 6, 1378, + 211, 248, 270, 222, 223, 239, 249, 244, 211, 252, + 253, 248, 280, 241, 246, 253, 284, 6, 243, 247, + 243, 243, 243, 243, 267, 174, 244, 270, 271, 272, + 273, 211, 243, 236, 237, 245, 239, 280, 241, 188, + 243, 284, 245, 286, 571, 239, 573, 574, 243, 243, + 1850, 212, 213, 214, 215, 243, 968, 969, 239, 4, + 240, 239, 242, 590, 239, 239, 309, 310, 311, 8, + 815, 239, 239, 241, 241, 236, 237, 245, 245, 239, + 239, 241, 241, 326, 245, 236, 237, 508, 239, 398, + 241, 242, 227, 228, 245, 236, 237, 239, 239, 241, + 241, 628, 236, 237, 245, 239, 1946, 241, 227, 228, + 240, 245, 242, 227, 228, 222, 223, 240, 227, 228, + 503, 212, 213, 214, 215, 248, 394, 395, 227, 228, + 212, 213, 214, 215, 91, 289, 290, 94, 665, 248, + 97, 241, 410, 297, 298, 240, 389, 390, 241, 248, + 245, 394, 395, 110, 236, 237, 227, 228, 212, 213, + 214, 215, 212, 213, 214, 215, 239, 410, 212, 213, + 214, 215, 240, 416, 227, 228, 240, 248, 242, 420, + 248, 1981, 236, 237, 248, 129, 236, 237, 133, 134, + 135, 136, 240, 239, 437, 248, 129, 227, 228, 240, + 248, 242, 146, 148, 513, 239, 151, 248, 227, 228, + 154, 155, 156, 146, 227, 228, 160, 161, 248, 462, + 129, 154, 155, 156, 239, 227, 228, 160, 161, 248, + 239, 112, 500, 2033, 243, 248, 240, 146, 242, 507, + 389, 243, 485, 239, 248, 154, 155, 156, 239, 492, + 493, 160, 161, 636, 497, 97, 499, 500, 501, 502, + 503, 245, 505, 247, 507, 508, 509, 510, 511, 512, + 239, 514, 245, 516, 512, 248, 514, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 227, 228, 239, 541, 238, + 244, 129, 239, 94, 547, 244, 97, 243, 227, 228, + 239, 244, 241, 227, 228, 239, 248, 241, 146, 110, + 4, 685, 6, 566, 567, 6, 154, 155, 156, 248, + 227, 228, 160, 161, 248, 244, 239, 227, 228, 866, + 649, 239, 582, 583, 1089, 8, 1091, 588, 497, 243, + 499, 248, 501, 502, 227, 228, 239, 1102, 248, 239, + 509, 510, 227, 228, 227, 228, 227, 228, 609, 612, + 613, 614, 232, 233, 94, 248, 239, 97, 238, 99, + 243, 91, 243, 248, 94, 239, 239, 97, 241, 99, + 110, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 110, 644, 645, 646, 647, 648, 239, 650, 651, 652, + 653, 654, 236, 237, 657, 653, 244, 239, 659, 243, + 661, 243, 239, 666, 241, 734, 580, 581, 133, 134, + 91, 585, 673, 94, 139, 239, 97, 97, 99, 1351, + 227, 228, 229, 230, 231, 232, 233, 133, 134, 692, + 239, 238, 94, 139, 697, 243, 229, 230, 231, 232, + 233, 239, 244, 244, 1209, 238, 248, 248, 711, 712, + 1215, 97, 244, 240, 717, 242, 248, 720, 721, 843, + 239, 248, 241, 726, 243, 728, 635, 243, 637, 638, + 639, 640, 641, 642, 4, 644, 645, 646, 647, 6, + 7, 650, 651, 652, 239, 244, 241, 244, 243, 248, + 240, 248, 242, 243, 757, 244, 759, 1262, 244, 248, + 244, 244, 248, 244, 248, 248, 1438, 248, 1273, 244, + 94, 244, 244, 248, 1279, 248, 248, 244, 1450, 6, + 7, 248, 244, 94, 1935, 244, 248, 856, 791, 248, + 227, 228, 97, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 94, 238, 243, 240, 237, 808, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 97, 4, 99, 497, 59, - 60, 61, 62, 97, 4, 99, 238, 67, 68, 69, - 242, 4, 72, 512, 74, 226, 227, 228, 229, 230, - 231, 232, 4, 238, 6, 85, 237, 242, 88, 243, - 4, 6, 855, 247, 2054, 734, 243, 243, 243, 6, - 247, 247, 247, 742, 243, 868, 1508, 243, 247, 238, - 243, 247, 243, 876, 247, 243, 247, 240, 1520, 247, - 1004, 1005, 238, 243, 243, 125, 243, 247, 247, 243, - 247, 243, 238, 247, 2089, 247, 899, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 238, 243, 2117, 243, 237, - 247, 6, 247, 243, 243, 243, 243, 247, 247, 243, - 247, 243, 243, 247, 243, 247, 247, 243, 247, 906, - 243, 247, 246, 2138, 247, 243, 913, 243, 238, 247, - 917, 247, 192, 193, 194, 243, 243, 243, 238, 247, - 247, 247, 8, 203, 243, 240, 242, 207, 247, 209, - 210, 6, 238, 1006, 217, 218, 219, 220, 221, 222, + 233, 720, 244, 244, 244, 238, 248, 248, 248, 728, + 244, 244, 244, 4, 248, 853, 248, 244, 1967, 832, + 244, 248, 244, 244, 248, 244, 248, 248, 4, 248, + 4, 1992, 845, 244, 968, 969, 6, 248, 244, 244, + 853, 244, 248, 248, 244, 248, 244, 244, 248, 862, + 248, 248, 239, 6, 865, 244, 867, 868, 244, 248, + 244, 2010, 248, 244, 248, 244, 241, 248, 244, 248, + 881, 244, 248, 244, 244, 248, 244, 248, 248, 244, + 248, 244, 182, 248, 240, 248, 242, 243, 239, 239, + 239, 970, 239, 8, 239, 241, 6, 6, 239, 243, + 243, 9, 239, 239, 915, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 246, 9, 118, 996, 237, 235, 236, 243, 4, 243, - 242, 247, 242, 247, 244, 243, 243, 1010, 242, 247, - 247, 243, 1015, 243, 238, 247, 238, 247, 1294, 1022, - 1023, 1024, 1025, 243, 243, 1149, 1150, 247, 247, 243, - 243, 243, 1035, 247, 247, 247, 243, 243, 238, 238, - 247, 247, 4, 5, 239, 238, 241, 242, 238, 238, - 242, 238, 238, 238, 1646, 1647, 238, 238, 242, 238, - 238, 1064, 1065, 238, 1067, 242, 1069, 1070, 238, 1072, - 238, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, - 238, 238, 1085, 6, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 1060, 238, 238, 238, 59, 60, 61, - 62, 238, 240, 6, 6, 67, 68, 69, 242, 242, - 72, 242, 74, 240, 6, 240, 240, 1120, 1121, 1122, - 6, 242, 176, 85, 238, 238, 88, 238, 238, 238, - 238, 6, 6, 240, 6, 6, 242, 242, 7, 1142, - 6, 242, 6, 242, 87, 243, 239, 247, 7, 6, - 247, 6, 6, 1156, 1157, 239, 1035, 64, 64, 242, - 64, 237, 244, 125, 64, 4, 7, 7, 6, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 6, 6, 1313, - 1314, 237, 239, 239, 6, 241, 7, 876, 242, 6, - 173, 7, 6, 6, 6, 242, 239, 241, 6, 6, - 242, 1214, 242, 242, 242, 7, 240, 244, 238, 4, - 6, 240, 6, 6, 1227, 1228, 1229, 6, 239, 7, - 192, 193, 194, 7, 1495, 1238, 176, 7, 1499, 1515, - 1243, 203, 1121, 1122, 1247, 207, 7, 209, 210, 176, - 7, 7, 7, 1256, 176, 1258, 7, 7, 1261, 7, - 7, 7, 7, 7, 7, 7, 242, 6, 239, 241, - 247, 7, 1275, 247, 242, 242, 242, 239, 247, 241, - 242, 242, 247, 239, 244, 7, 4, 242, 239, 6, - 247, 1294, 239, 247, 239, 247, 244, 239, 247, 243, - 128, 7, 243, 1336, 6, 1338, 7, 7, 7, 244, - 239, 1314, 9, 239, 247, 247, 247, 996, 239, 244, - 1912, 241, 246, 7, 148, 243, 242, 6, 6, 4, - 46, 46, 244, 238, 244, 1338, 1015, 238, 4, 238, - 238, 238, 7, 238, 7, 99, 1349, 7, 244, 239, - 8, 7, 1355, 247, 7, 7, 6, 109, 7, 7, - 7, 7, 7, 4, 1243, 4, 242, 7, 1247, 6, - 238, 6, 242, 7, 7, 7, 7, 1256, 7, 1258, - 7, 7, 1261, 6, 1508, 1064, 1065, 6, 1067, 6, - 1069, 1070, 97, 1072, 7, 1074, 1075, 1076, 1077, 1078, - 1079, 1080, 1081, 1082, 6, 1408, 1409, 1410, 6, 4, - 4, 1414, 4, 1416, 245, 1418, 239, 1420, 247, 1422, - 1423, 1424, 247, 243, 1521, 1522, 242, 242, 242, 6, - 6, 6, 240, 7, 6, 1314, 1439, 6, 238, 1715, - 6, 1120, 238, 242, 6, 6, 247, 1450, 241, 244, - 6, 6, 242, 242, 122, 1458, 6, 6, 1461, 1492, - 242, 242, 6, 1142, 176, 242, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 5, 239, 1156, 247, 239, - 6, 1448, 4, 6, 4, 6, 172, 4, 7, 242, - 6, 6, 6, 242, 6, 6, 1620, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 1515, 242, 242, 242, 237, 240, 1521, 1522, - 6, 1554, 242, 242, 1527, 6, 4, 7, 242, 242, - 6, 242, 242, 242, 238, 1214, 239, 6, 6, 247, - 247, 6, 6, 1546, 6, 238, 244, 238, 1227, 1228, - 1229, 1554, 247, 247, 242, 7, 1559, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 6, 6, 6, 6, 237, - 6, 239, 95, 5, 239, 242, 6, 6, 242, 6, - 6, 6, 6, 6, 6, 6, 1275, 6, 6, 6, - 6, 239, 4, 1570, 247, 247, 6, 1731, 6, 1642, - 6, 247, 7, 5, 242, 6, 6, 247, 242, 6, - 242, 1718, 242, 7, 242, 6, 171, 243, 243, 6, - 242, 239, 243, 243, 243, 1638, 1639, 6, 244, 7, - 6, 6, 6, 6, 1646, 1647, 242, 6, 6, 1682, - 6, 6, 6, 6, 6, 243, 1689, 1690, 1661, 1338, - 1921, 6, 242, 6, 1667, 174, 239, 1546, 6, 6, - 1349, 242, 1948, 1676, 1707, 243, 1355, 6, 243, 238, - 243, 1684, 242, 6, 1687, 242, 128, 6, 242, 242, - 6, 6, 239, 6, 242, 1662, 1663, 1664, 1665, 1666, - 1667, 1704, 6, 6, 6, 6, 6, 6, 1711, 6, - 6, 6, 1715, 242, 1717, 1718, 243, 6, 243, 6, - 6, 6, 6, 6, 242, 6, 6, 1327, 2067, 1408, - 1409, 1410, 242, 1564, 1381, 1414, 428, 1416, 1880, 1418, - 1348, 1420, 1846, 1422, 1423, 1424, 1627, 3, 3, 1752, - 3, 3, 1908, 1390, 567, 2016, 1489, 3, 1689, 1711, - 1439, 1522, -1, -1, 734, -1, -1, 1770, -1, -1, - -1, 1450, -1, -1, -1, -1, -1, -1, -1, 1458, + 233, 247, 960, 247, 243, 238, 243, 239, 239, 239, + 119, 239, 239, 239, 239, 4, 239, 239, 949, 243, + 6, 979, 243, 239, 243, 869, 243, 960, 243, 243, + 239, 239, 876, 1244, 239, 239, 880, 239, 239, 6, + 239, 974, 6, 241, 6, 241, 979, 267, 243, 1103, + 1104, 243, 243, 243, 1559, 1560, 989, 241, 241, 6, + 177, 994, 1020, 1021, 243, 1023, 1024, 1025, 239, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 239, + 239, 239, 6, 239, 239, 6, 6, 1020, 1021, 241, + 1023, 1024, 1025, 243, 1027, 1028, 1029, 1030, 1031, 1032, + 1033, 1034, 1035, 1036, 6, 243, 1039, 7, 6, 243, + 6, 243, 87, 244, 240, 248, 7, 6, 248, 1077, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 240, 243, 1095, 238, 238, + 4, 245, 64, 6, 1077, 1078, 1079, 7, 7, 240, + 239, 6, 1110, 7, 6, 994, 243, 7, 6, 6, + 174, 243, 1095, 242, 240, 6, 243, 245, 243, 243, + 390, 243, 7, 6, 241, 1019, 239, 1110, 1111, 243, + 4, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 1130, + 6, 6, 6, 238, 1162, 240, 6, 242, 1425, 1263, + 1264, 7, 1429, 240, 7, 241, 7, 7, 1176, 1177, + 1178, 7, 7, 7, 7, 7, 7, 7, 7, 1162, + 7, 7, 7, 7, 1445, 243, 6, 240, 242, 1078, + 1079, 248, 248, 1176, 1177, 1178, 248, 248, 240, 7, + 243, 245, 7, 243, 1187, 4, 6, 245, 129, 1192, + 5, 244, 244, 1196, 7, 6, 245, 1225, 7, 7, + 7, 240, 1205, 9, 1207, 240, 248, 1210, 248, 240, + 248, 247, 1281, 242, 1283, 245, 7, 177, 1219, 244, + 243, 149, 1225, 6, 6, 4, 516, 1802, 46, 46, + 245, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 239, 1244, 239, 245, 59, 60, 61, 62, 4, 245, + 239, 239, 67, 68, 69, 1283, 7, 72, 7, 74, + 7, 1264, 248, 240, 1292, 7, 7, 7, 1296, 6, + 85, 240, 248, 88, 7, 7, 566, 567, 7, 4, + 1283, 4, 109, 1192, 6, 243, 239, 1196, 6, 1292, + 7, 7, 7, 1296, 7, 7, 1205, 7, 1207, 7, + 7, 1210, 6, 243, 6, 6, 6, 97, 1451, 1452, + 7, 6, 4, 4, 1438, 4, 248, 1345, 1346, 1347, + 246, 240, 612, 613, 614, 1353, 6, 248, 243, 243, + 243, 6, 244, 6, 241, 7, 6, 6, 239, 239, + 1368, 243, 1345, 1346, 1347, 6, 6, 245, 1629, 6, + 1353, 1379, 1421, 242, 6, 1264, 248, 6, 123, 1387, + 6, 6, 6, 177, 6, 1368, 6, 657, 6, 6, + 6, 6, 6, 6, 6, 5, 1379, 248, 193, 194, + 195, 240, 240, 6, 1387, 4, 6, 1390, 4, 204, + 7, 6, 6, 208, 6, 210, 6, 6, 6, 173, + 243, 243, 692, 6, 243, 243, 243, 241, 243, 6, + 1479, 243, 243, 1537, 243, 248, 7, 243, 248, 243, + 243, 711, 243, 4, 240, 4, 248, 717, 6, 1457, + 6, 6, 95, 7, 239, 245, 248, 239, 239, 243, + 6, 6, 1445, 6, 6, 6, 5, 243, 1451, 1452, + 243, 1479, 240, 6, 1457, 6, 248, 6, 6, 6, + 6, 248, 240, 1377, 248, 6, 4, 6, 1471, 6, + 243, 248, 6, 243, 7, 243, 1479, 5, 244, 6, + 6, 1484, 243, 6, 243, 6, 1555, 244, 7, 1632, + 243, 6, 6, 172, 240, 6, 244, 7, 6, 244, + 244, 791, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 245, 6, 6, 6, 238, + 1548, 1645, 243, 6, 1811, 6, 1595, 6, 6, 240, + 244, 6, 175, 1602, 1603, 6, 6, 243, 243, 6, + 239, 244, 832, 6, 129, 1548, 1574, 243, 1551, 1552, + 244, 244, 1621, 243, 6, 845, 243, 243, 1839, 1559, + 1560, 1589, 1471, 6, 6, 243, 240, 6, 6, 6, + 6, 1574, 862, 244, 6, 6, 244, 1580, 6, 1493, + 6, 6, 6, 6, 243, 243, 1589, 6, 6, 243, + 1618, 6, 6, 6, 1597, 6, 6, 1600, 1948, 1272, + 1321, 1489, 1777, 1631, 1742, 1544, 1291, 3, 3, 3, + 705, 3, 561, 1900, 1615, 1618, 1617, 1326, 1798, 1418, + 3, 1625, 1625, 1452, -1, 1602, 1629, 720, 1631, 1632, + -1, 434, -1, -1, -1, -1, -1, 4, 5, -1, + -1, -1, -1, -1, -1, -1, 1674, -1, -1, 1936, + -1, -1, -1, -1, -1, -1, -1, -1, 1661, -1, + -1, 1575, 1576, 1577, 1578, 1579, 1580, -1, -1, -1, + -1, 1674, -1, -1, -1, 1744, -1, -1, 1706, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 1597, -1, + -1, 1600, 59, 60, 61, 62, -1, -1, -1, 989, + 67, 68, 69, 1706, -1, 72, -1, 74, -1, -1, + -1, -1, -1, 1782, -1, 1718, -1, -1, 85, -1, + -1, 88, -1, -1, -1, -1, -1, -1, 1731, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 6, -1, -1, -1, 2055, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1684, -1, 1810, 1687, -1, - -1, -1, -1, -1, -1, 1848, -1, -1, -1, 1822, + 1768, -1, -1, -1, -1, -1, -1, -1, -1, 1039, + 1778, -1, -1, -1, -1, -1, -1, -1, -1, 126, + -1, -1, -1, -1, -1, 1768, -1, -1, 1796, -1, + -1, -1, -1, -1, -1, 1778, -1, -1, -1, -1, + 1783, -1, 1810, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1796, -1, -1, 1799, -1, -1, -1, + -1, -1, 1802, -1, -1, -1, -1, 1810, -1, -1, + -1, 1814, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1111, 1850, -1, -1, -1, 193, 194, 195, -1, + -1, -1, -1, -1, -1, -1, 1839, 204, -1, -1, + -1, 208, -1, 210, 211, 1873, 1915, 1850, -1, -1, + -1, -1, -1, -1, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1835, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4, 5, -1, -1, 1527, -1, - -1, -1, 1885, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1871, -1, - -1, -1, -1, -1, -1, 1554, -1, -1, 1881, -1, - -1, -1, -1, 1886, -1, -1, 46, 47, 48, 49, - 50, 51, 52, 53, 54, -1, -1, -1, -1, 59, - 60, 61, 62, 1906, -1, -1, 1909, 67, 68, 69, - 1912, -1, 72, -1, 74, -1, -1, 1920, -1, -1, - -1, 1924, -1, -1, -1, 85, -1, -1, 88, -1, + 1873, -1, -1, 240, -1, 242, 243, -1, -1, -1, + -1, 134, -1, -1, 1885, 138, -1, -1, -1, 142, + -1, -1, -1, -1, -1, -1, -1, 1187, -1, -1, + -1, 1815, 1816, 1817, 1818, 1819, 159, 160, 161, -1, + 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, + 173, -1, 175, 176, 177, 178, -1, -1, -1, 182, + -1, -1, -1, -1, -1, 1938, 1939, 1940, 1941, 1942, + -1, -1, -1, -1, -1, 1946, -1, -1, -1, -1, + -1, -1, -1, 1981, -1, -1, -1, -1, 1872, -1, + -1, -1, 1876, -1, -1, -1, -1, 1968, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1981, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1948, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1959, -1, 1925, 1926, - 1927, 1928, 1929, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, 1997, 248, 249, 250, 251, 252, + -1, -1, -1, -1, -1, 2033, -1, -1, 1922, -1, + -1, -1, 1926, 266, 267, -1, 2019, -1, -1, -1, + -1, -1, -1, -1, -1, 129, -1, -1, 1942, 282, + 2033, -1, -1, -1, -1, -1, -1, 2040, 2041, 292, + 293, -1, -1, -1, -1, 298, -1, -1, -1, -1, + -1, 2054, -1, -1, -1, 308, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1661, -1, -1, -1, -1, 1990, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1676, 2031, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, 1989, -1, -1, 1704, 1993, 13, 14, -1, - -1, -1, 192, 193, 194, 6, -1, -1, 1717, -1, - -1, -1, -1, 203, -1, -1, -1, 207, -1, 209, - 210, -1, -1, -1, 2057, 2058, 2059, 2060, 2061, -1, + -1, -1, -1, 1987, 1988, -1, -1, -1, 331, -1, + -1, -1, 335, 336, 337, -1, 339, -1, -1, -1, + 343, 344, 345, -1, -1, 348, -1, 182, -1, -1, + 1390, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2019, -1, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, 2040, 2041, 386, 238, -1, -1, 390, 391, -1, + -1, -1, -1, -1, -1, 2054, -1, -1, -1, -1, + -1, -1, -1, -1, 407, 408, -1, -1, -1, -1, + -1, -1, -1, -1, 249, -1, -1, 252, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2041, -1, -1, -1, 2045, -1, - -1, -1, 242, -1, -1, -1, -1, -1, -1, -1, - -1, 1770, -1, -1, 2061, -1, -1, -1, -1, -1, - 2103, -1, -1, -1, -1, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, -1, 2122, - -1, 107, 108, 109, -1, -1, 112, -1, -1, -1, - -1, 1810, 118, 119, -1, -1, 122, 123, -1, 125, - 126, -1, -1, -1, 2147, 2112, 2113, 106, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 144, -1, - -1, 2164, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2174, 2175, 132, -1, -1, -1, 136, -1, -1, - -1, 140, 168, 169, 170, -1, -1, -1, 2191, -1, - -1, -1, 1871, -1, -1, -1, -1, -1, 157, 158, - 159, 160, 1881, 162, 163, 164, 165, -1, 167, 168, - 169, 170, 171, 172, 173, 174, -1, 176, 177, 178, - -1, -1, -1, 182, -1, -1, -1, 1906, -1, -1, + -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, + 443, -1, -1, -1, 447, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 461, 462, + -1, -1, -1, 466, -1, -1, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, -1, 495, 496, -1, 498, -1, -1, -1, -1, + -1, 504, -1, 506, -1, -1, -1, -1, 511, -1, + -1, 1551, 1552, 516, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, -1, 548, 549, -1, -1, -1, + -1, -1, 555, 556, 557, 390, -1, -1, -1, -1, + 563, 564, -1, 566, 567, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1920, -1, -1, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 2147, -1, + -1, 8, 585, 586, 587, -1, -1, -1, 591, 592, + 593, 594, 595, 596, 597, 598, 599, -1, -1, -1, + -1, 604, -1, 606, -1, 608, -1, -1, -1, 612, + 613, 614, 615, -1, 617, 618, 619, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 462, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1959, -1, -1, -1, -1, -1, -1, 246, 247, 248, - 249, 250, -1, -1, -1, 2174, 2175, -1, -1, -1, - -1, -1, -1, -1, 263, 264, -1, -1, -1, -1, - -1, 1990, 2191, -1, -1, -1, -1, -1, -1, -1, - 279, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 289, 290, -1, -1, -1, -1, 295, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 305, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 158, -1, - -1, -1, -1, 163, -1, -1, -1, 326, 168, -1, - -1, 330, 331, 332, -1, 334, -1, -1, -1, 338, - 339, 340, 182, -1, 343, -1, -1, -1, 158, -1, - -1, -1, -1, 163, -1, -1, -1, -1, 168, -1, + 643, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 485, -1, -1, -1, 657, -1, -1, 492, 493, 662, + -1, 664, -1, -1, 667, 668, -1, -1, -1, -1, + -1, -1, -1, 676, -1, -1, 511, -1, -1, 682, + -1, 516, -1, -1, -1, -1, -1, -1, -1, 692, + -1, 1731, -1, -1, -1, 698, 699, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 541, -1, 711, -1, + 713, 714, -1, -1, 717, 718, -1, -1, -1, 722, + -1, -1, -1, 6, -1, -1, 729, -1, -1, -1, + 733, 566, 567, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, -1, 755, -1, 757, 238, 759, -1, -1, 1799, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 182, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 381, -1, 2103, -1, 385, -1, -1, -1, + -1, -1, -1, -1, 1814, -1, -1, 612, 613, 614, + -1, -1, -1, -1, -1, -1, -1, -1, 791, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, -1, -1, -1, -1, -1, -1, + -1, -1, 657, -1, -1, -1, -1, -1, -1, 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 401, 402, -1, -1, -1, 247, -1, -1, - 250, -1, -1, -1, -1, -1, 415, -1, -1, -1, - -1, -1, -1, -1, 264, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 435, -1, -1, -1, - -1, -1, 441, -1, -1, 2164, -1, 446, -1, -1, - -1, -1, -1, -1, 264, -1, -1, -1, -1, -1, - -1, 460, -1, -1, -1, -1, -1, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, -1, 492, 493, -1, 495, -1, -1, -1, - -1, -1, 501, -1, -1, -1, 505, -1, -1, -1, + -1, -1, 845, -1, -1, -1, -1, -1, -1, 852, + -1, -1, -1, 856, -1, -1, -1, 692, -1, 862, + -1, -1, -1, -1, -1, -1, -1, 870, 871, -1, + -1, -1, -1, 876, -1, -1, 711, -1, -1, -1, + -1, -1, 717, -1, -1, -1, -1, -1, -1, 892, + -1, -1, 895, -1, -1, -1, -1, -1, 1938, 1939, + 1940, 1941, 1942, 6, -1, -1, -1, -1, -1, -1, + -1, 914, -1, 916, 917, -1, -1, -1, -1, -1, + -1, -1, 757, -1, 759, -1, -1, -1, -1, -1, + -1, -1, 935, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, -1, -1, 956, -1, 238, 791, 1997, 4, 5, + 963, 964, 965, 966, -1, -1, -1, -1, 971, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 519, -1, -1, -1, -1, 524, -1, -1, -1, -1, - -1, -1, -1, -1, 533, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, -1, 554, 555, -1, -1, -1, - -1, -1, 561, 562, 563, -1, -1, -1, -1, 568, - 569, 570, 571, 572, -1, 574, -1, 576, -1, 578, - 579, 6, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 435, -1, -1, 597, 598, - 599, -1, -1, -1, 603, 604, 605, 606, 607, 608, - 609, 610, 611, -1, -1, -1, -1, 616, -1, 618, - -1, 620, 6, -1, -1, 624, 625, 626, -1, -1, - 629, 630, 631, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 482, -1, -1, -1, -1, -1, -1, 489, - 490, -1, -1, -1, -1, -1, 655, -1, -1, -1, + -1, -1, 985, 986, -1, -1, 989, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 832, -1, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, -1, + 845, -1, -1, 59, 60, 61, 62, -1, -1, -1, + -1, 67, 68, 69, -1, -1, 72, 862, 74, -1, + -1, -1, -1, -1, -1, -1, 1039, -1, -1, 85, + -1, -1, 88, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1055, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1065, 1066, 1067, -1, -1, -1, -1, 1072, + 1073, 6, 1075, -1, -1, -1, -1, -1, -1, -1, + 126, 1084, 1085, -1, -1, -1, -1, -1, -1, 1092, + -1, -1, -1, -1, -1, 1098, 1099, 1100, -1, -1, + -1, -1, -1, 1106, 1107, -1, -1, -1, 1111, -1, + -1, -1, -1, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, -1, -1, -1, -1, 238, 22, 23, -1, 1142, + -1, -1, -1, -1, -1, -1, -1, 193, 194, 195, + -1, -1, -1, -1, 989, -1, -1, -1, 204, -1, + -1, -1, 208, -1, 210, 211, -1, -1, -1, -1, + -1, -1, 1175, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1187, -1, -1, -1, -1, -1, + 236, 237, 1195, -1, -1, -1, -1, 243, -1, 245, + -1, -1, -1, -1, 1039, -1, -1, -1, -1, -1, + -1, -1, -1, 1216, 1217, -1, -1, -1, 1221, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 669, -1, -1, -1, -1, 674, -1, 676, -1, 519, - 679, 680, -1, -1, 524, -1, -1, -1, 687, -1, - -1, -1, -1, -1, 693, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 703, -1, -1, 547, -1, -1, - 709, 710, -1, -1, 524, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 6, 725, -1, 727, 728, - -1, -1, 731, 732, -1, -1, -1, 736, 578, 579, - -1, -1, -1, -1, 743, -1, -1, -1, 747, -1, - -1, 750, -1, 752, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 6, -1, -1, 578, 579, - -1, -1, -1, -1, 773, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 624, 625, 626, -1, -1, -1, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, 808, - -1, -1, 237, -1, 624, 625, 626, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 669, - -1, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, 6, -1, 237, -1, -1, 855, -1, -1, 669, - -1, -1, -1, 703, -1, -1, -1, -1, -1, 868, - -1, -1, -1, -1, -1, -1, 875, -1, -1, -1, - -1, -1, -1, -1, -1, 725, -1, -1, -1, -1, - -1, 731, -1, 703, -1, -1, -1, -1, -1, -1, - 899, -1, -1, -1, -1, -1, -1, -1, 907, 908, - 750, -1, 752, -1, 913, 725, -1, -1, -1, -1, - -1, 731, -1, -1, -1, -1, -1, -1, -1, -1, - 929, -1, -1, 932, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 951, -1, 953, 954, 237, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 808, -1, - -1, -1, -1, 972, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, 992, -1, -1, 237, -1, 808, -1, - 999, 1000, 1001, 1002, -1, -1, -1, -1, 1007, -1, - -1, -1, -1, -1, -1, 855, -1, -1, -1, -1, - -1, -1, 1021, 1022, 1023, 1024, 1025, 1026, 868, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, - -1, -1, -1, -1, -1, 855, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 868, 899, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, 6, 237, -1, -1, -1, 1085, -1, -1, 899, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1098, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1108, - 1109, 1110, -1, -1, -1, -1, 1115, 1116, -1, 1118, - -1, -1, -1, -1, -1, -1, -1, 1126, -1, 1128, - 1129, 1130, 1131, 1132, -1, -1, -1, -1, -1, 6, - 1139, -1, -1, -1, -1, -1, 1145, 1146, -1, -1, - -1, -1, -1, 1152, 1153, -1, -1, -1, 1157, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1167, 6, - 1169, -1, 1171, -1, 1173, -1, -1, -1, -1, -1, - -1, -1, 1022, 1023, 1024, 1025, -1, -1, -1, -1, - -1, -1, 6, -1, -1, 1194, -1, -1, -1, -1, + -1, -1, 1235, -1, -1, 1238, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 134, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1022, 1023, 1024, 1025, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1226, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1238, - -1, -1, -1, -1, -1, 1085, -1, 1246, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, 1267, 1268, - 237, -1, 1271, -1, -1, 1085, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1285, 6, -1, 1288, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, 1315, 1157, -1, -1, - 6, -1, -1, 1322, 1323, 1324, 1325, -1, -1, -1, - -1, -1, 1331, -1, 1333, -1, 1335, 1336, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1157, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, 406, -1, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, 1238, -1, - 237, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, 1238, -1, - -1, 1430, 1431, 1432, -1, -1, -1, -1, -1, -1, - 1439, -1, 1441, -1, -1, -1, -1, -1, -1, 1448, + -1, -1, 1265, -1, -1, 1268, 1269, -1, -1, -1, + -1, -1, -1, 1276, -1, 1278, 1111, 1280, 1281, -1, + -1, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, 412, -1, -1, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, -1, 224, 225, + -1, -1, -1, -1, 230, 231, -1, -1, -1, 1352, + -1, -1, 1187, -1, 240, 241, 1359, 1360, 1361, -1, + -1, -1, -1, -1, -1, 1368, -1, 1370, -1, -1, + -1, -1, -1, -1, 1377, -1, -1, -1, -1, 4, + 5, -1, -1, -1, -1, -1, -1, 1390, -1, -1, + -1, -1, 1395, -1, -1, -1, -1, -1, 505, -1, + 1403, 1404, 1405, -1, -1, -1, -1, -1, -1, -1, + 1413, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1423, 46, 47, 48, 49, 50, 51, 52, 53, 54, + -1, -1, -1, -1, 59, 60, 61, 62, -1, -1, + -1, -1, 67, 68, 69, 552, 1449, 72, -1, 74, + -1, -1, 1455, 1456, -1, -1, -1, -1, -1, -1, + 85, -1, -1, 88, 350, 351, 352, -1, -1, -1, + 356, 357, 358, 359, 360, 361, 362, -1, 364, -1, + -1, 1484, 368, 369, -1, -1, 372, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 385, + -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1519, 1520, 1521, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1461, -1, -1, -1, -1, 1466, -1, -1, - -1, -1, 502, -1, -1, 1474, 1475, 1476, -1, -1, - -1, -1, -1, -1, -1, 1484, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1494, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - 1519, -1, -1, -1, -1, -1, 1525, 1526, 558, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - 1559, -1, -1, -1, -1, -1, -1, -1, -1, 1568, - 1569, -1, -1, -1, -1, -1, 1575, 1576, -1, -1, - -1, -1, -1, 1582, -1, -1, -1, -1, -1, -1, + 1533, 1534, 1535, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1546, -1, -1, -1, -1, 1551, 1552, + 1553, -1, 1555, -1, -1, 1390, -1, -1, 1561, 1562, + -1, -1, -1, -1, -1, -1, -1, -1, 193, 194, + 195, -1, -1, -1, -1, -1, -1, 1580, -1, 204, + -1, 1584, -1, 208, -1, 210, 211, -1, -1, -1, + -1, -1, 1595, -1, -1, 1598, -1, -1, -1, 1602, + -1, -1, -1, -1, -1, -1, -1, -1, 1611, 1612, + -1, 1614, -1, -1, -1, -1, -1, -1, 243, 1622, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1599, 1600, 1601, -1, -1, -1, -1, -1, 1607, 1608, - 1609, 1610, -1, -1, -1, -1, -1, -1, 1617, 1618, - -1, 1461, -1, -1, -1, -1, -1, -1, 6, -1, - 1629, -1, -1, -1, -1, -1, -1, -1, -1, 1638, - 1639, 1640, -1, 1642, -1, -1, -1, -1, -1, 1648, - 1649, 1461, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1667, -1, - -1, -1, 1671, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1682, -1, -1, 1685, -1, -1, -1, - 1689, -1, -1, -1, -1, -1, -1, -1, -1, 1698, - 1699, -1, -1, -1, -1, -1, -1, -1, -1, 1708, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1559, - -1, -1, -1, -1, -1, 1724, -1, -1, -1, -1, - 1729, 1730, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1744, -1, -1, 1747, 1748, - 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, - 790, -1, 792, 793, 794, 795, -1, 797, 798, 799, - 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 811, -1, 813, 1783, -1, -1, -1, -1, -1, - 820, 6, -1, -1, -1, -1, -1, -1, 1638, 1639, - -1, 831, 832, -1, -1, 1804, -1, -1, -1, -1, - 840, -1, -1, -1, 1813, -1, -1, -1, -1, -1, - -1, -1, -1, 1822, -1, -1, -1, 1667, 1638, 1639, - -1, -1, 1831, 1832, -1, -1, 1835, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1868, - 1869, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1884, -1, -1, -1, -1, - -1, -1, 1891, -1, -1, -1, -1, -1, 1897, 1898, - 1899, 1900, 1901, -1, -1, -1, -1, -1, -1, -1, - 1909, -1, -1, -1, -1, -1, 6, -1, -1, -1, - -1, -1, -1, -1, -1, 1924, -1, -1, 958, 959, - 960, -1, -1, 1932, 964, 965, -1, -1, 968, 969, - 970, 971, -1, 973, -1, -1, -1, -1, 978, -1, - -1, -1, -1, -1, -1, -1, -1, 1956, -1, -1, - -1, -1, -1, 1962, -1, -1, 1965, -1, -1, -1, + -1, -1, -1, -1, -1, 1638, -1, -1, 524, -1, + 1643, 1644, -1, -1, 6, -1, -1, -1, -1, 1484, + 1653, -1, -1, 1656, 1657, -1, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, -1, 775, 776, + 777, 778, -1, 780, 781, 782, 783, -1, -1, -1, + -1, 1684, -1, -1, -1, -1, -1, 794, -1, 796, + -1, 4, 5, -1, -1, -1, 803, 1700, -1, -1, + 807, 808, -1, -1, -1, -1, 1709, -1, -1, 816, + -1, -1, -1, -1, -1, 1718, 1551, 1552, -1, -1, + -1, -1, -1, -1, 1727, 1728, -1, -1, 1731, -1, + -1, -1, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, -1, -1, -1, 1580, 59, 60, 61, 62, + -1, -1, -1, -1, 67, 68, 69, -1, -1, 72, + -1, 74, 1765, 1766, -1, -1, -1, -1, -1, -1, + -1, -1, 85, -1, -1, 88, -1, -1, 1781, -1, + -1, 1784, -1, -1, -1, -1, 1789, 1790, -1, -1, + -1, -1, -1, 6, -1, -1, 1799, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1822, -1, -1, -1, -1, -1, -1, -1, - 22, 23, -1, -1, -1, 1835, -1, -1, -1, 1998, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, 2022, 2023, 1835, -1, -1, 1058, 1059, - -1, -1, -1, -1, -1, 2034, 2035, 2036, 2037, 2038, - 2039, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 2052, -1, -1, -1, -1, 2057, 2058, - 2059, 2060, 2061, -1, -1, -1, -1, -1, 2067, 1909, - -1, -1, 2071, -1, -1, 7, 8, -1, -1, -1, - -1, -1, -1, -1, 1924, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1909, - 132, -1, 2101, -1, -1, -1, -1, 2106, 2107, 2108, - 2109, 2110, 2111, -1, 1924, -1, -1, -1, -1, -1, - -1, -1, -1, 2122, 1154, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, 2153, 2154, 2155, 2156, 2157, 2158, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 7, - 222, 223, -1, -1, -1, -1, 228, 229, -1, -1, - -1, -1, -1, -1, -1, -1, 238, 239, -1, -1, - -1, -1, -1, 8, -1, -1, -1, 2057, 2058, 2059, - 2060, 2061, 215, 216, 217, 218, 219, 220, 221, 222, + -1, 1814, -1, 126, 921, 922, 923, -1, -1, 1822, + 927, 928, -1, -1, 931, 932, 933, 934, -1, 936, + -1, -1, -1, -1, 941, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1847, -1, -1, -1, -1, -1, + 1853, -1, -1, 1856, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 1881, -1, + 193, 194, 195, 1718, -1, -1, -1, -1, -1, -1, + -1, 204, -1, -1, -1, 208, 1731, 210, 211, -1, + -1, -1, -1, 1906, 1907, -1, -1, -1, -1, -1, + 1017, 1018, -1, -1, -1, 1918, 1919, 1920, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1933, -1, -1, -1, -1, 1938, 1939, 1940, 1941, 1942, + -1, -1, -1, -1, -1, 1948, -1, -1, -1, 1952, + -1, -1, -1, -1, -1, -1, -1, -1, 844, -1, + -1, -1, -1, -1, 1799, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1979, -1, -1, 1814, + -1, 1984, 1985, 1986, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1997, -1, -1, -1, -1, -1, + -1, 1108, -1, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, 239, 2057, 2058, 2059, - 2060, 2061, 8, -1, 247, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1297, -1, -1, + 233, -1, 2025, 2026, 2027, 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2122, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, 1337, -1, -1, - -1, -1, 2122, 345, 346, 347, -1, -1, -1, 351, - 352, 353, 354, 355, 356, 357, -1, 359, -1, -1, - -1, 363, 364, -1, -1, 367, -1, -1, -1, -1, - 1370, 1371, 1372, 1373, 1374, -1, -1, -1, 380, 1379, - 1380, -1, 1382, -1, -1, -1, -1, -1, 1388, -1, - -1, -1, -1, -1, 1394, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1405, -1, -1, -1, -1, + 3, 4, 5, -1, -1, -1, -1, 10, 11, 12, + -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, + 63, 6, -1, 1938, 1939, 1940, 1941, 1942, -1, -1, + -1, -1, 75, 76, 77, -1, -1, -1, -1, -1, + 83, 84, -1, 86, -1, 1011, -1, -1, 91, -1, + -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, + 1247, -1, -1, 106, -1, -1, -1, 110, -1, -1, + -1, -1, -1, -1, -1, -1, 119, -1, 121, -1, + -1, 124, 1997, 126, -1, -1, -1, -1, -1, -1, + 133, 134, 135, 136, 137, 1282, -1, 140, 141, 142, + 143, 144, -1, -1, -1, 148, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, -1, -1, - 1480, 8, 1482, -1, -1, -1, 1486, -1, 1488, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1521, -1, -1, -1, -1, -1, -1, -1, -1, - 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1310, 1311, 1312, 1313, 1314, -1, -1, + 1096, -1, 1319, 1320, -1, 1322, -1, 1324, -1, -1, + -1, -1, -1, 1330, -1, -1, -1, -1, -1, 192, + -1, -1, -1, 196, 197, 1342, -1, -1, 201, 202, + 203, -1, 205, 206, 207, -1, -1, -1, 211, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 227, 228, -1, -1, -1, -1, + -1, 234, -1, -1, -1, -1, 239, -1, -1, -1, + 243, -1, -1, 246, -1, -1, -1, -1, -1, -1, + -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1409, -1, 1411, -1, -1, -1, 1415, -1, + 1417, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1451, -1, -1, -1, -1, -1, + -1, -1, 3, 4, 5, -1, -1, -1, -1, 10, + 11, 12, 1248, 1249, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 6, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, -1, -1, -1, 67, 68, 69, -1, + -1, 72, -1, 74, 75, 76, 77, -1, -1, 1536, + -1, -1, 83, 84, 85, 86, -1, 88, -1, -1, + 91, -1, -1, 94, -1, -1, 97, -1, 99, 1335, + -1, -1, -1, -1, -1, 106, -1, -1, -1, 110, + -1, -1, -1, -1, -1, -1, -1, -1, 119, -1, + 121, -1, -1, 124, -1, 126, -1, -1, -1, -1, + -1, -1, 133, 134, 135, 136, 137, -1, -1, 140, + 141, 142, 143, 144, -1, -1, -1, 148, -1, -1, + 151, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, 1634, -1, -1, + 1637, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 192, 193, 194, 195, 196, 197, -1, -1, -1, + 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, + 211, -1, -1, -1, -1, -1, -1, -1, 1675, 1676, + 6, -1, -1, -1, -1, -1, 227, 228, -1, -1, + -1, -1, -1, 234, -1, -1, -1, -1, 239, -1, + -1, -1, 243, -1, -1, 246, -1, 1483, -1, -1, + -1, -1, -1, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, -1, -1, -1, -1, 238, -1, -1, 1735, 1736, 3, 4, 5, -1, -1, -1, -1, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, -1, -1, 46, 47, 48, 49, 50, 51, 52, + 43, -1, 1779, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, 67, 68, 69, -1, -1, 72, - -1, 74, 75, 76, 77, -1, -1, -1, -1, 1619, + -1, 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, 85, 86, -1, 88, -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, - -1, -1, -1, 106, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 118, -1, 120, -1, -1, - 123, -1, 125, -1, -1, -1, -1, -1, -1, 132, - 133, 134, 135, 136, -1, -1, 139, 140, 141, 142, - 143, -1, -1, -1, 147, -1, -1, 150, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1720, -1, -1, 1723, -1, -1, -1, -1, 191, 192, - 193, 194, 195, 196, -1, -1, -1, 200, 201, 202, - 203, 204, 205, 206, 207, 8, 209, 210, -1, -1, + -1, -1, -1, 106, -1, -1, -1, 110, -1, -1, + -1, -1, -1, -1, -1, -1, 119, -1, 121, -1, + -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, + 133, 134, 135, 136, 137, 6, -1, 140, 141, 142, + 143, 144, -1, -1, -1, 148, -1, -1, 151, -1, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, 6, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 192, + 193, 194, 195, 196, 197, -1, 6, -1, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 226, 227, -1, -1, -1, -1, -1, - 233, 1771, 1772, -1, -1, 238, -1, -1, -1, 242, - -1, -1, 245, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 227, 228, -1, -1, -1, -1, + -1, 234, -1, -1, -1, -1, 239, -1, -1, -1, + 243, -1, -1, 246, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, - 5, -1, -1, -1, -1, 10, 11, 12, -1, -1, + 5, -1, 7, -1, -1, 10, 11, 12, -1, 2006, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 1839, - 1840, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 35, 36, 37, 38, -1, -1, -1, -1, -1, -1, + -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, - -1, -1, 67, 68, 69, 867, -1, 72, -1, 74, + -1, -1, 67, 68, 69, -1, -1, 72, -1, 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, - 85, 86, 1882, 88, -1, -1, 91, -1, -1, 94, - -1, -1, 97, -1, 99, -1, -1, -1, -1, -1, - -1, 106, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 118, -1, 120, -1, -1, 123, -1, - 125, -1, -1, -1, -1, -1, -1, 132, 133, 134, - 135, 136, -1, -1, 139, 140, 141, 142, 143, 8, - -1, -1, 147, -1, -1, 150, -1, -1, -1, -1, - -1, -1, 215, 216, 217, 218, 219, 220, 221, 222, + 85, 86, -1, 88, -1, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 126, -1, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 191, 192, 193, 194, - 195, 196, -1, -1, -1, 200, 201, 202, 203, 204, - 205, 206, 207, -1, 209, 210, -1, -1, -1, -1, + 233, -1, -1, -1, -1, 238, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, + 185, -1, -1, -1, -1, -1, -1, 192, 193, 194, + 195, 196, -1, -1, -1, -1, 201, 202, 203, 204, + 205, 206, 207, 208, -1, 210, 211, 212, 213, 214, + 215, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 227, 228, -1, -1, -1, -1, -1, 234, + -1, 236, 237, -1, 239, -1, 241, 3, 4, 5, + 245, 246, -1, -1, 10, 11, 12, -1, -1, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, + 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, + 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, + -1, 97, -1, 99, -1, -1, -1, -1, -1, -1, + 106, -1, -1, -1, 110, -1, -1, -1, -1, -1, + -1, -1, -1, 119, -1, 121, -1, -1, 124, -1, + 126, -1, -1, -1, -1, -1, -1, 133, 134, 135, + 136, 137, -1, -1, 140, 141, 142, 143, 144, -1, + -1, -1, 148, -1, -1, 151, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 192, -1, -1, -1, + 196, 197, -1, -1, -1, 201, 202, 203, -1, 205, + 206, 207, -1, -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 226, 227, -1, -1, -1, -1, -1, 233, -1, - -1, -1, -1, 238, -1, -1, -1, 242, -1, -1, - 245, -1, -1, -1, 3, 4, 5, -1, 7, -1, - 1052, 10, 11, 12, -1, -1, 15, 16, 17, 18, + -1, 227, 228, -1, -1, -1, -1, -1, 234, -1, + -1, -1, -1, 239, 3, 4, -1, 243, -1, -1, + 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - -1, -1, -1, -1, -1, -1, -1, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, -1, 13, 14, 67, 68, - 69, -1, -1, 72, -1, 74, 75, 76, 77, -1, - -1, -1, -1, -1, 83, 84, 85, 86, -1, 88, - -1, 2131, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1143, -1, -1, -1, -1, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, 125, -1, 237, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, - 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, - -1, 118, 119, -1, -1, 122, 123, -1, 125, 126, - -1, -1, -1, -1, -1, 184, -1, -1, -1, -1, - -1, -1, 191, 192, 193, 194, 195, 144, 8, -1, - -1, 200, 201, 202, 203, 204, 205, 206, 207, -1, - 209, 210, 211, 212, 213, 214, -1, -1, -1, -1, - -1, 168, 169, 170, -1, -1, -1, 226, 227, -1, - -1, -1, -1, -1, 233, -1, 235, 236, -1, 238, - -1, 240, -1, -1, -1, 244, 245, -1, -1, -1, - -1, 3, 4, 5, -1, -1, 1298, 1299, 10, 11, + 39, 40, 41, 42, 43, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, + -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 75, 76, 77, -1, + -1, -1, -1, -1, 83, 84, -1, 86, -1, -1, + -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, + 99, -1, -1, -1, -1, -1, -1, 106, -1, -1, + -1, 110, -1, -1, -1, -1, -1, -1, -1, -1, + 119, -1, 121, -1, -1, 124, -1, 126, -1, -1, + -1, -1, -1, -1, 133, 134, 135, 136, 137, -1, + -1, 140, 141, 142, 143, 144, -1, -1, -1, 148, + -1, -1, 151, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 192, -1, -1, -1, 196, 197, -1, + -1, -1, 201, 202, 203, -1, 205, 206, 207, -1, + -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 227, 228, + -1, -1, -1, -1, -1, 234, -1, -1, -1, -1, + 239, 3, 4, -1, 243, 244, -1, 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, -1, -1, -1, -1, 243, -1, -1, -1, + 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, - -1, -1, -1, -1, 106, -1, 1398, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 118, -1, 120, -1, - -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, - 132, 133, 134, 135, 136, -1, -1, 139, 140, 141, - 142, 143, -1, -1, -1, 147, -1, -1, 150, -1, - -1, -1, -1, -1, -1, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, - -1, -1, -1, 195, 196, -1, -1, -1, 200, 201, - 202, -1, 204, 205, 206, -1, -1, -1, 210, -1, + -1, -1, -1, -1, 106, -1, -1, -1, 110, -1, + -1, -1, -1, -1, -1, -1, -1, 119, -1, 121, + -1, -1, 124, -1, 126, -1, -1, -1, -1, -1, + -1, 133, 134, 135, 136, 137, -1, -1, 140, 141, + 142, 143, 144, -1, -1, -1, 148, -1, -1, 151, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, 6, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 192, -1, -1, -1, 196, 197, -1, -1, -1, 201, + 202, 203, -1, 205, 206, 207, -1, -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 226, 227, -1, -1, -1, -1, - -1, 233, -1, -1, -1, -1, 238, -1, -1, -1, - 242, -1, -1, 245, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3, 4, 5, -1, -1, - -1, -1, 10, 11, 12, -1, 1558, 15, 16, 17, + -1, -1, -1, -1, -1, 227, 228, -1, -1, -1, + -1, -1, 234, -1, -1, -1, -1, 239, 3, 4, + -1, 243, -1, -1, 246, 10, 11, 12, -1, -1, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, + -1, 86, -1, -1, -1, -1, 91, -1, -1, 94, + -1, -1, 97, -1, 99, -1, -1, -1, -1, -1, + -1, 106, -1, -1, -1, 110, -1, -1, -1, -1, + -1, -1, -1, -1, 119, -1, 121, -1, -1, 124, + -1, 126, -1, -1, -1, -1, -1, -1, 133, 134, + 135, 136, 137, -1, -1, 140, 141, 142, 143, 144, + -1, -1, -1, 148, -1, -1, 151, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 192, -1, -1, + -1, 196, 197, -1, -1, -1, 201, 202, 203, -1, + 205, 206, 207, -1, -1, -1, 211, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 227, 228, -1, -1, -1, -1, -1, 234, + -1, -1, -1, -1, 239, 3, 4, -1, 243, -1, + -1, 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, @@ -4415,480 +4268,253 @@ static const yytype_int16 yycheck[] = -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, -1, -1, -1, 106, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 118, -1, 120, -1, -1, 123, -1, 125, -1, -1, - -1, -1, -1, -1, 132, 133, 134, 135, 136, -1, - -1, 139, 140, 141, 142, 143, -1, -1, -1, 147, - -1, -1, 150, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 110, -1, -1, -1, -1, -1, -1, -1, + -1, 119, -1, 121, -1, -1, 124, -1, 126, -1, + -1, -1, -1, -1, -1, 133, 134, 135, 136, 137, + -1, -1, 140, 141, 142, 143, 144, -1, -1, -1, + 148, -1, -1, 151, -1, -1, -1, -1, -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, -1, -1, -1, 107, 108, 109, -1, - -1, 112, -1, -1, -1, -1, -1, 118, 119, -1, - -1, 122, 123, 191, 125, 126, -1, 195, 196, -1, - -1, -1, 200, 201, 202, -1, 204, 205, 206, -1, - -1, -1, 210, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 226, 227, - -1, -1, -1, -1, -1, 233, -1, 168, 169, 170, - 238, 3, 4, -1, 242, -1, -1, 245, 10, 11, - 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 243, 75, 76, 77, -1, -1, 13, 14, - -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, - -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, - -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 118, -1, 120, -1, - -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, - 132, 133, 134, 135, 136, -1, -1, 139, 140, 141, - 142, 143, -1, -1, -1, 147, -1, -1, 150, -1, - -1, -1, -1, -1, -1, -1, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, -1, - -1, -1, 107, 108, 109, -1, -1, 112, -1, -1, - -1, -1, -1, 118, 119, -1, -1, 122, 123, 191, - 125, 126, -1, 195, 196, -1, -1, -1, 200, 201, - 202, -1, 204, 205, 206, -1, -1, -1, 210, 144, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 226, 227, -1, -1, -1, -1, - -1, 233, -1, 168, 169, 170, 238, 3, 4, -1, - 242, 243, -1, 245, 10, 11, 12, -1, -1, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, - 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 243, 75, - 76, 77, -1, -1, 13, 14, -1, 83, 84, -1, - 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, - -1, 97, -1, 99, -1, -1, -1, -1, -1, -1, - 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 118, -1, 120, -1, -1, 123, -1, 125, - -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, - 136, -1, -1, 139, 140, 141, 142, 143, -1, -1, - -1, 147, -1, -1, 150, -1, -1, -1, -1, -1, - -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, -1, -1, -1, 107, 108, - 109, -1, -1, 112, -1, -1, -1, -1, -1, 118, - 119, -1, -1, 122, 123, 191, 125, 126, -1, 195, - 196, -1, -1, -1, 200, 201, 202, -1, 204, 205, - 206, -1, -1, -1, 210, 144, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 226, 227, -1, -1, -1, -1, -1, 233, -1, 168, - 169, 170, 238, 3, 4, -1, 242, -1, -1, 245, - 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, - -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 243, 75, 76, 77, -1, -1, - 13, 14, -1, 83, 84, -1, 86, -1, -1, -1, - -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, - -1, -1, -1, -1, -1, -1, 106, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 118, -1, - 120, -1, -1, 123, -1, 125, -1, -1, -1, -1, - -1, -1, 132, 133, 134, 135, 136, -1, -1, 139, - 140, 141, 142, 143, -1, -1, -1, 147, -1, -1, - 150, -1, -1, -1, -1, -1, -1, -1, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, -1, -1, -1, 107, 108, 109, -1, -1, 112, - -1, -1, -1, -1, -1, 118, 119, -1, -1, 122, - 123, 191, 125, 126, -1, 195, 196, -1, -1, -1, - 200, 201, 202, -1, 204, 205, 206, -1, -1, -1, - 210, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 226, 227, -1, -1, - -1, -1, -1, 233, -1, 168, 169, 170, 238, 3, - 4, -1, 242, -1, -1, 245, 10, 11, 12, -1, + 101, 102, 103, -1, -1, -1, 107, 108, 109, 110, + -1, -1, 113, -1, -1, -1, -1, -1, 119, 120, + -1, -1, 123, 124, 192, 126, 127, -1, 196, 197, + -1, -1, -1, 201, 202, 203, -1, 205, 206, 207, + -1, -1, -1, 211, 145, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 227, + 228, -1, -1, -1, -1, -1, 234, -1, 169, 170, + 171, 239, 3, 4, -1, 243, -1, -1, 246, 10, + 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, + -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 244, 75, 76, 77, -1, -1, 13, + 14, -1, 83, 84, -1, 86, -1, -1, -1, -1, + 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, + -1, -1, -1, -1, -1, 106, -1, -1, -1, 110, + -1, -1, -1, -1, -1, -1, -1, -1, 119, -1, + 121, -1, -1, 124, -1, 126, -1, -1, -1, -1, + -1, -1, 133, 134, 135, 136, 137, -1, -1, 140, + 141, 142, 143, 144, -1, -1, -1, 148, -1, -1, + 151, -1, -1, -1, -1, -1, -1, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + -1, -1, -1, 107, 108, 109, 110, -1, -1, 113, + -1, -1, -1, -1, -1, 119, 120, -1, -1, 123, + 124, 192, 126, 127, -1, 196, 197, -1, -1, -1, + 201, 202, 203, -1, 205, 206, 207, -1, -1, -1, + 211, 145, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 227, 228, -1, -1, + -1, -1, -1, 234, -1, 169, 170, 171, 239, 3, + 4, -1, -1, 244, -1, 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 243, 75, 76, 77, -1, -1, 13, 14, -1, 83, + 244, 75, 76, 77, -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, -1, - -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 118, -1, 120, -1, -1, 123, - -1, 125, -1, -1, -1, -1, -1, -1, 132, 133, - 134, 135, 136, -1, -1, 139, 140, 141, 142, 143, - -1, -1, -1, 147, -1, -1, 150, -1, -1, -1, + -1, -1, 106, -1, -1, -1, 110, -1, -1, -1, + -1, -1, -1, -1, -1, 119, -1, 121, -1, -1, + 124, -1, 126, -1, -1, -1, -1, -1, -1, 133, + 134, 135, 136, 137, -1, -1, 140, 141, 142, 143, + 144, -1, -1, -1, 148, -1, -1, 151, -1, -1, -1, -1, -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, - 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, - -1, 118, 119, -1, -1, 122, 123, 191, 125, 126, - -1, 195, 196, -1, -1, -1, 200, 201, 202, -1, - 204, 205, 206, -1, -1, -1, 210, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 226, 227, -1, -1, -1, -1, -1, 233, - -1, 168, 169, 170, 238, 3, 4, -1, 242, -1, - -1, 245, 10, 11, 12, -1, -1, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, - 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 243, 75, 76, 77, - -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, - -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, - -1, 99, -1, -1, -1, -1, -1, -1, 106, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 118, -1, 120, -1, -1, 123, -1, 125, -1, -1, - -1, -1, -1, -1, 132, 133, 134, 135, 136, -1, - -1, 139, 140, 141, 142, 143, -1, -1, -1, 147, - -1, -1, 150, -1, -1, -1, -1, -1, -1, -1, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, -1, -1, -1, 107, 108, 109, -1, - -1, 112, -1, -1, -1, -1, -1, 118, 119, -1, - -1, 122, 123, 191, 125, 126, -1, 195, 196, -1, - -1, -1, 200, 201, 202, -1, 204, 205, 206, -1, - -1, -1, 210, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 226, 227, - -1, -1, -1, -1, -1, 233, -1, 168, 169, 170, - 238, 3, 4, -1, -1, 243, -1, 245, 10, 11, - 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 243, 75, 76, 77, -1, -1, 13, 14, - -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, - -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, - -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 118, -1, 120, -1, - -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, - 132, 133, 134, 135, 136, -1, -1, 139, 140, 141, - 142, 143, -1, -1, -1, 147, -1, -1, 150, -1, - -1, -1, -1, -1, -1, -1, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, -1, - -1, -1, 107, 108, 109, -1, -1, 112, -1, -1, - -1, -1, -1, 118, 119, -1, -1, 122, 123, 191, - 125, 126, -1, 195, 196, -1, -1, -1, 200, 201, - 202, -1, 204, 205, 206, -1, -1, -1, 210, 144, + 107, 108, 109, 110, -1, -1, 113, -1, -1, -1, + -1, -1, 119, 120, -1, -1, 123, 124, 192, 126, + 127, -1, 196, 197, -1, -1, -1, 201, 202, 203, + -1, 205, 206, 207, -1, -1, -1, 211, 145, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 226, 227, -1, -1, -1, -1, - -1, 233, -1, 168, 169, 170, 238, 3, 4, -1, - 242, -1, -1, 245, 10, 11, 12, -1, -1, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, - 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 243, 75, - 76, 77, -1, -1, 13, 14, -1, 83, 84, -1, - 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, - -1, 97, -1, 99, -1, -1, -1, -1, -1, -1, - 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 118, -1, 120, -1, -1, 123, -1, 125, - -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, - 136, -1, -1, 139, 140, 141, 142, 143, -1, -1, - -1, 147, -1, -1, 150, -1, -1, -1, -1, -1, - -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, -1, -1, -1, 107, 108, - 109, -1, -1, 112, -1, -1, -1, -1, -1, 118, - 119, -1, -1, 122, 123, 191, 125, 126, -1, 195, - 196, -1, -1, -1, 200, 201, 202, -1, 204, 205, - 206, -1, -1, -1, 210, 144, -1, -1, -1, -1, + -1, -1, -1, 227, 228, -1, -1, -1, -1, -1, + 234, -1, 169, 170, 171, 239, 3, 4, -1, 243, + -1, -1, 246, 10, 11, 12, -1, -1, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, + 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 244, 75, 76, + 77, -1, -1, 13, 14, -1, 83, 84, -1, 86, + -1, -1, -1, -1, 91, -1, -1, 94, -1, -1, + 97, -1, 99, -1, -1, -1, -1, -1, -1, 106, + -1, -1, -1, 110, -1, -1, -1, -1, -1, -1, + -1, -1, 119, -1, 121, -1, -1, 124, -1, 126, + -1, -1, -1, -1, -1, -1, 133, 134, 135, 136, + 137, -1, -1, 140, 141, 142, 143, 144, -1, -1, + -1, 148, -1, -1, 151, -1, -1, -1, -1, -1, + -1, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, -1, -1, -1, 107, 108, 109, + 110, -1, -1, 113, -1, -1, -1, -1, -1, 119, + 120, -1, -1, 123, 124, 192, 126, 127, -1, 196, + 197, -1, -1, -1, 201, 202, 203, -1, 205, 206, + 207, -1, -1, -1, 211, 145, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 226, 227, -1, -1, -1, -1, -1, 233, -1, 168, - 169, 170, 238, 3, 4, -1, 242, -1, -1, 245, + 227, 228, -1, -1, -1, -1, -1, 234, -1, 169, + 170, 171, 239, 3, 4, -1, 243, -1, -1, 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 243, 75, 76, 77, -1, -1, + -1, -1, -1, -1, 244, 75, 76, 77, -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, -1, -1, -1, 106, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 118, -1, - 120, -1, -1, 123, -1, 125, -1, -1, -1, -1, - -1, -1, 132, 133, 134, 135, 136, -1, -1, 139, - 140, 141, 142, 143, -1, -1, -1, 147, -1, -1, - 150, -1, -1, -1, -1, -1, -1, -1, 91, 92, + 110, -1, -1, -1, -1, -1, -1, -1, -1, 119, + -1, 121, -1, -1, 124, -1, 126, -1, -1, -1, + -1, -1, -1, 133, 134, 135, 136, 137, -1, -1, + 140, 141, 142, 143, 144, -1, -1, -1, 148, -1, + -1, 151, -1, -1, -1, -1, -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, -1, -1, -1, 107, 108, 109, -1, -1, 112, - -1, -1, -1, -1, -1, 118, 119, -1, -1, 122, - 123, 191, 125, 126, -1, 195, 196, -1, -1, -1, - 200, 201, 202, -1, 204, 205, 206, -1, -1, -1, - 210, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 226, 227, -1, -1, - -1, -1, -1, 233, -1, 168, 169, 170, 238, 3, - 4, -1, 242, -1, -1, 245, 10, 11, 12, -1, - -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 243, 75, 76, 77, -1, -1, 13, 14, -1, 83, - 84, -1, 86, -1, -1, -1, -1, 91, -1, -1, - 94, -1, -1, 97, -1, 99, -1, -1, -1, -1, - -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 118, -1, 120, -1, -1, 123, - -1, 125, -1, -1, -1, -1, -1, -1, 132, 133, - 134, 135, 136, -1, -1, 139, 140, 141, 142, 143, - -1, -1, -1, 147, -1, -1, 150, -1, -1, -1, - -1, -1, -1, -1, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, - 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, - -1, 118, 119, -1, -1, 122, 123, 191, 125, 126, - -1, 195, 196, -1, -1, -1, 200, 201, 202, -1, - 204, 205, 206, -1, -1, -1, 210, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 226, 227, -1, -1, -1, -1, -1, 233, - -1, 168, 169, 170, 238, 3, 4, -1, 242, -1, - -1, 245, 10, 11, 12, -1, -1, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, - 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 243, 75, 76, 77, - -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, - -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, - -1, 99, -1, -1, -1, -1, -1, -1, 106, -1, + 103, -1, -1, -1, 107, 108, 109, 110, -1, -1, + 113, -1, -1, -1, -1, -1, 119, 120, -1, -1, + 123, 124, 192, 126, 127, -1, 196, 197, -1, -1, + -1, 201, 202, 203, -1, 205, 206, 207, -1, -1, + -1, 211, 145, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 227, 228, -1, + -1, -1, -1, -1, 234, -1, 169, 170, 171, 239, + 3, 4, -1, 243, -1, -1, 246, 10, 11, 12, + -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 244, 75, 76, 77, -1, -1, 13, 14, -1, + 83, 84, -1, 86, -1, -1, -1, -1, 91, -1, + -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, + -1, -1, -1, 106, -1, -1, -1, 110, -1, -1, + -1, -1, -1, -1, -1, -1, 119, -1, 121, -1, + -1, 124, -1, 126, -1, -1, -1, -1, -1, -1, + 133, 134, 135, 136, 137, -1, -1, 140, 141, 142, + 143, 144, -1, -1, -1, 148, -1, -1, 151, -1, + -1, -1, -1, -1, -1, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, -1, -1, + -1, 107, 108, 109, 110, -1, -1, 113, -1, -1, + -1, -1, -1, 119, 120, -1, -1, 123, 124, 192, + 126, 127, -1, 196, 197, -1, -1, -1, 201, 202, + 203, -1, 205, 206, 207, -1, -1, -1, 211, 145, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 118, -1, 120, -1, -1, 123, -1, 125, -1, -1, - -1, -1, -1, -1, 132, 133, 134, 135, 136, -1, - -1, 139, 140, 141, 142, 143, -1, -1, -1, 147, - -1, -1, 150, -1, -1, -1, -1, -1, -1, -1, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, -1, -1, -1, 107, 108, 109, -1, - -1, 112, -1, -1, -1, -1, -1, 118, 119, -1, - -1, 122, 123, 191, 125, 126, -1, 195, 196, -1, - 131, -1, 200, 201, 202, -1, 204, 205, 206, -1, - -1, -1, 210, 144, -1, -1, -1, 148, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 226, 227, - -1, -1, -1, -1, -1, 233, -1, 168, 169, 170, - 238, 3, 4, 5, 242, 128, -1, 245, 10, 11, - 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, - -1, -1, -1, -1, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, -1, 13, 14, 67, 68, 69, -1, -1, - 72, -1, 74, 75, 76, 77, -1, -1, -1, -1, - -1, 83, 84, 85, 86, -1, 88, -1, -1, -1, - -1, -1, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, 239, - -1, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, -1, -1, -1, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, 118, 119, - -1, -1, 122, 123, -1, 125, 126, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, - 192, 193, 194, 195, 144, -1, -1, -1, 200, 201, - 202, 203, 204, 205, 206, 207, -1, 209, 210, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 168, 169, - 170, -1, -1, -1, 226, 227, -1, -1, -1, -1, - -1, 233, -1, -1, -1, -1, 238, 3, 4, -1, - 242, -1, -1, 245, 10, 11, 12, -1, -1, 15, + -1, -1, -1, -1, 227, 228, -1, -1, -1, -1, + -1, 234, -1, 169, 170, 171, 239, 3, 4, -1, + 243, -1, -1, 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, - 56, 57, 58, 243, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, - 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 244, 75, + 76, 77, -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, -1, -1, -1, -1, - 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 118, -1, 120, -1, -1, 123, -1, 125, - -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, - 136, -1, -1, 139, 140, 141, 142, 143, -1, -1, - -1, 147, -1, -1, 150, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, 239, - -1, 241, -1, -1, -1, -1, -1, 247, -1, -1, - -1, -1, -1, -1, -1, 191, -1, -1, -1, 195, - 196, -1, -1, -1, 200, 201, 202, -1, 204, 205, - 206, -1, -1, -1, 210, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 226, 227, -1, -1, -1, -1, -1, 233, -1, -1, - -1, -1, 238, 3, 4, 5, 242, -1, -1, 245, - 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, - -1, -1, -1, -1, -1, -1, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, -1, -1, -1, 67, 68, 69, - -1, -1, 72, -1, 74, 75, 76, 77, -1, -1, - -1, -1, -1, 83, 84, 85, 86, -1, 88, 3, - 4, 5, -1, -1, -1, -1, 10, 11, 12, -1, - -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, - -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - -1, -1, -1, 67, 68, 69, -1, -1, 72, -1, - 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, - 84, 85, 86, -1, 88, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 191, 192, 193, 194, 195, -1, -1, -1, -1, - 200, 201, 202, 203, 204, 205, 206, 207, -1, 209, - 210, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 226, 227, -1, -1, - -1, -1, -1, 233, -1, -1, -1, -1, 238, -1, - -1, -1, 242, -1, -1, 245, -1, -1, -1, -1, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, 191, 192, 193, - 194, 195, 247, -1, -1, -1, 200, 201, 202, 203, - 204, 205, 206, 207, -1, 209, 210, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 226, 227, -1, -1, -1, -1, -1, 233, - -1, -1, -1, -1, 238, 3, 4, -1, 242, -1, - -1, 245, 10, 11, 12, -1, -1, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, - 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, - -1, -1, 13, 14, -1, 83, 84, -1, 86, -1, - -1, -1, -1, 91, -1, -1, 94, -1, -1, 97, - -1, 99, -1, -1, -1, -1, -1, -1, 106, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 118, -1, 120, -1, -1, 123, -1, 125, -1, -1, - -1, -1, -1, -1, 132, 133, 134, 135, 136, -1, - -1, 139, 140, 141, 142, 143, -1, -1, -1, 147, - -1, -1, 150, -1, -1, -1, -1, -1, -1, -1, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, -1, -1, -1, 107, 108, 109, -1, - -1, 112, -1, -1, -1, -1, -1, 118, 119, -1, - -1, 122, 123, 191, 125, 126, -1, 195, 196, -1, - -1, -1, 200, 201, 202, -1, 204, 205, 206, -1, - -1, -1, 210, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 226, 227, - -1, -1, -1, -1, -1, 233, -1, 168, 169, 170, - 238, 3, 4, -1, 242, -1, -1, 245, 10, 11, - 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 243, 75, 76, 77, -1, -1, -1, -1, - -1, 83, 84, -1, 86, -1, -1, -1, -1, 91, - -1, -1, 94, -1, -1, 97, -1, 99, -1, -1, - -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 118, -1, 120, -1, - -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, - 132, 133, 134, 135, 136, -1, -1, 139, 140, 141, - 142, 143, -1, -1, -1, 147, -1, -1, 150, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, 243, -1, -1, - -1, 247, -1, -1, -1, -1, -1, -1, -1, 191, - -1, -1, -1, 195, 196, -1, -1, -1, 200, 201, - 202, -1, 204, 205, 206, -1, -1, -1, 210, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 226, 227, -1, -1, -1, -1, - -1, 233, 3, 4, 5, -1, 238, -1, -1, 10, - 11, 12, -1, 245, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, - -1, -1, -1, -1, -1, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, -1, -1, -1, 67, 68, 69, -1, - -1, 72, -1, 74, 75, 76, 77, -1, -1, -1, - -1, -1, 83, 84, 85, 86, -1, 88, 3, 4, - -1, -1, -1, -1, -1, 10, 11, 12, -1, -1, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, - -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 191, 192, 193, 194, 195, -1, -1, -1, -1, 200, - 201, 202, 203, 204, 205, 206, 207, -1, 209, 210, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 226, 227, -1, -1, -1, - -1, -1, 233, -1, -1, -1, -1, 238, -1, -1, - -1, -1, -1, -1, 245, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, 243, -1, -1, 191, 247, -1, -1, - 195, -1, -1, -1, -1, 200, 201, 202, -1, 204, - 205, 206, -1, -1, -1, 210, -1, -1, -1, -1, + 106, -1, -1, -1, 110, -1, -1, -1, -1, -1, + -1, -1, -1, 119, -1, 121, -1, -1, 124, -1, + 126, -1, -1, -1, -1, -1, -1, 133, 134, 135, + 136, 137, -1, -1, 140, 141, 142, 143, 144, -1, + -1, -1, 148, -1, -1, 151, -1, -1, -1, -1, + -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, -1, -1, -1, 107, 108, + 109, 110, -1, -1, 113, 7, 8, -1, -1, -1, + 119, 120, -1, -1, 123, 124, 192, 126, 127, -1, + 196, 197, -1, -1, -1, 201, 202, 203, -1, 205, + 206, 207, -1, -1, -1, 211, 145, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 226, 227, -1, -1, -1, -1, -1, 233, -1, - -1, -1, -1, 238, 3, 4, -1, 242, -1, -1, - 245, 10, 11, 12, -1, -1, 15, 16, 17, 18, + -1, 227, 228, -1, -1, -1, -1, -1, 234, -1, + 169, 170, 171, 239, 3, 4, -1, 243, -1, -1, + 246, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, + -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 244, 75, 76, 77, -1, + -1, -1, -1, -1, 83, 84, -1, 86, -1, -1, + -1, -1, 91, -1, -1, 94, -1, -1, 97, -1, + 99, -1, -1, -1, -1, -1, -1, 106, -1, -1, + -1, 110, -1, -1, -1, -1, -1, -1, -1, -1, + 119, -1, 121, -1, -1, 124, -1, 126, -1, -1, + -1, -1, -1, -1, 133, 134, 135, 136, 137, -1, + -1, 140, 141, 142, 143, 144, -1, -1, -1, 148, + -1, -1, 151, -1, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, - -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 75, 76, 77, -1, - -1, 3, 4, -1, 83, 84, -1, 86, 10, 11, - 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 75, 76, 77, -1, -1, -1, -1, - -1, 83, 84, -1, 86, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, 191, 243, -1, -1, 195, 247, -1, -1, - -1, 200, 201, 202, -1, 204, 205, 206, -1, -1, - -1, 210, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 226, 227, -1, - -1, -1, -1, -1, 233, -1, -1, -1, -1, 238, - -1, -1, -1, 242, -1, -1, 245, -1, -1, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, 191, - -1, 237, -1, 195, -1, -1, -1, -1, 200, 201, - 202, 247, 204, 205, 206, -1, -1, -1, 210, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 226, 227, -1, -1, -1, -1, - -1, 233, 3, 4, -1, 6, 238, 239, -1, 10, - 11, 12, -1, 245, 15, 16, 17, 18, 19, 20, + -1, -1, -1, 192, -1, -1, -1, 196, 197, -1, + -1, -1, 201, 202, 203, -1, 205, 206, 207, -1, + -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 227, 228, + -1, -1, -1, -1, -1, 234, 3, 4, 5, -1, + 239, -1, -1, 10, 11, 12, -1, 246, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 7, -1, -1, -1, -1, -1, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, + 67, 68, 69, -1, -1, 72, -1, 74, 75, 76, + 77, -1, -1, -1, -1, -1, 83, 84, 85, 86, + -1, 88, 3, 4, 5, -1, -1, -1, -1, 10, + 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, + -1, -1, -1, -1, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, -1, -1, -1, 67, 68, 69, -1, + -1, 72, -1, 74, 75, 76, 77, -1, -1, -1, + -1, -1, 83, 84, 85, 86, -1, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, - -1, -1, 83, 84, -1, 86, 3, 4, -1, 6, - -1, -1, -1, 10, 11, 12, -1, -1, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, - 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, - 77, -1, -1, -1, -1, -1, 83, 84, -1, 86, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - 191, -1, 237, -1, 195, -1, -1, -1, -1, 200, - 201, 202, 247, 204, 205, 206, -1, -1, -1, 210, + -1, -1, -1, -1, -1, 192, 193, 194, 195, 196, + -1, -1, -1, -1, 201, 202, 203, 204, 205, 206, + 207, 208, -1, 210, 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 226, 227, -1, -1, -1, - -1, -1, 233, -1, -1, -1, -1, 238, -1, -1, - -1, -1, -1, -1, 245, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, 191, -1, -1, 247, 195, -1, - -1, -1, -1, 200, 201, 202, -1, 204, 205, 206, - -1, -1, -1, 210, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 226, - 227, -1, -1, -1, -1, -1, 233, 3, 4, -1, - 6, 238, -1, -1, 10, 11, 12, -1, 245, 15, + 227, 228, -1, -1, -1, -1, -1, 234, -1, -1, + -1, -1, 239, -1, -1, -1, 243, -1, -1, 246, + -1, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, + -1, 192, 193, 194, 195, 196, -1, -1, -1, -1, + 201, 202, 203, 204, 205, 206, 207, 208, -1, 210, + 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 227, 228, -1, -1, + -1, -1, -1, 234, -1, -1, -1, -1, 239, 3, + 4, 5, 243, -1, -1, 246, 10, 11, 12, -1, + -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 8, -1, -1, -1, -1, + -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + -1, -1, -1, 67, 68, 69, -1, -1, 72, -1, + 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, + 84, 85, 86, -1, 88, 3, 4, 5, -1, -1, + -1, -1, 10, 11, 12, -1, -1, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, -1, -1, -1, -1, -1, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, 67, + 68, 69, -1, -1, 72, -1, 74, 75, 76, 77, + -1, -1, -1, -1, -1, 83, 84, 85, 86, -1, + 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 192, 193, + 194, 195, 196, -1, -1, -1, -1, 201, 202, 203, + 204, 205, 206, 207, 208, -1, 210, 211, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 227, 228, -1, -1, -1, -1, -1, + 234, -1, -1, -1, -1, 239, -1, -1, -1, 243, + -1, -1, 246, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + 8, -1, -1, -1, 192, 193, 194, 195, 196, -1, + -1, -1, -1, 201, 202, 203, 204, 205, 206, 207, + 208, -1, 210, 211, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 227, + 228, -1, -1, -1, -1, -1, 234, 3, 4, -1, + -1, 239, -1, -1, 10, 11, 12, -1, 246, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, -1, -1, -1, -1, -1, -1, -1, + 36, 37, 38, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, @@ -4900,792 +4526,854 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, -1, - -1, -1, -1, -1, 83, 84, -1, 86, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, 191, -1, -1, -1, 195, - 247, -1, -1, -1, 200, 201, 202, -1, 204, 205, - 206, -1, -1, -1, 210, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 83, 84, -1, 86, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, 192, -1, -1, -1, + 196, -1, -1, -1, -1, 201, 202, 203, -1, 205, + 206, 207, -1, -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 226, 227, -1, -1, -1, -1, -1, 233, -1, -1, - -1, -1, 238, -1, -1, -1, -1, -1, -1, 245, - -1, -1, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, 191, -1, 237, -1, 195, -1, -1, -1, - -1, 200, 201, 202, 247, 204, 205, 206, -1, -1, - -1, 210, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 226, 227, -1, - -1, -1, -1, -1, 233, 3, 4, -1, -1, 238, - 239, -1, 10, 11, 12, -1, 245, 15, 16, 17, + -1, 227, 228, -1, -1, -1, -1, -1, 234, -1, + -1, -1, -1, 239, -1, -1, -1, 243, -1, -1, + 246, -1, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, 192, 238, -1, -1, 196, -1, -1, + -1, 8, 201, 202, 203, -1, 205, 206, 207, -1, + -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 227, 228, + -1, -1, -1, -1, -1, 234, -1, -1, -1, -1, + 239, 3, 4, -1, 243, -1, -1, 246, 10, 11, + 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 8, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 75, 76, 77, -1, -1, -1, -1, + -1, 83, 84, -1, 86, 3, 4, -1, 6, -1, + -1, -1, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, 77, - -1, -1, 3, 4, -1, 83, 84, -1, 86, 10, - 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, + -1, -1, -1, -1, -1, 83, 84, -1, 86, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + 192, 238, -1, -1, 196, -1, -1, -1, -1, 201, + 202, 203, -1, 205, 206, 207, -1, -1, -1, 211, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 227, 228, -1, -1, -1, + -1, -1, 234, -1, -1, -1, -1, 239, 240, -1, + -1, -1, -1, -1, 246, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, -1, 192, -1, -1, 8, 196, -1, + -1, -1, -1, 201, 202, 203, -1, 205, 206, 207, + -1, -1, -1, 211, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 227, + 228, -1, -1, -1, -1, -1, 234, 3, 4, -1, + 6, 239, -1, -1, 10, 11, 12, -1, 246, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, + 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, + 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + 86, 3, 4, -1, 6, -1, -1, -1, 10, 11, + 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 75, 76, 77, -1, -1, -1, -1, + -1, 83, 84, -1, 86, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, -1, -1, -1, 192, 238, -1, -1, + 196, -1, -1, -1, -1, 201, 202, 203, -1, 205, + 206, 207, -1, -1, -1, 211, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 227, 228, -1, -1, -1, -1, -1, 234, -1, + -1, -1, -1, 239, -1, -1, -1, -1, -1, -1, + 246, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, 240, -1, 242, -1, -1, + 192, -1, -1, 248, 196, -1, -1, -1, -1, 201, + 202, 203, -1, 205, 206, 207, -1, -1, -1, 211, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 227, 228, -1, -1, -1, + -1, -1, 234, 3, 4, -1, -1, 239, -1, -1, + 10, 11, 12, -1, 246, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, + -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 75, 76, 77, -1, -1, + 3, 4, -1, 83, 84, -1, 86, 10, 11, 12, + -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 75, 76, 77, -1, -1, -1, -1, -1, + 83, 84, -1, 86, -1, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, -1, -1, -1, -1, 238, -1, 240, + -1, -1, 192, -1, -1, -1, 196, 248, -1, -1, + -1, 201, 202, 203, -1, 205, 206, 207, -1, -1, + -1, 211, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 227, 228, -1, + -1, -1, -1, -1, 234, -1, -1, -1, -1, 239, + 240, -1, -1, -1, -1, -1, 246, -1, -1, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, 192, + -1, 238, -1, 196, -1, -1, -1, 244, 201, 202, + 203, 248, 205, 206, 207, -1, -1, -1, 211, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 227, 228, -1, -1, -1, -1, + -1, 234, 3, 4, -1, -1, 239, 240, -1, 10, + 11, 12, -1, 246, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 56, 57, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, -1, -1, -1, - -1, -1, 83, 84, -1, 86, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, 191, -1, -1, -1, 195, 247, -1, - -1, -1, 200, 201, 202, -1, 204, 205, 206, -1, - -1, -1, 210, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 226, 227, - -1, -1, -1, -1, -1, 233, -1, -1, -1, -1, - 238, 239, -1, -1, -1, -1, -1, 245, -1, 0, - 1, -1, -1, 4, -1, -1, -1, -1, -1, -1, - -1, -1, 13, 14, -1, -1, -1, -1, -1, -1, - 191, -1, -1, -1, 195, -1, -1, -1, -1, 200, - 201, 202, -1, 204, 205, 206, -1, -1, -1, 210, - -1, -1, -1, 44, 45, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 226, 227, -1, -1, -1, - -1, -1, 233, 64, 65, 66, -1, 238, -1, 70, - 71, -1, 73, -1, 245, -1, -1, 78, 79, -1, - 81, 82, -1, 84, -1, -1, -1, -1, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, -1, -1, 106, 107, 108, 109, 110, - -1, 112, -1, 114, 115, 116, 117, 118, 119, 120, - -1, 122, 123, 124, 125, 126, 127, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, -1, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, -1, 4, -1, 156, 157, 158, -1, -1, - -1, 162, 13, 14, -1, -1, 167, 168, 169, 170, - -1, -1, 173, -1, 175, -1, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, 44, 45, -1, 197, 198, 199, -1, - -1, -1, -1, -1, -1, -1, -1, 208, -1, 210, - -1, -1, -1, 64, 65, 66, -1, -1, -1, 70, - 71, -1, 73, -1, -1, -1, -1, 78, 79, -1, - 81, 82, -1, 84, -1, -1, -1, -1, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, -1, -1, 106, 107, 108, 109, 110, - -1, 112, -1, 114, 115, 116, 117, 118, 119, 120, - -1, 122, 123, 124, 125, 126, 127, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, -1, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, -1, -1, -1, 156, 157, 158, -1, -1, - -1, 162, -1, -1, -1, -1, 167, 168, 169, 170, - 4, 5, 173, -1, 175, -1, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, -1, 197, 198, 199, -1, - 4, 5, -1, -1, -1, -1, -1, 208, -1, 210, - -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, -1, -1, -1, -1, 59, 60, 61, 62, -1, - 4, 5, -1, 67, 68, 69, -1, -1, 72, -1, - 74, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 85, -1, -1, 88, 59, 60, 61, 62, -1, - -1, 5, -1, 67, 68, 69, -1, -1, 72, -1, - 74, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 85, -1, -1, 88, 59, 60, 61, 62, -1, - -1, 125, -1, 67, 68, 69, -1, -1, 72, -1, - 74, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 85, -1, -1, 88, 59, 60, 61, 62, -1, - -1, -1, -1, 67, 68, 69, -1, -1, 72, -1, - 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 85, -1, -1, 88, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 192, 193, - 194, -1, -1, -1, -1, -1, -1, -1, -1, 203, - -1, -1, -1, 207, -1, 209, 210, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 192, 193, - 194, -1, -1, -1, -1, -1, -1, -1, -1, 203, - -1, -1, -1, 207, -1, 209, 210, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 192, 193, - 194, -1, -1, -1, -1, -1, -1, -1, -1, 203, - -1, -1, -1, 207, -1, 209, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 192, 193, - 194, -1, -1, -1, -1, -1, -1, -1, -1, 203, - -1, -1, -1, 207, -1, 209, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 247, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 247, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 247, 215, 216, 217, 218, 219, + -1, -1, -1, -1, 75, 76, 77, -1, -1, 13, + 14, -1, 83, 84, -1, 86, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 247, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 247, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 247, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 247, 215, 216, 217, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, 244, -1, -1, -1, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, -1, -1, -1, 107, 108, 109, 110, -1, -1, + 113, -1, -1, -1, -1, -1, 119, 120, -1, -1, + 123, 124, -1, 126, 127, -1, -1, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 13, 14, 145, 107, 108, 109, 110, -1, -1, 113, + -1, -1, -1, -1, -1, 119, 120, -1, -1, 123, + 124, 192, 126, 127, -1, 196, 169, 170, 171, -1, + 201, 202, 203, -1, 205, 206, 207, -1, -1, -1, + 211, 145, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 227, 228, -1, -1, + -1, -1, -1, 234, -1, 169, 170, 171, 239, -1, + -1, -1, -1, -1, -1, 246, -1, -1, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 13, 14, -1, 107, 108, 109, 110, -1, -1, + 113, 244, -1, -1, -1, -1, 119, 120, -1, -1, + 123, 124, -1, 126, 127, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 13, 14, 145, -1, -1, -1, -1, -1, -1, -1, + 244, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 169, 170, 171, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, -1, -1, -1, 107, 108, 109, 110, -1, + -1, 113, -1, -1, -1, 13, 14, 119, 120, -1, + -1, 123, 124, -1, 126, 127, -1, -1, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, -1, -1, 145, 107, 108, 109, 110, -1, -1, + 113, 244, -1, -1, -1, -1, 119, 120, -1, -1, + 123, 124, -1, 126, 127, -1, -1, 169, 170, 171, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 145, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 169, 170, 171, 107, + 108, 109, 110, -1, -1, 113, -1, -1, -1, -1, + -1, 119, 120, -1, -1, 123, 124, -1, 126, 127, + -1, -1, 0, 1, -1, -1, 4, -1, -1, -1, + -1, -1, 244, -1, -1, 13, 14, 145, -1, -1, + -1, -1, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, 169, 170, 171, 238, -1, 44, 45, -1, -1, + 244, 244, -1, -1, 248, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 64, 65, 66, -1, + -1, -1, 70, 71, -1, 73, -1, -1, -1, -1, + 78, 79, -1, 81, 82, -1, 84, -1, -1, -1, + -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, -1, -1, 106, 107, + 108, 109, 110, 111, -1, 113, 244, 115, 116, 117, + 118, 119, 120, 121, -1, 123, 124, 125, 126, 127, + 128, -1, 130, 131, 132, 133, 134, 135, 136, 137, + 138, -1, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, -1, 4, -1, 157, + 158, 159, -1, -1, -1, 163, 13, 14, -1, -1, + 168, 169, 170, 171, -1, -1, 174, -1, 176, -1, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, -1, -1, -1, 44, 45, -1, + 198, 199, 200, -1, -1, -1, -1, -1, -1, -1, + -1, 209, -1, 211, -1, -1, -1, 64, 65, 66, + -1, -1, -1, 70, 71, -1, 73, -1, -1, -1, + -1, 78, 79, -1, 81, 82, -1, 84, -1, -1, + -1, -1, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, -1, -1, 106, + 107, 108, 109, 110, 111, -1, 113, -1, 115, 116, + 117, 118, 119, 120, 121, -1, 123, 124, 125, 126, + 127, 128, -1, 130, 131, 132, 133, 134, 135, 136, + 137, 138, -1, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, -1, -1, -1, + 157, 158, 159, -1, -1, -1, 163, -1, -1, -1, + -1, 168, 169, 170, 171, 4, 5, 174, -1, 176, + -1, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, -1, -1, -1, -1, -1, + -1, 198, 199, 200, -1, 4, 5, -1, -1, -1, + -1, -1, 209, -1, 211, 13, 14, 46, 47, 48, + 49, 50, 51, 52, 53, 54, -1, -1, -1, -1, + 59, 60, 61, 62, -1, -1, -1, -1, 67, 68, + 69, -1, -1, 72, -1, 74, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 85, -1, -1, 88, + 59, 60, 61, 62, -1, -1, -1, -1, 67, 68, + 69, -1, -1, 72, -1, 74, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 85, -1, -1, 88, + -1, -1, -1, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, -1, -1, -1, 107, + 108, 109, 110, -1, -1, 113, -1, -1, -1, -1, + -1, 119, 120, -1, -1, 123, 124, -1, 126, 127, + -1, -1, -1, -1, 132, 13, 14, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 145, -1, -1, + -1, 149, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 193, 194, 195, -1, -1, -1, + -1, 169, 170, 171, -1, 204, -1, -1, -1, 208, + -1, 210, 211, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 193, 194, 195, -1, -1, -1, + -1, -1, -1, -1, -1, 204, -1, -1, -1, 208, + -1, 210, -1, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, -1, -1, -1, 107, + 108, 109, 110, -1, -1, 113, -1, -1, -1, -1, + -1, 119, 120, -1, -1, 123, 124, -1, 126, 127, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 145, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 247, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 247, 215, 216, 217, 218, 219, 220, 221, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, 169, 170, 171, -1, -1, 244, -1, -1, -1, + 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 247, 215, 216, 217, 218, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 247, 215, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 247, 215, 216, 217, 218, 219, 220, 221, 222, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 247, 215, 216, 217, 218, 219, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 247, 215, 216, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 247, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 247, 215, 216, 217, 218, 219, 220, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 247, 215, 216, 217, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 247, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 247, 215, 216, 217, 218, 219, 220, 221, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 247, 215, 216, 217, 218, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 247, 215, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 247, 215, 216, 217, 218, 219, 220, 221, 222, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 247, 215, 216, 217, 218, 219, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 247, 215, 216, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 247, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 247, 215, 216, 217, 218, 219, 220, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 247, 215, 216, 217, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 247, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 247, 215, 216, 217, 218, 219, 220, 221, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 247, 215, 216, 217, 218, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 247, 215, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 247, 215, 216, 217, 218, 219, 220, 221, 222, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 247, 215, 216, 217, 218, 219, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 247, 215, 216, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 247, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 247, 215, 216, 217, 218, 219, 220, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 247, 215, 216, 217, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 247, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 247, 215, 216, 217, 218, 219, 220, 221, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 247, 215, 216, 217, 218, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 247, 215, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 247, 215, 216, 217, 218, 219, 220, 221, 222, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 247, 215, 216, 217, 218, 219, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 247, 215, 216, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 247, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, 243, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, 243, 215, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 248, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, + 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, 243, 215, 216, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, 243, 215, 216, 217, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, 243, 215, 216, 217, 218, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, 243, 215, 216, 217, 218, 219, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, 243, 215, 216, 217, 218, 219, 220, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, 243, 215, 216, 217, 218, 219, 220, 221, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, 243, 215, 216, 217, 218, 219, 220, 221, 222, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - 243, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, 243, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, 243, 215, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, + 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, 243, 215, 216, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, 243, 215, 216, 217, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, 243, 215, 216, 217, 218, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, 243, 215, 216, 217, 218, 219, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, 243, 215, 216, 217, 218, 219, 220, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, 243, 215, 216, 217, 218, 219, 220, 221, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, 243, 215, 216, 217, 218, 219, 220, 221, 222, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - 243, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, 243, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, 243, 215, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, -1, -1, + 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, 243, 215, 216, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, -1, 243, 215, 216, 217, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, -1, -1, 243, 215, 216, 217, 218, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, -1, 243, 215, 216, 217, 218, 219, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, -1, -1, 243, 215, 216, 217, 218, 219, 220, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, -1, 243, 215, 216, 217, 218, 219, 220, 221, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, 243, 215, 216, 217, 218, 219, 220, 221, 222, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + -1, -1, 244, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, -1, -1, - 243, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, -1, -1, 243, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, -1, -1, 243, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, -1, -1, 243, 215, 216, + 233, -1, -1, -1, -1, 238, -1, -1, -1, -1, + 243, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, -1, 243, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, -1, 242, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, -1, 242, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - -1, 242, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, 239, -1, 241, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, 241, 215, 216, 217, 218, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, -1, 243, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, 241, 215, 216, 217, 218, 219, 220, 221, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, 240, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, 241, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, 241, 215, 216, 217, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, 241, 215, 216, 217, 218, 219, 220, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, -1, -1, - 241, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, -1, - -1, -1, -1, 237, -1, -1, -1, 241, 215, 216, + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, -1, -1, -1, -1, - 237, -1, -1, -1, 241, 215, 216, 217, 218, 219, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, -1, -1, -1, -1, 237, -1, -1, - -1, 241, 215, 216, 217, 218, 219, 220, 221, 222, + 230, 231, 232, 233, -1, -1, -1, -1, 238, -1, + -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - -1, -1, -1, -1, 237, -1, -1, -1, 241, 215, + 233, -1, -1, -1, -1, 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, -1, -1, 241, 215, 216, 217, 218, + 226, 227, 228, 229, 230, 231, 232, 233, -1, -1, + -1, -1, 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, -1, -1, -1, -1, 237, -1, - -1, -1, 241, 215, 216, 217, 218, 219, 220, 221, + 229, 230, 231, 232, 233, -1, -1, -1, -1, 238, + -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, -1, -1, -1, -1, 237, -1, -1, -1, 241, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, -1, -1, - -1, -1, 237, -1, -1, -1, 241, 215, 216, 217, + 232, 233, -1, -1, -1, -1, 238, -1, -1, -1, + 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, -1, + -1, -1, -1, 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, -1, -1, -1, -1, 237, - -1, -1, -1, 241, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237, -1, 239, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, -1, -1, -1, - -1, 237, -1, 239, 215, 216, 217, 218, 219, 220, + 228, 229, 230, 231, 232, 233, -1, -1, -1, -1, + 238, -1, -1, -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, -1, -1, -1, -1, 237 + 231, 232, 233, -1, -1, -1, -1, 238, -1, -1, + -1, 242, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + -1, -1, -1, -1, 238, -1, -1, -1, 242, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238, -1, 240, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, -1, -1, -1, + -1, 238, -1, 240, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, -1, -1, -1, -1, 238 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 1, 249, 250, 6, 0, 4, 13, 14, 44, + 0, 1, 250, 251, 6, 0, 4, 13, 14, 44, 45, 64, 65, 66, 70, 71, 73, 78, 79, 81, 82, 84, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 106, 107, 108, - 109, 110, 112, 114, 115, 116, 117, 118, 119, 120, - 122, 123, 124, 125, 126, 127, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 156, - 157, 158, 162, 167, 168, 169, 170, 173, 175, 177, + 109, 110, 111, 113, 115, 116, 117, 118, 119, 120, + 121, 123, 124, 125, 126, 127, 128, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 157, 158, 159, 163, 168, 169, 170, 171, 174, 176, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 197, 198, 199, 208, 210, 251, 253, - 254, 274, 295, 296, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 314, 316, 317, 323, 324, 325, 326, - 332, 357, 358, 242, 246, 14, 97, 238, 238, 6, - 242, 6, 6, 6, 6, 238, 6, 6, 240, 240, - 4, 334, 358, 238, 240, 272, 272, 238, 242, 238, - 238, 4, 238, 242, 238, 238, 4, 238, 242, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 111, - 97, 6, 242, 91, 94, 97, 238, 3, 10, 11, - 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 55, 56, 57, 58, 63, 75, 76, 77, 83, 86, - 91, 94, 97, 99, 118, 123, 125, 191, 195, 196, - 200, 201, 202, 204, 205, 206, 226, 227, 233, 238, - 242, 245, 296, 307, 314, 316, 327, 328, 332, 334, - 341, 343, 358, 238, 242, 97, 97, 118, 94, 97, - 99, 91, 94, 97, 99, 94, 97, 99, 94, 97, - 238, 94, 148, 173, 189, 190, 242, 226, 227, 238, - 242, 338, 339, 338, 242, 242, 338, 4, 91, 95, - 101, 102, 104, 105, 122, 238, 97, 99, 97, 94, - 4, 84, 184, 242, 358, 4, 6, 91, 94, 97, - 94, 97, 4, 4, 4, 5, 238, 341, 342, 4, - 238, 238, 238, 4, 242, 345, 358, 4, 238, 238, - 238, 6, 6, 240, 5, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 59, 60, 61, 62, 67, 68, - 69, 72, 74, 85, 88, 192, 193, 194, 203, 207, - 209, 349, 358, 238, 4, 349, 5, 242, 5, 242, - 32, 227, 327, 358, 240, 238, 242, 6, 238, 242, - 6, 246, 7, 125, 184, 211, 212, 213, 214, 235, - 236, 238, 240, 244, 270, 271, 272, 327, 348, 349, - 358, 4, 296, 297, 298, 242, 6, 327, 348, 349, - 358, 348, 327, 348, 355, 356, 358, 276, 280, 238, - 337, 9, 349, 358, 327, 227, 327, 343, 344, 327, - 327, 238, 327, 344, 327, 327, 238, 327, 344, 327, - 327, 327, 327, 327, 327, 348, 327, 327, 327, 341, - 238, 344, 342, 342, 342, 348, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 238, - 240, 272, 272, 272, 272, 272, 272, 238, 272, 272, - 238, 272, 272, 5, 176, 242, 5, 176, 5, 176, - 5, 176, 118, 91, 94, 97, 99, 238, 272, 272, - 238, 238, 238, 327, 242, 327, 343, 327, 327, 243, - 344, 334, 358, 8, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 237, 9, 238, 240, 244, 271, 272, 327, - 344, 238, 238, 238, 341, 342, 342, 342, 238, 238, - 238, 238, 238, 341, 238, 341, 238, 341, 242, 242, - 327, 4, 341, 242, 345, 242, 242, 338, 338, 338, - 327, 327, 226, 227, 242, 242, 338, 226, 227, 238, - 298, 338, 242, 238, 242, 238, 238, 238, 238, 238, - 238, 238, 327, 342, 342, 342, 238, 4, 240, 6, - 240, 298, 6, 6, 242, 242, 242, 342, 342, 240, - 240, 240, 327, 6, 6, 327, 327, 327, 244, 327, - 242, 176, 327, 327, 327, 327, 272, 272, 272, 238, - 238, 238, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 238, 238, 272, 238, 240, 6, 6, 242, - 6, 298, 6, 298, 272, 327, 228, 242, 9, 238, - 240, 244, 348, 327, 298, 341, 341, 242, 349, 91, - 94, 97, 99, 7, 327, 327, 4, 173, 174, 341, - 6, 239, 241, 242, 273, 6, 242, 6, 9, 238, - 240, 244, 358, 243, 91, 94, 97, 99, 118, 123, - 126, 295, 327, 6, 239, 247, 9, 238, 240, 244, - 239, 247, 247, 239, 247, 9, 238, 244, 241, 247, - 275, 241, 275, 87, 336, 333, 358, 247, 247, 239, - 228, 243, 247, 239, 239, 327, 239, 243, 239, 239, - 327, 239, 243, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 7, 327, 243, 6, 6, 6, 239, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 343, 327, 327, - 327, 327, 327, 327, 327, 343, 343, 358, 242, 327, - 327, 348, 327, 348, 341, 348, 348, 355, 327, 273, - 358, 64, 327, 64, 64, 64, 342, 342, 342, 342, - 348, 348, 343, 334, 349, 334, 344, 239, 243, 244, - 272, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 242, 327, 343, 327, 327, - 327, 327, 327, 358, 327, 327, 4, 335, 242, 273, - 239, 243, 327, 327, 327, 7, 7, 320, 320, 289, - 327, 349, 290, 327, 349, 291, 327, 349, 292, 327, - 349, 327, 6, 327, 6, 327, 6, 344, 344, 242, - 239, 6, 298, 242, 298, 298, 247, 247, 247, 338, - 338, 297, 297, 247, 327, 243, 311, 247, 298, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 239, 7, - 321, 6, 7, 327, 6, 327, 327, 243, 344, 344, - 344, 6, 6, 327, 327, 327, 239, 239, 239, 239, - 173, 247, 298, 242, 8, 239, 239, 241, 355, 348, - 355, 348, 348, 348, 348, 348, 348, 327, 348, 348, - 348, 348, 245, 351, 358, 349, 348, 348, 348, 334, - 358, 344, 243, 243, 327, 327, 298, 358, 335, 241, - 239, 131, 148, 315, 239, 243, 247, 327, 6, 242, - 242, 242, 242, 327, 239, 241, 7, 270, 271, 244, - 7, 6, 344, 7, 214, 270, 255, 358, 327, 327, - 335, 240, 242, 242, 242, 242, 238, 118, 94, 97, - 99, 243, 6, 221, 222, 252, 344, 358, 327, 327, - 4, 335, 6, 344, 327, 6, 348, 356, 358, 239, - 335, 6, 358, 6, 348, 327, 239, 240, 327, 349, - 7, 176, 327, 343, 7, 7, 239, 7, 176, 7, - 7, 239, 7, 176, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 327, 239, 242, 6, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 247, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 247, 247, - 247, 239, 241, 241, 344, 247, 247, 273, 247, 273, - 247, 247, 247, 239, 329, 273, 242, 243, 242, 242, - 242, 247, 247, 273, 273, 239, 244, 239, 244, 247, - 330, 243, 7, 335, 273, 8, 8, 344, 244, 239, - 241, 271, 238, 240, 272, 344, 7, 242, 239, 239, - 239, 327, 341, 4, 319, 6, 239, 247, 239, 247, - 239, 247, 239, 247, 239, 239, 239, 243, 243, 344, - 244, 243, 298, 243, 243, 338, 327, 327, 243, 243, - 327, 338, 128, 128, 145, 153, 154, 155, 159, 160, - 312, 313, 338, 243, 308, 239, 243, 239, 239, 239, - 239, 239, 239, 239, 7, 327, 6, 327, 239, 241, - 241, 243, 243, 243, 241, 241, 247, 7, 7, 7, - 244, 327, 243, 327, 327, 7, 244, 273, 247, 273, - 273, 239, 239, 247, 273, 273, 247, 247, 273, 273, - 273, 273, 327, 273, 9, 350, 247, 239, 247, 273, - 244, 247, 331, 241, 243, 243, 244, 238, 240, 246, - 7, 148, 6, 327, 243, 242, 6, 341, 243, 327, - 327, 327, 327, 6, 7, 270, 271, 244, 270, 271, - 349, 327, 6, 4, 242, 346, 358, 243, 46, 46, - 341, 4, 163, 164, 165, 166, 243, 258, 262, 265, - 267, 268, 244, 239, 241, 238, 327, 344, 344, 344, - 344, 327, 238, 238, 238, 238, 348, 239, 244, 239, - 241, 238, 239, 247, 244, 238, 7, 272, 4, 283, - 284, 285, 273, 273, 338, 97, 99, 341, 341, 7, - 341, 97, 99, 341, 341, 7, 341, 99, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 6, 7, 344, - 327, 327, 327, 327, 243, 327, 327, 327, 341, 348, - 348, 247, 282, 327, 327, 327, 327, 327, 327, 335, - 335, 327, 239, 341, 272, 327, 327, 243, 335, 271, - 244, 271, 327, 327, 273, 243, 341, 344, 7, 7, - 7, 128, 318, 6, 270, 327, 270, 327, 270, 327, - 270, 327, 7, 7, 7, 7, 7, 243, 4, 243, - 247, 247, 247, 243, 243, 109, 4, 6, 327, 242, - 6, 238, 6, 161, 6, 161, 243, 313, 247, 312, - 7, 6, 7, 7, 7, 7, 7, 7, 7, 341, - 6, 242, 6, 6, 6, 97, 7, 6, 6, 327, - 341, 341, 341, 4, 247, 8, 8, 239, 4, 4, - 344, 348, 327, 348, 245, 247, 286, 348, 348, 335, - 348, 239, 247, 335, 242, 242, 6, 327, 6, 242, - 341, 243, 243, 243, 243, 243, 327, 6, 4, 173, - 174, 327, 6, 6, 6, 7, 345, 347, 6, 240, - 273, 272, 272, 6, 259, 238, 238, 242, 269, 6, - 335, 244, 348, 327, 241, 243, 243, 243, 243, 239, - 327, 327, 327, 327, 6, 6, 252, 335, 244, 327, - 6, 327, 335, 239, 242, 327, 349, 273, 46, 242, - 341, 349, 352, 241, 247, 6, 6, 6, 242, 242, - 122, 294, 294, 341, 6, 242, 242, 6, 6, 341, - 176, 293, 242, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 5, 243, 273, 273, 273, 273, 273, 247, - 247, 247, 239, 273, 273, 284, 273, 247, 247, 247, - 247, 239, 273, 239, 330, 6, 273, 238, 240, 272, - 4, 239, 241, 273, 6, 243, 341, 341, 341, 4, - 6, 341, 341, 341, 341, 341, 341, 341, 242, 242, - 7, 6, 7, 327, 327, 327, 242, 242, 242, 240, - 6, 327, 341, 327, 6, 6, 327, 338, 243, 5, - 341, 242, 242, 242, 242, 242, 242, 242, 341, 6, - 344, 242, 327, 241, 6, 6, 172, 327, 327, 327, - 6, 6, 7, 273, 247, 247, 273, 247, 327, 4, - 188, 287, 288, 273, 239, 273, 331, 349, 238, 240, - 327, 298, 6, 298, 247, 6, 6, 7, 270, 271, - 244, 7, 6, 345, 243, 247, 327, 270, 242, 273, - 353, 354, 355, 353, 238, 327, 327, 340, 341, 242, - 238, 4, 6, 239, 6, 6, 6, 6, 6, 239, - 239, 239, 239, 348, 238, 4, 239, 247, 238, 341, - 349, 7, 272, 281, 327, 343, 285, 327, 327, 338, - 6, 6, 6, 327, 327, 6, 95, 6, 327, 5, - 242, 327, 327, 327, 327, 327, 327, 327, 239, 327, - 327, 273, 271, 242, 6, 293, 6, 327, 6, 6, - 6, 6, 6, 4, 6, 6, 344, 344, 327, 327, - 349, 243, 239, 243, 247, 297, 297, 327, 327, 243, - 247, 239, 243, 247, 6, 6, 340, 338, 338, 338, - 338, 338, 227, 338, 6, 243, 327, 6, 6, 341, - 243, 247, 8, 243, 239, 242, 327, 349, 348, 327, - 348, 327, 349, 352, 354, 349, 247, 239, 247, 243, - 315, 315, 341, 349, 327, 6, 4, 346, 6, 345, - 241, 341, 355, 6, 273, 273, 256, 327, 247, 247, - 243, 247, 257, 327, 327, 6, 327, 327, 239, 277, - 279, 242, 354, 243, 247, 7, 7, 243, 243, 243, - 243, 242, 243, 5, 340, 273, 273, 247, 247, 247, - 247, 247, 239, 241, 327, 6, 242, 243, 243, 242, - 6, 6, 242, 327, 243, 243, 243, 241, 6, 341, - 7, 242, 327, 243, 247, 247, 247, 247, 247, 247, - 6, 243, 171, 327, 327, 344, 6, 6, 239, 273, - 273, 288, 349, 243, 243, 243, 6, 6, 7, 6, - 244, 6, 243, 6, 6, 239, 247, 327, 327, 242, - 341, 243, 247, 239, 239, 247, 282, 286, 341, 273, - 327, 349, 358, 6, 6, 6, 6, 327, 6, 6, - 243, 327, 327, 327, 327, 327, 243, 340, 132, 133, - 138, 322, 132, 133, 322, 344, 297, 243, 247, 6, - 243, 341, 298, 243, 6, 344, 338, 338, 338, 338, - 338, 327, 243, 243, 243, 239, 242, 6, 345, 174, - 260, 327, 247, 247, 340, 6, 327, 327, 243, 243, - 278, 7, 238, 243, 242, 247, 247, 247, 247, 247, - 243, 242, 338, 341, 6, 242, 338, 6, 243, 243, - 327, 6, 128, 243, 309, 242, 243, 247, 247, 247, - 247, 247, 6, 6, 6, 298, 6, 242, 327, 327, - 243, 247, 282, 349, 239, 327, 327, 327, 327, 327, - 327, 6, 338, 6, 338, 6, 6, 243, 327, 312, - 298, 6, 344, 344, 344, 344, 338, 344, 315, 257, - 239, 247, 6, 242, 327, 243, 247, 247, 247, 247, - 247, 247, 247, 247, 6, 243, 243, 310, 243, 243, - 243, 243, 247, 243, 243, 243, 263, 327, 340, 243, - 327, 327, 327, 327, 327, 327, 338, 338, 312, 6, - 6, 6, 6, 344, 6, 6, 6, 242, 239, 243, - 6, 243, 273, 247, 247, 247, 247, 247, 247, 243, - 243, 261, 348, 266, 242, 6, 327, 327, 327, 327, - 327, 327, 6, 243, 247, 242, 340, 243, 243, 243, - 243, 243, 243, 6, 348, 264, 348, 243, 6, 6, - 243, 247, 6, 6, 348 + 188, 189, 190, 191, 198, 199, 200, 209, 211, 252, + 254, 255, 275, 293, 295, 299, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 317, 319, 320, 326, 327, + 328, 329, 335, 360, 361, 243, 247, 14, 97, 239, + 239, 6, 243, 6, 6, 6, 6, 239, 6, 6, + 241, 241, 4, 337, 361, 239, 241, 273, 273, 239, + 239, 239, 4, 239, 239, 239, 4, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 243, 112, + 97, 6, 243, 91, 94, 97, 110, 298, 239, 3, + 10, 11, 12, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 55, 56, 57, 58, 63, 75, 76, 77, + 83, 86, 91, 94, 97, 99, 119, 124, 126, 192, + 196, 197, 201, 202, 203, 205, 206, 207, 227, 228, + 234, 239, 243, 246, 295, 299, 310, 317, 319, 330, + 331, 335, 337, 344, 346, 361, 239, 243, 97, 97, + 119, 94, 97, 99, 91, 295, 94, 97, 99, 110, + 296, 94, 97, 239, 94, 149, 174, 190, 191, 243, + 227, 228, 239, 243, 341, 342, 341, 243, 243, 341, + 4, 91, 95, 101, 102, 104, 105, 123, 239, 97, + 99, 97, 94, 4, 84, 185, 243, 361, 4, 6, + 91, 94, 97, 94, 97, 110, 297, 4, 4, 4, + 5, 239, 344, 345, 4, 239, 239, 239, 4, 243, + 348, 361, 4, 239, 239, 239, 6, 6, 241, 5, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 59, + 60, 61, 62, 67, 68, 69, 72, 74, 85, 88, + 193, 194, 195, 204, 208, 210, 352, 361, 239, 4, + 352, 5, 243, 5, 243, 32, 228, 330, 361, 241, + 243, 239, 243, 6, 239, 243, 6, 247, 7, 126, + 185, 212, 213, 214, 215, 236, 237, 239, 241, 245, + 271, 272, 273, 330, 351, 352, 361, 4, 299, 300, + 301, 243, 6, 330, 351, 352, 361, 351, 330, 351, + 358, 359, 361, 277, 281, 239, 340, 9, 352, 361, + 330, 330, 330, 239, 330, 330, 330, 239, 330, 330, + 330, 330, 330, 330, 330, 351, 330, 330, 330, 330, + 344, 239, 228, 330, 346, 347, 243, 345, 351, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 239, 241, 273, 273, 273, 273, 273, 273, + 239, 273, 273, 239, 273, 273, 243, 119, 295, 239, + 273, 273, 239, 239, 239, 330, 243, 330, 346, 330, + 330, 244, 347, 337, 361, 5, 177, 8, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 238, 9, 239, 241, + 245, 272, 273, 330, 347, 239, 239, 239, 344, 345, + 345, 345, 294, 243, 239, 344, 243, 243, 330, 4, + 344, 243, 348, 243, 243, 341, 341, 341, 330, 330, + 227, 228, 243, 243, 341, 227, 228, 239, 301, 341, + 243, 239, 243, 239, 239, 239, 239, 239, 239, 239, + 330, 345, 345, 345, 239, 4, 241, 6, 241, 301, + 6, 6, 243, 243, 243, 243, 345, 241, 241, 241, + 330, 6, 6, 330, 330, 330, 245, 330, 243, 177, + 330, 330, 330, 330, 273, 273, 273, 239, 239, 239, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 239, 239, 273, 239, 241, 6, 6, 243, 6, 301, + 6, 301, 273, 330, 229, 243, 9, 239, 241, 245, + 351, 347, 330, 301, 344, 344, 243, 352, 91, 94, + 97, 99, 7, 330, 330, 4, 174, 175, 344, 6, + 240, 242, 243, 274, 6, 243, 6, 9, 239, 241, + 245, 361, 244, 119, 124, 127, 293, 295, 330, 6, + 240, 248, 9, 239, 241, 245, 240, 248, 248, 240, + 248, 9, 239, 245, 242, 248, 276, 242, 276, 87, + 339, 336, 361, 248, 248, 240, 240, 240, 330, 240, + 240, 240, 330, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 244, 7, 330, 229, 244, 248, + 330, 6, 240, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 346, 330, 330, 330, 330, 330, 330, 330, 346, 346, + 361, 243, 330, 330, 351, 330, 351, 344, 351, 351, + 358, 330, 274, 361, 330, 345, 351, 351, 346, 337, + 352, 337, 347, 240, 244, 245, 273, 64, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 243, 330, 346, 330, 330, 330, 330, 330, + 361, 330, 330, 4, 338, 243, 274, 240, 244, 330, + 330, 330, 7, 7, 323, 323, 239, 330, 330, 6, + 347, 347, 243, 240, 6, 301, 243, 301, 301, 248, + 248, 248, 341, 341, 300, 300, 248, 330, 244, 314, + 248, 301, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 240, 7, 324, 6, 7, 330, 6, 330, 330, + 244, 347, 347, 347, 330, 6, 330, 330, 330, 240, + 240, 240, 240, 174, 248, 301, 243, 8, 240, 240, + 242, 358, 351, 358, 351, 351, 351, 351, 351, 351, + 330, 351, 351, 351, 351, 246, 354, 361, 352, 351, + 351, 351, 337, 361, 347, 244, 244, 330, 330, 301, + 361, 338, 242, 244, 240, 132, 149, 318, 240, 244, + 248, 330, 6, 243, 243, 243, 243, 330, 240, 242, + 7, 271, 272, 245, 7, 6, 347, 7, 215, 271, + 256, 361, 330, 330, 338, 241, 239, 119, 296, 243, + 244, 6, 222, 223, 253, 347, 361, 330, 330, 4, + 338, 6, 347, 330, 6, 351, 359, 361, 240, 338, + 6, 361, 6, 351, 330, 240, 241, 330, 352, 7, + 7, 7, 240, 7, 7, 7, 240, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 330, 240, 243, + 330, 346, 244, 6, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 248, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 248, 248, 248, 240, 242, + 242, 347, 248, 248, 274, 248, 274, 248, 248, 248, + 240, 332, 274, 244, 248, 248, 274, 274, 240, 245, + 240, 245, 248, 333, 244, 7, 338, 274, 243, 8, + 8, 347, 245, 240, 242, 272, 239, 241, 273, 347, + 7, 243, 240, 240, 240, 330, 344, 4, 322, 6, + 290, 330, 352, 244, 240, 244, 244, 347, 245, 244, + 301, 244, 244, 341, 330, 330, 244, 244, 330, 341, + 129, 129, 146, 154, 155, 156, 160, 161, 315, 316, + 341, 244, 311, 240, 244, 240, 240, 240, 240, 240, + 240, 240, 7, 330, 6, 330, 240, 242, 242, 244, + 244, 244, 244, 242, 242, 248, 7, 7, 7, 245, + 330, 244, 330, 330, 7, 245, 274, 248, 274, 274, + 240, 240, 248, 274, 274, 248, 248, 274, 274, 274, + 274, 330, 274, 9, 353, 248, 240, 248, 274, 245, + 248, 334, 242, 244, 244, 245, 239, 241, 247, 177, + 7, 149, 6, 330, 244, 243, 6, 344, 244, 330, + 330, 330, 330, 6, 7, 271, 272, 245, 271, 272, + 352, 330, 6, 4, 243, 349, 361, 244, 46, 46, + 344, 4, 164, 165, 166, 167, 244, 259, 263, 266, + 268, 269, 245, 240, 242, 239, 330, 330, 239, 239, + 347, 351, 240, 245, 240, 242, 239, 240, 248, 245, + 239, 7, 273, 4, 284, 285, 286, 274, 274, 341, + 344, 344, 7, 344, 344, 344, 7, 344, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 6, 7, 347, + 330, 330, 330, 330, 244, 330, 330, 330, 344, 351, + 351, 248, 283, 330, 330, 338, 338, 330, 240, 344, + 273, 330, 330, 330, 244, 338, 272, 245, 272, 330, + 330, 274, 244, 344, 347, 7, 7, 7, 129, 321, + 6, 240, 248, 7, 7, 7, 244, 4, 244, 248, + 248, 248, 244, 244, 109, 4, 6, 330, 243, 6, + 239, 6, 162, 6, 162, 244, 316, 248, 315, 7, + 6, 7, 7, 7, 7, 7, 7, 7, 344, 6, + 243, 6, 6, 6, 97, 7, 6, 6, 330, 344, + 344, 344, 4, 248, 8, 8, 240, 4, 4, 347, + 351, 330, 351, 246, 248, 287, 351, 351, 338, 351, + 240, 248, 338, 243, 295, 243, 6, 330, 6, 243, + 344, 244, 244, 244, 244, 244, 330, 6, 4, 174, + 175, 330, 6, 6, 6, 7, 348, 350, 6, 241, + 274, 273, 273, 6, 260, 239, 239, 243, 270, 6, + 338, 245, 351, 330, 242, 240, 330, 330, 244, 6, + 6, 253, 338, 245, 330, 6, 330, 338, 240, 243, + 330, 352, 274, 46, 243, 344, 352, 355, 242, 248, + 6, 6, 6, 123, 292, 292, 344, 6, 6, 6, + 344, 177, 291, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 5, 244, 274, 274, 274, 274, 274, 248, + 248, 248, 240, 274, 274, 285, 274, 240, 274, 240, + 333, 6, 274, 248, 239, 241, 273, 4, 240, 242, + 274, 6, 244, 344, 344, 344, 4, 6, 271, 330, + 344, 243, 243, 7, 6, 7, 330, 330, 330, 243, + 243, 243, 241, 6, 330, 344, 330, 6, 6, 330, + 341, 244, 5, 344, 243, 243, 243, 243, 243, 243, + 243, 344, 6, 347, 243, 330, 242, 6, 6, 173, + 330, 330, 330, 6, 6, 7, 274, 248, 248, 274, + 248, 330, 4, 189, 288, 289, 274, 240, 274, 334, + 352, 239, 241, 330, 243, 301, 6, 301, 248, 6, + 6, 7, 271, 272, 245, 7, 6, 348, 244, 248, + 330, 271, 243, 274, 356, 357, 358, 356, 239, 330, + 330, 343, 344, 243, 239, 4, 6, 240, 6, 240, + 240, 6, 351, 239, 4, 240, 248, 239, 344, 352, + 7, 273, 282, 330, 346, 286, 341, 6, 6, 6, + 6, 95, 6, 5, 243, 330, 330, 330, 240, 330, + 330, 330, 274, 272, 243, 6, 291, 6, 330, 344, + 4, 6, 347, 347, 330, 330, 352, 244, 240, 244, + 248, 300, 300, 330, 330, 244, 248, 240, 244, 248, + 6, 6, 343, 341, 341, 341, 341, 341, 228, 341, + 6, 244, 330, 6, 6, 344, 244, 248, 8, 244, + 240, 243, 330, 352, 351, 330, 351, 330, 352, 355, + 357, 352, 248, 240, 248, 244, 330, 318, 318, 344, + 352, 330, 6, 4, 349, 6, 348, 242, 344, 358, + 6, 274, 274, 257, 330, 248, 248, 244, 248, 258, + 330, 330, 6, 330, 330, 240, 278, 280, 243, 357, + 244, 248, 7, 7, 243, 5, 343, 274, 274, 248, + 248, 240, 242, 330, 6, 6, 243, 244, 244, 243, + 6, 6, 243, 330, 244, 244, 244, 242, 6, 344, + 7, 243, 330, 244, 248, 248, 248, 248, 248, 248, + 6, 244, 172, 330, 330, 347, 6, 6, 240, 274, + 274, 289, 352, 244, 244, 244, 244, 6, 6, 7, + 6, 245, 6, 244, 6, 6, 240, 248, 330, 330, + 243, 344, 244, 248, 240, 240, 248, 283, 287, 344, + 274, 330, 352, 361, 330, 6, 244, 330, 330, 244, + 343, 133, 134, 139, 325, 133, 134, 325, 347, 300, + 244, 248, 6, 244, 344, 301, 244, 6, 347, 341, + 341, 341, 341, 341, 330, 244, 244, 244, 240, 6, + 243, 6, 348, 175, 261, 330, 248, 248, 343, 6, + 330, 330, 244, 244, 279, 7, 239, 244, 243, 248, + 248, 244, 243, 341, 344, 6, 243, 341, 6, 244, + 244, 330, 6, 129, 244, 312, 243, 244, 248, 248, + 248, 248, 248, 6, 6, 6, 301, 6, 243, 330, + 330, 244, 248, 283, 352, 240, 330, 330, 330, 6, + 341, 6, 341, 6, 6, 244, 330, 315, 301, 6, + 347, 347, 347, 347, 341, 347, 318, 258, 240, 248, + 6, 243, 330, 244, 248, 248, 248, 248, 248, 6, + 244, 244, 313, 244, 244, 244, 244, 248, 244, 244, + 244, 264, 330, 343, 244, 330, 330, 330, 341, 341, + 315, 6, 6, 6, 6, 347, 6, 6, 6, 243, + 240, 244, 6, 244, 274, 248, 248, 248, 244, 244, + 262, 351, 267, 243, 6, 330, 330, 330, 6, 244, + 248, 243, 343, 244, 244, 244, 6, 351, 265, 351, + 244, 6, 6, 244, 248, 6, 6, 351 }; #define yyerrok (yyerrstatus = 0) @@ -6500,30 +6188,30 @@ yyreduce: switch (yyn) { case 3: -#line 266 "Gmsh.y" +#line 267 "Gmsh.y" { yyerrok; return 1; ;} break; case 6: -#line 277 "Gmsh.y" +#line 278 "Gmsh.y" { return 1; ;} break; case 7: -#line 278 "Gmsh.y" +#line 279 "Gmsh.y" { return 1; ;} break; case 8: -#line 279 "Gmsh.y" +#line 280 "Gmsh.y" { return 1; ;} break; case 9: -#line 281 "Gmsh.y" +#line 282 "Gmsh.y" { - factory = (yyvsp[(3) - (5)].c); - if(factory == "OpenCASCADE"){ + gmsh_yyfactory = (yyvsp[(3) - (5)].c); + if(gmsh_yyfactory == "OpenCASCADE"){ if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); for(int dim = -2; dim <= 3; dim++) @@ -6542,101 +6230,101 @@ yyreduce: break; case 10: -#line 299 "Gmsh.y" +#line 300 "Gmsh.y" { return 1; ;} break; case 11: -#line 300 "Gmsh.y" +#line 301 "Gmsh.y" { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;} break; case 12: -#line 301 "Gmsh.y" +#line 302 "Gmsh.y" { return 1; ;} break; case 13: -#line 302 "Gmsh.y" +#line 303 "Gmsh.y" { return 1; ;} break; case 14: -#line 303 "Gmsh.y" +#line 304 "Gmsh.y" { return 1; ;} break; case 15: -#line 304 "Gmsh.y" +#line 305 "Gmsh.y" { return 1; ;} break; case 16: -#line 305 "Gmsh.y" +#line 306 "Gmsh.y" { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;} break; case 17: -#line 306 "Gmsh.y" +#line 307 "Gmsh.y" { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;} break; case 18: -#line 307 "Gmsh.y" +#line 308 "Gmsh.y" { return 1; ;} break; case 19: -#line 308 "Gmsh.y" +#line 309 "Gmsh.y" { return 1; ;} break; case 20: -#line 309 "Gmsh.y" +#line 310 "Gmsh.y" { return 1; ;} break; case 21: -#line 310 "Gmsh.y" +#line 311 "Gmsh.y" { return 1; ;} break; case 22: -#line 311 "Gmsh.y" +#line 312 "Gmsh.y" { return 1; ;} break; case 23: -#line 312 "Gmsh.y" +#line 313 "Gmsh.y" { return 1; ;} break; case 24: -#line 313 "Gmsh.y" +#line 314 "Gmsh.y" { return 1; ;} break; case 25: -#line 314 "Gmsh.y" +#line 315 "Gmsh.y" { return 1; ;} break; case 26: -#line 319 "Gmsh.y" +#line 320 "Gmsh.y" { (yyval.c) = (char*)"w"; ;} break; case 27: -#line 323 "Gmsh.y" +#line 324 "Gmsh.y" { (yyval.c) = (char*)"a"; ;} break; case 28: -#line 330 "Gmsh.y" +#line 331 "Gmsh.y" { Msg::Direct((yyvsp[(3) - (5)].c)); Free((yyvsp[(3) - (5)].c)); @@ -6644,7 +6332,7 @@ yyreduce: break; case 29: -#line 335 "Gmsh.y" +#line 336 "Gmsh.y" { Msg::Error((yyvsp[(3) - (5)].c)); Free((yyvsp[(3) - (5)].c)); @@ -6652,7 +6340,7 @@ yyreduce: break; case 30: -#line 340 "Gmsh.y" +#line 341 "Gmsh.y" { std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c)); FILE *fp = Fopen(tmp.c_str(), (yyvsp[(5) - (7)].c)); @@ -6669,7 +6357,7 @@ yyreduce: break; case 31: -#line 354 "Gmsh.y" +#line 355 "Gmsh.y" { char tmpstring[5000]; int i = printListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring); @@ -6685,7 +6373,7 @@ yyreduce: break; case 32: -#line 367 "Gmsh.y" +#line 368 "Gmsh.y" { char tmpstring[5000]; int i = printListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring); @@ -6701,7 +6389,7 @@ yyreduce: break; case 33: -#line 380 "Gmsh.y" +#line 381 "Gmsh.y" { char tmpstring[5000]; int i = printListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring); @@ -6727,7 +6415,7 @@ yyreduce: break; case 34: -#line 408 "Gmsh.y" +#line 409 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){ @@ -6744,7 +6432,7 @@ yyreduce: break; case 35: -#line 422 "Gmsh.y" +#line 423 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(2) - (6)].c), "View")){ @@ -6760,7 +6448,7 @@ yyreduce: break; case 36: -#line 435 "Gmsh.y" +#line 436 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(2) - (6)].c), "View")){ @@ -6776,7 +6464,7 @@ yyreduce: break; case 37: -#line 448 "Gmsh.y" +#line 449 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(2) - (8)].c), "View")){ @@ -6794,7 +6482,7 @@ yyreduce: break; case 38: -#line 466 "Gmsh.y" +#line 467 "Gmsh.y" { #if defined(HAVE_POST) ViewData = new PViewDataList(); @@ -6803,27 +6491,27 @@ yyreduce: break; case 44: -#line 480 "Gmsh.y" +#line 481 "Gmsh.y" { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;} break; case 45: -#line 482 "Gmsh.y" +#line 483 "Gmsh.y" { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;} break; case 46: -#line 487 "Gmsh.y" +#line 488 "Gmsh.y" { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;} break; case 47: -#line 489 "Gmsh.y" +#line 490 "Gmsh.y" { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;} break; case 48: -#line 494 "Gmsh.y" +#line 495 "Gmsh.y" { #if defined(HAVE_POST) if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){ @@ -6930,7 +6618,7 @@ yyreduce: break; case 49: -#line 598 "Gmsh.y" +#line 599 "Gmsh.y" { #if defined(HAVE_POST) if(ViewValueList){ @@ -6943,7 +6631,7 @@ yyreduce: break; case 50: -#line 608 "Gmsh.y" +#line 609 "Gmsh.y" { #if defined(HAVE_POST) if(ViewValueList) (*ViewNumList)++; @@ -6952,7 +6640,7 @@ yyreduce: break; case 51: -#line 617 "Gmsh.y" +#line 618 "Gmsh.y" { #if defined(HAVE_POST) for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]); @@ -6962,7 +6650,7 @@ yyreduce: break; case 52: -#line 624 "Gmsh.y" +#line 625 "Gmsh.y" { #if defined(HAVE_POST) for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]); @@ -6972,7 +6660,7 @@ yyreduce: break; case 53: -#line 634 "Gmsh.y" +#line 635 "Gmsh.y" { #if defined(HAVE_POST) ViewData->T2D.push_back((yyvsp[(3) - (8)].d)); @@ -6984,7 +6672,7 @@ yyreduce: break; case 54: -#line 643 "Gmsh.y" +#line 644 "Gmsh.y" { #if defined(HAVE_POST) ViewData->NbT2++; @@ -6993,7 +6681,7 @@ yyreduce: break; case 55: -#line 652 "Gmsh.y" +#line 653 "Gmsh.y" { #if defined(HAVE_POST) for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]); @@ -7003,7 +6691,7 @@ yyreduce: break; case 56: -#line 659 "Gmsh.y" +#line 660 "Gmsh.y" { #if defined(HAVE_POST) for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]); @@ -7013,7 +6701,7 @@ yyreduce: break; case 57: -#line 669 "Gmsh.y" +#line 670 "Gmsh.y" { #if defined(HAVE_POST) ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d)); @@ -7024,7 +6712,7 @@ yyreduce: break; case 58: -#line 677 "Gmsh.y" +#line 678 "Gmsh.y" { #if defined(HAVE_POST) ViewData->NbT3++; @@ -7033,7 +6721,7 @@ yyreduce: break; case 59: -#line 687 "Gmsh.y" +#line 688 "Gmsh.y" { #if defined(HAVE_POST) int type = @@ -7052,7 +6740,7 @@ yyreduce: break; case 60: -#line 706 "Gmsh.y" +#line 707 "Gmsh.y" { #if defined(HAVE_POST) int type = @@ -7071,7 +6759,7 @@ yyreduce: break; case 61: -#line 725 "Gmsh.y" +#line 726 "Gmsh.y" { #if defined(HAVE_POST) ViewValueList = &ViewData->Time; @@ -7080,68 +6768,68 @@ yyreduce: break; case 62: -#line 731 "Gmsh.y" +#line 732 "Gmsh.y" { ;} break; case 63: -#line 738 "Gmsh.y" +#line 739 "Gmsh.y" { (yyval.i) = 0; ;} break; case 64: -#line 739 "Gmsh.y" +#line 740 "Gmsh.y" { (yyval.i) = 1; ;} break; case 65: -#line 740 "Gmsh.y" +#line 741 "Gmsh.y" { (yyval.i) = 2; ;} break; case 66: -#line 741 "Gmsh.y" +#line 742 "Gmsh.y" { (yyval.i) = 3; ;} break; case 67: -#line 742 "Gmsh.y" +#line 743 "Gmsh.y" { (yyval.i) = 4; ;} break; case 68: -#line 746 "Gmsh.y" +#line 747 "Gmsh.y" { (yyval.i) = 1; ;} break; case 69: -#line 747 "Gmsh.y" +#line 748 "Gmsh.y" { (yyval.i) = -1; ;} break; case 70: -#line 753 "Gmsh.y" +#line 754 "Gmsh.y" { (yyval.c) = (char*)"("; ;} break; case 71: -#line 753 "Gmsh.y" +#line 754 "Gmsh.y" { (yyval.c) = (char*)"["; ;} break; case 72: -#line 754 "Gmsh.y" +#line 755 "Gmsh.y" { (yyval.c) = (char*)")"; ;} break; case 73: -#line 754 "Gmsh.y" +#line 755 "Gmsh.y" { (yyval.c) = (char*)"]"; ;} break; case 77: -#line 764 "Gmsh.y" +#line 765 "Gmsh.y" { Msg::SetOnelabNumber((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].d)); Free((yyvsp[(3) - (7)].c)); @@ -7149,7 +6837,7 @@ yyreduce: break; case 78: -#line 769 "Gmsh.y" +#line 770 "Gmsh.y" { Msg::SetOnelabString((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].c)); Free((yyvsp[(3) - (7)].c)); @@ -7158,7 +6846,7 @@ yyreduce: break; case 79: -#line 775 "Gmsh.y" +#line 776 "Gmsh.y" { if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c)) && (yyvsp[(2) - (4)].i) && List_Nbr((yyvsp[(3) - (4)].l)) == 1){ yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c)); @@ -7223,7 +6911,7 @@ yyreduce: break; case 80: -#line 837 "Gmsh.y" +#line 838 "Gmsh.y" { if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c))) yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); @@ -7241,7 +6929,7 @@ yyreduce: break; case 81: -#line 852 "Gmsh.y" +#line 853 "Gmsh.y" { gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]); s.list = true; @@ -7273,7 +6961,7 @@ yyreduce: break; case 82: -#line 881 "Gmsh.y" +#line 882 "Gmsh.y" { assignVariables((yyvsp[(1) - (9)].c), (yyvsp[(4) - (9)].l), (yyvsp[(7) - (9)].i), (yyvsp[(8) - (9)].l)); Free((yyvsp[(1) - (9)].c)); @@ -7283,7 +6971,7 @@ yyreduce: break; case 83: -#line 891 "Gmsh.y" +#line 892 "Gmsh.y" { assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d)); Free((yyvsp[(1) - (7)].c)); @@ -7291,7 +6979,7 @@ yyreduce: break; case 84: -#line 896 "Gmsh.y" +#line 897 "Gmsh.y" { incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i)); Free((yyvsp[(1) - (6)].c)); @@ -7299,7 +6987,7 @@ yyreduce: break; case 85: -#line 904 "Gmsh.y" +#line 905 "Gmsh.y" { assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d)); Free((yyvsp[(1) - (7)].c)); @@ -7307,7 +6995,7 @@ yyreduce: break; case 86: -#line 909 "Gmsh.y" +#line 910 "Gmsh.y" { incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i)); Free((yyvsp[(1) - (6)].c)); @@ -7315,7 +7003,7 @@ yyreduce: break; case 87: -#line 917 "Gmsh.y" +#line 918 "Gmsh.y" { gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::vector<std::string>(1, (yyvsp[(3) - (4)].c)); Free((yyvsp[(1) - (4)].c)); @@ -7324,7 +7012,7 @@ yyreduce: break; case 88: -#line 926 "Gmsh.y" +#line 927 "Gmsh.y" { gmsh_yystringsymbols[(yyvsp[(1) - (8)].c)] = std::vector<std::string>(); Free((yyvsp[(1) - (8)].c)); @@ -7332,7 +7020,7 @@ yyreduce: break; case 89: -#line 931 "Gmsh.y" +#line 932 "Gmsh.y" { std::vector<std::string> s; for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){ @@ -7347,7 +7035,7 @@ yyreduce: break; case 90: -#line 943 "Gmsh.y" +#line 944 "Gmsh.y" { if(gmsh_yystringsymbols.count((yyvsp[(1) - (9)].c))){ for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){ @@ -7364,7 +7052,7 @@ yyreduce: break; case 91: -#line 960 "Gmsh.y" +#line 961 "Gmsh.y" { std::string tmp((yyvsp[(5) - (6)].c)); StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), tmp); @@ -7373,7 +7061,7 @@ yyreduce: break; case 92: -#line 966 "Gmsh.y" +#line 967 "Gmsh.y" { std::string tmp((yyvsp[(8) - (9)].c)); StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), tmp); @@ -7382,7 +7070,7 @@ yyreduce: break; case 93: -#line 975 "Gmsh.y" +#line 976 "Gmsh.y" { double d = 0.; if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){ @@ -7403,7 +7091,7 @@ yyreduce: break; case 94: -#line 993 "Gmsh.y" +#line 994 "Gmsh.y" { double d = 0.; if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){ @@ -7424,7 +7112,7 @@ yyreduce: break; case 95: -#line 1011 "Gmsh.y" +#line 1012 "Gmsh.y" { double d = 0.; if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){ @@ -7436,7 +7124,7 @@ yyreduce: break; case 96: -#line 1020 "Gmsh.y" +#line 1021 "Gmsh.y" { double d = 0.; if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){ @@ -7448,7 +7136,7 @@ yyreduce: break; case 97: -#line 1032 "Gmsh.y" +#line 1033 "Gmsh.y" { ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u)); Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c)); @@ -7456,7 +7144,7 @@ yyreduce: break; case 98: -#line 1037 "Gmsh.y" +#line 1038 "Gmsh.y" { ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u)); Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c)); @@ -7464,7 +7152,7 @@ yyreduce: break; case 99: -#line 1045 "Gmsh.y" +#line 1046 "Gmsh.y" { GmshColorTable *ct = GetColorTable(0); if(!ct) @@ -7487,7 +7175,7 @@ yyreduce: break; case 100: -#line 1065 "Gmsh.y" +#line 1066 "Gmsh.y" { GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d)); if(!ct) @@ -7510,7 +7198,7 @@ yyreduce: break; case 101: -#line 1088 "Gmsh.y" +#line 1089 "Gmsh.y" { #if defined(HAVE_MESH) if(!strcmp((yyvsp[(1) - (5)].c),"Background")) @@ -7524,7 +7212,7 @@ yyreduce: break; case 102: -#line 1099 "Gmsh.y" +#line 1100 "Gmsh.y" { #if defined(HAVE_MESH) if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c))) @@ -7535,7 +7223,7 @@ yyreduce: break; case 103: -#line 1107 "Gmsh.y" +#line 1108 "Gmsh.y" { #if defined(HAVE_MESH) Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d)); @@ -7560,7 +7248,7 @@ yyreduce: break; case 104: -#line 1129 "Gmsh.y" +#line 1130 "Gmsh.y" { #if defined(HAVE_MESH) Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d)); @@ -7586,7 +7274,7 @@ yyreduce: break; case 105: -#line 1152 "Gmsh.y" +#line 1153 "Gmsh.y" { #if defined(HAVE_MESH) Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d)); @@ -7627,7 +7315,7 @@ yyreduce: break; case 106: -#line 1190 "Gmsh.y" +#line 1191 "Gmsh.y" { #if defined(HAVE_MESH) Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (7)].d)); @@ -7648,7 +7336,7 @@ yyreduce: break; case 107: -#line 1211 "Gmsh.y" +#line 1212 "Gmsh.y" { #if defined(HAVE_PLUGINS) try { @@ -7663,7 +7351,7 @@ yyreduce: break; case 108: -#line 1223 "Gmsh.y" +#line 1224 "Gmsh.y" { #if defined(HAVE_PLUGINS) try { @@ -7678,7 +7366,7 @@ yyreduce: break; case 112: -#line 1241 "Gmsh.y" +#line 1242 "Gmsh.y" { std::string key((yyvsp[(3) - (3)].c)); std::vector<double> val(1, 0.); @@ -7690,7 +7378,7 @@ yyreduce: break; case 113: -#line 1250 "Gmsh.y" +#line 1251 "Gmsh.y" { std::string key((yyvsp[(3) - (5)].c)); std::vector<double> val(1, (yyvsp[(5) - (5)].d)); @@ -7702,12 +7390,12 @@ yyreduce: break; case 114: -#line 1259 "Gmsh.y" +#line 1260 "Gmsh.y" { init_options(); ;} break; case 115: -#line 1261 "Gmsh.y" +#line 1262 "Gmsh.y" { if(List_Nbr((yyvsp[(6) - (9)].l)) != 1) yymsg(1, "List notation should be used to define list '%s[]'", (yyvsp[(3) - (9)].c)); @@ -7728,12 +7416,12 @@ yyreduce: break; case 116: -#line 1279 "Gmsh.y" +#line 1280 "Gmsh.y" { init_options(); ;} break; case 117: -#line 1281 "Gmsh.y" +#line 1282 "Gmsh.y" { std::string key((yyvsp[(3) - (11)].c)); std::vector<double> val; @@ -7752,7 +7440,7 @@ yyreduce: break; case 118: -#line 1297 "Gmsh.y" +#line 1298 "Gmsh.y" { std::string key((yyvsp[(3) - (5)].c)), val((yyvsp[(5) - (5)].c)); if(!gmsh_yystringsymbols.count(key)){ @@ -7764,12 +7452,12 @@ yyreduce: break; case 119: -#line 1306 "Gmsh.y" +#line 1307 "Gmsh.y" { init_options(); ;} break; case 120: -#line 1308 "Gmsh.y" +#line 1309 "Gmsh.y" { std::string key((yyvsp[(3) - (9)].c)), val((yyvsp[(6) - (9)].c)); if(!gmsh_yysymbols.count(key)){ @@ -7782,7 +7470,7 @@ yyreduce: break; case 122: -#line 1322 "Gmsh.y" +#line 1323 "Gmsh.y" { std::string name((yyvsp[(3) - (3)].c)); Msg::UndefineOnelabParameter(name); @@ -7791,7 +7479,7 @@ yyreduce: break; case 123: -#line 1330 "Gmsh.y" +#line 1331 "Gmsh.y" { (yyval.l) = List_Create(20,20,sizeof(doubleXstring)); doubleXstring v = {(yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].c)}; @@ -7800,7 +7488,7 @@ yyreduce: break; case 124: -#line 1336 "Gmsh.y" +#line 1337 "Gmsh.y" { doubleXstring v = {(yyvsp[(3) - (5)].d), (yyvsp[(5) - (5)].c)}; List_Add((yyval.l), &v); @@ -7808,7 +7496,7 @@ yyreduce: break; case 125: -#line 1341 "Gmsh.y" +#line 1342 "Gmsh.y" { (yyval.l) = List_Create(20,20,sizeof(doubleXstring)); int n = List_Nbr((yyvsp[(1) - (5)].l)); @@ -7835,7 +7523,7 @@ yyreduce: break; case 132: -#line 1383 "Gmsh.y" +#line 1384 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); for(int i = 0; i < List_Nbr((yyvsp[(2) - (2)].l)); i++){ @@ -7850,7 +7538,7 @@ yyreduce: break; case 133: -#line 1395 "Gmsh.y" +#line 1396 "Gmsh.y" { std::string key((yyvsp[(1) - (1)].c)); double v; @@ -7866,7 +7554,7 @@ yyreduce: break; case 134: -#line 1408 "Gmsh.y" +#line 1409 "Gmsh.y" { std::string key((yyvsp[(1) - (4)].c)); for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ @@ -7883,7 +7571,7 @@ yyreduce: break; case 135: -#line 1423 "Gmsh.y" +#line 1424 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); std::string val((yyvsp[(2) - (2)].c)); @@ -7894,7 +7582,7 @@ yyreduce: break; case 136: -#line 1432 "Gmsh.y" +#line 1433 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); for(int i = 0; i < List_Nbr((yyvsp[(2) - (2)].l)); i++){ @@ -7908,7 +7596,7 @@ yyreduce: break; case 141: -#line 1457 "Gmsh.y" +#line 1458 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); double val = (yyvsp[(2) - (2)].d); @@ -7918,7 +7606,7 @@ yyreduce: break; case 142: -#line 1465 "Gmsh.y" +#line 1466 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); std::string val((yyvsp[(2) - (2)].c)); @@ -7929,7 +7617,7 @@ yyreduce: break; case 143: -#line 1474 "Gmsh.y" +#line 1475 "Gmsh.y" { std::string key("Macro"); std::string val((yyvsp[(2) - (2)].c)); @@ -7939,7 +7627,7 @@ yyreduce: break; case 144: -#line 1482 "Gmsh.y" +#line 1483 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); for(int i = 0; i < List_Nbr((yyvsp[(2) - (2)].l)); i++){ @@ -7955,7 +7643,7 @@ yyreduce: break; case 145: -#line 1496 "Gmsh.y" +#line 1497 "Gmsh.y" { std::string key((yyvsp[(1) - (2)].c)); for(int i = 0; i < List_Nbr((yyvsp[(2) - (2)].l)); i++){ @@ -7971,135 +7659,60 @@ yyreduce: break; case 146: -#line 1514 "Gmsh.y" +#line 1515 "Gmsh.y" { (yyval.i) = (int)(yyvsp[(1) - (1)].d); ;} break; case 147: -#line 1518 "Gmsh.y" +#line 1519 "Gmsh.y" { int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (1)].c)), 0, t + 1); + (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (1)].c)), dim_entity, t + 1); Free((yyvsp[(1) - (1)].c)); ;} break; case 148: -#line 1525 "Gmsh.y" +#line 1526 "Gmsh.y" { - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 0, (yyvsp[(3) - (3)].d)); + (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), dim_entity, (yyvsp[(3) - (3)].d)); Free((yyvsp[(1) - (3)].c)); ;} break; case 149: -#line 1533 "Gmsh.y" +#line 1534 "Gmsh.y" { - (yyval.i) = (int)(yyvsp[(1) - (1)].d); + (yyval.i) = -1; ;} break; case 150: -#line 1537 "Gmsh.y" +#line 1538 "Gmsh.y" { - int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); - GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (1)].c)), 1, t + 1); - Free((yyvsp[(1) - (1)].c)); + (yyval.i) = (int)(yyvsp[(4) - (5)].d); ;} break; case 151: #line 1544 "Gmsh.y" - { - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 1, (yyvsp[(3) - (3)].d)); - Free((yyvsp[(1) - (3)].c)); - ;} - break; - - case 152: -#line 1552 "Gmsh.y" - { - (yyval.i) = (int)(yyvsp[(1) - (1)].d); - ;} - break; - - case 153: -#line 1556 "Gmsh.y" - { - int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); - GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (1)].c)), 2, t + 1); - Free((yyvsp[(1) - (1)].c)); - ;} - break; - - case 154: -#line 1563 "Gmsh.y" - { - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 2, (yyvsp[(3) - (3)].d)); - Free((yyvsp[(1) - (3)].c)); - ;} - break; - - case 155: -#line 1571 "Gmsh.y" - { - (yyval.i) = (int)(yyvsp[(1) - (1)].d); - ;} - break; - - case 156: -#line 1575 "Gmsh.y" - { - int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); - GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (1)].c)), 3, t + 1); - Free((yyvsp[(1) - (1)].c)); - ;} - break; - - case 157: -#line 1582 "Gmsh.y" - { - (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 3, (yyvsp[(3) - (3)].d)); - Free((yyvsp[(1) - (3)].c)); - ;} - break; - - case 158: -#line 1590 "Gmsh.y" - { - (yyval.i) = -1; - ;} - break; - - case 159: -#line 1594 "Gmsh.y" - { - (yyval.i) = (int)(yyvsp[(4) - (5)].d); - ;} - break; - - case 160: -#line 1600 "Gmsh.y" { for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.; ;} break; - case 161: -#line 1604 "Gmsh.y" + case 152: +#line 1548 "Gmsh.y" { for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i]; ;} break; - case 162: -#line 1611 "Gmsh.y" + case 153: +#line 1555 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); double x = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[0]; @@ -8108,7 +7721,7 @@ yyreduce: double lc = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[3]; if(lc == 0.) lc = MAX_LC; // no mesh size given at the point bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addVertex(num, x, y, z, lc); } else{ @@ -8125,13 +7738,13 @@ yyreduce: ;} break; - case 163: -#line 1635 "Gmsh.y" + case 154: +#line 1579 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addLine(num, tags); } else{ @@ -8144,14 +7757,14 @@ yyreduce: ;} break; - case 164: -#line 1651 "Gmsh.y" + case 155: +#line 1595 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Spline not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + r = GModel::current()->getOCCInternals()->addSpline(num, tags); } else{ r = GModel::current()->getGEOInternals()->addSpline(num, tags); @@ -8163,14 +7776,14 @@ yyreduce: ;} break; - case 165: -#line 1667 "Gmsh.y" + case 156: +#line 1611 "Gmsh.y" { int num = (int)(yyvsp[(3) - (8)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (8)].l), tags); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (8)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(tags.size() == 3){ r = GModel::current()->getOCCInternals()->addCircleArc (num, tags[0], tags[1], tags[2]); @@ -8203,14 +7816,14 @@ yyreduce: ;} break; - case 166: -#line 1704 "Gmsh.y" + case 157: +#line 1648 "Gmsh.y" { int num = (int)(yyvsp[(3) - (8)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (8)].l), tags); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (8)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(tags.size() == 3){ r = GModel::current()->getOCCInternals()->addEllipseArc (num, tags[0], tags[1], tags[2]); @@ -8246,14 +7859,14 @@ yyreduce: ;} break; - case 167: -#line 1744 "Gmsh.y" + case 158: +#line 1688 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - r = GModel::current()->getOCCInternals()->addBSpline(num, tags); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "BSpline not yet available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->addBSpline(num, tags); @@ -8265,13 +7878,13 @@ yyreduce: ;} break; - case 168: -#line 1760 "Gmsh.y" + case 159: +#line 1704 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addBezier(num, tags); } else{ @@ -8284,15 +7897,15 @@ yyreduce: ;} break; - case 169: -#line 1777 "Gmsh.y" + case 160: +#line 1721 "Gmsh.y" { int num = (int)(yyvsp[(3) - (11)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (11)].l), tags); std::vector<double> knots; ListOfDouble2Vector((yyvsp[(8) - (11)].l), knots); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Nurbs not available yet with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Nurbs not available yet with OpenCASCADE geometry kernel"); } else{ int order = knots.size() - tags.size() - 1; @@ -8308,30 +7921,17 @@ yyreduce: ;} break; - case 170: -#line 1798 "Gmsh.y" - { - int num = (int)(yyvsp[(4) - (8)].d); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->addCompoundLine(num, tags); - if(!r) yymsg(0, "Could not add compound line"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_SEGM_COMPOUND; - (yyval.s).Num = num; - ;} - break; - - case 171: -#line 1808 "Gmsh.y" + case 161: +#line 1742 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addWire(num, tags, false); } else{ - yymsg(0, "Wire only available using OpenCASCADE factory"); + yymsg(0, "Wire only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add wire"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8340,13 +7940,13 @@ yyreduce: ;} break; - case 172: -#line 1824 "Gmsh.y" + case 162: +#line 1758 "Gmsh.y" { int num = (int)(yyvsp[(4) - (8)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ for(unsigned int i = 0; i < tags.size(); i++) tags[i] = std::abs(tags[i]); // all edge tags > 0 for OCC r = GModel::current()->getOCCInternals()->addLineLoop(num, tags); @@ -8362,13 +7962,13 @@ yyreduce: ;} break; - case 173: -#line 1843 "Gmsh.y" + case 163: +#line 1777 "Gmsh.y" { int num = (int)(yyvsp[(4) - (8)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addPlaneSurface(num, tags); } else{ @@ -8381,13 +7981,13 @@ yyreduce: ;} break; - case 174: -#line 1859 "Gmsh.y" + case 164: +#line 1793 "Gmsh.y" { int num = (int)(yyvsp[(3) - (8)].d); std::vector<int> wires; ListOfDouble2Vector((yyvsp[(6) - (8)].l), wires); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(wires.size() != 1){ yymsg(0, "OpenCASCADE face filling requires a single line loop"); } @@ -8405,8 +8005,8 @@ yyreduce: ;} break; - case 175: -#line 1880 "Gmsh.y" + case 165: +#line 1814 "Gmsh.y" { yymsg(2, "'Ruled Surface' command is deprecated: use 'Surface' instead"); int num = (int)(yyvsp[(4) - (9)].d); @@ -8419,8 +8019,8 @@ yyreduce: ;} break; - case 176: -#line 1891 "Gmsh.y" + case 166: +#line 1825 "Gmsh.y" { myGmshSurface = 0; (yyval.s).Type = 0; @@ -8428,8 +8028,8 @@ yyreduce: ;} break; - case 177: -#line 1897 "Gmsh.y" + case 167: +#line 1831 "Gmsh.y" { myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d)); (yyval.s).Type = 0; @@ -8437,8 +8037,8 @@ yyreduce: ;} break; - case 178: -#line 1903 "Gmsh.y" + case 168: +#line 1837 "Gmsh.y" { int num = (int)(yyvsp[(4) - (10)].d); myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c)); @@ -8447,8 +8047,8 @@ yyreduce: ;} break; - case 179: -#line 1910 "Gmsh.y" + case 169: +#line 1844 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); @@ -8456,7 +8056,7 @@ yyreduce: (yyval.s).Type = 0; bool r = true; if(param.size() >= 4 && param.size() <= 7){ - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ double a1 = (param.size() >= 5) ? param[4] : -M_PI/2; double a2 = (param.size() >= 6) ? param[5] : M_PI/2; double a3 = (param.size() >= 7) ? param[6] : 2.*M_PI; @@ -8464,7 +8064,7 @@ yyreduce: (num, param[0], param[1], param[2], param[3], a1, a2, a3); } else{ - yymsg(0, "Sphere only available with OpenCASCADE factory"); + yymsg(0, "Sphere only available with OpenCASCADE geometry kernel"); } (yyval.s).Type = MSH_VOLUME; } @@ -8481,8 +8081,8 @@ yyreduce: ;} break; - case 180: -#line 1941 "Gmsh.y" + case 170: +#line 1875 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); @@ -8499,13 +8099,13 @@ yyreduce: ;} break; - case 181: -#line 1956 "Gmsh.y" + case 171: +#line 1890 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 6){ r = GModel::current()->getOCCInternals()->addBlock (num, param[0], param[1], param[2], param[3], param[4], param[5]); @@ -8515,7 +8115,7 @@ yyreduce: } } else{ - yymsg(0, "Block only available with OpenCASCADE factory"); + yymsg(0, "Block only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add block"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8524,13 +8124,13 @@ yyreduce: ;} break; - case 182: -#line 1978 "Gmsh.y" + case 172: +#line 1912 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 5 || param.size() == 6){ double alpha = (param.size() == 6) ? param[5] : 2*M_PI; r = GModel::current()->getOCCInternals()->addTorus @@ -8541,7 +8141,7 @@ yyreduce: } } else{ - yymsg(0, "Torus only available with OpenCASCADE factory"); + yymsg(0, "Torus only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add torus"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8550,13 +8150,13 @@ yyreduce: ;} break; - case 183: -#line 2001 "Gmsh.y" + case 173: +#line 1935 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 5 || param.size() == 6){ double r = (param.size() == 6) ? param[5] : 0.; r = GModel::current()->getOCCInternals()->addRectangle @@ -8567,7 +8167,7 @@ yyreduce: } } else{ - yymsg(0, "Rectangle only available with OpenCASCADE factory"); + yymsg(0, "Rectangle only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add rectangle"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8576,13 +8176,13 @@ yyreduce: ;} break; - case 184: -#line 2024 "Gmsh.y" + case 174: +#line 1958 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 4 || param.size() == 5){ double ry = (param.size() == 5) ? param[4] : param[3]; r = GModel::current()->getOCCInternals()->addDisk @@ -8593,7 +8193,7 @@ yyreduce: } } else{ - yymsg(0, "Disk only available with OpenCASCADE factory"); + yymsg(0, "Disk only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add disk"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8602,13 +8202,13 @@ yyreduce: ;} break; - case 185: -#line 2047 "Gmsh.y" + case 175: +#line 1981 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 7 || param.size() == 8){ double angle = (param.size() == 8) ? param[7] : 2*M_PI; r = GModel::current()->getOCCInternals()->addCylinder @@ -8620,7 +8220,7 @@ yyreduce: } } else{ - yymsg(0, "Cylinder only available with OpenCASCADE factory"); + yymsg(0, "Cylinder only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add cylinder"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8629,13 +8229,13 @@ yyreduce: ;} break; - case 186: -#line 2071 "Gmsh.y" + case 176: +#line 2005 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 8 || param.size() == 9){ double alpha = (param.size() == 9) ? param[8] : 2*M_PI; r = GModel::current()->getOCCInternals()->addCone @@ -8647,7 +8247,7 @@ yyreduce: } } else{ - yymsg(0, "Cone only available with OpenCASCADE factory"); + yymsg(0, "Cone only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add cone"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8656,24 +8256,25 @@ yyreduce: ;} break; - case 187: -#line 2095 "Gmsh.y" + case 177: +#line 2029 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - if(param.size() == 7){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(param.size() == 6 || param.size() == 7){ + double ltx = (param.size() == 7) ? param[6] : 0.; r = GModel::current()->getOCCInternals()->addWedge (num, param[0], param[1], param[2], param[3], param[4], param[5], - param[6]); + ltx); } else{ yymsg(0, "Wedge requires 7 parameters"); } } else{ - yymsg(0, "Wedge only available with OpenCASCADE factory"); + yymsg(0, "Wedge only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add wedge"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8682,79 +8283,42 @@ yyreduce: ;} break; - case 188: -#line 2118 "Gmsh.y" + case 178: +#line 2053 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() >= 2){ int in = (int)param[0]; double offset = param[1]; std::vector<int> exclude; for(unsigned int i = 2; i < param.size(); i++) exclude.push_back(param[i]); + std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThickSolid - (num, in, exclude, offset); + (num, in, exclude, offset, outDimTags); } else{ yymsg(0, "ThickSolid requires at least 2 parameters"); } } else{ - yymsg(0, "ThickSolid only available with OpenCASCADE factory"); + yymsg(0, "ThickSolid only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add thick solid"); List_Delete((yyvsp[(6) - (7)].l)); ;} break; - case 189: -#line 2143 "Gmsh.y" - { - int num = (int)(yyvsp[(4) - (8)].d); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->addCompoundSurface(num, tags); - if(!r) yymsg(0, "Could not add compound surface"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_SURF_COMPOUND; - (yyval.s).Num = num; - ;} - break; - - case 190: -#line 2154 "Gmsh.y" - { - int num = (int)(yyvsp[(4) - (12)].d); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (12)].l), tags); - std::vector<int> bndTags[4]; - for(int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++){ - if(i < 4) - ListOfDouble2Vector(*(List_T**)List_Pointer((yyvsp[(10) - (12)].l), i), bndTags[i]); - else - break; - } - bool r = GModel::current()->getGEOInternals()->addCompoundSurface - (num, tags, bndTags); - if(!r) yymsg(0, "Could not add compound surface"); - List_Delete((yyvsp[(7) - (12)].l)); - Free((yyvsp[(8) - (12)].c)); - for (int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++) - List_Delete(*(List_T**)List_Pointer((yyvsp[(10) - (12)].l), i)); - List_Delete((yyvsp[(10) - (12)].l)); - (yyval.s).Type = MSH_SURF_COMPOUND; - (yyval.s).Num = num; - ;} - break; - - case 191: -#line 2176 "Gmsh.y" + case 179: +#line 2079 "Gmsh.y" { int num = (int)(yyvsp[(4) - (8)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addSurfaceLoop(num, tags); } else{ @@ -8768,13 +8332,13 @@ yyreduce: ;} break; - case 192: -#line 2193 "Gmsh.y" + case 180: +#line 2096 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addVolume(num, tags); } else{ @@ -8787,19 +8351,19 @@ yyreduce: ;} break; - case 193: -#line 2209 "Gmsh.y" + case 181: +#line 2112 "Gmsh.y" { int num = (int)(yyvsp[(3) - (7)].d); std::vector<int> wires; ListOfDouble2Vector((yyvsp[(6) - (7)].l), wires); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (num, wires, outDimTags, true, false); + (num, wires, true, false, outDimTags); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add thrusections"); List_Delete((yyvsp[(6) - (7)].l)); @@ -8808,107 +8372,223 @@ yyreduce: ;} break; + case 182: +#line 2130 "Gmsh.y" + { + int num = (int)(yyvsp[(4) - (8)].d); + std::vector<int> wires; ListOfDouble2Vector((yyvsp[(7) - (8)].l), wires); + bool r = true; + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + std::vector<std::pair<int, int> > outDimTags; + r = GModel::current()->getOCCInternals()->addThruSections + (num, wires, true, true, outDimTags); + } + else{ + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); + } + if(!r) yymsg(0, "Could not add ruled thrusections"); + List_Delete((yyvsp[(7) - (8)].l)); + (yyval.s).Type = MSH_VOLUME; + (yyval.s).Num = num; + ;} + break; + + case 183: +#line 2148 "Gmsh.y" + { + int num = (int)(yyvsp[(4) - (8)].d); + std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); + switch ((yyvsp[(2) - (8)].i)) { + case 1: + { + bool r = GModel::current()->getGEOInternals()->addCompoundLine(num, tags); + if(!r) yymsg(0, "Could not add compound line"); + } + (yyval.s).Type = MSH_SEGM_COMPOUND; + break; + case 2: + { + bool r = GModel::current()->getGEOInternals()->addCompoundSurface(num, tags); + if(!r) yymsg(0, "Could not add compound surface"); + } + (yyval.s).Type = MSH_SURF_COMPOUND; + break; + case 3: + { + bool r = GModel::current()->getGEOInternals()->addCompoundVolume(num, tags); + if(!r) yymsg(0, "Could not add compound volume"); + } + (yyval.s).Type = MSH_VOLUME_COMPOUND; + break; + } + List_Delete((yyvsp[(7) - (8)].l)); + (yyval.s).Num = num; + ;} + break; + + case 184: +#line 2179 "Gmsh.y" + { + // Particular case only for dim 2 (Surface) + if ((yyvsp[(2) - (12)].i) == 2) { + int num = (int)(yyvsp[(4) - (12)].d); + std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (12)].l), tags); + std::vector<int> bndTags[4]; + for(int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++){ + if(i < 4) + ListOfDouble2Vector(*(List_T**)List_Pointer((yyvsp[(10) - (12)].l), i), bndTags[i]); + else + break; + } + bool r = GModel::current()->getGEOInternals()->addCompoundSurface + (num, tags, bndTags); + if(!r) yymsg(0, "Could not add compound surface"); + List_Delete((yyvsp[(7) - (12)].l)); + Free((yyvsp[(8) - (12)].c)); + for (int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++) + List_Delete(*(List_T**)List_Pointer((yyvsp[(10) - (12)].l), i)); + List_Delete((yyvsp[(10) - (12)].l)); + (yyval.s).Type = MSH_SURF_COMPOUND; + (yyval.s).Num = num; + } + else { + yymsg(0, "GeoEntity dim out of range [2,2]"); + } + ;} + break; + + case 185: +#line 2207 "Gmsh.y" + { + dim_entity = (yyvsp[(2) - (2)].i); + ;} + break; + + case 186: +#line 2211 "Gmsh.y" + { + int num = (int)(yyvsp[(5) - (9)].i); + int op = (yyvsp[(7) - (9)].i); + std::vector<int> tags; ListOfDouble2Vector((yyvsp[(8) - (9)].l), tags); + bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup + ((yyvsp[(2) - (9)].i), num, op, tags); + if(!r) + switch ((yyvsp[(2) - (9)].i)) { + case 0: yymsg(0, "Could not modify physical point"); break; + case 1: yymsg(0, "Could not modify physical line"); break; + case 2: yymsg(0, "Could not modify physical surface"); break; + case 3: yymsg(0, "Could not modify physical volume"); break; + } + List_Delete((yyvsp[(8) - (9)].l)); + switch ((yyvsp[(2) - (9)].i)) { + case 0: (yyval.s).Type = MSH_PHYSICAL_POINT ; break; + case 1: (yyval.s).Type = MSH_PHYSICAL_LINE ; break; + case 2: (yyval.s).Type = MSH_PHYSICAL_SURFACE; break; + case 3: (yyval.s).Type = MSH_PHYSICAL_VOLUME ; break; + } + (yyval.s).Num = num; + ;} + break; + + case 187: +#line 2237 "Gmsh.y" + { (yyval.i) = 0; ;} + break; + + case 188: +#line 2239 "Gmsh.y" + { (yyval.i) = 1; ;} + break; + + case 189: +#line 2241 "Gmsh.y" + { (yyval.i) = 2; ;} + break; + + case 190: +#line 2243 "Gmsh.y" + { (yyval.i) = 3; ;} + break; + + case 191: +#line 2245 "Gmsh.y" + { + (yyval.i) = (int)(yyvsp[(3) - (4)].d); + if ((yyval.i)<0 || (yyval.i)>3) yymsg(0, "GeoEntity dim out of range [0,3]"); + ;} + break; + + case 192: +#line 2253 "Gmsh.y" + { (yyval.i) = 1; ;} + break; + + case 193: +#line 2255 "Gmsh.y" + { (yyval.i) = 2; ;} + break; + case 194: -#line 2227 "Gmsh.y" - { - int num = (int)(yyvsp[(4) - (8)].d); - std::vector<int> wires; ListOfDouble2Vector((yyvsp[(7) - (8)].l), wires); - bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - std::vector<std::pair<int, int> > outDimTags; - r = GModel::current()->getOCCInternals()->addThruSections - (num, wires, outDimTags, true, true); - } - else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); - } - if(!r) yymsg(0, "Could not add ruled thrusections"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_VOLUME; - (yyval.s).Num = num; - ;} +#line 2257 "Gmsh.y" + { (yyval.i) = 3; ;} break; case 195: -#line 2245 "Gmsh.y" +#line 2259 "Gmsh.y" { - int num = (int)(yyvsp[(4) - (8)].d); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->addCompoundVolume(num, tags); - if(!r) yymsg(0, "Could not add compound volume"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_VOLUME_COMPOUND; - (yyval.s).Num = num; + (yyval.i) = (int)(yyvsp[(3) - (4)].d); + if ((yyval.i)<1 || (yyval.i)>3) yymsg(0, "GeoEntity dim out of range [1,3]"); ;} break; case 196: -#line 2255 "Gmsh.y" - { - int num = (int)(yyvsp[(4) - (8)].i); - int op = (yyvsp[(6) - (8)].i); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (0, num, op, tags); - if(!r) yymsg(0, "Could not modify physical point"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_PHYSICAL_POINT; - (yyval.s).Num = num; - ;} +#line 2267 "Gmsh.y" + { (yyval.i) = 1; ;} break; case 197: -#line 2267 "Gmsh.y" - { - int num = (int)(yyvsp[(4) - (8)].i); - int op = (yyvsp[(6) - (8)].i); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (1, num, op, tags); - if(!r) yymsg(0, "Could not modify physical line"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_PHYSICAL_LINE; - (yyval.s).Num = num; - ;} +#line 2269 "Gmsh.y" + { (yyval.i) = 2; ;} break; case 198: -#line 2279 "Gmsh.y" +#line 2271 "Gmsh.y" { - int num = (int)(yyvsp[(4) - (8)].i); - int op = (yyvsp[(6) - (8)].i); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (2, num, op, tags); - if(!r) yymsg(0, "Could not modify physical surface"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_PHYSICAL_SURFACE; - (yyval.s).Num = num; + (yyval.i) = (int)(yyvsp[(3) - (4)].d); + if ((yyval.i)<1 || (yyval.i)>2) yymsg(0, "GeoEntity dim out of range [1,2]"); ;} break; case 199: -#line 2291 "Gmsh.y" +#line 2279 "Gmsh.y" + { (yyval.i) = 0; ;} + break; + + case 200: +#line 2281 "Gmsh.y" + { (yyval.i) = 1; ;} + break; + + case 201: +#line 2283 "Gmsh.y" + { (yyval.i) = 2; ;} + break; + + case 202: +#line 2285 "Gmsh.y" { - int num = (int)(yyvsp[(4) - (8)].i); - int op = (yyvsp[(6) - (8)].i); - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (3, num, op, tags); - if(!r) yymsg(0, "Could not modify physical volume"); - List_Delete((yyvsp[(7) - (8)].l)); - (yyval.s).Type = MSH_PHYSICAL_VOLUME; - (yyval.s).Num = num; + (yyval.i) = (int)(yyvsp[(3) - (4)].d); + if ((yyval.i)<0 || (yyval.i)>2) yymsg(0, "GeoEntity dim out of range [0,2]"); ;} break; - case 200: -#line 2308 "Gmsh.y" + case 203: +#line 2295 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->translate (dimTags, (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2]); } @@ -8921,13 +8601,13 @@ yyreduce: ;} break; - case 201: -#line 2324 "Gmsh.y" + case 204: +#line 2311 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(10) - (11)].l), dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->rotate (dimTags, (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(7) - (11)].d)); } @@ -8940,14 +8620,15 @@ yyreduce: ;} break; - case 202: -#line 2340 "Gmsh.y" + case 205: +#line 2327 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - Msg::Error("Symmetry not implemented yet with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + r = GModel::current()->getOCCInternals()->symmetry + (dimTags, (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3]); } else{ r = GModel::current()->getGEOInternals()->symmetry @@ -8958,14 +8639,13 @@ yyreduce: ;} break; - case 203: -#line 2355 "Gmsh.y" + case 206: +#line 2343 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(8) - (9)].l), dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(1, "Warning Dilate OCC: Dilatation (second argument) + Translation (first argument) "); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->dilate (dimTags, (yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d)); } @@ -8978,14 +8658,13 @@ yyreduce: ;} break; - case 204: -#line 2372 "Gmsh.y" + case 207: +#line 2359 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(8) - (9)].l), dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(1, "Warning Dilate OCC: Dilatation (second argument) + Translation (first argument) "); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->dilate (dimTags, (yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].v)[0], (yyvsp[(5) - (9)].v)[1], (yyvsp[(5) - (9)].v)[2]); } @@ -8998,8 +8677,8 @@ yyreduce: ;} break; - case 205: -#line 2389 "Gmsh.y" + case 208: +#line 2375 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), inDimTags); @@ -9008,7 +8687,7 @@ yyreduce: std::string action((yyvsp[(1) - (4)].c)); bool r = true; if(action == "Duplicata"){ - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->copy(inDimTags, outDimTags); } else{ @@ -9036,12 +8715,12 @@ yyreduce: ;} break; - case 206: -#line 2424 "Gmsh.y" + case 209: +#line 2410 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ yymsg(0, "Intersect line not available with OpenCASCADE"); } else{ @@ -9060,12 +8739,12 @@ yyreduce: ;} break; - case 207: -#line 2446 "Gmsh.y" + case 210: +#line 2432 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ yymsg(0, "Split Line not available with OpenCASCADE"); } else{ @@ -9084,88 +8763,51 @@ yyreduce: ;} break; - case 208: -#line 2469 "Gmsh.y" - { (yyval.l) = (yyvsp[(1) - (1)].l); ;} - break; - - case 209: -#line 2470 "Gmsh.y" - { (yyval.l) = (yyvsp[(1) - (1)].l); ;} - break; - - case 210: -#line 2475 "Gmsh.y" - { - (yyval.l) = List_Create(3, 3, sizeof(Shape)); - ;} - break; - case 211: -#line 2479 "Gmsh.y" - { - List_Add((yyval.l), &(yyvsp[(2) - (2)].s)); - ;} +#line 2455 "Gmsh.y" + { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; case 212: -#line 2483 "Gmsh.y" - { - for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){ - double d; - List_Read((yyvsp[(4) - (6)].l), i, &d); - Shape s; - s.Num = (int)d; - s.Type = MSH_POINT; - List_Add((yyval.l), &s); - } - ;} +#line 2456 "Gmsh.y" + { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; case 213: -#line 2494 "Gmsh.y" +#line 2461 "Gmsh.y" { - for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){ - double d; - List_Read((yyvsp[(4) - (6)].l), i, &d); - Shape s; - s.Num = (int)d; - s.Type = MSH_SEGM_LINE; - List_Add((yyval.l), &s); - } + (yyval.l) = List_Create(3, 3, sizeof(Shape)); ;} break; case 214: -#line 2505 "Gmsh.y" +#line 2465 "Gmsh.y" { - for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){ - double d; - List_Read((yyvsp[(4) - (6)].l), i, &d); - Shape s; - s.Num = (int)d; - s.Type = MSH_SURF_PLAN; // we don't care about the actual type - List_Add((yyval.l), &s); - } + List_Add((yyval.l), &(yyvsp[(2) - (2)].s)); ;} break; case 215: -#line 2516 "Gmsh.y" +#line 2469 "Gmsh.y" { for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){ double d; List_Read((yyvsp[(4) - (6)].l), i, &d); Shape s; s.Num = (int)d; - s.Type = MSH_VOLUME; + switch ((yyvsp[(2) - (6)].i)) { + case 0: s.Type = MSH_POINT ; break; + case 1: s.Type = MSH_SEGM_LINE; break; + case 2: s.Type = MSH_SURF_PLAN; break; // we don't care about the actual type + case 3: s.Type = MSH_VOLUME ; break; + } List_Add((yyval.l), &s); } ;} break; case 216: -#line 2532 "Gmsh.y" +#line 2490 "Gmsh.y" { if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){ int t = (int)(yyvsp[(4) - (8)].d); @@ -9187,7 +8829,7 @@ yyreduce: break; case 217: -#line 2551 "Gmsh.y" +#line 2509 "Gmsh.y" { int t = (int)(yyvsp[(4) - (10)].d); if(gLevelset::find(t)){ @@ -9211,7 +8853,7 @@ yyreduce: break; case 218: -#line 2573 "Gmsh.y" +#line 2531 "Gmsh.y" { int t = (int)(yyvsp[(4) - (14)].d); if(gLevelset::find(t)){ @@ -9228,7 +8870,7 @@ yyreduce: break; case 219: -#line 2588 "Gmsh.y" +#line 2546 "Gmsh.y" { int t = (int)(yyvsp[(4) - (16)].d); if(gLevelset::find(t)){ @@ -9246,7 +8888,7 @@ yyreduce: break; case 220: -#line 2603 "Gmsh.y" +#line 2561 "Gmsh.y" { if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){ int t = (int)(yyvsp[(4) - (12)].d); @@ -9267,7 +8909,7 @@ yyreduce: break; case 221: -#line 2622 "Gmsh.y" +#line 2580 "Gmsh.y" { if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){ int t = (int)(yyvsp[(4) - (14)].d); @@ -9320,7 +8962,7 @@ yyreduce: break; case 222: -#line 2673 "Gmsh.y" +#line 2631 "Gmsh.y" { if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){ int t = (int)(yyvsp[(4) - (14)].d); @@ -9343,7 +8985,7 @@ yyreduce: break; case 223: -#line 2694 "Gmsh.y" +#line 2652 "Gmsh.y" { if(List_Nbr((yyvsp[(12) - (14)].l)) == 3){ int t = (int)(yyvsp[(4) - (14)].d); @@ -9367,7 +9009,7 @@ yyreduce: break; case 224: -#line 2716 "Gmsh.y" +#line 2674 "Gmsh.y" { if(List_Nbr((yyvsp[(12) - (14)].l)) == 5){ int t = (int)(yyvsp[(4) - (14)].d); @@ -9392,7 +9034,7 @@ yyreduce: break; case 225: -#line 2738 "Gmsh.y" +#line 2696 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (8)].c), "Union")){ int t = (int)(yyvsp[(4) - (8)].d); @@ -9500,7 +9142,7 @@ yyreduce: break; case 226: -#line 2843 "Gmsh.y" +#line 2801 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){ int t = (int)(yyvsp[(4) - (8)].d); @@ -9519,7 +9161,7 @@ yyreduce: break; case 227: -#line 2859 "Gmsh.y" +#line 2817 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){ int t = (int)(yyvsp[(4) - (6)].d); @@ -9552,35 +9194,57 @@ yyreduce: break; case 228: -#line 2894 "Gmsh.y" +#line 2852 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), dimTags); - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + bool changed = false; + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ GModel::current()->getOCCInternals()->remove(dimTags); + changed = GModel::current()->getOCCInternals()->getChanged(); + if(changed) + GModel::current()->getOCCInternals()->synchronize(GModel::current()); + } + else{ + GModel::current()->getGEOInternals()->remove(dimTags); + changed = GModel::current()->getGEOInternals()->getChanged(); + if(changed) + GModel::current()->getGEOInternals()->synchronize(GModel::current()); + } + if(!changed){ + GModel::current()->remove(dimTags); } - GModel::current()->getGEOInternals()->remove(dimTags); - GModel::current()->remove(dimTags); List_Delete((yyvsp[(3) - (4)].l)); ;} break; case 229: -#line 2905 "Gmsh.y" +#line 2874 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + bool changed = false; + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ GModel::current()->getOCCInternals()->remove(dimTags, true); + changed = GModel::current()->getOCCInternals()->getChanged(); + if(changed) + GModel::current()->getOCCInternals()->synchronize(GModel::current()); + } + else{ + GModel::current()->getGEOInternals()->remove(dimTags, true); + changed = GModel::current()->getGEOInternals()->getChanged(); + if(changed) + GModel::current()->getGEOInternals()->synchronize(GModel::current()); + } + if(!changed){ + GModel::current()->remove(dimTags, true); } - GModel::current()->getGEOInternals()->remove(dimTags, true); - GModel::current()->remove(dimTags, true); List_Delete((yyvsp[(4) - (5)].l)); ;} break; case 230: -#line 2916 "Gmsh.y" +#line 2896 "Gmsh.y" { #if defined(HAVE_MESH) GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d)); @@ -9589,7 +9253,7 @@ yyreduce: break; case 231: -#line 2922 "Gmsh.y" +#line 2902 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(2) - (6)].c), "View")){ @@ -9607,7 +9271,7 @@ yyreduce: break; case 232: -#line 2937 "Gmsh.y" +#line 2917 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){ ClearProject(); @@ -9638,7 +9302,7 @@ yyreduce: break; case 233: -#line 2965 "Gmsh.y" +#line 2945 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){ @@ -9653,14 +9317,14 @@ yyreduce: break; case 234: -#line 2977 "Gmsh.y" +#line 2957 "Gmsh.y" { - nameSpaces.clear(); + gmsh_yynamespaces.clear(); ;} break; case 235: -#line 2986 "Gmsh.y" +#line 2966 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); @@ -9670,7 +9334,7 @@ yyreduce: break; case 236: -#line 2993 "Gmsh.y" +#line 2973 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(5) - (6)].l), dimTags); @@ -9680,7 +9344,7 @@ yyreduce: break; case 237: -#line 3005 "Gmsh.y" +#line 2985 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); @@ -9697,7 +9361,7 @@ yyreduce: break; case 238: -#line 3024 "Gmsh.y" +#line 3004 "Gmsh.y" { std::string what = (yyvsp[(2) - (3)].c); setVisibility(-1, 1, false); @@ -9706,7 +9370,7 @@ yyreduce: break; case 239: -#line 3030 "Gmsh.y" +#line 3010 "Gmsh.y" { std::string what = (yyvsp[(2) - (3)].c); setVisibility(-1, 0, false); @@ -9715,7 +9379,7 @@ yyreduce: break; case 240: -#line 3036 "Gmsh.y" +#line 3016 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), dimTags); @@ -9725,7 +9389,7 @@ yyreduce: break; case 241: -#line 3043 "Gmsh.y" +#line 3023 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); @@ -9735,7 +9399,7 @@ yyreduce: break; case 242: -#line 3050 "Gmsh.y" +#line 3030 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), dimTags); @@ -9745,7 +9409,7 @@ yyreduce: break; case 243: -#line 3057 "Gmsh.y" +#line 3037 "Gmsh.y" { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags); @@ -9755,7 +9419,7 @@ yyreduce: break; case 244: -#line 3069 "Gmsh.y" +#line 3049 "Gmsh.y" { if(!strcmp((yyvsp[(1) - (3)].c), "Include")){ std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c)); @@ -9831,7 +9495,7 @@ yyreduce: break; case 245: -#line 3142 "Gmsh.y" +#line 3122 "Gmsh.y" { int n = List_Nbr((yyvsp[(3) - (5)].l)); if(n == 1){ @@ -9852,7 +9516,7 @@ yyreduce: break; case 246: -#line 3160 "Gmsh.y" +#line 3140 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){ @@ -9872,7 +9536,7 @@ yyreduce: break; case 247: -#line 3177 "Gmsh.y" +#line 3157 "Gmsh.y" { #if defined(HAVE_POST) && defined(HAVE_MESH) if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh") && !strcmp((yyvsp[(3) - (7)].c), "View")){ @@ -9890,7 +9554,7 @@ yyreduce: break; case 248: -#line 3192 "Gmsh.y" +#line 3172 "Gmsh.y" { if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){ SleepInSeconds((yyvsp[(2) - (3)].d)); @@ -9926,7 +9590,7 @@ yyreduce: break; case 249: -#line 3225 "Gmsh.y" +#line 3205 "Gmsh.y" { #if defined(HAVE_PLUGINS) try { @@ -9941,7 +9605,7 @@ yyreduce: break; case 250: -#line 3237 "Gmsh.y" +#line 3217 "Gmsh.y" { #if defined(HAVE_POST) if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews")) @@ -9968,14 +9632,14 @@ yyreduce: break; case 251: -#line 3261 "Gmsh.y" +#line 3241 "Gmsh.y" { Msg::Exit(0); ;} break; case 252: -#line 3265 "Gmsh.y" +#line 3245 "Gmsh.y" { gmsh_yyerrorstate = 999; // this will be checked when yyparse returns YYABORT; @@ -9983,7 +9647,7 @@ yyreduce: break; case 253: -#line 3270 "Gmsh.y" +#line 3250 "Gmsh.y" { // force sync if(GModel::current()->getOCCInternals()) @@ -9993,7 +9657,7 @@ yyreduce: break; case 254: -#line 3277 "Gmsh.y" +#line 3257 "Gmsh.y" { new GModel(); GModel::current(GModel::list.size() - 1); @@ -10001,7 +9665,7 @@ yyreduce: break; case 255: -#line 3282 "Gmsh.y" +#line 3262 "Gmsh.y" { CTX::instance()->forcedBBox = 0; if(GModel::current()->getOCCInternals() && @@ -10014,7 +9678,7 @@ yyreduce: break; case 256: -#line 3292 "Gmsh.y" +#line 3272 "Gmsh.y" { CTX::instance()->forcedBBox = 1; SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d)); @@ -10022,7 +9686,7 @@ yyreduce: break; case 257: -#line 3297 "Gmsh.y" +#line 3277 "Gmsh.y" { #if defined(HAVE_OPENGL) drawContext::global()->draw(); @@ -10031,7 +9695,7 @@ yyreduce: break; case 258: -#line 3303 "Gmsh.y" +#line 3283 "Gmsh.y" { #if defined(HAVE_OPENGL) CTX::instance()->mesh.changed = ENT_ALL; @@ -10042,21 +9706,21 @@ yyreduce: break; case 259: -#line 3311 "Gmsh.y" +#line 3291 "Gmsh.y" { GModel::current()->createTopologyFromMesh(); ;} break; case 260: -#line 3315 "Gmsh.y" +#line 3295 "Gmsh.y" { GModel::current()->createTopologyFromMesh(1); ;} break; case 261: -#line 3319 "Gmsh.y" +#line 3299 "Gmsh.y" { if(GModel::current()->getOCCInternals() && GModel::current()->getOCCInternals()->getChanged()) @@ -10068,7 +9732,7 @@ yyreduce: break; case 262: -#line 3329 "Gmsh.y" +#line 3309 "Gmsh.y" { int lock = CTX::instance()->lock; CTX::instance()->lock = 0; @@ -10129,7 +9793,7 @@ yyreduce: break; case 263: -#line 3392 "Gmsh.y" +#line 3372 "Gmsh.y" { #if defined(HAVE_POPPLER) std::vector<int> is; @@ -10144,7 +9808,7 @@ yyreduce: break; case 264: -#line 3408 "Gmsh.y" +#line 3388 "Gmsh.y" { LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d); LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d); @@ -10164,7 +9828,7 @@ yyreduce: break; case 265: -#line 3425 "Gmsh.y" +#line 3405 "Gmsh.y" { LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d); LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d); @@ -10184,7 +9848,7 @@ yyreduce: break; case 266: -#line 3442 "Gmsh.y" +#line 3422 "Gmsh.y" { LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d); LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d); @@ -10209,7 +9873,7 @@ yyreduce: break; case 267: -#line 3464 "Gmsh.y" +#line 3444 "Gmsh.y" { LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d); LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d); @@ -10234,7 +9898,7 @@ yyreduce: break; case 268: -#line 3486 "Gmsh.y" +#line 3466 "Gmsh.y" { if(ImbricatedLoop <= 0){ yymsg(0, "Invalid For/EndFor loop"); @@ -10272,7 +9936,7 @@ yyreduce: break; case 269: -#line 3521 "Gmsh.y" +#line 3501 "Gmsh.y" { if(!FunctionManager::Instance()->createFunction (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno)) @@ -10283,7 +9947,7 @@ yyreduce: break; case 270: -#line 3529 "Gmsh.y" +#line 3509 "Gmsh.y" { if(!FunctionManager::Instance()->createFunction (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno)) @@ -10294,7 +9958,7 @@ yyreduce: break; case 271: -#line 3537 "Gmsh.y" +#line 3517 "Gmsh.y" { if(!FunctionManager::Instance()->leaveFunction (&gmsh_yyin, gmsh_yyname, gmsh_yylineno)) @@ -10303,7 +9967,7 @@ yyreduce: break; case 272: -#line 3543 "Gmsh.y" +#line 3523 "Gmsh.y" { if(!FunctionManager::Instance()->enterFunction (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno)) @@ -10313,7 +9977,7 @@ yyreduce: break; case 273: -#line 3550 "Gmsh.y" +#line 3530 "Gmsh.y" { if(!FunctionManager::Instance()->enterFunction (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno)) @@ -10323,7 +9987,7 @@ yyreduce: break; case 274: -#line 3557 "Gmsh.y" +#line 3537 "Gmsh.y" { ImbricatedTest++; if(ImbricatedTest > MAX_RECUR_TESTS-1){ @@ -10346,7 +10010,7 @@ yyreduce: break; case 275: -#line 3577 "Gmsh.y" +#line 3557 "Gmsh.y" { if(ImbricatedTest > 0){ if (statusImbricatedTests[ImbricatedTest]){ @@ -10375,7 +10039,7 @@ yyreduce: break; case 276: -#line 3603 "Gmsh.y" +#line 3583 "Gmsh.y" { if(ImbricatedTest > 0){ if(statusImbricatedTests[ImbricatedTest]){ @@ -10390,7 +10054,7 @@ yyreduce: break; case 277: -#line 3615 "Gmsh.y" +#line 3595 "Gmsh.y" { ImbricatedTest--; if(ImbricatedTest < 0) @@ -10399,12 +10063,12 @@ yyreduce: break; case 278: -#line 3627 "Gmsh.y" +#line 3606 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->extrude (inDimTags, (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], outDimTags); } @@ -10420,12 +10084,12 @@ yyreduce: break; case 279: -#line 3645 "Gmsh.y" +#line 3624 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(10) - (11)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->revolve (inDimTags, (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(7) - (11)].d), outDimTags); } @@ -10441,13 +10105,13 @@ yyreduce: break; case 280: -#line 3663 "Gmsh.y" +#line 3642 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(12) - (13)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Twisting extrude not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Twisting extrude not available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->twist @@ -10462,7 +10126,7 @@ yyreduce: break; case 281: -#line 3681 "Gmsh.y" +#line 3660 "Gmsh.y" { extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false; extr.mesh.QuadToTri = NO_QUADTRI; @@ -10471,12 +10135,12 @@ yyreduce: break; case 282: -#line 3687 "Gmsh.y" +#line 3666 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(4) - (7)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->extrude (inDimTags, (yyvsp[(2) - (7)].v)[0], (yyvsp[(2) - (7)].v)[1], (yyvsp[(2) - (7)].v)[2], outDimTags, &extr); } @@ -10492,7 +10156,7 @@ yyreduce: break; case 283: -#line 3705 "Gmsh.y" +#line 3684 "Gmsh.y" { extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false; extr.mesh.QuadToTri = NO_QUADTRI; @@ -10501,12 +10165,12 @@ yyreduce: break; case 284: -#line 3711 "Gmsh.y" +#line 3690 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(10) - (13)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->revolve (inDimTags, (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(7) - (13)].d), outDimTags, &extr); @@ -10524,7 +10188,7 @@ yyreduce: break; case 285: -#line 3731 "Gmsh.y" +#line 3710 "Gmsh.y" { extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false; extr.mesh.QuadToTri = NO_QUADTRI; @@ -10533,13 +10197,13 @@ yyreduce: break; case 286: -#line 3737 "Gmsh.y" +#line 3716 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(12) - (15)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Twisting extrude not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Twisting extrude not available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->twist @@ -10554,7 +10218,7 @@ yyreduce: break; case 287: -#line 3755 "Gmsh.y" +#line 3734 "Gmsh.y" { extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false; extr.mesh.QuadToTri = NO_QUADTRI; @@ -10563,13 +10227,13 @@ yyreduce: break; case 288: -#line 3761 "Gmsh.y" +#line 3740 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(3) - (6)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Boundary layer extrusion not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Boundary layer extrusion not available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->boundaryLayer @@ -10583,16 +10247,16 @@ yyreduce: break; case 289: -#line 3778 "Gmsh.y" +#line 3757 "Gmsh.y" { std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs((yyvsp[(3) - (9)].l), inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addPipe(inDimTags, (int)(yyvsp[(8) - (9)].d), outDimTags); } else{ - yymsg(0, "Pipe only available with OpenCASCADE factory"); + yymsg(0, "Pipe only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not extrude shapes"); (yyval.l) = (yyvsp[(3) - (9)].l); @@ -10602,19 +10266,19 @@ yyreduce: break; case 290: -#line 3794 "Gmsh.y" +#line 3773 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<int> wires; ListOfDouble2Vector((yyvsp[(2) - (2)].l), wires); std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (-1, wires, outDimTags, false, false); + (-1, wires, false, false, outDimTags); VectorOfPairs2ListOfShapes(outDimTags, (yyval.l)); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add thrusections"); List_Delete((yyvsp[(2) - (2)].l)); @@ -10622,19 +10286,19 @@ yyreduce: break; case 291: -#line 3811 "Gmsh.y" +#line 3790 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<int> wires; ListOfDouble2Vector((yyvsp[(3) - (3)].l), wires); std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (-1, wires, outDimTags, false, true); + (-1, wires, false, true, outDimTags); VectorOfPairs2ListOfShapes(outDimTags, (yyval.l)); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add ruled thrusections"); List_Delete((yyvsp[(3) - (3)].l)); @@ -10642,21 +10306,21 @@ yyreduce: break; case 292: -#line 3828 "Gmsh.y" +#line 3807 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ double radius = (yyvsp[(9) - (10)].d); std::vector<int> regions, edges; ListOfDouble2Vector((yyvsp[(3) - (10)].l), regions); ListOfDouble2Vector((yyvsp[(6) - (10)].l), edges); std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->fillet - (regions, edges, radius, outDimTags); + (regions, edges, radius, outDimTags, true); VectorOfPairs2ListOfShapes(outDimTags, (yyval.l)); } else{ - yymsg(0, "Fillet only available with OpenCASCADE factory"); + yymsg(0, "Fillet only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not fillet shapes"); List_Delete((yyvsp[(3) - (10)].l)); @@ -10665,19 +10329,19 @@ yyreduce: break; case 293: -#line 3851 "Gmsh.y" +#line 3830 "Gmsh.y" { ;} break; case 294: -#line 3854 "Gmsh.y" +#line 3833 "Gmsh.y" { ;} break; case 295: -#line 3860 "Gmsh.y" +#line 3839 "Gmsh.y" { int n = (int)fabs((yyvsp[(3) - (5)].d)); if(n){ // we accept n==0 to easily disable layers @@ -10692,7 +10356,7 @@ yyreduce: break; case 296: -#line 3872 "Gmsh.y" +#line 3851 "Gmsh.y" { extr.mesh.ExtrudeMesh = true; extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l)); @@ -10715,56 +10379,56 @@ yyreduce: break; case 297: -#line 3892 "Gmsh.y" +#line 3871 "Gmsh.y" { extr.mesh.ScaleLast = true; ;} break; case 298: -#line 3896 "Gmsh.y" +#line 3875 "Gmsh.y" { extr.mesh.Recombine = true; ;} break; case 299: -#line 3900 "Gmsh.y" +#line 3879 "Gmsh.y" { extr.mesh.Recombine = (yyvsp[(2) - (3)].d) ? true : false; ;} break; case 300: -#line 3904 "Gmsh.y" +#line 3883 "Gmsh.y" { extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1; ;} break; case 301: -#line 3908 "Gmsh.y" +#line 3887 "Gmsh.y" { extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB; ;} break; case 302: -#line 3912 "Gmsh.y" +#line 3891 "Gmsh.y" { extr.mesh.QuadToTri = QUADTRI_NOVERTS_1; ;} break; case 303: -#line 3916 "Gmsh.y" +#line 3895 "Gmsh.y" { extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB; ;} break; case 304: -#line 3920 "Gmsh.y" +#line 3899 "Gmsh.y" { std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (9)].l), tags); int num = (int)(yyvsp[(3) - (9)].d); @@ -10776,7 +10440,7 @@ yyreduce: break; case 305: -#line 3929 "Gmsh.y" +#line 3908 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (6)].c), "Index")) extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d); @@ -10787,73 +10451,73 @@ yyreduce: break; case 306: -#line 3941 "Gmsh.y" +#line 3920 "Gmsh.y" { (yyval.i) = OCC_Internals::Union; ;} break; case 307: -#line 3942 "Gmsh.y" +#line 3921 "Gmsh.y" { (yyval.i) = OCC_Internals::Intersection; ;} break; case 308: -#line 3943 "Gmsh.y" +#line 3922 "Gmsh.y" { (yyval.i) = OCC_Internals::Difference; ;} break; case 309: -#line 3944 "Gmsh.y" +#line 3923 "Gmsh.y" { (yyval.i) = OCC_Internals::Section; ;} break; case 310: -#line 3945 "Gmsh.y" +#line 3924 "Gmsh.y" { (yyval.i) = OCC_Internals::Fragments; ;} break; case 311: -#line 3949 "Gmsh.y" +#line 3928 "Gmsh.y" { (yyval.i) = 0; ;} break; case 312: -#line 3950 "Gmsh.y" +#line 3929 "Gmsh.y" { (yyval.i) = 1; ;} break; case 313: -#line 3951 "Gmsh.y" +#line 3930 "Gmsh.y" { (yyval.i) = 2; ;} break; case 314: -#line 3952 "Gmsh.y" +#line 3931 "Gmsh.y" { (yyval.i) = (yyvsp[(2) - (3)].d) ? 1 : 0; ;} break; case 315: -#line 3953 "Gmsh.y" +#line 3932 "Gmsh.y" { (yyval.i) = (yyvsp[(3) - (4)].d) ? 2 : 0; ;} break; case 316: -#line 3958 "Gmsh.y" +#line 3937 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int > > object, tool, out; ListOfShapes2VectorOfPairs((yyvsp[(3) - (9)].l), object); ListOfShapes2VectorOfPairs((yyvsp[(7) - (9)].l), tool); // currently we don't distinguish between Delete and Recursive Delete: // we always delete recursively. Let us know if you have examples where // having the choice would be interesting - r = GModel::current()->getOCCInternals()->applyBooleanOperator + r = GModel::current()->getOCCInternals()->booleanOperator (-1, (OCC_Internals::BooleanOperator)(yyvsp[(1) - (9)].i), object, tool, out, (yyvsp[(4) - (9)].i), (yyvsp[(8) - (9)].i)); VectorOfPairs2ListOfShapes(out, (yyval.l)); } else{ - yymsg(0, "Boolean operators only available with OpenCASCADE factory"); + yymsg(0, "Boolean operators only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not apply boolean operator"); List_Delete((yyvsp[(3) - (9)].l)); @@ -10862,18 +10526,18 @@ yyreduce: break; case 317: -#line 3980 "Gmsh.y" +#line 3959 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > out; std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c)); GModel::current()->getOCCInternals()->importShapes(tmp, true, out); VectorOfPairs2ListOfShapes(out, (yyval.l)); } else{ - yymsg(0, "ShapeFromFile only available with OpenCASCADE factory"); + yymsg(0, "ShapeFromFile only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could import shape"); Free((yyvsp[(3) - (4)].c)); @@ -10881,17 +10545,17 @@ yyreduce: break; case 318: -#line 4000 "Gmsh.y" +#line 3979 "Gmsh.y" { bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > object, tool, out; ListOfShapes2VectorOfPairs((yyvsp[(7) - (14)].l), object); ListOfShapes2VectorOfPairs((yyvsp[(11) - (14)].l), tool); // currently we don't distinguish between Delete and Recursive Delete: // we always delete recursively. Let us know if you have examples where // having the choice would be interesting - r = GModel::current()->getOCCInternals()->applyBooleanOperator + r = GModel::current()->getOCCInternals()->booleanOperator ((int)(yyvsp[(3) - (14)].d), (OCC_Internals::BooleanOperator)(yyvsp[(1) - (14)].i), object, tool, out, (yyvsp[(8) - (14)].i), (yyvsp[(12) - (14)].i)); } if(!r) yymsg(0, "Could not apply boolean operator"); @@ -10901,14 +10565,14 @@ yyreduce: break; case 319: -#line 4020 "Gmsh.y" +#line 3999 "Gmsh.y" { (yyval.v)[0] = (yyval.v)[1] = 1.; ;} break; case 320: -#line 4024 "Gmsh.y" +#line 4003 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power")) (yyval.v)[0] = 1.; @@ -10924,14 +10588,14 @@ yyreduce: break; case 321: -#line 4039 "Gmsh.y" +#line 4018 "Gmsh.y" { (yyval.i) = -1; // left ;} break; case 322: -#line 4043 "Gmsh.y" +#line 4022 "Gmsh.y" { if(!strcmp((yyvsp[(1) - (1)].c), "Right")) (yyval.i) = 1; @@ -10948,49 +10612,49 @@ yyreduce: break; case 323: -#line 4059 "Gmsh.y" +#line 4038 "Gmsh.y" { (yyval.l) = List_Create(1, 1, sizeof(double)); ;} break; case 324: -#line 4063 "Gmsh.y" +#line 4042 "Gmsh.y" { (yyval.l) = (yyvsp[(2) - (2)].l); ;} break; case 325: -#line 4068 "Gmsh.y" +#line 4047 "Gmsh.y" { (yyval.i) = 45; ;} break; case 326: -#line 4072 "Gmsh.y" +#line 4051 "Gmsh.y" { (yyval.i) = (int)(yyvsp[(2) - (2)].d); ;} break; case 327: -#line 4078 "Gmsh.y" +#line 4057 "Gmsh.y" { (yyval.l) = List_Create(1, 1, sizeof(double)); ;} break; case 328: -#line 4082 "Gmsh.y" +#line 4061 "Gmsh.y" { (yyval.l) = (yyvsp[(2) - (2)].l); ;} break; case 329: -#line 4089 "Gmsh.y" +#line 4068 "Gmsh.y" { // mesh sizes at vertices are stored in internal CAD data, as they can be // specified during vertex creation and copied around during CAD @@ -11010,7 +10674,7 @@ yyreduce: break; case 330: -#line 4106 "Gmsh.y" +#line 4085 "Gmsh.y" { // transfinite constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11054,7 +10718,7 @@ yyreduce: break; case 331: -#line 4147 "Gmsh.y" +#line 4126 "Gmsh.y" { // transfinite constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11101,7 +10765,7 @@ yyreduce: break; case 332: -#line 4191 "Gmsh.y" +#line 4170 "Gmsh.y" { // transfinite constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11143,7 +10807,7 @@ yyreduce: break; case 333: -#line 4230 "Gmsh.y" +#line 4209 "Gmsh.y" { // transfinite constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11171,7 +10835,7 @@ yyreduce: break; case 334: -#line 4255 "Gmsh.y" +#line 4234 "Gmsh.y" { for(int i = 0; i < List_Nbr((yyvsp[(4) - (8)].l)); i++){ double d; @@ -11183,7 +10847,7 @@ yyreduce: break; case 335: -#line 4264 "Gmsh.y" +#line 4243 "Gmsh.y" { // recombine constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11216,7 +10880,7 @@ yyreduce: break; case 336: -#line 4294 "Gmsh.y" +#line 4273 "Gmsh.y" { // recombine constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11245,7 +10909,7 @@ yyreduce: break; case 337: -#line 4320 "Gmsh.y" +#line 4299 "Gmsh.y" { // smoothing constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -11274,7 +10938,7 @@ yyreduce: break; case 338: -#line 4347 "Gmsh.y" +#line 4326 "Gmsh.y" { if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){ yymsg(0, "Number of master lines (%d) different from number of " @@ -11308,7 +10972,7 @@ yyreduce: break; case 339: -#line 4379 "Gmsh.y" +#line 4358 "Gmsh.y" { if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){ yymsg(0, "Number of master faces (%d) different from number of " @@ -11337,7 +11001,7 @@ yyreduce: break; case 340: -#line 4406 "Gmsh.y" +#line 4385 "Gmsh.y" { if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){ yymsg(0, "Number of master edges (%d) different from number of " @@ -11365,7 +11029,7 @@ yyreduce: break; case 341: -#line 4432 "Gmsh.y" +#line 4411 "Gmsh.y" { if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){ yymsg(0, "Number of master faces (%d) different from number of " @@ -11393,7 +11057,7 @@ yyreduce: break; case 342: -#line 4458 "Gmsh.y" +#line 4437 "Gmsh.y" { if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){ yymsg(0, "Number of master edges (%d) different from number of " @@ -11421,222 +11085,176 @@ yyreduce: break; case 343: -#line 4484 "Gmsh.y" +#line 4463 "Gmsh.y" { if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){ yymsg(0, "Number of master faces (%d) different from number of " "slaves (%d) ", List_Nbr((yyvsp[(8) - (12)].l)), List_Nbr((yyvsp[(4) - (12)].l))); - } - else{ - SPoint3 origin(0,0,0); - SPoint3 axis(0,0,0); - double angle(0); - SPoint3 translation((yyvsp[(11) - (12)].v)[0],(yyvsp[(11) - (12)].v)[1],(yyvsp[(11) - (12)].v)[2]); - - std::vector<double> transfo; - computeAffineTransformation(origin,axis,angle,translation,transfo); - - for(int i = 0; i < List_Nbr((yyvsp[(4) - (12)].l)); i++){ - double d_master, d_slave; - List_Read((yyvsp[(8) - (12)].l), i, &d_master); - List_Read((yyvsp[(4) - (12)].l), i, &d_slave); - addPeriodicFace(d_slave, d_master, transfo); - } - } - List_Delete((yyvsp[(4) - (12)].l)); - List_Delete((yyvsp[(8) - (12)].l)); - ;} - break; - - case 344: -#line 4510 "Gmsh.y" - { - if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){ - yymsg(0, "Number of master surface edges (%d) different from number of " - "slave (%d) edges", List_Nbr((yyvsp[(10) - (12)].l)), List_Nbr((yyvsp[(5) - (12)].l))); - } - else{ - int j_master = (int)(yyvsp[(8) - (12)].d); - int j_slave = (int)(yyvsp[(3) - (12)].d); - std::map<int,int> edgeCounterParts; - for (int i = 0; i < List_Nbr((yyvsp[(5) - (12)].l)); i++){ - double ds,dm; - List_Read((yyvsp[(5) - (12)].l),i,&ds); - List_Read((yyvsp[(10) - (12)].l),i,&dm); - edgeCounterParts[(int) ds] = (int) dm; - } - addPeriodicFace(j_slave, j_master, edgeCounterParts); - } - List_Delete((yyvsp[(5) - (12)].l)); - List_Delete((yyvsp[(10) - (12)].l)); - ;} - break; - - case 345: -#line 4531 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags); - addEmbedded(0, tags, 2, (int)(yyvsp[(8) - (10)].d)); - List_Delete((yyvsp[(3) - (10)].l)); - ;} - break; - - case 346: -#line 4537 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags); - addEmbedded(1, tags, 2, (int)(yyvsp[(8) - (10)].d)); - List_Delete((yyvsp[(3) - (10)].l)); - ;} - break; - - case 347: -#line 4543 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags); - addEmbedded(0, tags, 3, (int)(yyvsp[(8) - (10)].d)); - List_Delete((yyvsp[(3) - (10)].l)); - ;} - break; - - case 348: -#line 4549 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags); - addEmbedded(1, tags, 3, (int)(yyvsp[(8) - (10)].d)); - List_Delete((yyvsp[(3) - (10)].l)); - ;} - break; - - case 349: -#line 4555 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags); - addEmbedded(2, tags, 3, (int)(yyvsp[(8) - (10)].d)); - List_Delete((yyvsp[(3) - (10)].l)); - ;} - break; - - case 350: -#line 4561 "Gmsh.y" - { - // reverse mesh constraints are stored in GEO internals in addition to - // GModel, as they can be copied around during GEO operations - if(GModel::current()->getOCCInternals() && - GModel::current()->getOCCInternals()->getChanged()) - GModel::current()->getOCCInternals()->synchronize(GModel::current()); - if(!(yyvsp[(3) - (4)].l)){ - GModel::current()->getGEOInternals()->setReverseMesh(2, 0); - for(GModel::fiter it = GModel::current()->firstFace(); - it != GModel::current()->lastFace(); it++){ - (*it)->meshAttributes.reverseMesh = 1; - } - } - else{ - for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ - double d; - List_Read((yyvsp[(3) - (4)].l), i, &d); - int num = (int)d; - GModel::current()->getGEOInternals()->setReverseMesh(2, num); - GFace *gf = GModel::current()->getFaceByTag(num); - if(gf) gf->meshAttributes.reverseMesh = 1; + } + else{ + SPoint3 origin(0,0,0); + SPoint3 axis(0,0,0); + double angle(0); + SPoint3 translation((yyvsp[(11) - (12)].v)[0],(yyvsp[(11) - (12)].v)[1],(yyvsp[(11) - (12)].v)[2]); + + std::vector<double> transfo; + computeAffineTransformation(origin,axis,angle,translation,transfo); + + for(int i = 0; i < List_Nbr((yyvsp[(4) - (12)].l)); i++){ + double d_master, d_slave; + List_Read((yyvsp[(8) - (12)].l), i, &d_master); + List_Read((yyvsp[(4) - (12)].l), i, &d_slave); + addPeriodicFace(d_slave, d_master, transfo); } - List_Delete((yyvsp[(3) - (4)].l)); } + List_Delete((yyvsp[(4) - (12)].l)); + List_Delete((yyvsp[(8) - (12)].l)); ;} break; - case 351: -#line 4587 "Gmsh.y" + case 344: +#line 4489 "Gmsh.y" { - // reverse mesh constraints are stored in GEO internals in addition to - // GModel, as they can be copied around during GEO operations - if(GModel::current()->getOCCInternals() && - GModel::current()->getOCCInternals()->getChanged()) - GModel::current()->getOCCInternals()->synchronize(GModel::current()); - if(!(yyvsp[(3) - (4)].l)){ - GModel::current()->getGEOInternals()->setReverseMesh(1, 0); - for(GModel::eiter it = GModel::current()->firstEdge(); - it != GModel::current()->lastEdge(); it++){ - (*it)->meshAttributes.reverseMesh = 1; - } + if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){ + yymsg(0, "Number of master surface edges (%d) different from number of " + "slave (%d) edges", List_Nbr((yyvsp[(10) - (12)].l)), List_Nbr((yyvsp[(5) - (12)].l))); } else{ - for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ - double d; - List_Read((yyvsp[(3) - (4)].l), i, &d); - int num = (int)d; - GModel::current()->getGEOInternals()->setReverseMesh(1, num); - GEdge *ge = GModel::current()->getEdgeByTag(num); - if(ge) ge->meshAttributes.reverseMesh = 1; + int j_master = (int)(yyvsp[(8) - (12)].d); + int j_slave = (int)(yyvsp[(3) - (12)].d); + std::map<int,int> edgeCounterParts; + for (int i = 0; i < List_Nbr((yyvsp[(5) - (12)].l)); i++){ + double ds,dm; + List_Read((yyvsp[(5) - (12)].l),i,&ds); + List_Read((yyvsp[(10) - (12)].l),i,&dm); + edgeCounterParts[(int) ds] = (int) dm; } - List_Delete((yyvsp[(3) - (4)].l)); + addPeriodicFace(j_slave, j_master, edgeCounterParts); } + List_Delete((yyvsp[(5) - (12)].l)); + List_Delete((yyvsp[(10) - (12)].l)); ;} break; - case 352: -#line 4613 "Gmsh.y" + case 345: +#line 4510 "Gmsh.y" { - if(!(yyvsp[(3) - (4)].l)){ - for(GModel::viter it = GModel::current()->firstVertex(); - it != GModel::current()->lastVertex(); it++) - (*it)->relocateMeshVertices(); + if (((yyvsp[(6) - (10)].i)==2 || (yyvsp[(6) - (10)].i)==3) && (yyvsp[(1) - (10)].i)<(yyvsp[(6) - (10)].i) ) { + std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags); + addEmbedded((yyvsp[(1) - (10)].i), tags, (yyvsp[(6) - (10)].i), (int)(yyvsp[(8) - (10)].d)); } - else{ - for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ - double d; - List_Read((yyvsp[(3) - (4)].l), i, &d); - GVertex *gv = GModel::current()->getVertexByTag((int)d); - if(gv) gv->relocateMeshVertices(); - } - List_Delete((yyvsp[(3) - (4)].l)); + else { + yymsg(0, "GeoEntity of dim %d In GeoEntity of dim %d not allowed", (yyvsp[(1) - (10)].i), (yyvsp[(6) - (10)].i)); } + List_Delete((yyvsp[(3) - (10)].l)); ;} break; - case 353: -#line 4630 "Gmsh.y" + case 346: +#line 4521 "Gmsh.y" { + // reverse mesh constraints are stored in GEO internals in addition to + // GModel, as they can be copied around during GEO operations + if(GModel::current()->getOCCInternals() && + GModel::current()->getOCCInternals()->getChanged()) + GModel::current()->getOCCInternals()->synchronize(GModel::current()); if(!(yyvsp[(3) - (4)].l)){ - for(GModel::eiter it = GModel::current()->firstEdge(); - it != GModel::current()->lastEdge(); it++) - (*it)->relocateMeshVertices(); + GModel::current()->getGEOInternals()->setReverseMesh((yyvsp[(2) - (4)].i), 0); + switch ((yyvsp[(2) - (4)].i)) { + case 1: + for(GModel::eiter it = GModel::current()->firstEdge(); + it != GModel::current()->lastEdge(); it++){ + (*it)->meshAttributes.reverseMesh = 1; + } + break; + case 2: + for(GModel::fiter it = GModel::current()->firstFace(); + it != GModel::current()->lastFace(); it++){ + (*it)->meshAttributes.reverseMesh = 1; + } + break; + } } else{ for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ double d; List_Read((yyvsp[(3) - (4)].l), i, &d); - GEdge *ge = GModel::current()->getEdgeByTag((int)d); - if(ge) ge->relocateMeshVertices(); + int num = (int)d; + GModel::current()->getGEOInternals()->setReverseMesh((yyvsp[(2) - (4)].i), num); + switch ((yyvsp[(2) - (4)].i)) { + case 1: + { + GEdge *ge = GModel::current()->getEdgeByTag(num); + if(ge) ge->meshAttributes.reverseMesh = 1; + } + break; + case 2: + { + GFace *gf = GModel::current()->getFaceByTag(num); + if(gf) gf->meshAttributes.reverseMesh = 1; + } + break; + } } List_Delete((yyvsp[(3) - (4)].l)); } ;} break; - case 354: -#line 4647 "Gmsh.y" + case 347: +#line 4569 "Gmsh.y" { if(!(yyvsp[(3) - (4)].l)){ - for(GModel::fiter it = GModel::current()->firstFace(); - it != GModel::current()->lastFace(); it++) - (*it)->relocateMeshVertices(); + switch ((yyvsp[(2) - (4)].i)) { + case 0: + for(GModel::viter it = GModel::current()->firstVertex(); + it != GModel::current()->lastVertex(); it++) + (*it)->relocateMeshVertices(); + break; + case 1: + for(GModel::eiter it = GModel::current()->firstEdge(); + it != GModel::current()->lastEdge(); it++) + (*it)->relocateMeshVertices(); + break; + case 2: + for(GModel::fiter it = GModel::current()->firstFace(); + it != GModel::current()->lastFace(); it++) + (*it)->relocateMeshVertices(); + break; + } } else{ for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ double d; List_Read((yyvsp[(3) - (4)].l), i, &d); - GFace *gf = GModel::current()->getFaceByTag((int)d); - if(gf) gf->relocateMeshVertices(); + switch ((yyvsp[(2) - (4)].i)) { + case 0: + { + GVertex *gv = GModel::current()->getVertexByTag((int)d); + if(gv) gv->relocateMeshVertices(); + } + break; + case 1: + { + GEdge *ge = GModel::current()->getEdgeByTag((int)d); + if(ge) ge->relocateMeshVertices(); + } + break; + case 2: + { + GFace *gf = GModel::current()->getFaceByTag((int)d); + if(gf) gf->relocateMeshVertices(); + } + break; + } } List_Delete((yyvsp[(3) - (4)].l)); } ;} break; - case 355: -#line 4664 "Gmsh.y" + case 348: +#line 4618 "Gmsh.y" { for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ double dnum; @@ -11650,42 +11268,24 @@ yyreduce: ;} break; - case 356: -#line 4676 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags); - GModel::current()->getGEOInternals()->setCompoundMesh(1, tags); - List_Delete((yyvsp[(3) - (4)].l)); - ;} - break; - - case 357: -#line 4682 "Gmsh.y" - { - std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags); - GModel::current()->getGEOInternals()->setCompoundMesh(2, tags); - List_Delete((yyvsp[(3) - (4)].l)); - ;} - break; - - case 358: -#line 4688 "Gmsh.y" + case 349: +#line 4630 "Gmsh.y" { std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags); - GModel::current()->getGEOInternals()->setCompoundMesh(3, tags); + GModel::current()->getGEOInternals()->setCompoundMesh((yyvsp[(2) - (4)].i), tags); List_Delete((yyvsp[(3) - (4)].l)); ;} break; - case 359: -#line 4700 "Gmsh.y" + case 350: +#line 4641 "Gmsh.y" { GModel::current()->getGEOInternals()->removeAllDuplicates(); ;} break; - case 360: -#line 4704 "Gmsh.y" + case 351: +#line 4645 "Gmsh.y" { if(!strcmp((yyvsp[(2) - (3)].c), "Geometry")) GModel::current()->getGEOInternals()->removeAllDuplicates(); @@ -11697,8 +11297,8 @@ yyreduce: ;} break; - case 361: -#line 4714 "Gmsh.y" + case 352: +#line 4655 "Gmsh.y" { std::vector<int> tags; ListOfDouble2Vector((yyvsp[(4) - (6)].l), tags); GModel::current()->getGEOInternals()->mergeVertices(tags); @@ -11706,23 +11306,23 @@ yyreduce: ;} break; - case 362: -#line 4724 "Gmsh.y" + case 353: +#line 4665 "Gmsh.y" { (yyval.c) = (char*)"Homology"; ;} break; - case 363: -#line 4725 "Gmsh.y" + case 354: +#line 4666 "Gmsh.y" { (yyval.c) = (char*)"Cohomology"; ;} break; - case 364: -#line 4726 "Gmsh.y" + case 355: +#line 4667 "Gmsh.y" { (yyval.c) = (char*)"Betti"; ;} break; - case 365: -#line 4731 "Gmsh.y" + case 356: +#line 4672 "Gmsh.y" { std::vector<int> domain, subdomain, dim; for(int i = 0; i < 4; i++) dim.push_back(i); @@ -11730,8 +11330,8 @@ yyreduce: ;} break; - case 366: -#line 4737 "Gmsh.y" + case 357: +#line 4678 "Gmsh.y" { std::vector<int> domain, subdomain, dim; for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){ @@ -11745,8 +11345,8 @@ yyreduce: ;} break; - case 367: -#line 4749 "Gmsh.y" + case 358: +#line 4690 "Gmsh.y" { std::vector<int> domain, subdomain, dim; for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){ @@ -11766,8 +11366,8 @@ yyreduce: ;} break; - case 368: -#line 4767 "Gmsh.y" + case 359: +#line 4708 "Gmsh.y" { std::vector<int> domain, subdomain, dim; for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){ @@ -11792,48 +11392,48 @@ yyreduce: ;} break; - case 369: -#line 4794 "Gmsh.y" + case 360: +#line 4735 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (1)].d); ;} break; - case 370: -#line 4795 "Gmsh.y" + case 361: +#line 4736 "Gmsh.y" { (yyval.d) = (yyvsp[(2) - (3)].d); ;} break; - case 371: -#line 4796 "Gmsh.y" + case 362: +#line 4737 "Gmsh.y" { (yyval.d) = -(yyvsp[(2) - (2)].d); ;} break; - case 372: -#line 4797 "Gmsh.y" + case 363: +#line 4738 "Gmsh.y" { (yyval.d) = (yyvsp[(2) - (2)].d); ;} break; - case 373: -#line 4798 "Gmsh.y" + case 364: +#line 4739 "Gmsh.y" { (yyval.d) = !(yyvsp[(2) - (2)].d); ;} break; - case 374: -#line 4799 "Gmsh.y" + case 365: +#line 4740 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d); ;} break; - case 375: -#line 4800 "Gmsh.y" + case 366: +#line 4741 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d); ;} break; - case 376: -#line 4801 "Gmsh.y" + case 367: +#line 4742 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d); ;} break; - case 377: -#line 4803 "Gmsh.y" + case 368: +#line 4744 "Gmsh.y" { if(!(yyvsp[(3) - (3)].d)) yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d)); @@ -11842,258 +11442,258 @@ yyreduce: ;} break; - case 378: -#line 4809 "Gmsh.y" + case 369: +#line 4750 "Gmsh.y" { (yyval.d) = (int)(yyvsp[(1) - (3)].d) | (int)(yyvsp[(3) - (3)].d); ;} break; - case 379: -#line 4810 "Gmsh.y" + case 370: +#line 4751 "Gmsh.y" { (yyval.d) = (int)(yyvsp[(1) - (3)].d) & (int)(yyvsp[(3) - (3)].d); ;} break; - case 380: -#line 4811 "Gmsh.y" + case 371: +#line 4752 "Gmsh.y" { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d); ;} break; - case 381: -#line 4812 "Gmsh.y" + case 372: +#line 4753 "Gmsh.y" { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d)); ;} break; - case 382: -#line 4813 "Gmsh.y" + case 373: +#line 4754 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d); ;} break; - case 383: -#line 4814 "Gmsh.y" + case 374: +#line 4755 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d); ;} break; - case 384: -#line 4815 "Gmsh.y" + case 375: +#line 4756 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d); ;} break; - case 385: -#line 4816 "Gmsh.y" + case 376: +#line 4757 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d); ;} break; - case 386: -#line 4817 "Gmsh.y" + case 377: +#line 4758 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d); ;} break; - case 387: -#line 4818 "Gmsh.y" + case 378: +#line 4759 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d); ;} break; - case 388: -#line 4819 "Gmsh.y" + case 379: +#line 4760 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d); ;} break; - case 389: -#line 4820 "Gmsh.y" + case 380: +#line 4761 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d); ;} break; - case 390: -#line 4821 "Gmsh.y" + case 381: +#line 4762 "Gmsh.y" { (yyval.d) = ((int)(yyvsp[(1) - (3)].d) >> (int)(yyvsp[(3) - (3)].d)); ;} break; - case 391: -#line 4822 "Gmsh.y" + case 382: +#line 4763 "Gmsh.y" { (yyval.d) = ((int)(yyvsp[(1) - (3)].d) << (int)(yyvsp[(3) - (3)].d)); ;} break; - case 392: -#line 4823 "Gmsh.y" + case 383: +#line 4764 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;} break; - case 393: -#line 4824 "Gmsh.y" + case 384: +#line 4765 "Gmsh.y" { (yyval.d) = exp((yyvsp[(3) - (4)].d)); ;} break; - case 394: -#line 4825 "Gmsh.y" + case 385: +#line 4766 "Gmsh.y" { (yyval.d) = log((yyvsp[(3) - (4)].d)); ;} break; - case 395: -#line 4826 "Gmsh.y" + case 386: +#line 4767 "Gmsh.y" { (yyval.d) = log10((yyvsp[(3) - (4)].d)); ;} break; - case 396: -#line 4827 "Gmsh.y" + case 387: +#line 4768 "Gmsh.y" { (yyval.d) = sqrt((yyvsp[(3) - (4)].d)); ;} break; - case 397: -#line 4828 "Gmsh.y" + case 388: +#line 4769 "Gmsh.y" { (yyval.d) = sin((yyvsp[(3) - (4)].d)); ;} break; - case 398: -#line 4829 "Gmsh.y" + case 389: +#line 4770 "Gmsh.y" { (yyval.d) = asin((yyvsp[(3) - (4)].d)); ;} break; - case 399: -#line 4830 "Gmsh.y" + case 390: +#line 4771 "Gmsh.y" { (yyval.d) = cos((yyvsp[(3) - (4)].d)); ;} break; - case 400: -#line 4831 "Gmsh.y" + case 391: +#line 4772 "Gmsh.y" { (yyval.d) = acos((yyvsp[(3) - (4)].d)); ;} break; - case 401: -#line 4832 "Gmsh.y" + case 392: +#line 4773 "Gmsh.y" { (yyval.d) = tan((yyvsp[(3) - (4)].d)); ;} break; - case 402: -#line 4833 "Gmsh.y" + case 393: +#line 4774 "Gmsh.y" { (yyval.d) = atan((yyvsp[(3) - (4)].d)); ;} break; - case 403: -#line 4834 "Gmsh.y" + case 394: +#line 4775 "Gmsh.y" { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;} break; - case 404: -#line 4835 "Gmsh.y" + case 395: +#line 4776 "Gmsh.y" { (yyval.d) = sinh((yyvsp[(3) - (4)].d)); ;} break; - case 405: -#line 4836 "Gmsh.y" + case 396: +#line 4777 "Gmsh.y" { (yyval.d) = cosh((yyvsp[(3) - (4)].d)); ;} break; - case 406: -#line 4837 "Gmsh.y" + case 397: +#line 4778 "Gmsh.y" { (yyval.d) = tanh((yyvsp[(3) - (4)].d)); ;} break; - case 407: -#line 4838 "Gmsh.y" + case 398: +#line 4779 "Gmsh.y" { (yyval.d) = fabs((yyvsp[(3) - (4)].d)); ;} break; - case 408: -#line 4839 "Gmsh.y" + case 399: +#line 4780 "Gmsh.y" { (yyval.d) = std::abs((yyvsp[(3) - (4)].d)); ;} break; - case 409: -#line 4840 "Gmsh.y" + case 400: +#line 4781 "Gmsh.y" { (yyval.d) = floor((yyvsp[(3) - (4)].d)); ;} break; - case 410: -#line 4841 "Gmsh.y" + case 401: +#line 4782 "Gmsh.y" { (yyval.d) = ceil((yyvsp[(3) - (4)].d)); ;} break; - case 411: -#line 4842 "Gmsh.y" + case 402: +#line 4783 "Gmsh.y" { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;} break; - case 412: -#line 4843 "Gmsh.y" + case 403: +#line 4784 "Gmsh.y" { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;} break; - case 413: -#line 4844 "Gmsh.y" + case 404: +#line 4785 "Gmsh.y" { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;} break; - case 414: -#line 4845 "Gmsh.y" + case 405: +#line 4786 "Gmsh.y" { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;} break; - case 415: -#line 4846 "Gmsh.y" + case 406: +#line 4787 "Gmsh.y" { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;} break; - case 416: -#line 4855 "Gmsh.y" + case 407: +#line 4796 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (1)].d); ;} break; - case 417: -#line 4856 "Gmsh.y" + case 408: +#line 4797 "Gmsh.y" { (yyval.d) = 3.141592653589793; ;} break; - case 418: -#line 4857 "Gmsh.y" + case 409: +#line 4798 "Gmsh.y" { (yyval.d) = (double)ImbricatedTest; ;} break; - case 419: -#line 4858 "Gmsh.y" + case 410: +#line 4799 "Gmsh.y" { (yyval.d) = Msg::GetCommRank(); ;} break; - case 420: -#line 4859 "Gmsh.y" + case 411: +#line 4800 "Gmsh.y" { (yyval.d) = Msg::GetCommSize(); ;} break; - case 421: -#line 4860 "Gmsh.y" + case 412: +#line 4801 "Gmsh.y" { (yyval.d) = GetGmshMajorVersion(); ;} break; - case 422: -#line 4861 "Gmsh.y" + case 413: +#line 4802 "Gmsh.y" { (yyval.d) = GetGmshMinorVersion(); ;} break; - case 423: -#line 4862 "Gmsh.y" + case 414: +#line 4803 "Gmsh.y" { (yyval.d) = GetGmshPatchVersion(); ;} break; - case 424: -#line 4863 "Gmsh.y" + case 415: +#line 4804 "Gmsh.y" { (yyval.d) = Cpu(); ;} break; - case 425: -#line 4864 "Gmsh.y" + case 416: +#line 4805 "Gmsh.y" { (yyval.d) = GetMemoryUsage()/1024./1024.; ;} break; - case 426: -#line 4865 "Gmsh.y" + case 417: +#line 4806 "Gmsh.y" { (yyval.d) = TotalRam(); ;} break; - case 427: -#line 4870 "Gmsh.y" + case 418: +#line 4811 "Gmsh.y" { init_options(); ;} break; - case 428: -#line 4872 "Gmsh.y" + case 419: +#line 4813 "Gmsh.y" { std::vector<double> val(1, (yyvsp[(3) - (6)].d)); Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions); @@ -12101,78 +11701,78 @@ yyreduce: ;} break; - case 429: -#line 4878 "Gmsh.y" + case 420: +#line 4819 "Gmsh.y" { (yyval.d) = (yyvsp[(1) - (1)].d); ;} break; - case 430: -#line 4880 "Gmsh.y" + case 421: +#line 4821 "Gmsh.y" { (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c)); Free((yyvsp[(3) - (4)].c)); ;} break; - case 431: -#line 4885 "Gmsh.y" + case 422: +#line 4826 "Gmsh.y" { (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d)); Free((yyvsp[(3) - (6)].c)); ;} break; - case 432: -#line 4890 "Gmsh.y" + case 423: +#line 4831 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_Float((yyvsp[(1) - (1)].c2).char1, (yyvsp[(1) - (1)].c2).char2); ;} break; - case 433: -#line 4895 "Gmsh.y" + case 424: +#line 4836 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_Float(NULL, (yyvsp[(1) - (4)].c), 2, (int)(yyvsp[(3) - (4)].d)); ;} break; - case 434: -#line 4900 "Gmsh.y" + case 425: +#line 4841 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_Float(NULL, (yyvsp[(1) - (4)].c), 2, (int)(yyvsp[(3) - (4)].d)); ;} break; - case 435: -#line 4904 "Gmsh.y" + case 426: +#line 4845 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_Float((yyvsp[(3) - (4)].c2).char1, (yyvsp[(3) - (4)].c2).char2, 1, 0, 0., 1); ;} break; - case 436: -#line 4908 "Gmsh.y" + case 427: +#line 4849 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(3) - (6)].c2).char1, (yyvsp[(3) - (6)].c2).char2, (yyvsp[(5) - (6)].c), 0, 0., 1); ;} break; - case 437: -#line 4912 "Gmsh.y" + case 428: +#line 4853 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_Float((yyvsp[(3) - (5)].c2).char1, (yyvsp[(3) - (5)].c2).char2, 1, 0, (yyvsp[(4) - (5)].d), 2); ;} break; - case 438: -#line 4916 "Gmsh.y" + case 429: +#line 4857 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(3) - (7)].c2).char1, (yyvsp[(3) - (7)].c2).char2, (yyvsp[(5) - (7)].c), 0, (yyvsp[(6) - (7)].d), 2); ;} break; - case 439: -#line 4920 "Gmsh.y" + case 430: +#line 4861 "Gmsh.y" { std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c)); (yyval.d) = !StatFile(tmp); @@ -12180,8 +11780,8 @@ yyreduce: ;} break; - case 440: -#line 4926 "Gmsh.y" + case 431: +#line 4867 "Gmsh.y" { if(gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){ gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(2) - (4)].c)]); @@ -12198,32 +11798,32 @@ yyreduce: ;} break; - case 441: -#line 4942 "Gmsh.y" + case 432: +#line 4883 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float_getDim((yyvsp[(2) - (6)].c2).char1, (yyvsp[(2) - (6)].c2).char2, (yyvsp[(4) - (6)].c)); ;} break; - case 442: -#line 4947 "Gmsh.y" + case 433: +#line 4888 "Gmsh.y" { std::string struct_namespace((yyvsp[(3) - (4)].c)); - (yyval.d) = (double)nameSpaces[struct_namespace].size(); + (yyval.d) = (double)gmsh_yynamespaces[struct_namespace].size(); Free((yyvsp[(3) - (4)].c)); ;} break; - case 443: -#line 4953 "Gmsh.y" + case 434: +#line 4894 "Gmsh.y" { std::string struct_namespace(std::string("")); - (yyval.d) = (double)nameSpaces[struct_namespace].size(); + (yyval.d) = (double)gmsh_yynamespaces[struct_namespace].size(); ;} break; - case 444: -#line 4959 "Gmsh.y" + case 435: +#line 4900 "Gmsh.y" { if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){ yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c)); @@ -12244,8 +11844,8 @@ yyreduce: ;} break; - case 445: -#line 4978 "Gmsh.y" + case 436: +#line 4919 "Gmsh.y" { int index = (int)(yyvsp[(3) - (5)].d); if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){ @@ -12267,8 +11867,8 @@ yyreduce: ;} break; - case 446: -#line 4999 "Gmsh.y" + case 437: +#line 4940 "Gmsh.y" { int index = (int)(yyvsp[(3) - (5)].d); if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){ @@ -12290,58 +11890,58 @@ yyreduce: ;} break; - case 447: -#line 5032 "Gmsh.y" + case 438: +#line 4973 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float(NULL, (yyvsp[(1) - (3)].c), (yyvsp[(3) - (3)].c)); ;} break; - case 448: -#line 5036 "Gmsh.y" + case 439: +#line 4977 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c), (yyvsp[(5) - (5)].c)); ;} break; - case 449: -#line 5041 "Gmsh.y" + case 440: +#line 4982 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float(NULL, (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (int)(yyvsp[(5) - (6)].d)); ;} break; - case 450: -#line 5045 "Gmsh.y" + case 441: +#line 4986 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(1) - (8)].c), (yyvsp[(3) - (8)].c), (yyvsp[(5) - (8)].c), (int)(yyvsp[(7) - (8)].d)); ;} break; - case 451: -#line 5049 "Gmsh.y" + case 442: +#line 4990 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float(NULL, (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (int)(yyvsp[(5) - (6)].d)); ;} break; - case 452: -#line 5053 "Gmsh.y" + case 443: +#line 4994 "Gmsh.y" { (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(1) - (8)].c), (yyvsp[(3) - (8)].c), (yyvsp[(5) - (8)].c), (int)(yyvsp[(7) - (8)].d)); ;} break; - case 453: -#line 5058 "Gmsh.y" + case 444: +#line 4999 "Gmsh.y" { NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d)); Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c)); ;} break; - case 454: -#line 5063 "Gmsh.y" + case 445: +#line 5004 "Gmsh.y" { double d = 0.; if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){ @@ -12353,8 +11953,8 @@ yyreduce: ;} break; - case 455: -#line 5073 "Gmsh.y" + case 446: +#line 5014 "Gmsh.y" { double d = 0.; if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){ @@ -12366,16 +11966,16 @@ yyreduce: ;} break; - case 456: -#line 5083 "Gmsh.y" + case 447: +#line 5024 "Gmsh.y" { (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d)); Free((yyvsp[(3) - (6)].c)); ;} break; - case 457: -#line 5088 "Gmsh.y" + case 448: +#line 5029 "Gmsh.y" { int matches = 0; for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){ @@ -12388,8 +11988,8 @@ yyreduce: ;} break; - case 458: -#line 5099 "Gmsh.y" + case 449: +#line 5040 "Gmsh.y" { std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c)); if(s.find(substr) != std::string::npos) @@ -12400,24 +12000,24 @@ yyreduce: ;} break; - case 459: -#line 5108 "Gmsh.y" + case 450: +#line 5049 "Gmsh.y" { (yyval.d) = strlen((yyvsp[(3) - (4)].c)); Free((yyvsp[(3) - (4)].c)); ;} break; - case 460: -#line 5113 "Gmsh.y" + case 451: +#line 5054 "Gmsh.y" { (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c)); Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c)); ;} break; - case 461: -#line 5118 "Gmsh.y" + case 452: +#line 5059 "Gmsh.y" { int align = 0, font = 0, fontsize = CTX::instance()->glFontSize; if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){ @@ -12443,197 +12043,197 @@ yyreduce: ;} break; - case 462: -#line 5145 "Gmsh.y" + case 453: +#line 5086 "Gmsh.y" { (yyval.d) = 0.; ;} break; - case 463: -#line 5147 "Gmsh.y" + case 454: +#line 5088 "Gmsh.y" { (yyval.d) = (yyvsp[(2) - (2)].d);;} break; - case 464: -#line 5152 "Gmsh.y" + case 455: +#line 5093 "Gmsh.y" { (yyval.c) = NULL; ;} break; - case 465: -#line 5154 "Gmsh.y" + case 456: +#line 5095 "Gmsh.y" { (yyval.c) = (yyvsp[(2) - (2)].c);;} break; - case 466: -#line 5159 "Gmsh.y" + case 457: +#line 5100 "Gmsh.y" { std::string struct_namespace((yyvsp[(2) - (3)].c2).char1? (yyvsp[(2) - (3)].c2).char1 : std::string("")), struct_name((yyvsp[(2) - (3)].c2).char2); init_options - (nameSpaces.getMember_ValMax(struct_namespace, struct_name)); + (gmsh_yynamespaces.getMember_ValMax(struct_namespace, struct_name)); ;} break; - case 467: -#line 5166 "Gmsh.y" + case 458: +#line 5107 "Gmsh.y" { std::string struct_namespace((yyvsp[(2) - (7)].c2).char1? (yyvsp[(2) - (7)].c2).char1 : std::string("")), struct_name((yyvsp[(2) - (7)].c2).char2); Free((yyvsp[(2) - (7)].c2).char1); Free((yyvsp[(2) - (7)].c2).char2); int tag_out; - if (nameSpaces.defStruct(struct_namespace, struct_name, - floatOptions, charOptions, - tag_out, member_ValMax, (yyvsp[(3) - (7)].i))) + if (gmsh_yynamespaces.defStruct(struct_namespace, struct_name, + floatOptions, charOptions, + tag_out, member_ValMax, (yyvsp[(3) - (7)].i))) yymsg(0, "Redefinition of Struct '%s::%s'", struct_namespace.c_str(), struct_name.c_str()); (yyval.d) = (double)tag_out; ;} break; - case 468: -#line 5182 "Gmsh.y" + case 459: +#line 5123 "Gmsh.y" { (yyval.c2).char1 = NULL; (yyval.c2).char2 = (yyvsp[(1) - (1)].c); ;} break; - case 469: -#line 5184 "Gmsh.y" + case 460: +#line 5125 "Gmsh.y" { (yyval.c2).char1 = (yyvsp[(1) - (3)].c); (yyval.c2).char2 = (yyvsp[(3) - (3)].c); ;} break; - case 470: -#line 5189 "Gmsh.y" + case 461: +#line 5130 "Gmsh.y" { (yyval.c) = (yyvsp[(1) - (1)].c); flag_tSTRING_alloc = 1; ;} break; - case 471: -#line 5198 "Gmsh.y" + case 462: +#line 5139 "Gmsh.y" { (yyval.i) = 99; ;} break; - case 472: -#line 5200 "Gmsh.y" + case 463: +#line 5141 "Gmsh.y" { (yyval.i) = (int)(yyvsp[(2) - (2)].d); ;} break; - case 473: -#line 5205 "Gmsh.y" + case 464: +#line 5146 "Gmsh.y" { (yyval.i) = 0; ;} break; - case 474: -#line 5207 "Gmsh.y" + case 465: +#line 5148 "Gmsh.y" { (yyval.i) = (yyvsp[(2) - (3)].i); ;} break; - case 475: -#line 5213 "Gmsh.y" + case 466: +#line 5153 "Gmsh.y" { memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double)); ;} break; - case 476: -#line 5217 "Gmsh.y" + case 467: +#line 5157 "Gmsh.y" { for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i]; ;} break; - case 477: -#line 5221 "Gmsh.y" + case 468: +#line 5161 "Gmsh.y" { for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i]; ;} break; - case 478: -#line 5225 "Gmsh.y" + case 469: +#line 5165 "Gmsh.y" { for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i]; ;} break; - case 479: -#line 5229 "Gmsh.y" + case 470: +#line 5169 "Gmsh.y" { for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i]; ;} break; - case 480: -#line 5236 "Gmsh.y" + case 471: +#line 5176 "Gmsh.y" { (yyval.v)[0] = (yyvsp[(2) - (11)].d); (yyval.v)[1] = (yyvsp[(4) - (11)].d); (yyval.v)[2] = (yyvsp[(6) - (11)].d); (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d); ;} break; - case 481: -#line 5240 "Gmsh.y" + case 472: +#line 5180 "Gmsh.y" { (yyval.v)[0] = (yyvsp[(2) - (9)].d); (yyval.v)[1] = (yyvsp[(4) - (9)].d); (yyval.v)[2] = (yyvsp[(6) - (9)].d); (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0; ;} break; - case 482: -#line 5244 "Gmsh.y" + case 473: +#line 5184 "Gmsh.y" { (yyval.v)[0] = (yyvsp[(2) - (7)].d); (yyval.v)[1] = (yyvsp[(4) - (7)].d); (yyval.v)[2] = (yyvsp[(6) - (7)].d); (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0; ;} break; - case 483: -#line 5248 "Gmsh.y" + case 474: +#line 5188 "Gmsh.y" { (yyval.v)[0] = (yyvsp[(2) - (7)].d); (yyval.v)[1] = (yyvsp[(4) - (7)].d); (yyval.v)[2] = (yyvsp[(6) - (7)].d); (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0; ;} break; - case 484: -#line 5255 "Gmsh.y" + case 475: +#line 5195 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(List_T*)); List_Add((yyval.l), &((yyvsp[(1) - (1)].l))); ;} break; - case 485: -#line 5260 "Gmsh.y" + case 476: +#line 5200 "Gmsh.y" { List_Add((yyval.l), &((yyvsp[(3) - (3)].l))); ;} break; - case 486: -#line 5267 "Gmsh.y" + case 477: +#line 5207 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(double)); List_Add((yyval.l), &((yyvsp[(1) - (1)].d))); ;} break; - case 487: -#line 5272 "Gmsh.y" + case 478: +#line 5212 "Gmsh.y" { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; - case 488: -#line 5276 "Gmsh.y" + case 479: +#line 5216 "Gmsh.y" { // creates an empty list (yyval.l) = List_Create(2, 1, sizeof(double)); ;} break; - case 489: -#line 5281 "Gmsh.y" + case 480: +#line 5221 "Gmsh.y" { (yyval.l) = (yyvsp[(2) - (3)].l); ;} break; - case 490: -#line 5285 "Gmsh.y" + case 481: +#line 5225 "Gmsh.y" { (yyval.l) = (yyvsp[(3) - (4)].l); for(int i = 0; i < List_Nbr((yyval.l)); i++){ @@ -12643,8 +12243,8 @@ yyreduce: ;} break; - case 491: -#line 5293 "Gmsh.y" + case 482: +#line 5233 "Gmsh.y" { (yyval.l) = (yyvsp[(4) - (5)].l); for(int i = 0; i < List_Nbr((yyval.l)); i++){ @@ -12654,15 +12254,15 @@ yyreduce: ;} break; - case 492: -#line 5304 "Gmsh.y" + case 483: +#line 5244 "Gmsh.y" { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; - case 493: -#line 5308 "Gmsh.y" + case 484: +#line 5248 "Gmsh.y" { if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all")) (yyval.l) = 0; @@ -12673,8 +12273,8 @@ yyreduce: ;} break; - case 494: -#line 5320 "Gmsh.y" + case 485: +#line 5260 "Gmsh.y" { (yyval.l) = (yyvsp[(2) - (2)].l); for(int i = 0; i < List_Nbr((yyval.l)); i++){ @@ -12684,8 +12284,8 @@ yyreduce: ;} break; - case 495: -#line 5328 "Gmsh.y" + case 486: +#line 5268 "Gmsh.y" { (yyval.l) = (yyvsp[(3) - (3)].l); for(int i = 0; i < List_Nbr((yyval.l)); i++){ @@ -12695,8 +12295,8 @@ yyreduce: ;} break; - case 496: -#line 5336 "Gmsh.y" + case 487: +#line 5276 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(double)); for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); @@ -12705,8 +12305,8 @@ yyreduce: ;} break; - case 497: -#line 5343 "Gmsh.y" + case 488: +#line 5283 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(double)); if(!(yyvsp[(5) - (5)].d)){ //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0) @@ -12718,8 +12318,8 @@ yyreduce: ;} break; - case 498: -#line 5353 "Gmsh.y" + case 489: +#line 5293 "Gmsh.y" { (yyval.l) = List_Create(3, 1, sizeof(double)); int tag = (int)(yyvsp[(3) - (4)].d); @@ -12744,132 +12344,39 @@ yyreduce: ;} break; - case 499: -#line 5376 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(0, (yyval.l)); - Free((yyvsp[(2) - (2)].c)); - ;} - break; - - case 500: -#line 5382 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(1, (yyval.l)); - Free((yyvsp[(2) - (2)].c)); - ;} - break; - - case 501: -#line 5388 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(2, (yyval.l)); - Free((yyvsp[(2) - (2)].c)); - ;} - break; - - case 502: -#line 5394 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(3, (yyval.l)); - Free((yyvsp[(2) - (2)].c)); - ;} - break; - - case 503: -#line 5400 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - if(!(yyvsp[(3) - (3)].l)){ - getAllPhysicalTags(0, (yyval.l)); - } - else{ - getElementaryTagsForPhysicalGroups(0, (yyvsp[(3) - (3)].l), (yyval.l)); - List_Delete((yyvsp[(3) - (3)].l)); - } - ;} - break; - - case 504: -#line 5411 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - if(!(yyvsp[(3) - (3)].l)){ - getAllPhysicalTags(1, (yyval.l)); - } - else{ - getElementaryTagsForPhysicalGroups(1, (yyvsp[(3) - (3)].l), (yyval.l)); - List_Delete((yyvsp[(3) - (3)].l)); - } - ;} - break; - - case 505: -#line 5422 "Gmsh.y" + case 490: +#line 5316 "Gmsh.y" { (yyval.l) = List_Create(10, 10, sizeof(double)); - if(!(yyvsp[(3) - (3)].l)){ - getAllPhysicalTags(2, (yyval.l)); - } - else{ - getElementaryTagsForPhysicalGroups(2, (yyvsp[(3) - (3)].l), (yyval.l)); - List_Delete((yyvsp[(3) - (3)].l)); - } + getAllElementaryTags((yyvsp[(1) - (2)].i), (yyval.l)); + Free((yyvsp[(2) - (2)].c)); ;} break; - case 506: -#line 5433 "Gmsh.y" + case 491: +#line 5322 "Gmsh.y" { (yyval.l) = List_Create(10, 10, sizeof(double)); if(!(yyvsp[(3) - (3)].l)){ - getAllPhysicalTags(3, (yyval.l)); + getAllPhysicalTags((yyvsp[(2) - (3)].i), (yyval.l)); } else{ - getElementaryTagsForPhysicalGroups(3, (yyvsp[(3) - (3)].l), (yyval.l)); + getElementaryTagsForPhysicalGroups((yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].l), (yyval.l)); List_Delete((yyvsp[(3) - (3)].l)); } ;} break; - case 507: -#line 5445 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(0, (yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d), (yyval.l)); - ;} - break; - - case 508: -#line 5451 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(1, (yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d), (yyval.l)); - ;} - break; - - case 509: -#line 5457 "Gmsh.y" - { - (yyval.l) = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(2, (yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d), (yyval.l)); - ;} - break; - - case 510: -#line 5463 "Gmsh.y" + case 492: +#line 5334 "Gmsh.y" { (yyval.l) = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(3, (yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d), (yyval.l)); + getElementaryTagsInBoundingBox((yyvsp[(1) - (16)].i), (yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d), (yyval.l)); ;} break; - case 511: -#line 5468 "Gmsh.y" + case 493: +#line 5339 "Gmsh.y" { (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double)); for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){ @@ -12881,8 +12388,8 @@ yyreduce: ;} break; - case 512: -#line 5478 "Gmsh.y" + case 494: +#line 5349 "Gmsh.y" { (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double)); for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){ @@ -12894,8 +12401,8 @@ yyreduce: ;} break; - case 513: -#line 5488 "Gmsh.y" + case 495: +#line 5359 "Gmsh.y" { (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double)); for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){ @@ -12907,8 +12414,8 @@ yyreduce: ;} break; - case 514: -#line 5498 "Gmsh.y" + case 496: +#line 5369 "Gmsh.y" { (yyval.l) = List_Create(20, 20, sizeof(double)); if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c))) @@ -12922,22 +12429,22 @@ yyreduce: ;} break; - case 515: -#line 5511 "Gmsh.y" + case 497: +#line 5382 "Gmsh.y" { (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfFloat(NULL, (yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c)); ;} break; - case 516: -#line 5515 "Gmsh.y" + case 498: +#line 5386 "Gmsh.y" { (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfFloat((yyvsp[(1) - (7)].c), (yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].c)); ;} break; - case 517: -#line 5521 "Gmsh.y" + case 499: +#line 5392 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(double)); if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c))) @@ -12951,29 +12458,29 @@ yyreduce: ;} break; - case 518: -#line 5533 "Gmsh.y" + case 500: +#line 5404 "Gmsh.y" { (yyval.l) = (yyvsp[(3) - (4)].l); ;} break; - case 519: -#line 5537 "Gmsh.y" + case 501: +#line 5408 "Gmsh.y" { (yyval.l) = (yyvsp[(3) - (4)].l); ;} break; - case 520: -#line 5541 "Gmsh.y" + case 502: +#line 5412 "Gmsh.y" { (yyval.l) = (yyvsp[(4) - (6)].l); ;} break; - case 521: -#line 5545 "Gmsh.y" + case 503: +#line 5416 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(double)); if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c))) @@ -12993,8 +12500,8 @@ yyreduce: ;} break; - case 522: -#line 5563 "Gmsh.y" + case 504: +#line 5434 "Gmsh.y" { (yyval.l) = List_Create(20,20,sizeof(double)); for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) { @@ -13004,8 +12511,8 @@ yyreduce: ;} break; - case 523: -#line 5571 "Gmsh.y" + case 505: +#line 5442 "Gmsh.y" { (yyval.l) = List_Create(20,20,sizeof(double)); for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) { @@ -13015,8 +12522,8 @@ yyreduce: ;} break; - case 524: -#line 5579 "Gmsh.y" + case 506: +#line 5450 "Gmsh.y" { Msg::Barrier(); FILE *File; @@ -13047,8 +12554,8 @@ yyreduce: ;} break; - case 525: -#line 5608 "Gmsh.y" + case 507: +#line 5479 "Gmsh.y" { double x0 = (yyvsp[(3) - (14)].d), x1 = (yyvsp[(5) - (14)].d), y0 = (yyvsp[(7) - (14)].d), y1 = (yyvsp[(9) - (14)].d), ys = (yyvsp[(11) - (14)].d); int N = (int)(yyvsp[(13) - (14)].d); @@ -13060,8 +12567,8 @@ yyreduce: ;} break; - case 526: -#line 5618 "Gmsh.y" + case 508: +#line 5489 "Gmsh.y" { std::vector<double> tmp; for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ @@ -13079,8 +12586,8 @@ yyreduce: ;} break; - case 527: -#line 5634 "Gmsh.y" + case 509: +#line 5505 "Gmsh.y" { for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){ double *d = (double*)List_Pointer((yyvsp[(3) - (4)].l), i); @@ -13090,30 +12597,30 @@ yyreduce: ;} break; - case 528: -#line 5645 "Gmsh.y" + case 510: +#line 5516 "Gmsh.y" { (yyval.l) = List_Create(2, 1, sizeof(double)); List_Add((yyval.l), &((yyvsp[(1) - (1)].d))); ;} break; - case 529: -#line 5650 "Gmsh.y" + case 511: +#line 5521 "Gmsh.y" { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; - case 530: -#line 5654 "Gmsh.y" + case 512: +#line 5525 "Gmsh.y" { List_Add((yyval.l), &((yyvsp[(3) - (3)].d))); ;} break; - case 531: -#line 5658 "Gmsh.y" + case 513: +#line 5529 "Gmsh.y" { for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){ double d; @@ -13124,22 +12631,22 @@ yyreduce: ;} break; - case 532: -#line 5670 "Gmsh.y" + case 514: +#line 5541 "Gmsh.y" { (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d)); ;} break; - case 533: -#line 5674 "Gmsh.y" + case 515: +#line 5545 "Gmsh.y" { (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255); ;} break; - case 534: -#line 5686 "Gmsh.y" + case 516: +#line 5557 "Gmsh.y" { int flag = 0; if(gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){ @@ -13158,8 +12665,8 @@ yyreduce: ;} break; - case 535: -#line 5703 "Gmsh.y" + case 517: +#line 5574 "Gmsh.y" { unsigned int val = 0; ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val); @@ -13168,15 +12675,15 @@ yyreduce: ;} break; - case 536: -#line 5713 "Gmsh.y" + case 518: +#line 5584 "Gmsh.y" { (yyval.l) = (yyvsp[(2) - (3)].l); ;} break; - case 537: -#line 5717 "Gmsh.y" + case 519: +#line 5588 "Gmsh.y" { (yyval.l) = List_Create(256, 10, sizeof(unsigned int)); GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d)); @@ -13190,38 +12697,38 @@ yyreduce: ;} break; - case 538: -#line 5732 "Gmsh.y" + case 520: +#line 5603 "Gmsh.y" { (yyval.l) = List_Create(256, 10, sizeof(unsigned int)); List_Add((yyval.l), &((yyvsp[(1) - (1)].u))); ;} break; - case 539: -#line 5737 "Gmsh.y" + case 521: +#line 5608 "Gmsh.y" { List_Add((yyval.l), &((yyvsp[(3) - (3)].u))); ;} break; - case 540: -#line 5744 "Gmsh.y" + case 522: +#line 5615 "Gmsh.y" { (yyval.c) = (yyvsp[(1) - (1)].c); ;} break; - case 541: -#line 5748 "Gmsh.y" + case 523: +#line 5619 "Gmsh.y" { // No need to extend to Struct_FullName (a Tag is not a String) (yyval.c) = treat_Struct_FullName_String(NULL, (yyvsp[(1) - (1)].c)); ;} break; - case 542: -#line 5753 "Gmsh.y" + case 524: +#line 5624 "Gmsh.y" { std::string val; int j = (int)(yyvsp[(3) - (4)].d); @@ -13237,8 +12744,8 @@ yyreduce: ;} break; - case 543: -#line 5767 "Gmsh.y" + case 525: +#line 5638 "Gmsh.y" { std::string val; int j = (int)(yyvsp[(3) - (4)].d); @@ -13254,36 +12761,36 @@ yyreduce: ;} break; - case 544: -#line 5784 "Gmsh.y" + case 526: +#line 5655 "Gmsh.y" { (yyval.c) = treat_Struct_FullName_dot_tSTRING_String(NULL, (yyvsp[(1) - (3)].c), (yyvsp[(3) - (3)].c)); ;} break; - case 545: -#line 5788 "Gmsh.y" + case 527: +#line 5659 "Gmsh.y" { (yyval.c) = treat_Struct_FullName_dot_tSTRING_String((yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c), (yyvsp[(5) - (5)].c)); ;} break; - case 546: -#line 5793 "Gmsh.y" + case 528: +#line 5664 "Gmsh.y" { (yyval.c) = treat_Struct_FullName_dot_tSTRING_String(NULL, (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (int)(yyvsp[(5) - (6)].d)); ;} break; - case 547: -#line 5797 "Gmsh.y" + case 529: +#line 5668 "Gmsh.y" { (yyval.c) = treat_Struct_FullName_dot_tSTRING_String((yyvsp[(1) - (8)].c), (yyvsp[(3) - (8)].c), (yyvsp[(5) - (8)].c), (int)(yyvsp[(7) - (8)].d)); ;} break; - case 548: -#line 5802 "Gmsh.y" + case 530: +#line 5673 "Gmsh.y" { std::string out; StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out); @@ -13293,8 +12800,8 @@ yyreduce: ;} break; - case 549: -#line 5810 "Gmsh.y" + case 531: +#line 5681 "Gmsh.y" { std::string name = GModel::current()->getPhysicalName(0, (int)(yyvsp[(4) - (5)].d)); (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char)); @@ -13302,8 +12809,8 @@ yyreduce: ;} break; - case 550: -#line 5816 "Gmsh.y" + case 532: +#line 5687 "Gmsh.y" { std::string name = GModel::current()->getPhysicalName(1, (int)(yyvsp[(4) - (5)].d)); (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char)); @@ -13311,8 +12818,8 @@ yyreduce: ;} break; - case 551: -#line 5822 "Gmsh.y" + case 533: +#line 5693 "Gmsh.y" { std::string name = GModel::current()->getPhysicalName(2, (int)(yyvsp[(4) - (5)].d)); (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char)); @@ -13320,8 +12827,8 @@ yyreduce: ;} break; - case 552: -#line 5828 "Gmsh.y" + case 534: +#line 5699 "Gmsh.y" { std::string name = GModel::current()->getPhysicalName(3, (int)(yyvsp[(4) - (5)].d)); (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char)); @@ -13329,22 +12836,22 @@ yyreduce: ;} break; - case 553: -#line 5837 "Gmsh.y" + case 535: +#line 5708 "Gmsh.y" { (yyval.c) = (yyvsp[(1) - (1)].c); ;} break; - case 554: -#line 5841 "Gmsh.y" + case 536: +#line 5712 "Gmsh.y" { (yyval.c) = (yyvsp[(3) - (4)].c); ;} break; - case 555: -#line 5845 "Gmsh.y" + case 537: +#line 5716 "Gmsh.y" { (yyval.c) = (char *)Malloc(32 * sizeof(char)); time_t now; @@ -13354,8 +12861,8 @@ yyreduce: ;} break; - case 556: -#line 5853 "Gmsh.y" + case 538: +#line 5724 "Gmsh.y" { std::string exe = Msg::GetExecutableName(); (yyval.c) = (char *)Malloc(exe.size() + 1); @@ -13363,8 +12870,8 @@ yyreduce: ;} break; - case 557: -#line 5859 "Gmsh.y" + case 539: +#line 5730 "Gmsh.y" { std::string action = Msg::GetOnelabAction(); (yyval.c) = (char *)Malloc(action.size() + 1); @@ -13372,15 +12879,15 @@ yyreduce: ;} break; - case 558: -#line 5865 "Gmsh.y" + case 540: +#line 5736 "Gmsh.y" { (yyval.c) = strsave((char*)"Gmsh"); ;} break; - case 559: -#line 5869 "Gmsh.y" + case 541: +#line 5740 "Gmsh.y" { const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c)); if(!env) env = ""; @@ -13390,8 +12897,8 @@ yyreduce: ;} break; - case 560: -#line 5877 "Gmsh.y" + case 542: +#line 5748 "Gmsh.y" { std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c)); (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char)); @@ -13401,8 +12908,8 @@ yyreduce: ;} break; - case 561: -#line 5885 "Gmsh.y" + case 543: +#line 5756 "Gmsh.y" { std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c)); (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char)); @@ -13411,8 +12918,8 @@ yyreduce: ;} break; - case 562: -#line 5892 "Gmsh.y" + case 544: +#line 5763 "Gmsh.y" { std::string s = Msg::GetOnelabString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c)); (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char)); @@ -13422,22 +12929,22 @@ yyreduce: ;} break; - case 563: -#line 5902 "Gmsh.y" + case 545: +#line 5773 "Gmsh.y" { (yyval.c) = treat_Struct_FullName_String(NULL, (yyvsp[(3) - (5)].c2).char2, 1, 0, (yyvsp[(4) - (5)].c), 2); ;} break; - case 564: -#line 5907 "Gmsh.y" + case 546: +#line 5778 "Gmsh.y" { (yyval.c) = treat_Struct_FullName_dot_tSTRING_String((yyvsp[(3) - (7)].c2).char1, (yyvsp[(3) - (7)].c2).char2, (yyvsp[(5) - (7)].c), 0, (yyvsp[(6) - (7)].c), 2); ;} break; - case 565: -#line 5912 "Gmsh.y" + case 547: +#line 5783 "Gmsh.y" { int size = 1; for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++) @@ -13454,8 +12961,8 @@ yyreduce: ;} break; - case 566: -#line 5927 "Gmsh.y" + case 548: +#line 5798 "Gmsh.y" { (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char)); int i; @@ -13471,8 +12978,8 @@ yyreduce: ;} break; - case 567: -#line 5941 "Gmsh.y" + case 549: +#line 5812 "Gmsh.y" { (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char)); int i; @@ -13488,8 +12995,8 @@ yyreduce: ;} break; - case 568: -#line 5955 "Gmsh.y" + case 550: +#line 5826 "Gmsh.y" { std::string input = (yyvsp[(3) - (8)].c); std::string substr_old = (yyvsp[(5) - (8)].c); @@ -13503,8 +13010,8 @@ yyreduce: ;} break; - case 569: -#line 5967 "Gmsh.y" + case 551: +#line 5838 "Gmsh.y" { int size = 1; for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++) @@ -13522,8 +13029,8 @@ yyreduce: ;} break; - case 570: -#line 5983 "Gmsh.y" + case 552: +#line 5854 "Gmsh.y" { int i = 0; while ((yyvsp[(3) - (4)].c)[i]) { @@ -13534,8 +13041,8 @@ yyreduce: ;} break; - case 571: -#line 5992 "Gmsh.y" + case 553: +#line 5863 "Gmsh.y" { int i = 0; while ((yyvsp[(3) - (4)].c)[i]) { @@ -13546,8 +13053,8 @@ yyreduce: ;} break; - case 572: -#line 6001 "Gmsh.y" + case 554: +#line 5872 "Gmsh.y" { int i = 0; while ((yyvsp[(3) - (4)].c)[i]) { @@ -13559,8 +13066,8 @@ yyreduce: ;} break; - case 573: -#line 6011 "Gmsh.y" + case 555: +#line 5882 "Gmsh.y" { if((yyvsp[(3) - (8)].d)){ (yyval.c) = (yyvsp[(5) - (8)].c); @@ -13573,8 +13080,8 @@ yyreduce: ;} break; - case 574: -#line 6022 "Gmsh.y" + case 556: +#line 5893 "Gmsh.y" { std::string in = (yyvsp[(3) - (8)].c); std::string out = in.substr((int)(yyvsp[(5) - (8)].d), (int)(yyvsp[(7) - (8)].d)); @@ -13584,8 +13091,8 @@ yyreduce: ;} break; - case 575: -#line 6030 "Gmsh.y" + case 557: +#line 5901 "Gmsh.y" { std::string in = (yyvsp[(3) - (6)].c); std::string out = in.substr((int)(yyvsp[(5) - (6)].d), std::string::npos); @@ -13595,15 +13102,15 @@ yyreduce: ;} break; - case 576: -#line 6038 "Gmsh.y" + case 558: +#line 5909 "Gmsh.y" { (yyval.c) = (yyvsp[(3) - (4)].c); ;} break; - case 577: -#line 6042 "Gmsh.y" + case 559: +#line 5913 "Gmsh.y" { char tmpstring[5000]; int i = printListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring); @@ -13624,8 +13131,8 @@ yyreduce: ;} break; - case 578: -#line 6061 "Gmsh.y" + case 560: +#line 5932 "Gmsh.y" { std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c)); (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char)); @@ -13634,8 +13141,8 @@ yyreduce: ;} break; - case 579: -#line 6068 "Gmsh.y" + case 561: +#line 5939 "Gmsh.y" { std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0]; (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char)); @@ -13643,8 +13150,8 @@ yyreduce: ;} break; - case 580: -#line 6074 "Gmsh.y" + case 562: +#line 5945 "Gmsh.y" { std::string tmp = SplitFileName((yyvsp[(3) - (4)].c))[0]; (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char)); @@ -13653,8 +13160,8 @@ yyreduce: ;} break; - case 581: -#line 6081 "Gmsh.y" + case 563: +#line 5952 "Gmsh.y" { std::string tmp = GetAbsolutePath((yyvsp[(3) - (4)].c)); (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char)); @@ -13663,13 +13170,13 @@ yyreduce: ;} break; - case 582: -#line 6088 "Gmsh.y" + case 564: +#line 5959 "Gmsh.y" { init_options(); ;} break; - case 583: -#line 6090 "Gmsh.y" + case 565: +#line 5961 "Gmsh.y" { std::string val((yyvsp[(3) - (6)].c)); Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions); @@ -13679,13 +13186,13 @@ yyreduce: ;} break; - case 584: -#line 6098 "Gmsh.y" + case 566: +#line 5969 "Gmsh.y" { std::string out; const std::string * key_struct = NULL; - switch (nameSpaces.get_key_struct_from_tag(struct_namespace, - (int)(yyvsp[(3) - (4)].d), key_struct)) { + switch (gmsh_yynamespaces.get_key_struct_from_tag(struct_namespace, + (int)(yyvsp[(3) - (4)].d), key_struct)) { case 0: out = *key_struct; break; @@ -13703,58 +13210,58 @@ yyreduce: ;} break; - case 585: -#line 6122 "Gmsh.y" + case 567: +#line 5993 "Gmsh.y" { struct_namespace = std::string(""); (yyval.d) = (yyvsp[(2) - (2)].d); ;} break; - case 586: -#line 6124 "Gmsh.y" + case 568: +#line 5995 "Gmsh.y" { struct_namespace = (yyvsp[(1) - (4)].c); Free((yyvsp[(1) - (4)].c)); (yyval.d) = (yyvsp[(4) - (4)].d); ;} break; - case 587: -#line 6130 "Gmsh.y" + case 569: +#line 6001 "Gmsh.y" { (yyval.l) = (yyvsp[(3) - (4)].l); ;} break; - case 588: -#line 6135 "Gmsh.y" + case 570: +#line 6006 "Gmsh.y" { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; - case 589: -#line 6137 "Gmsh.y" + case 571: +#line 6008 "Gmsh.y" { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; - case 590: -#line 6142 "Gmsh.y" + case 572: +#line 6013 "Gmsh.y" { (yyval.l) = (yyvsp[(2) - (3)].l); ;} break; - case 591: -#line 6147 "Gmsh.y" + case 573: +#line 6018 "Gmsh.y" { (yyval.l) = List_Create(20,20,sizeof(char*)); List_Add((yyval.l), &((yyvsp[(1) - (1)].c))); ;} break; - case 592: -#line 6152 "Gmsh.y" + case 574: +#line 6023 "Gmsh.y" { (yyval.l) = (yyvsp[(1) - (1)].l); ;} break; - case 593: -#line 6154 "Gmsh.y" + case 575: +#line 6025 "Gmsh.y" { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;} break; - case 594: -#line 6158 "Gmsh.y" + case 576: +#line 6029 "Gmsh.y" { for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){ char* c; @@ -13765,8 +13272,8 @@ yyreduce: ;} break; - case 595: -#line 6170 "Gmsh.y" + case 577: +#line 6041 "Gmsh.y" { (yyval.l) = List_Create(20, 20, sizeof(char *)); if(!gmsh_yystringsymbols.count((yyvsp[(1) - (3)].c))) @@ -13782,22 +13289,22 @@ yyreduce: ;} break; - case 596: -#line 6185 "Gmsh.y" + case 578: +#line 6055 "Gmsh.y" { (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfString(NULL, (yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c)); ;} break; - case 597: -#line 6190 "Gmsh.y" + case 579: +#line 6059 "Gmsh.y" { (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfString((yyvsp[(1) - (7)].c), (yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].c)); ;} break; - case 598: -#line 6199 "Gmsh.y" + case 580: +#line 6066 "Gmsh.y" { char tmpstr[256]; sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d)); @@ -13807,8 +13314,8 @@ yyreduce: ;} break; - case 599: -#line 6208 "Gmsh.y" + case 581: +#line 6074 "Gmsh.y" { char tmpstr[256]; sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d)); @@ -13818,8 +13325,8 @@ yyreduce: ;} break; - case 600: -#line 6217 "Gmsh.y" + case 582: +#line 6082 "Gmsh.y" { char tmpstr[256]; sprintf(tmpstr, "_%d", (int)(yyvsp[(7) - (8)].d)); @@ -13829,24 +13336,24 @@ yyreduce: ;} break; - case 601: -#line 6229 "Gmsh.y" + case 583: +#line 6093 "Gmsh.y" { (yyval.c) = (yyvsp[(1) - (1)].c); ;} break; - case 602: -#line 6232 "Gmsh.y" + case 584: +#line 6095 "Gmsh.y" { (yyval.c) = (yyvsp[(1) - (1)].c); ;} break; - case 603: -#line 6236 "Gmsh.y" + case 585: +#line 6098 "Gmsh.y" { (yyval.c) = (yyvsp[(3) - (4)].c); ;} break; /* Line 1267 of yacc.c. */ -#line 13850 "Gmsh.tab.cpp" +#line 13357 "Gmsh.tab.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -14060,7 +13567,7 @@ yyreturn: } -#line 6239 "Gmsh.y" +#line 6101 "Gmsh.y" void assignVariable(const std::string &name, int index, int assignType, @@ -14252,14 +13759,14 @@ void PrintParserSymbols(bool help, std::vector<std::string> &vec) vec.push_back(s); } } - if (nameSpaces.size()){ + if (gmsh_yynamespaces.size()){ if(help){ vec.push_back("//"); vec.push_back("// Structures"); vec.push_back("//"); } std::vector<std::string> strs; - nameSpaces.sprint(strs); + gmsh_yynamespaces.sprint(strs); vec.insert(vec.end(), strs.begin(), strs.end()); } } @@ -14643,109 +14150,6 @@ void setColor(const std::vector<std::pair<int, int> > &dimTags, } } -int NEWPOINT() -{ - int tag = GModel::current()->getGEOInternals()->getMaxTag(0) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(0) + 1); - return tag; -} - -int NEWLINE() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(1) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(1) + 1); - return tag; -} - -int NEWLINELOOP() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(-1) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(-1) + 1); - return tag; -} - -int NEWSURFACE() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(2) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(2) + 1); - return tag; -} - -int NEWSURFACELOOP() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(-2) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(-2) + 1); - return tag; -} - -int NEWVOLUME() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(3) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(3) + 1); - return tag; -} - -int NEWREG() -{ - int tag = 0; - for(int dim = -2; dim <= 3; dim++){ - if(dim) - tag = std::max(tag, GModel::current()->getGEOInternals()->getMaxTag(dim) + 1); - } - tag = std::max(tag, GModel::current()->getGEOInternals()->getMaxPhysicalTag() + 1); - if(GModel::current()->getOCCInternals()){ - for(int dim = -2; dim <= 3; dim++){ - if(dim) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(dim) + 1); - } - } - return tag; -} - -int NEWFIELD() -{ -#if defined(HAVE_MESH) - return (GModel::current()->getFields()->maxId() + 1); -#else - return 0; -#endif -} - -int NEWPHYSICAL() -{ - if(CTX::instance()->geom.oldNewreg) - return NEWREG(); - else - return (GModel::current()->getGEOInternals()->getMaxPhysicalTag() + 1); -} - - double treat_Struct_FullName_Float (char* c1, char* c2, int type_var, int index, double val_default, int type_treat) { @@ -14782,7 +14186,7 @@ double treat_Struct_FullName_Float else{ if (type_var == 1) { std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); - if(nameSpaces.getTag(struct_namespace, struct_name, out)) { + if(gmsh_yynamespaces.getTag(struct_namespace, struct_name, out)) { out = val_default; if (type_treat == 0) yymsg(0, "Unknown variable '%s'", struct_name.c_str()); } @@ -14802,7 +14206,7 @@ double treat_Struct_FullName_dot_tSTRING_Float double out; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember + switch (gmsh_yynamespaces.getMember (struct_namespace, struct_name, key_member, out, index)) { case 0: if (type_treat == 1) out = 1.; // Exists (type_treat == 1) @@ -14814,7 +14218,7 @@ double treat_Struct_FullName_dot_tSTRING_Float case 2: if (type_treat != 0) { const std::string * out_dummy = NULL; - out = (nameSpaces.getMember + out = (gmsh_yynamespaces.getMember (struct_namespace, struct_name, key_member, out_dummy))? val_default : 1.; } @@ -14842,11 +14246,11 @@ List_T * treat_Struct_FullName_dot_tSTRING_ListOfFloat const std::vector<double> * out_vector; double val_; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember_Vector + switch (gmsh_yynamespaces.getMember_Vector (struct_namespace, struct_name, key_member, out_vector)) { case 0: out = List_Create(out_vector->size(), 1, sizeof(double)); - for(int i = 0; i < out_vector->size(); i++) { + for(unsigned int i = 0; i < out_vector->size(); i++) { val_ = out_vector->at(i); List_Add(out, &val_); } @@ -14871,7 +14275,7 @@ int treat_Struct_FullName_dot_tSTRING_Float_getDim int out; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember_Dim + switch (gmsh_yynamespaces.getMember_Dim (struct_namespace, struct_name, key_member, out)) { case 0: break; @@ -14924,7 +14328,7 @@ char* treat_Struct_FullName_dot_tSTRING_String std::string out_tmp; // PD: we should avoid that -> StringOption() to be changed std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember + switch (gmsh_yynamespaces.getMember (struct_namespace, struct_name, key_member, out, index)) { case 0: break; @@ -14959,11 +14363,11 @@ List_T * treat_Struct_FullName_dot_tSTRING_ListOfString const std::vector<std::string> * out_vector; char * val_; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember_Vector + switch (gmsh_yynamespaces.getMember_Vector (struct_namespace, struct_name, key_member, out_vector)) { case 0: out = List_Create(out_vector->size(), 1, sizeof(char *)); - for(int i = 0; i < out_vector->size(); i++) { + for(unsigned int i = 0; i < out_vector->size(); i++) { val_ = strsave((char*)out_vector->at(i).c_str()); List_Add(out, &val_); } diff --git a/Parser/Gmsh.tab.hpp b/Parser/Gmsh.tab.hpp index bad8e4be8cd27b485b6bdf78a664faee91368aad..8bebf4cf9e971a7412368e144c17030c11cd9f3a 100644 --- a/Parser/Gmsh.tab.hpp +++ b/Parser/Gmsh.tab.hpp @@ -146,122 +146,123 @@ tRectangle = 362, tDisk = 363, tWire = 364, - tCharacteristic = 365, - tLength = 366, - tParametric = 367, - tElliptic = 368, - tRefineMesh = 369, - tAdaptMesh = 370, - tRelocateMesh = 371, - tSetFactory = 372, - tThruSections = 373, - tWedge = 374, - tFillet = 375, - tChamfer = 376, - tPlane = 377, - tRuled = 378, - tTransfinite = 379, - tPhysical = 380, - tCompound = 381, - tPeriodic = 382, - tUsing = 383, - tPlugin = 384, - tDegenerated = 385, - tRecursive = 386, - tRotate = 387, - tTranslate = 388, - tSymmetry = 389, - tDilate = 390, - tExtrude = 391, - tLevelset = 392, - tAffine = 393, - tBooleanUnion = 394, - tBooleanIntersection = 395, - tBooleanDifference = 396, - tBooleanSection = 397, - tBooleanFragments = 398, - tThickSolid = 399, - tRecombine = 400, - tSmoother = 401, - tSplit = 402, - tDelete = 403, - tCoherence = 404, - tIntersect = 405, - tMeshAlgorithm = 406, - tReverse = 407, - tLayers = 408, - tScaleLast = 409, - tHole = 410, - tAlias = 411, - tAliasWithOptions = 412, - tCopyOptions = 413, - tQuadTriAddVerts = 414, - tQuadTriNoNewVerts = 415, - tRecombLaterals = 416, - tTransfQuadTri = 417, - tText2D = 418, - tText3D = 419, - tInterpolationScheme = 420, - tTime = 421, - tCombine = 422, - tBSpline = 423, - tBezier = 424, - tNurbs = 425, - tNurbsOrder = 426, - tNurbsKnots = 427, - tColor = 428, - tColorTable = 429, - tFor = 430, - tIn = 431, - tEndFor = 432, - tIf = 433, - tElseIf = 434, - tElse = 435, - tEndIf = 436, - tExit = 437, - tAbort = 438, - tField = 439, - tReturn = 440, - tCall = 441, - tSlide = 442, - tMacro = 443, - tShow = 444, - tHide = 445, - tGetValue = 446, - tGetStringValue = 447, - tGetEnv = 448, - tGetString = 449, - tGetNumber = 450, - tUnique = 451, - tHomology = 452, - tCohomology = 453, - tBetti = 454, - tExists = 455, - tFileExists = 456, - tGetForced = 457, - tGetForcedStr = 458, - tGMSH_MAJOR_VERSION = 459, - tGMSH_MINOR_VERSION = 460, - tGMSH_PATCH_VERSION = 461, - tGmshExecutableName = 462, - tSetPartition = 463, - tNameToString = 464, - tStringToName = 465, - tAFFECTDIVIDE = 466, - tAFFECTTIMES = 467, - tAFFECTMINUS = 468, - tAFFECTPLUS = 469, - tOR = 470, - tAND = 471, - tNOTEQUAL = 472, - tEQUAL = 473, - tGREATERGREATER = 474, - tLESSLESS = 475, - tGREATEROREQUAL = 476, - tLESSOREQUAL = 477, - UNARYPREC = 478, - tMINUSMINUS = 479, - tPLUSPLUS = 480 + tGeoEntity = 365, + tCharacteristic = 366, + tLength = 367, + tParametric = 368, + tElliptic = 369, + tRefineMesh = 370, + tAdaptMesh = 371, + tRelocateMesh = 372, + tSetFactory = 373, + tThruSections = 374, + tWedge = 375, + tFillet = 376, + tChamfer = 377, + tPlane = 378, + tRuled = 379, + tTransfinite = 380, + tPhysical = 381, + tCompound = 382, + tPeriodic = 383, + tUsing = 384, + tPlugin = 385, + tDegenerated = 386, + tRecursive = 387, + tRotate = 388, + tTranslate = 389, + tSymmetry = 390, + tDilate = 391, + tExtrude = 392, + tLevelset = 393, + tAffine = 394, + tBooleanUnion = 395, + tBooleanIntersection = 396, + tBooleanDifference = 397, + tBooleanSection = 398, + tBooleanFragments = 399, + tThickSolid = 400, + tRecombine = 401, + tSmoother = 402, + tSplit = 403, + tDelete = 404, + tCoherence = 405, + tIntersect = 406, + tMeshAlgorithm = 407, + tReverse = 408, + tLayers = 409, + tScaleLast = 410, + tHole = 411, + tAlias = 412, + tAliasWithOptions = 413, + tCopyOptions = 414, + tQuadTriAddVerts = 415, + tQuadTriNoNewVerts = 416, + tRecombLaterals = 417, + tTransfQuadTri = 418, + tText2D = 419, + tText3D = 420, + tInterpolationScheme = 421, + tTime = 422, + tCombine = 423, + tBSpline = 424, + tBezier = 425, + tNurbs = 426, + tNurbsOrder = 427, + tNurbsKnots = 428, + tColor = 429, + tColorTable = 430, + tFor = 431, + tIn = 432, + tEndFor = 433, + tIf = 434, + tElseIf = 435, + tElse = 436, + tEndIf = 437, + tExit = 438, + tAbort = 439, + tField = 440, + tReturn = 441, + tCall = 442, + tSlide = 443, + tMacro = 444, + tShow = 445, + tHide = 446, + tGetValue = 447, + tGetStringValue = 448, + tGetEnv = 449, + tGetString = 450, + tGetNumber = 451, + tUnique = 452, + tHomology = 453, + tCohomology = 454, + tBetti = 455, + tExists = 456, + tFileExists = 457, + tGetForced = 458, + tGetForcedStr = 459, + tGMSH_MAJOR_VERSION = 460, + tGMSH_MINOR_VERSION = 461, + tGMSH_PATCH_VERSION = 462, + tGmshExecutableName = 463, + tSetPartition = 464, + tNameToString = 465, + tStringToName = 466, + tAFFECTDIVIDE = 467, + tAFFECTTIMES = 468, + tAFFECTMINUS = 469, + tAFFECTPLUS = 470, + tOR = 471, + tAND = 472, + tNOTEQUAL = 473, + tEQUAL = 474, + tGREATERGREATER = 475, + tLESSLESS = 476, + tGREATEROREQUAL = 477, + tLESSOREQUAL = 478, + UNARYPREC = 479, + tMINUSMINUS = 480, + tPLUSPLUS = 481 }; #endif /* Tokens. */ @@ -372,129 +373,130 @@ #define tRectangle 362 #define tDisk 363 #define tWire 364 -#define tCharacteristic 365 -#define tLength 366 -#define tParametric 367 -#define tElliptic 368 -#define tRefineMesh 369 -#define tAdaptMesh 370 -#define tRelocateMesh 371 -#define tSetFactory 372 -#define tThruSections 373 -#define tWedge 374 -#define tFillet 375 -#define tChamfer 376 -#define tPlane 377 -#define tRuled 378 -#define tTransfinite 379 -#define tPhysical 380 -#define tCompound 381 -#define tPeriodic 382 -#define tUsing 383 -#define tPlugin 384 -#define tDegenerated 385 -#define tRecursive 386 -#define tRotate 387 -#define tTranslate 388 -#define tSymmetry 389 -#define tDilate 390 -#define tExtrude 391 -#define tLevelset 392 -#define tAffine 393 -#define tBooleanUnion 394 -#define tBooleanIntersection 395 -#define tBooleanDifference 396 -#define tBooleanSection 397 -#define tBooleanFragments 398 -#define tThickSolid 399 -#define tRecombine 400 -#define tSmoother 401 -#define tSplit 402 -#define tDelete 403 -#define tCoherence 404 -#define tIntersect 405 -#define tMeshAlgorithm 406 -#define tReverse 407 -#define tLayers 408 -#define tScaleLast 409 -#define tHole 410 -#define tAlias 411 -#define tAliasWithOptions 412 -#define tCopyOptions 413 -#define tQuadTriAddVerts 414 -#define tQuadTriNoNewVerts 415 -#define tRecombLaterals 416 -#define tTransfQuadTri 417 -#define tText2D 418 -#define tText3D 419 -#define tInterpolationScheme 420 -#define tTime 421 -#define tCombine 422 -#define tBSpline 423 -#define tBezier 424 -#define tNurbs 425 -#define tNurbsOrder 426 -#define tNurbsKnots 427 -#define tColor 428 -#define tColorTable 429 -#define tFor 430 -#define tIn 431 -#define tEndFor 432 -#define tIf 433 -#define tElseIf 434 -#define tElse 435 -#define tEndIf 436 -#define tExit 437 -#define tAbort 438 -#define tField 439 -#define tReturn 440 -#define tCall 441 -#define tSlide 442 -#define tMacro 443 -#define tShow 444 -#define tHide 445 -#define tGetValue 446 -#define tGetStringValue 447 -#define tGetEnv 448 -#define tGetString 449 -#define tGetNumber 450 -#define tUnique 451 -#define tHomology 452 -#define tCohomology 453 -#define tBetti 454 -#define tExists 455 -#define tFileExists 456 -#define tGetForced 457 -#define tGetForcedStr 458 -#define tGMSH_MAJOR_VERSION 459 -#define tGMSH_MINOR_VERSION 460 -#define tGMSH_PATCH_VERSION 461 -#define tGmshExecutableName 462 -#define tSetPartition 463 -#define tNameToString 464 -#define tStringToName 465 -#define tAFFECTDIVIDE 466 -#define tAFFECTTIMES 467 -#define tAFFECTMINUS 468 -#define tAFFECTPLUS 469 -#define tOR 470 -#define tAND 471 -#define tNOTEQUAL 472 -#define tEQUAL 473 -#define tGREATERGREATER 474 -#define tLESSLESS 475 -#define tGREATEROREQUAL 476 -#define tLESSOREQUAL 477 -#define UNARYPREC 478 -#define tMINUSMINUS 479 -#define tPLUSPLUS 480 +#define tGeoEntity 365 +#define tCharacteristic 366 +#define tLength 367 +#define tParametric 368 +#define tElliptic 369 +#define tRefineMesh 370 +#define tAdaptMesh 371 +#define tRelocateMesh 372 +#define tSetFactory 373 +#define tThruSections 374 +#define tWedge 375 +#define tFillet 376 +#define tChamfer 377 +#define tPlane 378 +#define tRuled 379 +#define tTransfinite 380 +#define tPhysical 381 +#define tCompound 382 +#define tPeriodic 383 +#define tUsing 384 +#define tPlugin 385 +#define tDegenerated 386 +#define tRecursive 387 +#define tRotate 388 +#define tTranslate 389 +#define tSymmetry 390 +#define tDilate 391 +#define tExtrude 392 +#define tLevelset 393 +#define tAffine 394 +#define tBooleanUnion 395 +#define tBooleanIntersection 396 +#define tBooleanDifference 397 +#define tBooleanSection 398 +#define tBooleanFragments 399 +#define tThickSolid 400 +#define tRecombine 401 +#define tSmoother 402 +#define tSplit 403 +#define tDelete 404 +#define tCoherence 405 +#define tIntersect 406 +#define tMeshAlgorithm 407 +#define tReverse 408 +#define tLayers 409 +#define tScaleLast 410 +#define tHole 411 +#define tAlias 412 +#define tAliasWithOptions 413 +#define tCopyOptions 414 +#define tQuadTriAddVerts 415 +#define tQuadTriNoNewVerts 416 +#define tRecombLaterals 417 +#define tTransfQuadTri 418 +#define tText2D 419 +#define tText3D 420 +#define tInterpolationScheme 421 +#define tTime 422 +#define tCombine 423 +#define tBSpline 424 +#define tBezier 425 +#define tNurbs 426 +#define tNurbsOrder 427 +#define tNurbsKnots 428 +#define tColor 429 +#define tColorTable 430 +#define tFor 431 +#define tIn 432 +#define tEndFor 433 +#define tIf 434 +#define tElseIf 435 +#define tElse 436 +#define tEndIf 437 +#define tExit 438 +#define tAbort 439 +#define tField 440 +#define tReturn 441 +#define tCall 442 +#define tSlide 443 +#define tMacro 444 +#define tShow 445 +#define tHide 446 +#define tGetValue 447 +#define tGetStringValue 448 +#define tGetEnv 449 +#define tGetString 450 +#define tGetNumber 451 +#define tUnique 452 +#define tHomology 453 +#define tCohomology 454 +#define tBetti 455 +#define tExists 456 +#define tFileExists 457 +#define tGetForced 458 +#define tGetForcedStr 459 +#define tGMSH_MAJOR_VERSION 460 +#define tGMSH_MINOR_VERSION 461 +#define tGMSH_PATCH_VERSION 462 +#define tGmshExecutableName 463 +#define tSetPartition 464 +#define tNameToString 465 +#define tStringToName 466 +#define tAFFECTDIVIDE 467 +#define tAFFECTTIMES 468 +#define tAFFECTMINUS 469 +#define tAFFECTPLUS 470 +#define tOR 471 +#define tAND 472 +#define tNOTEQUAL 473 +#define tEQUAL 474 +#define tGREATERGREATER 475 +#define tLESSLESS 476 +#define tGREATEROREQUAL 477 +#define tLESSOREQUAL 478 +#define UNARYPREC 479 +#define tMINUSMINUS 480 +#define tPLUSPLUS 481 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 163 "Gmsh.y" +#line 164 "Gmsh.y" { char *c; int i; @@ -506,7 +508,7 @@ typedef union YYSTYPE struct TwoChar c2; } /* Line 1529 of yacc.c. */ -#line 510 "Gmsh.tab.hpp" +#line 512 "Gmsh.tab.hpp" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y index 15ebb184fc97f3e2e36d4966bfef8164ad8d239f..e7d904926db9ce71caa661a42065d12b2c105ea1 100644 --- a/Parser/Gmsh.y +++ b/Parser/Gmsh.y @@ -68,7 +68,8 @@ int gmsh_yyerrorstate = 0; int gmsh_yyviewindex = 0; std::map<std::string, gmsh_yysymbol> gmsh_yysymbols; std::map<std::string, std::vector<std::string> > gmsh_yystringsymbols; -NameSpaces nameSpaces; +std::string gmsh_yyfactory; +NameSpaces gmsh_yynamespaces; // static parser variables (accessible only in this file) #if defined(HAVE_POST) @@ -85,9 +86,9 @@ static gmshfpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS]; static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS]; static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3]; static std::string LoopControlVariablesNameTab[MAX_RECUR_LOOPS]; -static std::string factory; static std::string struct_name, struct_namespace; static int flag_tSTRING_alloc = 0; +static int dim_entity; static std::map<std::string, std::vector<double> > floatOptions; static std::map<std::string, std::vector<std::string> > charOptions; @@ -192,7 +193,7 @@ struct doubleXstring{ %token tDefineString tSetNumber tSetString %token tPoint tCircle tEllipse tLine tSphere tPolarSphere tSurface tSpline tVolume %token tBlock tCylinder tCone tTorus tEllipsoid tQuadric tShapeFromFile -%token tRectangle tDisk tWire +%token tRectangle tDisk tWire tGeoEntity %token tCharacteristic tLength tParametric tElliptic tRefineMesh tAdaptMesh %token tRelocateMesh tSetFactory tThruSections tWedge tFillet tChamfer %token tPlane tRuled tTransfinite tPhysical tCompound tPeriodic @@ -218,7 +219,7 @@ struct doubleXstring{ %type <d> FExpr FExpr_Single DefineStruct NameStruct_Arg GetForced_Default %type <v> VExpr VExpr_Single CircleOptions TransfiniteType %type <i> NumericAffectation NumericIncrement BooleanOperator BooleanOption -%type <i> PhysicalId0 PhysicalId1 PhysicalId2 PhysicalId3 +%type <i> PhysicalId_per_dim_entity GeoEntity GeoEntity123 GeoEntity12 GeoEntity02 %type <i> TransfiniteArrangement RecombineAngle InSphereCenter %type <i> Append AppendOrNot %type <u> ColorExpr @@ -279,8 +280,8 @@ GeoFormatItem : | Affectation { return 1; } | tSetFactory '(' StringExprVar ')' tEND { - factory = $3; - if(factory == "OpenCASCADE"){ + gmsh_yyfactory = $3; + if(gmsh_yyfactory == "OpenCASCADE"){ if(!GModel::current()->getOCCInternals()) GModel::current()->createOCCInternals(); for(int dim = -2; dim <= 3; dim++) @@ -1509,7 +1510,7 @@ CharParameterOption : // S H A P E -PhysicalId0 : +PhysicalId_per_dim_entity : FExpr { $$ = (int)$1; @@ -1518,69 +1519,12 @@ PhysicalId0 : { int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - $$ = GModel::current()->setPhysicalName(std::string($1), 0, t + 1); + $$ = GModel::current()->setPhysicalName(std::string($1), dim_entity, t + 1); Free($1); } | StringExpr ',' FExpr { - $$ = GModel::current()->setPhysicalName(std::string($1), 0, $3); - Free($1); - } -; - -PhysicalId1 : - FExpr - { - $$ = (int)$1; - } - | StringExpr - { - int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); - GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - $$ = GModel::current()->setPhysicalName(std::string($1), 1, t + 1); - Free($1); - } - | StringExpr ',' FExpr - { - $$ = GModel::current()->setPhysicalName(std::string($1), 1, $3); - Free($1); - } -; - -PhysicalId2 : - FExpr - { - $$ = (int)$1; - } - | StringExpr - { - int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); - GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - $$ = GModel::current()->setPhysicalName(std::string($1), 2, t + 1); - Free($1); - } - | StringExpr ',' FExpr - { - $$ = GModel::current()->setPhysicalName(std::string($1), 2, $3); - Free($1); - } -; - -PhysicalId3 : - FExpr - { - $$ = (int)$1; - } - | StringExpr - { - int t = GModel::current()->getGEOInternals()->getMaxPhysicalTag(); - GModel::current()->getGEOInternals()->setMaxPhysicalTag(t + 1); - $$ = GModel::current()->setPhysicalName(std::string($1), 3, t + 1); - Free($1); - } - | StringExpr ',' FExpr - { - $$ = GModel::current()->setPhysicalName(std::string($1), 3, $3); + $$ = GModel::current()->setPhysicalName(std::string($1), dim_entity, $3); Free($1); } ; @@ -1616,7 +1560,7 @@ Shape : double lc = CTX::instance()->geom.scalingFactor * $6[3]; if(lc == 0.) lc = MAX_LC; // no mesh size given at the point bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addVertex(num, x, y, z, lc); } else{ @@ -1636,7 +1580,7 @@ Shape : int num = (int)$3; std::vector<int> tags; ListOfDouble2Vector($6, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addLine(num, tags); } else{ @@ -1652,8 +1596,8 @@ Shape : int num = (int)$3; std::vector<int> tags; ListOfDouble2Vector($6, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Spline not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + r = GModel::current()->getOCCInternals()->addSpline(num, tags); } else{ r = GModel::current()->getGEOInternals()->addSpline(num, tags); @@ -1669,7 +1613,7 @@ Shape : std::vector<int> tags; ListOfDouble2Vector($6, tags); std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(tags.size() == 3){ r = GModel::current()->getOCCInternals()->addCircleArc (num, tags[0], tags[1], tags[2]); @@ -1706,7 +1650,7 @@ Shape : std::vector<int> tags; ListOfDouble2Vector($6, tags); std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(tags.size() == 3){ r = GModel::current()->getOCCInternals()->addEllipseArc (num, tags[0], tags[1], tags[2]); @@ -1745,8 +1689,8 @@ Shape : int num = (int)$3; std::vector<int> tags; ListOfDouble2Vector($6, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - r = GModel::current()->getOCCInternals()->addBSpline(num, tags); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "BSpline not yet available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->addBSpline(num, tags); @@ -1761,7 +1705,7 @@ Shape : int num = (int)$3; std::vector<int> tags; ListOfDouble2Vector($6, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addBezier(num, tags); } else{ @@ -1779,8 +1723,8 @@ Shape : std::vector<int> tags; ListOfDouble2Vector($6, tags); std::vector<double> knots; ListOfDouble2Vector($8, knots); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Nurbs not available yet with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Nurbs not available yet with OpenCASCADE geometry kernel"); } else{ int order = knots.size() - tags.size() - 1; @@ -1794,26 +1738,16 @@ Shape : $$.Type = MSH_SEGM_NURBS; $$.Num = num; } - | tCompound tLine '(' FExpr ')' tAFFECT ListOfDouble tEND - { - int num = (int)$4; - std::vector<int> tags; ListOfDouble2Vector($7, tags); - bool r = GModel::current()->getGEOInternals()->addCompoundLine(num, tags); - if(!r) yymsg(0, "Could not add compound line"); - List_Delete($7); - $$.Type = MSH_SEGM_COMPOUND; - $$.Num = num; - } | tWire '(' FExpr ')' tAFFECT ListOfDouble tEND { int num = (int)$3; std::vector<int> tags; ListOfDouble2Vector($6, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addWire(num, tags, false); } else{ - yymsg(0, "Wire only available using OpenCASCADE factory"); + yymsg(0, "Wire only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add wire"); List_Delete($6); @@ -1825,7 +1759,7 @@ Shape : int num = (int)$4; std::vector<int> tags; ListOfDouble2Vector($7, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ for(unsigned int i = 0; i < tags.size(); i++) tags[i] = std::abs(tags[i]); // all edge tags > 0 for OCC r = GModel::current()->getOCCInternals()->addLineLoop(num, tags); @@ -1844,7 +1778,7 @@ Shape : int num = (int)$4; std::vector<int> tags; ListOfDouble2Vector($7, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addPlaneSurface(num, tags); } else{ @@ -1860,7 +1794,7 @@ Shape : int num = (int)$3; std::vector<int> wires; ListOfDouble2Vector($6, wires); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(wires.size() != 1){ yymsg(0, "OpenCASCADE face filling requires a single line loop"); } @@ -1914,7 +1848,7 @@ Shape : $$.Type = 0; bool r = true; if(param.size() >= 4 && param.size() <= 7){ - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ double a1 = (param.size() >= 5) ? param[4] : -M_PI/2; double a2 = (param.size() >= 6) ? param[5] : M_PI/2; double a3 = (param.size() >= 7) ? param[6] : 2.*M_PI; @@ -1922,7 +1856,7 @@ Shape : (num, param[0], param[1], param[2], param[3], a1, a2, a3); } else{ - yymsg(0, "Sphere only available with OpenCASCADE factory"); + yymsg(0, "Sphere only available with OpenCASCADE geometry kernel"); } $$.Type = MSH_VOLUME; } @@ -1957,7 +1891,7 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 6){ r = GModel::current()->getOCCInternals()->addBlock (num, param[0], param[1], param[2], param[3], param[4], param[5]); @@ -1967,7 +1901,7 @@ Shape : } } else{ - yymsg(0, "Block only available with OpenCASCADE factory"); + yymsg(0, "Block only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add block"); List_Delete($6); @@ -1979,7 +1913,7 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 5 || param.size() == 6){ double alpha = (param.size() == 6) ? param[5] : 2*M_PI; r = GModel::current()->getOCCInternals()->addTorus @@ -1990,7 +1924,7 @@ Shape : } } else{ - yymsg(0, "Torus only available with OpenCASCADE factory"); + yymsg(0, "Torus only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add torus"); List_Delete($6); @@ -2002,7 +1936,7 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 5 || param.size() == 6){ double r = (param.size() == 6) ? param[5] : 0.; r = GModel::current()->getOCCInternals()->addRectangle @@ -2013,7 +1947,7 @@ Shape : } } else{ - yymsg(0, "Rectangle only available with OpenCASCADE factory"); + yymsg(0, "Rectangle only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add rectangle"); List_Delete($6); @@ -2025,7 +1959,7 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 4 || param.size() == 5){ double ry = (param.size() == 5) ? param[4] : param[3]; r = GModel::current()->getOCCInternals()->addDisk @@ -2036,7 +1970,7 @@ Shape : } } else{ - yymsg(0, "Disk only available with OpenCASCADE factory"); + yymsg(0, "Disk only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add disk"); List_Delete($6); @@ -2048,7 +1982,7 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 7 || param.size() == 8){ double angle = (param.size() == 8) ? param[7] : 2*M_PI; r = GModel::current()->getOCCInternals()->addCylinder @@ -2060,7 +1994,7 @@ Shape : } } else{ - yymsg(0, "Cylinder only available with OpenCASCADE factory"); + yymsg(0, "Cylinder only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add cylinder"); List_Delete($6); @@ -2072,7 +2006,7 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() == 8 || param.size() == 9){ double alpha = (param.size() == 9) ? param[8] : 2*M_PI; r = GModel::current()->getOCCInternals()->addCone @@ -2084,7 +2018,7 @@ Shape : } } else{ - yymsg(0, "Cone only available with OpenCASCADE factory"); + yymsg(0, "Cone only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add cone"); List_Delete($6); @@ -2096,18 +2030,19 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - if(param.size() == 7){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(param.size() == 6 || param.size() == 7){ + double ltx = (param.size() == 7) ? param[6] : 0.; r = GModel::current()->getOCCInternals()->addWedge (num, param[0], param[1], param[2], param[3], param[4], param[5], - param[6]); + ltx); } else{ yymsg(0, "Wedge requires 7 parameters"); } } else{ - yymsg(0, "Wedge only available with OpenCASCADE factory"); + yymsg(0, "Wedge only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add wedge"); List_Delete($6); @@ -2119,65 +2054,33 @@ Shape : int num = (int)$3; std::vector<double> param; ListOfDouble2Vector($6, param); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ if(param.size() >= 2){ int in = (int)param[0]; double offset = param[1]; std::vector<int> exclude; for(unsigned int i = 2; i < param.size(); i++) exclude.push_back(param[i]); + std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThickSolid - (num, in, exclude, offset); + (num, in, exclude, offset, outDimTags); } else{ yymsg(0, "ThickSolid requires at least 2 parameters"); } } else{ - yymsg(0, "ThickSolid only available with OpenCASCADE factory"); + yymsg(0, "ThickSolid only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add thick solid"); List_Delete($6); } - | tCompound tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND - { - int num = (int)$4; - std::vector<int> tags; ListOfDouble2Vector($7, tags); - bool r = GModel::current()->getGEOInternals()->addCompoundSurface(num, tags); - if(!r) yymsg(0, "Could not add compound surface"); - List_Delete($7); - $$.Type = MSH_SURF_COMPOUND; - $$.Num = num; - } - | tCompound tSurface '(' FExpr ')' tAFFECT ListOfDouble tSTRING - '{' RecursiveListOfListOfDouble '}' tEND - { - int num = (int)$4; - std::vector<int> tags; ListOfDouble2Vector($7, tags); - std::vector<int> bndTags[4]; - for(int i = 0; i < List_Nbr($10); i++){ - if(i < 4) - ListOfDouble2Vector(*(List_T**)List_Pointer($10, i), bndTags[i]); - else - break; - } - bool r = GModel::current()->getGEOInternals()->addCompoundSurface - (num, tags, bndTags); - if(!r) yymsg(0, "Could not add compound surface"); - List_Delete($7); - Free($8); - for (int i = 0; i < List_Nbr($10); i++) - List_Delete(*(List_T**)List_Pointer($10, i)); - List_Delete($10); - $$.Type = MSH_SURF_COMPOUND; - $$.Num = num; - } | tSurface tSTRING '(' FExpr ')' tAFFECT ListOfDouble tEND { int num = (int)$4; std::vector<int> tags; ListOfDouble2Vector($7, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addSurfaceLoop(num, tags); } else{ @@ -2194,7 +2097,7 @@ Shape : int num = (int)$3; std::vector<int> tags; ListOfDouble2Vector($6, tags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addVolume(num, tags); } else{ @@ -2210,13 +2113,13 @@ Shape : int num = (int)$3; std::vector<int> wires; ListOfDouble2Vector($6, wires); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (num, wires, outDimTags, true, false); + (num, wires, true, false, outDimTags); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add thrusections"); List_Delete($6); @@ -2228,76 +2131,160 @@ Shape : int num = (int)$4; std::vector<int> wires; ListOfDouble2Vector($7, wires); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (num, wires, outDimTags, true, true); + (num, wires, true, true, outDimTags); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add ruled thrusections"); List_Delete($7); $$.Type = MSH_VOLUME; $$.Num = num; } - | tCompound tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND + | tCompound GeoEntity123 '(' FExpr ')' tAFFECT ListOfDouble tEND { int num = (int)$4; std::vector<int> tags; ListOfDouble2Vector($7, tags); - bool r = GModel::current()->getGEOInternals()->addCompoundVolume(num, tags); - if(!r) yymsg(0, "Could not add compound volume"); + switch ($2) { + case 1: + { + bool r = GModel::current()->getGEOInternals()->addCompoundLine(num, tags); + if(!r) yymsg(0, "Could not add compound line"); + } + $$.Type = MSH_SEGM_COMPOUND; + break; + case 2: + { + bool r = GModel::current()->getGEOInternals()->addCompoundSurface(num, tags); + if(!r) yymsg(0, "Could not add compound surface"); + } + $$.Type = MSH_SURF_COMPOUND; + break; + case 3: + { + bool r = GModel::current()->getGEOInternals()->addCompoundVolume(num, tags); + if(!r) yymsg(0, "Could not add compound volume"); + } + $$.Type = MSH_VOLUME_COMPOUND; + break; + } List_Delete($7); - $$.Type = MSH_VOLUME_COMPOUND; $$.Num = num; } - | tPhysical tPoint '(' PhysicalId0 ')' NumericAffectation ListOfDouble tEND + | tCompound GeoEntity123 '(' FExpr ')' tAFFECT ListOfDouble tSTRING + '{' RecursiveListOfListOfDouble '}' tEND { - int num = (int)$4; - int op = $6; - std::vector<int> tags; ListOfDouble2Vector($7, tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (0, num, op, tags); - if(!r) yymsg(0, "Could not modify physical point"); - List_Delete($7); - $$.Type = MSH_PHYSICAL_POINT; - $$.Num = num; + // Particular case only for dim 2 (Surface) + if ($2 == 2) { + int num = (int)$4; + std::vector<int> tags; ListOfDouble2Vector($7, tags); + std::vector<int> bndTags[4]; + for(int i = 0; i < List_Nbr($10); i++){ + if(i < 4) + ListOfDouble2Vector(*(List_T**)List_Pointer($10, i), bndTags[i]); + else + break; + } + bool r = GModel::current()->getGEOInternals()->addCompoundSurface + (num, tags, bndTags); + if(!r) yymsg(0, "Could not add compound surface"); + List_Delete($7); + Free($8); + for (int i = 0; i < List_Nbr($10); i++) + List_Delete(*(List_T**)List_Pointer($10, i)); + List_Delete($10); + $$.Type = MSH_SURF_COMPOUND; + $$.Num = num; + } + else { + yymsg(0, "GeoEntity dim out of range [2,2]"); + } } - | tPhysical tLine '(' PhysicalId1 ')' NumericAffectation ListOfDouble tEND + | tPhysical GeoEntity { - int num = (int)$4; - int op = $6; - std::vector<int> tags; ListOfDouble2Vector($7, tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (1, num, op, tags); - if(!r) yymsg(0, "Could not modify physical line"); - List_Delete($7); - $$.Type = MSH_PHYSICAL_LINE; - $$.Num = num; + dim_entity = $2; } - | tPhysical tSurface '(' PhysicalId2 ')' NumericAffectation ListOfDouble tEND + '(' PhysicalId_per_dim_entity ')' NumericAffectation ListOfDouble tEND { - int num = (int)$4; - int op = $6; - std::vector<int> tags; ListOfDouble2Vector($7, tags); + int num = (int)$5; + int op = $7; + std::vector<int> tags; ListOfDouble2Vector($8, tags); bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (2, num, op, tags); - if(!r) yymsg(0, "Could not modify physical surface"); - List_Delete($7); - $$.Type = MSH_PHYSICAL_SURFACE; + ($2, num, op, tags); + if(!r) + switch ($2) { + case 0: yymsg(0, "Could not modify physical point"); break; + case 1: yymsg(0, "Could not modify physical line"); break; + case 2: yymsg(0, "Could not modify physical surface"); break; + case 3: yymsg(0, "Could not modify physical volume"); break; + } + List_Delete($8); + switch ($2) { + case 0: $$.Type = MSH_PHYSICAL_POINT ; break; + case 1: $$.Type = MSH_PHYSICAL_LINE ; break; + case 2: $$.Type = MSH_PHYSICAL_SURFACE; break; + case 3: $$.Type = MSH_PHYSICAL_VOLUME ; break; + } $$.Num = num; } - | tPhysical tVolume '(' PhysicalId3 ')' NumericAffectation ListOfDouble tEND +; + +GeoEntity : + tPoint + { $$ = 0; } + | tLine + { $$ = 1; } + | tSurface + { $$ = 2; } + | tVolume + { $$ = 3; } + | tGeoEntity '{' FExpr '}' { - int num = (int)$4; - int op = $6; - std::vector<int> tags; ListOfDouble2Vector($7, tags); - bool r = GModel::current()->getGEOInternals()->modifyPhysicalGroup - (3, num, op, tags); - if(!r) yymsg(0, "Could not modify physical volume"); - List_Delete($7); - $$.Type = MSH_PHYSICAL_VOLUME; - $$.Num = num; + $$ = (int)$3; + if ($$<0 || $$>3) yymsg(0, "GeoEntity dim out of range [0,3]"); + } +; + +GeoEntity123 : + tLine + { $$ = 1; } + | tSurface + { $$ = 2; } + | tVolume + { $$ = 3; } + | tGeoEntity '{' FExpr '}' + { + $$ = (int)$3; + if ($$<1 || $$>3) yymsg(0, "GeoEntity dim out of range [1,3]"); + } +; + +GeoEntity12 : + tLine + { $$ = 1; } + | tSurface + { $$ = 2; } + | tGeoEntity '{' FExpr '}' + { + $$ = (int)$3; + if ($$<1 || $$>2) yymsg(0, "GeoEntity dim out of range [1,2]"); + } +; + +GeoEntity02 : + tPoint + { $$ = 0; } + | tLine + { $$ = 1; } + | tSurface + { $$ = 2; } + | tGeoEntity '{' FExpr '}' + { + $$ = (int)$3; + if ($$<0 || $$>2) yymsg(0, "GeoEntity dim out of range [0,2]"); } ; @@ -2309,7 +2296,7 @@ Transform : std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($4, dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->translate (dimTags, $2[0], $2[1], $2[2]); } @@ -2325,7 +2312,7 @@ Transform : std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($10, dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->rotate (dimTags, $5[0], $5[1], $5[2], $3[0], $3[1], $3[2], $7); } @@ -2341,8 +2328,9 @@ Transform : std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($4, dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - Msg::Error("Symmetry not implemented yet with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + r = GModel::current()->getOCCInternals()->symmetry + (dimTags, $2[0], $2[1], $2[2], $2[3]); } else{ r = GModel::current()->getGEOInternals()->symmetry @@ -2356,8 +2344,7 @@ Transform : std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($8, dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(1, "Warning Dilate OCC: Dilatation (second argument) + Translation (first argument) "); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->dilate (dimTags, $3[0], $3[1], $3[2], $5, $5, $5); } @@ -2373,8 +2360,7 @@ Transform : std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($8, dimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(1, "Warning Dilate OCC: Dilatation (second argument) + Translation (first argument) "); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->dilate (dimTags, $3[0], $3[1], $3[2], $5[0], $5[1], $5[2]); } @@ -2394,7 +2380,7 @@ Transform : std::string action($1); bool r = true; if(action == "Duplicata"){ - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->copy(inDimTags, outDimTags); } else{ @@ -2424,7 +2410,7 @@ Transform : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ yymsg(0, "Intersect line not available with OpenCASCADE"); } else{ @@ -2446,7 +2432,7 @@ Transform : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ yymsg(0, "Split Line not available with OpenCASCADE"); } else{ @@ -2479,47 +2465,19 @@ ListOfShapes : { List_Add($$, &$2); } - | ListOfShapes tPoint '{' RecursiveListOfDouble '}' tEND + | ListOfShapes GeoEntity '{' RecursiveListOfDouble '}' tEND { for(int i = 0; i < List_Nbr($4); i++){ double d; List_Read($4, i, &d); Shape s; s.Num = (int)d; - s.Type = MSH_POINT; - List_Add($$, &s); - } - } - | ListOfShapes tLine '{' RecursiveListOfDouble '}' tEND - { - for(int i = 0; i < List_Nbr($4); i++){ - double d; - List_Read($4, i, &d); - Shape s; - s.Num = (int)d; - s.Type = MSH_SEGM_LINE; - List_Add($$, &s); - } - } - | ListOfShapes tSurface '{' RecursiveListOfDouble '}' tEND - { - for(int i = 0; i < List_Nbr($4); i++){ - double d; - List_Read($4, i, &d); - Shape s; - s.Num = (int)d; - s.Type = MSH_SURF_PLAN; // we don't care about the actual type - List_Add($$, &s); - } - } - | ListOfShapes tVolume '{' RecursiveListOfDouble '}' tEND - { - for(int i = 0; i < List_Nbr($4); i++){ - double d; - List_Read($4, i, &d); - Shape s; - s.Num = (int)d; - s.Type = MSH_VOLUME; + switch ($2) { + case 0: s.Type = MSH_POINT ; break; + case 1: s.Type = MSH_SEGM_LINE; break; + case 2: s.Type = MSH_SURF_PLAN; break; // we don't care about the actual type + case 3: s.Type = MSH_VOLUME ; break; + } List_Add($$, &s); } } @@ -2894,22 +2852,44 @@ Delete : { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($3, dimTags); - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + bool changed = false; + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ GModel::current()->getOCCInternals()->remove(dimTags); + changed = GModel::current()->getOCCInternals()->getChanged(); + if(changed) + GModel::current()->getOCCInternals()->synchronize(GModel::current()); + } + else{ + GModel::current()->getGEOInternals()->remove(dimTags); + changed = GModel::current()->getGEOInternals()->getChanged(); + if(changed) + GModel::current()->getGEOInternals()->synchronize(GModel::current()); + } + if(!changed){ + GModel::current()->remove(dimTags); } - GModel::current()->getGEOInternals()->remove(dimTags); - GModel::current()->remove(dimTags); List_Delete($3); } | tRecursive tDelete '{' ListOfShapes '}' { std::vector<std::pair<int, int> > dimTags; ListOfShapes2VectorOfPairs($4, dimTags); - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + bool changed = false; + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ GModel::current()->getOCCInternals()->remove(dimTags, true); + changed = GModel::current()->getOCCInternals()->getChanged(); + if(changed) + GModel::current()->getOCCInternals()->synchronize(GModel::current()); + } + else{ + GModel::current()->getGEOInternals()->remove(dimTags, true); + changed = GModel::current()->getGEOInternals()->getChanged(); + if(changed) + GModel::current()->getGEOInternals()->synchronize(GModel::current()); + } + if(!changed){ + GModel::current()->remove(dimTags, true); } - GModel::current()->getGEOInternals()->remove(dimTags, true); - GModel::current()->remove(dimTags, true); List_Delete($4); } | tDelete tField '[' FExpr ']' tEND @@ -2975,7 +2955,7 @@ Delete : } | tDelete tDefineStruct tEND { - nameSpaces.clear(); + gmsh_yynamespaces.clear(); } ; @@ -3619,7 +3599,6 @@ Loop : } ; - // E X T R U D E Extrude : @@ -3628,7 +3607,7 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($4, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->extrude (inDimTags, $2[0], $2[1], $2[2], outDimTags); } @@ -3646,7 +3625,7 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($10, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->revolve (inDimTags, $5[0], $5[1], $5[2], $3[0], $3[1], $3[2], $7, outDimTags); } @@ -3664,8 +3643,8 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($12, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Twisting extrude not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Twisting extrude not available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->twist @@ -3688,7 +3667,7 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($4, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->extrude (inDimTags, $2[0], $2[1], $2[2], outDimTags, &extr); } @@ -3712,7 +3691,7 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($10, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->revolve (inDimTags, $5[0], $5[1], $5[2], $3[0], $3[1], $3[2], $7, outDimTags, &extr); @@ -3738,8 +3717,8 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($12, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Twisting extrude not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Twisting extrude not available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->twist @@ -3762,8 +3741,8 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($3, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ - yymsg(0, "Boundary layer extrusion not available with OpenCASCADE factory"); + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + yymsg(0, "Boundary layer extrusion not available with OpenCASCADE geometry kernel"); } else{ r = GModel::current()->getGEOInternals()->boundaryLayer @@ -3779,11 +3758,11 @@ Extrude : std::vector<std::pair<int, int> > inDimTags, outDimTags; ListOfShapes2VectorOfPairs($3, inDimTags); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ r = GModel::current()->getOCCInternals()->addPipe(inDimTags, (int)$8, outDimTags); } else{ - yymsg(0, "Pipe only available with OpenCASCADE factory"); + yymsg(0, "Pipe only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not extrude shapes"); $$ = $3; @@ -3794,15 +3773,15 @@ Extrude : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<int> wires; ListOfDouble2Vector($2, wires); std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (-1, wires, outDimTags, false, false); + (-1, wires, false, false, outDimTags); VectorOfPairs2ListOfShapes(outDimTags, $$); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add thrusections"); List_Delete($2); @@ -3811,15 +3790,15 @@ Extrude : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<int> wires; ListOfDouble2Vector($3, wires); std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->addThruSections - (-1, wires, outDimTags, false, true); + (-1, wires, false, true, outDimTags); VectorOfPairs2ListOfShapes(outDimTags, $$); } else{ - yymsg(0, "ThruSections only available with OpenCASCADE factory"); + yymsg(0, "ThruSections only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not add ruled thrusections"); List_Delete($3); @@ -3828,17 +3807,17 @@ Extrude : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ double radius = $9; std::vector<int> regions, edges; ListOfDouble2Vector($3, regions); ListOfDouble2Vector($6, edges); std::vector<std::pair<int, int> > outDimTags; r = GModel::current()->getOCCInternals()->fillet - (regions, edges, radius, outDimTags); + (regions, edges, radius, outDimTags, true); VectorOfPairs2ListOfShapes(outDimTags, $$); } else{ - yymsg(0, "Fillet only available with OpenCASCADE factory"); + yymsg(0, "Fillet only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not fillet shapes"); List_Delete($3); @@ -3958,19 +3937,19 @@ Boolean : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int > > object, tool, out; ListOfShapes2VectorOfPairs($3, object); ListOfShapes2VectorOfPairs($7, tool); // currently we don't distinguish between Delete and Recursive Delete: // we always delete recursively. Let us know if you have examples where // having the choice would be interesting - r = GModel::current()->getOCCInternals()->applyBooleanOperator + r = GModel::current()->getOCCInternals()->booleanOperator (-1, (OCC_Internals::BooleanOperator)$1, object, tool, out, $4, $8); VectorOfPairs2ListOfShapes(out, $$); } else{ - yymsg(0, "Boolean operators only available with OpenCASCADE factory"); + yymsg(0, "Boolean operators only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could not apply boolean operator"); List_Delete($3); @@ -3980,14 +3959,14 @@ Boolean : { $$ = List_Create(2, 1, sizeof(Shape)); bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > out; std::string tmp = FixRelativePath(gmsh_yyname, $3); GModel::current()->getOCCInternals()->importShapes(tmp, true, out); VectorOfPairs2ListOfShapes(out, $$); } else{ - yymsg(0, "ShapeFromFile only available with OpenCASCADE factory"); + yymsg(0, "ShapeFromFile only available with OpenCASCADE geometry kernel"); } if(!r) yymsg(0, "Could import shape"); Free($3); @@ -3999,14 +3978,14 @@ BooleanShape : '{' ListOfShapes BooleanOption '}' tEND { bool r = true; - if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ + if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){ std::vector<std::pair<int, int> > object, tool, out; ListOfShapes2VectorOfPairs($7, object); ListOfShapes2VectorOfPairs($11, tool); // currently we don't distinguish between Delete and Recursive Delete: // we always delete recursively. Let us know if you have examples where // having the choice would be interesting - r = GModel::current()->getOCCInternals()->applyBooleanOperator + r = GModel::current()->getOCCInternals()->booleanOperator ((int)$3, (OCC_Internals::BooleanOperator)$1, object, tool, out, $8, $12); } if(!r) yymsg(0, "Could not apply boolean operator"); @@ -4527,63 +4506,18 @@ Constraints : List_Delete($5); List_Delete($10); } - | tPoint '{' RecursiveListOfDouble '}' tIn tSurface '{' FExpr '}' tEND + | GeoEntity '{' RecursiveListOfDouble '}' tIn GeoEntity '{' FExpr '}' tEND { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - addEmbedded(0, tags, 2, (int)$8); - List_Delete($3); - } - | tLine '{' RecursiveListOfDouble '}' tIn tSurface '{' FExpr '}' tEND - { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - addEmbedded(1, tags, 2, (int)$8); - List_Delete($3); - } - | tPoint '{' RecursiveListOfDouble '}' tIn tVolume '{' FExpr '}' tEND - { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - addEmbedded(0, tags, 3, (int)$8); - List_Delete($3); - } - | tLine '{' RecursiveListOfDouble '}' tIn tVolume '{' FExpr '}' tEND - { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - addEmbedded(1, tags, 3, (int)$8); - List_Delete($3); - } - | tSurface '{' RecursiveListOfDouble '}' tIn tVolume '{' FExpr '}' tEND - { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - addEmbedded(2, tags, 3, (int)$8); - List_Delete($3); - } - | tReverse tSurface ListOfDoubleOrAll tEND - { - // reverse mesh constraints are stored in GEO internals in addition to - // GModel, as they can be copied around during GEO operations - if(GModel::current()->getOCCInternals() && - GModel::current()->getOCCInternals()->getChanged()) - GModel::current()->getOCCInternals()->synchronize(GModel::current()); - if(!$3){ - GModel::current()->getGEOInternals()->setReverseMesh(2, 0); - for(GModel::fiter it = GModel::current()->firstFace(); - it != GModel::current()->lastFace(); it++){ - (*it)->meshAttributes.reverseMesh = 1; - } + if (($6==2 || $6==3) && $1<$6 ) { + std::vector<int> tags; ListOfDouble2Vector($3, tags); + addEmbedded($1, tags, $6, (int)$8); } - else{ - for(int i = 0; i < List_Nbr($3); i++){ - double d; - List_Read($3, i, &d); - int num = (int)d; - GModel::current()->getGEOInternals()->setReverseMesh(2, num); - GFace *gf = GModel::current()->getFaceByTag(num); - if(gf) gf->meshAttributes.reverseMesh = 1; - } - List_Delete($3); + else { + yymsg(0, "GeoEntity of dim %d In GeoEntity of dim %d not allowed", $1, $6); } + List_Delete($3); } - | tReverse tLine ListOfDoubleOrAll tEND + | tReverse GeoEntity12 ListOfDoubleOrAll tEND { // reverse mesh constraints are stored in GEO internals in addition to // GModel, as they can be copied around during GEO operations @@ -4591,10 +4525,20 @@ Constraints : GModel::current()->getOCCInternals()->getChanged()) GModel::current()->getOCCInternals()->synchronize(GModel::current()); if(!$3){ - GModel::current()->getGEOInternals()->setReverseMesh(1, 0); - for(GModel::eiter it = GModel::current()->firstEdge(); - it != GModel::current()->lastEdge(); it++){ - (*it)->meshAttributes.reverseMesh = 1; + GModel::current()->getGEOInternals()->setReverseMesh($2, 0); + switch ($2) { + case 1: + for(GModel::eiter it = GModel::current()->firstEdge(); + it != GModel::current()->lastEdge(); it++){ + (*it)->meshAttributes.reverseMesh = 1; + } + break; + case 2: + for(GModel::fiter it = GModel::current()->firstFace(); + it != GModel::current()->lastFace(); it++){ + (*it)->meshAttributes.reverseMesh = 1; + } + break; } } else{ @@ -4602,60 +4546,70 @@ Constraints : double d; List_Read($3, i, &d); int num = (int)d; - GModel::current()->getGEOInternals()->setReverseMesh(1, num); - GEdge *ge = GModel::current()->getEdgeByTag(num); - if(ge) ge->meshAttributes.reverseMesh = 1; - } - List_Delete($3); - } - } - | tRelocateMesh tPoint ListOfDoubleOrAll tEND - { - if(!$3){ - for(GModel::viter it = GModel::current()->firstVertex(); - it != GModel::current()->lastVertex(); it++) - (*it)->relocateMeshVertices(); - } - else{ - for(int i = 0; i < List_Nbr($3); i++){ - double d; - List_Read($3, i, &d); - GVertex *gv = GModel::current()->getVertexByTag((int)d); - if(gv) gv->relocateMeshVertices(); + GModel::current()->getGEOInternals()->setReverseMesh($2, num); + switch ($2) { + case 1: + { + GEdge *ge = GModel::current()->getEdgeByTag(num); + if(ge) ge->meshAttributes.reverseMesh = 1; + } + break; + case 2: + { + GFace *gf = GModel::current()->getFaceByTag(num); + if(gf) gf->meshAttributes.reverseMesh = 1; + } + break; + } } List_Delete($3); } } - | tRelocateMesh tLine ListOfDoubleOrAll tEND + | tRelocateMesh GeoEntity02 ListOfDoubleOrAll tEND { if(!$3){ - for(GModel::eiter it = GModel::current()->firstEdge(); - it != GModel::current()->lastEdge(); it++) - (*it)->relocateMeshVertices(); - } - else{ - for(int i = 0; i < List_Nbr($3); i++){ - double d; - List_Read($3, i, &d); - GEdge *ge = GModel::current()->getEdgeByTag((int)d); - if(ge) ge->relocateMeshVertices(); + switch ($2) { + case 0: + for(GModel::viter it = GModel::current()->firstVertex(); + it != GModel::current()->lastVertex(); it++) + (*it)->relocateMeshVertices(); + break; + case 1: + for(GModel::eiter it = GModel::current()->firstEdge(); + it != GModel::current()->lastEdge(); it++) + (*it)->relocateMeshVertices(); + break; + case 2: + for(GModel::fiter it = GModel::current()->firstFace(); + it != GModel::current()->lastFace(); it++) + (*it)->relocateMeshVertices(); + break; } - List_Delete($3); - } - } - | tRelocateMesh tSurface ListOfDoubleOrAll tEND - { - if(!$3){ - for(GModel::fiter it = GModel::current()->firstFace(); - it != GModel::current()->lastFace(); it++) - (*it)->relocateMeshVertices(); } else{ for(int i = 0; i < List_Nbr($3); i++){ double d; List_Read($3, i, &d); - GFace *gf = GModel::current()->getFaceByTag((int)d); - if(gf) gf->relocateMeshVertices(); + switch ($2) { + case 0: + { + GVertex *gv = GModel::current()->getVertexByTag((int)d); + if(gv) gv->relocateMeshVertices(); + } + break; + case 1: + { + GEdge *ge = GModel::current()->getEdgeByTag((int)d); + if(ge) ge->relocateMeshVertices(); + } + break; + case 2: + { + GFace *gf = GModel::current()->getFaceByTag((int)d); + if(gf) gf->relocateMeshVertices(); + } + break; + } } List_Delete($3); } @@ -4672,27 +4626,14 @@ Constraints : } List_Delete($3); } - | tCompound tLine ListOfDouble tEND + | tCompound GeoEntity123 ListOfDouble tEND { std::vector<int> tags; ListOfDouble2Vector($3, tags); - GModel::current()->getGEOInternals()->setCompoundMesh(1, tags); - List_Delete($3); - } - | tCompound tSurface ListOfDouble tEND - { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - GModel::current()->getGEOInternals()->setCompoundMesh(2, tags); - List_Delete($3); - } - | tCompound tVolume ListOfDouble tEND - { - std::vector<int> tags; ListOfDouble2Vector($3, tags); - GModel::current()->getGEOInternals()->setCompoundMesh(3, tags); + GModel::current()->getGEOInternals()->setCompoundMesh($2, tags); List_Delete($3); } ; - // C O H E R E N C E Coherence : @@ -4946,13 +4887,13 @@ FExpr_Single : | tDimNameSpace LP String__Index RP { std::string struct_namespace($3); - $$ = (double)nameSpaces[struct_namespace].size(); + $$ = (double)gmsh_yynamespaces[struct_namespace].size(); Free($3); } | tDimNameSpace LP RP { std::string struct_namespace(std::string("")); - $$ = (double)nameSpaces[struct_namespace].size(); + $$ = (double)gmsh_yynamespaces[struct_namespace].size(); } | String__Index NumericIncrement @@ -5160,7 +5101,7 @@ DefineStruct : std::string struct_namespace($2.char1? $2.char1 : std::string("")), struct_name($2.char2); init_options - (nameSpaces.getMember_ValMax(struct_namespace, struct_name)); + (gmsh_yynamespaces.getMember_ValMax(struct_namespace, struct_name)); } '[' FloatParameterOptionsOrNone_NoComma ']' { @@ -5168,9 +5109,9 @@ DefineStruct : struct_name($2.char2); Free($2.char1); Free($2.char2); int tag_out; - if (nameSpaces.defStruct(struct_namespace, struct_name, - floatOptions, charOptions, - tag_out, member_ValMax, $3)) + if (gmsh_yynamespaces.defStruct(struct_namespace, struct_name, + floatOptions, charOptions, + tag_out, member_ValMax, $3)) yymsg(0, "Redefinition of Struct '%s::%s'", struct_namespace.c_str(), struct_name.c_str()); $$ = (double)tag_out; @@ -5207,7 +5148,6 @@ AppendOrNot : { $$ = $2; } ; - VExpr : VExpr_Single { @@ -5372,97 +5312,28 @@ FExpr_Multi : List_Add($$, &y); List_Add($$, &z); } - | tPoint tBIGSTR + | GeoEntity tBIGSTR { $$ = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(0, $$); + getAllElementaryTags($1, $$); Free($2); } - | tLine tBIGSTR - { - $$ = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(1, $$); - Free($2); - } - | tSurface tBIGSTR - { - $$ = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(2, $$); - Free($2); - } - | tVolume tBIGSTR - { - $$ = List_Create(10, 10, sizeof(double)); - getAllElementaryTags(3, $$); - Free($2); - } - | tPhysical tPoint ListOfDoubleOrAll - { - $$ = List_Create(10, 10, sizeof(double)); - if(!$3){ - getAllPhysicalTags(0, $$); - } - else{ - getElementaryTagsForPhysicalGroups(0, $3, $$); - List_Delete($3); - } - } - | tPhysical tLine ListOfDoubleOrAll + | tPhysical GeoEntity ListOfDoubleOrAll { $$ = List_Create(10, 10, sizeof(double)); if(!$3){ - getAllPhysicalTags(1, $$); + getAllPhysicalTags($2, $$); } else{ - getElementaryTagsForPhysicalGroups(1, $3, $$); + getElementaryTagsForPhysicalGroups($2, $3, $$); List_Delete($3); } } - | tPhysical tSurface ListOfDoubleOrAll - { - $$ = List_Create(10, 10, sizeof(double)); - if(!$3){ - getAllPhysicalTags(2, $$); - } - else{ - getElementaryTagsForPhysicalGroups(2, $3, $$); - List_Delete($3); - } - } - | tPhysical tVolume ListOfDoubleOrAll - { - $$ = List_Create(10, 10, sizeof(double)); - if(!$3){ - getAllPhysicalTags(3, $$); - } - else{ - getElementaryTagsForPhysicalGroups(3, $3, $$); - List_Delete($3); - } - } - | tPoint tIn tBoundingBox - '{' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr '}' - { - $$ = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(0, $5, $7, $9, $11, $13, $15, $$); - } - | tLine tIn tBoundingBox - '{' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr '}' - { - $$ = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(1, $5, $7, $9, $11, $13, $15, $$); - } - | tSurface tIn tBoundingBox - '{' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr '}' - { - $$ = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(2, $5, $7, $9, $11, $13, $15, $$); - } - | tVolume tIn tBoundingBox + | GeoEntity tIn tBoundingBox '{' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr '}' { $$ = List_Create(10, 10, sizeof(double)); - getElementaryTagsInBoundingBox(3, $5, $7, $9, $11, $13, $15, $$); + getElementaryTagsInBoundingBox($1, $5, $7, $9, $11, $13, $15, $$); } | Transform { @@ -6098,8 +5969,8 @@ StringExpr : { std::string out; const std::string * key_struct = NULL; - switch (nameSpaces.get_key_struct_from_tag(struct_namespace, - (int)$3, key_struct)) { + switch (gmsh_yynamespaces.get_key_struct_from_tag(struct_namespace, + (int)$3, key_struct)) { case 0: out = *key_struct; break; @@ -6180,21 +6051,17 @@ MultiStringExprVar : } Free($1); } - | String__Index '.' tSTRING_Member '(' ')' { $$ = treat_Struct_FullName_dot_tSTRING_ListOfString(NULL, $1, $3); } - | String__Index tSCOPE String__Index '.' tSTRING_Member '(' ')' { $$ = treat_Struct_FullName_dot_tSTRING_ListOfString($1, $3, $5); } ; - StringIndex : - tSTRING '~' '{' FExpr '}' { char tmpstr[256]; @@ -6203,7 +6070,6 @@ StringIndex : strcpy($$, $1); strcat($$, tmpstr); Free($1); } - | StringIndex '~' '{' FExpr '}' { char tmpstr[256]; @@ -6212,7 +6078,6 @@ StringIndex : strcpy($$, $1) ; strcat($$, tmpstr) ; Free($1); } - | tStringToName '[' StringExprVar ']' '~' '{' FExpr '}' { char tmpstr[256]; @@ -6224,13 +6089,10 @@ StringIndex : ; String__Index : - tSTRING { $$ = $1; } - | StringIndex { $$ = $1; } - // Create a name from any string | tStringToName '[' StringExprVar ']' { $$ = $3; } @@ -6427,14 +6289,14 @@ void PrintParserSymbols(bool help, std::vector<std::string> &vec) vec.push_back(s); } } - if (nameSpaces.size()){ + if (gmsh_yynamespaces.size()){ if(help){ vec.push_back("//"); vec.push_back("// Structures"); vec.push_back("//"); } std::vector<std::string> strs; - nameSpaces.sprint(strs); + gmsh_yynamespaces.sprint(strs); vec.insert(vec.end(), strs.begin(), strs.end()); } } @@ -6818,109 +6680,6 @@ void setColor(const std::vector<std::pair<int, int> > &dimTags, } } -int NEWPOINT() -{ - int tag = GModel::current()->getGEOInternals()->getMaxTag(0) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(0) + 1); - return tag; -} - -int NEWLINE() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(1) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(1) + 1); - return tag; -} - -int NEWLINELOOP() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(-1) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(-1) + 1); - return tag; -} - -int NEWSURFACE() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(2) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(2) + 1); - return tag; -} - -int NEWSURFACELOOP() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(-2) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(-2) + 1); - return tag; -} - -int NEWVOLUME() -{ - int tag = 0; - if(CTX::instance()->geom.oldNewreg) - tag = NEWREG(); - else - tag = GModel::current()->getGEOInternals()->getMaxTag(3) + 1; - if(GModel::current()->getOCCInternals()) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(3) + 1); - return tag; -} - -int NEWREG() -{ - int tag = 0; - for(int dim = -2; dim <= 3; dim++){ - if(dim) - tag = std::max(tag, GModel::current()->getGEOInternals()->getMaxTag(dim) + 1); - } - tag = std::max(tag, GModel::current()->getGEOInternals()->getMaxPhysicalTag() + 1); - if(GModel::current()->getOCCInternals()){ - for(int dim = -2; dim <= 3; dim++){ - if(dim) - tag = std::max(tag, GModel::current()->getOCCInternals()->getMaxTag(dim) + 1); - } - } - return tag; -} - -int NEWFIELD() -{ -#if defined(HAVE_MESH) - return (GModel::current()->getFields()->maxId() + 1); -#else - return 0; -#endif -} - -int NEWPHYSICAL() -{ - if(CTX::instance()->geom.oldNewreg) - return NEWREG(); - else - return GModel::current()->getGEOInternals()->getMaxPhysicalTag() + 1; -} - - double treat_Struct_FullName_Float (char* c1, char* c2, int type_var, int index, double val_default, int type_treat) { @@ -6957,7 +6716,7 @@ double treat_Struct_FullName_Float else{ if (type_var == 1) { std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); - if(nameSpaces.getTag(struct_namespace, struct_name, out)) { + if(gmsh_yynamespaces.getTag(struct_namespace, struct_name, out)) { out = val_default; if (type_treat == 0) yymsg(0, "Unknown variable '%s'", struct_name.c_str()); } @@ -6977,7 +6736,7 @@ double treat_Struct_FullName_dot_tSTRING_Float double out; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember + switch (gmsh_yynamespaces.getMember (struct_namespace, struct_name, key_member, out, index)) { case 0: if (type_treat == 1) out = 1.; // Exists (type_treat == 1) @@ -6989,7 +6748,7 @@ double treat_Struct_FullName_dot_tSTRING_Float case 2: if (type_treat != 0) { const std::string * out_dummy = NULL; - out = (nameSpaces.getMember + out = (gmsh_yynamespaces.getMember (struct_namespace, struct_name, key_member, out_dummy))? val_default : 1.; } @@ -7017,11 +6776,11 @@ List_T * treat_Struct_FullName_dot_tSTRING_ListOfFloat const std::vector<double> * out_vector; double val_; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember_Vector + switch (gmsh_yynamespaces.getMember_Vector (struct_namespace, struct_name, key_member, out_vector)) { case 0: out = List_Create(out_vector->size(), 1, sizeof(double)); - for(int i = 0; i < out_vector->size(); i++) { + for(unsigned int i = 0; i < out_vector->size(); i++) { val_ = out_vector->at(i); List_Add(out, &val_); } @@ -7046,7 +6805,7 @@ int treat_Struct_FullName_dot_tSTRING_Float_getDim int out; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember_Dim + switch (gmsh_yynamespaces.getMember_Dim (struct_namespace, struct_name, key_member, out)) { case 0: break; @@ -7099,7 +6858,7 @@ char* treat_Struct_FullName_dot_tSTRING_String std::string out_tmp; // PD: we should avoid that -> StringOption() to be changed std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember + switch (gmsh_yynamespaces.getMember (struct_namespace, struct_name, key_member, out, index)) { case 0: break; @@ -7134,11 +6893,11 @@ List_T * treat_Struct_FullName_dot_tSTRING_ListOfString const std::vector<std::string> * out_vector; char * val_; std::string struct_namespace(c1? c1 : std::string("")), struct_name(c2); std::string key_member(c3); - switch (nameSpaces.getMember_Vector + switch (gmsh_yynamespaces.getMember_Vector (struct_namespace, struct_name, key_member, out_vector)) { case 0: out = List_Create(out_vector->size(), 1, sizeof(char *)); - for(int i = 0; i < out_vector->size(); i++) { + for(unsigned int i = 0; i < out_vector->size(); i++) { val_ = strsave((char*)out_vector->at(i).c_str()); List_Add(out, &val_); } diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp index d45760531cb1ae83317a95872379fe3df6aa4c42..4062c672f973b35eb7dfb5b51d8096a5ac9cf5ae 100644 --- a/Parser/Gmsh.yy.cpp +++ b/Parser/Gmsh.yy.cpp @@ -380,8 +380,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 250 -#define YY_END_OF_BUFFER 251 +#define YY_NUM_RULES 251 +#define YY_END_OF_BUFFER 252 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -389,148 +389,148 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1273] = +static yyconst flex_int16_t yy_accept[1280] = { 0, - 0, 0, 251, 249, 1, 1, 249, 5, 249, 6, - 249, 249, 249, 249, 249, 244, 21, 2, 249, 16, - 249, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 249, 29, 25, 19, 26, - 17, 27, 18, 0, 246, 3, 4, 20, 245, 244, - 0, 23, 33, 30, 28, 31, 32, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 135, 136, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 168, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 222, 223, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 24, 22, 0, - 245, 0, 0, 247, 248, 35, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - - 248, 248, 77, 79, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 107, 248, 248, 248, 248, 248, 248, 248, 248, - 117, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 146, 248, 248, - 248, 248, 248, 248, 157, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 189, 248, - 248, 248, 248, 198, 248, 248, 248, 248, 248, 248, - 207, 248, 248, 248, 248, 225, 248, 248, 248, 248, - - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 0, 246, 0, 0, 245, 248, 248, 37, - 248, 248, 248, 248, 248, 248, 248, 47, 48, 248, - 248, 248, 248, 248, 248, 60, 248, 248, 63, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 74, 248, - 248, 78, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 93, 94, 248, 99, 248, 248, 248, 248, 248, - 106, 248, 109, 248, 248, 248, 113, 248, 248, 116, - 248, 248, 248, 248, 248, 248, 248, 248, 130, 131, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 143, - - 144, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 177, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 197, 199, 248, 248, 248, 248, 248, 206, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 224, 226, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 243, 10, 15, 9, - 8, 248, 12, 14, 0, 245, 34, 248, 248, 248, - 40, 248, 248, 248, 248, 49, 248, 51, 248, 53, - - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 70, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 102, 103, 248, - 248, 248, 110, 248, 248, 248, 115, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 133, 248, 248, 138, - 248, 248, 248, 248, 248, 147, 248, 248, 248, 248, - 153, 248, 248, 248, 248, 248, 248, 161, 248, 164, - 248, 248, 248, 169, 248, 171, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 187, 188, - 248, 248, 248, 248, 248, 248, 248, 200, 248, 248, - - 248, 204, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 231, 232, 248, 248, 248, 248, 248, 240, 248, 242, - 11, 248, 13, 248, 248, 39, 248, 43, 42, 44, - 45, 248, 52, 248, 248, 248, 248, 248, 248, 66, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 89, 90, 248, 248, 248, 248, 100, - 101, 248, 105, 248, 248, 112, 248, 248, 248, 248, - 122, 248, 248, 248, 248, 248, 248, 248, 248, 139, - 140, 248, 248, 248, 248, 248, 248, 248, 154, 248, - - 156, 248, 248, 248, 248, 248, 248, 248, 170, 248, - 173, 248, 248, 248, 248, 248, 248, 248, 184, 248, - 186, 248, 248, 248, 248, 248, 248, 248, 248, 202, - 203, 248, 208, 248, 210, 248, 212, 248, 248, 248, - 216, 248, 218, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 238, 248, 241, 7, 248, 248, - 248, 46, 50, 248, 248, 248, 248, 64, 248, 248, - 248, 248, 248, 72, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 92, 95, 248, 248, 248, - 248, 108, 248, 248, 248, 248, 248, 248, 248, 248, - - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 174, 248, 248, 248, 248, 248, - 248, 185, 248, 248, 248, 248, 248, 248, 248, 248, - 205, 248, 211, 248, 248, 248, 248, 219, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 61, - 248, 248, 67, 248, 248, 248, 73, 248, 248, 248, - 248, 84, 248, 248, 248, 248, 248, 96, 248, 98, - 248, 248, 248, 118, 248, 248, 248, 248, 248, 248, - - 128, 248, 132, 248, 248, 141, 142, 248, 148, 248, - 151, 152, 248, 248, 248, 160, 248, 248, 248, 166, - 167, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 201, 248, 248, - 248, 248, 248, 220, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 38, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 68, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 97, 104, - 248, 248, 248, 248, 248, 123, 125, 126, 248, 248, - 137, 248, 149, 248, 248, 248, 248, 163, 248, 248, - - 248, 248, 248, 179, 180, 181, 248, 248, 248, 248, - 248, 193, 248, 195, 248, 209, 213, 248, 248, 248, - 221, 227, 248, 248, 248, 248, 248, 248, 236, 248, - 239, 248, 248, 248, 248, 248, 248, 248, 248, 62, - 248, 69, 71, 248, 248, 248, 82, 248, 248, 248, - 248, 248, 111, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 158, 248, 248, 165, 248, 248, - 248, 248, 182, 248, 248, 191, 192, 248, 248, 248, - 215, 248, 248, 229, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 59, 248, 75, 76, - - 248, 248, 248, 248, 248, 88, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 150, 248, 248, 248, - 172, 248, 248, 248, 248, 248, 248, 248, 214, 248, - 248, 248, 233, 248, 235, 248, 36, 248, 248, 248, - 248, 248, 58, 248, 248, 248, 248, 86, 87, 91, - 248, 248, 248, 248, 124, 248, 248, 248, 145, 248, - 159, 162, 248, 248, 248, 183, 248, 194, 248, 217, - 248, 230, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 155, 248, 248, 248, 248, 196, 248, 234, 248, 248, - - 248, 248, 248, 57, 65, 80, 248, 85, 248, 248, - 248, 248, 127, 248, 248, 248, 248, 178, 190, 228, - 248, 248, 248, 248, 248, 248, 248, 114, 248, 248, - 248, 248, 248, 175, 248, 248, 41, 248, 55, 248, - 248, 83, 248, 248, 248, 248, 248, 248, 237, 54, - 248, 248, 248, 248, 248, 248, 248, 176, 248, 248, - 119, 120, 121, 129, 248, 56, 248, 248, 248, 134, - 81, 0 + 0, 0, 252, 250, 1, 1, 250, 5, 250, 6, + 250, 250, 250, 250, 250, 245, 21, 2, 250, 16, + 250, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 250, 29, 25, 19, 26, + 17, 27, 18, 0, 247, 3, 4, 20, 246, 245, + 0, 23, 33, 30, 28, 31, 32, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 136, 137, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 169, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 223, 224, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 24, 22, 0, + 246, 0, 0, 248, 249, 35, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + + 249, 249, 77, 79, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 107, 249, 249, 249, 249, 249, 249, 249, 249, + 117, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 147, 249, + 249, 249, 249, 249, 249, 158, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 190, + 249, 249, 249, 249, 199, 249, 249, 249, 249, 249, + 249, 208, 249, 249, 249, 249, 226, 249, 249, 249, + + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 0, 247, 0, 0, 246, 249, 249, + 37, 249, 249, 249, 249, 249, 249, 249, 47, 48, + 249, 249, 249, 249, 249, 249, 60, 249, 249, 63, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 74, + 249, 249, 78, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 93, 94, 249, 99, 249, 249, 249, 249, + 249, 106, 249, 109, 249, 249, 249, 113, 249, 249, + 116, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 131, 132, 249, 249, 249, 249, 249, 249, 249, 249, + + 249, 144, 145, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 178, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 198, 200, 249, 249, 249, 249, 249, + 207, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 225, 227, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 244, 10, + 15, 9, 8, 249, 12, 14, 0, 246, 34, 249, + 249, 249, 40, 249, 249, 249, 249, 49, 249, 51, + + 249, 53, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 70, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 102, + 103, 249, 249, 249, 110, 249, 249, 249, 115, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 134, + 249, 249, 139, 249, 249, 249, 249, 249, 148, 249, + 249, 249, 249, 154, 249, 249, 249, 249, 249, 249, + 162, 249, 165, 249, 249, 249, 170, 249, 172, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 188, 189, 249, 249, 249, 249, 249, 249, 249, + + 201, 249, 249, 249, 205, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 232, 233, 249, 249, 249, 249, 249, + 241, 249, 243, 11, 249, 13, 249, 249, 39, 249, + 43, 42, 44, 45, 249, 52, 249, 249, 249, 249, + 249, 249, 66, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 89, 90, 249, 249, + 249, 249, 100, 101, 249, 105, 249, 249, 112, 249, + 249, 249, 249, 249, 123, 249, 249, 249, 249, 249, + 249, 249, 249, 140, 141, 249, 249, 249, 249, 249, + + 249, 249, 155, 249, 157, 249, 249, 249, 249, 249, + 249, 249, 171, 249, 174, 249, 249, 249, 249, 249, + 249, 249, 185, 249, 187, 249, 249, 249, 249, 249, + 249, 249, 249, 203, 204, 249, 209, 249, 211, 249, + 213, 249, 249, 249, 217, 249, 219, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 239, 249, + 242, 7, 249, 249, 249, 46, 50, 249, 249, 249, + 249, 64, 249, 249, 249, 249, 249, 72, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 92, + 95, 249, 249, 249, 249, 108, 249, 249, 249, 249, + + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 175, + 249, 249, 249, 249, 249, 249, 186, 249, 249, 249, + 249, 249, 249, 249, 249, 206, 249, 212, 249, 249, + 249, 249, 220, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 61, 249, 249, 67, 249, 249, + 249, 73, 249, 249, 249, 249, 84, 249, 249, 249, + 249, 249, 96, 249, 98, 249, 249, 249, 118, 249, + + 249, 249, 249, 249, 249, 249, 129, 249, 133, 249, + 249, 142, 143, 249, 149, 249, 152, 153, 249, 249, + 249, 161, 249, 249, 249, 167, 168, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 202, 249, 249, 249, 249, 249, 221, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 38, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 68, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 97, 104, 249, 249, 249, 249, + 249, 122, 124, 126, 127, 249, 249, 138, 249, 150, + + 249, 249, 249, 249, 164, 249, 249, 249, 249, 249, + 180, 181, 182, 249, 249, 249, 249, 249, 194, 249, + 196, 249, 210, 214, 249, 249, 249, 222, 228, 249, + 249, 249, 249, 249, 249, 237, 249, 240, 249, 249, + 249, 249, 249, 249, 249, 249, 62, 249, 69, 71, + 249, 249, 249, 82, 249, 249, 249, 249, 249, 111, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 159, 249, 249, 166, 249, 249, 249, 249, 183, + 249, 249, 192, 193, 249, 249, 249, 216, 249, 249, + 230, 249, 249, 249, 249, 249, 249, 249, 249, 249, + + 249, 249, 249, 59, 249, 75, 76, 249, 249, 249, + 249, 249, 88, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 151, 249, 249, 249, 173, 249, 249, + 249, 249, 249, 249, 249, 215, 249, 249, 249, 234, + 249, 236, 249, 36, 249, 249, 249, 249, 249, 58, + 249, 249, 249, 249, 86, 87, 91, 249, 249, 249, + 249, 125, 249, 249, 249, 146, 249, 160, 163, 249, + 249, 249, 184, 249, 195, 249, 218, 249, 231, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 156, 249, 249, + + 249, 249, 197, 249, 235, 249, 249, 249, 249, 249, + 57, 65, 80, 249, 85, 249, 249, 249, 249, 128, + 249, 249, 249, 249, 179, 191, 229, 249, 249, 249, + 249, 249, 249, 249, 114, 249, 249, 249, 249, 249, + 176, 249, 249, 41, 249, 55, 249, 249, 83, 249, + 249, 249, 249, 249, 249, 238, 54, 249, 249, 249, + 249, 249, 249, 249, 177, 249, 249, 119, 120, 121, + 130, 249, 56, 249, 249, 249, 135, 81, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -577,295 +577,295 @@ static yyconst flex_int32_t yy_meta[74] = 2, 2, 1 } ; -static yyconst flex_int16_t yy_base[1274] = +static yyconst flex_int16_t yy_base[1281] = { 0, - 0, 0, 1402, 1403, 1403, 1403, 1380, 1403, 1394, 1403, - 1378, 65, 66, 64, 76, 78, 1380, 1403, 62, 1376, + 0, 0, 1409, 1410, 1410, 1410, 1387, 1410, 1401, 1410, + 1385, 65, 66, 64, 76, 78, 1387, 1410, 62, 1383, 77, 51, 62, 70, 55, 69, 87, 103, 86, 108, - 0, 1336, 104, 111, 125, 46, 123, 1328, 122, 178, - 151, 126, 1333, 56, 1341, 1319, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1380, 194, 1403, 1403, 1403, 237, 244, - 209, 1403, 1403, 1403, 1403, 1403, 1403, 0, 63, 1329, - 1341, 1335, 1331, 1324, 1335, 1328, 1335, 1320, 24, 1320, - 97, 132, 1324, 1331, 1314, 214, 1310, 1324, 1311, 1316, - 142, 219, 1325, 111, 1321, 1307, 1320, 173, 1320, 210, - - 1307, 1306, 1302, 1305, 1323, 1297, 1297, 1310, 92, 1298, - 1317, 0, 1292, 1296, 1285, 134, 120, 147, 1324, 1304, - 155, 1302, 1311, 1292, 1281, 1285, 1296, 1296, 1282, 1281, - 1273, 0, 165, 229, 1287, 1294, 1281, 240, 138, 1282, - 1303, 1290, 1271, 195, 1276, 1279, 1273, 233, 1269, 1268, - 1267, 188, 0, 0, 1295, 1269, 216, 236, 243, 1280, - 248, 1265, 1270, 1267, 1273, 1259, 1253, 1403, 1403, 301, - 306, 315, 321, 326, 1257, 1259, 1254, 1256, 1261, 1268, - 1263, 319, 1254, 1253, 1254, 1245, 1254, 1259, 1250, 1247, - 1248, 179, 1247, 286, 1254, 1251, 251, 1241, 233, 1249, - - 1236, 1228, 1243, 0, 1249, 1232, 1239, 1238, 1241, 1240, - 1243, 1254, 1253, 1231, 1218, 1230, 1233, 235, 1223, 1225, - 236, 0, 1218, 1216, 1222, 294, 1228, 1238, 1216, 1225, - 0, 1225, 1244, 321, 1218, 1220, 1219, 1209, 1208, 1241, - 1215, 1200, 1213, 1210, 1211, 312, 1196, 313, 1209, 1213, - 1195, 1197, 1202, 1189, 0, 1203, 1219, 1204, 1194, 1199, - 1202, 1193, 1183, 1187, 1192, 1185, 1196, 1183, 1191, 1190, - 302, 1184, 1178, 1171, 1185, 1188, 1175, 1182, 0, 1175, - 342, 1170, 1162, 1175, 1178, 1167, 1175, 1170, 1169, 1158, - 347, 1170, 1163, 1171, 1193, 1164, 1152, 1151, 1166, 1148, - - 1166, 1146, 1164, 1151, 1158, 1146, 1156, 1147, 1139, 1151, - 1152, 336, 392, 402, 411, 416, 421, 1137, 1144, 0, - 1135, 1140, 1134, 1138, 1136, 1140, 1147, 0, 1179, 1137, - 1136, 1139, 1133, 1137, 1137, 0, 1127, 1119, 0, 1132, - 1136, 1125, 1146, 1117, 1121, 1115, 1122, 1116, 0, 1125, - 1138, 0, 1108, 1121, 1112, 1111, 1110, 1103, 1102, 1119, - 1118, 0, 0, 1103, 1133, 1102, 1109, 1097, 1104, 1093, - 0, 1091, 0, 1106, 1129, 1103, 0, 1102, 1089, 0, - 1086, 1104, 1090, 1088, 1081, 1081, 1098, 1118, 0, 0, - 1086, 1077, 1102, 1077, 1075, 1075, 1072, 1079, 1074, 0, - - 1107, 1121, 1071, 1068, 315, 1070, 1066, 1106, 1070, 332, - 1066, 1061, 1077, 1060, 1064, 1061, 1065, 1068, 1063, 1052, - 1053, 1050, 329, 0, 1056, 1066, 1049, 1052, 1061, 1046, - 1045, 1042, 1056, 1055, 1053, 1049, 1055, 1035, 1053, 1034, - 1047, 0, 0, 1046, 1031, 1032, 316, 1035, 0, 391, - 1038, 1041, 1028, 1039, 1023, 1029, 1038, 1039, 1034, 1050, - 0, 0, 1050, 1060, 1025, 1040, 1009, 1014, 1020, 1012, - 1023, 1008, 1010, 1019, 1013, 1019, 0, 0, 0, 1012, - 0, 1017, 1010, 0, 427, 438, 0, 1000, 1031, 1013, - 1019, 1012, 997, 1001, 1000, 0, 999, 0, 994, 0, - - 1009, 1000, 1007, 996, 1001, 1002, 999, 1002, 997, 987, - 1005, 986, 978, 988, 981, 990, 981, 989, 987, 986, - 985, 984, 976, 975, 325, 980, 968, 0, 0, 980, - 965, 978, 0, 958, 961, 968, 0, 969, 361, 956, - 959, 963, 957, 962, 949, 957, 0, 979, 951, 0, - 950, 959, 948, 964, 947, 0, 962, 984, 960, 951, - 0, 935, 947, 943, 937, 941, 950, 0, 951, 0, - 947, 947, 947, 0, 936, 0, 954, 941, 929, 936, - 942, 930, 924, 936, 939, 926, 920, 932, 0, 0, - 949, 934, 931, 921, 915, 914, 949, 0, 921, 923, - - 922, 0, 907, 906, 910, 908, 909, 908, 915, 289, - 917, 911, 898, 913, 896, 900, 908, 893, 917, 905, - 0, 0, 921, 326, 899, 902, 928, 0, 900, 0, - 0, 897, 0, 884, 897, 0, 892, 0, 0, 0, - 932, 894, 0, 885, 884, 879, 884, 877, 874, 0, - 880, 878, 879, 888, 883, 874, 873, 866, 889, 864, - 877, 420, 864, 0, 0, 875, 874, 406, 869, 0, - 0, 868, 0, 871, 866, 0, 873, 859, 282, 896, - 0, 868, 868, 860, 848, 862, 859, 875, 859, 0, - 0, 858, 859, 847, 857, 858, 845, 832, 0, 31, - - 0, 57, 112, 145, 424, 151, 171, 194, 0, 205, - 0, 270, 309, 414, 312, 321, 357, 331, 0, 350, - 0, 362, 351, 346, 364, 356, 367, 385, 405, 0, - 0, 406, 0, 404, 0, 412, 0, 412, 418, 410, - 0, 427, 0, 419, 409, 423, 407, 410, 416, 428, - 427, 441, 433, 422, 0, 435, 0, 0, 432, 420, - 420, 0, 0, 462, 433, 418, 451, 0, 440, 442, - 445, 435, 449, 0, 448, 452, 445, 441, 480, 443, - 447, 442, 444, 463, 471, 0, 0, 448, 458, 465, - 468, 0, 452, 452, 459, 488, 485, 480, 471, 472, - - 465, 474, 477, 457, 495, 480, 465, 480, 474, 482, - 470, 479, 485, 477, 472, 474, 483, 492, 476, 480, - 495, 488, 492, 525, 0, 501, 490, 493, 484, 501, - 502, 0, 490, 502, 496, 506, 503, 500, 501, 499, - 0, 514, 0, 509, 500, 519, 507, 0, 498, 518, - 519, 508, 516, 509, 517, 510, 518, 513, 528, 516, - 544, 528, 529, 530, 523, 528, 537, 530, 567, 0, - 531, 529, 0, 542, 541, 538, 0, 531, 537, 537, - 544, 0, 541, 543, 539, 538, 543, 0, 555, 0, - 547, 542, 553, 0, 573, 574, 587, 562, 550, 561, - - 0, 549, 0, 594, 552, 0, 0, 591, 0, 568, - 0, 0, 557, 572, 559, 0, 558, 565, 570, 0, - 0, 575, 577, 568, 564, 579, 580, 581, 569, 600, - 570, 585, 574, 575, 574, 587, 583, 0, 591, 574, - 589, 596, 611, 0, 590, 591, 594, 595, 596, 592, - 606, 599, 604, 632, 606, 611, 0, 623, 608, 614, - 597, 614, 609, 605, 608, 612, 0, 598, 618, 619, - 612, 612, 610, 610, 627, 621, 626, 631, 0, 0, - 615, 613, 642, 643, 654, 644, 0, 642, 621, 646, - 0, 633, 659, 635, 626, 637, 638, 0, 645, 632, - - 646, 662, 647, 0, 0, 0, 645, 649, 668, 652, - 633, 0, 649, 0, 678, 0, 0, 639, 656, 661, - 0, 0, 661, 660, 651, 649, 663, 649, 0, 655, - 0, 651, 656, 666, 666, 669, 657, 663, 655, 0, - 661, 0, 0, 662, 663, 671, 678, 665, 680, 673, - 683, 685, 0, 684, 690, 691, 692, 674, 693, 694, - 712, 686, 685, 680, 0, 687, 687, 0, 697, 706, - 699, 688, 0, 688, 706, 0, 0, 694, 700, 705, - 0, 699, 692, 0, 700, 690, 720, 711, 704, 710, - 700, 715, 709, 705, 714, 711, 0, 706, 0, 0, - - 712, 725, 728, 713, 724, 0, 727, 742, 737, 738, - 739, 720, 727, 738, 751, 737, 0, 735, 737, 732, - 0, 741, 725, 747, 741, 726, 738, 741, 0, 748, - 735, 737, 0, 739, 0, 739, 0, 749, 742, 755, - 743, 748, 0, 754, 757, 746, 753, 0, 0, 0, - 766, 788, 789, 790, 0, 751, 761, 784, 0, 762, - 0, 0, 758, 779, 766, 0, 773, 0, 774, 0, - 775, 0, 772, 763, 769, 779, 772, 781, 774, 785, - 765, 776, 772, 773, 800, 801, 802, 791, 792, 798, - 0, 780, 796, 784, 786, 0, 786, 0, 804, 793, - - 794, 789, 806, 0, 0, 821, 794, 0, 804, 819, - 820, 821, 0, 827, 823, 800, 802, 0, 0, 0, - 807, 803, 819, 805, 805, 811, 802, 0, 843, 844, - 845, 829, 853, 0, 813, 814, 0, 829, 0, 826, - 853, 0, 847, 848, 849, 828, 858, 824, 0, 0, - 829, 830, 856, 857, 858, 843, 869, 0, 837, 840, - 0, 0, 0, 0, 864, 0, 848, 874, 837, 0, - 0, 1403, 901 + 0, 1343, 104, 111, 125, 46, 123, 1335, 122, 178, + 151, 126, 1340, 56, 1348, 1326, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1387, 194, 1410, 1410, 1410, 237, 244, + 209, 1410, 1410, 1410, 1410, 1410, 1410, 0, 63, 1336, + 1348, 1342, 1338, 1331, 1342, 1335, 1342, 1327, 24, 1327, + 97, 132, 1331, 1338, 1321, 214, 1317, 1331, 1318, 1323, + 142, 219, 1332, 111, 1328, 1314, 1327, 173, 1327, 210, + + 1314, 1313, 1309, 1312, 1330, 119, 1305, 1318, 92, 1306, + 1325, 0, 1300, 1304, 1293, 134, 167, 147, 1332, 1312, + 155, 1310, 1319, 1300, 1289, 1293, 1304, 1304, 1290, 1289, + 1281, 0, 199, 229, 1295, 1302, 1289, 240, 138, 1290, + 1311, 1298, 1279, 195, 1284, 1287, 1281, 233, 1277, 1276, + 1275, 222, 0, 0, 1303, 1277, 229, 236, 250, 1288, + 251, 1273, 1278, 1275, 1281, 1267, 1261, 1410, 1410, 308, + 313, 322, 296, 328, 1265, 1267, 1262, 1264, 1269, 1276, + 1271, 278, 1262, 1261, 1262, 1253, 1262, 1267, 1258, 1255, + 1256, 179, 1255, 287, 1262, 1259, 234, 1249, 285, 1257, + + 1244, 1236, 1251, 0, 1257, 1240, 1247, 1246, 1249, 1248, + 1251, 1262, 1261, 1239, 1226, 1238, 1241, 321, 1231, 1233, + 239, 0, 1226, 1224, 1230, 190, 1236, 1246, 1224, 1233, + 0, 1233, 1252, 1254, 326, 1225, 1227, 1226, 1216, 1215, + 1248, 1222, 1207, 1220, 1217, 1218, 307, 1203, 319, 1216, + 1220, 1202, 1204, 1209, 1196, 0, 1210, 1226, 1211, 1201, + 1206, 1209, 1200, 1190, 1194, 1199, 1192, 1203, 1190, 1198, + 1197, 289, 1191, 1185, 1178, 1192, 1195, 1182, 1189, 0, + 1182, 333, 1177, 1169, 1182, 1185, 1174, 1182, 1177, 1176, + 1165, 338, 1177, 1170, 1178, 1200, 1171, 1159, 1158, 1173, + + 1155, 1173, 1153, 1171, 1158, 1165, 1153, 1163, 1154, 1146, + 1158, 1159, 327, 383, 393, 402, 407, 412, 1144, 1151, + 0, 1142, 1147, 1141, 1145, 1143, 1147, 1154, 0, 1186, + 1144, 1143, 1146, 1140, 1144, 1144, 0, 1134, 1126, 0, + 1139, 1143, 1132, 1153, 1124, 1128, 1122, 1129, 1123, 0, + 1132, 1145, 0, 1115, 1128, 1119, 1118, 1117, 1110, 1109, + 1126, 1125, 0, 0, 1110, 1140, 1109, 1116, 1104, 1111, + 1100, 0, 1098, 0, 1113, 1136, 1110, 0, 1109, 1096, + 0, 1093, 1111, 1097, 1096, 1094, 1087, 1087, 1104, 1124, + 0, 0, 1092, 1083, 1108, 1083, 1081, 1081, 1078, 1085, + + 1080, 0, 1113, 1127, 1077, 1074, 341, 1076, 1072, 1112, + 1076, 342, 1072, 1067, 1083, 1066, 1070, 1067, 1071, 1074, + 1069, 1058, 1059, 1056, 322, 0, 1062, 1072, 1055, 1058, + 1067, 1052, 1051, 1048, 1062, 1061, 1059, 1055, 1061, 1041, + 1059, 1040, 1053, 0, 0, 1052, 1037, 1038, 327, 1041, + 0, 382, 1044, 1047, 1034, 1045, 1029, 1035, 1044, 1045, + 1040, 1056, 0, 0, 1056, 1066, 1031, 1046, 1015, 1020, + 1026, 1018, 1029, 1014, 1016, 1025, 1019, 1025, 0, 0, + 0, 1018, 0, 1023, 1016, 0, 418, 429, 0, 1006, + 1037, 1019, 1025, 1018, 1003, 1007, 1006, 0, 1005, 0, + + 1000, 0, 1015, 1006, 1013, 1002, 1007, 1008, 1005, 1008, + 1003, 993, 1011, 992, 984, 994, 987, 996, 987, 995, + 993, 992, 991, 990, 982, 981, 336, 986, 974, 0, + 0, 986, 971, 984, 0, 964, 967, 974, 0, 975, + 401, 964, 961, 964, 968, 962, 967, 954, 962, 0, + 984, 956, 0, 955, 964, 953, 969, 952, 0, 967, + 989, 965, 956, 0, 940, 952, 948, 942, 946, 955, + 0, 956, 0, 952, 952, 952, 0, 941, 0, 959, + 946, 934, 941, 947, 935, 929, 941, 944, 931, 925, + 937, 0, 0, 954, 939, 936, 926, 920, 919, 954, + + 0, 926, 928, 927, 0, 912, 911, 915, 913, 914, + 913, 920, 155, 922, 916, 903, 918, 901, 905, 913, + 898, 922, 910, 0, 0, 926, 315, 904, 907, 933, + 0, 905, 0, 0, 902, 0, 889, 902, 0, 897, + 0, 0, 0, 937, 899, 0, 890, 889, 884, 889, + 882, 879, 0, 885, 883, 884, 893, 888, 879, 878, + 871, 894, 869, 882, 413, 869, 0, 0, 880, 879, + 395, 874, 0, 0, 873, 0, 876, 871, 0, 878, + 864, 417, 901, 867, 0, 872, 872, 864, 852, 866, + 863, 879, 863, 0, 0, 862, 863, 851, 861, 37, + + 61, 81, 0, 143, 0, 199, 226, 263, 427, 291, + 319, 342, 0, 341, 0, 348, 363, 418, 360, 397, + 420, 391, 0, 406, 0, 411, 400, 395, 413, 397, + 408, 401, 414, 0, 0, 415, 0, 413, 0, 419, + 0, 418, 424, 415, 0, 433, 0, 425, 414, 428, + 412, 415, 421, 433, 432, 446, 438, 427, 0, 440, + 0, 0, 437, 425, 425, 0, 0, 467, 438, 423, + 456, 0, 445, 447, 450, 440, 454, 0, 453, 457, + 450, 446, 485, 448, 452, 447, 449, 468, 476, 0, + 0, 453, 463, 470, 473, 0, 457, 457, 464, 493, + + 490, 485, 462, 477, 478, 471, 480, 483, 463, 501, + 486, 471, 486, 480, 488, 476, 485, 491, 483, 478, + 480, 489, 498, 482, 486, 501, 494, 498, 531, 0, + 507, 496, 499, 490, 507, 508, 0, 496, 508, 502, + 512, 509, 506, 507, 505, 0, 520, 0, 515, 506, + 525, 513, 0, 504, 524, 525, 514, 522, 515, 523, + 516, 524, 519, 534, 522, 550, 534, 535, 536, 529, + 534, 543, 536, 573, 0, 537, 535, 0, 548, 547, + 544, 0, 537, 543, 543, 550, 0, 547, 549, 545, + 544, 549, 0, 561, 0, 553, 548, 559, 0, 579, + + 580, 593, 548, 569, 557, 568, 0, 556, 0, 601, + 559, 0, 0, 598, 0, 575, 0, 0, 564, 579, + 566, 0, 565, 572, 577, 0, 0, 582, 584, 575, + 571, 586, 587, 588, 576, 607, 577, 592, 581, 582, + 581, 594, 590, 0, 598, 581, 596, 603, 618, 0, + 597, 598, 601, 602, 603, 599, 613, 606, 611, 639, + 613, 618, 0, 630, 615, 621, 604, 621, 616, 612, + 615, 619, 0, 605, 625, 626, 619, 619, 617, 617, + 634, 628, 633, 638, 0, 0, 622, 620, 649, 650, + 661, 0, 651, 0, 649, 628, 653, 0, 640, 666, + + 642, 633, 644, 645, 0, 652, 639, 653, 669, 654, + 0, 0, 0, 652, 656, 675, 659, 640, 0, 656, + 0, 685, 0, 0, 646, 663, 668, 0, 0, 668, + 667, 658, 656, 670, 656, 0, 662, 0, 658, 663, + 673, 673, 676, 664, 670, 662, 0, 668, 0, 0, + 669, 670, 678, 685, 672, 687, 680, 690, 692, 0, + 691, 697, 698, 699, 681, 700, 701, 719, 693, 692, + 687, 0, 694, 694, 0, 704, 713, 706, 695, 0, + 695, 713, 0, 0, 701, 707, 712, 0, 706, 699, + 0, 707, 697, 727, 718, 711, 717, 707, 722, 716, + + 712, 721, 718, 0, 713, 0, 0, 719, 732, 735, + 720, 731, 0, 734, 749, 744, 745, 746, 727, 734, + 745, 758, 744, 0, 742, 744, 739, 0, 748, 732, + 754, 748, 733, 745, 748, 0, 755, 742, 744, 0, + 746, 0, 746, 0, 756, 749, 762, 750, 755, 0, + 761, 764, 753, 760, 0, 0, 0, 773, 795, 796, + 797, 0, 758, 768, 791, 0, 769, 0, 0, 765, + 786, 773, 0, 780, 0, 781, 0, 782, 0, 779, + 770, 776, 786, 779, 788, 781, 792, 772, 783, 779, + 780, 807, 808, 809, 798, 799, 805, 0, 787, 803, + + 791, 793, 0, 793, 0, 811, 800, 801, 796, 813, + 0, 0, 828, 801, 0, 811, 826, 827, 828, 0, + 834, 830, 807, 809, 0, 0, 0, 814, 810, 826, + 812, 812, 818, 809, 0, 850, 851, 852, 836, 860, + 0, 820, 821, 0, 836, 0, 833, 860, 0, 854, + 855, 856, 835, 865, 831, 0, 0, 836, 837, 863, + 864, 865, 850, 876, 0, 844, 847, 0, 0, 0, + 0, 871, 0, 855, 881, 844, 0, 0, 1410, 908 } ; -static yyconst flex_int16_t yy_def[1274] = +static yyconst flex_int16_t yy_def[1281] = { 0, - 1272, 1, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1272, 1272, 1272, 1272, 1272, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1272, 1272, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1273, 0, 1272 + 1279, 1, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1279, 1279, 1279, 1279, 1279, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1279, 1279, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 0, 1279 } ; -static yyconst flex_int16_t yy_nxt[1477] = +static yyconst flex_int16_t yy_nxt[1484] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 17, 18, 19, @@ -875,63 +875,63 @@ static yyconst flex_int16_t yy_nxt[1477] = 31, 31, 31, 31, 31, 31, 31, 31, 31, 45, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 46, 50, 54, 52, 55, 55, 55, 55, - 55, 63, 64, 56, 814, 51, 53, 57, 59, 186, + 55, 63, 64, 56, 816, 51, 53, 57, 59, 186, 60, 60, 60, 60, 60, 187, 58, 66, 67, 69, 70, 71, 78, 72, 61, 127, 91, 165, 73, 128, 92, 166, 74, 79, 75, 76, 77, 82, 93, 80, - 815, 83, 81, 175, 84, 85, 94, 176, 95, 61, + 817, 83, 81, 175, 84, 85, 94, 176, 95, 61, 86, 87, 96, 88, 99, 97, 89, 105, 98, 123, - 90, 108, 100, 111, 101, 102, 109, 103, 119, 237, - 238, 115, 816, 104, 106, 116, 110, 189, 120, 117, + 90, 108, 100, 111, 101, 102, 109, 103, 119, 238, + 239, 115, 818, 104, 106, 116, 110, 189, 120, 117, 112, 107, 121, 190, 118, 153, 154, 113, 216, 137, - 129, 122, 124, 138, 130, 217, 125, 131, 132, 246, - 133, 155, 139, 134, 247, 161, 135, 162, 140, 191, - 163, 126, 141, 244, 208, 209, 817, 192, 156, 210, - - 248, 245, 157, 276, 277, 158, 55, 55, 55, 55, - 55, 159, 264, 252, 160, 249, 820, 173, 173, 253, - 170, 174, 174, 174, 174, 174, 821, 142, 221, 143, - 337, 265, 144, 145, 222, 146, 147, 338, 223, 148, - 149, 822, 282, 150, 151, 170, 293, 294, 152, 171, - 171, 171, 171, 171, 59, 283, 60, 60, 60, 60, - 60, 225, 366, 172, 196, 367, 823, 226, 197, 227, + 129, 122, 124, 138, 130, 217, 125, 131, 132, 234, + 133, 155, 139, 134, 235, 161, 135, 162, 140, 191, + 163, 126, 141, 245, 208, 209, 819, 192, 156, 210, + + 249, 246, 157, 277, 278, 158, 55, 55, 55, 55, + 55, 159, 743, 253, 160, 250, 744, 173, 173, 254, + 170, 174, 174, 174, 174, 174, 247, 142, 221, 143, + 338, 248, 144, 145, 222, 146, 147, 339, 223, 148, + 149, 376, 283, 150, 151, 170, 265, 377, 152, 171, + 171, 171, 171, 171, 59, 284, 60, 60, 60, 60, + 60, 225, 820, 172, 196, 266, 821, 226, 197, 227, 61, 198, 199, 200, 201, 202, 211, 212, 203, 228, - 297, 347, 213, 214, 266, 298, 267, 287, 172, 271, - 288, 299, 272, 301, 348, 61, 289, 273, 305, 300, - - 370, 371, 344, 306, 796, 274, 302, 275, 303, 313, - 313, 345, 797, 314, 314, 314, 314, 314, 171, 171, - 171, 171, 171, 316, 316, 824, 402, 317, 317, 317, - 317, 317, 315, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 325, 340, 375, 739, 383, 384, 341, - 740, 376, 399, 403, 559, 560, 385, 315, 825, 326, - 327, 386, 425, 400, 387, 828, 436, 426, 427, 437, - 579, 450, 565, 566, 451, 601, 829, 438, 752, 439, - 452, 602, 440, 753, 453, 478, 454, 455, 479, 668, - 669, 830, 580, 480, 579, 679, 831, 481, 680, 482, - - 483, 832, 456, 484, 314, 314, 314, 314, 314, 833, - 834, 835, 836, 457, 314, 314, 314, 314, 314, 485, - 485, 837, 838, 486, 486, 486, 486, 486, 317, 317, - 317, 317, 317, 317, 317, 317, 317, 317, 604, 486, - 486, 486, 486, 486, 781, 605, 818, 826, 839, 606, - 486, 486, 486, 486, 486, 782, 840, 787, 841, 842, - 783, 788, 843, 819, 844, 845, 789, 846, 847, 827, - 848, 826, 849, 850, 851, 852, 853, 854, 855, 856, - 858, 859, 860, 861, 862, 863, 869, 864, 870, 865, - 871, 872, 866, 873, 874, 875, 857, 876, 877, 878, - - 879, 880, 867, 856, 868, 881, 882, 883, 884, 885, + 294, 295, 213, 214, 267, 345, 268, 288, 172, 272, + 289, 300, 273, 298, 346, 61, 290, 274, 299, 301, + + 302, 306, 326, 371, 372, 275, 307, 276, 174, 174, + 174, 174, 174, 303, 822, 304, 314, 314, 327, 328, + 315, 315, 315, 315, 315, 171, 171, 171, 171, 171, + 317, 317, 404, 348, 318, 318, 318, 318, 318, 316, + 174, 174, 174, 174, 174, 341, 349, 401, 367, 427, + 342, 368, 385, 386, 428, 429, 825, 438, 402, 405, + 439, 387, 452, 582, 316, 453, 388, 756, 440, 389, + 441, 454, 757, 442, 826, 455, 480, 456, 457, 481, + 562, 563, 568, 569, 482, 583, 604, 582, 483, 827, + 484, 485, 605, 458, 486, 315, 315, 315, 315, 315, + + 671, 672, 828, 829, 459, 315, 315, 315, 315, 315, + 487, 487, 830, 833, 488, 488, 488, 488, 488, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 607, + 488, 488, 488, 488, 488, 682, 608, 785, 683, 800, + 609, 488, 488, 488, 488, 488, 791, 801, 786, 823, + 792, 831, 834, 787, 835, 793, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 824, 846, 847, 848, + 849, 850, 851, 832, 852, 831, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 863, 864, 865, 866, 867, + 868, 874, 869, 875, 870, 876, 877, 871, 878, 879, + + 880, 862, 881, 882, 883, 884, 885, 872, 861, 873, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, - 916, 917, 918, 919, 920, 921, 922, 923, 925, 926, - 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, - 924, 937, 938, 939, 940, 941, 942, 943, 944, 945, - 946, 947, 923, 948, 949, 950, 951, 952, 953, 954, - 955, 956, 957, 958, 924, 959, 960, 961, 962, 963, - 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, + 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 930, 943, 944, 945, + 946, 947, 948, 949, 950, 951, 952, 953, 929, 954, + 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 930, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, @@ -946,92 +946,93 @@ static yyconst flex_int16_t yy_nxt[1477] = 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, - 1094, 1071, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, + 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1078, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, - 1143, 1144, 1145, 1122, 1146, 1147, 1148, 1149, 1150, 1151, - 1152, 1153, 1154, 1155, 1156, 1134, 1157, 1158, 1159, 1160, - 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, + 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, + 1129, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, + 1162, 1163, 1141, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, - 1211, 1212, 1213, 1214, 1215, 1216, 1193, 1217, 1218, 1219, - 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, + 1221, 1222, 1223, 1200, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, - 1270, 1271, 68, 813, 812, 811, 810, 809, 808, 807, - 806, 805, 804, 803, 802, 801, 800, 799, 798, 795, - 794, 793, 792, 791, 790, 786, 785, 784, 780, 779, - 778, 777, 776, 775, 774, 773, 772, 771, 770, 769, - 768, 767, 766, 765, 764, 763, 762, 761, 760, 759, - 758, 757, 756, 755, 754, 751, 750, 749, 748, 747, - 746, 745, 744, 743, 742, 741, 738, 737, 736, 735, - 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, - 724, 723, 722, 721, 720, 719, 718, 717, 716, 715, - 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, - - 704, 703, 702, 701, 700, 699, 698, 697, 696, 695, - 694, 693, 692, 691, 690, 689, 688, 687, 686, 685, - 684, 683, 682, 681, 678, 677, 676, 675, 674, 673, - 672, 671, 670, 667, 666, 665, 664, 663, 662, 661, - 660, 659, 658, 657, 656, 655, 654, 653, 652, 651, - 650, 649, 648, 647, 646, 645, 644, 643, 642, 641, - 640, 639, 638, 637, 636, 635, 634, 633, 632, 631, - 630, 629, 628, 627, 626, 625, 624, 623, 622, 621, - 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, - 610, 609, 608, 607, 603, 600, 599, 598, 597, 596, - - 595, 594, 593, 592, 591, 590, 589, 588, 587, 586, - 585, 584, 583, 582, 581, 578, 577, 576, 575, 574, - 573, 572, 571, 570, 569, 568, 567, 564, 563, 562, - 561, 558, 557, 556, 555, 554, 553, 552, 551, 550, - 549, 548, 547, 546, 545, 544, 543, 542, 541, 540, - 539, 538, 537, 536, 535, 534, 533, 532, 531, 530, - 529, 528, 527, 526, 525, 524, 523, 522, 521, 520, - 519, 518, 517, 516, 515, 514, 513, 512, 511, 510, - 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, - 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, - - 489, 488, 487, 477, 476, 475, 474, 473, 472, 471, - 470, 469, 468, 467, 466, 465, 464, 463, 462, 461, - 460, 459, 458, 449, 448, 447, 446, 445, 444, 443, - 442, 441, 435, 434, 433, 432, 431, 430, 429, 428, - 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, - 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, - 404, 401, 398, 397, 396, 395, 394, 393, 392, 391, - 390, 389, 388, 382, 381, 380, 379, 378, 377, 374, - 373, 372, 369, 368, 365, 364, 363, 362, 361, 360, - 359, 358, 357, 356, 355, 354, 353, 352, 351, 350, - - 349, 346, 343, 342, 339, 336, 335, 334, 333, 332, - 331, 330, 329, 328, 324, 323, 322, 321, 320, 319, - 318, 312, 311, 310, 309, 308, 307, 304, 296, 295, - 292, 291, 290, 286, 285, 284, 281, 280, 279, 278, - 270, 269, 268, 263, 262, 261, 260, 259, 258, 257, - 256, 255, 254, 251, 250, 243, 242, 241, 240, 239, - 236, 235, 234, 233, 232, 231, 230, 229, 224, 220, - 219, 218, 215, 207, 206, 205, 204, 195, 194, 193, - 188, 185, 184, 183, 182, 181, 180, 179, 178, 177, - 169, 168, 167, 164, 136, 114, 65, 62, 49, 48, - - 47, 1272, 3, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272 + 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 68, + 815, 814, 813, 812, 811, 810, 809, 808, 807, 806, + 805, 804, 803, 802, 799, 798, 797, 796, 795, 794, + 790, 789, 788, 784, 783, 782, 781, 780, 779, 778, + 777, 776, 775, 774, 773, 772, 771, 770, 769, 768, + 767, 766, 765, 764, 763, 762, 761, 760, 759, 758, + 755, 754, 753, 752, 751, 750, 749, 748, 747, 746, + 745, 742, 741, 740, 739, 738, 737, 736, 735, 734, + 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, + 723, 722, 721, 720, 719, 718, 717, 716, 715, 714, + + 713, 712, 711, 710, 709, 708, 707, 706, 705, 704, + 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, + 693, 692, 691, 690, 689, 688, 687, 686, 685, 684, + 681, 680, 679, 678, 677, 676, 675, 674, 673, 670, + 669, 668, 667, 666, 665, 664, 663, 662, 661, 660, + 659, 658, 657, 656, 655, 654, 653, 652, 651, 650, + 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, + 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, + 629, 628, 627, 626, 625, 624, 623, 622, 621, 620, + 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, + + 606, 603, 602, 601, 600, 599, 598, 597, 596, 595, + 594, 593, 592, 591, 590, 589, 588, 587, 586, 585, + 584, 581, 580, 579, 578, 577, 576, 575, 574, 573, + 572, 571, 570, 567, 566, 565, 564, 561, 560, 559, + 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, + 548, 547, 546, 545, 544, 543, 542, 541, 540, 539, + 538, 537, 536, 535, 534, 533, 532, 531, 530, 529, + 528, 527, 526, 525, 524, 523, 522, 521, 520, 519, + 518, 517, 516, 515, 514, 513, 512, 511, 510, 509, + 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, + + 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, + 479, 478, 477, 476, 475, 474, 473, 472, 471, 470, + 469, 468, 467, 466, 465, 464, 463, 462, 461, 460, + 451, 450, 449, 448, 447, 446, 445, 444, 443, 437, + 436, 435, 434, 433, 432, 431, 430, 426, 425, 424, + 423, 422, 421, 420, 419, 418, 417, 416, 415, 414, + 413, 412, 411, 410, 409, 408, 407, 406, 403, 400, + 399, 398, 397, 396, 395, 394, 393, 392, 391, 390, + 384, 383, 382, 381, 380, 379, 378, 375, 374, 373, + 370, 369, 366, 365, 364, 363, 362, 361, 360, 359, + + 358, 357, 356, 355, 354, 353, 352, 351, 350, 347, + 344, 343, 340, 337, 336, 335, 334, 333, 332, 331, + 330, 329, 325, 324, 323, 322, 321, 320, 319, 313, + 312, 311, 310, 309, 308, 305, 297, 296, 293, 292, + 291, 287, 286, 285, 282, 281, 280, 279, 271, 270, + 269, 264, 263, 262, 261, 260, 259, 258, 257, 256, + 255, 252, 251, 244, 243, 242, 241, 240, 237, 236, + 233, 232, 231, 230, 229, 224, 220, 219, 218, 215, + 207, 206, 205, 204, 195, 194, 193, 188, 185, 184, + 183, 182, 181, 180, 179, 178, 177, 169, 168, 167, + + 164, 136, 114, 65, 62, 49, 48, 47, 1279, 3, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279 } ; -static yyconst flex_int16_t yy_chk[1477] = +static yyconst flex_int16_t yy_chk[1484] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1046,155 +1047,156 @@ static yyconst flex_int16_t yy_chk[1477] = 22, 22, 23, 22, 16, 36, 25, 44, 22, 36, 25, 44, 22, 23, 22, 22, 22, 24, 25, 23, - 702, 24, 23, 69, 24, 24, 26, 69, 26, 16, + 701, 24, 23, 69, 24, 24, 26, 69, 26, 16, 24, 24, 26, 24, 27, 26, 24, 28, 26, 35, 24, 29, 27, 30, 27, 27, 29, 27, 34, 109, - 109, 33, 703, 27, 28, 33, 29, 81, 34, 33, + 109, 33, 702, 27, 28, 33, 29, 81, 34, 33, 30, 28, 34, 81, 33, 41, 41, 30, 94, 39, - 37, 34, 35, 39, 37, 94, 35, 37, 37, 117, - 37, 41, 39, 37, 117, 42, 37, 42, 39, 82, + 37, 34, 35, 39, 37, 94, 35, 37, 37, 106, + 37, 41, 39, 37, 106, 42, 37, 42, 39, 82, 42, 35, 40, 116, 91, 91, 704, 82, 41, 91, 118, 116, 41, 139, 139, 41, 55, 55, 55, 55, - 55, 41, 133, 121, 41, 118, 706, 61, 61, 121, - 55, 61, 61, 61, 61, 61, 707, 40, 98, 40, - 192, 133, 40, 40, 98, 40, 40, 192, 98, 40, - 40, 708, 144, 40, 40, 55, 152, 152, 40, 59, + 55, 41, 613, 121, 41, 118, 613, 61, 61, 121, + 55, 61, 61, 61, 61, 61, 117, 40, 98, 40, + 192, 117, 40, 40, 98, 40, 40, 192, 98, 40, + 40, 226, 144, 40, 40, 55, 133, 226, 40, 59, 59, 59, 59, 59, 60, 144, 60, 60, 60, 60, - 60, 100, 218, 59, 86, 218, 710, 100, 86, 100, + 60, 100, 706, 59, 86, 133, 707, 100, 86, 100, 60, 86, 86, 86, 86, 86, 92, 92, 86, 100, - 157, 199, 92, 92, 134, 157, 134, 148, 59, 138, - 148, 158, 138, 159, 199, 60, 148, 138, 161, 158, - - 221, 221, 197, 161, 679, 138, 159, 138, 159, 170, - 170, 197, 679, 170, 170, 170, 170, 170, 171, 171, - 171, 171, 171, 172, 172, 712, 248, 172, 172, 172, - 172, 172, 171, 173, 173, 173, 173, 173, 174, 174, - 174, 174, 174, 182, 194, 226, 610, 234, 234, 194, - 610, 226, 246, 248, 405, 405, 234, 171, 713, 182, - 182, 234, 271, 246, 234, 715, 281, 271, 271, 281, - 423, 291, 410, 410, 291, 447, 716, 281, 624, 281, - 291, 447, 281, 624, 291, 312, 291, 291, 312, 525, - 525, 717, 423, 312, 423, 539, 718, 312, 539, 312, - - 312, 720, 291, 312, 313, 313, 313, 313, 313, 722, - 723, 724, 725, 291, 314, 314, 314, 314, 314, 315, - 315, 726, 727, 315, 315, 315, 315, 315, 316, 316, - 316, 316, 316, 317, 317, 317, 317, 317, 450, 485, - 485, 485, 485, 485, 662, 450, 705, 714, 728, 450, - 486, 486, 486, 486, 486, 662, 729, 668, 732, 734, - 662, 668, 736, 705, 738, 739, 668, 740, 742, 714, - 744, 714, 745, 746, 747, 748, 749, 750, 751, 752, - 753, 754, 756, 759, 760, 761, 765, 764, 766, 764, - 767, 769, 764, 770, 771, 772, 752, 773, 775, 776, - - 777, 778, 764, 752, 764, 779, 780, 781, 782, 783, - 784, 785, 788, 789, 790, 791, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, - 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, 826, 827, - 828, 829, 830, 831, 833, 834, 835, 836, 837, 838, - 824, 839, 840, 842, 844, 845, 846, 847, 849, 850, - 851, 852, 824, 853, 854, 855, 856, 857, 858, 859, - 860, 861, 862, 863, 824, 864, 865, 866, 867, 868, - 869, 871, 872, 874, 875, 876, 878, 879, 880, 881, - - 883, 884, 885, 886, 887, 889, 891, 892, 893, 895, - 896, 897, 898, 899, 900, 902, 904, 905, 908, 910, - 913, 914, 915, 917, 918, 919, 922, 923, 924, 925, - 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, - 936, 937, 939, 940, 941, 942, 943, 945, 946, 947, - 948, 949, 950, 951, 952, 953, 954, 955, 956, 958, - 959, 960, 961, 962, 963, 964, 965, 966, 968, 969, - 970, 971, 972, 973, 974, 975, 976, 977, 978, 981, - 982, 983, 984, 985, 986, 988, 989, 990, 992, 993, - 994, 995, 996, 997, 999, 1000, 1001, 1002, 1003, 1007, - - 1008, 1009, 1010, 1011, 1013, 1015, 1018, 1019, 1020, 1023, - 1024, 1025, 1026, 1027, 1028, 1030, 1032, 1033, 1034, 1035, - 1036, 1002, 1037, 1038, 1039, 1041, 1044, 1045, 1046, 1047, - 1048, 1049, 1050, 1051, 1052, 1054, 1055, 1056, 1057, 1058, - 1059, 1060, 1061, 1062, 1063, 1064, 1066, 1067, 1069, 1070, - 1071, 1072, 1074, 1075, 1078, 1079, 1080, 1082, 1083, 1085, - 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, - 1096, 1098, 1101, 1070, 1102, 1103, 1104, 1105, 1107, 1108, - 1109, 1110, 1111, 1112, 1113, 1087, 1114, 1115, 1116, 1118, - 1119, 1120, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1130, - - 1131, 1132, 1134, 1136, 1138, 1139, 1140, 1141, 1142, 1144, - 1145, 1146, 1147, 1151, 1152, 1153, 1154, 1156, 1157, 1158, - 1160, 1163, 1164, 1165, 1167, 1169, 1171, 1173, 1174, 1175, - 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, - 1186, 1187, 1188, 1189, 1190, 1192, 1164, 1193, 1194, 1195, - 1197, 1199, 1200, 1201, 1202, 1203, 1206, 1207, 1209, 1210, - 1211, 1212, 1214, 1215, 1216, 1217, 1221, 1222, 1223, 1224, - 1225, 1226, 1227, 1229, 1230, 1231, 1232, 1233, 1235, 1236, - 1238, 1240, 1241, 1243, 1244, 1245, 1246, 1247, 1248, 1251, - 1252, 1253, 1254, 1255, 1256, 1257, 1259, 1260, 1265, 1267, - - 1268, 1269, 1273, 698, 697, 696, 695, 694, 693, 692, - 689, 688, 687, 686, 685, 684, 683, 682, 680, 678, - 677, 675, 674, 672, 669, 667, 666, 663, 661, 660, - 659, 658, 657, 656, 655, 654, 653, 652, 651, 649, - 648, 647, 646, 645, 644, 642, 641, 637, 635, 634, - 632, 629, 627, 626, 625, 623, 620, 619, 618, 617, - 616, 615, 614, 613, 612, 611, 609, 608, 607, 606, - 605, 604, 603, 601, 600, 599, 597, 596, 595, 594, - 593, 592, 591, 588, 587, 586, 585, 584, 583, 582, - 581, 580, 579, 578, 577, 575, 573, 572, 571, 569, - - 567, 566, 565, 564, 563, 562, 560, 559, 558, 557, - 555, 554, 553, 552, 551, 549, 548, 546, 545, 544, - 543, 542, 541, 540, 538, 536, 535, 534, 532, 531, - 530, 527, 526, 524, 523, 522, 521, 520, 519, 518, - 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, - 507, 506, 505, 504, 503, 502, 501, 499, 497, 495, - 494, 493, 492, 491, 490, 489, 488, 483, 482, 480, - 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, - 466, 465, 464, 463, 460, 459, 458, 457, 456, 455, - 454, 453, 452, 451, 448, 446, 445, 444, 441, 440, - - 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, - 429, 428, 427, 426, 425, 422, 421, 420, 419, 418, - 417, 416, 415, 414, 413, 412, 411, 409, 408, 407, - 406, 404, 403, 402, 401, 399, 398, 397, 396, 395, - 394, 393, 392, 391, 388, 387, 386, 385, 384, 383, - 382, 381, 379, 378, 376, 375, 374, 372, 370, 369, - 368, 367, 366, 365, 364, 361, 360, 359, 358, 357, - 356, 355, 354, 353, 351, 350, 348, 347, 346, 345, - 344, 343, 342, 341, 340, 338, 337, 335, 334, 333, - 332, 331, 330, 329, 327, 326, 325, 324, 323, 322, - - 321, 319, 318, 311, 310, 309, 308, 307, 306, 305, - 304, 303, 302, 301, 300, 299, 298, 297, 296, 295, - 294, 293, 292, 290, 289, 288, 287, 286, 285, 284, - 283, 282, 280, 278, 277, 276, 275, 274, 273, 272, - 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, - 260, 259, 258, 257, 256, 254, 253, 252, 251, 250, - 249, 247, 245, 244, 243, 242, 241, 240, 239, 238, - 237, 236, 235, 233, 232, 230, 229, 228, 227, 225, - 224, 223, 220, 219, 217, 216, 215, 214, 213, 212, - 211, 210, 209, 208, 207, 206, 205, 203, 202, 201, - - 200, 198, 196, 195, 193, 191, 190, 189, 188, 187, - 186, 185, 184, 183, 181, 180, 179, 178, 177, 176, - 175, 167, 166, 165, 164, 163, 162, 160, 156, 155, - 151, 150, 149, 147, 146, 145, 143, 142, 141, 140, - 137, 136, 135, 131, 130, 129, 128, 127, 126, 125, - 124, 123, 122, 120, 119, 115, 114, 113, 111, 110, - 108, 107, 106, 105, 104, 103, 102, 101, 99, 97, - 96, 95, 93, 90, 89, 88, 87, 85, 84, 83, - 80, 78, 77, 76, 75, 74, 73, 72, 71, 70, - 54, 46, 45, 43, 38, 32, 20, 17, 11, 9, - - 7, 3, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1272, 1272, 1272, 1272 + 152, 152, 92, 92, 134, 197, 134, 148, 59, 138, + 148, 158, 138, 157, 197, 60, 148, 138, 157, 158, + + 159, 161, 182, 221, 221, 138, 161, 138, 173, 173, + 173, 173, 173, 159, 708, 159, 170, 170, 182, 182, + 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, + 172, 172, 249, 199, 172, 172, 172, 172, 172, 171, + 174, 174, 174, 174, 174, 194, 199, 247, 218, 272, + 194, 218, 235, 235, 272, 272, 710, 282, 247, 249, + 282, 235, 292, 425, 171, 292, 235, 627, 282, 235, + 282, 292, 627, 282, 711, 292, 313, 292, 292, 313, + 407, 407, 412, 412, 313, 425, 449, 425, 313, 712, + 313, 313, 449, 292, 313, 314, 314, 314, 314, 314, + + 527, 527, 714, 716, 292, 315, 315, 315, 315, 315, + 316, 316, 717, 719, 316, 316, 316, 316, 316, 317, + 317, 317, 317, 317, 318, 318, 318, 318, 318, 452, + 487, 487, 487, 487, 487, 541, 452, 665, 541, 682, + 452, 488, 488, 488, 488, 488, 671, 682, 665, 709, + 671, 718, 720, 665, 721, 671, 722, 724, 726, 727, + 728, 729, 730, 731, 732, 733, 709, 736, 738, 740, + 742, 743, 744, 718, 746, 718, 748, 749, 750, 751, + 752, 753, 754, 755, 756, 757, 758, 760, 763, 764, + 765, 769, 768, 770, 768, 771, 773, 768, 774, 775, + + 776, 756, 777, 779, 780, 781, 782, 768, 756, 768, + 783, 784, 785, 786, 787, 788, 789, 792, 793, 794, + 795, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, + 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 831, 832, 833, 834, 835, 836, + 838, 839, 840, 841, 842, 843, 829, 844, 845, 847, + 849, 850, 851, 852, 854, 855, 856, 857, 829, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 829, 869, 870, 871, 872, 873, 874, 876, 877, 879, + + 880, 881, 883, 884, 885, 886, 888, 889, 890, 891, + 892, 894, 896, 897, 898, 900, 901, 902, 903, 904, + 905, 906, 908, 910, 911, 914, 916, 919, 920, 921, + 923, 924, 925, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 945, + 946, 947, 948, 949, 951, 952, 953, 954, 955, 956, + 957, 958, 959, 960, 961, 962, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 974, 975, 976, 977, 978, + 979, 980, 981, 982, 983, 984, 987, 988, 989, 990, + 991, 993, 995, 996, 997, 999, 1000, 1001, 1002, 1003, + + 1004, 1006, 1007, 1008, 1009, 1010, 1014, 1015, 1016, 1017, + 1018, 1020, 1022, 1025, 1026, 1027, 1030, 1031, 1032, 1033, + 1034, 1035, 1037, 1039, 1040, 1041, 1042, 1043, 1009, 1044, + 1045, 1046, 1048, 1051, 1052, 1053, 1054, 1055, 1056, 1057, + 1058, 1059, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, + 1069, 1070, 1071, 1073, 1074, 1076, 1077, 1078, 1079, 1081, + 1082, 1085, 1086, 1087, 1089, 1090, 1092, 1093, 1094, 1095, + 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1105, 1108, + 1077, 1109, 1110, 1111, 1112, 1114, 1115, 1116, 1117, 1118, + 1119, 1120, 1094, 1121, 1122, 1123, 1125, 1126, 1127, 1129, + + 1130, 1131, 1132, 1133, 1134, 1135, 1137, 1138, 1139, 1141, + 1143, 1145, 1146, 1147, 1148, 1149, 1151, 1152, 1153, 1154, + 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1167, 1170, 1171, + 1172, 1174, 1176, 1178, 1180, 1181, 1182, 1183, 1184, 1185, + 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, + 1196, 1197, 1199, 1171, 1200, 1201, 1202, 1204, 1206, 1207, + 1208, 1209, 1210, 1213, 1214, 1216, 1217, 1218, 1219, 1221, + 1222, 1223, 1224, 1228, 1229, 1230, 1231, 1232, 1233, 1234, + 1236, 1237, 1238, 1239, 1240, 1242, 1243, 1245, 1247, 1248, + 1250, 1251, 1252, 1253, 1254, 1255, 1258, 1259, 1260, 1261, + + 1262, 1263, 1264, 1266, 1267, 1272, 1274, 1275, 1276, 1280, + 699, 698, 697, 696, 693, 692, 691, 690, 689, 688, + 687, 686, 684, 683, 681, 680, 678, 677, 675, 672, + 670, 669, 666, 664, 663, 662, 661, 660, 659, 658, + 657, 656, 655, 654, 652, 651, 650, 649, 648, 647, + 645, 644, 640, 638, 637, 635, 632, 630, 629, 628, + 626, 623, 622, 621, 620, 619, 618, 617, 616, 615, + 614, 612, 611, 610, 609, 608, 607, 606, 604, 603, + 602, 600, 599, 598, 597, 596, 595, 594, 591, 590, + 589, 588, 587, 586, 585, 584, 583, 582, 581, 580, + + 578, 576, 575, 574, 572, 570, 569, 568, 567, 566, + 565, 563, 562, 561, 560, 558, 557, 556, 555, 554, + 552, 551, 549, 548, 547, 546, 545, 544, 543, 542, + 540, 538, 537, 536, 534, 533, 532, 529, 528, 526, + 525, 524, 523, 522, 521, 520, 519, 518, 517, 516, + 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, + 505, 504, 503, 501, 499, 497, 496, 495, 494, 493, + 492, 491, 490, 485, 484, 482, 478, 477, 476, 475, + 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, + 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, + + 450, 448, 447, 446, 443, 442, 441, 440, 439, 438, + 437, 436, 435, 434, 433, 432, 431, 430, 429, 428, + 427, 424, 423, 422, 421, 420, 419, 418, 417, 416, + 415, 414, 413, 411, 410, 409, 408, 406, 405, 404, + 403, 401, 400, 399, 398, 397, 396, 395, 394, 393, + 390, 389, 388, 387, 386, 385, 384, 383, 382, 380, + 379, 377, 376, 375, 373, 371, 370, 369, 368, 367, + 366, 365, 362, 361, 360, 359, 358, 357, 356, 355, + 354, 352, 351, 349, 348, 347, 346, 345, 344, 343, + 342, 341, 339, 338, 336, 335, 334, 333, 332, 331, + + 330, 328, 327, 326, 325, 324, 323, 322, 320, 319, + 312, 311, 310, 309, 308, 307, 306, 305, 304, 303, + 302, 301, 300, 299, 298, 297, 296, 295, 294, 293, + 291, 290, 289, 288, 287, 286, 285, 284, 283, 281, + 279, 278, 277, 276, 275, 274, 273, 271, 270, 269, + 268, 267, 266, 265, 264, 263, 262, 261, 260, 259, + 258, 257, 255, 254, 253, 252, 251, 250, 248, 246, + 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, + 234, 233, 232, 230, 229, 228, 227, 225, 224, 223, + 220, 219, 217, 216, 215, 214, 213, 212, 211, 210, + + 209, 208, 207, 206, 205, 203, 202, 201, 200, 198, + 196, 195, 193, 191, 190, 189, 188, 187, 186, 185, + 184, 183, 181, 180, 179, 178, 177, 176, 175, 167, + 166, 165, 164, 163, 162, 160, 156, 155, 151, 150, + 149, 147, 146, 145, 143, 142, 141, 140, 137, 136, + 135, 131, 130, 129, 128, 127, 126, 125, 124, 123, + 122, 120, 119, 115, 114, 113, 111, 110, 108, 107, + 105, 104, 103, 102, 101, 99, 97, 96, 95, 93, + 90, 89, 88, 87, 85, 84, 83, 80, 78, 77, + 76, 75, 74, 73, 72, 71, 70, 54, 46, 45, + + 43, 38, 32, 20, 17, 11, 9, 7, 3, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1279 } ; static yy_state_type yy_last_accepting_state; @@ -1229,6 +1231,7 @@ char *gmsh_yytext; #include "Parser.h" #include "Gmsh.tab.hpp" #include "GmshIO.h" +#include "Geo.h" // for NEWPOINT(), etc. void parsestring(char endchar); char *strsave(char *ptr); @@ -1276,7 +1279,7 @@ void skipline(void); #define YY_NO_UNISTD_H #endif -#line 1280 "Gmsh.yy.cpp" +#line 1283 "Gmsh.yy.cpp" #define INITIAL 0 @@ -1458,10 +1461,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 74 "Gmsh.l" +#line 75 "Gmsh.l" -#line 1465 "Gmsh.yy.cpp" +#line 1468 "Gmsh.yy.cpp" if ( !(yy_init) ) { @@ -1514,13 +1517,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1273 ) + if ( yy_current_state >= 1280 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 1403 ); + while ( yy_base[yy_current_state] != 1410 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1547,1246 +1550,1251 @@ do_action: /* This label is used only to access EOF actions. */ case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 76 "Gmsh.l" +#line 77 "Gmsh.l" /* none */; YY_BREAK case 2: YY_RULE_SETUP -#line 77 "Gmsh.l" +#line 78 "Gmsh.l" return tEND; YY_BREAK case 3: YY_RULE_SETUP -#line 78 "Gmsh.l" +#line 79 "Gmsh.l" skipcomments(); YY_BREAK case 4: YY_RULE_SETUP -#line 79 "Gmsh.l" +#line 80 "Gmsh.l" skipline(); YY_BREAK case 5: YY_RULE_SETUP -#line 80 "Gmsh.l" +#line 81 "Gmsh.l" { parsestring('\"'); return tBIGSTR; } YY_BREAK case 6: YY_RULE_SETUP -#line 81 "Gmsh.l" +#line 82 "Gmsh.l" { parsestring('\''); return tBIGSTR; } YY_BREAK case 7: YY_RULE_SETUP -#line 82 "Gmsh.l" +#line 83 "Gmsh.l" { gmsh_yylval.d = NEWREG(); return tDOUBLE; } YY_BREAK case 8: YY_RULE_SETUP -#line 83 "Gmsh.l" +#line 84 "Gmsh.l" { gmsh_yylval.d = NEWPOINT(); return tDOUBLE; } YY_BREAK case 9: YY_RULE_SETUP -#line 84 "Gmsh.l" +#line 85 "Gmsh.l" { gmsh_yylval.d = NEWLINE(); return tDOUBLE; } YY_BREAK case 10: YY_RULE_SETUP -#line 85 "Gmsh.l" +#line 86 "Gmsh.l" { gmsh_yylval.d = NEWLINE(); return tDOUBLE; } YY_BREAK case 11: YY_RULE_SETUP -#line 86 "Gmsh.l" +#line 87 "Gmsh.l" { gmsh_yylval.d = NEWLINELOOP(); return tDOUBLE; } YY_BREAK case 12: YY_RULE_SETUP -#line 87 "Gmsh.l" +#line 88 "Gmsh.l" { gmsh_yylval.d = NEWSURFACE(); return tDOUBLE; } YY_BREAK case 13: YY_RULE_SETUP -#line 88 "Gmsh.l" +#line 89 "Gmsh.l" { gmsh_yylval.d = NEWSURFACELOOP(); return tDOUBLE; } YY_BREAK case 14: YY_RULE_SETUP -#line 89 "Gmsh.l" +#line 90 "Gmsh.l" { gmsh_yylval.d = NEWVOLUME(); return tDOUBLE; } YY_BREAK case 15: YY_RULE_SETUP -#line 90 "Gmsh.l" +#line 91 "Gmsh.l" { gmsh_yylval.d = NEWFIELD(); return tDOUBLE; } YY_BREAK case 16: YY_RULE_SETUP -#line 91 "Gmsh.l" +#line 92 "Gmsh.l" return tAFFECT; YY_BREAK case 17: YY_RULE_SETUP -#line 92 "Gmsh.l" +#line 93 "Gmsh.l" return tAFFECTPLUS; YY_BREAK case 18: YY_RULE_SETUP -#line 93 "Gmsh.l" +#line 94 "Gmsh.l" return tAFFECTMINUS; YY_BREAK case 19: YY_RULE_SETUP -#line 94 "Gmsh.l" +#line 95 "Gmsh.l" return tAFFECTTIMES; YY_BREAK case 20: YY_RULE_SETUP -#line 95 "Gmsh.l" +#line 96 "Gmsh.l" return tAFFECTDIVIDE; YY_BREAK case 21: YY_RULE_SETUP -#line 96 "Gmsh.l" +#line 97 "Gmsh.l" return tDOTS; YY_BREAK case 22: YY_RULE_SETUP -#line 97 "Gmsh.l" +#line 98 "Gmsh.l" return tDOTS; YY_BREAK case 23: YY_RULE_SETUP -#line 98 "Gmsh.l" +#line 99 "Gmsh.l" return tSCOPE; YY_BREAK case 24: YY_RULE_SETUP -#line 99 "Gmsh.l" +#line 100 "Gmsh.l" return tOR; YY_BREAK case 25: YY_RULE_SETUP -#line 100 "Gmsh.l" +#line 101 "Gmsh.l" return tAND; YY_BREAK case 26: YY_RULE_SETUP -#line 101 "Gmsh.l" +#line 102 "Gmsh.l" return tPLUSPLUS; YY_BREAK case 27: YY_RULE_SETUP -#line 102 "Gmsh.l" +#line 103 "Gmsh.l" return tMINUSMINUS; YY_BREAK case 28: YY_RULE_SETUP -#line 103 "Gmsh.l" +#line 104 "Gmsh.l" return tEQUAL; YY_BREAK case 29: YY_RULE_SETUP -#line 104 "Gmsh.l" +#line 105 "Gmsh.l" return tNOTEQUAL; YY_BREAK case 30: YY_RULE_SETUP -#line 105 "Gmsh.l" +#line 106 "Gmsh.l" return tLESSOREQUAL; YY_BREAK case 31: YY_RULE_SETUP -#line 106 "Gmsh.l" +#line 107 "Gmsh.l" return tGREATEROREQUAL; YY_BREAK case 32: YY_RULE_SETUP -#line 107 "Gmsh.l" +#line 108 "Gmsh.l" return tGREATERGREATER; YY_BREAK case 33: YY_RULE_SETUP -#line 108 "Gmsh.l" +#line 109 "Gmsh.l" return tLESSLESS; YY_BREAK case 34: YY_RULE_SETUP -#line 110 "Gmsh.l" +#line 111 "Gmsh.l" return tAbort; YY_BREAK case 35: YY_RULE_SETUP -#line 111 "Gmsh.l" +#line 112 "Gmsh.l" return tAbs; YY_BREAK case 36: YY_RULE_SETUP -#line 112 "Gmsh.l" +#line 113 "Gmsh.l" return tAbsolutePath; YY_BREAK case 37: YY_RULE_SETUP -#line 113 "Gmsh.l" +#line 114 "Gmsh.l" return tAcos; YY_BREAK case 38: YY_RULE_SETUP -#line 114 "Gmsh.l" +#line 115 "Gmsh.l" return tAdaptMesh; YY_BREAK case 39: YY_RULE_SETUP -#line 115 "Gmsh.l" +#line 116 "Gmsh.l" return tAffine; YY_BREAK case 40: YY_RULE_SETUP -#line 116 "Gmsh.l" +#line 117 "Gmsh.l" return tAlias; YY_BREAK case 41: YY_RULE_SETUP -#line 117 "Gmsh.l" +#line 118 "Gmsh.l" return tAliasWithOptions; YY_BREAK case 42: YY_RULE_SETUP -#line 118 "Gmsh.l" +#line 119 "Gmsh.l" return tAcos; YY_BREAK case 43: YY_RULE_SETUP -#line 119 "Gmsh.l" +#line 120 "Gmsh.l" return tAppend; YY_BREAK case 44: YY_RULE_SETUP -#line 120 "Gmsh.l" +#line 121 "Gmsh.l" return tAsin; YY_BREAK case 45: YY_RULE_SETUP -#line 121 "Gmsh.l" +#line 122 "Gmsh.l" return tAtan; YY_BREAK case 46: YY_RULE_SETUP -#line 122 "Gmsh.l" +#line 123 "Gmsh.l" return tAtan2; YY_BREAK case 47: YY_RULE_SETUP -#line 123 "Gmsh.l" +#line 124 "Gmsh.l" return tAsin; YY_BREAK case 48: YY_RULE_SETUP -#line 124 "Gmsh.l" +#line 125 "Gmsh.l" return tAtan; YY_BREAK case 49: YY_RULE_SETUP -#line 125 "Gmsh.l" +#line 126 "Gmsh.l" return tAtan2; YY_BREAK case 50: YY_RULE_SETUP -#line 127 "Gmsh.l" +#line 128 "Gmsh.l" return tBSpline; YY_BREAK case 51: YY_RULE_SETUP -#line 128 "Gmsh.l" +#line 129 "Gmsh.l" return tBetti; YY_BREAK case 52: YY_RULE_SETUP -#line 129 "Gmsh.l" +#line 130 "Gmsh.l" return tBezier; YY_BREAK case 53: YY_RULE_SETUP -#line 130 "Gmsh.l" +#line 131 "Gmsh.l" return tBlock; YY_BREAK case 54: YY_RULE_SETUP -#line 131 "Gmsh.l" +#line 132 "Gmsh.l" return tBooleanDifference; YY_BREAK case 55: YY_RULE_SETUP -#line 132 "Gmsh.l" +#line 133 "Gmsh.l" return tBooleanFragments; YY_BREAK case 56: YY_RULE_SETUP -#line 133 "Gmsh.l" +#line 134 "Gmsh.l" return tBooleanIntersection; YY_BREAK case 57: YY_RULE_SETUP -#line 134 "Gmsh.l" +#line 135 "Gmsh.l" return tBooleanSection; YY_BREAK case 58: YY_RULE_SETUP -#line 135 "Gmsh.l" +#line 136 "Gmsh.l" return tBooleanUnion; YY_BREAK case 59: YY_RULE_SETUP -#line 136 "Gmsh.l" +#line 137 "Gmsh.l" return tBoundingBox; YY_BREAK case 60: YY_RULE_SETUP -#line 138 "Gmsh.l" +#line 139 "Gmsh.l" return tCall; YY_BREAK case 61: YY_RULE_SETUP -#line 139 "Gmsh.l" +#line 140 "Gmsh.l" return tCatenary; YY_BREAK case 62: YY_RULE_SETUP -#line 140 "Gmsh.l" +#line 141 "Gmsh.l" return tSpline; YY_BREAK case 63: YY_RULE_SETUP -#line 141 "Gmsh.l" +#line 142 "Gmsh.l" return tCeil; YY_BREAK case 64: YY_RULE_SETUP -#line 142 "Gmsh.l" +#line 143 "Gmsh.l" return tChamfer; YY_BREAK case 65: YY_RULE_SETUP -#line 143 "Gmsh.l" +#line 144 "Gmsh.l" return tCharacteristic; YY_BREAK case 66: YY_RULE_SETUP -#line 144 "Gmsh.l" +#line 145 "Gmsh.l" return tCircle; YY_BREAK case 67: YY_RULE_SETUP -#line 145 "Gmsh.l" +#line 146 "Gmsh.l" return tCodeName; YY_BREAK case 68: YY_RULE_SETUP -#line 146 "Gmsh.l" +#line 147 "Gmsh.l" return tCoherence; YY_BREAK case 69: YY_RULE_SETUP -#line 147 "Gmsh.l" +#line 148 "Gmsh.l" return tCohomology; YY_BREAK case 70: YY_RULE_SETUP -#line 148 "Gmsh.l" +#line 149 "Gmsh.l" return tColor; YY_BREAK case 71: YY_RULE_SETUP -#line 149 "Gmsh.l" +#line 150 "Gmsh.l" return tColorTable; YY_BREAK case 72: YY_RULE_SETUP -#line 150 "Gmsh.l" +#line 151 "Gmsh.l" return tCombine; YY_BREAK case 73: YY_RULE_SETUP -#line 151 "Gmsh.l" +#line 152 "Gmsh.l" return tCompound; YY_BREAK case 74: YY_RULE_SETUP -#line 152 "Gmsh.l" +#line 153 "Gmsh.l" return tCone; YY_BREAK case 75: YY_RULE_SETUP -#line 153 "Gmsh.l" +#line 154 "Gmsh.l" return tCoordinates; YY_BREAK case 76: YY_RULE_SETUP -#line 154 "Gmsh.l" +#line 155 "Gmsh.l" return tCopyOptions; YY_BREAK case 77: YY_RULE_SETUP -#line 155 "Gmsh.l" +#line 156 "Gmsh.l" return tCos; YY_BREAK case 78: YY_RULE_SETUP -#line 156 "Gmsh.l" +#line 157 "Gmsh.l" return tCosh; YY_BREAK case 79: YY_RULE_SETUP -#line 157 "Gmsh.l" +#line 158 "Gmsh.l" return tCpu; YY_BREAK case 80: YY_RULE_SETUP -#line 158 "Gmsh.l" +#line 159 "Gmsh.l" return tCreateTopology; YY_BREAK case 81: YY_RULE_SETUP -#line 159 "Gmsh.l" +#line 160 "Gmsh.l" return tCreateTopologyNoHoles; YY_BREAK case 82: YY_RULE_SETUP -#line 160 "Gmsh.l" +#line 161 "Gmsh.l" return tCurrentDirectory; YY_BREAK case 83: YY_RULE_SETUP -#line 161 "Gmsh.l" +#line 162 "Gmsh.l" return tCurrentDirectory; YY_BREAK case 84: YY_RULE_SETUP -#line 162 "Gmsh.l" +#line 163 "Gmsh.l" return tCylinder; YY_BREAK case 85: YY_RULE_SETUP -#line 164 "Gmsh.l" +#line 165 "Gmsh.l" return tDefineConstant; YY_BREAK case 86: YY_RULE_SETUP -#line 165 "Gmsh.l" +#line 166 "Gmsh.l" return tDefineNumber; YY_BREAK case 87: YY_RULE_SETUP -#line 166 "Gmsh.l" +#line 167 "Gmsh.l" return tDefineString; YY_BREAK case 88: YY_RULE_SETUP -#line 167 "Gmsh.l" +#line 168 "Gmsh.l" return tDegenerated; YY_BREAK case 89: YY_RULE_SETUP -#line 168 "Gmsh.l" +#line 169 "Gmsh.l" return tDelete; YY_BREAK case 90: YY_RULE_SETUP -#line 169 "Gmsh.l" +#line 170 "Gmsh.l" return tDilate; YY_BREAK case 91: YY_RULE_SETUP -#line 170 "Gmsh.l" +#line 171 "Gmsh.l" return tDimNameSpace; YY_BREAK case 92: YY_RULE_SETUP -#line 171 "Gmsh.l" +#line 172 "Gmsh.l" return tDirName; YY_BREAK case 93: YY_RULE_SETUP -#line 172 "Gmsh.l" +#line 173 "Gmsh.l" return tDisk; YY_BREAK case 94: YY_RULE_SETUP -#line 173 "Gmsh.l" +#line 174 "Gmsh.l" return tDraw; YY_BREAK case 95: YY_RULE_SETUP -#line 175 "Gmsh.l" +#line 176 "Gmsh.l" return tEllipse; YY_BREAK case 96: YY_RULE_SETUP -#line 176 "Gmsh.l" +#line 177 "Gmsh.l" return tEllipse; YY_BREAK case 97: YY_RULE_SETUP -#line 177 "Gmsh.l" +#line 178 "Gmsh.l" return tEllipsoid; YY_BREAK case 98: YY_RULE_SETUP -#line 178 "Gmsh.l" +#line 179 "Gmsh.l" return tElliptic; YY_BREAK case 99: YY_RULE_SETUP -#line 179 "Gmsh.l" +#line 180 "Gmsh.l" return tElse; YY_BREAK case 100: YY_RULE_SETUP -#line 180 "Gmsh.l" +#line 181 "Gmsh.l" return tElseIf; YY_BREAK case 101: YY_RULE_SETUP -#line 181 "Gmsh.l" +#line 182 "Gmsh.l" return tEndFor; YY_BREAK case 102: YY_RULE_SETUP -#line 182 "Gmsh.l" +#line 183 "Gmsh.l" return tEndIf; YY_BREAK case 103: YY_RULE_SETUP -#line 183 "Gmsh.l" +#line 184 "Gmsh.l" return tError; YY_BREAK case 104: YY_RULE_SETUP -#line 184 "Gmsh.l" +#line 185 "Gmsh.l" return tEuclidian; YY_BREAK case 105: YY_RULE_SETUP -#line 185 "Gmsh.l" +#line 186 "Gmsh.l" return tExists; YY_BREAK case 106: YY_RULE_SETUP -#line 186 "Gmsh.l" +#line 187 "Gmsh.l" return tExit; YY_BREAK case 107: YY_RULE_SETUP -#line 187 "Gmsh.l" +#line 188 "Gmsh.l" return tExp; YY_BREAK case 108: YY_RULE_SETUP -#line 188 "Gmsh.l" +#line 189 "Gmsh.l" return tExtrude; YY_BREAK case 109: YY_RULE_SETUP -#line 190 "Gmsh.l" +#line 191 "Gmsh.l" return tFabs; YY_BREAK case 110: YY_RULE_SETUP -#line 191 "Gmsh.l" +#line 192 "Gmsh.l" return tField; YY_BREAK case 111: YY_RULE_SETUP -#line 192 "Gmsh.l" +#line 193 "Gmsh.l" return tFileExists; YY_BREAK case 112: YY_RULE_SETUP -#line 193 "Gmsh.l" +#line 194 "Gmsh.l" return tFillet; YY_BREAK case 113: YY_RULE_SETUP -#line 194 "Gmsh.l" +#line 195 "Gmsh.l" return tFind; YY_BREAK case 114: YY_RULE_SETUP -#line 195 "Gmsh.l" +#line 196 "Gmsh.l" return tFixRelativePath; YY_BREAK case 115: YY_RULE_SETUP -#line 196 "Gmsh.l" +#line 197 "Gmsh.l" return tFloor; YY_BREAK case 116: YY_RULE_SETUP -#line 197 "Gmsh.l" +#line 198 "Gmsh.l" return tFmod; YY_BREAK case 117: YY_RULE_SETUP -#line 198 "Gmsh.l" +#line 199 "Gmsh.l" return tFor; YY_BREAK case 118: YY_RULE_SETUP -#line 199 "Gmsh.l" +#line 200 "Gmsh.l" return tMacro; YY_BREAK case 119: YY_RULE_SETUP -#line 201 "Gmsh.l" +#line 202 "Gmsh.l" return tGMSH_MAJOR_VERSION; YY_BREAK case 120: YY_RULE_SETUP -#line 202 "Gmsh.l" +#line 203 "Gmsh.l" return tGMSH_MINOR_VERSION; YY_BREAK case 121: YY_RULE_SETUP -#line 203 "Gmsh.l" +#line 204 "Gmsh.l" return tGMSH_PATCH_VERSION; YY_BREAK case 122: YY_RULE_SETUP -#line 204 "Gmsh.l" -return tGetEnv; +#line 205 "Gmsh.l" +return tGeoEntity; YY_BREAK case 123: YY_RULE_SETUP -#line 205 "Gmsh.l" -return tGetForced; +#line 206 "Gmsh.l" +return tGetEnv; YY_BREAK case 124: YY_RULE_SETUP -#line 206 "Gmsh.l" -return tGetForcedStr; +#line 207 "Gmsh.l" +return tGetForced; YY_BREAK case 125: YY_RULE_SETUP -#line 207 "Gmsh.l" -return tGetNumber; +#line 208 "Gmsh.l" +return tGetForcedStr; YY_BREAK case 126: YY_RULE_SETUP -#line 208 "Gmsh.l" -return tGetString; +#line 209 "Gmsh.l" +return tGetNumber; YY_BREAK case 127: YY_RULE_SETUP -#line 209 "Gmsh.l" -return tGetStringValue; +#line 210 "Gmsh.l" +return tGetString; YY_BREAK case 128: YY_RULE_SETUP -#line 210 "Gmsh.l" -return tGetValue; +#line 211 "Gmsh.l" +return tGetStringValue; YY_BREAK case 129: YY_RULE_SETUP -#line 211 "Gmsh.l" -return tGmshExecutableName; +#line 212 "Gmsh.l" +return tGetValue; YY_BREAK case 130: YY_RULE_SETUP #line 213 "Gmsh.l" -return tHide; +return tGmshExecutableName; YY_BREAK case 131: YY_RULE_SETUP -#line 214 "Gmsh.l" -return tHole; +#line 215 "Gmsh.l" +return tHide; YY_BREAK case 132: YY_RULE_SETUP -#line 215 "Gmsh.l" -return tHomology; +#line 216 "Gmsh.l" +return tHole; YY_BREAK case 133: YY_RULE_SETUP -#line 216 "Gmsh.l" -return tHypot; +#line 217 "Gmsh.l" +return tHomology; YY_BREAK case 134: YY_RULE_SETUP #line 218 "Gmsh.l" -return tInterpolationScheme; +return tHypot; YY_BREAK case 135: YY_RULE_SETUP -#line 219 "Gmsh.l" -return tIf; +#line 220 "Gmsh.l" +return tInterpolationScheme; YY_BREAK case 136: YY_RULE_SETUP -#line 220 "Gmsh.l" -return tIn; +#line 221 "Gmsh.l" +return tIf; YY_BREAK case 137: YY_RULE_SETUP -#line 221 "Gmsh.l" -return tIntersect; +#line 222 "Gmsh.l" +return tIn; YY_BREAK case 138: YY_RULE_SETUP #line 223 "Gmsh.l" -return tNurbsKnots; +return tIntersect; YY_BREAK case 139: YY_RULE_SETUP #line 225 "Gmsh.l" -return tLayers; +return tNurbsKnots; YY_BREAK case 140: YY_RULE_SETUP -#line 226 "Gmsh.l" -return tLength; +#line 227 "Gmsh.l" +return tLayers; YY_BREAK case 141: YY_RULE_SETUP -#line 227 "Gmsh.l" -return tLevelset; +#line 228 "Gmsh.l" +return tLength; YY_BREAK case 142: YY_RULE_SETUP -#line 228 "Gmsh.l" -return tLinSpace; +#line 229 "Gmsh.l" +return tLevelset; YY_BREAK case 143: YY_RULE_SETUP -#line 229 "Gmsh.l" -return tLine; +#line 230 "Gmsh.l" +return tLinSpace; YY_BREAK case 144: YY_RULE_SETUP -#line 230 "Gmsh.l" -return tList; +#line 231 "Gmsh.l" +return tLine; YY_BREAK case 145: YY_RULE_SETUP -#line 231 "Gmsh.l" -return tListFromFile; +#line 232 "Gmsh.l" +return tList; YY_BREAK case 146: YY_RULE_SETUP -#line 232 "Gmsh.l" -return tLog; +#line 233 "Gmsh.l" +return tListFromFile; YY_BREAK case 147: YY_RULE_SETUP -#line 233 "Gmsh.l" -return tLog10; +#line 234 "Gmsh.l" +return tLog; YY_BREAK case 148: YY_RULE_SETUP -#line 234 "Gmsh.l" -return tLogSpace; +#line 235 "Gmsh.l" +return tLog10; YY_BREAK case 149: YY_RULE_SETUP -#line 235 "Gmsh.l" -return tLowerCase; +#line 236 "Gmsh.l" +return tLogSpace; YY_BREAK case 150: YY_RULE_SETUP -#line 236 "Gmsh.l" -return tLowerCaseIn; +#line 237 "Gmsh.l" +return tLowerCase; YY_BREAK case 151: YY_RULE_SETUP #line 238 "Gmsh.l" -return tMPI_Rank; +return tLowerCaseIn; YY_BREAK case 152: YY_RULE_SETUP -#line 239 "Gmsh.l" -return tMPI_Size; +#line 240 "Gmsh.l" +return tMPI_Rank; YY_BREAK case 153: YY_RULE_SETUP -#line 240 "Gmsh.l" -return tMacro; +#line 241 "Gmsh.l" +return tMPI_Size; YY_BREAK case 154: YY_RULE_SETUP -#line 241 "Gmsh.l" -return tMemory; +#line 242 "Gmsh.l" +return tMacro; YY_BREAK case 155: YY_RULE_SETUP -#line 242 "Gmsh.l" -return tMeshAlgorithm; +#line 243 "Gmsh.l" +return tMemory; YY_BREAK case 156: YY_RULE_SETUP -#line 243 "Gmsh.l" -return tModulo; +#line 244 "Gmsh.l" +return tMeshAlgorithm; YY_BREAK case 157: YY_RULE_SETUP #line 245 "Gmsh.l" -return tNameToString; +return tModulo; YY_BREAK case 158: YY_RULE_SETUP -#line 246 "Gmsh.l" -return tNameStruct; +#line 247 "Gmsh.l" +return tNameToString; YY_BREAK case 159: YY_RULE_SETUP -#line 247 "Gmsh.l" -return tNameToString; +#line 248 "Gmsh.l" +return tNameStruct; YY_BREAK case 160: YY_RULE_SETUP -#line 248 "Gmsh.l" -return tNewModel; +#line 249 "Gmsh.l" +return tNameToString; YY_BREAK case 161: YY_RULE_SETUP -#line 249 "Gmsh.l" -return tNurbs; +#line 250 "Gmsh.l" +return tNewModel; YY_BREAK case 162: YY_RULE_SETUP #line 251 "Gmsh.l" -return tOnelabAction; +return tNurbs; YY_BREAK case 163: YY_RULE_SETUP -#line 252 "Gmsh.l" -return tOnelabRun; +#line 253 "Gmsh.l" +return tOnelabAction; YY_BREAK case 164: YY_RULE_SETUP -#line 253 "Gmsh.l" -return tNurbsOrder; +#line 254 "Gmsh.l" +return tOnelabRun; YY_BREAK case 165: YY_RULE_SETUP #line 255 "Gmsh.l" -return tParametric; +return tNurbsOrder; YY_BREAK case 166: YY_RULE_SETUP -#line 256 "Gmsh.l" -return tPeriodic; +#line 257 "Gmsh.l" +return tParametric; YY_BREAK case 167: YY_RULE_SETUP -#line 257 "Gmsh.l" -return tPhysical; +#line 258 "Gmsh.l" +return tPeriodic; YY_BREAK case 168: YY_RULE_SETUP -#line 258 "Gmsh.l" -return tPi; +#line 259 "Gmsh.l" +return tPhysical; YY_BREAK case 169: YY_RULE_SETUP -#line 259 "Gmsh.l" -return tPlane; +#line 260 "Gmsh.l" +return tPi; YY_BREAK case 170: YY_RULE_SETUP -#line 260 "Gmsh.l" -return tPlugin; +#line 261 "Gmsh.l" +return tPlane; YY_BREAK case 171: YY_RULE_SETUP -#line 261 "Gmsh.l" -return tPoint; +#line 262 "Gmsh.l" +return tPlugin; YY_BREAK case 172: YY_RULE_SETUP -#line 262 "Gmsh.l" -return tPolarSphere; +#line 263 "Gmsh.l" +return tPoint; YY_BREAK case 173: YY_RULE_SETUP -#line 263 "Gmsh.l" -return tPrintf; +#line 264 "Gmsh.l" +return tPolarSphere; YY_BREAK case 174: YY_RULE_SETUP #line 265 "Gmsh.l" -return tQuadric; +return tPrintf; YY_BREAK case 175: YY_RULE_SETUP -#line 266 "Gmsh.l" -return tQuadTriAddVerts; +#line 267 "Gmsh.l" +return tQuadric; YY_BREAK case 176: YY_RULE_SETUP -#line 267 "Gmsh.l" -return tQuadTriNoNewVerts; +#line 268 "Gmsh.l" +return tQuadTriAddVerts; YY_BREAK case 177: YY_RULE_SETUP #line 269 "Gmsh.l" -return tRand; +return tQuadTriNoNewVerts; YY_BREAK case 178: YY_RULE_SETUP -#line 270 "Gmsh.l" -return tRecombLaterals; +#line 271 "Gmsh.l" +return tRand; YY_BREAK case 179: YY_RULE_SETUP -#line 271 "Gmsh.l" -return tRecombine; +#line 272 "Gmsh.l" +return tRecombLaterals; YY_BREAK case 180: YY_RULE_SETUP -#line 272 "Gmsh.l" -return tRectangle; +#line 273 "Gmsh.l" +return tRecombine; YY_BREAK case 181: YY_RULE_SETUP -#line 273 "Gmsh.l" -return tRecursive; +#line 274 "Gmsh.l" +return tRectangle; YY_BREAK case 182: YY_RULE_SETUP -#line 274 "Gmsh.l" -return tRefineMesh; +#line 275 "Gmsh.l" +return tRecursive; YY_BREAK case 183: YY_RULE_SETUP -#line 275 "Gmsh.l" -return tRelocateMesh; +#line 276 "Gmsh.l" +return tRefineMesh; YY_BREAK case 184: YY_RULE_SETUP -#line 276 "Gmsh.l" -return tReturn; +#line 277 "Gmsh.l" +return tRelocateMesh; YY_BREAK case 185: YY_RULE_SETUP -#line 277 "Gmsh.l" -return tReverse; +#line 278 "Gmsh.l" +return tReturn; YY_BREAK case 186: YY_RULE_SETUP -#line 278 "Gmsh.l" -return tRotate; +#line 279 "Gmsh.l" +return tReverse; YY_BREAK case 187: YY_RULE_SETUP -#line 279 "Gmsh.l" -return tRound; +#line 280 "Gmsh.l" +return tRotate; YY_BREAK case 188: YY_RULE_SETUP -#line 280 "Gmsh.l" -return tRuled; +#line 281 "Gmsh.l" +return tRound; YY_BREAK case 189: YY_RULE_SETUP #line 282 "Gmsh.l" -return tStringToName; +return tRuled; YY_BREAK case 190: YY_RULE_SETUP -#line 283 "Gmsh.l" -return tScaleLast; +#line 284 "Gmsh.l" +return tStringToName; YY_BREAK case 191: YY_RULE_SETUP -#line 284 "Gmsh.l" -return tSetChanged; +#line 285 "Gmsh.l" +return tScaleLast; YY_BREAK case 192: YY_RULE_SETUP -#line 285 "Gmsh.l" -return tSetFactory; +#line 286 "Gmsh.l" +return tSetChanged; YY_BREAK case 193: YY_RULE_SETUP -#line 286 "Gmsh.l" -return tSetNumber; +#line 287 "Gmsh.l" +return tSetFactory; YY_BREAK case 194: YY_RULE_SETUP -#line 287 "Gmsh.l" -return tSetPartition; +#line 288 "Gmsh.l" +return tSetNumber; YY_BREAK case 195: YY_RULE_SETUP -#line 288 "Gmsh.l" -return tSetString; +#line 289 "Gmsh.l" +return tSetPartition; YY_BREAK case 196: YY_RULE_SETUP -#line 289 "Gmsh.l" -return tShapeFromFile; +#line 290 "Gmsh.l" +return tSetString; YY_BREAK case 197: YY_RULE_SETUP -#line 290 "Gmsh.l" -return tShow; +#line 291 "Gmsh.l" +return tShapeFromFile; YY_BREAK case 198: YY_RULE_SETUP -#line 291 "Gmsh.l" -return tSin; +#line 292 "Gmsh.l" +return tShow; YY_BREAK case 199: YY_RULE_SETUP -#line 292 "Gmsh.l" -return tSinh; +#line 293 "Gmsh.l" +return tSin; YY_BREAK case 200: YY_RULE_SETUP -#line 293 "Gmsh.l" -return tSlide; +#line 294 "Gmsh.l" +return tSinh; YY_BREAK case 201: YY_RULE_SETUP -#line 294 "Gmsh.l" -return tSmoother; +#line 295 "Gmsh.l" +return tSlide; YY_BREAK case 202: YY_RULE_SETUP -#line 295 "Gmsh.l" -return tSphere; +#line 296 "Gmsh.l" +return tSmoother; YY_BREAK case 203: YY_RULE_SETUP -#line 296 "Gmsh.l" -return tSpline; +#line 297 "Gmsh.l" +return tSphere; YY_BREAK case 204: YY_RULE_SETUP -#line 297 "Gmsh.l" -return tSplit; +#line 298 "Gmsh.l" +return tSpline; YY_BREAK case 205: YY_RULE_SETUP -#line 298 "Gmsh.l" -return tSprintf; +#line 299 "Gmsh.l" +return tSplit; YY_BREAK case 206: YY_RULE_SETUP -#line 299 "Gmsh.l" -return tSqrt; +#line 300 "Gmsh.l" +return tSprintf; YY_BREAK case 207: YY_RULE_SETUP -#line 300 "Gmsh.l" -return tStr; +#line 301 "Gmsh.l" +return tSqrt; YY_BREAK case 208: YY_RULE_SETUP -#line 301 "Gmsh.l" -return tStrCat; +#line 302 "Gmsh.l" +return tStr; YY_BREAK case 209: YY_RULE_SETUP -#line 302 "Gmsh.l" -return tStrChoice; +#line 303 "Gmsh.l" +return tStrCat; YY_BREAK case 210: YY_RULE_SETUP -#line 303 "Gmsh.l" -return tStrCmp; +#line 304 "Gmsh.l" +return tStrChoice; YY_BREAK case 211: YY_RULE_SETUP -#line 304 "Gmsh.l" -return tStrFind; +#line 305 "Gmsh.l" +return tStrCmp; YY_BREAK case 212: YY_RULE_SETUP -#line 305 "Gmsh.l" -return tStrLen; +#line 306 "Gmsh.l" +return tStrFind; YY_BREAK case 213: YY_RULE_SETUP -#line 306 "Gmsh.l" -return tStrPrefix; +#line 307 "Gmsh.l" +return tStrLen; YY_BREAK case 214: YY_RULE_SETUP -#line 307 "Gmsh.l" -return tStrRelative; +#line 308 "Gmsh.l" +return tStrPrefix; YY_BREAK case 215: YY_RULE_SETUP -#line 308 "Gmsh.l" -return tStrReplace; +#line 309 "Gmsh.l" +return tStrRelative; YY_BREAK case 216: YY_RULE_SETUP -#line 309 "Gmsh.l" -return tStrSub; +#line 310 "Gmsh.l" +return tStrReplace; YY_BREAK case 217: YY_RULE_SETUP -#line 310 "Gmsh.l" -return tStringToName; +#line 311 "Gmsh.l" +return tStrSub; YY_BREAK case 218: YY_RULE_SETUP -#line 311 "Gmsh.l" -return tDefineStruct; +#line 312 "Gmsh.l" +return tStringToName; YY_BREAK case 219: YY_RULE_SETUP -#line 312 "Gmsh.l" -return tSurface; +#line 313 "Gmsh.l" +return tDefineStruct; YY_BREAK case 220: YY_RULE_SETUP -#line 313 "Gmsh.l" -return tSymmetry; +#line 314 "Gmsh.l" +return tSurface; YY_BREAK case 221: YY_RULE_SETUP -#line 314 "Gmsh.l" -return tSyncModel; +#line 315 "Gmsh.l" +return tSymmetry; YY_BREAK case 222: YY_RULE_SETUP #line 316 "Gmsh.l" -return tText2D; +return tSyncModel; YY_BREAK case 223: YY_RULE_SETUP -#line 317 "Gmsh.l" -return tText3D; +#line 318 "Gmsh.l" +return tText2D; YY_BREAK case 224: YY_RULE_SETUP -#line 318 "Gmsh.l" -return tTime; +#line 319 "Gmsh.l" +return tText3D; YY_BREAK case 225: YY_RULE_SETUP -#line 319 "Gmsh.l" -return tTan; +#line 320 "Gmsh.l" +return tTime; YY_BREAK case 226: YY_RULE_SETUP -#line 320 "Gmsh.l" -return tTanh; +#line 321 "Gmsh.l" +return tTan; YY_BREAK case 227: YY_RULE_SETUP -#line 321 "Gmsh.l" -return tTestLevel; +#line 322 "Gmsh.l" +return tTanh; YY_BREAK case 228: YY_RULE_SETUP -#line 322 "Gmsh.l" -return tTextAttributes; +#line 323 "Gmsh.l" +return tTestLevel; YY_BREAK case 229: YY_RULE_SETUP -#line 323 "Gmsh.l" -return tThickSolid; +#line 324 "Gmsh.l" +return tTextAttributes; YY_BREAK case 230: YY_RULE_SETUP -#line 324 "Gmsh.l" -return tThruSections; +#line 325 "Gmsh.l" +return tThickSolid; YY_BREAK case 231: YY_RULE_SETUP -#line 325 "Gmsh.l" -return tToday; +#line 326 "Gmsh.l" +return tThruSections; YY_BREAK case 232: YY_RULE_SETUP -#line 326 "Gmsh.l" -return tTorus; +#line 327 "Gmsh.l" +return tToday; YY_BREAK case 233: YY_RULE_SETUP -#line 327 "Gmsh.l" -return tTotalMemory; +#line 328 "Gmsh.l" +return tTorus; YY_BREAK case 234: YY_RULE_SETUP -#line 328 "Gmsh.l" -return tTransfQuadTri; +#line 329 "Gmsh.l" +return tTotalMemory; YY_BREAK case 235: YY_RULE_SETUP -#line 329 "Gmsh.l" -return tTransfinite; +#line 330 "Gmsh.l" +return tTransfQuadTri; YY_BREAK case 236: YY_RULE_SETUP -#line 330 "Gmsh.l" -return tTranslate; +#line 331 "Gmsh.l" +return tTransfinite; YY_BREAK case 237: YY_RULE_SETUP #line 332 "Gmsh.l" -return tUndefineConstant; +return tTranslate; YY_BREAK case 238: YY_RULE_SETUP -#line 333 "Gmsh.l" -return tUnique; +#line 334 "Gmsh.l" +return tUndefineConstant; YY_BREAK case 239: YY_RULE_SETUP -#line 334 "Gmsh.l" -return tUpperCase; +#line 335 "Gmsh.l" +return tUnique; YY_BREAK case 240: YY_RULE_SETUP -#line 335 "Gmsh.l" -return tUsing; +#line 336 "Gmsh.l" +return tUpperCase; YY_BREAK case 241: YY_RULE_SETUP #line 337 "Gmsh.l" -return tVolume; +return tUsing; YY_BREAK case 242: YY_RULE_SETUP #line 339 "Gmsh.l" -return tWedge; +return tVolume; YY_BREAK case 243: YY_RULE_SETUP -#line 340 "Gmsh.l" -return tWire; +#line 341 "Gmsh.l" +return tWedge; YY_BREAK case 244: -#line 343 "Gmsh.l" +YY_RULE_SETUP +#line 342 "Gmsh.l" +return tWire; + YY_BREAK case 245: -#line 344 "Gmsh.l" -case 246: #line 345 "Gmsh.l" +case 246: +#line 346 "Gmsh.l" case 247: -YY_RULE_SETUP -#line 345 "Gmsh.l" -{ gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; } - YY_BREAK +#line 347 "Gmsh.l" case 248: YY_RULE_SETUP #line 347 "Gmsh.l" -{ gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; } +{ gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; } YY_BREAK case 249: YY_RULE_SETUP #line 349 "Gmsh.l" -return gmsh_yytext[0]; +{ gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; } YY_BREAK case 250: YY_RULE_SETUP #line 351 "Gmsh.l" +return gmsh_yytext[0]; + YY_BREAK +case 251: +YY_RULE_SETUP +#line 353 "Gmsh.l" ECHO; YY_BREAK -#line 2790 "Gmsh.yy.cpp" +#line 2798 "Gmsh.yy.cpp" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -3078,7 +3086,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1273 ) + if ( yy_current_state >= 1280 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3106,11 +3114,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1273 ) + if ( yy_current_state >= 1280 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1272); + yy_is_jam = (yy_current_state == 1279); return yy_is_jam ? 0 : yy_current_state; } @@ -3783,7 +3791,7 @@ void gmsh_yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 351 "Gmsh.l" +#line 353 "Gmsh.l" diff --git a/Parser/Parser.h b/Parser/Parser.h index ba7f08ee55945e18b9406e5808efcc5141f77619..9aed6b7ec29af80d6bc8457d0541bbd2d69dfd4b 100644 --- a/Parser/Parser.h +++ b/Parser/Parser.h @@ -60,7 +60,7 @@ public: std::map<std::string, std::vector<double> >::const_iterator it = _fopt.find(key_member); if (it != _fopt.end()) { - if (index < it->second.size()) { + if (index < (int)it->second.size()) { out = it->second[index]; return 0; } else { @@ -77,7 +77,7 @@ public: std::map<std::string, std::vector<std::string> >::const_iterator it = _copt.find(key_member); if (it != _copt.end()) { - if (index < it->second.size()) { + if (index < (int)it->second.size()) { out = &it->second[index]; return 0; } else { @@ -150,7 +150,7 @@ public: str += it_attrib->first + " "; char tmp[32]; if (it_attrib->second.size() > 1) str += "{ "; - for (int i = 0; i < it_attrib->second.size(); i++) { + for (unsigned int i = 0; i < it_attrib->second.size(); i++) { if (i) str += ", "; sprintf(tmp, "%g", it_attrib->second[i]); str += tmp; } @@ -163,7 +163,7 @@ public: if (flag_comma) str += ", "; str += it_attrib->first + " "; if (it_attrib->second.size() > 1) str += "Str[{ "; - for (int i = 0; i < it_attrib->second.size(); i++) { + for (unsigned int i = 0; i < it_attrib->second.size(); i++) { if (i) str += ", "; str += "\"" + it_attrib->second[i] + "\""; } @@ -449,18 +449,9 @@ extern std::string gmsh_yyname; extern int gmsh_yyerrorstate; extern std::map<std::string, gmsh_yysymbol> gmsh_yysymbols; extern std::map<std::string, std::vector<std::string> > gmsh_yystringsymbols; -extern NameSpaces nameSpaces; +extern std::string gmsh_yyfactory; +extern NameSpaces gmsh_yynamespaces; void PrintParserSymbols(bool help, std::vector<std::string> &vec); -int NEWPOINT(); -int NEWLINE(); -int NEWLINELOOP(); -int NEWSURFACE(); -int NEWSURFACELOOP(); -int NEWVOLUME(); -int NEWREG(); -int NEWFIELD(); -int NEWPHYSICAL(); - #endif diff --git a/Plugin/CutSphere.cpp b/Plugin/CutSphere.cpp index 9328c78e51a6dbc2560df3e2f8235d02f66f834c..1ce5f943a3a0fe827a927910a0012455d9105bc9 100644 --- a/Plugin/CutSphere.cpp +++ b/Plugin/CutSphere.cpp @@ -65,7 +65,7 @@ double GMSH_CutSpherePlugin::callback(int num, int action, double value, double double GMSH_CutSpherePlugin::callbackX(int num, int action, double value) { return callback(num, action, value, &CutSphereOptions_Number[0].def, - CTX::instance()->lc / 100., - 2 * CTX::instance()->lc, + CTX::instance()->lc / 100., - 2 * CTX::instance()->lc, 2 * CTX::instance()->lc); } @@ -79,7 +79,7 @@ double GMSH_CutSpherePlugin::callbackY(int num, int action, double value) double GMSH_CutSpherePlugin::callbackZ(int num, int action, double value) { return callback(num, action, value, &CutSphereOptions_Number[2].def, - CTX::instance()->lc / 100., -2 * CTX::instance()->lc, + CTX::instance()->lc / 100., -2 * CTX::instance()->lc, 2 * CTX::instance()->lc); } diff --git a/Plugin/Plugin.h b/Plugin/Plugin.h index a42346f744557851c0e524c8715314d7ba6b304b..befcb65c15bd31a223ebb894add4c3afcd90fafd 100644 --- a/Plugin/Plugin.h +++ b/Plugin/Plugin.h @@ -28,10 +28,10 @@ class GMSH_Plugin public : // 4 kinds of plugins typedef enum { - GMSH_CAD_PLUGIN, - GMSH_MESH_PLUGIN, - GMSH_POST_PLUGIN, - GMSH_SOLVER_PLUGIN + GMSH_CAD_PLUGIN, + GMSH_MESH_PLUGIN, + GMSH_POST_PLUGIN, + GMSH_SOLVER_PLUGIN } GMSH_PLUGIN_TYPE; // a dialog box for the user interface @@ -118,7 +118,7 @@ class GMSH_SolverPlugin : public GMSH_Plugin virtual void receiveNewPhysicalGroup(int dim, int id) = 0; // load the solver input file related to the gmsh geo file virtual void readSolverFile(const char *) = 0; - // save the solver file + // save the solver file virtual void writeSolverFile(const char *) const = 0; // enhance graphics for a giver geo point virtual bool GL_enhancePoint(Vertex *v) { return false; } diff --git a/README.txt b/README.txt index ced68721aa6f19951afddd8b0ab75d05da86b7da..e063fc5e9b10d32866f8159bf7c91504a6e20278 100644 --- a/README.txt +++ b/README.txt @@ -12,7 +12,9 @@ http://gmsh.info for additional examples. Building Gmsh from its source code requires a C++ compiler and CMake (http://cmake.org). Building the graphical user interface requires FLTK 1.3.2 or -higher (http://fltk.org), configured with OpenGL support. +higher (http://fltk.org), configured with OpenGL support. Support for +constructive solid geometry requires OpenCASCADE 6.9 or higher (version 7.1 is +highly recommended; http://www.opencascade.com). Build Gmsh from the command line @@ -64,17 +66,17 @@ Build Gmsh from the command line make make install - and minimal static and dynamic libraries in a "lib" subdirectory with + and configure a fairly minimal static library (with only the geometry and + post-processing modules and the parser) in a "lib" subdirectory with cd lib - cmake -DDEFAULT=0 -DENABLE_BUILD_LIB=1 -DENABLE_BUILD_SHARED=1 .. + cmake -DDEFAULT=0 -DENABLE_BUILD_LIB=1 -DENABLE_POST=1 -DENABLE_PARSER=1 .. make lib - make shared make install/fast - (Note that "make install/fast" allows you to install only the targets that you - just built--i.e. "lib" and "shared", and will not trigger the recompilation of - the default target "gmsh".) + (Note that "make install/fast" allows you to install only the target that you + just built, i.e. "lib", and will not trigger the recompilation of the default + target "gmsh".) * To see a detailed compilation log use diff --git a/benchmarks/2d/raccord.geo b/benchmarks/2d/raccord.geo index 0951467d390a38cd68117d6a637e26467f0dadd5..0531a9fcd576aa86421b49cd6a47fc70967e3f68 100644 --- a/benchmarks/2d/raccord.geo +++ b/benchmarks/2d/raccord.geo @@ -1,4 +1,4 @@ -Include "raccord.phy"; +//Include "raccord.phy"; r1 = 30.; h1 = 100.; h2 = 150.; al0 = 30.; al1 = al0 / 180. * 3.1415; dd1 = 3.; diff --git a/contrib/MathEx/mathex.cpp b/contrib/MathEx/mathex.cpp index 62fdad5a4505c6c64858c2a756a716c0ad5aa8ec..943c9907830dab5045bbb0cf70934d7435f2c302 100644 --- a/contrib/MathEx/mathex.cpp +++ b/contrib/MathEx/mathex.cpp @@ -51,24 +51,24 @@ namespace smlib { using namespace std; - - + + //////////////////////////////////// // local variables, functions, etc //////////////////////////////////// namespace { - + ////////////////////////////////// // C function with one parameter //-------------------------------- - + double fac(double x) // Function return the factorial of integer belong to range 0..170. // in future, will implement aproximation for gamma function to evaluate for x > 170 { double p; unsigned n; - + if((x <0) || (x>170)) // maximum admited where throw mathex::error("Error [fac()]: range error"); else { @@ -82,52 +82,52 @@ return p; } } // fac() - + // convert radian to degree double deg(double x) { return( x * 180.0 / M_PI); } // deg() - + // convert degree to radian double rad(double x) { return(x * M_PI / 180.0); } // rad() - + // return square /* double sqr(double x) { return (x*x); } */ // sqr() - + // return real part double trunc(double x) { return static_cast<long>(x); } // trunc() - + // return rounded value to int double round(double x) { return static_cast<long>(x+0.5); } // round - + // return 0 if x negative, 1 otherwise double step(double x) { if ( x < 0 ) return static_cast<long>(0.); return static_cast<long>(1.); } // step - + // return -1 if x negative, 1 otherwise double sign(double x) { if ( x < 0 ) return static_cast<long>(-1.); return static_cast<long>(1.); } // sign - + ////////////////////////////////////////////////////////// // arithmetic operators ////////////////////////////////////////////////////////// @@ -147,34 +147,34 @@ // "^" -> binary_power // "%" -> fmod (defined in math.h) /////////////////////////////////////////////////////////// - + ////////////////////// // C unary operator - + double unary_minus(double x) { return -x; } // unary_minus() - + ////////////////////////////////////////// // C binary operators //---------------------------------------- - + double binary_plus(double x, double y) { return x + y; - } // binary_plus() - + } // binary_plus() + double binary_minus(double x, double y) { return x - y; } // binary_minus() - + double binary_times(double x, double y) { return x * y; } // binary_timess() - + double binary_divide(double x, double y) // in future, put more precisery checking, for overflow ? { @@ -183,16 +183,16 @@ else return (x/y); } // binary_divide() - + double binary_power(double x, double y) { return pow(x,y); } // binary_power() - + ///////////////////////////////////////// // pre-defined user defined functions //--------------------------------------- - + double p_rand(vector <double> const &x) // rand() return value between [0,1) { @@ -200,53 +200,53 @@ throw mathex::error("Error [p_rand()]: can not use argument"); return rand()/(RAND_MAX+1.0); } // p_rand() - + // maximum double p_max(vector <double> const & x) { - + double maxval=0; - + if(x.size() == 0) throw mathex::error("Error [p_max()]: No arguments"); maxval = x[0]; for(unsigned i=0; i<x.size(); i++) if(x[i] > maxval) maxval = x[i]; - + return maxval; } // p_max - + // minimum double p_min(vector <double> const & x) { - + double minval=0; - + if(x.size() == 0) throw mathex::error("Error [p_min()]: No arguments"); minval = x[0]; for(unsigned i=0; i<x.size(); i++) if(x[i] < minval) minval = x[i]; - + return minval; } // p_min - + // sum double p_sum(vector <double> const & x) { - + double sumval=0; - + if(x.size() == 0) throw mathex::error("Error [p_sum()]: No arguments"); for(unsigned i=0; i<x.size(); i++) sumval += x[i]; - + return sumval; } // p_sum - + // average double p_med(vector <double> const & x) { @@ -254,28 +254,28 @@ throw mathex::error("Error [p_med()]: No arguments"); return p_sum(x)/x.size(); } // p_med() - + //////////////////////////////// // function/constant tables //////////////////////////////// - + ////////////////////////////////// // One parameter C function table - + // Record for one parameter C functions - typedef + typedef struct { const char *name; double (*f)(double x); // one parameter function } CFUNCREC; - - /////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////// // One parameter internal C defined functions // the unary operator are stored on first part of table //--------------------------------------------------------- // CAUTION: - // if add unary operator, adjust the definiftion of NUM_UNARY_OP + // if add unary operator, adjust the definiftion of NUM_UNARY_OP #define NUM_UNARY_OP 1 CFUNCREC cfunctable[] = { @@ -308,7 +308,7 @@ { "log10", log10 }, { "Log10", log10 }, // { "pow10", pow10 } // in future, add it? - { "rad", rad }, // added + { "rad", rad }, // added { "Rad", rad }, { "round", round }, // added { "Round", round }, @@ -337,20 +337,20 @@ { "Floor", floor }, { "ceil", ceil }, // smallest integer not less than x { "Ceil", ceil }, - + { 0, 0 } // 0 mark the end of table }; - + ///////////////////// // binary operators - + // binary operator's record class BINOPREC { public: char name; double (*f)(double, double); }; - + //////////////////// // binary operators BINOPREC binoptable[] = @@ -362,43 +362,44 @@ { '/', binary_divide}, { '^', binary_power}, { '%', fmod}, - + { '\0' , 0 } // '\0' mark the end of table }; - + ////////////// // constants - + // constants record class CONSTREC { public: const char *name; double value; }; - + ///////////// // constants CONSTREC consttable[] = { // name, value + { "Pi", M_PI }, { "pi", M_PI }, { "e", M_E }, - + { NULL, 0 } // NULL mark the end of table }; - + } // namespace { - - + + //////////////////////////// // implementations /////////////////////////// - + /////////////// // constatnts /// undefined number of arguments (for user defined functions - const int mathex::UNDEFARGS = -1; // for user function arguments - + const int mathex::UNDEFARGS = -1; // for user function arguments + //////////////// // methods void mathex::addstdfunc() @@ -414,7 +415,7 @@ addfunc("med", p_med, UNDEFARGS); addfunc("Med", p_med, UNDEFARGS); } // addstdfunc() - + void mathex::reset() { delvar(); @@ -423,17 +424,17 @@ expr = ""; bytecode.clear(); pos = 0; - addstdfunc(); + addstdfunc(); } // reset - + ///////////////////////////////// // varibles table manipulations - + bool mathex::addvar(string const &name, double *var) // register the program internal variable { unsigned i; - + for(i=0; (i<vartable.size()) && (vartable[i].name != name);i++); if(i<vartable.size()) { // found! overwrite vartable[i].var = var; @@ -444,12 +445,12 @@ vartable.push_back(VARREC(name, var)); return true; } // addvar() - + bool mathex::delvar(string const &name) // delete one variable { unsigned i; - + for(i=0; (i<vartable.size()) && (vartable[i].name != name);i++); if(i < vartable.size()) { // how to use erase? @@ -463,16 +464,16 @@ else return false; } // delvar() - + ////////////////////////////////////////////// // user defined function table manipulation ////////////////////////////////////////////// - + bool mathex::addfunc(string const &name, double (*f)(vector<double> const &), int NumArgs) // register the user defined function { unsigned i; - + for(i=0; (i<functable.size()) && (functable[i].name != name);i++); if(i<functable.size()) { // found! overwrite functable[i].f = f; @@ -484,12 +485,12 @@ functable.push_back(FUNCREC(name, f, NumArgs)); return true; } // addfunc() - + bool mathex::delfunc(string const &name) // delete the user defined function { unsigned i; - + for(i=0; (i<functable.size()) && (functable[i].name != name);i++); if(i < functable.size()) { // how to use erase? @@ -502,14 +503,14 @@ else return false; } // delfunc() - + //////////////////////////////////////////////////// // get the index of variables/constants/functions/ // binary operator/user defined functions //-------------------------------------------------- // return -1 if not found //////////////////////////////////////////////////// - + int mathex::getconst(string const &name) // get index of const // return -1 if not found @@ -522,14 +523,14 @@ else return -1; } // getconst - - + + int mathex::getvar(string const &name) // get index of variable // return -1 if not found { unsigned i; - + // look up the table for(i=0;(i<vartable.size()) && strcmp(name.c_str(), vartable[i].name.c_str());i++); if(i<vartable.size()) // if found @@ -537,8 +538,8 @@ else return -1; } // getvar - - + + int mathex::getcfunc(string const &name) // get index of one parameter function // return -1 if not found @@ -551,7 +552,7 @@ else return -1; } // getcfunc - + int mathex::getunaryop(string const &name) // get index of unary operator // return -1 if not found @@ -564,7 +565,7 @@ else return -1; } // getunaryop - + int mathex::getbinop(char name) // get index of one parameter function // return -1 if not found @@ -577,8 +578,8 @@ else return -1; } // getbinop - - + + int mathex::getuserfunc(string const &name) // get index of variable // return -1 if not found @@ -591,8 +592,8 @@ else return -1; } // getuserfunc - - + + bool mathex::isnewvalidname(string const &name) // Name validation. { @@ -602,26 +603,26 @@ for(unsigned j=0; j<name.size(); j++) if(!isalnum(name[j]) && (name[j] != '-')) return false; - return (getcfunc(name) < 0) && (getconst(name) < 0) + return (getcfunc(name) < 0) && (getconst(name) < 0) && (getuserfunc(name) < 0) && (getvar(name) < 0); } // isnewvalidname - - + + ////////////////// - // Evaluation - + // Evaluation + // main evaluator: internal use only - + // main evaluation function double mathex::eval() // Eval the parsed stack and return { static vector <double> x; // suppose that eval does not eval evalstack.clear(); - + if(status == notparsed) parse(); if(status == invalid) throw error("eval()", "invalid expression"); - + for(unsigned i=0; i<bytecode.size(); i++) { switch(bytecode[i].state) { @@ -646,7 +647,7 @@ evalstack[evalstack.size()-2] = binoptable[bytecode[i].idx].f (evalstack[evalstack.size()-2], evalstack.back()); evalstack.pop_back(); // delete last - break; + break; case CODETOKEN::USERFUNC: // Call the user defined functions #ifdef _DEBUG_ if(bytecode[i].numargs > evalstack.size()) @@ -657,53 +658,53 @@ for(unsigned j=0; j<static_cast<unsigned>(bytecode[i].numargs); j++) x[bytecode[i].numargs-1-j] = evalstack[evalstack.size()-1-j]; evalstack.resize(evalstack.size()-bytecode[i].numargs+1); - + evalstack.back() = functable[bytecode[i].idx].f(x); } else // Fixing bug pointed by Hugh Denman <denmanh@tcd.ie> November 06, 2003 evalstack.push_back(functable[bytecode[i].idx].f(x)); - break; + break; default: // invarid stack. It does not occur if currect parsed throw error("eval()", "invalid code token"); } } // for(i=0; ByteCode[i].state != EMPTY;i++); - + #ifdef _DEBUG_ if(evalstack.size() != 1) - throw error("eval()", "stack error"); + throw error("eval()", "stack error"); #endif return evalstack[0]; } // eval() - + ///////////////// // parser //--------------- - + ///////////////// // get the token - + // get the number token bool mathex::getnumber(double &x) { unsigned long i = pos; bool decimal; - + // is a number? if((i >= expr.size()) || !strchr("0123456789.", expr[i])) // not a number return false; - + // getting the number for(decimal=false; i<expr.size(); i++) { if(!isdigit(expr[i]) && ((expr[i] != '.') || decimal) ) break; if(expr[i] == '.') decimal = true; } - + if((i==(pos+1)) && (expr[i]=='.')) // is not a number return false; - + // if scientific notation - if((toupper(expr[i])=='E') && (i<expr.size())) { // cientific notation + if((toupper(expr[i])=='E') && (i<expr.size())) { // cientific notation // decimal = true; // turn on to detect that are double i++; // skip this if((i<expr.size()) && ((expr[i]=='+') || (expr[i]=='-')) ) { // if sign @@ -717,43 +718,43 @@ // if decimal is true, the number is double. otherwise, number is integer // for this detection, cientific notation need to enable decimal too. // The integer value are not used for this package - + x = strtod(expr.substr(pos, i-pos).c_str(), 0); pos = i; return true; } // getnumber() - + bool mathex::getidentifier(string &name) { unsigned i = pos; - + name.erase(); if((i>=expr.size()) || (!isalpha(expr[i]) && (expr[i] != '_'))) // not a identifier return false; - + // identifier for(;(i<expr.size()) &&(isalnum(expr[i]) || (expr[i] == '_')); i++); - + name = expr.substr(pos, i-pos); pos = i; // advance the input - + return true; } // getidentifier() - - + + mathex::PARSERTOKEN::type mathex::nexttoken() // Gets the next token from the expr { string identifier; - + while((pos<expr.size()) && isspace(expr[pos]) ) pos++; - + if(pos == expr.size()) { curtok.state = PARSERTOKEN::END; return curtok.state; } - + if(getnumber(curtok.value)) { curtok.state = PARSERTOKEN::VALUE; return curtok.state; @@ -797,18 +798,18 @@ case ')' : curtok.state = PARSERTOKEN::CPAREN; break; default : curtok.state = PARSERTOKEN::INVALID; - } // switch + } // switch if(curtok.state != PARSERTOKEN::INVALID) { curtok.idx = getbinop(expr[pos]); pos++; } } // else - + return curtok.state; } // nexttoken() - + //////////////////////////// - // CodeStack operations + // CodeStack operations //////////////////////////// #ifdef _DEBUG_ void mathex::printcoderec(CODETOKEN const &token) @@ -824,7 +825,7 @@ cout << "VARIABLE: " << vartable[token.idx].name << endl; break; case CODETOKEN::FUNCTION: - if(token.idx <NUM_UNARY_OP) + if(token.idx <NUM_UNARY_OP) cout << "unary operator: " << cfunctable[token.idx].name << endl; else cout << "FUNCTION: " << cfunctable[token.idx].name << endl; @@ -837,9 +838,9 @@ break; default: printf("INVALID\n"); } - + } // printcoderec() - + void mathex::printbytecode() { cout << "codesize = "<< bytecode.size() << endl; @@ -847,7 +848,7 @@ printcoderec(bytecode[i]); } #endif - + void mathex::parse() // Parse the expression { @@ -864,39 +865,39 @@ throw error("parse()", "End of expression expected"); status = parsed; } // parse() - + void mathex::parsearithmetic1(void) // level 1 arithmetic operator: binary plus/minus { - unsigned savedidx; + unsigned savedidx; parsearithmetic2(); while((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) { savedidx = curtok.idx; nexttoken(); - if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) + if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) throw error("parse()", "Invalid expression"); - parsearithmetic2(); + parsearithmetic2(); bytecode.push_back(CODETOKEN(CODETOKEN::BINOP, savedidx)); } // while } // parsearithmetic1 - - + + void mathex::parsearithmetic2(void) // level 2 arithmetic operator: multiplication, division, module { unsigned savedidx; - parsearithmetic3(); + parsearithmetic3(); while( (curtok.state == PARSERTOKEN::TIMES) || (curtok.state == PARSERTOKEN::DIVIDE) || (curtok.state == PARSERTOKEN::MODULE) ) { savedidx = curtok.idx; nexttoken(); - if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) + if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) throw error("parse()", "Invalid expression"); parsearithmetic3(); bytecode.push_back(CODETOKEN(CODETOKEN::BINOP, savedidx)); } } // parsearithmetic3 - + void mathex::parsearithmetic3(void) // level 3 arithmetic operator: power { @@ -905,43 +906,43 @@ if(curtok.state == PARSERTOKEN::POWER) { savedidx = curtok.idx; nexttoken(); - if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) + if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) throw error("parse()", "Invalid expression"); parsearithmetic4(); bytecode.push_back(CODETOKEN(CODETOKEN::BINOP, savedidx)); } } // parsearithmetic3() - + void mathex::parsearithmetic4(void) // level 4 arithmetic operator: unary plus/minus { PARSERTOKEN::type state; if(((state=curtok.state) == PARSERTOKEN::PLUS) || (state == PARSERTOKEN::MINUS)) nexttoken(); - if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) + if((curtok.state == PARSERTOKEN::PLUS) || (curtok.state == PARSERTOKEN::MINUS)) throw error("parse()", "Invalid expression"); parseatom(); - + if(state == PARSERTOKEN::MINUS) // stored index are for binary operator. Get correct index - bytecode.push_back(CODETOKEN(CODETOKEN::FUNCTION, getunaryop("-"))); + bytecode.push_back(CODETOKEN(CODETOKEN::FUNCTION, getunaryop("-"))); // unary minus are on function table } // parsearithmetic5() - + void mathex::parseatom(void) // level 6: literal numbers, variables and functions { unsigned i; - + // parentesis expression if(curtok.state == PARSERTOKEN::OPAREN) { nexttoken(); if(curtok.state == PARSERTOKEN::CPAREN) throw error("parseatom()", "No expression inside parentesis"); parsearithmetic1(); - + if(curtok.state != PARSERTOKEN::CPAREN) throw error("parseatom()", "\")\" expected"); - nexttoken(); // Added by Hugh Denman (<denmanh@tcd.ie> or hdenman@cantab.net) Oct/03/2003 + nexttoken(); // Added by Hugh Denman (<denmanh@tcd.ie> or hdenman@cantab.net) Oct/03/2003 } // Number else if(curtok.state == PARSERTOKEN::VALUE) { // numbers @@ -960,7 +961,7 @@ if(curtok.state != PARSERTOKEN::OPAREN) throw error("parseatom()", "\"(\" expected"); nexttoken(); - if(curtok.state == PARSERTOKEN::CPAREN) + if(curtok.state == PARSERTOKEN::CPAREN) throw error("parseatom()", "invalid number of arguments"); parsearithmetic1(); if(curtok.state != PARSERTOKEN::CPAREN) @@ -989,7 +990,7 @@ nexttoken(); i++; } - else + else throw error("parseatom()", "unknow error"); parsearithmetic1(); } // while @@ -998,15 +999,15 @@ } // else curtok = parserstack.back(); parserstack.pop_back(); - + if ((curtok.numargs != UNDEFARGS) && (i != static_cast<unsigned>(curtok.numargs))) // i is current number of parameters throw error("parseatom()", "invalid number of arguments"); - + // number of parameters is correct. Now, put the function - // i is number of arguments + // i is number of arguments bytecode.push_back(CODETOKEN(CODETOKEN::USERFUNC, curtok.idx, i)); - + nexttoken(); } // user defined functions // End of buffer @@ -1017,11 +1018,11 @@ throw error("parseatom()", "invalid token on expression"); // unknow error else // it not occur - throw error("parseatom()", "unknow error"); + throw error("parseatom()", "unknow error"); } // parseatom() - - - + + + } // namespace smlib { diff --git a/contrib/bamg/RNM.hpp b/contrib/bamg/RNM.hpp index 053efd1d3b50892f6988602abfa0dc839f09021d..83678edd0f7dc683cf375feb942f0eeb54be7125 100644 --- a/contrib/bamg/RNM.hpp +++ b/contrib/bamg/RNM.hpp @@ -1194,8 +1194,8 @@ class KN :public KN_<R> { public: for(long i=0,j=0;j<no;i++,j+=so) this->v[i]=vo[j]; delete [] vo;} }// mars 2010 - void destroy(){assert(this->next<0); if(this->next++ ==-1) {delete [] this->v; this->v=0;this->n=0;}}// mars 2010 - void increment() {assert(this->next<0); this->next--;} + void destroy(){ if(this->next++ ==-1) {delete [] this->v; this->v=0;this->n=0;}}// mars 2010 + void increment() { this->next--;} }; // Array with 2 indices @@ -1299,8 +1299,8 @@ class KNM: public KNM_<R>{ public: } } - void destroy(){assert(this->next<0); if(this->next++ ==-1) {delete [] this->v; this->v=0;this->n=0;}} - void increment() {assert(this->next<0); this->next--;} + void destroy(){ if(this->next++ ==-1) {delete [] this->v; this->v=0;this->n=0;}} + void increment() { this->next--;} // void destroy(){delete [] this->v;this->n=0 ;} diff --git a/contrib/gmm/gmm_domain_decomp.h b/contrib/gmm/gmm_domain_decomp.h index a2f9d520fa64180411e0e6f02dc9c69bc304c4f7..674296004a5595e3bd6a1fc3205a4b56ae31729f 100644 --- a/contrib/gmm/gmm_domain_decomp.h +++ b/contrib/gmm/gmm_domain_decomp.h @@ -66,7 +66,7 @@ namespace gmm { pmin[k] = std::min(pmin[k], pts[i][k]); pmax[k] = std::max(pmax[k], pts[i][k]); } - + std::vector<size_type> nbsub(dim), mult(dim); std::vector<int> pts1(dim), pts2(dim); size_type nbtotsub = 1; @@ -74,13 +74,13 @@ namespace gmm { nbsub[k] = size_type((pmax[k] - pmin[k]) / msize)+1; mult[k] = nbtotsub; nbtotsub *= nbsub[k]; } - + std::vector<map_type> subs(nbtotsub); // points ventilation std::vector<size_type> ns(dim), na(dim), nu(dim); for (size_type i = 0; i < nbpts; ++i) { for (int k = 0; k < dim; ++k) { - register double a = (pts[i][k] - pmin[k]) / msize; + double a = (pts[i][k] - pmin[k]) / msize; ns[k] = size_type(a) - 1; na[k] = 0; pts1[k] = int(a + overlap); pts2[k] = int(ceil(a-1.0-overlap)); } @@ -105,19 +105,19 @@ namespace gmm { size_type nbmaxinsub = 0; for (size_type i = 0; i < nbtotsub; ++i) nbmaxinsub = std::max(nbmaxinsub, subs[i].size()); - + std::fill(ns.begin(), ns.end(), size_type(0)); for (size_type i = 0; i < nbtotsub; ++i) { if (subs[i].size() > 0 && subs[i].size() < nbmaxinsub / 10) { - + for (int k = 0; k < dim; ++k) nu[k] = ns[k]; size_type nbmax = 0, imax = 0; - + for (int l = 0; l < dim; ++l) { nu[l]--; for (int m = 0; m < 2; ++m, nu[l]+=2) { bool ok = true; - for (int k = 0; k < dim && ok; ++k) + for (int k = 0; k < dim && ok; ++k) if (nu[k] >= nbsub[k]) ok = false; if (ok) { size_type ind = ns[0]; @@ -128,7 +128,7 @@ namespace gmm { } nu[l]--; } - + if (nbmax > subs[i].size()) { for (map_type::iterator it=subs[i].begin(); it!=subs[i].end(); ++it) subs[imax][it->first] = void_type(); @@ -138,7 +138,7 @@ namespace gmm { for (int k = 0; k < dim; ++k) { ns[k]++; if (ns[k] < nbsub[k]) break; ns[k] = 0; } } - + // delete empty domains. size_type effnb = 0; for (size_type i = 0; i < nbtotsub; ++i) { @@ -156,7 +156,7 @@ namespace gmm { vB[i](it->first, j) = value_type(1); } } - + } diff --git a/contrib/mobile/CMakeLists.txt b/contrib/mobile/CMakeLists.txt index 3f42cca727b892d6ead61b947b0eb42394cc160d..ad4202cfe5f4d310df931d6661094d53da425127 100644 --- a/contrib/mobile/CMakeLists.txt +++ b/contrib/mobile/CMakeLists.txt @@ -73,6 +73,14 @@ if(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS) else(SLEPC_FRAMEWORK) message(SEND_ERROR "Could not find slepc.framework") endif(SLEPC_FRAMEWORK) + # OpenCASCADE framework + find_path(OCCT_FRAMEWORK OCCT.framework) + if(OCCT_FRAMEWORK) + set(OCCT_FRAMEWORK ${OCCT_FRAMEWORK}/OCCT.framework) + message(STATUS "Found framework " ${OCCT_FRAMEWORK}) + else(OCCT_FRAMEWORK) + message(SEND_ERROR "Could not find OCCT.framework") + endif(OCCT_FRAMEWORK) # add target add_custom_target(xcodeProject COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/models/ @@ -99,6 +107,7 @@ if(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS) COMMAND ${CMAKE_COMMAND} -E create_symlink . ${GMSH_FRAMEWORK}/Headers/gmsh COMMAND ${CMAKE_COMMAND} -E copy_directory ${PETSC_FRAMEWORK}/ ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/${APPNAME}/frameworks/petsc.framework/ COMMAND ${CMAKE_COMMAND} -E copy_directory ${SLEPC_FRAMEWORK}/ ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/${APPNAME}/frameworks/slepc.framework/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${OCCT_FRAMEWORK}/ ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/${APPNAME}/frameworks/OCCT.framework/ ) add_custom_command(TARGET xcodeProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/${APPNAME}/files) @@ -191,7 +200,8 @@ if(ENABLE_BUILD_ANDROID) add_custom_target(androidProject COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/models/ - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Android/ ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Android/ ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/res/raw COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/libs/armeabi-v7a/ COMMAND ${CMAKE_COMMAND} -E copy ${GMSH_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/libs/armeabi-v7a/ COMMAND ${CMAKE_COMMAND} -E copy ${GETDP_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${APPNAME}/libs/armeabi-v7a/ diff --git a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj index e85cbc52f13226d2b32993b75dba56201786da03..7f49cd80624826658ef199692d093e0e03047618 100644 --- a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj +++ b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 2901F1211BB0086C004C328B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 2901F1201BB0086C004C328B /* libz.tbd */; }; 2907CCEC193DE6560011341A /* icon_onelab.png in Resources */ = {isa = PBXBuildFile; fileRef = 2907CCEB193DE6560011341A /* icon_onelab.png */; }; + 291191DB1E93ACF700069C0C /* OCCT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 291191DA1E93ACF700069C0C /* OCCT.framework */; }; 295056611D9AF3D200B9D9C4 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 295056601D9AF3D200B9D9C4 /* MessageUI.framework */; }; 2988FF1E18E59558001435B6 /* libf2cblas.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2988FF1C18E59558001435B6 /* libf2cblas.a */; }; 2988FF1F18E59558001435B6 /* libf2clapack.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2988FF1D18E59558001435B6 /* libf2clapack.a */; }; @@ -55,9 +56,10 @@ /* Begin PBXFileReference section */ 2901F1201BB0086C004C328B /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-tbd-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 2907CCEB193DE6560011341A /* icon_onelab.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_onelab.png; sourceTree = "<group>"; }; + 291191DA1E93ACF700069C0C /* OCCT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OCCT.framework; path = Onelab/frameworks/OCCT.framework; sourceTree = "<group>"; }; 295056601D9AF3D200B9D9C4 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; - 2988FF1C18E59558001435B6 /* libf2cblas.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libf2cblas.a; path = ../../frameworks_ios/libf2cblas.a; sourceTree = "<group>"; }; - 2988FF1D18E59558001435B6 /* libf2clapack.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libf2clapack.a; path = ../../frameworks_ios/libf2clapack.a; sourceTree = "<group>"; }; + 2988FF1C18E59558001435B6 /* libf2cblas.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libf2cblas.a; path = Onelab/frameworks/petsc.framework/libf2cblas.a; sourceTree = "<group>"; }; + 2988FF1D18E59558001435B6 /* libf2clapack.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libf2clapack.a; path = Onelab/frameworks/petsc.framework/libf2clapack.a; sourceTree = "<group>"; }; 29A4AC7F193CE6DA0007B5A5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; }; 9C1B9911194F4E0400507EFD /* slepc.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = slepc.framework; path = Onelab/frameworks/slepc.framework; sourceTree = "<group>"; }; 9C1C10F817BA5E7D00BFD483 /* OptionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsViewController.h; sourceTree = "<group>"; }; @@ -139,6 +141,7 @@ 9CE08E11178AEB1600A83B4B /* Gmsh.framework in Frameworks */, 9CE08E12178AEB1600A83B4B /* petsc.framework in Frameworks */, 9C1B9912194F4E0400507EFD /* slepc.framework in Frameworks */, + 291191DB1E93ACF700069C0C /* OCCT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -175,6 +178,7 @@ 9C9608391712C16300E1D4A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 291191DA1E93ACF700069C0C /* OCCT.framework */, 295056601D9AF3D200B9D9C4 /* MessageUI.framework */, 2901F1201BB0086C004C328B /* libz.tbd */, 9C1B9911194F4E0400507EFD /* slepc.framework */, diff --git a/contrib/mobile/iOS/Onelab/Onelab-Info.plist b/contrib/mobile/iOS/Onelab/Onelab-Info.plist index acdd4e90bc0ea30cb3d138919495419eaedb6b83..ea8967b94f0bf9801a33f8dccdecdcf2ad6ef14c 100644 --- a/contrib/mobile/iOS/Onelab/Onelab-Info.plist +++ b/contrib/mobile/iOS/Onelab/Onelab-Info.plist @@ -35,11 +35,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.6.0</string> + <string>2.0.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>1.6.0.0</string> + <string>2.0.0.0</string> <key>LSRequiresIPhoneOS</key> <true/> <key>UIFileSharingEnabled</key> diff --git a/contrib/mobile/utils/android_build.sh b/contrib/mobile/utils/android_build.sh index 755df82db1af44e4359ff250fec63a205f276f20..076f27712160afab59b35cb3e7d8cc7066a669c3 100755 --- a/contrib/mobile/utils/android_build.sh +++ b/contrib/mobile/utils/android_build.sh @@ -6,15 +6,15 @@ if [ $# -eq 1 ] ; then echo "Rebranding Onelab app as ${appname}" fi -gmsh_svn="${HOME}/src/gmsh" -getdp_svn="${HOME}/src/getdp" +gmsh_git="${HOME}/src/gmsh" +getdp_git="${HOME}/src/getdp" frameworks_dir="${HOME}/src/gmsh/contrib/mobile/frameworks_android" -if [ -f ${getdp_svn}/benchmarks/cleanup.sh ]; then - cd ${getdp_svn}/benchmarks && ./cleanup.sh +if [ -f ${getdp_git}/benchmarks/cleanup.sh ]; then + cd ${getdp_git}/benchmarks && ./cleanup.sh fi -if [ -f ${getdp_svn}/benchmarks_private/cleanup.sh ]; then - cd ${getdp_svn}/benchmarks_private && ./cleanup.sh +if [ -f ${getdp_git}/benchmarks_private/cleanup.sh ]; then + cd ${getdp_git}/benchmarks_private && ./cleanup.sh fi petsc_lib="$frameworks_dir/petsc" @@ -34,12 +34,12 @@ function check { } # Gmsh -cd $gmsh_svn -svn up -if [ ! -d "$gmsh_svn/build_android" ] || [ ! -f "$gmsh_svn/build_android/CMakeCache.txt" ]; then - mkdir $gmsh_svn/build_android +cd $gmsh_git +git pull +if [ ! -d "$gmsh_git/build_android" ] || [ ! -f "$gmsh_git/build_android/CMakeCache.txt" ]; then + mkdir $gmsh_git/build_android fi -cd $gmsh_svn/build_android +cd $gmsh_git/build_android cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_PLUGINS=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DENABLE_KBIPACK=1 -DENABLE_GMP=0 -DENABLE_ZIPPER=1 -DBLAS_LAPACK_LIBRARIES="$petsc_lib/libf2cblas.so;$petsc_lib/libf2clapack.so" .. check make androidGmsh -j$cmake_thread @@ -48,13 +48,13 @@ make get_headers check # GetDP -cd $getdp_svn -svn up -if [ ! -d "$getdp_svn/build_android" ] || [ ! -f "$getdp_svn/build_android/CMakeCache.txt" ]; then - mkdir $getdp_svn/build_android +cd $getdp_git +git pull +if [ ! -d "$getdp_git/build_android" ] || [ ! -f "$getdp_git/build_android/CMakeCache.txt" ]; then + mkdir $getdp_git/build_android fi -cd $getdp_svn/build_android -PETSC_DIR= PETSC_ARCH= SLEPC_DIR= cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_GMSH=1 -DENABLE_KERNEL=1 -DENABLE_PETSC=1 -DPETSC_INC="$petsc_lib/Headers;$petsc_lib/Headers/mpiuni" -DPETSC_LIBS="$petsc_lib/libpetsc.so" -DENABLE_SLEPC=1 -DSLEPC_INC="$slepc_lib/Headers/" -DSLEPC_LIB="$slepc_lib/libslepc.so" -DGMSH_INC="$gmsh_svn/build_android/Headers/" -DGMSH_LIB="$gmsh_svn/build_android/libs/libGmsh.so" -DBLAS_LAPACK_LIBRARIES="$petsc_lib/libf2cblas.so;$petsc_lib/libf2clapack.so" .. +cd $getdp_git/build_android +PETSC_DIR= PETSC_ARCH= SLEPC_DIR= cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_GMSH=1 -DENABLE_KERNEL=1 -DENABLE_PETSC=1 -DPETSC_INC="$petsc_lib/Headers;$petsc_lib/Headers/mpiuni" -DPETSC_LIBS="$petsc_lib/libpetsc.so" -DENABLE_SLEPC=1 -DSLEPC_INC="$slepc_lib/Headers/" -DSLEPC_LIB="$slepc_lib/libslepc.so" -DGMSH_INC="$gmsh_git/build_android/Headers/" -DGMSH_LIB="$gmsh_git/build_android/libs/libGmsh.so" -DBLAS_LAPACK_LIBRARIES="$petsc_lib/libf2cblas.so;$petsc_lib/libf2clapack.so" .. check make androidGetdp -j$cmake_thread check @@ -62,18 +62,18 @@ make get_headers check # Onelab/Mobile interface -if [ ! -d "$gmsh_svn/contrib/mobile/build_android_${appname}" ]; then - mkdir $gmsh_svn/contrib/mobile/build_android_${appname} +if [ ! -d "$gmsh_git/contrib/mobile/build_android_${appname}" ]; then + mkdir $gmsh_git/contrib/mobile/build_android_${appname} fi -cd $gmsh_svn/contrib/mobile/build_android_${appname} +cd $gmsh_git/contrib/mobile/build_android_${appname} cmake $cmake_default -DAPPNAME:STRING=${appname} \ - -DCMAKE_INCLUDE_PATH="$getdp_svn/" \ + -DCMAKE_INCLUDE_PATH="$getdp_git/" \ -DBLAS_LIB="$petsc_lib/libf2cblas.so" -DLAPACK_LIB="$petsc_lib/libf2clapack.so" \ -DPETSC_LIB="$petsc_lib/libpetsc.so" -DSLEPC_LIB="$slepc_lib/libslepc.so" \ - -DGMSH_INC="$gmsh_svn/build_android/Headers" -DGMSH_LIB="$gmsh_svn/build_android/libs/libGmsh.so" \ - -DBENCHMARKSDIR="$getdp_svn/" \ - -DGETDP_INC="$getdp_svn/build_android/Headers" -DGETDP_LIB="$getdp_svn/build_android/libs/libGetDP.so" .. + -DGMSH_INC="$gmsh_git/build_android/Headers" -DGMSH_LIB="$gmsh_git/build_android/libs/libGmsh.so" \ + -DBENCHMARKSDIR="$getdp_git/" \ + -DGETDP_INC="$getdp_git/build_android/Headers" -DGETDP_LIB="$getdp_git/build_android/libs/libGetDP.so" .. check make androidOnelab -j$cmake_thread check @@ -109,7 +109,7 @@ fi check if [ ! -f "ant.properties" ]; then - cp $gmsh_svn/contrib/mobile/utils/ant.properties . + cp $gmsh_git/contrib/mobile/utils/ant.properties . fi ant release check diff --git a/contrib/mobile/utils/ios_build.sh b/contrib/mobile/utils/ios_build.sh index 105ef50f0f94e1fe25a4fcc914d5bbdaa38c808f..ace8a24acf1c51a7c4703f53ebf811026e9f48bf 100755 --- a/contrib/mobile/utils/ios_build.sh +++ b/contrib/mobile/utils/ios_build.sh @@ -6,23 +6,24 @@ if [ $# -eq 1 ] ; then echo "Rebranding Onelab app as ${appname}" fi -if [ -f ${getdp_svn}/benchmarks/cleanup.sh ]; then - cd ${getdp_svn}/benchmarks && ./cleanup.sh +gmsh_git="${HOME}/src/gmsh/" +getdp_git="${HOME}/src/getdp/" +frameworks_dir="${HOME}/src/gmsh/contrib/mobile/frameworks_ios/" + +if [ -f ${getdp_git}/benchmarks/cleanup.sh ]; then + cd ${getdp_git}/benchmarks && ./cleanup.sh fi -if [ -f ${getdp_svn}/benchmarks_private/cleanup.sh ]; then - cd ${getdp_svn}/benchmarks_private && ./cleanup.sh +if [ -f ${getdp_git}/benchmarks_private/cleanup.sh ]; then + cd ${getdp_git}/benchmarks_private && ./cleanup.sh fi -gmsh_svn="${HOME}/src/gmsh/" -getdp_svn="${HOME}/src/getdp/" -frameworks_dir="${HOME}/src/gmsh/contrib/mobile/frameworks_ios/" - petsc_framework="$frameworks_dir/petsc.framework" slepc_framework="$frameworks_dir/slepc.framework" gmsh_framework="$frameworks_dir/Gmsh.framework" getdp_framework="$frameworks_dir/GetDP.framework" +occt_framework="$frameworks_dir/OCCT.framework" -cmake_default="-DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$gmsh_svn/contrib/mobile/utils/iOS.cmake -DIOS_PLATFORM=OS -DENABLE_BUILD_IOS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64 -GXcode" +cmake_default="-DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$gmsh_git/contrib/mobile/utils/iOS.cmake -DIOS_PLATFORM=OS -DENABLE_BUILD_IOS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64 -GXcode" build_cmd="xcodebuild -target lib -configuration Release" headers_cmd="xcodebuild -target get_headers -configuration Release" @@ -36,38 +37,38 @@ function check { } # build gmsh framework -cd $gmsh_svn && svn up -mkdir -p $gmsh_svn/build_ios -cd $gmsh_svn/build_ios -cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_PLUGINS=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DENABLE_KBIPACK=1 -DENABLE_GMP=0 -DENABLE_ZIPPER=1 .. +cd $gmsh_git && git pull +mkdir -p $gmsh_git/build_ios +cd $gmsh_git/build_ios +cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_PLUGINS=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DENABLE_KBIPACK=1 -DENABLE_GMP=0 -DENABLE_ZIPPER=1 -DENABLE_OCC=1 -DOCC_LIBS="$occt_framework/OCCT" -DOCC_INC="$occt_framework/Headers/" .. check -$build_cmd OTHER_CFLAGS="-miphoneos-version-min=8.0 -fembed-bitcode" OTHER_CPLUSPLUSFLAGS="-miphoneos-version-min=8.0 -fembed-bitcode" +$build_cmd OTHER_CFLAGS="-miphoneos-version-min=8.0 -fembed-bitcode" OTHER_CPLUSPLUSFLAGS="-miphoneos-version-min=8.0 -fembed-bitcode -std=c++11" check $headers_cmd mkdir -p $gmsh_framework/Headers -cp $gmsh_svn/build_ios/Release-iphoneos/libGmsh.a $gmsh_framework/Gmsh +cp $gmsh_git/build_ios/Release-iphoneos/libGmsh.a $gmsh_framework/Gmsh cd $gmsh_framework/Headers -cp $gmsh_svn/build_ios/Headers/gmsh/* . +cp $gmsh_git/build_ios/Headers/gmsh/* . ln -s . gmsh # build getdp framework -cd $getdp_svn && svn up -mkdir -p $getdp_svn/build_ios -cd $getdp_svn/build_ios +cd $getdp_git && git pull +mkdir -p $getdp_git/build_ios +cd $getdp_git/build_ios PETSC_DIR= PETSC_ARCH= SLEPC_DIR= cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_GMSH=1 -DENABLE_KERNEL=1 -DENABLE_PETSC=1 -DPETSC_INC="$petsc_framework/Headers/" -DPETSC_LIBS="$petsc_framework/petsc" -DENABLE_SLEPC=1 -DSLEPC_INC="$slepc_framework/Headers/" -DSLEPC_LIB="$slepc_framework/slepc" -DGMSH_INC="$gmsh_framework/Headers/" -DGMSH_LIB="$gmsh_framework/Gmsh" .. check $build_cmd OTHER_CFLAGS="-miphoneos-version-min=8.0 -fembed-bitcode" OTHER_CPLUSPLUSFLAGS="-miphoneos-version-min=8.0 -fembed-bitcode" check $headers_cmd mkdir -p $getdp_framework/Headers -cp $getdp_svn/build_ios/Release-iphoneos/libGetDP.a $getdp_framework/GetDP +cp $getdp_git/build_ios/Release-iphoneos/libGetDP.a $getdp_framework/GetDP cd $getdp_framework/Headers -cp $getdp_svn/build_ios/Headers/getdp/* . +cp $getdp_git/build_ios/Headers/getdp/* . # create xcode project -mkdir $gmsh_svn/contrib/mobile/build_ios_${appname} -cd $gmsh_svn/contrib/mobile/build_ios_${appname} -cmake -DCMAKE_INCLUDE_PATH="$frameworks_dir;$getdp_svn" -DAPPNAME:STRING=${appname} .. +mkdir $gmsh_git/contrib/mobile/build_ios_${appname} +cd $gmsh_git/contrib/mobile/build_ios_${appname} +cmake -DCMAKE_INCLUDE_PATH="$frameworks_dir;$getdp_git" -DAPPNAME:STRING=${appname} .. make xcodeProject #TODO diff --git a/contrib/mobile/utils/iossimulator_build.sh b/contrib/mobile/utils/iossimulator_build.sh index ceee30f3db46cd3823eaf13ff9b1111c1da5a3d4..10c218b51d6188e48c59801bf0ee5efff2187b62 100755 --- a/contrib/mobile/utils/iossimulator_build.sh +++ b/contrib/mobile/utils/iossimulator_build.sh @@ -6,23 +6,24 @@ if [ $# -eq 1 ] ; then echo "Rebranding Onelab app as ${appname}" fi -gmsh_svn="${HOME}/src/gmsh/" -getdp_svn="${HOME}/src/getdp/" +gmsh_git="${HOME}/src/gmsh/" +getdp_git="${HOME}/src/getdp/" frameworks_dir="${HOME}/src/gmsh/contrib/mobile/frameworks_iossimulator/" -if [ -f ${getdp_svn}/benchmarks/cleanup.sh ]; then - cd ${getdp_svn}/benchmarks && ./cleanup.sh +if [ -f ${getdp_git}/benchmarks/cleanup.sh ]; then + cd ${getdp_git}/benchmarks && ./cleanup.sh fi -if [ -f ${getdp_svn}/benchmarks_private/cleanup.sh ]; then - cd ${getdp_svn}/benchmarks_private && ./cleanup.sh +if [ -f ${getdp_git}/benchmarks_private/cleanup.sh ]; then + cd ${getdp_git}/benchmarks_private && ./cleanup.sh fi petsc_framework="$frameworks_dir/petsc.framework" slepc_framework="$frameworks_dir/slepc.framework" gmsh_framework="$frameworks_dir/Gmsh.framework" getdp_framework="$frameworks_dir/GetDP.framework" +occt_framework="$frameworks_dir/OCCT.framework" -cmake_default="-DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$gmsh_svn/contrib/mobile/utils/iOS.cmake -DIOS_PLATFORM=SIMULATOR -DENABLE_BUILD_IOS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=i386;x86_64 -GXcode" +cmake_default="-DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$gmsh_git/contrib/mobile/utils/iOS.cmake -DIOS_PLATFORM=SIMULATOR -DENABLE_BUILD_IOS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=i386;x86_64 -GXcode" build_cmd="xcodebuild -target lib -configuration Release" headers_cmd="xcodebuild -target get_headers -configuration Release" @@ -36,40 +37,40 @@ function check { } # build gmsh framework -cd $gmsh_svn && svn up -mkdir -p $gmsh_svn/build_iossimulator -cd $gmsh_svn/build_iossimulator -cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_PLUGINS=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DENABLE_KBIPACK=1 -DENABLE_GMP=0 -DENABLE_ZIPPER=1 .. +cd $gmsh_git && git pull +mkdir -p $gmsh_git/build_iossimulator +cd $gmsh_git/build_iossimulator +cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_PLUGINS=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DENABLE_KBIPACK=1 -DENABLE_GMP=0 -DENABLE_ZIPPER=1 -DENABLE_OCC=1 -DOCC_LIBS="$occt_framework/OCCT" -DOCC_INC="$occt_framework/Headers/" .. check -$build_cmd OTHER_CFLAGS="-mios-simulator-version-min=8.0" OTHER_CPLUSPLUSFLAGS="-mios-simulator-version-min=8.0" +$build_cmd OTHER_CFLAGS="-mios-simulator-version-min=8.0" OTHER_CPLUSPLUSFLAGS="-mios-simulator-version-min=8.0 -std=c++11" check $headers_cmd mkdir -p $gmsh_framework/Headers -cp $gmsh_svn/build_iossimulator/Release-iphonesimulator/libGmsh.a $gmsh_framework/Gmsh +cp $gmsh_git/build_iossimulator/Release-iphonesimulator/libGmsh.a $gmsh_framework/Gmsh cd $gmsh_framework/Headers -cp $gmsh_svn/build_iossimulator/Headers/gmsh/* . +cp $gmsh_git/build_iossimulator/Headers/gmsh/* . ln -s . gmsh # build getdp framework -cd $getdp_svn && svn up -mkdir -p $getdp_svn/build_iossimulator -cd $getdp_svn/build_iossimulator +cd $getdp_git && git pull +mkdir -p $getdp_git/build_iossimulator +cd $getdp_git/build_iossimulator PETSC_DIR= PETSC_ARCH= SLEPC_DIR= cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_GMSH=1 -DENABLE_KERNEL=1 -DENABLE_PETSC=1 -DPETSC_INC="$petsc_framework/Headers/" -DPETSC_LIBS="$petsc_framework/petsc" -DENABLE_SLEPC=1 -DSLEPC_INC="$slepc_framework/Headers/" -DSLEPC_LIB="$slepc_framework/slepc" -DGMSH_INC="$gmsh_framework/Headers/" -DGMSH_LIB="$gmsh_framework/Gmsh" .. check $build_cmd OTHER_CFLAGS="-mios-simulator-version-min=8.0" OTHER_CPLUSPLUSFLAGS="-mios-simulator-version-min=8.0" check $headers_cmd mkdir -p $getdp_framework/Headers -cp $getdp_svn/build_iossimulator/Release-iphonesimulator/libGetDP.a $getdp_framework/GetDP +cp $getdp_git/build_iossimulator/Release-iphonesimulator/libGetDP.a $getdp_framework/GetDP cd $getdp_framework/Headers -cp $getdp_svn/build_iossimulator/Headers/getdp/* . +cp $getdp_git/build_iossimulator/Headers/getdp/* . # create xcode project -mkdir $gmsh_svn/contrib/mobile/build_iossimulator_${appname} -cd $gmsh_svn/contrib/mobile/build_iossimulator_${appname} -cmake -DCMAKE_INCLUDE_PATH="$frameworks_dir;$getdp_svn" -DAPPNAME:STRING=${appname} .. +mkdir $gmsh_git/contrib/mobile/build_iossimulator_${appname} +cd $gmsh_git/contrib/mobile/build_iossimulator_${appname} +cmake -DCMAKE_INCLUDE_PATH="$frameworks_dir;$getdp_git" -DAPPNAME:STRING=${appname} .. make xcodeProject # change blas/lapack for simulator -sed -e "s|lastKnownFileType = archive.ar; name = libf2cblas.a; path = ../../frameworks_ios/libf2cblas.a;|lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework;|" -i "" $gmsh_svn/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj -sed -e "s|lastKnownFileType = archive.ar; name = libf2clapack.a; path = ../../frameworks_ios/libf2clapack.a;|lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework;|" -i "" $gmsh_svn/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj +sed -e "s|lastKnownFileType = archive.ar; name = libf2cblas.a; path = Onelab/frameworks/petsc.framework/libf2cblas.a;|lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework;|" -i "" $gmsh_git/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj +sed -e "s|lastKnownFileType = archive.ar; name = libf2clapack.a; path = Onelab/frameworks/petsc.framework/libf2clapack.a;|lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework;|" -i "" $gmsh_git/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj diff --git a/demos/boolean/compsolid2.geo b/demos/boolean/compsolid2.geo index 9f74cd40bc0d339fc06d63dee35bf922917152e4..88ef4c23ffbecc865d483c687e823dba375d2ab0 100644 --- a/demos/boolean/compsolid2.geo +++ b/demos/boolean/compsolid2.geo @@ -16,7 +16,8 @@ Sphere(2) = {xx, 1, 1, rr}; Block(3) = {2,0,0, 2,2,2}; f() = BooleanFragments { Volume{1}; Delete; }{ Volume{2,3}; Delete; }; - +Printf("f()", f()); If(sph) - BooleanUnion { Volume{f[1]}; Delete; }{ Volume{f[{2:#f()-2}]}; Delete; } + //BooleanUnion { Volume{f(1)}; Delete; }{ Volume{f(2)}; Delete; } + BooleanUnion { Volume{2}; Delete; }{ Volume{3}; Delete; } EndIf diff --git a/demos/boolean/extrude.geo b/demos/boolean/extrude.geo index c2e03e6a78ae1ae8212acbfaafdb8c7662c96bc4..6125257c8e4676a3011424b5c23c35156916dc3d 100644 --- a/demos/boolean/extrude.geo +++ b/demos/boolean/extrude.geo @@ -39,5 +39,6 @@ If(order == 0) BooleanFragments{ Volume{1}; Delete; }{ Volume{2:3}; Delete; } Else BooleanFragments{ Surface{1}; Delete; }{ Surface{2:3}; Delete; } - Extrude{0,0,0.3}{ Surface{1:5}; } + a() = Extrude{0,0,0.3}{ Surface{1:5}; }; + Printf("returned entities (top, body, laterals, etc.) = ", a()); EndIf diff --git a/demos/boolean/fillet.geo b/demos/boolean/fillet.geo index 9daa1a956c14570bd2c33fe93b1efb1bb753ea43..c2eed50f229ad4ae021a9c25f47c9f8040bf0032 100644 --- a/demos/boolean/fillet.geo +++ b/demos/boolean/fillet.geo @@ -8,9 +8,3 @@ f() = Abs(Boundary{ Volume{1}; }); e() = Unique(Abs(Boundary{ Surface{f()}; })); Fillet{1}{e()}{0.2} - -tmp2() = Fillet{1}{1,2,4}{0.05}; - -Translate{2,0,0} { Volume{tmp2(0)}; } - -Recursive Delete{ Volume{1}; } diff --git a/demos/boolean/fillet2.geo b/demos/boolean/fillet2.geo index 51c4fe22ce8c001511a736f7ed1de76a64085ce1..22701a34b0f08a8bac028f427dcc5910984197f5 100644 --- a/demos/boolean/fillet2.geo +++ b/demos/boolean/fillet2.geo @@ -9,5 +9,3 @@ f() = Abs(Boundary{ Volume{a()}; }); e() = Unique(Abs(Boundary{ Surface{f()}; })); Fillet{a()}{e()}{1} - -Recursive Delete{ Volume{a()}; } diff --git a/demos/boolean/fillet3.geo b/demos/boolean/fillet3.geo index d83202da2f00e15abc99285a3ab68611d4b9cb46..46d7fadecf2eaeb774463b0e99b4aa3592750b6d 100644 --- a/demos/boolean/fillet3.geo +++ b/demos/boolean/fillet3.geo @@ -14,7 +14,6 @@ v_ = v_out; f_[] = Abs(Boundary{ Volume{v_}; }); e_[] = Unique( Abs(Boundary{ Surface{f_[]}; }) ); v_out = Fillet{v_}{e_[2-1], e_[4-1], e_[6-1], e_[8-1]}{r_out}; -Recursive Delete{ Volume{v_}; } v_in = newv; Block(v_in) = { @@ -25,6 +24,5 @@ v_ = v_in; f_[] = Abs(Boundary{ Volume{v_}; }); e_[] = Unique( Abs(Boundary{ Surface{f_[]}; }) ); v_in = Fillet{v_}{e_[2-1], e_[4-1], e_[6-1], e_[8-1]}{r_in}; -Recursive Delete{ Volume{v_}; } BooleanDifference { Volume{v_out}; Delete; }{ Volume{v_in}; Delete; } diff --git a/demos/boolean/fragment_numbering.geo b/demos/boolean/fragment_numbering.geo new file mode 100644 index 0000000000000000000000000000000000000000..40c6f09ac990aa74f1b8f8c291899254c8d5539a --- /dev/null +++ b/demos/boolean/fragment_numbering.geo @@ -0,0 +1,29 @@ +SetFactory("OpenCASCADE"); + +Geometry.SurfaceNumbers = 1; + +DefineConstant[ + w = {0.05, Name "Width"} + N = {10, Name "Number of disks"} + R = {0.002, Name "Disk radius"} + spacing = {0, Min 0, Max R, Step R/10, Name "Disk spacing"} +]; + +Rectangle(1) = {-3*w, w, 0, 6*w, w, 0}; +Rectangle(2) = {-3*w, 0., 0, w, w, 0}; +Translate {2*w, 0, 0} { Duplicata { Surface{2}; } } +Translate {w, 0, 0} { Duplicata { Surface{3}; } } +Translate {2*w, 0, 0} { Duplicata { Surface{4}; } } + +Rectangle(6) = {-6*w, 0, 0, 12*w, 5*w, 0}; + +b() = {}; +For i In {1:N} + s = news; b() += s; Disk(s) = {-w-R-spacing, (2*R+spacing)*i, 0, R}; +EndFor + +Printf("disk tags: ", b()); + +c() = BooleanFragments{ Surface{1:6}; Delete; }{ Surface{b()}; Delete; }; + +Printf("all tags (disk tags should be unchanged!): ", c()); diff --git a/demos/boolean/merged.brep b/demos/boolean/merged.brep deleted file mode 100644 index 0bf0bd16eadb5f86c34ba8360c363d8a6daf030a..0000000000000000000000000000000000000000 --- a/demos/boolean/merged.brep +++ /dev/null @@ -1,1669 +0,0 @@ -DBRep_DrawableShape - -CASCADE Topology V1, (c) Matra-Datavision -Locations 0 -Curve2ds 124 -7 0 0 3 25 23 16 1.6899474281073523e-07 16.000015620951437 0.24241260067746095 15.988968842036543 0.73023536133225508 15.93824547983605 1.4686365319760215 15.852371381946519 2.2114293724537046 15.730623443208257 2.9561589646117037 15.572482777002758 3.7002798897616067 15.377674387562939 4.4411635635436282 15.146173192187879 5.1761309508709505 14.878214208401486 5.9024812958818069 14.574296249919492 6.6175239355909872 14.235181615910394 7.3186103969114988 13.861890913421329 8.0031665477665381 13.455693240691907 8.6687238502638184 13.018091865151849 9.3129489641576306 12.55080574707169 9.9336709517975947 12.055747381862673 10.528905406215184 11.534997545183877 11.096875010590139 10.990777651475447 11.636025855868958 10.425420354544556 12.145040146789027 9.841339573117633 12.622841744516117 9.2409991477600695 13.068607308725317 8.6268866525432664 13.481735607803945 8.2099431360571291 13.735213774906033 8.0000000002733493 13.8564064603933 - -16.755160649836501 4 -15.993562438480296 1 -15.231964227124092 1 -14.470366015767887 1 -13.708767804411682 1 -12.947169593055477 1 -12.185571381699273 1 -11.423973170343068 1 -10.662374958986863 1 -9.9007767476306583 1 -9.1391785362744535 1 -8.3775803249182506 1 -7.6159821135620458 1 -6.854383902205841 1 -6.0927856908496363 1 -5.3311874794934315 1 -4.5695892681372268 1 -3.807991056781022 1 -3.0463928454248173 1 -2.2847946340686125 1 -1.5231964227124077 1 -0.76159821135620298 1 0 4 -7 0 0 1 2 2 3.14159264302763 18.47520861406484 2.0943951024129226 18.475208614064847 - -16.755160649836501 2 0 2 -7 0 0 3 25 23 8.0000000002733493 13.8564064603933 7.7900724878143413 13.977626206704933 7.3620821971739598 14.211970800594184 6.6972463469187549 14.537243672980098 6.0110318308341695 14.834270950389417 5.3052031178105965 15.101198946282834 4.5817051617733391 15.336305582296729 3.8426768856602296 15.538038412903479 3.0904258605561101 15.705036198274861 2.3274085184040771 15.836152091596736 1.5562044485585715 15.930472746696417 0.77948844557980523 15.987334097445956 7.6766855879278081e-08 16.006332949407852 -0.77948829222832672 15.987334104922853 -1.5562042957525173 15.930472761623603 -2.3274083665027487 15.836152113921356 -3.0904257099124575 15.705036227918383 -3.8426767366184338 15.538038449762631 -4.5817050146665821 15.336305626244677 -5.3052029729589965 15.101198997170609 -6.0110316885429675 14.83427100804753 -6.6972462074766623 14.537243737220416 -7.362082060851912 14.211970871211649 -7.7900723537401415 13.977626281427696 -7.9999998673619004 13.8564065371297 - -16.755160666305098 4 -15.993562454200321 1 -15.231964242095543 1 -14.470366029990767 1 -13.70876781788599 1 -12.947169605781212 1 -12.185571393676435 1 -11.423973181571657 1 -10.662374969466882 1 -9.9007767573621024 1 -9.1391785452573266 1 -8.3775803331525491 1 -7.6159821210477716 1 -6.8543839089429941 1 -6.0927856968382184 1 -5.3311874847334408 1 -4.5695892726286633 1 -3.8079910605238858 1 -3.0463928484191083 1 -2.2847946363143325 1 -1.523196424209555 1 -0.76159821210477752 1 0 4 -7 0 0 1 2 2 2.0943951024129195 18.475208614064798 1.0471975607689219 18.475208614064776 - -16.755160666305098 2 0 2 -7 0 0 3 25 23 -7.9999998673619004 13.8564065371297 -8.2099430069779551 13.735213852115677 -8.626886531198716 13.481735685625958 -9.2409990381204832 13.068607386441494 -9.8413394751808205 12.62284182107496 -10.425420268196204 12.145040221129697 -10.990777576487007 11.636025926934124 -11.534997481211651 11.096875077341021 -12.055747328449439 10.52890546764641 -12.550805703650473 9.9336710069520535 -13.018091831052049 9.3129490121407521 -13.455693215147448 8.6687238902569224 -13.861890895581052 8.0031665790389184 -14.235181604849933 7.318610418830775 -14.574296244654796 6.6175239476316339 -14.878214207903328 5.9024812976314065 -15.146173195397086 5.1761309420342601 -15.377674393405929 4.4411635439441808 -15.572482784406827 3.700279859341062 -15.730623451116539 2.9561589234268508 -15.852371389331781 2.2114293206715487 -15.938245485713715 1.468636469866617 -15.988968845475144 0.73023528926132097 -16.000015622186908 0.24241252226402923 -16 8.7499017920045219e-08 - -16.7551608848038 4 -15.993562662767264 1 -15.231964440730728 1 -14.470366218694192 1 -13.708767996657654 1 -12.947169774621118 1 -12.185571552584582 1 -11.423973330548044 1 -10.662375108511508 1 -9.9007768864749721 1 -9.1391786644384361 1 -8.3775804424019 1 -7.615982220365364 1 -6.8543839983288279 1 -6.0927857762922901 1 -5.3311875542557541 1 -4.569589332219218 1 -3.807991110182682 1 -3.0463928881461459 1 -2.2847946661096081 1 -1.5231964440730721 1 -0.76159822203653604 1 0 4 -7 0 0 1 2 2 1.0471975607689281 18.475208614065217 5.7267934380834583e-09 18.475208614065256 - -16.7551608848038 2 0 2 -7 0 0 3 25 23 -16 8.7499017896160597e-08 -16.00001562483833 -0.24241234755075161 -15.988968853436031 -0.73023511524995643 -15.938245501628582 -1.4686362973069835 -15.852371413160471 -2.2114291499653529 -15.730623482788326 -2.9561587549745352 -15.572482823820382 -3.7002796935389624 -15.377674440429661 -4.4411633811813394 -15.146173249869936 -5.1761307826893219 -14.878214269635857 -5.9024811420696599 -14.57429631343074 -6.6175237962021312 -14.235181680428092 -7.3186102718637969 -13.861890977697431 -8.0031664368435802 -13.455693303517767 -8.6687237531191954 -13.018091925374327 -9.3129488803217679 -12.550805803607924 -9.9336708806868383 -12.0557474337133 -10.528905347142956 -11.534997591444151 -11.096874962779747 -10.990777691344245 -11.636025818467743 -10.425420387330988 -12.145040118883429 -9.8413395982453302 -12.62284172514703 -9.2409991647688461 -13.068607296904018 -8.6268866610891344 -13.481735602525889 -8.2099431388064499 -13.735213773322949 -8.0000000001046203 -13.8564064604906 - -16.755160906523901 4 -15.993562683500087 1 -15.231964460476274 1 -14.47036623745246 1 -13.708768014428646 1 -12.947169791404832 1 -12.185571568381018 1 -11.423973345357204 1 -10.66237512233339 1 -9.9007768993095766 1 -9.1391786762857627 1 -8.3775804532619507 1 -7.6159822302381368 1 -6.8543840072143229 1 -6.0927857841905091 1 -5.3311875611666952 1 -4.5695893381428814 1 -3.8079911151190675 1 -3.0463928920952537 1 -2.2847946690714398 1 -1.5231964460476259 1 -0.76159822302381208 1 0 4 -7 0 0 1 2 2 6.2831853129063839 18.47520861406522 5.2359877559905428 18.475208614065306 - -16.755160906523901 2 0 2 -7 0 0 3 25 23 -8.0000000001046203 -13.8564064604906 -7.790072487625606 -13.977626206810386 -7.362082196943601 -14.211970800714568 -6.697246346621502 -14.537243673118125 -6.011031830465936 -14.834270950539754 -5.3052031173677614 -15.101198946439563 -4.5817051612528541 -15.336305582453399 -3.8426768850596629 -15.538038413053213 -3.0904258598737391 -15.705036198410353 -2.3274085176389399 -15.836152091710424 -1.556204447710519 -15.930472746780508 -0.77948844464951772 -15.987334097492559 -7.5755882171760827e-08 -16.006332949409099 0.7794882933175914 -15.987334104870991 1.5562042969168306 -15.930472761511099 2.3274083677380748 -15.836152113741038 3.0904257112139879 -15.705036227663481 3.8426767379806757 -15.538038449426924 4.5817050160834283 -15.336305625822575 5.3052029744238034 -15.101198996657146 6.011031690048668 -14.834271007438531 6.6972462090158267 -14.537243736512417 7.3620820624168948 -14.211970870402014 7.7900723553171565 -13.977626280549071 7.9999998689436111 -13.856406536216401 - -16.755160667937599 4 -15.993562455758617 1 -15.231964243579636 1 -14.470366031400653 1 -13.708767819221672 1 -12.94716960704269 1 -12.185571394863707 1 -11.423973182684726 1 -10.662374970505745 1 -9.9007767583267636 1 -9.1391785461477824 1 -8.3775803339687993 1 -7.615982121789818 1 -6.8543839096108368 1 -6.0927856974318537 1 -5.3311874852528724 1 -4.5695892730738912 1 -3.8079910608949099 1 -3.0463928487159286 1 -2.2847946365369456 1 -1.5231964243579643 1 -0.76159821217898305 1 0 4 -7 0 0 1 2 2 5.2359877559905375 18.475208614065178 4.1887902142445803 18.475208614065082 - -16.755160667937599 2 0 2 -7 0 0 3 25 23 7.9999998689436111 -13.856406536216401 8.2099430114394405 -13.735213849508723 8.6268865413791076 -13.481735679300492 9.240999056645002 -13.068607373546774 9.8413395017040735 -12.62284180061611 10.425420302257583 -12.145040192127807 10.990777617510727 -11.636025888440029 11.534997528508464 -11.096875028451016 12.055747381220888 -10.528905407517506 12.550805760995516 -9.9336709348169272 13.01809189197594 -9.3129489273217292 13.455693278572923 -8.668723792178703 13.861890960361331 -8.0031664672395699 14.235181669783485 -7.3186102929707939 14.574296308501324 -6.6175238075006089 14.878214269400639 -5.9024811431523041 15.146173253278375 -5.1761307732650019 15.377674446417004 -4.4411633610767032 15.572482831322931 -3.7002796626977803 15.730623490758122 -2.9561587134547129 15.85237142057913 -2.211429097934059 15.938245507520049 -1.4686362350335136 15.988968856877058 -0.73023504309842924 16.000015626073797 -0.24241226911080399 16 1.6899474281073523e-07 - -16.755161139473 4 -15.993562905860591 1 -15.231964672248182 1 -14.470366438635772 1 -13.708768205023363 1 -12.947169971410954 1 -12.185571737798545 1 -11.423973504186137 1 -10.662375270573726 1 -9.9007770369613191 1 -9.1391788033489085 1 -8.3775805697364998 1 -7.615982336124091 1 -6.8543841025116823 1 -6.0927858688992718 1 -5.331187635286863 1 -4.5695894016744543 1 -3.8079911680620455 1 -3.0463929344496368 1 -2.2847947008372262 1 -1.5231964672248175 1 -0.76159823361240875 1 0 4 -7 0 0 1 2 2 4.1887902142445688 18.475208614065089 3.14159264302763 18.475208614065117 - -16.755161139473 2 0 2 -7 0 0 3 25 23 11 5.7120974616964304e-14 11.000780180477813 -0.47064712230560368 10.938884943226011 -1.4399641863097685 10.639527843567301 -2.9336962219637437 10.112908327235962 -4.4258199816412258 9.3543807544054669 -5.8646551895449459 8.3737713695748077 -7.1971800731287487 7.1971612204280717 -8.3737680504509715 5.8647272812241118 -9.3543751781998061 4.4255504676254862 -10.112933951182065 2.934702186347744 -10.639430923988112 1.4362098427896952 -10.939246997596154 -3.2752918251637021e-14 -11.030376501201779 -1.4362098427897589 -10.939246997596143 -2.9347021863478022 -10.63943092398809 -4.425550467625543 -10.112933951182038 -5.8647272812241571 -9.354375178199767 -7.1971612204281072 -8.3737680504509271 -8.3737713695748361 -7.1971800731287132 -9.3543807544054847 -5.864655189544913 -10.112908327235973 -4.4258199816411956 -10.639527843567302 -2.9336962219637273 -10.938884943226009 -1.4399641863097574 -11.000780180477815 -0.4706471223055988 -11 5.850875339774575e-14 - -34.557519189487699 4 -32.986722862692801 1 -31.41592653589791 1 -29.845130209103012 1 -28.274333882308117 1 -26.703537555513222 1 -25.132741228718327 1 -23.561944901923432 1 -21.991148575128534 1 -20.420352248333643 1 -18.849555921538744 1 -17.27875959474385 1 -15.707963267948955 1 -14.13716694115406 1 -12.566370614359162 1 -10.995574287564267 1 -9.4247779607693722 1 -7.8539816339744775 1 -6.2831853071795827 1 -4.7123889803846843 1 -3.1415926535897896 1 -1.5707963267948983 1 0 4 -7 0 0 1 2 2 15.55634918610401 6.2831853071795898 15.556349186104004 3.14159265358979 - -34.557519189487699 2 0 2 -7 0 0 3 25 23 -11 5.8492266255332308e-14 -11.000780180477813 0.47064712230572314 -10.938884943226011 1.4399641863098953 -10.639527843567299 2.9336962219638822 -10.112908327235964 4.4258199816413732 -9.354380754405458 5.8646551895451076 -8.3737713695748059 7.1971800731289202 -7.1971612204280628 8.3737680504511438 -5.8647272812240985 9.3543751781999909 -4.4255504676254702 10.11293395118226 -2.9347021863477241 10.639430923988307 -1.4362098427896737 10.939246997596351 6.0641983520401515e-14 11.030376501201976 1.4362098427897807 10.93924699759634 2.9347021863478222 10.639430923988284 4.4255504676255564 10.112933951182228 5.8647272812241695 9.35437517819995 7.1971612204281152 8.3737680504511101 8.3737713695748432 7.1971800731288829 9.3543807544054864 5.8646551895450729 10.112908327235974 4.4258199816413457 10.639527843567304 2.9336962219638654 10.938884943226011 1.439964186309884 11.000780180477813 0.47064712230571781 11 5.7145199266127705e-14 - -34.557519189487699 4 -32.986722862692801 1 -31.41592653589791 1 -29.845130209103012 1 -28.274333882308117 1 -26.703537555513222 1 -25.132741228718327 1 -23.561944901923432 1 -21.991148575128534 1 -20.420352248333643 1 -18.849555921538744 1 -17.27875959474385 1 -15.707963267948955 1 -14.13716694115406 1 -12.566370614359162 1 -10.995574287564267 1 -9.4247779607693722 1 -7.8539816339744775 1 -6.2831853071795827 1 -4.7123889803846843 1 -3.1415926535897896 1 -1.5707963267948983 1 0 4 -7 0 0 1 2 2 15.55634918610401 3.14159265358979 15.556349186103974 -1.4257374705319789e-16 - -34.557519189487699 2 0 2 -7 0 0 3 47 45 2.6179938778705596 21.333333333328234 2.6162264398480932 21.311053049530209 2.6126678510231014 21.266528939243234 2.6072535634584071 21.199829501879904 2.6017576507136622 21.133193391617599 2.5961747339664001 21.06659985736135 2.5904993277879558 21.000029983784504 2.5847258231825183 20.933467014995845 2.5788484888101593 20.86689638033797 2.5728614672333197 20.800305807251373 2.5667587724152301 20.7336854183242 2.5605342868265808 20.667027840346442 2.5541817586326445 20.600328318185806 2.5476947988600007 20.533584835591476 2.5410668786382815 20.466798242848345 2.5342913264223594 20.39997239060699 2.5273613256884477 20.333114273716205 2.5202699114619174 20.266234171411195 2.5130099720184762 20.199345835486113 2.5055742323323327 20.132466534336942 2.4979553069679512 20.065617670285839 2.4901454954256308 19.998823293059697 2.4821375406142256 19.932116500689034 2.4739217952020405 19.865516439786592 2.4654967990008609 19.799115085029193 2.4568377374871102 19.732866161919919 2.4479110924707563 19.666676428023035 2.438684572672253 19.600488373263701 2.4291244154453127 19.534259759740095 2.419196076425933 19.467971108327387 2.408863988677838 19.401625566368772 2.3980916557325993 19.335252348997809 2.3868413483471516 19.268904582167423 2.3750750720453238 19.202677068589274 2.3627508801470682 19.136651080591108 2.3498365958332159 19.071112464307998 2.3361400453627352 19.005800098069496 2.3214509917057984 18.940470408903568 2.3055611991935256 18.875131159582303 2.2882295706460556 18.809950310905347 2.2692989972800235 18.745575313542421 2.2482970437386092 18.682196542289876 2.2236685592277046 18.618957745238131 2.1945953085460785 18.55939303687564 2.1566426966538468 18.500478960298221 2.1183049445945583 18.478762622173889 2.09439510241284 18.475208614063099 - -1 4 -0.97727272727272729 1 -0.95454545454545459 1 -0.93181818181818188 1 -0.90909090909090906 1 -0.88636363636363635 1 -0.86363636363636365 1 -0.84090909090909094 1 -0.81818181818181812 1 -0.79545454545454541 1 -0.77272727272727271 1 -0.75 1 -0.72727272727272729 1 -0.70454545454545459 1 -0.68181818181818188 1 -0.65909090909090906 1 -0.63636363636363635 1 -0.61363636363636365 1 -0.59090909090909083 1 -0.56818181818181812 1 -0.54545454545454541 1 -0.52272727272727271 1 -0.5 1 -0.47727272727272729 1 -0.45454545454545459 1 -0.43181818181818177 1 -0.40909090909090906 1 -0.38636363636363635 1 -0.36363636363636365 1 -0.34090909090909094 1 -0.31818181818181812 1 -0.29545454545454541 1 -0.27272727272727271 1 -0.25 1 -0.22727272727272729 1 -0.20454545454545447 1 -0.18181818181818177 1 -0.15909090909090906 1 -0.13636363636363635 1 -0.11363636363636365 1 -0.090909090909090828 1 -0.068181818181818121 1 -0.045454545454545414 1 -0.022727272727272707 1 0 4 -7 0 0 3 47 45 -2.3890275267576899e-12 31.570937640364086 0.038590855868211454 31.582077860870669 0.11604959049921335 31.604357628701027 0.23316237540825527 31.637774768450438 0.35129345757481162 31.671188903756033 0.47053645128742144 31.704599542169973 0.59098497083631474 31.738006191244278 0.71273263051132885 31.771408358531492 0.83587304460228584 31.804805551583414 0.96049982739941209 31.838197277952446 1.086706593191324 31.871583045190803 1.2145869562726954 31.904962360850448 1.3442345309155657 31.938334732484083 1.4757429314764763 31.971699667642163 1.6092057719965005 32.005056673883864 1.744716667694262 32.038405258734613 1.8823692293935117 32.071744929846531 2.0222570843199792 32.105075194398559 2.1644737984863034 32.138395561336928 2.3091131663556173 32.171705533010346 2.4562681298020745 32.205004636390747 2.6060348126052895 32.23829230655511 2.7584974635120045 32.271568321536407 2.9137846494949904 32.304831179439127 3.0718594931960457 32.338084156455906 3.23312416989722 32.37132633292309 3.3981365571827391 32.404552290668313 3.5674128068221478 32.437757817170834 3.74148027154156 32.470938375813866 3.9208632260555571 32.504089520711936 4.1060870561681595 32.537206767151147 4.2976757813372624 32.570285694999605 4.4961577753157789 32.603321664625838 4.7020453610227051 32.636310849815402 4.9159107104176405 32.669246390183282 5.1381023522275306 32.702132762368308 5.3716924927335103 32.734946523785069 5.6199793163809693 32.767653312431598 5.8860997512953839 32.800224742635329 6.1736097727176578 32.832619442822931 6.484550423746918 32.864842008694005 6.8260383584714992 32.896731550100675 7.2221653924532916 32.928076771046001 7.684127236533973 32.957973069942447 8.280269207161659 32.987607021812885 8.8715776988753312 32.998377733182807 9.2376043067196711 32.999999999996078 - -1 4 -0.97727272727272729 1 -0.95454545454545459 1 -0.93181818181818188 1 -0.90909090909090906 1 -0.88636363636363635 1 -0.86363636363636365 1 -0.84090909090909094 1 -0.81818181818181812 1 -0.79545454545454541 1 -0.77272727272727271 1 -0.75 1 -0.72727272727272729 1 -0.70454545454545459 1 -0.68181818181818188 1 -0.65909090909090906 1 -0.63636363636363635 1 -0.61363636363636365 1 -0.59090909090909083 1 -0.56818181818181812 1 -0.54545454545454541 1 -0.52272727272727271 1 -0.5 1 -0.47727272727272729 1 -0.45454545454545459 1 -0.43181818181818177 1 -0.40909090909090906 1 -0.38636363636363635 1 -0.36363636363636365 1 -0.34090909090909094 1 -0.31818181818181812 1 -0.29545454545454541 1 -0.27272727272727271 1 -0.25 1 -0.22727272727272729 1 -0.20454545454545447 1 -0.18181818181818177 1 -0.15909090909090906 1 -0.13636363636363635 1 -0.11363636363636365 1 -0.090909090909090828 1 -0.068181818181818121 1 -0.045454545454545414 1 -0.022727272727272707 1 0 4 -7 0 0 3 47 45 3.14159264302763 18.475208614063099 3.1176815185311746 18.478768999350891 3.0793428523289927 18.500489826685513 3.0413910834171887 18.559397635828187 3.0123148574765382 18.618964008322408 2.9876850801253023 18.682201348663661 2.966680470368082 18.745584888050367 2.9477522362981272 18.809956426510759 2.9304225809050313 18.875135849874951 2.9145348908346222 18.940474122748228 2.8998475806178847 19.005803750832385 2.8861522633352918 19.071116770589587 2.8732382145858271 19.136658316448308 2.8609138087632995 19.202685661870227 2.8491473726444472 19.268914013251063 2.8378968435948995 19.335262022094931 2.8271242793803841 19.401635064629115 2.8167919580737046 19.467980110621312 2.8068634025788364 19.534268049482577 2.7973030623113568 19.600495823579749 2.7880764093458978 19.666682994852085 2.779149700029238 19.732871873511314 2.7704906514989158 19.799120041550776 2.7620657933259989 19.865520778836117 2.7538502114190391 19.932120490960273 2.7458423759811841 19.99882686592375 2.7380326616028401 20.065620857108026 2.7304138083753533 20.132469348789936 2.7229781195588241 20.199348303228081 2.7157182116632956 20.266236320386991 2.7086268120429566 20.333116135113674 2.7016968111857729 20.399973997055362 2.6949212463235916 20.46679962744733 2.6882933030906986 20.533586030803576 2.6818063120639271 20.60032935484444 2.675453746456427 20.667028746707867 2.6692292193414833 20.733686219175251 2.6631264808948436 20.800306523065846 2.6571394155623036 20.866897026477623 2.6512620392475599 20.93346760095173 2.6454884964196461 21.000030512455719 2.6398130576119163 21.066600324365712 2.6342301156694239 21.13319378463618 2.6287341869714069 21.199829800009038 2.6233198944747143 21.266529112441809 2.6197613108667905 21.311053112785114 2.6179938778705596 21.333333333328234 - -0.99999999207186696 4 -0.97727271952477912 1 -0.95454544697769117 1 -0.93181817443060333 1 -0.90909090188351538 1 -0.88636362933642754 1 -0.8636363567893397 1 -0.84090908424225175 1 -0.81818181169516391 1 -0.79545453914807596 1 -0.77272726660098812 1 -0.74999999405390017 1 -0.72727272150681233 1 -0.70454544895972449 1 -0.68181817641263653 1 -0.65909090386554869 1 -0.63636363131846085 1 -0.6136363587713729 1 -0.59090908622428495 1 -0.56818181367719722 1 -0.54545454113010927 1 -0.52272726858302132 1 -0.49999999603593348 1 -0.47727272348884564 1 -0.45454545094175769 1 -0.43181817839466985 1 -0.4090909058475819 1 -0.38636363330049406 1 -0.36363636075340622 1 -0.34090908820631827 1 -0.31818181565923043 1 -0.29545454311214248 1 -0.27272727056505464 1 -0.2499999980179668 1 -0.22727272547087884 1 -0.204545452923791 1 -0.18181818037670305 1 -0.15909090782961521 1 -0.13636363528252737 1 -0.11363636273543942 1 -0.090909090188351582 1 -0.068181817641263631 1 -0.045454545094175791 1 -0.022727272547087951 1 0 4 -7 0 0 3 47 45 9.2376044760286842 32.999999999996099 9.6036511881164106 32.998374762961646 10.194974088751543 32.987601836066169 10.791103132592438 32.957970444976247 11.253112086794642 32.92807356214518 11.649259829957403 32.896728667124535 11.990791193505546 32.864837946533768 12.301694586262883 32.832615910579712 12.589173101285329 32.800221475743136 12.855259853948859 32.767650110036399 13.103518770135112 32.73494325707054 13.33708927347568 32.702129359438935 13.559277986096701 32.669242888207009 13.773147238396131 32.636307201570013 13.97903774126774 32.603317999035653 14.177523487463111 32.570282077737986 14.369115996435101 32.537203262807338 14.554343541412408 32.50408617612927 14.733729853819037 32.470935224572791 14.907800078521964 32.43775487831762 15.077078248420948 32.404549569318142 15.242091430841642 32.371323819116775 15.403355667373349 32.338081829132328 15.561428068124904 32.304828991687529 15.716712494863378 32.271566255615184 15.869173067250196 32.238290361814542 16.018938037901044 32.205002807863423 16.166091695883775 32.17170381724398 16.310730110263385 32.138393954830704 16.452946193664122 32.105073694022813 16.592833704476025 32.071743532729755 16.730486174466829 32.038403962294005 16.865997196127566 32.005055475817144 16.999460345678486 31.971698565929756 17.1309692036996 31.938333725388471 17.260617349602718 31.904961446916271 17.388498363112653 31.871582223244832 17.514705823870397 31.838196547104154 17.639333311539321 31.804804911223808 17.762474405776892 31.771407808334253 17.884222686242079 31.73800573116527 18.004671732593522 31.704599172446915 18.123915124489798 31.671188624909291 18.242046441590034 31.637774581282255 18.359159263551241 31.604357534296078 18.436617867875942 31.582077829219127 18.4752086140697 31.570937640364104 - -0.99999999207186696 4 -0.97727271952477912 1 -0.95454544697769117 1 -0.93181817443060333 1 -0.90909090188351538 1 -0.88636362933642754 1 -0.8636363567893397 1 -0.84090908424225175 1 -0.81818181169516391 1 -0.79545453914807596 1 -0.77272726660098812 1 -0.74999999405390017 1 -0.72727272150681233 1 -0.70454544895972449 1 -0.68181817641263653 1 -0.65909090386554869 1 -0.63636363131846085 1 -0.6136363587713729 1 -0.59090908622428495 1 -0.56818181367719722 1 -0.54545454113010927 1 -0.52272726858302132 1 -0.49999999603593348 1 -0.47727272348884564 1 -0.45454545094175769 1 -0.43181817839466985 1 -0.4090909058475819 1 -0.38636363330049406 1 -0.36363636075340622 1 -0.34090908820631827 1 -0.31818181565923043 1 -0.29545454311214248 1 -0.27272727056505464 1 -0.2499999980179668 1 -0.22727272547087884 1 -0.204545452923791 1 -0.18181818037670305 1 -0.15909090782961521 1 -0.13636363528252737 1 -0.11363636273543942 1 -0.090909090188351582 1 -0.068181817641263631 1 -0.045454545094175791 1 -0.022727272547087951 1 0 4 -7 0 0 3 25 23 9.2376041538776104 33.000000000000014 9.1016651623819076 32.999999999463896 8.829431111612994 32.998015029776745 8.4197048934891132 32.988997181497474 8.0082835942976835 32.973850997096271 7.5948927765483623 32.952497124843035 7.1790889967831335 32.924824304903723 6.7613273305866448 32.890890815270296 6.342647806554413 32.850864260816401 5.923939044645758 32.804887040150824 5.5061897526405534 32.753108011822803 5.0901300398646772 32.695675437373396 4.6753772936056501 32.632741242274918 4.2616911994615787 32.564460552949058 3.8487570015664323 32.490974363434553 3.4364154116001346 32.412476996353185 3.0232731772150503 32.328713561354064 2.6076435109833831 32.239324806364671 2.1879735827639206 32.143989911825628 1.7624575412520875 32.042334783118861 1.3303060466153598 31.934187384394253 0.89229641505922253 31.819685546459155 0.44891122198387701 31.698908822079318 0.15011200471702327 31.614271243534816 1.9723794078001399e-13 31.570937640369994 - 9.51828212105803e-09 4 0.045454554540178389 1 0.090909099562074658 1 0.13636364458397093 1 0.18181818960586721 1 0.22727273462776348 1 0.2727272796496597 1 0.31818182467155598 1 0.36363636969345225 1 0.40909091471534853 1 0.45454545973724481 1 0.50000000475914108 1 0.54545454978103736 1 0.59090909480293363 1 0.63636363982482991 1 0.68181818484672618 1 0.72727272986862246 1 0.77272727489051873 1 0.81818181991241501 1 0.86363636493431128 1 0.90909090995620756 1 0.95454545497810384 1 1 4 -7 0 0 3 25 23 1.0471975607689299 18.475208614063099 1.0560947241860159 18.475209419798823 1.0738516759064047 18.479201176391154 1.10036907453538 18.497287862888506 1.1267634615091955 18.527601243326028 1.1530266309508141 18.570272368737076 1.179160649642075 18.625475822658242 1.2051112232694641 18.693207609829496 1.2307907594123944 18.773253150000237 1.2561253355960393 18.865327338125184 1.2810395646432537 18.969031849160313 1.3054787265871912 19.083921683822211 1.3294563933590371 19.209748248841695 1.3529783381968523 19.346252991440821 1.3760552647422408 19.493217380466216 1.398690093138435 19.650363885080235 1.4209526991978072 19.818030956853157 1.4429236739097056 19.996810121464687 1.4646711418574001 20.1873364091445 1.4862704065774361 20.39046370128322 1.5077395004961631 20.606674265672346 1.5290192373837876 20.835696810424405 1.5500687534012858 21.077343122060402 1.5639216287431643 21.246662132854954 1.5707963269049703 21.333333333330618 - 9.51828212105803e-09 4 0.045454554540178389 1 0.090909099562074658 1 0.13636364458397093 1 0.18181818960586721 1 0.22727273462776348 1 0.2727272796496597 1 0.31818182467155598 1 0.36363636969345225 1 0.40909091471534853 1 0.45454545973724481 1 0.50000000475914108 1 0.54545454978103736 1 0.59090909480293363 1 0.63636363982482991 1 0.68181818484672618 1 0.72727272986862246 1 0.77272727489051873 1 0.81818181991241501 1 0.86363636493431128 1 0.90909090995620756 1 0.95454545497810384 1 1 4 -7 0 0 3 25 23 18.475208614069199 31.570937640370083 18.324936755815838 31.614317389273143 18.025831939967649 31.699039524355296 17.582034112273071 31.819920685744599 17.143661176269866 31.934505347453761 16.711198822281116 32.04271481988129 16.285429160282128 32.144411843430795 15.865558715983287 32.239770577698813 15.449771664433955 32.329168255444173 15.036506792623431 32.412928560911347 14.624067616792729 32.491413827560535 14.211054994503689 32.564881410643288 13.797320186712634 32.633136798037853 13.382557139317955 32.696039099836511 12.966534352715559 32.753433293344834 12.54887942436908 32.805167264800041 12.130319799067886 32.8510952042312 11.711838556663631 32.891071311700124 11.294319632369993 32.924956053147703 10.878797448496522 32.952584880446565 10.465724643547114 32.973901908278918 10.054660152821823 32.989019779585711 9.6453310124031173 32.998019418968482 9.3733896711147189 33.000000000043769 9.237604306719696 33.000000000000085 - 0 4 0.045454545242395089 1 0.090909090484790178 1 0.13636363572718527 1 0.18181818096958036 1 0.22727272621197545 1 0.27272727145437053 1 0.3181818166967656 1 0.36363636193916071 1 0.40909090718155583 1 0.45454545242395089 1 0.49999999766634595 1 0.54545454290874107 1 0.59090908815113619 1 0.63636363339353119 1 0.68181817863592631 1 0.72727272387832143 1 0.77272726912071654 1 0.81818181436311166 1 0.86363635960550666 1 0.90909090484790178 1 0.9545454500902969 1 0.99999999533269202 4 -7 0 0 3 25 23 1.5707963269049341 21.333333333329577 1.5776783444473659 21.246569808254826 1.5915455762606914 21.077081314349037 1.6126154455440058 20.835225340413228 1.6339140207971394 20.606036971369925 1.6554001008266555 20.389702955966158 1.6770140592317733 20.186493461071564 1.6987739407193343 19.995920940654742 1.7207554050825264 19.817124267947129 1.743026892851441 19.64946243885457 1.7656694214996047 19.492338050212659 1.7887531231178528 19.345408819866812 1.8122802465301069 19.208953920969982 1.8362608894393959 19.083191998621402 1.8607001861352821 18.968380983508666 1.885610957730927 18.86476832599271 1.9109384864030039 18.772793410461166 1.9366075972826493 18.692848424579633 1.9625445571988771 18.625212983168506 1.9886620540959346 18.570096414224107 2.0149059085612837 18.527498648390836 2.0412780151810663 18.497242052768527 2.0677700617521668 18.47919220581997 2.0855079949715201 18.475209410378884 2.0943951024129199 18.475208614063099 - 0 4 0.045454545242395089 1 0.090909090484790178 1 0.13636363572718527 1 0.18181818096958036 1 0.22727272621197545 1 0.27272727145437053 1 0.3181818166967656 1 0.36363636193916071 1 0.40909090718155583 1 0.45454545242395089 1 0.49999999766634595 1 0.54545454290874107 1 0.59090908815113619 1 0.63636363339353119 1 0.68181817863592631 1 0.72727272387832143 1 0.77272726912071654 1 0.81818181436311166 1 0.86363635960550666 1 0.90909090484790178 1 0.9545454500902969 1 0.99999999533269202 4 -7 0 0 3 25 23 9.2376042195350401 33.000000000000107 9.101738794089659 32.999999999890797 8.8296431907351209 32.998014053723224 8.4201399823071927 32.988999742433975 8.0090001763040259 32.973870304101467 7.5959863471566349 32.952553636570187 7.1807148430299437 32.924949287100389 6.7635794057704874 32.89110743054912 6.3454796983831594 32.851175291935306 5.927184955418574 32.805277966647161 5.5095489024308488 32.753545309707242 5.0932096876540083 32.696110446148495 4.6778784261710546 32.633126591732271 4.2633861951510994 32.564747957017019 3.8494965846922526 32.491116133325761 3.43612317109049 32.412422194126975 3.0219791159617246 32.328439243453055 2.6054926348982721 32.23884327775459 2.1852195355591011 32.143346006948043 1.7594797665432953 32.04160975935828 1.3275376536332411 31.933484050135586 0.89011259291789613 31.819105439900078 0.44765023760080824 31.698556503487463 0.14966337312280065 31.614141734741327 -6.2811977841192897e-12 31.570937640370101 - 6.1487012488430002e-09 4 0.045454551323760285 1 0.090909096498819314 1 0.13636364167387835 1 0.18181818684893739 1 0.22727273202399642 1 0.27272727719905548 1 0.31818182237411452 1 0.36363636754917356 1 0.40909091272423259 1 0.45454545789929163 1 0.50000000307435066 1 0.54545454824940964 1 0.59090909342446862 1 0.63636363859952771 1 0.68181818377458681 1 0.72727272894964579 1 0.77272727412470477 1 0.81818181929976386 1 0.86363636447482295 1 0.90909090964988193 1 0.95454545482494091 1 1 4 -7 0 0 3 25 23 0 18.475208614065 0.0088923598724232663 18.475209112681224 0.026640305965495974 18.479198654498752 0.053143438161763236 18.497269126567222 0.079520089526551471 18.527546410945437 0.10575986382213232 18.570150714768467 0.13186134650593434 18.625238070089154 0.15777447526975033 18.692805591396574 0.18342051743829199 18.77266477046571 0.20873267803851817 18.864563912864515 0.23364318090216843 18.968151968469915 0.258101817777797 19.083031941180039 0.28211564334938638 19.20895691767986 0.30568551676651695 19.345667506840989 0.32881707965423085 19.492935619447085 0.35150878633340404 19.650471161865323 0.37382454119325637 19.818568260441449 0.39583895848265765 19.997759770473522 0.41761498922316753 20.188617900647696 0.43922238678757164 20.391918204561392 0.46067780187766494 20.608090853447976 0.48192628062302356 20.836866026075967 0.50292996722880545 21.078050889738993 0.51674460854108362 21.24692144671836 0.52359877570817048 21.333333333329097 - 6.1487012488430002e-09 4 0.045454551323760285 1 0.090909096498819314 1 0.13636364167387835 1 0.18181818684893739 1 0.22727273202399642 1 0.27272727719905548 1 0.31818182237411452 1 0.36363636754917356 1 0.40909091272423259 1 0.45454545789929163 1 0.50000000307435066 1 0.54545454824940964 1 0.59090909342446862 1 0.63636363859952771 1 0.68181818377458681 1 0.72727272894964579 1 0.77272727412470477 1 0.81818181929976386 1 0.86363636447482295 1 0.90909090964988193 1 0.95454545482494091 1 1 4 -7 0 0 3 25 23 18.475208614069 31.570937640369994 18.324936738119298 31.614317394160501 18.025831888346374 31.699039538191297 17.582034014526194 31.819920710612035 17.143661037530219 31.93450538104614 16.711198648005336 32.042714859984819 16.285428956426983 32.144411887895984 15.865558488021692 32.239770624597114 15.449771416803518 32.329168303151228 15.036506528890349 32.412928608082041 14.624067339486595 32.491413873153903 14.211054705638199 32.564881453842489 13.797319889703525 32.633136838020739 13.382556838756113 32.696039135809471 12.966534054342368 32.75343332454112 12.5488791354021 32.80516729045209 12.130319525571712 32.851095223825119 11.71183830286253 32.891071325025997 11.294319400801159 32.924956060309398 10.8787972400523 32.952584881773852 10.465724457064871 32.973901904730148 10.054659984756196 32.98901977331213 9.6453308569077567 32.998019413204126 9.3733895185533243 32.999999997516632 9.2376041538776104 33.000000000000014 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 0.52359877570819391 21.333333333329815 0.5304807940549815 21.246569798145167 0.54434802744997557 21.077081285642421 0.56541789898977823 20.83522528858396 0.58671647634863011 20.606036901117253 0.6082025582978825 20.389702871838146 0.62981651839069852 20.186493367498986 0.65157640133777639 19.995920841503544 0.67355786696920072 19.817124166348311 0.69582935584781525 19.649462337333688 0.71847188549300456 19.492337950692793 0.74155558801687071 19.345408723925065 0.76508271215570545 19.20895383042367 0.78906335553244811 19.083191915333146 0.81350265235444963 18.968380909283422 0.83841342362913218 18.864768262525878 0.86374095158294739 18.772793358641696 0.88941006144553869 18.692848384471404 0.91534702014258085 18.625212954180686 0.94146451571875978 18.570096395304784 0.96770836889394762 18.527498637953911 0.99408047441369107 18.497242048600672 1.0205725202336553 18.47919220532944 1.0383104532942833 18.475209410537836 1.0471975607689299 18.475208614065 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 9.2376043069134077 33.000000000000099 9.1016653121579534 32.999999998570559 8.8294312558193671 32.998015027742333 8.4197050347689864 32.988997179668132 8.0082837407556937 32.973850997374925 7.5948929386224195 32.952497129095114 7.1790891885196677 32.924824315045178 6.7613275626449143 32.89089083276108 6.3426480820857272 32.850864286414328 5.923939360401369 32.804887073979188 5.5061900981640388 32.75310805332397 5.0901303997084364 32.695675485432695 4.6753776559278615 32.63274129575845 4.2616915549734244 32.564460610642406 3.8487573437072449 32.49097442405057 3.4364157368895922 32.412477058560782 3.0232734820434266 32.328713623641981 2.607643790717495 32.239324866953751 2.1879738320018971 32.143989968692225 1.7624577536559478 32.042334833981222 1.3303062153581475 31.93418742674416 0.89229653378382956 31.819685577668757 0.44891128464198815 31.698908839384593 0.15011202619669228 31.614271249639877 -3.51828368147731e-12 31.570937640370083 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 5.2359877559905303 18.475208614064702 5.2448849196291416 18.475209419100377 5.2626418717289045 18.479201174185182 5.2891592705801989 18.497287857557463 5.3155536572645037 18.527601233539002 5.3418168257725354 18.570272352435662 5.3679508426837543 18.62547579665604 5.3939014139297674 18.693207570649818 5.4195809475772174 18.773253095011523 5.4449155215480607 18.865327265992899 5.4698297490870074 18.969031760579746 5.494268910489331 19.083921581623912 5.5182465774356215 19.209748136015548 5.5417685229859641 19.34625287106784 5.5648454506018146 19.493217255458472 5.587480280238057 19.650363757812201 5.6097428877034048 19.818030829970137 5.6317138640288453 19.996809998243332 5.6534613338215181 20.187336293463286 5.6750606006465736 20.39046359773868 5.6965296969312584 20.606674179468985 5.7178094363977516 20.835696746962689 5.7388589551691727 21.077343086957573 5.7527118324389157 21.246662120495472 5.7595865315814052 21.333333333329019 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 18.475208614067 31.570937640370101 18.325619981274592 31.61412015892212 18.027754562411687 31.698502391597962 17.585371959152898 31.819034203561657 17.147905191205993 31.933427350788939 16.715783429924659 32.04159871931688 16.289700076948051 32.143413144210101 15.868944013669314 32.239012218793086 15.451892410592862 32.328718017660286 15.0371505603073 32.412804994187951 14.623198907426689 32.491582069975841 14.208799492504728 32.565264404943441 13.793901958947602 32.633663616584499 13.378308200241724 32.696639021713075 12.961884378741242 32.754038042009995 12.544387331249212 32.805707980368368 12.126412286190762 32.851524613181915 11.708749519632876 32.891368954470877 11.292112224773799 32.925125936156221 10.877334149868119 32.952659832541656 10.464780235021436 32.973926127355199 10.054094895825838 32.989021939499274 9.6450580790622666 32.998017728954153 9.3732948545843886 32.999999998386038 9.2376042195350401 33.000000000000107 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 5.7595865315814354 21.333333333328241 5.7664372824453567 21.246964720880221 5.7802461832030092 21.078160442969974 5.8012457845520267 20.837012344010926 5.8224959603212696 20.608208522055968 5.8439600859224203 20.391942248682149 5.8655849895979557 20.18848089909504 5.8873865654702033 19.99741608202903 5.909431929444291 19.818005918208055 5.9317815649934804 19.649704801118581 5.9545072646147981 19.49200450754709 5.9776700834759131 19.344629065700957 6.0012661644592633 19.207872491702428 6.0252985732526572 19.081965044955854 6.049765658894521 18.967163970524606 6.0746712052079328 18.863712692128953 6.0999670002847273 18.771982108667689 6.1255887505778999 18.692297306687788 6.1514729253448603 18.624890532742715 6.1775448855871717 18.569934260354032 6.2037565074151075 18.527427163842361 6.2301047092346584 18.497218368676613 6.2565780542477913 18.479189213704743 6.2743043919373873 18.475208972701399 6.2831853071795898 18.475208614064702 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 9.2376041557059345 32.999999999999986 9.1016651433059916 32.99999999843611 8.8294310530887241 32.998015026430508 8.4197047863211179 32.988997174454994 8.0082834525783682 32.973850986719732 7.5948926175306539 32.952497112038813 7.1790888423774657 32.92482429125937 6.7613271991871713 32.890890802283728 6.3426477081575561 32.850864249478782 5.9239389821363337 32.804887031051344 5.5061897209279858 32.753108005102384 5.0901300281472848 32.695675432808258 4.6753772941277161 32.632741239622312 4.2616912064307453 32.56446055190618 3.8487570113771414 32.490974363649627 3.4364154230224533 32.412476997422537 3.0232731895493608 32.328713562959585 2.6076435234828303 32.23932480824881 2.1879735947735948 32.143989913792581 1.762457552199391 32.042334785049611 1.330306055860685 31.934187386170212 0.89229642194101577 31.819685547901582 0.44891122582800597 31.698908822963954 0.15011200607657488 31.614271243865396 1.99747916609408e-13 31.570937640369984 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 4.1887902142444604 18.4752086140623 4.1976873790307598 18.475209420272883 4.2154443333129059 18.479201178967831 4.2419617350441303 18.497287870835809 4.268356124157318 18.527601257723621 4.2946192945953481 18.570272389160376 4.3207533128803286 18.625475846660073 4.3467038849658088 18.693207633947186 4.3723834189894131 18.773253171102855 4.3977179929329093 18.865327353903076 4.4226322201038482 18.969031858937473 4.4470713808559799 19.083921688757258 4.4710490469166082 19.209748250104447 4.4945709913927034 19.34625299019681 4.5176479177880022 19.493217377658699 4.5402827461063424 19.650363881180841 4.5625453521286712 19.818030952185484 4.5845163268447253 19.996810116376757 4.6062637948307135 20.187336403961972 4.6278630596170167 20.390463696296077 4.6493321536313852 20.606674261224665 4.6706118906428369 20.835696806931367 4.6916614068106419 21.077343119996598 4.7055142822692746 21.246662132100798 4.7123889804933183 21.33333333333054 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 18.475208614069199 31.570937640370083 18.324936753788506 31.614317389859568 18.025831934060594 31.699039526017476 17.582034101112203 31.819920688739252 17.143661160463516 31.934505351509557 16.711198802474673 32.042714824737743 16.285429137178397 32.144411848834437 15.865558690228413 32.239770583423883 15.449771636555399 32.329168261304623 15.036506763047697 32.41292856675657 14.624067585829833 32.491413833279118 14.211054962393778 32.564881416152545 13.797320153782673 32.633136803253542 13.382557105960316 32.696039104677041 12.966534319392991 32.753433297731057 12.548879391616373 32.805167268653122 12.130319767498177 32.85109520749311 11.711838526956054 32.891071314338433 11.294319605272976 32.924956055155192 10.878797424825796 32.952584881838177 10.465724624186381 32.973901909106637 10.054660138767145 32.989019779953928 9.6453310047572582 32.998019419030072 9.3733896685487128 33.000000000036231 9.2376043069134077 33.000000000000099 - 0 4 0.045454545270517004 1 0.090909090541034007 1 0.136363635811551 1 0.18181818108206801 1 0.22727272635258502 1 0.27272727162310201 1 0.31818181689361902 1 0.36363636216413603 1 0.40909090743465304 1 0.45454545270517005 1 0.49999999797568706 1 0.54545454324620402 1 0.59090908851672108 1 0.63636363378723804 1 0.6818181790577551 1 0.72727272432827206 1 0.77272726959878901 1 0.81818181486930608 1 0.86363636013982303 1 0.9090909054103401 1 0.95454545068085705 1 0.99999999595137401 4 -7 0 0 3 25 23 4.7123889804932819 21.333333333329499 4.7192709981285104 21.246569807083308 4.7331382301240339 21.077081311024706 4.754208099666398 20.835225334417775 4.7755066751602824 20.606036963252084 4.7969927554081453 20.38970294625593 4.8186067140038586 20.186493450284953 4.8403665956547099 19.995920929239958 4.8623480601580722 19.817124256264943 4.8846195480478078 19.649462427192887 4.9072620768025272 19.492338038787761 4.9303457785160552 19.345408808849328 4.9538729020064798 19.20895391053994 4.9778535449718939 19.0831919889531 5.0022928416964518 18.968380974765772 5.027203613287595 18.864768318322362 5.0525311419156731 18.772793403975712 5.0782002527061252 18.692848419343949 5.1041372124820894 18.625212979194249 5.1302547091820907 18.570096411464522 5.1564985633880092 18.527498646728979 5.1828706696777092 18.497242052006719 5.2093627158402542 18.479192205672824 5.2271006487297429 18.475209410383229 5.2359877559905401 18.4752086140623 - 0 4 0.045454545270517004 1 0.090909090541034007 1 0.136363635811551 1 0.18181818108206801 1 0.22727272635258502 1 0.27272727162310201 1 0.31818181689361902 1 0.36363636216413603 1 0.40909090743465304 1 0.45454545270517005 1 0.49999999797568706 1 0.54545454324620402 1 0.59090908851672108 1 0.63636363378723804 1 0.6818181790577551 1 0.72727272432827206 1 0.77272726959878901 1 0.81818181486930608 1 0.86363636013982303 1 0.9090909054103401 1 0.95454545068085705 1 0.99999999595137401 4 -7 0 0 3 25 23 9.237604476028686 33.000000000000107 9.1017390314579707 32.999999998153974 8.8296433969054728 32.998014049628324 8.4201401606663904 32.98899973766833 8.0090003436970552 32.973870301051299 7.5959865181773321 32.952553637141598 7.1807150304306084 32.92494929271772 6.7635796181620185 32.89110744214382 6.3454799389627485 32.851175309984988 5.9271852223745176 32.80527799117317 5.5095491884599186 32.753545340257091 5.0932099815538097 32.696110481872921 4.6778787193180662 32.63312663174495 4.2633864807171209 32.564748000353831 3.8494968577817765 32.491116178951337 3.4361234289747631 32.412422240948352 3.0219793558829902 32.328439290261713 2.6054928534665951 32.238843323177726 2.1852197289226858 32.143346049462046 1.7594799302822599 32.041609797281509 1.3275377830341437 31.933484081641812 0.89011268355720174 31.819105463072884 0.44765028524548028 31.698556516312969 0.14966338942828705 31.614141739261722 -4.2819081613742997e-12 31.570937640370101 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 3.14159264302763 18.4752086140623 3.1504850006735694 18.475209111677664 3.168232945578866 18.479198651714434 3.194736080938513 18.497269120927445 3.2211127327100817 18.527546401342502 3.2473525069331153 18.570150699438098 3.273453988644683 18.625238046738122 3.2993671159734377 18.692805557682444 3.3250131565561252 18.7726647245713 3.350325315742122 18.864563853912728 3.3752358176828259 18.968151897060284 3.3996944543343606 19.083031859497456 3.42370828020039 19.208956828044826 3.4472781543041568 19.345667411665186 3.4704097181419233 19.492935521045791 3.4931014259008411 19.65047106220317 3.5154171819630684 19.818568161660227 3.537431600601209 19.997759675125536 3.5592076328488855 20.188617811673279 3.5808150320940513 20.391918125359467 3.6022704490366206 20.60809078781163 3.6235189297745531 20.836865977945969 3.6445226184877035 21.078050863212084 3.6583372612649572 21.246921437395429 3.6651914291754002 21.333333333328714 - 0 4 0.045454545454545456 1 0.090909090909090912 1 0.13636363636363635 1 0.18181818181818182 1 0.22727272727272729 1 0.27272727272727271 1 0.31818181818181818 1 0.36363636363636365 1 0.40909090909090912 1 0.45454545454545459 1 0.5 1 0.54545454545454541 1 0.59090909090909094 1 0.63636363636363635 1 0.68181818181818188 1 0.72727272727272729 1 0.77272727272727271 1 0.81818181818181823 1 0.86363636363636365 1 0.90909090909090917 1 0.95454545454545459 1 1 4 -7 0 0 3 25 23 18.475208614069 31.570937640369984 18.324936741046884 31.614317393537707 18.02583189678634 31.699039536488499 17.582034030035814 31.819920707780785 17.143661058733407 31.934505377574393 16.711198673371861 32.042714856351729 16.285428984183998 32.144411884591079 15.865558516650029 32.239770622017538 15.449771445308276 32.329168301545529 15.036506556732798 32.412928607566194 14.624067366615918 32.49141387369697 14.211054732427961 32.564881455311294 13.797319916865089 32.633136840310186 13.382556867377549 32.696039138821156 12.966534085818607 32.753433328192962 12.548879171675544 32.805167294662574 12.130319566974197 32.851095228634897 11.711838347635824 32.891071330638454 11.294319445385247 32.924956067036291 10.87879727839791 32.952584890213458 10.465724483502731 32.973901915001584 10.054659998252458 32.989019783902073 9.6453308602526402 32.998019421186171 9.3733895196857464 33.000000000827718 9.2376041557059345 32.999999999999986 - 0 4 0.045454545340384726 1 0.090909090680769453 1 0.13636363602115417 1 0.18181818136153891 1 0.22727272670192364 1 0.27272727204230834 1 0.31818181738269308 1 0.36363636272307781 1 0.40909090806346254 1 0.45454545340384728 1 0.49999999874423201 1 0.54545454408461669 1 0.59090908942500142 1 0.63636363476538615 1 0.68181818010577089 1 0.72727272544615562 1 0.77272727078654035 1 0.81818181612692509 1 0.86363636146730982 1 0.90909090680769455 1 0.95454545214807929 1 0.99999999748846402 4 -7 0 0 3 25 23 3.6651914291754477 21.333333333330057 3.6720734473849976 21.246569799725588 3.685940680514729 21.077081290054593 3.7070105516970031 20.835225296247877 3.7283091287514609 20.606036911017725 3.7497952104620866 20.389702882972927 3.771409170399918 20.186493378853019 3.7931690532684446 19.995920852285899 3.8151505188745873 19.817124176085262 3.8374220077594559 19.649462345805027 3.8600645374170406 19.492337957915641 3.8831482399356743 19.345408730078834 3.9066753640313339 19.208953835733372 3.9306560073030927 19.083191920058969 3.9550953039374837 18.968380913673439 3.9800060749053214 18.864768266826641 4.0053336025262967 18.77279336265056 4.0310027121593377 18.692848387607118 4.0569396708476315 18.62521295572007 4.0830571668017335 18.570096394403741 4.1093010207303031 18.527498634474583 4.1356731270893015 18.497242043808367 4.1621651735855609 18.479192201371539 4.1799031068066226 18.475209408865165 4.1887902142445697 18.4752086140623 - 0 4 0.045454545340384726 1 0.090909090680769453 1 0.13636363602115417 1 0.18181818136153891 1 0.22727272670192364 1 0.27272727204230834 1 0.31818181738269308 1 0.36363636272307781 1 0.40909090806346254 1 0.45454545340384728 1 0.49999999874423201 1 0.54545454408461669 1 0.59090908942500142 1 0.63636363476538615 1 0.68181818010577089 1 0.72727272544615562 1 0.77272727078654035 1 0.81818181612692509 1 0.86363636146730982 1 0.90909090680769455 1 0.95454545214807929 1 0.99999999748846402 4 -1 -3.5527136788005009e-14 6.2831853071795898 1 0 -1 -1.7763568394002505e-14 3.9662353081670743e-16 1 -4.4772594889703341e-17 -7 0 0 1 2 2 33.32312499999891 6.2831853071795898 33.323124999998896 3.14159265358979 - -30.306551630099001 2 0 2 -7 0 0 1 2 2 13.642741459517964 6.2831853071795898 13.642741459518005 3.14159265358979 - -30.306551630099001 2 0 2 -1 13.642741459517914 3.14159265358979 -1 0 -1 13.64274145951792 3.14159265358979 -1 0 -7 0 0 1 2 2 33.323124999998896 3.14159265358979 33.323124999998853 4.233481403045441e-17 - -30.306551630099001 2 0 2 -7 0 0 1 2 2 13.642741459518016 3.14159265358979 13.642741459517993 1.5172403240326306e-18 - -30.306551630099001 2 0 2 -7 0 0 3 25 23 -2.3890275267576899e-12 4.9952265876898974 0.25869941690564074 4.8883084103526846 0.78162099901950388 4.6827406008671559 1.5813117830152821 4.4001965192970829 2.3950841970395089 4.1444927081256573 3.2215957738440215 3.916554562822117 4.0594359732004426 3.7172266705721762 4.9071223895650897 3.5472559424300467 5.7631118609876193 3.407287233485222 6.6258086090784891 3.2978566506126183 7.4935740730740577 3.2193866479515578 8.3647370434954365 3.1721819281995591 9.2376043070332141 3.1564265086866841 10.110471570570995 3.1721819281994712 10.981634540992374 3.2193866479513784 11.849400004987958 3.2978566506123586 12.712096753078839 3.407287233484841 13.568086224501378 3.5472559424295316 14.415772640866049 3.7172266705716117 15.253612840222488 3.9165545628215259 16.080124417027022 4.144492708124857 16.893896831051283 4.4001965192962711 17.693587615047054 4.6827406008662411 18.216509197161042 4.8883084103516978 18.475208614069199 4.9952265876888742 - -18.956696664333101 4 -18.095028634136142 1 -17.233360603939182 1 -16.371692573742223 1 -15.510024543545265 1 -14.648356513348306 1 -13.786688483151346 1 -12.925020452954389 1 -12.063352422757429 1 -11.20168439256047 1 -10.34001636236351 1 -9.4783483321665507 1 -8.6166803019695912 1 -7.7550122717726317 1 -6.893344241575674 1 -6.0316762113787146 1 -5.1700081811817551 1 -4.3083401509847956 1 -3.4466721207878361 1 -2.5850040905908784 1 -1.723336060393919 1 -0.86166803019695948 1 0 4 -7 0 0 3 25 23 0.53576937476125663 -0.88011025505265927 0.54746342566630102 -0.88591983437351896 0.57154356802893747 -0.89720618528155482 0.60973587154034892 -0.91302066945374882 0.6500079153897016 -0.9276043796617065 0.69232646273513376 -0.94083847888053473 0.73662494049855132 -0.95260529587884801 0.78279572407556652 -0.96279111750210045 0.83068809926695641 -0.97129000563879453 0.88010707422240009 -0.97800775169910803 0.93081503600122206 -0.9828658784098846 0.98253618272797627 -0.98580529571767761 1.0349638334248794 -0.98678925872060297 1.0877701957733497 -0.98580529571768083 1.1406178347186726 -0.98286587840989192 1.1931718091578005 -0.97800775169911958 1.245111350467248 -0.97129000563880707 1.2961400702890045 -0.96279111750212021 1.345993907509806 -0.95260529587886777 1.3944465426112906 -0.94083847888055772 1.4413117640737101 -0.92760437966173215 1.4864448263027936 -0.91302066945377769 1.5297366053120189 -0.89720618528158724 1.5573294631177932 -0.88591983437355304 1.5707963267949547 -0.88011025505269447 - -18.956696664333101 4 -18.095028634136142 1 -17.233360603939182 1 -16.371692573742223 1 -15.510024543545265 1 -14.648356513348306 1 -13.786688483151346 1 -12.925020452954389 1 -12.063352422757429 1 -11.20168439256047 1 -10.34001636236351 1 -9.4783483321665507 1 -8.6166803019695912 1 -7.7550122717726317 1 -6.893344241575674 1 -6.0316762113787146 1 -5.1700081811817551 1 -4.3083401509847956 1 -3.4466721207878361 1 -2.5850040905908784 1 -1.723336060393919 1 -0.86166803019695948 1 0 4 -1 18.475208614068986 31.570937640367873 -9.6251567593646358e-15 1 -1 1.1764704937088284e-12 31.570937640367916 -5.8616049388429978e-15 1 -1 -2.0971597869565074e-13 31.570937640370083 -9.0774424748004776e-14 -1 -1 18.475208614067881 31.570937640370101 -4.4783715477601099e-14 -1 -7 0 0 3 25 23 0.53576937476129805 -0.88011025505269302 0.52859822876224083 -0.88367221228043236 0.51418617906665776 -0.89056386095378681 0.49235181335722089 -0.90023398414311873 0.47029482965337788 -0.90926661489590221 0.44800648176819141 -0.91769017609161641 0.42547636857807219 -0.92553202902555698 0.40269223278818966 -0.93281825949604891 0.37963984187971028 -0.93957369190054418 0.35630360479103496 -0.94582166242867105 0.33266426617405964 -0.95158460040737192 0.30870766102676633 -0.95688168064380352 0.28439226036184279 -0.96173743836244818 0.25977060630568755 -0.96614951138621952 0.2349374762628203 -0.97010162957608603 0.20986290072590849 -0.97360986350484036 0.18454908916205204 -0.97668091083046604 0.1589885812747753 -0.97932318110437611 0.13317551235943328 -0.98154378605196102 0.10710265955928756 -0.98334931361679423 0.080762314955908548 -0.98474560467618266 0.054146132960527643 -0.98573777774558058 0.027245313650064565 -0.98633030090508855 0.0091154544925643264 -0.98646121249047358 0 -0.98646127105298764 - 0 4 0.43083401509886232 1 0.86166803019772464 1 1.292502045296587 1 1.7233360603954493 1 2.1541700754943118 1 2.5850040905931739 1 3.015838105692036 1 3.4466721207908986 1 3.8775061358897611 1 4.3083401509886237 1 4.7391741660874853 1 5.1700081811863479 1 5.6008421962852104 1 6.0316762113840721 1 6.4625102264829346 1 6.8933442415817971 1 7.3241782566806597 1 7.7550122717795222 1 8.1858462868783839 1 8.6166803019772473 1 9.047514317076109 1 9.4783483321749706 4 -7 0 0 3 25 23 18.4752086140697 4.9952265876909188 18.316595125836194 4.9296786122263736 18.002366684637035 4.8034672548759021 17.539380238030194 4.6281170353287564 17.084110603489119 4.4660466634403164 16.635918421688284 4.3165691863597067 16.19416417063432 4.1789975919228599 15.758208935204635 4.0526450892486512 15.327411535461408 3.9368240616383945 14.901139243856893 3.8308499743798428 14.478727788098352 3.7340267906336049 14.059630622482903 3.6457014000810362 13.642861839693179 3.5650604884485144 13.229075252279985 3.4918886307615811 12.819522589962197 3.4266257694264635 12.413334117386583 3.3689363584002616 12.010205780733548 3.3186916210377646 11.609681952273274 3.275707377000399 11.211347618383176 3.2398142913246724 10.814776882922013 3.2108390512401219 10.419546765715834 3.1886094098287558 10.025233505240307 3.1729528345710221 9.6314135494052397 3.1636968695001273 9.3689133762912835 3.1616783151928916 9.2376043070340028 3.1616783151929093 - 0 4 0.43083401509886232 1 0.86166803019772464 1 1.292502045296587 1 1.7233360603954493 1 2.1541700754943118 1 2.5850040905931739 1 3.015838105692036 1 3.4466721207908986 1 3.8775061358897611 1 4.3083401509886237 1 4.7391741660874853 1 5.1700081811863479 1 5.6008421962852104 1 6.0316762113840721 1 6.4625102264829346 1 6.8933442415817971 1 7.3241782566806597 1 7.7550122717795222 1 8.1858462868783839 1 8.6166803019772473 1 9.047514317076109 1 9.4783483321749706 4 -1 4.9826809345177753e-13 31.570937640370101 -1.9869875543315681e-13 -1 -1 18.475208614069231 31.570937640369962 -9.9326270447340004e-14 -1 -7 0 0 3 25 23 9.2376043070339975 3.1616783151929093 9.1062952377766244 3.1616783151929271 8.8437950413000284 3.1636968907532914 8.4499749995223912 3.172952934010647 8.0556616213655587 3.1886096163191708 7.6604313740004839 3.2108393761683875 7.2638605147877593 3.2398147287276875 6.8655260838420338 3.2757079030925276 6.4650022000721084 3.318692195973894 6.0618738844560651 3.3689369196950882 5.6556854709007292 3.4266262565137744 5.2461331395287001 3.4918888933383645 4.8323463726707141 3.565060628539916 4.4155803875208779 3.6457003185039305 3.996484219163531 3.7340252393843558 3.5740733939071219 3.8308481393948832 3.1478011354174469 3.9368222104913961 2.7170033867067942 4.0526433976005807 2.2810475160441421 4.1789961900249217 1.8392924713252474 4.3165681465922239 1.3910994566820258 4.4660460036525196 0.93582907167497575 4.6281167179431666 0.47284207791412897 4.803467187128776 0.15861348822656784 4.9296786122283622 -4.2819081613742997e-12 4.9952265876929083 - 0 4 0.43083401509882591 1 0.86166803019765181 1 1.2925020452964777 1 1.7233360603953036 1 2.1541700754941298 1 2.5850040905929554 1 3.0158381056917811 1 3.4466721207906073 1 3.8775061358894334 1 4.3083401509882595 1 4.7391741660870847 1 5.1700081811859109 1 5.600842196284737 1 6.0316762113835622 1 6.4625102264823884 1 6.8933442415812145 1 7.3241782566800406 1 7.7550122717788668 1 8.1858462868776929 1 8.616680301976519 1 9.0475143170753434 1 9.4783483321741695 4 -7 0 0 3 25 23 6.2831853071795898 -0.98646127105298453 6.2740698526855141 -0.98646121249479879 6.2559399919085745 -0.98633030063009786 6.2290391667067402 -0.98573777634365811 6.2024229767529118 -0.98474560157380397 6.1760826234908475 -0.98334930845019941 6.1500097626407282 -0.98154377871282572 6.1241966876242317 -0.97932317182252848 6.0986361765670418 -0.9766809001512532 6.0733223667970586 -0.97360985266199129 6.0482477958036283 -0.97010161939677386 6.0234146863223454 -0.96614950667839272 5.9987930239308627 -0.96173743184494864 5.9744777857326072 -0.95688172064116239 5.9505212337165876 -0.9515846601742981 5.9268819259604948 -0.94582173600747088 5.9035456855170976 -0.93957376890869537 5.8804932709607023 -0.93281833233887912 5.857709097522056 -0.92553209140457082 5.8351789402873955 -0.91769022382915333 5.8128905484628604 -0.90926664611948049 5.7908335269286759 -0.90023399963031947 5.7689991349015095 -0.89056386438376611 5.7545870783640574 -0.88367221230104309 5.7474159324179546 -0.88011025505255736 - 0 4 0.43083401509882591 1 0.86166803019765181 1 1.2925020452964777 1 1.7233360603953036 1 2.1541700754941298 1 2.5850040905929554 1 3.0158381056917811 1 3.4466721207906073 1 3.8775061358894334 1 4.3083401509882595 1 4.7391741660870847 1 5.1700081811859109 1 5.600842196284737 1 6.0316762113835622 1 6.4625102264823884 1 6.8933442415812145 1 7.3241782566800406 1 7.7550122717788668 1 8.1858462868776929 1 8.616680301976519 1 9.0475143170753434 1 9.4783483321741695 4 -7 0 0 3 25 23 2.6058232788281179 -0.88011025505257834 2.5914791673437083 -0.88723286525364897 2.5626863043849961 -0.90055323485621264 2.5191286457408029 -0.91798061693594424 2.4751600784779013 -0.93308312844266594 2.4306964088001495 -0.94606484525977852 2.3856602914180631 -0.95710164913414486 2.3398511530053452 -0.96637693234899202 2.2938078398022608 -0.97382779957136278 2.2474833398585421 -0.97953398050529317 2.2008654783756332 -0.98355379989117553 2.1539308518692293 -0.98593752163089177 2.1066170055127875 -0.98672314646688453 2.0589953354167849 -0.98593751881841452 2.0111396700257318 -0.98355378583690278 1.9629883902478968 -0.97953395192030346 1.9145171134286822 -0.97382777263497422 1.8657132028216588 -0.96637688773472874 1.8165235986441601 -0.95710175438037393 1.7675352924369447 -0.94606506932676937 1.7185482290139951 -0.93308334142478233 1.6694869565389621 -0.91798075464259021 1.6202654547168351 -0.90055327284565712 1.5873149547077954 -0.88723286628181974 1.5707963267949001 -0.88011025505272877 - 0 4 0.86166803019610905 1 1.7233360603922181 1 2.5850040905883271 1 3.4466721207844362 1 4.3083401509805448 1 5.1700081811766543 1 6.0316762113727638 1 6.8933442415688724 1 7.755012271764981 1 8.6166803019610896 1 9.4783483321572 1 10.340016362353309 1 11.201684392549417 1 12.063352422745528 1 12.925020452941636 1 13.786688483137745 1 14.648356513333853 1 15.510024543529962 1 16.371692573726072 1 17.233360603922179 1 18.09502863411829 1 18.9566966643144 4 -7 0 0 3 25 23 18.475208614069 4.9952265876928852 18.157981637603736 4.8641306367638091 17.53552392051192 4.6214782273079731 16.632700020750239 4.3106159388513658 15.75564924709921 4.0473903245931879 14.899154363231917 3.8262429831758729 14.058472397216887 3.6419080126065229 13.227091006102494 3.4880282632625672 12.411845661634342 3.3652166632259148 11.608584577891708 3.2721618959587735 10.814091007068933 3.2074655086078896 10.025049426100079 3.1697524434305304 9.2376043748452883 3.1576411985576858 8.4501589167207065 3.169752653514248 7.6611166190282587 3.2074664305192053 6.8666222393259835 3.2721634741488419 6.0633614739035417 3.3652182099772832 5.2481150738680533 3.4880298172296849 4.4167426323251604 3.6419049795302345 3.5760665387678339 3.8262374066059088 2.7195701428364627 4.0473854015129866 1.8425150882035484 4.3106129782658611 0.93968636240991776 4.6214774654672972 0.31722697646402787 4.8641306367611712 1.9723794078001399e-13 4.9952265876899009 - 0 4 0.86166803019610905 1 1.7233360603922181 1 2.5850040905883271 1 3.4466721207844362 1 4.3083401509805448 1 5.1700081811766543 1 6.0316762113727638 1 6.8933442415688724 1 7.755012271764981 1 8.6166803019610896 1 9.4783483321572 1 10.340016362353309 1 11.201684392549417 1 12.063352422745528 1 12.925020452941636 1 13.786688483137745 1 14.648356513333853 1 15.510024543529962 1 16.371692573726072 1 17.233360603922179 1 18.09502863411829 1 18.9566966643144 4 -1 -5.0093262871087467e-13 31.570937640370101 -1.9863478615673373e-13 -1 -1 18.47520861406873 31.570937640370008 -9.9326270447340257e-14 -1 -7 0 0 3 25 23 3.14159265358979 -0.98646127105298731 3.1324771990957156 -0.98646121249480101 3.1143473383187747 -0.9863303006301003 3.0874465131169395 -0.98573777634366211 3.0608303231631102 -0.98474560157380686 3.034489969901045 -0.98334930845020307 3.0084171090509249 -0.98154377871282783 2.9826040340344284 -0.9793231718225307 2.9570435229772389 -0.97668090015125664 2.9317297132072531 -0.97360985266199396 2.9066551422138232 -0.97010161939677675 2.8818220327325399 -0.96614950667839417 2.8572003703410553 -0.96173743184495275 2.8328851321428026 -0.95688172064116805 2.8089285801267785 -0.95158466017429988 2.785289272370687 -0.94582173600747965 2.7619530319272885 -0.93957376890869682 2.7389006173708919 -0.93281833233888667 2.7161164439322443 -0.92553209140457815 2.693586286697581 -0.91769022382916332 2.6712978948730415 -0.90926664611949071 2.6492408733388539 -0.90023399963033235 2.6274064813116791 -0.89056386438378199 2.6129944247742234 -0.88367221230106163 2.6058232788281179 -0.88011025505257745 - 0 4 0.43083401509882591 1 0.86166803019765181 1 1.2925020452964777 1 1.7233360603953036 1 2.1541700754941298 1 2.5850040905929554 1 3.0158381056917811 1 3.4466721207906073 1 3.8775061358894334 1 4.3083401509882595 1 4.7391741660870847 1 5.1700081811859109 1 5.600842196284737 1 6.0316762113835622 1 6.4625102264823884 1 6.8933442415812145 1 7.3241782566800406 1 7.7550122717788668 1 8.1858462868776929 1 8.616680301976519 1 9.0475143170753434 1 9.4783483321741695 4 -7 0 0 3 25 23 9.2376043070339993 3.1616783151929093 9.1062952377766244 3.1616783151929271 8.8437950413000248 3.1636968907532914 8.4499749995223752 3.1729529340106475 8.0556616213655321 3.1886096163191691 7.6604313740004448 3.2108393761683938 7.2638605147877096 3.239814728727664 6.8655260838419672 3.2757079030926159 6.4650022000720284 3.3186921959739055 6.0618738844559701 3.3689369196951247 5.6556854709006243 3.4266262565137886 5.2461331395285802 3.4918888933384418 4.8323463726705915 3.5650606285399333 4.4155803875207447 3.6457003185039576 3.9964842191633903 3.7340252393844007 3.5740733939069691 3.8308481393948459 3.1478011354172781 3.9368222104914974 2.7170033867066099 4.0526433976005549 2.2810475160439356 4.1789961900249271 1.8392924713250054 4.3165681465922265 1.3910994566817751 4.4660460036525071 0.93582907167458917 4.6281167179432137 0.47284207791405114 4.8034671871287689 0.15861348822555271 4.929678612228348 -6.2811977841192897e-12 4.9952265876929083 - 0 4 0.43083401509882591 1 0.86166803019765181 1 1.2925020452964777 1 1.7233360603953036 1 2.1541700754941298 1 2.5850040905929554 1 3.0158381056917811 1 3.4466721207906073 1 3.8775061358894334 1 4.3083401509882595 1 4.7391741660870847 1 5.1700081811859109 1 5.600842196284737 1 6.0316762113835622 1 6.4625102264823884 1 6.8933442415812145 1 7.3241782566800406 1 7.7550122717788668 1 8.1858462868776929 1 8.616680301976519 1 9.0475143170753434 1 9.4783483321741695 4 -1 -6.3099386639688707e-13 31.570937640370083 -1.0432114828023505e-13 -1 -1 18.475208614067689 31.570937640370101 -5.2269948512662777e-14 -1 -1 0 0 0 1 -1 0 14 1 0 -7 0 0 2 3 2 9.2376043070340597 14.499999999999986 13.856406460550415 14.499999999999977 18.475208614066798 14.499999999999986 - 0 3 9.237604307032738 3 -1 0 0 0 -1 -1 0 0 0 1 -7 0 0 2 3 2 9.2376043070340597 3.1616783151929093 9.2376043070340508 8.8308391575949514 9.2376043070340597 14.499999999999995 - 2.661678315192006 3 14 3 -7 0 0 3 25 23 18.475208614069199 4.9952265876898325 18.157981637604998 4.8641306367610229 17.535523920513921 4.6214782273055004 16.632700020751095 4.3106159388489376 15.755649247099724 4.0473903245907774 14.899154363232043 3.826242983173346 14.058472397216757 3.6419080126037562 13.22709100610216 3.4880282632598569 12.41184566163381 3.3652166632232223 11.608584577891012 3.2721618959559562 10.814091007068093 3.2074655086050519 10.025049426099111 3.1697524434275661 9.2376043748441958 3.1576411985545807 8.4501589167194737 3.1697526535109977 7.6611166190268953 3.2074664305158391 6.8666222393244949 3.2721634741452514 6.0633614739019173 3.3652182099737118 5.2481150738662929 3.4880298172259443 4.4167426323232082 3.6419049795266702 3.5760665387655486 3.8262374066028624 2.7195701428338319 4.0473854015106294 1.8425150882005423 4.3106129782641913 0.93968636240657222 4.6214774654666559 0.31722697646044051 4.8641306367609918 -3.51828368147731e-12 4.9952265876898325 - 0 4 0.86166803019699545 1 1.7233360603939909 1 2.5850040905909863 1 3.4466721207879818 1 4.3083401509849768 1 5.1700081811819727 1 6.0316762113789686 1 6.8933442415759636 1 7.7550122717729586 1 8.6166803019699536 1 9.4783483321669504 1 10.340016362363945 1 11.20168439256094 1 12.063352422757937 1 12.925020452954932 1 13.786688483151927 1 14.648356513348922 1 15.510024543545917 1 16.371692573742912 1 17.233360603939907 1 18.095028634136906 1 18.956696664333901 4 -7 0 0 3 25 23 4.7123889803846897 -0.88011025505271845 4.6958703509389244 -0.88723286525378209 4.6629199410801307 -0.90055323485633854 4.6136987083743133 -0.91798061693607247 4.5646376887623443 -0.93308312844280417 4.5156507271601267 -0.94606484525992984 4.4666620899445508 -0.95710164913431306 4.4174719512945391 -0.96637693234916411 4.3686680999322824 -0.9738277995715402 4.320196805429414 -0.9795339805054758 4.2720455761129354 -0.98355379989136138 4.2241899553587272 -0.98593752163108217 4.1765683098535931 -0.98672314646708126 4.1292544389662496 -0.98593751881861369 4.0823197690478068 -0.98355378583710407 4.0357018601307058 -0.97953395192051051 3.9893773779108339 -0.97382777263517672 3.9433340116700286 -0.9663768877349328 3.8975253709246367 -0.95710175438057155 3.8524895494562452 -0.94606506932693324 3.8080257785819094 -0.93308334142490712 3.7640569788922598 -0.91798075464266515 3.7204990801233344 -0.90055327284568176 3.6917061379686036 -0.88723286628181786 3.6773620283510104 -0.88011025505271745 - 0 4 0.86166803019699545 1 1.7233360603939909 1 2.5850040905909863 1 3.4466721207879818 1 4.3083401509849768 1 5.1700081811819727 1 6.0316762113789686 1 6.8933442415759636 1 7.7550122717729586 1 8.6166803019699536 1 9.4783483321669504 1 10.340016362363945 1 11.20168439256094 1 12.063352422757937 1 12.925020452954932 1 13.786688483151927 1 14.648356513348922 1 15.510024543545917 1 16.371692573742912 1 17.233360603939907 1 18.095028634136906 1 18.956696664333901 4 -1 -1.1385746986109944e-14 31.570937640369984 1.5903019538044899e-13 -1 -1 18.47520861406894 31.570937640370076 8.0075956928614929e-14 -1 -7 0 0 1 2 2 9.2376043070336298 31.070937640370005 9.2376043070322407 4.4952265876900128 - 0 2 26.575711052679001 2 -7 0 0 3 25 23 18.475208614069 4.9952265876928017 18.157981637604266 4.8641306367638801 17.535523920512933 4.6214782273082173 16.632700020751006 4.3106159388515985 15.755649247099997 4.0473903245933585 14.899154363232643 3.8262429831759643 14.058472397217564 3.6419080126066388 13.227091006103112 3.488028263263002 12.411845661634919 3.3652166632264024 11.608584577892259 3.2721618959590706 10.814091007069447 3.207465508608041 10.02504942610058 3.1697524434304225 9.2376043748457786 3.157641198557561 8.4501589167211719 3.1697526535141067 7.6611166190286983 3.2074664305187977 6.8666222393263867 3.2721634741483148 6.063361473903913 3.3652182099766454 5.2481150738683793 3.4880298172289215 4.4167426323254571 3.6419049795299081 3.5760665387680777 3.8262374066056615 2.7195701428366461 4.0473854015128365 1.8425150882036712 4.3106129782657501 0.93968636240995185 4.6214774654672652 0.31722697646403147 4.8641306367611241 1.99747916609408e-13 4.9952265876898174 - 0 4 0.86166803019619553 1 1.7233360603923911 1 2.5850040905885865 1 3.4466721207847821 1 4.3083401509809773 1 5.170008181177173 1 6.0316762113733686 1 6.8933442415695643 1 7.7550122717657599 1 8.6166803019619547 1 9.4783483321581503 1 10.340016362354346 1 11.201684392550542 1 12.063352422746737 1 12.925020452942933 1 13.786688483139129 1 14.648356513335324 1 15.51002454353152 1 16.371692573727714 1 17.233360603923909 1 18.095028634120105 1 18.956696664316301 4 -7 0 0 3 25 23 5.7474159324179546 -0.88011025505255769 5.7330718209335441 -0.88723286525362632 5.7042789579748323 -0.90055323485618854 5.6607212993306364 -0.91798061693592092 5.6167527320677397 -0.93308312844264618 5.5722890623899826 -0.94606484525976242 5.5272529450078949 -0.95710164913413132 5.4814438065951734 -0.9663769323489716 5.4354004933920876 -0.97382779957134435 5.3890759934483707 -0.9795339805052784 5.3424581319654578 -0.98355379989116376 5.2955235054590526 -0.98593752163088511 5.2482096591026117 -0.98672314646688009 5.2005879890066051 -0.98593751881841085 5.1527323236155524 -0.98355378583690467 5.1045810438377117 -0.97953395192031012 5.0561097670184987 -0.97382777263497922 5.0073058564114685 -0.96637688773474018 4.9581162522339719 -0.95710175438037615 4.9091279460267501 -0.94606506932676671 4.8601408826037984 -0.93308334142478266 4.8110796101287603 -0.91798075464258388 4.7618581083066296 -0.90055327284564946 4.7289076082975861 -0.88723286628181042 4.7123889803846897 -0.88011025505271845 - 0 4 0.86166803019619553 1 1.7233360603923911 1 2.5850040905885865 1 3.4466721207847821 1 4.3083401509809773 1 5.170008181177173 1 6.0316762113733686 1 6.8933442415695643 1 7.7550122717657599 1 8.6166803019619547 1 9.4783483321581503 1 10.340016362354346 1 11.201684392550542 1 12.063352422746737 1 12.925020452942933 1 13.786688483139129 1 14.648356513335324 1 15.51002454353152 1 16.371692573727714 1 17.233360603923909 1 18.095028634120105 1 18.956696664316301 4 -1 -3.6415315207705135e-14 -1.9549250605652221e-16 1 -5.838183763538809e-19 -1 -7.5495165674510645e-15 6.2831853071795898 1 0 -7 0 0 1 2 2 13.642741459521591 3.14159265358979 13.642741459521607 6.2831853071795898 - 0 2 30.306551630102199 2 -7 0 0 1 2 2 3.029375000001882 6.2831853071795898 3.02937500000191 3.1415926535897905 - 0 2 30.306551630102199 2 -1 3.0293749999999067 3.14159265358979 1 0 -1 3.029374999999892 3.14159265358979 1 0 -7 0 0 1 2 2 13.6427414595216 4.6491341836794428e-17 13.642741459521609 3.14159265358979 - 0 2 30.306551630102199 2 -7 0 0 1 2 2 3.0293750000018678 3.1415926535897905 3.0293750000018531 2.3154127363185051e-16 - 0 2 30.306551630102199 2 -7 0 0 1 2 2 3.14159265358979 -1.1954143478556996 3.14159265358979 -0.98646127105298742 - -1.1954143478557 2 -0.98636625345342099 2 -7 0 0 1 2 2 3.14159265358979 -1.1954143478557004 3.14159265358979 -0.98646127105298353 - -1.1954143478557 2 -0.98636625345342099 2 -7 0 0 1 2 2 -1.0556594270732704e-16 -1.1954143478556998 -3.8891450677426436e-16 -0.98646127105298809 - -1.1954143478557 2 -0.98636625345342099 2 -7 0 0 1 2 2 6.2831853071795898 -1.1954143478557004 6.2831853071795898 -0.98646127105298465 - -1.1954143478557 2 -0.98636625345342099 2 -7 0 0 1 2 2 2.3451016234094622e-16 -1.1954143478557004 3.14159265358979 -1.1954143478556996 - -33.402073340917298 2 0 2 -7 0 0 1 2 2 15.036215811157469 3.1415926535897905 15.036215811157449 1.30234783290982e-16 - -33.402073340917298 2 0 2 -7 0 0 1 2 2 15.036215811157463 6.2831853071795907 15.036215811157447 3.1415926535897905 - -33.402073340917298 2 0 2 -7 0 0 1 2 2 3.14159265358979 -1.1954143478557004 6.2831853071795898 -1.1954143478557004 - -33.402073340917298 2 0 2 -7 0 0 3 25 23 18.475208614067 4.995226587689924 18.316595125834272 4.929678612225465 18.002366684635877 4.8034672548751676 17.539380238028851 4.6281170353282546 17.084110603487936 4.4660466634399834 16.635918421687165 4.316569186359497 16.194164170633286 4.1789975919228386 15.758208935203669 4.0526450892486077 15.327411535460513 3.9368240616385846 14.901139243856075 3.8308499743798077 14.478727788097594 3.734026790633727 14.059630622482217 3.6457014000810908 13.642861839692557 3.5650604884486832 13.229075252279431 3.4918886307616996 12.819522589961705 3.4266257694265043 12.413334117386148 3.3689363584003202 12.01020578073317 3.3186916210378268 11.609681952272958 3.2757073770004306 11.211347618382909 3.2398142913246524 10.814776882921807 3.2108390512401725 10.419546765715676 3.1886094098287456 10.025233505240202 3.1729528345710145 9.6314135494051847 3.1636968695001659 9.3689133762912657 3.16167831519292 9.2376043070339993 3.1616783151929093 - 0 4 0.43083401509873548 1 0.86166803019747096 1 1.2925020452962064 1 1.7233360603949419 1 2.1541700754936772 1 2.5850040905924128 1 3.0158381056911483 1 3.4466721207898838 1 3.8775061358886194 1 4.3083401509873545 1 4.73917416608609 1 5.1700081811848255 1 5.6008421962835611 1 6.0316762113822966 1 6.4625102264810321 1 6.8933442415797677 1 7.3241782566785032 1 7.7550122717772387 1 8.1858462868759734 1 8.6166803019747089 1 9.0475143170734444 1 9.47834833217218 4 -7 0 0 3 25 23 3.6773620283510104 -0.88011025505271767 3.6701908823519549 -0.88367221228045467 3.6557788326563765 -0.89056386095380557 3.6339444669469416 -0.90023398414313316 3.6118874832431072 -0.90926661489591376 3.5895991353579224 -0.91769017609162529 3.5670690221678081 -0.92553202902556153 3.5442848863779273 -0.93281825949605368 3.5212324954694512 -0.93957369190054374 3.4978962583807807 -0.94582166242867638 3.4742569197638069 -0.95158460040736992 3.4503003146165163 -0.95688168064380552 3.4259849139515968 -0.9617374383624433 3.4013632598954433 -0.96614951138621652 3.3765301298525796 -0.97010162957608348 3.3514555543156708 -0.97360986350483802 3.3261417427518181 -0.97668091083046271 3.3005812348645449 -0.97932318110437289 3.2747681659492054 -0.98154378605195813 3.2486953131490646 -0.98334931361679034 3.2223549685456874 -0.98474560467618044 3.1957387865503111 -0.98573777774557647 3.1688379672398517 -0.98633030090508345 3.1507081080823531 -0.98646121249046825 3.14159265358979 -0.98646127105298254 - 0 4 0.43083401509873548 1 0.86166803019747096 1 1.2925020452962064 1 1.7233360603949419 1 2.1541700754936772 1 2.5850040905924128 1 3.0158381056911483 1 3.4466721207898838 1 3.8775061358886194 1 4.3083401509873545 1 4.73917416608609 1 5.1700081811848255 1 5.6008421962835611 1 6.0316762113822966 1 6.4625102264810321 1 6.8933442415797677 1 7.3241782566785032 1 7.7550122717772387 1 8.1858462868759734 1 8.6166803019747089 1 9.0475143170734444 1 9.47834833217218 4 -7 0 0 3 6 3 9.2376043070308 4.4952265876900128 7.4867880508412101 3.7716912674399907 5.9186472185563197 3.3457329450380087 2.8716654785937301 2.7829528825610055 1.4393764285361299 2.6616783151930008 -5.9778102926845602e-14 2.6616783151930008 - 0 4 4.7556560653514204 2 9.47834833217218 4 -1 7.1054273576010019e-15 6.2831853071795898 1 0 -1 5.3290705182007514e-15 -1.0551888512345641e-16 1 -2.8357960701289468e-18 -1 15.036215811156399 3.14159265358979 -1 0 -1 15.036215811156397 3.14159265358979 -1 0 -1 0 0 1 0 -1 0 0 1 0 -1 10 0 0 -1 -1 0 0 0 1 -1 0 -14 1 0 -1 0 0 1 0 -1 0 0 0 1 -1 0 0 1 0 -1 0 0 1 0 -1 0 10 1 0 -1 10 0 0 1 -1 0 0 1 0 -1 10 0 0 1 -1 0 14 1 0 -1 10 0 0 -1 -1 10 0 0 1 -1 0 0 0 -1 -1 10 0 0 1 -1 0 -14 1 0 -1 0 10 1 0 -Curves 60 -7 1 0 2 3 2 -1.6899474273132399e-07 188.5 -16 1 -9.2376043631552207 188.5 -15.999999902430901 0.86602540642991199 -13.8564064603933 188.5 -8.0000000002733493 1 - -16.755160649836501 3 0 3 -7 1 0 2 3 2 -13.8564064603933 188.5 -8.0000000002733493 1 -18.475208563120798 188.5 -8.86076821103369e-08 0.86602540617259105 -13.8564065371297 188.5 7.9999998673619004 1 - -16.755160666305098 3 0 3 -7 1 0 2 3 2 -13.8564065371297 188.5 7.9999998673619004 1 -9.2376044383051692 188.5 15.999999949482399 0.86602540275852902 -8.7499017896160597e-08 188.5 16 1 - -16.7551608848038 3 0 3 -7 1 0 2 3 2 -8.7499017896160597e-08 188.5 16 1 9.2376042777872502 188.5 16.0000000505175 0.86602540241915105 13.8564064604906 188.5 8.0000000001046203 1 - -16.755160906523901 3 0 3 -7 1 0 2 3 2 13.8564064604906 188.5 8.0000000001046203 1 18.475208563664701 188.5 8.7440811783121106e-08 0.866025406147092 13.856406536216401 188.5 -7.9999998689436103 1 - -16.755160667937599 3 0 3 -7 1 0 2 3 2 13.856406536216401 188.5 -7.9999998689436103 1 9.2376043515896598 188.5 -16.000000097569099 0.86602539877935103 -1.6899474273132399e-07 188.5 -16 1 - -16.755161139473 3 0 3 -7 1 0 2 5 3 -5.7145199266127705e-14 188.5 -11 1 10.999999999999901 188.5 -11 0.70710678118654802 10.999999999999901 188.5 -1.22290247799277e-14 1 10.999999999999901 188.5 11 0.70710678118654802 -5.8492266255332308e-14 188.5 11 1 - -34.557519189487699 3 -17.278759594743899 2 0 3 -7 1 0 2 5 3 -5.8492266255332308e-14 188.5 11 1 -11.000000000000099 188.5 11 0.70710678118654802 -11.000000000000099 188.5 -1.3576091769132301e-14 1 -11.000000000000099 188.5 -11 0.70710678118654802 -5.7145199266127705e-14 188.5 -11 1 - -34.557519189487699 3 -17.278759594743899 2 0 3 -7 0 0 3 14 7 -9.2376043070312495 187.07093764036401 -15.9999999999969 -9.6619348930850695 187.315925018211 -15.265037866219499 -10.1196470402852 187.56074961538999 -14.4719995549902 -10.980912289052901 187.92637547854901 -12.9801832722312 -11.295465785088799 188.048070611898 -12.4365330331587 -11.893610988014199 188.22895502324201 -11.398853532947401 -12.1141594978959 188.28906136723299 -11.017608949137999 -12.543116878905201 188.37770330620501 -10.274871558727 -12.7004700156042 188.40712650832199 -10.001979931618999 -13.010179405331201 188.44922380194299 -9.4656902754713599 -13.123453683865099 188.462946955902 -9.2693230236754491 -13.4202871667809 188.48783949421301 -8.7554507939744894 -13.5966863851631 188.499999998417 -8.4498483717583692 -13.8564064603902 188.49999999999599 -8.0000000002701004 - -1 4 -0.50019885622579097 2 -0.250416226749761 2 -0.12544806337322501 2 -0.0627240316866126 2 -0.0313620158433063 2 0 4 -7 0 0 3 14 7 -1.6899474060238399e-07 188.49999999999599 -15.999999999997399 -0.51961625085060403 188.49999999694199 -15.999999999797399 -0.87270450658171905 188.487822145271 -16.000043749683599 -1.4662299241208301 188.462920145803 -15.999908490637299 -1.6930405435593401 188.44918732612001 -15.9999914520301 -2.3124806341034998 188.40706998816799 -15.9999130059247 -2.62762017754957 188.37762942163701 -16.000079757747599 -3.4843244439086898 188.28906359160399 -15.9999611792704 -3.9241270981108398 188.22904963395999 -15.9996029279992 -5.1220306830115998 188.04818225565401 -16.000445665631101 -5.75055530492582 187.92641181903301 -15.999840654909301 -7.47337392994487 187.560722982366 -15.9998786118199 -8.3889895252278706 187.315911626813 -15.9999999998106 -9.2376043070312495 187.07093764036401 -15.9999999999969 - -0.99999999207186696 4 -0.96862313067442996 2 -0.93724626927699295 2 -0.87449254648211805 2 -0.74971540294607097 2 -0.49977523984822703 2 0 4 -7 0 0 3 8 6 -13.8564065371311 188.5 7.9999998673625798 -14.1554723070353 188.499999997641 7.4820027590838603 -14.7570471013037 188.46157232250999 6.4400446508582698 -15.682950579453999 188.28131332289999 4.8363327837972498 -16.592761960862902 187.99101648823 3.2604932458926301 -17.4982552655981 187.60365002373999 1.69213283617786 -18.144962200549401 187.26160549611001 0.57200356723519197 -18.475208614070102 187.07093764037 -2.9343795601504701e-14 - 9.51828212105803e-09 4 0.20000000000000001 1 0.40000000000000002 1 0.59999999999999998 1 0.80000000000000004 1 1 4 -7 0 0 3 8 6 -18.475208614068901 187.07093764037 6.5500761333996403e-13 -18.1446105243676 187.26180853643501 -0.57261268824715905 -17.497336772395201 187.60410940875599 -1.6937237130690801 -16.591550644755301 187.99147944940501 -3.26259130693238 -15.6816261846692 188.281649903215 -4.8386267028510899 -14.7561739075697 188.46165726236299 -6.4415570667677002 -14.155134256481899 188.50000000019199 -7.4825882798151699 -13.8564064603941 188.5 -8.0000000002723208 - 0 4 0.200000000000708 1 0.400000000001416 1 0.60000000000212395 1 0.800000000002832 1 0.99999999533269202 4 -7 0 0 3 8 6 -8.7499018784336807e-08 188.5 16 -0.59780794473558097 188.49999999951899 16 -1.8004792360542301 188.461553259081 16 -3.6485126691719199 188.28189010875201 16 -5.4719948488588503 187.99127179568799 16 -7.2879765570588297 187.602641311235 16 -8.5790854612275602 187.261035656774 16 -9.2376043070345606 187.07093764037 16 - 6.1487012488430002e-09 4 0.19999999999326101 1 0.39999999999494601 1 0.59999999999663001 1 0.79999999999831495 1 1 4 -7 0 0 3 8 6 -9.23760430703536 187.07093764037 16.000000000000501 -9.5682024341243892 187.261808557048 15.427387246995201 -10.2154762467965 187.60410945497 14.306276117038299 -11.121262408204601 187.99147949462699 12.7374084646867 -12.031186883258 188.28164993214301 11.1613730428439 -12.9566391120803 188.46165726320001 9.5584427625459298 -13.557678734844499 188.49999998907299 8.5174115985563006 -13.8564065371311 188.5 7.9999998673625798 - 0 4 0.20000000000000001 1 0.40000000000000002 1 0.59999999999999998 1 0.80000000000000004 1 1 4 -7 0 0 3 8 6 13.856406460490801 188.5 8.0000000001044906 13.557340672028801 188.49999999370999 8.5179971405263206 12.9557658638655 188.46157232120299 9.5599552728186996 12.0298625094145 188.28131335906801 11.163666925626099 11.1200511173904 187.99101654665299 12.739506481916701 10.2145577708277 187.60365008008199 14.307866964078899 9.5678507646702204 187.26160552115701 15.427996356354299 9.2376043070336298 187.07093764037 16.000000000000501 - 0 4 0.20000000000000001 1 0.40000000000000002 1 0.59999999999999998 1 0.80000000000000004 1 1 4 -7 0 0 3 8 6 9.2376043070326901 187.07093764037 16 8.5794143227467696 187.26094072199899 16 7.2884207761559496 187.60256194474599 16 5.4694096032428998 187.99182103500399 16 3.6440595875901498 188.28245186897001 16 1.79850532534396 188.46162440780401 16 0.59703870671811698 188.49999999289801 16 -8.7499018784336807e-08 188.5 16 - 0 4 0.20000000000000001 1 0.40000000000000002 1 0.59999999999999998 1 0.80000000000000004 1 1 4 -7 0 0 3 8 6 13.856406536216801 188.5 -7.9999998689459701 14.155472363496701 188.49999999311899 -7.48200266128962 14.757047235648701 188.46157230183499 -6.4400444181656598 15.682950607908699 188.28131330916401 -4.8363327345119496 16.592761971538501 187.99101648311699 -3.2604932274018301 17.498255268063001 187.60365002133199 -1.69213283190831 18.144962200701599 187.26160549574999 -0.57200356697130705 18.475208614069899 187.07093764037 2.1162483392849701e-14 - 0 4 0.20000000000000001 1 0.40000000000000002 1 0.59999999999999998 1 0.80000000000000004 1 1 4 -7 0 0 3 8 6 18.475208614068698 187.07093764037 -6.6660187517382201e-13 18.144610520112099 187.26180853889699 0.572612695617705 17.4973367613044 187.60410941431201 1.6937237322785701 16.591550630157801 187.991479454977 3.2625913322157198 15.6816261689037 188.28164990727299 4.8386267301575296 14.7561738950145 188.46165726376199 6.4415570885136297 14.1551342512471 188.50000000015899 7.4825882888817699 13.856406460490801 188.5 8.0000000001044906 - 0 4 0.200000000000607 1 0.400000000001214 1 0.60000000000182097 1 0.80000000000242799 1 0.99999999595137401 4 -7 0 0 3 8 6 -1.6899474095498001e-07 188.5 -16 0.59780778711641003 188.49999999187699 -16 1.8004791214957001 188.46155325645 -16 3.6485123859055899 188.281890136025 -16 5.4719945932921004 187.99127184065199 -16 7.2879763782410301 187.60264135362701 -16 8.5790853935429894 187.26103567549299 -16 9.2376043070334397 187.07093764037 -16 - 0 4 0.20000000000000001 1 0.40000000000000002 1 0.59999999999999998 1 0.80000000000000004 1 1 4 -7 0 0 3 8 6 9.2376043070349905 187.07093764037 -16.000000000000899 9.5682024285152298 187.26180855478799 -15.427387256710301 10.215476233213 187.60410945119401 -14.3062761405654 11.1212623995694 187.991479497141 -12.7374084796432 12.031186876865799 188.281649938009 -11.1613730539153 12.956639086160299 188.461657269651 -9.5584428074403807 13.5576787384657 188.50000000364199 -8.5174115922840308 13.856406536216801 188.5 -7.9999998689459701 - 0 4 0.200000000000573 1 0.40000000000114599 1 0.60000000000172005 1 0.80000000000229299 1 0.99999999748846402 4 -7 0 0 1 2 2 -5.5456007876823904e-14 187.14687499999999 -9.6468750000000103 -5.5124598782320802e-14 188.5 -11 - 13.642741459518 2 15.556349186104001 2 -7 1 0 2 5 3 -5.5456007876823904e-14 187.14687499999999 -9.6468750000000103 1 9.6468749999999392 187.14687499999999 -9.6468750000000103 0.70710678118654802 9.6468749999999392 187.14687499999999 -1.11305146116005e-14 1 9.6468749999999392 187.14687499999999 9.6468749999999908 0.70710678118654802 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 1 - -30.306551630099001 3 -15.153275815049501 2 0 3 -7 0 0 1 2 2 -5.9165799749934603e-14 188.5 11 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 - -1.91360772658609 2 0 2 -7 1 0 2 5 3 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 1 -9.64687500000006 187.14687499999999 9.6468749999999908 0.70710678118654802 -9.64687500000006 187.14687499999999 -1.34932394955065e-14 1 -9.64687500000006 187.14687499999999 -9.6468750000000103 0.70710678118654802 -5.781873276073e-14 187.14687499999999 -9.6468750000000103 1 - -30.306551630099001 3 -15.153275815049501 2 0 3 -7 1 0 2 3 2 -9.2376043070327398 160.49522658769001 -16.000000000002299 1 -13.856406460550801 156.67773119546899 -8.00000000000089 0.924192108888095 -18.475208614069 160.49522658768899 8.93039429819598e-13 1 - -18.956696664333101 3 0 3 -7 0 0 1 2 2 -18.475208614069 160.49522658768899 8.93039429819598e-13 -18.475208614068901 187.07093764037 6.5500761333996403e-13 - -26.575711052679001 2 0 2 -7 0 0 1 2 2 -9.23760430703393 187.07093764037 -16.000000000000199 -9.2376043070327398 160.49522658769001 -16.000000000002299 - 0 2 26.575711052679001 2 -7 0 0 3 6 3 -9.2376043070323899 160.49522658769101 -16.000000000000099 -7.4867880508426703 159.77169126743999 -15.999999999998 -5.9186472185577399 159.34573294503801 -16.0002737969211 -2.8716654785946298 158.78295288256101 -15.9996515532247 -1.4393764285366399 158.661678315193 -15.999999999997801 -5.781873276073e-14 158.661678315193 -15.999999999998 - 0 4 4.7556560653521496 2 9.4783483321749706 4 -7 0 0 1 2 2 9.2376043070334397 187.07093764037 -16 9.2376043070387208 160.49522658769101 -16 - 0 2 26.575711052679001 2 -7 0 0 3 6 3 -5.3899992428498904e-14 158.661678315193 -15.999999999998 1.4392605665437399 158.661678315193 -15.999999999998 2.87143629889494 158.78293463612201 -15.999651332927201 5.9183874681394197 159.345660719525 -16.000273918567999 7.4866480965015496 159.771633430469 -15.999999999998 9.2376043070394491 160.495226587693 -15.9999999999996 - 0 4 4.7223121157159396 2 9.4783483321741695 4 -7 0 0 3 10 5 -9.2376043070399891 160.495226587693 15.999999999998799 -10.112885272549001 159.77179636884301 14.4839688968343 -10.8970837605399 159.34586420154599 13.1262444220978 -12.420064073216601 158.78298604287701 10.487121900931299 -13.1366129740235 158.66167831519601 9.24671888962739 -14.576036743822799 158.66167831519601 6.7535637867129097 -15.2918226554567 158.78293463612499 5.51308888627951 -16.8158374150592 159.34566071952599 2.8746630624448399 -17.599730508797698 159.77163343046701 1.5163725592414601 -18.475208614066901 160.49522658769001 -1.4033801167379e-14 - 0 4 4.7549652544040004 2 9.4783483321530504 2 14.200660447857301 2 18.9566966643144 4 -7 0 0 1 2 2 -9.2376043070345606 187.07093764037 16 -9.2376043070398399 160.49522658769101 16 - 0 2 26.575711052679001 2 -7 0 0 3 6 3 -5.9778102926845602e-14 158.661678315193 15.999999999998 -1.43926056654384 158.661678315193 15.999999999998 -2.8714362988950799 158.78293463612201 15.999651332927201 -5.9183874681396098 159.345660719525 16.000273918567899 -7.4866480965018196 159.771633430469 15.999999999998 -9.2376043070399891 160.495226587693 15.999999999998799 - 0 4 4.7223121157158197 2 9.4783483321741695 4 -7 0 0 1 2 2 9.2376043070336298 187.07093764037 16.000000000000501 9.2376043070322407 160.49522658769001 16.000000000002899 - 0 2 26.575711052679001 2 -1 0 170 16 1 0 -0 -1 0 156 16 -0 1 0 -7 0 0 3 10 5 18.475208614066801 160.49522658769001 -9.5088295959829716e-15 17.599927648553901 159.771796368841 1.5160311031651501 16.816203006086202 159.34586420154301 2.87402915274349 15.292146015393399 158.782986042874 5.5125300535702104 14.5761999470764 158.661678315193 6.7532811103755801 13.136776177276101 158.661678315193 9.2464362132918403 12.420386356560201 158.78293463612201 10.4865624466553 10.897449946919901 159.34566071952401 13.125610856130301 10.1130824122991 159.77163343046701 14.483627440761101 9.2376043070308 160.49522658769001 16.000000000000501 - 0 4 4.75496525441116 2 9.4783483321679096 2 14.200660447879301 2 18.956696664333901 4 -7 0 0 1 2 2 18.475208614069899 187.07093764037 2.1162483392849701e-14 18.4752086140678 160.495226587693 -3.6477826319394899e-12 - 0 2 26.575711052679001 2 -7 0 0 3 10 5 9.2376043070394491 160.495226587693 -15.9999999999996 10.112885272548301 159.77179636884401 -14.483968896835201 10.8970837605392 159.34586420154599 -13.1262444220989 12.420064073215899 158.78298604287801 -10.4871219009323 13.136612974022899 158.66167831519601 -9.2467188896283208 14.5760367438223 158.66167831519601 -6.75356378671363 15.291822655456301 158.782934636124 -5.51308888628009 16.815837415058901 159.34566071952599 -2.8746630624451601 17.599730508797499 159.77163343046701 -1.5163725592416499 18.475208614066801 160.49522658769001 -9.5088295959829716e-15 - 0 4 4.7549652544037597 2 9.4783483321535194 2 14.200660447858599 2 18.956696664316301 4 -7 0 0 1 2 2 -5.5456007876823904e-14 156.853125000001 -9.6468750000000103 -5.5456007876823904e-14 187.14687499999999 -9.6468750000000103 - 3.0293749999999 2 33.323124999998903 2 -7 1 0 2 5 3 -5.9000095202683297e-14 156.85312500000299 -9.6468750000026091 1 9.6468750000025398 156.85312500000299 -9.6468750000026091 0.70710678118654802 9.6468750000025398 156.85312500000299 -1.4674601937460001e-14 1 9.6468750000025398 156.85312500000299 9.6468750000025807 0.70710678118654802 -5.5456007876823305e-14 156.85312500000299 9.6468750000025896 1 - 0 3 15.153275815051099 2 30.306551630102199 3 -7 0 0 1 2 2 -5.9000095202682994e-14 156.853125000001 9.6468749999999908 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 - 0 2 30.293749999999001 2 -7 1 0 2 5 3 -5.781873276073e-14 156.85312500000299 9.6468750000025896 1 -9.6468750000026606 156.85312500000299 9.6468750000025896 0.70710678118654802 -9.6468750000026606 156.85312500000299 -1.2311877053553301e-14 1 -9.6468750000026606 156.85312500000299 -9.6468750000026091 0.70710678118654802 -5.9000095202683297e-14 156.85312500000299 -9.6468750000026091 1 - 0 3 15.153275815051099 2 30.306551630102199 3 -7 1 0 2 3 2 -5.9120759972863608e-14 155.86778983654801 10.6322101634505 1 -5.781873276073e-14 156.983176404012 13.462653430194001 0.99454233337023001 -5.9778102926845602e-14 158.661678315193 15.999999999998 1 - -1.1954143478557 3 -0.98636625345342099 3 -7 1 0 2 3 2 -5.5214678336462703e-14 155.86778983654801 -10.632210163450599 1 -5.4521442574745101e-14 156.983176404012 -13.4626534301941 0.99454233337023001 -5.3899992428498904e-14 158.661678315193 -15.999999999998 1 - -1.1954143478557 3 -0.98636625345342099 3 -7 1 0 2 5 3 -5.781873276073e-14 155.86778983654801 -10.632210163450599 1 -10.632210163450599 155.86778983654801 -10.632210163450599 0.70710678118654802 -10.632210163450599 155.86778983654801 -1.35535718805968e-14 1 -10.632210163450599 155.86778983654801 10.6322101634505 0.70710678118654802 -5.9120759972863608e-14 155.86778983654801 10.6322101634505 1 - -33.402073340917298 3 -16.701036670458599 2 0 3 -7 1 0 2 5 3 -5.9120759972863608e-14 155.86778983654801 10.6322101634505 1 10.6322101634505 155.86778983654801 10.6322101634505 0.70710678118654802 10.6322101634505 155.86778983654801 -1.09495174563295e-14 1 10.6322101634505 155.86778983654801 -10.6322101634505 0.70710678118654802 -5.5214678336462703e-14 155.86778983654801 -10.632210163450599 1 - -33.402073340917298 3 -16.701036670458599 2 0 3 -7 0 0 3 6 3 9.2376043070308 160.49522658769001 16.000000000000501 7.4867880508412101 159.77169126743999 15.999999999998 5.9186472185563197 159.34573294503801 16.000273796921 2.8716654785937301 158.78295288256101 15.9996515532247 1.4393764285361299 158.661678315193 15.9999999999977 -5.9778102926845602e-14 158.661678315193 15.999999999998 - 0 4 4.7556560653514204 2 9.47834833217218 4 -7 0 0 1 2 2 -5.5456007876823305e-14 156.85312500000299 9.6468750000025896 -5.5214678336462103e-14 155.86778983655199 10.632210163452999 - 13.6427414595216 2 15.036215811156399 2 -7 0 0 1 2 2 -5.9120759972863898e-14 155.86778983655199 -10.632210163453101 -5.9000095202683297e-14 156.85312500000299 -9.6468750000026091 - 0 2 1.3934743516347401 2 -1 0 156 16 0 0 1 -1 0 156 26 -0 1 0 -1 0 170 16 0 0 1 -1 0 156 16 1 0 -0 -1 10 156 16 0 0 1 -1 0 156 26 1 0 -0 -1 0 170 26 1 0 -0 -1 10 156 26 0 1 0 -1 10 156 16 -0 1 0 -1 10 170 16 0 0 1 -Polygon3D 0 -PolygonOnTriangulations 0 -Surfaces 27 -9 0 0 0 0 1 1 2 2 2 2 16.32 188.5 16.32 -16.32 188.5 16.32 -16.32 188.5 -16.32 -16.32 188.5 -16.32 - --16.32 2 -16.32 2 - --16.32 2 -16.32 2 - -9 0 1 0 0 2 1 3 2 2 2 -13.8564064603902 188.49999999999599 -8.0000000002701004 1 -16.021435935209201 187.05664701676699 -9.2499803504170597 1 --9.2376043631536096 188.49999999999599 -15.9999999024266 0.86602540642989201 -10.6809573551516 187.05664701676699 -18.4999605873905 0.86602540642989201 --1.6899474273133701e-07 188.49999999999599 -15.999999999995699 1 -1.9539974536018601e-07 187.05664701676699 -18.4999607002046 1 - -2.09439510241284 3 -3.14159264302763 3 - -18.475208614063099 2 -21.361914580521201 2 - -9 0 1 0 0 2 1 3 2 2 2 -13.8564065371261 188.49999999999599 7.9999998673596799 1 -16.021436023936499 187.05664701676599 9.2499801967406601 1 --18.475208563115899 188.49999999999599 -8.8607683436760294e-08 0.86602540617259105 -21.361914521615802 187.05664701676599 -1.0245241502014999e-07 0.86602540617259105 --13.8564064603896 188.49999999999599 -8.0000000002712195 1 -16.0214359352101 187.05664701676599 -9.2499803504192908 1 - -1.0471975607689299 3 -2.0943951024129199 3 - -18.475208614063099 2 -21.361914580523401 2 - -9 0 1 0 0 2 1 3 2 2 2 -5.781873276073e-14 188.49999999999599 15.999999999997399 1 -5.781873276073e-14 187.05664701676699 18.499960700204898 1 --9.2376044091374201 188.49999999999599 15.999999999997399 0.86602540139135598 -10.680957408319401 187.05664701676699 18.499960700204898 0.86602540139135598 --13.8564065371275 188.49999999999599 7.9999998673606001 1 -16.021436023935099 187.05664701676699 9.2499801967399993 1 - -0 3 -1.0471975607689299 3 - -18.475208614065 2 -21.361914580521599 2 - -9 0 1 0 0 2 1 3 2 2 2 13.856406460488101 188.49999999999599 8.0000000001029594 1 16.021435935321101 187.05664701676699 9.2499803502230105 1 -9.2376043069518907 188.49999999999599 15.999999999997099 0.86602540378632298 10.6809572901676 187.05664701676699 18.4999607002046 0.86602540378632298 --5.4266019081929499e-14 188.49999999999599 15.999999999997099 1 -5.4266019081929499e-14 187.05664701676699 18.4999607002046 1 - -5.2359877559905303 3 -6.2831853071795898 3 - -18.475208614064702 2 -21.361914580521201 2 - -9 0 1 0 0 2 1 3 2 2 2 13.8564065362112 188.49999999999699 -7.9999998689427203 1 16.021436022879399 187.05664701676599 -9.2499801985714605 1 -18.4752085636595 188.49999999999699 8.74396070864688e-08 0.86602540614706702 21.3619145222453 187.05664701676599 1.01101832215465e-07 0.86602540614706702 -13.8564064604862 188.49999999999699 8.0000000001021299 1 16.0214359353226 187.05664701676599 9.2499803502242006 1 - -4.1887902142444604 3 -5.2359877559905401 3 - -18.4752086140623 2 -21.361914580523401 2 - -9 0 1 0 0 2 1 3 2 2 2 -1.6899474113794101e-07 188.49999999999699 -15.999999999995 1 -1.9539974531560201e-07 187.05664701676699 -18.499960700205001 1 -9.2376043515867696 188.49999999999699 -16.000000097564101 0.86602539877935203 10.6809573417782 187.05664701676699 -18.499960813019001 0.86602539877935203 -13.8564065362121 188.49999999999699 -7.9999998689411198 1 16.0214360228792 187.05664701676699 -9.2499801985688599 1 - -3.14159264302763 3 -4.1887902142445697 3 - -18.4752086140623 2 -21.361914580521699 2 - -9 1 0 0 0 1 2 2 5 2 3 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 1 9.6468749999999392 187.14687499999999 9.6468749999999908 0.70710678118654802 9.6468749999999392 187.14687499999999 -1.11305146116005e-14 1 9.6468749999999392 187.14687499999999 -9.6468750000000103 0.70710678118654802 -5.5456007876823904e-14 187.14687499999999 -9.6468750000000103 1 --5.9165799749934603e-14 188.5 11 1 10.999999999999901 188.5 11 0.70710678118654802 10.999999999999901 188.5 -1.0881957790723101e-14 1 10.999999999999901 188.5 -11 0.70710678118654802 -5.5124598782320802e-14 188.5 -11 1 - -13.642741459518 2 -15.556349186104001 2 - -3.14159265358979 3 -4.7123889803846897 2 -6.2831853071795898 3 - -9 1 0 0 0 1 2 2 5 2 3 -5.781873276073e-14 187.14687499999999 -9.6468750000000103 1 -9.64687500000006 187.14687499999999 -9.6468750000000103 0.70710678118654802 -9.64687500000006 187.14687499999999 -1.34932394955065e-14 1 -9.64687500000006 187.14687499999999 9.6468749999999908 0.70710678118654802 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 1 --5.781873276073e-14 188.5 -11 1 -11.000000000000099 188.5 -11 0.70710678118654802 -11.000000000000099 188.5 -1.3576091769132301e-14 1 -11.000000000000099 188.5 11 0.70710678118654802 -5.9165799749934603e-14 188.5 11 1 - -13.642741459518 2 -15.556349186104001 2 - -0 3 -1.5707963267949001 2 -3.14159265358979 3 - -9 0 0 0 0 1 1 2 2 2 2 -9.2376043070328606 158.363295098343 -16.0000000000021 -9.2376043070328606 188.79838321684801 -16.0000000000021 --18.475208614069 158.363295098343 8.4330143831639099e-13 -18.475208614069 188.79838321684801 8.4330143831639099e-13 - --2.3890275267576899e-12 2 -18.475208614069199 2 - -2.86329509834288 2 -33.298383216848102 2 - -9 0 0 0 0 1 1 2 2 2 2 9.2376043070382199 158.36329509834201 -16 9.2376043070382199 188.79838321684801 -16 --9.2376043070357508 158.36329509834201 -16 -9.2376043070357508 188.79838321684801 -16 - --4.2819081613742997e-12 2 -18.4752086140697 2 - -2.8632950983418999 2 -33.298383216848102 2 - -9 0 0 0 0 1 1 2 2 2 2 -18.475208614069999 158.36329509835099 1.57910509031091e-13 -18.475208614069999 188.79838321684801 1.57910509031091e-13 --9.2376043070352392 158.36329509835099 16.0000000000007 -9.2376043070352392 188.79838321684801 16.0000000000007 - -1.9723794078001399e-13 2 -18.475208614069 2 - -2.8632950983508798 2 -33.298383216848002 2 - -9 0 0 0 0 1 1 2 2 2 2 -9.2376043070403409 158.36329509834201 16 -9.2376043070403409 188.79838321684801 16 -9.2376043070329406 158.36329509834201 16 9.2376043070329406 188.79838321684801 16 - --6.2811977841192897e-12 2 -18.475208614067 2 - -2.8632950983418999 2 -33.298383216848102 2 - -9 0 0 0 0 1 1 2 2 2 2 9.2376043070321803 158.363295098343 16.000000000002998 9.2376043070321803 188.79838321684801 16.000000000002998 -18.475208614068901 158.363295098343 -8.5134298647144796e-13 18.475208614068901 188.79838321684801 -8.5134298647144796e-13 - --3.51828368147731e-12 2 -18.475208614069199 2 - -2.8632950983428098 2 -33.298383216848102 2 - -9 0 0 0 0 1 1 2 2 2 2 18.4752086140698 158.36329509835099 -1.66086318142271e-13 18.4752086140698 188.79838321684801 -1.66086318142271e-13 -9.2376043070351095 158.36329509835099 -16.0000000000007 9.2376043070351095 188.79838321684801 -16.0000000000007 - -1.99747916609408e-13 2 -18.475208614069 2 - -2.8632950983507901 2 -33.298383216848002 2 - -9 1 0 0 0 1 2 2 5 2 3 -5.9000095202682994e-14 156.853125000001 9.6468749999999908 1 9.6468749999999392 156.853125000001 9.6468749999999908 0.70710678118654802 9.6468749999999392 156.853125000001 -1.11305146116005e-14 1 9.6468749999999392 156.853125000001 -9.6468750000000103 0.70710678118654802 -5.5456007876823904e-14 156.853125000001 -9.6468750000000103 1 --5.9000095202682994e-14 187.14687499999999 9.6468749999999908 1 9.6468749999999392 187.14687499999999 9.6468749999999908 0.70710678118654802 9.6468749999999392 187.14687499999999 -1.11305146116005e-14 1 9.6468749999999392 187.14687499999999 -9.6468750000000103 0.70710678118654802 -5.5456007876823904e-14 187.14687499999999 -9.6468750000000103 1 - -3.0293749999999 2 -33.323124999998903 2 - -3.14159265358979 3 -4.7123889803846897 2 -6.2831853071795898 3 - -9 1 0 0 0 1 2 2 5 2 3 -5.781873276073e-14 156.853125000001 -9.6468750000000103 1 -9.64687500000006 156.853125000001 -9.6468750000000103 0.70710678118654802 -9.64687500000006 156.853125000001 -1.34932394955065e-14 1 -9.64687500000006 156.853125000001 9.6468749999999908 0.70710678118654802 -5.9000095202682994e-14 156.853125000001 9.6468749999999908 1 --5.781873276073e-14 187.14687499999999 -9.6468750000000103 1 -9.64687500000006 187.14687499999999 -9.6468750000000103 0.70710678118654802 -9.64687500000006 187.14687499999999 -1.34932394955065e-14 1 -9.64687500000006 187.14687499999999 9.6468749999999908 0.70710678118654802 -5.9000095202682994e-14 187.14687499999999 9.6468749999999908 1 - -3.0293749999999 2 -33.323124999998903 2 - -0 3 -1.5707963267949001 2 -3.14159265358979 3 - -9 1 1 0 0 2 2 5 3 3 2 -5.781873276073e-14 155.86778983654801 -10.632210163450599 1 -5.781873276073e-14 157.57526700772701 -14.9651628842891 0.98734885448327503 -5.781873276073e-14 160.55359309934801 -18.545600184827599 1 --10.632210163450599 155.86778983654801 -10.632210163450599 0.70710678118654802 -14.9651628842891 157.57526700772701 -14.9651628842891 0.69816107040189401 -18.545600184827698 160.55359309934801 -18.545600184827599 0.70710678118654802 --10.632210163450599 155.86778983654801 -1.35535718805968e-14 1 -14.965162884289199 157.57526700772701 -1.3818879952234401e-14 0.98734885448327503 -18.545600184827698 160.55359309934801 -1.4038111265619501e-14 1 --10.632210163450599 155.86778983654801 10.6322101634505 0.70710678118654802 -14.9651628842891 157.57526700772701 14.9651628842891 0.69816107040189401 -18.545600184827698 160.55359309934801 18.545600184827599 0.70710678118654802 --5.9120759972863608e-14 155.86778983654801 10.6322101634505 1 -5.9651376116138698e-14 157.57526700772701 14.9651628842891 0.98734885448327503 -6.0089838742908903e-14 160.55359309934801 18.545600184827599 1 - -0 3 -1.5707963267949001 2 -3.14159265358979 3 - --1.1954143478557 3 --0.87694411534879602 3 - -9 1 1 0 0 2 2 5 3 3 2 -5.9120759972863608e-14 155.86778983654801 10.6322101634505 1 -5.9651376116138698e-14 157.57526700772701 14.965162884289301 0.98734885448327303 -6.0089838742909004e-14 160.55359309934801 18.545600184828 1 -10.6322101634505 155.86778983654801 10.6322101634505 0.70710678118654802 14.965162884289301 157.57526700772701 14.965162884289301 0.69816107040189201 18.545600184828 160.55359309934801 18.545600184828 0.70710678118654802 -10.6322101634505 155.86778983654801 -1.09495174563295e-14 1 14.965162884289301 157.57526700772701 -1.0153593241416901e-14 0.98734885448327303 18.545600184828 160.55359309934801 -9.4958993012615216e-15 1 -10.6322101634505 155.86778983654801 -10.6322101634505 0.70710678118654802 14.965162884289301 157.57526700772701 -14.9651628842894 0.69816107040189201 18.545600184828 160.55359309934801 -18.545600184828 0.70710678118654802 --5.5214678336462703e-14 155.86778983654801 -10.632210163450599 1 -5.4153446049912504e-14 157.57526700772701 -14.9651628842894 0.98734885448327303 -5.3276520796372e-14 160.55359309934801 -18.545600184828 1 - -3.14159265358979 3 -4.7123889803846897 2 -6.2831853071795898 3 - --1.1954143478557 3 --0.87694411534877703 3 - -1 0 170 16 -0 1 0 0 0 1 1 0 -0 -1 0 156 16 0 0 1 1 0 -0 -0 1 0 -1 0 156 16 1 0 -0 0 0 1 0 -1 0 -9 1 0 0 0 1 2 2 5 2 3 -5.9000095202683297e-14 156.85312500000299 -9.6468750000026091 1 9.6468750000025398 156.85312500000299 -9.6468750000026091 0.70710678118654802 9.6468750000025398 156.85312500000299 -1.4674601937460001e-14 1 9.6468750000025398 156.85312500000299 9.6468750000025807 0.70710678118654802 -5.5456007876823305e-14 156.85312500000299 9.6468750000025896 1 --5.9120759972863898e-14 155.86778983655199 -10.632210163453101 1 10.632210163452999 155.86778983655199 -10.632210163453101 0.70710678118654802 10.632210163452999 155.86778983655199 -1.4855599092730902e-14 1 10.632210163452999 155.86778983655199 10.632210163452999 0.70710678118654802 -5.5214678336462103e-14 155.86778983655199 10.632210163452999 1 - -13.6427414595216 2 -15.036215811156399 2 - -3.14159265358979 3 -4.7123889803846897 2 -6.2831853071795898 3 - -9 1 0 0 0 1 2 2 5 2 3 -5.781873276073e-14 156.85312500000299 9.6468750000025896 1 -9.6468750000026606 156.85312500000299 9.6468750000025896 0.70710678118654802 -9.6468750000026606 156.85312500000299 -1.2311877053553301e-14 1 -9.6468750000026606 156.85312500000299 -9.6468750000026091 0.70710678118654802 -5.9000095202683297e-14 156.85312500000299 -9.6468750000026091 1 --5.781873276073e-14 155.86778983655199 10.632210163452999 1 -10.632210163453101 155.86778983655199 10.632210163452999 0.70710678118654802 -10.632210163453101 155.86778983655199 -1.2251544668463e-14 1 -10.632210163453101 155.86778983655199 -10.632210163453101 0.70710678118654802 -5.9120759972863898e-14 155.86778983655199 -10.632210163453101 1 - -13.6427414595216 2 -15.036215811156399 2 - -0 3 -1.5707963267949001 2 -3.14159265358979 3 - -1 0 156 16 -0 1 0 0 0 1 1 0 -0 -1 0 156 26 0 0 1 1 0 -0 -0 1 0 -1 10 156 16 1 0 -0 0 0 1 0 -1 0 -Triangulations 0 - -TShapes 162 -Ve -0.00101887474091377 --1.68994741490559e-07 188.499999999998 -15.9999999999987 -0 0 - -0101101 -* -Ve -0.00101945420606289 --13.8564064603918 188.499999999998 -8.00000000027175 -0 0 - -0101101 -* -Ve -0.000132271730073168 --13.856406537129 188.499999999998 7.99999986736143 -0 0 - -0101101 -* -Ve -0.000124822562864799 --6.56242771191596e-08 188.499999999998 15.9999999999987 -0 0 - -0101101 -* -Ve -0.000132274852430505 -13.8564064604894 188.499999999998 8.00000000010381 -0 0 - -0101101 -* -Ve -0.000132274979104587 -13.8564065362141 188.499999999998 -7.99999986894336 -0 0 - -0101101 -* -Ve -1e-07 --5.66961769363928e-14 188.5 -11 -0 0 - -0101101 -* -Ve -1e-07 --5.89412885850672e-14 188.5 11 -0 0 - -0101101 -* -Ve -0.00101945420606289 --9.2376043070327 187.070937640368 -15.9999999999991 -0 0 - -0101101 -* -Ve -0.000132274833331127 --18.4752086140683 187.070937640368 4.05022751278259e-13 -0 0 - -0101101 -* -Ve -0.000132271730073168 --9.23760430703383 187.070937640368 15.9999999999991 -0 0 - -0101101 -* -Ve -0.000131016747946298 -9.23760430703259 187.070937640368 15.9999999999991 -0 0 - -0101101 -* -Ve -0.000132274852430505 -18.4752086140681 187.070937640368 -4.15682084080973e-13 -0 0 - -0101101 -* -Ve -0.000132274979104587 -9.23760430703371 187.070937640368 -15.9999999999992 -0 0 - -0101101 -* -Ve -1e-07 --5.6637370318777e-14 187.146875 -9.64687500000001 -0 0 - -0101101 -* -Ve -1e-07 --5.9000095202683e-14 187.146875 9.64687499999999 -0 0 - -0101101 -* -Ve -0.00253376022067066 --9.23760430703367 160.49522658769 -16.0000000000007 -0 0 - -0101101 -* -Ve -0.00251193483793568 --18.475208614068 160.495226587691 1.38193580935176e-12 -0 0 - -0101101 -* -Ve -0.00434259808337677 -1.87152441082e-12 158.661678315192 -15.9999999999988 -0 0 - -0101101 -* -Ve -0.00253415414004197 -9.23760430703761 160.495226587693 -16.0000000000001 -0 0 - -0101101 -* -Ve -0.00253415414021872 --9.23760430703885 160.495226587692 15.9999999999993 -0 0 - -0101101 -* -Ve -0.00434259808336204 --2.46309739997203e-12 158.661678315192 15.999999999999 -0 0 - -0101101 -* -Ve -5.000001e-06 -9.23760430703274 170 16.000000000001 -0 0 - -0101101 -* -Ve -5.000001e-06 -0 170 16 -0 0 - -0101101 -* -Ve -0.00251193483784215 -18.4752086140678 160.495226587691 -1.39664508011873e-12 -0 0 - -0101101 -* -Ve -0.00253376022027958 -9.23760430703195 160.49522658769 16.0000000000012 -0 0 - -0101101 -* -Ve -1e-07 --5.78187327607302e-14 156.853125000002 -9.64687500000131 -0 0 - -0101101 -* -Ve -1e-07 --5.78187327607298e-14 156.853125000002 9.64687500000129 -0 0 - -0101101 -* -Ve -0.00434259808336204 --5.73847236900186e-14 155.867789836551 10.6322101634522 -0 0 - -0101101 -* -Ve -0.00434259808337677 --5.74467249858348e-14 155.86778983655 -10.632210163452 -0 0 - -0101101 -* -Ve -1e-07 -0 156 26 -0 0 - -0101101 -* -Ve -1e-07 -0 156 16 -0 0 - -0101101 -* -Ve -1e-07 -0 170 26 -0 0 - -0101101 -* -Ve -1e-07 -10 156 16 -0 0 - -0101101 -* -Ve -1e-07 -10 156 26 -0 0 - -0101101 -* -Ve -1e-07 -10 170 26 -0 0 - -0101101 -* -Ve -1e-07 -10 170 16 -0 0 - -0101101 -* -Ed - 1e-07 1 1 0 -1 1 0 -16.7551606498365 0 -2 1 1 0 -16.7551606498365 0 -2 2 2 0 -16.7551606498365 0 -0 - -0101000 -+162 0 -161 0 * -Ed - 1e-07 1 1 0 -1 2 0 -16.7551606663051 0 -2 3 1 0 -16.7551606663051 0 -2 4 3 0 -16.7551606663051 0 -0 - -0101000 -+161 0 -160 0 * -Ed - 1e-07 1 1 0 -1 3 0 -16.7551608848038 0 -2 5 1 0 -16.7551608848038 0 -2 6 4 0 -16.7551608848038 0 -0 - -0101000 -+160 0 -159 0 * -Ed - 1e-07 1 1 0 -1 4 0 -16.7551609065239 0 -2 7 1 0 -16.7551609065239 0 -2 8 5 0 -16.7551609065239 0 -0 - -0101000 -+159 0 -158 0 * -Ed - 1e-07 1 1 0 -1 5 0 -16.7551606679376 0 -2 9 1 0 -16.7551606679376 0 -2 10 6 0 -16.7551606679376 0 -0 - -0101000 -+158 0 -157 0 * -Ed - 1e-07 1 1 0 -1 6 0 -16.755161139473 0 -2 11 1 0 -16.755161139473 0 -2 12 7 0 -16.755161139473 0 -0 - -0101000 -+157 0 -162 0 * -Ed - 1e-07 1 1 0 -1 7 0 -34.5575191894877 0 -2 13 1 0 -34.5575191894877 0 -2 14 8 0 -34.5575191894877 0 -0 - -0101000 -+156 0 -155 0 * -Ed - 1e-07 1 1 0 -1 8 0 -34.5575191894877 0 -2 15 1 0 -34.5575191894877 0 -2 16 9 0 -34.5575191894877 0 -0 - -0101000 -+155 0 -156 0 * -Ed - 0.00101945420606289 1 1 0 -1 9 0 -1 0 -2 17 2 0 -1 0 -2 18 10 0 -1 0 -0 - -0101000 -+154 0 -161 0 * -Ed - 0.00101887474091377 1 1 0 -1 10 0 -0.999999992071867 0 -2 19 2 0 -0.999999992071867 0 -2 20 11 0 -0.999999992071867 0 -0 - -0101000 -+162 0 -154 0 * -Ed - 0.00013101794426405 1 1 0 -1 11 0 9.51828212105803e-09 1 -2 21 12 0 9.51828212105803e-09 1 -2 22 3 0 9.51828212105803e-09 1 -0 - -0101000 -+160 0 -153 0 * -Ed - 0.000132274833331127 1 1 0 -1 12 0 0 0.999999995332692 -2 23 10 0 0 0.999999995332692 -2 24 3 0 0 0.999999995332692 -0 - -0101000 -+153 0 -161 0 * -Ed - 0.000124822562864799 1 1 0 -1 13 0 6.148701248843e-09 1 -2 25 13 0 6.148701248843e-09 1 -2 26 4 0 6.148701248843e-09 1 -0 - -0101000 -+159 0 -152 0 * -Ed - 0.000132271730073168 1 1 0 -1 14 0 0 1 -2 27 12 0 0 1 -2 28 4 0 0 1 -0 - -0101000 -+152 0 -160 0 * -Ed - 0.000131016747946298 1 1 0 -1 15 0 0 1 -2 29 14 0 0 1 -2 30 5 0 0 1 -0 - -0101000 -+158 0 -151 0 * -Ed - 0.000122345487373479 1 1 0 -1 16 0 0 1 -2 31 13 0 0 1 -2 32 5 0 0 1 -0 - -0101000 -+151 0 -159 0 * -Ed - 0.000131017175718614 1 1 0 -1 17 0 0 1 -2 33 15 0 0 1 -2 34 6 0 0 1 -0 - -0101000 -+157 0 -150 0 * -Ed - 0.000132274852430505 1 1 0 -1 18 0 0 0.999999995951374 -2 35 14 0 0 0.999999995951374 -2 36 6 0 0 0.999999995951374 -0 - -0101000 -+150 0 -158 0 * -Ed - 0.000124819562999264 1 1 0 -1 19 0 0 1 -2 37 11 0 0 1 -2 38 7 0 0 1 -0 - -0101000 -+162 0 -149 0 * -Ed - 0.000132274979104587 1 1 0 -1 20 0 0 0.999999997488464 -2 39 15 0 0 0.999999997488464 -2 40 7 0 0 0.999999997488464 -0 - -0101000 -+149 0 -157 0 * -Ed - 1e-07 1 1 0 -1 21 0 13.642741459518 15.556349186104 -2 41 8 0 13.642741459518 15.556349186104 -2 42 9 0 13.642741459518 15.556349186104 -4 G1 8 0 9 0 -0 - -0101000 -+148 0 -156 0 * -Ed - 1e-07 1 1 0 -1 22 0 -30.306551630099 0 -2 43 16 0 -30.306551630099 0 -2 44 8 0 -30.306551630099 0 -0 - -0101000 -+148 0 -147 0 * -Ed - 1e-07 1 1 0 -1 23 0 -1.91360772658609 0 -2 45 8 0 -1.91360772658609 0 -2 46 9 0 -1.91360772658609 0 -4 G1 8 0 9 0 -0 - -0101000 -+155 0 -147 0 * -Ed - 1e-07 1 1 0 -1 24 0 -30.306551630099 0 -2 47 17 0 -30.306551630099 0 -2 48 9 0 -30.306551630099 0 -0 - -0101000 -+147 0 -148 0 * -Ed - 1e-07 1 1 0 -1 25 0 -18.9566966643331 0 -2 49 10 0 -18.9566966643331 0 -2 50 18 0 -18.9566966643331 0 -0 - -0101000 -+146 0 -145 0 * -Ed - 1e-07 1 1 0 -1 26 0 -26.575711052679 0 -2 51 10 0 -26.575711052679 0 -2 52 12 0 -26.575711052679 0 -0 - -0101000 -+145 0 -153 0 * -Ed - 1e-07 1 1 0 -1 27 0 0 26.575711052679 -2 53 10 0 0 26.575711052679 -2 54 11 0 0 26.575711052679 -0 - -0101000 -+154 0 -146 0 * -Ed - 0.00253376022067066 1 1 0 -1 28 0 0 9.47834833217497 -2 55 18 0 0 9.47834833217497 -2 56 11 0 0 9.47834833217497 -0 - -0101000 -+146 0 -144 0 * -Ed - 1e-07 1 1 0 -1 29 0 0 26.575711052679 -2 57 11 0 0 26.575711052679 -2 58 15 0 0 26.575711052679 -0 - -0101000 -+149 0 -143 0 * -Ed - 0.00253415414004197 1 1 0 -1 30 0 0 9.47834833217417 -2 59 11 0 0 9.47834833217417 -2 60 19 0 0 9.47834833217417 -0 - -0101000 -+144 0 -143 0 * -Ed - 0.00251193483793568 1 1 0 -1 31 0 0 18.9566966643144 -2 61 18 0 0 18.9566966643144 -2 62 12 0 0 18.9566966643144 -0 - -0101000 -+142 0 -145 0 * -Ed - 1e-07 1 1 0 -1 32 0 0 26.575711052679 -2 63 13 0 0 26.575711052679 -2 64 12 0 0 26.575711052679 -0 - -0101000 -+152 0 -142 0 * -Ed - 0.00253415414021872 1 1 0 -1 33 0 0 9.47834833217417 -2 65 18 0 0 9.47834833217417 -2 66 13 0 0 9.47834833217417 -0 - -0101000 -+141 0 -142 0 * -Ed - 1e-07 1 1 0 -1 34 0 0 17.0709376403693 -2 67 14 0 0 17.0709376403693 -2 68 13 0 0 17.0709376403693 -0 - -0101000 -+151 0 -140 0 * -Ed - 1.00000001776357e-07 1 1 0 -1 35 0 0 9.23760430703274 -2 69 20 0 0 9.23760430703274 -2 70 21 0 0 9.23760430703274 -2 71 13 0 0 9.23760430703274 -0 - -0101000 -+139 0 -140 0 * -Ed - 1e-07 1 1 0 -1 36 0 2.66167831519201 14 -2 72 22 0 2.66167831519201 14 -2 73 21 0 2.66167831519201 14 -2 74 13 0 2.66167831519201 14 -0 - -0101000 -+141 0 -139 0 * -Ed - 0.00251193483784215 1 1 0 -1 37 0 0 18.9566966643339 -2 75 14 0 0 18.9566966643339 -2 76 19 0 0 18.9566966643339 -0 - -0101000 -+138 0 -137 0 * -Ed - 1e-07 1 1 0 -1 38 0 0 26.575711052679 -2 77 15 0 0 26.575711052679 -2 78 14 0 0 26.575711052679 -0 - -0101000 -+150 0 -138 0 * -Ed - 1.00002827960088e-07 1 1 0 -1 34 0 17.0709376403693 26.575711052679 -2 67 14 0 17.0709376403693 26.575711052679 -2 68 13 0 17.0709376403693 26.575711052679 -2 79 21 0 17.0709376403693 26.575711052679 -0 - -0101000 -+140 0 -137 0 * -Ed - 0.0025119348377908 1 1 0 -1 39 0 0 18.9566966643163 -2 80 15 0 0 18.9566966643163 -2 81 19 0 0 18.9566966643163 -0 - -0101000 -+143 0 -138 0 * -Ed - 1e-07 1 1 0 -1 40 0 3.0293749999999 33.3231249999989 -2 82 17 0 3.0293749999999 33.3231249999989 -2 83 16 0 3.0293749999999 33.3231249999989 -4 G1 17 0 16 0 -0 - -0101000 -+136 0 -148 0 * -Ed - 1e-07 1 1 0 -1 41 0 0 30.3065516301022 -2 84 23 0 0 30.3065516301022 -2 85 16 0 0 30.3065516301022 -0 - -0101000 -+136 0 -135 0 * -Ed - 1e-07 1 1 0 -1 42 0 0 30.293749999999 -2 86 17 0 0 30.293749999999 -2 87 16 0 0 30.293749999999 -4 G1 17 0 16 0 -0 - -0101000 -+135 0 -147 0 * -Ed - 1e-07 1 1 0 -1 43 0 0 30.3065516301022 -2 88 24 0 0 30.3065516301022 -2 89 17 0 0 30.3065516301022 -0 - -0101000 -+135 0 -136 0 * -Ed - 0.00434259808336204 1 1 0 -1 44 0 -1.1954143478557 -0.986366253453421 -2 90 18 0 -1.1954143478557 -0.986366253453421 -2 91 19 0 -1.1954143478557 -0.986366253453421 -4 G1 18 0 19 0 -0 - -0101000 -+134 0 -141 0 * -Ed - 0.00434259808337677 1 1 0 -1 45 0 -1.1954143478557 -0.986366253453421 -2 92 18 0 -1.1954143478557 -0.986366253453421 -2 93 19 0 -1.1954143478557 -0.986366253453421 -4 G1 18 0 19 0 -0 - -0101000 -+133 0 -144 0 * -Ed - 1e-07 1 1 0 -1 46 0 -33.4020733409173 0 -2 94 18 0 -33.4020733409173 0 -2 95 24 0 -33.4020733409173 0 -0 - -0101000 -+133 0 -134 0 * -Ed - 1e-07 1 1 0 -1 47 0 -33.4020733409173 0 -2 96 23 0 -33.4020733409173 0 -2 97 19 0 -33.4020733409173 0 -0 - -0101000 -+134 0 -133 0 * -Ed - 0.00253376022027958 1 1 0 -1 48 0 0 9.47834833217218 -2 98 13 0 0 9.47834833217218 -2 99 19 0 0 9.47834833217218 -2 100 21 0 0 9.47834833217218 -0 - -0101000 -+137 0 -141 0 * -Ed - 1e-07 1 1 0 -1 49 0 13.6427414595216 15.0362158111564 -2 101 23 0 13.6427414595216 15.0362158111564 -2 102 24 0 13.6427414595216 15.0362158111564 -4 G1 23 0 24 0 -0 - -0101000 -+135 0 -134 0 * -Ed - 1e-07 1 1 0 -1 50 0 0 1.39347435163474 -2 103 23 0 0 1.39347435163474 -2 104 24 0 0 1.39347435163474 -4 G1 23 0 24 0 -0 - -0101000 -+133 0 -136 0 * -Ed - 1e-07 1 1 0 -1 51 0 0 10 -2 105 22 0 0 10 -2 106 25 0 0 10 -0 - -0101000 --132 0 +131 0 * -Ed - 1e-07 1 1 0 -1 52 0 0 14 -2 107 22 0 0 14 -2 108 26 0 0 14 -0 - -0101000 --130 0 +132 0 * -Ed - 1e-07 1 1 0 -1 36 0 0 2.66167831519201 -2 72 22 0 0 2.66167831519201 -2 73 21 0 0 2.66167831519201 -0 - -0101000 -+131 0 -141 0 * -Ed - 1e-07 1 1 0 -1 53 0 0 10 -2 109 22 0 0 10 -2 110 20 0 0 10 -0 - -0101000 --130 0 +139 0 * -Ed - 1e-07 1 1 0 -1 54 0 0 10 -2 111 25 0 0 10 -2 112 21 0 0 10 -0 - -0101000 --129 0 +131 0 * -Ed - 1e-07 1 1 0 -1 55 0 0 10 -2 113 27 0 0 10 -2 114 25 0 0 10 -0 - -0101000 --128 0 +129 0 * -Ed - 1e-07 1 1 0 -1 56 0 0 10 -2 115 25 0 0 10 -2 116 26 0 0 10 -0 - -0101000 --128 0 +132 0 * -Ed - 1e-07 1 1 0 -1 57 0 0 10 -2 117 20 0 0 10 -2 118 26 0 0 10 -0 - -0101000 --127 0 +130 0 * -Ed - 1e-07 1 1 0 -1 58 0 0 14 -2 119 27 0 0 14 -2 120 26 0 0 14 -0 - -0101000 --127 0 +128 0 * -Ed - 1e-07 1 1 0 -1 35 0 9.23760430703274 10 -2 69 20 0 9.23760430703274 10 -2 70 21 0 9.23760430703274 10 -0 - -0101000 -+140 0 -126 0 * -Ed - 1e-07 1 1 0 -1 59 0 0 14 -2 121 27 0 0 14 -2 122 21 0 0 14 -0 - -0101000 --126 0 +129 0 * -Ed - 1e-07 1 1 0 -1 60 0 0 10 -2 123 27 0 0 10 -2 124 20 0 0 10 -0 - -0101000 --127 0 +126 0 * -Wi - -0101100 -+125 0 +124 0 +123 0 +122 0 +121 0 +120 0 * -Wi - -0101100 -+119 0 +118 0 * -Wi - -0101100 -+117 0 -125 0 +116 0 * -Wi - -0101100 --115 0 -124 0 -114 0 * -Wi - -0101100 --113 0 -123 0 -112 0 * -Wi - -0101100 --111 0 -122 0 -110 0 * -Wi - -0101100 --109 0 -121 0 -108 0 * -Wi - -0101100 --107 0 -120 0 -106 0 * -Wi - -0101100 --105 0 +104 0 -103 0 -119 0 * -Wi - -0101100 -+103 0 +102 0 +105 0 -118 0 * -Wi - -0101100 -+101 0 +100 0 +114 0 -117 0 +99 0 * -Wi - -0101100 --98 0 -99 0 -116 0 +107 0 +97 0 -96 0 * -Wi - -0101100 --95 0 -94 0 +112 0 +115 0 -100 0 * -Wi - -0101100 --93 0 +94 0 +113 0 +110 0 -92 0 +91 0 +90 0 * -Wi - -0101100 --89 0 -88 0 +87 0 +108 0 +92 0 +111 0 * -Wi - -0101100 --86 0 -97 0 +106 0 +109 0 +88 0 * -Wi - -0101100 --85 0 +84 0 +83 0 -104 0 * -Wi - -0101100 -+85 0 -102 0 -83 0 +82 0 * -Wi - -0101100 -+81 0 +93 0 +95 0 -101 0 +98 0 -80 0 +79 0 * -Wi - -0101100 -+78 0 -81 0 +80 0 +77 0 +96 0 +89 0 +86 0 * -Wi - -0101100 --77 0 -90 0 -91 0 -87 0 * -Wi - -0101100 --76 0 -84 0 -75 0 -78 0 * -Wi - -0101100 -+75 0 -82 0 +76 0 -79 0 * -Wi - -0101100 --74 0 -73 0 +72 0 +71 0 +90 0 * -Wi - -0101100 --70 0 -69 0 +68 0 +74 0 * -Wi - -0101100 --73 0 -67 0 +66 0 +68 0 * -Wi - -0101100 --72 0 +77 0 +87 0 -65 0 +64 0 +70 0 * -Wi - -0101100 --91 0 +71 0 -65 0 +67 0 -63 0 * -Wi - -0101100 --69 0 -66 0 +63 0 +64 0 * -Fa -0 1e-07 1 0 - -0111000 -+62 0 +61 0 * -Fa -0 1e-07 2 0 - -0111000 -+60 0 * -Fa -0 1e-07 3 0 - -0111000 -+59 0 * -Fa -0 1e-07 4 0 - -0111000 -+58 0 * -Fa -0 1e-07 5 0 - -0111000 -+57 0 * -Fa -0 1e-07 6 0 - -0111000 -+56 0 * -Fa -0 1e-07 7 0 - -0111000 -+55 0 * -Fa -0 1e-07 8 0 - -0111000 -+54 0 * -Fa -0 1e-07 9 0 - -0111000 -+53 0 * -Fa -0 1e-07 10 0 - -0111000 -+52 0 * -Fa -0 1e-07 11 0 - -0111000 -+51 0 * -Fa -0 1e-07 12 0 - -0111000 -+50 0 * -Fa -0 1e-07 13 0 - -0111000 -+49 0 * -Fa -0 1e-07 14 0 - -0111000 -+48 0 * -Fa -0 1e-07 15 0 - -0111000 -+47 0 * -Fa -0 1e-07 16 0 - -0111000 -+46 0 * -Fa -0 1e-07 17 0 - -0111000 -+45 0 * -Fa -0 1e-07 18 0 - -0111000 -+44 0 * -Fa -0 1e-07 19 0 - -0111000 -+43 0 * -Fa -0 1e-07 13 0 - -0111000 -+42 0 * -Fa -0 1e-07 23 0 - -0111000 -+41 0 * -Fa -0 1e-07 24 0 - -0111000 -+40 0 * -Fa -0 1e-07 22 0 - -0111000 -+39 0 * -Fa -0 1e-07 25 0 - -0111000 -+38 0 * -Fa -0 1e-07 26 0 - -0111000 -+37 0 * -Fa -0 1e-07 21 0 - -0111000 -+36 0 * -Fa -0 1e-07 20 0 - -0111000 -+35 0 * -Fa -0 1e-07 27 0 - -0111000 -+34 0 * -Sh - -0101100 -+33 0 +32 0 +31 0 +30 0 +29 0 +28 0 +27 0 +26 0 +25 0 +24 0 -+23 0 +22 0 +21 0 +20 0 +19 0 +18 0 +17 0 +16 0 +15 0 +14 0 -+13 0 +12 0 * -Sh - -0101100 --11 0 -10 0 +9 0 -8 0 +7 0 -14 0 +6 0 * -So - -0100000 -+5 0 * -So - -0100000 -+4 0 * -Co - -1100000 -+162 0 -161 0 -160 0 -159 0 -158 0 -157 0 +156 0 -155 0 +154 0 +153 0 -+152 0 +151 0 +150 0 +149 0 -148 0 -147 0 +146 0 -145 0 +144 0 -143 0 --142 0 -141 0 +140 0 +139 0 -138 0 +137 0 -136 0 -135 0 +134 0 -133 0 --132 0 +131 0 -130 0 -129 0 -128 0 +127 0 -126 0 +125 0 +124 0 +123 0 -+122 0 +121 0 +120 0 +119 0 +118 0 +117 0 +116 0 -115 0 -114 0 -113 0 --112 0 -111 0 -110 0 -109 0 -108 0 -107 0 -106 0 -105 0 +104 0 -103 0 -+102 0 +101 0 +100 0 +99 0 -98 0 +97 0 -96 0 -95 0 -94 0 -93 0 --92 0 +91 0 +90 0 -89 0 -88 0 +87 0 -86 0 -85 0 +84 0 +83 0 -+82 0 +81 0 -80 0 +79 0 +78 0 +77 0 -76 0 -75 0 +74 0 +73 0 --72 0 -71 0 +70 0 +69 0 -68 0 -67 0 +66 0 +65 0 -64 0 -63 0 -+62 0 +61 0 +60 0 +59 0 +58 0 +57 0 +56 0 +55 0 +54 0 +53 0 -+52 0 +51 0 +50 0 +49 0 +48 0 +47 0 +46 0 +45 0 +44 0 +43 0 -+42 0 +41 0 +40 0 -39 0 -38 0 +37 0 -36 0 +35 0 +34 0 +33 0 -+32 0 +31 0 +30 0 +29 0 +28 0 +27 0 +26 0 +25 0 +24 0 +23 0 -+22 0 +21 0 +20 0 +19 0 +18 0 +17 0 +16 0 +15 0 +14 0 +13 0 -+12 0 -11 0 -10 0 +9 0 -8 0 +7 0 +6 0 +5 0 +4 0 +3 0 -+2 0 * - -+1 0 \ No newline at end of file diff --git a/demos/boolean/pipe.geo b/demos/boolean/pipe.geo index 052ed3903426afb28fd1f0d5f05e3158698ae6a4..2d0b3a62b6d3261eefe56f656cae64202a70452d 100644 --- a/demos/boolean/pipe.geo +++ b/demos/boolean/pipe.geo @@ -1,44 +1,26 @@ SetFactory("OpenCASCADE"); -Mesh.Algorithm = 6; -Mesh.CharacteristicLengthMin = 0.2; -Mesh.CharacteristicLengthMax = 0.2; - -Point(1) = {0,0,0}; -Point(2) = {1,0,0}; -Point(3) = {1,1,0}; -Point(4) = {0,1,0}; -Line(1) = {1,2}; -Line(2) = {2,3}; -Line(3) = {3,4}; -Line(4) = {4,1}; -Line Loop(1) = {1,2,3,4}; -Plane Surface(1) = {1}; - -Point(5) = {0.2,0.2,0}; -Point(6) = {0.5,0.2,0}; -Point(7) = {0.5,0.5,0}; -Point(8) = {0.2,0.5,0}; -Line(5) = {5,6}; -Line(6) = {6,7}; -Line(7) = {7,8}; -Line(8) = {8,5}; -Line Loop(2) = {5,6,7,8}; -Plane Surface(2) = {2}; - -Disk(3) = {0.6, 0.6, 0, 0.5, 0.3}; - -BooleanFragments{ Surface{1}; Delete; }{ Surface{2:3}; Delete; } - -For i In {0:5} - Point(100+i) = {-0.1, Sin(i/9*2*Pi), i}; +Mesh.CharacteristicLengthMin = 0.1; +Mesh.CharacteristicLengthMax = 0.1; +Geometry.NumSubEdges = 100; // nicer display of curve + +nturns = DefineNumber[ 1, Min 0.1, Max 1, Step 0.01, Name "Parameters/Turn" ]; +npts = 20; +r = 1; +rd = 0.1; +h = 1 * nturns; + +For i In {0:npts-1} + theta = i * 2*Pi*nturns/npts; + Point(i + 1) = {r * Cos(theta), r * Sin(theta), i * h/npts}; EndFor -Point(106) = {-0.1, -2, 6}; -BSpline(100) = {100:105}; -Line(101) = {105:106}; +Spline(1) = {1:npts}; +Wire(1) = {1}; -Wire(100) = {100,101}; +Disk(1) = {1,0,0, rd}; +Rectangle(2) = {1+2*rd,-rd,0, 2*rd,2*rd,rd/5}; +Rotate {{1, 0, 0}, {0, 0, 0}, Pi/2} { Surface{1,2}; } -a() = Extrude { Surface{1:5}; } Using Wire {100}; -Delete{ Surface{1:5}; } +Extrude { Surface{1,2}; } Using Wire {1} +Delete{ Surface{1,2}; } diff --git a/demos/boolean/primitives.geo b/demos/boolean/primitives.geo index 797e2435546726b769f8a948c9969cbc883f1762..88271f4f19974d2bd274b9564e07e519a9293a27 100644 --- a/demos/boolean/primitives.geo +++ b/demos/boolean/primitives.geo @@ -19,7 +19,7 @@ Torus(newv) = {x++,y,0, 0.3, 0.1, Pi/3}; Cone(newv) = {x++,y,0, 0.5,0,0, 0.5,0}; Cone(newv) = {x++,y,0, 0.5,0,0, 0.5,0, Pi/3}; Cone(newv) = {x++,y,0, 0.5,0,0, 0.5,0.2, Pi/3}; -Wedge(newv) = {x++,y,0, 0.5,0.5,0.5, 0}; +Wedge(newv) = {x++,y,0, 0.5,0.5,0.5}; Wedge(newv) = {x++,y,0, 0.5,0.5,0.5, 0.8}; // 2D @@ -69,7 +69,7 @@ Ellipse(newl) = {x++,y,0, 0.4,0.1, Pi/3}; Ellipse(newl) = {x++,y,0, 0.4,0.1, -Pi/3, Pi/3}; p = newp; Point(p) = {x++,y,0}; Point(p+1) = {x-0.5,y+0.3,0}; Point(p+2) = {x-0.2,y,0}; -BSpline(newl) = {p:p+2}; +Spline(newl) = {p:p+2}; p = newp; Point(p) = {x++,y,0}; Point(p+1) = {x-0.5,y+0.3,0}; Point(p+2) = {x-0.2,y,0}; Bezier(newl) = {p:p+2}; diff --git a/demos/boolean/spline.geo b/demos/boolean/spline.geo index 71ccbf49f619f57ac0c07f383b9bd6e258ba8e4c..d3798840b1ef67ffc00a1172007e5836842fbdd2 100644 --- a/demos/boolean/spline.geo +++ b/demos/boolean/spline.geo @@ -9,4 +9,4 @@ For i In {1:10} EndFor Line(1) = {1,10}; Bezier(2) = {1:10}; -BSpline(3) = {1:10}; +Spline(3) = {1:10}; diff --git a/demos/boolean/thicksolid.geo b/demos/boolean/thicksolid.geo index af08e76ef6fd320b480d2242ab23de689f6b27f2..ccd3ef59f927bcc360c121e9d09adebb84d5520b 100644 --- a/demos/boolean/thicksolid.geo +++ b/demos/boolean/thicksolid.geo @@ -7,4 +7,4 @@ Block(1) = {0,0,0,1,1,1}; Boundary{ Volume{1}; } ThickSolid(100) = {1, 0.05, 6}; -Delete{ Surface{6}; Volume{1}; } +Delete{ Volume{1}; Surface{6}; } diff --git a/doc/docker-test/Dockerfile b/doc/docker-test/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..db3d44b9d20898ad39ed5d4632f0e389c3526999 --- /dev/null +++ b/doc/docker-test/Dockerfile @@ -0,0 +1,12 @@ +FROM ubuntu:16.04 + +RUN apt-get update && apt-get install -y cmake curl g++ gfortran libfltk1.3-dev libfreetype6-dev libgl1-mesa-dev liblapack-dev libxi-dev libxmu-dev mesa-common-dev tcl-dev tk-dev +RUN curl -L -o occ71.tgz "http://git.dev.opencascade.org/gitweb/?p=occt.git;a=snapshot;h=refs/tags/V7_1_0;sf=tgz" +RUN tar xf occ71.tgz +RUN cd occt-V7_1_0 && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_MODULE_Draw=0 -DBUILD_MODULE_Visualization=0 -DBUILD_MODULE_ApplicationFramework=0 .. && cat CMakeCache.txt && make -j8 +RUN cd occt-V7_1_0/build && make install + +VOLUME ["/etc/gitlab-runner"] +RUN useradd -ms /bin/bash validator +USER validator +WORKDIR /home/validator diff --git a/doc/docker-test/README b/doc/docker-test/README new file mode 100644 index 0000000000000000000000000000000000000000..c746c9c1a0c761c65e92bb9f9128b82a445572f9 --- /dev/null +++ b/doc/docker-test/README @@ -0,0 +1,7 @@ +# build image +docker build -t immc/gmsh:v0.4 . + +# push image to docker-hub +docker login +docker push immc/dg-valid + diff --git a/doc/gmsh.1 b/doc/gmsh.1 index f939f8ed235b929ebf99a1f8426dd6b18bcf69c3..4431d6f885559e5487c547a4c80f8a5c476ac1aa 100644 --- a/doc/gmsh.1 +++ b/doc/gmsh.1 @@ -1,4 +1,4 @@ -.TH Gmsh 1 "17 July 2015" "2.10" "Gmsh Manual Pages" +.TH Gmsh 1 "1 April 2017" "3.0" "Gmsh Manual Pages" .UC 4 .\" ******************************************************************** .SH NAME @@ -22,49 +22,40 @@ ASCII text files using \fIGmsh\fR's own scripting language. .SH GEOMETRY OPTIONS .TP 4 .B \-0 -parse all input files, output unrolled geometry, and exit. +Output model, then exit. .TP 4 .B \-tol float set geometrical tolerance. .\" ******************************************************************** .SH MESH OPTIONS .TP 4 -.B \-1 -perform the one-dimensional mesh, i.e., discretize all the curves in -the geometry. -.TP 4 -.B \-2 -perform the two-dimensional mesh, i.e., discretize all the surfaces in -the geometry. -.TP 4 -.B \-3 -perform the three-dimensional mesh, i.e., discretize all the volumes in -the geometry. -.TP 4 -.B \-part int -partition the mesh after batch mesh generation. -.TP 4 -.B \-saveall -save all elements (and discard all physical group definitions). +.B \-1, \-2, \-3 +perform 1D, 2D or 3D mesh generation, then exit. .TP 4 .B \-o file -specify mesh output file name. +specify output file name. .TP 4 .B \-format string -set output mesh format (msh, msh1, msh2, unv, vrml, stl, mesh, bdf, p3d, cgns, med, fea). +set output mesh format (auto, msh, msh1, msh2, unv, vrml, stl, mesh, bdf, med, ...). .TP 4 .B \-bin use binary format when available. .TP 4 +.B \-saveall +save all elements (discard physical group definitions) +.TP 4 .B \-algo string -select mesh algorithm (meshadapt, del2d, front2d, del3d, front3d). +select mesh algorithm (meshadapt, del2d, front2d, del3d, front3d, ...). +.TP 4 +.B \-parametric +save vertices with their parametric coordinates. +.TP 4 +.B \-part int +partition the mesh after batch mesh generation. .TP 4 .B \-smooth int set number of mesh smoothing steps. .TP 4 -.B \-optimize[_netgen] -optimize quality of tetrahedral elements. -.TP 4 .B \-order int set mesh order. .TP 4 @@ -78,9 +69,6 @@ Set minimum characteristic length. .B \-clmax float Set maximum characteristic length. .TP 4 -.B \-clcurv -Compute characteristic lengths from curvatures. -.TP 4 .B \-rand float set random perturbation factor. .TP 4 @@ -92,27 +80,17 @@ perform various consistency checks on mesh. .\" ******************************************************************** .SH POST-PROCESSING OPTIONS .TP 4 -.B \-noview -hide all views at startup. -.TP 4 -.B \-link int -choose link mode between post-processing views (0, 1, 2, 3, 4). -.TP 4 .B \-combine combine input views into multi-time-step ones. .\" ******************************************************************** .SH DISPLAY OPTIONS .TP 4 -.B \-nodb -suppress the double buffer. Use this options if you use \fIGmsh\fR on -a remote host without GLX. +.B \-n +hide all meshes and post-processing views on startup. .TP 4 .B \-fontsize int specify the font size for the GUI. .TP 4 -.B \-theme string -specify the FLTK GUI scheme. -.TP 4 .B \-display string specify display. .\" ******************************************************************** @@ -121,6 +99,15 @@ specify display. .B \- parse input files, then exit. .TP 4 +.B \-new +create new model before merge next file. +.TP 4 +.B \-merge +merge next files. +.TP 4 +.B \-open +ppen next files. +.TP 4 .B \-a, \-g, \-m, \-s, \-p start in automatic, geometry, mesh, solver or post-processing mode. .TP 4 @@ -136,6 +123,12 @@ set verbosity level. .B \-nopopup don't popup dialog windows in scripts. .TP 4 +.B \-setnumber "name" value +set constant number name=value +.TP 4 +.B \-setstring "name" "value" +set constant string name=value +.TP 4 .B \-string "string" parse option string at startup. .TP 4 diff --git a/doc/gmsh.html b/doc/gmsh.html index 7e810756544decd3f679e750ddc81161e00f9e9d..4465844e9d38243a9d4e9b8051b9e794990c9614 100644 --- a/doc/gmsh.html +++ b/doc/gmsh.html @@ -99,16 +99,12 @@ Public License (GPL)</a>: <ul> <li> <p class="highlight"> - Current stable release (version 2.16.0, January 2 2017): - Windows - <a href="bin/Windows/gmsh-2.16.0-Windows32.zip">32 bit</a> / - <a href="bin/Windows/gmsh-2.16.0-Windows64.zip">64 bit</a>, - Linux - <a href="bin/Linux/gmsh-2.16.0-Linux32.tgz">32 bit</a> / - <a href="bin/Linux/gmsh-2.16.0-Linux64.tgz">64 bit</a>, - <a href="bin/MacOSX/gmsh-2.16.0-MacOSX.dmg">Mac OS X</a> + Current stable release (version 3.0.0, April ? 2017): + <a href="bin/Windows/gmsh-3.0.0-Windows64.zip">Windows</a>, + <a href="bin/Linux/gmsh-3.0.0-Linux64.tgz">Linux</a>, + <a href="bin/MacOSX/gmsh-3.0.0-MacOSX.dmg">MacOS</a> and - <a href="src/gmsh-2.16.0-source.tgz">source code</a> + <a href="src/gmsh-3.0.0-source.tgz">source code</a> </p> <p> <em>A <a href="doc/texinfo/gmsh.html#Tutorial"><strong>tutorial</strong></a> @@ -118,13 +114,9 @@ Public License (GPL)</a>: <li>Development version: <ul><li>Automated nightly snapshots (<a href="http://onelab.info/CDash/index.php?project=Gmsh">dashboard</a>): - Windows - <a href="bin/Windows/gmsh-git-Windows32.zip">32 bit</a> / - <a href="bin/Windows/gmsh-git-Windows64.zip">64 bit</a>, - Linux - <a href="bin/Linux/gmsh-git-Linux32.tgz">32 bit</a> / - <a href="bin/Linux/gmsh-git-Linux64.tgz">64 bit</a>, - <a href="bin/MacOSX/gmsh-git-MacOSX.dmg">Mac OS X</a> and + <a href="bin/Windows/gmsh-git-Windows64.zip">Windows</a>, + <a href="bin/Linux/gmsh-git-Linux64.tgz">Linux</a>, + <a href="bin/MacOSX/gmsh-git-MacOSX.dmg">MacOS</a> and <a href="src/gmsh-git-source.tgz">source code</a> <li>Git access: '<code>git pull <a href="http://gitlab.onelab.info/gmsh/gmsh.git">http://gitlab.onelab.info/gmsh/gmsh.git</a></code>' @@ -247,8 +239,8 @@ directly</a> for more information. <h2><a name="Links"></a>Links</h2> <ul> - <li>Gmsh imports STEP, IGES and BREP files thanks - to <a href="http://www.opencascade.org">OpenCascade</a>. + <li>Gmsh uses <a href="http://www.opencascade.org">OpenCascade</a> for + constructive geometry features. <li>Gmsh interfaces the following additional external mesh generators: <a href="http://www.hpfem.jku.at/netgen/">Netgen</a> from Joachim Schöberl diff --git a/doc/texinfo/commandline.texi b/doc/texinfo/commandline.texi index 7db7074e82cb94b96f65ac9c72aaa1697ab8856e..7c23905418157d3f30e0b7a8c97359006a5d0023 100644 --- a/doc/texinfo/commandline.texi +++ b/doc/texinfo/commandline.texi @@ -42,6 +42,8 @@ Set number of mesh smoothing steps Set mesh order (1, ..., 5) @item -optimize[_netgen] Optimize quality of tetrahedral elements +@item -optimize_threshold +Optimize tetrahedral elements that have a qulaity less than a threshold @item -optimize_ho Optimize high order meshes @item -ho_[min,max,nlayers] diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi index 9ace4c9450d66116e1bfcb2773db061c71232e5a..64553215968ed88ddb97caaa0f00bf80ac25a2cb 100644 --- a/doc/texinfo/gmsh.texi +++ b/doc/texinfo/gmsh.texi @@ -21,7 +21,7 @@ @c ========================================================================= @c %**start of header @setfilename gmsh.info -@set GMSH-VERSION 2.16 +@set GMSH-VERSION 3.0 @set COPYRIGHT @copyright{} 1997-2017 Christophe Geuzaine, Jean-Fran@,{c}ois Remacle @settitle Gmsh @value{GMSH-VERSION} @footnotestyle separate @@ -128,145 +128,6 @@ for Gmsh @value{GMSH-VERSION} (@today{}). * License:: Complete copy of the license * Concept index:: Index of concepts * Syntax index:: Index of reserved keywords in the Gmsh language - -@ifnothtml -@detailmenu - --- The Detailed Node Listing --- - -Overview - -* Geometry:: -* Mesh:: -* Solver:: -* Post-processing:: -* What Gmsh is pretty good at:: -* and what Gmsh is not so good at:: -* Bug reports:: - -How to read this reference manual? - -* Syntactic rules:: - -Running Gmsh on your system - -* Interactive mode:: -* Non-interactive mode:: -* Command-line options:: -* Mouse actions:: -* Keyboard shortcuts:: - -General tools - -* Comments:: -* Expressions:: -* Operators:: -* Built-in functions:: -* User-defined macros:: -* Loops and conditionals:: -* General commands:: -* General options:: - -Expressions - -* Floating point expressions:: -* Character expressions:: -* Color expressions:: - -Geometry module - -* Geometry commands:: -* Geometry options:: - -Geometry commands - -* Points:: -* Lines:: -* Surfaces:: -* Volumes:: -* Extrusions:: -* Transformations:: -* Miscellaneous geometry commands:: - -Mesh module - -* Choosing the right unstructured algorithm:: -* Elementary vs physical entities:: -* Mesh commands:: -* Mesh options:: - -Mesh commands - -* Specifying mesh element sizes:: -* Structured grids:: -* Miscellaneous mesh commands:: - -Solver module - -* Solver options:: - -Post-processing module - -* Post-processing commands:: -* Post-processing plugins:: -* Post-processing options:: - -File formats - -* MSH ASCII file format:: -* MSH binary file format:: -* Node ordering:: -* Legacy formats:: - -Legacy formats - -* MSH file format version 1.0:: -* POS ASCII file format:: -* POS binary file format:: - -Tutorial - -* t1.geo:: -* t2.geo:: -* t3.geo:: -* t4.geo:: -* t5.geo:: -* t6.geo:: -* t7.geo:: -* t8.geo:: -* t9.geo:: -* t10.geo:: -* t11.geo:: -* t12.geo:: -* t13.geo:: -* t14.geo:: -* t15.geo:: - -Options - -* General options list:: -* Geometry options list:: -* Mesh options list:: -* Solver options list:: -* Post-processing options list:: - -Information for developers - -* Source code structure:: -* Coding style:: -* Adding a new option:: - -Frequently asked questions - -* The basics:: -* Installation problems:: -* General questions:: -* Geometry module questions:: -* Mesh module questions:: -* Solver module questions:: -* Post-processing module questions:: - -@end detailmenu -@end ifnothtml @end menu @c ========================================================================= @@ -496,7 +357,9 @@ commands}); @item parametrize these geometries. Gmsh's scripting language enables all commands and command arguments to depend on previous calculations (see -@ref{Expressions}, and @ref{Geometry commands}); +@ref{Expressions}, and @ref{Geometry commands}). Using the OpenCASCADE +geometry kernel, Gmsh gives access to all usual constructive solid +geometry operations; @item generate 1D, 2D and 3D simplicial (i.e., using line segments, triangles and tetrahedra) finite element meshes for CAD models in their native @@ -545,23 +408,10 @@ small but powerful GUI. @node and what Gmsh is not so good at, Bug reports, What Gmsh is pretty good at, Overview @section @dots{} and what Gmsh is not so good at -As of version 2.8, here are some known weaknesses of Gmsh: +As of version 3.0, here are some known weaknesses of Gmsh: @itemize @bullet @item -the BRep approach for describing geometries can become -inconvenient/inefficient for large models. For complex models, or if you -want to use a solid-modeler approach, you should link Gmsh with an -external CAD kernel and import native files directly. (The binary -versions available on @uref{http://gmsh.info} are linked with the -free CAD kernel OpenCASCADE, which enables native BREP import as well as -STEP and IGES import.) -@item -Gmsh's internal CAD engine is fairly limited: it only handles simple -primitives and does not perform any complex geometrical operations -(e.g. no calculation of intersections). For such features you should -link Gmsh with an external CAD kernel (see above). -@item Gmsh is not a multi-bloc mesh generator: all meshes produced by Gmsh are conforming in the sense of finite element meshes; @item @@ -569,11 +419,10 @@ Gmsh's user interface is only exposing a limited number of the available features, and many aspects of the interface could be enhanced (especially manipulators). @item -Gmsh's scripting language is fairly limited, providing only very crude -loop controls and user-defined macros, with no local variables. -@item -there is no global ``undo'' capability. You will often need to edit a -text file to correct mistakes. +Gmsh's scripting language is quite limited, providing only very crude +loop controls and user-defined macros, with no local variables. We will +at some point create a C API so that you can access Gmsh features with +your language of choice. @end itemize If you have the skills and some free time, feel free to join the @@ -651,7 +500,7 @@ post-processor for your own software, you will also want to learn about the non-scripting input/output files that Gmsh can read/write. In addition to Gmsh's native ``MSH'' file format (@pxref{File formats}), Gmsh can read/write many standard mesh files, depending on how it was -built: check the `File->Save As' menu for a list of available formats. +built: check the `File->Export' menu for a list of available formats. Finally, to use Gmsh at the third level (i.e., to link the Gmsh library with your own code), you will need to learn the internal Gmsh @@ -758,7 +607,7 @@ lines; `2D' will mesh all the surfaces---as well as all the lines if `1D' was not called before; `3D' will mesh all the volumes---and all the surfaces if `2D' was not called before). To save the resulting mesh in the current mesh format click on `Save', or select the appropriate -format and file name with the `File->Save As' menu. The default mesh +format and file name with the `File->Export' menu. The default mesh file name is based on the name of the current active model, with an appended extension depending on the mesh format@footnote{Nearly all the interactive commands have keyboard shortcuts: see @ref{Keyboard @@ -809,7 +658,7 @@ model, the associated options will be automatically loaded, too. To save the current options as your default preferences for all future Gmsh sessions, use the `File->Save Options As Default' menu instead. Finally, you can also save the current options in an arbitrary file by choosing -the `Gmsh options' format in `File->Save As'. +the `Gmsh options' format in `File->Export'. For more information about available options (and how to reset them to their default values), see @ref{Options}. A full list of options with @@ -1095,7 +944,8 @@ List of expressions are also widely used, and are defined as: @var{string} [ @{ @var{expression-list} @} ] | Point @{ @var{expression} @} | @var{transform} | - @var{extrude} + @var{extrude} | + @var{boolean} | Point @{ @var{expression} @} | <Physical> Point|Line|Surface|Volume "*" | Point|Line|Surface|Volume In BoundingBox @{ @var{expression-list} @} | @@ -1802,6 +1652,11 @@ the `File->Merge' menu in the GUI. If the path in @var{char-expression} is not absolute, @var{char-expression} is appended to the path of the current file. +@item ShapeFromFile( @var{char-expression} ); +Merges a BREP or STEP file and returns the identification numbers of the +highest-dimensional entities. Only available with the OpenCASCADE +geometry kernel. + @item Draw; Redraws the scene. @@ -1870,6 +1725,10 @@ arguement is the command line). @item SetName @var{char-expression}; Changes the name of the current model. +@item SetFactory(@var{char-expression}); +Changes the current geometry kernel. Currently available kernels: +@code{"Built-in"} and @code{"OpenCASCADE"}. + @item SyncModel; Forces an immediate transfer from the old geometrical database into the new one (this transfer normally occurs right after a file is read). @@ -1975,6 +1834,7 @@ previously defined entity, it is enclosed between braces.'' * Surfaces:: * Volumes:: * Extrusions:: +* Boolean operations:: * Transformations:: * Miscellaneous geometry commands:: @end menu @@ -2028,43 +1888,6 @@ automatically created). @cindex Lines, physical @ftable @code -@c @item Bezier ( @var{expression} ) = @{ @var{expression-list} @}; -@c Creates a Bezier curve. The @var{expression} inside the parentheses is the -@c Bezier curve's identification number; the @var{expression-list} on the right -@c hand side should contain the identification numbers of all the curve's -@c control points. - -@item BSpline ( @var{expression} ) = @{ @var{expression-list} @}; -Creates a B-spline curve. The @var{expression} inside the parentheses is the -B-spline curve's identification number; the @var{expression-list} on the -right hand side should contain the identification numbers of all the -B-spline's control points. Repeating control points has the expected effect. - -@item Circle ( @var{expression} ) = @{ @var{expression}, @var{expression}, @var{expression} @}; -Creates a circle arc (strictly) smaller than Pi. The @var{expression} inside -the parentheses is the circle arc's identification number; the first -@var{expression} inside the braces on the right hand side gives the -identification number of the start point of the arc; the second -@var{expression} gives the identification number of the center of the -circle; the last @var{expression} gives the identification number of the end -point of the arc. - -@c todo: -@c @item Circle ( @var{expression} ) = @{ @var{expression}, @var{expression}, @var{expression} @} Plane @{ @var{expression}, @var{expression}, @var{expression} @}; - -@item CatmullRom ( @var{expression} ) = @{ @var{expression-list} @}; -@code{CatmullRom} is a synonym for @code{Spline}. - -@item Ellipse ( @var{expression} ) = @{ @var{expression}, @var{expression}, @var{expression}, @var{expression} @}; -Creates an ellipse arc. The @var{expression} inside the parentheses is the -ellipse arc's identification number; the first @var{expression} inside the -braces on the right hand side gives the identification number of the start -point of the arc; the second @var{expression} gives the identification -number of the center of the ellipse; the third @var{expression} gives the -identification number of any point located on the major axis of the ellipse; -the last @var{expression} gives the identification number of the end point -of the arc. - @item Line ( @var{expression} ) = @{ @var{expression}, @var{expression} @}; Creates a straight line segment. The @var{expression} inside the parentheses is the line segment's identification number; the two @w{@var{expression}s} @@ -2072,17 +1895,41 @@ inside the braces on the right hand side give identification numbers of the start and end points of the segment. @c todo: multi-lines not authorized yet -@c todo: -@c @item Nurbs ( @var{expression} ) = @{ @var{expression-list} @}; +@item Bezier ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a Bezier curve. The @var{expression-list} contains the +identification numbers of the control points. -@c todo: -@c @item Parametric ( @var{expression} ) = @{ @var{expression}, @var{expression}, "@var{string}", "@var{string}", "@var{string}" @}; +@item BSpline ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a BSpline. The @var{expression-list} contains the identification +numbers of the control points. BSplines are currently only available +with the built-in kernel. @item Spline ( @var{expression} ) = @{ @var{expression-list} @}; -Creates a spline curve. The @var{expression} inside the parentheses is the -spline's identification number; the @var{expression-list} on the right hand -side should contain the identification numbers of all the spline's control -points. +Creates a spline going through the points in @var{expression-list}. With +the built-in geometry kernel this constructs a Catmull-Rom spline. With +the OpenCASCADE kernel, this constructs a BSpline passing through the +points with a given tolerance. + +@item Circle ( @var{expression} ) = @{ @var{expression}, @var{expression}, @var{expression} <, ...> @}; +Creates a circle arc. The three @var{expression}s on the right-hand-side +define the start point, the center and the end point of the arc. With +the built-in geometry kernel the arc should be strictly smaller than Pi. +With the OpenCASCADE kernel additional @var{expression}s can be provided +to define a full circle (4th expression is the radius) or a circle arc +between two angles (next 2 expressions). +@c todo: document < Plane @{ @var{expression}, @var{expression}, @var{expression} @}; > + +@item Circle ( @var{expression} ) = @{ @var{expression}, @var{expression}, @var{expression} @}; +Creates a circle. + +@item Ellipse ( @var{expression} ) = @{ @var{expression}, @var{expression}, @var{expression}, @var{expression} <, ...> @}; +Creates an ellipse arc. The four @var{expression}s on the +right-hand-side define the start point, the center point, a major axis +point and the end point of the ellipse. The third point can be omitted +with the OpenCASCADE kernel. With the OpenCASCADE kernel additional +@var{expression}s can be provided to define a full ellipse (4th and 5th +expressions define the radii along X and Y) or en ellipse arc (next 2 +expressions). @item Line Loop ( @var{expression} ) = @{ @var{expression-list} @}; Creates an oriented line loop. The @var{expression} inside the parentheses @@ -2097,6 +1944,11 @@ supports it, it is not recommended to specify multiple line loops (or subloops) in a single @code{Line Loop} command. (Line loops are used to create surfaces: see @ref{Surfaces}.) +@item Wire ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a path made of lines. Wires are only available with the +OpenCASCADE kernel. They are used to create @code{ThruSections} and +extrusions along paths. + @item Compound Line ( @var{expression} ) = @{ @var{expression-list} @}; Creates a compound line from several elementary lines. When meshed, a compound line will be reparametrized as a single line, whose mesh can @@ -2149,14 +2001,24 @@ not have any lines in common with another line loop defining a hole in the same surface (in which case the two line loops should be combined). @item Surface ( @var{expression} ) = @{ @var{expression-list} @} < In Sphere @{ @var{expression} @} >; -Creates a surface filling. The @var{expression} inside the parentheses -is the surface's identification number; the first -@var{expression-list} on the right hand side should contain the -identification number of a line loop composed of either three or four -elementary lines. The optional @code{In Sphere} argument forces the +Creates a surface filling. With the built-in kernel, the first line loop +should be composed of either three or four elementary lines. With the +built-in kernel, the optional @code{In Sphere} argument forces the surface to be a spherical patch (the extra parameter gives the identification number of the center of the sphere). +@item Disk ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a disk. When four expressions are provided on the right hand +side (3 coordinates of the center and the radius), the disk is circular. +A fifth expression defines the radius along Y, leading to an ellipse. +Disk is only available with the OpenCASCADE kernel. + +@item Rectangle ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a rectangle. The 3 first expressions define the lower-left +corner; the next 2 define the width and height. If a 6th expression is +provided, it defines a radius to round the rectangle corners. Rectangle +is only available with the OpenCASCADE kernel. + @item Surface Loop ( @var{expression} ) = @{ @var{expression-list} @}; Creates a surface loop (a shell). The @var{expression} inside the parentheses is the surface loop's identification number; the @@ -2167,7 +2029,6 @@ elementary surfaces should be oriented consistently (using negative identification numbers to specify reverse orientation). (Surface loops are used to create volumes: see @ref{Volumes}.) - @item Compound Surface ( @var{expression} ) = @{ @var{expression-list} @} < Boundary @{ @{ @var{expression-list} @}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @{ @var{expression-list} @} @} > ; Creates a compound surface from several elementary surfaces. When meshed, a compound surface will be reparametrized as a single surface, @@ -2223,6 +2084,51 @@ should not have any surfaces in common with another surface loop defining a hole in the same volume (in which case the two surface loops should be combined). +@item Sphere ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a sphere, defined by the 3 coordinates of its center and a +radius. Additional expressions define 3 angle limits. Sphere is only +available with the OpenCASCADE kernel. + +@item Block ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a block, defined by the 3 coordinates of a point and the 3 +extents. Block is only available with the OpenCASCADE kernel. + +@item Cylinder ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a cylinder, defined by the 3 coordinates of the center of the +first circular face and the 3 components of the vector defining its +axis. An additional expression defines the angular opening. Cylinder is +only available with the OpenCASCADE kernel. + +@item Torus ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a torus, defined by the 3 coordinates of its center and 2 radii. +An additional expression defines the angular opening. Torus is only +available with the OpenCASCADE kernel. + +@item Cone ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a cone, defined by the 3 coordinates of the center of the first +circular face, the 3 components of the vector defining its axis and the +two radii of the faces (these radii can be zero). An additional +expression defines the angular opening. Cone is only available with the +OpenCASCADE kernel. + +@item Wedge ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a right angular wedge, defined by the 3 coordinates of the +right-angle point and the 3 extends. An additional parameter defines the +top X extent (zero by default). Wedge is only available with the +OpenCASCADE kernel. + +@item ThruSections ( @var{expression} ) = @{ @var{expression-list} @}; +Creates a volume defined through line loops. ThruSections is only +available with the OpenCASCADE kernel. + +@item Ruled ThruSections ( @var{expression} ) = @{ @var{expression-list} @}; +Same as @code{ThruSections}, but the surfaces creates on the boundary +are forced to be ruled. Ruled ThruSections is only available with the +OpenCASCADE kernel. + +@c @item ThickSolid ( @var{expression} ) = @{ @var{expression-list} @}; +@c todo: ThickSolid is only available with the OpenCASCADE kernel. + @item Compound Volume ( @var{expression} ) = @{ @var{expression-list} @}; Creates a compound volume from several elementary volumes. When meshed, a compound volume will be reparametrized as a single volume, whose mesh @@ -2250,7 +2156,7 @@ unique identification number is automatically created). @c Extrusions @c ......................................................................... -@node Extrusions, Transformations, Volumes, Geometry commands +@node Extrusions, Boolean operations, Volumes, Geometry commands @subsection Extrusions @cindex Extrusion, geometry @@ -2289,6 +2195,26 @@ the X, Y and Z direction of the rotation axis; the third @var{expression-list} should contain three @w{@var{expression}s} giving the X, Y and Z components of any point on this axis; the last @var{expression} should contain the rotation angle (in radians). + +@item Extrude @{ @var{extrude-list} @} +Extrudes entities in @var{extrude-list} using a translation along their +normal. Only available with the built-in geometry kernel. + +@item Extrude @{ @var{extrude-list} @} Using Wire @{ @var{expression-list} @} +Extrudes entities in @var{extrude-list} along the give wire. Only +available with the OpenCASCADE geometry kernel. + +@item ThruSections @{ @var{expression-list} @} +Creates surfaces through the given line loops or wires. ThruSection are +only available with the OpenCASCADE kernel. + +@item Ruled ThruSections @{ @var{expression-list} @} +Creates ruled surfaces through the given line loops or +wires. ThruSections are only available with the OpenCASCADE kernel. + +@item Fillet @{ @var{expression-list} @} @{ @var{expression-list} @} @{ @var{expression} @} +Fillets volumes (first list) on some edges (second list), using the +provided radius. Fillet is only available with the OpenCASCADE kernel. @end ftable @noindent with @@ -2318,11 +2244,85 @@ This behaviour can be changed with the @code{Geometry.ExtrudeReturnLateralEntities} option (@pxref{Geometry options list}). +@c ......................................................................... +@c Boolean operations +@c ......................................................................... + +@node Boolean operations, Transformations, Extrusions, Geometry commands +@subsection Boolean operations + +@cindex Boolean operations, geometry +@cindex Geometry, boolean operations +@cindex Geometry, intersection +@cindex Geometry, difference +@cindex Geometry, union +@cindex Geometry, fragments +@findex @var{boolean} + +Boolean operations can be applied on lines, surfaces and volumes. All +boolean operation act on two lists of elementary entities. The first +list represents the object; the second represents the tool. The general +syntax for boolean operations is as follows: + +@var{boolean}: +@ftable @code +@item BooleanIntersection @{ @var{boolean-list} @} @{ @var{boolean-list} @} +Computes the intersection of the object and the tool. +@item BooleanUnion @{ @var{boolean-list} @} @{ @var{boolean-list} @} +Computes the union of the object and the tool. +@item BooleanDifference @{ @var{boolean-list} @} @{ @var{boolean-list} @} +Subtract the tool from the object. +@item BooleanFramgments @{ @var{boolean-list} @} @{ @var{boolean-list} @} +Computes all the fragments resulting from the intersection of the object +and the tool. +@end ftable + +with + +@example +@var{boolean-list}: + Line | Surface | Volume @{ @var{expression-list} @}; @dots{} | + Delete ; +@end example + +If @code{Delete} is specified in the @var{boolean-list}, the tool and/or +the object is deleted. + +As explained in @ref{Floating point expressions}, @var{boolean} can be +used in an expression, in which case it returns the list of +identification numbers of the highest dimensional entities created by +the boolean operation. See +@url{http://gitlab.onelab.info/gmsh/gmsh/tree/master/demos/boolean/,demos/boolean} +for examples. + +An alternative syntax exists for boolean operations, which can be used +when it is known beforehand that the operation will result in a single +(highest-dimensional) entity: + +@var{boolean-explicit}: +@ftable @code +@item BooleanIntersection ( @var{expression} ) = @{ @var{boolean-list} @} @{ @var{boolean-list} @}; +Computes the intersection of the object and the tool and assign the +result the identification number @var{expression}. +@item BooleanUnion @{ @var{boolean-list} @} @{ @var{boolean-list} @} +Computes the union of the object and the tool and assign the result +the identification number @var{expression}. +@item BooleanDifference @{ @var{boolean-list} @} @{ @var{boolean-list} @} +Subtract the tool from the object and assign the result the +identification number @var{expression}. +@end ftable + +Again, see +@url{http://gitlab.onelab.info/gmsh/gmsh/tree/master/demos/boolean/,demos/boolean} +for examples. + +Boolean operations are only available with the OpenCASCADE geometry kernel. + @c ......................................................................... @c Transformations @c ......................................................................... -@node Transformations, Miscellaneous geometry commands, Extrusions, Geometry commands +@node Transformations, Miscellaneous geometry commands, Boolean operations, Geometry commands @subsection Transformations @cindex Transformations, geometry @@ -2342,7 +2342,14 @@ below). The syntax of the transformation commands is: @item Dilate @{ @{ @var{expression-list} @}, @var{expression} @} @{ @var{transform-list} @} Scales all elementary entities in @var{transform-list} by a factor @var{expression}. The @var{expression-list} should contain three -@w{@var{expression}s} giving the X, Y and Z direction of the homothetic +@w{@var{expression}s} giving the X, Y, and Z coordinates of the center +of the homothetic transformation. + +@item Dilate @{ @{ @var{expression-list} @}, @{ @var{expression}, @var{expression}, @var{expression} @} @} @{ @var{transform-list} @} +Scales all elementary entities in @var{transform-list} using different +factors along X, Y and Z (the three @var{expression}s). The +@var{expression-list} should contain three @w{@var{expression}s} giving +the X, Y, and Z coordinates of the center of the homothetic transformation. @item Rotate @{ @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{transform-list} @} @@ -4612,6 +4619,7 @@ system}. Screencasts that show how to use the GUI are available on * t13.geo:: * t14.geo:: * t15.geo:: +* t16.geo:: @end menu @c ------------------------------------------------------------------------- @@ -4744,11 +4752,20 @@ system}. Screencasts that show how to use the GUI are available on @c t15.geo @c ------------------------------------------------------------------------- -@node t15.geo, , t14.geo, Tutorial +@node t15.geo, t16.geo, t14.geo, Tutorial @section @url{http://gitlab.onelab.info/gmsh/gmsh/tree/master/tutorial/t15.geo,t15.geo} @verbatiminclude ../../tutorial/t15.geo +@c ------------------------------------------------------------------------- +@c t16.geo +@c ------------------------------------------------------------------------- + +@node t16.geo, , t15.geo, Tutorial +@section @url{http://gitlab.onelab.info/gmsh/gmsh/tree/master/tutorial/t16.geo,t16.geo} + +@verbatiminclude ../../tutorial/t16.geo + @c ========================================================================= @c Options @c ========================================================================= @@ -4766,7 +4783,7 @@ the `File->Save Options->As Default' menu) in a per-user ``option'' file (cf. ``Saved in: @code{General.OptionsFileName}'' in the lists below), automatically loaded by Gmsh every time it starts up. Finally, other options are only saved to disk manually, either by explicitely saving an -option file with `File->Save As', or when saving per-model options with +option file with `File->Export', or when saving per-model options with `File->Save Options->For Current File' (cf. ``Saved in: @code{-}'' in the lists below). @@ -5272,7 +5289,7 @@ ghost triangulation in the printed output (on paper). @item How can I save GIF, JPEG, ..., images? -Just choose the appropriate format in `File->Save As'. By default Gmsh +Just choose the appropriate format in `File->Export'. By default Gmsh guesses the format from the file extension, so you can just type @file{myfile.jpg} in the dialog and Gmsh will automatically create a JPEG image file. @@ -5280,7 +5297,7 @@ image file. @item How can I save MPEG, AVI, ..., animations? You can create simple MPEG animations by choosing MPEG as the format in -`File->Save As': this allows you to loop over time steps or +`File->Export': this allows you to loop over time steps or post-processing data sets, or to change parameters according to @code{Print.Parameter}. To create fully customized animations or to use different output formats (AVI, MP4, etc.) you should write a @@ -5590,7 +5607,7 @@ Evaluate plugin. @item Is there a way to save animations? -You can save simple MPEG animations directly from the `File->Save As' +You can save simple MPEG animations directly from the `File->Export' menu. For other formats you should write a script. Have a look at @ref{t8.geo} or @url{http://gitlab.onelab.info/gmsh/gmsh/tree/master/demos/anim.script,demos/anim.script} diff --git a/doc/texinfo/opt_fields.texi b/doc/texinfo/opt_fields.texi index fedfc6c408e3bff4266f586e77056ca52aa40694..6fc5ba35f336fedb0282f7bdda6c10f75f4d28fc 100644 --- a/doc/texinfo/opt_fields.texi +++ b/doc/texinfo/opt_fields.texi @@ -201,60 +201,6 @@ type: float@* default value: @code{0} @end table -@item Centerline -The value of this field is the distance to the centerline.@* -@* - You should specify a fileName that contains the centerline. The centerline of a surface can be obtained with the open source software vmtk (http://www.vmtk.org/) using the following script:@* -@* -vmtk vmtkcenterlines -seedselector openprofiles -ifile mysurface.stl -ofile centerlines.vtp --pipe vmtksurfacewriter -ifile centerlines.vtp -ofile centerlines.vtk@* -@* -Options:@* -@table @code -@item FileName -File name for the centerlines@* -type: string@* -default value: @code{"centerlines.vtk"} -@item closeVolume -Action: Create In/Outlet planar faces@* -type: integer@* -default value: @code{0} -@item extrudeWall -Action: Extrude wall@* -type: integer@* -default value: @code{0} -@item hLayer -Thickness (% of radius) of the extruded layer@* -type: float@* -default value: @code{0.3} -@item hSecondLayer -Thickness (% of radius) of the second extruded layer@* -type: float@* -default value: @code{0.3} -@item nbElemLayer -Number of mesh elements the extruded layer@* -type: integer@* -default value: @code{3} -@item nbElemSecondLayer -Number of mesh elements the second extruded layer@* -type: integer@* -default value: @code{0} -@item nbPoints -Number of mesh elements in a circle@* -type: integer@* -default value: @code{25} -@item reMesh -Action: Cut the initial mesh in different mesh partitions using the centerlines@* -type: integer@* -default value: @code{0} -@end table - -Actions:@* -@table @code -@item run -Run actions (closeVolume, extrudeWall, cutMesh) -@* -@end table - @item Curvature Compute the curvature of Field[IField]:@* @* @@ -625,6 +571,16 @@ type: list@* default value: @code{@{@}} @end table +@item Octree +Pre compute another field on an octree to speed-up evalution@* +Options:@* +@table @code +@item InField +Id of the field to use as x coordinate.@* +type: integer@* +default value: @code{1752631850} +@end table + @item Param Evaluate Field IField in parametric coordinates:@* @* diff --git a/doc/texinfo/opt_general.texi b/doc/texinfo/opt_general.texi index c76be0a99082b0257e56f9e935e0ca133b0e5bbc..4849a37027a40de4015928ae0a6fc8bb04c01b22 100644 --- a/doc/texinfo/opt_general.texi +++ b/doc/texinfo/opt_general.texi @@ -595,17 +595,17 @@ Default value: @code{0}@* Saved in: @code{General.SessionFileName} @item General.FontSize -Size of the font in the user interface (-1=automatic)@* +Size of the font in the user interface, in pixels (-1: automatic)@* Default value: @code{-1}@* Saved in: @code{General.OptionsFileName} @item General.GraphicsFontSize -Size of the font in the graphic window@* +Size of the font in the graphic window, in pixels@* Default value: @code{15}@* Saved in: @code{General.OptionsFileName} @item General.GraphicsFontSizeTitle -Size of the font in the graphic window for titles@* +Size of the font in the graphic window for titles, in pixels@* Default value: @code{18}@* Saved in: @code{General.OptionsFileName} @@ -860,7 +860,7 @@ Default value: @code{0}@* Saved in: @code{General.OptionsFileName} @item General.MessageFontSize -Size of the font in the message window (-1=automatic)@* +Size of the font in the message window, in pixels (-1: automatic)@* Default value: @code{-1}@* Saved in: @code{General.OptionsFileName} diff --git a/doc/texinfo/opt_geometry.texi b/doc/texinfo/opt_geometry.texi index 8e77965077833352cf1105b3e1205129113f1f24..9e3bdbc5ef516c1ef0ce75804c0c8b5fc6a6f950 100644 --- a/doc/texinfo/opt_geometry.texi +++ b/doc/texinfo/opt_geometry.texi @@ -39,11 +39,6 @@ Copy meshing method (unstructured or transfinite) when duplicating geometrical e Default value: @code{0}@* Saved in: @code{General.OptionsFileName} -@item Geometry.CopyDisplayAttributes -Copy display attributes (visibiliy, color) when duplicating geometrical entities?@* -Default value: @code{0}@* -Saved in: @code{General.OptionsFileName} - @item Geometry.DoubleClickedEntityTag Tag of last double-clicked geometrical entity@* Default value: @code{0}@* @@ -149,8 +144,8 @@ Sew faces in STEP, IGES and BRep models@* Default value: @code{0}@* Saved in: @code{General.OptionsFileName} -@item Geometry.OCCConnectFaces -Cut and connect faces in STEP, IGES and BRep models (0=no, 1=internal, 2=Salome)@* +@item Geometry.OCCParallel +Use multi-threaded OCC boolean operators@* Default value: @code{0}@* Saved in: @code{General.OptionsFileName} @@ -264,6 +259,11 @@ Geometrical tolerance@* Default value: @code{1e-08}@* Saved in: @code{General.OptionsFileName} +@item Geometry.ToleranceBoolean +Geometrical tolerance for boolean operations@* +Default value: @code{0}@* +Saved in: @code{General.OptionsFileName} + @item Geometry.Transform Transform model display coordinates (0=no, 1=scale)@* Default value: @code{0}@* diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi index 0174e07b41c8cd9253b36e0c29a66a72ffd68e75..fee3bb323fc8486ef48a3b578da7a1610aec9773 100644 --- a/doc/texinfo/opt_mesh.texi +++ b/doc/texinfo/opt_mesh.texi @@ -431,7 +431,12 @@ Saved in: @code{General.OptionsFileName} @item Mesh.Optimize Optimize the mesh to improve the quality of tetrahedral elements@* -Default value: @code{0}@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + +@item Mesh.OptimizeThreshold +Optimize tetrahedra that have a quality below ... @* +Default value: @code{0.3}@* Saved in: @code{General.OptionsFileName} @item Mesh.OptimizeNetgen diff --git a/doc/texinfo/shortcuts.texi b/doc/texinfo/shortcuts.texi index 1b10fda48f58c80295882d60285d4a6f6d32a018..151e945e4ebb13a393d12ea2bebbd4baaef1c163 100644 --- a/doc/texinfo/shortcuts.texi +++ b/doc/texinfo/shortcuts.texi @@ -24,14 +24,24 @@ Mesh surfaces Mesh volumes @item Escape Cancel lasso zoom/selection, toggle mouse selection ON/OFF +@item e +End/accept selection in geometry creation mode @item g Go to geometry module @item m Go to mesh module @item p Go to post-processing module +@item q +Abort selection in geometry creation mode @item s Go to solver module +@item x +Freeze x coordinate in geometry creation mode +@item y +Freeze y coordinate in geometry creation mode +@item z +Freeze z coordinate in geometry creation mode @item Shift+a Bring all windows to front @item Shift+g @@ -52,6 +62,8 @@ Show post-processing view options Enable full mouse selection @item Ctrl+d Attach/detach menu +@item Ctrl+e +Export project @item Ctrl+f Enter full screen @item Ctrl+i @@ -71,7 +83,7 @@ Quit @item Ctrl+r Rename project file @item Ctrl+s -Save file as +Save mesh in default format @item Shift+Ctrl+c Show clipping plane window @item Shift+Ctrl+h @@ -84,8 +96,6 @@ Show manipulator window Show option window @item Shift+Ctrl+o Merge file(s) -@item Shift+Ctrl+s -Save mesh in default format @item Shift+Ctrl+u Show plugin window @item Shift+Ctrl+v diff --git a/tutorial/t1.geo b/tutorial/t1.geo index a53f0bd5db648f6786f452d6cf04d3b923216b5a..44124a137ef85eae208d9156f1fae438fc6c10a5 100644 --- a/tutorial/t1.geo +++ b/tutorial/t1.geo @@ -81,6 +81,19 @@ Physical Surface("My surface") = {1} ; // label "My third line (physical id 5)". And finally, all the triangular // elements resulting from the discretization of surface 6 will be given an // automatic physical id associated with the label "My surface"). - +// // Note that if no physical entities are defined, then all the elements in the // mesh will be saved "as is", with their default orientation. + +// Starting with Gmsh 3.0, models can also be built using constructive solid +// geometry. Instead of the built-in geometry kernel, you need to use the +// OpenCASCADE kernel: +// +// SetFactory("OpenCASCADE"); +// +// In addition to the "bottom-up" geometry commands, you can now use "top-down" +// commands, like e.g. +// +// Rectangle(2) = {.2, 0, 0, 0.1, 0.3}; +// +// See tutorial/t16.geo for an example, and demos/boolean for more. diff --git a/tutorial/t16.geo b/tutorial/t16.geo new file mode 100644 index 0000000000000000000000000000000000000000..390e0d81a7362e774f4a340b91647cc017980ee3 --- /dev/null +++ b/tutorial/t16.geo @@ -0,0 +1,34 @@ +/********************************************************************* + * + * Gmsh tutorial 16 + * + * Constructive Solid Geometry, OpenCASCADE geometry kernel + * + *********************************************************************/ + +// Instead of constructing a model in a bottom-up fashion with Gmsh's built-in +// geometry kernel, starting with version 3 Gmsh allows you to directly use +// alternative geometry kernels. Let us use the OpenCASCADE kernel: + +SetFactory("OpenCASCADE"); + +// And let's build the same model as in t5.geo, but using constructive solid +// geometry: + +Block(1) = {0,0,0, 1,1,1}; +Block(2) = {0,0,0, 0.5,0.5,0.5}; +BooleanDifference(3) = { Volume{1}; Delete; }{ Volume{2}; Delete; }; +x = 0 ; y = 0.75 ; z = 0 ; r = 0.09 ; +For t In {1:5} + x += 0.166 ; + z += 0.166 ; + Sphere(3 + t) = {x,y,z,r}; +EndFor +v() = BooleanFragments{ Volume{3}; Delete; }{ Volume{3+1:3+5}; Delete; }; + +s() = Unique(Abs(Boundary{ Volume{v()}; })); +l() = Unique(Abs(Boundary{ Surface{s()}; })); +p() = Unique(Abs(Boundary{ Line{l()}; })); +Characteristic Length{p()} = 0.055; + +// Additional examples are available in the demos/boolean directory. diff --git a/tutorial/t3.geo b/tutorial/t3.geo index 90a4ad33ae92a6868d0d67d34f1b6e3fa48c9d71..a6cacc9e9715b49fe816c92bfd7030479b8c450d 100644 --- a/tutorial/t3.geo +++ b/tutorial/t3.geo @@ -5,7 +5,7 @@ * Extruded meshes, parameters, options * *********************************************************************/ -Geometry.OldNewReg = 1; + // Again, we start by including the first tutorial: Include "t1.geo"; diff --git a/utils/misc/package_onelab.sh b/utils/misc/package_onelab.sh index bb6a7f38487e19e1ca012070c8763aa9159ba1ac..cc67fa93a30192b442bed733491c3dfe5b405dcb 100755 --- a/utils/misc/package_onelab.sh +++ b/utils/misc/package_onelab.sh @@ -88,63 +88,6 @@ if [ $# -lt 1 ] || [ $1 == "win64" ]; then rm -rf onelab-Windows64 fi -if [ $# -lt 1 ] || [ $1 == "win32" ]; then - rm -rf onelab-Windows32* - mkdir onelab-Windows32 - curl -O http://gmsh.info/bin/Windows/gmsh-${GMSH}-Windows32.zip - curl -O http://getdp.info/bin/Windows/getdp-${GETDP}-Windows32c.zip - mv gmsh-${GMSH}-Windows32.zip /tmp - mv getdp-${GETDP}-Windows32c.zip /tmp - unzip -q -o /tmp/gmsh-${GMSH}-Windows32.zip -d /tmp - unzip -q -o /tmp/getdp-${GETDP}-Windows32c.zip -d /tmp - cp /tmp/README.txt onelab-Windows32 - perl -pi -e 's/\n/\r\n/' onelab-Windows32/README.txt - mv /tmp/gmsh-*${GMSH}-Windows/gmsh.exe onelab-Windows32 - mv /tmp/gmsh-*${GMSH}-Windows/onelab.py onelab-Windows32 - mv /tmp/getdp-*${GETDP}-Windows/getdp.exe onelab-Windows32 - mv /tmp/gmsh-*${GMSH}-Windows/LICENSE.txt onelab-Windows32/LICENSE.txt - echo "\n\n" >> onelab-Windows32/LICENSE.txt - cat /tmp/getdp-*${GETDP}-Windows/LICENSE.txt >> onelab-Windows32/LICENSE.txt - mv /tmp/gmsh-*${GMSH}-Windows/CREDITS.txt onelab-Windows32/CREDITS.txt - echo "\n\n" >> onelab-Windows32/CREDITS.txt - cat /tmp/getdp-*${GETDP}-Windows/CREDITS.txt >> onelab-Windows32/CREDITS.txt - mv /tmp/getdp-*${GETDP}-Windows/templates onelab-Windows32 - mv /tmp/gmsh-*${GMSH}-Windows/tutorial onelab-Windows32 - cp -R /tmp/models onelab-Windows32 - rm -rf /tmp/gmsh-* - rm -rf /tmp/getdp-* - zip -r onelab-Windows32.zip onelab-Windows32 - rm -rf onelab-Windows32 -fi - -if [ $# -lt 1 ] || [ $1 == "linux32" ]; then - rm -rf onelab-Linux32* - mkdir onelab-Linux32 - curl -O http://gmsh.info/bin/Linux/gmsh-${GMSH}-Linux32.tgz - curl -O http://getdp.info/bin/Linux/getdp-${GETDP}-Linux32c.tgz - mv gmsh-${GMSH}-Linux32.tgz /tmp - mv getdp-${GETDP}-Linux32c.tgz /tmp - tar zxvf /tmp/gmsh-${GMSH}-Linux32.tgz -C /tmp - tar zxvf /tmp/getdp-${GETDP}-Linux32c.tgz -C /tmp - cp /tmp/README.txt onelab-Linux32 - mv /tmp/gmsh-*${GMSH}-Linux/bin/gmsh onelab-Linux32 - mv /tmp/gmsh-*${GMSH}-Linux/bin/onelab.py onelab-Linux32 - mv /tmp/getdp-*${GETDP}-Linux/bin/getdp onelab-Linux32 - mv /tmp/gmsh-*${GMSH}-Linux/share/doc/gmsh/LICENSE.txt onelab-Linux32/LICENSE.txt - echo "\n\n" >> onelab-Linux32/LICENSE.txt - cat /tmp/getdp-*${GETDP}-Linux/share/doc/getdp/LICENSE.txt >> onelab-Linux32/LICENSE.txt - mv /tmp/gmsh-*${GMSH}-Linux/share/doc/gmsh/CREDITS.txt onelab-Linux32/CREDITS.txt - echo "\n\n" >> onelab-Linux32/CREDITS.txt - cat /tmp/getdp-*${GETDP}-Linux/share/doc/getdp/CREDITS.txt >> onelab-Linux32/CREDITS.txt - mv /tmp/getdp-*${GETDP}-Linux/share/doc/getdp/templates onelab-Linux32 - mv /tmp/gmsh-*${GMSH}-Linux/share/doc/gmsh/tutorial onelab-Linux32 - cp -R /tmp/models onelab-Linux32 - rm -rf /tmp/gmsh-* - rm -rf /tmp/getdp-* - zip -r onelab-Linux32.zip onelab-Linux32 - rm -rf onelab-Linux32 -fi - if [ $# -lt 1 ] || [ $1 == "linux64" ]; then rm -rf onelab-Linux64* mkdir onelab-Linux64 diff --git a/utils/misc/release_gmsh_getdp.sh b/utils/misc/release_gmsh_getdp.sh index 6eb8976bade07d02ea06dd8912e6e8b5f4da2234..c66896f3f926d1c314d90e4599e01d784baf30be 100755 --- a/utils/misc/release_gmsh_getdp.sh +++ b/utils/misc/release_gmsh_getdp.sh @@ -2,7 +2,7 @@ if [ $# -lt 1 ]; then echo "Usage: $0 arch [gmsh|getdp]" 1>&2; - echo " with arch in [mac,linux32,linux64,win32,win64][_test]" 1>&2; + echo " with arch in [mac,linux64,win64][_test]" 1>&2; exit 1; fi diff --git a/utils/nightly/gmsh.ctest b/utils/nightly/gmsh.ctest index 3afce8bc8d4f25ecec32f32e66db53dcd345139f..a8d01fc77caec14bff947aa783643dd57099fdae 100644 --- a/utils/nightly/gmsh.ctest +++ b/utils/nightly/gmsh.ctest @@ -27,7 +27,7 @@ set(CTEST_GIT_REPOS http://gitlab.onelab.info/gmsh/gmsh.git) if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}") set(CTEST_CHECKOUT_COMMAND - "${CTEST_GIT_COMMAND} pull ${CTEST_GIT_REPOS} ${CTEST_SOURCE_DIRECTORY}") + "${CTEST_GIT_COMMAND} clone ${CTEST_GIT_REPOS} ${CTEST_SOURCE_DIRECTORY}") endif(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}") set(CTEST_UPDATE_COMMAND "${CTEST_GIT_COMMAND}") diff --git a/utils/nightly/gmsh_linux32.ctest b/utils/nightly/gmsh_linux32.ctest deleted file mode 100644 index e20cef40785576f0dc6ec8470d76d24de274b346..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_linux32.ctest +++ /dev/null @@ -1,26 +0,0 @@ -# Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle -# -# See the LICENSE.txt file for license information. Please report all -# bugs and problems to the public mailing list <gmsh@onelab.info>. - -set(CTEST_CMAKE_COMMAND "/usr/bin/cmake") -set(CTEST_CMAKE_GENERATOR "Unix Makefiles") - -set(WEB_BIN "geuzaine@onelab.info:/home/www/gmsh.info/bin/Linux") - -set(WITH_TEST TRUE) # run the tests? -set(WITH_COVERAGE FALSE) # check code coverage? -set(WITH_MEMCHECK FALSE) # check memory with valgrind? - -################################################################################# -set(CTEST_BUILD_NAME "Linux32") -set(CTEST_BINARY_DIRECTORY "$ENV{HOME}/src/gmsh/bin") -set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}") -set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/opencascade;/usr/local") -set(OPT "${OPT} -DENABLE_NATIVE_FILE_CHOOSER:bool=FALSE") -set(OPT "${OPT} -DPETSC_ARCH=linux_complex_mumps_seq") -set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.5.2") -set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.5.2") -set(CTEST_BUILD_OPTIONS ${OPT}) -include(gmsh.ctest) -upload_package(${WEB_BIN} Linux 32 .tar.gz .tgz) diff --git a/utils/nightly/gmsh_linux32_nightly.cron b/utils/nightly/gmsh_linux32_nightly.cron deleted file mode 100644 index 02d78082d7896bb8ea7043bc1b46c461b38b83b0..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_linux32_nightly.cron +++ /dev/null @@ -1,4 +0,0 @@ -# -# this will launch a new build every night at 1h01 -# -1 1 * * * cd ${HOME}/src/gmsh/utils/nightly && /usr/bin/ctest -S gmsh_linux32_nightly.ctest -VV > ${HOME}/src/gmsh/nightly.log 2>&1 diff --git a/utils/nightly/gmsh_linux32_nightly.ctest b/utils/nightly/gmsh_linux32_nightly.ctest deleted file mode 100644 index f5e62bfcc6a1175e8c740147e099703737d05751..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_linux32_nightly.ctest +++ /dev/null @@ -1,9 +0,0 @@ -# Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle -# -# See the LICENSE.txt file for license information. Please report all -# bugs and problems to the public mailing list <gmsh@onelab.info>. - -set(CTEST_NIGHTLY_START_TIME "22:00:00 UTC") -set(CDASH_MODEL "Nightly") -set(EXTRA_VERSION "-git") -include(gmsh_linux32.ctest) diff --git a/utils/nightly/gmsh_linux32_test.ctest b/utils/nightly/gmsh_linux32_test.ctest deleted file mode 100644 index bf6963f1f01c7441ba51325686d4d193636e26dc..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_linux32_test.ctest +++ /dev/null @@ -1,7 +0,0 @@ -# Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle -# -# See the LICENSE.txt file for license information. Please report all -# bugs and problems to the public mailing list <gmsh@onelab.info>. - -set(EXTRA_VERSION "-git") -include(gmsh_linux32.ctest) diff --git a/utils/nightly/gmsh_linux64.ctest b/utils/nightly/gmsh_linux64.ctest index 64204778bd4bcdea71e1cf428281c4eecc2264fb..fac26dc6ccf75e7ff9785d61502d223c4aa4b665 100644 --- a/utils/nightly/gmsh_linux64.ctest +++ b/utils/nightly/gmsh_linux64.ctest @@ -3,7 +3,7 @@ # See the LICENSE.txt file for license information. Please report all # bugs and problems to the public mailing list <gmsh@onelab.info>. -set(CTEST_CMAKE_COMMAND "/usr/bin/cmake") +set(CTEST_CMAKE_COMMAND "/usr/local/bin/cmake") set(CTEST_CMAKE_GENERATOR "Unix Makefiles") set(WEB_BIN "geuzaine@onelab.info:/home/www/gmsh.info/bin/Linux") @@ -23,9 +23,9 @@ endif(BUILD_DYNAMIC) set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}") set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/opencascade;/usr/local") set(OPT "${OPT} -DENABLE_NATIVE_FILE_CHOOSER:bool=FALSE") -set(OPT "${OPT} -DPETSC_ARCH=linux_complex_mumps_seq") -set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.5.2") -set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.5.2") +set(OPT "${OPT} -DPETSC_ARCH=complex_mumps_seq") +set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.7.5") +set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.7.3") if(BUILD_DYNAMIC) set(OPT "${OPT} -DENABLE_BUILD_DYNAMIC=1 -DENABLE_WRAP_PYTHON=1") set(OPT "${OPT} -DENABLE_GMSHPY_SOURCE_PACKAGE=1") diff --git a/utils/nightly/gmsh_linux64_coverage.ctest b/utils/nightly/gmsh_linux64_coverage.ctest index 029a23b1378418e85f7c270858aa2f02520e8e24..c76038b1a955a3c99272002949d9b1b1d695d2b4 100644 --- a/utils/nightly/gmsh_linux64_coverage.ctest +++ b/utils/nightly/gmsh_linux64_coverage.ctest @@ -3,7 +3,7 @@ # See the LICENSE.txt file for license information. Please report all # bugs and problems to the public mailing list <gmsh@onelab.info>. -set(CTEST_CMAKE_COMMAND "/usr/bin/cmake") +set(CTEST_CMAKE_COMMAND "/usr/local/bin/cmake") set(CTEST_CMAKE_GENERATOR "Unix Makefiles") set(WITH_TEST TRUE) # run the tests? @@ -21,9 +21,9 @@ set(OPT "${OPT} -DENABLE_FLTK=0") #set(OPT "${OPT} -DENABLE_VORO3D=0") set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/opencascade;/usr/local") set(OPT "${OPT} -DENABLE_NATIVE_FILE_CHOOSER:bool=FALSE") -set(OPT "${OPT} -DPETSC_ARCH=linux_complex_mumps_seq") -set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.5.2") -set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.5.2") +set(OPT "${OPT} -DPETSC_ARCH=complex_mumps_seq") +set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.7.5") +set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.7.3") set(CTEST_BUILD_OPTIONS ${OPT}) include(gmsh.ctest) # also remove build files here to save space diff --git a/utils/nightly/gmsh_linux64_nightly.cron b/utils/nightly/gmsh_linux64_nightly.cron index dd7473be1e22f9dc78721171f708843d6fabb15b..813a7d21a447b935c175f3e22cd0ed895ada7af3 100644 --- a/utils/nightly/gmsh_linux64_nightly.cron +++ b/utils/nightly/gmsh_linux64_nightly.cron @@ -1,4 +1,4 @@ # # this will launch a new build every night at 1h01 # -1 1 * * * cd ${HOME}/src/gmsh/utils/nightly && /usr/bin/ctest -S gmsh_linux64_nightly.ctest -VV > ${HOME}/src/gmsh/nightly.log 2>&1 +1 1 * * * cd ${HOME}/src/gmsh/utils/nightly && /usr/local/bin/ctest -S gmsh_linux64_nightly.ctest -VV > ${HOME}/src/gmsh/nightly.log 2>&1 diff --git a/utils/nightly/gmsh_linux64_nightly.ctest b/utils/nightly/gmsh_linux64_nightly.ctest index 3fdad82e5c5c826e88af2f94a28be372b118b0af..abdaeedee539fe815c26b04105fbdb20539fe946 100644 --- a/utils/nightly/gmsh_linux64_nightly.ctest +++ b/utils/nightly/gmsh_linux64_nightly.ctest @@ -8,9 +8,5 @@ set(CDASH_MODEL "Nightly") set(EXTRA_VERSION "-git") include(gmsh_linux64.ctest) -set(EXTRA_VERSION "-dynamic-git") -set(BUILD_DYNAMIC true) -include(gmsh_linux64.ctest) - set(EXTRA_VERSION "-coverage-git") include(gmsh_linux64_coverage.ctest) diff --git a/utils/nightly/gmsh_linux64_test.ctest b/utils/nightly/gmsh_linux64_test.ctest index 88a26467c01f90c9ae7a0e3f21111c434488ddc5..2ed9354acf2d05bde9b765169777f01919330097 100644 --- a/utils/nightly/gmsh_linux64_test.ctest +++ b/utils/nightly/gmsh_linux64_test.ctest @@ -5,7 +5,3 @@ set(EXTRA_VERSION "-git") include(gmsh_linux64.ctest) - -set(EXTRA_VERSION "-dynamic-git") -set(BUILD_DYNAMIC true) -include(gmsh_linux64.ctest) diff --git a/utils/nightly/gmsh_mac.ctest b/utils/nightly/gmsh_mac.ctest index 3df439743fd5b9d9e85f89905ecc2329f5192483..591610f2930b489fa13817767c91177ff205dda4 100644 --- a/utils/nightly/gmsh_mac.ctest +++ b/utils/nightly/gmsh_mac.ctest @@ -22,11 +22,10 @@ else(BUILD_DYNAMIC) endif(BUILD_DYNAMIC) set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}") set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/opencascade;/usr/local") -set(OPT "${OPT} -DCMAKE_CXX_FLAGS=-mmacosx-version-min=10.6") set(OPT "${OPT} -DENABLE_CAIRO=0") -set(OPT "${OPT} -DPETSC_ARCH=macosx_complex_mumps_seq") -set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.5.2") -set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.5.2") +set(OPT "${OPT} -DPETSC_ARCH=complex_mumps_seq") +set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.7.5") +set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.7.3") set(OPT "${OPT} -DBLAS_LAPACK_LIBRARIES=/usr/local/lib/libopenblas.a") if(BUILD_DYNAMIC) set(OPT "${OPT} -DENABLE_BUILD_DYNAMIC=1 -DENABLE_WRAP_PYTHON=1") diff --git a/utils/nightly/gmsh_mac_nightly.ctest b/utils/nightly/gmsh_mac_nightly.ctest index 4149bff3e85db4840efcd5efa603ccc60b2954c4..ef56f736bfb075ae8e84ef633f6933e22f5383fe 100644 --- a/utils/nightly/gmsh_mac_nightly.ctest +++ b/utils/nightly/gmsh_mac_nightly.ctest @@ -7,7 +7,3 @@ set(CTEST_NIGHTLY_START_TIME "22:00:00 UTC") set(CDASH_MODEL "Nightly") set(EXTRA_VERSION "-git") include(gmsh_mac.ctest) - -set(EXTRA_VERSION "-dynamic-git") -set(BUILD_DYNAMIC true) -include(gmsh_mac.ctest) diff --git a/utils/nightly/gmsh_mac_test.ctest b/utils/nightly/gmsh_mac_test.ctest index eb8eb0bcc32a5413276c4cb46816bfb16eb327fd..6e2cd88e5a16f539d96e3d65deb69881556f4e79 100644 --- a/utils/nightly/gmsh_mac_test.ctest +++ b/utils/nightly/gmsh_mac_test.ctest @@ -5,7 +5,3 @@ set(EXTRA_VERSION "-git") include(gmsh_mac.ctest) - -set(EXTRA_VERSION "-dynamic-git") -set(BUILD_DYNAMIC true) -include(gmsh_mac.ctest) diff --git a/utils/nightly/gmsh_win32.ctest b/utils/nightly/gmsh_win32.ctest deleted file mode 100644 index fd09bd315ea549bc9a9d4799ec6db2ddb81b969e..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_win32.ctest +++ /dev/null @@ -1,37 +0,0 @@ -# Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle -# -# See the LICENSE.txt file for license information. Please report all -# bugs and problems to the public mailing list <gmsh@onelab.info>. - -set(CTEST_CMAKE_COMMAND "cmake") -set(CTEST_CMAKE_GENERATOR "Unix Makefiles") - -set(WEB_BIN "geuzaine@onelab.info:/home/www/gmsh.info/bin/Windows") - -set(WITH_TEST FALSE) # run the tests? - disable this for now: slow on virtual machine -set(WITH_COVERAGE FALSE) # check code coverage? -set(WITH_MEMCHECK FALSE) # check memory with valgrind? - -# Before you can configure Gmsh on cygwin with the mingw compilers, you need to -# fix cmake 2.8.9's FindOpenGL.cmake module, by replacing if(WIN32 OR CYGWIN) by -# if(WIN32) on line 49 -# -# With mingw gcc 4.7 (we currently use gcc 4.5 on ace36), you should -# 1) add -DCMAKE_RC_COMPILER=/usr/bin/i686-w64-mingw32-windres.exe -# 2) remove -mno-cygwin from FLTK's configure script: gcc 4.7 does not accept -# it anymore - -################################################################################# -set(CTEST_BUILD_NAME "Win32") -set(CTEST_BINARY_DIRECTORY "$ENV{HOME}/src/gmsh/bin") -set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}") -set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/opencascade;/usr/local;/usr/i686-w64-mingw32/sys-root/mingw") -set(OPT "${OPT} -DCMAKE_C_COMPILER=/usr/bin/i686-w64-mingw32-gcc.exe") -set(OPT "${OPT} -DCMAKE_CXX_COMPILER=/usr/bin/i686-w64-mingw32-g++.exe") -set(OPT "${OPT} -DCMAKE_Fortran_COMPILER=/usr/bin/i686-w64-mingw32-gfortran.exe") -set(OPT "${OPT} -DPETSC_ARCH=win32_complex_mumps_seq") -set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.5.2") -set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.5.2") -set(CTEST_BUILD_OPTIONS ${OPT}) -include(gmsh.ctest) -upload_package(${WEB_BIN} Windows 32 .zip .zip) diff --git a/utils/nightly/gmsh_win32_nightly.bat b/utils/nightly/gmsh_win32_nightly.bat deleted file mode 100755 index fffe6b9b13d7b4ba2e98c1760b22e7a1450baed3..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_win32_nightly.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off - -C: -chdir C:\cygwin\bin - -bash --login -c "cd ${HOME}/src/gmsh/utils/nightly && ctest -S gmsh_win32_nightly.ctest -VV > ${HOME}/src/gmsh/nightly.log 2>&1" diff --git a/utils/nightly/gmsh_win32_nightly.ctest b/utils/nightly/gmsh_win32_nightly.ctest deleted file mode 100644 index e070d16aa5604b5a204d3c81ce5414d3095d3264..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_win32_nightly.ctest +++ /dev/null @@ -1,9 +0,0 @@ -# Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle -# -# See the LICENSE.txt file for license information. Please report all -# bugs and problems to the public mailing list <gmsh@onelab.info>. - -set(CTEST_NIGHTLY_START_TIME "22:00:00 UTC") -set(CDASH_MODEL "Nightly") -set(EXTRA_VERSION "-git") -include(gmsh_win32.ctest) diff --git a/utils/nightly/gmsh_win32_test.ctest b/utils/nightly/gmsh_win32_test.ctest deleted file mode 100644 index d10e7e4740d9843c6df8983a93ab009ed627072a..0000000000000000000000000000000000000000 --- a/utils/nightly/gmsh_win32_test.ctest +++ /dev/null @@ -1,7 +0,0 @@ -# Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle -# -# See the LICENSE.txt file for license information. Please report all -# bugs and problems to the public mailing list <gmsh@onelab.info>. - -set(EXTRA_VERSION "-git") -include(gmsh_win32.ctest) diff --git a/utils/nightly/gmsh_win64.ctest b/utils/nightly/gmsh_win64.ctest index 5021f28a1b09d35704afa832b960df79d068749e..e179db80d00ba45cac7953db65b5578d130f63f3 100644 --- a/utils/nightly/gmsh_win64.ctest +++ b/utils/nightly/gmsh_win64.ctest @@ -27,8 +27,8 @@ set(OPT "${OPT} -DCMAKE_CXX_COMPILER=/usr/bin/x86_64-w64-mingw32-g++.exe") set(OPT "${OPT} -DCMAKE_Fortran_COMPILER=/usr/bin/x86_64-w64-mingw32-gfortran.exe") set(OPT "${OPT} -DCMAKE_RC_COMPILER=/usr/bin/x86_64-w64-mingw32-windres.exe") set(OPT "${OPT} -DPETSC_ARCH=win64_complex_mumps_seq") -set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.5.2") -set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.5.2") +set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.7.5") +set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.7.3") if(BUILD_DYNAMIC) set(OPT "${OPT} -DENABLE_BUILD_DYNAMIC=1") endif(BUILD_DYNAMIC) diff --git a/utils/nightly/gmsh_win64_nightly.bat b/utils/nightly/gmsh_win64_nightly.bat index 05a7f260e99ec2a0649623f52bb6d3efba4658c0..e2c78e5146ac3196546787de9ca4ad4cf14f31f9 100755 --- a/utils/nightly/gmsh_win64_nightly.bat +++ b/utils/nightly/gmsh_win64_nightly.bat @@ -1,7 +1,7 @@ @echo off C: -chdir C:\cygwin\bin +chdir C:\cygwin64\bin bash --login -c "cd ${HOME}/src/gmsh/utils/nightly && ctest -S gmsh_win64_nightly.ctest -VV > ${HOME}/src/gmsh/nightly.log 2>&1" diff --git a/utils/nightly/gmsh_win64_nightly.ctest b/utils/nightly/gmsh_win64_nightly.ctest index 18620b1a9859bfe4c4441b343efa20514585d8c0..4d16df2cdd2344fbcd0fe03280b502be4acb2a06 100644 --- a/utils/nightly/gmsh_win64_nightly.ctest +++ b/utils/nightly/gmsh_win64_nightly.ctest @@ -7,7 +7,3 @@ set(CTEST_NIGHTLY_START_TIME "22:00:00 UTC") set(CDASH_MODEL "Nightly") set(EXTRA_VERSION "-git") include(gmsh_win64.ctest) - -set(EXTRA_VERSION "-dynamic-git") -set(BUILD_DYNAMIC true) -include(gmsh_win64.ctest) diff --git a/utils/nightly/gmsh_win64_test.ctest b/utils/nightly/gmsh_win64_test.ctest index bd852fdc4e97fa23ec59db9cac116e53da7bdd12..be7504a2501202ee1603974cbfa9743bfd26e4d1 100644 --- a/utils/nightly/gmsh_win64_test.ctest +++ b/utils/nightly/gmsh_win64_test.ctest @@ -5,7 +5,3 @@ set(EXTRA_VERSION "-git") include(gmsh_win64.ctest) - -set(EXTRA_VERSION "-dynamic-git") -set(BUILD_DYNAMIC true) -include(gmsh_win64.ctest)